From 241bdd4b9730dc7359758c6577a4538f08155e48 Mon Sep 17 00:00:00 2001 From: Mercybudda <708967537@qq.com> Date: Thu, 7 Sep 2023 18:40:04 +0800 Subject: [PATCH 1/4] BEP-283: Segmented History Data Maintenance --- BEPs/BEP283.md | 124 +++++++++++++++++++++++++++ BEPs/assets/bep-283/Data_Segment.png | Bin 0 -> 161731 bytes 2 files changed, 124 insertions(+) create mode 100644 BEPs/BEP283.md create mode 100644 BEPs/assets/bep-283/Data_Segment.png diff --git a/BEPs/BEP283.md b/BEPs/BEP283.md new file mode 100644 index 00000000..dced2996 --- /dev/null +++ b/BEPs/BEP283.md @@ -0,0 +1,124 @@ +
+ BEP: 283 + Title: Segmented History Data Maintenance + Status: Draft + Type: Standards + Created: 2023-09-07 ++ +# BEP-283: Segmented History Data Maintenance + +- [BEP-283: Segmented History Data Maintenance]((https://github.com/bnb-chain/BEPs/pull/283)) + - [1. Summary](#1-summary) + - [2. Motivation](#2-motivation) + - [3. Specification](#3-specification) + - [3.1 Asset Reconciliation](#31-asset-reconciliation) + - [3.2 Halt on Reconciliation Error](#32-halt-on-reconciliation-error) + - [4. License](#4-license) + +## 1. Summary + +This BEP proposes a practical solution to address the problem of increasing history data storage on the BSC(BNB Smart Chain) for full nodes, so they only need to maintain a limited range of blocks. + +## 2. Motivation + +The history data includes block header, body and receipt, they are useless to execute the latest blocks. A recent storage profile on Jul-02-2023 shows that the size of history data has reached ~1288 GB, which makes it a big burden to run a BSC full node. As BSC keeps generating new blocks, the history data also keeps growing. +Actually the history data can be maintained by some archive node or by a DA layer, a full node does not need to keep a full copy of the history data. But simply deleting the history data is also not acceptable, it will make the P2P network in chaos and hard to sync. +We need to make a rule so that full nodes only need to keep a recent period of blocks, like several months, it would be better to keep the bounded history data size within 200GB. It could reduce both node’s storage pressure and the network traffic cost. + + +## 3. Specification +| Parameter | Value | Description | +| ----------------- | ----------- | ------------------------ | +| BoundStartBlock | 31,268,530 | The starting block height of the first segment, block 31,268,530 was produced on Aug-29-2023, 3 years after the BSC genesis block. | +| HistorySegmentLength | 2,592,000 | assume 1 block for every 3 second, 2,592,000 blocks will be produced in 90 days. | + +### 3.1 General Workflow +![overview](./assets/bep-283/Data_Segment.png) + +The history data will be divided into several segments, the 1st segment is segment_0, which is from genesis to BoundStartBlock-1, then following segments will have the same length: HistorySegmentLength. +``` +HistorySegment_0 = [0, BoundStartBlock) +HistorySegment_1 = [BoundStartBlock, BoundStartBlock+HistorySegmentLength) +... +HistorySegment_N = [BoundStartBlock+(N-1)*HistorySegmentLength, BoundStartBlock+N*HistorySegmentLength) +``` +The BSC node only needs to maintain the latest 2 segments, in case of block reorg, the current segment number is calculated based on the “finalized” block. +``` +ImmutabilityThreshold = 90000 + +func GetFinalizedBlock() { + blockByAttestation := GetFinalizedByAttestation() + blockByThreshold := GetCurrentBlockNumber() - ImmutabilityThreshold + return max(blockByAttestation, blockByThreshold) +} + +func GetCurrentSegmentIndex(blockNum int) { + if blockNum < BoundStartBlock { + return 0 + } + boundBlocks = blockNum - BoundStartBlock + return (boundBlocks/HistorySegmentLength) + 1 +} + +finalizedBlock = GetFinalizedBlock() +segIndex = GetCurrentSegmentIndex(finalizedBlock) +if segIndex > = 2 { + // the segments before (segIndex - 2) can be pruned +} + +``` + +### 3.2 Prune + +The offline block prune would need to be boundary aligned and leave the most recent 2 segments. The most recent segment is determined by the finalized block, since FastFinality is to be enabled, we can take use of the feature to determine the finalized block and then get the current segment index. + +#### 3.2.1 Prune details +Since there’s already offline block prune flags in BSC, we can reuse most of the logic of this flag. Instead of letting users specify the amount to prune, we only keep the most recent two segments of blocks by default. But user can still specify how many blocks they’d like to reserve by passing the parameter. +``` +// Reuse the flag --block-amount-reserved +// backUp the OldDb for only the most recent 2 segements +segmentsStartNumber := BoundStartBlock + (segIndex - 2) * HistorySegmentLength +func (p *BlockPruner) backUpOldDb(segmentsStartNumber) { + for block := segmentsStartNumber; block <= headerNumebr; block++ { + // Write into the new DB instance +} +} +// Replace the old DB with new DB and delete the old DB files. + +``` + +### 3.3 Node Sync + It would be difficult to sync from genesis, since most nodes may choose to not preserve these old blocks, but it is still possible as long as some nodes still keep the whole history data. +There could have 2 approaches to do sync after this proposal +directly download a snapshot of a recent state, from a snapshot service provider or DA layer like GreenField +Segment based snap sync: user can take the boundary blockhash as the new `GenesisHash` and start from it directly. + +### 3.4 Data Availability +Some of the nodes like archive nodes would keep maintaining the whole history data. +And meanwhile, could take use of a DA layer, like greenfield to make sure the whole block data is available. + +## 4. Rationale +### 4.1 BoundStartBlock & HistorySegmentLength +As the current history data is already very large, we prefer to enable this proposal faster, so +BoundStartBlock is still more than 1 month ahead, it could be an acceptable date. +HistorySegmentLength, we did a profile, for the past 6 months(Jan-2023 to July 2023), ~1.2GB history data was generated per day on average. But it is somehow low traffic during this period. Traffic volume could be 3 times if the bull market starts, that is ~3.6GB per day. To keep the historical data size within 500GB in the bull market and 200GB in the bear market, 90 days could be a reasonable value. + +### 4.2 Why Segment The History Data +No Big fundamental differences to the EIP-4444 proposal +Pros: aligned +easier to determine the current living blocks? +easier to provide the snapshot download service? + +## 5. Forward Compatibility +### 5.1 Portal Network +Portal network is a hot topic to solve the storage pressure, once it is ready, it is possible that portal network can replace this proposal if it has a more applicable solution. + +## 6. Backward Compatibility +### 6.1 Archive Node +If you run an archive node, you can just keep all the history data, no impact to its business. +### 6.2 RPC API +If users query history data that have been pruned, could return a new error code to show it is expired and removed. + +## License +The content is licensed under the [CC0](https://creativecommons.org/publicdomain/zero/1.0/) license. diff --git a/BEPs/assets/bep-283/Data_Segment.png b/BEPs/assets/bep-283/Data_Segment.png new file mode 100644 index 0000000000000000000000000000000000000000..be312b710159ba2e632d311b9ddd577d8aa99168 GIT binary patch literal 161731 zcmZ6zWk6KX_bz;f5)qIXTDpc%N@)-fknWI{Mnp=aV?;vfMx+}7>25{3OF+82yYKe* zkNe(tzNq7HX3n0y)_Q95MMdc)4i-5U1VK2mGLmW#gdqk&us4_};2C-A_ek&u>U#-U z4NOeTsRiYE2%>>xCB-#dleP_9T#2N{pO<^cyVHu$qDjbR-cQGr!S~&l<50_zwewYz z6qHfln4s|{4odUI*{@75rlFBi2_ndkiSRpie%}*!aZ6gJA5~vIZexp5)7;U)JS`&h zezn(bAW1|B-8cjWL6WM={QXu>eX(6rNTh~db9UZ;#U9tt&`?ssDF6#w!jlk8R#IxQ zC@*F2DJyI(AT>?w%NgGy3y5S(FDX$e9
5CxMHOCXR>paacNKjjP?g z(NGD36qurOb91LPEkn{qHW2SBbbrLyq97L+O*l9>f{<+{4)5Q;|1PGhtLy5@FNK`N z8XkwkRN-zZxyKr^va-g;##UB&NzlL%B({MWwnQ3`UJ|*)k7WR(VP+0ACN(lL3T%}9 zmNve%GLe^3BpHZALbU~tI$)6h0B>TbF=1RneQ_O7wQ4)8LTGF1mO7;2>C$jr05W(QM+4 zTZB@ocxXYf?8FZSj$*hZB144-==~7RIYP=%XJ_aB*;($>5$j5|&H%0|-5+ovHY}(m zmQ8zetbo}?6AvwAZ3912t`0@a!otGdzGPZcO0*!Ct;2!TR6y{%WhM<~24eUJLlE6e zf0{`a6AF8eT479d^wQGO3m0}cuY@_a8VQGC$d@mX^{hb|eHNK9Y3trZ7wkbMy1L|T z&)LGngPb%&h}nsQ5kW;1S@0K3Z3Ls`s$9P~*x8SdkFydZMf Ie&@_^pwPg>hm8a1O*3kwa?DZ;uaH_s?`n4@~RoapcXUk+WPt) zO;r{L`s7gJU@5R;d_(&mOxM0=W?=Z8tvRUo(?K8Hnxv#(67ur3SZVIz(Gk9cV`+hj zyWgN@-xU+Iyu5sVb)`O$H;fsymq=<_KFN-QS5`QdCjLo|6Z`$`^~Ln`^rn{NCk!0& zr&fb$;;qeat%8%`Z27St{{NoSK&e2B!@zlh*2)> rC0so`M&cv>UF5&7HZMryhnPzI&t+erO=br?ks!*t+tAF@fM^+Z$h8(&E9_`A zA#I9;80BIqc-z;nq_weQO4hG-Y`#0AQ(F zH;vZ&D^xXqo;;L}jHcp^mHN5}*1Sa{Uu(W!nM1Lg8=DzSq}UkUMQRV>`Hh6he&iz5 zabGuoj+gvZMW>A}u+x61-9fODPG4^ggWA7tA2Kqt2GJQHxBn=d9ylVzs*d1Nk%s?*ePLx16?XA# zNaAya?=K7Y`$0A_b!tk;C4NB)SrV0}8k6dnw8Qx9J%WW&k)gjac@uy9a*9pClp{oT zTVB%3#$=7e)}VJYMHX4m$Ltyv1cW-34Jo22ol8sc62Js0SWuQDvuc<&zGRlG_VLJ1 z$nc?fU8`rY8E2XpsW_=D^UTQ2SNLd|TE^Ne^M{E_YhY1uwFl8xX6WUWBop;@a$-;J zq)^!*E~RS=<{uespl0*fXvk`peW{n9l;QY@5Ht4WF{8g#R1(8O6QpoUsh+e6LiPKW zYZw_yYWmDZgSsWU<0Dneh> O&Gdi<-kc74gOhAaAtYrj!-NtX&>SLL*Fh7^t2s#|q6|%>t zNXAzQp(qf$XKBc+iGgau^2m_U_TzQxFKIdL{M-VQ2`v_B8tcyc5o@Zf3$tHnmz6Fr z6f+QNXruwOxppcUT$e*qpqvN1=s$)fUEoP9JJ%9q@eX@@ZnBHah+V&@$NvURPWa`x z3O9<>3voPsR T{^Gg{HH z8D1yYC4G6mtXAhsKnB0)Jrcf&bczaf64HiItbC>UIEz(>T$E9qkU1#&9Rg>=7gR-C zrxf4)(0?Kmj$O80_fj0f%l8Wn;$U$!1Ff3RZnjXbx`@YSbi?U5 zi*p8(b%QlBba5e_TY^ad=E$L1W q}MbkYD-jk3R!okzmSp-w!$*1W8O#A?3o z9dx;$j(= kB{08iCnewH<*!$`5AoRkGg-2 !t=FZt_+>~C4A{v$Hg(M>;8F#i^g2O?lrohff?8LvN)*Rgvp(YPPOv1 zTRtcbZsfZ!Exn|8=xFp7H1j2V1<=j+kz(++^>r(1>eT<=bZ~DJ<>oG{tNhpI1LTl# zEyHO)HCsqMJUrf}HvDIV{HObCkdOu(?C_ er3WiO6(IonlLRSgXdV+fK8^M1MRKfbU^!#dY$ zq+GyWD4>j8Of4YM 5tb^Ps~rvt;p%X3w2;6&5Dv#P(fN~( zn|1$DhibP=JEkKJgW!Y>Z}-pl{iFbAW}r&F7{-Ug0Av9dlwm^z5J;&i5(U{*Oxif{ zM$Jj7W?ALs AyUS;4lEPY&6(EDrwj0 z(KL#U|0Lt3^JCo>CJUeqM>V*IMIk;z&$1!r_6Xis;9iG< o=SHVd zHe^x$-HaYTtvr%bOX*(9+B;r~R?a6TnHf+kX9j|`OjVIHO-371d6bo8oJn4HD6BlL zvZ7vW#W?KgPAK-pCa7tMjCc6{-mrL(Fy`iDo-|TY=-A%h&pC$GHAS1SCE74=pGFhR zj+Gvk4YO&Pg>pIy+1_@}vXKX@3cOL744GNvb9vJDHdqb7;H$&!M?-b08_q-@#`m*x ztmG$bDM)7<`e?2rz|Bv_H;ld>&hSRGr!0m*|3*-jnsH1!9U(UTt-w^f`zj}9TE&ch z<|xlB6JDh%r}73ZgllGJ;@-Yslr=4U&CRfQT!=k6?@17ylvwTv7k1|O7NwT5g7WX~ zcqAU(w^H^k&KrjN5xUDxG}S$t;(zl-He}wcpm+B0N+BgZVy@wDXtL3Q@LQhTNxh-R zw|~`?h1BPhb+-QwRtnC9H&`oq`HfC2fbW?NLm+DR2Q+A3cz_c-In>b!9a8g g8vmb> zzC0OT%Ly4S-`~=8rs={bkeJ&hBMhv;9@TMf3RMf+p$=TC&c~U_IlJD-y^}!)NzhX8 zFk$^x$I;92R>vVLr(RTwSI!PEh5&8^dlVHa`L^12Cf}&Jsm(;SReI5TLq7^FB9qS= zP^&Qd^zSbs>JbOE%LXfQ5$mkXG((z7NT-j6#qaZcy*iioojrI3;UzwEF(cx+rYG)= z`a}d2E4JECQ5x@O**6+0E5F`25rlMS{e~5TP%vq^<+{1Vy@=EXrC2^LUP5AcuByMS zClD7nwSTk6tpf!IN9d!DvR 3qPnn-3L#L7&M J8Lz*e`-Qh;A@C-k-V zFx|jg#hVj z*!c6HsJ&pN5qp|@3{QBS-6^edCNqql#vP)<;+!+Lm4)l*AI%a< $cG2(H-k%m$G|Y%)tTC)vN)LajmiAX?k!Qv5kU-BE9o~hZL@J(*G$BfZ z6Z=LjWss<`n7x-q7QM)R_5Bwm?SYC?OH(KuCTMU!>AOVH{UUFR^bA@;37K!k>3Oty zuQR=r4;pAb*C=?S!d?fgxc)R2grYbWTzJG8MZ7Pwi0Rxw>i?v2WQ*(l_AsO?Rm~_OYg~<9q zW~g%$38N1nktB`?`>;Pj5TC)c?(0KPCD1UFaCkR__u|Sd3yduRl_rdd9@0?h%k8;) z)DMGG!i513lG$;j)}W>n-u5g)xnax3a;If2aD5e$MpdM>l#aNAZ9KpsPx|OySNC}z zllIfk`JgBkJT8nDd!JACZ!kI*9xrQm`;lynV?CJo(j6x@8~vS;rk0>n8B_eCYK|Ey zLy5wr8NoV{t~q0qLR!Oy!yT*Vh{P%k?WK|2-^ Q z;(e^2Ge{{Zcb1maXM+Ck5I&EWC>|fr*DTP@&tWiu7i$%f$Fz-VW`1gQr}RZ+#z+?U zkyGz*pqYQWw&FWALVx@*Tl`Z2lIs-k=0d9R{~gk4KeNR!$wJ#%i{X;^(KFv(#eMiH zMoXdFWpEQXHZ&|^#+Jd&CBQn9d~dm$-3h%@$rujfK9X@rWnUAo!ec$6*CCPK%s*WY zGhtQN6_?gReZ847CpmnJ#C=0xQdwPrl2<0Y*NXDrZ;#hKFz^r)Gi?ty?|(=v_$0wJ zK_;@YU*hAn$FzdIuXd^jp5Hy99sQwK&7A5vEE@Q$Y aQ-FhJA z$VaXxEG%54*efnQ(wGSfIp`0FpIT3p7~S1^dwZ+3Z~ij!*||J7jqV!FQ*BkvOv$94 z($&F}a=5#_VOC1AKX*oQS&&(@AYnR_ll9KKNdj*zK4EYj+r-l`r~~C_YCMZ?eQAl1 z{F${zf!5 _)EdO`ht+#sRkhhvIq ^S85=mEx0 zjG78ZHc(Je3-n0-FLt|=p0KIf8ZYLvnJ8gpYa=yk@^rhYtAt*c>qgf(Ri&c*F6-@% zWfPq$zXt)`YO3 G^!2Y#_3Tc!hcflfYyl=) z7OMy*QO{9G@Z6vOX*_`YcCswCn<4TjAIrDIZmwx(s!Hwmw`X=1TzaDC^EW?V1pIDq z|2`UO{8c{wiS4WA{)MsqlKpY*Vyg3A9_xIS@W+XK9#^hso0Du$*?Sj;cDlN{s2lEP zYu~SRhA(x5Qwy8PT%A&O53r*mgGo4WDFyjgB(R{0cjLRA3$1(2ce7V}&DHh`842YU zB9aL-0mi%2wdHnuhGA sHY*GG zY-eNC Cnd_XqrN%~CwSdA_m0$RoV-&ac*Le%RO7ru&Tq|r@w0D+5{3db8v1Mu zXI~txQVP4;Pn0YK$3F@E@+EfI68ro7E$ceg1e+a)$}G)422ky^FW<>JD z^Kc^<=ab*nb#=eBdagVe$<5W5nXK}9=`P)Fnd+4i>97{e z(TsvL?=ci`-M74o%{qO@GB?2;82xu^yQF?2CpwduRb+sK_BW?_tpV5*vmSd&sl1`$ zXUU}Us#lSLyr}Y@FtlN&kMQvqHa2wr--hFBJ~=ozxS21)&wrkHcYC&WcXPd6VjLwp z=W{0l`S}OrSeikQ#B1Kf;Naj7f|Lmi=#VeX^0FBZ_SV|kOT)w9prFG;$0Nt1>+2gJ z<95-N{rdGQDd`c!nV_Jfqw~yqG{OKc5NSSnv^Jnj`h0hy)Rd#)d~th{!{5&@LPyxl zGJAV_`}*4R S3*IP6+ph3Nnz*D7p&QY9KGch#<^n`(_DLuH9p9<(FU1o;|2Mab; zy@l)rW4f8rp=oI}appY(%=tRyOtOL{?CKgC*pTh+E*BS$t2le*LwYO}=rdh^Pft&0 zXUW$-@t;4<^azHZ1{fD=y|uNqH8!U0DTBdaqN1YMttzX;=olDd-_<)>TVJpmFD$nC zxB2fipWS|0>bN@D;|QYbDO-(-N}8U|_$85 l?6~x8GZI!}8mpr|^ZmzF|g@w_?#W0EBaQjDVJ3D<2RfUB%DQn<=zyllO z)1=LlC#)!t9d+t-!*oUlo$L#fqK1ZRud6dyi}Kx7t$GJ8X_{rRAw?puL4)f-f3lE~ z` 0r@c1mZgH{H@d;NJ%j?%*vw@ao?V8w485&f%4uND`z(PI|DwSKRUWE z%_t`3KN-0$(U?>mudKYh&w{6iv&q|AFu5o%uM@2KYtFAgN$* Zu?Sr|hYUHF1?*02+Jw1J0 zT`;lV+wP6CHoR-A%QdyNFJHd2TwC6B5(Gp}6<%Ie=J@{o4`O+%S6}1f$Gw7I+@aUR zmovyp2IcXf9CvGI(Y~8qts@wvfW>U9JahJ*K&QgtH3?~LZC&vUim5HOC(>+{4m66m zRlWaED3vWcloh@6jCx!%U51x=Lrzr;U-PxJ>%2%fkAi(=K&+ZSoxz4+UPY8UuT~KL zXn85tbg}%7{xf}dylLNWheWFAO$R?o#IjXb((;hq1fwIGjYm%B^%cqfa=ff@ujiyU z!nsV_QCfB?rT{CK1WpB&fFmHvH7==5F8(m3R6$K1I?vN>9rs3Dh%}&UpeGpf;oje8 zUu=GQgKy{JXl=YeuUabj_vOjvv$ubb!4$+yUtWI9g|ms;Qn8jRJr;C*H1K?-H*cIm zP3?)oSI&PW1G;)LkEJcp<6|1R6BGg;QsX{+5E>r*ZZyyMhi;_M^UF?e>tUec6F=6~ zsJ3+)VG7-n9@nX`UucVgbCay*Qu`E=;omOY+Z#xI{`?7V&YS4=O1ih+XFJv4`&@~| zmr|_>uCK2R&On$TZd6-HAsF;X#NBDp?*NBzk&rO) k<=gl%Yer#NW#zfrqs% Gp3N{uG|nv|)`f&s$J_>4Ea;q-5MHkiLp{;L{F!58#K z#b?p)e)A(iNmg?mUJ((mtv^31Gp#FaA}1Q$%J)kKseOcBb0?4nEb#B{FBnOOdq3gj z&2h*KP_3k^wwZLi*=yDT?CS%-3n7>fr>Z_|B?-JYF(rSh@VS@_zsYidD$ZOvRg@AR z9~a71PIb>PsDC$AHECzo&e;o=$9ZR3z+|}-tkMMkti_UNLnEPH1sbxjxA(A*f$3Rn z%)YN!PDv!?9QE5j>=!dGM&52kG$wv3U%HN4A3h%q!3+-%2j-2jr0YZnwNFxX^b3Tp zii-Vw%SZ6h>xMp9kB8|tx}Urha`p@KH*9oAhng-{6Fa}*3su>rK6|TWqwq-@htOJj zRM_!+zeC97Pf+2-s}Ux!0*$3_2sga^A|`EaFSl-<(f?XnGNItJCZ(b}J?N;%dhkH@ z*8$iU;e})l%bk(wF9O>;+S)qWL~qZR?%_U~cf0-lWeMD=fa7v!<=b&z6x7?Z=G0el zH>Xo}^uJokpDD;F*ckHAU56?r9v&X9@E6az`M$rc{Z*|kCias14@5)hOyk15P?rQr zbXt_h#>6bIu6Ad8%VNbXegpPcbMAq#vOu2i{- ~a zv?MN+8&2GmH5PI@KVa^(nM4voP}tJ?R8Rq2409*}lKY_or%911qR%o+E63kn 0y+vXYgii7tk7b^8TbzrYJp^|qNXNc!^oT_!|VPM z@lXE%Hd;3=$M85+Eh~IdhJ+@Z0s7i!K}N|rQ1DL&aZrqTsTMf^L_o-*Tu0C`uOR^N zbjQVq_-XZ`br1wZ9Y@@-NBPLm3 3#yyj$ia zR;9*93==_}DV1<~mGeRwZTnwx$69#|i99I2G!f{};5g!yc3I_-A)`(m8BF>xaMuV5 z1|ICzBVqs0<#SFT#XqzKt^!b|P+b>emNCAwVkRW9z%*(^rC^7|FSyYi8TnuE25QjG zFk||fK*~%fgW*TOu*fI?^yiKI5|iTM($eYn>`e0=vhKr{Nr>HS!-w7NNhZZ_PMf1| zj#gc|^Nn-yAUM%7y&rJ1=3JLT`}P_djhAvJzJ5LOxfOW38Upa(&35^~RJC2Rd*9#5 zatmCq)5+hziD_wRaZk>U4~0Eed*hZLcX*3b*<2hBWp^cp3?-Hx@qN3lIy$9D5 zvfcg)M%h?_wlch}xar#QZ^hbF)mtI!(RJ|SIy{!g+e4;%vt9 wQ@(cPB0pA z fXJv0pO%PwY) zzLXDFr#sq)ZfzY?@^CIlAz6@-fqyx S~t@YE?L@f&Y{9V!?vOcr)48?q99 zzZ#w*l7fMJ_V$l%VI2C=TJ$fs+gYV|(ag$NI5-|leSAKEi~XSXp7^f*5_0wadxXD$ zpEx&J_WEbk`ziVV$pU!Zk>3(BD@kCU?%sIMBVpi0P6Ha5u0Ee8UI zRnh?{ku`|swVQN2*&G`yZl0~z9?<( GJJbE)4iMrsyh2gj@{hpA;#*3iY%oU+?YxX44{|Lk;?1klNb)q&fO z1-jNHp?K5n(1>S$d8y}P?ABN8#CCReS2~jfoz*N|^@8x4HDQ>sJq^&!itb~#0%Ydn z;}gj7Chr*Wwl)hxLMEdi2`Q;9AQZh92ym<;Be=k)pEP`^shD_m!|0Fx;36STe1s9Y z8`@}jq~}1k@F;Px|C(DjX?mx$<+@yx3`kVCcLR{UTdMhJi>qC$Aa;>YCLnB)7yy|5 z{y0;54Qa`&b%QR%3x@|<1)8}dswkqtZ5iWR8z_DQa7M0n#~&)#3E<*O{HpK`XAB}U zbvR8^Pe(_fD6U!vNIlSrS(;i{F!_fDc`}Je@zHzH5KBdh$_#bT*gw%#SuRHeQBhGj zk^|-1+^_hRuRAZR^f`8`tGm0JoQfxUMDXWAt*w)-@ukH@Ajz)7JOOMMG0QlbOet!x zKbxX$UyS)alB1B~baA-yxAN_lQyqv;6gS_xj};W7qu-m-^wAFFHjgp{EWl%{k8jar ziCOX6Z%&1^CkDd8)6B}>oP>6qbCr~Ntp;D87A7PMxsdVOrwv&-oj*+$KA8Hl#C&(T zr3}@09%S5z^>Qlc>i)fUJA&p{e`rLZQ1E)z SW_AD&(4vWHmThCKyAT3_3H=p0kjxCYzcv2j-E@}h&E*MO75>#S zi#jp;tM$FT0SA2 GmioVlzmHa(>V?+=6sYEj={uQ3R1km%~;6T}V6BBBt68f`U zx{6G5*_%CD>zk@E_S!RS6#TF$<9>3`K|NQxl)3*I6Z#wylEi6zJ(T(KZ{t(T^Zf-v z=8%UE9#9Lr%Ghi--gH91Bm4aMvvF(SCj+X}&Pe*D_Aqqh6Ioeb`&45o)k0PJ`T6u0 zlz*#J`COhruCA^OOjTBZ$B&4l*bZf6r>0W3a ;JuzGet9BzbAF!?noo9_#XwpH;!yD0 z<3YAy1b+E$HuJX LswQpI_?1H8}9i5s&c*Fq3Fyvrl zDyf>~p_%6G7V+n6XJsmjzyAH@5i~{%MvvH`4-r$m;mD>bvIIJDGJ#Gxi%ULDIkgvR z$XPVYzcQ*~T>d)fC{9d>IGTS>aY!jSF9F4{B^hEkwur%@%+VUpMeOcXE|8)xe<|OY z<)5qc> dE{fA7Y2l?DXZq&x63)rVaic1^s=Lxyc5Uk!8Xc3oR4F^CjI>Y zcZnIBlvIm3h{i+!)>|Sd{#)gVhq;kN?YF%VT2930HFUE33ey200T2?#g^8qVDG^M& z4?)iF&k%Oh8>|H*!E|w4zeGMBvIu*?+~{9JgBv(21!9;^?7>O)Ui~HbG1At83tdSx zQhWIpG|p -5i(L+6uXTfTHu{nA8W2&X+&5gfs1-H_8BPKfwIrG$_^f6e!*#~|AZv%gZ6 z%gnJo#8F#31@u@Mp3c#8#x{c8_s!X@z#UW;Ie|ml6HPz7u1<-ASI$OqVXxN*)4@iB zn{TI&Z@nGM|3JG^46w>!sYRcY;LQ4vDU)JS=YtGH5W9!V7;T%VfC3WYPc4>wGZ% z-BdN7&9vF&@y762R8*8{hxfbDnn)VV@87>eEoIw>L_H+EM)s?{2_XLTg^(E%>j+C$ zQ@8sV;+LvhNjh@SOna|3Y4{%By z8Uh1fmRt0JM%AasOX0FH%m}$&AMgTQhN0P}eA4}RyV7UQP~D-lwKx{q->IJSyxQS2 z_ujr7Ri_kkHq(h)s@dMQfn4i4Mrvzo8A^^%4rJxzF1O1?1O#fwi;eCf*K$SoY@fb* z_ecUED(Zdm?HLeiFVHU_PRssB)OM*;Z>nVlGaaJaA$vf6aVdoe9yFZ(-TIKRW&fyn zWTU~W0VW2Q^xW$sFXw(pLrXMpL`FvDak`x#uq2f^TjM_SjrSc@^<+0yZy=ZL`0kgA zS sL4lPQgJbabec!hhftP6f0Hu$-94rHfM2 z4uC1o<_GSALxbgOBMy6cKB0W_{ml5u*H_Sa^Z4lQ*3xJwicx+h1cRdE9tMWHt2-nH zy0L7Of5j7KW(sK7c23m&cs=dsr%>rkjd3IlRr%3#@8ix$80x*KVemCB?e6v;H6$iZ zeO9G!{(D6PF&P *J+ ziq^)2(CZQ>I!keg$2IOxQ_HtM5z|Lk)~~E@%73%^$*74gUSC8~lw3TyKrek3Gd5!Z zm5N)lTVApaiI?C0E(Kj26Bn22xwogI;~|Azlct&)x5p_v1jHeGN5d#Y(9fSgd*X^o z1x(I)2C&hPRXZu9Kp5?y@+dTJ4Z!#`BwPQ(u-v)#E7wb*51R+aK8D{!3ZzU-0>da} zF#LK;gj`PbqXP~YnFulL-@oTccnn3v$Ls0qE67=0xytuj5W3=Xi7|ZxlP{ci*A|yi zur92E^AXJHZotQRZ#LAtIf#Xxj!puv%L>`mz`!0PJYZ>V4r^(MH*z;0LMfm8Rf1{S z8w^1WGsoH7UoWqZz;1GJdEbHL!Vt%E_PN~1QKaw@@Z@9`dj9 {Pt>cQV02S z-2zcM0nzaBjce6$YW+5=B*O?ia#;SP5@4*rGy;kZl;$RwQ~=o6b&sy;RonJCc)A%k z8iwPc-Mbe~DU?%Ef&h% =+0y1kjSz>C4tj;y7;9Jkt9CUG~4|ANlwc5PCwGu zI?1t1Fq+3AB2U>LL4RGWIB Sid(*pd!Dx3xt#{rn|#Y~$4x-|zb9Ef_Q( z9sd0GbnB)~stxmFV6L{Y0~cf#Z@Yp9seaguFh9X=^#cN}T+f6Qo*x*`AQ*D#3MiY) z4hr(kNKW %sZ|$JshR%kV^SR6B+m`c4N4SUzFV zQhjWH9(9z)q5~UjP7 bblygCCD?@l?E!(+_w5;dSLWZ! zEo^e(&OR#!GT`5Q5afOO^m;a`@k;N-T!{jV6ly7-cK7jvOck7k$VDABG&EumSP&8q zgc9EICQcu-L7(%9#v0r*7+T5{Uca6Po2idUUR4!;;K;4k4dQg3b}g^Xst{~{&H1X= z!pMj^`a3Cf?A+6iFM*8$A=nWRGPlmfZZHit@IJe59CbbbhhlU0-7RvPT>J79;Y-5L z8Rx%_-++yRjx0XieLGWESzOHFSdse4uz0S*!PMFLbRVC7^Usg1-QC@V1$;8H$*eac zpZ7llGEH@LLK+jmr7SY`Lvf1NSFG%HR(%_=l1PY&f8ERk;&CcWc6m`zr8r|n+)u%s z@`a^&UEvx;2}TREe3!>_y~1feRw@B`)BXK@zBzY~TVMZFz^D(+i*5c^IE>_kDvMq$ zTc-N#u5A^(`jrX$A8RsaZx^_;TVkIrc@x1J9cLOAGrv#F9*t@XHkmlGNopggk=ZOJc8Qd#P?}6)YMFj@O4h+S68JM8P
5EI&t@La8Qx8?~Qh6>K{TCc5|}}Q%$e= zP9tCWhA0B@+~@AbWv1@Ky@yo7_VZ!|V|8!G`wy1dDFInf&6IZ0_ElYe!8D!ev#u z6we(NPbkLk_GVn3-@1;+u&9fOh;-5Y-rp~g3MP(!!f$RnBc}*huzD^onHms23_TsB zRaEeFIL&zzIrMAr9zELLaN~=NbUZLQySonjs*86}WKa)1Vi46J2Ub!viv;*69v1Ur zhIm~;d!QbPh={u0G2C;`rIsrXvL4Oj@;v{%GgS@zhS5Tu@)^P%unmBq@p*rrQydRp z;!y`+;(cb^fXVs=1faB}`lR?|80b*}uV%Zju%u)#fyYuQ=_whcTWu@ieoPt_Z>Gb< z!?V>MN~6f`1PFWSG;OeFXlYcH9&2QMLeaF?4^UWM-CiGo-N6)FUA-{xgWEN62~m zRkf`_iBMaHmc}S>`@l{iL}bg^=x=BEKX4Og&}c|@XItt|23fTvfunm+lHdpT-mj(E zZ|#Pr NO!bSf&0Q`izGsX7i{Bz5sl_qFlcW~@h5bl2U12@cX5SZjN>Af53xrRPF zmGfz08_n7B@hSWc4Ov-!*nWjdXOk%+4^{`79hRgomO;4EvOkGTz~r~Kk+%*Lm$ Yt=*D=U%3hD8B} z#d@VCZQD9LYYoQ)7k0Zn9K|~2tApt;KzhcJo5H{IjiP{nMR{%6;V5Q0@HRa`{{vmR zCiOp$;^IB<(q fKa-lE8~$vse?H z|CEIa3rMS_rKOP*;YsP|DkU?@$IaF_n1WjW6o~zdJk)%4Sax>J*?Kd%mp#P6+xs>@ zmM#5hvBOGtY}Grexr#T@W7c5aC@Y6Eg(gBsLl?XEsTCDZySc(hO=}Ws@KLQtNk!bT zq25%!y#kJAxYQ8H8aiw27znu-*4Te6lu}e40R42bPP3;#yLj{D68!-QF%bz6yu+7& zKaK7>-mUL?Opr+Z+*u*tWG##mtRb))d}#m!#Dgv$lFr+|eMi)S@kx|5pBUP{wzAZ6 z#x)@gIXGDASTZryt&+(~l{Csh_(h~PQ$sN^F*WsMvQZ8fhvpX-=w<`oQSW)nd=CFt zUyX)FLixOq&2$N^$P#WVC&>D56*prbm6S!vC@FCu^<0IElkv>un!4WJLNXpho3XMs zV3NaQ5I316d4sx2ZgJ-7YHHrs2Q5qB+XO0XU46Z!nVFfzY*%-8Z*MOo;dik=sb|Vy+d8klp8Zi3Z&o;-v+7uQR z?(btlu6%Ai+43X;VdY=@a+U9PD>QrPXlOWjc~5~F(d=}A1=08cXQ9~p=CZ cSxw<{=*Ds0kwjjK}rCuJuH5y0~_{8;RYhr#r!lEzn Nu!D$nApYOmHWz#AQ2@WP) zc8R2UO}e_+7UL2 3+gQx{4LV} 6ZWx!hP_dy!i~Q+#Yc14Gm`jcGs)4HuveWC~pLY4oK5xYRuHT?17dg zw(&g%E}Pir478`SS&xB*F%W$aWnqyWa{o^TH@&;XVH)TNo(0DKLo G45*!DDwaZ)MTg8nQOE#dvg@uJZd0r|7-%Bq2<)9C&HAAnRllZlU zr;f{?nG_S-+uNUbt;7P+q}TJHt?A~nRB)z?umkpbEMFTO;5l*k0@_GChu-P-AZ@LH z096Xr#>NKdfqSPK)g9lSnGVjliIJ#1VK=B_U}5=QQnKIrP!vMm-dw(vltlDzKQU<2 z`eVOhx%in*8v3F4T=d=Lu_6WEA5gWvs8tcs;K%OUKhHnHXyt2D&W_mb7>Jup- z{d(t0&}Dz 9(Kr-P!3W>QWOdHd)3;s~H_;Je)h z?)4{$lp8NebGN=dT73-Ebkb*z%kw{9uoEAFS5cmX89WTi$SP+LzZ9XRU8o&0U2S;k z@zd8WS%|rm{c1${`K|ZmnakbYT}Ec6)IGg|zZ?p`ZEbh)@gwi9<_6ws6$6ms5*+s! z_PT4aO~m8$`1C-w@x$B6VQrbmD>3e7>HkTO)2>?zS`E%)tvl7V28KtVA}#y8-*m^Y zFj!Ph+JJ&KxVe1GW7&_5jZMyL!arYj@A>4woW<9AOQo*l4O7nbpF_?vW+LQu^`?T` zlZ_oVrK8^sUg{EB`UE?veVjCzta_&h!dImRxNYh7-`!oRv*QUPY+Y)|suC0R6l}JE zn`3HXBBja>3PM>q@nA9d>U3AJ)_x%n^?5*GpgNoh3r Vo_kNSmx5_5Al7oT6U7Y`)0(~S{k zz?M$8CqX#rtj=c~+sJ4R{5AShkZZ~usPpBn=#DVTtIdL9$44)1*4Nf7iy1mmV^h8y zfyI9IX4p?M8aM&};0hRr0D9BW)0>)_vM?ef4xT3YjKxd;8;dGm Ac#7JL=iM1S)7*5=s+`7!V1x`18*s6**{3hkBf`yCg z?Y27|a(oPIESVLbnh#rq%EB DY?{jZPTW~6c$X}3Ifw$Gv)R=aJ4}23ix>(DN zDtPy|%IgHoChM^%0#hD~{_EAmyQrDUFSjBdCu*1MPA<< tOn$=80Ea{`&X+{JE&)CCtoiVEFGWPF zNM9C>oYxveu`a Pr@Dw=v7?YPX;i=4DmB>wu TziRXnvLd+zO m)1j*_`js&(DMMO%Zk@fO3?5J{o@obUaqKY+AgX zH25_4H9c||Elw#nk>4RBxBhB$EqC|!*w&!9*l?uU?s PEU($rJh~~ zBS|$Pj7r>&ETD-Rhmo(PrlHdGWa5nt4RIVsvtUGkD~3H1SWFQA6e8W~bw>C5K;K!* z8CW4GnAlj08Uw7qNCN``f=DSsq}8Mx92}IKoi}%;Qc_Ytz6t0uKoA3ol{eLP9`5dO zU*&9PYgBo-hi7IeX*FKGdZnVW55^tHNZz}5&p*JQ0tch)4DDiQYDx$^*m!toIFaT$ zpuB+fv>|T_<_ pX9?2TYp46m)BchsHb~#)q4fSOiC%( z5PJ`Z2br6juP&Pf(}7sf0XXn_a3GFpZkA;^TZ{V7fcsuO0uCYuZ{y5%rtY7^=ytS9 z?YaN+cw;2-=^M4x_J8mL5H6_1X0i;VZ{qKUdpH3(PaCyYs{!d$F)?K0E0AAOQtAg> z351GXNJw<+KQ u#N+fh!J8HjHH8?)La-IpdSJ9}ky^_xNtFhRi9 zvli9{={y{ADq_%}!Beb7aN4J4orA^$qHHEK3z9%00{3+vYOr^ylZ(${2q|U2BP4v! zc5?b7kxyPuE+ZoYI9M-3NO2+Funto2Auk6PS^-x9$*ZH2lhCj*u-vQsDeRCwxD)_0 zQmUZUSES~?P=m}S7G1^3>A*9Xm=on!>QD=$MPd1rJP?QaPp0JnK$?? >&SCY)N9!W@!e}K{NH&k >O=;3P6C(y-W)bTz>;g^b%Zg2qI`R2A-XdtoVIGu$E_NT3X(?NAv}``7DVCB47D5Mp3ILhLsHJ3wN6 zC4Mc8{A9W TJ VU-?z@*pB$@xPQxfXpXd89v0uX>J{t15KInK!y|WGg zm)dxdbfzlSQYUi_kPKS`aHfFv4)|8L&6(BUmb1-V)9ZzX;|gqOeY#d&U!NV>o4}eq zxZxytI_pWsEdoy1vj;&f+*XInUCnpi)^oRaObiTgIK0rH++wAhXm|&Bsvx^PT58&S zo9p2M$$&Ha-h3D1rX7TYgzD<*AURRUdV`G#?KR$sSKBIs=CSnwWUej^>P2H?M$G{> zfK-ZYXV|ohi-3PO+fb`T5s1f%K)fn*J&1dpsBV|r)t5&irQm!9WKg(HT(Xee?Cs4} zO6uwLSBIrz_ZyHQ69wvXTQISli(=yKFF>CGJm>NL )oEG4k3~c??*B zHgwB(ce7{k7HT-@7Xp!Suo>BVQo!u&QlgA+DzgDN3>;uTE$;#u%r1gv5Ez@ZEXD*| zN4rR00Hl0CAh%f!C3xbxH-U%2qY_ByKzgP1lX 3}X`ONl{7)di>~(i@1}Z5cUk@}AphNVqXBWcx zk7_jg-k=seF;Zm9XZq{#MrF;6c1$QpGnA~rE6Z6L_Dn?c8IFdXCCNrtna!B;U<>Kd z*^hjbvQIUQ3T`kww5YeOr14#f;M7%_jfqLd(|8>Mnh%k@aYn6Af-=TdU*j7k%*lQP zGt6wel~k{X1%kj}ll*w~p_vVdH @KnGqtrWEw7lf#hu3Yd?IG!_6A0qYCEa z%8LgAD=ZOpphqz+ClE-LhTuvX8yTg>J=XhWz- H1{cAJj6icjU|B%r#hF#BwJ~ZGzcuJG9tThY7zV|J2uhad|Gbk>wq>1Y%4Q5)$*a z2sSK~fwFvyoC1ZR8bLbN%oL@+#@}A~l`T|cAp0zq+-5DxyDVg7eR`rJgoB(wc14ns*nqG-H!+x+&J;~M~A=+q97vDlx9 g$%VPIEHF_$>8 zAI+T2g_H4+Lvc-qav+`{3gpj3yQcdzE`{9&AXWO5p8iEXCT$E5wc_H4@u`%&x%7H@ z!RgEt^T8>*#!APPAds$F>FQ4g* dzF;U^L1Tqs|`wM}f0WmXD^X~(a;4@yLnhAO)E+(ey&B^%P z`O?{RgD3c FfFIYs-enBJl ;WItvpSb?;8K}21Ro9^Bd{> z |NijTXerT7(q8JQe z+-7{5ds)fl HyYV4+<-=cG!eI#{4eD??&QC&Xy_%tmHi8CivfK<5gW2h?}Gyu3vE zv+-UDGD3+GkaY2P;3_#rL7pkzfitXPJ~ID%inRfZ3!)$r6U`m{pjA0GOnW2Sp`eoO zc6>zv{`comouXv-hqGDGkhSW+lu#gob@TM(xcq|8P;ieD4SX3>7mCz9o4?*;qP3iE zoDLW_m_@?~Kxx3g1IStT2*FRFOldA|8Sp2bwev&+;iL5r;AspDOptrh(b2`BF)}hv zM0Z2l%O9;zAf@}{H~#bJs4i$wY;Iw}1K4zUp4DFo+jf0T0XZ95{Hs?-^GVr@En>wm zBF70jUPH@^F!i?n{gVGNRSZsM{{bLn&cCYs=X d=0a+W}dwbPT%4_1hl7XJfwUIHD9 zyCTmI9H0)j`}uZ7lXu5F{hy9K4<$%K;7JEyG&3Oq9SwS%P|Hw< }$cyUBr9Jj34N-o&1KG}^jp0#>yGm3DZ#oU{GGSwoU zESg%XQ`~a0S`L#WP0#w@Mt$u`GoC6=6|3HS=?kafqW;VCsY}S50bb|oWZREzyyR|q z#be$9wM>ylE)g2ETTq1r)9-Ekz0byG3;M>-UumVKWOy44Sqlp-k%#4X7`68*C@oK< zl-+!j8D0o$M4jGlNtgu}Y&&J&ij*%C1p72dRC|S5VC^WV)$+3*D|}T_!|Kh_6hZG$ zI1yf6m5v%vNIZFyJgthRK^LLCSki$mCVYeI`?0FY`}yRjFJcDdj`k8V>g2w1pp{tW zTZB6EP(~{-6^35>03uD37GDtw2@`9y%4OqqY~dW1`>|lZL}UK6;POx*aNAfW_;V2T z-*bZ+tS)wD^m?Iq+TXnNI3k?rQ`b4qvFCtt1H=e;F8UYJiHUrItgQ4aXl`HB!* D?N0r=Znh)l4ab_3QV5MbUFiNuUk>kBmawXrSzx7(Ys?6`8 z8Y|6CTX6U 8k3}X9wWhUcnb~KyQQ@?6%*>!kyxJ-$xH9GceU4cHgm8y z9t#lM;_LkTH)hG()6+AttCzc%Wh%Z{H607B`T60oqI>4et8@x9v{Y-@QH8i$;!l^q zQ;$_ U_@alO*m5JaGL&7fReyU=qL0jX`BYtP~vuWc0#SoCR8Ps09_^^^x^=@RXd6u zQ{1y1D)^GbLU;e!TY%54wYRkKtjY!P{7&|4$7|N(8Dx7KakadL3Y6h#D5UtjfX}w8 z0^HT?>}+oz&zFV2_3pT6oD_Y4$7kGg&Phv4OHJ)|%~CI3n`}PiZav%S<8Dosl>Kl` zbA7F`9EUxPTsQB|-459|1rSXkdmQ4tipx;*H2WrpwNsyDnepbb$HzU#^i=15rNM}( zsKo1<{x=teU!*#B31xQNc#`xbl=rSX&DZ8r-Wu1eiwh$w(2_Sk-B7)FAZZ@F42IFW zX&duix01DS1_F+rBK{+(B_AqPz`WgK{r+L}$A`KGAUEL`7JjIPM^Qe?s!=oatqwD& zEszR0r*u(k6rdJ SvEp8! zUBSU#dmuGb$*nAw4oNz~WuxpwlQK7dLockvfER2gWQf+*cWQEFm4Wl)4}}_AX?boX zu|Ya_)T`0I;({-Nr9*IgdU~MBtFEq&r4iTmzr%wAV*gr2$$Oxz&?|rN4kIvaX}}Ts zjkLSUAa(zxPH;6#7}f gjgPxzM;~re<=-TdFxHi?p+@{$`=VLJz{~H^_=P} z;)ciKMy_0j*kcM0ZXtWs2TyRrbY)N-pB|Tl_5@AFp(r34E7UM~C*h@{Xf*HL`w3uw zS0VR8`!9@7-g`POOUC=eOF(MiR7FLj(S1oheVxZ3wHfs2;dK6JSA>gGzzt<&a`x(G z=W8#|zGsc+y$fy>c@fltc6-B@{w+{4r}k&U40E !k z7bzw6{TnnSk>?fT{3z}44aN#6`|4p@!juB3G`JMAiNi=_Za?0gF(ty3va*_=3NSUT z_997VssRuumR3~ZXPI8BiE;R0^;?)_B&dbW(9oW$t%^SBjXzi)&lTMtpOy|GTO*gJ zp&}guNS?dpXcjO$u-dXRX+C_YRHGjk8=Ly4@yU-oP& Hc)N n|z%SWR|9yDV>%h0TKhI)cuqzlDP3UNdf3i8; zfR-8E@*59<$Z>=@WzLcYNCbdphY{)lmtjO98@3i%etv$g*K8!na;%r;6AgK~<>kZB zuJL9hMdF3VcUc_Igwtv3=m1tF 3cA7d_XHoBX;Ee$Op%Qvh9$_mP-6F0UFtj z%z|-jlH8MZvg8dClUs~0^f*kh13@6RK6!2%PINgqnc4G2FZuLR&t}E?G2in >545ar-gp+j8Q)UpOkQVp~G6OgH%c8 zrvYF3x5>XY {IxJCNGFmGcLd9x) z_5;LsOmmMqdzQYXC-pVYy?HfD6tKNj>e(INpML+amnn`p^lb3*Y_M~wwPm}T`f{7@ zQW_z0IN| bT!?*ZNTZK3*w zdDG5LAMsf$Zqx#0A#+;a`S40HlxC+3U<+`Qp=9y!@K|48FV$sFL21jVj#E)m($G*M zC|jq4HLlBSG#*YuUHrSIpYpkHe}*ER-~24MulZz?w>L2;seUNZsUeR4jI|t$wO;K1 z?V `4<%DFGpW!_sO#)$JO7}V`{ibU24W_QIvH%w z?n?tus8kxC4w*R5&1O+1U%)|KmuWc}t(<%|?g*-rfd#jmB|;)13Am z;(FOa`49<@Q2trvF*<5_x?UjnjI@IFOL)3={? H}n4p;aTuxS`2iYH8 Tdsc)+PcDc z!P9R)476OlSmSQ}w-X?-*%aqHpYOiZUl{uA*|SOSB@G0F z6h~# kVjncPE--4fXUq{@$y+JQ=&o5(-5XbApmw zbN`>iGa%&uKAnq!SM=_WA3qc?)>;t^{Et;Hf7UwX{2r1)*xK7?wwhfy2b_+RYJDe_-m) zuQ}fFKmW>6>AUwsaZqF_i`uD 4e!c`xt!oU9bXes_Erl*mNx{IZPO z2gbs+hZdh=zP0o^q 8swNkSXYN82|@;*9}v* z@6xydhmBKyP=mk=!2mZq-C0^d{d^*Kg;719uiYrX$m*giR^!#dfwVr$Zvsp|EanaR zAAnwmCDeCSC->yQvt_q8K%5U))yVtg$wN1XZ6d}7H$SbIWh}yttk(DOI-X1~c%g^% zZ2PJ)x+O1 WMFwa<2wRdW7m{#?WuMwPt5bNy1AjPaheDTK|qD z_MHyVI;?Y*Nxf_QXJVq0^2XSv=4avEZ~TLzr~f_-h&H}?6NDtiY7fG_TR#_jzp`cZ zD@V(PpiFN^7_Qji*{*T6G2LZnPvvp w8LDd$}D)oaMcko_qYw z#w6f;|1{vT5%-o?AkuB!W9)o2=Xt=hG2^M@fm+G^%1cx% k@cu>P3v(maE^@ff zoXg6}oSL?~uZAgaXUdtZV(rq;ME4!e=7z2|P@Lnl+OSs9_^-MT!NA4EwFJcxID8CD zO(ow$DjpRzHFWD 3pla_|=cn4x2aq;66SC KufhXHU4LFbeB76t*Qu-<<}uFK$^lQdAAwo!Qh3s z*?6z%zav*rt?3rC$uZtYe#<6*cVL?Dl3P815is?zV)ozjiPAUzQ$yG^`sB%z-kS9i z!&_vg_SdrVH&1DN?b#TtfV}jzKa$f8Mr*=PLe2^kH91h;yct9{o7uN8Z6CZxD0=_? z_@6&$m`9v)rkFU jzDZm-Qp1IcSi*g7e2rOxG4#m4jZ%f#0W~QK zvUZ#Qy!aBbe)EAMEIpccCeCp@BqT%{8BuH$8LqQF+58+Va*=WtFvAK83cg|a658KG zL~<()S?#lLS)BXq&q7+jdgfG -Nf`Oi%-t4*G{bvqzG&FX04q1ZFDJ;bR#M<8%6cW0Vq&zI37UCu& zHb~dHb^|8~9-koF4CDX2W(6lf=HfptoBpd{-c98F@V#w_W3B;y*k&*X+9rsqllw$3 zhDC(VGDwg3`Ofg3`=aXWM=mrh?E7F(gX+PWFCCLe7|pAveools5vUBVbfftagu!ix zeszq&FVStE-LAe7dOwya=M{x@eBT0TBv!n?d%Y1~I+nlOwpg6|t=lZ;kq@Kq2&1BT zg$Lv;izskr<*#euKz0j^YJo|CRM;m;BOspXCf;o}i>|N0|47d@UFh>T+T+ P&K1q5`BjS0g^OfcjkV|Y`)SlQXx z71&+D #@rS<~?}>#M8n&s+pyE5W*D= zuawA=6*`5EzUo_W7>|{WS;Ya!8njN)`^YT=ube9j!@ o ztzxK=$Ir~r_?DKI7cX$6Vlt%TEAELbLEu0ZJ?gx%aA1^mhRMu>=#96?w wQc&wJH(D;)LYO~;STqC6T4)g 3i`J5y9~yAfx=5#xf}aGjxKLJmvwY>%%eg!+RkN@G+xe#J4L^L z(XH?vkE7_ Gbqm9Yu8w{bod--(xOdBp)%jAJe-lKwoeW_g6xko8(TSC^k z7j^dLX OOJqUY)_ltwdYW}Zd+XTyQ>#*CP)uwsp3B2J$7bux}L8Y_bn9oeW- zw|{#C-}e=^ZR7VLNb3h=f~yhIF#LS@8Xs!veaGJ#L!IAAkQ5#{jv%W14ptxORZO;2 zDz?HsTF=q-wE~Rdx;(Ts^UYSCqS=_uQ_l(4o)3c;o0Xf5n*bN(3O*MSs~btDjBkE4 z*|!v#i)svXr?|%HB#3g)CnFa`*(kd*P{!wWaggBO$4Zb_F0dZ+5Y)MzB^LQlK4wT6 zB`V#vqEDr;U2Z#Zd=n8|_tBJH{-HyL-JTeCT3@^5S+}S%xk`*Ej>U81M{S>zk{^Gf zXEe*WGcEg88mUjl*F7CZLxW{&lDMdF6x<#>n4k@?L)`_{14|^ #VQ-^xK-`Q}c4OCeHxZf$$ zQcZTT8{!je-27iH06}nXTVPO~i?)DuSlZ~yluWNkEhl~pfrgJGm#=d1-Zd-NLeFI4 zq0E|s8 7oxP=oK4gfv9*Ol cj81vA^m%xI(uCxjUp3 zV_G(Kw$LfwP>C$% R63<(zV1d7wO`uol2;8{A8E2p+kUG>MomfN`^J}PQDLPtXkAjsJao{; z{P9CnC6M(!2)O|Qg{X{jvMm?$n}=MX7Q &|6a#k4rkq<-^Jtp_SK%rIHsINX{l@g6)~@i^tIh9vXEs{ z`{hmgd~9Q~p`oG7YHv ;H!;#=-mluO>(H=_Fk5^!!9 zxdib}it`W3fi&vl*oVQMBp8r?$4X&Lka*coiT$C6B_6ajN2&Ma !d2?m> z?VQ+H%H-L@D1(~nH7!W!wJI~GRG6&&%7_S772R4GMv&gf+65WabV@RUudrmxl#1l) zU9Fupjz Y8F36PaR5fnb sBy{|faQ%_7ZgVC z3LDqg*B8p KuXceIPpM9|i z)4ta9`IfXr&`|q7r(AFJq$V?5=>t5YM@&jaJl&8rpb2~Aq!@pW?&~A3_3EE_7UzWq zg=E4*>6`RAgns=!0(K7L8_UZP`PNvG!K8ogHw@#u!KaX=)!wT@ZMnIg%O*dzh!7;p zazFpT+LbxYL4A&J8JHttT54)&c(f$4VO@Fgk`Xd!tD}p)%oY2&J3#vZVn9a37(TAYSE??cA`4E3FazPS`>Q&*5q58}NvKi@H3}KqV{~qDFg?;hK z7iTg&b#J8MzOfc`t%%j|`t676D8KK=4Ii<|QDT{f^%LWXvsrPMOLAtI|91uvUXn&0 z`Ok+;2rotR4(^(TlxVOO<}9_VIMrd71_^(n4-`r?9>YH16d2T^6pqD&zm^6R6T#|= zDuk?s(nvHEYY=h8nokaHc|xEu8$rRNs8tlIl#=L$Ihw?BImreBRt>>Sq4&zc?Hl#@ zTcRO9Cyh+j!V5({#Jj!K?n*;WH$9<*U=#L^)o1#Sk@ZlQz)TRug1}fcFs%qhj(M2V znTg*(VkO9SFhx~ ?}uZF!m+sTY&?IOIB0LMaI{a|C_cn3pw>;%Vm{!SDL{E$EhSv9QHB z^+|&G)U`VT%t#m{hIE;lqFjx~syX}VRSz&sMq*B|#U^y%a6i0SYhWDVCEsGliJj9# z<#)aVR$L;pHG@YAOihqZWKd>?u? ~( zl9cH+E7maVpui9fLH@>K_&Fp+xxc{ffJP@bgckM3PcMJ1!SwXc7&P<+fFbLhg}LXT z3a1-xQe=K)3Z_TPW4=Z*&Dk0IA(l#fkYDZk155T43{e@?1#Hhy)~C}sd<3#KQ3({7 zS9=GvUl6?#uE*Up6=u>Z^tU#`k}qj-vnN>f@@+GQCJ>-%fXrNCVrA`U{Vy^TSnYdrg~KjjjkI%8#&ClhY>fpwJ?OTU%2E^?Obek4snh z ~evG?Wr%pukao1jI$;UX&2+#%1URTb)pW~Y2Wzobv$B4ai{q){w% qswo( z9j!-Pd8t+}E^|QVg8AP$XUZ^^zV|}S*?H5xvRR0aPy2tT2vqyV%*H3 0w$^dY>|(Lk8fvh zSi{t7CXBmzZwUC^zI7rvKtB0xzkoxhrVDH~?8flM+&?GZN!&G*ey?oBEz#^m+B_3$ zavx0HIS%`uGo>V&jbjoWMc?cHt*xzXf6P=8j3FGAO{4)Q3NRUd4Kt^lp 5BGX0KLu@Yj9d(TAD#tTeWK_udQi|4gU<&!mUMV#5TG8Uk@c%FD_I z#CE@F1e^?0-*e)uRlGWW-OieIXeQzK|1G(6 n=b)ydt=;JM-5i16v z|3QbY@N7atLQr9z45hW~%_nJ)rc oqAT6YQ%1ic9=XV)0&bh%tY~|td(d J!s+6RaHMI3741B&>ohDG|;5C g2dV^CVc&XBpp_M(JA?rfOdgiqp5K&!+PO$XleHj~+LA7`N=)S#ilq;o&t@ebEwO~dqol(kHJ-6A(|R-$ZpR!- zIkHSO+0wA9uc#4l+0@-NyV%}bAj1aS2BD+DU+<|O?`#IkO&3pFY!{t#dsCCFvZgIl z%GVmg78J^wp_@< qocQf+G;5c%GjadvZwU{odi;6{;%{13>n1tl(}8EWXvif zz}DefwZbG1M#mD0rzelt^<|X6umX7HNbwL 3bAr&J0$HwCT_k&%42=<`bVkQSV2fW2=fIj zzC@$&5$Pu~Gx|rs)fv^hEr0^f|0`Q@M63HiE1 DgO zHZn?pb{ZNQ!buQ;ZKm+>bq6j9*bYdu-%ff;E4Meo+CK?2+UV$LhWR%R@-Yv{Y^{5` zqFtH_rf{4ohZ1ft+bm$~CBRq0ikX68^1%vF;4F8uJWgqJVs4g~q*%X#Tm~7xnw^O_ zt&DpOUQT*#Naspct-s#pn%C?2L#t6a>2k@Ya$#-0TP=r?Q2 )Vd-Uswi11>Dp3-pnS6Oa6lVQ}BbaXnV%z2>!YfMAe2yLR{D(((Qe^tLfwg1j1~ zmu?6xyp@mi64+TI#27a-XY!CXZ`=`TxF}0B4(UHKT6tKf^v_=6ON8c81zrE&A$Eu& zYUuxWh_$u&vfu{%X(cFjk8=*2SkCSj?g7(vemZs8@|bXMFMKGvuG%v+idefI!!+$# zQZi|1LZ>8S6kmVWs`+iolB^^o#$I= zYcZL S?8s1#+;0(Em)i+1c68&nE>z4q@n2zfh2*?z51h zpUP>VeHRF0>G;wYj^k~5%m{5X96>yWxYmob%fAQ9HgOkm$Na>)mmBC@eXHeE8-9z= zM+9O;r^WAd(c)Rr#f$wSkd6;Fk5+?_-6_LpdY$kqS_G&u&^OvoJ}(&*U3 $KC8qUwjY;xHm@(V zZsOT9H|Dr(!f`7zjGlekpCz~xaVC5VOZtGt1gQTj`}}X4T flSN)Jsh(sqe%KTQ8wQ`O_obhU?$ z5>+17hM)fh8_E_Dd0|6221Nv@Odx)W?W!~He7V+erQY6I=)2N(fU*fa6=(pUHCL*w z`y_z&y^>ts-bF%_on8%KG7#Zz&);C(UbtM*@4}sCu|vH+%nF@)cScu#xbuDcL*=uU zt)&|Q=WQyUk6!GzEYKMXZc=8S-|0?Qen Oh zR|?Y#h- (90ktm2eVmMQ8DK=%bHAX9-Q(!dp(@n&0I*yMBX96SaF&bDNDt%)&t9 zn6m8-B_-~)6OHa*r1v$8S`4R9cZw?dC7bXM=f<+*LQh*qM5@BH-L~F(n!5ZOOM3Rl zy@_@6Fs0$?=SY<)&!e-sv30ML$e4hOHT!@k@75oVR5RXGEw_LBo*+{@Wbro(-W+ik zI?r@gAQ$3&koF8ISG${@_M9Q=C7+jy0|}0 F!R;5Nj-{WSvrZk-v>J6E@AW!-Glpzk6-&;y~SGI3XB zJlqfpAj$Cd>-A38vJqH|j(x0XltVqRe)HSL7q8FghqBZt#GF{>7m0EG?88q_I-rf! zr1~_y7=4``@aOmlyfo6)V+n?d8iyQDy+ORCEUF*7pK8!=j~t2*f822*(v+c`3ym+K z&?U^fOExFA7Dr(9jCkRI`R!9ji<6I5mOA~>dbqUr1G*Ep63frp*~n1KA9er!z}FD* znPIE+Xg*r37`yk+sP_KwZt>VD#)kfFJF4M#dXX91xP_ru==^F-Zl|cnQo`n0=?eas zB)5B9hyL0s#bi<9lqg`_ jTcykkIqsw*b9qRLr z?RgJ|%F5J71V_KURsPBH*6OSJXhHGqcTWps|6H{&WWirWlX!&!F3v!+Nj@QSo5$d6 zVw25TQ8l&iZ{f0OG1ntXDym1Ix&Q|L>1V=wXB(ca_h&+{XJlp`e)@FSv?N~HwDT2{ zSd0f;1i9z`Y!qodMuM^Nfp+>QH8WW*&DL*NvTn~L?^?7MllBkEt{Xv(twVOn@*Ek@ zCZDjez$O6<9nc!CA34LWPu?G?|Kz#5*phZyeV@y2toYIDaKCNi =Nj2zBA0)tzn)F9?jG%JqCzz8i0D2*pAdNa{F>SoW`y9eb24&$;q61 zIqbCPxxoU_LvOW{a}uA04v4YFkS2(*jehV)M*QQ{4W{p}aKW!}#B|dm$rOmL3Wr^t zlb0M|$Ek`bqS7M}7-bdYQM jRP_n>0TF4$AK18rTOnF_y7k3JvX z Y9vjb=U$GdZxCngS+hFcZh#XpPI)a)`w%24{$Bj2bU zDXM6F6%`HV8#OU rso0H(HsWW$8y}7DH0eKTyJ-`h{=mv~ zt $a&cFI7ze^dOL5KUG{K~WWWJR%U>=I+~b*xc@LdFgb#meC*Z zNcJ>nvOwcpNd|A6l>Ej$3LiA3Mz4}4oZeBp(ODmACf0-2H4 zm`4{0c*}ErR!hfBo)bQiJ{hmRh#Pb+WfsCMzyTCC>B$7N#8AkTm+zXM8&c8vP92I> zmX)C{wSzloUMDZQ)m!n|QYz@GJ;30dcdOTB$EIvszTZYUmxZZk2~sU#b-r{Ub|Kjc z7?IQ0kwETw5~AWMVEhLL`Kur^Hh^~f=baR+g^<_>lC_QX_1mF9nS(gW>PMdZ66h;H z4=h(iE7?}~;nke*^LN#qPbsj1)*8S)b_t@mV!%PbJrQ*%N%QQNIY^zUxNrFh@^ydp zvga>^JR)Y&NWLO$)XMa<8PN4_laiAigz#0hZ}-MXgXgM`Z-ZWmC4zJsR2KG{7=lCu z1S4Z(Y45FOvuyZoW}g|63A$~`ydcG5Kwu1iYc1ENG8zjD5av9h`5gHIscmW+@XI`$ z%d|x-Tm8C>>ac2|Hpp hZ6Yy({h{+3n(V+eUcYNQ s;AZrvovmsHh%87?%e{ z^m}?lAl*YbYhvmM3;c-cUo{bYTYkC0X-@&*y?g+lb4H!;bP&U&V})811^W*&jKBo= z_IHe>30&?KGGjbI`Jo8~=}x{cQomC!1(g?z?t}6|9F8n6FN0(mUb}Z_OR4r3P>7qi zZpAi)C-eqOk#)b-tr!}u{%ACuR{rZ= CICv65d)=B z*2hSCXQg6Fl i|6Q&^5Mz^mHjVKmrkLUs1o MsJB_yYSJ)C5NrnZ8th68- $~jv`ywlC)PdP+?ywUuLY4D~g-Z(~fk6KNY3Djgu0kM1|#r11;Q^N6S!dc%gOz z6`0Jv0aEZ&w#{bd)E^qntpiNkXL<=7Sz?gcz*?v^8jPg=o+7Vh32VDw;RFoR^m{fw zxxeckpI5MGJUV;R#l@lhEQfKz!`PLObNcfUM$5=x+t6{LIwv!0A$0HO{m%aGAPKI7 z_@bYN&gX{#mxpj|t@sRdbmkhI938n_E~0slR*kyoDA1-CK3?1{-6Jc&lRxVuE0_Ln zbB~U>V({c3dC41g02( B~|wB9X5g4UZb*|4u)U{ z^+Ro9WnTX_fLq%t!X>ncpFe-Twzf8d9Sv_MgorW2M~~1j)pSP?&SuJ=n44SluJg)+ z+!jL;+g4p$8tIi&>~3Bp0m_~I{e7vDLSwddwj=E)GQFU&4a822B0d?F`7e0VPPB|0 z1ami*^u3w9-2c@AXx^-O&sfogNw9Zc#tvdj79m|@?c?j*+(LYLN u@VBWyYKN16DW7DgIF8{^F+>O z?JfhiytbFJe2Q;*U38?@(j7H(b9H*8KXdg%^GR|is%`6Wdc{7s;Lm bsOzMj>QuKe>8y}MT5J8rl!%}nHj^ymYSZ| Oc8?Gop@#t&1Lw3m7eSF0@<>P}I1RNAf5YY6E}_0wWkuVfndZ1Dk9?9v&BH9wk6u zOLsPndnIUZsKBRV a}XfZ$CaLGM}{K>xsvJ z;1it5!sRSMjbzo$f77F7ncVAb^&tND-L~pV*w78hDq#A)EY >~$8^TpQ3MhMvcisi5PBC#`ZfwOKR%Cd-U8+;&=&t<< zq=hms;aW);i{9_yjkC=)3HNWK!}j>T6}`-L81@kMTHSZI5s(Paf4{aXJeyTcq;RoH zk*dQJAhP@ZUGoZ@`HwQ7h!vLW9j{UA8ah0O>4+G-371DblCc0UUja{Bj&Y&!Z||M- z+}Ln>m;J$R@;wf(SLYfwAT|gF+(D6@0!)dmVvkmrGb3{@-4mRj0Q*7YQW~l-2jW;k z&PFO0fF&Jug?gF~lEC7;|M^(IVESLhQ#xFIqHuk$JQPWgbq4FiVN;koO`ln>JFgC@ z71Qpahs f)N|<;j(7#@Tm{8b*vEPf>cM z!XMwiqqUNd{?Eb9eirD*m{h*R6)hMNmN G( zEY@i{ziFi)K456)S*Y-dKmCg@{?~4AwX%i>QvVR^w89IPaBbve`xB?9qSSjq@})XA ztOb)dJJ@j?DxbU4SBaS|n=Pm6!ZV>D;B}fU1_sJ>)pu6><&^XHuf|&4a$N_4d@HXq zP)ZNK3=^HST{@lGFSSt&|Ej&0`e-Jme>NcSG^-0+GZ5V}I*!EJ42n|xnOfnc b}1iuulg98c4?Af!GqsZ9qt*UCvrBayD$=qI^x5>VVD&a+7 z)M0z!(eERLkX)OEp`f7t2bO?~@8J^gh!b-e)$urhysWkP;BrxrGxM*oq=SwY0Pri3 zPafa{r%faCJ}~?f^Ezrpm5XaSGRH`7QMzCGnvkY}y4@|A_eDdc#*x8B=%o=R6!I!2 zbR%os!3*r77)oj`2RK;{6}ARH-1aUVjQn ?_NAf?BLE z3M^oq@IewGWC)Rq)VJ?#@zHuQ9k^p2eS(Y~^lcKzDy9OQD$>sQ&@N3f!46w#QRYH- zu|i$Z$LPd`77_Omp~%7Aj(t0Gt`bVQFfBPLe)s~4yji5FB9f>1rEFtGxrp+LE`BId zn5*r#9;CEmD1JHg<9+*7ROTd0vCfG=#r<_yaF+tvW95Xj-nv{ZmYUZ$u~HJ1O|LYC zc_0+9T`x1>i_Gs4S8kW4Fb%H_hi=%oE21lTM7fRLSm82j5u@(?UQ768lq zT=}W)f-ORhai*cd_EqIUQ&oOIU!-D7?(xKuyrKF@3pXu^T&i*8TPut`PG97kSiKnb zauHg<2-sy4qsPq$$7Lq^lv5gbe`1(4)JuP~*GGS=0DZO{dXDVNLWPIw*vYENLvzH! zYfBnaRfV2&d8y?7NQ0q>U>2Ih2ka@NbP=|gUM6u$tdVjUPySSMwn>q_ExPHQ0GbtI zv8^^J+=<2azJnia8$4m-<$_}#TzwebiF3jrH(BNEBpm=X{L}voj%{pM(ruI<9PfXX z`W32`9f3j?EFmNx;B6?%DBVrN6yuBn{k0TjWQRfBm6o}IR0vF!fk7pwLGKjKLD!)T z$%Ka0R?6<~yPX>H)o3HE;) 8qBGznA@4`S;lxJ3R8z{g`#$3Uv6%-dl*Z_SUkpPxtlF5LzgE(zR!qM z@T(^^Fa?3X6(8Qn%M-i#tk2 >ZzKBrpikR2>9U7XyZHT0GuG*`>!4Wp1Sg54v3IiiFiU;ADM5TY)hk0n!3E1c+g zor}T)v9$Lgvd+W>Jpf!f{kf8mffNv+s2I-URk(C4dq38`B2#2i)wBXon3o9KXQOH5 zy)ji(Gl|L{I&MfXCw*b%Ehzy_q*v5T)@L2nc01jBfxFsTMCiGoORge5=?Z+>%$7*{ zR^c_r%RB{MEd^Q`7Q`2;*{#^5dwWe)b&lRcsbhn)mnwced`;3yi1&`;u30LeKmaDk z@yU~4YmGydD#UMwf)~dMg)$^mvB^%UoZdVfKwDpnP}5Sej+4FpQFCV5Q%8&FO{qdk zrM{Pb>K(}*Dy**9?_!}vK^IzIbAIX)k$5UDpK2z{!b*-`#}a25zGj}>=@Lo3Be -(;UFCaV-nF$st1DCZ#z6faogjHS!L4q! z|5cgX631O`y7|(Rpjje*MMqMuOWbXcC)(L>%@CG@JpikeiIXW(4!`>s5E0P0_O1U< zMZ+hrd?yK)#wAc4KT>Y?BY4CvFHXUvh+r6OJ=QfeR@B*7UAX~;1mqmrr;k@z_>J+e znwHiPa=Lnt1N89~HniL!qES4&g}wVf+a#rH<5F4$l;mtz@^V))=M0xcdb4+cX)#Ba zYzml TX|SXG9@TMs><2>o(FLaOy|D` zidJtf93Z6Q&x5@CUxow{JU(Roqd$R@TG#a+{F$JjiMad19HI)$VX@2q>S |?xr&bztQM2-5CE6`1y*Qnqz~xO{-mO*;~T5Mt8wLxL-f$R{ =Q*;#ZXatmJ)!U+)lcuCV xDGTbtmY&_D-z~Pl3qTDdGs|&;*J&3uUF1)O>-6mfBvSpJMC?Cy}4A*yAvTa zmA!`?U8Smcr-c%8>I==~sD-98T63Mx>d~1NIJ4JX#M-~lf^V9B@-g}ki z21#(Y6{GuEYumEW%<~Lg=lhDr2C;5IGOo8HVIIDRkvAjHHT7nyLt1_TQT!pnkhx!j zdCp3Ym?y&VU7@&+4wOp051VZaY(m^Es*jDvI|>p^3xb zJ;U !+m5EIQOQ@d7mR+G3 zbMN4BiMT3BwRFpM%jk>UW$$`vc@y649N^zo@%6?7E#^4Q<4 1Jz>#?cGmr&*P2POs%170T`1uUH{ew~d}`C$iSSB~znQ zpLW!>ao4;AXo~ ZK7Ju*lnT^`7?FALRhtb8^^OMwsGQN z`)k@RB|NS@NNC+H-H~qxpg8B|;o*><4UFw~v!+e)`@9_aU=L50ykp#pzgmW>j_>tv z_*nkF-l^S3;t>T@h>7WFY1tZmPKPD>)r)vqg|f>{zr}Bz`XgP}fUKF#yj0KSsxVbY zuXxX 2qMO)6J`^G6w7DSS zUGZgHtx>g8@^wZV*ObrP*Z0aOi)YukxwoUYPCMxSx9iuH!qdL|%GV&ndcF+uuTFro z1+oLm;$Lur^-=-E8(w9C64GDNgzvP43-NC~zC(sHS6(iQ5dQqgf`mpi)tr0`ONEp~ z-%3&yT?mQ73u4yWd?zyXhb42Xnd*tdByLob;F{Ok-qTxE$X>ZJeV)Wf)<9>pW*} zABY~?eSJ@_sG2{#Iv1Zx0U1FW$q9enDwt(o0`U4=2#r}0n@w>vwU}*{l_#Txtj;5s zRzXm1*d(G_jtE*hv4Oj+pdp>sPC{nT)oZh!wG9q28)H~xF<+ihyvf!f-a$}qi@GYT zzB4ynus?#zJ7-%#MYOGgvd6=#|KYH O+fNisTjA`=o4Fl?-g1!Fp5a16RNfmiN_mYrB}Y2$y=z-y5clSkd)Q#Vd2 z=(A7oE(R 0@= zp3n66bB= 6mx#`mX)+|hkSO0v_^^5=h)MfBD`_t!p(&fQ;of3(BtOZneQK;mP z1h>$mpV!8$9v^B*P0o44rYY8KM7W%$Ht%ZU*yEZky~1u=b;Xmt`edh~56dsJWYx5T zb-AX` pWe}B9ZfflDjQAxrkiH#yu;{oN-T8 z+Vzf>{k{CJvD CYSx})32Y~n*J*~d~X%k=oMK{y2b}JzInCc z@dG-w{plK)p&j{vj)g+lv^n+BVW%Z2_^)`WErt-+i_se0AUI2^a3+1IeSFm*O zixo}Q=g9vgenPI$3y005TFtLXf0g`x4ndlX=Tjtwv}$hn^6bCuRSE*+A~?YRr!i05 zny#0B+x57%HQ9}_nuJ{D+v?ka9)O$>wUGi7QIH}hpQkT7LR`R#B@qUPjbEP37xE-> zN`b1q_QU;uFUmN8(G9jD%t+Ggm&38c{`%F;r0yD{f4om*@CRjCpzr<%78%Og0TJ$p z%2)XC0`XNPEeJdibIALF-0ghzs>V>ZbK|$zSO%?Is+~P| t8<{vucLP7ky;jx5tB>F7K4HdkGo{_QZ(=N?g^KiBGm%E3jt$||mvM5mp{ zTf3oihgT}QX-Uo`3yp=%3`P{@!v_7PdepgXr&dfAkCkZUN37A!*bZddxmLOM$=WlI znz8DcjyYG3nOYV&`N@TzVsJdGPG#V2S)ka?FR&47?5aiX%wfV#=c&|Gw3_Hbo}F{n z%q6gu*o|r^ZQU?rW#DqVp-{fbX%{0^lasfm&G>Gw<3#OTVveJD1TmzOq)ML_nij2k zfw#t3M)PW(d@fgRL+S}xhX#J`4_0K;n3@ o~^(&<|PmJ!S8OUp!D@5mn zpR~Qz1B`0QOn6Zikk87_4%M8`lb!csU*@(PKF09yb*%4gb!DZ$&w2XwX^tIR7Op#Q zO8jcL57MX$F4g97Q8b3!^brj+@vq RC`Ar z|A~x=aSc2FZrv3hlRiQLQ#P!OrPdtpYsOC9hiiB}r^-g<)jE1m=~UhywlCAQI8A+@ zV=a_BmW5PjCrf*xzwBF;d`#+*suDoa^-i~> h}lEo*i|m2~$Fe_qLhS zYT)EM={l3r+j|I{(a5|a0s@aXwv`~C ixPjYC%95|9o^j 5!ZE><=P;=Pvwz~{%hLyF zx6G30*afJA?7X`}_lj7v_AN<3hG4xzKD1 ui oq96Yy}E0cl5>kYb|r}WMQZD(|sriC>z--qkWRvMf)vq zW5(+JSRx)`vWpr2Bq+L{U(A2{M7MXLc&kRs2S^|M&7onSex)hif3l&j{8vRZR@V2i z%04InDYBudDT9mIQ2P70o`C^Vy;B`sTURJ%*^ob3ZLsZxSNT>l14fG8D&(kGUtMCl zr<{VGE~l5r!g=HQz=LsdUFXix@2>XOzSdGc7>pNp8>ML;z%y JsdC|BVC~gMkrnuvLazs7a@zG5E`*1M z(zut5@@nnEcpLT0(mS`b4*roZ4Lv<(wjr3>l%)Mpv 0 JZ&LHLP55?LP^MC0A8+2O8FNh)lHqq;i&C-OOJJ+6v3fA( zntuNrr`6QsK!M%7zI5!T79U?4&QOfEQRF#2qww9##I|G Co)T<_gRt% z(2ude-uwS=-qPS2+Mmbs- 4M>A#U9hu^3y4N@12R&iRkUzx|tD^?VOMiUI4b{|Bi6ecE%c8j6gi zsrXl5w?#~)F(^(pZEwgDx2BFebLapEmP;wWc9!NM8Rs%^x&lUBBFP1-af?i#FET&; z2_=`*D~tdAHtXhz%P*fiasSWnJbUw?rR}XWO9hn)tJ!Yn4gFRzH&r_yEe9x8iPdyv zC{G?L?A5PCK)_m=x1-_zEhaH9$(xd+ #}I5Hbjky Ja8N`s{$5cB;>39 u9bxl4_>1X}k7rbbI)OTW=7#JgyxM}tom z1^stoWH2jBj;*mk5*^mEKMiEGH-MX3IZe=V*X;V3I?HsbmWoBEL!O3B?#=A+dKZ?Q zO$0M>nlme=5uxeKqG{)RGQ>$nbgQH$!G7N#t(-)89eeFOM)T`?>!!qua*n#S(KQIx zsbub&yVi0tS}xhQaaRbngF=>3=HrVUseFO*aYxaE_Wn3q;o2;eromjo6daZv<;&N_ zX(snQ@?q9Q%+Ao~mo0Z$#vZyWN4HTS-LWK;`m;h+FsCtjT)~IT6@JyW|6fOwDqyj! zNqzC~ql%n5`pe T7yA(CH$>Z#A!Q(oj; z;z;sclrX IXAN8h9TjcRp>A@{=j#$Y*4QQ=Rd6Y7xR`rWOK@0L z(TWrgDuCKhZhG PhBPe|(z7Dz1QChSCaU*D9&OYv1`D}o zCiLba_OnKt_fVE@7wzmj=FCF)`!}~9pOR>BW+~F>nbT%IOQ@yOduUnQq@}X^$%Y7K zMcdSEj!sfOx}4AIU7gN8l*XgjAvK^|sw=3Nz&6()FIJnRqD^Ixez&hmk70hdf?*aC zsEe3@$Lj35mSNI^8l^8!lU~2Raqz&NJxax_Hj+wv2fG?~)}+1hc38-GSAS@mqmPBf z?5 NnLqVieM(GrlHfO{^i 5v z;-+gu$|3?8Pj@KaV=8>W&-_ r$@lZhI$`ziUJNVaax zA@U_<49dj%hS|^=2va2tU229a6{4BZKB+f%1Te&~?hVbnZB5i*p*7x2LvL2kL8Rb{ zC?HFmr${o6Qi)6!$Dj3GWQr&u@>?Zob3QwH^hb%K`Itm62ZP i08X}F}LuXpdNauWZos$jXA_(s?EvOMZ zc812MpeOS9kaqK2pH}gT>0%D)JSusY7Q+4HHLkW*H?LhS>}pMgn&PF^R_jLrNV*QE z%eUDubb7w+3CKJj6|x5CA;L!L9~*RD(2VMXfbnJ??a9j*+6g(F+eifH27x`0{;T-z z5~oCFv})qr=SQ^G72TQ1IYpE`UfV6Qk>4yz(gLa3g~(_+ns}#ZwwVyIS*?1iHr~cW zmr0vOt_IlMBbn0;bt M4ufGbt&pH#>g(SF!((;H z%n}i?&y1gO|NibN v-n}k-t0ZIe%hW+*B4bjZt?}MhOFgRA>~ndX|pp| z(%&ur4g2OXn$Nhlgmh> ^~l7J@-ilc z9xV?+v7ry>yPx_*+hgaoCaHn4x4J+g^i&@bEwhvTe}@oIkXQKERR3&fY;=A-tnz&u zkt5ia+R%vOzt}lq@;T*_Q8?~2T`c>D3Zy%iJ=mFcV(EX`wmAZG$N&76_{F5Z8(;t2 zdf>p7|2Fbia)FB%D3m47i+dG*g^$blD^_5)8Y$I<7wb#mldk{Cm1O>Hw~}wn#pnH4 zWuYjueRVF6I_RXgxaH#DM3Y+p?dsL)(err=LiN}GFzz)IB+TpECZ&ovekF;~ p@PCZ?6F03J~<9yLN?Z+L+NWp$>;S{CP|5KN|O!#mCez=W4 z+7euNhqk{y@shfhP`|7>cfFxOVL>G`&p_c~g{x|7V 4C%MS?_BJZw;R8$vpffrP ~9$4j!BXoBesSla17U9OfxHJuxl%?EB{Hm4ew4!s;w%TThj}w {%* zrY)9F4R7ume}7GNPS~A>y8m3mK*VwBM=sT%Uo|=fpGn_xZt @}7VNBH7uFu A&$`CFCwA3} z$Ma5&JcDhtlU$EfTE4HU#v{8-`YtIOVG-=E zQMm`rUn$@Z0uB2QRziNwnf&$oJxkdb!&g5+PP*E6#yTELOzGmDm&2a*DSb>hc(4*u znt)(IvxXw@naBZw1>IP_!#50!T+PSc-Q +KjE_8pWrnE1%Nr*O5w&UN N*xP3HlB0)y6j+qQ4lIN0RH{mA8|7G^D@ zF5*lA=YwMo9H88;%HK0`Pn*3SkBqc}4<-Z;z!I0O@mQwzxZv%!_sgrE!sKPCfeDB{ zc08pA!m?PH^7}0o`=j7NaO5qV#pjP>cX8(E7Tfu4uUKe@jiz%lJRBFFT-DOGJyaW` z!6N6-hOV?Qm3`F6FT_p7_mxHXE@Ewig8|3kEb1+s!RK7uF@agR!}3As@~{oF&fX? zT5P32AeFxx_FbFzXx#PH*R!DQxZNnLa_Kb= U1sKo-D3+grbBCcFQJAMVxkN zY%e&v`8N0IdOyLHaoL*}Kj?}!(OPF!)n@`z7&fxhA4$FqE!S=4ccDa@2<@^9o^5aP zH$3cujV+@DXn?_xsSm~>y9CR%8>;(xZmEJrm~duJ??{*EMC{8joqPPSlTUtIpo{%z z3CI?Q!#3;It(4z%gUDi hf~`v%AP$|6@{^Inb2&TKQf(MHSm9#d<`>RH-is3O6=8@wfxl< z%E+j2P wdLyiJh@ M z?u!V@8cOo7Pa+~Be@za)7U8uV{r$SVTiNL-F`bxGQc# zkx?`o_Fx<07IJs>M(lL8+ht(HV?nYoO%L|;|MqbCOW~US>m