From 1cfb42059095da9a9695d09518ef77997a0cafa0 Mon Sep 17 00:00:00 2001 From: Kamil Jarosz Date: Mon, 21 Oct 2024 23:51:50 +0200 Subject: [PATCH] tests: Improve edittext_getcharboundaries test This patch removes y precision constraint, as now Ruffle produces output consistent with Flash Player, additionally some test cases are added. --- .../avm2/edittext_getcharboundaries/Test.as | 27 +++++---- .../edittext_getcharboundaries/output.txt | 56 +++++++++++++++++- .../avm2/edittext_getcharboundaries/test.swf | Bin 12213 -> 12242 bytes 3 files changed, 70 insertions(+), 13 deletions(-) diff --git a/tests/tests/swfs/avm2/edittext_getcharboundaries/Test.as b/tests/tests/swfs/avm2/edittext_getcharboundaries/Test.as index 24df05fb1132..197f3c301eb3 100644 --- a/tests/tests/swfs/avm2/edittext_getcharboundaries/Test.as +++ b/tests/tests/swfs/avm2/edittext_getcharboundaries/Test.as @@ -27,27 +27,35 @@ public class Test extends Sprite { text.defaultTextFormat = tf; addChild(text); - // TODO Add cases with multiple lines when leading is fixed. - testHtml("test\n"); + testHtml("test"); testHtml("ay .,\n"); testHtml("xxx"); testHtml("
  • i
  • ", 2); testHtml("

    test

    ", 2); - testHtml("l1\nl2\n", 0, 2); + testHtml("l1\nl2\n", 0); + testHtml("
  • i
  • j
  • ", 2); + testHtml("1\n2\n3\n4\n5", 0); + testHtml("

    xyM

    xyM

    xyM

    ", 0); + + var tf = text.defaultTextFormat; + tf.leading = 0; + text.defaultTextFormat = tf; + + testHtml("

    xyM

    xyM

    xyM

    ", 0); } - private function testHtml(htmlText:String, xPrecision:int = 0, yPrecision:int = 0):void { + private function testHtml(htmlText:String, xPrecision:int = 0):void { text.htmlText = htmlText; trace("Text: " + htmlText.replace(/[\r\n]/g, "\\n")); - testAt(-5, xPrecision, yPrecision); - testAt(-1, xPrecision, yPrecision); + testAt(-5, xPrecision); + testAt(-1, xPrecision); for (var i = 0; i <= text.text.length; ++i) { - testAt(i, xPrecision, yPrecision); + testAt(i, xPrecision); } } - private function testAt(charIndex:int, xPrecision:int, yPrecision:int):void { + private function testAt(charIndex:int, xPrecision:int):void { var bounds = text.getCharBoundaries(charIndex); if (bounds != null) { // TODO These precision-related calculations should be deleted. @@ -56,9 +64,6 @@ public class Test extends Sprite { if (xPrecision > 0) { bounds.x = Math.ceil(bounds.x / xPrecision) * xPrecision; } - if (yPrecision > 0) { - bounds.y = Math.floor(bounds.y / yPrecision) * yPrecision; - } } trace(" text.getCharBoundaries(" + charIndex + ") = " + bounds); } diff --git a/tests/tests/swfs/avm2/edittext_getcharboundaries/output.txt b/tests/tests/swfs/avm2/edittext_getcharboundaries/output.txt index 947d2ee19890..92721031a0f7 100644 --- a/tests/tests/swfs/avm2/edittext_getcharboundaries/output.txt +++ b/tests/tests/swfs/avm2/edittext_getcharboundaries/output.txt @@ -1,4 +1,4 @@ -Text: test\n +Text: test text.getCharBoundaries(-5) = null text.getCharBoundaries(-1) = null text.getCharBoundaries(0) = (x=2, y=2, w=4.3, h=12) @@ -6,7 +6,6 @@ Text: test\n text.getCharBoundaries(2) = (x=13.05, y=2, w=5.7, h=12) text.getCharBoundaries(3) = (x=18.75, y=2, w=4.3, h=12) text.getCharBoundaries(4) = null - text.getCharBoundaries(5) = null Text: ay .,\n text.getCharBoundaries(-5) = null text.getCharBoundaries(-1) = null @@ -49,3 +48,56 @@ Text: l1\nl2\n text.getCharBoundaries(4) = (x=5.05, y=18, w=6.85, h=12) text.getCharBoundaries(5) = null text.getCharBoundaries(6) = null +Text:
  • i
  • j
  • + text.getCharBoundaries(-5) = null + text.getCharBoundaries(-1) = null + text.getCharBoundaries(0) = (x=38, y=2, w=3.05, h=12) + text.getCharBoundaries(1) = null + text.getCharBoundaries(2) = (x=38, y=18, w=3.05, h=12) + text.getCharBoundaries(3) = null + text.getCharBoundaries(4) = null +Text: 1\n2\n3\n4\n5 + text.getCharBoundaries(-5) = null + text.getCharBoundaries(-1) = null + text.getCharBoundaries(0) = (x=2, y=2, w=6.85, h=12) + text.getCharBoundaries(1) = null + text.getCharBoundaries(2) = (x=2, y=18, w=6.85, h=12) + text.getCharBoundaries(3) = null + text.getCharBoundaries(4) = (x=2, y=34, w=6.85, h=12) + text.getCharBoundaries(5) = null + text.getCharBoundaries(6) = (x=2, y=50, w=6.85, h=12) + text.getCharBoundaries(7) = null + text.getCharBoundaries(8) = (x=2, y=66, w=6.85, h=12) + text.getCharBoundaries(9) = null +Text:

    xyM

    xyM

    xyM

    + text.getCharBoundaries(-5) = null + text.getCharBoundaries(-1) = null + text.getCharBoundaries(0) = (x=2, y=2, w=7.4, h=14.05) + text.getCharBoundaries(1) = (x=9.4, y=2, w=7.1, h=14.05) + text.getCharBoundaries(2) = (x=16.5, y=2, w=12.7, h=14.05) + text.getCharBoundaries(3) = null + text.getCharBoundaries(4) = (x=2, y=20.05, w=8.45, h=16.1) + text.getCharBoundaries(5) = (x=10.45, y=20.05, w=8.15, h=16.1) + text.getCharBoundaries(6) = (x=18.6, y=20.05, w=14.5, h=16.1) + text.getCharBoundaries(7) = null + text.getCharBoundaries(8) = (x=2, y=40.15, w=5.25, h=10.05) + text.getCharBoundaries(9) = (x=7.25, y=40.15, w=5.05, h=10.05) + text.getCharBoundaries(10) = (x=12.3, y=40.15, w=9.05, h=10.05) + text.getCharBoundaries(11) = null + text.getCharBoundaries(12) = null +Text:

    xyM

    xyM

    xyM

    + text.getCharBoundaries(-5) = null + text.getCharBoundaries(-1) = null + text.getCharBoundaries(0) = (x=2, y=2, w=7.4, h=14.05) + text.getCharBoundaries(1) = (x=9.4, y=2, w=7.1, h=14.05) + text.getCharBoundaries(2) = (x=16.5, y=2, w=12.7, h=14.05) + text.getCharBoundaries(3) = null + text.getCharBoundaries(4) = (x=2, y=16.05, w=8.45, h=16.1) + text.getCharBoundaries(5) = (x=10.45, y=16.05, w=8.15, h=16.1) + text.getCharBoundaries(6) = (x=18.6, y=16.05, w=14.5, h=16.1) + text.getCharBoundaries(7) = null + text.getCharBoundaries(8) = (x=2, y=32.15, w=5.25, h=10.05) + text.getCharBoundaries(9) = (x=7.25, y=32.15, w=5.05, h=10.05) + text.getCharBoundaries(10) = (x=12.3, y=32.15, w=9.05, h=10.05) + text.getCharBoundaries(11) = null + text.getCharBoundaries(12) = null diff --git a/tests/tests/swfs/avm2/edittext_getcharboundaries/test.swf b/tests/tests/swfs/avm2/edittext_getcharboundaries/test.swf index e91ea10efd8ca8fb78fa4242c785827756426103..dba8b217b4d3067d51b62e1f5d69c9bfa0052a51 100644 GIT binary patch literal 12242 zcmV;@FD=kRS5qmoI{*N90o8kXT$5MR=sZt02wT8}9So}^Y++NtfMH)mgs=z*N`N3( zgb2Zc^0pD##HFC1XvGEu1hp-qwb-g<5k;gL+^W^KVNtQ=wQ*^yeQkTs6Zf~@eZPC} z@B8P%?|E`EXU@!=IdkUBnR6lmJvqSd0LB;u>l*{W`?IDo0DfUswy!WalwGnaFTcna zee;`>Bb7>gU0vUO_g$BFJzNS3SGcoe_p}QE9$ZRN|apWHZNKO(0lY zlv$W7k>(cUvk8KtjDljR-<&xwsAgrpA}T2^%u|!h%5)XyiC2m9rA4l8E^dfWR;F)u zLE$Qq)L$f#cq)WSuiZmpI}-QrC=qMf8TBQLioM_l-lPh3H^^j%RQ zVpvd|pQV;m-S9Oc(JZr2ERq)dw~bz+5l!+$`74S=E5!cd{N)L8YMQS=>K=%sV*kaN zQntIB6Wg8V?)h9^0?KzKRR6|Mynvw5^#@%>u}Sn|=a_)FxFw5)!JyDXCh*o@Fk_m; zhami~zy3<0lTZ~EJ!Hl^=RA;^0DLDfIJ^y&hUoF)A}Rc3aC;5_1{FY$E|3Vg| zk7!wGS8I1_k7)m-eOPCXUa6ij<3q+nhN(VZ{~P_k^c@YP2Hgf{4NPZ=X8|*vNoPq} z^9_>>KQX*#SY*^`biwGck-qU9;~?WK<2A+~8>g83Y?5b6Gix?`YSwG6V-auhwS~E* zi)FVZ%&wX3!0u-=t*%AS?&0%z?RcAPJ0y*jQms;QHta?oK7dy$95as}1+I$iPAA;_3e9)=ee9{WkIW z-3)ubKb{CR5Uo2mZ3_M0lL$AoPV=7~UrGxa!5{3_KhA%qY^Q~sDSbL{Ot-oL;hkF< zr~1`-U$5L=bR%NxAF^zjYt*=O-&g4-E!RKQZH$?bulUG?(L3FC(W-4({f&qZ{3TYa z$D%BQv`^afoNV?IT|c~aqG4CHIL>$F;9=?BAkPyXErtB2P1XA|e&AQ-maGUoQ~JnF zFM5b6Jy0$7LM%sn-eFwXF`E%;ULVOj2Y9Ox=5%OZU`bYZC!S4T(~2TGy1o4$H?O~J-^fxPu<9#` zuf~++z?ponJ;vumQ`b&bMn@`8?BjvSE;oq~8i;Kw%I-#$NjYH)*Tz?agJk{jg%Yz( zbvuf`qo_Li@;CNh=Iq@wkzKZ!N#(}%m-(#kZ67e((A3WHsRdXtBExcA*|)eS2P>-j zhW{BB7LvE-J2~pr%sw~pRLHOnllC-TwhX>z0m)x0piP)!()t8gP2I?pn?llIS5+~9 z){W3K=z14m*kIsrl|dh9NDhHU#q_uvS5eX3EPw+|K=N}AJXMjW0;94+U{q&Vb%pD! z6_YLi%H*_NMVuc{n{rvw{@p{qbO-mGabm@i9imNvYQ%nCNiSskPsomS`15<`^_x@ zty77hHLMl1l4V%g$wQ>sUL#o%C0Ex}a(XIb6GxbGu%QTGGewoaGU|_?lMeCi0L6Ri z7alslvFA$Z$-+Mb%hCgvRl3)~vY^$ArhH^roe&Jy*Tpb*p1ywEXedI|S)t$4&~n}Z z?8R(+Yx-zFwDy^8O28j!>z8xI0^pN8J5@StFe;QojCQYg+x!9fG9NX5q-z?pC%pE zS0oMgNf%a@PMIzH%!LP94r-+mRLIw*{T8gp{T3$E-eJMLiAkdZt-wh{Rw;vH zh{}<(QO@Jb(bJ(Vkb2o=8~d`48bl-=HDCjI0#UhBXtl@hnex}@pJTqG#Tu`<@E}HW zh4i%hzC(4Ew6fjdvrZM8J-z1RM*1Sj{_yusd$0UxSI_zGHaY$0+r!aPe;Fb%`fb3I zUl$CvubR)cn%HnR#JuDO%^R5R?x>mftGC>@(5j!PAkaR|I%%`yJ*zX%9NJTjTlWYy zHnTRy>{!~jIX)yXIc~j4sf8Zrq_GNN_U~RQd3=FZo@e2-eq2l#&}&B*_%z*LMsbjU z(ZKqMGCLVoCIln<3J2zNU{@(n80lDG!V5o#+TC4%)c;GmkNI@nMR9^np>!TWZKym{ zaSbT9=<+WcS%LRGlo0)@}7EcM#O%s7`D;*4OTxn+>)dvYY8Fo;setDu+FKUDT z!Z-fb5%37U@yf{F^=+=~abjw31NdYF;HJI4<4t>Qz^q65uy+J1@j%Pton+gyBX!$t z&3ND#r3B6NbtC6$*2-WW(bWsy0FNVRAFq!Tkn8ZB6Lp+YEaXJ%p#;~#!cD4MI}NuU zQ8YKN7G9Zua^igpt>ZsVNl>dFa{>H!Z1&BW{IbvLu+ToOrA%z+I3YATw>qM3mkc+I z2gA}1GfrYtUi%rKEa?T4CTHda{HY6*mMZv+zNIKi-(v$eR9Ab647&aV%!v`$wr4>f ztVZ6-+FSNJ=gbGKseX|?N|nocD&80b+jdJ1*M`@TqLkCkeZ%#^cJ} zdRpQn)bUTu?LvDcGC0ZtT(&CUal&V`E-_h@(7>3Qi)1hc75FoB*gO1E^hVE$>X^$MyyIt-g^V$bM;oDHed>a6UNfPLH zwGGrR>A-83bOS35ApPu~I4z%{Bt^6P@z_G00Syhi@Njmu3|Q`Rm>s${e(i1s%u0@d zIBIxKNU~Lnz5_6C_F+*ZJ5Pywrr_KK|D_kLj3Z5yQ)d@?mI!a$y;ot&ah|Pjy^bzC z+noZ0U7uGLU%%2SgDjKPv31$VgCIr4nu>NcuC&jNlS3Q>C_H!Ol_0AQ@TsvT(E=N4~Cdqz|@ksb#jFtYr!xBP#m=pY+N&D8I5OuY>;kjr{^h zBlLVg1*DlTE3RDBi15wM9CN=Ld1BpI(}nG=`b6dM=FAwdvMOWU4pF6OCjrYv3C7t? z@mZ!dU=$Do%kHG+Rwl3RY}7xoCr{VCoN?W_D25W= zZ;(+`DU1+1`S11vW06VDT6OaHiam9yA7ZgNc>rncY#fi%I+xf~VAq3IOy?Hk!u>Mj zi@hVaGsXey;(*RzASY64-Oy8g=|lL3LqHjd2`Y!HIjJ?0Th8=F0}9Ywyc80{&$dkTUj=5A?bAf%U^WjH+X2-gYT=sI-)`WaoHYPUNRWD?M#&xnrYkK=1AZ z7g@c>r3O);Wk+h~@5FEtCUCpnp6ZnZumWpK*h8%Yoz*em*dK4w9ukwKB>?700UY(H zbPVz~(Ta_z>yhEdgkW3M)X?zbxrkWj+bJ8rFj4}XTx9n+Qig4s-?E;2zfyIXeEne9 ztc+t?+fL?b1^y|6{Vt$&?pMxCW2=??s0%*;e;^!cNk?BpDVT50n#2ht`$c>;u8Py*GD>uGa3*`p9oU_pVk3at$H!ir=M16UrX6%vjupAH)xGJwVh%D z401qgdmxi8wGy0=;Wa#HaiUAl^Z}D_v!8UM6-#P0hsp^_HEuT-R9mn_;lq13ScePU zZItqchD{M{6HawdUqK8XD@oCEZIEeBr_7~j-R}Gym@R#) z+3(w6_S4J01dp!t@Aid53uWI*Vai;b2TXq%{zNWJ(M*TsOc~`|2c5#S?xF(oJHR@; z#J-v7K=;<#B>3DN>5VK_w8f<1Pv7IX?i`O?7MV;*nrD2eY9id(wl)OC%7(%^Ov{Nf zbx=HS;v(QpJebo$?pUiwPfzikY3B*QcAvcRZR6}PsXZIwe*vhdUN1DT1n{`c#zt3# zV9{5EJL`4hN*TA!7d2e15FOMRVh%=p;o0zHLpT_mrFV@*@A9cV% z-G4|0HgmuMNN7>jME=BKIV(&7?E)aJevdQHNLdm=-+=57f5t^I<;BSB2Ll~54tr%B zIDI7|73lx$1vG{5u0wq7(Omjd$w~oO4RnL6Y?vB<2tCWvfxAcsVbRlF7W3t|=9Ai! zx#zI5F9oUt|0ES2L;fTbNF4LB146e)rgj6T{KXP59PR{bsJHKFP1;qFek`*7(iIa@ zA~#DX?|m73tciw1d5gPZP{OC?94fBL0o)g9{jQEfFDiI#OyFGZNul1uF;+m@#+D~VC zY#O)L5Y~8B7Mb&;EBE^6BYR^&Ych=Mx6x?bZ}<3To1N=(`#Raq!`ghG(o z-1Th<9n|AV>&JV}Eo{=?R5vUvHH@;%$qHd39t4qVo(Sc+R zS)9z)-ysLqcL1iglOgdDTTFc%8y^=r%Aj{B9lnqcyN}22j-1rapkzBuw0Z%S5)AOp z`cI0-&KP$b%G2C+nzPe9&`|Bhe=2j^;U&ZCcBfyhT#KGOz;3M6OK57=E6ungL)nbT zKG%0NHz9lQxlF1~`jkow-l~N8>(K_H z_jc*f%N|F)A6U2{Jfl6kZ89(kFkuGZ_SDzb-Nw8dP{O)42!TI(#E_)Ee zH}eC4pMJ|E_ijbvUT2{+wE9qfbT#im`u6@S7fpWiH6Oe>OmyM=j{r{+`!BC+PMK`+ z%e60V*qVCpHKM;@a#Gj&Q%~E}aY(KumKb^X$fzt1Udn0y`a? zvD;e8l3`%VWl-cZq?;YSIiR5)?GSCk4i!aL2mc~jp9GBDll^}tyhj`3s0Vf?0|~dY z?onFB&gPu)NPeRE^cKCOTg|$niSc$$MymsTW2CIJ7H=)}+xF9i)83`+qOBLj<0$T8 zdwn1WJ#|-p5$7t;u2|@~cKH+nPy3@m{Z+nb=K7vaJv!(yCgcu*0*JU6AJ=Sf92vyn zc+24tm(lAnzlKe0+@G<}FLkRlY|h6QMr8OyXnn>domb&o@~(IPcBH?K7D6nu{|q9e zZ2PUUyrN^MQV^2@@`^@m!T?R1lCS#59QPhRKA%xP^Jw7lqDuPv*?oUB_Iz}B>4L1s z`)6Wg*iyfO@1^wJqPn zk9FU}&oBlkYtUBUhPKBQ0ff!`)>5P;sJgRI$i4gvWZ+JfkRuzO>o|4Li5O1nCrGu!sr4uE!Y zdRL^r0%lLhA!?B#fc|;CrW3R~UWay0S?Z~lQ{y?kRH~Yv~V)a69N$SQQ&l8n13a=ToL4K0gnvu}6abreh zX+kZF*aH`*1GU+6^|B^U325=x-t?T7E{<!WJAJcWF;sxF1 z(lf^wd*_?ATwC{Jc*9_;tDkCS%Q=P0^7KmUnYMD@e!(q{;g&vk-bj$G(yU%sU(eF8 z&H2?qII|+?*gBT+CWCFfpQu4iZCSp3s-qn326jr=NJv|qr9SEUmWAyWdPowlpV|n= zqI^_!`tDvycjl~CLw@^H{ktF5+jdUB|AGCVPB*3|BE`OzabKU;X)0a#;QKz*=zM&r z#?$#d{<_sCkc%>=)ebfz_a3|dDtFyW)LtQng_Q!#gU#ehZ2rk+65loUOeg zi*s(1#Q`;Qc5I*FV=Gg?^|dlg$P$ z%9oE`@a)LW&<;qS=hD1ZlHBv)_z7&?Tzc4kDJSCttyWZ{b($gEi@=eA+l!rQ|%R7!~49f_OoUdC0S8m84 z#dv+}vJ5!{t|5J(`ExM$T>QAX5Qvn*oxiB|RA%4WRE6O?-6YD}TEu`)8KR zux@_-)U@P-CA%z`yT18~72$M}G~=%4#NG;7D9CanK-Xqpft*|?7&XInN-oHfN7@KW*tlig|v?H~+M5p0)PooTfyy4J9 zdsy-o9X2q#1W-*Ha*(*2U?$(x7`ksF?b+rtVt1j?6F48pNVayh$Jsjo3-L*~o6+N& zpd@;H3Ylku3~~bP6IwJRp!XmK7FZQp4TY$xwTyv<62eAj{NtCKuz?{ObV0`%JBlvX zuvT;!MzN7H`dKV)5X#?TZS9|!kgs2wYvNm7X)krA9XMXw2iv!F8VsE5G$p65{#CECPVMq*HGBC&7<^YUCL$M0HpyJ!IY=Wx*J z%$YdZlT!z*nnS=kZF^^}qg~bej5_szO%`)2JZ03}yM|SRLk@+hKAVrn4ip9&pgig@ z&=e)C59Dam6d1Ottl7Y1(zZPvKCavaSbPpp53ws#YS3Qq;a*2wY1r9A9$Tw59)t;y zP7u+p{s)fx+Du;Syc<-3KZvRib;w02LUNm2Uj{okpgAjDzt)MIkqQpmKntJVzcOEj z6>z{%z9YYusr8_jFs8mc_L9rQVdJmNXiK}X3(`ws&2;$zT7v^NiOwhGfc0Kx?q0+L z_Sr*s5%XU%cEteCzRC1Puz<_J4T5AoXFxpuWYmaM{|c=F>}~TQ$D?P`g3CG5nVM zZRa8vKLM6f3BVg{%5xWPw%*rwj%BgJ)QU~$_RdWtfu9m)2PhN$-;`h*lHizO7CQDE z2Gg4N8&_KWi9)QBLn0)>XJNjEmpjW{?hM*F6bgMukH=msoX}9)(a@~~jVqw%uw3I_ zY?aNvaG*pfP_Alqqp|o5kmtq&k=B{$Ou$tRoP{lsvM(q& zH{QWmhE6wPAS85asyIa?Wg_LAxKSAr`H>Q4i83AS`Y~B zE=r`FlEE!%h;v_-OJLVGD-FwcZ~V+5%)6taXk#C6zZAgD{+y00XhGQF0OqGfg0^xd z`T9bx17;k6wRMpxs^ipcjl)@56Txl6c8C<}z{rj@4vJyWIV%c^m|!+qyEE%?vEk?2Ei9Tr0^t1eV{|1FyO4B&59{NLT5j{V zu}3PcWp}hIe8P{0;=JEuLjBiIbal6c$6PHhe+_X?`<9>HrgnjpPiQYOD zt8mS788LFL9#fw8H?F=shr*x8E*-5uELz+>&wPA$++`E$^gDY?g42Uqalgmm2YeLM zdqZw5-Bz!>MGdNG%kmb;cg$sSw0C#AFRu+6dZNEGu--&U&JKU*7yQ&hFLtW9N|$3+ zE6?|c44w3(Yi5c9>q_6FPL;LghxL!M_?tDu?*=ukn>IeUz31uPlFpBaNjv|BF=?6UQ(ue4wHU1^*`turDY z7A3tor)PZUD4&~puk!<1l5axL_l*@)ORYBPK{mqr`k_h8RfCUil$!J>OsznN^JiBX za6#+Vb=~lTOMR@-O3|^EyHIb26CK_u_mP0>;IS$cRF2wECGne0`X*)ArQ@t+0{SY! zt+i=PJunt|`@caUn&x>u`hf=y|v0izfgA$TXX0;m``T9J{^9{+=IdnL$b^M{6 zGZy@j*B`_%S32C%36J;}`S3Yr$7mf|Mpv1mSn$4n^7Nvn+WTF10hW6l+sKq@xUF;# zSsHuJsQwSM<%~N7t@b9Aa7h-x*A@rcI)PCqr%trW%qmWUZsYKQix8Jio%mR0Du4jp zt15Iqq-%9mZi2#uTn4m7=7{mg@FK?LFt2R(qlRGf;2elUVW^DTa2+4ppoh*J;{Rb( zcT9#wCV?h{FRUkL_PH}Z#$_d>Aw5vt0u*4whn_=RQsV4|4=xQgrVrQ)(;=<^D4h?O z-)_BU>WMTBRwz4d1GZoX_CRFLIlu)+Z~|v=0axIG8@Pi9c!C$qg?Zo&KHv-Ufe(J* z4+{W^4uKE^!4LwW5C-880gK6oC|qVGXdOMfla$VLEry-{{-47_wQ6{`_2V#O4-L=F z?h;?AQyIt8H)_7QnUYoG_L$QUKFpW-OL#K>({9s_Ql|>vC$8y{N|zYaGT!vGMZD>- z^JW{F;dLi(H;KKsn}f5=%-c=sCTGf-C%AIv=}4)Ygy-$%?WS!NZa-~~Y8Oq z|FU)=N*+t;znCQ@UVR) z!Ry-BrJr8aYW){fUgP~&r6uYXJjBEIRq5aHCf<^{@fEk9k$lg!_PT`y(wdH1=G(7o z%@9nXhMB5$O7!S;Nf7vwiVdo5RpUK+h4;&=9=W`Nz2@eIVE+gt=sBR$x9YaqsD-~8 z=J=|`9VAPD8bK0!h*iY(G9pd4$fS`h|*1VAAHILVAUzdJ;g}3b$mDjcZr=_e{x_YhMuvf6> zTKnFgw7_sV5()j*1F$VF%>p zv4sR?5nCuO5*Mx!XSq1BLqmhbnd~(#?&#{a3(p0kyL|tg-ciEQAMR}7bm(~37^mbo1o!0$Ju?3|62e@bT_|*?@FMc3+3t$ zIzKPhKbP-{-X?qrTa=f(BHwS0+Mee46V&;x5`Su*8$HjR&U}qalvb)+X}Zzf=^k`X zx>qJ&;{PUlM}mFnqF4M-?Y|*-{x=Bf4!lJHnNN|_m3V37pl%a-p_jxIiZgSI&@T+I zT#6Kpf|yFcec4o@ctuEwgt|1fFf~67TY;zM(+b6Cq!9+uwE!tKPn^F(n!{34MT5Tv zUB34vstBEu*A(PtQRAeAXdp3*;(3wXygldYyk%z8=LSrDZi0IMW?9;Anw`#D7ODR? z`!#&4{*~F2;+BMxJb66xmr`b;A4U94RFAnllAEU&gMu02hFTOOBV5DS7&FC8O-xNq z%}mWrEexX!V{mN@CsU|24Nbb1wvHnWC(|$r4X4p?O&W<#!?bC*4h`3(;d(TjLBsWF zxB(5HMI$ja4KYniOmj9y!`U?4iiX+HaAz9Mqv7r}>RcK&kA|bR-Zb2ohR>(rd>X!h zh6^-x5qAgbcHnCI0_1Pke71;+}y&_rv}4F&MvsQrDd?p z&xNR>g<@gh=!rm2BzhLc;|%?TghVWC3Hp|V+1hE+03+i96rW>2McFQtw`T?bj^QQ& zK*ETyi;UR@V?aWECMq>FNeW&V0+Vn}`hNTYNu{IUS(RT^X)4mNY%B*y-y`5>j0#4? z%R!}^M#?5RX^6-wJw+NNk^(tY6+@9twHMJ;`smY^F49mLJTGXfW}$-JGh9ShF<+Fl zR4i1o7ip^u)t@>lqcq(}T|g|2$DCLqJ(bCrt+t4vG99xei}Y1y2y0AapfXP*Xob$g zI4VnplXWN)6=o}(Y}Ey}!pTluuu?eL+v1^2oTIW8Y^&>v_q`7RtY2 zFaR`Fa}}3gz%JL9e{-1-$u!%{aO$tWRNja=iHw*hA?CgWb3gDUn4_0JK3_GTU>-Uf zEB{8tzs#OxjsgqWyE)c6-S5`>?8vJsT4IPWE@E*s_l@7vy^bo> z5e1=6S40yn6ym~sQJ#jUi`!fxqJp^pA!Wak2I<=DZz8(Bs(!I#{b%j+yyw0#5-$fw z^A(XdqcZ~dVomvvexK~&J$EkI!;|MhqhJ~&LyDn}p`I}s9I^%t$7v)DO>K-u)}>Jx zgfAxPqoG7@7ij3A07(<0YZ+klS?H6Aktv!~j6_&67K&C0G|~haG{(rElF*Ax(IqAz z4ra?RCvpxk;uwZesEh|xRW=%RswxLLPgU*zM)&~kdn;2;w-Ux>Hm+) zRj>aZo<9HEVRiSOOI0tpWMj-w1L=uMEOaD_CWh8MDvd%z>L!*rVglhv-9X3CvWscy zqKTqOesdm?kh0N()cInC!Z0e0s^B4wzR)LSwt|;NN+V~JU+5Cg#(8PzrS?ba;rNQF zM2y~?Xsb$=znmN|bxKY6ADSC)&_=TZUg}@#4fy}X+$9;3G$?@6(2D(BXUP1}5)8No gQNVB-vZm+m#AFtZ`uLV5pk5Q-L4XSX3nGg~>_Rg#g8%>k literal 12213 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 D%Gwa1