From 39cf81d2ab57fa616716515b9ba4b1fcda9915cf Mon Sep 17 00:00:00 2001 From: hadashiA Date: Thu, 2 Nov 2023 10:29:42 +0900 Subject: [PATCH] Add test for unity AsyncOperation --- .../Assets/Tests/AsyncOperationTest.cs | 42 ++++ .../Assets/Tests/AsyncOperationTest.cs.meta | 3 + src/UniTask/Assets/Tests/Resources.meta | 8 + .../Assets/Tests/Resources/sample_texture.png | Bin 0 -> 16432 bytes .../Tests/Resources/sample_texture.png.meta | 208 ++++++++++++++++++ 5 files changed, 261 insertions(+) create mode 100644 src/UniTask/Assets/Tests/AsyncOperationTest.cs create mode 100644 src/UniTask/Assets/Tests/AsyncOperationTest.cs.meta create mode 100644 src/UniTask/Assets/Tests/Resources.meta create mode 100644 src/UniTask/Assets/Tests/Resources/sample_texture.png create mode 100644 src/UniTask/Assets/Tests/Resources/sample_texture.png.meta diff --git a/src/UniTask/Assets/Tests/AsyncOperationTest.cs b/src/UniTask/Assets/Tests/AsyncOperationTest.cs new file mode 100644 index 0000000..fb29218 --- /dev/null +++ b/src/UniTask/Assets/Tests/AsyncOperationTest.cs @@ -0,0 +1,42 @@ +using System.Collections; +using System.Threading; +using Cysharp.Threading.Tasks; +using FluentAssertions; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +#if CSHARP_7_OR_LATER || (UNITY_2018_3_OR_NEWER && (NET_STANDARD_2_0 || NET_4_6)) +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member + +namespace Cysharp.Threading.TasksTests +{ + public class AsyncOperationTest + { + [UnityTest] + public IEnumerator ResourcesLoad_CancelOnPlayerLoop() => UniTask.ToCoroutine(async () => + { + var cts = new CancellationTokenSource(); + var task = Resources.LoadAsync("sample_texture").ToUniTask(cancellationToken: cts.Token, handleImmediately: false); + + cts.Cancel(); + task.Status.Should().Be(UniTaskStatus.Pending); + + await UniTask.NextFrame(); + task.Status.Should().Be(UniTaskStatus.Canceled); + }); + + [Test] + public void ResourcesLoad_CancelImmediately() + { + { + var cts = new CancellationTokenSource(); + var task = Resources.LoadAsync("sample_texture").ToUniTask(cancellationToken: cts.Token, handleImmediately: true); + + cts.Cancel(); + task.Status.Should().Be(UniTaskStatus.Canceled); + } + } + } +} +#endif diff --git a/src/UniTask/Assets/Tests/AsyncOperationTest.cs.meta b/src/UniTask/Assets/Tests/AsyncOperationTest.cs.meta new file mode 100644 index 0000000..fed3f0d --- /dev/null +++ b/src/UniTask/Assets/Tests/AsyncOperationTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 295d574a16494d6aa4d02fcb32179e39 +timeCreated: 1698887128 \ No newline at end of file diff --git a/src/UniTask/Assets/Tests/Resources.meta b/src/UniTask/Assets/Tests/Resources.meta new file mode 100644 index 0000000..d568559 --- /dev/null +++ b/src/UniTask/Assets/Tests/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d82913edf6ac48aca30f66ae9ba42d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UniTask/Assets/Tests/Resources/sample_texture.png b/src/UniTask/Assets/Tests/Resources/sample_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..2da89097b331de4063b57842c7a775cb47399716 GIT binary patch literal 16432 zcmX|o2|Uw({QqoNIfe?ki$p18&Iy$}MQ-IRnH+_Txos);5&FuU-&o`brCf7N2g;C1 zh_P?VZEjPp|9ky@|6h-XM-LzG<8{8@ujBbnxMpt5%O%PMfk1doO$@9c5U2wL!e)Gc z6MTt8sPKXR*aI(_+8hA?A`aY+2frWmH@O}Nfp8yU{jgDKQ9IzHIL6QcW9^5=U~k^{ zfLy%ocgy3Lk=K0>tlxc~z+?K>>NCx+lOd2}5L1JTHX(V7w9w`$_ubBwAx z5{L%36ONSKP7?Yg`I_fa9lv10LPu-t=R-H1%*pv!+SFy7@t6?lP@yFM-q~wtjdQ2u z1x`%2RxeHe8E0<)4xz-{ZXF8mAOz}8|8Xho^I)W^<`Pmkjo1RA2+9G9`e2(ntmcSv z_(oeHghA+-bYVYfujj%(Mw9c5KPxRwt-Zowhs+)kC-0EQ$fFffNsvG`ZWt1_1S@%* z_`=Y*CK<-e^;ODu|A3V={{ug7?c+2dNfWYka(=}YT(Q9l{uyMy- zhXW4$A#i2Bvg|}v{2SONd)a|-{w*bcG5<7@-l6QP1_mecxGFCURHKp?&M1$pieGMB?abW6NOR%ZUkJl6dC zU=x3XP=l#dA&{2A=^E5+v>9yvF`_J5Mbo_cx1hhQ|0|N-5eXv$1ETHe8Y40VePYpO z5pu?OZYwi_As2L_fX%76y;NG-3MJ@pSGo2hJ_YyEL|^B*i?s>-XPS&eYP7OuT6}z$ zY8lxZPk71Zd%%~IA|P&@v5jBDC5`QVn^6WV#FUXm9}r$bBgD3jtPBizd@o>EgqsI5 z#fsj?$H(KiDmBWQ*oL639F>q}S@rZccclGA{NqXcGN|PE_;n3IhnVb<9P&6hr~f)p zW*S;b+J4)A5zwqxMut*+ZLMy;73v}FTa?^|F1yo@V)rdDM}hQ}BAwj`Binc#lenRv zj&h9@cq-KVK2wghsY&!qH?*5F1+U}SE5=|%alg?UDr0UT&<{7WX-EroNFZS#`- zsELmxbQ8l|D~7kH+QU*@ZY}-#M?haZ-&zE+c=qOeS<1$)PDR+LTDn3=(l)o{76x4 z{FV0-EETBe*k@s3WBd!0@?I5YWoaXDseCrbQt{A)M+ryKTFOd zKSE{7N>e8iwPKzRJ)pXGu+2AZ7yg~TnrV%v}?VAEd}n#n4) z8@M(6^-D49CHDAJudXsq)0Pv0+L0sZEr%z$*7CVA7IwCi(SSrSbEV_-LrTtsa9z z63aZOzgH=mJ+eU7#xY?&5Fh9gCpv{<0vz$`M=^)Q=9~YT(&|`9CM= zN#>Qhqw7vA2e|3Dou!UcMQMm^<&a#D{w1*NEs)w>+<>=ZO+!CJw>R?< zA?0L?k(2OnEXKdJFa>6ZWsVlHyh`$|Ag~$fS)P8%+cOSzaweW%dZAST%v0^5-tK5* zhRg9(HoJeLI|IkKDyJBee-+Ifv;u;J5`TCnEF}H2c#(QxFmP;lb4IzJ;>$}-{q}UG z&-_CnEVp5s_}9;zg9IJgIKO>rz1CO&O@&5HF_;{lr&0-#?88FC1$$!tf39Nn)KL%P z<1zM|z#lf*5Is#MjRl-hQ1KrO3xl{*&KshkdUPZ?xjkS`g=4FMH1XGcn&f;~=LlOH z+tlYelSV~o6rE9T0QV9_ItmX;F3KLpFn$ zdSJ8)GFM~^E>NzB>=ae+<_3^TX2R1xG+nsti*TFS2LKVzZ+e<4dk~0sL z@qF5eHV%%JG zHLtsbv6q?LCzU~n%)xA%D)K?Q)7H`dh-*7cl;|Z^knnwt+s{r{&Hcwnvmsp{eO&U4 zS+vpP+YQW{8shl4zM+Yr+O1>|#9S;OJk@H+^qFsJ0!NQe`pGBErX;+CTG(-OHSPJ^ zRMjn)K)sqglAZ*x*_=)a8de3@eG));Ikvk1_P4V2+sTQ*j_GnmbkPb$XJJisV3|Nj zCuTnMQ4YH}o#AQ|AlOaw+4L(eVtiG8x`V&idDG79x^Za{@Xl5wk{e$YQ z8wt(z@6WU6_0Q@zS-II(`_wIU)N*b3(bpJJUKsvR8Eon4ur{vqV)>;>Mr_8}*R#xB zLG&~a>%JYaH-UFWM?@)XcJJ(Dj_rOjm!hu7EzNP0b;+ZsNV{kEAm1=dvErDn^~UW- z#G8R>hMu!Uzf2A<8XCmfwxG0+t*HQ2J*4N zjONBWj}FfF<>N$xK6fYAP_BGxwQX4uqZj80XQJ2fe{Hb)4fvFONMs8glmNNYrU(tNi>?{w)hY^zbm{ zelTZ(N#ILZ#EHqZeeqLbs@=xig57HGv#}2}8CSk4HmCG}gl)WFlg@<*qPD{*)$!wC z%FJ80zWYpV)7qO&oA-3OJWYz_4GcJaFOL71I|*G9ul#whMEh*#;+ea`4rp}^FN4VH z5dPt&f%Gk_I`7mGMdEyF&SzYHWz#PkgFlXHaVpHA$-~lVJzu|QZ7KWTNQI}}hWqfj zjo*VGT;-~HL}FexYvXCB^~puO?@_qS3~OVqkr_dEEiVI4reFV{7ytM2JwW#=*#sC@w|dyuF99S&tD83#kR?@?f?@~ zIjtg6MG5(h=Gxobfw9ex(c-wst>0kyf(X(bvqc3L_*?UvKIW4Vn$@SQh1iAik zt6i*eZ9lR9aQ^r|=bu=ULZ|8LZ~kx(pY%x#+u<9&s$XMhKunX3`{Fs=x zuVdayE?13RRM~DM?VtEdF?{p$&dz(P0FLUL$pYm<6B=Rv=<;if) zEj!EsAcJ(3+P+M*>#zGV%iYO+ejo1vIoxOTwztQQw%Ub-~z|AI6j#k&59ux*d1 zy#R*p@iox_50DpO^{3gqXT-&Q8=&(8WXHJ!8J{G`BK^lfXkzr4qJGS8n%+bHC{n0L z^j`na`?KZULNW^Yf9^fJEsaY184j1rY&zb-3hD$z63PSp2Il*VN!nxVa1q1 zUUGGjK8Ou5^g!Z>edE}H9TZskm0qZ8^tbO?n#1emKLqi7Uqy)BQT*4_lfc0CJs>F% zi9HETnN_JxgU)+86>S2!mDszzL{M(Hr`~H4+G=CPTGBGML5QmCfP^o-?VmO91f*^o zYv8zzo9$ABp3vjxVlEu!e67Z&1_rl3l=rqfcZDPVWOr5nGdNZegj5uug8knF*9dWB zRcjg7kMTMk`5$fgq$}$5{z4!7^QS=quLV}E(}tIN-r)EK$32=uP-XSF3x2UI^41{F zXIfYI@^(#^HoV8z%WW;$?EHbe{FUEl33m9mVYK5-KSSw1|B@=Sw`vOYrXvcK@EsNFhfC!^gxo53~9V)I)7OJ)9lU@H;?71R^ zIwG3wG&!`ByU8G9@Vm&VTMnuqZswNTv{3UucyZRw@YMWiFbAyc)tR5cUNgjC#ia+h8ORWer8Tr$3r|EZtr{e9)H3hAo*>m}+g)Dr>8d2X zq+4j=OlF>0X#t1s0)y}CD+jfS6;ZcA)Hj7Ehg~s0?Wol&3qvmOoDp%=!1M1TiQ7*M zM5{%Sucdx5&R@AJOXu!C{xb+&ryE)=H5*$zce?8Id5qFX+RSoRxr$*Cv-n$Hj3MT|y!{Ba$7{_WYXWMc! zRCV^OFzJAfEiRP_61C?BkdJvD|)8t3k}8@L41d$gU#T3VVWA zRj};+Cu_c53Hh3F^AWgA=`VFE-ZZ`77o$33d^XOx_j^g2$6vsXhx_{+XiKc! zTNMhMczR6SJ~FFa80wue&^V2cHj3jfGaIxVCeAV@RFI3uelqiCAn!wtYCfA%W0r;* zyAT_Du}tmKjp$_P6h!Eyn)!6WafzHGvvP5;tD$FGRceAU@h)ie{I$K^Fn8K6p-HF$ z1s{6hqcaRGxz}hvwXG{LMucF4kXv@z#{| zP*(fxlr~&1xp&Vrvg6zx@9j6qQ1tVK-=_vv3uhqG0;1n6?+{Zj<;Tqym7nwS{M_og zbd&xjXJ{;E-N=ZD5H??07{pnUU#mTuEr|nG#Qx`aPh+vapxf>YzYd!Bvz{mBMo)gs z(s4lt>7Woc&ESS;uOmH;vFeTH!}9N;wTEDq$E90nSC3RN#>NzEGP ze&e^WF`L=X9%@iEv=3=znE~vfkZW6wG%&$_JbN+B|jCtv6@r$=-$;*3Szu zEuRyZ8p+zkrVrm$F3Bkz=6F0BXbrxB#vKuTZ4_rVHn1SDQ$@idKi$Xn0IiW95|Vrqr;|al5q~Y8yzZqP;d; zB@N5Faz2D!p-4PRivJ9onOaW$~jh7l~E zTr$!dTWnvR&{0dA{~?{)edYLWff9_8 z5s<%ax~6E>@aGQKa!dM-0qh=o){=K#a{+8B0Gr~?FY=`fCZ0Yrb)7K_hanGYrZrEhZnBvlpF;e1ihP;e_o+T+>qMEz z)Wiors0f{*d+&r^sOq)pyVKGceXqzTRVN2O9U?Y5lp4TK4WphoJF$t|dj@b^Tg)14 zbpNJ;bc}7*PGvr3gz|{h-9@`fFHL7B(RMqM`>K27=?q{~_djn}8J@@^?Q=IM1EB?L z)Q%MEKk1^NPcGU#Sum$p&hS5fadL6VVtgp3)R^%n=Q;!5K8e={(ScoY{KNyXgTONe zf)Df%4%cgXbzU7`sCW@r<7FqklvlrvpH$Ip6Vzr41bL$fWA8%8^iX-i8WGJdl!!QP zRa9QQOqmhCJKRaRTwv~^jm%{mMxr{E?{P#4N)#zioLG9cAVZ71)G^KXiK5Hyn-!4o zbmmpZQ_Clj8}HsEb54Qy*sA8$kuW0<(ebNu@=t~$^D#y*Z_71puk|0ld=uRbbEPzV zh$N4Q6iy^YehRPI`{44u<$;YGO+cdPs*%XcTxmm)_TUN)fh{7?>h_rUL)jyvxW$B7 zexE@-e4#;{JcSj<8{EF=gO=h@2df<>mx&Zg-8wQW{OtrXqjg>|eO4Q=6vpZLBk;g#z zd3lPl&#ssNPLXrFRyo*30PcdHN(e~!N#3S2jx7onzd(W?vih_nkvb8`E9Ly9}(Tz4i z*C~hQUUOkj?b_P8R%}wd3w)4T!clHvBCYb~)rDcX8TA&iEh9|)v8yxUUq>n~md8wh zcu4Blo)}RFcOB$eC$Q1-lWY3CM;xwd@o2kAu9|lX&K_j!`O(K%Hc&Q!;(`YuvKE3_ zN8O{}=2O#BLe1fCvIBipsUs|hdnf(wB+K)Q#Jv=QYtFvG95 z4gG~hqy{lp{%XDgQrOqCyS9vrwvZC>tPB&%z^6&f@`(hAp*C9jsqNL^-eQ1ygQ+x$L zvegRNQJ!2&I(N-YM>6Nu?JP$9`xcI? zep=YHO%o|}&1(-l&)_vXci+rT&wyyi*kkv1!lbG%_@K4;Xx~b{r;KU?ud51XP5`er z+_<`9{!?cw^5XJX1vZnb(#Zva=-Jwl=2fiOL#QrBZu5{if$NIST*(O(@;T?0G{f&~ z6*m2EX7B8$`7F7m{Fpwd9Lwp0rI)^Lw$6f_)*l}v_T@tbzwTj)3q-H6U4b8QB6aRc zNQFja5xbzx^7Zb@>dL6D`TK<}s1Dlud)DV_AAJfJo*Gym0Vz|ppaWx1(~Hx1;EYQo zF5V>ETsGy7*8@X54X}SF{NJB_wwd_Dw3bt~)Yr(`e@w83pa8N0!!c!oeof!6BkgMd z3sT!~zFhy1I74~xvjt;Kl(Ti*^fU(cKUA)zlVZKtdRGDj78;G)vi--oGQ$~zjSR_e zZgxS4sfgX*s*$QpZ*P!j*&9EcdC-?V;s|1O)h_|6rN#a?-D+p}W!@YFF1U9Lb-@(m zoEB)O9|1p-(iZWJ!1*6U%>xO{LFZ9aTw}>^o~E7a#Jhw2xRW&RHb*s%mU9$e^Uq7- z%^ftQByet;y^L|kT?YlARMG_SIenE{CdARhsYnSpW^NNXjHf|O+9VErd}(n?x@AF? zTDW^MTWt6^${;tGQz#xBeyt4=^}Gs?nG1uO^e$Ev0zn>C(cQm|_4@%?s|wY}|6*j~ zd}3Z>=H}7rDAYrf0UL=c{ne+xztSH}w?B^z7yBjrFq+udsegYYNyF~~W?*HI5pVz* zE*GkOqfjPl-JroM65{L{p2%+qPV7EoAHSLqI2X+AlgzssA&q$aAa*7 zn;4LW0DYZBNz~7lz-1e38#s!^Zi3wUERl3D_s$RqR`(2XRQ~MFI9JQj z72fe&>>m49tt}%sa0x;?h(zJ)y$v6@$sEA9j}Dx!VU!XkMIm;`+UKAQruy}u>U3_! zBl)&se|PGUKN%8?L60|3^yWcU$;N1BtYYy~_~smzvBw0YB!gZnLpOch`Rd^w)8CmH zhKWBJX;3*!4m<^Z>Y%5>xQ{@>eS z)5UEd+3d{ZA{B6by-xaszp(?|y#@|7a{1T(r~M9`iPIgA+uH z9ua%U4-;z*u*bC*e@0;a=EQ2Ma?wCDLjx3_K*$tFE9fl{6Uuu_GK;|xRZ2y1Rs6p6 zH<}ZC5$Nwtf@x{@Tlh0;?3dLr2=fy_DVDL``ggrGj*~Tde5+VDL=bA(9}_Rs1B*~V zeXt4U9G8^1bwCNK_aZgsfE!u?A_k1=p{4wG2D7)l@C!vNXN1SrE#KNPk>QBj$v-Bo zQ#L1`tQ$X?dJAlhRLo_Cl7g%vWc)kvCo3ZeaqHbiE=zD@pPf9^2XQxx{FTSK2Cvj^ znczp}3T*NHnkZD$>4SAQZR>z8Y7Xd~oCrGHC!GJ>5Z<)SEYi;&Nt5?8zFTvOe44TM zH2!0S!kt#5rpV%l)g75QL({-#Xv&)ocDg(r;r2~Y51<~_ph?P$6$}?nyQ-+4tMdN3 zvw}WX)R2)#*hEV9X+0X0n@nkiMbx)yI%9=ug34^)ntY-xkjPkY%FhV6g<|={vTmpi zjqxh%aK?M(xT6&rze$(rMdCx&kCBu-M>|`_v-u7419=)ejYQXs7LqNf>;-jTVC%XSUAX`TVTK zk~p+A+8AC}^o7#FzxA>4Y8q6baeFuD>>c!y3@ys?K0fGRjpf%+8>FMumR9KWl?0wm z3#;N$;tR<8s2b9?J~~)p`MK!oPZbS+`Q?9Rj#)_}b77i1A)xCZ(4gxXV5=oKoU*z! z2y@^c&I#*$^RspIrFAAw29{JIVxk=Z8rkM?hC=qrJ0g{A?zJT^I-mBOndbdLb<%^5 zi%HyK-_z&CezJv~Dz4tT)Akn8%XK#hn)tL5RyV z5Hl@rKXIhBLp9YM6aSoH&pRq{>GQQkU2(JUXvAgE_$#jZSRPXpH}uv;cp-;WT+I3IR~FT+0?iwOTWfZ*)-M;$ep9dAEz&nRgA}`(Q?-*ib4CX9k~HD6 zmh%+4Umn_%o|F5A^khKsi4Jql1KM`3>K^RV?!<-L-tIEsboXf_-)ENM1Ci*mfhcrc z80NsiApYe?GyD>oLKD)w*Om> zgH}Aos7PP)>b*Vvi~`Mb<%K`dwNANxXH{`Z%@X@5ovSiD=G(oY2V@Nuop58fsw;hr zSbGy;p13y%JCeP77q+di>y7vnquLG;oC|6y70xu9vaQl>wnT8>mO^^lEf&4egEgRHavf;w>{qL4|O6nfLY|7 zS;u__8=bsvSZ?p@j@~wod)!>UE#JqPbug7$2HF<)Z{xgo^<|K6ysiwc4859jxCo+n z#rw>fS15Gdp&FO3f2dFI6_cB86BlRo*bC;-kKHCTYN?|yJsy_-m^)9e?Z1v%x5x5H z71;lloxR|7IGJ;EmRcJOn_8gO-p@8^T0KP_R}EZGP#rRq&2JG^F4AKkyk2>-(4CN# zsW#i#kQm79e{M?bwGMY&YJPTt&H4ldn9WQbzBmJug|Lh&K`R;~>vxOT?&penP+kHL5Z><$GmG?1+cevuc=K^1I z3-|T=p&Xiu<$*OSvFqVyt)5O+oU{5U62MYWf8~;!<2g~yPD(2PGN3%s6Q$#3(Sd|3 z__kEd-vE+ zb@7m|hdB@XqBnJ@srpI{>`cd1gk=)5O6P^E7Ug+R(6`WO69F&I7~ml|txoLr-T^ zwa*GpH*EKS_#)s`&#ZhNVYBb&qWK*XoqxAv08f8L7#TJFxL4ADy=jJx4hQR4-|aV!#`|>+QG8eI_6%8}yFy@rc|HJE zB-|LI=(1G`u7^kL})|SKd2cacx4aHWTyGoIvq4rE5Id7cF%Tf3hd> z{g@u-yVkCHFS{FsNpEG8jXTcdhY4xwdatP7O3gQEE0qq?Dmz#x_R>+J1+6Z%%$F0% z`^mqGz3x5}UKC?u70HZ1%wB%ta$l<^*tat>oZ=hKm2ZsX?PHU|GG|-AtJd;m>X!a< zUUkg|+ZXg~13*?nsbgo8J|BymKIgVF#}m@uw3+apR(R~{@}fr}v`Vek!U!&)T$_*U zo@x0pCrf46Vp8iGwm*@t_G{f(w{s)i+{=%YCpCm6kdxXJ!i#@go(l>&40`K(a%pR) z7S!i?gxI3|&@C=kgaC|8y*3c{ioDPts@ zR1fXF(QO;;h?dP8E}u8`K$6SD;|04Zx*T~2 zFqlQt_C20T(eo+cAIbw0quK3JdZ|SNW4l+iucL!c)m*$#V5bAGq%*LF9LlvZ_?I~Q zViler#1+(dPyGa&hB1c&;BjzreN#0dAxcIq{2%}ZKuU+4)~`N zc0n6ElFocP2OXKntV)_41h9qht4dX;pRz?KfKd7RQPuZe*X*4>eH_%J&Igobj~pUz ziaZTr*VJM4%fx;sDwr5Yg#EW>aqhk(eJn+_qR7=3;pB%N%^8`QQEmY}0M%M|Q<kWO^AThGCV!;ms77lGmaIv+CGiy zz1J^nQp_hBs`|`kgsXDSiF)tJN>r;NH>4C?PPHX@7f+e1rAJ!R(Qd+@$FI)BdYX9t zPHaYao*3J`ME3*sqbj$&F}Kua+O*zcqtq|+D5Ty-IAr>~@BUGLG^XC^*2(P^T{B2zl2LCQ*G1p%XZv3B zh;Wy~_o&3}qou~d2qABKtMt6?Mn;tD-;&sr=T^FOezr+1|9P$DbX(5U&Pbuji04iLOt&05 z9|U@2uJ{p^vnxlI@m*#Aq3ihk?{vua1~AWpBA%azRM9l!u<6U@zF#gC*VfqFagIF; z*O2prD^QtRXoc*N>%@c+S7KXY#k?t;8J`GbpUo|ssn@jX4_qag8| zWctU!F=9!QlM7oaWoxI^uKUT4a*i+sYBVKEP0mYYofjQ^c~E5NX*tr)RlU~CWFqpO zDe}f2(yXPM7*;8C>WYSwdCsD2erT5J{?*fi8Wmbtmk!u8sA(zG!N&JbmFn#h>axAhd7 zt91T*8?2RQ?^0aaQ}xBG02Z(Ypt&s24(Ro`gUVZRZ+qqI!uGI%2VO%(u5C5ueKJJF ze_UbMrtK~Id1rStH^eNxb-*bN19xg0?WFO6d{z!gI=FQQlNuW)u+>Gs`C_*U6}}<7 z8gx|8LiA6#W63mMHwAHQY0z4@VY>t5bxdil%KFS$qq)q*H_jH`Tn(HJpJ`$mQ$>IL zb`s_~J!fe?ca46WaT`6khh2O~c*(aTjWX6x31a4h(k-YrPjB>#YUM3599bS(?svtH zU8wiX2L*DXj>>R@!&_ko2zpbJ>h{sl$F*6@<#>x&TR!G)r<4qzBce3tR@=$tPi=qIWxng9G|2P>Ot>A!f{lJ`*yKB5}#%9({|HQ5H;-F*Kl zl3&5f?@QP49M^b%>_~(vRV@gb|1k*HC{x}&?5{NYIk|LhjQ3pabyN7}G-sAvWV=(s zdj2=@pkH_XCE*5XI;*dTuMH}GdyX^o^m<%Oi)7C5%bu&v>nO=~GVON#2T;$> z|0gF&H9zVeH9si{VwTBxf8)*CR^+6v8w}f~hB6_RYqp8cj3U0P>zIV4teIdQTiJke zMoI+99^e^LX#dRqey>s+iI=+V^n=F=9@rtv{-FAyKeG^YvMsk)Oj=6+oD2E0&P~jJ zDTn`rR!_y42vOC<_GN=!iOh-?UpF~C0H3nxF+^#iw7p8bCEZFY+Y-k&p*4nW!uF3* zTs;d0)GE)r5)|IxEZ{A_g+jIA(c(@{J={Of`)NpO8h*6ZxrD88;ZARJymaDSH~HjX z{2?|95A{FVubAQ|3{(0psF3v+l#;aF?TgsZizrMdyrJY(KRZf#i4m}a?Rtk z;Sq=B8|gt#7(}|_2*3+roG*(SOAl=F`-frTGiu2E_fhoo+$>0TQhKmcr_| zR)~n#YRlIbFF^K7lVcnGH=O%<=%zn5a;)xOa1~sm3TuSYt~2(ofwXkR62IF0M71 z*gm|R(Dm%0&QvvV#9?=ija~}M=vJVvp*DG_8WQ*SY=sDY-rAXfME7n*h#0xEWYxyG zb;REpBQ)!%$M&sXB7kNs!6#xC<}r}gYd1~LjmT`yk11`~*7@7H$Q2s~MUv{r_h4T} zDlVj)u7Qm0wvoTzu}l8yqcWRX(=)c)NI#>~Nvl2)q`i^bX*o?7%O1%fXNf#L3eU?~ z`TcU3!{HbJ!kI+xg`U1V$s!=Sou(ldbhPzQzH!+20MWdCX-@lHWs&QMfo4CgFa=?m zt%E0ky5Aw}zCE}y%Yf=muc>r4Y(Js+bSaBocjJA5;u(_5zsdjUKTfx+*fvd+Np&D| z-sEuU_Qy%`!T%A$y(a+)!tsUQ3rK;>X^bkzLtI~GSW=JXt4!rAGi9c5=+3iHxwA48 zX^3mZGGn{5po1|&0NhWLw)6j|Zv)vfn({z=-ih$CoCNV0c3)~)i_X9P`5H3HQMK9VwrRGgT7j)E?5BFF?2_0On58g zVTiK~4q_ec%=*CP6WBIT`i-*zb##LtuF;>5=~%n* z`ZK%n7O+x7@XUa4K-?ruHY5;}tvfW2E!E)^7h{EaoA*{FcO>C?PgsIyu@Vib>e-6$ zvhEWEoA13K`N1PnFdUD%uI+I}P-$%-I4FLE9@#HhkiCI4C>1{ABF+ z0-%(w^=SR4h7U)8yG5%_ic(7o&eU)=Y+K-Mamb=tlk}615f7`T7(;N+^oy(ngW0d8 z(!d>rXuW6~@w0h(i-VrcDxU`b%>N$s76tDf7~l}XktU`YqmX&X9A_q58%)=>r;b`> zOF$$d9=9K7R2k)Ie3!_Un_N@k8E?7q*v9P_po;tJ8pk&vf8OPTRDY|hKNzlQ>2-5M zSZ13+T>5MUic1M};tcDlQW6;C`gy zTTioimteFWuTk`O$4Gu++;TgMo#>}YB_U+)Hl~hiCI!L$U0A29XZ8KmvmsfkXEdot z-P!?0P5jI6{!1Gkcr`LjNhSp|%-*1+o^sp&Fz7vcNZj%(nbUn+Y%)=%F|xwgi(s92 zT+JYqjutxqHd1%h{BGfuKMgrg0(fU}vyAT_C{xGo{)*ytP|-}qOc_z<$+a6RG%?D; zeNYt8GMc$Z*9YYV)>ZhiQ-VB3$O>U|_(a<${JjfdxFrv#AD6MN04(=hKe8o84Lnv@ zV#Glz*ur5^TSMcFZ~_sBC%QJH*X681 zfqh$bM(n*krT4Xtx6p+gQS3h(DB(tQDMo8xtf!eUc!?BCXnBOWIIT|Zd@$KH4~*7^Ze>SImihvn!8&0R2n6Pquq0B9BP7+el+Zuf7OA7pVJAlMm9d)s z&mKpJnOv_3Al|DqqwSW@C|fBZwNskyQ!xX20DibT0$u`G=?OZ>xS`G1<}<6XAr}65 zQOl=ilLk+brD(fV^z(;4P;?<<5Q<3ta}MpM@O6&&(uWK(d68 zSCyBeiM8s&P1_Ch^Hv3p#jrQ@Yl8ODAaQgM$sUQr{W7T*7y^jdt2WJ^_z8#}{2rDW z9(?O=Up;Ih+PPt1+hEk++WMn6a9RP zYc`MamfS;*#_u<7Pd+On&Z-j^K>BzaFb4hJemW7nI-p!U-Jol9x>c8}SujLQSwY#_ zfvge65rPOg7=nAFAEfP7{-=e^&DgVYIzKBrSeT+`9gGhWE(^RytCB8~sLW{CW~V+} zl`|pfUC0^ZK64e-_V(y9!i~+%#cgx0x;Fh@Nuh+l(cZ-7KXcQm6;W5%3r+}HTiA~< zP6lo7!b7fEe|^p=b}cx7!#_JwK|thRiOSdt1eNcIgWu!^)aTz}?@moB+j{??YoV;5 zlSNs4hCEt52NUJ@Y37W61I)pNR41)+LEC|MnqdveznkGw$KfGt4}n)S97=D06C*4A zQKj}ee%@4~{y9K@zTr$t>~bqEg2l)4{HFlW9#=V2?E_?`tp^ZU@kc&U&@zjNvts!k z2ckLbzD`>T5OP4PnP@X_#iB1B&_@tjbW1P^p!gb5Yrbdj)$bp4=-Du}F(|pH?I3Mc z)bqErZ}ah=_$z6wneyQN$(7$O==H(9#WXk@lo+#yQ zXR`v(>mIbSawtYxkdI3sZC0ilJrAsuRer-B6^B5OlUJgbEO!24kZ=%HnTmpmrFS>ll0LIL@JPN$7if=LDI z%QMhy%#|mRn+jCl?hXPcr1E@kKa_qa*OJ9_17O-K4)Ai~3W%R9+@7(-K2Ebw0C3Wt zBCvVFo5L)DgPZ%9bPtP~gP@(Wm;V}`7f_%TaJYm{2NU#%wII81$v6 zPAn3e7B7r^96Ui^W_|HJ4c1f#w*&$J5LURc`#!*@ywm}>#;WwLd^B@zi!~~OHA-kO zKW3B#iS!%WZTi2jijL4Ffctp(X=dS{cuYdm0mBmjQFFNAFDr8lF@PgWA7^Qy?EN^) za-fJL)-xb|pwWzf2ra@5BH21Xe~SLh6c(UTA>g#@{XlOwX3k zSVsE*1veyevV^DrpcV9amaGE-Mon7n8eoq0TEhc?NMMNmR|f>jVz|IG2axt#Vp4B9 zEimd0fdu#d1y5-FY~ zCr65}h}-0h_x~TS{jD?=;Kl?TSa1k{{oH50 zq1r0}Yu>np=3HQ>90KP{AB<%Z@hsBq&cY*(qdq7D!-+PI;}>92`4TiSmc%1Cwk`ru z2(UzZR=Jjs&6Nf68(@k1IqTa?O-MGF$=|`&$(ks_5^d~lv=r=H0vNZZ`qtUtGK-fI z1vSKLq;jDDlV|7o@>mZCZz}^TRh|gqHdt6gClK9(ebUnz4Klxqd?eXNdfBY?KC#?G?FT92lK296XwmE|5PM*yL# zIRFPcz!E%2N>cy-SC!!?oZ(+WOd%C$jwB_pupf8gOHYsvqTQ^CRXF