From 2e3e7316aacd7cb216aded5ae862381369af86a9 Mon Sep 17 00:00:00 2001 From: ilyavorobev Date: Tue, 19 May 2026 16:40:48 +0200 Subject: [PATCH 1/4] feat: add IIP-12 draft for Starfish Speed Consensus Protocol Starfish Speed is an optimistic extension of Starfish (IIP-2) that folds the data-availability acknowledgment into the leader vote via a new strong-vote attestation, letting acknowledged payloads be sequenced at commit time instead of waiting an extra DAC round. --- iips/IIP-0012/iip-0012.md | 63 ++++++++++ .../pipeline-base-vs-starfish-speed.svg | 110 ++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 iips/IIP-0012/iip-0012.md create mode 100644 iips/IIP-0012/pipeline-base-vs-starfish-speed.svg diff --git a/iips/IIP-0012/iip-0012.md b/iips/IIP-0012/iip-0012.md new file mode 100644 index 0000000..69e629f --- /dev/null +++ b/iips/IIP-0012/iip-0012.md @@ -0,0 +1,63 @@ +--- +iip: 12 +title: Starfish Speed Consensus Protocol +description: Optimistic transaction sequencing extension for Starfish that reduces commit latency +author: Nikita Polianskii (@polinikita) , Ilia Vorobev (@VorobyevIlya) +discussions-to: https://github.com/iotaledger/IIPs/discussions +status: Draft +type: Standards Track +layer: Core +created: 2026-05-18 +requires: 2 +--- + +## Abstract + +Starfish Speed is an optimistic extension of [Starfish](../IIP-0002/iip-0002.md). Each voter attaches a *strong vote* to its round-(r+1) vote for the round-r leader, attesting that the voter has the full payload of the leader block and of every block the leader acknowledges. A quorum of such strong votes lets the leader's acknowledged payloads be sequenced at commit time, instead of waiting for separate data-availability certificates to accumulate. The commit rule is extended with a metastate that distinguishes *optimistic* commits (which sequence the leader's acknowledged payloads immediately) from *standard* commits (which behave as in base Starfish). + +## Motivation + +Unlike its predecessors (e.g. Mysticeti), Starfish decouples block headers from payloads and only sequences a payload after a Data Availability Certificate (DAC) is observed. Each acknowledged payload must therefore wait at least one extra round for its DAC to accumulate. In the happy case, however, the leader and most honest voters already hold the payloads the leader acknowledges, so this extra wait is pure latency overhead. + +Starfish Speed removes that overhead on the optimistic path while preserving Starfish's safety and liveness guarantees: payloads in `L.acks` are sequenced at the same latency as the base commit of `L` — matching Mysticeti's per-payload latency. When the optimistic conditions are not met, the protocol falls back to base Starfish behaviour. + +In effect, Starfish Speed combines the best of both protocols: it inherits Starfish's robustness — Reed-Solomon-encoded payload dissemination and the push-based DAG that decouples headers from transactions — while matching Mysticeti's commit latency in the happy case. + +![Base Starfish vs. Starfish Speed pipeline](pipeline-base-vs-starfish-speed.svg) + +## Specification + +Starfish Speed modifies Starfish in the following places: + +- **Block Header.** A `strongVote` field is added. In a round-(r+1) block voting for the round-r leader `L`, the strong vote *attests to data availability* iff the voter holds the full payload of `L` and of all blocks in `L.acks`; otherwise it does not. The commit rules depend only on this attestation; the on-wire encoding is an implementation detail. +- **Pacemaker.** Block creation gains an optimistic strong path: before a tunable timeout `δ_ST`, a party may create its block once it has `L`'s payload, all payloads in `L.acks`, and either 2f+1 attesting strong votes for the previous leader or a skip-pattern quorum. After `δ_ST`, the base-Starfish weak path applies. The hard timeout (`δ_LT = 2Δ`) and catch-up rule are unchanged. +- **Strong Quorum Certificate (StrongQC).** A round-(r+2) block carries a StrongQC for `L_r` iff its causal history contains 2f+1 round-(r+1) blocks from distinct parties that vote for `L_r` with strong votes attesting to data availability. A *strong blame quorum* (2f+1 round-(r+1) voters for `L_r` whose strong votes do not attest) is mutually exclusive with a strong vote quorum. +- **Slot Metastates.** `Commit` slots gain a metastate: `opt` if a quorum of StrongQCs is observed at round r+2, `std` if a strong blame quorum is observed at round r+1, otherwise `pend`. `pend` slots are committed (they never become `Skip`) but block sequencing until the indirect rule resolves them to `opt` or `std` using the next committed anchor. +- **Sequencing.** For `Commit(std)` slots, append `hist_DA(L)` as in base Starfish. For `Commit(opt)` slots, append `hist_DA(L)` then `L.acks`. Sequencing stops at the first `Commit(pend)` or `Undecided` slot. + +Starfish Speed is gated by a protocol flag (`consensus_starfish_speed`) and activated together with the new block header version (`BlockHeaderV2`) and commit message version (`Commit V3`). Wrong-version blocks and commits are rejected when the flag state does not match. + +## Rationale + +- **Strong vote semantics.** Requiring the voter to hold `L.payload` and every payload in `L.acks` makes a StrongQC equivalent to a DAC for all acknowledged payloads: at least f+1 honest parties already hold them at commit time. +- **Mutual exclusivity of strong quorums.** Quorum intersection and the f-Byzantine bound make strong-vote and strong-blame quorums mutually exclusive, giving a deterministic `opt`/`std`/`pend` classification without dispute resolution. +- **`pend` metastate.** A `pend` slot is committed but non-final. It blocks sequencing like `Undecided`, but unlike `Undecided` it serves as a committed anchor for the indirect rule, avoiding cascading-undecided. +- **Two-tier pacemaker.** The optimistic timeout `δ_ST` prevents a single slow validator from indefinitely blocking block creation; the weak fallback restores base-Starfish progress conditions, so liveness reduces to the base-Starfish liveness argument. + +## Backwards Compatibility + +Starfish Speed is not compatible with Starfish at the block-header, commit-message, or linearization level: `BlockHeaderV2` carries the new `strongVote` field, `Commit V3` carries the metastate annotations, and `Commit(opt)` slots sequence `L.acks` immediately whereas base Starfish would defer them. + +**Mitigation.** Activation is atomic via the `consensus_starfish_speed` protocol flag at an upgrade boundary; block and commit versions are validated against the flag. When the flag is disabled, behaviour is identical to [IIP-2](../IIP-0002/iip-0002.md). + +## Test Cases + +In addition to the existing Starfish test suite, the implementation should cover: correct computation of `strongVote` (including empty `L.acks` and missing-payload cases); direct classification into `Commit(opt)`, `Commit(std)`, and `Commit(pend)` for the corresponding DAG patterns; indirect resolution of `pend` slots via anchors; the mutual-exclusivity invariant; and slow-validator scenarios where the optimistic path degrades to the weak fallback without harming liveness. + +## Reference Implementation + +A reference implementation is available on the [`consensus/feat/starfish-speed`](https://github.com/iotaledger/iota/tree/consensus/feat/starfish-speed) branch of `iotaledger/iota`. It extends the existing Starfish consensus crate with `BlockHeaderV2`, `Commit V3`, strong-vote computation, the optimistic linearizer path, and the `consensus_starfish_speed` protocol flag. + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/iips/IIP-0012/pipeline-base-vs-starfish-speed.svg b/iips/IIP-0012/pipeline-base-vs-starfish-speed.svg new file mode 100644 index 0000000..6644914 --- /dev/null +++ b/iips/IIP-0012/pipeline-base-vs-starfish-speed.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + Base Starfish + (5 rounds) + + Starfish Speed + (4–5 rounds) + + + + + Trans- + actions + + + + + + Acks + + + + + + Leader + + + + + + Votes + + + + + + Certifi- + cates + + + + + + + Acks + + + + + + Trans- + actions + + + + + + + + + + + + + + Leader + + + + + + + + + Strong + votes + + vote + data availability + + + + + + + + Certifi- + cates + + + + • Strong vote = vote + data-availability attestation + • Best case: 5 rounds → 4 rounds; worst case: fall back to base Starfish + From 2c23959088de446fb1f2890848bd43b8bf1a8126 Mon Sep 17 00:00:00 2001 From: ilyavorobev Date: Tue, 19 May 2026 17:00:49 +0200 Subject: [PATCH 2/4] docs: add benchmark figure to IIP-12 and harden SVG fonts - Embed Starfish vs. Starfish Speed latency benchmark under Reference Implementation with a brief caption (19-validator network). - Switch the pipeline SVG's font stack from `system-ui` to `Helvetica, Arial, sans-serif` so it renders consistently on GitHub. --- .../benchmark-starfish-vs-starfish-speed.jpg | Bin 0 -> 36583 bytes iips/IIP-0012/iip-0012.md | 4 ++++ .../pipeline-base-vs-starfish-speed.svg | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 iips/IIP-0012/benchmark-starfish-vs-starfish-speed.jpg diff --git a/iips/IIP-0012/benchmark-starfish-vs-starfish-speed.jpg b/iips/IIP-0012/benchmark-starfish-vs-starfish-speed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d44a0fb038da53ce92fdfdefad51a54719013b4c GIT binary patch literal 36583 zcmdRVWmFv9vgiN<4DK#r2G`(Da2VVj0)*hMK|&bZU4pwy0tA=f?iL8a-GUPml8`qf z-}&x2=dN|vdheY-ckiC=+EulyYggBDLATS5Zzu4uF6F03g6K;MXUBGysHx zf{KC+LPbSILj$2>5@KOuU|^Er6W|b1kw2oQBB!LJq2pkrfw0k1QZflJvvG3q^71}n z6cQ8U7UkgK<$e%?fQE*KiGfLqg+@l+k$}IJ0hmY#07P6QTzDhD#%+CPw#g3-YJQoJ zh=%)rf539A1T19J4HJ+I3DZq2^~KxKk1 zz>SBu^dap&(V5OR&A&7JSJ`zPcr)3@x;XmG_o>fVIT%8~$c&qaogWgRoLwv>BOHVe z=5~WO_y`0I85xzKlm4GrB7-CVC!0%~E0k>qH7k_ulp?{eEy6WjPO(iC`dWlM8L@}3 zi#Mltm;Ub?!BHs!V_BDtWH4uEeb&LXqPuTvjQgQa8P}mN`PAh5@M`;>> z_0R0c42!2G%emd#lpUoBPf5#+$(H4G%XzG?>vVZ5@$u$y6Y-N%B2p6Z!C)#$G(2V@ zXh?`BkWQv}7b18T*!^xe4o0n!W{!y9zIf^>glhUN8df)l1*O6 zSg}s>d``YkN20;>u1%!;bfwIQGgfraEh2re7$Cg=Zu(kuN^Sg#eMZkfU?=^ftOjwV zt%o*8ROmZsqk3~LT@wrOB2_XU^l)S@(LtMCTezo->N!QevNC{y4#q$y(+%wJMtlYZ z5D>r(PJ=D7k^A+aUXa)o@tHq{=+7?}^K(Ma7e0X7V}ebELT@fU2Ivp2WXC2)n9B6q zG~+kPDe&v1JH|X4-2-!)H10(+wdGl-b!^TmLty}fE@H~qaCshlNjgM}SCsklmU+^I zjj_GUo3huG{r&F_eC}|RsED#^Z}qQ#bZK#ND+2)O00IDj0RZdq$7;p4b%4TPG2Rv`?-t7b}c? z_TD6mEg$SwulOp7E|xH0`(u~%z3|MSF3u3q)tD+{OursVyS`K7{>l4R%M{Pb@6FpM z{;EaY*FRRj=Y|U!H#WJ-+GU5#IgxR+WfK1+MXTf)us=iRpOY=~6}@<~F4}oKKx}7; zW#CEeIM=TE_=+*N;oH-p94o=}&vYl7>qu|>glL@5kUIIqPoxHk7EP-BhvqP z^%UdiXc7=kc4F=car474(})A zT4wzN`MKUxXo=#*DyvYG@m&pV_4aHt6AC$3BjMaXLbL&az@Kpj`5SctWyTo7dnx6 z%2YQ)G6w?;nSxjbx`$B^6|P*>wp~3vP2MYs`3dAk;u}i=g=DwF<)fA|fwJwR83KxW zU&ib&Tw83wD#D$J9E?o|e~ zYnmR4L6k$z!IqdBJ?fWddbz6%s6``Td^1E%H~Newcv?=}f@hJ|Z+roWo|d;f%iq1lR24PiDAgViqI*B$+-x?_QZt zRqXlt1Sb48ARP?wR}D-*t`7lzz1K%(!|4Ecq=hH=*`S}w4Z|)ePkg$k9qxH*#@B$e z*ifpI+DpiC+`eis^3$mlopp-wxvruiWnxdOWGd>R1liOh!F`?mBn;oCIr=AE2^?jv zxqLRFFcbI_((!$--j*{!d3tae=;2E{@pj=dw9!|N>AFJn+;pl;BdAMyie%=5`nmJY zRV2sT#qz7F>zAAUPeyj-4nz;q=>QyMA4K;);n0yR9)Iv@ynEvEKHlt#cDnj%gjc7% zXzK0s)nLqhWMri>0lw+r+LUnTlEV9VnE{GpPR}XJ)YFzL*2RRg){eq1J%p_HyhJw# z9zMpl<1hG~MDIG;EU7N?-@cVk9^aR9f8W05bA5O3D*w_((AOlF*Hm&{_cN#UmzRa_ z;o-6MB>nn)q>T8)>-ep5`gWU2t5fxUEH8mD3#FEA6<;=`R=cR)Vo5ar=$kV4imWK+ z#fU|n)Eukzh|{rFmaS+NpVR7?_6z(QE;}QWZ&yC;u_$(pyL@wwsM?3sZzkU`ml(Xy zvM02y9({Nc00aWyxP3BTGq!hb&2iQsyH6uw4%vsEMd9G{m6MkT zQx%n2cRaG!X|C(E{2fF7pJwEF^-YF7lc&3B=ld#NcdfGwu^!Ax&@uziQPw;Ri(SkAEc}-RkE&^Yr^87%uji-`U^H zdY$o~yy!LzE{!jHAl8ns z-J>tguw^h*cr&M(OJ-mRZD_<$5~-mZQ-I7WHze2an3V7p=kW3NHzc#ujVTGw&ciPX z+;hhD<_36evzfC=DWn*E>)~Cg?dMMSsGr+^K6;Dul)57us;#}HAtoA2zvy$Y>)oJL z0TIj{rX_Kd60~rsWgZ_=5^FT|_~}d5jjGS#GT$NP>EJ4$ZAqZS{M3O+@h(l3o1D8m z@~YIp>T^(rS*bqr2hf}`D=8Z%V;p@@hNZ+Y15q-5pK`5Mb-7kQHe4AlwgP=KI2*cU zSVrpn7&7-*nZ9j?HYe9tzw_J6=2uwj-9MWHimtOkj@N~yLPc@-i8jU3KwzH|Ygw`9 zYfR}PQQ!2BZ%bqCE_mxxiutg?l@N#N*i7?O(%B3ut{`$-G(NB?*LLQu2UZrw?Ac58 zx=~H;n9E5;i}#@ZH3J^3n9z}ea(~M7DkChZSDoJ6g>lRbm7@3zQBsbgk&O~dRm941 z-`MJjrE7%Pg{s31*y^b)(MK#3lps1~d#k%&9hyn9~51I-<=Lau&v6X*$SxSVz@{*#fc+Mdk;T;G`=;yci=c74B3*} zQq1MIVp=XK4uV#jL6m{pn^fY&oPl94WEFRywEgIe-8$Hq&2__(@1eVbiDY^4Z&4tG zS{b3O;jh7jNsPyf!7TEzB}uyYQ@ndJ#|vkd>zgsTE3%%aZ}q-L3U*2gDQuqgt&gsL z6$n83vifeNE_Eq#ovb-pV>}E%;u}eMqs2D7tER1b7wnlqP!`2ZoTSY=+h$e!QoZp9jS6eKN z6D=)`9AzSxWHF{$eHG{272bst!1`ii^#{(U7rUTZnFUhQ^G52_=VJmCIhdN{z6Kf9=svNzNgi8UNBeCbNId4RglE;fQa=*$#te|f z#yt+ynxb>1mN~EpBAzl+(Y)Q&N}6eBEcWu=2$WRaWe}uNU=Vs7rL6%RQwcOHwOXK> z^3)`^HsGw0-J6!`zj1a?6iG>dPL!dhNr2@(PL~%=Bq^N9up3qsJj;~pgTUQN;E>__ zKfAO?i+ehF6dW%O$r=8H8DV(MTaRxZ#FrPUy7*Cz`uVN~Z95qkmP~aXME1V6`UI;y z^QZD~Nx~dKq#d#UK}6hOd1BU+n~GGcpgzT8K}j*0H`ya|?^(%KjIC013qBGlPzj^l zp5SwXznZ&RFhxAaBX_M=NDnJi{y2AYjK)T9|L?}zRTzkfs6ix&SH*6Tezf~~ z2KC-_oID8kT)h5OC$Jll53fE*9YKhO$>{CO#O*)3_K$+)_-p!W$zOov&AH+FZJ^Y~ zQ)i@iAfd#5jb*&nYR;7lehR1ebKf7F^xtmlHGcX{(|Bv^OW-d+%^m(7%`d=k5Kkg6 zq@JLM6&!Y9=R>tr6loDd46#y{sFSn*8YpTGnQMnc?SVe16C|#4_y|T~Q+^{DYlT{x zB}b16)Prh=@*oMQpg{5p6f~`yYm>d8qOOrRKXD?G>3J$Kdme2x{F$};*J_)l>Q9wr@M=YQGcwMOA1koHPfFag zqYZEBX+4Yi;A0ZKp{Akt2bn50^(gXWLoGx5G-b?s2tAy}S1L&u6lIt`vO3b6Yk*u) z@_b(x-MbP+#t0_+FEbbXw%{KP&fe9d%AP zj4Bk!JRTM+R@}&Bl6h*6C`>&Y9o6enym= zTVpZ5rav3JPCSQt9^zD+$qQOGO{V+20`a?fQ`6~@TeZbX+rVI9QI`%j#xh})rp z^fK<4oEgm$x}WClU{g#FOTV1LiX{xGFCO}hc!A6F5;bTrVwIC34bki!gS;ye?}jq* z^Wjq(t6Bo&3~mMzx(zA*=fjyiTrS|}aMRfo!|SlU>$6ghlj3lO)#^_V?{H<5!7D?o zy%51PV0&^j6EoHb5c_bdnE)ap>N|)IYy|{jvvPZx!MVx!3=vg|!!nf?MLQyNU^5%3K4mT>_I>uRbAaC9gvmB{jqnHrV;Fok)SerVe@?4PyXuA`cB|b*jA@n{6hk?r4TD3FnDd4OykVgWvj>88U|D&bjE)9{vLjt3GbxH4 zjC)>Y$1+alXR|#T@U?&E5oN2t5#nszPTr z6F@PO#VN@abUqBJO#+R|&t}Q8J;t|lXBy4a@Ml|$aoR5tt%of;vW+Wq>`iBo&M88f zC!ta#kXfp2V3?tg;W%B0@vtr33qf?jAc){-nufpVn<#FQnXHZkQH@UCUPiLPZM{ms|*tv6PbJ~n|Jt(&i#O~afS(>VFQr+Yo)S_-9!eQGR% z&tv&S60)%oO0y6KU8|e>%F=#{W(?uU`AWZFs_nm?17%xN++%!MeftePGXaPX=XEDGVHo0aF16HXe7Q*PjM;u;Yd&X`u*=+ktd<%zM@)&y#1!qbn*hh;FZYmLfAn3H^jGWH?nSIoEbWJf~pcK+RBKh^uGY~ znuV{ipdSdGu0#efchNr#$H8YcqC@2MgqmBCM+)%AjT=@7C2Z6j$5TrsQ;A}-Lr1Pj#!L;RNlD*XcrTEh%T)o^RKAqsUZrlS%h=XC z;gexLQrWOeBBGn3k^gk`}A1c23 z1^9*vU#T?Wg~9OX)GjQV5u2I_%5EeTx2$ zd-P*|1Isj1Px?)Cu4lNlp`->Z$YC7eP2c>LNDBREGgFQg6C{ z!qAaj#&jJI-Ea}34NmcuM+)p2V`Ltq_r5O*-!EYuQhby<2|XCPRJ@q&TKTw zgAS!|j8UDD?r`=UENXZZ zl$@<@UyWPccE?_GFmgoFfklXzHIwv{v@2YaO6aofG^R@VXqT(dDySD-G>l{0V*O0| z&=dka+7nex2u+DPffvN)>TbOXTB8es1?io*72okMn;n!!SL=-03bN{nM6XVj2K>HI zMpU4y*AZB-7mE~y%2)bD=`6ZbL+h|N84Mq{?Fg~W7(6-7a6fISmSyUQTNTFfueSUt zD#yAo+h#Ic_IS(BMLQ|=DeG~&a&n+O02XK^&$a zFjt0nPX}B-WiV7TmHE$M67d&^t{qCNl!lQYhbtFB6Dx}9#$2)zg}%?&Q1kuAkJPRs z7O!6baeB4&Ywgd!05a`vWll=XEU$LeR$jva`cL;EesdK@@KgDM&UT3p{f?I6C6ka4 z;eBcH;*3Ewrrz65G5Wad%*gc_PmNtNZJ$p1xV)ub0C>NUe%Qf6LI9$GkWdkkANmIT zbtK#?xR7umk{SfuJm#)}G_;&j>WN7On$O&Tyb@+XGv|eMgmf-xks|M%uk@%Prq%^i;iJbe-={5>G;6 z3HL~47qI;p9P*;<=z2~&vCScyapAgAiwtejoM`qj)#0|vW}!*DyitU0Uw;8E zS(3Kc?HS$|QL3esHoke6rOqLt-5as{Bmbp%GK+0cCd<*LjzENob3KQU_y`G}z%|lv zovI^=lT$UC+~Dw6Uy*9pOOvd7rFSnzj8w+3?t1%P)wbn%E_Lm^E&T;ZI$6CmiH1{Y z2gfR(}_ZMscW=+XVH7?dFOOr;>aDKvZyJp^IF?q($l)9`^^A+41r5% zOWZQ|l%FTQuOj!c{`vZhS|n<{L13c9;7-2h=q^*@RSCl8+M}@`NrKR)MF&}Yd_j~Z z5nqS~rrHNgYK4-T!xrsCodm+Ui;65!*^!vKWcvpVy&WsNU6S$RD?OXu-GA~&(Hv{q z^G?;1bC3@G3d>hj#c^|2GI@3VlBA|r{QM4KVqd1h`Q$TYvuxTgz-LTrSEgTpiP|aj zsN&Y`39tBXm0dRT?(zU9#p5G?1kal%uyz%-l2}fQI$-sCD!*%YZ1;!;UaP?9OZ+waFTk>-cya3Yp*x~38;9G5 z(12wlwLp_MWwUK}c~BF7wPLoTM>K@K>l7SK`S%GA^*kGKJOH5tK-YT}BHqaUI}Sf@ zm%YeZB>Dl9amwOdVvmrcb5S%o*+*~2+%@88YhJQ=3giahwAFmvdyiY;6j4OA!;n@t zDb%WC$4e4f`a$z$I6Yw$40Z}_*8L1&=i%z9Fo`l}nbgLN&@)S~#AoOcW-{X2rN2GU2SNg11LQ{ETV!&~IU4!^8A&GC z@Xgh*k&=Ld5n5sd`+EiFJ!CAoDo9I22~Itvwr`lbdu=zs$DcRA+T=X^W+7@Ie8S5~FYIgT;@n+oG|mlE z!8-l?6Q%OPaJ8TZAIy4fb(Yj>cH#EE{1Sb+Mwjggww6kJ!ueMT`yQIx8i-`ha#5$& zg1Mvaxk*Jl_MxgXEp@6k={^Sfk$)hKzNKox!BD%XhHV`M_PfFDSGzi;(|nBHYOBso zD__WEdO5JTre@yi%yVvM$k^Z;`(JjN9m?;qcz`D^T0WK^9z`xKx^cIOu{PPI=DaJ8aWsJN=$uVk`o#gfpJbzl}TMITsg=rdl?SG}N`$R-)aJ^ef zn9ToGHi3wgv@J>bO4slGtGIJa$`KuLoj9|NIk#fL<^)uX1}2Y=#ZY0@e$jAa~l>41IKgRnx8cr}*{}Y9~6las3G%?Lc;goNTZLMV?F7kaF zxu)1&Rm+$k^DCUv67KV?JGNd1M7V#g`vv$koz68iS6Q>Y;LL{&r2Ykv_8>S=Hp=~2 zDiRq=!C?4dTq)|tcfxhYp~5A&iIlGVNdgsZP4p(gtnjzCI+n~;)R3Zcwa4MMyncoE zIe{!ir3dFm6SPCq9L3$Ey{i`SNtrKYwjG*PrrWt+5(?t_P$d)ZAL!%P6vM;Skq>_J zjmNUMb_MRmH_VznLGRdP6n^5m8G7B%@&a0!@A94~fQ$jQgP7dYecc?({s3fB)dGZ4o5xh8t5JSie%iK}%-XxS==u@I8zO;TX- zw=pena^A!_roh?~*a1X+F+geijoD$-t;_(y;W$;`;?CUvIlHRH2N-*E0?rHZa*Wo*V&&I_lx@vD=ex zC!y$8@ln|{HX(hBuOn)+Sb{x;elZ$E%9J|TGFi#v$kBwLVzn2dwa0TuZ=mfSU{GvQ z%{hFsJ^#x1y04K>u(8Q#l5xnsVcpDGH0|s&))j6x`T6bp{y3zseRW;szW@|?ow!u} zI5KzSPn&!`p}ns??N2{0Qg<8~vkvmcrF349fAGY4(G}G0xWW5(C$N}GYL%DYn4a`i zV}u#zgSk-C)=up*-+oPG^Vi6e`lMDX4!ry-gFvr>9gqCmJ0;s(&lJAmEr}a^Y@5{< zQAc%C--m6(+CuTS)eu;b1~ssVR3cgQ=k&NEvZ!JoXE?7q^CwSKc^Lv6)L|#PwJ1X|MWplzVrl7ASCk#8=lYSR$As3k-|ge<5!M<~=2X%l zS&-|9Qz%kGp4rPMXuIcOPoRJ`0`S_6DrXfQ;blWFFzhGQ`l@hl^`{va#~abX)z5N4 zWh%2GCv{ISD!riQp~qATyD7dxiBnN)^Cc^(yhD4b!q4Ax7xZFJ7U-GlQRk9WlWcsH z5K$uyYL;|&11)*s|KMBa(@jSh5*sCF-luT1bW?k`O2?YypL$m;DLdH?NTk$0sSiV> zD^$y$(@45gNg!(XhOP6eI8rlDRn*QuDB7f&wcX?O_#69Y0UUZ-h5b9d=Vu}ue*be(qnP%}b(tm=$z{}gw{Cn} z@1l->_aIN&bH>LcpdO~-sLS+&U<4Sj`;nFc#!NIt>bBD20j zN5|K{04|*l@!vz8+EvzYp1#wFxyt*Z_kr$S_pM%4=eK@VDgkd%j;6d<_au%*H;;9` zOIs(Kpuaw{Lt4{Lrq`xuAOGmon(BsQG^FianMdc^G4#%p zgbb|biEi|XkJDc+8YGXF9AkmK$`1AX;$bEQcRG#EYb5ri?atS4KK*3%{48#%6xu4N zc;k@&O1JlQ>$|nxwmpIsT~A;czWl4(A|+rd4bol(_AEnNvu*Em+T1u;3PAq7Z1i46rDUB-U;$ z&Xv?tD9ioOhy8^;Rl>F^h2~C$F>dK#l}k`AEtxXG)wX!!b6o5kL1^2oMG{W&toP>^ zRbHo#q2`>y(NI)W`%a@~cL&H`Ljt!thb>@x2|#)XkxgZ{WlX9}R%LV)qbOwnYtAsX z>M0aoe1gt-^!L*$Da7>Ru=D1MSQNe(Awfw(QAD1gp>%A@YJ~^f_T1f$Sy8V%-D9iK zHWkr%v6A;9YE_=^EKL}4?R|>9PhfO~M^s1*MCumk)U!CRMh($KgWd$I@nT`G4b;O! z%CHUHEz2SAmE=6B7ker^Z2nA`Ryfs}wcX3Y^ny1MRYX8iRNd7Uuu*y{;zv9hL~}xi zC^3pW0dZx*j-7S2L=`~;q>nz#ZcBe#1yuwC#>uTMR7^0THPiM+<3xF6pkqGhRr*%> zYgsOJs>|GaD=$GZ0Tj{s^)4@lqnjop)VANqr^=$j1jdw()EjNva@S3%hlRMF! zNZEicA!`lXpdT}TFosYYNa9M)hjbUD{?7+%CPcwIW$G>bzBQD1bV-}qM%?^|jhD6_ zm5tQaV%k@obb<(5UJn>o*5a3~ivtBuSl~5>oU$I#@m=ji=bko9ZZOXWu^CeAH|X%l zC=d)hQG&T8z*lA$al`OGPgz8Bww~nebq33Ti$*jQwOTQCUb% zo8tIdxzAe_*VVnIHx;omTG}GT(PQF!7aLOxKw8;4~y8Kb$s!*2At z`k7|<#$o;|wXp_x@^LQv2FxMrwZhp)%ksSmwZNS`w=KW+X{_=y64Nd-=K0~8OJx_y z2H{E60j?Ulu$Y_}{}X3)V5FxiX9l+_LpCU$m$}c7f-!Ee?Hp^9?=?`qEpRPoTAoP- zD~Wt5x$aE|lDCRw58i415Q(SpM^%@>kq$|;8hlXvi}uq@q&!?ZE}u~LblBs%jd7vc z=I7S%PbQw&MSAuS$@A`GI(YLS*Vc&ouV3xK!Ua5%2ME9l)EtDW(x*9TMcm5dZ;SwY zIb3SFQido6RT6ysBp5^qCZxzKE$CRHp#&7dWjh5yiq*>(xNY6%&Af{-Li1%#!zgqR zVeZU1tg6h%X-h-*Br*bV4n;-W72BNIA0pYMUqEEajv`7bCK52@iAq_V?p!SFN<`eN za&ojTC2Q~%gRuk&1_ab|n?Z*0q*mHmB8}kIY$liJUKeb~0>1v6_EdT0-tY+J?WY9I z!mZMB3)D9Xjho^=?Rm>OGQm@=+8*Of-oZZ@i1FNwXc$^@o87$f`=H2zTD*IN8f!3@ z$i_vRQE!pVN}1@i3mq&T5D6%o<{sD^C8%iO_;_H(zJ*jn%LOy;W)`|9RaL~5f)S!v ztA~s~IL=_~Y}z9;QH-0;-m$!kHNHurZpMNUtjbX>YZ^X@J2w_ZUA-zfdN44Gn4R9{ z?cii}VEeK7N{6p|E&WU$>MZD{F_WRLi#_a87L#&|5AGaLUnv#D?&v-@kxn<72w6m} z--9pHqqEwMbWF%1Qdk`n&41|2yOSu-HmVLRaO|U<@16bv*h=2;#+{-Um6}WU2Vi`7 zL_aISL+|BSst{dxm1ODHwW*{2#L^@`+CK!clwdBRnP9B^l?h<=YC3yVwx7`{92LY} zj%h<}J3HgevZam-!md1s8DUWKEd)wF;@wM&-DYX>Otf`3yVt(U(ou;}p&3 zKn0qByh0gm>#U3GGHhb?BiYl$Z^S4T5&4~^EN#b?9DrwnOj~mrLfDM^L zNrCYTU?U}g+wjv!!3s@vg#@=ULTuP*f@&t8kwmI6H#Y~~j%`vp-Bz;uwj7ZXq^SL5+ zK@%Q{N^Nau^p&&+Dbh(B2c>##LqG!qZ-Z0OOaf!8M!AePg!#2LC1VhPtMlj4Ga3nW zaJiCXh=RQn=v$c}r|C&34Wi&JgKz>*rOvfuC2dru5#M|yamr$2;R=Cm zpz_a|m;6e$LvERJ)+dqsBPih@s?p|M?Lh#;ORW_{mKQ`??zp9>FcaN9bz7SzbPF5A zkP9UL1vZ>>DTfAhEo3a-3}8h;OB@qv5CDVP<~06X%AN@^7rONH)fR4A;G?A=A7L2F@B2y3Zw8#sY>SM)Z6MpRY1mzJ>HO}2)o4-SSph*#FTOI2jq-< z{cFG&a@Xdq4}2f9?_M9i(TLMN-ppE^DEAx{B^<_thELxM6ISX)Tda_2O=n2)wZ-wF zt3a^Do24z5hsGrkG{Db^R1jeaorm(jLUM8sWf_l%Lo)J*^Ft*|o8L?_9x*k4$w*8s z{LO&bbTNc77IUYFL?A#-;eKsP|AuWo5PWwt)lu8Gb7Pfrho^ zIrn8^*1yE7OxcjVe4zgpuQKr&ndS3?2=_nQ*(VkRD)ZT@87{L-$%8&{lbbN`C>0=3&%-9AXNZg6Fzkwt(v} zeK%4!Qk5_Qb0Q(o6*b%@X&a+OBASjek?HpC2(`hI_@K&QB_-$0;a)ZEdM0_PN%#9W z9nJX=RQDV4k9T<|{K_5xh3k}6y!UvL)NmS&Did=TQJ%fho)@7$!?=U&&tM@eC~Aiq zw#7xyiKX(r09gm^V|Rh4SUG!jka?3zBiFWs z@Ud%1y;#P~cRV3g48lVJ3?uH5<6{jzb)yCVrmeBeB*0ow4l{sO9dd9_1`amXO##ZQ zY^st?Ug2<|KJ!h={SQ{&Aca?0A$8N#YjB$cx^u~^I4c*};M>fyZ1Rm@VHBHp$HoGF zmcBk8&rAIRq!Lk=gVnrMFv&X$pK!jq`uOgNC}C7M4Q}#kVR-NBj#u*FTcX6{Fv(*S zoBZkQF9nS5pJb%x*S#OLCOXaOJ))Hbxv}4YzaR%o0tX`70y_}PUrM<$$?8d7 z+k()ShrbYodI}>;woalem)NN$aB0}ZVm>n~XF}Q&e;bH((aI@wB3$ZXSxA|iz^}xL zL*5gpkM<}CfJDro+)tUT&5UkSZfutVo=mgl4e!^F$uC@Rd$ffRd(My_YPZ*RaoOWU z!Pey3Z9s{KCczR?KVrqiqXB3Z3h@Z0E&f@G58#_{Zmm2seT$*QsP9~hYaLucmLD&( z@S@^gK3}|;`gP`g_zc;zm{Z!%?U-+WFig(dOmI6SzE%N9m|@Cp1oJfaKPz{W$Xyhr zdhbH{NeC*JdjN`?Q+{R70E+!Gn~=Z6!-&}puKjP0jJSfXphHC&iG&ZkFV>$&L$uY2 z$4@{HQ7{h7Juh>zs{p*wa3#TWB_WU&i)hw)+`tq_g$Y3fQBaxV0zb=wDjJ)sq0^$iWTTE#aNd z7~prruMl=8;*Ne0(h`*++ixt}@4drYjx?$~nzt!F)yEMCK|WyRyH zmO?#Lo;a9Z06A?a>oi0DENr`aTy!6&)JQfE{k{;7SWdYZ#H1q!poK+U*Jbk30I3u3 z*`5^#RLWgm&{S<}5w`Ntyk>rlfzl?iMahjvHTX0^XlU#-u)qWtM`Yq$GyOUke_8Hfu$k}k*4fY~GQ>HGrJ zdM6}2w&5Wvl7N-xKeq1?dSA0u_NGpjP(zccFp33!m9;61Vyb~(K~YSFA#j95A<6!q z45~VPJozW%>8+S%KV-zNzi|krxBuWojBn`@{F4d&2fqEu-K_UpKejGjWH{q?>@_#+ znFpEiBx^G4y+=NeM+}Y7NnH7XDMSg+=B*o;O4??6OAe$Iqw;abbIPbM49ZzyYb! zP(&x{+U^t`rjACrXFzudpfOBC6Ru045#}^RpCx7X3qh6c zxGn6NmQR$d-JStWqXe`2r1ii+U@|)uCr;)$H*@)wjcA1vEvn5NT&Z`$-T=~0 zCbvH7GIPq{n7JC0*-RN;gclOv=yxA{2bv01m8C9eo?~5b8;IrJqGMP@w zR+4Lv)!LtPk>`)m(Vq~SRcwYw?%!iPL`F5&1+asHsT4D$Gso-Kpn{=$?Nm;NC#SHKyPG9_|K{?w*Xo&Cd-i2qmZzkvis zTNQdy_{6jSG3v#bAPQcH`S9lO<`{L$4=}t%5@<{)mM#c1)BH=LVVG&+CxTtveF^7Y zFj5ZSWRhnI&DJcMU=-oGVv3w%FDk`*CVq`)#=xjdAKMm3T$cS$GEe~HX%GFKbe-~At_lq z(SkBGy-_9};iPY&b+Ls+HzFW>Kqi#y7TXM38~T`qR2#&V2$j`k>E@2tpIr7iU#|VnO(P3JnaL(ZAqg`? zK10P#pqTWMX9RT9O6LcEljhNueO8RN%<}Mj!9kmZKm{|yAT2111VS?FKy5IKzO%ls zls$dhhuSqH_=6YJueP$cg0V#)-wj8AX~?mJg3d9JIOeNhN%0Y59+-u^uzUoCT8$)@ z>jp$9?7+IX@Gsxtg$bi@UEno5Vtz)2o^_1+7I9NS1+ttnD`=(Y%Z`Zd`xtqG+u#Lv z$}Fjsk_8Y}KR%_9T2_3Wn>=f2dniU5@)0XWUD?T!7mn~%t`TE|lM;OVa$^QPWl&m(7Cy4cwcJ}okln1%Os`h&TL>w^sD!^lwhm%sMx@jlq29fJ# z{Z{Jv(>j9XfOQE(1U`)LPZK5A+2RpN(Hnb;BH_^Z=!fy^hlPwoQn;b(<3=< zn)$RpBqrEGlLY_irD+d7xDoKN(RO;UjzWWLK~h=*2U`+o1*VH+P_^#ab3$PZr|(DN z#9T(5Q!wG!z@kAWXX$2^7Dqf!RMMpb0?|bzkJ(b07!h728dXT23#2KEU>Nsf2UlD{TM7JQOuChkKQG$J(;B<|Pp9qRHo{?C|0%1IH5n2DV2BC=!#DVh1^_*r?Az{o4OzS+87S6F!7N$L( zShH+FKTaW}q(jHr7Mlz;)r_iM;(LiPCb~f?hZjx@&umWccNuPdX_U1)oI9L{;Sa;j z3jcavB66q8ZaAB;`5aoW%Tg5J41~4y$)j9}C+plfWF5uZz4vj*Q{=-K-btsItq2`h z@VPfv5E@@Few1Qm2F4b9FNsm`ZD59dTZHt-ZW;s-uo0mqMA*^$Ykb64*u^8fhXY~j z3GKsy)c;cc;qc&x6X8c(*vub}Ii`nVe1tF833$TQBh5Q#o z<3Fwiw%+iKGcYoMmf@`(hJ?ZVAu+P9SY1Yb{ing)9`$x~96k1~g$^`p9|d@lWrioF z5_))gfS8#dkWlSncw*6nCy0ddQ}~5&7tR1yg+m&nitr@#z(tS(Pl3NdLIbUVHOmfq z#0GQ_F||6PyNw!`OwaTi@yo=Te^^Mh{~ z5{lD}?QpXZpzJsa+E79c!|n$E6gw1_4W^etg%SmBAH+y5R1uZP^j2e4ifx|lwF^~WvfqnWPH^PfmcFdbp&qpK$HfVyGN ziNnWeoRO?{2 zeqK`Y)09~pT-Kx`2OBRCG>QSe+mX#cm-j(D$M+kiq{Wm|Hq@@N3vHasn}4<(-sE3%;G{ zGu&<(CdsiLi5kQpTS5@{+Z$u90;G(e^2D#<%T zoSgrsyswUnD*7HAh5?3j7&=rK8iq~*=^T3Kl8zyyl~RV3RJu`W=$?okSxqVZD^=5!2}oo_qYU_xUh33YISMBSq}cAutnLcf!W!A7 zJ`^{jalPbaNy9<(L%_C10ia~IN=kYM=j)P0y!6JNN1@52w#GP?SrylJh;=wtSR<;7 zZFrqRNN>vFOkewgA1W+Q_8Tw^2~)_oWm@!3DlO%}&R#t?Kj*^$+z7oN{TuTQk%X@d zZlgsa=AAK$)4GGq7sVGW5pr^`+lL{Btd{RvB1*x91?524BZyVE@ySgna1pQp-hK{| zOXsy=s5NJgpAWM5M2c{kKYk)#UQhA@&S8SX22fvR5+?7+cZx==S>>G4#G1GzjnP1? z!r~oCpaua7W(nkIpo^>n@d6J10=T@;;LELQB4}q5v-DfAHTzwmQ0lY^yN~@uk7npM zC~?LT6G>g^iU{%iQuT0s39X56_ks(O$zcT*RAdEP%4J9(!;&0b)TkF%cKtK477_Q|b1wY=e%7@`Q?cITeJah)H1ZOMNtYRciGH05V!k&pKfM<1BM#EOUueEJLuA z#V7Gn(Pks5Xqm>Zhs;zlP+J51AQ#L6awOT>93JOZaOys5)lkwtG9@OdFt$cHIrr-a z&>vtYli+EfDdz?){>V5lu}FH93r-B0kDV3AJ^q$xHUQO^5=ATWND{aao0ddZ*S+Nw z7&e^_#+?8~kK?M6qR~c!&ULFs?f_hCXy`01x`7*0uz;@HXuAeva2ScQ73Wm);_c1X z-ctj~f#4uo$@eP&bZh&gw}henvXBju2S#a3^rJi#vDds)tK~q!{csX)DJwhG>uZ96~8u%zk#OMqf{cw+CO{LTM1ZL+9f|sPJdn#De#tb zFA?}H!a9(?aJEh^Jjo=OiCDM@Er+2ZrKvBe+t8v^vGx2W7p29EA0u@0g6H{5PfB?@ z|J4eN7QP8L?z+bPRW_nW0y}u-7Co`N3`*NUN6rG_FM0BRL@2Swt&+#!@KqNn;a7$< zKxsYMt0A}@S^{*{JA-75G>YYWNBC$D`58RO7qE08VVEO~N{$v^H%#!B=M#d@!m&fB z;Y9llJZ?svQXpvEAO5*#o0@v}wQV zSI@V2oMx?eKos#_NC@`_eI{ugmp?MM`Ri9XF3BBGCU<7r_^vSaP=^Du1nY6gYHEws+94%?+CWpA zPhXT&rhs?f0FhDKq#ogl@7aLS{3!HV4sCfL^Cbm+U)ZeEOh0XCX$3ziaXw|8k%iy= zhWaaNLghJI-0uV%_~*sO(>aP@G=N=Bu0YPz9(cBkQmfF8dHpEH5FP0&8+~98CV5(C zkqvB#48;?BTrkl)phh5=bI3SD2TSiJu2`F$&OA&&@D4Hyfnz{@bX@q4<%%3PEx6Yq zOv-GE_rW8wNhJVV!!Q<*LZ+stjvU6zCJml^zqDAC81Ea1Kf$q?j6|WgBQ`AZfrOs_ zJnQc9su{pE47+{XcA^MGpJ9XN&s#8^=Cd6)!(ARqVf>}}C!2X&3Z$RvkK%y%4D8>JKe?UrH972}~* z73$|vj}Cv!&)V*_!|tCR9X}7c_l~YWtf(u{{HS5Ay5T2(%idwb-eLFJLBnN$H~hTY zy$A2H`gmDr(B8j_K0B(@@M!-HIPCiP>f#!zeJ;D94EB`s!_x|qVuw+qd+ErbN(fMxA|eK&*~=|Qi0HDFce>)_Ofji=2+g# zM32Q@Ck;t5DlZ?q$&rY&S7RE4BX=!d0R%`I2B0rAt2_=_JmQ@*|H!ImFuNbD7>LjWf34L_8@%(A0mGoCx>3SKB%F0_`A3y*2Sn}O7iM>hLqaW`c zGx|QV`5~Jx zas{u)s8KF<9E?msklt-akim3uNJ7P?>J{xTjvQ~$WgDN}BJ+goBmjvy0j~*tU@pqeVcDEnKp7C{?AI1JSsQ8KL?yM+W zaja3_3adCu4?O55cFjJk?$MbnspQSpC|~i%WFt6Y17gEg_iI*){|*+duN}M9vBbrEh);3aA8(m&m@j$r?AY-0ULg>9F5Xisbjv zZx`cxZ`iSEq3@%qXI)<$@BEPI3C>#T_N5DnF!U(To1psUl1o@>>-V5ckF<|7KgW>L zH1XB)d-~4AXqdHD@vU?b#rw8;wvC*~_4=A^#1nV!8%hy5f-U>C9Lqnc-q*4|sfQ`W zU=uKp9_{HEH*#_2f00x1~GM_xpA(G%aKDu%*cudOHE*O+hcBfLeC%JbFO1Gnc@o>B@SK z0ee8u2~Gri&l8 z6U-bDxi3uDl%hG#de0WM=2`I`j3NWO%n-MS0xQOAVS2@5_@xErRtnKBgjQ!dErB{` zw{NRZ(WA}2FS=_wjo)adJ5e}P=rwfAbrUA$7EE;dc54M|P(&X_Q zQw7P5sljPPAR@|5CDdCMTZ}_zt*Ms^`b=(&EaFA{Zk~RH-LQq9MqFIncBmK;Dn_g;bLW`VU79d%dHAVw}|bUGdDK z;D%@n+~0otT^)ikxc%AK;us$;i4Oe1m)mxv#4m5Y$%KDlJDqkp`T2;{`^8%Gknk^O zsh`^B#!Xhx1gl^fj-!x}`&z%UWyOLKKK!cf-+9jN98+$zPF;Jr#Jf)4g?ZjLeb@t$ zAuA0CE3))D{h3xWYRI3mt*O@S^uWQNqfEB@yaGwJjo%Zy!)tC4DP=h(Z|FG-)W6nU z{}V*)e)GDl=Sg_(Crg`ryGiD?Y^cWY>a5qcH59|j)8ecl7TXnxtFhNe;sc_@epm?VEC6?=Z(^?5I_F?SV!N4A(8V*E0tSXmYZF9FF9YDu9or^y*7QC__N&z zXYPw~PRWyyc1NCX*Xkc^(78$(^vKSchEeZ@|J>Q5*$8~oa#NU{tTZIruRb88_7Q)Q za8~f+5Z)=A$_tlvJwAtvlBZgk{>$nukZE6!?UhHLaC01Qs4PS@xY@k3DZb+#H20aJ zo**SeWn30*OmiZ8wHXq7CLk^@E*|!5KC~fr4gbt+JmiZ518=DEsx$<^MMziPER~!Bj;@ zg_%wIHx{DRVwyI}9i-BP#1`F4%O_RJ-+wjV+s_3pLVis)NvMaJBl<>%4uGA0npi( zUSeDM1pIFc!+2?Phcx2T2a~Pah3u#+>!>x8BL#*wVF>7OBwKVNZTJP`V&TD5?de19 zC!*i6XMMcIdY0F=A7i(Dj?Qd#AH6x3y=+H?;(SIZ{t5hbOuwoo@Q102?YFxMu1Zxo z$wOMg(N#>ze1>4)>@dV4id)6sceDLfW!~yl)cp9mM9qDdkN2*kYWakJAh1|nyMN?k zkwT2_7KaOy2Un4b;=j?Ar99M*?>c=krO9_$dEvO8iMXXZje~hw8pneQ;Zhls668~ zM{oEx{&7^0fi8)J!0e`VXcSRe=H$TbGRk-=_{+~mMWj(&wl5=Aid=dG^P+-u1!=MD zF6%aRL);a7agLd@Nwn;z!mHu9a+x-mL2o=qB102IrckghXJ!Sqd|d!|)iy0_jD14T zcuTl$$_1Z=Fiv#BEMAPZypgznC1o>I3F?gH2h>3t$xvPlkiRXMav=u9r91FrY;78b zc!X26vh5IES2eJv1)J75Pm@zCQdW#~@M7~5Xh+(FSBr1~o;DaqZ(I`ED!o~!W?)hT zCi^3znbu7ZF&;O#QX*0&b{#*+z&)}Az9f2AVA(d!aDsX~b2d~}(9_|x+?Jf47Ujq6 zFEB?H=(Ft9j7uId^p{^jNtnVhv$F9iwqI!DS+VRcSL|KNjT}SP@wr0hdbHNgf*R4w z=#>)gdv;PJC;57KY49aUq=3>VZ2M_q8Z}XxG58vIzhs-Oe0I|l69I$KA0x}X@IWIm zEI1ky72j+#0rvoM2)JR(viumXeLU`F%9{3=soB}HT95f(K@XpJ%p6=?lX!!nj89uuoz|r1kkavLEfr9e7}yNalk}Q@MKcRNwwH zB9RBacSnks{8ctQkR)53!&}aShbl-1-+OF-$ za$HVy7p?d~FG~6jS+rT&8lk#v&pPs@>u&%xejXpl7;ZB`LVhB*2a=lS6w)k{=I>PW z7d-)D!RgcK!*TQCc>a z=_Y)N#KGa_!u0j%OaA+@mP$ztQNo{^+{1;3gmKQlGGJ9`;CRO1mmQP(n2^BqY<9NQuYwxCDySMjhRO16HM0oE zUy!*yU!d~p7o@;uvFSoPJ(u_9GE1X+R0Pme$*%Z(X~X!>WpbV8)8DI#EbWx)^0H}f z7ME3ih9FtzF;80g58^V0zXCRl2d_)i_Li94Bq%+pJbVz;UAnh+IYf%q zz6I%g_;@))N-T9mz`zm!n{%0F90A2HcDU>as!>KE)kp56n}eb}wQJmsbKRWjv}*Jd z)6s3A;&Dpt*{Yj_RvX&&fpm}ZuQ5N;U5wO6?`P&n+?Oa`rWG2|tdHWYaFYx3x zo!dd#AS}v022x@BSw8SwW}Tw &#RC`&3Thw*L(QTm0U8I+a0X!Bz@xxiYQ;
O^S{&6ij4c$4D2FM`nh4k1QA5OKnYcxktpI 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 + @@ -9,7 +9,7 @@