From b949e6be0f87d51b440686c35f43999bd410b78c Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Wed, 20 Aug 2025 16:31:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/WulaFallenEmpire.dll | Bin 232448 -> 224768 bytes Source/WulaFallenEmpire/BulletWithTrail.cs | 98 +++ .../WulaFallenEmpire/HomingProjectileDef.cs | 35 - Source/WulaFallenEmpire/ModExtension_Cone.cs | 105 --- .../Projectile_ExplosiveTrackingBullet.cs | 5 +- .../Projectile_ExplosiveWithTrail.cs | 98 +++ Source/WulaFallenEmpire/Projectile_Homing.cs | 327 -------- .../Projectile_Homing_Explosive.cs | 142 ---- .../WulaFallenEmpire/Projectile_PoiBullet.cs | 726 ------------------ .../WulaFallenEmpire/WulaFallenEmpire.csproj | 20 +- 10 files changed, 209 insertions(+), 1347 deletions(-) create mode 100644 Source/WulaFallenEmpire/BulletWithTrail.cs delete mode 100644 Source/WulaFallenEmpire/HomingProjectileDef.cs delete mode 100644 Source/WulaFallenEmpire/ModExtension_Cone.cs create mode 100644 Source/WulaFallenEmpire/Projectile_ExplosiveWithTrail.cs delete mode 100644 Source/WulaFallenEmpire/Projectile_Homing.cs delete mode 100644 Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs delete mode 100644 Source/WulaFallenEmpire/Projectile_PoiBullet.cs diff --git a/1.6/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/1.6/Assemblies/WulaFallenEmpire.dll index 48a8b88f7e4ed614f41f6eb2a87e32582a01d004..77389a20982f9389b1bf5c0f156a6e2357b340c5 100644 GIT binary patch delta 88877 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

Of-5l@02{UCsW-m54!$0>>N5a+#PP z=^E;Nc|kLMdG2&e$J~f!#8o=(D#*T`VI4yAfNRdDd~*nzfR*6AgMGwG42OF_*kI#B zC4Aytv56wPY_O=&LMx;NSc#@hXBSZV-&W#&w|rYk$|DP540-6?;&Uv7=Rd84PqO?G zaPBy>8c}$op&o3AqYBtS&VLUnic5Nub2o5QpIjwj)LyR=|?Vg45Q!qleM-EaN z3Hq7UCzrzNlS|m47+i$<|@q) z3;|l-@1UxB@zW0TjRCIXB)Ay)PZ6yGp_?@%Su|oy!>5RT{Nr7t2HBSkVy}ydas*96 zP~SjXm4UX3i6F6^ff7Rl<#Rg&9Rc7^8|XUUK>7S}109b1Fi<`WM?y=8f5bqy!5Sp| z2?Ncs5XN}}CHzMXl-2k@4ODV&YoP14H&CJ5)<8v^#jrY@ksgXR=N8&e7^vj`|JOhZ zo2bA**U+|&UTSq417(K)WuP>MA2-mfA^lGSP5TC_>`M&vRLUgNC2U>(u!-A_q706| zGu#e8iqpkJHaf%YVzkEX=A(Iti?vnINUlbob9)%g-71B<>+k12ikS%SIb^S@q3?01 zehkoK;20NNRSWV%g}x-cQ@|~G^q{_swNo&;aS&)Hf*u73BIDg3>oj(6qjx63pBI9g z1wM=L=7og=#B_q@EX?fRpf^l7nq6lyAnwix8qWDn?)4{EA;+dR9I!kIq1A2oEl}R3 zw%X*u3o~~#=ymBMNn$;KwJg3&PT<5=}LPCbs7hr?>AMPt2|ycB!} zbLbWqMv~`raT<_K*?4=QnIjJxi$*-1M4I*TJG|Jw`df@ zr_d}u!?D{lJWVl_)q}MSOA{QYDUN&?5mPuOHW)^%EgEtOjD%EaR{BJ6l3lW8TC#D` zwmKZFchRUX6uy%gv_@n4kTnP{Zx5_k4QKKX#48hn&Up>j1Q{~)NLK8pR#&()OtMo`U|uGvJrY$9tc z3rn{(hm(zqDM~XIw}Pd<6}GLpEIEtFA2CppI@ki_dlX4+XtrAOg;%y##QUsjlLraP zua#o~ zWO4PXq_zg5S308TM=Bo6c1o%9L}Wo1Sf=H=dBrZ&U$)M~=ZfnQRJJ8K=*i3Stg!OPXmk%d?Mq|N#&;$-P^PBGF-sWees#ltm+oX&Ots4Hk5 zoX~N_Hu)PAgiqs8Ao-NqprO8i>k*>3NO1WPE3I)LUaN{xrO+}tWKN#Na)dH7wH3QA z|N6hU$6d|?%1r!XPl3|3o)P&mUxdYXF(Sd03ErsgpAiYJiketU#4xyG4@yjj=D*JW zFfW!UIbb@tE^6YQGQD*nq<)Twn1k!!P+@U+_xSQ5KEVc`LjciYtto3BvzGj1M_ezc zI$Rygn#Z{UX}~u@($dx28k4sQXehqRm+$?2~k zF$B8#@it4$G#u%>4t5OHR&s@A;LbjRLc4msbsquY7WGEq21`g-dHma6*BzD@*InnT6w; zd|@xSHwqEq;{I@+Qxdi|v+boUdmYO0xprg@ZPS}}q}!H!_a`}Q%b+UHAdz_t4AR12 zuRVTBgl!r8I^VZAIAw)FbN~azk5%u*|C4uGIhU$>`{tR`h}G7$yb${%YMZm?|67^O zJXOBs1zq1_7|3Kz}xHTRFcm743 zVhtByHEhyEQn)oHml1Zto-@xhp3E*Q+*#a(wuXpCxWtN$on|_-GX0ib({Mfao_XXi zhyB*iu+;H&*PXe;((87RTx>E-LFc0pvr6}SRQ4>otY=N$tVd-AEWL54i;7^?AWkrj zWXpJ@oXeh>G)f<>&&nJ+3LStF$`NAU4yYc4L)w~%XhY1Jgh#tC6HYMY-ey^(3?*vt0C&*l&3cLbp=qmS1XM%_1 z{KCQXtkhhMD*QHI{E>?aRO&7r`Y_$i*d2PzR0f_ot3z*1vq+Z?Z9z?<(MXiv3$2XD zt!YZg%E%DKU$hacuEs}0Yi47?7^zN82T9!e5Y5_NAR}Me=$!k12^gtN*64d>x)S>M z-QE!^>YD*pCoKY7wGvZDoTe5FYl+Di9J%Hb0m^WY!f)*<)KDB2C>(FI6gN~`Gc$K2 z^tv=0Wz%1@DXUjz?{X1};h6^oaahh47M`7BWXQh=Bd0QE(u~Z}sNTy}N-JP9SNTel zWlLe6poV7BS}#zH>6xo@wqmWiyysM)lEe1m>@g*Cc&FYPo`VE?e(#Q%i#zr9@NwDn zbd}ziO;1(nJG1F&lCFF`oAw>O%oUw_OJ&jCK39Jh6X@v4S!izR-_%x@tiu;R)s!4I zlLvwXU;T&F*4WG+yY!Z^iSh+EV{Ahv8Y1qKqw;Z;Nme0_a+MK1L?VUNLTW?EmrE-L4*ia2!ukl6uaxJ+TSuE_+p?jF+J!i3VJ3GNN z>{$p5dp1I6X9TOl>JvVP<(6`WOq(1{hb;3)(_BWp9a7{wQgz9pZGx{?+F>yxO=d!zNqA<@cd%Q7uv^l8S`%QCCS= zzOVTn#7O-jV~*8#Ui>%67_;UhmpdDSlIbvngtEJUYcWHYYwMFABPe()vFCGWvf#3S z%H#~mTs&59HOas!&pa{~dmal|iG>Jo3V1{2{jqwZLJ!FV#_2oii!w9D>FuLQg?-1x zcyP~#dj`0Up}kLSi7Y%ifzN#}fI<88%!T9hF?u}n^f-NW^Df8~m0qNkSQ?rdf@AM~ zC0?qFnAWbD+2i#&`UjbxkJq~vF9EImyi-}v$zYZHzF+o5bkWw~IBXPvy&K7QC;y_v zWHk96jPfcXyyi19#ss}n-!n6Mg1-OQ?iJel>S}8#2>R#4dNC%T78Tly=%Ih2vT=u3 z=B_!=4R#LZWFDWOH(|_rZ-U<1us5!^H+{=NazK(iS^shVG!pO(yJ3nJGKy z^>sPo@)G%a8<+tbx0h#*+yN8KtKfhGtPk)o9hDF799b(UdJzt(av=G(dZcKD{K$(t zSBhiE`HWLS87_wGj<4|az#=IzMOX7sFpX6P~D->%UaDjJhW3 z@%Sp_K|`F2ma)FY(9Tl|6CTT|i7=J(F|PJ6$ec1!pBCB&god+A=Dmq}t-h-~cE+(i zzFF2WJ>WE>I!={@hhY z=EcQ&L*}SSx*57bVKUAnJ&`5@DBN)NA}0sO`8aq%jcuHUhTXjhZ2n$~NlXS60XFU? zhTUa|F(04q?xc$gSv|h9KV02mdMD^?+erMF$8dFxwG0mh3d~PG~W_6ATT_ znvt9elTvJJvuvxegDm34!dr2sbVX)OkKQO1Q2aY_urBi9lMUFT#)p|HR!4nmKd9%# zY?2cZCS2`9Uq9Gk7#I&{k?IpgjxWU(XqJOb=4dQ+IfUf_H>H%HtwS7FBZ4kfWp+$x zGOSG?=_qIv9KvTCWhJ5=rfdTqi$aT}(B+xYlX2aIWEhZF;bGy0DYLWA!l{1PUM-f8 z1Iu6re-f@`3R5~>u#hb7F3^~ZTP0LHS;ae`AK@8e-H9ovyCfk2t3L_PKWi&#AEa0H zr=0H5|h2 zL!bor2*gw-!(rUM1a{JQC{R`(29`puiojVJz(=aGa55_3Y>QIoQJFto3 z>1<<3cOa&qJ4iCy7yg=SbJZ1S75T0p<|0GELw;9a8@UXmD?FjP!qe;uN3s;ZD`aL( z)5jVIuFPzhrg!hUo;*1V#CeZ5Cii$dn_#L~L9X*9ReY>zBs6n zC-dbr?A(#3a|G&b#!^S(5wnj%*q#*tt^|LD;&d?ih?!IUC?2zh{D`9Zna9M!)XR{& z48QTX0nD<$@pug4{8>Xj?MmdrZyvq^I{5{~`s!+Uo6vg3ov#;X&Y7;SNY{c8ALvJz z|0zbPPa$w{P34+!*i@H<@v8yM`y+KJ7*>yEA!@EW9#PiLpXx%=fXAx2?l=BichwBc zb$?Ts%q=tYX=yT$xef1&(SU8q zQwH@EcfA1b8w@;}z&`B61>Gd0isOKZdjqPS+!VlWFQvjKn(;`h3e;vRFq{>rkrag# zN)bzBjB{Z)SgfxHOQ6IWyQ;8PyGpEswi7FbcK{3J!rlSp;zNm5mlf+ADk3iyDf*5< zRrsBToCYBs7X=uAI+y0uWFy3}j&WJ)qK; zxvju$v;uTLrn+L(JmD-+^SvOlBQ@#blzmq7_ zw&MEo*32(w>z$#$`}jZ3hTlmhXlKJY6%oGO@At*i$Q*r=N!Ak2cpy<&NaPm#l{kh~(p(2#_;WW-Sf_l*kVz~Gy zu~6oiaU#c05`p9Ps6Lj?zF&wMFyDskGEmC^fKx7^$Z=E}PmAFwOXw$`Gg)pgL+e6F z#bppX7e8VnA}Q2KAeAqL+b1I??MJL?jat7ow(gqMCiR`qJy6q*)jeTn7$d1k(ILmm zDd*rDEwB^6i3nHy?~j>LbM=v8EUG!#|D;(}|4X9RvdtAQB86wJbJ9u*I;SMjD%t+| zsj^5Ass2fG&i7AY%!z-O)E^)j7Xe}h45Wj80BB*yI132BW1NGi`2D5Yg|LIqq#)wM zX6CVFcm;35JWSvOK*8rSpL0IKA9V!K7H}_D()3AVVSqFp%wBMrD%+FZ;PLlD@-iGg zs&g}SbsS$-p^cqQY}{qJST2mJkr@2eg3@h>n{YRh&|%17cVp&Dh-++Kl_{RDH_s3* zwOKCPFj3-R;DvZ*d-8W2lP@4Q!;yz`e&&$*dP~|dq2G8^p349YdEQDUsCa3~kJ*yBB@72N18VpJ1)zB@0+sV3 zDui2`zel-Q5bih2!i~Q^g){H_i6SnudV&53-tTN$sE;u}2j~8aGfNlhontNqBYa2w z5BK|yc$3nd}fs*-#`$(Q*qgSE0)c=W-A`KLaLUpN_DTODMvu;TT|00eYL={9$3U|4M-K z%D{T=3}gWEJ0h>nY*?g^oc5(s&9&tEE3&}?mU_UVXlW)1x%eg=5P~#Bg-$ zY|6a7NS~hG#JuPj!OoF@WfRWNQCJtgOO%7yX9A)mlufx9S!BuaSx);b;PDRUIIve3 z`)oow)F-7A+LVLUC#4IfuGoce~XW(cgyd?@6_TU`WJ_ka&H-ebc9rN}) zCM3OtS?3b_OJY;$0Vv+RiE&4TWa3f>C{960=~C$^f{+382V_#yz|DEEYL{C9NS%iQ z;4~8Hp3ivP-N-U;QPh06*E5bqAf>~;&eE);9K)sDYFC(7t6bGeU{!$&z--DGE)J~# zcK=}Rtk*!zU7FUQ26sI(YgfG^P3Ar_Mx^>e7q>82d_nJ*WPb4e%5SM`_h&oiyT5Ri zRhy>v9!2vmH77kj1ZaVC)ty2=H2ZI3iMehA)Avw|Jb;C()!5f4Jm6diY*(kEGMqb+ zxveYKZWse5F7lhHi-2wmyM&w8Suh56vWbRs2LJ*4VzQ2oIV33iF?ojZ@i~rn6>y9c za3uVvI2Ks>W{~;w(LI^hmf-!z&6&S0(RWD`0n@n`k6P<&2-dC=DjYCt`JJXqARhGR{~Zw9k7YHJlQ#if2QI_-;P;o_o+wd`Xv z@S{#wfmv;>bzZLMhQXPP)HN*bK1$`Nkdh3TIP&p3+O;51xVXECag|UqH0Iff{$*E! zbu6%ON#-s5A7bIGnVR74K`d|KgsTY-pCl9Sgz~ry#KLO<&71C3hI2nKokQ^y-*YwQ z4Sq|QP(hkCt@D)utHef?$mg@_(RkJpwmJ1+@S3jAc))C6kCR?-f#i$V`!@Bc5UG&7 z2Fym1o&!DE*Q4EO_K#A@?t`R^yOdmPT~&dGgrQeu9h%MR(tI!q({kL$m{IOK`%G#F zGZE_{_X6vYWY)F)Cl-zHj#!{F9;!BPJR*n;k4-3_uC1t%ff&ySKnvUGaUlFQdJ<7_ zZA02bBils8hfSQ>VUoi?EbTJSEydtYxR#u~FD>dR#0xCy$sEvX;^KEPcQn$;^Y=pIG+^8Ufm$T9Eb^HR4C)@SpWdw(~P2a8#&RS=+H9)_sD6wcBv2 z&06HM!bXLP%_w1$E;LD^6`#6o_$1#%TUa+ypyz~>3Kgf0tUzL*hC^I#d}BiKtRKu% z3{>i0V41F!!nFp8YlhVwJ3GpRzkZ`~p&uUBW$0{9mrr=_~ zDr$9t!k;*@nImonVU<+!c-CFlCJep>4s~UF`h?({!vTgY0+^Vvi*5 zHN=>aPxl1`uqBdV#{)j8?06{2tA*5XBr8|cUD)x!$46wxgFrB0xr#}x&t&UC@LI`W zxj(sKj~De4d3@`)TGl++s(JGeu3{eDzIjk&mw}iEK6#?dgKFkk>FdDw_VEUyGKK~D6(Iju z?)6N3rQVq)8EoPAcsK(X%Ce4(0R8~y#&=|XLw0fDDt%k>4fbO=X1GFEJD84sOpc%O zV}z{EeVs!_o}Y9hq6%~*N$QA;;D3pZShngytXW=1Qf1K*zIP(SJWF*MV95U+GOuX4WxA|Ot}jJzini0Tdy}|9$clDH2oXpYJm;dB-g|I z2`G3ESn34v!H`v^eQD-{Rr-kOzd}ZXJtkk3J@`B_{!9OeO;A6oqFf%+*`@AX1GI2eizXlh<}f; zf2lH1#a+q&{mgs&=%dr0V&rQcVXuIE{eJ@4Ygm!$@`;1wkp1$g4~bfsLp2D>x)a6p z{~0JS-Gfa3!g%5OVI5v6}6KgWh?XR~K|3?f2z%TaK zyVA^!)AhX|f9fts@BWwUF#0Hj^B*LgpFte;yJ{SKz5&SI3|jkcX80b-#J+~Zr+p6~ zRR(r2acLLcez7|Ms8QnnfCu^zQ}%tJk-bE`CzH+>U^pc5ezFp)z*7gB(m5g&h9{K;Ksg0(t0AVa>}jQ4IQ<8Jb{iVifczJj+<&l&aWMkSEl;u{S({+futYvprA1epP_@oZ zCH$Z^$YG6MNEfso%u81iIjjUfEoLMGt0`WN(hfqS@@Xi;kvtEvwz=;^Dd}o`>9&q4 z5Y1YH*2UHWt$3j3Y4lGu@$7f;!TL-wb{`ibF2A$D`WB3+l2mR9)&kmp{VtOoQ`yh* zW2$sO8B_N~;dGr@5tjkt-!e{%F^!oHw$p+xn^y+dgFs&BQya7i)susW(qBPG9tHta zM>aA)9E>&lT5(s(i?m~4k7_H*$jmqdTc~6pCRapG4z@IcV$kZ>*Ks{E?Be#YbZ?UO zVAGBrnlSlkSGNQ)bW=X;hoSS%BMK50HXg&>_{=~K?K}b+=TQ>Q2AIYy*#zGA7~uBf z2)eMJm(TMAA?U(6i2WoW%3d*JtbjQz5OW|w{?=_lhU7`WtKV^_P4qp5{Ji(DI4nOk z?P7b0#>*;VlWIqrhp(Axsi9wEjwVxnkb{P`Vl~yG9c3_wW?nxW-_m>NP`z5zs`7Bi z5pCt%6_%AX9DJjN$+P!_X>l0NPRZYi`A`HkC9`q!=0mtzwjbh~58F+CWgF&$DQ#-d zWqXRr9J!6jgqc~HOc|ovnM_!jOj3Ecj~te}?G?_vcoU<<+{ku56vfGHYxx?6qLTq4`QRXQ%SVC2n;#-mZC0i~(b8)q zm1X`pa;LZDp8pN+R{4Q%>lw(A|B>%x+nPd&TK<8m<}aH_k#&BNTaWR}^Xqc(pqzeP z7JrPPU4CzBWkDgA43FbH+*mv&M?;R7qxy z^m{QbJE&~{81>>|Gv!fD@s0Pxv z(-@-M(qaEFwE#4z4#TQ5FRp|CMM?}oaXbosqFi_E*rQ_%c46MAhf~ z&53Yz+kldf0~gLT?Ew1CVIj)K@TZz$f39g)1IHO0IGReA=4P7q%%ewQrV$3IQ&5_V zRX4h~3P&OCvP85XAyPWssRR>W!i~gDYTUj+8xb|7}i*c#B{JA zKt2!cjzNqf@#&640IMPy=8>t{EO0M6i65w01Y_`X%gA<*VVwaXIp~q4>X$!LGfAV3 znMBkk#j$frvANF4(y}&!nS{x+SwP`T@`G3kxu{Oc#>*Rua2H49G)O^1q1xr^+lY7I z24K)-3yGzi4U)X2@QtPu&>A?7$12WnuvMU}2JM=X1oK<0+0T}SahLyU zw2{29Ad5cn>`6b`aO6v-^0isRnSiYP&?>$++iY$`;r%;g_FAtmtmq-n?2@u4^Q-lG zcbXq@RIo9Ie8zFxMP6N?d5HBA`l~|w33Y0D6$G7^sJt9@ci-_15mNcGM0G zznpYyx2Zi|eDgr5GSWEwARi>dr+Y5-} zwErFk^=fmL5#7Bb!_Y*AJ^N)EOs##{O}mG+_5%o6AVvQ19LBFam*MxT7=AXK;iJY3+)wch%N^zr@o$Ty=`xbuQvPYe)IL}>_WUYs@(^NY zo=o^@rHr4DWPFs%_(#*3>++@K**%$IX@=pyMJva&G5)6>hEp$QICp6#jmH;fb%NiKo*nVqwy*7Gg49&4oEM}V2{;DJk-eY%$XD=gVuf^~Zv5bDw zq_xz!M1LZn^Ca7*9SGS=!Uth`VeL#|^zX^k$1P_voO=+%-|oTi_+j@i#_xreFnp(* z;Xkoo-lVPA>5Zx;ZJ!I?s0wQfFD9iaJz^31LRfoG%1Y0@gatfx5Ea{U0mB;>FsztL zq8kN%)G$K+x<4t;7i)h*)O+`-Z2Kv**!E+VEolsEhpr*zgwYIt)5PYeK9}JHDeRmY za%h*T9w3%CA#IaIWLL6yu!=?Ao}lulNM}3gB4*g@aE7xNkkO=h4Byy^;SLiCA1!T} z7{k1;p2hH>@#L^Xnrx@VglrKrJau2vZx($gN(mo1C(XyW3&?KNa)xD6@X^*d>py%w)T&494WA3fpvjb}6SS>Xh*op8o#)c|w$XL?9EPTE^g79ah zXWbz2<$s?pU zMTmxuZE7QJ4)8aYoV}<*JLCVM>`maREWZEoGjkX2y<9fI1wmOv6a^G_c2rz&Nl{dA zDRE0&K~cel$1Av?qN2E9mP=|{mYG^wR9Z;-X_K_YvXU0lQp>IMo7w-IGY@j9@8|dX z{q=PZ^PY3&oHH|Lmgl+8GdFbNNR0nCxG}qzle*56Nc8<|qS@;xryuum&u8&33CAkiUPzRqX>Q)8*|t2hGwz_2yL6FmPf%Am3lJQlQPxpA6v zlje=4!lOA1f9^;9=RTEGw2Y+uojg)za4?3?pqww#iQeLA>NXqxncJ@^Pf9DeN;Bih zm}Lt|hH*EI4X2Uv#dxBxXxv;6rV{%m2in(D$nYgEnv8q2CG&4al8SrikPV_ei5|%# zI&~dU->pQ)v?Ka-4wXF{L8U6#j z*e@p%{T@}A;Ypro!^9Uwo*}kldzhgsE^Ig;pCI!+ zaRSC!VJy)Pm{xV-`M*UpWsNK$I*rx!W>;J>O3g5>HL19Q=FJd;%MX`*nL8^U4Vz&M&m|W|ll~4tG{J{WAXSPXFDJjD5(3o3Y6iOw%~f zCUdD*a1pY>8IGir185ca4?9uLQB{K#u)(|B5o@;4TynY_GwXOlP4?z}cW$xZ#MFO|K|1J93Vi1}=0 zej~~^@Fd-PBc+RQ>t+UfByHn9!F`bp=8V@UtA7vbg2Ozf-^?Hb$!z%jQc6GOpgFD| zZybC$&`P+4`g4<>;`yWZN>VqHbMm-s->y^v`$WoLKA)^aqJ{?Ww3VXj!-1VJe_T)} zn*UdF!-jF+lyTv?oNmVH6Yotxo-ds%Yo%t8qOIw(Kd&HvuJTL^TNHe0k!4VGpQ|G7SVdqgj!UCKn|I^ zW#s8OHg=ZhgIySm0hZCdXyN(najH#DEKv`hs{iJiNnV7W#xc?q&ZN@d^cYF>=?EI4 zFK|rs;eGI()l{YLW`F5nhSzzY{h2rAXi4d$G?iDjk9d)7(Vub-aV@vaBccAhGw|ae zdKw#_u5N4|MDb_6@xLe7=QU32^#~pCNsGv!D?a9Zjwlnn@rxUhjPF1^A8=(fR702v zzF=n<@_1TAF(P+HCPdZXkN>G)>rH79ryu|V8NCye7I70=;8zvI`%yu19^!<(jv4|2uqoHC?_qV2+;;+R<$IQ4;z^`b3j_eYILle zQHhSWF`Cm`@wPMCs-sAzy8cL`X52Pn_3EQFqTjC=|IT3_5c>P%Cb2_pydO^eUq==cdh6*0QV|EC6CJ}lO zPctD@=}YJ(_?FS+euQ4dqZx=7iP2qwHzU4hG@}Wj@`DnYx+%z4pi5uN3GpwKl8j8k~V_-*D*$|Ljz++h^V=qtF(=$WC!`xgFSG@>hM zslf+A$b5W2T133Oj(1lGEuD}S(M$dc4;fwZqp(E%8n%-s2!D#p+jyge0;4n5{uCku zqe(h4vgF?zQBvLp6QfIrCd#{DW;7y>cz40ZC=t;_`3JbNmYL|GIYA+%)_S(X;zz$vc_qd$=6 zkOn+qgDSWU+oD*SL?WYe$m@kw=qZGT%*AN%Cb)=XX1;)^RJw>1MqeV@D7{2KMn2)> zsJ9r%XdcdGnX-i#%6016op>!o8uQ-4*>WfHhB2CtXb++hjJ6=^g_0u?X`ZkTy*VmF z#VBU3W8YedNsRm-Bhj|vNk;GX#Q9OS7n2!vVP1^LW)#_=4Z^|AbkC7Kf zS1(8rOBh)g4HJcgH0X_@Cq$MgVy1>_PQg^MiqR|#lT$EVtY-9KLR!Q%F;kQ<8iA4j zwVWl^G4j9_;F_2%${4jl^tH?tn;2!Yqw~ZzMj2jd5x=2hPczbP;b^`t^Taa@XCl+r zuw1;xsI4O{BFL~xoM1Gx8%6gj@eZRR9EK4F972q|1F443inEM%p}~oAx2R@Rfhbcx zC%$7OaUB_Bs1V;X`cfO377-@Siys)qZotc*>5_fpcJ& zG1P^gvJ<0YofPWKlAT)N`uDV5~7LtI9no{@WvJI6f~AS7zHu%l|5N<8jg|u20xk1=qW_niw1w$i{TQ4H=&sv z$Y?QdDVoWlsKyhvU{{<%UOMykqU0$a56DnRx%HNa|C(W@-(B_tYwyb zpV1jB@p9#dj83tZxl;R>VHfsBlV33U4R6<+0*CyPk=2#ZD)|GWH@FrXn6P^YPKFH1K@uW$_yZ?uKWbcs&h!oKUjiIfEI7E;wt#%TxcmP0jFa*IfdyRSN?s%VSjlva7>0 zJDVYJUWw5Rr;u%ism#5-lDI=-Dc`>*<@e2_bb1z*m7FeNn$Y!m%-PXqFD^`P^v}GoJrk(ln>D7mQ(=kJJo*rV=|fh7=u*nu|G6{&O(>kX^Lo zO!6^9r?r!OqM+@<0_2Y8I@PQv7b}?#o=@rW>7?ff({oH8AHM=~+A7Y z*vKY_c~SvO4i!G1O;lqVGoSK%h7jGrIZK;RI(0C~jN-6DY?MYTNCkZ4Cv_dsm| z(wT-OQ+o685~G0onT7aZ``23L3amjG`YYghjp*+^iFU4XP-tOW2%v^b5JvW=udRQ(7nP7cEx^%F5Xy7s()c)3phSnw;QAST(Esp|Q*q90og2^LY34SV zxQ--ubvx)?+tg(~m$0d=i-=AyBbpm{2_15FLbb|^gX;2+ukpljq=hE^h@z9{bJKAR z3O9^KhBYV?X^j7Jq*Zf&Mj2=G)R;IHxE}wc0*1}KjcwU~?gOMEUk1VCe zd=ERw4DWWV!LFH=8;SW-S>7wJE2ayW4$Mu$w2Gc|&bd1~1#`}FB;9SKks{UL4mNWj zZwRuLkVc-T_voQTx7}1IAh|bC-?&H&__6wSmftQj=#sAOkG@oTr=eGWV{k7&i^i3NnIa5qBnSobxwc7 zk#V7ghQ+4y)G>u+yt>>qqoUOm?d=9rSz1n2-p?b~wV|=ZNQ$6_4equX3ryv?`q+4C*jA0UVbhflIf1VS z#^da5hIyq#uk}BQBjWc~)GEf7ME5i#I(9HorP^8Z#V*t~tGVwDIF|^}^=oWk;gUUF zjIe6SiRKuL4T(O8r$u58*OCk?CvbY^rNxt%)D~P1<@6eMi(EIu-|Sp?YjVYto%@2F zTgcAM=}E4ueSlXNje7ADUNrXv(Wc;9cWQ%w_N5sv^UmPlII73LcLr)7p!N;DeW@)M zFQj($jvyMx`vz|>s?xM2&tr=g4_JU?}Xp4~-OEbZni>Stn+7kVX!*&(V5JxZ?j8KN9jPNp3 z(qM#nNHrr=B%H&>f1=S|(FMw~zUY#+c;})3gBSGA{~8Tn!##`Fu09iPPV6`gu%8;eo_dYBe@>6s(};3DRFVCI)o;qDvHPnh}IK&#%HQ7ak|ebD0M>o%4()d6<0{N;U8rK$0WN zC_N&KXjB1(-VNNv;$cV`+4pL6=ljR6K%F{Bbbsk+qZU)d4*-nG~hMZ&yDjO#&aXcYxX*dhBN&i|6N!(m@hUS3@6o{ zV;?j&!5l0OY0^E7X&iMe)?{$~yjNG@B<9We}NRh(&t)73;|Z%S)-){^f{*AcaG zFuunQonJ!D_~QT)danb~V@x}4rF2y@q7Rsk;+#HAKXY*7d($ZRDv>&C$Z(pxW0}6j z8~kUOX7KX8UK@TG>mkv+fHUZdfWWO(pgmtCoI@2sP=onFZ~|2aK|a)yF*Bj_(;kbWbQk;XzYc1JQ_E!9y0liQKb`^9uo_Q0FcqoS!rhevDlCpvo|2G?Or zD$)ry5~?kbfjLxwWY%{klaHerlgoHEIRk0FB-+F<0}X$@kos8BPXh8WC&xi_1JXL3 z1x`8(H3Zcz%aMlK$S)szKG$qDDjjAhMLOB|6sj0G@-TK#boL%h|2%g;QqB4b(tBem zzr^)5Cj-t-@4@`TmI|clHp)NYT7~qQo#+*}s;(ISN!{K@MbX)3G3$S;H|0C4m}x(c zIdN{^Aa!vkMQh!^M_OC<3Z_*fuNp?qEn^y;eI4^py3qAgB)9QRSCrJCof`$q#OP{n z-dkAX<%U1dp*Fa;F~eydNLNO`i!o1|Cw$n*XzoTG;n}Sb{Ay^(=|D`!%a+~D@Xe6+ zNTahmcdK(K2Gg~jNco2?iAbfbJyI>uo`Qe;-Im}LPlS667OvYYlbOd*^-3`m^JnlD zw3U54rhB@L$5OR5o{H&O1KF5<$z>|abjqO4iq4+%UnD92XU%0k{<&i%6*aCz|2L%? z=0Af<1vIb`J;##Z_TS`-Q07~fk74%%wH+q zLt14%r?Ihb5X8&xyVYI;C5GSVHhl5DkvGsxGOq}9i9)JxqvS+*3ZvvK+`~H6wpQK9 z{v==G?&w3LLXVh_Ic}n}jrhC2hb>m53wf-~w7W;+_3v5xQ55xer|YpIcbbm&GObm; zv_)+^*Qus{Rq9%xx`8$-RV!aRzVXU>WO%e0Ml-FIk7D@(9^|pnjWmqmB+RNU+z-=g z@W>b=7XB-m%=qOF!gM2|`t60p@UhW&lfjedY7e4TFQR8T{VeBC;q*_OehJfR1l8G^ z?t}5KjH#hj+fWnH;yD*wMXhk%| z4Rz4328x~?6DWE<9!HeYBvXPiI#<)P)??Nh*o;0d?y>_Z&U8ps=(W#&9@9zPs6AAU zPs0Gi;6S`_2+Nvu%A!XwuGT}iP!P{jIp-j{?8&GKCM1(&w_xHqpi9URCli+AdIk2N6iyVXyT5JN;2P$HbD~ID8)Lt&OL=_AR~t*eN%xj!D5A=Y}J2| z_k)i9SXYfL7TAi)IpF1CUq-vY2Vn|@j;V>pU+`!%nxJYLSJ>TFq3{NUZmv+FqlaD{ zOs>#6f_SPHt`JoZjbT&;1LiG5$y^p=@zIhycgX7 z@|al(z6;+mHGn7D6SIh8#|I`eshUzZ451#W zobwRNt!Ct~M2(9y`@lY(_gM!m2%q*D+<`=kEH~B@^6RJy?i)@hR7V}+2o2HEg2e^G z2S(~>D5F(6+FeS#EsQFyWBU-=#;6MBgb36EoyY>ms)q0m!(}k8#1P{HK3x@)#zSK$ z>&DK&n>ZCVh6jusFmnDNm&TBXFV#@&*fIvWG=YnZHo@1eJ!5>qCq`-ceG1M`@I|bW zOz{f0_(6J{Lg$)>bH(QV+0E=r--2DbDi-ZFT; z)p&d%a$gD|2b4Dwc#y@N{)z{~8zR~=kWdv+tA)d{#}uM@DjZHTazI$_te9}97(zT1 z3E^;Q2y8yMUj&I4H&^c$emob2!~ck9F8z@zKwN|CJH5PV5j4FZ3MZ-QF`Ds`%77j90 zEffpKoJ3>cty)o(jE7TBlJW47lVm)6?j)HA-#AGo!cR_;iSXMaNv(saJN)4!iZjVr z@>|sc(KtfNwH{z+qRApJ)ahtg(Br#&0 z8uWy13?1;oT!EGcOn<1<(OYSkVg|x(MpaM{DPRzI<|xUdLvPy$Q4;@E znO=;#5;ItXLCjQPk_r6paaO@5D1@5NOepa#4%Fk(qMoS zZy2OI@rJ<$C*E+-wmC6}LxbEpr6a(fky1JWwmb3CVV@H(9bUi_rfZ$afC@&cTm}r8 zTgMv-qZujQNSLhA8=878MnN7U#T*5#^6Ge_p&KK`8x3>k*YU={I!1~&2Fex^&jAZJ z{2KE(+-IcPDHGp#CZ3YagkJO`e6{As!C)umICzecDmWfqcH)hP>rT80aL6{43jFiENkl?7}O@h7-e8jfan@MoYiTNZ{GExPfgmz2n3QmS@j1+G&yywKrg0qj% zZqF!I_Esw@Rly<&6VwvKGQg76m)?lDqhBnK9*A)TuBv*A1=)uFTD5+kh=b}SM2 z*!7CFBw7jEmiWichNl=Q(OfuK51pxp&NJEs~Ok(y|G1*0+tF3-OGUmOOZz zkpowyPO*9TN)$;}X)rlNKpvDSCirY3v}6M@YYVQbhu%;K)x@Bh(+Yui{4jGKoM%)8 zecpdwCLBgLzO@En%njgdTyyYIiDj@uM{n2(-OXkc^!Q`Cfu?N0-qvD6>ZBPUPp5hsa&p(I&0Wc%itD6Rqy2>wa zkgmQrLB+FV&;k34PQ`A4JB-k^b$MasFmZRCGg~3M9{T(d8t$iUh2Io}2ZbNSJ_Td< zP{As=mMrjfhii7&+i498X7};yL0uz-NJoI|9l36k4*# zJ?=H|*-uDq?TnYP zUsRIDWD~wZv5=9Hd>fY5L)#cREGO4Ci+dZc=xBO!xaDooI=w_{mRUZ<{G?fv}kS*fggS>hLuj$B|^hUGypzk44io5Av0zQU2uP7uJ zHEjMdBp)W^fRn*tarjcwQH64Y#~aVVm7}!a>M?sB=DzBTUSdS%JI0-dHyBk}jt@Cw zJ`a}^0y2Ld9vrV#8Xb2LF1}7kIr9yCt0Qve8~Bcqs_rFxE|C}fWfnuXo^h9;;0-FM zOk9FxI@&z=p6L>lDZ~aZL0$z(7Qr#w}|8Co;57G11|CcH}pmszfKNs0RzzGI|jwx3Bm{!=D?hQT@_6FpKdN~Tc+i;$dRt2w>Op3b=eLt*IdKbzVDW!kF)Ai7E zk5G2pA8ji7#{)U%zbT4gX3n4;2QM|mN<#AH<*3ok__r{sT zSREZggJ%4)ha??vj8QhDW$-B@pYw_bTJDiJvpDj(Qo4J_nK&15UPsj1RuOoCc%{&C z@fUG+(d{cGd1K!4mL6iTj^3V~-O^K>V5Hj6OI%~5n%hfExk%;ce#r8cUSc*Qy2!$N zhYiHyNAOBq196rSsks~1Q2fkD^5#Qk>s zbd5wE5HTnS;Uyh)97N1}*A)*M5}JR5P!;c=lf*F{-A(9VN)o>^QuW1h_0Z&Bsa!2D z?Kei)7U$!W#AJ|J;WtOm6ow<3q%hAw}@8-3)>0kA+|B9ge$9q z5Jld0F4v9GCP*pxGQNk%aN_k8S&UR5_7rn&Yjp*CikF#5E8h33ZQ@q1SInz^oz(_gMQ%t+dlJIovtEgo+qbm5N;A(s_J|s=NBDnOJfL>zt z|M2?fzy;yA_+BFUPhwVq)sYvLBJMHT1d|s19p6t3_=|X(pr-NXrpLq%My2rkc(;T> z!tyuqD#efELlTCGg^V09KDbN5a6vB*W8=e^)jbnN2@5_ULFn&6{S(Frv&65_YJ27h z;g7Hmz09Zzd`EuO<_YlyBL~FbS3;R037>Z$HQ{rHCS-~)jD#GJ-Em~XIME%yP$d*L zYkIp~r- z%XG9n@I=A_QLK;#$z!Szu2vA9?)6c^LUCS4bh)rdSn#J|s1|s+5W84RU_{q0UnLX@ ziFX-lTV}biGoqdD&k4&#G9zVvxfrG+GQV7;D+C&uUoJ-LkPNO6i*dZy8eAo=Fmga= zG`L21H?A|dUidRoCf19VIwBM6MQeq)g6l=Nj>y6Wk=sPKpkbXhiL(qH5ZCaxgmPiQ znTf)LYWS4c%Sd(8c5$#Cdbb|>;t?u|*e*Qr=Sga}8#_evdMJt!>BRMKhv=^$j{AEF zJ48C8D%jd&ym5y(`$$y4PH~|g^6_IwvE0Liog##hy4$c*Y-gn0-X-?cLmxgWXVemR ziHmx{?}A^B*d@C7lTuZ1w@759=BwReNIf*Mo}{J_I%7-REmrGj@mx+rky5Lr0`^ zzbMlSlA8VEHyx3h7la|8uGJ0*JEKhy8Q&=JfG7$i-X{1xE-3LOQK6$H@of@c#@D!U zXI|UfhlQU)*od7I@$LvCwTvDXV|7Fe=V5WKUb&0)kbAIdi^@5%sKrkquHa!2!ieUX z?#Sz_F;o-HVKFA8&Y2^ER&Q!jx;i={t}w!B2QRsf2%nb3Q?q4-I1)-o&2tsv$yRk* zDnzzItffNy#z<+Y5dN(({%h4#ii)s0HI-s!n>sa>BCj60q!6}KpTtW1)=!nAJ8P9< zg^tMmO3^o5@o4i=DJmlf;kOcV1e_9s+v8(o1SicP_(4a-9L#7-Cxv1d**hx)_@&4x zK~JhtxyHkT5GCW|M1-Om4@^8I@Q3XYErY4Zs}i}fir2hfT4I&Bq@&k{+=#n5$k%?B1htR zF`;KIDoOlYY}3*B^;;4zh#kqqQ!~Uxae@)ux!jX@QEcvA$NNS+%Sa91Z^QvcS|JP* z2NS;$M;PJ_O?f2xTk(#Ldcl$COX93k!5VQv=Pj}viLMb>op|4gTRLx``Do&ILiQo^ z%Ha3Hl~ExWEJqW+7k&z9(9d)<@dwfNk*EoN6nz=hh!v6erj1ykqt@$!5S8^MrFe;n zclj=hLyT&y8<%%5T^7d`68RX`m&FO4_fc^aqSHEW-J~}XFN?-0q@_k^7bf>cW&lI- z)PyKTXOj7!M4XPu{7>R7g{(b`D-(YbRXUFh{v@rBOoH~Bv(>DNygBzr%J z7L2gdG<-beC((|fYN($?H%5if!sSyen53gC;$q?z(N{->@?zpuF<3{zhKq?mi*!ax z%P%5R=e06_n)r*zb>dwUi*(*1_c|$yFRduq{J!c#}sqIis`xH^ED*23an5^sr{3UMFa z68Cf-HR&yUU{9%8J^3a|_S6wI=`GQpks1fL#0W;JEpCaij0)iiL$U8IF;z#ij7Ori z+hUuO=pC_7XHLfGz9a7GsGpmFyCUW>GOv{070HYWVYiKVSL*TZ=)6cf@kZm-lqzRJ zl*dQ~_wSlGrb7y^-$nWm5>?UtyO_hMhJ)>Qu}C3qncqc`&ZCz3U98r56l}kXk99;X z^Sk(*k#hTYafwkO{9weZ5uuG4TIbvEB9D>s?GJH9N95WcVlqyewXXdkmg?wfSAo1; zjFh8)i02hzNBsQJGGX zHP-tp9wgoqA1K5I?}>9dj||=u7j@plCuPz-(Kdt239@%jbj;xOPc_Xw5y#9zsK%zb zCnk?1Q58`4L@uLR$wiC`VUNKLl`eDQ-52W~p`$VP#Xd%t#qtIM{uI@Zc!VyFicGcS`KV?Mb zO<GEirdL5m!(BQj`_QyD3P7P&&_kwL3Gts^pMl`FEypbA8*+`~w9 zj8(p<5SzEkBRcP+Vtf?TDl2p*nYYTnbwuW^(q#%MRpzZSn2~B=n+(wrnYYR73UMUZ ztreRb(J4E@$B*oo#$>U_O;9OX=Gkm(A?w%hRTGSoX)5aZkfj=xyf87p1WME z^Zqgx`?||2C!UA=Sm(K#yLIr8cNi%Xo)Qm2(%TT9>6TVTg?K_*R+6VCeHbcHFFC6o zDsU?3C70_3H;C*cFS%AnADi=%8pzE~<-FyyPUXDi0bO#q)RMgAkw?5`Nj_5hz^Py( z`NboqfJU-LFE|r-!Hwi^I{Fe;CpDH2A4!_PSNhLTJxXEORF2jW#YIzjEQfe1ESt)6 zjMRp;sr*V)kmItc{7z?5m^78wbRO+ko60`3lnIKGrg9J?6_!oqG@VE0{p0~1k$FGa zH@D8bpPb03#`^j41e2efo{P~*+hB@PKbfmD$-JK|Qb?Siv@yv~p3@PT_mf{SQs({S zJ)KA9{be`2wj-Tn-d|?Vt26H}OBmJgR?lB3FLx^>Xs_olZ|jK6 z`^!HWshIJXE_q}^1+c&LWK;-kjXRS3Ws^rd6P|6pXI;xg4wWGN0U=)Lb6a5xLe}zQ#y7(_EflR0yYV5pOO(dc-r~ z(Ms0{(fUWt7AV8#vw3c|K)G)LAr&-%@)V;Q>(J%##z6U@LhM?gJg@V}wLtlU&Kof4 zP*R}mxKQaN*8*iMBjsA4OlE}Z-v#t7P@Z9^nlwm$>LeN@zhP7eZ{f9Jko;Xo7Mulw zrFjvVP)b`!4@QMRlTZtp=)?<=eRbXpoPf47QR@3&4BUI&X~WNOT)%BYx?Qp%SQv4--U(@%SQ;+%Ueo$`%gB-3LK=^2C+j}RGA zM?>eb3K9}Uym4RBx<<@mFU8yu95>r3?Og>}@qPQ!dC|CJ!pK+iP`$Qnp= z{cumbOa5mQN{<{#v}C2pI#UZvj~O7(j$QBh|}=luUQ ztvxFCZ#F49M+~K9`r%=n6ip~jeB}F z{mAV%^Xca#F0=q}!PoBT=TmZ416c705jyAi+pYkvcpw$vdB7f6s&+tg=q}O;>klJk>*~8_y$UgLhqxRfDU#Qb-zLAa(?e z9iksLsFlQ)E}*{uY%aCXiGiM;c#Om|3p_pX9!3 zKrOKYsR{bbB*~-*k{n;;>1l!E-N?X!cvAgJQ%aA*sYXH+(%MKY$J34DEl_jSQ&^V6DX5t`JCTr7F z0g0!8kW40zDODNDH{k239RJQWuFocQN`+tUKhrAQ_LPvKnd2xv7GMQTkk*eRZ>JKS z%WwnbC?l_jXcr4TPwaeU$9(cu{X0<#FbiHnMaZ!xM3(6c3}^9Uw&B#LL-^r8W? z04csQ+W)^x;_K6>L9$MRKBT{$M>&3tsH~c->f!+Bf2v>Y9Pm*hrN6*oBVh%OZvziV z{F$@XbuxR{01ZO?IV*IomYdEp&I6UE8Y8}9P1Q(mO`~QV4r6?ecRtZz>^O zjl46$WSqZDP=GbYlZbdT^8OGquQm}>CjmEkG?Tl!@4D+sgQ~saDtQ(Eb+rC8tfHq} zbDFDnP=nwb$21giM~ZG8;XTj)Ma6&7@NEETSlpT1{qGvEHue4Li1QtuSBdeAOXq)a z$h@*nsR}6CR7tqUd!#yJwW~ng7VTd-6#u6=o*(dZ;ha`YL^%dfT-Ch)e`mn|lROzwf4$+yad}lhj9Z4#x#=^g;rn1yF>)&jZqg1Hfj;et#PQA6Noz0|= zq9c5emvW&j!=4(0hM;9|IQ!p$@9NroQn5> z9Pt`%re1^V_`$=ppawrb;vw-3@N*qM?)a&}&yV=1c2oRZ$4?{t)Zphw{5HG+ey-!k z9X~br`4PVpZ-Afc_;JTi4Ss&a$F76%a~(g;A?iKMd=E4KgWpn}#aCO;BI7K+DSH<4 z&tm?0=zyQ=_=&_%4V>Q`f!`i_eU90mWA^8m{W)fTzPbBl(N_Bj-Tw)*e?s?v!t9?= z!xf0Z&vpEC!A}i-e#Eovo8sp>e(+EZ%)5$tzd#TCT*prWeroXZBmUfLKm1(BPjCFx z;O9r&D$JwfdQP8#yR_qow9bqA*2E*y&r$Bf{fwIWN4tqMETP=Czo>;a=M7q zndVMezrcQ^cqr{^W|T1_%7u#UWJ*enf~dPF#=2rHneG=CTQw7hV9~r#aT0f%ZIRNW zFDG#W*k9zh%*hxmYJgt4z5t{0M~U57YMM9zZ>=mqI=%lA%z0(j3QYgLzy#WEG`vO} zVJ8kS;|S1wuv8&qc8M$_9mHAV61;i8s0K^V*Tq$rc?EBan=ZE4N=(Pae1eL~d@f_o z{VumL=V;6Wbcmk5x$m-ht3?XSq+WPKlU+Z_)K>&=?j-k%?M)M;uO|M8>MMN(bQmHl zkv&-kS^NjgkRNdR0KAa0NrqYOt=cK0ELFqLAYC4EMpnbI#z9aGUOwcghUqA=-|?}G zwtN@)nJkyKAz#bxmRGWWl9YcDU7gfF9l@aG6B=lB|S3hm8d0fviUT@sGZ zO0_TCg%8&RbPYD73eVK>24CZTN0#9SEPPo+V{ol8I4rY0nNOis?*Lw8{f>P|zxO?a`H^E@L;7h34k|%?zu%IY z{DaYsQGMI!gK-`XJ{meQ^BO?Iy9PCFpzHGW_ z>DTkRDOJoIe9Po3zgu|Elqs`3ADXQ4VlOxIeM^@f-e&x+4J)Pz>oaSE%vJ=U<}faN z(q%WEs}Uuqa)|B62CRm#cKCIT(RX5u*=qH~FT<)qjKcwDnKGrH*~_}N$zbzN%e$pH z#*=&~MilB9X7;sC>NU&cB*7txtH~#dH8Z+_o}vn0p3(;71JO_!aPZ5bz#7MnlE z?t8cNv`ZE@`+n=?W*0HtSo6P(9%bQ~BgKN^Q&?k5gUpAlyZT>uNnz1^L1%K5V%pns z-1^LVKg&t$G5?mB^TpzDq~9-YZ#iS#wX(CN+Bzk@gXyHTOW!!mKfIo}O9r+_`J9o- zC^K*3FiSb=@dT0?ZOO;9Hp!CD5i6_>Hw2k$toM3Nw{({k5&4##l4db~=H9f<$|$qk zw_e_~#}a}$_!y6Dy!lm&zxW%!ANS{h7tRB(6LM)1yO3hA`U{#F!+9vi37U3}qsahk zoS^x}pXLBf9GAyh6yOh%oSzYC4YIgJbVItZY>0ILD+;r`vv{&~zx18E&U#YzZzLd1 z&tF*flJ$ZdIPHWr4CT+D%+QTrT1N|-+xN?4JkFYC(!Z_Kbca5P46)_vY5#&WTa@kX zHFIrRlr4Jg65CEm$Aauc?*tw)Pc+Elw`4i~yvxS&aLYn0cGPx~PvoGMIEiUGfrBQH zA8p-jn-hMqrP#7({${IzLu=b(N6f>HxGG2DTWHnR4@&Te0-Jr(FSe_4eBbt#RN*_W zi7S;TMu{O)EF^3#8rr0fW83d|!ZqLKzjCsx!xq?L zx@)nm(U1a^lz3$MO_zr=*18t)RJs~noF#v{kScE+7SC0+sc9w_LH{Kjic=~w&nAlHwAG7(Cj(Ko+Y=nz3fsAoth-zO!}Zh z2UD2zY~rwAwSC`lxxL0^uir-dHZ+fGqx6~cf&HfKp@wHO?PiY-U=YQ@5e}kiFt4R) z=h;3TO!sZ3#M|~vY>9hzE3O59qY7SdZQC1H+r2Pnvb>3_T!@>m>z%|1w+fL`(9i9H zWmnH}ZqcsDb&GN>^O^0IZ`-q0wc>nCyJM@I#B)frLbt0n`^+UaS}31!OEJ*-A2lwK zxZZbnU9$F!EaHGlK{GgwFs+8(v%Ydman0y=$t}xZ##u7UFksMCOv{)XZdpb;)Q-CE zHp=v#1@4txy&%iqYkb`gS#GpyUL1|@#w z?iUOvi*P^VvUckpcVEli$miYf+xA8tbWcUP$34ejZP5XjoEzcqxTm_Nwo!}LY4`3J zE5F$8+Xi`l;!c6~x%&mnr=!1d&v13?`h)uq+yxhT#A(;K+3#?(mt*|`JbvKj&BCT@ z-rKuoEgI#rh7iXg*emmxb-Q_ zIceS3bh773>&SI^p1zi6BUgIfw>=wK>KV@F^Id6OIBC_6uG``n$0NQPJ=%?F3a)Ac zoyif$PQ*#t$;3(8E>;`psi0&@9psRK>E}HiGIH~mo?#ZZqUE*$EIEKn?KIE<98tDX z?6@>`cQm^@n#~uxMsA+!RqFbI7BR;wOm^Ggu$Q{ZNlP%js-4458>Z7PC$0JGi@mTt zN@*s~Vfq%*39N1!tJ~?i-?7JQzpKk*2fU`S>Rje7WbQ)FDdL>foU@v9b{gnhk3-nS z+GKg$RR*{>*lAc2*$@Qp=LMcK-Lru(-p94^zM;X`z75W}J|Fd11FP{uk7*5RTt3WM z+aMJib8`dQ55C{vrtQf5YI~4nH>s zNLO!~)#`Uq@XH7M(Z}*t(ebcpn$#QRDckvzOS}sE;mU>(5lSe$|eZjK6 z=YDTryZ_3A-d^^{Cmivvad~CdRqr7C9_tOHQ(E8ljxz39XY+|Nx|DeOT(I05-Owk@ z-qWK%L>c3o1{f|_+{XC%MA^%Hf{;6ObZehzyL&;Tk0y+CAiXe-Oda7PjC3HqFw%ka z-R;AcoHJeIy{|B?Z#W6__uv7HHLf0EXH6;gcKv4gWO8ez+Gj0Xj%hl;{=S^udNrmq z!`34u&6%t@lQm}={Tfa3+0B8RVSG9FIiC#8{&Mb7pA=(*vG4k1+8^(5#-}@`Kl915 zPn&wthqj}iNniVt*n{3y<99vo`dE!L$}d<3k1#gOu}36^TlQO@XmZYUU(OxVykWk5 zV()Ov0S@OQOe>gHGNntAl!ioSG&~?_C?1g-{i$G3sna`A7aCSbqDPn>VERB%&VIah z`LSV;JwN$|@&saJ7teDHA7PmvSmqkbTw|FZnEL>ywTT{gnEQaa514z0 zxfNX2Xt-Xi<$Kr-G(*`9G(#B;G&fZ;+XvbC9{$YrXRZ%(9dWB@xlK)zY>YNK3E z=gMbWOv5WiS}8&dJVBv`a0us8op5%UEW6uJMZM_~$J}J%;@d>b&NtG;Qf!~pt9Rpk zR#9rd9Qj1!0S20C%I!lZOmCcK_#jR#syA zqoN0mt08!kXfnY-+p=lwdyr*uS@R}AmevKmF#oIA5lwPAzs99zV0M#3_9vPzKsvp- z1L<0%)$HOKHg?8HZxigdEpIp&TWIWKNKG4Xca)`>cHoxijFDbMs4))mKH9|BP*d=F zlbhnzxZ~y;Bl&yWp4{=>CN-=m%JP%X8M)s!viY4R7mO)G?l(COeHt5mtL?pGY`%0s z-q^PsbK3Y`u$$t$`KF4NzCrj~lAf(*_+GVt&~UczP5Vz#dA>E=-Ze&zPPeFr&o&nM z-nYLptJv4qKGl)n|)twS`J6?AZDxE_KmOm9=CVz_<2(=E_PGgN{Kf{ zyOpNjZJJ{}=XJm7eM!57`|@Uf1HWwsUcfA4yj%NKn?ITp>37E59*?l@?zTU+qu)*O zIkrc4x4Vn`_@&^)tabGWVx?y+6b`%5ynryw8Sb~+Kud6#i4Gv$%}RG0`1Xl`R>Iu| z8o?>z7}h(*Eojg(znzv>mi+2h<9cl59lun!E{**BGvv`GXUrLHzlOB*&v09v(;jJZ zX-of1w-!BOko$d5lIEY~_D81_f4Yns>L2a4m+Isezi@(ozFSR)MgCT6zhH-d5pS3d z@NhZ~Z_O$7Kf>*FfX7aE6P-QL-6UgP_jkA@;bHTK?8*86@h^5;?)cch)U8w2XP92( z_!ecTdMPG4k0QlHv8AP8F)U!d+Xv6J#f9g#Te*y0n_xO*&Yyt$IK#}o1xWMz;+HdS zeZm5prHVnREt_SaqR3|Z-QI8BwOOj^yAhf$C_SJZ86%TfXk}Ql zEH;^CnlljhjF>;(SghGDlxHDhWQ+EeEEDb6qijDencM8DZ43VJ4sDzlH_I~8&yQr8 zrsc0_R>2)q!Hu6~q5~?jOf++(N=4~iBO`CZQYHP;M5?3{CQ>Dx$xv)6o=)Ad)cbz3 zQqz9?C5=*(b}Ewo^uy!lOHD3~&f-EcB-`5jq}$g$-J2VE@0)L;SAD%?@aD&m9trru z>?I3Q(=ols_Y9_|luf|2ZAg0a`|`f;jONvDi|n(TpK-GXalTt4KH%<4 zl~0VpUl5Ty3Z7~HfuXgA18k?I0bUp%H`Cepsq(c!;g(dHf`^8uimc#Qn&)!^rpiTw zPN12c8K;_GaQiGM+>&8+n7spTiWf)t2YBID>{Rm_x1bFz1IQ$P_2o8Xs-J(D<=Ga| zD6=6RCv^x~9?%_(l{I|OT(b$sB7=GW9sHp9k(cLSpgG`^z@ zbbHOqeU<;2!1G+Et0u?z9|L{e-=6Vv;6-fGIQW5^^s4Fd%5ckh11;s(P;#=o!!*cp zr7R%G$YbXLOB#)|h@UqQ4RWWOa@u(u)0v(Rcpx3(raok%E0{y3+js~)=4?J|I%N7G zopK(o+AHivnqGXE`ty_=!Ze)ean^90Lo&>LQm-vRCrx*kgj-IU=s;&9%lI2qBdUzI}poY@M}%JeaZ5>eXHEE2-Nbn~ z^PA|ni3wc4EF+yYan(dL+TAwxXmGUqit$H-eYhTBmOD}BgS(^2J4oMLgj1~hqPDm< z#2gcNx$pJw+Tx~LSxY~EVGbP7r-d-bh7U*j<&@birWxsO$TXu>!y6&xa`V=uEmETuRnhWgigY%|hoQihIB^w^D#=6hVQbRRoFYk9y(+pjG5 z3mwN`nl@qO;5U7+$Z?;tAiz*Azi5_V+RgR2V4_nqPMVtHZ@NVr#txg;vKr3f<@ZU` zjowQeU*OQY$uu9^va82UQ<;y}vIyNZL6(uu--yDm9B|vo6*$6fX_U3I(JJPNJ!J*NpAu;p} z8cs*LG^NDoaL02pLc6oE4~(>dOEteV>giBneQbS@IRo>b4J~#bJoEX`Qq6t;|JT`> z$3nVHW3!!R?7E6cFY2*Wm@SuWs`qM~BB;8Gw`VrqFc+?&nyq9&<*BCRm$ zCbrz_R-?DNVQNLIBrddKW=dIRY2~fH{a)uiXx;n$J$`@ucyOMdbKd8D_Vx3b&*J+# z96O5lf(;ODG#kKrvti+j;E?&JKsgg!;XV7DOD!|}Q1VUcB7<%9_o+U^&vSoH-Dvn` z<6zxJgB(Hi<{raNrItiy#CK0yZuotrJ+030S62cniM%1Pds>O|Rh2WX33YQrS{b&i z<3Uf~X$!j7nkZn9d(+ye72BxC)El;~ zyf@8uFz*y(H33yMd@J3%Zwa2XV-7X&>Rip_R4t zKb0nbulOddMJL~mvETet&JVE57jCrZO0h2d44jAMsELvI3 z?GHIR&CXtpj#K8oYxX!=4BtB*Q4UZtEnV!uS5d;0HhdLjqq5R|w-Tmw!?N2-F|-(d z+>DR1v=|PKzTBrU;#pUR<04M4guT_UckDSwtKs+f{?1O*1G5(Q{uL$OqUiKAW$I;1 zw;1Gip5%%*$ytWwcr8YD!>SBpi}~a2{hh4_`9_K|{B{s8(8l=Y(r)AJ5pSw3hL^Cb z2vcn3uRDLG701(V=;>>7CK#8m`o&oo88yFqzh7y1{EC*_pqxTE_ViQK#-T6u+iiRt z`@2>u*&OLy(tU=a zadW_5u)N7jb_>%xJrvzVs*sC@N?iZnZ2&#%)V}onhTkW=ntq<_7im~t?5fzs z*sLn_J7J5V6_t!V?j{eK;GGE`)Lh)ysEjMD$Jp)}RzAsb(jW^qEMpTDtUCtkTz-Y( ziP3xH=(I-h>+j3xRQ>aJXE>ua5B*z4LezQp6B+wWr-nY4Aum0?kufmp!n`9Ha)*C5 z;|hP^jxbkY)cG>AtCiJmm%U;6mI1D!sLVJFwy1A#iV_x?828WKMW&6@2jMf%IZ+SA z^+t9#yPTkfl|_x*z8&@#JVg())i=bTE+ z4Ks(V%JS4ly&3Pzs*Ad(cwJUgRDAK)tX0@NeW{f3v%Tfjo`&g-2=?R6hqIoII)DMz z%1++(R@VNgQQMB_*U;~N2covD`8=z|v}i|X)=WyiUVUaoSvcL4rE>R5EJ76C> zI4k=K({0KyUSWqfWg9Ps*Y;eH-Rdz98@)7pj$ZCh=F|9|Pvg5Y>eW~+yF~x{=(n<4 z)q8D6vadvq9CbW-s&dF$FGKbU5P)Z z!lL1-u>A3MvY}nSb9sGEyZ)ImkAQ5;l)lx-;+~vU`ZfV;;D8;WC%C=Ms>l7I^skzH73&v*TZnPZE!5)zB)7-gr zmPfWK1z}%OX;{rbN5?D-~3$e0n4(%ujDpa zj={IZ@?Gi?P)Yj;k^_ZbdxSK2wjM)THs#CIP z=%(Cu%L{{J+@~y2Mg81QUQ2A0yD6$$ah1EB{Zb?EZ3v=dotAC0tK6-TUrbr;Zc<*3 zUGH{cUc((FV*T>R-Op3KzD#9x8VBFq;cnHxeh1EkD9&e%PZUMudFm{ehW5*A*FT?f zeV&}@#^tp#7k>K>)A8%=vCBnF$!1-B zv)lMGRtE*`IzR6sSd%ArNB4m7GoQ{&F#40<$h%^BVC?xkr(%tN1oMqGp68c&xFKK7 z?`_srZtTrjF`Jyv*;Am66)N%INMZ?bGO>&}i&#OdB32U@5El{eBCaKFByJ|w5qA(h z^*9*WE^<6b_68*x3GXJ!3n0gj$ZoKR%gjv%jcgN_p|!JrLxq5E9O+NM23y1tech@*O0vC;5XU ze~jc$f%qH=BGt2VA|E_Y_V0+7Nb)P}MmAbE0P*YfGL;g&XEO3zt)GcZEYiz7E(bY# zjJyvMeD+Q%e;)5abQcPsCWJq?=2 ziwL(ec49$9Ejv3r;4#UF4w{k_Z%IdFEz25FV3rY;6TQTSF3PCo!v%jCQ4l3{3ZkT> z*&^-D)>`)b2xgP^fKA5PNIYoUhVIiO9J;#8x9UCtL#Au5F3dHiKmI8r}RxC4kuO;1H?w+ zLE>qm=oRqD0KH_e;lxT}fY?YpNIXpxy(s}=B{4v3BpxK5CW<~3C$W+kAT|;Y5>JDk z~eYOot94OQ8V70wPPTWphW{!6!$Tr%GQhv4L2TH5LgU$X$$=m7L03snm@r z$ggErM*H$tDve`0U@s^t=wHj$6;J1i4DYNVh52`NS%V&lI0-!e*-z1 zi5)~%Nf8m7i5(%y912V>>#o`rQA*|AT|)2L-N=~(z}3IPV^ERh}!Gj`H!9l;$Mq@JHER; z*M6P7#y&UU@r2olTN3}7n3gm%XUbx!L3)aKOx zNzFuoIWtUAbn}N&y(Jgel)#r#`ui+8A~&cXZ)Da*Olm+;F{@L;#%+8 z<9fyQzU#Q_w#>zu-pqBG_hvqn`FiGOnP)P8$W*h;S-rCyS@l`_vR=+Ql64_#VD^OU zrtI&tf6k7{8Jbg(b63v#oXt7=axUfkJBQ^Oa);*5%UzoLTdu{O<1TaG;$G;kb6al8 zE6=+%Z%^Kbc^!E_=SAgf9Xo6UCPR^><7ZR{~tjn}5nV|&=`tO>U)?_~?v zlWZXi;#&~=*k5p;`V!oiUW5D4m*KYa6}ZKG6>clP+ry3{*%L_iBwK^+_&VGjM%8=?&b&`b>@{D5-%q_r z_RH7o{a5`0dx-WL1y3jB&o&g|F@W>AQuX_LC7+xkxpR=D$19_oO59T??Q=$j5{N+H zD>qm`drcp3c2+$2w%-8WGERoI*Cdm#lbA_#6R!iexd($gZx}ACJ>>A;UIdYOWGHYc zsZIxn#Fc}~0y63+Vx>JMF=W3L_KdRm;J5KoestC%FfRWtFtB9>Xs_{thwoVjE*c?y z+o^c7sW8uumJ*M>W)lwfntQ=lCfyIJ*FAL2zH{QEu%GY07u?`{27Hv*Oq@r2V#te- zpB?owcwxb7;KhyafUnH>0Q@jDRHT!zC%C2k_)?khtQoQ{TRr4>aD;RWw|xo^d(G$I zoO?o5eGc|To1{H!q71gC>{~EYzFPYauphqX%701z>}#+29lrJ&{V>T0q7__I(-X8! z@yN=2b!;pgKTJs?(H|0fjRO*UO(wXeEDsFTO^EiI>mm8tDl^?}tz^df0!W(HjQ~UT zGwa4&v;SFs&F+DB<+_R2l#

xn|$KcIN-L{m&UHSu307e`n}}wX=ue3E7axu{CqM z5(_Tt%l&vivf{&oG7l*M@L^>w*r4DO6*!~Y2tK0Jf{n^%@KNO+@HM3lJfv&`4=X#s zRz(9pz&R>sN0psmoAMxdOnDeQuIvU+D2?D3%46VJ<#F(W(gc3zQJ%m7ze|GM_}{_a z{8_LM{|A`BUjP$%5KQ9xK_`C+?8jdL2k=+H8~6cmC_e~}(&Rqs4DvPw~44hXjE;R9TV` zpi}6z&{beLC|5S%KaK$1r^sI6|KT-l%tDG9LrgeYlM11jp+KfD@s) zk4=K+K31w92u^|Kt84`{UuCPH`6{~`-#2@ed7=3#^F#Ahwnje~TnEiVtO1&b*dx$9 z#Qugj582rss2*Z_p?ZitiAWEzr=j{fdl9Oyvwhm?c%I;SgS`dk8|)o~e1pBG9||5p zz&F?j2>1qT(-(rr5%37(hBQ!Tz&HMw(J&GWH@HBPAqzAcMu8TC8_QBEG~1X1nr*C~ zVFH)|O*{z&%{G>8C;@Y!d0dONbEoG78;<}d*hB<4!6qTV308^#C)gAOIKieNzzH@T z0Zy`;p?Q*(L-Qn?1I?4{R%o7NbD?>X&4cDiyi~)DrSMK@wzI!Lvz;x0W;?5aW;@hj7<-DEKmQ#_tHuu5Y!R~$Tcib#bSL~G!C;s`b)Fq!B{^PGl z{->BmrIvxMN#=N%QT}Zzll)J;Dpy@XHxFL2@!x+vN%o)0o5o5l`Ao35rv9((*R0np z=bX~|4?HFQJj@F)FTw=zeuaH3itWb(bN_^S3Fc*(SD43&&&F6W@~o^G53(JAc@5?u z%psV=_@?UXFmEtBdlSzEwy+F5Bj{ppn2%vT@vxiOr!b#k=h(q+Wv8%1{2V*O(`+gG z0=vR9Fkix)g*gY)3G)?OjXt!Roo8P54XZ^jsbv?iIsA^@!!E*nk4@qatd3oRxy%~z zw)sZ(6ZW4!v!~e=_8iq!yRy-;l1)*91u1-<;)$`}B({eaDY}G3>d1th>h6RhB{A`$ zNK7nJ(h~on4oJL7q$O(nVdGA9L*h<#dBhp@Y~l~<#H62Knpl03)i^9U-I&5xvfe2g zccx4=R;J9*{}ZM;CBV<6Y&LF4yvKMJaom&oxc&vlO=6I9W!NBRB_HH`+@n9;ZzX## zy+S(lJ2NWy_Hcc8&^1GU(6y4az}%ntxbmL4Iy{9>HIB(1%J0p7T)AK=QVM$B!7o^{ zBD7pL%)p4Za)-iXMF{sO7&pw=h#u}@7&lB7{3gJ-BL=uvvSscC5trPHBNFqXwndyx z+z~OzsllLrv{x33nBb{2eozhW&*F7FcuOwFW2q^Q+{06}Ew#LtR=I~y z3Lf5r3JZ$8{GiZ|KE>w+i=LJO|KIsYRr~lwepm38ARitP{KsqjZV}9Wou^%|UEm^f z$3`(;JF195TC5OTwA;9tqdg%+f%Y~R$-%FM;E}0mH{#5yidEtq>lO^V3LLBOfb3OS zDbB&*7yQ~HJUuP%YoB~m_Cf8qM{@4`?6;51G1}(cuULI#=~Qg~PeKw{ z40fTIO(yB?gof*?sw?PqiVcc#L<>t7=}McHpDvatCxd&_#ZNpeU$t|^YzyRTdo#s3 z<(RfDOBC|JEbVxf*rnuai?f9fhs)U_r`s{>T1AbvmMGS>`bY$``j2S?b41@B-*J-q zW^u}%%{SR-^Iy{D<%nmw|7R^WSIkn*X)ANFlQ|#Ukt=p^Jlnuc+!infbMwV`uGoXV z0pcO0kHcVB6r1mx2vu*i1svSw+t2mk3ar6_1H}YI$p~(|UZg2XcJSF71lL6sgi`bu zlGX_AwV`5>GD6EMfYLZ^W`TIFkB;jRsl_BUe0wDQI-{xsgN{N`peXaT>S4m$_fFda z+XADCG?&@@YmpI<_fk!^z_OrjxF}X^SE6lIvTAL`w&F-tZwsu_Do2Qqm9k*LNYTJO zhbW0ddWI@B8W}3+u+3VSHg;(mwFzTHRDpphNK2+7BZ5EKyjQH=D+W7{iHVI- zRUreuNx6M9is=-ax5?&RYxC=2(Q3ws5t@FiSgb^9%g2iN=p*5%BfjJ{&7zJna@0OV`j?3$?0k=^6WxpO}1im zE14f(nblX1SbfL1t=JT8^}c}SJA!}Y06kykxJlLkBJKyDwl0k}Sfv;qvZwkYbq1U7 zLF3i%+QZ{SO#im4#b`4b!cnj`44Y5_ZKysoa?n-nvii^fHh(AnwTt6KFHa|ifXquZ zBKChn-Kn#?8Y-W^lM<$y=nS*t3*@p+5F&JxAv$}j!W3=u|HfgLa+Evd{fW)OMVvx@ zaV$=e#)RBmQ_HpEu9Zybq&dJvKL2m)W$ndck$NNILPo8Dt$N0+0i_4BD=R0kmBU~* z3H^sx=#>;(4$O)RZCav+XCCEio8um z8`?df=a?MAFnw&NX7;tChe#c(?~{-X`9+_lo&&jTqxCsgo5R~A-2weocOWd(Jb|!q zM9>wL2Nh*opD!g{QR?m7Y&KF<0}U8JwrWmumH(8AnW9=2Mvm0=gL$MKMMtyPeAU)K zWW?2yV{BNV@h2xu+H%ZLw1HR|x&Mqo)tSw?+^n}Vctyy_(20=1DLJEK7*=D@5LFZ- z7B$<|4&I3(eGu%j-(2fNl#@7S!wh&;v8!G52<|_F_~9XQ>;FVMJ5luWr09^1xkzg* zdYkW8nT+z??<D!v3W6QIpEP%dw#Ng~}{CMV_fm{_8z&0#gr zz%}Y+r5GbsHI$aj3sw!3yiA)nNyK!kh*t6XUz&J)J{$f6C0hL?G1X8dtE5`{ags=x zhzS`5kb*@L%c;`VFQCdPN8+vy&S7jzw+p4w7n?$Jr z0a4Ci@Fw9=6rVO=vPe}N+Rc;29jS%k3>^W!a+<;rqPnMr2h+XJ6{hMjd*o?fO%^+h zazVo|SgWm{BCba_|1hSYt)kt{y_SpQRL&ZiH zLe#}Jxt<=;zMLxJjZcO0`ji$qO}Kh`k$}zb<#B41EpXB(hx&fFwUTKfUaOuae7(Kc zE?_p;Pij=fyQoCFG*KoTqL*sc3de{Z2J(7R%PAA1m5;R*IP^Rq%X3(wMWQtf{Rs!H zy-W;J+hrG6|A`heUBszpV&zt#Lo1vv>rvbcA&Ts}7RHe(tyQ!LgE3Fzf= z8u%6IY)A>s`Wu{PJEk|^W?CXPIC(c!&=llbi%?j3t8D?3c3=iBPFb|}8Mq4djrPk7 z(Ra}K(2mpQBMTIL=Mk-MpqxrK42-aItG6C2Ci<#OGtdkDAH#+0G1{b=B4zquS%(`6 zjWRbyGVka-R@H!&oEHCNn=jdnF@`3xZoqs24aK&uq-)s;jG(9rLL=I2ROP((u42X- zwxL98ohf3X$`l@njRz)3tjrtAv|ne6aW_;`u!*w6_~ufSzKtZBMxyzV3~jL7>c5NH z2a_LMW>T1`1!jpfwVWJtv}fTM-)gq535!<4u|kCwJ2V^q` z=Bl!kbt+e7TEWdCK8dyowrZ?s0V^5?GeZvx*P*tnXpbPpn*V0us=913B7fGkIY!FT zE?I>(-z(&3AU=9+H*>j{?CI!MGUY#Vg&OZ=k(;XjUPxlGg^lh5Dw)F?Sl%;lkC3PBE_SF zN5B|{WN8EX3YAvo&+xs%PN5nzu%Le>~2uVXCFhXh$k{GSMHXEmRrP{Z%u}PhKEpU@u zkOE8oa8qR7uC#6b3hBKeqAP8=#lNcRJ3^|PuDRRb#(q%-xL*di+8ZJ8eJ8!5yUS?M zeO1~vVaHsD>)D>jYgHrn%z-`Rq>T)m{!e5({znItQ9UEQGNk(Rq%Kc-U0v~nn%aMz z^lg@SN1{#k6AXA;nRLl{-A|E>3ntAGw{TSsZG_bPw+eU3AvwMJ-i)%#(+3QLPiQ7S z6B_;}LxbcLIufQ{8YHtqmQ%KB8PMNJyc}+)k!_KC{+Dl|3#@M2AKcM{|+3(baul0Gt$rnQ&GXZDK-(f`**B zW$|(1%5kNE?0AtXYAD9$&nKr{dwZ^UM#H(4yCKsW|GDn;(X#N?fYuc zuiI8~+)vy^d@`6dPxMj}^ih*^KTdZOrM0yxfMMR`P8)A z#aWz+I~Y#CL3yGJqRk{POS!K&%yISHOmC$60R#D@VG<6UmP%a<(XNBNmkbtIOM=nF znZ!9n+^!7uRg!@hh;jR6sA7_DCEicmMSN0ASRhiu(Cy$vmV*-(h+2d0Muin>6-z`$ z@Wv(LIg9qw8ez3L*8Fh+d6=}@>k@kKyfs?xTJdqv{#RjCH1j%fgVGQjvrYs>m{;I! SzKoUT1+9M-7nHhe_5T187Gv!I delta 96680 zcmb@v2Yeev_6NSZl2)=TIgw>cE{W|pv9q!46cWG*sRRfi5LymWfWXlS#|DYO!FnxI zj-x|ZKzG#8dkwvJxT7Dv*Sq8B9Od8u^Z$O|tcnx(-|zqV{0-TidGqGYn>TOXylJa} zH{t_-syXer1rL6m_+0b<-qG6Is`ZJQc1%FiOa)weF~V&K-;cMZ4VSQ?X+g&D=c6GM zT>X4cO$6xM5)Sm+1FJ_RWA6mC7~-E?6wpR^ql|8Ei9R;E`_VqtW4sge(N&~Pg2#Hd z>aA7Cp`irr1n(`qy>U7jz~7emXJ{d9;%Z&HJ7H*gVUK+R8?W8Yh=%fe8(OfVC*9e< z7XpLkd4^`@cG0wG#{g3-kj`{zT5@7Q`wgg6X<8z;1~^eO;O++m&9G`vlm2~%k~yDb zb`vs8v6my*sZh;9^TJ}P74lvUH&k8Z6WrhXZ}=kpV(+}jX|4aO@x4amb%lP0_wdB=3r-k{{XDUc7HpKz{tK4 z)m9Sv(4^g~Uq&g(a3UOWPw~cY(6a3*pfhN`SmaH(a!&>@5q9{pAkz%WNJbKo?gKRw zU}jO}m#CMZ-Z>j=mwAQMPDaVes{e_fn!J&IqPNZD4m@*{cfj+}$(`{M?~y_CrNU_w z^|o+kxn`mgYul#e^~gU^0-EK5wU=-BN_f~8Dt0yaf|_5o_LLc;!!6$d7}u&IF7!QU zRylk*TS0oMszLMnwa;ue-)O#xIoSJeL}1YTk$k@ezB>kPT041Oo1qVSi{{VScr8-X zOI*If4xgz(10snA$@$w?jnV>8bj`GG1YLV9 zd&ez64`eS&Yb&9udSLC$9m8S62zc|Bjtk$4G}F1&J8bDI?YAM^(bLdr0xbY4xr_nU zk};PFi5SriUe;X4ENN>z(vo2<0f8f7?V4q`hnnvY0;t~Y2n?DgX)Gd*fjidb_V`~D4CO7}J zNZ~I+p@9_8wL#&p-jTT^u+Gf2>rLM6IY%F{cFG}J8T!L(^M|$@krtq$37=bg(+MU`^FEbNk?Sb%O!4RYXh2d!IoML84c8z-T1J)}vDTw%&tBP8h$P&&xN+fWr9l^GT5T zTBDM&38|8CdvBwoF6jAXK&feDrc8ddAU{^zXbWM^Bng zL<@R`{+6inv7V5MGQ}@jf-KwG1X8hdpo8!4ybF&`b?n5tu7HB}{|6aF2;U+wXf9%c z0o0Cx|EzuE=ubmC?(Fjj$pp=i`(M6-E~G$?8H2shw84PtA62G9#CT?w3YZQt6{0l? zbfMady%8sj)W2Ul?SzB%=AV!(<)bg6{ADbEvXuYR+DA|PO;F#!8*!SePg;BSX*b4< zCDRJCs`Tdk8q~<$R0j_jO8Aatv`ANr;cSj@*9L~O1>V*fpwor1yh=M0B6Kj8YpLk4 zfORV1-3bI=Y1y@nJ(hh8C@gSbqW}UK^}(?gUVXR5^Ds z{cb!+Bd?i#7>I(_pMgnRA5BENM`=a^+{_1#^C=$o*+{ew!Na9AwM?rZ2s?d!%-uQ^ z!LR@|HMmdWKW&Y-L77+3bk1RxbN9s)#YWBU2F>UnM9UlYQWSZ}JWbQxxh&1-|G5l4 zLerYv%>eF7P7G>`(U^TgSa?BaL1*vPvX@WOR{CYp>}Nj~WogW}Po6w^R=jsOviSl; z!v>=P_A-p3uoGsy_ut?)u&N2=SBIeuRE4Rx0H&E?`#i8qG0wu{{#n-fh%SwWtqY_U z0S>O+XlB7!8rAR~n3XgQXARQPLGx8qfX%}oVBlXh{?*}MFaC|hzfSy{fPa~dgh0~F zOhaHcC}bx2q%v0fQ%{~mNNfAqfBrKAsrG&Lxr~8$cHAb~O6xAPyq3XeZGwYLO1Qay zR)DR!Vbr;h93w$^R18Wj;u)=~s~I9a44ktYw;! za!J8Z?bCN8!q#}GY1F-x4Otj(*nLQ}$&YH84S^xnAQAE# zzn{dZ);@bzA}Dcd6+%kaQ3c()Dv!7gb;dZ``w6O*2;1Wri)a->Nkpuxfk)X~gSTJE z0BfUqE`v*ncb<7hq-$x_<1f%Sl9plM=bqMx<$? z){WrMz80LMC)Zc@yz2n+&0KY&y1Qjaw`8JWU5}@=lA44+R5lMijZTaF{PWLm#i8R7 zfRcb{Zy2U47EDRDLXJMa4ywGk0=%qjM!Gb8I6J}w{payUoCUE<-v|BcS6v$7GTCOR zTRsXWOzJ4@ubi-W6%4GAvX3Gsy>P7kPTf7+FC2b!(61BTNzD&nKV zr4A0l!IKepswUVeg_gHCe4;BWoA*axLMy2bss|(^5HNtrs#G%Cdn+rGh$O01$G8E) zOji3@k7HJv%S83!WXuO1Uj!!OKIDWFqy~h{yaGF{Q6g^9Y9@!(4jWpAyC1-{!+Z)S z7Ad&<3pf#T4^V*`cLf3o(>ai@VfOFv0>9DpV(L>OJQz$4PYj>730j--Vi(Ux)d(fs zoxPA95KSWe&_+K(Ln(V9g0gNzG6k7PB)Xe5!?X?qz`BVAl^W~~wuWS?Za8@o%xy=? zJZV$BFX~8#RUp<6*CuF0?EG3}y>u&#&!k$LsGWKNWvrNsR#F$vTBlEL|G%hzGLigW z>aVJrR~nbBOVo8&gX^1F6D>2+a5zM9l&DYCQyV32e@KngF#aVc8rmF$@}kiW2QDCE zwA(;SRT~nwZvm}X2E(63!}hI++nWf5aC&idI5HTF=c{_&@rTnY?O_lcP+f#tNkfBI zwGjwfHu>^(hWY7ZLk$}B75aHgS=gh4{QxwdUbsO>@vK89EaQYBb%@eRr zfzJ`e3(xvgU7fuLi_tQ3{_ixx*6qlno)siC8OEOidq=7Y?M})@A8ktZVhm@s+F(6& z!aIIVb(lj)_P$NLfi-n;juF}CfRIXAQSat8ThzXdNadKn@pN$zH(3Ma^c_U4Yo?J_ z!;6L0s;JhLMGYV)Xm1~sE0{fJx=_SoPX^-le!euFCmgLGHLJtj8JZ6Qp!$5NNO4LC zsa8QZU>vx<#l{b6IfP*45?Zilhz-62#Y2^0!-X()O6AMU)4=1MNJdc@v-8RYbC^Mu zS!v1#h$l^Dqa;6Q-36#(piO%pW()=rzL)e&pnz!9-UT&;NrE*pHF`O*h>Y3agWbyE zAQ{Ss#p)qXG7SIKu=fUWj9?*$WhbG0uQILLu;1l7X4pp(9gRO+Lnf<9j)4&mcegxapj$dPyj3sl|TX5 zjBwl7-Q#{E!UvZ|3;_=VvyaGD^p;)TmaoYCFkl@$iOx!bj{pX}sK9!ZkRgRWMhHqR zv++0~L$u~Egg|S`IDaK%SiTbU1VO_qAx{#LsDwO4NNr+RGMN|-3!X?0>4{G>HC2iK z3?b>-2E%z4AvG(r-h>>i=Mb;WHxAafLd7bxP>9aon6If4EV|olCP%2wmmC>RwnUPx zRmrwQFgYp_O13A=P> zrxV?Y<~saYZJ@1nwHp>zDa#YLEL7_lQ6y&p%pIml7`mn`p%oM>vMW^8Wr|TuhmoAB zW$%L-^*P@Pa?ARY^$pJealvO-V!q;JeQSg{S>Fcliply*DE|-MdFM^jxAtB+uVaG~ zkl)!6IGF#I!ZQD@uEoL+=f7ro{u>EffAS`r-?c}1`bzo+$1zy^po=xkU>Ds^Lu+Fv zQZ+5>o0_76C@eK9j&vEWxP)-5;3}8L*@jc3%>R9gw9qpy*ksW<^QWX)Yg(LvR5tkw zh_j_;FIE0Nmx9L7-(SdzC?WLiim-U2?zZ0Q3+kIhh@5I+wh5!DCR|)fxWv2vg1S7D z6IH$dcVJ#M1(Iy*Oo2pRMqi0y1#cCL0!*g-d>2r)qD-NrU6I70@EyF5#B_>7(eB_5 zV=j|1%yUE!lZZdMH?ejyx~DO^b1XLcwk7D(>E3l~8aG$%S5!Gn`TyTE5~DISa_o$u z8tHonvnw=GHSQy5n%)sN`>ufN_J1 zNSt)+31wln?U-$`%a@Ay=sN>Yo^(tRY(cI__k%kDb+N+bye|o|Qe@sC5h3l5@*J|s zOdl3V)}N?Q?Kx4Y{>6z3<|LAJ3A4&XCAOH;5&uGhC_vb*LkXR&><5FZ{o#c^%uRx7tcK4CA5oD>iXJx z=`!@o6+g}*P>?0aWGa#BPC-U$)q-wD%6^$mn(5Zon{cS2)vTksKfqZ>*j{`3CG`>M zY4zw@BQI&$mEFZ)htyn}AqmcMStgt|wvW*ob=ew5I-SeFU3S?5M4R#uA9Hhc;J~G9 z2^1G(V3qlF z03R|i%Uz)$2ddZaiV63*2l+wJu~j1G|0H)XU)DyjG>!_#X`9M=UKWXJSSa^F z?0#lkCK!&NtVRWAoj$n4yW!Fid010ZusJ3WU&aJF=BJ4k^yL6s$1&%o>|AgGpO4mL zwIDh~9O9`HfUe4yQA~v?k41b>{cPmJ%*=Pye}|CoszWu;LYhO_uH&UM59+r?*-I~@ zs*?P?%aOOE$L#EX1ug#TK03(U&DAm5V8$YP5hQIW7jx~=sl5ChP!Ra}>^3D$&a%$jgbq^7DST2oyUtBKdt)C{W` zUX!S)tx49@)zsIdYSJ|gHH}^ zNV%v!bv4=qPQc*+$xcO&nk_==fJpT-)p0hp9-6q@jxE^ zJ>X(>JlGL*qkM&2Y@!CcZlbAgo8waF7<^~8OSWNJS!cZ1_CqY})vPZ5h^@_Xxk+JQ z;s41QE|%Ja#usy3>YI-+z~KDy0Krvr(B*<=X&}P#f}jr>h+s|xIAkC?o&!-U#{2d0 zPb5&r0`JNzTJtA~B?<&X)}!ou0sCFbK3p5N-a{Z-5q}?X*~OX@GsBUz^#S76?r4d4 z?(fWlzHkv}v%PuR04Ht~!1)JK?SJy|A@Qm*qY_p2zZi_dl?*1JU(9HK1knEW$KH}F zyYd(~g4P}&4%?l?68BUr@sJ?l{b{xg_j*$Z44POoHFKXJbH@Nv`mv2&nY=%fKb2&r zSihz6#I!2=bFvWcy%dCN( zhGTMa$vFvR5;5mwyzDB#(dgAy6oHMMX9Ctz4&7}k>$HU21%s>ba)@2P9jBZYAa)!K_HhXwiWQCfCm$O!y;`n64C${1MH z&2X~8ZA`AX1Mz|qVqN|*Xg_we{d%%>tbLG!or5dsCr}s_iTzE*F3^a;pov`qGgkv{ zI|i6St;<;ZvB;#BNZP|$kGf1(ZJm{1upV2F^$wWwQSiw%h&bn4hSVoJBiE|_DrIQkX2U< zTbBXQKN)WRx(Y!piR9{o-tg;ZuczDgtRH{FgN!G5T z-Mdw2H#}Ny>BGOl>OwPIRkWaXD%H5ZuoHlG8uSoGP_b$_%wjjNm`0|lM7s&$XeL>! zSl@>9Oe!+jy3@*A1PWr$BB2 zXC!hsmqJP+I}4Kvh>E~Nu!n9q=Xy8XP?v8(JZND_AnSMIH3Hv2Fe zrkh*pts+RZTZv0N?D^&5~hr7E>s>fjX0W(F}ocpSXaMQrC|Qf z6vm1vx2P2OcT8cdm~xv+VW*Nb##NdL4b~DNYz~BP8lE35MaT%$(G%#*nARA9s2Ym< z-vNNj`eG4))fHeTfl_&>Msi|IyA5wRIWW6@m|>_1b<|MmVLgn}t8-(Krz2p5bI*_& zvBvohRaNXlO8u<^A%9gzfTZF+h?N6KYV3npCxE1?KInFUa^qNz(f8*f8*Uc?rklY_ z72AP{Xg6a^g$tRmiJ~8jTAa>WXv1_d&W3|o434Pv5W5Sl7tM?}W$V0J3j>F?+8U2U znU-~9nCY3!3k;qBdnlr3zpx(I+fpkO_niD%`)<%dFTUI7yDOBYQ zX%OdJR3UHKDA?KO2yeIPB-DkXlIc@#e`wA7%rc^lr+XcEbu<}JEq z%=QJTozm4!z(l(?d&K5T_fMzNSh6!%F{Q{df$@W!QcbSQeo!RNgAyd3sm*rH@&0nl zj`=^4YCjBl&{_#`qp56mZ+iwFu}m|VnTb$bp;TG3m^K>^7(~OGgFw$4Fo?!r3f8tb z90&ZKy(y9r7R$i!;%KT`D+0vy9^;*JYjadwSaB}A`)_R+L;bbp0^iyU4<54&`))09 zM1ME;e!O-3m~uW;33yTszq~Dw6-OrKc?)kFv$xn8RUqV)tj;V>RLhZHI2%P5y6D^_ zJFYq5n2dG_@W$OxW+k+5zcmJFTN8 zsA#PB1|&qJ*>KXhe*p?e*IOT=XD5UGmq6BupuIKO!HT`%oCm#XI>j z;q+@EpsOw@9bx0qs%kA53R{nPgLii2&z7#gEs&x?8_Rhadpm@yvHI~ED;$p4ID!+6 zo@Nki*Fp)7}{< zQoe};EU2l^hrQT~-)-fWu#|Z3Ux0ym+ET`FOrs|xGdDxcrmSTE*Vb6O;3W=Hy}c`f z)?Bo-np&k*qX1_&B=nI<3-&Xb{Zzvl1(nl21j6duof(;AosWmRAE#Cwem<#`KQa6L zrvA{xb39@OC9nsx%al&FF>-5xz`{xbi+5s8ehb8DnbJJ*OmDG{!`U;#r~#I%qvA>0`v!4V0p)aEW#DMy;j>*@POeW3%yg;$MvFLwF6NS$9qtE$ z{<>WjY6BXE?Aq51CaX&7^lR_=(A@_o=WrqcFdOC zfuJ}*dkEh&VEqm;PE!wJIsWotNZU;Dq!~FI@Q#3t8zFlokzn8i7e4+KtW3zgQeL6F zokc==iJimikjK&e+^bm3J_Z(=Le}3feB$*y$Lgo?Kxu<;Mh+n{qmQJrJI}@W6KfR| z2@q1v9xRYU6@=8X$Cq(nuecO`FPMeSB=TDS)xhxQ7YrH>$=a(>gqm3x4yoFQ0$?~K zCr4(RR7M4%Huo59Hdo}ndFF{06^k}S~%%$#eXu!yhq2W{x4ZlaOjsd1v zhk38v*O@<$x)==Fha*9WmPeQ}JfV`w^#Le8mZ}_A#?h5TcVB?iaxST*-2NgOF9w{Z z6n{$=9&oq9t81gy;c6B_IY3Y}?DVo>74x#X5#nO4l?NHEE~?c8Wl5(xW8u8#7wC2| zT)vU5;H}utLz|(p3lM_i71AP6&SG_oi#0vZz~#_~tklqxlBvTav@}jEXJ{`8qaBWG z32*TJcx{Fh7oq!rr_4w#`@v@3$Op#f2gpy?2H6WY*H)&jBN5{a>S9j9x{k75fdCv# zQz7DDXI&;_9R&oLQ5;RoXu9h&sPr+UfpgP;z}q?&kN!UvL%a7MR}LOu3c4pCNLzs$ zTaSUEH57RN11Jc-X4IT|D_~lBfB@m4I_zA>@M~<4MA9 zGpGv*tZ8*mpgE6Iaf^D{Vgf6XNUuktu}Fd^suPMtGf0fc=nac9eSUd92c_((A_t}H z^g{gXBUblJ4YXwRrbU?|1nXZ0zfmo)! zpIRTwH1$)_W0*#5xdoO7Px=CVzb^M@G}RFi7(N*yutca`;>~$I^gPe4G95A|ct6bzrb9jYLAW@5pmi$ei9 zQ`CQ}ckg5A{3XCemP_$c$W6OmOmyoqKx{wta)i-KuOR43Jm6FFC~wnXFcz711iUs3 zwE&y;)lBpw>BU2$4MU@T+BlVQoy0~T7nSAo{#DfVa?gFdH-8Q2tF@K1(SI!>(vgD} z;ql%9;HBf4K0^V3D8p8r(SO}KsF}sUTU3F^836FsC7GEByzUZSy}H)14nc4JU;6VD zH2u8U12l=P3G3e+MravZPNv1_NcCS2CN7b1S_)F(hW;B$@J3-&!J7oX%(;R#D`<&N z1s&0!Cy_Gy3OrIsuR~&hX3)27CvSx#=mYHGT?@sxo#kS2uC#fF6KwaxFdu^50E45c zp`kDEjt?9T=Mf;v@r3Rm)UIlpVf_;w$a%th`mgEOjo_vP`0}rfd19|f8_uJ6ThBr? zE0!(knx?22_9w`>tZOU7`WFI*gBAXu^%;Wn0FrQYc0;k4oS|4%$X|ef(SV1(KLT3Y z!&Mq~l+knRd`Pyp8t%wV;39_GY}Q93ftALepZ~8cfXh0u3{H-%^)7p2YyD>Lt0%_K zXC3+;XYzO?yJXj}Hir;gGKDoyLR{7cj0NPblOc?$s^EAA)38S49q{D%{FRF5Tfs+> z^(T?sgA<+)fu?;M5=yfbECp78?c0%N-+@PUW@gyF6M>kY?%adCvLNnk14%~gyO6l* zMJQRks_3dkwW^e@-|aO#)zbcN)JY7{a4_)|B6xkxSCOYzy*Hm~si8NwWf@fS^hoc* zr^Yl$tG*7dtsfzgo-w`%UqhaZDT%LnHBYyy;OhvEtm(f845_++S8w3tIxqY5WJT#I zP->69JbL;@@B=0L)80K#XY{MQe?8rq7XVR;X$*?2q|!bVE5=2HXUoCo5X2h4kMmMF z0UkmT9S$c}9sSeQMIa_JIHg5q0;co4xB8hwRb^iA;?FkZ??qi8RVY{E5cw0HvhTyQ z*lwy_?pOG5Uxwlnp0Xbh{I1V1AEKgUmtu&+nSbanr$|(;Y~K)2_%XsR+rqp0+2-^O z91x}FofJUN^{e`n_vW*`n^S4ANzSf;7uAeCdiHEr#MxTsiqz6B=4(WtB=CBJFAJY0 zU@e|K)?51AsQjCLUL2izi@}r&A2Dduxo{4JC=%cvGCSNoCSd3+Ccsf-!r%Go`v;y% z*uHgvjEVoDdZD*7hAzz4$9$#SPx5@H-A~mEW&ngf$5R~wHslPj`-OnNEQ9-?bsfAn(P-Rt|*Yhz%Sc;wqO9e$>63jakn~%(j`$4I) zLYDSWL1_~elr~X8X%`igCR9O~*&;DY4qZiRMalU=3LTfTSVKAg?Sn;>3R&7i1*H{L zP})@mDeod>XUkUX+{Ct>$+`63NKlQ=_2A|@;l_4gP-G(g4QPruc~^)96!$O3=L{4)!1S(< zqfP@-Z}maY5cW#ge!d3zO1nSvWj!w?7aQ^Vaw8sc61rBo4GryRFm{6y zQwW7R-y^^B9k7dJl|a>*<-TARya3v0I#^K*=}I#Qa$dxvIx{uF;ZStT(Myav@>;(*}l%=n7Zeu;sXg@K6Vm%}5SXyaD^ z?3Bawr=zAfsj_0IX_5DduL1+)csojb(kaChCMeG3>jr-CBX82j^<#ZjUQ>B_&QpeQ z-f)$^!USaSc6@o1zSdjya$EiaXtA1x$}T2d6gcxmmyPm4=MXu`-8n&(D_cEX0R@*^ zan|d=?5Tsh!z{vBzXVftv{Lcq3jttWoH(hd``}Vat1({33q#u6eb!icNzlM&F~} z3$L~tn&Ex-s+D;cWTt(N^MP0dl5;G_*ZCt2-BPurm9YL^3Wua3qJ1B~u}2>3pRxe` z4eihd@fmG{R^-5cgOF&=~AA5 zEX$&zqbct59|05Rg;fH(-I5`(#p(p`Fi}^S)vz`X{S2$!SS~CcA)fNk2E#(dW6e`= ztl7VN8n2rA0IMM9)a{Q^P%>!k4|9TVG?*&4l^+hu=t2Jd1v&E!1`?qF&c4-Ogie^K zE{D+DKLHtK6T%gABZ_WStHYd?vo<-+VpIWaA> zS!ESss;GD^miT!JIT14w@pZ{6sx>~hUeDVN!#@M#zH_i8gmSz0o40oya|Z<(l%_O_ z4H|UVh=x4bl-`qXH|O6%NfZ-AT{h%aOAW#F4J^wg$2q!?INx>f%ddQn{0sgNxezj1Q9q8($k@o-V9mFz9A;4fam z9~aM)HSoV`xEOC>LtWGEq)c<4gJWDQ??*GTGhuUOD$hW`m4y~&a9~z_W+Q|%g(3S3 zZ?ku2=dmt~Zr*M3w4<-WaC(Mm*+uh88!DOpqK#uuR5n3bGG4NyC5z)kd)Y6puw8X^ zxi2ZkU~NcNIjaIgE!%eGT>^ zA{Hhw_9C^61A_eY43{fd%!>9?A6zvZUwL71@PXhEi=(hy75LKo?ZZ`pMdDKKIPbdm z8`dxNrT2UD9Luo;!m6QZxUPk{p!^xlF1%v+zWgkW8(=W)Vt@!5jV@S0!sN+c&2qsn zE-wj+?^DV?7$MJa^6sMtCT*OrOJyp(O zhS%_qj#)ySk}ZG!#&B32`4SFCCz4$^YY{!`jrzxk`Tv7P2*PIh+#XZp0#-Amki@aQ z1otWEd*ec}cAxj|KkD-T0qYRT?Ahj0b7@UzY0x4>*zv&t;{Q+?j;l8U!oqtAS7sdC zAwFB}5HC|Z#7ntD+>CMZeiVp*?4a~7WF6x>6a*{TO|m$A|b*k+6e4rmogvSV04)RASibkjg>xf*H+w z>7$zTBdRD}ijwa#REOb@c|UyAoI;B#E85+m1sujCsr%!R8;Zk5tqC}20-WWBI%8wL zbmfof0S7G~Oif(q`=QTy{U3L2Oi#JaGEiP_3#=q2@CYHxcDH8-z-*`C~8@TTfh868e17Al}*WGMN?DXPkH5ztj01NVjcKHO^rSN3F{4;u=u;3s}mbWcm2& zUKpp!dI7^%rR5UH63ZNc8w+ezneV#41zr(Ai{$P>0Cs1XQ2HvJ)Cb!+TS&XOdlE-5 zDy5^^y9cDrLGuzG->OA{){&)|7T2<{jG7F2hkw;P|F2~UI!D5bwU6RT)IK0Br@;0` zV9>mrWR6Bc#{g5TQAPcyxsPZa(4{B5H@})<)P=m{*Bz;PlxQCXq*%B+8Mg63(rCo# z_7;BK9ZMmpKh5-pkaz6Y?b|dW%rS?jNKBkY4QA#U0kbv=Ro)O{W)e?_^k~@wV0cV> zN3bCmU`(qCS>@W0oVcvBnnT_m|83Tv^b+4BW6X>(5&2Hr(wq2Ay)h!>&HJWfFSzuH z+?CQk_z*a1qlN0WuL;&|Z#s;LE;%DXxzTRHvwvRzD@1VxMe#i}UHrN|E^_dk244OBT`wUZlvCrIuKC_8;{ST2m zmAklSgF_lT9PEx4*u_v0-^C!q&x0!*pX-E@Xj=A2=wxmz!Z7p}UiLV`v$s%HasCP! zH`224txB=2v}eyQ4*6CWadFPq%7ntCW;}bYcW^RQa}I*C&2b>gd%@e|#}U>x)TYVc zCuMIB?TPZRD1EeLxm7F9G%hY_YBwifJx476d_WIqx9$FsrtJzF38S%1Wx|SfZTAD_ErTCy zZBK?-2oEn|cL~SQeIWV4Y4i-PdX!*fZ1EVZ@NkTHRs?>!&ohh%8m7qT8e#MT#VEfI z#G^8zL!7aUXT^h3*Nrf?{)Rj-zd*Ql$>ZwnKF1yQmJk|fm(Z3jR&uQ10_}An3J@2~ zZ?CPik zE8O6%X&jsx-s6K-euH%pAjcvC3GV=0`T;b2TzGtugtK?Xw3Q?Q43Nd}Kc0KC!pUS1 zluMC@wF`wah4IoM9t-!gqPVT?Z)zEy{d1_erMKa_tSrz(s_;%osaCg@mXzsY=MgG` z#&5&HLYKuG&U99eSJ_NwIslf95cuvo2qNA{O6Vh^TnkNGe}LS=(ij_u&RnV2ZMi2i za_QaXntRt$!`cfF`&i)FC8AxY$fC}bl#O9Ai$XK3y%Dxn;&J9@ddr!I=)?EjACU@z zqWRp(dr7rW(DJDq06ZxMCx6Rw?FNvQPq~z%VF@+1pF&d2W1{Y7eyoqnzYLnWTWQX) zmD!67)phvp;Zy`T3*zLL-+^R2rUfFLZ$=OKOimkx?P-AW&P-+jJ|eIQB5!c&zdT!Cr3wK zxk*gpm`7xC`ld7m6(;E@|l zJOH}`I)D^IIJ}tKNO?1a?alEheeI8_iI}|wVezU8QkYH5Blebj%*O*ix>8&rLXS9`b1J5N{wzkOuU3hk zL*9#XKOZFqYACr_Bv5LBgQ{|dJ7j{3V*Ht4VSGqW}%9E!de=`NA{G(U^IB%~D{3hC_||4NXU6xI(HWs@0r~t;%8FC@pehVPlT36Zrhs=6+C{ z?PBGrs3}`ASntl~t96*W1K-(u;On?MG8iol+Se7Hi|Oh7TcR)OtSe6QR2*Fi@_YR1 z&*;N&9LzogGUWq%I}!Bx5D@HcFgtRAwvt+_r7UbM@Ms@Kfnau<^}xFVoXWa@mx(SR z>ctBRZd`Ak;zB{3MS!@=@n}BzM>$KJy#qP$Vd;vqk@6Xdi#i&z4=pG>8HYAMK@{sw zxDtlLyw({Yh5mP>di_DYj#96q)$15}IjolQqMEeqe?Vs_g%gOS8YZZ%L{GqZF&LK$ zX56I)j}SRaS*{0kMGYNibD$f}Zh&L_M|?wxv&tBj#UTS7MsbvuuiiQ$SR#f6h-39Z zsQMh84%)ETSQ3Sht&l0k92+FW$twYiT z#l?yuUq-?dikVf0k?Kf>T>=wfRhqTSv7jU~%AK|B5nHb-!=Z8)iTbsi2P*2vIXGJ4 z5b2O=MU4bLxL3G$m_9Q9AgEFaL^^%!3)WI}St`NTl7x@+QgD6j8-7w#wqYCQYW9<) zG?i;awpWry`bq3Yey*16B1vk+acQB*rpQ~%q_oy(_6U^7<+lXIbpr{1f z6xtGcUA}H%r7$tADHl6al8VCIuAJ1QNJE%?(!)d^Qqxqiw@D>2=ip>xXRXwK4;)e& z((~ow&Kgo2t(V-uWhH-El$ti8D7?pq&|O$&wITc25VG5rlZ5O{(TQKF2HgSl^Z<5C zl&Pd2piX2f({fs2Wv$+jm&#HPU0OkG-w1%(=hFW9adK51o?3&BU2Fq#(-SZ=hPijF zn2mHedd!L}Ub-H=QUd9=4pY_7r?O4kR<`1h`fnyljrhQZQun6pE&?g4Ohx}0k?ohH zVo#{(KP}lclGIv-J8p^)^#6W=JCWG0(Mr2C-pbbdM)*|N7_E0q*-&p+xV}zrQ|dtdU4hj(F417gPpO0e zlV%zpmZ+@qfeCXcTMlKA#teWSIqpBCgErzNcsha`$k z{)s@E@l63`yGCTA+cW=2eEp)_dn<=KE!zzY#djYisBX&dL|`A;Q`h4;LmiT>E15^1 z!FIX!uIe+=oX&5NL(ZKZP&Nj~2n*>7ax~#D2^3#rXO?PQ&piu8&^-n3mI*6;`M8`nC#id+_EH|VKNgx0u4|AU(ntzFBs<`h;p=p&SzF8)6gFv|oecHC1^ zQlE{8ERm~U68i;_C4civOwRr#J8@CjhS98bxBG>#>vGph+L;EzaP}x1*r<<|TA+(( z4@M#A8Gs{Iw%%2jXw1GTDNXC9NGB<3hY(g6G9{4ZsX)b*Hp8KZ55JQy6_KT)JeL#k z>uJ_;&_HNRNK3~uBeN5BTGyvjez7_pt!6E8)b)KTb0BT)3Ts}L^zvCO`2gk1ga(G(gqclC-8$BYEMdbqpagG>+nT6 zzwl&}-qGQS~D}|Eq0a7dm zCL+#nOX&8V2okgx-u-)*;AwlGkhTzO0ErL|49nNc3>hXcO5pQC(`s=Y)i3Z|%zb*| z6%p?7@E-HbV&yp>M0#P{5qhJZE$lx+A62S7KRqb5$HICMe|F*W5qf)mS7dXs3y%rB z$c@#&&oLzVVZh<(w6!l;M=&u=6)w$%Uz)+^0qf^t0+*=E?FSU>L&J~itYA=ncV~-Y zX+C!lb@}TgiQ(CtzEffTNPY5le;3W_-yfuoM!#yOZU5W^B2 zzqEyIMI?>HnvzQUJt`7uuCop(JUJ5c#uL%{{v=BE1l1K>P73|Wcp4J<2MaF_EMoW1 zLhCC9=Y)N12}j9@vx#=VW-s%FCew?`JV6Z&rnR4|2-Bg4YGAO6Xm#=4V~~{1v&;4U zrf_VF-X6Ue5n6-3oeDR#=$+9Qi}58Y{&_LJvx*Pf*~ecj@!=DSaeq`R+}@(M4d1f} z^@lQnPAC+iYnqbW1mK0^m{e_PnHO`nY)z{S}1I;lB(K!Ig~ll^Mv!Ub)5NB*A_j?j!6 zs-c@S?zhCXY+^A?@IvIk=4ZV3L@KSb0;*vjh=*bS4o~MGJeEb(*F5$sO}Pwz?I4}~ z9cYM!EoGFSwo~3yW7g@A^d?2EkJNn6syTb1B#oeZUD$7w-j@DQ+7V2Gy=DyuH_7DM z#f1w-=^JEhWL*WHN$;)=&yPukA4lm^acc%rd4F+Xdb>Wu z_-S#$Y1cbj4n~ef$q@~h%jIGXuUrZ4ge8Uh+Vx${e}RqMorU(%`evDVOR&yjWs%Fp z83^=zKEa{P_OX%cAU(U~Qf;OEQepLIz1d{CGqG^fXuW-$gvX<~)Q3R1at5z=jmSAi z{tv+emiVs1Pown_#jLGk^iA|tg=J&(&I!cAN#sNEQkx?|?QvxPh=LL}e44ic7_?6) z+%QI;s4pnIJ4RowA6A&tp^wymUs&FuZ?1n_xU@s>+4^u$k{@1<^&W*hr4M*H_d{A- z-os*f_W@XV7Jz*O(H%TsHmBl1NFRed1p{~Z#6nA_-mSZZ1)cgHlTLyR@Y(KuAPnq@ zDtCc;a$=441bX2o6exZ@N5-sG5D?t5RfRV@^%gx}_^}h_aRAwzBl#E!K2{At6J7i$ z2jtBs@pXdGZ}z^j73bu@E?urf+kq)7SJaw4=ue#O;2RQTkR;}Qpp5-U(w zR+agV0Tn-p){8dDZ{Rj4NMj0rY0o+;uHRFbVnL{XDC}YB_4=WO!z{hsJQwzLV6Vaj zmOdkVEa(`{euW<`y+Pk!UULtiis@Z5aqtXkU^ssK0Q?>#iozC>3wIW7!5@*={hewY z9z!1m_O3?Tpw}0knW?Ars|p8=)7!&0_^`q_J(FivG>74=Bn{^vJS`Ms+E_P_x(5^3 z`jZrpnF=fdY#gD9x>BSJ+KO--;O46@|Voc(hV?;j0_BHif?=#lp|8 zlC7?$+;I@h5ydEnA`H3Or%DRIXdRpk7m|V#5l*hgxjdnYZ_}puqtR4s;ZlBX9$_1} zE=6T_<#Dw0I-qn_G)E38esiosu*;M!@Zb5a`T@631svV5oRURK z9x3A!exQhgL8FYd0}=;-HGOR;QAY;Nd!R14*(jo8fGHNtP6j(4n*t)=C-lXIdzI0)?O>_! z&E{0@OqAgs1$5{+8$|S+0a0@%RH(T`m5!r-e4!c>C`!rM++`&fJrE^-+*fioiOYxR z_|r@&c9zu|myN3VV@}$asFao)K;hgFJ{kGM z38>C&m3tMe;^!ya(*VSW4*vig7b_JQqa)6#20of;4+khRXueiBZK9sdPemGjNdQmh z6h2DTsss+LlEp)6QBxgJGeGs1*{(2!SqN%q*+K|au@J9AG3XeudM+PgA>IR2 zdMH-|cmg4$9Sqrg%^q5d&Up?Hl{L5k;xU}FnbBT@Fzz-nVqb_b7-qNvT_)`IMM%^5 zdr*GP2(BTNC<;pMVxZWbuJxewiY^Byv)JX%M-Z2T3~e45Qx4*}g+FenPmKQy%)gO| zX>Z|J+((6nH`Kes--tBME&OLgIEy4Ao$mq!xX$BuzBMF{&c}4=d<3Y@cOgRTe0;m- z;epOaH0TVz$RnLksG|QKH)RSDg6c0WTE>C8%FJpE}7p+0ClKSO<;nB~o(%JVblLpPdgZHulFsv&Dqr@IQtq;0+Q5>ZSSCP)8kM$k2?{$`3u-1TsidocDr2dA4MNg>OjWJX;J3zG3yadEyvw-<>pL+iC+uQlEF~#2 zWcy4znLlG>edIS0;i~`rv#@!uK30@PH7EO@G^^@=S#(>rxuV5Hp;_vj)RKzMDN(da zv44K6G!jUve^Q;x{Zk0De{Pfe2RLH~6*b^PI_PJBR(6cbkl>F+S0E_PdbM^2^x!{I z5YwY(;f?uvLt(qAdi^p2AmA&R&$$}UUl`n_E#MU{rRo#Mf`PkIc!)l)lQ#=%~~a>TJ=0N!OqVK%tSxYrQR;geRDZ+oWF0$5p0qo!dRmDrWz zkN4xGrg^T=ZTJmr=aVIW%_s62&3lee~4o~}fJkYgo0j_C(iZ+K5 zbb^6f3d3gTV|HV*oLMbRe9kr;Oq_zw4M+*tH{#jNsSIJ(Xt?oe{R{J|5EfVlZU?yR z|6yKr6EYwXTLs^A_Hv^(Lk`*%i{A4*1U(>U1K{{^zYybyVrP#L? zPMxW@wcQJ%elNQp!3vL0wBTNG_>5tJf;~=ejt8|R&~UX*ac^PREWNFk1W?)oWDasg zhbqjOr6=S79dq3OW=p)R!ov9BoH5Y}j+=m%-)RQz^RuTm$2oYTh z3Mx*>pb1^@4fG>ruyc1F5$7>Ha(AEr_;XBk?_@ab-o-K>Rp@-V_c5Fn=CDk%sK_X- ztCU;k3h_FXsZQ~$_`e&prcLDh%fb;u42l9CjMd+yY0b*+#tXa6*1Pf|YL%K|qWXRe z=l?9eqB}~oY*&9!EddTO#1xi`1TOg=IKTB6CMis?#tA&1O)`-G}6ks7pAm$G`+~lE0DR zJOMz!zMrJ=h3B9wW|Rr0CzmKbRY7rN1x3Ptjbeol^)%3YC4Lq`StX!@_dJwUt?U4! z5ZY8G5+1L&+Hp4T_ec(lj(V@3Up$u%3zCiTh{aOA?QRSVMz#da3BGW z$d#j>J8CyF{7PY)&2iR(@U-PAy;Tu-pVaVj zKC20BW^K!+X7!O*oDksMF(`asL`)ib~`w}tJ zE;$z!S5=_?zy_ z>a3fHyR5&Sh`pI1iRs3C(ct_Uq#7(f(>$V+ao+(ihNGV33u?jKL)x0D?wdr!he`30 zrWT3ehnVo6^*1)@yF_r*Q&F-?l=4NjVX`9Cunwt)qV~NfbktMP8CRlHB*Roirg0rI z*$p9f>v=Ntz7UdUUSvLKb`>d!G8zsOOD2pFMYL%sQBg+Lzd{)$3QZ{LEL4@ThA`L!~xAwwBmh=|;BNtXHKtw$$i$N2I*@ui=Oe-}zBZ^{U zkz&%Ps2sXY3VSWUrU{Esym789JeKCltW||_NVKRKn6|@EF}KnTwr5#0gsLdUG+!~u zvdf1k#+;&JP|Vz9gx68jjL#4hOBK}afgqLd^GRXy)_QlIXwZc(@p1-Xu!>%a0O;WO zUdpE=mlmqhttH=3CxzC6_nzsbFu8rzV;%U->m{cJniBd+Kgz6$A z5?3-}&B`(&TsZ)9eHpP-mk${BFBtxuVQzoTr@Y4J%&qYr_;+E?ZS;A=zDA<;5>&Yd z41aADx|ZuLW6^U>4HIq6;KyzQtFT6`%Pm>B2bi@7aj$%tX`fpd+(sWW;$>tuoNqwK zehTd{xz)5^@#%e2n7I(g3U*|9-xhXXs86i&2J*E+^t0#*hFf%YsW zjk;Vp&Hk<;>1QTwRZ2QslC0NJ%z%d7au^lfCfflr;9mu1C4C*3>(F0XEZbn(FBcGC z0ToVr5OLq2nM@KVD5#x)(KH~9PXvE~C!grWEJ*9cH#@c7CSb^}ED<=5#1t?nUmLXE zKuz2lM2k@V^q+!aaz<;xM0YqIz5fL*8lf;E{cnn-2`~RzhMPdt=&QmrFF*c`qwvS8 zOaipt25~9ZttF;HRZy1eV(P^rg^UyzM5D*$z%-$uU=)y}{*TmB+=( z0(&B=nO9wm6_yKaD2r6pmjU}&1NC{py;t}N@{K^1z~GQ?KDza!>yT#_tW8Pb6AC5J z62SQ5^UyI_v&2_@v6IVmNmwGeVMkawfoz2AQd1$~XP2*k%1<>gdnxzgV(xNz8{?Xg zijjy2fkpFN5td7RN#sQo4HQLL5->t#3_)mI7ePs5uzmql-f-Bwa?=%CsthZLTn*%J ztK;VDw9kL~`Dd|Bq*t^}8yIuVdpd0wVS`4&*7pK7+6um%!!$B_tqR}3lv`5R-ZBr>srMw*}-JxV~mE5 zD4&<X41Z5zRbjL3^tK2#gE6p;4ipaDPVdPR8!Me_VPtY|Q{git zkFi}PIPk-R&gEcF{cac=8&jR2{SI*LcbTCF(af%f!?*n&Ahib8_s>JaYevK!52#V) zPQVNL$e8^Ba71fy87p5dz;KA<|HLs}2gzC|S$*o_T%7e57S&i7$8#xE#`8CjgE6C$ zA|^n={&qZM&%6zRK@;bK&D`I?L&rdS0DI~wP8;c{v#Rp5xLgpH$jxv-{5#C(CR4H3 zE5?Wds6e;(M(1@W3Xo5p6hqIL`YQXaFRu!M3Vo8GPs-!fz1VP=PsXV31%^YeWl7VQ z^^o7j^l^D)N3sNeG*mE1Wdy<)9*7yM~5A+Y(yv}WkhgLTZ{-L zBEKLCV}bd4(51?l#vBLJ>Y&T^70Yor&?`qi*#_J_TuaVRg^Gw zx?w6p=%{?zA3^Hf2UbL^C*Zn_$Ia_fvhy);oKJ{27htNhWD|J*r-0j^;n9PY@p7Ke z2|*_=LF_L8Q5p*$ZV43Pa#08(l+S8cWXQffL}&ZIM1CIU**Yq}pX^RXMyM~Vh^699 zs35*%>Rb}_YfO7G?PuAD>leML6X__G=__>Xq>mMeDsmbVedMsH4og?#4;!|uI)p3LaeUQblev6Abv6oUGlDLgQq<+Bb<_n@kD|IvM{qrL znWof5|6`$L=hDf=X@z+^<0Q!c!`Yj_RaI?&;A`(Ya0kH4Ac~@ZqJpA;Ln*p@^cdxbAT6^!chjZ^a`%qc#`UFxk7cbY0p=WTAPN|P=GCz?rvC&A1FAFJSN=ZE2I z3GZT8PWzd<_vx))vPzC;hH3tpuI!*22G={A*r(c+K3$;zugR!Vc@HeD{Z%`^tXe+} zn_gBOdJp}mdSUgn{OTs}V^ynerec%+y2)>+>-O}z{G(b)y)LOiI3D>$OM_jEJgz1h zIO;DJ>Qq{w3teh+6{v+9dZc5ZQif`63RG_Or-4ciRt750ZVW3g;w&7XR9Xcng;G_3 zvR1y(Ezkp$`fNTC4A6K=Q|y?V_QR{V=O{p1UcFzc(&fDJJj zxcab;oDwuRKZDfGRWu#b^T{Z7BIU3Hw8}?>crCY$2W8<=C~F&WAV^Z62t92Ph<3# zkKUa>oC@NcN0n$6k18mG596KxET+gM`a6Fh5)3R7!?h*0vIuTE!iisb9mA!0+Ivfe zZb2t$Mx;zNXrJFuI1~phw-{TZLCa;H4q7r)86mj35UjkodAhpTI8I258obnXRbj%~ zdGKyR2PjOa#pe^j^k4%Fz(X7e&{r^}C{h(C^c6!cc7z=b(4$S6q_&4io;~BS|x#>?!AtA~`{*=0!?ANY9||45j-*&1fRr-w;?M^f8W1#nu7e9@q2*bZY!l1^C4g zfxjqF-^{#DZcIRKRi)z%cu($zFNb3&Pjb~k;6Lg(KsqK@(=pgEw>_?tXSZVztK-CS za8K@PgU>L+TjH^p>&@8I;`oaWxKoRF!<+HRgZUW$bCWS@n|r(FBw|jp0N0!jm{WP6 z@4vBWY-V~ZJ3g54+lFJ$iiQExP@Detiz>xkvCxFjCma5F79TUoL5aB$m=lUu&@K+s z7jC1`FAwqyZ-XaAw4I-O9s9yC<##lOTQ`geJPy*mSt7Ro4Dy^h6~8FqOdNwVG0!j; zN2o0{4+(Z1NvTE+#4qstHoTZAqT)jj05n_xunzxD#Otz#eWyAa(@i z_3sO@ZwYWRKyyQbjZRK!y=Hh7K@jWwJz0DqbUGzmxXlZrS4F?z}&jlWA!W%wku zb(l|$jwaz9{9rcVa}522oCI%>e;6(E1G<5a0>pkueJnO~A&6 z57LRE#8}akMEARs=+7R@nww$Nu-j|B;maDteY=qIU$;}bWCo>k z@+cjUM5SsBB%PgNh<>n%=n!s|n~f>`TQt!}8;KqsFhIjU)41urZ9-Yg8jy+}*jqMu zEs*HE{?uGk`%>H7@R{YXfq!4_%bt`I#WntP-tY`Or>qCjt$CzpG1C!jY)=~HYzw4L z{G>mXTFCjkTV8Q!HW=9A3M&12D$$AkiQZX91{UIxVqXc02{Vkxv<&hx!ur988kXl;}Q=j1rR3AYu)%4KY;g z6)slNmU6l?jmxC;E>`3fOEM`di5kZe?SgG%gS`zN<1@+itwh&G5`BL&4ntVcVX9Ak zs9ikO2T!)zM3QAZB0lEUeZ;mjpUq@o;aFUx66*WODb)9GqmF^0>obXp6?7-1JGv5eOCg%jj`BOJ;EE#2`Kw4nE_d9* zo|Loud6F^X__DziZuS0ljTp|(M1NXOiuMd9da8tkR;Lm@#65bH8+>!CD-LhyFpS*2 zk6~zo59<(pHg9BPXM>tQW^w&mrcizi&Jf;ksU^vO#d?PD$Qs2}df+osL!pBsNHh#p z*q~)=qA&I!dcEU-fGLLEg)}K03#KOhcsS+1T94?mjw2)M!`u?;-S3|vN52harJ~YO_sgI94P4&^>9^Huy zKNWF%bR+s)SE8M;3(SxZMpM(^BpO;JnWX1SCpG@>#gy~>Ov-7E1KSMOvT1@pf)kx5 z{NCjI42=H<{fOGi2hzhA#3XCUFAB4joCfC(|R(@cbVW zLs@72{X=gvBY zhRyIVo<)WXCo5wb&;J=PhJrfTfp9}WqN^&Z3-Y2i#YwD4Jq2hg_w|U zDmyWdqiQ5pzy=+;?2yegmt5v)O8cZfsW!7{8AtNMDU|aDcf^mqDLs&bbQ05B?8?n& zNnK$E(Pdn-)E1PkU>7Z1b{u!a+%(ER&yf+zaZtYp>1@s6+)ZtpUXLT8X6(@qytIfy z5?arSyf=`)cb}z+d7BT>w!AjpeJ#@YK6B+pN=GduJ#nKc zoe@F$`}^Vik2}!_+S%3M^(~zHy9Msr%%G)E*JNi?frJb)9L)|b=9S`P0nL5y@rELd z1F$={+{fHbYj|Gy*9t0oiE}1%**@*b@Q2(fJLcp3Z-#BC!W-VOQn-cm{xJfBr~y%T zF1CjoZ5bDS#AzQ+FW@#PEhGbjxiM#tCDmoT2Dan={)Qz@u_V)XAk{tx*IOGj;5fL7 zE^21*D52U%ji$o4n-E*$V)fYA`E1I+H;rgM=QLw(eV&GYeAXG;YSlw1h0@#=Olzw7-O0InBmy-~h8h zCWdD-%RzjU2=@w^RGX!7L_Y~2$!lD*Y+jZEaYWRC$bK|ji!zAzi=aU}o1^4vIBDCr zny4mb&2pIGQ@(7-@ujTy2a{3{-XKWc`Hbp8Ijy*s@6I8ak9n8y6}$K?Ha=bNyi$WG zz8V|! zDI!lsixHiJ0Q^rTu5PqPoP-HGlgNAsL@;w6qD)ADNJhIC*dvZY54^%7rH=;KBho}~#Du;?G)bi4)gqyf z>yehe_}VE#A@xbia6E?>?|OkxBJC0D#Tb~$yi==5a-2dMTt}FRa27LfCn)AzM)pMF zO~8XtN$H`P_K26o1ibtt^x;T*#4bcmMt2dtEGEN3Mo#8U#s^kOau4%z@I`Bc);q{T z4lHM+okW<4zO3Me+R=}ibS4xr^T2d_L;<3;%!_G4C>O7QNzJ~V_K4-^*hWU5=x8&e zt6dcDMMl=H3Txundkfx{*X^IldB#c!NVU1`0!H10YV(pJ$yPRRvpV4~wgi$Dl*Adu&FM^u{mj-KsLP5L?9V_xB0LSN&PmL!?P=o@&z$Qwt+Np$QXqs;cCr2-#7B1ub- zJt9uthR2LLjI~E})a1|b2g4TwC@#?eju;0VN0f<33W|$ySo@QR42(AE$jFlK;w+FU z?}3TYW<;aq1N;q^v`mR7-UF~P8i;7Le2CvtlFnRo?IdWA!NKqdGEbssUW_6`74qhS zzhYcu%g5lusCRurzd;>FCPq)7KBMUyi1!CHWAp!p|I#%MpzWhc?G9*o-1ZptqS&UXNFIr4xG^Gde5=Azn`Z$#xmC0f@qs}wYA;%mX{-$@+5QHF!!A~PRg zV045sah=g)G&owG6yG!Q!6_+Io)V83&BUR0LH<)bX4Df=n0O%m&FI)blr%gLzcaeX zZa)wL?}KzeCtuWQcqojBaQ#b1h~J`16EinVA@c%n`y|npP3;jg4BoOfqmkHaxrSOY zgi$^=@MuGA8OrExD|^IzLo*r1=n{^YrLvifVDu425TUk=+G5KrmEkghkOpZ8J3_eZ z%*?m3x7)}TvJ0avxTvl$M9HqwiOc9aIOm^)DA|qCYtJauoh5hSfZbwfB~uxlMpSBO zEqgHfleQbOwd~F4Dx%ToN*W{0E0UOPWj}@wu@6VfcCtU4*jIy0w3CAvy~ik8rnBT$ z99+8$v2rk@PZ7Oph?7GY9YpjC#LJP4N-%;5jYBOC_!+z6B%;a8yQt9^HN?woh93;I zN1R49jZt7@ni1pWOh(a&G9gjUVk8mGHzdkjM)uJ!WM|4mIgin!Q7>eV#wyHbgVScb zkbM$H%2kYFJ6xJfXg#CA4w{0+48KoSXal1|Ix1oGh7a*Z$xYG_?7)+r00=!V4Opip z_?`Jl$dX$by~t>s+{P#Yzf(U6Dd1#VZJ=h=si}tK)%l?*^PLbEMxQ*-l>3l2wBc(wI?B`Jmq3xi9E}^Whkkg zgy-aWhB>Teh5U-qw^k~+N?u?Tk9*sbP$a)$^b9+*NnT}C$4

@;akdjCRO7jNau+ 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 X7TM5*9S0C>UP_C1xqMY>NYwoglj{nO diff --git a/Source/WulaFallenEmpire/BulletWithTrail.cs b/Source/WulaFallenEmpire/BulletWithTrail.cs new file mode 100644 index 00000000..e9f96313 --- /dev/null +++ b/Source/WulaFallenEmpire/BulletWithTrail.cs @@ -0,0 +1,98 @@ +using System.Collections.Generic; +using System.Reflection; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.AI; +using Verse.Sound; + +namespace WulaFallenEmpire +{ + public class BulletWithTrail : Bullet + { + private TrackingBulletDef trackingDefInt; + private int Fleck_MakeFleckTick; + private Vector3 lastTickPosition; + + public TrackingBulletDef TrackingDef + { + get + { + if (trackingDefInt == null) + { + trackingDefInt = def.GetModExtension(); + if (trackingDefInt == null) + { + Log.ErrorOnce($"TrackingBulletDef for {this.def.defName} is null. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.trackingDefInt = new TrackingBulletDef(); + } + } + return trackingDefInt; + } + } + + public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) + { + base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); + lastTickPosition = origin; + } + + protected override void Tick() + { + base.Tick(); + + // 处理拖尾特效 + if (TrackingDef != null && TrackingDef.tailFleckDef != null) + { + Fleck_MakeFleckTick++; + if (Fleck_MakeFleckTick >= TrackingDef.fleckDelayTicks) + { + if (Fleck_MakeFleckTick >= (TrackingDef.fleckDelayTicks + TrackingDef.fleckMakeFleckTickMax)) + { + Fleck_MakeFleckTick = TrackingDef.fleckDelayTicks; + } + + Map map = base.Map; + int randomInRange = TrackingDef.fleckMakeFleckNum.RandomInRange; + Vector3 currentPosition = base.ExactPosition; + Vector3 previousPosition = lastTickPosition; + + for (int i = 0; i < randomInRange; i++) + { + float num = (currentPosition - previousPosition).AngleFlat(); + float velocityAngle = TrackingDef.fleckAngle.RandomInRange + num; + float randomInRange2 = TrackingDef.fleckScale.RandomInRange; + float randomInRange3 = TrackingDef.fleckSpeed.RandomInRange; + + FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, TrackingDef.tailFleckDef, randomInRange2); + dataStatic.rotation = (currentPosition - previousPosition).AngleFlat(); + dataStatic.rotationRate = TrackingDef.fleckRotation.RandomInRange; + dataStatic.velocityAngle = velocityAngle; + dataStatic.velocitySpeed = randomInRange3; + map.flecks.CreateFleck(dataStatic); + } + } + } + lastTickPosition = base.ExactPosition; + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref Fleck_MakeFleckTick, "Fleck_MakeFleckTick", 0); + Scribe_Values.Look(ref lastTickPosition, "lastTickPosition", Vector3.zero); + if (Scribe.mode == LoadSaveMode.PostLoadInit) + { + if (this.trackingDefInt == null) + { + this.trackingDefInt = this.def.GetModExtension(); + if (this.trackingDefInt == null) + { + Log.ErrorOnce($"TrackingBulletDef is null for projectile {this.def.defName} after PostLoadInit. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.trackingDefInt = new TrackingBulletDef(); + } + } + } + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/HomingProjectileDef.cs b/Source/WulaFallenEmpire/HomingProjectileDef.cs deleted file mode 100644 index 69a279d1..00000000 --- a/Source/WulaFallenEmpire/HomingProjectileDef.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using Verse; - -namespace WulaFallenEmpire -{ - public class HomingProjectileDef : DefModExtension - { - public float SpeedChangeTilesPerTickOverride; - public FloatRange SpeedRangeTilesPerTickOverride; - - public float hitChance = 0.5f; - - public float homingSpeed = 0.1f; - - public float initRotateAngle = 30f; - - public float proximityFuseRange = 0.5f; // 调整默认值,使其在接近目标时能正确触发引信 - - public IntRange destroyTicksAfterLosingTrack = new IntRange(60, 120); - - public ThingDef extraProjectile; - - public float speedChangePerTick; - - public FloatRange? speedRangeOverride; - public FleckDef tailFleckDef; - // 拖尾特效的详细配置参数 - public int fleckMakeFleckTickMax = 1; - public IntRange fleckMakeFleckNum = new IntRange(1, 1); - public FloatRange fleckAngle = new FloatRange(-180f, 180f); - public FloatRange fleckScale = new FloatRange(1f, 1f); - public FloatRange fleckSpeed = new FloatRange(0f, 0f); - public FloatRange fleckRotation = new FloatRange(-180f, 180f); - } -} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/ModExtension_Cone.cs b/Source/WulaFallenEmpire/ModExtension_Cone.cs deleted file mode 100644 index 3008b5d7..00000000 --- a/Source/WulaFallenEmpire/ModExtension_Cone.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using Verse; - -namespace WulaFallenEmpire -{ - public class ModExtension_Cone : DefModExtension - { - public float coneAngle = 10f; - - public float coneRange = 7f; - - public int repeatExplosionCount = 1; - - public ThingDef fragment; - - public int fragmentCount; - - public FloatRange? fragmentRange; - - public bool showConeEffect = true; - - public void DoConeExplosion(IntVec3 center, Map map, Quaternion rotation, DamageDef damType, Thing instigator, int damAmount = -1, float armorPenetration = -1f, SoundDef explosionSound = null, ThingDef weapon = null, ThingDef projectile = null, Thing intendedTarget = null, ThingDef postExplosionSpawnThingDef = null, float postExplosionSpawnChance = 0f, int postExplosionSpawnThingCount = 1, GasType? postExplosionGasType = null, float? postExplosionGasRadiusOverride = null, int postExplosionGasAmount = 255, bool applyDamageToExplosionCellsNeighbors = false, ThingDef preExplosionSpawnThingDef = null, float preExplosionSpawnChance = 0f, int preExplosionSpawnThingCount = 1, float chanceToStartFire = 0f, bool damageFalloff = false, float? direction = null, List ignoredThings = null, float propagationSpeed = 1f, float excludeRadius = 0f, ThingDef postExplosionSpawnThingDefWater = null, float screenShakeFactor = 1f, SimpleCurve flammabilityChanceCurve = null, List overrideCells = null) - { - Vector3 v = rotation * Vector3.forward; - FloatRange initialAngleRange = new FloatRange(v.ToAngleFlat() - coneAngle, v.ToAngleFlat() + coneAngle); - - for (int i = 0; i < repeatExplosionCount; i++) - { - // Handle angle wrap-around for max > 360 - if (initialAngleRange.max > 360f) - { - GenExplosion.DoExplosion(affectedAngle: new FloatRange(0f, initialAngleRange.max - 360f), center: center, map: map, radius: coneRange, damType: damType, instigator: instigator, damAmount: damAmount, armorPenetration: armorPenetration, explosionSound: explosionSound, weapon: weapon, projectile: projectile, intendedTarget: intendedTarget, postExplosionSpawnThingDef: postExplosionSpawnThingDef, postExplosionSpawnChance: postExplosionSpawnChance, postExplosionSpawnThingCount: postExplosionSpawnThingCount, postExplosionGasType: postExplosionGasType, postExplosionGasRadiusOverride: postExplosionGasRadiusOverride, postExplosionGasAmount: postExplosionGasAmount, applyDamageToExplosionCellsNeighbors: applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef: preExplosionSpawnThingDef, preExplosionSpawnChance: preExplosionSpawnChance, preExplosionSpawnThingCount: preExplosionSpawnThingCount, chanceToStartFire: chanceToStartFire, damageFalloff: damageFalloff, direction: direction, ignoredThings: ignoredThings, doVisualEffects: showConeEffect, propagationSpeed: propagationSpeed, excludeRadius: excludeRadius, doSoundEffects: showConeEffect, postExplosionSpawnThingDefWater: postExplosionSpawnThingDefWater, screenShakeFactor: screenShakeFactor, flammabilityChanceCurve: flammabilityChanceCurve, overrideCells: overrideCells); - } - - // Handle angle wrap-around for min < 0 - if (initialAngleRange.min < 0f) - { - GenExplosion.DoExplosion(affectedAngle: new FloatRange(initialAngleRange.min + 360f, 360f), center: center, map: map, radius: coneRange, damType: damType, instigator: instigator, damAmount: damAmount, armorPenetration: armorPenetration, explosionSound: explosionSound, weapon: weapon, projectile: projectile, intendedTarget: intendedTarget, postExplosionSpawnThingDef: postExplosionSpawnThingDef, postExplosionSpawnChance: postExplosionSpawnChance, postExplosionSpawnThingCount: postExplosionSpawnThingCount, postExplosionGasType: postExplosionGasType, postExplosionGasRadiusOverride: postExplosionGasRadiusOverride, postExplosionGasAmount: postExplosionGasAmount, applyDamageToExplosionCellsNeighbors: applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef: preExplosionSpawnThingDef, preExplosionSpawnChance: preExplosionSpawnChance, preExplosionSpawnThingCount: preExplosionSpawnThingCount, chanceToStartFire: chanceToStartFire, damageFalloff: damageFalloff, direction: direction, ignoredThings: ignoredThings, doVisualEffects: showConeEffect, propagationSpeed: propagationSpeed, excludeRadius: excludeRadius, doSoundEffects: showConeEffect, postExplosionSpawnThingDefWater: postExplosionSpawnThingDefWater, screenShakeFactor: screenShakeFactor, flammabilityChanceCurve: flammabilityChanceCurve, overrideCells: overrideCells); - } - - // Main explosion - GenExplosion.DoExplosion(center, map, coneRange, damType, instigator, damAmount, armorPenetration, explosionSound, weapon, projectile, intendedTarget, postExplosionSpawnThingDef, postExplosionSpawnChance, postExplosionSpawnThingCount, postExplosionGasType, postExplosionGasRadiusOverride, postExplosionGasAmount, applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef, preExplosionSpawnChance, preExplosionSpawnThingCount, chanceToStartFire, damageFalloff, direction, ignoredThings, initialAngleRange, showConeEffect, propagationSpeed, excludeRadius, showConeEffect, postExplosionSpawnThingDefWater, screenShakeFactor, flammabilityChanceCurve, overrideCells); - } - - if (fragment != null) - { - FloatRange currentFragmentRange = fragmentRange.HasValue ? fragmentRange.Value : new FloatRange(0f, coneRange); - IEnumerable source = FragmentCells(center, initialAngleRange, currentFragmentRange); - for (int j = 0; j < fragmentCount; j++) - { - IntVec3 intVec = source.RandomElement(); - ((Projectile)GenSpawn.Spawn(fragment, center, map)).Launch(instigator, intVec, intVec, ProjectileHitFlags.All); - } - } - } - - private IEnumerable FragmentCells(IntVec3 center, FloatRange? angle, FloatRange range) - { - int minRadialCells = GenRadial.NumCellsInRadius(range.min); - int maxRadialCells = GenRadial.NumCellsInRadius(range.max); - - for (int i = minRadialCells; i < maxRadialCells; i++) - { - IntVec3 currentCell = center + GenRadial.RadialPattern[i]; - - if (angle.HasValue) - { - float angleMin = angle.Value.min; - float angleMax = angle.Value.max; - float lengthHorizontal = (currentCell - center).LengthHorizontal; - - if (lengthHorizontal <= 0.5f) // Close to center, always include - { - yield return currentCell; - continue; - } - - float cellAngle = Mathf.Atan2(-(currentCell.z - center.z), currentCell.x - center.x) * 57.29578f; // Convert radians to degrees - - // Handle angle wrap-around for comparison - if (angleMin < 0f && cellAngle - angleMin > 360f) - { - cellAngle -= 360f; - } - if (angleMax > 360f && angleMax - cellAngle < 360f) - { - cellAngle += 360f; - } - - // Check if cell is within the angular range - if (cellAngle >= angleMin && cellAngle <= angleMax) - { - yield return currentCell; - } - } - else - { - yield return currentCell; // No angle restriction - } - } - } - } -} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_ExplosiveTrackingBullet.cs b/Source/WulaFallenEmpire/Projectile_ExplosiveTrackingBullet.cs index eeddb204..c742e789 100644 --- a/Source/WulaFallenEmpire/Projectile_ExplosiveTrackingBullet.cs +++ b/Source/WulaFallenEmpire/Projectile_ExplosiveTrackingBullet.cs @@ -60,6 +60,9 @@ namespace WulaFallenEmpire this.landed = true; this.ticksToDetonation = ExplosiveDef.explosionDelay; // Use ExplosiveDef for explosionDelay GenExplosion.NotifyNearbyPawnsOfDangerousExplosive(this, ExplosiveDef.damageDef ?? DamageDefOf.Bomb, this.launcher.Faction, this.launcher); // Use ExplosiveDef for damageDef + // 停止追踪并清空速度,确保子弹停止移动 + this.homing = false; + this.curSpeed = Vector3.zero; } } @@ -140,7 +143,7 @@ namespace WulaFallenEmpire bool doExplosionVFX = ExplosiveDef.doExplosionVFX; // Use ExplosiveDef for doExplosionVFX GenExplosion.DoExplosion( - center: position, // 爆炸中心 + center: ExactPosition.ToIntVec3(), // 爆炸中心 map: map, // 地图 radius: explosionRadius, // 爆炸半径 damType: damageDef, // 伤害类型 diff --git a/Source/WulaFallenEmpire/Projectile_ExplosiveWithTrail.cs b/Source/WulaFallenEmpire/Projectile_ExplosiveWithTrail.cs new file mode 100644 index 00000000..4fb54d4a --- /dev/null +++ b/Source/WulaFallenEmpire/Projectile_ExplosiveWithTrail.cs @@ -0,0 +1,98 @@ +using System.Collections.Generic; +using System.Reflection; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.AI; +using Verse.Sound; + +namespace WulaFallenEmpire +{ + public class Projectile_ExplosiveWithTrail : Projectile_Explosive + { + private TrackingBulletDef trackingDefInt; + private int Fleck_MakeFleckTick; + private Vector3 lastTickPosition; + + public TrackingBulletDef TrackingDef + { + get + { + if (trackingDefInt == null) + { + trackingDefInt = def.GetModExtension(); + if (trackingDefInt == null) + { + Log.ErrorOnce($"TrackingBulletDef for {this.def.defName} is null. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.trackingDefInt = new TrackingBulletDef(); + } + } + return trackingDefInt; + } + } + + public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) + { + base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); + lastTickPosition = origin; + } + + protected override void Tick() + { + base.Tick(); + + // 处理拖尾特效 + if (TrackingDef != null && TrackingDef.tailFleckDef != null) + { + Fleck_MakeFleckTick++; + if (Fleck_MakeFleckTick >= TrackingDef.fleckDelayTicks) + { + if (Fleck_MakeFleckTick >= (TrackingDef.fleckDelayTicks + TrackingDef.fleckMakeFleckTickMax)) + { + Fleck_MakeFleckTick = TrackingDef.fleckDelayTicks; + } + + Map map = base.Map; + int randomInRange = TrackingDef.fleckMakeFleckNum.RandomInRange; + Vector3 currentPosition = base.ExactPosition; + Vector3 previousPosition = lastTickPosition; + + for (int i = 0; i < randomInRange; i++) + { + float num = (currentPosition - previousPosition).AngleFlat(); + float velocityAngle = TrackingDef.fleckAngle.RandomInRange + num; + float randomInRange2 = TrackingDef.fleckScale.RandomInRange; + float randomInRange3 = TrackingDef.fleckSpeed.RandomInRange; + + FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, TrackingDef.tailFleckDef, randomInRange2); + dataStatic.rotation = (currentPosition - previousPosition).AngleFlat(); + dataStatic.rotationRate = TrackingDef.fleckRotation.RandomInRange; + dataStatic.velocityAngle = velocityAngle; + dataStatic.velocitySpeed = randomInRange3; + map.flecks.CreateFleck(dataStatic); + } + } + } + lastTickPosition = base.ExactPosition; + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref Fleck_MakeFleckTick, "Fleck_MakeFleckTick", 0); + Scribe_Values.Look(ref lastTickPosition, "lastTickPosition", Vector3.zero); + if (Scribe.mode == LoadSaveMode.PostLoadInit) + { + if (this.trackingDefInt == null) + { + this.trackingDefInt = this.def.GetModExtension(); + if (this.trackingDefInt == null) + { + Log.ErrorOnce($"TrackingBulletDef is null for projectile {this.def.defName} after PostLoadInit. Creating a default instance.", this.thingIDNumber ^ 0x12345678); + this.trackingDefInt = new TrackingBulletDef(); + } + } + } + } + } +} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_Homing.cs b/Source/WulaFallenEmpire/Projectile_Homing.cs deleted file mode 100644 index fbf42bcd..00000000 --- a/Source/WulaFallenEmpire/Projectile_Homing.cs +++ /dev/null @@ -1,327 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; -using RimWorld; -using UnityEngine; -using Verse; -using Verse.AI; -using Verse.Sound; - -namespace WulaFallenEmpire -{ - public class Projectile_Homing : Bullet - { - private HomingProjectileDef homingDefInt; - - private Sustainer ambientSustainer; - - private List comps; - - protected Vector3 exactPositionInt; - - public Vector3 curSpeed; - - public bool homing = true; - private int Fleck_MakeFleckTick; // 拖尾特效的计时器 - private Vector3 lastTickPosition; // 记录上一帧的位置,用于计算移动方向 - - private static class NonPublicFields - { - public static FieldInfo Projectile_AmbientSustainer = typeof(Projectile).GetField("ambientSustainer", BindingFlags.Instance | BindingFlags.NonPublic); - public static FieldInfo ThingWithComps_comps = typeof(ThingWithComps).GetField("comps", BindingFlags.Instance | BindingFlags.NonPublic); - public static MethodInfo ProjectileCheckForFreeInterceptBetween = typeof(Projectile).GetMethod("CheckForFreeInterceptBetween", BindingFlags.Instance | BindingFlags.NonPublic); - } - - public HomingProjectileDef HomingDef - { - get - { - if (homingDefInt == null) - { - homingDefInt = def.GetModExtension(); - if (homingDefInt == null) - { - Log.ErrorOnce($"HomingProjectileDef for {this.def.defName} is null. Creating a default instance.", this.thingIDNumber ^ 0x12345678); - this.homingDefInt = new HomingProjectileDef(); - } - } - return homingDefInt; - } - } - - public override Vector3 ExactPosition => exactPositionInt; - - public override Quaternion ExactRotation => Quaternion.LookRotation(curSpeed); - - public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) - { - bool flag = false; - if (usedTarget.HasThing && usedTarget.Thing is IAttackTarget) - { - if (Rand.Chance(GetHitChance(usedTarget.Thing))) - { - hitFlags |= ProjectileHitFlags.IntendedTarget; - intendedTarget = usedTarget; - flag = true; - } - } - else if (Rand.Chance(GetHitChance(intendedTarget.Thing))) - { - hitFlags |= ProjectileHitFlags.IntendedTarget; - usedTarget = intendedTarget; - flag = true; - } - if (flag) - { - hitFlags &= ~ProjectileHitFlags.IntendedTarget; - } - base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); - exactPositionInt = origin.Yto0() + Vector3.up * def.Altitude; - lastTickPosition = origin; // 初始化 lastTickPosition - Vector3 normalized = (destination - origin).Yto0().normalized; - float degrees = Rand.Range(0f - HomingDef.initRotateAngle, HomingDef.initRotateAngle); - Vector2 v = new Vector2(normalized.x, normalized.z); - v = v.RotatedBy(degrees); - Vector3 vector = new Vector3(v.x, 0f, v.y); - // 检查 HomingDef.speedRangeOverride 是否有值 - if (!HomingDef.speedRangeOverride.HasValue) - { - curSpeed = vector * def.projectile.SpeedTilesPerTick; - } - else - { - curSpeed = vector * HomingDef.SpeedRangeTilesPerTickOverride.RandomInRange; - } - ReflectInit(); - } - - protected void ReflectInit() - { - if (!def.projectile.soundAmbient.NullOrUndefined()) - { - ambientSustainer = (Sustainer)NonPublicFields.Projectile_AmbientSustainer.GetValue(this); - } - comps = (List)NonPublicFields.ThingWithComps_comps.GetValue(this); - } - - public float GetHitChance(Thing thing) - { - if (this.HomingDef == null) - { - Log.ErrorOnce("HomingDef is null for projectile " + this.def.defName + ". Returning default hitChance.", this.thingIDNumber ^ 0x12345678); - return 0.7f; - } - - float hitChance = HomingDef.hitChance; - if (thing == null) - { - return hitChance; - } - if (thing is Pawn pawn) - { - hitChance *= Mathf.Clamp(pawn.BodySize, 0.5f, 1.5f); - if (pawn.GetPosture() != 0) - { - hitChance *= 0.5f; - } - float num = 1f; - switch (equipmentQuality) - { - case QualityCategory.Awful: - num = 0.5f; - break; - case QualityCategory.Poor: - num = 0.75f; - break; - case QualityCategory.Normal: - num = 1f; - break; - case QualityCategory.Excellent: - num = 1.1f; - break; - case QualityCategory.Masterwork: - num = 1.2f; - break; - case QualityCategory.Legendary: - num = 1.3f; - break; - default: - Log.Message("Unknown QualityCategory, returning default qualityFactor = 1"); - break; - } - hitChance *= num; - } - else - { - hitChance *= 1.5f * thing.def.fillPercent; - } - return Mathf.Clamp(hitChance, 0f, 1f); - } - - public virtual void MovementTick() - { - Vector3 vect = ExactPosition + curSpeed; - ShootLine shootLine = new ShootLine(ExactPosition.ToIntVec3(), vect.ToIntVec3()); - Vector3 vector = (intendedTarget.Cell.ToVector3() - ExactPosition).Yto0(); - if (homing) - { - Vector3 vector2 = vector.normalized - curSpeed.normalized; - if (vector2.sqrMagnitude >= 1.414f) - { - homing = false; - lifetime = HomingDef.destroyTicksAfterLosingTrack.RandomInRange; - ticksToImpact = lifetime; - base.HitFlags &= ~ProjectileHitFlags.IntendedTarget; - base.HitFlags |= ProjectileHitFlags.NonTargetPawns; - base.HitFlags |= ProjectileHitFlags.NonTargetWorld; - } - else - { - curSpeed += vector2 * HomingDef.homingSpeed * curSpeed.magnitude; - } - } - foreach (IntVec3 item in shootLine.Points()) - { - if (!((intendedTarget.Cell - item).SqrMagnitude <= HomingDef.proximityFuseRange * HomingDef.proximityFuseRange)) - { - continue; - } - homing = false; - lifetime = HomingDef.destroyTicksAfterLosingTrack.RandomInRange; - if ((base.HitFlags & ProjectileHitFlags.IntendedTarget) == ProjectileHitFlags.IntendedTarget || HomingDef.proximityFuseRange > 0f) - { - lifetime = 0; - ticksToImpact = 0; - vect = item.ToVector3(); - if (Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && def.projectile.soundImpactAnticipate != null) - { - def.projectile.soundImpactAnticipate.PlayOneShot(this); - } - } - } - exactPositionInt = vect; - curSpeed *= (curSpeed.magnitude + HomingDef.SpeedChangeTilesPerTickOverride) / curSpeed.magnitude; - } - - protected override void Tick() - { - ThingWithCompsTick(); - lifetime--; - - if (lifetime <= 0) - { - Destroy(); - return; - } - - // 处理拖尾特效 - if (HomingDef != null && HomingDef.tailFleckDef != null) - { - Fleck_MakeFleckTick++; - if (Fleck_MakeFleckTick >= HomingDef.fleckMakeFleckTickMax) - { - Fleck_MakeFleckTick = 0; - Map map = base.Map; - int randomInRange = HomingDef.fleckMakeFleckNum.RandomInRange; - Vector3 currentPosition = ExactPosition; - Vector3 previousPosition = lastTickPosition; - - for (int i = 0; i < randomInRange; i++) - { - float num = (currentPosition - previousPosition).AngleFlat(); - float velocityAngle = HomingDef.fleckAngle.RandomInRange + num; - float randomInRange2 = HomingDef.fleckScale.RandomInRange; - float randomInRange3 = HomingDef.fleckSpeed.RandomInRange; - - FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, HomingDef.tailFleckDef, randomInRange2); - dataStatic.rotation = (currentPosition - previousPosition).AngleFlat(); - dataStatic.rotationRate = HomingDef.fleckRotation.RandomInRange; - dataStatic.velocityAngle = velocityAngle; - dataStatic.velocitySpeed = randomInRange3; - map.flecks.CreateFleck(dataStatic); - } - } - } - lastTickPosition = ExactPosition; // 更新上一帧位置 - - // 移除 if (landed) return; 以确保子弹落地后也能正常销毁 - Vector3 exactPosition = ExactPosition; - ticksToImpact--; - MovementTick(); - if (!ExactPosition.InBounds(base.Map)) - { - base.Position = exactPosition.ToIntVec3(); - Destroy(); - return; - } - Vector3 exactPosition2 = ExactPosition; - object[] parameters = new object[2] { exactPosition, exactPosition2 }; - if (!(bool)NonPublicFields.ProjectileCheckForFreeInterceptBetween.Invoke(this, parameters)) - { - base.Position = ExactPosition.ToIntVec3(); - if (ticksToImpact == 60 && Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && def.projectile.soundImpactAnticipate != null) - { - def.projectile.soundImpactAnticipate.PlayOneShot(this); - } - if (ticksToImpact <= 0) - { - ImpactSomething(); - } - else if (ambientSustainer != null) - { - ambientSustainer.Maintain(); - } - } - } - - private void ThingWithCompsTick() - { - if (comps != null) - { - int i = 0; - for (int count = comps.Count; i < count; i++) - { - comps[i].CompTick(); - } - } - } - - protected override void Impact(Thing hitThing, bool blockedByShield = false) - { - Map map = base.Map; - IntVec3 position = base.Position; - base.Impact(hitThing, blockedByShield); - if (HomingDef.extraProjectile != null) - { - if (hitThing != null && hitThing.Spawned) - { - ((Projectile)GenSpawn.Spawn(HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(launcher, ExactPosition, hitThing, hitThing, ProjectileHitFlags.All, false, null, null); - } - else - { - ((Projectile)GenSpawn.Spawn(HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(launcher, ExactPosition, position, position, ProjectileHitFlags.All, false, null, null); - } - } - } - - public override void ExposeData() - { - base.ExposeData(); - Scribe_Values.Look(ref exactPositionInt, "exactPosition"); - Scribe_Values.Look(ref curSpeed, "curSpeed"); - Scribe_Values.Look(ref homing, "homing", defaultValue: false); - if (Scribe.mode == LoadSaveMode.PostLoadInit) - { - ReflectInit(); - if (this.homingDefInt == null) - { - this.homingDefInt = this.def.GetModExtension(); - if (this.homingDefInt == null) - { - Log.ErrorOnce($"HomingProjectileDef is null for projectile {this.def.defName} after PostLoadInit. Creating a default instance.", this.thingIDNumber ^ 0x12345678); - this.homingDefInt = new HomingProjectileDef(); - } - } - } - } - } -} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs b/Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs deleted file mode 100644 index 093bfa8e..00000000 --- a/Source/WulaFallenEmpire/Projectile_Homing_Explosive.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using UnityEngine; -using Verse; - -namespace WulaFallenEmpire -{ - public class Projectile_Homing_Explosive : Projectile_Homing - { - public override void ExposeData() - { - base.ExposeData(); - Scribe_Values.Look(ref this.ticksToDetonation, "ticksToDetonation", 0, false); - } - - protected override void Tick() - { - base.Tick(); - bool flag = this.ticksToDetonation > 0; - if (flag) - { - this.ticksToDetonation--; - bool flag2 = this.ticksToDetonation <= 0; - if (flag2) - { - this.Explode(); - } - } - } - - protected override void Impact(Thing hitThing, bool blockedByShield = false) - { - bool flag = blockedByShield || this.def.projectile.explosionDelay == 0; - if (flag) - { - this.Explode(); - } - else - { - this.landed = true; - this.ticksToDetonation = this.def.projectile.explosionDelay; - GenExplosion.NotifyNearbyPawnsOfDangerousExplosive(this, this.def.projectile.damageDef, this.launcher.Faction, this.launcher); - } - } - - protected virtual void Explode() - { - Map map = base.Map; - ModExtension_Cone modExtension = this.def.GetModExtension(); - this.DoExplosion(); - bool flag = modExtension != null; - if (flag) - { - ProjectileProperties projectile = this.def.projectile; - ModExtension_Cone modExtension_Cone = modExtension; - IntVec3 position = base.Position; - Map map2 = map; - Quaternion exactRotation = this.ExactRotation; - DamageDef damageDef = projectile.damageDef; - Thing launcher = base.Launcher; - int damageAmount = this.DamageAmount; - float armorPenetration = this.ArmorPenetration; - SoundDef soundExplode = this.def.projectile.soundExplode; - ThingDef equipmentDef = this.equipmentDef; - ThingDef def = this.def; - Thing thing = this.intendedTarget.Thing; - ThingDef postExplosionSpawnThingDef = null; - float postExplosionSpawnChance = 0f; - int postExplosionSpawnThingCount = 1; - float screenShakeFactor = this.def.projectile.screenShakeFactor; - modExtension_Cone.DoConeExplosion(position, map2, exactRotation, damageDef, launcher, damageAmount, armorPenetration, soundExplode, equipmentDef, def, thing, postExplosionSpawnThingDef, postExplosionSpawnChance, postExplosionSpawnThingCount, null, null, 255, false, null, 0f, 1, 0f, false, null, null, 1f, 0f, null, screenShakeFactor, null, null); - } - bool flag2 = this.def.projectile.explosionEffect != null; - if (flag2) - { - Effecter effecter = this.def.projectile.explosionEffect.Spawn(); - bool flag3 = this.def.projectile.explosionEffectLifetimeTicks != 0; - if (flag3) - { - map.effecterMaintainer.AddEffecterToMaintain(effecter, base.Position.ToVector3().ToIntVec3(), this.def.projectile.explosionEffectLifetimeTicks); - } - else - { - effecter.Trigger(new TargetInfo(base.Position, map, false), new TargetInfo(base.Position, map, false), -1); - effecter.Cleanup(); - } - } - this.Destroy(DestroyMode.Vanish); - } - - protected void DoExplosion() - { - IntVec3 position = base.Position; - float explosionRadius = this.def.projectile.explosionRadius; - DamageDef damageDef = this.def.projectile.damageDef; - Thing launcher = this.launcher; - int damageAmount = this.DamageAmount; - float armorPenetration = this.ArmorPenetration; - SoundDef soundExplode = this.def.projectile.soundExplode; - ThingDef equipmentDef = this.equipmentDef; - ThingDef def = this.def; - Thing thing = this.intendedTarget.Thing; - ThingDef thingDef = this.def.projectile.postExplosionSpawnThingDef ?? this.def.projectile.filth; - ThingDef postExplosionSpawnThingDefWater = this.def.projectile.postExplosionSpawnThingDefWater; - float postExplosionSpawnChance = this.def.projectile.postExplosionSpawnChance; - int postExplosionSpawnThingCount = this.def.projectile.postExplosionSpawnThingCount; - GasType? postExplosionGasType = this.def.projectile.postExplosionGasType; - ThingDef preExplosionSpawnThingDef = this.def.projectile.preExplosionSpawnThingDef; - float preExplosionSpawnChance = this.def.projectile.preExplosionSpawnChance; - int preExplosionSpawnThingCount = this.def.projectile.preExplosionSpawnThingCount; - bool applyDamageToExplosionCellsNeighbors = this.def.projectile.applyDamageToExplosionCellsNeighbors; - ThingDef preExplosionSpawnThingDef2 = preExplosionSpawnThingDef; - float preExplosionSpawnChance2 = preExplosionSpawnChance; - int preExplosionSpawnThingCount2 = preExplosionSpawnThingCount; - float explosionChanceToStartFire = this.def.projectile.explosionChanceToStartFire; - bool explosionDamageFalloff = this.def.projectile.explosionDamageFalloff; - float? direction = new float?(this.origin.AngleToFlat(this.destination)); - FloatRange? affectedAngle = null; - float expolosionPropagationSpeed = this.def.projectile.damageDef.expolosionPropagationSpeed; - float screenShakeFactor = this.def.projectile.screenShakeFactor; - IntVec3 center = position; - Map map = base.Map; - float radius = explosionRadius; - DamageDef damType = damageDef; - Thing instigator = launcher; - int damAmount = damageAmount; - float armorPenetration2 = armorPenetration; - SoundDef explosionSound = soundExplode; - ThingDef weapon = equipmentDef; - ThingDef projectile = def; - Thing intendedTarget = thing; - ThingDef postExplosionSpawnThingDef = thingDef; - float postExplosionSpawnChance2 = postExplosionSpawnChance; - int postExplosionSpawnThingCount2 = postExplosionSpawnThingCount; - GasType? postExplosionGasType2 = postExplosionGasType; - bool doExplosionVFX = this.def.projectile.doExplosionVFX; - ThingDef postExplosionSpawnThingDefWater2 = postExplosionSpawnThingDefWater; - GenExplosion.DoExplosion(center, map, radius, damType, instigator, damAmount, armorPenetration2, explosionSound, weapon, projectile, intendedTarget, postExplosionSpawnThingDef, postExplosionSpawnChance2, postExplosionSpawnThingCount2, postExplosionGasType2, null, 255, applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef2, preExplosionSpawnChance2, preExplosionSpawnThingCount2, explosionChanceToStartFire, explosionDamageFalloff, direction, null, affectedAngle, doExplosionVFX, expolosionPropagationSpeed, 0f, true, postExplosionSpawnThingDefWater2, screenShakeFactor, null, null, null, null); - } - - private int ticksToDetonation; - } -} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/Projectile_PoiBullet.cs b/Source/WulaFallenEmpire/Projectile_PoiBullet.cs deleted file mode 100644 index d62e8452..00000000 --- a/Source/WulaFallenEmpire/Projectile_PoiBullet.cs +++ /dev/null @@ -1,726 +0,0 @@ -using System; -using System.Collections.Generic; -using RimWorld; -using UnityEngine; -using Verse; -using Verse.Sound; -using System.Reflection; -using Verse.AI; - -namespace WulaFallenEmpire -{ - public class Projectile_PoiBullet : Bullet - { - // Projectile_Homing 的字段 - private HomingProjectileDef homingDefInt; - private Sustainer ambientSustainer; - private List comps; - protected Vector3 exactPositionInt; - public Vector3 curSpeed; - public bool homing = true; - private int Fleck_MakeFleckTick; - private Vector3 lastTickPosition; - - // Projectile_Homing_Explosive 的字段 - private int ticksToDetonation; - - private static class NonPublicFields - { - public static FieldInfo Projectile_AmbientSustainer = typeof(Projectile).GetField("ambientSustainer", BindingFlags.Instance | BindingFlags.NonPublic); - public static FieldInfo ThingWithComps_comps = typeof(ThingWithComps).GetField("comps", BindingFlags.Instance | BindingFlags.NonPublic); - public static MethodInfo ProjectileCheckForFreeInterceptBetween = typeof(Projectile).GetMethod("CheckForFreeInterceptBetween", BindingFlags.Instance | BindingFlags.NonPublic); - } - - public HomingProjectileDef HomingDef - { - get - { - if (homingDefInt == null) - { - homingDefInt = def.GetModExtension(); - if (homingDefInt == null) - { - Log.ErrorOnce($"HomingProjectileDef for {this.def.defName} is null. Creating a default instance.", this.thingIDNumber ^ 0x12345678); - this.homingDefInt = new HomingProjectileDef(); - } - } - return homingDefInt; - } - } - - public override Vector3 ExactPosition => exactPositionInt; - - public override Quaternion ExactRotation => Quaternion.LookRotation(curSpeed); - - public override void Launch(Thing launcher, Vector3 origin, LocalTargetInfo usedTarget, LocalTargetInfo intendedTarget, ProjectileHitFlags hitFlags, bool preventFriendlyFire = false, Thing equipment = null, ThingDef targetCoverDef = null) - { - bool flag = false; - if (usedTarget.HasThing && usedTarget.Thing is IAttackTarget) - { - if (Rand.Chance(GetHitChance(usedTarget.Thing))) - { - hitFlags |= ProjectileHitFlags.IntendedTarget; - intendedTarget = usedTarget; - flag = true; - } - } - else if (Rand.Chance(GetHitChance(intendedTarget.Thing))) - { - hitFlags |= ProjectileHitFlags.IntendedTarget; - usedTarget = intendedTarget; - flag = true; - } - if (flag) - { - hitFlags &= ~ProjectileHitFlags.IntendedTarget; - } - base.Launch(launcher, origin, usedTarget, intendedTarget, hitFlags, preventFriendlyFire, equipment, targetCoverDef); - exactPositionInt = origin.Yto0() + Vector3.up * def.Altitude; - lastTickPosition = origin; - Vector3 normalized = (destination - origin).Yto0().normalized; - float degrees = Rand.Range(0f - HomingDef.initRotateAngle, HomingDef.initRotateAngle); - Vector2 v = new Vector2(normalized.x, normalized.z); - v = v.RotatedBy(degrees); - Vector3 vector = new Vector3(v.x, 0f, v.y); - if (!HomingDef.speedRangeOverride.HasValue) - { - curSpeed = vector * def.projectile.SpeedTilesPerTick; - } - else - { - curSpeed = vector * HomingDef.SpeedRangeTilesPerTickOverride.RandomInRange; - } - ReflectInit(); - - // Projectile_PoiBullet 原始逻辑中的部分初始化 - this.flag2 = false; // 重置RandFactor的标志 - this.flag3 = true; // 重置CanHitTarget的标志 - this.CalHit = false; // 重置命中计算结果 - } - - protected void ReflectInit() - { - if (!def.projectile.soundAmbient.NullOrUndefined()) - { - ambientSustainer = (Sustainer)NonPublicFields.Projectile_AmbientSustainer.GetValue(this); - } - comps = (List)NonPublicFields.ThingWithComps_comps.GetValue(this); - } - - public float GetHitChance(Thing thing) - { - if (this.HomingDef == null) - { - Log.ErrorOnce("HomingDef is null for projectile " + this.def.defName + ". Returning default hitChance.", this.thingIDNumber ^ 0x12345678); - return 0.7f; - } - - float hitChance = HomingDef.hitChance; - if (thing == null) - { - return hitChance; - } - if (thing is Pawn pawn) - { - hitChance *= Mathf.Clamp(pawn.BodySize, 0.5f, 1.5f); - if (pawn.GetPosture() != 0) - { - hitChance *= 0.5f; - } - float num = 1f; - switch (equipmentQuality) - { - case QualityCategory.Awful: - num = 0.5f; - break; - case QualityCategory.Poor: - num = 0.75f; - break; - case QualityCategory.Normal: - num = 1f; - break; - case QualityCategory.Excellent: - num = 1.1f; - break; - case QualityCategory.Masterwork: - num = 1.2f; - break; - case QualityCategory.Legendary: - num = 1.3f; - break; - default: - Log.Message("Unknown QualityCategory, returning default qualityFactor = 1"); - break; - } - hitChance *= num; - } - else - { - hitChance *= 1.5f * thing.def.fillPercent; - } - return Mathf.Clamp(hitChance, 0f, 1f); - } - - public virtual void MovementTick() - { - Vector3 vect = ExactPosition + curSpeed; - ShootLine shootLine = new ShootLine(ExactPosition.ToIntVec3(), vect.ToIntVec3()); - Vector3 vector = (intendedTarget.Cell.ToVector3() - ExactPosition).Yto0(); - if (homing) - { - Vector3 vector2 = vector.normalized - curSpeed.normalized; - if (vector2.sqrMagnitude >= 1.414f) - { - homing = false; - lifetime = HomingDef.destroyTicksAfterLosingTrack.RandomInRange; - ticksToImpact = lifetime; - base.HitFlags &= ~ProjectileHitFlags.IntendedTarget; - base.HitFlags |= ProjectileHitFlags.NonTargetPawns; - base.HitFlags |= ProjectileHitFlags.NonTargetWorld; - } - else - { - curSpeed += vector2 * HomingDef.homingSpeed * curSpeed.magnitude; - } - } - foreach (IntVec3 item in shootLine.Points()) - { - if (!((intendedTarget.Cell - item).SqrMagnitude <= HomingDef.proximityFuseRange * HomingDef.proximityFuseRange)) - { - continue; - } - homing = false; - lifetime = HomingDef.destroyTicksAfterLosingTrack.RandomInRange; - if ((base.HitFlags & ProjectileHitFlags.IntendedTarget) == ProjectileHitFlags.IntendedTarget || HomingDef.proximityFuseRange > 0f) - { - lifetime = 0; - ticksToImpact = 0; - vect = item.ToVector3(); - if (Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && def.projectile.soundImpactAnticipate != null) - { - def.projectile.soundImpactAnticipate.PlayOneShot(this); - } - } - } - exactPositionInt = vect; - curSpeed *= (curSpeed.magnitude + HomingDef.SpeedChangeTilesPerTickOverride) / curSpeed.magnitude; - } - - protected override void Tick() - { - // Projectile_Homing 的 Tick 逻辑 - ThingWithCompsTick(); - lifetime--; - - if (lifetime <= 0) - { - Destroy(); - return; - } - - // 处理拖尾特效 - if (HomingDef != null && HomingDef.tailFleckDef != null) - { - Fleck_MakeFleckTick++; - if (Fleck_MakeFleckTick >= HomingDef.fleckMakeFleckTickMax) - { - Fleck_MakeFleckTick = 0; - Map map = base.Map; - int randomInRange = HomingDef.fleckMakeFleckNum.RandomInRange; - Vector3 currentPosition = ExactPosition; - Vector3 previousPosition = lastTickPosition; - - for (int i = 0; i < randomInRange; i++) - { - float num = (currentPosition - previousPosition).AngleFlat(); - float velocityAngle = HomingDef.fleckAngle.RandomInRange + num; - float randomInRange2 = HomingDef.fleckScale.RandomInRange; - float randomInRange3 = HomingDef.fleckSpeed.RandomInRange; - - FleckCreationData dataStatic = FleckMaker.GetDataStatic(currentPosition, map, HomingDef.tailFleckDef, randomInRange2); - dataStatic.rotation = (currentPosition - previousPosition).AngleFlat(); - dataStatic.rotationRate = HomingDef.fleckRotation.RandomInRange; - dataStatic.velocityAngle = velocityAngle; - dataStatic.velocitySpeed = randomInRange3; - map.flecks.CreateFleck(dataStatic); - } - } - } - lastTickPosition = ExactPosition; - - // Projectile_Homing_Explosive 的 Tick 逻辑 - if (HomingDef.isExplosive && HomingDef.explosionDelay > 0) - { - if (ticksToDetonation > 0) - { - ticksToDetonation--; - if (ticksToDetonation <= 0) - { - Explode(); - } - } - } - - Vector3 exactPosition = ExactPosition; - ticksToImpact--; - MovementTick(); - if (!ExactPosition.InBounds(base.Map)) - { - base.Position = exactPosition.ToIntVec3(); - Destroy(); - return; - } - Vector3 exactPosition2 = ExactPosition; - object[] parameters = new object[2] { exactPosition, exactPosition2 }; - if (!(bool)NonPublicFields.ProjectileCheckForFreeInterceptBetween.Invoke(this, parameters)) - { - base.Position = ExactPosition.ToIntVec3(); - if (ticksToImpact == 60 && Find.TickManager.CurTimeSpeed == TimeSpeed.Normal && def.projectile.soundImpactAnticipate != null) - { - def.projectile.soundImpactAnticipate.PlayOneShot(this); - } - if (ticksToImpact <= 0) - { - ImpactSomething(); - } - else if (ambientSustainer != null) - { - ambientSustainer.Maintain(); - } - } - - // Projectile_PoiBullet 原始逻辑中的部分Tick - this.tickcount++; - bool flag = this.flag3; - if (flag) - { - this.CalHit = this.CanHitTarget_Poi(); // 使用重命名后的方法 - this.flag3 = false; - } - bool flag2 = !this.CalHit; - if (flag2) - { - this.FindRandCell(this.intendedTarget.CenterVector3); - } - bool flag3_poi = this.intendedTarget.Thing != null; - if (flag3_poi) - { - this.destination = this.intendedTarget.Thing.DrawPos; - } - this.Fleck_MakeFleckTick_Poi++; // 使用重命名后的字段 - bool flag4 = this.Fleck_MakeFleckTick_Poi >= this.Fleck_MakeFleckTickMax_Poi; // 使用重命名后的字段 - bool flag5 = flag4 && this.tickcount >= 8; - if (flag5) - { - this.Fleck_MakeFleckTick_Poi = 0; - Map map = base.Map; - int randomInRange = this.Fleck_MakeFleckNum_Poi.RandomInRange; - Vector3 vector = this.BPos(base.DistanceCoveredFraction - 0.01f); - Vector3 vector2 = this.BPos(base.DistanceCoveredFraction - 0.02f); - for (int i = 0; i < randomInRange; i++) - { - float num = (vector - this.intendedTarget.CenterVector3).AngleFlat(); - float velocityAngle = this.Fleck_Angle_Poi.RandomInRange + num; - float randomInRange2 = this.Fleck_Scale_Poi.RandomInRange; - float randomInRange3 = this.Fleck_Speed_Poi.RandomInRange; - float randomInRange4 = this.Fleck_Speed2_Poi.RandomInRange; - FleckCreationData dataStatic = FleckMaker.GetDataStatic(vector, map, this.FleckDef_Poi, randomInRange2); - FleckCreationData dataStatic2 = FleckMaker.GetDataStatic(vector2, map, this.FleckDef2_Poi, randomInRange2); - dataStatic.rotation = (vector - vector2).AngleFlat(); - dataStatic.rotationRate = this.Fleck_Rotation_Poi.RandomInRange; - dataStatic.velocityAngle = velocityAngle; - dataStatic.velocitySpeed = randomInRange3; - dataStatic2.rotation = (vector - vector2).AngleFlat(); - dataStatic2.rotationRate = this.Fleck_Rotation_Poi.RandomInRange; - dataStatic2.velocityAngle = velocityAngle; - dataStatic2.velocitySpeed = randomInRange4; - map.flecks.CreateFleck(dataStatic2); - map.flecks.CreateFleck(dataStatic); - } - } - // 移除原始的 base.Tick(); 因为 Projectile_Homing 的 Tick 已经包含了其父类的逻辑 - } - - private void ThingWithCompsTick() - { - if (comps != null) - { - int i = 0; - for (int count = comps.Count; i < count; i++) - { - comps[i].CompTick(); - } - } - } - - protected override void Impact(Thing hitThing, bool blockedByShield = false) - { - Map map = base.Map; - IntVec3 position = base.Position; - - // Projectile_Homing_Explosive 的 Impact 逻辑 - if (HomingDef.isExplosive) - { - bool flag = blockedByShield || HomingDef.explosionDelay == 0; - if (flag) - { - Explode(); - } - else - { - landed = true; - ticksToDetonation = HomingDef.explosionDelay; - GenExplosion.NotifyNearbyPawnsOfDangerousExplosive(this, def.projectile.damageDef, launcher.Faction, launcher); - } - } - else // Projectile_Homing 的 Impact 逻辑 - { - base.Impact(hitThing, blockedByShield); - if (HomingDef.extraProjectile != null) - { - if (hitThing != null && hitThing.Spawned) - { - ((Projectile)GenSpawn.Spawn(HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(launcher, ExactPosition, hitThing, hitThing, ProjectileHitFlags.All, false, null, null); - } - else - { - ((Projectile)GenSpawn.Spawn(HomingDef.extraProjectile, base.Position, map, WipeMode.Vanish)).Launch(launcher, ExactPosition, position, position, ProjectileHitFlags.All, false, null, null); - } - } - } - - // Projectile_PoiBullet 原始逻辑中的 Impact - bool flag_poi = this.intendedTarget.Thing is Pawn; - if (flag_poi) - { - hitThing = this.intendedTarget.Thing; - } - // 原始的 base.Impact(hitThing, blockedByShield); 已经被上面的 Homing 和 Explosive 逻辑覆盖,需要确保正确调用或移除 - // 这里我们已经调用了 base.Impact(hitThing, blockedByShield); 在 Projectile_Homing 的 Impact 逻辑中,所以这里不再重复调用。 - - BattleLogEntry_RangedImpact battleLogEntry_RangedImpact = new BattleLogEntry_RangedImpact(this.launcher, hitThing, this.intendedTarget.Thing, this.equipmentDef, this.def, this.targetCoverDef); - Find.BattleLog.Add(battleLogEntry_RangedImpact); - this.NotifyImpact_Poi(hitThing, map, position); // 使用重命名后的方法 - bool flag2 = hitThing != null && !blockedByShield; - if (flag2) - { - Pawn pawn; - bool instigatorGuilty = (pawn = (this.launcher as Pawn)) == null || !pawn.Drafted; - DamageInfo dinfo = new DamageInfo(this.def.projectile.damageDef, (float)this.DamageAmount, this.ArmorPenetration, this.ExactRotation.eulerAngles.y, this.launcher, null, this.equipmentDef, DamageInfo.SourceCategory.ThingOrUnknown, this.intendedTarget.Thing, instigatorGuilty, true, QualityCategory.Normal, true); - hitThing.TakeDamage(dinfo).AssociateWithLog(battleLogEntry_RangedImpact); - Pawn pawn2 = hitThing as Pawn; - bool flag3 = pawn2 != null && pawn2.stances != null; - if (flag3) - { - pawn2.stances.stagger.Notify_BulletImpact(this); - } - bool flag4 = this.def.projectile.extraDamages != null; - if (flag4) - { - foreach (ExtraDamage extraDamage in this.def.projectile.extraDamages) - { - bool flag5 = Rand.Chance(extraDamage.chance); - if (flag5) - { - DamageInfo dinfo2 = new DamageInfo(extraDamage.def, extraDamage.amount, extraDamage.AdjustedArmorPenetration(), this.ExactRotation.eulerAngles.y, this.launcher, null, this.equipmentDef, DamageInfo.SourceCategory.ThingOrUnknown, this.intendedTarget.Thing, instigatorGuilty, true, QualityCategory.Normal, true); - hitThing.TakeDamage(dinfo2).AssociateWithLog(battleLogEntry_RangedImpact); - } - } - } - bool flag6 = Rand.Chance(this.def.projectile.bulletChanceToStartFire) && (pawn2 == null || Rand.Chance(FireUtility.ChanceToAttachFireFromEvent(pawn2))); - if (flag6) - { - hitThing.TryAttachFire(this.def.projectile.bulletFireSizeRange.RandomInRange, this); - } - } - else - { - bool flag7 = !blockedByShield; - if (flag7) - { - SoundDefOf.BulletImpact_Ground.PlayOneShot(new TargetInfo(base.Position, map, false)); - bool takeSplashes = base.Position.GetTerrain(map).takeSplashes; - if (takeSplashes) - { - FleckMaker.WaterSplash(this.ExactPosition, map, Mathf.Sqrt((float)this.DamageAmount) * 1f, 4f); - } - else - { - FleckMaker.Static(this.ExactPosition, map, FleckDefOf.ShotHit_Dirt, 1f); - } - } - bool flag8 = Rand.Chance(this.def.projectile.bulletChanceToStartFire); - if (flag8) - { - FireUtility.TryStartFireIn(base.Position, map, this.def.projectile.bulletFireSizeRange.RandomInRange, this, null); - } - } - } - - protected virtual void Explode() - { - Map map = base.Map; - ModExtension_Cone modExtension = this.def.GetModExtension(); - DoExplosion(); - if (modExtension != null) - { - ProjectileProperties projectile = this.def.projectile; - ModExtension_Cone modExtension_Cone = modExtension; - IntVec3 position = base.Position; - Map map2 = map; - Quaternion exactRotation = this.ExactRotation; - DamageDef damageDef = projectile.damageDef; - Thing launcher = base.Launcher; - int damageAmount = this.DamageAmount; - float armorPenetration = this.ArmorPenetration; - SoundDef soundExplode = this.def.projectile.soundExplode; - ThingDef equipmentDef = this.equipmentDef; - ThingDef def = this.def; - Thing thing = this.intendedTarget.Thing; - ThingDef postExplosionSpawnThingDef = null; - float postExplosionSpawnChance = 0f; - int postExplosionSpawnThingCount = 1; - float screenShakeFactor = this.def.projectile.screenShakeFactor; - modExtension_Cone.DoConeExplosion(position, map2, exactRotation, damageDef, launcher, damageAmount, armorPenetration, soundExplode, equipmentDef, def, thing, postExplosionSpawnThingDef, postExplosionSpawnChance, postExplosionSpawnThingCount, null, null, 255, false, null, 0f, 1, 0f, false, null, null, 1f, 0f, null, screenShakeFactor, null, null); - } - if (this.def.projectile.explosionEffect != null) - { - Effecter effecter = this.def.projectile.explosionEffect.Spawn(); - if (this.def.projectile.explosionEffectLifetimeTicks != 0) - { - map.effecterMaintainer.AddEffecterToMaintain(effecter, base.Position.ToVector3().ToIntVec3(), this.def.projectile.explosionEffectLifetimeTicks); - } - else - { - effecter.Trigger(new TargetInfo(base.Position, map, false), new TargetInfo(base.Position, map, false), -1); - effecter.Cleanup(); - } - } - Destroy(DestroyMode.Vanish); - } - - protected void DoExplosion() - { - IntVec3 position = base.Position; - float explosionRadius = this.def.projectile.explosionRadius; - DamageDef damageDef = this.def.projectile.damageDef; - Thing launcher = this.launcher; - int damageAmount = this.DamageAmount; - float armorPenetration = this.ArmorPenetration; - SoundDef soundExplode = this.def.projectile.soundExplode; - ThingDef equipmentDef = this.equipmentDef; - ThingDef def = this.def; - Thing thing = this.intendedTarget.Thing; - ThingDef thingDef = this.def.projectile.postExplosionSpawnThingDef ?? this.def.projectile.filth; - ThingDef postExplosionSpawnThingDefWater = this.def.projectile.postExplosionSpawnThingDefWater; - float postExplosionSpawnChance = this.def.projectile.postExplosionSpawnChance; - int postExplosionSpawnThingCount = this.def.projectile.postExplosionSpawnThingCount; - GasType? postExplosionGasType = this.def.projectile.postExplosionGasType; - ThingDef preExplosionSpawnThingDef = this.def.projectile.preExplosionSpawnThingDef; - float preExplosionSpawnChance = this.def.projectile.preExplosionSpawnChance; - int preExplosionSpawnThingCount = this.def.projectile.preExplosionSpawnThingCount; - bool applyDamageToExplosionCellsNeighbors = this.def.projectile.applyDamageToExplosionCellsNeighbors; - ThingDef preExplosionSpawnThingDef2 = preExplosionSpawnThingDef; - float preExplosionSpawnChance2 = preExplosionSpawnChance; - int preExplosionSpawnThingCount2 = preExplosionSpawnThingCount; - float explosionChanceToStartFire = this.def.projectile.explosionChanceToStartFire; - bool explosionDamageFalloff = this.def.projectile.explosionDamageFalloff; - float? direction = new float?(this.origin.AngleToFlat(this.destination)); - FloatRange? affectedAngle = null; - float expolosionPropagationSpeed = this.def.projectile.damageDef.expolosionPropagationSpeed; - float screenShakeFactor = this.def.projectile.screenShakeFactor; - IntVec3 center = position; - Map map = base.Map; - float radius = explosionRadius; - DamageDef damType = damageDef; - Thing instigator = launcher; - int damAmount = damageAmount; - float armorPenetration2 = armorPenetration; - SoundDef explosionSound = soundExplode; - ThingDef weapon = equipmentDef; - ThingDef projectile = def; - Thing intendedTarget = thing; - ThingDef postExplosionSpawnThingDef = thingDef; - float postExplosionSpawnChance2 = postExplosionSpawnChance; - int postExplosionSpawnThingCount2 = postExplosionSpawnThingCount; - GasType? postExplosionGasType2 = postExplosionGasType; - bool doExplosionVFX = this.def.projectile.doExplosionVFX; - ThingDef postExplosionSpawnThingDefWater2 = postExplosionSpawnThingDefWater; - GenExplosion.DoExplosion(center, map, radius, damType, instigator, damAmount, armorPenetration2, explosionSound, weapon, projectile, intendedTarget, postExplosionSpawnThingDef, postExplosionSpawnChance2, postExplosionSpawnThingCount2, postExplosionGasType2, null, 255, applyDamageToExplosionCellsNeighbors, preExplosionSpawnThingDef2, preExplosionSpawnChance2, preExplosionSpawnThingCount2, explosionChanceToStartFire, explosionDamageFalloff, direction, null, affectedAngle, doExplosionVFX, expolosionPropagationSpeed, 0f, true, postExplosionSpawnThingDefWater2, screenShakeFactor, null, null, null, null); - } - - public override void ExposeData() - { - base.ExposeData(); - Scribe_Values.Look(ref exactPositionInt, "exactPosition"); - Scribe_Values.Look(ref curSpeed, "curSpeed"); - Scribe_Values.Look(ref homing, "homing", defaultValue: false); - Scribe_Values.Look(ref ticksToDetonation, "ticksToDetonation", 0, false); // 爆炸弹字段 - if (Scribe.mode == LoadSaveMode.PostLoadInit) - { - ReflectInit(); - if (this.homingDefInt == null) - { - this.homingDefInt = this.def.GetModExtension(); - if (this.homingDefInt == null) - { - Log.ErrorOnce($"HomingProjectileDef is null for projectile {this.def.defName} after PostLoadInit. Creating a default instance.", this.thingIDNumber ^ 0x12345678); - this.homingDefInt = new HomingProjectileDef(); - } - } - } - } - - // Projectile_PoiBullet 原始逻辑 - private void RandFactor() - { - FloatRange floatRange = new FloatRange(-0.5f, 0.5f); - FloatRange floatRange2 = new FloatRange(-0.5f, 0.5f); - this.Randdd.x = floatRange.RandomInRange; - this.Randdd.z = floatRange2.RandomInRange; - this.flag2 = true; - } - - public Vector3 BPos(float t) - { - bool flag = !this.flag2; - if (flag) - { - this.RandFactor(); - } - Vector3 origin = this.origin; - Vector3 a = (this.origin + this.destination) / 2f; - a += this.Randdd; - a.y = this.destination.y; - Vector3 destination = this.destination; - return (1f - t) * (1f - t) * origin + 2f * t * (1f - t) * a + t * t * destination; - } - - private void FindRandCell(Vector3 d) - { - IntVec3 center = IntVec3.FromVector3(d); - this.intendedTarget = CellRect.CenteredOn(center, 2).RandomCell; - } - - protected override void DrawAt(Vector3 position, bool flip = false) - { - Vector3 b = this.BPos(base.DistanceCoveredFraction - 0.01f); - position = this.BPos(base.DistanceCoveredFraction); - Quaternion rotation = Quaternion.LookRotation(position - b); - bool flag = this.tickcount >= 4; - if (flag) - { - Vector3 position2 = position; - position2.y = AltitudeLayer.Projectile.AltitudeFor(); - Graphics.DrawMesh(MeshPool.GridPlane(this.def.graphicData.drawSize), position2, rotation, this.DrawMat, 0); - base.Comps_PostDraw(); - } - } - - private bool CanHitTarget_Poi() // 重命名以避免冲突 - { - bool flag = this.launcher is Pawn; - bool result; - if (flag) - { - float num = this.Hitchance_Poi(); // 使用重命名后的方法 - bool flag2 = (float)Rand.RangeInclusive(0, 100) <= num * 100f; - Pawn pawn = this.intendedTarget.Thing as Pawn; - bool flag3 = pawn != null; - if (flag3) - { - bool downed = pawn.Downed; - if (downed) - { - flag2 = (Rand.RangeInclusive(0, 100) <= 30); - } - } - result = flag2; - } - else - { - result = (Rand.RangeInclusive(0, 100) <= 85); - } - return result; - } - - public float Hitchance_Poi() // 重命名以避免冲突 - { - Pawn pawn = this.launcher as Pawn; - bool flag = pawn != null; - float result; - if (flag) - { - SkillDef named = DefDatabase.GetNamed("Intellectual", true); - SkillRecord skill = pawn.skills.GetSkill(named); - bool flag2 = skill != null; - if (flag2) - { - int level = skill.GetLevel(true); - float num = Mathf.Min(1f, (float)level * 0.05f); - result = num; - } - else - { - result = 0.5f; - } - } - else - { - result = 0.2f; - } - return result; - } - - private void NotifyImpact_Poi(Thing hitThing, Map map, IntVec3 position) // 重命名以避免冲突 - { - BulletImpactData impactData = new BulletImpactData - { - bullet = this, - hitThing = hitThing, - impactPosition = position - }; - bool flag = hitThing != null; - if (flag) - { - hitThing.Notify_BulletImpactNearby(impactData); - } - int num = 9; - for (int i = 0; i < num; i++) - { - IntVec3 c = position + GenRadial.RadialPattern[i]; - bool flag2 = c.InBounds(map); - if (flag2) - { - List thingList = c.GetThingList(map); - for (int j = 0; j < thingList.Count; j++) - { - bool flag3 = thingList[j] != hitThing; - if (flag3) - { - thingList[j].Notify_BulletImpactNearby(impactData); - } - } - } - } - } - - private bool flag2 = false; - private bool flag3 = true; - private bool CalHit = false; - private Vector3 Randdd; - private int tickcount; - - // Projectile_PoiBullet 原始的 Fleck 字段,重命名以避免冲突 - public FleckDef FleckDef_Poi = DefDatabase.GetNamed("CMC_SparkFlash_Blue_Small", true); - public FleckDef FleckDef2_Poi = DefDatabase.GetNamed("CMC_SparkFlash_Blue_LongLasting_Small", true); - public int Fleck_MakeFleckTickMax_Poi = 1; - public IntRange Fleck_MakeFleckNum_Poi = new IntRange(2, 2); - public FloatRange Fleck_Angle_Poi = new FloatRange(-180f, 180f); - public FloatRange Fleck_Scale_Poi = new FloatRange(1.6f, 1.7f); - public FloatRange Fleck_Speed_Poi = new FloatRange(5f, 7f); - public FloatRange Fleck_Speed2_Poi = new FloatRange(0.1f, 0.2f); - public FloatRange Fleck_Rotation_Poi = new FloatRange(-180f, 180f); - public int Fleck_MakeFleckTick_Poi; - } -} \ No newline at end of file diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj index 53c40873..e75c9522 100644 --- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj +++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj @@ -124,14 +124,10 @@ - - - - @@ -170,11 +166,13 @@ - - - - - - - + + + + + + + + + \ No newline at end of file