From b97ee93b8f8c3554d583e467a32494d78fde3f99 Mon Sep 17 00:00:00 2001 From: Wenzhuo Liu Date: Sun, 22 Oct 2023 19:45:51 +0800 Subject: [PATCH] Support adjustment of more CJK punctuation (#2456) --- crates/typst-library/src/layout/par.rs | 7 +--- crates/typst-library/src/text/shaping.rs | 22 +++++++--- .../ref/layout/cjk-punctuation-adjustment.png | Bin 0 -> 26949 bytes .../typ/layout/cjk-punctuation-adjustment.typ | 38 ++++++++++++++++++ 4 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 tests/ref/layout/cjk-punctuation-adjustment.png create mode 100644 tests/typ/layout/cjk-punctuation-adjustment.typ diff --git a/crates/typst-library/src/layout/par.rs b/crates/typst-library/src/layout/par.rs index 5d21c8e9e..bb280069c 100644 --- a/crates/typst-library/src/layout/par.rs +++ b/crates/typst-library/src/layout/par.rs @@ -17,7 +17,7 @@ use crate::math::EquationElem; use crate::prelude::*; use crate::text::{ char_is_cjk_script, is_gb_style, shape, LinebreakElem, Quoter, Quotes, ShapedGlyph, - ShapedText, SmartquoteElem, SpaceElem, TextElem, + ShapedText, SmartquoteElem, SpaceElem, TextElem, BEGIN_PUNCT_PAT, END_PUNCT_PAT, }; /// Arranges text, spacing and inline-level elements into a paragraph. @@ -1287,11 +1287,6 @@ fn line<'a>( let end = range.end; let mut justify = p.justify && end < p.bidi.text.len() && !mandatory; - // The CJK punctuation that can appear at the beginning or end of a line. - const BEGIN_PUNCT_PAT: &[char] = &['“', '‘', '《', '(', '『', '「']; - const END_PUNCT_PAT: &[char] = - &['”', '’', ',', '。', '、', ':', ';', '》', ')', '』', '」']; - if range.is_empty() { return Line { bidi: &p.bidi, diff --git a/crates/typst-library/src/text/shaping.rs b/crates/typst-library/src/text/shaping.rs index 39122837c..0cfffce07 100644 --- a/crates/typst-library/src/text/shaping.rs +++ b/crates/typst-library/src/text/shaping.rs @@ -1001,6 +1001,14 @@ fn assert_glyph_ranges_in_order(glyphs: &[ShapedGlyph], dir: Dir) { } } +// The CJK punctuation that can appear at the beginning or end of a line. +pub(crate) const BEGIN_PUNCT_PAT: &[char] = + &['“', '‘', '《', '〈', '(', '『', '「', '【', '〖', '〔', '[', '{']; +pub(crate) const END_PUNCT_PAT: &[char] = &[ + '”', '’', ',', '.', '。', '、', ':', ';', '》', '〉', ')', '』', '」', '】', + '〗', '〕', ']', '}', '?', '!', +]; + /// Whether the glyph is a space. #[inline] fn is_space(c: char) -> bool { @@ -1035,11 +1043,15 @@ fn is_cjk_left_aligned_punctuation( return true; } - if gb_style && matches!(c, ',' | '。' | '、' | ':' | ';') { + if gb_style && matches!(c, ',' | '。' | '.' | '、' | ':' | ';' | '!' | '?') + { + // In GB style, exclamations and question marks are also left aligned and can be adjusted. + // Note that they are not adjustable in other styles. return true; } - matches!(c, '》' | ')' | '』' | '」') + // See appendix A.3 https://www.w3.org/TR/clreq/#tables_of_chinese_punctuation_marks + matches!(c, '》' | ')' | '』' | '」' | '】' | '〗' | '〕' | '〉' | ']' | '}') } /// See @@ -1054,14 +1066,14 @@ fn is_cjk_right_aligned_punctuation( if matches!(c, '“' | '‘') && x_advance + stretchability.0 == Em::one() { return true; } - - matches!(c, '《' | '(' | '『' | '「') + // See appendix A.3 https://www.w3.org/TR/clreq/#tables_of_chinese_punctuation_marks + matches!(c, '《' | '(' | '『' | '「' | '【' | '〖' | '〔' | '〈' | '[' | '{') } /// See #[inline] fn is_cjk_center_aligned_punctuation(c: char, gb_style: bool) -> bool { - if !gb_style && matches!(c, ',' | '。' | '、' | ':' | ';') { + if !gb_style && matches!(c, ',' | '。' | '.' | '、' | ':' | ';') { return true; } diff --git a/tests/ref/layout/cjk-punctuation-adjustment.png b/tests/ref/layout/cjk-punctuation-adjustment.png new file mode 100644 index 0000000000000000000000000000000000000000..7117975148b23afc70fb11ceb7632c7ba84b4e7b GIT binary patch literal 26949 zcma&M2Q*yK`!+hGjy}=LV36p&4x$q^i0HldGC_2SGD;AFC}9vSqIX6OMh!to)WJ+h z5G8sIZhrsoTlf3l@0NAX+UuOP-*xs`=d8WY`#kUS>{o{RniQnWqyPYbLR(AS2mk=0 z002Be(7ynnym!3<0PrB!R#!0&S=w76w5GE_j~rg6ta#0L&M|w{CB@Y>atFx}5i!p9 z{X0y^y@vq!_*P<~qK5r_eX959%I=r1zSGXiZhjfm-e!fvcE`xuhk zd{t06;R)VWFkyf66|OR&<>e^(iS_GqgrE$PE-^4S=uITh;+^(%(08#!L~>Lf!=`H7 zS+I3z_3`%zDw}rtf#*e)PEVf0pC*Kpt}2=de!IW_760L7opyFU*PSkIff4MK-yN$g zf+=X)v^QGw?Q=O}3Sq*^NiU>c&vG6#Di}Vq_HuaQ`gY!88Bz<6*5q0C zb;4I-7p|@NeZxpIQj+WH{^Eppn%q#u zIXT*Y7g2?J47ep}@0NbCRM^9(#?+W12dXSn&%JysbN@O22X~Q(| z&2ocsrA9`s`0gXQ8elr)Zb1&i6GG0FgIPv-@Z&XtSNm`Ccs1*=Pf)%0>z&3bU5I<& z=KiduF)ETiq_3aW9KYnj=yC&1m8{6}yarb6owQJ_R=^=$#+;QGF|w}2KXl|6gn7gW z5d%Bzo;l7Sdu`OZNxucxwnd0FMS$C;|4Ko@vBC48)hvWHT8X#QZR5Ehi>I?c`f+Q) zWNKThkRW1wtL{S7I>3bQNMzOEa*gEtt@hWu`iF_fzdQ}6{bFPF;hzdDFTg35k!!2g zm$V$au=00Y+(Y<@g-Rmpg#N8U zPB2P0xtOxODBWv7LpUosB#0?de&ti&o9oe!5vJsuR6a~AS;bs>Y{_6@90URXqmlwL z37Wd_`!oufCpUclCwoZ5KqvpG5Na!P5Cx{xT~wj!w-D48WA-JK#Ff>7(La}7+!I+K zP38jVvDHwcWt9__g#|ktewYu!2}pQQjRakozRdG|A>yfu^~yUVl#tsS1!wo{i|&$L zb3xj^x?UB-1au?+?w`Ypw?!*Xl8|pW$vH`tI^WHx8(A#UFOyKrT4bw9Yiz4nGDvV3 z%@^)mX0Cit=&}~;h7P$7yEY-5bl5E7QRc(+*DJ2Pu(d}=Q z5Gr{ihJEI|Tj<1I?7}5JJdzI4BpQk3m3AFxS3;b;|q<9RP8&^U#qcO3u2&{ zO~p&9xbOhV{zWWAP}GQ0zY|ZKkbs`7*yWak3wITxRky$m>DU*})9HMSlw5Qzo)tQ1 z3sG(exOgK*=J?)gH~d6LDo9X$3f~bG^Czyo=itTe%Nw#v{*UDY%G53QgU6$z13~`w zGYpaH8RXACq-m7t#6c;W?qAUzh|sR^M6C**+=*ej3{Hea!ou193vp=wukiDKiT!tc z!rWEB4bsP5&^!^7zW{wBW`vQ?#;1Oa+e9Qpj&Y|B5tj%qb3rrCaVr|k`zvpbZ99<1 zkIhuSI5H}3KJeli@{=l3wgVrN%VlGtp%pj4t+C(2Y0Tcg&Dqk%0U}vF#H(1|&~rgX zp3HvKx0XNqRKdxO5Y>edkHRX(}P zMaa}SjVNzfhLV^@bEmnO$~;F^U1ySDuq#W%D7v;GCIrl?hMv}jC z)&u#4_0K8UCsoKR4t5rWkI4oegVgKquaA_#A9PZN7&$b3AqZ;tvY{ILR@q2|KtD?C z9eE}RzHXdG5Ks7}Jeiw`f%tc$fy>rW{DU%=+Mj=on5>*B^;j37#%{<@*TdMl;8qjJzo=MPly`&=SrFAw=NkyxBxUg(g0W3;1NGQyH(Ke$Nybz zp~rfZ#B)WcSy-#{M{V)FFU2toI~uN-0Vi;-$AHZic|rB(qkMAo-b!qTVkqmlMVnJg ze@g6>_3k2>8V%0?tRiD1`VSulUz*GmpN61~RRx(#d7rI%EQmz}D7pY)t{M|IOeQB} zpltX}N-bPlRS^V}CV<1gQqXwN-9z}S;%SUBU77R-W)T@ezLlQu&p!}*xU z8WR5HKiKm2p=79Fv08@Q(o5b*WGLHVQU~q5C!e2=@^P4zJn~)ul>2NaicvXnSv7|)x%cDc59AT>cMnE(;;cZmaBcCNB>!0W54w^{CvBU&*QsY0 z2e}rw6Jm+wvC5AXXIUSMOEn$7>F)dyvYwIvJd%1jQ6P9%>tT4zk5j4RXMd}7`3}DQ zg=@%wSoD&(+!RGM8VYj805;VdHJ+yOg-^z&!%>~&%b0(pR_DPjD#ep&z(^KK06F(D z52AY+&wm_FcJ9Op7r%43{p3GYWd%jqj4<4X_|g}=Nq0lhr4>_dni-Xou;->W6&o4W7tNNs8zJ}u|7w~?;jw*yHf)-av6NN)l~HNpTns`#;BiW zV*5fVV;`UL;1BE7o?Ts&${gcIEQjGIa`KSvdb)C3HCJ|r@|ockJsA#|*$UC$>(9Rj)9pvX2-vwX@x3PVhfJDOQSBF^EiUSs z;B@xVa&U)>+8b=ZjtcB#mum30^V5+ZM?~EdBz&sBzJo9ZpYZhmQ}6umQ1ky0dtw(= z%$rp5e>T1MBB5V%YTaSXsqv+_|G$^(mrTNnWb9esxDm86{}J`am{9|uf?4DSfX&W; zpqLb)b@^Wf)E%SmH)4~iz(gV$T>|QdO|9d!ZF(`Z`Z!|CS{!6l8FAnQ-6&haxSOve(M3iMt(-SD0fIV-UhGc(OU@tiur}^lvoDzZv^h$ln7;nU!V9&62crAabqYA0bywFOCUEh9-TF z808(UHwlA+cA^B090VTN@7de0X@RSlq&=O80`h^sN=>j|4%U@+$;%8`I;grE98k?s@z+c6 z{!(}($qBm0CAKd!&4vV7nHg36prZ2qAJ-A@k1Mg3?=O~}>MSiST-DyJ9CC-~);SrA zQk-Yu;$IpDPKkofqh8~u%iiL_Y8g6d|Kby^N~R?|daXZK!aY;LB z?M@(lNATl6HH0=g(gar20e?p5S1wgQH-&N4GuzRha7|=u-KFu^pnL1wyt#zyTu8EH zA)EIXlPt`C5DS0aZ_UoUUp??YNdFC!Cd9rB`#^tee%0b&ydlt?#Dl(;&bQgv*-g+I zU-P4e3>h$ePVLlJ(uV(&xb?ph&(>ZLGsg)Xpg$G!V!7`r4W(JyZyTSWaN7}J{x`E|!gxdE(TvjENUDmq^%sW==K1jg79i=DGk zoNL&BUO3;%sv?nL4ZDvI_54H;A2VU}uhvZH%@!z5ccdp!@f7K1*ZuV7N-179gM-qu z=)H(7@CjuKN%SL5@-pVTY1n9nJ1ndj{J&?T{|7PV|KXOqB6Lqt9>MBY7Y@MLo=$AB zj9I^S-W6LBj*u5R8UtmE@1}ed!xa#QUm9MDQx_e2xskgGHa`cBL{NHsL}U-L)-D+3 z_k~J(mMI-I6}*e}kiaCaWSzy#m$<-UxS$K!1ddvnhVVMEaTUh>*YV@>n8186;GM6! zn?%!1===O-$cG|wyrC7kz2r7)xGrV?wf3yT(l{p>u$t|5P$7sbF~5cwYwH>Btm^d2 zSzLlyy_E&(YD_=!eT}8y8E5Xa3FSZ$BPPx}-#l}V1+J>UOyy%%I$W#go*o>heR!IK z-@pu1{d^U(B~20)&I)}Gd-M4rp(2F*cV1rSf%w5}3Ic&RSOv<3mrgyiW7c<8078!U zl;<=7?QI=OiTK`MqD07ZrdL@FBu)od-Lrx61_kijl-hy_enG@hwRWbFWR`dk8lIb8tWdtVqJk~ zZD6jvV+4|4Eq536l|9!4tVd@Qh5yZbvfij~am9vxN-4gq!di+ESbuJ z?9d}QbJgTu#={h0)s${CoD$r?hTlKJpZ?ehU*EKci(7``!9_l~B-<1VSJ#wqBHZcU8tZke{63IWUVZjGCY6?+HDm3jL*j3+3cJeZsFSx}0Tqqe z=zu5g(wLgr;j}Q^V6_gG{-0D=Gc&rnWptS}_3Uf2s}B8M_l08;E&%C~2lsnH<`Y1R zbf}$s39#pf1l{j1ubErj3c%bo8S`H&eYNdY55850rEFyqaS|fN;Da+CMB8MT_s0i* z(gsH2*0+1Td`iPiZ#++A9%e0`b>f6`tnxHb?QyAUd*7?RBpiceny6Ct{=Ih$+^S+} zqRH;l_|1>KivAl-mY%9XAFCC(KrSUWdTcUs!FU=UnKCZnb$6@&a(MAg5z%|f^Kr-j z{F0zt(Frj+=12AXIk)ij$A;7SW@%TJ8vrd^S#rGXM&5PYqqd^OV-C>**1z<*11;x7 z*xOij@ycd(aSgxW%bp}TbQtp*3q_75EKBn|t}!$|{7I%u2q6m*m#c~l6`dXzPLclN z5DNSJJ&r$8c~I;$0Kzee5*I(Ja|aZMe{MXb8$N%8erCT^tD-&qD}=VQNoiCF7?E%3t9PQkwhf_xjep+R4cC!%>* zoJ(IB#pj<(&2&i-pS&AM7bA~fQKnk!bqq^1;-Ny}CM7WL`={7D8Kr~Q`KBYL!KG(v(nW9jN0Wezl+rDoCWOPc7Li`~D{ z+Bu(pzSxtGY~Czz2fSP$3lr^ew8qDZkW0F;IkT0}{A7s(h7=GwYMUIWZmj9RESB-X zfsX+xMYf!E0wG5-6FYg z(%+x_zIk}kGqzMQ@5B(|zm6OJ7J{cr>eTD#jAqizrEKS#NT2OYFI{*3@SGmtQt(*x zM`oyyAK*#;`=E@-e+fLR3e7>6NQ50P!)uoSmPs9CQS;38X8R8u)lU3nsSNPrr0ZYzgv+<)jDL(87&vV0JmTi0v{(UvLmXN3bT+xUfr00zUjrHO=rMCm9Z;>`g$JTXh;dG@IDiK#tg)BSFB0x{3$0R=1ogxYye#Pzz5M~ zYU~RSYj>X_dnJ1WYA>(si5%xYL!w1bo^#RI@Y@l9KU-G4$$^@NSJI9p+r}2o-;DI8 zkcI_1S>BQyf?aa__|mm38Mi7{LRAMUTm|LL_Z(O1m3TI6Zr)8jx;7ax!8@w3iYBWRN<(#gZOoU z(k5UF^R!%Qy+#O_Vmq3Uk0N-O7Bh!@q?GQ{G0eB7gIdk}_s}Xa5db+eQEJgqJz4wQ zUoKyUMFjnxH|%C%FBFm7{d|36EOW)O=;5MA3#41Sr z0Yi2JXVI-j!Nop}55k86+^nB!MhM`leD2r>6qfh;J(dcVcZD$W>-D7VAO8NhoaLv` z4L8bUKXO&f+J?u<@ZzziUHa=csjc@f+foqWjRYSOY-&_j9zw0d1#^I!$0IBVG9?0G z%&oa|#5k_XPwHXMI9K9XDOciQDB^l+sKY3*km1==pn{!zlV+Dmh3Dg^#mA@aw`mU? ztbfcA?dk%I!r|Gp$#M2x&$kX)r7s`6VWK&i_If!aZU$5*pE&fTNiJr6&mgS(xubtj zr~Drm0O>w>`M{*Wd;Fz5?#hy>a8)sNaH^K|Ra+ciGDV9;iykh*DPv6sZt=6-`#=A7y-=bX*)LH(aIQHzy*--1Mr*8qQ+ zgdwGroA%>OlX^UUzlI{ZBqn>~aN8?Y&F@dI^iZoo?DDPM6kNSw8(uzzQ27f&s24rJ z+Z$B6LDoE!oLLe1HrG^)vV{I@I%_-dj~cz`0=4?L`gQp?|b{SwuoaL|#{?Y$X7dlb!E zktjo610RLr3JXm+=TD8k65)&)PSJE{*b`6vHmOeq@QQBwl*Ea{u5JOo4OABqZ(68@ z?gwD5i|hYA`S8bypLSd8e55?CZT{`c=P2Wf&?#tcBN;NsBnP%M(t6_Sw_V@jQkoX#YB3C|$C;$8Y&n`P1 zZ$13Ru2Q@(MaiIOImkZ!E){3%wZ>K)nShZDBn$@5DFy zQHJvLVYaVBs0jWj%mi{K3hnX$42FB6w^m%co_Nc_W`7*q@jx7j3lp%1iH&@QJDs$i zeA!%VYDE}_;KWo$IBjjb+VXr#4XiH4(*Lqb21vt|K%0;3aav>rv7NT)p)aEwr#FF| z>*q}}eO<)ZQK0*xaRgh-CHdETuGs{aoY_aB1(SE29^P5)cqzrgf=^()pFUx1Tt6!|0W z-3hVVCq*hv>aMR73MfZ>SBwa_xF_ECG>-qEiG74^@Yd}E`|>%9@6%05u#u}oNL3b< z1A_S5gn%O6n;Oy3`KDKgg;Is-1g}A9O3i6IN_B*WVZesxArH%T>G$$IX65|EZx$5) z_%7Xzz%`f4s|{Ls5}lJHO4s|ITzce>qs4&`w{PW){(O5)R>bep5tBL6&xHSD*k;g;i ztHZ>Ax*5=9Rm?s0;i9FHQ^+jtpwroqEltSB^jS6jRHW%!7CdKmyAetFqGG#7&o~&u z4j#~Z?(gsXTV7W7W{w%}d~PU-E+)?|ZJP?Pky2@yX9Kdeir*x$7H~U1SrXy$zx@iQ ziT{ms|CuVD+?<}XJ9pgw>f)5iUL3i7=$in53nS_m65QBuqJc5nBiW0+GmpUmJF%JQ zGr;=>L1xhE#~YD%jL`gT{Jst#LHe@>ev)WM$7*}<=k|A%yW$7GU+O%d)vA?a>Pz@* zbvFiorD3Oh-$em8?`jP_Dq}RcDq(k92=#6DFz$4KJzdv$eal5*4w}X3{oxAVee3== z-3-N`LGxI#?QmE2;B0;)!A+>IW4sQZLxkav8BR<)KM6{H6`cRT0s z`gVNw4)9iy86DT#M7QVlr5k9sjz;;_{W+( z5qJAnF%QAerqVlNKp%j6gp?$2uj!~9nahYIE2)+pi9@g;CW7l8YnH_xC#-A^ycWD> zRyKUqp9g3D98DM-wGe&D|NW-ct#|OHC6_{l^(7Bx0c!Tc(ht z(&O7VDA&1q>w{~XnKcKza^0(&oQwlC7@cI#SA|+yIP|c zuChHsh+hKIPfSO0Y@L@+;pY~*k6HYI6)9^FoKZ}d%9bGt}Ph23El)*^!^EW5m z>*8!kH=j3*Z}5z$F|mhew-A($WCGZ%kH^3r2l_1xp=3zsGb*qwlzPDg`%{wnYN~fb z$~j~8)i6e<;!Oe{I{n90z9FdW#|-q3AmT>QXbZmmsAPq3w>(O4l`r&16!aiweJ?;X-RQj1zRUh$##y< zdsY58@H)CbjM{B#S7Mml2+1eg63m)kyL}aTl1t#7-e-(Da7;T2@t!?i7U)lJ5OWS` zlaC_T4Ptm>%S~3|{Xr)1H9yJfsGN4xOB@aK2O_82_|z&r>GV1_WZqw2`gRe%fH9yf zWRNd*E9lVyxP5M7U2(2F>&$DCT90}c04@BM5?E91C62^}^f60c^h$_5RBB%|?MzwA z`BNG|MG!nGMyJ2(7f_hCw_E=`UQXX{#W^1`M$_4p^@!ZveC_vxs9Ahyh~r`$-)wLb zsps-=kYHB*_vugz<+;RouT8T%eC352;Nt~S8=gXJQ$3cl(m6u{IxBPrt++Z!dP4mJb=hjk?`%#egr~3&g??9`Mh);U(Vw%hGN=8SA#%+CAtaM_pqN*^00Sc9}SH zJAi(z(JMZMJ|;0t&d1?6uVyBoH(u1L_RK!%0cHO9r$)F8sWnmR&wP-6*Vn!*Y7u}p zi+F_)8E5q{3|bQQ-FPcRj;=yFszQfc*I)ag&I$^5%_d%k0afC1@<@AjR@F zv&&r#y9H+gLrS1xQK70oO9cAKi076U-+ljOTH^YJ6X5-i;%GMEvnCE5Lx#ma3G_9S zSflcfwtX|D==Qg>WwT-SY$3cppS5yNni_*rK1ON{3K zhzkNF*YZf*gv-Ej1975a9k_jy<2i~1lIX20g4M&SBR>HQw*lN#4A{4@gk7k%<5Ha@N0#Uy=Po6+G6Ry zi+I!Upvz|bs!wn7A^_LKEJBDK-v#o-y>kHjKAH7)4;81=Y*Q_}ctC;dp@G(NM#~{T+bml- z7qU-Hq~PST;Rnb0)|)D^ZAE<@+w`24J=Wzkbq&NK#sZLSlYSaU)It1bjUc4-`fiBG zK_bfwfq>;Sckk`sy3uKGa8Z>oK7(*wk^sm;een6&V|DfJOj%Qkq|X$=JuvbCh1U3M z`a>n(Z5f8irnHPA&uYXDnCAx0z~7UQN>cBTPSBtJ1nTd3QB#j3uPqlRiP;3$GVqBd zA5H}YD!>EAN+`ZA8 z4;zIyS@$7z4DbZ3f4VVF)_0KfS0y*5*EJq@HSF>{E85(OYRwWQv{#P(NIC`B6b^VK zVr?k(ax01XW5<%}x-NFl%W$8z1+6Wo1>XY~!J<79>NI!Ys-{V)Y`3XuJ+gm0G@ z#WLFbVDcZDZ!zri>DRoF2_gU5nYxHYJ2*tMV)wk4kBP96Knh`rnekgk)OIPwz$>$< z!BK}bOW2g_81_aSjHH>6081pP98?y|oYbBSUdUh{wz_5Zk6#wE1)@*!>!-!Qs;F!4 z27T0#|JRGD1eRf;#GyfWa0Ttt=m3Q~jlOjPg2lbCGW#pucddlxC~}LArD??i8Bq1(npn0KZ%_}gkP1M5LOyn z+LALY6f461@b443HLxbO*WQMVDtw~w-rhW(-R;U+IFpIS&)yb5>CSPR)DX|Pr^}_? z@X;HZh9#CiDC>J)Yh+3~7=2Kc=5Zzq2pg$F%NC9dnqd`$vrl~D$o$ywzLIeRlrt}} zkNKbkOr7kHAZsyMIemwYPAYo4BBz2dJ<8Qr88&Hs<|u>mhlf(SF8x`_(`QnEG;$8e z8N+AbkKbLf7sejcV zrS8umN5TcO${?I0(T_uN(3J&lnRLF!RC84npcamoAP^Uwd0WMB{pP-fRY@rnEO&L^ z`8m(K{YFKA^BgrDcKG&;T75I3PL$dAiu!K{oQ)s;q3LNccf35Bfa9t?GkvPA%daV4 zB1wU4$O}}{rTRYRgsuhsiU>mpmmFzUqrQNz_gg$#N}$dCNas5vaPq{?#x(V6c;NI8 zKO>>CbmQ}CeUW~Pg{*n`d-+{StI8uzB=4U0Jvd`Lc)#`xJfh3+=01LICtXxoHX^48 z(e=rV;TX^B174^|)_hO5&cwmdQJ&3UGTi>k1;D68S&~dV332fQ!ul|MVc8DV786Qm zY*m)`Q}kg!u>w$Xw9T8SQVdL*<_+C~e_!hlGW!aOM3SFTdh<5A3$$+*AF*-XGu=E3 zK92jQUH?@Ei28ixQnSL906hv0umilqY7s@5{Q$zEHJHo%pmDZeSccIYa@gXM}491850D>t+WLyP!ur@LBhPWf%1ucY&Ip4-jF0K5;EQ47)$ z2MdJkZ-W^6lKt`BsFrDzi`1Jwf{XY3esqyAu%w=AM;%cpx^m>ude+nQjRXJmP=5uh z-*+c^6~}wej#t2x@l>IO&*=@1|3^*_X&7!gy;6Qjz9}?D?=(xBw8tW`8v0A?0wf({u_^pCL<4)Y29U+4`t$-U16==P{T(`u+A|5gcRN|-bJFufKz#_v4;IS((k#~ucv16Zp<@h|#i-&Nt zWcH|I*5`qjwTNPB_ccK`^HY6KCc9sX?80~lyoK+(U0u$vFM9g_6n>kvEg*H)rO;XKtsD)ZvOR^DR*JAIQZS^UWG2^TPif3T^>7bQU0 z*31F0)QejZ*nbGQ!p+CI`1tUMt^4@o8;6iMhL_tr)7ns_)Z8OpRXK3g1K!&>HA`?> z{QaX)u>;?H;;vZbcvBT-2F?%S|E82`z2BJp?C_vL;P3K#nxAi>EdzwnADaoo9Qm(R zYuyg@K%BV+5q)+C<(#|3VyCr4v}ZDl6$ zCU0r+_ux{HV#)+B;#{o1<(P@bS8Zi31fF zz*x^S64(w-c^cT;(KIUIcYqv+KwaF<3uOkE|v! zkSB z)U#)OUGN_PXJfBprV-U!Td1ga>st$Xh^@q;&5VR`j^gvb-0cy&i7DZA78 zgf779I)5ed-Lm3`qe2F_*&BG;*!M^Mw$$3Qo#)?ht2*T)+W)X@44cIDh+tDV3+cA@wTM8Q5Dd{0!=Sj@PMSU97n`P~{Gx1Y6GLdP#iu%XMG;=8;71h>znd;vrZ z)30SpcHVzFNE0)^Yn2$b72nkmi|F#DnqZ8-8KSEYh_bIU5BV*awP`T|G5gx)Uze|_ z@})kgS`<8g7Z0!R_j-t@Ox}gxy_IPdkn@@MS9)dnO!Gy~!;$Am3aOmeqk^lNGS=@7 zi{7+GDUkGa9fU$F#{})KXX4-}AB(|?}8pMKlDIr&#E3s}?W%pG*57iQZl zrQ|W%%fd!%h@n?klHh}v1ww5Xq}=?YR%YKh6zC5U&)1SimyBvBe%OweuTuum_*1+w zJsWPBgx8W?EG>!S3%dDyqh#12BmmVJdj}GECQ1EFSOxM#@=B;2<|Jgs1dC74&j(BG z;B=7!-$i(2Fs-V`;;rb{Ia*(qAi9Q`lzD5Cz4(OUY0cCO*o0{ zo1t$gN>%cT)Roo#{$g`*;#Z|;nlbW8qK5a0NstjCfNrEDPFOS=E7?ZekV}|eA4v*u z<0gu66@dD4;sOy3=g4+mQ%hA_50Sa{&o=yC#01t(lf(q%tmH!Vd3EV3Wq}e_*+}z0 zB=9cVQnEffHeu43G>jYXX;>j`!Iw#j_OCxY#@pj1e9aa`DCXf(>P1UE0Wp{hqLJ>5GV#W@N>0@`DOQJULezB{3L{n5!m5lh6@sO1y z5+HS**}M7WIV@|~_t*L7e(;s-JXqKJ37Oa>j(LEqLZND0%sNqlkT~ndFAU|0tj!pa_(6EmZ(O5q75QH$HfEyv;zIvdjy-QNc-cq`{u+|sI zId2w#fH}DQpR=1H6LPp~lNi4p-{qY>l|liGx4{pq#Us*^l-RFIMj7``sS6LYB5qVc zlUW5hitY;q6c<(ldvU|4D(cnx-N1j!^qzl|M;6y5{FU!c?rUG)jDb&PtkV|q)*DX} z@^^!%N|IinT2GJyziJ$K@*D^kgv0XXj%kKbyv*{92vg4-q|wnQ#xn zh1r32UiW6>ym@52;f%<0t}vp3QbPlCg&V7Z)0n04yo7@OP!mUff3$)JBQdmcS6vbL z5Zbq_gbf8$%#uEaeOGDws;%DOyE>S5gZc4|L-3HAI&j3m3aQ9V4=5Z!E*n!RM6%8`A=n;RX{PQ>f0$^zi!YBf1s z|IKEH8a#d+IrQ*X8fEC?rke-Sp6{!@NO02j{yu=Jq`B_OJSv5%9R z7>SqJ-!WiK(AZIj7n9iZXy9VL9S032DX(JH>TT)2^ln|tJLF`2+3Nr&WE4=1Wdd)G}RPqneX^x`mjoABn4_X8dlobEk*QsiUqbwSY}8-VtGk@s)WnsSp|*-sVIY zQJ?IZCcv$_aryQNPB_O8z2jm`^xt{-?dgk`j|j7cmhBZuWCpc$UsC(7pdh`?$Fhky z^?>`HnO`RMRdO(nKzM8yyaRxZBTgUiqfuLtW{;anIyHcz_FAxp%uxw!NUDE6BkUpG zpUi~e=ZH)h6_m#6Xw&E!<$>=qhCZUjgSZnp|HySacNZfj<7EH z$mPXpJ$DbASmryX$^q_ybDN5dBMU0T3lRQPbHP6S)-jexOR+|ML!NWks&38l-%A`ftPLVj141$&}N@8o`JvZ7}2D=ueV06I5V@ zew{3q?`pEYsJZg7+=(_>TK31+&U?i}odV<#!9bRd)JCeP(HwIlInuuLkO--E>bVli z2{v#}_$29F>cHv4;u!aRT5z#br^$Apxt8qs?tG!2as=~I&El3ZoR&pi@;8d2`@0$i zTFlmv%&{=maI6I#7aI&fbno8-Z_f02SS_xu_F7bKD#C1BMcmO*5~R4ctC<65<~dtK=gs0R6b4x@avvDX_BYEwE1^h&5__qVvuX)qc6I zY%U+$oI*n2YD(m$|A27X6AJUW2Hd>B)3kNvP26pgAs=8(H9Vd}9Mfm(a6}UWSmszg z8(EAMR`D9-iLtjD-DH4+?OoOtxNcvUIVZR~QSlZlSw$5>rFB1iOh!e(x-yeU-ZAOi5461YiwOz>)#2>y%Sv^Yox?86*0@AHpRkLe?sS315#%;MVi5IL>(IvPPf zw1AE^0WVuKi6$w5D|H^ELSl-z*ZcJxSMY=8r>z57XY@kC$B_vvQpTGr6efnWNW#g; zU$DQqPFQcpf$3Jx#A1!U{Q1=jBUx{}i=uJv`260u**dmG-}|_h4RV=J#H>NTurR5( zboerS=da*kfZso130Hmh9X5a=+T;zONu3aa z55EQcf%C27c9&zcK7$8X)37PN25lU2xR`wd7~$)K<03M*v*q;{bT10C@xEp>k$|6j zP<&k!k~5|M$Z&HLFVN1wT&2GbxDXY_mWj?b7KV~cn*0(id;Xa@JsE!NPSeNHpHWSKZ8E&!GHYWtiPc%U)mFNWHOS=b&;`Kj+N(N z4Prt<1>tT*t##JkH8|@pWhV~_Bd)=%6t$z1tMa8n!DW_iA*uJepO2=VQSK7(6t1}q zyo&|-{v|-Zi}YXH?ES2Tf(4}?yt=XlFS?RJNvq+^OF=nVob$mD{UiBrliyzxYTDXM z!>DqdF!k$LZ&y{7H^GHOeyU3Ax(_;2qY@ETK}Hv5hq9WN@ap>nN?nOKn}l&di)97f zG1|omM<1IhY^$8gPMqFysqaqa0pokrvhg{Xb>C1nv2gAZV7rIIhKN$#oAM?ase4Zy zQ!KTCm9lf;L~2G;S>mL_0Ipu+np4Hy=Af zf+`it>1XRBag-%S3T0~nsEL{2zUzgp2Lzd(G0iAF%4zreu!5HfSYxr52Qg%td7ujK zZ(?L6EqN*(y5;_kWtDIc5!R@oN;dIp>>Gi63xX02FF37+YewnTTf(moNlr#NbjE@y z)&gJ?zezb;zbGU|Tx5NXAdNcB0&dVM09G4GH=zy8pi&%X5CP(DL6->oYK-9>1^OPD z4uocH-k!tXMVw6e|ETM&qoVo(zujSoVTfS>38foBKtdQwT2UmVML@b^KtK?X8cI4O zWJoFLW{{AQmQER9hHeK?8ocxUz3+S1U3cC4=Q)4vb=KK??ep26=Q;a!T!1zkZNhhp z#mWuV6feGIh+JGj7z~m`W>1Wqm#qMtq#QGfA{63Ij=r@)d{}5!UU= zrv5_bL`12gt>GxTAOX{Tj8FBzRWjG4NbT|f-QYZb=b+QP3W05jq@qnr$ZVS)%Fw3Z z(QhzC+-~e|QS@$y6vwxjhh&{12E>&F+>Lu;rH8gq5vD%}GyIIqi?>_)(85f%kdDax z>LOQbCDm99f2v=|r!e<_7}0|yL0gZLdgT%A$Z|0j11Rws`_sRAi+=&SPiNV5-kOrZ ztIHgSn+)j8g5#eW-Gn7C&ElUW*~hZJaK!Orn+a-Xgxl=xB$v#e=ye6nd+}{N|$;8DNY&v&|jc7C&i!w9C$2mj|zBT?2-GfyveoCe&SC&&sOh$n0 zX7=;fd!FTOniHy;U}vs#Z8}*%@>vGsVlpeNBO<7CHmc^+<`UTKxuoyZQ;-XmV(@!7 zio~UnVcOMAd)od9d8IkWR~>P%JENYI3d`Yr3u*jr)y4C6A#)sT58({Hz?&-e`~AoB zMtL#{oaChdouwhc&RCahxNDy4@@O!P$Prm0!I&VT%K^sSRC_B8j=&aW`fJB6Iq|q|Xv=E_$ zayWo(y@7m zpL*T<58IM25Ivg#1f;pX3&Z7lK_Vh!Pxuh&lh#9aGsQ}zdaZ2!|;41BJSQf2F8ZLwlIN^4)_)1Bl(L@WW89uBVBVm;v6y1B$#J78s z50s0M9oiE1tacZ!N?j!AjfAt-TfxRc*OI5PRe$C)i9_Z;z7hCoMe0tYwH!?TE>9F@ zxnb8+7`PE{`K!@!>fqAAKaC>MXgFF&3Z-=PWw!Z62-q{;t}Z zP)4nj)N{DQHNCU2DFUTWe>^GI&tup||8g5jqG`wo=DXN@oba{`lI7bDza5cY`O?8G z0&;(|GPG6*U|vL;G=h0X2hsYS)`sBD{^)vTq=)_UR-hFsi7ypeTA)~A`G8>lW?d0a zR6r!xyLphrc@9(N1XFfWvDu`fJDdUz<>H?NYY%9j{Cz=;HQnqWZtKyS4LTIC0^=TvwZ*^RJ^_UQyI>+oDgn~DsiC*-6VvWUc+>H?zTO) zRJSn4dQ?-K-w9pTZK)3;jVeSS)HfYMf7Km#U^2vAXUilQ_*{tA|MvCQ5U}qLtFlua zpKlm-`u#u<_|9WUeBJM|RjFczTA0{%O@93NnI1yUM;w~KNcEJ$ij4^&D0|Ua7$BK^ zwC_6@+f96&O@KR*1XLfmS@*DcBFS$_dR|@LBaciH3>NOs2cK23;rQRs*LX>_JumUw zK{&62yM#d?f4hb-m9rv9C?Q~#e7audmz0K}=_rz46sa8|KA@*%P5h7dU%a(o$tg<* zeVe9%exd3+ky0M-r!Ev*%vT(|n~GnZi@PuC)P#2)ZmMvZ))9mraYtw@PazMCu{|6A4iK$BGFCq~0`kGxTnsdj2&!h>`8 z_HaPjffHHxH`&KuWqx9IRzYfYw)5H?^{Vc(ZQMCbA%eU=5zeQi|BE+C{jy%Me^XMD z>x$)Ovzu~-j8U%t2fC@b`CpNAvovSKa2b@1Uaa1A;8Qc2Zt(Lj4i0I*h@Ki)>BjVj zv2g!?^Hs~wtil-M!I<2$$)x7uGyUc-fRS=y7kmE>5|6D&c)seeCUl0JL^O}xnFZMG zi@Luyu^@_gIffD#OLENC64tuTa7;cL@r^Dlg;xEs1ekLp!T;Q($oo(1?dI~Z7z(v~eYj9-#L0ouDhLg3mUO7Q?k_`@9$23ZCN9_;@%Lx^o zGE^fJ_4hYiWT>V)4EBNfW#PL)p{w{ph{J6^G&}g^N8v9V$u%}2?gVX@LWZazPd8M9waD7yCs~S|Be)9y zVu0X(D;W$9Tgw~kAn>)6|8S^(OKAZ@#6O!5NE(lJyho(|nZQ^~3oOjsEvPSNBZhu@ z+QAtAV5W5j%lgO=Z1kz5PQ8VmiZA1)ts=f1?qT)nON{a(qTs0;{9vB&@(M*5>m@D* zxLo+x9l=wa2##qnMfBeYNBf|Pq*7IUu!IMSs^Y@_mlOezbz?EjW^RY@a;)n7X2i(@ zFUn9?Lq%l{JHbDd{6MYQ;!FSaR|iAi0{6pVpt}tk10|zr1WiSGb!K237FXq_rhu4p zIaHjMe9L|>3TyhYxFj4cTl>}WubUy$CBx4<-PFo3^%BD6x3z!Dj;E{dcE@tjxB^V& z&MOhGM;?Da$UDgNf&HLv%?v*cnfeYR3ejM=HGKT~Y}JP0^*5)P=iw*qfc|95)@8!q z0pfj}dZZihcY8=l|UK!*I*1up)svA&KJm zq3_CZU@FC`w=A0jattWy@+kOGj8Yp@#$co%-Lr_G{S7SEGz$jNo zX+_k19Xrlcp%KCFI(}^7AS-+D2=;r^JT&CpqTTbPJ#dYmEX?0WId2|rMC>ZH`JLFq z(Uz!zpUNGm{lTS$3>j0BFX+dz%nWp&Yjo#AU*C#l=Z-#juj6?iRtCkbn_03qj%t;v zJ=_)9M1`cgu7S;6y#9%$G#|!B!5TONclOxJ$uGYcW7>J9c^O!5h<-6I2E#@=LgO(h zQ%<#?z6ldXC{v);XYTZWQzzw1Ms0 zvxTIbexc=@2XHV8{`u(g%GZZE>N#!o0Cv82aIoMTTYbRrn0#HH^|BcSRoJ#uhxNzX zTN&&~QlkX9&(Hj((W8Oumu8?BDj}N_ zkI$a0yQ)`Kk%>);m1L^`Y{u37I@fs?AJD6u{(2A^An-_X*<`v9C(rHzI~*m{p7p=_ z&UW~$R%bh0(6uF;5oS9@zlxW3IP#1Uihk6WR8&A}^PJ2<@0<~1V2tqn^dZ%}HF^iG z`h#!ss`(0TfXB1#z%Hg})yby1LZhA9?M9+t8ic`|I`JPO33Yx*r#g!H1pE1F^%Ki! zXAfCt=iB)?X=b@SYG?wQ!O8k*p-U#kqeuv5{taJ!JcG&p;CEKH3_6PLmax)?Op0=V zFIXETqIY38d&NtfjCjV1PU~CYz7L&e&)?TJGHBdGwX+wb%1%|pTaKRwcYcY-a|!w} zBsMONL^4sx|HeDunC(CLpj^JP^Mov-AJiq?F($Tw=wo-o=e?WH%nmaP!RfT5_fwdv zzQ{MgyomVfTSK$Ff#sI}d{EoUzvB?(bz66sEZo26Wwb}b7e+&WHD+hO*$J2Zx7Tf~ zC}>JZ)o&sxSs54J+CelL$?m(dPUf5ceOiuxj*Nk){gq{es_xf`LgO3wZxa&W;S66| zw*GsHRt;HX7E863yzKHS_qu6!pE?eh@c?s2VW%Q!)38TNZ7dqQ>eXZG+>K2XPcvmm zXwdodo!RZRHzT-29h18F({+C8*=P6@g9ZX!?{3$u)l`!0aPdcLsY~L?57<%DT*lX$ ztwvuKa+_?r)5VLDs@=uwC%6E%6Y}g8yYrj7b9L_^XrW{#UWqvV_O0uky)oTqLdgU+F?Nw`hujnz&rb<|)eh!>|G42Jzu1567+U9!eb2 zhp!zTx_)a-uY0SYvqm$7)Z`=dr7j6$m-# z7wqB44H42#rJ?%(4zIC)DqH%DhJ2&2LPfrBm%zJ@fNe+ z9%Y5PZJrM)7{(K*q{jC#@VCwHSzaLCekVk?tf8lStjX7~*lyF+o;aFrHSx2M53_(? z_~~k;>Ss73LsZTnds@?Zde5f?cgCtbP!!oAz*r%}R3OX**_&ZFPL}>T5jx1KsXl+q zt;9Zqxcaf&QE!QA|4+_mtrc8jf=(xIelSX%(A@b=*0-l0TS*gI_!PgQxPcW`gl|zB z)muT1A0{g*lu&yM>=8m;5-_9YMwa3EUs_hWU6~Swq-XI*SEm1IKNiTXf->v zJFl_48$)~5*3Hot;k{$Vjl4Cm?IT*+Lgk7i6&-69DxpT)K8|BCYW@ycKOxD$vgCyK zW2)ixDxVTFw^F5vmxBjuoVcko(n&EraYJ1h@jr}4zrNj4+)H`QbcAh_i=I6|{mcPw z=5|KIR{w#JLFvP}VxE3c(9yE&n3&<-d%i;*x27m;{ztb=cKXKK^d3!oNF*HBE~2rK z`ffw=k@7KVB-PA3zctq49r&KwX@&6S&+t|tBcdmt#W;XawM@#r3+Ub@4+!}?(M3$x z#_LMlH&#|eRDBX){7M-!PQz{5e^vP0Bk!2}rvXnudsNdwdz7;-E+V3*<+G|-a*}!< zIkr!e0uRdQk@E?ziDTU!^u?=S{(im|iCi?8VMqV;{0IvIK-dUSC7X1@t&*~X4k!eP zwuHaMJ)|We3eGTg4-AU2@hmDnDzK5(c7Vy+-TCk%eDN$15$_w`Ar#iL|yDLEe?{Hy;HT^iM;5ddzIVEsnk*}4N=X($)kZPGqVx1#k z)SrU6;~WqCLUkI51AgSbZp9ApeExvSVL-ukNsWKYb<3AChraxzo7gV!S^?=480{($ z#ar1Qx?*_7B>FMSLoh}zG~Pq0Mm+)(NEmYm@U@a#7p|;r`H>3@Vy`JPtF>omcD00# z0=sovJZy8YtDw5El!F7IgXp@zg99Tw&RQL@D6YVK1~)?3T=z6KSqLft38l6^a*y;k zTa9x=F^XR>L|oxwsGtTmJfsKke5M0)%OH-wl(pKwhSxVf3Jv<2v&TlOYlc(}ugJ_Uy^9Vy{y?a6O%njvAl__doUx^i~+=_ep{eyfW{hhNYKjQA} zgO$P`Jn#UgT5pyjMWG7F6(xztRn+p* zviWld8`&YtfiZT=CTj;G3a*bq|w}y{?KMWpvUd2dq0`(q1tI&Bzc82Kl2k+Ny1Tv}L&-v+}boSdqoi2kY&WvU`wdxBGLM=>m+>X4{PJt->nCj2! z2&)k2cUp=CuX7G1{|AvK%6sBY9T6R^6-*MWf3)~|vUpuP2;0V!aIXMg`78}Z8a4p_ zRuwQ~Exa$u{9$!XT@~ZL<&lTFfxiR?2x(c8?TBlIE3RQ3HcZ@~N1gff|({_ou^PvvMII#@xhReCp!i{8Mv}b=)djEdQZi? zQIU>0*Bp~Y8_SYD0hPZmR>JP=40!I){6s4G)?%`4Zvd(f&w`_WY+$6*`vvx}r)@sr z=q|t4y&z<|3!_A`#&4D6=6m%z7eCK^G-jxw;(gcGu@S7Ov{vg9>$bO@=Hk9e+dEs+xQP5h=`V)9Dmtm>d_c;J)^rF8Om`li{A-&Z>r zx*S)>8uSz<7o*EwVN-4aU%wT}mn@`JwfF9B2~M;Fzso97l31oAwbvp{r1K7Y5*`v? z@GQ1f2}Osgl=nxdb~k*iN|q=nMYdaF3vcL!&v1pVy(II1d~t*}3;>hxn{s&dV9 zOBqx34mj?##iGk~JHmhPNm-Aky_u5!d^D1(|M(^u@STls3*id18|acAmgCZBw6XZm zp%HEksE7azq^UotDXF!O!St>`N7K*z^JzQU;x1+Z{$|pzk2SsM<{w(?>yTTTCY8^L zK!2n?Bh>%#1c-Wbo^1#-0+7MmGWEmYd+eTkNuyh>4@jmUXI^ZMqVd^WAdf>yUkIK| zpn9{~5vG{@ef0y6YPxwQWXlB7*1$T1c{z?~O?loeZ@bnDKjLAm=3lYadaKc#(>`#~ zU9Sr0xENb_LU^SeCca~j(=r5Xz3R|5S((BZKwEAj;3ep#r38tp?VQ=oTZzm3i0CfZDdj$i+qz_sIu1Hx&u!Z#t8lC!|6a}nfvMmhZ<5n zu&i~uqDY&&dmG-zN`;;-A`a()j1=sHKt;Ro%3s*otPra7n=~pT(#~nY<>k4bV>c|= zs2xfb>R(s%73l+cO?CRl0wT6e3KkELTQ5$ks5piMf%{S5E9#&@%@Ie&)ljGZk{3OH2AkZI*McYbD@oWXjc1XpJR#}Xyt8u^%)W}JccQ1 z{MrYJ#t*fu`3RnVsA%oI2-wIoW_Q-QCHTtTBw_dl3A^4Wj~kdJQ=F}MP8QH3gRppp(*X@di@&7i)08U z%Q=_rZr}ZGFk0!SSATRF?&-Y1RvZApb-6rqj4JzvhspUTD#|I^NXiw_uD9&=frH1` z_gIoxF;-zu5!J0ocZ1Cl;fEyl_u>M}p4~^pFgHkpZ~@?nk(SPDAQgL54D}1C7>?09 zo+Q6}l%}x7rvU9^C}F|hp1+l14ElH3%Nb#BgT1?h7Az+&zuUtVbed%OJhy}HyLJOF$P7`K{l|K4e@cm|Bu$~@Nye> zIp*2Wvkx~y7=x(~A>T(B52zY1|w`AAD>*zM@k_7MKv9b(jOJkwSO zvgnYv`IXW);_OcCpQu2}6UCm4)61z3OL8X@&a* znNev$_LP8c*vFqt2y@PCBq`-~sJv}|VN;VoVCZBb(eRs=RJDIOMY`ViLB8@8n?w3G zLc+>r>bU?M|AoH35+C}t9Up9x$Gyvs|N1_@W^Co;2i^N1)Dq$WxV5W#SXkmte5Mz~>r;$%2Ft7hG zYc(@@>q5fdnKV!l;Q_!H{pn8pcfviv9Ab|)1qrOnuz6(P1Y5#)2OTdp!yGI+;2ho~ z2C&!OmVG5j*)|NB_oPrab}{rd1;9?1^aD^V->{SA|Cpn*Cpx_)lSP(;KCYVAu84Qa z8lv|F{`Amge4{2*0ie?f_wm);$xRTM;`=cVK0XDfOL^_0yD* zX9htK=VGG6+Gc`6hzVh5y+s%ky9t9F)eZd1D^Tf;5SDbI-Ek&@#Iu@}%J(j)1fTPwlw&5s`@0gbX zAej3V)w3U&mCzpf>%eee0e`FLSZC{agzchRJm~kpraX%b$6VH7^eQeocJEAA+Bk?f*;KyAEk|}@*ai)zAF975T1c}qhxMOmx z-DueMYT5zQyeuAEs33=k_X(XOE2Td*h$>_4pZiv?yqZiF$EAQ$UZik$|D8n``2)+# zCSk?C_!uNde22VCFvxp>(|95{8Wsh zZC6{V5Ra3Jw{A1;yuoueeTBA)cfzXaOGD%J?>5Mvt*a@gUQS>lW0i}NRk-eb)6Gw+ z2#uIdc}LqjOvHFb)0V2*tFBbYpZ}DOz;yw`y}M8Lyfknm;{Hcwydv{|5T^eC`2Tcr z|GTk)3Zz24drE9R1V*5P^M}t;0aa#3im9Gdye!MtqGxBn9g@D^H=XnA#0*0J#*FO< zhlRW`X$OtBc|V-qC*f8eHsg^XInz@Xs=YD)yzWl61)yjmt~0>M)pyY6X^Pdme+kR0U zAMdWP1CXc>HnTfBj}=0|>Q$0El)=lIb)Bur1m*xHpt&ca(+avkGUGx|T#)-H?l?WN ze%MTahaOX@5O;qppX&=Qn~2vc;;qjL|AR^>5yS|enlZ*x_sDy#8dzv(zgv|jI4V^Y zs63`Zq<9auY z^jI27$*fU+U5RD(3EO7KTGF)RMt8gwQ}0h(iG-zKt@f6~pod+Jz_?sx9cQk}W211pp$~!Nm=T!@X%H6{a4wmZTG}AIS^!DEROU1FU37jI7#Jw~ z7q>JjjM6R33j-pffR+tIZy2@ySX2XpjpS6NmprXNoerqIFrG1vgV($Ky>M2^SHG%} zZ7g>OgVLSLPtkoUe+zy&-Gzx?PVxr@qSn-8kc3eC#RX}~UK6Sp9~>Eli;Vh0-il$O zU&UD9%Gt{`Zol1#YN7iJC=f&B5^cgB=OR2tttnub**Z zq`WmJ&yY0@{v)6$JgBM9b(^Poy9zH;F`Fw^)RazHAQM}>48-qT4*nokv<31u>uHc) zV=Eanj>SD+`{GNU-R{Eu1M;nVUUG|c?;SjRcq)(C_mU@mLZo>dS@o$Tul9yfNcp#P y{(t6*|M