From 758abc5354908b94f90cc9412f45f68aa4711f2f Mon Sep 17 00:00:00 2001 From: Hazzer Date: Sat, 16 Mar 2024 20:17:35 +0100 Subject: [PATCH] 1.4.8 (#266) * mid work commit * Release candiadate * cosmetic changes * fixing wardens * modify hediffs * last fixes * new option feature --- 1.4/Assemblies/PrisonLabor.dll | Bin 281600 -> 299008 bytes .../PrisonLaborCashRegistryCompatibility.dll | Bin 8192 -> 8192 bytes .../PrisonLaborCleaningAreaCompatibility.dll | Bin 8704 -> 8704 bytes .../PrisonLaborColonyGroupsCompatibility.dll | Bin 11264 -> 11264 bytes 1.4/Defs/Hediffs.xml | 5 +- 1.4/Defs/Interrogation/InterrogationDefs.xml | 67 ++ .../InterrogationInteractionsDefs.xml | 36 + .../Interrogation/InterrogationPatterns.xml | 160 +++++ .../InterrogationThoughtDefs.xml | 66 ++ 1.4/Defs/MainButton.xml | 297 ++++---- 1.4/Defs/ThinkTreeDef.xml | 2 +- .../PrisonLaborHospitalityCompatibility.dll | Bin 8192 -> 8192 bytes .../PrisonLaborKijinCompatibility.dll | Bin 7680 -> 7680 bytes .../PrisonLaborQuarryCompatibility.dll | Bin 5632 -> 5632 bytes .../PrisonLaborTherapyCompatibility.dll | Bin 11264 -> 11264 bytes About/About.xml | 2 +- Languages/English/Keyed/Keys.xml | 11 + README.md | 2 +- .../Patches/Patch_WorkGIver_ReceiveTherapy.cs | 2 +- Source/Core/AI/JobGivers/JobGiver_Labor.cs | 6 +- .../JobGiver_Prisoner_OptimizeApparel.cs | 143 ++++ .../JobGivers/JobGiver_PrisonersRecreation.cs | 14 +- Source/Core/Alerts/Alert_EscapingPrisoners.cs | 61 +- Source/Core/Alerts/Alert_LazyPrisoners.cs | 66 +- Source/Core/Alerts/Alert_StarvingPrisoners.cs | 62 +- Source/Core/Components/PrisonerComp.cs | 168 +++-- .../Core/Interrogation/Comp_Interrogation.cs | 22 + .../Core/Interrogation/InterrogationDefsOf.cs | 24 + .../Interrogation/InterrogationQuestGenDef.cs | 15 + .../Ritual/JobDriver_Interrogate.cs | 45 ++ .../Ritual/JobGiver_Interrogate.cs | 64 ++ .../Ritual/NonColonyPrisonerRole.cs | 62 ++ .../RitualBehaviorWorker_Interrogation.cs | 82 +++ ...ualObligationTargetWorker_Interrogation.cs | 37 + ...RitualOutcomeEffectWorker_Interrogation.cs | 232 +++++++ .../Ritual/RitualPosition_ThingCenter.cs | 18 + .../Ritual/RitualSpectatorFilter_None.cs | 18 + .../RoomRoleWorker_InterrogationRoom.cs | 25 + .../ColumnWorker_HasIntel.cs | 43 ++ Source/Core/Meta/Prefs.cs | 480 ++++++------- Source/Core/Meta/PrefsData.cs | 67 +- Source/Core/Meta/Version.cs | 3 +- Source/Core/Meta/VersionUtility.cs | 4 +- Source/Core/Other/CleanPrisonersStatus.cs | 74 +- Source/Core/Other/CustomForbidenUtil.cs | 2 +- Source/Core/Other/DebugLogger.cs | 6 +- Source/Core/PrisonLaborUtility.cs | 271 ++++---- .../JoyGiver_PrisonerRecrationWalking.cs | 4 +- Source/Core/Recreation/RecreationUtils.cs | 102 +-- Source/Core/Settings/SettingsMenu.cs | 398 +++++------ Source/Core/Trackers/EscapeTracker.cs | 35 - .../Patches_Apparel/PrisonerRespectOutfits.cs | 46 ++ .../GUI_Feeding/Patch_ITAB_Pawn_Feeding.cs | 76 ++ .../Patch_RemoveHediffsAfterStatusChange.cs | 40 +- .../Patches_LaborArea/Patch_Labor_Position.cs | 56 +- .../Patches_LaborArea/Patch_Labor_Thing.cs | 83 +-- .../Patches_Work/Patch_Breastfeed.cs | 32 + .../Patches_Work/Patch_Smoothing.cs | 4 +- .../Patch_WorkGiver_PrisonerFaction.cs | 4 +- Source/Organizer/NewsFeed.xml | 654 +++++++++--------- Source/PrisonLabor.csproj | 17 + changelog.txt | 10 + 62 files changed, 2853 insertions(+), 1472 deletions(-) create mode 100644 1.4/Defs/Interrogation/InterrogationDefs.xml create mode 100644 1.4/Defs/Interrogation/InterrogationInteractionsDefs.xml create mode 100644 1.4/Defs/Interrogation/InterrogationPatterns.xml create mode 100644 1.4/Defs/Interrogation/InterrogationThoughtDefs.xml create mode 100644 Source/Core/AI/JobGivers/JobGiver_Prisoner_OptimizeApparel.cs create mode 100644 Source/Core/Interrogation/Comp_Interrogation.cs create mode 100644 Source/Core/Interrogation/InterrogationDefsOf.cs create mode 100644 Source/Core/Interrogation/InterrogationQuestGenDef.cs create mode 100644 Source/Core/Interrogation/Ritual/JobDriver_Interrogate.cs create mode 100644 Source/Core/Interrogation/Ritual/JobGiver_Interrogate.cs create mode 100644 Source/Core/Interrogation/Ritual/NonColonyPrisonerRole.cs create mode 100644 Source/Core/Interrogation/Ritual/RitualBehaviorWorker_Interrogation.cs create mode 100644 Source/Core/Interrogation/Ritual/RitualObligationTargetWorker_Interrogation.cs create mode 100644 Source/Core/Interrogation/Ritual/RitualOutcomeEffectWorker_Interrogation.cs create mode 100644 Source/Core/Interrogation/Ritual/RitualPosition_ThingCenter.cs create mode 100644 Source/Core/Interrogation/Ritual/RitualSpectatorFilter_None.cs create mode 100644 Source/Core/Interrogation/RoomRoleWorker_InterrogationRoom.cs create mode 100644 Source/Core/MainButton_Window/ColumnWorker_HasIntel.cs create mode 100644 Source/HarmonyPatches/Patches_Apparel/PrisonerRespectOutfits.cs create mode 100644 Source/HarmonyPatches/Patches_GUI/GUI_Feeding/Patch_ITAB_Pawn_Feeding.cs create mode 100644 Source/HarmonyPatches/Patches_Work/Patch_Breastfeed.cs diff --git a/1.4/Assemblies/PrisonLabor.dll b/1.4/Assemblies/PrisonLabor.dll index 49ff026b8c8cc40df87250d76d45dc65fdc624b8..df47e9d3daa9858bc919886440e2b6f07a30d874 100644 GIT binary patch literal 299008 zcmd4437A|()$m_)`}XZ+W|G|LN%v$X$xJ5683T1w`C%_jN}Q@l{b@aaWXx`-;1-d-(s(se5~wnIP}?e$Vs$=Sl9Z<y-rydXOJl96-IzVy=Yiji~9ABlEcI&#saBZr^(l#xrq^Uh!0+nZkzqdw^fV~*=e znZf=4aDGzTqh@rZyK5g~UIbO1P2GJL;Ss|338iL%h8;_{B*b8Z(#DW3e<^d;wE`;t zTJJb2N&MXn-V-GN-dltbGyfiSP0!42@29b!AcE3pwE9wN(9hl z!8&8|#_Sr(n`kZZ=yo1na4@OCAvVj5gHQXg%S@~`Lj=1dME5$udP;>GcvLs?=*~(F6}u& z*ymOHY2T3qgQIwqLZlNJv3-*=%jPb#ATHBiOyJj>27TxjcXv(8J1PHc%A+snyJKu^ zXBa2kLU84TJJw&`CpfklUeVaxW!#k$rLo2)0=vDxIL50UC;8Ko6M(neouLPMvO=_? z38j1{Jb~vJ*}W#(o9>JS9U=<*xQ2F`jP|4Ly@TTpO@(M9#L{A1VKOVjlSptg;mN$V zO@*iMqMoPl3Qv`=<%^8F{~(Oc@lA9x^;MrrZr)T+<28+tx?b=!DKw>p8j=!jm4t0P zy370Zbp@vr>M@#?4WCW~&h_Rh#prq9%SPXqRy>2`cwkcE3}O?X*)_kfYj?3^%uqN$ zg881=wRgca(O)RwyWyFng=a~*v*n?qn&fku5wlDCwrjDB-Tlpms+mty`0FvxyVmS2 z<9!I8U5l{iq&PM=LMkz zGY}&+^<{P!g@74##WVta8PF4-r-!`V#YL?iD$fJKcUr9hpJf;f04%@mPrDy~d{=k2 zlF2svv^!JDWa1cgnoW!Y#<=-A|Iydx0N59IoTejbra;zKIdqSQ?n?e0SSsB$J^U?vV@U$bc>GYP;)T!lE zx_D}Oi?_S0;Q3xhGPr zk-|b*v77NKVp?#^8|W;N(n8w!X(wX|&fFZ6D};HO(o}cZDRyUs)Qq30(=f}krZi7 z!9)*2**sUpy82vTuk-{ed>%pLWzyl58YpDS#?Ods3QeT_U#02aQdF9nMTpoW2(B*FtSJwv4O7UL`viCcfgFKp37FvdROn}s45Yfy?RQtQ zCRIEI-Y}&z@)&i}>;)-p_S0;$w@S0k&^~Fi5uJmM@~iUz$a_wmsS<(pYVw9)^v&it z7QBF(8Yc+`ng35Du-ogUSQTNxlPQ6upl;3d#Mwk9>#Mn5n*qtb*Hs ze7APJgwwu_6~h-3#YC1`yxJ*R&A^!F?e^wN9WNnyWg%0S3_lalxN?XtkV)V?-wSV& zVAl9q#p1eif(Ouk+(ycSsv`wy0DHsMCFsT``_y9P_gLNozxc*Fs&T*Qvcu zs1%ObhUe17Qt*1Bwwz-yRFis}Tw0TLwa7%^wph0&Ygsx`h*=v0ffxM+cW5>=I!dFo zdT-n6own61$=vZ%FkWw_a;G{jz5NEIV-(m8z}oc+qHkC-`sN`FHmiSvTYw91<KwQd=>pEc$5t!Q*Msfm_Q8{2n zE8E4K$if74p{LsE(v>8J=vjzR_-0CXXQEpqd?(@7dNQTGo<8LIJ@`gsEs86v29-=`COi7-Qug5vX>YPt2#6fln3JO9|}uwg@iEC&{sV zdU+?zu>xcHBsrE(ujqt1PGBsbBxg3CY+D(te)V`@rLC_7khbDlh}$Zm8Erj5@ZKeD zWh(lgw)HjO)3&~vz;5qk!DZVjIkv5@?Swf+U~F3@$F}u#oiI-k7~59KnX9d9kO>w( z4AhF3woPIjEJaIfW@OTn^V8v5X_cD^K1)Kmiyn02UKE)+mGT&0l&`%FFzc{5&^SAG zAo_Mb%9+O7$?7RjL=PcaPWTRD;X8R)b#;Vjkp7U$viro6koj9Utj3-2u`s;-_zH?C|UerN+>YiTUVu*7;l zNUI;<0h-1Kc|UXc>c^ODe1FkH?v^`qs=(NT#I5Hil;~ zq7CMcZ-$bwArhL5jn+6BXd5$&+Q!Uaqa|BI$(WhQ*)embz6atlv?#h=qyv^gsO2A%DrvedW-ruc5#uq>prIoD4|d*zz~>@hHz^~HWk zn?LbhqPog_eq&g@u&-s z_4D;)*S>}dusODnHkYgKmPA3mK^5dyQIMz|6r|*+tFPB>EQ5wvc!o_*NJqPBfIBxF!W5E{ zxiTLdro$N-BrDNb+Bzha<1 zojzuD{1)l?RQ;{I5JutM{?IuBoz-nXhz)ZqdDt*-lvld`CV4sa+jtoawbMmZK1WSW z%lCYX_?Hq%@so*Jyi8{xIOmsW+2j2lCc$i0j@Liq; z4^}x9e2*Xwi);n3FYE!#WxW?K^`2|F_c_bG2bFE`ZGo=uRw&<`VxQ^jDwT@Gk`p`v zdfH9PcM(zpU)DocgU0fkHJ%-xP9)B~%3MD8@BL1oG_JHd%P=$rJ8r&xhm;EGE?7Np^ic~~`nTC6t^poPe= ziVi}-3R$G0x4h1-R<(rA?<+9O7kkzOPpOHm_OYll&k93poi4I{P|~&;ydDA1K+Nt^ zC%c8RWYH@fcfEAndIB%Eg7C0Nfb;|Nj_rq(`T-k1fn@asR`#`?!NyOUDTyDj)aD0_ zR>8Q$*=N;msTvyQJl)2w~E3fjh0My%GE7q9R=H zFl+rCoi9AP6Fw$&{QExrH~f*VywkSzF>U1kzx&d*cQ4_SQ(0~&$I6iFST*Z*XbL+5 z7`5$vD>D2(+N)E+$85v@WjpzCdAap2M~1D+jm%xDTVk31S-S*ZNTf}sd!0s>0U!LF zWYIXXsXn(}5HQhwuKHXoew9l|T{gnIn2nsZc`En~!M?6ppfQkUXRgZ8Y)q}+N+Ucw5t!h25>sj(vD6%B zshL!2hR|7mqkhJQU;QZnd5n~U$uia7Q*dRe{s;T|qr8fBZ0!6>hT_iv)z!bQ`@5Y? zu|N1Tc|Gj^{WtI4$(z8M3;#lxt=v90_$#3b7N;Qh-9?L%shXZt3-~OtDQqS#Zghzo zUCmgG-Y44rwW!-hKw9uRLcszdxE&nT??yip@I}1|I4YzaT&TgK&9A%QaoL&7RWiA@ zy-2$!b-cOlF}tNGx`nwGKF~*SS*Wl5T^|47kt&A&m%HrYj>0~9a~AN-ZGQFV z%15Vu2u;P_iNu`{uitNBEhR^;hGeRPNq%$!ETb9 zwz=qAm20Pl27S)QMw>vc#-Z{+qAr+yLq~o$EMOG79z(M*v)x1#fnu2 z_#nljGDIT#2a;^(HbJFxn}~<(;T<655|E34+wnqZRO_qP&xEd2J)l#Knp*5^x;?GB z`h&Dovp%WY?z}4oF$2f^w8gM!jZ!kzMv2!>iR_UG>R#C7mZro+$OJyjX8(j;k#)n! zRwkRvZY@pOy~Rw{vwMpfIUZ9k(1Ct;tozo(jMc*Lc)j*K7;3i!3etUEn4@az!<)~l zPhw%7M^8ED1h+E|VrQ<*C&TpJ-cNulxC8j^OmD6ydj#51WJmlWMr^~Q`2R}&PxJp0 z{%_;|B=}AAeCgt*QA-DYR8rqJGxg1q`jeTdH%jW?W~7#{jJoG_A}wDKoj5b;)M)$6 zq)kz6X42}Q8+M>n!XA0|v}!BoXVIfBJaliDo^jj9@(RuD={zC^2}jjrF?TFO4wZjA zFIAhp*d8Qrx5<|z$*xU4+a{kY$uwB{Le_rpm3|GcK~R}d5Emd0j3DId%SsJehh-V1zQVIL3rQTA}8u9W!>{k}%)n&?i&0%JF*)_#I4 zjA?0NcV_ACE^Ji%gFhYUe@^YN}aER6}BTiH0 zI7yG+gMw+>{G;KboA2U1DE-{@r;k!7@frRUhS=~x1M6m{-}zW*6@U8i`fmB1Q*EBP zmOp(th+9g(JvPvg*bGm3Di^&Hyd558F_DUPeC)8}<2mwj>l~W0YZ;_Y#tD0sDxi5; zOyLMXE_x=hb&NN#rr;=JCb}IJz<9NlvoH?|Olb}4&zO0MaP~~TN3z<4(-s#|iiNXh z@&*A}vSw*q1KW|RK)@D@I$a?JL{#aGp7I$U14t(ujh^T&rfTg+0h6`8rXS=D2}vt# zf9j69rVo3AYiNc@wQYt|znGMT)`$B2$;NEFjD%gXC4E3Z#@xP?|6 zpggRt1oMu%UHA@o;TX}%g47OHzg-n(pjDP27>sw#3j?CHy?BJKvxd*zPD(wz9yf$vdp@u)Z0)u#~m%vL>QB-UTN3{}0! zq-qXSU6u+yK?gnAJk)`#yJfwyPb#>Fl9eE(j(G9qe4OzRPC#C5H4n!+dN@!S_r#3F zi_8zDCf%yPSycv?;pw5LleRgs){Xg~0$3?ESTVWw(5X5&Ll8ArDRy39&WZgn)&czh zlr@%6Yz>?2M+%wy#$}S7a2x|@dYMz6l9Wxgm1UxE*X(0cv}|R0D%?+6sn695?K>`V zFEzB*;{yYQD>*cElO6VXS!k*c5KOekeEU`a1 z36OPA$|;1 z8Q!8t<%F2DFWb>hN9~1|2{({Z+U+!Z-S(l_OLLXq*j`>D z;U*qM_1m}0F_l^wNZC=yG?@?kG50Fnu9yR{QwdHknhD{AhXdT|HqIlt1_Q%PstyP~ zCxX9ZW~o_tPv(pTE@0IG&Dt$)(ZOa{rN=~HlG&|gAGoz6sM@*Vspyk--})|-=|y*_ z>yj*%Wn$4TJ9TeQ8Bh@YqIER6565WXlY>itIZe zOYbhWBTJ45+H+hZX4O&l=&oZfGUZpgS(^kpdxK&GJZQ~mg@WtH{V(#NYdZy8M_)KDB za_)?cQGMF6>zIWgI8=CN;VuLM?=3n-Cb8Aki-=DPMuC^_4X)z7Ug225u^%ZkAs$>O4?e1g97Mp1;9!GzxO;=WXHIiZ5fK&VB8qAx(7enyce zuS&|qchN1W-9^>{iK0r}8akgiob=r5q(q;j&85(=Noa6_D=3b{^2!WP|k-IH;Zz%Ou}N-ML|Ky#-r25Ivr)%n=ab#OX8>1S*e;F5Hmj36iW*Z-3TNd&b5nvJ?vUW7sid<= zkKmmbT?mN_rFOKofk6;=u=~NcL4y;&(FG;L;~MsSu~%j{xAj zRxzj(H_?~r^-T2pr0?wkS<$y?^*tRy+3JBTJ7lltjjS|euje41>KcvyEHd4=RTd(0 zj`|h?yS)P>y8-r<(~?sPu9BMMjJ9jO2|XAEO?tfQG?`46)vI~;n(8&Ygtxiy`BDmh ztw=`g~Kpk^1vaw-X&D1m8rgCmWrd zgnP5mnMt_d7V%kLj_>@XK>6L_%Xo>GB78Z4=yD;Bb!UE}kR)B3B#9Z`>-TcxIoDA- zd<7-PI6m&SSAGT|!$W}=(t&s+B#Cc12NYm+o=C>g->{rQ!guubtg z(WjdLUh}Ndmq-&2$m9ARh$i|Zz9@RCz6Yb{%NyIri{3*>IU;jw^zmj4&u{eIBo@9( zxUj%qu$Ga8T!gPC4rkjzgkRxn1kNv?;QJw_O8$zsh*^vym`@K1#X^6%;urk>n+pq# z-=_@q7b-UkMZZ|dc_hBpBJPJL{eHh+Kp%b4fDL;oKk@cmMc?0n`>(4|@=J(LDG?cjBFixw4P=Bs2_ z?hQ|795RR77&v15k!X1WTUh2Viw;g=l|p+=J4)>F<^J-uU+w6twlZzCttcPsuV|}k zrSVsWZ-7V9QBuP#gu+{SJakjC4-&qUuCQ$#^T#UP#-oJoHUlc{sJrQ?6;ISrtLUgz zwxfb}`u!m8s8y|wS~a7iMxv)AjW3KgMR7EIBV-o#Do6faZS5I1{`g$&i7o<%ZAIB< zF-j}O6XBb?z&*_Z6~EF^z)+($`&yd4*Aq2+qFm^ku+3iWkNT_Q#!lGA{urs8n9jaHmC`D^`6u{dpPiPOeTaZ=_f`VY(Js=fX}F#Mo4hA;1A_~yy) z3tKi@h9749!=i(Luna%kKO7Dp-sJER{t;{6)4}1x+cug-46dM z;sXCk-t&3OpWu0n_*J~0<#xiqg!l;Q@8sPM{~ihr^8fQQ;P=K^cO~#|=Pmwa`4jvr zJY&SY@^Rkn^gK*_g!I4jZpZ&1Zx$;zReuYwan@k=TW|akYWIn)E$g475kccb*NSwUO`f&7z2J8A ziP-ae`NkUR7~FFE#$YVASQq528L2jU6I$080>8+9N;^WYUxmSiaW(O&>YFKbrCe$u zzMN-Lw(bJSa6 z#Z;6}rOPBq-O;d3LPS|Rf=AY~zvaC}`ZIVp{beO5!>91{lu6a@hO;|xEqAfu+}bQs z&tdQ6s{ui%#0kmi9xVBH5t=xHz!-tbA*}bIHeUmAzVRL&;d^yh6{4O7#&u_k@>0(N97&AY z_@jF3@7d41?O{7KhxX|)KVfViE4;7`zd{?{)^6Q}$10k^iJnOobf(WyPH^di<-_Kj zWy8AMp1H8JJ#Q{1sE2s60{UDV7g#mPCj+`MIXRz9Sl-46*)0F7a5+g{gWLQ4Fa$1% z8LZ#<8dBgt1NtFvfL@fNUr1$c; zQaTk-9O)?eXb8yfrpDse4MQC6FeI46m2JK`gai6?Hw*_ z`g_P&IW0NiCkgf!`%9(ZUP9$uj!%;BBQ%x^KgCNro^|5H&jTE>;-Ll~dk7+v?@s=4T;Jd2voJaM3T?cgy$nw(m=Y z%&w89xBrDSl^ayrMLoXCz{>itY22E~ddA?bFvrhqPd}fK?gd@CC9KlkGpmWclP`xA zv&TJ)dE3w>jMyXTpHpl$AbB%d!!s$}6&lU@Ly$!>POGdFsrku*y8`;kUpQinZsAu*p>ZW{n6MP^Z z8FPZKEZJJZ2S7Y?z#y<}fcW|G*w4A2x$~PzA35fSF#3d6A6Z3Q?AC$Qqt9NpU}p6Y zdpak!@9AhG^>dowGti)l(kXTO@l6W|0*-aR$s?!ii$6+wV5-L+aBFS?y$u=b+yvs{ zkL{;RPp!9tshULGMSJBmhwH~S+8jOAB02MM)CbJjvYFmI3uk3?U-R@EllEuLUf5eF zO8cuv&`Q*c&PS@2yZd`GEm6f)c%ZwriMr)97wY+dM=a(ARAzHmGimNm)yYH>-r>sx4WS?{?Y$>9%`i_rs>{ zj-e=iMj>YV>0)a=Yq`{C%%h@v@oH7#t0~gur?xWxDw*on8eOxdx`AGuY-PF|$;9`h zCAr-qT^?#>_DH7h`<0Bn10&s3|AjukuX2J3J}0d#_=U>2i7tmJei{yZZu7Pqa0+(u zy`8-DJeW9~EXVAG!6gw+VWGdUA|vS$zEa>XW?B)Z6)n?B1}~Hh&^Dj`06v4d%Rv?O$L_lvL&Cu&^NqRFQ?sGvo*vO(hy@(oP*ATR_~_axVM z`GcvNOh*0T7bG`YJs>+mtXJ}lFYyS_`1u|065rWSe_?U4u*6mgGp;<`O0BrA7PpuC z@{Dr6Z22Y7!~XDE_KZ36cnUQYwI&go5r1T@oHuHpbsh0pRSvPBmZ<)Af)vHkmPMDX%lpHO&TfmYqAjRo0XT_gL7B{0W_aKX39@DAxA<{V>aoQGc}ZG!wmh54GOk z(P-RlmE|Uq#5tQWywtX1_&n+=@2?fTCa!3OzoNpGdp~ZLZG2@0-?bFo{Z-P#ukjEy zzS3V=St~*yss2#-bzb-wr3=I_w~(A~kW~AoWG^m--{L*yd;XH`TiN~=ky69qcJVCD z?^`rO8by-$-by~Xs(zbrfwKmZ=4Ugx;5&lKNo92cNoIuXTocI3QdS4YoHIi3FnDU; z|5he_<3{I21`Die8&7_6&W*MG%VR~7QRbQZy;InUZO5nZ>L|6;c!HVuQuyp^t% z^k499Pxr}uCjXyOik^c`yyHk4vl8fOk zo@!be`5Y$|UPB(bo|WCH?cj}-EJ`f2bP#%xeZ0)*(_gxI{S>EDT6pzCfEJ(_#TM{> z0p#@H_o+}#BB^zHLuPAFd0(&6mul%C{q9@l8z#ESd@p>I5~KNVEk6WMyJz2Hk2qC& z5;Yb1jdjMDw7GpZ1_V!m~4*DQY&kkR!h~MX5Fp)Nc9Il0x+KxunqJ2 znIRUksvq*Z`@YmnwTe;=@(tn(k-Wn(N7Ur;IdDIoGWR6e>GX<#`?u=aBv zUP!M}db1P!QUb;))qh1mY+X6ma69i)6yL8&CqeL^1)&^g$2%Zv^Y=sdsoG!vO-?@W$e}+r8q;8u zyRwyC&gS0yI2|o!AQtt9WXbdwfHn4EiTzb#)~zEO*ATS{rLT80!`T|Akk(7KKz$tCCP#$IoF6&+vKMoM3>KpDx}d`rdk%G(f_pBtZlF#RY##LD^exJ9{VByK=jW;{7Gr z+>aB-ekCzj1-xUf;EjODzIh*&s_h$Jm>4)HJHg_$c^g=~GU(I8=k=D?dv@7o?tA!% zZ5NGf`RC)0PjzR8&%+oM-L5c$nUNP2jEQfi%xZ+wgPb7b!{^AU{tjB|LSu3xFI+50 zwBkjXMwovfUgcWU|mbH43Bh8>kN-Q?K5E)DKfvvY_^PZ8hu@%Ly}Ho3z!DMX>`_Nk-w000xZS&S}jNkqVF+}v22v@ zKkPUwnWN6oPg>Mh@jQw?P3ch|PG0NuLYJbIVjM{maYB!$dWA|bj0MumqcfO=y_o`DCqNIoL}WLQ0~_A!d^|sH({5KJsiyJu?v%4 ziut|Tk>NarB1e}xaxk-}!?>)@2cVFtE|3>j^0^koY0>a)*-k%>9HHA8qu2(|WybijW z?JDT5S6{&r({KF#n3&2S_>zbckyI~!EjhzLFTR=H?F5qJ4jF%;(qY?LDxcq1vgikl zKcG%Xzh7TL2{Jjoun1<3Y(k&NL4*UjxDc=bvZSp;{*bhlB-_?S+A;-UPbd#2+g3v* z+Spgn*ivU>X`W=Q(_OFmeT9x(?Z`roD#9TUhKqR=7HiY`76(ft#u13Dza*6URJfL) z=VSrdZAK@;o`WgO4$J6E@85AqCmddZ91LofRVT!7d7r*v%a0KxiPhprVbov77CHYz z8Fzk8$Iy0ebdKd~*f#C6G;O$pcms(`DYEWl>mOUZyLb$?XR^zwhn}*raxvxkc7&Fu zzM>;fl<%gyWj;6N5&o~@KQnl9ognFD;+OMg*6v8B=Ttvl&pTOH2s|ET-2;2;jPzBE zKxRpE9`APeF9P==(yy73&b(^4h0MqvB5MKtduDZ*rcQ5$%Ha`h0WZ-uv_sY|1oh7; z){i8$%@7-*Tw;ig3QY3&`C)`EJgmxGlCLils8sz3!6@IjpbE@Z`tJ#?ODzhLkxlZk z6V|sqUfVjf%ktBH`pqjgM?V;wqkT@CMfuNdwuf|2Z-I?y(&xlP9@(sCcl%PU0^i%b zwFL@B#nA@p?g4Z**62+`*z(`tq3Z9-k!Ahbg8(ol~(e1%fsnnON>xkFxR+lw4LV*VZ_taFrBbu8^*q*f$ql z-C432V5hJYm2C7v8=AdHml;>qZ)~WQZ0Fac8|D5KYy+;d{=iIZz`$eHTLOeuYW`eHcjnu71S=9F%Tu} zDe?O@S;B%r#{Twg_NcqFlWl1?6W=~il~raBSDNZ76K+XELiob5;Io;;_a(%-CD>2i z=`5&!w@GAVL%2p#5FWhGa|=ShT>|)Sbp)f%E*MNUTic(4;Q>5!hvGm26R$xRa<=&R zmbP=U;X&lokAj@66~p*~1p3SJ@5ScQzgqP(jsZHU2*sXGnNI;@*D$wH^YpRc(Brn# zEHd5Ty^_XK(+%#D5S6;Y+a!b=-&LRY^obH;OVpcYY3~MiO9)4b8+=egEYDpzmElce zguD8k%rvH@8?1$f>N+0NSaxnh9&MLuh1{8tpJuJ-Hsn#wEIfp~(pLG3N$%G1 ziVBCQ&>qixfW|z1F4;&r{F%=j+psNOAzR(jMeH29wgX~HyKm~E?WDFXt#Ms{VEs1D z+uDvKmJQF!MmG9c$FRFf*c$muV$Gr|0UWB15fAQCKxL4yaZ||M2%wwjED+j_2 zvTAETWbyiYODxqr8WSc-cmW@74a&&K!7i>-{yGleN z`b9J2VFv8XRx|`g%on7+ax4u|WGj~@EpH-=&Tgg&o@PTtEiSO$k_uuI4~6o)ggXy|yE5R{7{_9r;(uIF0;ePgrO4w2u6%WE@AY??{_n&yPCt zuM#Z~4UIlwJs@cfgws1>91tsq1+2QE79XO&5%iBq6N~1VSV`&_1 zN@J{Jb;$ST;^}~G@?Xn%*z4)@H*AYH;FPjB1Jy3JR&*T|m4d@$OdZa{u&Zbld@gz| zSrlp76uIbq302YU2KtVmKn$QmRd(4DPUWKSB*2X=FzMd_XI8Ygw_mVs2#*B6S`+h3 zz=4M3=ZQ>ihB|8pm;KTCrW9lpzE_^W@4H9zvN4@C!Q*P5lgE}X@OM^P0aXf`$I%jc~ zhoDYXnDGR4N|K33)vX?El>=Vn=q&aI4eB)ZVF_A)UbI6Ry^c;c9CHgeEJDt>JY{YY zzX~>_d4{xYgv)f;vJ;xol{f~n-U!;xY|S@>HgQ0C!~1Q`d%AN)YOGapFkfm$xTVLvni(uh6H{#uZJ<@lb;*)-`_+)4N zkUh2c?0<`|ylzir-}GvTrGI0KA59n3x5523 z5y_X=utX9G>CPnbfyi;|fdFPo;V~34a&@-Gi#AS?Dn%w9Kxj;d(8S+w?Qb?-VQCc` z9V1xo1N*;jqYFvFP=}4qQgshDdVeogx|9gF(4_EK9^ChXmXW)=j+2=DSWNAB39+E7 zogjgXHQ=+hBz~|HC6$kHWHL#N`8+>AaRuyO&G7%DiJB3id z4u76ud#ZqRv(q2vdiL{IKVP)p(~28x6*TqwIrVnUYn%pTfABPcFZVR2S}_xBCBkP* zIX(H1YiyHfF9zS~8t9wHC>6VwmrPA!(cZUdD>1QWHKGqSg8g}Zubq&54vJ8I=IX-@ zo=)nz2ka3vcXtuZnYdfzDqlHR!LEm8S}uMm>tIp%48dp!W?lAL3E z1u}jZo%Id=C%zL|hoU3RSt48dSuKcL-P>IrV#1ZK?V$$gIdo>0t;+4RS&o)TD<-~& z40E)stqET6O_`CBamRY>5L>0pNg3+XHIlubR_;DLiv1~$Houo0DcR*bL)wS$#BJSY zsT<$nnPfP%v-Ej3&)PZiIG4xNZim$icbg3a=MhDsS;N=PCskpnucuXb_S*M)~ z4f5v<_Ya>}y@0GbQ;F*g)X@U6J9w777S_*}S8$1<2r3kFS@| zX)7>|kmTSp9x`D$JB3TZ!H$vsMM)RmjpX(z2d@=sc;^fGFs}{q>JKG z?mUM`Rxh*-o=Z@62Xb=b5VwdsHR){IEVop@QWNaFy*rk|1AA8Ty>b3wImzQ$RnZgk$!sQd+Ocsl9+AwQG4)Rym5Rg=r>4^OS{% z{#q0LnF`XuV#aE8#OZCU3tmPhyP^vCa>Am?WeF~t zyu=u7%hF58;`l27Erzd@!jyg$ZyFK2ns@Cr66tJ&*puARG^-JO%yD@pIG7Hb;Jy*z zh?1`<^6M{cd=MY!CXC(v;&qmpye8qCdb0p3YjEwHHmJ^GB(=p z@Q@!uVsVfkjsAAkh8cI`q|7go+4EKIoa*a9RDZT;F8iwrPVM!i^oKV~1y1}E3bHS~ zB#s4dAg6WB z0GR8x{tqx8>EZMD6W}*rufCo-SN|$ty}l)d=t^`XKK6WJhzmW zlS5Fu2qJ zGWqGT6J{rlcc#6aYW1|(p)gpc_&T!<_Kd8T7%}ET>60R75Z?hHcF)mptNKpD0TkF@ ztj(KU=`l_xn5ZZO)C7V3)dXwUtP{-1Wgg;Nr|Znfa+AhB?b?zG-zAu}lz!uA?{4@# zP!~zvMt;}L3y!1S0O2lAGo!geP*#$UCs~g#bx*#S5*a|1<^oZ0=7wx@7 z1Kvv?7e(?xMs-%7!F#A#<$L0x1U5dXGGdQc*;G%DS7n0}sO(O`VYr?kI)}zuJkdJ{ zT47gqLS1|%&ARQf)r!zIZ>2H2mau?|K1m6dN#}@YW054kgxmi6wR@RcK9g)`cA2k! z%`Aa+oV#>PNJ}ra{Zc+PCbZQyN4ZFya--le?JfTgS}ylEq*=+mm!@-&yNlra2%d?M z$=!d8_>`)}IGDj?I&q8rUP^5EbFB^kH8APb^rzVPCzAL!8~?1tRVQ5ut=omxl(O8i zUm1_gc1JyX@k61{g#lNl^t_qX@VyKOjn+Q|qWN7rg>t2nL8O_IP?twa52jI!258QQ zB}X2dhhxHn4CrvpW6<#|p+mn>;w*!XoomFRPs)v=g5E#`AN zSZCtFbGL+HgmoETseuQMZDqFG;w@4#<2}-%pSGVzi>cPSY()=_X6^Uv`~Y&>%?`3_ zoZ=(rKKWf+J=XY5q>7UtpVG!9Bm5v4;R`c!;YRd~y%+5YGyX>VS+M;2z(fDgE3$MR zJqwsiRW8xAE_?jp{h%N7DjOVeq}jthPW)aoZV%&CM(sPkt*|Ykw-wsk21NrfqT_o- zWj%Z}b?Kbl(7M7;Qxg*tBVoQxNrewc+seI3^fMCGNcf)whxgmW1gQ0x4@qx9DbfhcXwj4u8%u`yB~lA=GLD83d{Yf`k;4+Cc1Db`0JJM+uq z?~GPgze2%jVG8~T$J|Mq7#Th;dcH!GqlF6^%tbD<_4J0|tH7E8&4CvS8W(rw3~COo zUC==9wU=3{Ika{`15MPPGrT~v)J|E@U?_EDZnT+VpDbt~EA5#|?_SVreJu)UyOeJ` zS|_$k!6&50tkYdw?Mih??t`Nri3&l*R#Zr6i%LVo$m*U)8?~^L+ospaKu;%0_DeJz@-8PFVblXQ6uU}dAA}N6AIiA;H~uY zWt;V57rI{VWsEOKmG!vHy}deKrQZWc6+U4@)I6B7@C%EMLvIP(Z7i@mMmO@mQ*oI0Ht; z0Z{rE$*oDH;5))i83%fMQXCg9=q*ZdTrlfxN^x8$(OZ?`xKI+^fF#6msk!>FV3w|t zcBafbsFjY;vsB+DtJ2T00SW9FLZLD-s@~9_$JK>Edv5-reSw+vThn&o$INuKOcjEL zGc%ri?})I_0Z#c~`?I@pOENoNVisx_tS}i}Wvkyo)(BLu%K)sWlp9_x14t&?A;tlQ zzMOyKx3iFC`TYzy#&2f@--C3P<`T0DymwQ9{TlueviLzc!H!*NVS?=-E!m&Zh<`)l zK=PZvq2Y5W1KUx%gfq(sd_Un#r4Yxof%acsIygk ztp#jH!moM!fMOFvv$F~j%rBH ziL=D3BX3wX`F3X1kyAI?4SGLclW_PGX#*R$l+XliUL58nIJDctp9$uepnN9W#PNwBYBVn)Se>Y+I6M4pZlXIJX_3~Jr5oAI&dCeur-I=wgicpCl3yfT% z*dfS0lSAZZ^~YeiB!T-N6^(0Fcs;ZH6E(;p3&e)-IJxm6X zejP4#h9b7(Zm-(xj7)R_6vRNSzHa?QKp{I+kdys_q>#rpmj;T?WU9Luwu`e#Tn>kt zIfrB;VXcl46-7tCT5SA+wiJV3^5hfh#;_ zbGN4@7A+O?ZZ6R@xzw_%5>SZ!3wb zOmQ6vP0tZr&yI1S*=OL2f39g3NPVQ#`fJ zLNmjtoY#|@6}Aodamkm0&dR5lk;3!A(VJhtbptOs2FXi~Giu_Z_2c>C_+SGYQa9_VneE~A>}LjQ|_ID?(kob1Knve&|N;u33e0J%WJ*ea(YE<%q>YOrv^x6fQa?E zf0D`uAgOAWxZqfvq_bft>7q8>MOdqY&GvT5x4O1pmCD-VLW5khexT6=r!FbuM{*2a zXhwP9o0Cz)B%NZZKL@(kL&(=bF zUNKCQuBHz~mq@0i)K708J^#zy2l7#dQrkh3N*up@Sg^RK9P7ICLZ$z`S$Pz zLCyPR@-8>x&SDFYcp}!?e@=)+hWImB@<};HyX{-yimrfUG0CTj7HiV)$E`nrGe|Ly zn$s-bv&6M#llrY}rObthBTPX**bUHFKruR7BwO^9b>U@4!@ktPTNBVj7>KH@vf0tQ-ta&(Lltr|nstq}%;4A5 zq1YVgI*hk#xoulH3DTCm5xlZGlc7ALq-5z2akNUB@}dye`bn7INiL`c@+%xP}CH$_WE<^^yS+xEvRsL(06E{5_B71t1;sqFqf3 z?P0nk^lhqGJWg;e?6s?jvn9_ef@rJ~o6Bm>b(VPHTqV@S+ng)1dXJ;}aqPgiI-+}) zil8&wl!IXIR0Tp^oH9!jFgsdJFmu?;w-V?=_|raTeFg5-9^s*L)(NH|3H%N$PkUIj z3EvPI*6iAkX2DC!p5ebg3tm!Yz$;%Y{zqrQOUj<%zcCA5Qf9!rE&9JU3tm!Yz_-!! zty%DrvS;{j&w`hfJ;Q%z7QCeF86J6^(O;6XXZY{Vf|ry%!*l9v27XDI0pG^Yug`*) zlo{}C{QTZ5cuCna{H|H>lG22CxN{O0*uMB z#$yDOmA%;OcwZ$lBF7VPIaP}w$g4m;#Ja+sCJRa=a^HS9z?&aR6^!8`37cKV@oPR8 zqaid=eHK}}#nX%W3kCsFwGj*ncytqx+4!4(3nrSz-ZaBbuRZg}4vtx~&K!r0*>#s4 zd~z=ze&+Y{l;24wIHd`9OF~V8OgysQIFt5Fw`5+&tQ}r5__}TIhXi}tI3#TH>H@3z znYzGgFk2T`4Hnzg!#S3$7CPrFg;d|~QfTOF(I6O{Gub@BGHUbs##*PS<>W_LXv1m2 zV%QYjCmNR2W!EC2fHu>-maHm&X)=Lbk>=7D7Rp#U8(5Nqp=ZpL7bFR(aJf)uEk zOuOOnPn+##8?u-R$7HFk3!fL#z0ei^Y^{zN)Lu-NH9O$j`qfDvm3wCKW?>Uv4ipLM znQfi3-(SwfQOO|##H6CM4o3C(_| zzw&w~x5|;d=+nyPWhUh|@bKGxJvI*5*Sk_YPGiW)%4x~r2+_A`b(L@Y^R{U10kL5> z;!t28=hq^%0f+A5t$~>!I!EDI4OY?P$e>)AJxvXqE5`{bS7zhMvu8f+xd$ujdOFb6 zlYnmHGt{v<@9O3My8nYvE;jbcFLhDX?h}eW#iM>N51F!5Mi=vbfyg+ccpMT(xkl}< zpe)344@aVJTqEOF;Q**v04Ehn30@NdzB&O{y!{D0c=sk}cvCw*IWZ99votEhc48B> zGq5J{VBZ8UV{<>kR*!6={IxnZtAzPDioT#S;ao-2He_Pjt%O%>4S(-NAMm z-&?l7?4&9VtZNjj<%i&XVH@7A|5Lo+k+auN<;~pbWAks89H_p?@M9TWa^r;u-tkv(#*Y0YE{?TFMT_Cl(zhw?@%V1Y z*fu#9_!nurVqc?W)d8?dJ&ygLnHY{E9DdOg@poWGMYjlLXM?w#j_x4LwMPA|^RxSd z_xjm*`BCV10~_OGh3&Q2&-smhRg>ZlId!x3iWq&}x6#U_E9c~7O(|>m-!XKp0?nCV zfBLGs%;_OX4G$ouKUL?12NDFI*|=@0J@X)vo$!|sFy+WKa`I{e)jQYXBHsKID%*WNC_78RzP0xOJYZnXyqv-=j0L|D?UeV0gP=#KDgPr z%<2nH3t$cB8T2D@qU}TrpsIXp3}KU6ja3wS!^zg*XlgcCr{V9Y1Y;G0#O>&Oz6Z^V zvGEu35&g#B1Yod%eIu`9Ea75z7oht_`i42-`gmuAeHxeh^2R?TI{OcTpi>H9_=dxH zT(em}H4e5YF*4Xj7;KGW6?uaDCX4$OF>ZD%6gOkRHGgUHEUqUwjel^rora@_`-KmtO-$?gMl6H~CQaV))B`3O8=q zwD75doAsjoU4e;DamtJMWtk zKiEc&DtpP4Ss~7ppv}~&0vxB4GVuX>9FW683AZiEb`3dY5jk@8n9N)Y?W?6ir&QO+ zYc<>M73Sm}$v2Buf4tm|@i)g~oQ;-bjN5OqULoywYJZ}&@%qxy-zv6trp<`QyL_mU zstcr!57&Ghp1qRtPW9>1{6CW8RG%S1VIE&Z5(FeTlXrL)kGvjl^1`zTcbn)AdL*OY z{$*-^rNj+*(z}As!G9b2tPBh7F`G}XBlpF)b23gQ7=$O`Ia-Yc;Q~%6kGQie-vcB? z7J+%)6?&Gv?W&>Z$1M@D{2Vv0yvH6(5c}Xf5fb@}M}I7*^Sf3C=R$+X(B`S&JRv6) zoUbpZCR`!s=)(e*`sJ~?fSH?p8WJqxkqR%6f}BP5%zE_CtF(WD3nkGa3onwe67n8qoT5mVAC8BXMk4MojO1kQc|BL4kh z%D+a+r)vLA`QUO2UvV{c@*$Lx$8XSzPeXnS8zWtQpUI!ytUS%)dv3~ha~AuLqNq?c zt!CjLYHOAgL_nJOyZeG!y00Dg>#==gEG3^#ZZQvGqQ~yksurQmj@&_EUMF-KPAeC9&dkmK3z}kbl;0~7dYszh43nBcOR-Kb zw6|fgR<7rlEfbzc!^Zf9=_`3pOVaq56V!wQhOOgNu+s(yqtjsL_-UiV*KXf1dgo>L ztk>zRS|@vaaAYI$sXQKm23Oh>oddkHvq8SS!{buo`oT}r$9N8~^2bgq(jucU;y0Mu z?3Maely;)`cP372;!jDm7u?jZmW0MNJnPSwV1NAunsTkAypRXuQ{++lU;donIud!O z>fIs;jTZ@^7HwQFK`maYznHKSx% zH;@zD$it5I96RPjddi&gk*wNg`YG&3OjF_E(q&Ff$O4%8rAO8fF?`O81177yzL+}H z7vC&EZ*#}%Osu8wrBq`Y_?Wrx`(+X~g_ zdhl{V)?WPer;+SCj%PYRykgOQDn57e+wke9ek(bO@YejaAd^T;;u`Ksv-~xG#sO$JpgWQnR(yaZw-$#O%W1YX#+aqxw4D(?XpMNv~92FKI#)EJl7(ra3l>&9Sl1 zY(d<^*tihLj{Y)<*QgfEhU3bKW&r_bavAzD#@$!|_%eI38pe-|Ues*+^ui`TT{BI& zH>u3pyDx&<1*^RXL%%?8+(Ck#Iw*#3Zp*uquoJw6XLy$;2XE!2r|R<_yAO-`-c>*p ztsczNTNGkoO>GDv!P|fu8-HV5<=cr3tluBv$Km8A2e4# zNDJj`{Cu&JyqdgPS1ZV;&UU4eGyR3^fMkNyo(1ml~%1^`X+aqznhF5tiI7zLWbOJVad1;hUcOO>5cF` zz!cmDUO(4fG2z?8yuo`VgR$w<7LiwfAJJT8AXj@of$#%7cCd)+;$z8iRf8J@4dZUWhWKfL*^A2HP~GibzSfi7KC+q5Z2bngRr8Mhc(dFv->DH zPVh-E$(-q$9(wE!i{G7>3GO9>UXg7dl<6dXx%h+e%7T<03J!m4`%SikvTNT)K5GF6 zM%ng(Y`!gHF8yAIzL=MBgJWct1trQGt5$ZDr1xdbz8CO4Yvi2Febla7-K`_rZAHuH zJGo#>Tu?5Jkb?U^nSvEgWd=_4>?Z?@A-me7-H8-Fh5nPZ4_IZ`ai0obMD>-y*1b12 zW$VaUzcgHs&k0mJ3)?v#b!N-C{U_T~xM-A5DeE_Ljm@BT#r+aDoal@bQo*Nfip7Bi zY1sE>E^o;*X7@Gp0&{19VR0nEkq2^o*7rbMP~>I<<=$+|-A%J~9OT<@blcBoSZ@xQ zj2B!a6HmtC`XM${8?KbdhkRqF`zW80I#S_(^0IQm@z86@cWTm{g{$Y=z{n?@m?2O( zB`2*UI~6r)>1m^-H~1{*bmO*YvbE0<$u;_b4?jNg?jY2C`wm4Z+3Et9_ zqPGVZ9|RCHT+*YD(e#DIpoo0Rk9P)NkUVQ!e$fUKJL)aczF-2t#E!D|)m@stx-H!? zN73H5N;>|q{{l^AKLTGSpd+NRqCKYLrQ*j)$qdEl2_B+=)^&=*f#uh)uP=pSC-{n` z>$LX7RPa@sDl(BVQ;b}V-7WZA}*#_@te=V;vZsWGeOT6%F z5M5cQ8#Wd~f6ESR;;oZIv}+7!wC}o?AD!EFQNezEU;(-Jq}cd6#WTS-cvip3Bm5SR zF_w;FbVeba3%*TUZxuSkG*Dx1jeQm^C`;y(1T&h<{Ju}e@fJ?eo2IRVg^CpA4?%S&{AGdli57Rj3#k@kL? z+V?4{!QtAYNwB~6gCv+syZylriQ#dweJgvBZud*&!f6AZ-VP? z<8$t6tGy5ScUbrqofEm#((uQW6@|o)Dw%ZgRPY67fuehInj*C7C**6ZbVny$QiwAJ zqI@>lKTWc+rskXUKwI|aQ7~*s)qVyDKX}4(JI2eK58gIq`$Q%IinP_q?erZLh_^u6 z>zZL?`JF<);N)hNRLdaJ%XmV*KvML}581{=2XXcDR6WUD!~O|kOe#PF|3 zoMK0}@oNIwa8wg^r2gI>*FZXMNL9r%n#pCE=^4%RTor*- zECO<9xUG-Gru{$bqiEaybFw17_6xaj)TgE6GbO*@(wD0Jnd)N0u=d}CD+QaT5q@Ba zB-D;7Tq$3Im+ul@c0m0Vs6_u~^e*^!3rsOz>@LNk_cuUV%?kcbRDRTHl?+&~@eiVn z1u|e=9k6-sBeg@8Up>o}rh0SPy}RA;pMb@BP?v|9iZSSGp>W9?!p6AvV zi19toE1r_7{Y#35yLnctn7wxb1y7V?@1M_2UEe%-gA@c}AN9mO2585s;r3EQ;;JkFK z4^27|SsmX4Apiep`x5x5s_XwZZ<0we3CJX2CJReg0*_1rvQLo6F5m*PDWHJJCW4Gk z5TTD311MGn)LONIs32->ty=e8>ss4dQR^;Pty;BW5>*d@gSnV7a<-* z4Dcev!@2VblqUYA-$E+m4S6_65VO|EZz?ntYdWWjzo{ci62q%#*g6qvJP3hgCph}a zB_$}RozY{gRi57%ZLOpqeN>*jUl04A{e1@`4fpF)^O!kiR!DBO3(40yGvr{Zh4VvB zU;gAc{a6z4&AqEr@p~)jVt6HBo4A(Ej4{w7YBB;o!*RUIR}4=fK2E*btrXTNAjx(=3L8p%`9+ZsmIG62^b|g(OiAFfU?i{rgXzdvuauYv z{*D)y^J|3*Dh~bTlNbTb}*$vTY&T@sb<2}weoYi{~^&Z*$|F43>t0(_Wa!X8#>7+D& z90VWb7CP8H+@4Oj5MQy|Pz@uIC)AtL)UhB^|97pKZC=fk6b8FS3cI>>QxuF8cGJp< zZC!<-M|HIO+MUVMp)Y(idE4@`0TJklJX7=gvGP4OULNTX-EMV<*jGe4#9W_%FuX>R z@&P&B@#uS`Lz%*GcW_bUpp}gqP<3tzsE?73V&-^xhcWs%7eMWF0r(k?j!n0DY(&~D zjdY>uisv#$Fm-jh=(wS{p516V5!;i=J5ob)tSZqhX@_chvzwu`7D1h@+hN=$Ti!6AG%mH;g^3Li zR-PDcEShGl6~==DvrJVeU#(QouWha^z<@cC0G<4d9gtCD5)?AFFh64w@LEhIPI0=5 z7s`+1dR8G%tpaA4kx-UZ;H^($6+*toj~82|$s_-}QL6k@rnR#*b%K(qwE_Y@L;@kx z+_*x>Zxk5@L-}so$|@rY7oVT+QztI|^>39>D;J+wRH^*78p*r2!fs6;6`&vK<>~<6 zg>#`2>>rF2u`l-S5I6|_iy`aX_$!2;|2T%_n)n^kPZ#AE=1qX@GhhMa3Rj75Gr_qGY#rbj&b;%Z(7<>H@}rp*L%muuX%<@2`d)!y;K)ZJjpx`F$gYDVbU zR?Cv?DO0ZZ6yf(S>DR4(0Ho&x7(5%$DU5sUK_ISQT=0F|v@wX(W%ov`pN1SlU8Kx6 zP^IhgJs2257hku64ntBl#W_p!7?Opg`J@}9{KVQa}#`n@?zuL-Bl83hI@Q@)! zGGQKquR$@uE+#k`eoSKk=(uYbR-6*}QRUKaQa2;*J;En1^yR~^zeLG7g9_DO3K(dm zg;MBVxdZi#7v*J+VV5Vdfj3;6pJzRa&jLsbWx$$U6Nlv1R+@Apeq^593M#gPFb?ZI z*unX=W%+WzzqS*Wra{9;OXk(sLE6MYzncQH2#(wEX~DQxWlSEEwXEb~qkAu_4n7#e z3lE*`^oO_DSU&(i)l;-Ea(D82C}7wg2xmplySwF%nlt+tpbcspZLpv%UHa~!K(mG* z)YE8wVw_733ryjvL(nAW;kiF#+dO)1Vctq>s3byg6eBSPE0TqVd|Xs87z45*yhlC^ zC>@%H!wp#pxcF>aj~^*t$T*7f=Rb2jH8E8+44>S*J*}B)*=-GmfPqByON}HF9#qvR zYFlawqHwHRS4TmPZKDFesxwmWP&>%jIvbV6NiS*)2SH<^&{)$Yl{UWMVXfHz1@F(M zHG<4zwSEn9%xnpC4nee;`a^c)NJO$8g9i8SOFOk1h}aUk3~V$$fhx5yebnni>oIOz}dNtm7OC-qo7woTS1SFj>twdB=*gali0$9ryw3xMP~U zSlF}^m&H$OGzb*Np#o#XgSE4s*cv023Ugc6KsfuLF-g7tcw_8>2&Vco_sI=-;i%2@xLNp^73EhyScTu`AYEefc7n9qE%H0%hd3zSpyvB z91464=CM}i-9(Lcg7z?8+C#M~kW#-uf|xo;f9N7fqp>Eit!V$oJ{CQSk0zE-U7AJl zDxcVq7f!TX0A+_fg`EE!+(^)QxLrEETsr6jc$5x3^*Ye0$Z#g4_`UrL(D@zd3=^oMoiWa0S^U1N+%=gK4( zBZ1JkMwKbnLc(%#(z~}wZu9Pq z>*qr@M4ywKf@F2>DNqThMRMgDkV{;_0qdEx^ms}bMRjc!$D7zPW5B5CHy2OJtahVR zzm^1(haoN2RZ}h*VToV7gCg6xZmr>~lyHUBjH%#DU{z^Q!`%^y1|_t63w9rJ*1 zFxZIEA$DoNaWDOX{^1<~)xUs@n_YT6Q12kp4VxUgfLoGg_s21XUf7+Vxw04iYL2|y z`nd9AT>6-()HOE%#!eJmEX%IAo?)Y<8<&*TZ9A6ScsniKk8EJ3>QNt zQ2XG7Vix)5#}J3rb!<=zCAb$OvlSyK5}(^XRs90n7ke>ea90Y>WCu+yXvG(3Y%GaQ zCD1{9zSD@P8)3w|8ma40F}_D~EE(-gkOVG|oHmCHFd6TdALW(OphfcXdJD&!`Nlmt zhVewE?w~DFTJGZsC3XTBv}Urt*+ew*r;K!;m(cIhQl%I~h4qz*rddcpLR6v}BlCIJ zy{`WlfN^x)+b$GJV6=@g*6Codc_;?8O>|Okv4HxH%a&Q_%H(={9sju;B=Kb+jC=Kt z12nV_gX6m0U|{#Or$8P56IzRun~Q6&_Fa|DN-Gv z5pux6C@t#A;&*V(@QI+@y*RlDKUDwZVt80(d|9j(2Ft?!5u9oHvk*kL6;2f$f|15N z_>>{42REWDNogaY45aQq|`6sOhrUG%V`iCE{sIgXPpGHsVk8-5|fxnnf{c^kM$&_urMu( zNasj&K_s>yQnnyczM!NcQc+LaZh#MwinW}KS4y)e=@RLJHX-_rBE5r-P%eHgu1pn= zgn&;5sz}*Y^GGG{^J*BhAW~T{Xf6u20tmHXmVG6C6OoA&%ffxo;o1btE+dhk^(+{a z0SRu`4cB(_ijNyx!}h6gf=OIc8n#k!U`|WAM!KTIjg%HeDm$E89krG!oP)pq+ z-9{|HYMGX!d!&0U?!lIJS_aM!y!=E}2(k6!~D^21=TnJr4j-%vH~yXLoY zEcxQ^{Ccq$6jVX%fi($x& zsdJ3S&C>QrUSh->3n_P zjfwGw?V)sVACE>qexzSOz5zcz29)W0CVVp#qm)nXd~}%F9#*y$>f;|&AIGv~ zjYjRGJ!70!pr1Ml^4;K*c*!(|{=0a5iavyK`x@Kw+F zafBvSmM6QDu_7wJ$@4+T9THHjIHAf5T3e*>)HM!*N}IMKthP&LAQ(PZNF1d7 zB)TfumhC~%19Fa>$Fq3`$`)z7*KLQzY=^j>oWEjroD%r3<~-BLs|!}d&F)3m@-5Ko zQI?QRaDH(xWS7EIU02p8gw}N*TNihBSC`~E1YmB&J>D`7&c)+}_;?~mGRn871;q6)uHyZUnh&{p5!>Q6oOhfYR+IAZ>@uRd`O5rcea5X4&u zEx;#~1Y5ff)O9_Dw~>|)!0`V<5J!LIDhyCDOO{IxO`ExZWf~#Rs2%RXMi6Fle84Tw zqNfML_+iT=P6EPuj%VFp1ll0L>6T#pb##__WH}duuV)V69rqw*@qkGKRG(jX>a`)L zYz;(MzUha&RHn0wJXg=45I+MKvS7)TUX}?DaFTs2Oah{pS&SZ2L%DY_PJ<0ahaYLY z-_?=MsL+t-0{zfVsp|4 zzBP@D%Qb%vA#n7-h81G_kDun|t2)mNrEzqRSeF1drcmCP9C2k7U* zrP1yOMZ0&5T9*OJDPd41Cs+~q1tPMWtxSrgg=X{~Bdv_xywlZtbcs0*9Z&Cr(nfTQ zfzcV{ZfeyepGVOp0?)N_y^!;0p zB?nCdnkU%!48r_@XbnUCC3gT@cB0u=z^82}*T4nH?g%M~>7Hu@c;zy$bi=Y8_@Le= z@%y~$J=IBg_S&pG6*oh3gOb&v;R?=`pw}u_)+^hmB&jmulB#^uM-opy^gQ~9}}4XsEww28;FfiL)V0UuAK55;G= z9EXml3#PFPR9{qiwmYWt#&SB4dmG(%+mkzT2s=0<)C4nuqM{Bk@T(g21Na>H^-9hE zAru2BtN{#s@J$crjts12aSS>ZO-8#(7^}Z}_M^r~ZEu&Hi5`xKp#)w!!Vn|GS2A=B z1?fshx5sHF-GxXOl-nkfzeMd6R+WGI{r5%I4e)n>4ZwpMi6KBS^6=o)uMkP|U}H%p zZ2uae{Qd>Fh~h^0IMw0UD>qRloJ0yNEWCzv!2os1%GVAs%t(>x z(N?-Q0Y`80mqB5O4~(FM``!hWNWtltDhIfSha~uV_XI?0!kbB)6K#BN4HgHBbGSPm zX_-thZXpJr>Bi-CF2ZYqfO{#&mlPY7?#IR;78FuDAU&)ncxiP7pOnbC5l!AoUP^feL}PD5IGVg&VrqD;3jE?ACT)V$O`z%}D8w6KmoEaM{HzcO-`ekByOn7i?Js zQDgd^Iz%EWAeGA0+4M`HtInS=&v0MK^@K#7z%GOc+B>_MyyTsTK#Pw>Vk7Rs(;unt zk-Y83mR3n!MdLR`!+6u!wJ|Ur-T?RgbbCwj9+FzR<9sgBRH0GjxluKA#AxW!!J6t5O~sF8WTCjg=}IZ z9|o%!>oP_p%3h_O9fgt4;S2`|C^R2_6Lk6Zz(p@N$?xDzJ_4sC7kj^5BppAb@lgdz z|4~WDc>f?`WS7J6G)hYdoP-)51B&%HoDN2OsgYNbFQW(?QWR>f2>W>WuQ}xBM_rsJ zKs{364O4J6g*Q%#8aV~llYmM^xJ*xzZ#hBPs~}?z-Di(o`8jH1evbrlMx`#E6O1OG zLa?rf3;P2D*ytro3Pm_K{zpVWq%fW`K#{uBJ^Zgy&#_g9S8e9!#B`B4s3QmViIu<= z9NZ-;ILJ#DqGgim;RTFZ;3=OnajffVLA7vyLD2e>GGpl)gT8d3t1Ji*n@@Zt~`a5Ht?av5Gsd;xI#LV-?J)jG? zJFyBsHM|i6vl9%@=fl83>@r@8fc9&YjoH)(iyGG3u-`%j6DO?tVF&pEc-2{WxaNN$ z=&gSS*=Jtekw--TqD;h@JI6;;kQY`zBaP1ifU~JiA3$(qxG#R7n|ndQsb-WdZcFHS zMq{=Xb}$V?lVEh2^DOYx?+*M}f0idBjOhRugNEDEPy+Em}-U4kzg{Fy$Uo_2-(Yl>q}7PCfI+xhm9S%;E0(j$#M^4 zL>dEkw+K_pw~QkASgckG->_$SqT&5mlgFA($ap=3dgUHnil6_QA!PpLYtTr!5?4vo z;yn$Kh>S)!gJaohDjHuyF@8c@HxB9ENY`)omceDFP4y8)8e9mui(ZA}c=GByaKLK- zCbC4>oxtP%lj&!bgh1WOfhyIkfsX%Mb$qOv!}0t<647|}0RcG+CpvG+Q;M0Vqg?H$ zjh_wPR9`a+Bm z%KC?RuMG@2Y|I2>@2LM$jzXc9Cp>_7ah@9{6Uo0a2LpFftJ>7DGr;(P&3O*VSQyT*IQ*Cn?8Zg-ffkbbKXqr zjM^M(WX9$QC9yf3kUMS8v4A_rz=3}b{j7GeIhbvP{A!LbY@V9qY9p^7?14O0&k1is z&%1z(^nz{ad5-Z3%BuY!)BjjKpPkr(d=pp`GqivFiaxGiL(g~N2Q^E2tgI98o5a{4 z>|m$>HHLC|3Ob(=F~NiyFVCcNwGMMoSL>W?t&@ahUP72%FGI8GUC}ybwFUJOQ1ur4 zau46|g{S=?H0ZhuW+Q7*GxMRVU@PdKtu^{2Tv0z1dEQndr4~zw2*R>5W zJ=y^6yJzdYv0w?}PzM>+iWYp6B@nS zw6XZ=S$Q-cv<9zVxch(QDl%WMnM-0`}hE zVoJ6|Kq)b8o4puwK-+AFO7YL%HYrD?$hIjmhjwD5hOsbN_Sz=QYvh#pgiZu$U#BY!@+8N`tZ9{NLvt5 zP}|9q%d517aWXGtMG(p|Xj{M}rj51$BVq8*-xf$(DY7ky6w+;hocPZTF2Y%>7j>9UDwlEABn6K31r}->I*1Q@_{u5%Vtqmssh2Of~ z!M*%&B=fr@CXV6S;^1Bjd&wlm`VcW#gvB%``4PM|hXs=-V*xI8MJ~3Zeasln`ePyxVrv(BU(OpGIB4qf5>@R!ZSK9><(qqP0 zdTxa2ZTn+J)7XvlIyYi^%qcOm%8T{SiRZ)%;xnNAn}7iAClns59-Jl77{kt1#86=f zk+D4^l06ARZz?LwU*~){P+6kI!aBwgVo(smOXVlsZ3 zFCev_xq4CI>IJkQTQ68^UhSWOmZ!D924{3HMtal!IowtijSOIWL(P{k1Fm;W0*Ra-k)j}&VOVeSs=pePS18+(?lv?CzrN_^bB9EW`jkB2J<;+p%J4YZtS;ug1 zWJ{m63A$^!2EOUX-IKQ6^>#holV7X>`!Qzuv?{JFUG#69%}jPkCM?%vW#BCne zz>Bk8{&ht{eSJn|EV%$2w%cdqqo3A3gXw?FSn?~BP{vM)2H3R(`dT9ay<#u&0Dhpa zq=dywZ=CljisJPmpQZg}O`LB_yz@&W0Dh~n-3?GJZdQMTzs?QBi8{X$+NOOSezj-$ zH34X&%vHKG^dpSZp5;dPFjJ8nY@uN@%3M!Esc%49&c$N&v7U2bWb%t%FiW3aj#v-s=q+$x$U}fhZ@nK=T*_3*=wZY(aJM&);`R;e{S;k;pl1 zi^zs&i^idNm^s51F@@S9Ds9FV2_>;b$0Kj{UDpEc?12OS_4Kon#YQaxhQFiu4FGOS zxEWq#n%x!%_qBysdR}!B2({Z5=A*3I7MLDwA;>zy9}P0+RdHO;pV$je;u|zI{Mx$hJ@rhO}ZRk`mX0LslA5|<)VR5{~R zx$lM#$}N;_p&{8woY|40Blu+= zzG#>hy3~;zl_}A%xiUVYps8VGRyAxXV-A=r%!CB_=hrb()?!k}q_}AvBO`ttdrx$X zDOAU(4jCO2N}^*+kUMqkw}3mhz=8iZ`YCJCv6aB!x^b?t6msSm2BN(OP`OLl{u~Y2 zwC`n@A0uttVGy>zfNwqK7Gdj4IMHIGH2D=geL%b|%&&=w%}C+ZGJQk2vp*f(2kNd` z!<6RK2tPT-ci`tNDJK!ap{)6S2tW!ijK72M7ca*DLGfwvQxjJqn79v4v<6DbwAtqE zer6XFK+MC)GHilS)*8WQ(gdNrHG&wkK51k2RkkscG!?DW_y*&GP??Q@VW(*m;MM(9 z6zl!8OtkJPvrOHKFs1HKb?g2iz?}!-pn85s|HJBkl>SHP=eLtJ)B|6y`xpRjr91)e z0k($lHf@a!Lhag`1Dqq?*uM4m$4Mt9`NHtb_joYkxN_2zTpU3u^H5|mCWWRs5jK=l zF*Xy#*ih1hvIJ^u)-i_0#^0aKf&}^Jw>6}!MW?M15u|Mm8S(Uu{ni=^ z?TjoW1ChlBkpy37}}D)Wm-;g9MMTwt7>WO>dNNp37E#?*cHhzPC#d!@rwDs5VlfVQU4bY}PIxue90+V2J4ceP}%dOTd<07_>28CBqfj~@Ix|%avj9CkT#~k*y(%>j`(hb zJY`$?BzId9w*cnJ7DekjV3ve%@*rN$dk*vDXemwtTrS;p1P5KXQ7{scBe2*4itV6v zFXEaVU+=S@rIErpe}z}(d_BOo+66+}SP!`pMUS<6ETvKxD}DzV(p2cv0ed z05P(4za|j@y^Zq@eo?z`;)ly4apzqDXiO5;KJ4J5f^;cN5?>8uM)1P!u=AcE+d{-< zN_p(89C9bbwEqUzTFq6L7D$YmOVkb~F3t6FCZh8Ov11N%K<6Q&P-U=GvT(DMj$yrY z3={-A2C||Z!xfA{$Kb8AeDaBQ2V7?%Ev3P}K-f?B13sL7^l% zxC8mIFL(=ZhvI|(ZTeYe(Z}7u@YneJ0Jt^&4|qlI{WgN|A7>+o$u{{<{Hl%kH+--W zAL7Te5%i0V5SY!NYa=odo{d=le_JIoVIxRHWTiF&i`$rcGE=P|iZW9_j8_}6$E}}#A;zJgq)zZI2iL@KGA-2n5h82e zYQ5Nr)lyyl#M8vO09IG*#-x{^xNp$cls{vp+LXT_%~orh1h>(aZwC+Uw&gsd7W2~^ zq^wN;W7cnAJq=yDS%!W`zY3x!W21+Daym;&@MKo~tSiuplRM!weGHg9%15!Zgl+S#KBwyID}Ye;PIwUvvF=A&Mv_r#3}@iHG)nN99@k44*(o5 zlD+sy=rtpBG4@ONsOkLWE4kD>qG8ph1Iy&5qA4JXo0Nv4?k>}!hzXJm_Clh%wwOBG z>-CgmnMabHuq!5WZ(V!nb=FUtc3r=r>C%mQ{+a zmNioZwXA|#)(X`Xf?8IJLxp16Or5c;d$Cd|qc0MXHG9svKa=`qmRjGevP^w5UhOI# zJ(7O!JH$BO!a=|HJ^d6J`~l?Uu%g7?KHN$ta>$kHL0vALs1f*swL{C$M$iGjSiqN!k@1Rn_xLRAlEad}k@%8MIkYHo5j8Hn z4{Hdt10+VZ!xhZ##-R@InN7ZRl3Yf_1QRCd+)O&NDF^D}E)WY=nTNH=k0q1pDacND zU&bf(UqlXde-X(N z;7I;m-2C;Un^r}sL%3;64r1i7v52}sBhN@RhmSI*^%?<);uKT1J(Q9QHQGa=nzn~z z!n22LAD>J6UYmV5~shAXV00DSmZ_9d0Vg-YAM!aoJFaiH34_CSBILq+peKSU>Y){m&YT z5H9x!*ZT=;Lm|Vyh9dYC9)5uzKNsyfH399^3c;uCP|zzqbhllxtfs$R304;m%WYSJ z6>}$xpcEuFhuBi5z zb|sXgUE!54X;+;Acc^G+S2!n><3!b8PCun5?dmyT``cAF0Nj433SPHe^@39Ce4B7- zS9*3M^NsZ-5R#Uqd$Y68ZeSK_{73j_`X4h!pAJbS&Y<%Yop0!L2NkrX8Tdh4A|)fU zmyT-heR2w5SyugJO`){EJagj1sYYU?bw@L2LP_~4>O=W0bAQWI<%e?#xesxpPG3!e zAs-KqtL|Y>@bMu@`j|eCC=`JD0e$M#_ZDQ z7^TbS1Bj1C$682S#%7QAU%Fr0(oL%Wk=+fpE#QRaGnbN-vnN_tx4D0S)cj z*8uKYFdxX2HeI*Hl9YIpVTc9!WFiVBLb09hOc)auVM@D@Nta_bS0Sru6|>C4`~=$W zVd64t$zGJeEd(_o^|N##Iuz*bNT$>P-pK)2t(`DX?vdT$C#xR`GG%@wyUdcZ!cDn< zahe;c@B^}_^bqA!fiw)3P(-e^A}d03NQ~a zZPXwDTpNX32Rs|qBWhGcJLs;zQ&FO`LoUt+RZ*U7XG0YTrRW3p}O zMO4Q~#LHJ~(?-V(>vSkw3wj&Q+*TXaOD2*Zf>s|ah~XW*Q1d9@aTg%w5!~}<8kni- zKhqvV8b1e()L+r0<(4|V#!&C0^CNuWA(Z-IQ45NXui~q~A&DhBsF9;T)*99^1MBL- zHtSPunpmHs$Hd?FYFo{Gy~@M1$AYANBX~_71UfZ`WB*zvsuQD@f{DY3#oTco4{kET zJpJtvqh_x?PKFoCz`5!fkcf^M2uFMTX3hj2ze0nMqnhZ^4Xll)|GaQV7tUYew*HIv zmb0SYq9R_8mx=#7@#`7V7V+~8sf8wL%rMMZdPdAN78vG2&%eSjPw~!<6&bl{yU82I4P1BwjC)>ix68yy-ttTQ$m1+GOpoQ&S&0rL{nfBoTCs9pdXBMf!Y%%}%7=Rd& z>_^Zs@DZ86&LlXnFhoOF`Z5aOrNRpf#AxY!E~?#4FC*hyO^bCzGee>%>nt0imWrWy#lcbsmvn>+oN43-oO(ca2Bhj{LU<2yT=8uZ;6)(3?4&nUN61KCEuoK@uAF>~^isf@3LoT& zm!$BLwKCj8d8Bb_)jywlC|57aK~q@+i_wbQCnSdr7h$WxBi9P!(=-Ow!jwgih&=A$ z9EWVp?%$~Tr-34a))7k+($~?}4MMRNIhSzk@svDf;mMct0 zvy1*DO6gsa?4u|mkQMf{xaDnNe~y%OPN z-2ZWjx_KqSZWmvPWC_lv0NHgz8-c5w>fdc$g2JN?RD8c+Vy*Nln{2BpcN4autWw`{ zbG9dn|NJkAqI-cSizitz>4vkpbt&uGD5bR!n&olx<^KjZVV9fzBh##aE1WH7d$+}m zNgtB;4Uh71oJc6+bqa*XjNK_v);#zdjL`UpF@^l&J_#AF$ykZ=AsI92d?*8C-$bDF zU9Ex4lt5uBJ(J=ft7Z`H6~XTo4yR;p!MXG|>9MKKsW{Be%&CMMnNxj*B5+Q11mF%w zdGH@aKgWwQr!sL2&_8yc2Y@@5UI4Ep(pu@xJCWmZ9$9MPs-szUqP^gaeH>ipOn*or?i|pJv_Y(Lx z3}qs3&doTTb1#JtMutB)-VN7!4`eX0PH)j1jVyJ=X&Q3@JMJp=e5S!Ecl>x;G=;Ia zY|$h|M^JE{T~TD+MNp_xnx$|e3a4{!3XD+3tHR|n=74nPuWuwR*JO#-2<5ca zkP}p!%#*1r-=^zLb%oWM(G{U2x{`z3sVfTscTRu<|04P+V9}LAVEA=q833-XEQj|1 zT_L44m+D=PqZPKE>jDfCmoqAR7q z@axKH0Jyr+2=4*9Lby*?GT#x(L8u*F2^s&wxIyg-)Bl+72%O|4urbF-lpt+l0v%K^ zP0nuoz~qpU@2u9%umaw~e#T$cbf*{Z`~(RyXSEKRqKoKicOeKhc{7Wg~r#N9a{6w5q{ zIv!D0%%&>H!H-t%p`4S>y^3J@2GYH{oEn7>d3R&s>lf6MvSuJx}-Cyd; z1O}2hIw+EqLQw~$aA_T+I6NKX7zIl(=y#Yxb&y(+(LtdkI@kl* zQwPrh++i)ie=hy3AJIDt82)}|D*&!)T>!7!@AO8VXGxxfi*Dg)G43AhUXVT*SqDl~ zFa3UvhmR|~_2H0#ZLn^?!}QRt|EKlgb0D$A{dBOG+en1bh!eGRFa$Fapll>=rt=IP z6Int{hvElS!fcI9Z-KLU>E0saFOy3jyxtdJ7F#rt*$vN7yAbTz^34P!Wto@qmsu&*@UtL3!!HTSy#!}uCGcJBC}*3Cn^EDOzdf>F@0KEMny zEKYe9Yf7!T-|;EB%+4F~<7hfuJE7_1fCK$BjZ)vL64GzJj;q2=K58w7ld7UNE6$h$ zZPqntN&NHMERlzhq|Fj-OWQ26;@K?roA`(Vo5d7rvuIv2HcKdp&8k86v{@Gc?oi?3 zznK1?ss9rCsrF*O1_B$O6^G!b`3gkV^bA^WaW7`gFx;4c2tH1eeMa^w#JVPK7gK;W zes4PzziQ)%02}x1oY*kkrNdc!wSk!a>`}|oyWvJ6SC~9ry?TgxK`hV(jR7CG%zoat zvT~zxh-V9f#tLYm?&V=Vt@>H4ljs@oP4FaOnrOogq26|Ohz^fwW8f{m9Iw-t)D;1hw&xWwD-`MW;r!qIE{qwvO z&{DzDRMNNKZ(0;H6_})ubEy=^Eu(01p?s8Q6%fj@t0vbohMMd@!?_UBnq7e}zb1OI(eiM^hg-xR!Wq&|H5b;;p_2W3AlZ zpZ^B&uCk+Vq_Xpjscq~X zYAA^Z5HxMN+m_>rDeQAGfvz#p?aqS)H-5o(`4GJ^=VAQFhE@{O)QsBh{El#(Bgaqb z3eu00{v(XF=_c`V0h?z7S}tj&t{%$8Zb_yHbwH3=W%34OnCy?BEDI-b;v$T)TnJIS ziIW2WjJB9)y-V=v2%iQqhQzOFlVj(0IK?@!M#w7c+#!L~jo?YaLe#laqLr5<_UVV6 zyATt}aqhtn3QB=VrF)Vir>zAd?N^FW>K2v4DB-gY_;yLZX{)Ou)(5RdJk0NwA_cD? z^3Cx7Pf^NR6-5-7h2-Kgf45L}P%T+Aq(0}SbxZY`s+ZAc%0t`wbXTA6M~p+o5`CUc zefAymdX)I8!;iy@jMzW*Kt9@L32$S5HxFdmo!{jc??bWi^$dM5)3@56bq=*Yyzfc; zzy=Zl6Q+%<=0Z(jO3ndh$nlrPOe^OBZe#5=m!r5g5U z-ief5{^WhK!EJDuMiLIKfoOV}_J?O9-6ZST99ufih8B2?hiiO{^L5GJLRP3SF*|<( zI;%&xPhN$LDOb(Tw_2G3#_IDy{bYbiS)}4?XOS@(oITh%*Xj; z=?h;6J~6#oA_~H;C=`IoX3b66Gg#LccP~>Zt=D9nT7>&bx3;sU(5KFT2Cl- zOMCs}7~_s#hd?Y4O)i`X_&prI+z-Wn7)r>$HxS3acE$tLU(NM^@c=FqA@8&b{B^AY z#}l*(dFi&MHi1n!V-tj|jCbdPUH1QIdpQnUnAn7ci1piqX8>?*!n5$gCa@pB2l@P4 z=H-O9>c^K!H%0(&)cp$yM4cD#6JKI9ErtM0o1qJ6%xrc5ru`gTX@D>f1*j7yiuW;n z*w+x-*-Px0L)v2TH4`DHhr&o$$xGU8%Lm}DGE&n|`8b-t&O4eMBDPJtITLt6g2>%J6x_I4p$7a5-hzzi}mgnqNX>%~+#*m4yX_^ji;0QSw(w#eNO0 z{R$lGB)Lr|gNUg?i=mFLyoGDv-fN0Ihda{y)(D zt4Eg}>y){sZ3DYmo%E(N}E(OYQbmMaDHS(l`r)zKZEv^;J^dYJXnGkC!6k z9E#eDV4~zuCa0)%gAayqmBrXs$|O<)$guf%5@# z#nF2Fz~ss*0sXY2%A2qvR#q=7WqlFKc(t+{7}I)gbvf#Uf1WMn=X|Lkn+Z8#62j>T z6Zv4<=kFF4RqUF+Wr5AXZvAW9r*>u9zEG7pLNgel{geu(1OLD9<4^^}4x9rFzb*X) z0N0j&1~2l=9$yjOhR$vQnRa#7!A-X!eR8w1W)a8Pd~;nka)WvN31bG;Dt z>W!sBy)n*TZx=JV-FhQIH%+U0WA2%HE0TI6w$>ZPovAmWB5m(y$c^>(4d4zPskh4! zTQl9v$?ce9C17tLwV=}iC_3YvfHi+l|I(oSB?ck22kEc%dnly7l!cB73uHMp(;>GY zF385Ya=2EpZ0nz{aaIH&1!OOH;NcoiNkVeDc6Qq)xD6e_8>&B~Baf%sHq*D#k<-z( zuhX_oC`yZy-0)ZjfkoXonvWp$gK+AH%?RBTS^yu)$sfOdNZ8X42Ao_t&<~P;ek43{ z(yoc%5~a~*yJm^loj!PyOu%3lt#5$KotyNg{ z`=1YjtWXc-NG^A3f^|Ih(bhd&a$hDM;l!S?a54nP$gBFr2po=x zMXkd?6bEuZh>2Yiqj1XvR;2jDy2<5yj&GwfzgBq^76&qSa`IVeJSSEE8Z;D7gyU39 z*v9rla8?Q8(IhT*!V)?+uk$JQIH)l`RBGWmr*H>NP*7SNYUw-@9cv_1ntU4oD0aD@ zntc^Ufd$E{;r4-%v4E1S1`?MsxSGKY^}}7-O#twq1vkqVLX_^EFsrXQN1X*uIR+X_>ax#U58^**I^n@?slL@8O9gkH(E6`wbeGhSu z^@+86__!7R_TPn4*M7Ylyi&g*E^8i8ZbISz#m`4AYh#){o=1LGtRE3=M3Nu91hK%*sXX|$4wP}Y|zsd}1| zXrX#rLXUt8H8U6%qVAb<7Q&-x1X(^m5aBToL2oqkk%(F2mESZ`FpJdIUR!6pJmR z%+!{#dNa06WGVf`lgN?%gwz!s_^a^au&%_eJq-*DANJy>xfdd9HV37<#QX3zsxMq! zm(!;-o{NTn$DUh)v>(X768*?ZM3tzHRwJQjC;Gr|+I``6KZt{gu!XrpsIb^<={yVH zeWD$re3v^H67%6Cr&E&mz6aS80|h!2*5(&m)}P_;?IAUFkXfCi7rK? zj0zGT&^G`?635fI2#%NsQbTRV@e{KqYID)RB!6IXCZNbIAuV)&B)jc5vACSzqmGoC3EPAoxrP} zS!2rq0JthP5ME@IJs%*vjrqVEAk*$#A8*KkU)?Lm^uGB3@4vhnKuiht;s?WOBFL0r z5Io6w5JhIv-_#p%a#D^attEsvjP;0Gbu%GW4C|mx2*a9+-HA51?BCw2Wd zVED%o!vS#Xx*lG)u6rR*9Y+u@b*;NPD$`rnu<=G~TlcQ{?_S9a_x_W4H^7q_5yOj&aHP4a`)>dfQM=)E$ryv;W>|V)&?&@EA!Ae^U9!o z0PF6jR_>wQorN|Zn(arc@X#*GLX%xrSUPvNizPT!+XH^}!Vlr2(oLz)REUHi0+!ej zcoz>Y>y`>HbqIF_C7sz5a?+JGOGTytRgvFi3>DeGC**MmhJXHbOA=Os)M=@Kv`&)` zPpA26i06iw$r^lHy zMcB{No*svcbts?eG1IrV?+6PoMgk_7IyxCY&{3lMHu(3%TtoLr#^ljC_4^*(b0#7| zW`n=(Z;YjO$^(1uLwn97;zXUvLK_z&;8)fEZ~~zI%r&u-x`XrfgyOqh*f|0|sK4Z3 z3k{o5=6VuJ&4f02d)za}lrTZ{5YOb4f^-e}0`KZ7nW!PKuq@IkMvE9QV_eiOw;F z>Ks)iqjN$@bdC==Q|HD4?u>y0|9JYxssAwgDSy#LJW`RRi$?f#i5570%z+tfw8 zRMEaJ9)WVJE;4<4y2usv#Cvd{i`Yy{T_n2i?Scg`I--BhEC4cZ7wA)R$1pDH94l#X zwj95zW3vf>j*(j8GSxB0sgBKo4>~3kZJ}W^%3M!EsrURkHr(C+3Qk=W>o_CJpdH18 zG06xjHpj~pI!%&}fXh6v*fT9*sUun1!j)*(9MLXHmDbpS>NC0}ltj1qC?a+1XuzGRaNwU#|1|Z_q@QvZ-NMz} zS-LeB09Ut;hxY*8BD_uA!Ud^6Mz@&$|3bHj-llFX0-&{SEoNNQSt4n02oS%jTT2Om zZjqX&TZ~iPS_U6}TlY27+JTeps5!kA>_=@v7EZjq!T z;4%*^x}_y7btFq$xbo>1rApmmyy_P2rTuZbCHV?L>Xr~r>lXR&>sE#67E`EhvFbCr zC6q+B_+BP;Yd+x4JUH;5K>q^upGZIDF1m&LVjl{TcbHG?U197uv7@xfoFghWw*Th+q z$KyBW)qrvLc?gePnLLrm_-A6J;MnfF3kwcH;OoF(BZ>%k#{f_b4+L%GV~UN16IsuO zy)teC93NQ?$U)XHA3^w^_#1*Smk5}i$0PWA68?ZH_cs~FF-J0v-}(j)z2x+ev0L0u z!|0zlrwHluyJcW-N(w~RUxBK0qMV8xCoCNE!nlX^Csim*@khxF%Xgu z8K37fe)62nokK?6ieV)onSDcy^fy-^%C=8hnpvh|F4u#o;K zhzS`t6*AvxkZ0If-Jj4~OX$wE=-zxOIX_~+=FVZ`Ho0#L`E16^O zqv>CJ68+sEfv|DjOs0LVk?x=C=_VnEu;GZiqX+#vme9R(Hr?x1(!Ku(<~#Kox{nB- zSBW%kxP;JGB<*dY2{&KCn5#~qd+?!jkEV28 zkcU&G9Swr^Ru}`fhM@@;E*w@;VeDKOo>F1Fzl|}cPhrfC^^E!MWV*LkGkyeGO4yj+ zkM!p(BhA~I=-xk%F{z$(r|e?P+70v%uA@6`CEaI7(mnACx>djo899U5ijPBE2A>z~ z7}(8tWtCkQGG3WCtR!rFQ$@_TCQ#3hOxkr(mmYVhq<^nbh~UbV?s z0ZXzhNJ|nnj+avZO?0NiVdS&Ely0br?z>ayR`h1ti!Y;p>H@kiok8~t;lE7WdBXEQ zq}@F(+I6VNx<6uI+no9Sbi7Z7(wECbejOiu0->`-88=C0mHPG!R zoZQ`mIH!svmqA0q#wBwI?KYM*d;J*Ny#+O_ySv0KOP%j0cHo=&j2XLvnERx3W2GK@u4VkKQkE;kGT*X?F;5B3DB*TjAEx@3Xvh`P z6CESaI+4$fVkMR>VydSFf8}=KcY+%-j#-Z}#bT zoJIG70d&`i^?NHha(spH^)G1sX3nNtG&Brq7l@TRN~C@3Lgr=ugl=cC*tdax*a(Z& zy+AC_0^zU;);??;BAl;9{IAVF?V^14L*M#_uGm8VB~tdEf?CMfBwBjD;4fUvv?GBT zHm($RhG<&qWX6nH{OtlrtTWy5V*Ogg-d=#33LCQ|?c36d??;OZ86{UyCa<6$2^oKA zys;r{+_Q^xKI>2S;Ay)MKZq<&0IE>6mA#H$A!af)5!BFyXdZ2Ogi^VogNAs zf;t_@`0A_ZJ|b4@ceV82at+JgLCXF_Gco5%?Yw_5p^aBEX4ok#MbA3w_Pj>M|6SxW zXaM~yg@;iihWe`ZT&Kp@WDSfIdWxUoT|27QyyL zF=D6x9jW&XB2NqQhb@v(=zOuyvjnqxJbU&{)94<#nyL1#CuWW0o)oU`5`G#_VEj6Z zJVb@^1ENJ6#XejqR_F`SmODjHY9|nLlGJsx_}5P(g}Z)1_gd+5&lP`JKgR45nM~iw za#_9KDDH2JFL@8{_f>R%*`MxN+uth=8HdQox#Kv}PaH{iX_D^PYb9na-Pz)fJ%`qE zXDvs$)xz_!QnRnkVvZ}tK71?r1_gTb{5Og_8jE-4HFq@5Jb~`2gE>n1M>DxvDXnS2 z+4RptJB7}O#-28uG4+$^elsy%#hKUyzVm^Zn$FAqH0#<`4Q{BD@y6*VoWT%YVZ>*J zlbUW>(*Qs82cc&dF_eSPn9T@%uz{gmIhoMO*gx*0%^D(X_Qp*c8R{aKH%-_#y1@t; zT_x1Wgbn;FO^%I)U z*4#af>Ec53*s_|k1{__*1r4C`=(by@GgK#`!XjrULjxpq>o^TzHz+VqpQWL}%JohS z4HekhagkD{8z!Oa4%JXXLcg1%A?#2AmBOfoMoZ}DYZmopI?lyA8JCXJ&_v<$lD--` zTws6SuAw6Zwy(E_rU`8MHBTHtDl>$$@v|29U}%s@*J@~mgf2ftLrE!L#i1HHO<=R?G=!lrxDHIz5S9fH`gE*@)=FsS;TpoX zBfy??b2w9IULbtt8yf^RDET~UtiaeTq0#*`^iv6aRj45>jDSklD>a0U7NN5@X=s~- z8ajtMlM1$Z16F%3Lt$C*=w!UqG_RPUOC|R=w+=jtq3sfSY`KQ6l5`(6JkUVcwE|l- z?%0_O{YqdLo~NN3B{XcVhHjEj=?NP8t%L^d(a>!o`K!y`ijm4461r`jhVGQm_Lzq5 zlKiec`xldmd9SqM(IvTPsbS+G2?Y`ib#X&SU;Dy<2BV)FT5&c*HO4c7xnccWw9Wp; z^Afu2r23yU;1cA0lHZF9HT1UTchaTn2zysT3wqUT-enHP%Ykg~&z`8E&m=T+i-!39 zrjzk~)3%>HU=GEd%(OOx7HvZgLvgbi(@nZ!=}#XA>^lkdc0)Y=+{u_Pq2V|y%g~>e ze7fNUb0jVem(b!*H#8Wdu-}Vz>1e^IHBjot#AE3nx{t%Tkgb?Nkv&Et##5_%M&&k-6dq2`g7PLBjnH0mYv59dUFr+TSM>9WN58%wqTw({f^Rs!6sw7P;q{82U^^-2vNEhmooIc@vvYHX&~m? z#v=kdeh*>)azmf~un}mL|SYhu5Hh{A?cRaY`aq}bNeSzJ-{lOhM=EqnFCD*4Mt)cHE zv=o?x875&T#WfU^(E3#jeQM-MXz&#e?pPT7)aWRo&GirNhy=edx|kav&(R1q7+)D( z1@`44hQ2krnaIL8y?WTpfx&N$DuJC{I&3ETv4DnF>|rP`&=ZTPos8+Lz9?B2%n$UF z(7_A8C>d?$2L_ld(S?9HfE_Hbl~sfl1?q+7qch59Yz-C#Mo8!%2wjBGA>gc&F}c2c zMuSll7%8yVMwHKp1WVn}BU8#}>gQZQex?Xj^A zusss8W@+d;30<>IL%)=Cla^PXH58b?64-l98oE(n!v<>T774XDz>zV8I-af}obf{F z@PWh}9r!>rdCe(*#F%eP;8T;<^s6&9^qCp#(aD&FuLy*FZf*kXr40;?3w$Y|A$>IT zm4von5JlM65?ZuGL*GcK1|2kE-T4a6n%%`^?w`7qZ8 z2Ke$jE07S_uOP<;K^W=;;Z2fG3RTV{5Uke2T>Gb$m?eWTf3LMn+(W)C0cR$1{p|6j4?~ittmyD7@JarASp$Nl9m{YsA{#^Dz2ebmr7GwQ(8(|Q&0pgL6MgF z)>?bVIp^xV|NH;G=i_oxD=1D|gQ?{>Mj3s2Doc$!m5t3~< zEwTu0B-t79Dk1nS9r!yZCJ=(}Spl6F6CFHMh{+CCE{PlmD_7uMk?8$HYHg*+CG?0| zbX(**paxD_)F^(f$%E9Xvc1t4I_6P6fORZ7rd(9*A_>yM%IR3|h2JgyaZu z*R~OwLF2`yZFi7)XgeKHE$wqcvX8v9-GsJKYwKux2+0xYtL-Bs{rPL(IK&yI9VMCc z9-)0tXc+t+`B~OLJ5K0F>c6JiX+m-g#%sSgpjO&%4ydbk-vPmQ)p`%su}AGD9&B*4 zIzYd#n{R^hY(FUbP7ZI9mOG`<3`-OX3~AOxQg7Dy`Q}af=KdJf*`;sp>UEFIeRI3i z$8uCO(g33SNqT{(l{mLMqh^mTNPUK*=HX^ouG0m}f^>|;_oDLh`N(fR?UC7=ef<0m zgEy-rYIy<61ys%?T0+!i+;zP-^XSu}i8ovDCejmA&bxavx2Z@s_RR70W=DWVvA=R# zLHr-jL+>k|Mfw$#Jy?@>QlZtCCieuIn2q!cD07w&pKs!BoUHERIt6?smlBCI)tI_~0fX>~5C~sP$RKt3VAw2jHPT z&p|D3<~L;$*x5KLQRl&~r6vM@AY`7ihkoe&r&{O{eR0-%NnyL zI00$@8Az|bfm9G(5r*Zy%aB&5AZ-?b?Ja7B<{~1?3m&n=Lxld(Ay~)bEiwn}GAhuK0gAj-|~u26noqP=?6r;lCT_1<>plWWZDI2qrP!x7lYy5 z+BcxT?uFb0`UlZN9kFbxgH#8Uvvq6oO=-EKVJxNP3ZR^ou6hK2fNzD|LJUN|gg!!R z*yE?*bL_skK?bCH3)0b6q>9~-NCrR@)lp2gk2a>h7 zNV9@8JCJ4qX}Wr#&U-{fEi8Ldt&vpg4(azM{g23|D@liubUE3)K|0+?r#0E!MApn? z&5zo(U5}RgQ28{K2T}PFmCsRIMv%2|j+z#-pGBOn$^J8BKaA`@Ai9XW+$HKl);5r} z(_~=}WwImLnMQUFk)0^AGnqI)kxqBgnMIr*NGE}Go*^%fi7q8Ce-f=tzCIye2LwiY zjqLOxJM*PwveTOEM3Dsp)m;tLgKhS#hEdn8-3-{K4)sHtGY#o0Fl*p@+%`x*g1KX0 zV`1*VJcU^Uzp)_t0n8l(%Y?aOV0kcK49uko(vi>Ig&92%W}ktrnuB!k)W3j}hkP~0 z-fR39M4L1KX<{FwybaRL3y@|;B7HR(>4`UyPEN)GEAe)F*s>6ixn{c7TQ zZEbkdzPSU4zDzWcXm_IRh}I)om*{(W;b8yGi14OS@GFx@pv|T?2O2`OXnO0WA?#E{ zr>5R)@v`nfXNUFz`bjUOtNf8}BKmeTuDvhxOAGX7t%1UC3#RmM8pnF1J?{zmY|sU0 zYodP7U?wk5!Z~}cAI{T$wCbLLRV6L=7|;+lx3gRmP`WMnMQG8;RHQ8izX&$xH+vcA zcA_hQauz7p%=~`vr(9i#Hk&jW_*sFtO2h{tofCvB?J?p!7c>E+V~Eb0oDJpu!83sV zH2ig-Gdg2z`u@0ne&;!-sRx^ty%2tE_-%_)_>-TXiwi*K=i)-h%tf=|G?MvWHc7GQ#aLeNxu-T9w0{uRdP6B;sya3Yw z-hQbO<6P*1HuqXFp8s6;VzXbt%UPh#akezx29Ci6+dk11t#xtxpRGBzbSg!1+=B7k zuwtu+xM8ac-Lcg-Y-lsg<9}!Kf6Cr{%HBhu$p&LHI9FJFn;BTizymt?Mj|Y{nLQiW zUfEM6rbyrySbnAa$3U&&3@u#OqlL?6XA9Uz34f!5{AY=;Ghn$5lpFGuklRxu(R;{f zq!rOPqF#vZ=n%=@kD0T%IA+R${`)br3dW4RMgMPhFh4yZSMPV}^FPM+@5ao39%=vk z7TNo##`4n~d#fGoe{OspTCu}|t7}-;aEBIQ>tw(CEYF1Y)&>gW5Om=CEYe(U#PRtD z)WwlM9;Ch9{yryv?-6@{8uh;OIJEbay%loo&4jUMm)cw8xQ009{L|$)Ha-N(nZ2d| z8w-x}boT$%Om~du|J|CSg#cP1$I}YAmR87zuDE&(a>v!9gAMz|(*rqMJ&&$n0TvfK3F^A9n7ptG6-x3qn{io$!$gNy4Bwdq~13O*BJfHg5v#&$X9u;$7w7k`= z5NOuu%X$Ob?%vP{zo@Vwm9^%ZiyTJX$|s{PddhmJ)fgy_x-B&7wm|uJBkCWZQMZ#? z?dOKI^4#x0>t3_%fO5PCaw@3?!Oy9jw}2@EABy#y+4?GKi>m;YCr59IJ-|fw6Oxpa(0&% zT!!541B!V*O?gJm-;K9W-{p6pC#fvpq%xBJ4XZSPWO)`Cf6v=mRpcN(X|$oUEEf<;t2GI zUtl!kAz-u7yk~%4W3y&ugYVF%H3fcmW1nWI9}D`!8SX@R&!K(q1&L7i#fDgx_rf(6 zQlOTMs%QmDvw(7T(ulKcy#>pESo5LW)(vOe7ceD@>l(UP*E~w*z zE!t$o7L9d7%@5qs+6^1>8+joA=}7QgZD3P@a`v_nPa|?w$H=jDJ)w10%|7owZ-e{n zd~+XYqnwE~oacdaZ4^q8V%;H>nc+Z_4X-@WZ#Zo#l)uq(fkyP-VL)s1F@AN%TLfj9 zC29Ykbh^M=IJ!vFWd)Q2T-Q6)!cPpa7WU3Y;Fp*_0eaqo{2I%SIy;alf6wdj1Z z8=^hK_5lqy9D)do5^F)vHk@|y-}pj)i3wK&XJ3w^0ORH=mSwW;oO>pN|$APP+^IB`wao+uK#+ixVH#NsvlS%vg04_QhY&qV}2= z4RaPwASiW(a(6g8J#9xyIeW=i3!Vmz;{pCcg4WD`%_L{Hx(9%r>qOD!-)F zCPGE*g~8F$f}L0B^1x{LYi!R@^iag!7#ba|W2p-L4l+Hni=AXew-%!1T)jOh}VaFB1dQt2Kp&}MI?m%=5>kZ$Xp@$h6XQE@-1VTk@ zc#|#0cqb1D>;t7aYW2P71SeTbc1Xz*R*RUHPBQql3H}rdJd9dxiGgn=f)U9v(V7ic zGK{RXlPrZzC0P;Fs}+;tBx}d!s(J~l!(!Sw$vUy^PwGX-baImQUwxAvmeWPqB%BZfRpC)Y_^hRy!Kkm^K6kq-3c|opP_+=#v!>N z8?Ml()w2OP=4BAusbpwn5bN2jCbHFl95sis^-6}CLs?Q(jplYhISL(aQW7)5soqQM zG|7tC?RO5xyu>`CWxY@s1sP77qu31x*(g>LBQ>7|&9P3JS!`8ojrUVASx&MEtQr2W z4%%*mdK1`O{9zrS`@X-#Ok#8K&(mQ(j2v`3W(qr{P{Pvcn5j-ya^O#GWxY|WPsQXo z$!5SWccrZLY8E@gN%lJXQ^~OZUT2<((qG$XOYAJxn-I=`;^?_-v_hj+2glB1xld3; z?0hGiZ?cjnvY6O6nFlYn5!&>Ta>io&2q0=by;>#jbLatzpgJ;aKP$$L<;@**caXWwbJ^W3!ZIkJah1 z>zEaP#7OnV#lG)U?<3Yj$uP2ySbv3PWK4Ea!>l(b!#1vM<;NO4b49*ca^l6V0Wu zUpQ(0lZCaGv0#h-$zm147VTvP3XNL5H1;c}dZp~x6WOWQQYYCVRy$eR#GD;s{)CEX zOdMiKN`@YeI@K#-C!%bYZivlB{&?FJ6AUo+K`-yp^F!)!< zyjEwJe)>1EQGX+=tLowG_=&|5Dq?MtZ^oWxYZQu2&M=*EvU!Gm;84$5c8={;GF;iu zu~ThiWYhB>#9m;gwh|3_Uf2Axlg(>vf|9weuHF0^dtadw@6>L7oo!L50?-Zir9uY) z{pw`pH+DeDMlP8W`y0G168#mizMXuV-(<5CY7XcY+uT9Q#zq7;uVM!X!J0K8viWT% zn|IkcC9^@6?y`Fdy#(kUvvrhK+H~sJ`~mB!P=5V`=4vM^)hvf(IE%YAca}Y5!#klB zxk^2Bs`nT3?pz}~6a5#9B~-)`hW2gF`OaXJ$^BO2sa>SzD9E7ZB-8PJB*Xo-c5|JR zOwZGw)EnGf&nGLCuzEssBR`@Ljz}}Vp{y*Zv&CrTK3&mY5!(yMm8TLaWXFnTHh1I0 z6&kmousQr*Q=x0~*EIL!#}x90HPYKDmOA_{$%@$5b+;Jn@CMzahYf&y_;7`G*Zr`$ zFE3GO5g0a*5h3X6|vmDdz#nh6BH`ySK7P*Pfe4WRq02Y!^6hl_e7Y9Ps6KY8uE4u z6#;6*M-!5#=EnSxl7+4Ov3X;Dy_c-#wKBuhjGN$?f>tc?70sLRNJ6q+6i<*c)8WaN zn@92EQf3OzMzpC9)iV{6?4&{)CRc&%szS9>0_sNd(S4<6Xi7`?UENiQ*tDGJ=op^c zPkO&y_fhj$e&`9(#Wm-*6)ISpVT$LhztsG&QA-}rlN4GO*ODjjMT833yk}bSME=15 z)GTCEJYC~j@OHx_Dv9s}-4_&kV_aC=vwXBdKM$#NX~nM+Dq{V@GEA-cz~QnUXOVHO zxn%^R*`@~ZsVte-QmA>n7a%`{+QLg;Qh1m`-KOc`w`}m%8LY?rmvYvI$0@XN2%=<# z=FLOYRiT0oh_V$bCd~pum-#sOwy2HM*abwg64ueXSzH@l@)G(hVSl{TEUqm-on(du5JMiA4qzr8W8g19?=%ks-Z)KsZl#TO`k4xp9@aOkxW$4U% z6Owl?o%tds*?K~ytaNq{TW6j&0qYg9MXNGQUHEW9rKVl+o_<~UYlLvMfnW3SRZ>Rv zy7IeE>b2zExal>rVj90{EAP(T70O+e9M_%KQOK|BR^EdLDpbE~a$FByPoW+#T6^-w z3XOo#+LJdYB-gq$-diHLAA|2vIX-m&qh0_}r}1$LWfEFNNVYGH-z9`r_S>H0!IQ8a zKM;5tqepD0HnyRM>c)v`lLLkr@^C8h`Kv#duHRqnArr zS(}zTn-?k6d~i!Xg?~usZPs^SOFotFA%s!eSPnlX5xX0l%BJyz6=)@oUE~FE(|A`x zax6{f87rlS#cd{Q)A>b(8b9}T+zft)P$8St=Iyv#uB}4NLN?X+?YKPdsnE#AYvNw# zs|d}8zpnk(Hp?k5v-z@js2+`p+5CY-th;YZKAXp`k=_>t6dUL8wF=FP|0r%Qze@Ia2 zr9vm(MD#$RSK-t=j}Ko*-r3xaN9)Yv+Z5WlW-Bk?mk1TH&Qmi?1$^kcGM0Js5FH~V zGhe_{*GpNKdfVb)xqDBdEicxJS;&vQFVQkUZ}FUs5;YqsVwUi(A4)XEN5m}UrwJ9Z zopt^hx19TbBxN&}9gJJaGZgy5=V06_zMD`X8|m|5^LO|yC97EdVe>V7;3lkB$VRl< zVl3wC2^BF@z!u{={xhN3rVAk^@h-oh&_P0#3a#phvRew>@J4i>P^oGEsy%@IAXH?U zo>&(5F6SSkzuBf&)}+EaS(8W zmG(V;j8G{%(wVaj{2ZYYQ{SGcfIL4zf2Hh9D$4qQD$&xE$zlVaNoY1p>3KSC17D?N z^=hy7{eTB-mYTSee9Bu$WGY#f3Mh@xY}3ZxCh;lnuTY)$5y`gCHr*@UVfmB~A(?FZ zr~DlgYvIxm6eaf?y?0b^sDRkA}3pD2`WJ*qDoB3M`1txm|TB%U8_fy$t{9QtM zrk3w}0oo*Gl%*|v2O*iIt^5cfnWe4V^qDykDxo6N!bXmC zyLpL1-JiP#=#)ZP}Qu;jQB-d~}zl&$=0K0%>h zQj+7o=5rM)oE%WMl&@E4!{nB{lvicCwMxfJ&uU#HMV&s+nvNg@{f zT!!foAO5+FtX0b6xI<3+!(qORWF;&!uD#b`uKNNtOW3P%hWI1AC!sucaD*+sjOQxZ zn$_*SzUS)+&1P4J`^5ji??^S-GM~{1v{4&}{Z? zcyjzzex6V%D`~gA?lo@uCu)|m4**@~2?_-Qu?#WVf7TRXlmG^oMa)@nS-=S@6h?hPzH4e&+{BCO!PlgZE**5_WfR zTKqjHoA>!pDKoDQHHrKDWrem9!dg(z)xAZ(`1^dUl$q+Kq2^>lrRJ4z*K@yScQWrE zI|wvyNg3S{-RIAJMOMs~ykQ_4PN$EGV(fj?TtG->_W?gZsDxb{fU@Kg)XZa7*f6MwpLVcP%^x~gsfM42 z%eH^Cx`*u#e&8EKGV^~rwf0YbUdl|^n}4dj%rb49IV}E9zV`sun`IjNI->K0@=VWr zjR*8Vp%Gr$fE>rtL#Ofb&}n2nD8v%?On;yuWo3Z3)TyTdQ!qzqN{9B$KgNMFycfb`S1$t>Ugi zUmK3bTZR8|^iV=~yH>IO1fo*5zIaHWtGG)@=F?5+ew4CR15d=e3ICIb@|bzxwRkVl zK%o=8ZpZtGp@d*xX;>ZaD<%?>RszKgC$#7Zni?1=)~kAVhb#^Z5~mfq1t=IE#45cP zbXXi1B7Rf|Pt>8}4k76wR6KfuHU@?YQ@N}+BF~f%CV~~3_l9RexJV#W!opJ{66%Th zgrt=QV(k-jA+Ukisp=K1jY^0V{y)pM9}7)MXe9b8)Mj0$geGFKLN8@@ijNW{3jO1? z-U%^c)@fNUBXwv(oY;Iuq8aOkCM1a6XC>M=qc&N~~^Rp6?MDRH&+YUBciDe2k zte2CJEQX&)St*O`wjiN{m`g~up_5pwWGe&Odvy};JIFda&CSkYGs)z5=`4PenxTjD{c?JJ`=N^pidH>6SoxdU%EY^moQ(Hn*K}oCiD@(3cVK$Pqz{Bd#>3mHJGyj z;`|lV%wuQf9Z47<_EsV)WG5SzC%hmUTtkGJzmPCcERzVl_pl8Xm!HUzLxzY4gi2W5 z0ap`-3EOq5XF4#vI$^lzsnCedscg8&Q0UdpUVtVj)VaeRF+vn5^kN4+8zGhv$}>HV zOJy&K^Mp#-_wkcLUK0K{&_gM+!n>(o7N-d1vHod~6J8cOf0eRPFpn~X=Wi0>-$G=F z7KG$j$`ENzXp|FLODNBD6?V!DaX=#WR%Uyz3~`rGDf8_8t2tB5x+y(;zSNMIDZV6> z$6Q2vuS`)&NctNo9!i;MFYLu5MffeOm&aO-0j;?29LDQ!*=%LqYaLr&M5ATB8s z+40qS6NTw_)RgrmIn|pYHap0sILW4o1NX3A37b~8z1KA1b{~=SH(mG;lCtSevKgYc zgKUPAELY5WAZ_C3rn#c)BSeKPsIzBco+wagfPX;ZOtGC%9$V19qhXe~u25Wuj)pfx z?Z2>|jAgd)CnVRU*+PCEQewWpG?mR34MotE>>!!U;8O8VLbFY8O?#d#72l|OYo|T-T`Gy|;xr+7Ci+BF6Ox(#MCfej@9$+HB%5V2XKpopA`+Z5Q>Bb8?^2Zb ziC9kvzBw4MI`LC+ss?p`FLATDMM%c^nbV1Ei_kpKyX=Q8!kthaTOv}~77^~0of^f5yG75;W+}Y5USu)qBz?nHY@bY@>D>>z0gA*dk=nB zyG!H|sxV)DduQSc$4WqwPZ2ee4Zj%V!w&2tL5kIw?x6+-g2RJ();{=yi) z3n^Z^#kgBEB2)7=t?^ds3!HlCkP zbe5HfAxc))G`m5Gm_SHo;%l*pkjzA>IHnM0qEwuQzY(m-M5(AIBr{R!lnJ{GGf^sZ z_>gs0!7&r1qL)ILiBjT2wMnxC}KlA;WI$djF6OlCweN`b09k+CKHlT9}$ZQ$sRi@ zjw^&w9~C)a_Nb4F<%DF^N1dX!%P{JrV!hO)sE>*}3Srbo#h--aOg-u}>W&IyIQp9j zPt#gl|EOrC&``sb#ABj^LUk>_Czd(Y`(E@{vS;-VL%$bq5|ZuvL2M!<+jm^tPzc+1 zTx^Q4x9_+(NT|Zx=k14y$DP_|mtp&ki{nz0Kbs|592YM2&`Jfz_8k|s3CZ>ycZ&14 z2qM``Hjgc?fBZ@N?&_~3o)GPn?56qm#2=mNofLhQ>{QToitBBSzBZImPBXS8PT8W&1C+% zhoNW0$Ao0BoD~NM$zC}pObuiPu~*IsdS4ckE9N=T=NXdGih0hdSL`zEm2+aK)TB{& zPJF5m_R2Z2gOK!oP8?So3UCg9a%;(~}EBr|cr$-7;K-YxfWv5JB5u24JdcPvRPq1g=ijzOP4E;P$yMr#Q(iz* zt!JxXU%B#RRh$I-%2g3V^=7gt*jFmWXhJgTYhteQfV1PeIG_+leO>q`*>iSXBodN) z$91PR*k#y;>!O|1q|tL7UP)(f!*wx}ko11tDQ7ptTBV8JZ-_>%>^ZyPX&| z)TEr<5DOK;KDr^65|aLIh;2%St^HNpRS5n4DjKEOTl=f%L`bd$zdCuh%h3C;qPNr} z@4t#q6+-X7iXDWc_g}?vB}4DO3C}h%FX;U@F{_>3`){I{ko5kWlXtrez5gaQNlo(p zn=rPQHqrZU!kv)x{+no|Wa#~-7_AU`zbRrn*}dNsX@sQrn@-;CGW32^43wJW{igUx zA@qJzY$YVU-xSA`487kH@DoCqjdC5lB^q_Hd%q<*5t80-IeE9s(EBaXTWXT`TjE`X z(EBZ?*>Ov3A{p*St}UEpRq(|HdY{P_>NvdbD1nfiV^vO8szf`bc}k?kJIij1u1b~% zcec01dWF7pN3>U=rEphxTbx$t8PnXL+u|>ULR{K=-4Wj1WGpeR?Y-_gdH-ERDp{Hb z{1xOAbjS%csO2bY$`G}sda@sW7efijHS(UYcDMJ#J(1Mk-VgW00EMEhoZS->6?)ed z(c6S7%$wedXmQV}kM4<;N``%OPkbN|U-U{-(7dk@_R&4@n2?O@p70+aW5E$}Ukp?T z$LD>q>3Mr(_r*a%a)jJ>@@|)*_xs|w)T9w|Uxd9NJ)rmdq9Gya{k}+5GW7mH%vA`z zKM@= zCCO&8PKF*WoMjKidL`=tYsf>fg^+B+Lvf6doNqLc1YLW>o2i}kZjRor(K(AyGbV3a;7yMEu+Sh71JC){jtk1YNjPfO*&aIZK^^T zHPdDil2J3wF*2sreAbl%Z*61RLei9xan14GLTHJC zj7(^zaiqyVcy&Bzc2Ni;6Iw4q(x1>?Q8FB#nzmUX^rva3UqvhO#Hne9@pkW;lXp#X zQ!@0fY5o$CcTF3j5PH|NmkCMlnp10a+AO7s-gR2133h)vCx1FEP07%oP8%u_`GeuWceEqc%8221sd+Vbfa}w67IfV3^&)=%i`V4l7xhenAV9lgzCB ztYm2}oS8K?5xvV^F>C&W zx69DGixw<3dBm%qws6sgDTLl#v{8hlcNcB0lA(92c0eI)yH(pZ)!ufic9c*BdAB-w zx69DGRXZg$$-7na%aJWY?^Z305PIL$!m1?@lKpOT>M@(vj$||8DeT|2uxW!8YGNpB z0nc;|hEAdW*d^C?-YyL#W%~u8vqOOyspO&j+OwXC0 zc3h#3CPcRsY6U&*r|Djo{(8Fp+QLtZR%o@GN%(1P3CYa+Ic45o8%i>{|M_cmX4y0E z@05AF3^VVq1xroJyuUV1AijtxC5N)$U z=siU1z0mGGM9U&1y@xn?x69Cbh?XNY$$N-)QX%vnqMaioy@zNIl?=UyYDtS^)aX4_ z+gxb(9;zKCB)x|^dAG~Zd#H9wYLfR*4gQD(`cHlz5URB#B)x}f{gn*8hiS_cLhoUk zb+O%hm=;M$dJl8*ZkM6=FfCSUlJ_uep+ea9Fb&^pH6sq`{-OUZEg6XKE3OKLqb7SW z7i$e{gq%C$vFtw)%Mq`k6gfI}eK5Y2c~K*q4c;Qy_GulPP4~Batb1a?f3ExYI_Ouh zZ^JN#IS^-!{n(!NIKx0HSZM+3WVS$^me4Le`@BBBsnQ(E;0;b60tcTiYOmF2lAUw0 zSxp<^IY*>fl#iNN*5J9cs2Ma0Irk#4jJ^azzs@#0=h)Xl?Iicb*b1OUde)8V z%E)^ap_l32C_M%C^~}9BX82kkv>Tn0%^QGZAa>y0goD+PuYIm3+-3; zL;AD@8P)O?sP7n?jOvAG?2(Ysl)aId;R@i?WJ&6v1;;+sNZ*lDqwhFQ_76qN(yz>t zY>TuhBe7>pW6PiiIok#!O0dhVFdj$0pL9o#@0x#&1npp7;HZ#Z{?(>V@ulCaRJ8v+ z=-0%L7BsR@qv>d2UIyBimVKaKYDTpjITiLFjzzzL?dk&K z2c9DO)Oh$5;(;d@JGAKOS?M@_rYhj%40F^5P ztcM`g*sey%Uz3DBfGoU?M=O6oXHQd`>Nkt6B{82_Ag?2I0}L!Z{HoQ@V=2Y!vz zvFxZL%M%<{&eKiM+S44zTIf;GdI)n0cBPv2L9P;VoYbFyc{9F)Qg5Pif0R^OyFg=1 z&ShD~9Z>FrHFP(vLc?JH67Z}^l>Q!X*GYnzTeI^@%loDy=RZ^QF4%`rs2M?H@@ty= zvV4Zhj?v1pl*;x#Ep^OK$v~S;uxHw#eW@?oB`rw$#uB@C$?1}foDP0Sovk@@1e-_u zQC^Ycqp#$?Hk$^!8=e8=?)HN(O6AzFj}XD&M-jlsHBIiY&ShLDYxsw0?l{s8lz(dv zv@rNNq`4_bi@+LZvMuap4F`f)>@o_v^TA6U1)6B%bJqDMSWVYJ=VgfoWLi};GMJS zup>YW!C01~ORj!*U|rJKT9Cq9aA@T`O*^AwRBK?5<}5u8>A$Y(H5@t4rBt@gk;?4h zorR{(oN}L%=TBMp?{qL`=UNzpUEi@R=u9F{CXRf^vS5>@+sC=Hoqxxd9_`ZaX*HI0 zZ$Y`n{){-gj@>ePtkDrH67=B=4E?BMJoA6%uN{p#|0uvb$X!)ZNBfc^XEB~#YkFi~ z7c4u?@zuzAdKZ%?PkD}A7=t>FXX&%K$dMjV2Ub5Cds1I=9PjLAg`&Qs(wZZE+VayJ zssCbAv@?xpuMjNDvHhQ=PuDs?XNeMOyF42>#`E8opSJwp)K%VTZM64VO+Nn{3-Zh< zHRYU=vrKYiyPmcq{Yolpt)`VhuCY(+%hh0FCmf&m;qwO_>p^#aQvc~%atB#R`-POs zNFD z0q+p-4gv2F@D2g*5bzEI?=bKV1Me{XFJs4mcMN#PfOiad$3X7~Rtv5ZaJj*C7_Kt* z6X^W}yq`etC*b`Ayq|&hGw^-}-p|1M8F*)acLsQ8fOiIXXMlGWcxQok7IOz`HR52$lz^bz`F>% zOQ3fNc$Yx$67Vho?=slC47|%=?=tW%1MdpxT>;(|(7OV>E5N%7ysN;w3cRbpy9&HY z;8g;z5_pxss|4OP;9UdWHQ-$X-ZkJ|2i|qyT?gKE;9Un^6$^#y1YCh|9fqrn-3Gne zz`G54w}E#Xcz1wz2Y7dYcL#WPfOi*ocY${ocz1z!7kKyBGjN@Ns~%j3;VNVILGM2B z?t|Wa;N1t_A1oTK6L2+w>o8np@Sg0taGik58?M7}mBFHc3*rg5;8@5H!&L?^&~5?O z3Ap0mIt*7C6TlO|6TlO|6ToxhZQwcqS1Y&o8np@V;ORTqodyH$4C^40z$d3kO~}@WO!?4!j89 zMF1}XcoD#h0G^rQ6GJ?J>X|Q*X)tVE(IL^}~p1M0;FP&u7wCQ*2cHrUAr zS{ME@3d_rh?gARj_5rO2Z`RHl4|ajth$awCW`)FG&KJOE=f(7`t(CP{(g(`;%)w&b z0zM7*WKG7u%r^2S@agwwpwFo;zO5U}{-hsHI$T4J2hm2vk0m~8zR!|~(~dY@soa~& z2X$DhjA%L0fg~MH(qetq_$oG;pW0hJe1xy&@NUQ1qXs+yb3%S>~| z!E?tb8|ggjnI1fySFGvJi-9v3==zj#yqr}{n8GVf@A=Mva$#N}uQL5mKb4iUwab=r zF4~M)#jCmd+;zO#Q$)41n+NAsaTfiK40yzpZH|%)D0DII)Qp&wW;GgI1)8-PEE@EVugz zQEs|6cQkPD8;v|R`-Sl$kG)!NGVyanHhUAE0_9g`bbMLXU6?QD`$Jwrm{5i)VR;JODuiL1MLQ7HPL)wl~s2ayu<*-NJ0#Q z-${fr#_&+-eB88yP6s3NWd?5_hjEMgBSgA+{E%E-ra5QULftOWz3(zzmN|RrWRY#2 z7QI22Z9WzBG0;qSLR_LYug4x;vA}mmBx*%H4(ZB;$Al9)Pu{mqrLF>A;`#^BKG~Yy zAF_IchZ9XS7p-lmZ=}k{mJZifh_+2<>C<^q$b5Y)@so(|5;23$qpxL8WGX8Y-;8|S7-Bgby}+1aIy--{G16k0u+kW1 znVDQ{Otd`PV~a6GJ2+-1S^g0$jOmMi2RJYPoUu@woqO3>Xns8Erjd&tV^UeZd9@xh z(`G5spH16ECrkDCFw+1_*7(Li&(3ddO1BIg*UD7IecHo3}}J@Txe%bCYW%ytoF zd-@O@fxZ1wnXmELg^exHJ5a9F(q>{$%^w_X*~g>v5-bNT3B}J^%9&+IM@yL{w@z0} zu~}Cz#FA&q8#TgGZdo{Yq-7TOn{gLb-Oc@Q9ey1~X@%vP%qf;C%e0X*EY+6Dey>}& zOV;>#7PHF=ufbc-d^ zfKRlmG|gJ}r6tnkUh!8D6(4rMQZDx8&)`*t-0nYELJSi-%>bLZu-;blX)r#cv;~p* zrYNmR52RngNZ2JF&5CCTW)^T9p~La-yMco(06b*N9#|zrSs4vmvooS z@oil^bS0}hyQJujM0Nw37?1??*ytpeD*odt9KEMkSw)KOl}>$J7W3$KmAb|J^&x#& zy2WK^hG{V`?9hiTCd;c7#r5qH!#Tc+X4J%#pTs|oN z&1Dn#J;L){7A(=M)v(Lk7>Av`vDFL|_C$SPomeP$UeMC&0h|=8FY$f#E(^SvuYOA& z>}C3C(LJmo`rqH=EK>jdxEG-Oc0{^$8?`7>pWD5QYotDA;&ZMCUHlXKLpcSW1`?^S z3K{|&+@~V-Z6>C&ZM+@)s`#J_o@cgEp0`nZcT;Px&(8OBD`(b50d8gdW!TqJ^lqcW+&bw4`$f4$Sr09bbE`7# zUDMJn(K=~PvResd{t(|3JkTu-vih>yE)iVsb+k|?m8DRg(dJifTv%aO8er`-=(5{! zs+GerZ|T+<5nFjDeM@+2b2-};+{JyDsNL^5_tUgTWLfLBnQY9q-f1=5JbLnv!3f-ch9#T$(ZB5+}f*7p?f;Su-v`a z+B5Wh_f9U!!@hL?%<4C0zxyt0m!+I#>rW+}ch9!G+Ts`Yeb&G^Ta0=7(Hl(gT&@@4 zDU*5n>-wirV=mEA0+ef%C{J zaE-MJk2N3JJc;j5bR*c`Z}S)URM`q^)rL#9N^4Pvo3<+J+)-g3;o_yZmL83WR#|%# zbOR2awZh3)BPutd@EZR=sS+uLblT}xN=g)AmoUebp z680~BZ+P!*rseqRX|*tubAZ0m>CIZ{F1wd3t(BsSTk(FaeEozdFIJ}a==nKu_SP!X zoBcnpmF@Ci(xqAh!T!ted>ORw;fiC=*L77|rHd8#Ka0`CPj@*o?{lr(+BUyY?Q-k9 zXJG_d=M1)j6yqtk_JF;6A9#@cJwN@;yeTlU!`bX^?YIP3fCxVZ%FFmnQnP*9A>F{)$>sI8qfl2V-EFN1&!6utba9xeOW)J z!y|KrzKQoFPY=U7c>iOF?o4mw#J11#tkB~*Eng(T6Q8T0R&TA6>Mn*>9N}pe%yT)b z_S)-Nsb7~=>RHbIi2lwq-Sy-7aJF&n`C^VItbAU_pl)LQJ;K9)?_u94_64M}RiZ1L z95#xPi5EOqi6(JqE9bD@i0uG12 zmd6o(iRd93ImZRA;X0C<^T^)**gBOR)ONPIU#Fb)htZhg z_I%$sA3T?~^TAo%&8HDr%Q9!c2^mIs=!-s?E`Jte_~6-ij8B@|vE?86q`OV5x7jDt z_4Q>rFjlk1@AmO9^n%?g7W`J~_PK8L`re1beaZ!&Ot*`0-pg`xpLE41+s$*(4X9P% zljE60nibmSF|~ZF#jL3~0(-+q$aCv7D8U!$9$mg$b=Nk&nXY{Y=Xh2ze1>xs+gZ;f zD%nYR=X(|0y>>KIv7_~@@F@Y#Ru7j|#TzWymgiGpf8h&*b9}RCUQ{uB#&eb-q48Yb zD&{wPp>I3NPdjR96~pHjSJ8U{s;wLI|LL1)?KS8-sGHFE7|{2E=Yl@&6uV#ru)!Mp zSkKH;}hFmUT7Ck*VlDq;~Y4> ze3BAU*ONxe0D(^d-N(Zg&fuQ1$7$p&C!3l2i9=@at`O%D-kWHq%ZTU^byIXMgC^H4 zHsF(7KXWTD_!8)aRbK(e+8#OWh8%!0KFc*q+XwHRk2LohbQCx^sy7n#&~+T_<~KmR z1<%aP*W*)BJ#_8fhuQ6RZ{8#GF1MZVM*B`K?+uRdJ81c6&a;+$JwDNLfT&ZuA?nxV z>@&kV@Lv0Y6xBXA_pr{uzX*T%m#@zm(+kR-)4RZG{8CgG&wTwjqFtVc{^E~U!x_VE zZGL~hGPepidmnVOcI@w0?$&F`B%s+%r}>pZhVlOKl}HdnsLKnBs_qV$?HAwE?|C7ybFl#pX9>b11F^U=j-t~ulo#`ha4IS ztElbki6)w>RX;}nP7f?^518`{CK!87BY@(nxQ(K%qG*ve2*AuV4X85UImFj}2;5uwy1(g-bYxmwK$`1{m@b|n z?(S(wz3O8Aw-V=;PZ!T>vXkZ-6^i^*zNphCE#Kr}j0{K#2yw^z%1HMnueI^@FrJ;? z6TIYi?-#I}+7jZ9&&u3QE!wSN%)2QAB}6kV?ckaARR*>ab#RQ85KVJ!SON z=wY}FBWI&EFEk3Ixn1G{(~XboC4tUwV^RXMjE@3lSTfz8ZP+<5%YA0QG|;aGn&x^H zET_5pke7#W-G*qnM#q(5p}vSI8{l6h5I-1FQMHF?v>L#3x-2Fb2VA5h2#( z?)aJKhTN5b+3rKzuMI3T;*&3nsTR_WfiQ|T>4q))Nrxu2b{4>}HQuhenTx_zCX5UVMyQ4lvLE$}gJv|^v;yT89OJ}AYlqCqR5 zj~k>06}oQ=?h#aJ@(b-9wA_8k8v}xh-Rn;p9JJBB&AMShQPv+~;^2;^mR}BNezm*@ z&?W791eLRTxif?Ixz|se8x-aKYU4ZRYW_{P&MvsxtOT8RGEmbGGz;CIp91>E>k)fI zp?l{c$QedplrO=)U@mtwCk(`{wTi`tAI$!Ty;DIB!^Q#eG#b z%4#mcc&gwtkaCtX;Z{(&dxzz}2c4!KPc*-^)+4ye*v2~`xY{@;FEqHqeLzutpp}VK zYgn`3N_Ve1uu8a>1+)z2riE}eGn=x;Cqo&>qzBPzcm0~~!Did<-FpS6ySPmr6dVbB z8;de+jvp3$iB^dlv`Unl`m~>^rMv8y_kM7hK6mZM!6~|qsk?&9O%oIM0{tZAYpM%( z)}{gVzJu~qxWmQO?0c}hb;;@ADASI47lI?rOQNm?SMkvHRuN^ox4z8{iki%Q%S zl4A36-yV`?`*Onk7?e>KvQfAUjxXz@R!g|lJz-MB92hI4o;sW@@azTNQv6D%g zP!-Y%IDdqsk$$G3Bqf!l1II0NfaI9QXC{PJXou@>F?v|PX#JCGrfWihJTtTj&2(+B zG{-a3b!!|@()XnElBYaJ(McwY_|?32GdLT#&MsOWn&Or_Y>P47b|xNA$boQ%FNfby zTnx>$#dp3Ms?*UqO@}Kmeh&69wAeiJWi2erHhYLEEYmipE>PDWJ7Em_JHe>~z87#0 z+s8|$dWB`%o*7yzNXkX?-)LXIQ>1+PB!4 zZ~J0QR9K-cB)w0V*>bYY;IKTcW9RW<%WaXPCWn=?>Gh_CZM3;gm@(Z2dd0?l{Q5I{#4cN-_6x!e+9tIx3d=UX8n-Si#JaHlS9P-~0~Ok7coSQp z>898BVOAZU@jT(48oxIgH2->7q~V8`OyQM!e0F0Y=zE7}8u8hQ{-l{nYlyGQw3W~c zF24-kV5!g!4ul-KAA-*=@C?>3JkwPhl;b(T{oNiD!#^|OT9=~TYrMr+W%_QeNqlBP z%b&@vaIPn@DuE;>763Nsi$_C1`iz=!9BVLBkcopmnn1%oJmX% z8g+IFr#=l4J34NN@YN0nd=}A&YNhFZX#%^UhIdu_OqU?SG~NEVy%A};rEs21)1|;? z&e*?SM^p-YGN-ThQrA=ZO7VWzlMx<<*)1>Y894IcvlL1hG(VNuxv)XY+FX_H=z7W*xU8mQNL8# z<~Dd2I8EE`5x($A{*iiVy4a~F>+Lh)b3oH{jRxhL_L*j{yI9ZHW#Aa-7lX^Z+x5(r z*W>@J=V9nm%cp)Otpk}_Vt73$FCTwE=j(B;ZobLa!zCoTeu&3U-I9SWTG63?o>}X8 zUGHID;r)-=`R3Q*Gvs{pouTl#w+F6rr|G+=)AZfbY5Hd8G=2M1&b%6B*1t>NJ>{D} zqHjP>Qr+wDy~#ly*=b_^eDfP|Xie*m^y~cX@C_H3r9^l|To*_FnyR)3IqYwcfm<{@wq>+M58zRh9k!=gy>Q(uKBkqosv(qZ{N$ z7lcZIY+V9rQ<{{5ER*TXBpEuH8D=JJgD8O_o2cN9paz30q9QI}eKlBKMFmB1VR_*V z7FpflMMaVS=XuV#cV?277x}-1eD8Cf^W1aqJ?nFx^PDr@HPz>yCwF~zomjcQ-+Axi zdnQ)s?E5ah_lH_Kw}gIv>JJxBsr(9@U!dVn#11w{>0EPI<&DQINruOqb>fmW)puQ! zs+M)4)0dn%?vC0&v2t|vvF9%7n<8_-YpUNdQJ(T_{u`lrWr6nyD z3ufL4=e2d;Tyj~(m8owpxopafse6`ue%$O^epubE<$j*xn(DSwKQZUbiUu^aYpTB+ zlIK3e8p<`*KUVyN=H7?F=fZo>t6X{wB{gB`4O(6|Oj&;R^0DV&Ran0CmMOE=FJJok zDFde+zx0kNHJjeLG#Q@G3enwDW?Xm9(z~ae-`KJAo+(4*{|~2#ef5#5PhlgSpgq{V zj2EoFG1lw}$MvmJiUqCVmuL;YLci+@{jNvQ5?@&Qvne}UUt9XflJvZi$%n+|Rtm4f2Wq+P>-VXSoqfR?% zzOh)?vVC7>D^67FaOz;22%LhlzSHo*0jE5 z`K>Dd_bHd3xOusE__yDE9x^qpoy)5apL*P$<=$A;h^imbb(YJh?T48o%$Jr=FiXrs z%d5<>=3(gL&Ew!|^BeFa^9;CFu}-nc{0>QGp+nYr+e>W7ya%i@pEC=h2r25p@;d3IiVzUO(+d649WW}3FX0KLwmsEL+=1rhb{+C z3S9-R4P6J;g>C?wLLUYvRp9-A=J{!6K{9Pyp{wdTAz7*;K{}#%D{|xO0P52V9 zB77NG6}}Rj5Pml}Iea}hE&L(yi15e2IpI%&HQ`&qh3x(%|HEGbj}6}m9v{97Tpj)o z@TBnfz_sBYfOX;f!4HO|tUnr-vc5SiWjzpHJgEF%?p0Dk>zkstTzy6Dp+6OsPgOigYT1gX z!9vAfNv*#^-sg%6d7rB*mQZ^WV@`vDXKw>MU&fg7PWqzhIzf_q=ROWG&c~WJ5tDF<6sS3c^@!eTifW}WPWf#qc>>r&b&(jHyTRMc z4x?6A#;G(w(Nn>cyG(G;jrKW z#kw%R2)?dS>6qeP#li4RCYc=!51LA^W7#2UO;O${2nG>ND%T zinmMp6*rl4E}EzG0_go0EvOhY%X5v;E#RQ}&sQyc#M2S&6s`Wwe<_e+-W{jXdH7ByObNpNDjoH-`~3z zerVUAO74fgbk_m!m0jV=o6Kdq!qg6MCl^ zyU*Oc!5b?w-dK?dj}@8lSn~GL@YvhT?=PLFvGX)`0kIPRquq~59ip^`&DLdwe%7LaMqkYP%UqDKsg=bgzgweIiB7z z?l#kT`oOq-X2BW5;KgV3kKbp0dB)!Ha_B%h;`B%d!+ z`ZA?&QTi68YbNhAm$lY`ziBm7_L;gZ3#Q1|)j{91#T>rRyu76!>^O7p;le*~xV&NA zRC%Aese|U;Gdq;-fd20@`<3p8e&x&or3avo*g8CQIr78MtD$c*r*92UlXNp=sll9yEKQl|Ox-x&Ewy8T-s1&Kd@r zx7W?ocbhqAzOcPR=?>^0Y~MRmp16Oe3@BfE0GeJM z`h-Y$mb9AiENL|hX31T3v*aBbm5wRyRUA~@kNl)-_aonb?E$3^K!51k@NBtvfnuX# zOmVN`pyGbT1B&4zRbH`CF{ZdzaZqu;;sM3*9Feb?v(Nlxd(9kq!v)G|RE#O^RUA~@ zuXsQ)JXfEk*r*s&+^aaKxL@%}huS+S9X?9$Rcus@DehGqRNSw4Krwu@$}2W1#uWD| z4l3?f4A-cnVxwZe;$Fo8#X-d(#r=xIiU$-=g#_O5daOJxV{R^pi@PWA>R9XV)DgshP!s_c)Z4 z%@TRf8pS$Avs7d{mhLlGpWP4MclH1{?Hp4pk{v4~wqJ2TaY%7k(X5o%x|1{oMRW2# z6FH~mG`*{CpZV4~HTC;U_1jFtKC|s@X5&6{``bD;YOG?%CZ!bz6o(Xt70qUetx>E~ z>`?4i98erm9NsFD18ssG?SeyZ6C76TKX0G$&h0pVpE>>9A@D=z)?Fa6HIaShz_|mF ze~7$dO^48RiXDpmiUW#69sA7c^UMyBsZs1#98erm99A?jl~Jry98erm99A@Ol~Jry z>`)w199A?5l~Jry>`0J@=M8{Io8O1uq4#j@O0mUK3 znoC5oPO(F=UvWUO=2DGS99A^_nzCY@VuxbC;((&LOl1`76gw3A6$ccD6l*Tm^c6c4 z`xOTihZKhu>-LIdhho3tfZ~v1%@vxC;(+3i;;^E5m%fi;onnXLkm9hSxl&~m>lDpZ z%26Cp98w%sG*@e^;;^E*MmTkf9g6*m1Bye6b=QhahvI`?4i98esxoR5jjfa0*Cxk=MhtW)ez>{lF6G&ie^Vx3}#V!z^m;*es^$Mqc)I~4mB z2NZ`ChZXBSA(9=6{fYyMLyE(S=94O;*snOCIHWkNXa@A%6#Eqi6o(Xt70oRo^A>M| z*Xix_c6nd)Uh!szE)V@7WWv+Jo#79JzZ2e5@rjDNEB;uqXUzM@+%e|CF;9$ndCbJh z6Dzk?W-ITgyub3X%0E^9tMd451@)4N4$2# zF|+>Ptd?1Av)(o$Im`#_E%^BV)o;+pPv2l?AKId0C(IdkW9&-uZepUru4&fn)unmcdq$#XZ%?Vfw_+`+kz&OPg> z&Z90r>e{2ea@4&?{qm^ij>;TeIQqRuf9mM(9{rP}A3pkonp91$=GvM+)>O`$GjH3x z?7Vl*yLR5g^PZpQ%^y2|`uwBkFP+~qfBXEd`B%*U?EKF!xMRV}g(oj;SQuG&>B6fQ zesJO7!tslyEn2c@&7$a{3m4@V9avO%%nQd%Ts(L2^2M!-w=F(*adz<~i!WdN-o;;B z{ME&GE&k5p;l)oc{{7+?7yo_nYl|zFOjvU2lBOlwmPD6yE$La3Uvlx1{w42O@`oia zEqP^$Svqy;tffaUU9@!l(w3#&OVdl=zVx!CS1o;H>3=W%?b5$5UAgS6WvOK!UiO=1 z&n{cK{Ica&Eq~AQ4=lfN`6rii;)2=CPR%pfwRyIg!2ZCA=3Fz`Q0`9@epJC7EMcDcC?BeZZ*Y0lfnCW9z?%Uag`wn*9Udk@p z%UGA%YYy{5INtKqY(9Xw~=$1c|!*wy+0eB(aEuGNpQOZ7%}aNWc%)Q_|4 z^por|y@g$+gX|*xG`mJW%P!H+vn%vAc7fi`uFo&C%kvI)b>7J?&abm;^P6U#cQ?B- zu}OIU!LG~innm6{#+doB7ul5BdHmnNuQa?0zIT>jRPkqfJWgC%(kJ)@rH`qX*!3q) zfRla4Wbi*uoCaQT^K5W=i(pb^oO!r2Mum!nyCGg15Je{E?p(eC3vvpuKC{T#2>m{BDlW z^Xmjp`>bGT3WvQz(%iB2Byg+Z=~oNq@IJv=i{wjp7ldxORPfPv3BGWJ;B^ZGpQ{)A z!XA-q{HV}BI8N}(%OuTD&6jukrsCAMo(g^9nZo&`=GdRpP0%*?nl3vX+RD6fx-?~b zmreQhy^>n)a>3;EcF?|weY(9X+x#~8Etw0z&wobp{Mt(eo3E5yy7d%!&*|?LT>deU ze5y(4UwXjIS}T61&wW_mVS(a5J|Z%cYb1s5zatB-yHIMy zGuIcuaqkz-ze}HY{l)($_Z}*p&tKnv(DV-_|L?y4zV}^u(DV!N1r_g zdMy8iOclGqL;Q^gAEE~jv72@h_)GSOb7l`1GQT!cp&tf0*O1=bqc5Ef{j8Y@{Tvvg zrGRfr7t^hJ=Ivm}ywf`cyuv#T ze3w@bUg(z>vAwI|usXV90#JI~V$sV8{%3=R@BDhRmnD2=pKrGPinB=ud+o^BFG& z{aG+%KIbK%KM!(-oYw_?8yGTQLK%j_jd4i-aEkGdzXTL@Gb-Y=C@DtbI`*LLUOhhCTvTg>D3^LpOnkg+2~W z3Vjls9J&RZ5*p-v4hKVKYUtD8w9se4>7mbq%USOVv7UZAcwFeq;EK>4;7V4*LS|>^ z>)e|HL#8M6P3SZjGMUib&{>dL6vC2Zav-%R^dHa#kXjV_F7z&tx)HhuyfU;O&Q&0F zBlMrp*MQWG&=0^5gnkI#82T~z$v$Ak}nOTxbeSB0MePY6E;HilmS*M)x%c7*>3?g;-GOom?s zcZUB5%!mI9_J;osUK0KX_|EXF;1%K5z$?R^7c$p{!{B?vW55rF*{p0n9IggG$$DVO z+!CG$el|P_{Cs!{`1SBq@SEZ3;D3Z?g5M3#0>2+V61*=w7yN1XXz*v@dEmq01>mFM zMc|X+#o&SPQt-9#a?qy9f8e-^72uSLRp3;9;4EZjSDXmWsaOLpsyG>3TyY9m zTX7nAd__HYN<|}hTE#l>^ok8&OGPudt>O%Dd&MU3f{IqKqvA}kv!V^`uGj`%QL!Do z5=SN4a>cpe`zp={KU@(3KUxt5KU)z4KVOjmzg*D;-cgYRe^jv(yuYFc{B=bJe5B$c zaJV85{-&ZAe6C_Q_(DY=_!rhiL*}K5cYyz>xDe z`^{=3?>BEjl2a6ryx*)v@_utFlJ}cBB=0v3NIqcJBl&>Yh~xvN1<41@W+WdlTabLf zY(??`(~jhWrUS_b%?>0VG@VF3Xu6Sn&|HY*gC>RKgC>pSL#7|ehs@QFAYnkDBk3=A-65Bp);PBl(#5 z36hVQpCkF0`2~`XnO`CKn0Xk<$IPQhK5l-4T6Xqo(pD=$z@(J?_l24d_BKd^*7m`nKjPxnYA1cPK04v9?0;|TZ1ILX$ z5u7k~4S3kt4d7%Xhs`u3hs_Kmhs_a44x8CX4x2eh4x6Kp95yvbK4}&r`J_1p$tTT{ zu_u7bkbKe{i{z80cI?UE@kkypCn0&jycNj<=G3v9z&a!km8BKfqrkoSDrq>y~tq>+5uWO>i0 zO%BOt%q}FKF?*1F##~IA&zMV)e8#*J$!APIX+C2vNAg*7C6dpYtC4)xT!-Yd=DkQh zYpzG~S@V7*pEVyu@;UQSB%d=ML-INE2_&C014uq+K856S=2j%1GoL~7dGiG%pEqAb z@_F+WB%e25Me=#`H6))m-$3$ta~F~?m~SKbg82@TFPQHk`GUC@$rsG`k$l12hvW<9 zM@atJyoBVR&C5vs+5Bs48)&Ld1VdG8z>2DEU}e=Q%mc?&tpF!ftpX=kod6z=!S&RGkbSf#i#34w5gLqmX>j%t!J?vk=J_%`r&6XqF)PqFILIOQsgdm(1}) zB_xgal`1*x?yE?8-Zzl+yt|O}yl*4vdEY_O^M;W0yze3DdG{h2^6o=2a_OjzV&hS5ut_=Oa1UI|j+g-V!7yd&eR<*{elzvUfa^lf9KlPWDzK zInCRMBqu&0InCRQvaqB&U0CLvp%z9+K0&3vf4>?sXtJ-P?iW zbT3}r3U(qn*Sj9cx!(Jcoa=oM$+_N#k(}#&6v?^X$B>-s-Hc?7_XQ+tye}eI<9!Lq z8t*Ge)_7kUR6C~$*Kd(Lk`~{NpyhK@Kp^BvyYb!b{G8MxW~^wF+*eiIp*7y&sJ89y`}04 zRSne-RbMo2{`m99_mBU~_jKkUvYnXKIq*o`+o4joDDU%D6Z=HO{Au~Uvv1z!#{EO9}oZA;ftp3o_gQZ!>7%e_MvHyOq(%1JY(66?K8eQm#$)&E7Kmlp}w7}ap%lA66W$IW~D{1@jxyx_?NOBc2+`sSiZ z#~g9YjmLau$&Z#ivgG4SZ(sVIr9W8u;L@4P?pXHyWlhT~`e}U3^{$#f4Ru`peL8*L zRTY-B;pI0>7eb^$^EpII|NVfoT;(Ld;=fNX{|KiD${CRIpZ_m@i%%7=A6YJR`Mu-x z-lB|9Upk1~uRF?RBy{OPc_xt?)fWQ0r`yp1#AMq#W4BpS|mlNL1Pq1G8l)nef4D&NQoqx{XL;U@M zQ__CP->*1#?$_o>X2M6AN6b95m3ihdGoRf8i_GKZ81#q5)XF7{`NuJuA7_4pZ}b8F zp2ENJx8?-KSQ$@cq?FO`B*rosrPi9?nN!T~`TK)8&HRzSKk@fx{{CX>7)R*?9~okr7Y{?6Yk{Qbjh<(Hn?>7AqIUsz6G!&)i_j(Rdf1ayMz<0E-@4NJB+_c%Lbj}Kg!Jf zX6EI0npxi0%xv!)=18ocbG*CgqwX?CVF5jwzZ(AL@i*TaqEGlwTKi9E$3NA=`i1%E zR4K1tm=90AirM&8%(ibb&v-AG)0l_MubAa^RLt|PVb1V1=xJl>y)(wl@-7&&&dYJV zjlUm_xzSrR_C@deRg*%eg{Sa$oOfmQRiOvQZ4ciuaeMgd6M46aSHmw%el7gUt~h#@H=Z4F<7@65 zJHF<%@XzO6TJ^PxaCK)Yi8Lki*;KTzF%`|{HG~JbmOY$n!p6gq;ClTu{B(`UA zI}^DeqCOr!J(^5qikuCJLPIp4DEW4q!pIy^?xyI@#OB2A_DnKmGhV-RL>`DF@4Zsu zS~8iP>oYmtQ9oT+BhyehazC;qQ%Ix>$!Ka_J{HYNw&#-h3}vm43dGt9(cG>>#nU^O{laXC$0E(EA^29gXjN0<&=u9njmWRy<`pMMGA+>^nOr?} zW_vW3<~z0QG-l*mSSA(xEplJ*)y?UxnM{w|ru>n2DYG_Kuyx=>`GDgiC;16sn!Xc&|`C7H<;+A|HdZd$44e7;x2wnSq) zqg~o2h-k_*MSF@tDr#ef+8{N&J+md3h$myTBA2vnQca0eqN~WwO03UidfKA9 zd`Wq$M1iNZrrWz+Zt^s#gxjNqShrMVmne^H&C2tN;daFI?OStk+lsgsx%yl#LHjLX z9<0S7yFQtYZ^&hO)A6=cB9U#&W(s7Bd%(z+Ao5c5lC~3R=q(g7>7dKolt}lw7+1+$ zs67`==d;NaFB!L)pG>9baz^pXdpaxYC#9j5cq$X4_*&xh09USZbm zil%xK+BXx>-ggBz@x75|m7*KgyX4}!VTkhQOGVM>5%o%M4Q`|-YTxsLTE5C426F>DN{Qw!4 z`Hq7%PuS(dlr8&14E>`^K$9(P4ltT>(cN1!yUUw{2$l_VGyr&IC2Cm*s~k2)D?TMH zjb?>uE7+@TJS)ul-gK;Eh1uMjO3CmK*}N`IZsh!sb|Hy)8M7(T*%U2AcQ7h*L(ug> zGxWuFa;?{aA40lFvQ~PTM2@g_ajm-x-*%hySHyq*2leGwI|84YD#XxI#@NeG36D1gw zIIz-I<&}QbTWP4Jo1)o{mFA2@-&rygY>6gw1lwY{G zNTA#W*$vAnK7o2woKX@vGB;t-Ev+M&K7CPg6Be_fe0?Y5JBHvM1D4e!KAf6nF5c}FA}-F7m~CS;IvenSLa6kKaliUp@db_!wvgvS6mv z+9^X;y3dKpmmzWJFC+3GUnW&xeFD{t50l&dS*x3eS+0DZzVnIpqx7;WqLt$7hizKd>HC(hLHDTyrb^(3pw28#D(2HTkXeUu` z3aZf6)9HwM(js%|+Ktg%52dWbN+MtDu8|Gfnrr!sY~9pgBy+5OqAFB_O|F#R;F9*Q zjix=Zr_h^AtZXt=if!rSMZJlZOf=ryWO|}|HX3OFiQ4*Rv#B>#NQ#9hk*lrW(rk_| zVMti!`t_+)W_Kda>lkSiYAk9^OHeddOJVmS+}1}c?Wt{UH4PiKm`(i8EI6?}5zR7B ztfzNk4&Ah+&5h%2ZX9nj4Y^KKyF^4N#z-Mr63ml@kxoRmrG-db1h$)arZJVtC(brn z3Xuqjb*AD`eKlH4Z%^8ql_Ku7lvtbSq&{Bie?aA^@8nrDO$84Zv1HGS2(6bsU zc>_kR&b%@yUA@L7)e?zXeSLX`i6?gScD3y&i~V0}o#Y_J{O{aipPk6*ZPL?4_(t@t z3{!nfBvv1nNU6<@y(*V4lD@=tW(!P(kSp-#Ub7{+!}N%?CIvyKo$Tz>?zw(PrWXTF zQzn89#V}nHlZczO2uB{(lF7w|mJ!oQIZF^JrQ2fBv@f|i<5RqzkSIcOv9(1cnYu(a zM)Sg4myRPP+P8!*Lnk@l8B|=9l$TMZG7#FFHbOk}c7KfCy{~7uAOb{!xO-(qOroqL!g_g9mmDA!2Jh?e7TzmKH zcEa|}L|7VxRGVDHW+eTwGrql%bV`K%mQiF;MH(=`?@VAylt&5af0^Z2LuEP7=7N1e zKZbme1jQk}dw;g>D7 zvn_~>XSQMdOl^o3x)V9_leRz#&H098CWe-5GrYZ*x+081CKP}5fR(+y2e2PIV;qNc-1j|UUOcJzPw~xw2;hqCZU@1 zbOSpf)}`|)T0yhb8rG#{ei~;?iRF5eg%Ml~FVxhLT(ny%QZ%d6-(;cBPb1;dk}B>d zzP7%%_hl2!`EpjYtAt}`^rC6diWul=&Qd%(GJE`RBA3hLTGQ)U)ge|&xjApOTB(9t zRP7Kmk&F@uNMSNqO1B_$4fddjITkL z3cYS*6DBC0k|(1ZFlO~;-6JvZ>&v$!(p`n_jg;lZymU0xc2RFs;uz<9Q*kNG1~F#l zlNh|*E%H4?=L+)5!jvvu3CWGE@gxdT`55q1iS6Bt zQnpqj(amZa4H>GLC*%`^;>Ia#`ed3jm8TD`B<#1di(R-mkMSqzDqfn*g=UD|kmD-v z*`Dl4*e+Boj`n3UIgQr5i)J^nifh)6%AiwsMj}!}==^kAZq~Z)t+i8@ch*zgM~jF8 z*w>!1jc{}{wKPV0qa&L0ejSipI;coXH1Bt?ZA^y`mdYmP9?A6fWW3Nl`VoBKZnAZB zgw*NLT)*$mkB-_Pc_u|aI;uTcNF~8nr*?*njZ9@a3mX||kR)R)B|(&*9=ZBsQYIG>?MYPUi*OrK}!eXR~CTiPcpf}R>w)N%< z(#7UlbCy|L4>!$ied!pp2V4%wnJ&6ok}0zM1s^9t2C2(}3zE%_Dz&Pc9-EweKtzV{ zH=;SITufGc*U^ckH7Kp1Oc!IRRa7&L4EjweYk7zi9(hov+-^8j1XjF1f(mSB6N>nLHiXIRS>4lftmiFF;aA+b5hr9Pd` z^zq(jWhAuD4$n}$rl=v7sz(dV7VJ{5--%rQt$`(T7QCJ|Rgo z+hXT2)GKmc>ZYT%WxI0GI3np7gJfF!eU$39-lT->cd0(&b7Xw7nu^b{`bv2yl6ML4 z9W<40S)DYkx=2YA(ojr1V3IL$NHMfpy=vV+i=~ljSj{UmjTi$YV$zLUevVF^#-jnh zwYn(QGG!8z!UIR6-BhiNC(|Vv7gRu6nG&|Uc-;xe2tCxOGAkPO$Ot#9T#qqnWK>%M zO|Z-%#|^wJlE|cTWTa%uA)=%(4iV)(dt_qC5l==($?R@Ut2e3gGXfSK-w1VB#`SH;TNK_H0u*$eCH6vl3iWYW*UNwAbl>rHC-B#Jj6)Q zMH|Rtl}h)CIw(Q;qM4v+%FLYcqtNTq?TH>)E)*kQbNa&G9O?LX zVwh-=n~U8Z`j;AAMzZCZPA%Emn=X~t#K@sD(wW_;<~*Fa`&L=4cO#{xwLBAX+mC6i zCdts1p(0wD=5#j6i!wX1;R0i0z9CWAok*m&BT38h1q(ibs^@45k$%(ieT7k6Y20wA z%Nu-pp*L^mQFfZUok_HjX-BK9snqY5puE|}UPjzhl2CJcSB6VlHo;6Jg0+$Nh-`|c z5(cXvEFBVUSVl~$y#~tV*C%>L+~ITFJuX<{Wv6yZMgShfr&)q-p3=6obR2dftukus z%ont0ifl+_c0^NBVzKT~u|;lAG~2pE)N$Jn=QlCXHzY(`sxQch;2zG%&zO2P=>|D(5fb%jeYRi=G0mi;DU>qYT>UHs?2-uk_ zMV`!ScmsM5UxG!1E`a49oG+U@nfu#VTLIQH43KDyx|PYH3kK1hhl-G=Hs?3@qJc|o zM@L}@Y^KSeD#%+9@=02oe6CEfMIR(mDgz;T9mi=yo(O9Xma#}{uxN24UYuxX+aAqT zm72up6!l(bFv9Mfi96}`Opt23Bu~F31Aj!!f?7?tCkx#gupN(*PB(7PXb2OkozMHa zuW}m_-O*i`Jg`J*I423}Du0R^*Orvw(%?P^ZlWZp_}1(jX^V9yWW~g=Vj&g^W-N)? z=1nX$@YW;wV&OgrTjmN|slIBOa`7b4R_G($4ZTTANLg(_Kh{B>yy@m$Wr&U|Q({Gh z&j%ry$7@b2p;P!)7KMehVVeo#{J=^hMKBBJ_InxRKSon*EW44QhC$F0W=M+1RB zuZE}=dPSM$=xY0V9m9y=~N$mU^1(!idPFzcMWTel2?$CM%v)kXwJ6MHmpIGt=Fio^KHb^ zW-uCo^c}ICttjf4cM`2>X3(s>6jxcGOEqrkJ*3mMi<50k$24dOG%7lNnvk}+h6DqJ z&0)V}u;Sst4l__iBW;PqPSF-i6f-T9Ms#eEv?`dTnJMYa$d40GA(7c0O`-(SCCbE{ z0Y{m;#Y{%?rC$@7PTK6n3=Mu*4OuQOh1J97+bOuX&l_8hP;yWTm7)DnkCN618>o4* zm?+MDGzHO!f?!jww`)r#m5ia)I*IsbmQ*o2HE+XsiYGh?6`OmJ=hl1CqIal*V=e2J z^w*G!>O!q0WlUlcW@Plz;e?`w&btsfnNqeD9L07c zm3`*gQ&&VHd40cN{v9kgN)GYBVuW=6jw$O6c6M&Cq}WEhn^A?jl9N8wb|?(UIbC}t z1L7#jIQ+3aMYM&|klWfrsm2pUAwQQGjJ7dtIas9VtD|oSa9dYvrO0}2;Vt-&+tgjg7-z16S=2whx3cK>r=94MLt75FwY#nZ8M4^*O zW+?*l!tx{*{U{KSlCc51fN5#etD^WW8M~b`3^M>Vnu&^svRS&1L$a}Q*owyGD=~0$n~)@E+RU?#wwTU%?EcdloQjOr zZ;G7eyo;70E(pk25CpX8`?+oJlrbwDw8hqh~I=yA}8xU`Vnm`Nh=|B z7`2;GF}g#U(y;}x%`|M5o;7TZhkUVPN(ymZ!D0%VOQd91O^-110u02`SX(=#w`I-` zA>)@4Y7wwxpaztiw``;}`#3@RR$ehhcO+>^A7d%2#aY@}eMJ4S49U7;Nay}GLhUS; z^v%WAKghly^~y%l;iEV!Q`B^7H69wGgIV52jMo`<;fXG0ISf=X^|Jv#X&aK^L9!)A zjkg>vOjd08pjNiRQO}{)qb~RpOM=^)kGy3P$yFIM9B!hESbGJvxUUEVx=mJYA&4eB31VhSD-`%W28vxpk@1q`gOuEmhMIw6kbv)W1ynzJWtrWqp6*8_3KV~iKuyp_t!+Z9qmWR z9=mL8i;S|R$!h7@n~Oo7X}eb!?N=SYR+=4dRU=?nQ$p(w)`zu=bfb<==;X;#_f>_I z!0yrj1sg=z&OsAs5#L1-wki9z2jNIZTa0P#EyS48t<#ljVcXo*H0gYW<8%%oS^AQR zvT|K(!gW&otz0`Yqgs|JA3dUxiBE%TVn#Dv_9AGDGk&JYvxJtb-^1|H8Z2*w zQs?7H=@KLU7LoSe9G(j}!HAjGewSLs92qPh8e4^kD|Ac#WU?5xoWBHpF1244%^LbP zCVN=2*Uqm!+9f`t(n2wc^BGg1LoWauzKSn;kGuefn9!Dcn zk~wWWMct)#fwq6QYv4Lpa_iyZM~B6j-rU8NxL-Jqn=x3AH%ZEV(d(|PU=dRPT3Jld zThte!xxKzY+j+$2vzE1^oMVj`jnN$Lh8f?Ptypa%BV%?re>c-AJ2D$6&OD2e`cPK( zDcALMK=KOhnJ(;oEue(#G8g-taJFFUQz;YG31;!F^+O}tC1@^MY8#o1j|>HF!{{2a ze??vo&mzl7E6qlVm%+>wpOEfHPEUh>J8Lqo#KnEQ=6n2W771$OP5Kc_+{(*8%eKSia@%u zc07U9lxhcMCjWL}O!J_r7^IuP71hO29o&~WhGgR?ClyU%G*^c@TD?pr-0l8qoD9$H z$!zf{jzXQttKSQQK&;!X&D$P@QV=t|2I}LxWVu>4J0;0G2>Y6NaS^Kf_}1#l|X8g zx|#W2FLt?0_>#F|A+%Ci8BwV`x;IYu1>if)1EeD<(W}vjx5_$_WeH*1S}^`b^c$>9 zk=d^I$P-IF`ScYwMfX?>B7UgiEp5$acFn2{4-OuI#X;Q0w7D}MPo>0vBFFMmVmF;E zU4jfNK|`<{`_+~{_%gSRBiBc6)AJhx1Df9utgNC;HVUHf&OMT*<^@5HtonhGP zC0dNw`2Tg&Poo&9{}@_cH*3aN1!P?HO^!^PYtJTWK3m-NWfrU<$vis*uE*A% z$SIS8F9{W_Jx^YY`kgGmox~S!9-Iw%)D8aRmIIq;^=iOEe|bm z0n@5q8ZK96d{?+)I?+AFbard%GTF0K`)*VPo`)L+gMcg=$&g?@1jUqqV(_1?6}ZX-L0%0#q_w5n6yEwXzQ?G zuuk9xgKn+P_gh#56-|UvkR8ezlnjy@$vYCs1m97@x2sb&W-~@+T#5G-SO|-j%pb*6 zO&`Ew^&VRyOed8m36!pz(5oq5^6y~$3p0IZXIYB3LQ?ihZNa?E8P}PeZ>0B@_G&g{ z^s?E%@bzNoWLZrraJyy8+c6K!sVGHESl3HjmSP>YPC8iEFp;Ay(2&%Z86V5`Xr8yB zpTfvV{gX+nj^?(>m&eEwYu-g@!`J1WXbNvm^t(u-ESaL@F=dO9mb4=V9SEsNVlN=< ztC!l@kU?cGU7IsGmf|%^UPP68{3}%Fa&af$%reYB+lzvH&<$cJ%T{EYKhR= zNq>baF+8`|gDOzK-GX;hW>hSG(%m{28%qY(86x*$Llg=?&te%+3`R*(mCLu#+JWumqDA@jY?@ z$t1lerRel|v9)2yWt$6Ab!tW-0looM$TduyhkH}1@?g@nZI$srtY?0R&PwY^pddzk zW6&sxkrB8;}(fONq*%XZz?ENHSD( zso6T24T#`y9Ckv=tdw~4lz1PVzI4CJCvlzxscRB#=9Sa#Q$r8uT zMv2u-$BL@2CT_<5HBeW73*?SMj3VqtgV;6l}%`J!w!Mn^zCZM66MAc zjF*-uNrOowE(RhmAT?R*m-twSz8g#6?!#1)m1#Ns#3_4Bd9zH%F{9*^+Y(Ppr0b2) z=IC~#ak<*OriYh+RDovM8YlssyX+Kn3XG*&)bGvg5bvwgG;O#iiZ;GaweE1Zau`YBA zSLYKLxOgW*>WN1w`bh=3FL~c8u0!_B4H7HT^kc<<{dQe678|G3!p(FaOq_}`wpJ!` zSUnQ?df6^ojKiypwyo*wTv?lXNdvY!{ji_P&Pgp0@exhiGVX#1#t(ARX_mTytQD_( zw@uZ5euLOqY$AM5E^{#fRv4^do_sHLf^tl$WPS9;S_71zZxH_)8CcX!L6)jZ+a1G4 z>5!Y3AY;et3$-Lk2( zu^z9B^3AbKTI|UQB}5@oBJLAOiAOiHb4Pioqt5Il&oF=xEqWI!yj@@v5osyn{Umb- z3bh#b2D%|*XBvXYyHUdG!O#LdwqB(47efVH56Z@AStUY z7H#w<6PW8qzd~8ZGQtRdu)fEMFd!AJ@vkQrJlZPS2Nk6$$(m33tBC$s&heFma<0g+ zNQ|y8=Y*BV(QhTQ;xHjOOufUYh#8R$Ivuu@Ra*PBd}QRZ?fDHC(#Tuv1PK>rW=QES zH*KPev1*xCwNaBH)$fB<=wSPJue*mKv&pAraP)Tx%14%Is&4P!i0V};?p91(skCHp z)z{gY+#(JzPLIl9Y?5W%(p<1RcFOpw*TNA$ztV_Y$<1y&wsT3RhnBxJca|!t#;LwV zS>1LOk$EL=Nr7S#bb%NiPHeYzAwGb;RoKv7m?`Q`N5U>R5<9cZ&_%g`bj;4OP#4{c zTSVh++UU6Gv2szLCDE#mVLOc4x1z4;+JFm=)cE~Y>x)YY=%cd2&rlb|%$Y~AV;LBw zomvBd=M#Q*TUdUvEB=wzPV4&RCt)AafZstjm&B@0H&iYlgRgs?PIoPK=Ig#fx@Nu0XJoQ$RobDZq(ByXk=7#_*)Tcv;uxr5S5KW!rih~;1}-Dy zoICZwoF%>P)>&Jm+y<(=U}Ci#fEq*~oX2WyOH_LzOK2l#L&U7^WEg_&R%18vAzS zAQ5$<6BUIx7l4bwu^2`jEICTj*{^t6ymj%Uv z5CVr_lXQsz{m??939!rJ&;nLH@deg%3J7}?)4lEn6mUE}rMKbi$UU;=tzYcCfEo8& zJGHEean|kQAQ4htI=3py#uGA4w`peVMWyT>qPTVE)lreH>*CwtI7Nkrrr(=&-1-!a zDc%r78cozrE7 zDeLyVxg9d;b#*e|B0E6ktOIP|{$Q=aV9`%QI9BLYY-n+jZj#M+LVQ!p^(QxdTDd(;DQF0IC zOAl_I>n@_CE-Eo*)v_!Rgq3c{QC5X+26F5i`Fuk(C#x@X)mWHDSy{vdWD76AS}z@C zE-+x0o?)QYTx&YOY#~xu8gd35h$XfJ2cStS!_kV~sJUr#uZG;T*M-oS=v1+@^Obyj zj|;#Svzi~JI~82TmT5cUO*lBm3dp%ILzJe1BILYja}-rD&~gV#7RT`MRj53re1Fx6 zY}rMZlanP!?4d5eYw`B#1w@qg4SqoO4$@QFRb9KY!|rx9(OsD&OPjKOK%3JGU9;V@ zMmZ~EtC+Kxe29$n=qw*Ajp7g-9n~rhMQB_0N{rpIZ-XiEs8oTB6D!+sPxC3ABjGtl zQleQh<3;hw8G7n~)=Z4k`TLPlu_OiA-S6|PtC=4XiFQU>KP=7FP5*qBh)9R-ht(_2 z4>adB*pgvIQfe118>b7Q<+=C`vwF}Z8XpCsOMk_1PY}Z!TgL;WHfrmIC{ehq4W(5E zP);+`i(TqPg-LS$l2kj{S?tb46oy+RQFC%IT$aS66=?UYOLUfEkmYUZvYo@BrM0y? zlBEhuNlD9DcFfmkA-3enM(1i;#--vUd@z$ByT78D%7k>^u0(mJFxXN$&ZKf?7(*88>T}S!+|KhYmtEnZQS5 zDF4X{HU|}pQhGYd#{J5L^JzGg$*x3D3cu{+f8PnIM8>|Fyn~%}LU777hcfW8x|3S^ z2Zm8aaX(Wv2F}^&1onU*j2h^0#h?_tUHKM2EuxB!))-MNhh9Qsq}JFj6S0!hzyh9| zipB$mbY(#xcvPPCUS~@!#>$qgK-8*^GP=oX4dyAQ9J;Bz_F@dS0b5Q|EC00}e6U!$ z2n4LY#(1Ho64BUX8=loTIVCX@56(NF;sp^U>rJI>$%mrLC+dQpu@~HBhu$D)51SH#SUNXaskn~9Eo-%CIV#n zA%+phl+aWpLI*fUTl0x%M6_Sd1+Wq$ml^D=%0+fsnRQ~0bDfKCZ?Ue@N53X{`$g>*ym*6glvluR;Y>g7}rS`u?5 zos3DH)QGHNJrj~bZyYl!yD*qPFj>HtM`$uAurX_Z*24^+7+VM&dMc_e2kY;~J=4aN z96oKLNou#>M3~R%Ie+p#BYj`8{I-MEXwEpG#fo0<4kDEh!6vVwx0+OCg(5MsAJl*dmxwUw!*US5gD5WK>Mo3Yvarna? zsZGOH4;%I?iHj~@4z?mBD86enp5hsCrK&7%hzUik95}n$TciN$=?{6J7y=wAuj9zF z=Qy5ilae3)Mw-&6MC|XgiTTn|@(`Ii>D&%=T4lTYVzP`EC*}LhSa?H z*XDIh=lnJX1d5xm?klwrQ6`Lb$Rlw=vk zjvYFC2<}yt%2qwTTeNgOO0*?C@rCR_c@ZTUt{p}5>(YrH;rGbwS_qn-USm<&lqrrh z;s7S&J8z~N2H<3iWa;}Bvt3N@=nhh^G>NUaW|Rb*Q80K5M%fakuOgPPT!&M_v5%8E zaH+44$>YY$tc1?O9vo*&jb<)tydDL{Y=jr@WG1cWhEe$T)Gs;(46ObpdK^jfvTm0z zaUTpc8q`HxNc3EdgT_0xJ*aUU%cdvyx&wUadD0{-+KgKcQ5}oJ0&JHtiW!O8RgOXS7b-<6S3$06?ws9NVdpT{ZUda5;}3ZwiMso=>^Yi6r?6}TrK4hkBt3{6*y7GF^p{aAufWhR+k5g6*(RPJ zJ-$flob1GT3$nS!Z{lR3@N|=r)e4wcSvO(Fl&znMoD0YjNDz?x_AOv?019WK(Ydg{ z)uuKohufIn^9{6Ebbv$<5`9Lks6~$2cC2bu-tz`O<|H|EP**yNZsxIK9V05lV3ccBP$uN ztSQ{FZI@zg#QxYR2kgo%t`*tL7^$#|Z?`R-gU489wW!8gdCQHIsIcM{Zl8cjs;f(n z&_UVP6Q(rRMi?E}`QG80EAnG0^f2@eI1S*2)TYa{B{Cx>b|o;DWzGHm2oQg=&7VrH@<5B@FU6cns>GG3s1W6zf5#WKDfuVjBJIyXyJzHWvo z%DNQl#N&12lVbMtg`H}PwZ;EEDSr$rW$9R@QyuGIM}G0b;>kq0TGu+;lUr{tTL#kW zYNLTOD*#X?GMDhC^RX78)%_{`wZ$KEbWff3kyvx zuRo$CYMi~>R|iFt6dvEjn!Wl;*gDsYJqS-bybSEyijz{wVm?ie(^32*pmlXzs*Cm= z2N`5(Ua|^{mK)s@{M-XO9F#X|z))qrWTi_Qn>#QlSU?FHAQc`jFSjaSKTbM)2Am?Z z^a+O;SnwH$ve%;IrgeIH{%F4SBKJ+2#fL~=A8g@0c=X6s7SW|-&+cfxeYm(5>Fz7K zxbg?l9*YbsEc0nv1?^LPN!9B($QIi|bTPiqnwInO`!H0SVlwgp=ytX$l(S`DVUc5B zx}0ZgpJbqPx*Q@%VcR=OOeGYoZ=j`Csg9)`aa{pecgtk##*@P z-7-#DmCW&t8mL3G2-S7nqN%0j`#Fk1bYNMeOxVFi8=L-O7i=b=?;?8<5%tYZYN&)06LX?ESc%eYlvp6zD3&S*n^nLa?x2$ zah}LvMHbbsq?14uu&cNbaw3y|r*^9{X|;>UOwn{T-hQ{=9(LiaRyrND!%n=-c9Pzth3U#ga`<&B6a{nSHtHq=lw0Fq&g zp;T8J*kFG0Oifo778jUB3w(AHkpi?UQXu1QL zD3Y8lcIkx8M%hkE8j)C2gT|%-R8VbsHsFhh)gh7=;Za}cdO3ghV2dBt4k6F) zLPmFEis3j`eGYpAR6o|MYcKT$96B>uH<~m?3o0qb9Q9dp)i%mX4V8Hv(bNrgm&vaN zqAQsU6G*z(n7xhj8|7dfGz`%rEKbjUUxC; zP+~XJ!i*((y;R)(NP#)qt&7OkQ^%q;vBwc(Dyft8P9L&PeYn}e^~Vg+A;iU5#t#|Y zg~mIwAbf-hZrzncT-PmByL2ByNr+JxT{2i|#cKm~0=E0Ts9I)VX~LuRwqQMptVHe1BV_YfrV%AOEksY+ z*2(uoci11@(vwmgxe=#MekDVGa!RW}NieXJy6E1dBk(X`hil1A_#gXGROMobJYj1p zj$nMC6F9gnz9cO?m3>j)t<;r#L*Mq|dv;q=`pjU#8r9SNq8uAfG3TT=Cbh=KsKron z9LpxG8LH9A&nUvf?xDr3N~V;z9W-d`kZdYx=2T$LnsIS}V9TsMNDU`fPFR%&Abt{@KcfPru1{ECWR%gG%>00#v9*RXd119H zwaTf6Vq9Zf=Um8Q(0Xt2t`a8-^G-)I2@h!1^CNVUDup8em4wN*X-p(>gAoc#CTauT z!O-+Z0qq~Q<+=*h5v*d(8L26T5vI@nIfy~y6`v7TnrWfpa#Q2+_OIi9#8tHx`3md8)-Y!e`KFL=GbV-BK zkyr1frD20)!loe#qP$YOshn>3D_wXhttrJ}oMr1>$y~;!Mb{K~1RD7i{b3)qHADiv ztlV-}WS0yRCBkKXb+UU|f4Z#XF13gH)ms+Nig9QAB_ib((ALyNuf~rq*a9fc02Pds7`LT-vi5S2j!oA9ld;kc?*DAT+%;9dd6rCiS)XJ*^51@} zScelB@pP&D-%QBlyoz8nM_vFPOben6SLnEER6q~cRP*npiAQaW>O`Y z`sTjDErb7?k1c6JZ*T$pbspd^earCtI%03G))mzQH!#sx`$nFkcZl?=|L2b`DVtMk z-^3FRR_Wh-GKZ-6Zz91FmH$no@Olm4O(a*6(QhW7?d`51yotyE`;Fm$c}Qu4C>33M z>dHtYX7^L-AnDW0Q{9|YlyT=bjhaw4E5+iW(^fezxtD`+ozHgJ$}5ZFZo|5!FFzuy z3X2l*DylpL>|#ikEb>^m=t1}UC~{5&1NvY>3N z6&sRXOZo_z`ElNl(>$FX8aQ^8C|Hf+|7mSsJSmfDW1pDlc6*A}c~J!&GteD;o=(OC zeV5WCHI!gE-B~F)4h#JUby*x2*$0I;h25$nEADY7%*1I4@ep~BBF9euRN(((?_FTz zy3RbmQ_V*=$?hh*C`zJ5%0C0&SEhuHE-QI_dLGyo$r0VbE{;YpxyePB~@YvCY~DmTt)AT z@mheW6f{P624Qr6f*?Du*yY0WQ#bHvJ+2jY^Hvx(bhOSo!pi$G04aLghCKp2e&k!f z@{=yr1bmE1?|;zA7^^Hpa+zWux#*}F1vB)%h|4oHm&IdOL$0qEq1CF?VidYR050LgDVTj+ZQw18*CQX zH%;7kZeKOw)Yl8u(B2;~N>c5SUE_6oNd9$|mq0V5`jVNR#BfqY{H}_+pz8y>2P&UN~G8QcEW z4B#G4C-<6?^d%~;1<%RSDPGE7kHQL3LL46AW&X+YMhw)h zz_NBP=ge+S@k){W_&C4wKu8BqTv$lH^OPJ0cAt``sqYOk$rs1T#1Uwjo8 zdscgn&CTcqa3_gpk|!QzjkA*X`KL$+7H^KujDxvt_R3Qhw>c=IYIdcz;!N8dX@ zaR5tZfsxCYWqOBJ3Vid{DFw3Pgstdn&s1WhP)_S}T9hJU7@GrVGxhT#tx(+XQ zHX?|>pa!gl_gOV}zcXv0%JUW4c9zwwOr$D3OD^1W!J>vX#0~5Fh6KGfw&HiYaRd}X zOumZ1^;S|28h|AQ0B$JV(cc*N>kS$HD-|NDKwnJoD}1V~I(8y9)KQ4c-xsX{8>&?E zlaixN@9cdRDKg8~htzunqX|xwi?$1E4b0W;-h9v#6CEO8eNnDuxYtkV*;ZgE@Os4S z!)PxkJPNWVeD@&7+j}q{p~(iSTA=ej)EllCy|hj(^qpuFvB9%GcO@yTmD#@xU!$`@ zQM%vps!+p;wzMb;zxSa2;(K1pkgt&40M?>JyZDioKnDVO;s5bD+qhRO*MHGF7`%?L z?-o0wlA6pJiOhkoMqW$_1!Evkna}b3_*`JSafFJae z3{4lt_sF&>y)w8&NBmYFJR$lqf=Ygw(fTxktH)3MozK3o!XPF5gFsoSZ*x|S2xW8_ zX3pOC!L>4nm{&-g<(@M`i`{S3=h=8uHJGCYNOD-MqnMopqByI5OH=}GWa@gv`A(93 z?T#Uqwh8Ym2A>LO+N|f?BN1s?*`5W;)LR-`E=TEUYqQkn{odF1$L8r)>owGo7_iuUgTIf^xI`kzGSDB6i zos-e&);Z28>7A7ESBQn+A}DLjS!laLfYE=mBwj=kmV(duU5#wDL!^ZH;zZ#{M*AZ_ z%HUjD0|(^g!o*RfO$iErM11UY{9SLFjlXH~;fa@}tTTChp-fPRd*2g6EG|)chol(G zloX1>LX%jRgaVmL;okDGCkRl60)p%D{dv|V{^AMG-X9<8Mv2AYtF~jpy`P6q0aLkl zv%<6JZK&ZZ(^vXX_^R44hP)&lLl4CeR(NAVD2n#M!dIz>aIZ7z;oeMkg=Ry6QcK5` zeV+%L?AU~Ir2zVO2kG#b3>DJ?;jw?eLii@!%<55gOh*9ortEIG{oY^Ww5Z zrH7*Aj7BIiGbwy|mY;F8G(6FhxXf=ihsQA|hJubrbtnv=)ElA1tGw{doT>07e!)&C z=&%VxA<`$@qM;`EA$BAAPzJ5}R~`v$`?ZYJFWeHki1xA4g_1hwIYvvOsn>V$7n$=u z4+~<<@gVasxqMnm2WS&GtCc+H++7E)gj3Yav<%c0+KxI`Uw-sc?gl*<7(-ap3ZZR-X_6ej?XFeurp_KAXUJgxc;2`J(chF zc-4yLpc~Pi+g+hfjuNenp46S2|4-I3?bAjQov1tH9-vcAbs7>02(42#$#9x#4y1`d z1ZuKS9FlWaX;CyJ`DGA^=G+BJ@`lJS0^onS766}#R{Cs2`J(GdHwLampEbA9zdL4R;3lB`K6brU3RbVy=JhDM)&;w3s2N* z4Iy!YX9eKlZR?bl=x4^cqvvR)r4-W^dCJchSU*>wni)zYJW0T#yb6))xf=^Lay$$D zOTbDL^D00aFUP!#Hij@JTAieP%CqV8Qi#**EO<{FM7k5@22pVaDAdnM>nmsQc|u&S zmV0fz#yM{D*VtME6W~vthgzgmw02$*Oi|0PkQZ#D?iA02h0#dKNl3WQ3acwXeIywz zD20`=;a>fUtxkHip9K;!U<^8`Ag!=OsQM#_6ni8oXAWJAax*lrEJ; z6K3$TwbM#Sya~_Aq6OP1^eTZM@gS|NwW80Rofva3E+u!b%^#x8l#MZNz2q28geB-3 zHmQjQl_t&7m8aT?)XU$e1-Je+%CsyuHP$j(t zE7(IWn9QO*+-sKJUM?{wVKS=yfE17@j#p=JokT$h*WGPCFod3wzo zWw{gS9#-yIZ6{sQHiqsV->W2Y@U((-a63Dnxjp{-3pT^h!acBBDBQE>Q4>WZPM~Uy zsBu*q=v=%Kd;*!|0XnyL+*66-5DAyZ-J?muLsnv7IbMz*~ zxD2;EDHy$nciG9`6a?Onl&oqp!=Tw-;i*i;i*N|M(F_vD``wZnIWyKIcW*!s;-ItC zeaWa^I&rDT7ow=AL*P4{+CSVoQTbI4rfBHpkf$qNY26}SfAv% z8}Z*>;E8HbvinK*ICy)+9pm!}``_KQJk7iNmoE=ih&N>2w&|$%-cs(gQMjCvPWtIB zdt}UOWvmU<>8T`r@rM>i0@YFRV%MpgbZ`<*tiFK^?HH+0$zQ5%I%PL_11>_ ztfviWY(K76HO~yaQ{(mr4JLXJ6;^EB6x(1OJ}d4BE`ipzvxZ|u^Ux19?~*yJp3m?v zK#v675z48vLzF5V$Ne5rUYWKU(a(`m%;M$b_Na}k{zt*$Md(J(;L`Sqz3J^S-b?S? zncMf-X?QE-Ag=Qowey+Vk+M2>2y$VCQFcqJ%Dz@BZ%MeF=`!l{i~FZm(9UT{C23C} zwPeHFJa$UXX|=8Z+pKe6P1jCqqKiD8rnOeN04$!@Rolm+g#R-<(Wj>}cl{~)m0fp| ze~Ck!tk=`T$(A2)G_qLIEiaq>B|bXIIFfRrF1hd*Ol#zs!$J3D)_XPMdW&c^{ac?e zK4tTsqW|R~zT5?sY(>GEhVCi%aNLVKob=c^pU|?Sb`P6q)G2~08o3PimysJiY_@be z(V}>)k;sLsPZ@sY76;y1X|2RHpN@|dBYjwFHlmQ<81&*LUje?B3=&;J?9-cRMe;3LiHzX-{7CtL38nj=1Y`> zCH5xQ1kWU-v`Xs7efBIpNmUC|6U;#7g3M^C5p6o0wz|tG>8F>6E?|K~Cxb=g@1ulr z1m*4tUbiO^pgF^k)-8n0)kavevI9$*P?5tVlIC_Vt>F$xkZT@_F?!X~rC3Z+D^l6x zxiOg(JxaATwESdq5S$PdbiGh2gmFxpNlPPWF*M=M!KGDYnfbcjTS(V_nU*4gLKH3U z6@d2EfJi|8grXb@afwxA6_9pA4`NXTQx%=^tm;`#l2Pm}4XO6tI@L2FM6xX*B-vXY z9_i}LG0(``owSK(g&NGNJ|>Y^K1LuJojgU3on9V?m$5IF)1Qj|XjFwFyR_%Cy?RRP z>!62M=x47FZAy@pVEq(%_VmotwbG;Y_JGqZ1b4DO)!VD|g5FF&eJ@`BK zrCv~W*IZ__RkRg7E^Ya|>*d49;?oKV=V0QudqKCHJs}zms!^g8eDs8Hx%Qos#PzUh zmbYb28>gAox+a*Db}`-b9M|(o@TtbYtfYeXUQiT0$6dKyJZ{ej(kaFWJK1T4wi14O zw^`eG=iw5qrB|B0*E2m{XPbDup6W8)_8H^Kl5N7|;Wf=y@fdfi7bUKybqvE;uU-P} z243M^4PZTy8nH6&DZ^LWLkvq#I!n(;wa3B9G_Xhyu;xAKY~^Ss(=@$=q{qtdv)74&1G z<8I%d+bOtYLMmQ$9b+&JXF3a~cMRrbTFM8BqC!2R%F@#ENJ(sxc2Hz`b}~29I~B5`)>bCjK@85Hcm1>iVJD2=2?q`!xxBPb8U9+K(5tsyCBc0{f#j)1 zmeb@d)fM``;!_&bUzs^5sx2$YN1xS$Y~?_sNPQc-z6Y7jd0tT1Xrbk-8c(+@dnjT!=Gi4{_->SWO3jsLY`$gzRpC+XAIWedboHUl(kt~#ZQ0VL46bZcv zrQ<*#V+zH$BZ*76uO{~r(sL2iA-WLqa{MNWHVicv2>>xm=a#JNAtKdQPK)XX!=e~!k6C6pv+K;MUwQk*TAl_a{3;o0-Sleutj^}nSQ#R6F=5`1o zDL&@YFEN7f>M1M}=z_u0WmNYxGEcG+iirdxUoiy74IU4(u*F!pc-bt zZ4tiQT~gKJKG8w4VdjRU5X2$kGIy7!?hBN4^wFW9lDR50FPY#+RXT+5q}IpzWCeR} zX8XFHUsLt(@z5mhqo^(FtEZy%GnI3j(6J982(yOeh#OZo8*F$QkFozPW>){ z_tK|__jzDVr;RKF^}6=H1ojVD3$H6*#Fuy*u$&Eo6czzokqnI$N6XlG%-8<}3~_*_`oc|I8Btr7)z8r1a37AD(! zN}7)sb%i+#QSM** zEE%J>-d)9$)t1SCjQe4~hyBEa_5oULb)>AHE3$B< z<(;i+oV!#jYy%Z& zBd-Gdj0hLsgks{7y$a)qmcALSeEb9nc$o1r{jWh?mrSOPOCoN24JxyeZQ5k9vYoHl zI%@B=pt|@?N>iEE{gCR%-*_V2%<9RW*ML!bjas$1Eqy8EqZO^H)`;47lmO9To@91< z+4pedNOvB;N@#GoZ8BM_T3^wEEaI@*O|T?yr^sgxsukP{;1sYN0!;3nQ`DEMEiRO` zEPC=;+-}4N0KzJvu|8kod2jl=K)-6;D;Y*RxEkN5c_$+a!s#XaP{+BIuB_L%%a5c)3?IP4NAJ1Kq4|o|)36AS2|j!I z%3dQa*LHb$Ja&3}7QG-@zPFV<3rRb1!*Z*in%TwltkWxhp7mO(kL6*CX4o@S{ONk_ zy>@BnwPxp$6XG^McS-BcwtC{N6!EM0R~(&0b%G@K5<`jp;$L~K9+Qcz_cavfQlKtM zIN#k34>Z0%j3W8zL*u?L^R*9n>8Vi?J5DtfW6+j;W_oF#VQlY9E9jR_9FoNqqFw3n z1gpGFt*UHfMcI53u-Rx&OH(hcBa8%T7qBx+4{2*bv($)*=aHTPeqjBC+18R@0gqu0 zq0c19={?#IrxHZMjJGhoj+A98YgI6aqQvEzgMWI|p1Qi$Rd{*Ep8LZO(iZ-_kRM;Y z_*(KKI#VPPt5_+QlJ}l^WS#pI<76G9blxq`ke=#>j+6Ov9{Fl3eAeStVf1vXPmSrl zA-bs<`^Zt5o{7kGM4UXV0n0u*D=%C!SgR+`M(`bRk2u#M1v*;_J0T406EQ@qvb1Cg z`NO5sjEc@q7&b%fwRbu|H%0s74R~4|+h(0`ERDtbIr%l$;SlJo!#3<}A25)dFANmd zDcw6;b3KhS-ioK|Zx04n6A~&s38A;-h$X^&nT7Lg=Fyk1 zfk@XQFJVJ>pU6SZO)$n~D0^cbDXr~S5$?zKT8btLiXHxRrUlIs-`GyPUiqI{*q zltV^ObDkCbw$Ta7D}>s7X7N{mVVpWDQ_udp!Y*Iqn}n8dq@6P1QvzBG8puLqAQd@B ziG+`4Br`x8AGQ&AHg&7OU#ig~u!R z+q@#g72hFtmUvca>^AI8O2>dpCv<%H*$thyx?WAXdz9y<#7YG&yPTH$ea+Lf_nSy* z2U%eUt)U|*B~1D4AKp30+|tH^+doE$6n33nmOQ=h0%OZb>VBdCK@{E}(^j7X8Dd3I zfgtkpQ{c%5r*u-`5bl^(M%YMB0TB3O&pxQ*%S&47yj*zdcKR^>3zUdrTs__6NlKFiUIP|=E8F={dDZ{R(cde40M7%%2igzA82ZgLB znQb@NC`k9yy@onJmGq6mXR9kTJY4WY!1<5ath;=acl*wC|IQcpSXFs(cED#XC=3^1?}ZYFWB7q?wLr^2vcK* zAyIUoA@%W+JuM@9s=fL5M37#mp{O*BqL-irBmu)%I!US^zqV*KYtGvo3D1_op(i2O z??aX9*X`Ae(`Ru5{v8{1p2Pguq5*N5Li!%Bv_8{QZX#NI02D>7oP`;&?Kh1E{D7|av~Dkz9u!7&M}66%W3*z+xB=SPB3krq9b z_zogb3$6te^fC*^-8l2p9t9r&do zrfqTHVr1J&ebBPs*U)CF7E&_U%QGQgQd65ql3F4Zk$E>sChgoCV>Sn`$z-i)3AIpa zty5^~!`rT!V>pWCOZ+X}?;`OPtrLgYp^F$c*4v2eQCC^MN z>aG9t^r9_p@sj#W(M88*wJ+B?hf~2T_oJ1mBLv*TN-XfFf^;~}kF71!G}R~LyN44o zm$ojGm-P5GkvCfx56%CdO9@5MM=@r|anunH?+(l8O(yRV*=g=cRSOwXS!r@gmv@?A zs=2hJQ{RMGZcx?IC(CJ$<)?W`6D5KZi~u0Wog#rmCBa(1ClJ9P( zU=qVdW<7`MWr9dxxgnM6PUP?QN<7Jt^@2h=O;73Xp0m^#L*Qx0kXQXuPh@672=rA+U`j)qPHT%n9{9cqoro<5+|+0@q2|9nz42|J1}vV zcW};7Di+tQ^yy9GU`i^JMh_2F}x~ckuLvOiFY&CDr zWikU>xQy)4?XWI=TXKDw;bAL%b$hO#`@X)ufxfLg%g+CxpO5|a*{83=bkjGmCp-UL zzP+-`zf#;bFV&+q^Zq*xd3+#@*|-Y-h4RwCkU!;o=+*=YPG$(MM(*eef~T+Ok!HTbK}@cSaSyMFo|q znJ@DlP2{+CqK!BlGX|ZQVyN1J=vFZD4@O(Lf7oH^Pqk+3f~Gf7|-|2cTm9)5-|M z-Teat1AY5aqxbdQ-S7JV6g}+g`XulrWKh<1(PsQ7u2;^nOW(*?%vGS?P}VuYJLn&GJ_znBH#C3C@yZ7Zr*1^Ex3e11JHv7!(`jv zL7;%rdm-~ns@VR{fa_xoKgpJje=`03o54w6A4HH{{9vDGb@78?5i=|ZiiA(v!XBHp zX3GN(Aj87)5vxM)J%4Jzn@=r{#Rnv)>XK5YtBimM0lA0fx$fggIyjk z^FN4SpZhH6@ssSrQB*hpqUL{)ZOsLY&iUET4SBK=RDQ=KZoM0b`Q5D!aWf1>ZWfoBsMxn}-yk&?CQUH5F4^!Vuoq`pXv};(PTn=r z-o}TNR%T!S*6hN61K}B3K?R@R73%l{jJ`YE=I~@>{sZduWp6&|MThVfYD<5V;i*2Y zl~i0LhK0`gKNe1(hD`gi?V&!K(|?f}y>PE;^*^UN^)ia@yC)h`hMRORTy z3v?Ao6YF!Nf2fc4T4EV){0F(x91OJ&3r(-~Z51kV*5j!f3s*j^|5%W{i@MU`&AV!j_GL`QiQHP49xbf3Y&dfhx?h+ z%`^Lk&Ca>m_0WK!M|q^-TasTei!DGD1#uC|+*0akFJ?@qvBVN53@hy5CPg~(#H_U>SrLm}1|R+k^Q zwU>w9fZ;}RcmMGI;Q@xrWw_f!-E_aUNUaebs?#l!c72SGm4Q%!j5f)RH?jABKqqiQ zc5Ij1LfwzBy8L(9Kf~GfT()Y-uxL2^!(;W(inX7&Hr!xU-k2Azk@w){l_^J9_dCtOrpCNe@~ zb7t4QZunl;w`qGu{|4?v5zT)TW{4(`xoE5ZW`?G3Zqa3kaR&J~*gr&NkN$E*&!NRg z`wxWg?RZ!y4D~6?=uHHft>FAGhU9y-zfaMAn3HZ>8el2C8scDv8ycA#lLMlVQY{N;h!+8>H3Om{PDA#Kb!=Y7@&yvnS2^OW3|H&4^< zlBq86GL#!oHxVp*+~({8k^od`iC9Uwp^{v0zN!u`$!TbRI5-&92Vj&ENabOBNS;Ic zLn*`|huN(=R$nU>)w%;Fw(|Ev2}@#f^FlO>_E2>5W-)TLvh5EjlBVINe{;6|r;M#R zA^EoFwm`Qd?VsYX0pmi`&-IVx84V6%v&xqoSsX+^Q#;#U#DTWHhWqx*C+8nuu?-gf z4S(QPb<;$rt=;o&N`yTJ$asH!W`o?DGq5QgGBqba%AjP+JSH|tX*TFUWw(rVp zGEUmRPs*Zo@}T*8>JZX2#Bv`#%Z5&@%gnxAeZKG1GZvbmcHs*}APpj8alhp{f7GYI zL}yp?@AltkGQP8zdf+gq@z9lhM)=h;K^WBpsF)n%8>X4Mk8ge5Zzqk@v>e95n(7#C zxN|&_??MaG9C@>a0fIYvkv~=XR?@GuRcaVH=%3^;BZ67zZ;25B)O#2PszHxSC=J7!)EhKlv+bYb^9<~EclJkC0qyw<47e?~ zB{RIMZ+LJJ!Kwik4-CfU+u{M>cvEov5`>yD`lg&LD#^SdE`x*PIP9A)&41>X5ssK#s?fA$@9y*`eo8X-<^QS{aM(i8fK}C zEEWdk1z~odMnRl`w%VU;)>lzl-#r+zL_#i(EYS5fh;bX{fi9Fulv+;|r$$_5gg zoraEwPy)asFR8KzK@0$M9H*2-S9^D8vC7?sgWkTqszfS2@V<=wXJyDR!3C#Ml~nYa5}7?KILwA=AFynR_w2 zu!y~RX*CI6%2LHhMWGQ?MZ)$)(L9uX`95gMbHJsDohU?@M&ep_!6j7}%kgA;QYkP# zVFmHj{eydPVkIABtee5kg};%v_C#y5aKC52`$rZY5X;htCo)17?jKU%MX)i>pIG3c zb?H$5&g|kHtfBWHU=05!#AX-ojvQv-lEV-G&3^zL^Z{43=_=TR{JVP~D z%!@Ft5lHhN!W_giQH{fcJKbi%Pi6miknrW=zV5-Zi#g2>S6!%qVp|^@w?p7>9fm=0 zlhbs;qkbi*oXXCb?Wax$;VOq))uxX z^w4nSJ85lE9AWWuL?rCy5H}#&7L3SD#18Wx;qxk{sgKqV`{b%AY|DSU`nRiu77NED zzm5JEjw$eKwHKbW;2$3mu^@m%GlRR?cR|t)m>QQshrk}}-`>|3sTmV$Z=D8D=w`Yb zu<-rDlO~FO+;6OhyC+NM&$lz_g|Y0ysq7da^SO^O5N$I12HmD)Srp4@{n-Bg0zISX z^zeWMi)IA5g#x(qv7s63dItJ66PTFX9nmfDC)+1k8-OvqQKaD3kzIWd^ZX~NK(n=s zc;7a3?q#LhztlhIp^s^cao%McWdJf9$hHncRLq!-r-1=HTdo7b!GNq$XnX+oiklyD zv(uNv_JP@}-{FA;V7^0q1@9Xt-t^fvL?-u89@kKeLSs-l`eqg@equXO3s-%_P|@c; zVN}sfI8p@nsv?k!PZ=t(FZJbjqAwEAZ9*g^l8idMosf-bt(UI=w19e1Q!ZDyw~0|phb6MW|a ze8f!JInc&;nMsU*8jW~*@nj@b+BucTjPipB^VY)VF`?n+j5~di$e_?2tcie0%aXolC?rP zBmfgMZ9_BL{^J3_BPReMnhLu6m4dho>*o4S&S&fH7sD(J&r)Lg%(??PSsIc*-6w@P;5 z^q9yyJZMtwyP}_#LJf@dbBvYjTi=I8+P@S9{=t3>k;SiJ)G&H>;XNK;mMr{0vQd2O zWB(WTxGkp4=RX?QMa8Jpj0S8gh8!NoWi*S*%UKb&?IOJO1Ci$Y1NfE;e+X!Rk$vkA zhxPnjTZFG?7v$q|?ZdKQObJI&Ao*P0WdST6{zxn+Qa6QecZTbQ_tgCdbT77Fc-I&H zWT4;k+c2J7poy@lqlkqzLB4G(^D|qDpP5UVUHJJu=sJcOX*cBV3lJ6~yYOACHB(@3 zeF(xMCGggVcjSoH6E|n@n@z6;-ue)6(`V$o@Ll@G7R#6*{e^lls#^GkX8$Vz{v%!f zOqZY7-u1#ejQ-Y770exw!6E_9l=?>Al9~3_N8oxuGD4yruzrb%N2G}@!JSEa3PpEs zVZ3JFQUHl+zmhOo_@zQ93%}$m`S6T5;$ABA$BlX#Y5$bas-X#vf@D~dh&xES#-Bw_7G51bYZrE^v(PSL?IT3#Mjtb(AdZ=G|9-Vy#PNnBx+k6;!kvN z>wZn|)&my3y>&nJ`NA^^vTUm~!i*N4w5b}|FCH+_wuljg4SD~_TOW!&7VlRqm=FK( zh?O1jR?!c!<&Kzr#5VNekzov9HvCL@K%(1>i&=JUOCzOZg#|vObSKet)y=kMm>_Wy zEFjHOoEQ24n=(z?BX>aHMnm?P&h?)+F(s2mZf5$v)PEqmI2NtOs|=u3G#Qz6=kJiP zY(Mxuyp<$m9gC%E`_-_DuNn`vF6p@(C*;$sTQF1iONQNgdMIKNk@l@Iv^!QTHMlXu zPZD{Uy-UQSe_#NK9*2jm4%7Yc4hI^vndCPDYMpPr$g=kF!JpRVR-OTO zU@+Y(LP~rEvMhVw5|fLkuz6)Oe?8m!JJ|(@ZW~K;+9n>`yGHe=BjmRJPNYm1_6**M zW)7Sk*;<1Hl|?TLdnEDOANNa;u+CY<1EntBkGqXJT-al>{l}8+=sYldhZ(mPo%}dn zjD80ZVnp95F*G?az%nwlcAGEi76kDjR*|;;mvm;n=P_^BVg+L;iz|#&_Grd4SacvJ z9-vR|{4H=S%h&LBl~vm1Kx-3>FKiLj^z}XHhE#>I=06&_bydr7s|oGA0eF{KF>Dv4 z{y-m{*k)n-&w)kq85wHU$gMYonT1~~oY;Qf$Vvsb-q;!Zy2VR_R2~eD@?vn57e!d@ zOE$y5pjX+PTEM_crqn6cDWY3A{kI&pezb-L zp1yT0q}&gxiV%cOP>*8WYPJKm7;0e%6G}Gz;%TWP81mLljB3xEV9j%8BEa6K1AI!E z#J`tq>D#Su(VmtklP{Mhb)$7B%+DUviKltdXStvNl#C{*Xq+jYjSCFrd6 z;+?t8exY7fMgaVs7e)rGMnkNMV6-nc?D~6lo#z4N9^gfid}w0w3QWlu^dfekZzgz^?zPUH_p6#*g{?R`g%lj9Yu} z?jHu2D4CDmJ`xw|KSG+8?Z-^#KissHhzzVXrpwbTdA9w4ZcL_Oux^o~I2^vB5Bch^ ze#}3zG5^G_KeX$Q1#0_@O{#syivHZLf1&IAkL>>cVz^sBvPCKH%C`Sd0;u)A=xFiR zR^k7_dK18er1(HR>}Tta*iClf0NWsRwCJe81odCk>*8j6FtA4pnBR@?yhN%{m$be7S^(njlj`r~s((xXXm7T+iCRGrB?bc1{ zf%fZI0L)6*!>!6Le18OLZ@tf7C>XSc7lihOj}eR}hd=RD5v0PmWj4szZvA|RHkZp{ z;J&`k$Oxbek^i9#1Fu_TmHI@Q5qUSnf_-#>8w2Sti3#FS8jPUYL&iglSOf`Ba__ys z!8;tBAYhq}JsL#Z8oZ4M`*+y}3fPj^VxbIU-13JO^Z1h=64J*^3~n<&PU>5n!qOQ? z|4P{>0?7u6OlXFc(c(upc>=BQ4IPfC(H(!$62EV|mIkMRH*eQPyWX;^G1cOC?Edc# z{CD4c{pG!n{pGhlm(D{@67oBeX}|6}v1&Hc`~&Ccb~)ab0*>g4_J0F8qYL+sw}Zy3J4N^0Y3z#>;K~ZC!pxmoZ(A>vBSule(PJT*t(7rAUd!tt}m`1gd{{7+T*PguEKvzBF^oc?TX+AIRLU3mchSP)%K6W2gy!rWKIolkDjpqv{QYi_JQcl_Nx~%0I;wn z42AK!RlCMfOYJKMh^5WqYWMeTmCxGxBVB$hF#cS3f1$g>q1NI_zP57~fMv=SNTXK! zq0psbLQ!QTM`*UtqSC@mwY|V);hp%wch$N<*`jurB(8BUa5Lo_<5O-O;!#T~eBnuz zUsOL&^R@l|syepQRlbl?&*kUVDH4oCV`e=6o_$B`+vA1L2?1sZ?d`W)pRSvf$~~Va zI)UlI-NMQ6gp^mUhngnYuHj*8PR&|=sWq0u8w=-j`I;`T>+*Hc3b2|p)%pQNt@i^4 z47k?M0_@QPdXia{UHH4Y{P%jQ@yqhP+WS@ZPw3NY{UIKLx5Nf$?=jkxEVpOh4bQBY zuFLA+pK)n@to|&$LW;6|N)P^Jz?=X2muh91P&}Ofv-qKKzVNT~keRjLQ%8TurM0MX zt&WHh`E#KI;|L?2Ecw#LeIsgI#^DbvfG{B=0e!TmU0W{4WwXltBzl?oyf-(%Bb;Dt!kX zg+43C&YHqu7lzRu;g0ig}vL z(|Rwfzdy*9ce3KzBxOxx)8MBlpesOpXR@!jg9}v_f%+r=P07xN%8QUjR#AX_Sc@H4}}N7)uP3X{|9PMLxq>rbsBQcMpDQIkM5}^4;(Yska^Y95(8h2p>3b? z(6&zj(lC@3A&`jD8OzCfmCzC`+Lt=M<+Y+b&@<7eCIjvI;0bHqua#%QA>iZ}cmAX8 zp1$`F?;6ko4tRq5p2%bevjY~p_cX9KwBE~iB;6eFMbN&JZNEbX7o}tVnUWlV==)gu z!gE_O@r-;O9a*s|^B)cR5zwCKa38raQt6lDeUS;|L@(U(N8f$fIoeZV@o-WGfY63V zt_~~uU^!r1ZEZ!Vnq7AOj}^~06Wi9^y7=QS_y!jB z0U7+5zy{L+;KKlkYl784iO}7e0o+(tj6|`EAfv&&M+62?j=&?!vxNYl#Wk`E%6=YM zxa6~>L4l$j454c~=bg=*A_v;8$^pL!?W)c4Dz}QR6v`OYqK9*J@KJR5q}#1}^fwTQNx2ym=UMkflk`9jL& z)OwCqIh_v*II2n{SV&(vhr>g=qLquCKw+xoq6X=e)i6nMWXZuxpC2j=C zE}pSzhz7x;oZ4MDJep|h+eBTO{OwZYG+hu)d@(O1E}m9LtsiRjq8md?>xVuB=0$3I z$f)pr8wH|#KMt9JHI^8lL=_T~wpWP3V`p@bogae>q&;_$=m*Yz_%P{Shd+!2h$pEJ z7DUQOeJD!^ruep@hQlyXITjnY-V_^-3Zt*8**+E5Y@Y%+WQ7$cz*%ZEh_n^OPLKM4 zrEQ+?25i3T;d)mUA|q&L$9P0UqVJ$sh;HYSfQB_TzG4GF?4?aDK46PI_Ce@O6ji_z z#h~GGanpbs-aepdnmF8ai1g}1oZma7{eK?z;T~qo6b-6+Q{}Bc(ski!GzoHpd$GAn zE^Rv$DfO~S+c}yI>q+|;x?=EC+A2}HPj{H`y8g;a-&b3YV0{OTx~c{^+8&+}+{w5B zTsp_8JeP47`tE$CmY;p0S~+!NqA=SiRx1}~YSruY4E6fuhdcI2cbuyg>($Eh`SB`m zvf#MsgT5eVCAl-z$=q1IUMP>3=5kZjTJEJ{`ITy|G?|;umkYR)8MkHZTCvG7>n+yh z0~zKF55AS3)O0=zVl4AQM{HH9&!&JdE|Z}K>zi*^A{&HUSafPVZ1p#Heslmn=L#P zPyO(T^E3I{>_fQ#mjV9xBVQPO{Kyxccqn(GS!y(Eg{LcpW}}ubJ(N4w94{3ozFL^O zP`y&9JY8v)O55{s#|oC5zgX~tj+IK)>xIc@na=q}zEP;J@315J?*7sCZWTB>{MQ~w z2bQIy;S04wzELhz8vmY*TDL{fzo(-6m!+cYg=VdiD^?oS+^k990^-;I_t#S(-Lov3 z2F@26xv84;#b0OSpqH1?X!|czr>9GWT#1ijWja@=PvmC{xn`qSDmHlAs zJd0VzT0pga$je{J7faRJ1&pvIHI^A{m9sb{{(w=UF~V05W})`!JH{fuf}m>9cRO?VLI#;XC7HXA3y}tYauVmay zs~Etn{4orgsB`;%`N9k{0qT5hy3jaNXv|b6>(RRY?Tq_I@Bv1B1?ry5%W`jEM6a*$ zy7QT8?RcqLot!EZCK-qQr&bz(uT;mMEnX|sEz&N}T%- zGHxbD!MXhP%H?O9@CPg~aivgO-|=^)yS`AIxB>?LkL8L%{w zFP()n%+Xn2VD>=`J%{3TGq{z{AW$#l$9d^i#@%_k0!4VQ2S2iKVkTdiE=+p2^K_l1 z9WPE!7Aj2XA7^mGoO{)KL`Ht=3;Nf5&sweZ?bx}OGw#JzaN09a@#xs(l&1Z8qw~$%1crqEIR=)AhxSJGa`dJ&=XT z<8!`6q1H>{U(UGSU2U)D8`asS8o)`qsIx16!Ne{xjsQur#PNOI362)ME~DDwlV(r9XncFpmDY?_=%vDJzF52H4cFxr&x;xN{BPE2hlxV2#@USf%G!El^-tDJ-<&B{ z3J*SYt_r~vZ$zqb?b8+py#9KrFx4z9$E&L}6jHcMIt~04QSmZ(1q+ul?rUqq!b$^l z;FwgHRZ6jEFPCSyCNl1C{zfC6y3r_9CSNY1RBA63CK}6(@fl9SV4aT1tiN6{Q@&{8 z(YfT&nZm?O$D{ojceigv1bN9*sdxYMdOMMpCX)rTCtY7bc^A{r4c~>ldm#ils(m9IR50cXxdu zexR!}qNzMSDVB2vbiB=V?jP9f*(qZW>l&8T<@Ry#gNZSDoUJIxbu z*zFBjbL71COhEc*VnPLc>7hM)C11J%NDn@BhDpCrxPGBpELqqABKYl$`{EL)&NgNW zwNYx;iH2Om>j5Nv8=J!KjI>7t)>kv`nN_uCN>R%fs_ex*Q>&J}-%5~GeUZ=mm5e*} zY5Nj*665NMtl(~fGi;q9(007pXjChgy%HTojx@^^SuTV+QeO3gPet{D0yPzX^0x;=i5qP`qESj{mukP4Xk6C-@3pGDS z525c&m=J9nnZg*FGU?UlGwy{YQ#N$fs?(nQUMe=4`BI7slgCWDoA5ATpUd#Ouifl0 zb~@>yp4_4xCuYFsvK=i;HN84I-z0)_tyo_MrlYo9{@kizN_7?E>vZL%YPB5E;JJ+Z zYPz?s5b%Xsae5jYKN#IyMuLvb&X(p*=F9o%SjjRid?rO6(fl#*mhSBqlTD3A=np4zV!6kcmyjd(E7zd7g z!Ta-Gg$k$w2w4AU*ht0=Do$A^bbSULL~yT-LGA~H+>ua?e900Wp37GziC(U6JZ|@e z+8n*t2wTSkIVZ}9L#Ad+ON4}w{rW<{4;p0L_ER@ztM$Ukd?U|q*kxQL9z70O2X3@& zh;`02@i2f2MHd*+xx9D3HY`@zbPB8b|z1*-uf~(!Tu~^ zz2}ftrFX5{e8a+uuNRx=sJfkHjLlrf3oU;MT}=3+*)5OuXF6exoa7h zkLmR*)wyVgVSS`Y#j6q7(D_l~bnCc@H0}*Xn+x)8LP6nmwvje&cdfN2 z!i!HO{`#XK+Go>Q-zB*8P*6?lzX~CVmgd~eI`3eDxb@n%Xrb{rEQlr(+PT~9hBcIr^VVZlxI(F_2GWcTM z*`0K@zCvu*>AD}FM3#y2+Ayndnzg(eC#5$GbwMC+L~_MO_U+tc#$Ap$2S0s-_(j{p z+8OZkT#aCQrz>ls&z(Pjjx1_*dd5g;VIK?c3gCul_e zZlqW&o*M@4a>J7yH31l*alKKfux@&H#5oagtYx3eH%nuuH;Aw}W3*2TK$_rKliW#m za>#Kl&1ukQNZGTD+^@%Lb-dIp%o4X+=kVU$cv+;W$rpL0*qAwAEfs^SrJaCy_!Bb( z+$Zw2!UkcZBOa7+(aAz#mfW-wXAjrY!?TELlJK33cY;0O+WAWL`udJH7;-FqIQN@r z%qD~Tbiwr&2(Z%u=J*8yhm@cB9b3B*eL)nPwYC02^sRZ)D%e+NP}5^%eoOj7uok zbZ$EHgmjL=y6YF6L{}F5MyD2T7(peLhY*I}pxo8@t{42#tHbm-@EbBdv+#;pg zsqf>}8>WC-|ErH9#~XJjJ5qAGww>PU_0{WHbm1p$D0Fk-cDi@HWn^*pO+V(rc-8V43<({ z*Ow5x0wX6mds>~otZ~TgpDL0au)eacM;Io`eP8d1?*-kWiE*!<6Ol%(D) z7c_`v56%Dc4US_cyR@e@sLgV{*Se5#iLTZt%ynYjb*N<{6-pe2ws@-Y_BNJ1Iargp zZNYcEOp^F|<4@^L&k{5(ezRO9UfRgGYAknjWD+@`gnR5C4$r_-8v#SePVr-5ir@iF z7AN)EB-`!38bg#YOB7&KD!rxVuQy)g&ic+tjh!lxr=k>nLu?cJB3zd&N(40}_6A z@p3e})frEJ@Ln-cyx)AO_|3v;PO&-HVG*E^b=bX7BSN%MG4?w%ZbSxp$5=jcB9^xVsYJ*ImJ2Gyk%pyDzw= zYq+Ytyglzq@x!?b99W-lGcNBcZkqZfDowldG|PPa`x!eVW2aDtw&(cosRM@(=bo!x z&+#&9wk!(UF-c&*+XZ|J#Q{>t|(A|7GKkNJFCOmtJ_rvIYGyxj>n!85+9s4j(AGDY8 z9n96~uF`n=;8ea;FC2{OGCPC$%U=Ci(v5Fo+>W1z&#c@TD9l z9ti1|aM7cF1zAjcOt>vAyHn8`PC^_gmuw>DO)4FNuZ zjoA>?zD}-GEEgLqLGE>^&6}N-Xvji5jXLk>s+Q@!a+n=%i20g+kd;ic& znOPL=?P#gV)i|=U>h4q-EEFa^E~a?d8rY~6atAvxrt>{*Te&*s#n28aoH^QanEUe6M?k+c3oWinzymQrN17Hg)jBlq`3JhA!u}ubB2V%3LDUibY zmw3yQ$b{E^R#sa0vB_`n!V;QIIPaxyQ2$AQL9iKi*-+)TWGZ zrKFt2_~w!a&uxP_oeQ2^NgHA_Z*vm3N7f>6O_a%qH*OgZFM;w5;)RQ;q46T;G+Elo(nJq3Gx^=w zU3mZ76o+L$WslP3dJ$Lgo1TrUV$ighMTWCQDk(6FCFa@uV&yvIt3wsJ=c{uV<#Q{* z98dm62Z+sCxjUwFOf=My-6aj=-!>q&zm~5cXY!1_lAJh?80qLa(h=wf&`mP`WNxxq zP=9LzoA;5~!j!ct)9mZzNuS9z>sSCQOg1_-lM*!bfJ~bu$CEit21I%dUB~t?(jes$cO0IW1ExGNg=0yXKv?UQVRn(+5#w zlG*r51*m{bWpaIr=Fe4maUf>`_42=5vSJ1;3J)ct6`$6A^ysJPUP>lE+tIbODv>q} zBYT9lxV}=)=VyUUq=DK@y{XV+0PLc&tGScUKVKiU*JW3AFvM#pJ61nwNb>44SJHd7 zR~jrqfS|hzm(d)j5zO)t2$TNp zIfR17n+>?xBoCUCmC|YaoSYJ&p(vwjzUuZeJt zEGb+Xyh88QPRwv}na~lMV;KvF#$FSf@osLP**7t7(RFN)S8I5nxtf!{;wo_3g`EgFva*C2 z1PqR|pPJ1Iv1n*IXf=e_vJ{b~_o)X9@7Gv)z_^wMU58P9u$(cm4fy>BErplWAQ3ev zZ`4F3@6?!-SjPP>PLN<0tR@tKIl+qLgf;r~I5=6j1}JPjBe$;s3qQ@UQfGRJfV^d& zcWZBK)&!<&Rh&Uvs7a0tV83Bwqb7K3iXI0GIC*A78oH701GkW7$;bfIn1i6WNy?7q zg{8cqAnvTLSDp0+b_Gw@Ozj5AtEh7M|ByFEhkSYATlV}Y0XW{>4d}d3P%62M`^)=s zdXd@+gFT1YUvEfHn@xK~BVp%a!(=(A-P|dNc zV*WEO{!9bo%=_21!fcfgq2eLvT_4SmVXcnE&cPh_dUFNa{&p{#+V>)k)f%9=)Gi(%YL?McDp*|y#B>pfVQqIpIkV>=OT$!%% zwT`)k>BM`Sn=JEb8zLB5^)hxPw%f`k=*yUZ)h0o<;te0yu{AUcobT6Xidf>2^Ty^= za{|s)?9X02#$yH#Y>QLXXii-DG-Soz_c+GaoCrx81o2oR`&#iJ3%f`<#9A(KDISH_ zEufS0jw|qr>yRn4%{p%z@`y_6cWcMB(#>PHiTvW_JUaT=>ggoPvrueROFvoACMPSF z7KV`>`b`*59BdZoL4~KPm4m1ioDbBCC_}t$FZ7Okl5-3TN%JVm*x_OH;{C&y&IR&J zmfc5?y)8c_TRtu8j0VbyDm5jJ5W>@~~PIrt21MpIpQ6@>3*{(I0pT z1;U-?UP!YLXhbAnS}YSAU)$O~vIaZwku}(XkBqL~fahJ5tF*J}wWH(J>`M4HtE5d1 z6W1dz9FZa?89EAaRN~saYum?ASyz@iGVUa?V@dwn_@zjgtN68t$1f@7dfMvpfY7+t zL}Ta2&h?^(4n?$N(_{Qn@@qMDd*`r5>DAZaOMVAKYIw%p4emYJgK;O(ZU%-5XFyO- zId2rkz9ivj3~2eFFruRGpeW*%-h+l3k!X^>l$VWaR!9$q{sx|6h?%2FlQCF-qr|Q|i5O(4#ki2_Q@8OU>8AyUExBfWN0HD&@bqLLf8h`bamVVWPHL zbWUglq$7=P2W1RVy@{QQM7~`E3uj7t`@mm4cj(9?k0A7(l;k_6JAUix0bw2p`28;S z`68m}xz@KEGNBPOK|7SNFgacjJmd2AD!uzcAwbXCfEw4%hPWE#ZkpCYn5&<;keo;D z(%lsdiIgQTs%HmE5yAv$W2+Tv;nm71unO;um z-F+1k9VQ8TFN&m-mt}^>;Ln-{H;2Tws1B)GGlLuGbok=l8lf8h% zN>+eSeQD*8)(S8}?)5@tlA#kqXka}O%^YW%02lq-htXfX$*;8368XCfZ6A-cd+#CTStwA= z+@X;0#ssuKKNu-Nr9J7DQX72xi728|*UplR66s-dv!A!63yV!w6H3>X$F@`hw@+i2!|tuWM-^17g0KaYcFE6+BI zhaNcS=S}>%h|`C7KyDRJam7Tp;?3hXDA9_IRZLowR6at20Q*hR`^0L|`^4(e>nZ2FQl+B! zUI!I*sf@J}{Nt;I`0>?4>{kd4u1#l*s=87O(2OjQmpv-BjaEf7@}?vu*QSa!!d0?J ze#1$9VYQR`!s;iL%IXLy>_n;%0v*YOYeoOD)k3<4!0B?3n)E#aQ~yTL-X?UHi1;;x z@4^mv?iEYLGfCioTrk(*+#bPRtSK3=V((yhdFsI??l2^Xk(k>8m3_m0o={mM<`R2r z647MotqJM>tH;<&u^`2dvY$BhJ6DoghZn{Vq zQ0Wj|C|J^s8J1q>@&-=}u}XZ(h3Yof)=K=3t`>cdt`&W_WeP0$xOa!R#26*Y-+R(t zcKIzP8BP&-hQLHu!?n(M^)}M#XY3=1IIsB|qdtEXU{i@L%K6Ptvfn0?j~KAI3*&P! zFPX*s1@T7MMd=o5DVp%;k>_kYDGtqfZtcQMs*NYdur(9!;LrhdRL;-dwx#9Bm@2{h zF%PeB1G_;b%aP%dp%t}{cGKi{7y@2DxFSw4Njwd70k_r#U$r^825WLT`95ye^%2a9 z4gsG+MK8kk>)}ItLA=%#7lMIOVUgY)`{ngw;`M|2i6`jKa-oTY(L>d{YGBmDB0-2~ z<+?gu8*-l*U8S`}#kF%&UEwyPwFD_}nqv4!1(GtfB@`t}C9E^GVi;vPx$OO3FJH~Z zi#Bl&<)<0!H?v2d7+s}xN5$1+$j<^@>w#AERKM9v04+`g@gZ*3o@hwd8mA~SL2MjF zQ4}Z1qz?giqZ=O?CIafS*>i`=xDSo$H6ml<&97XM7B)4=Uc7u^Je%| z7JIbl>gxv^40i=8wKAQA3F1&8=UUM;A69DlAp#9VG(dv_8?s8+Tw{yy`b^c*0lo8s z=R;qJS?{Q>2$auh>9&`R_&Cbltz}d5Sq6iaB|yYnW>bZO8cdRSB9fogi0C&xx1-1I zUjejb`nULW=*fFe=A;t)EFzs5)khQ)^cBlx%myr%(%d0l4JHc)SdhsCEcoF$mQNvX zGA-)4LStfd1#r9-7x{9EJvC}`;>L*b3f$m7BtR42sG{{4A!H}=j0}%PXDc{eX%s2? zHAkd3;dXHVxwW77$t_UBM|LbF4;!c-CZ=1SXOHM2TEAvcjuGCzEiM zBCM8NQ%)V(VONt>i^*IVuVX{N2c=@#?+BfBJquAIi6}c-b>6FdrLac+fJ{PyiNMJ# zbKu}HNO0BbP5!PO6DA@(POu?&sE&0(@ONCvmn@A0bPVORz zBNnrov|b!OQjoBF^I@4e>I7j-X!#OJTXks)rIm`MET$VlqKTnw^U*xL{y#0VO`9Py z-jqpfxpCSz^8QqBLaP-Hhf@v7cJXmy^r(F1UnCiUUt28o?!dcVb>2tH+JGA0_K)CFMp&vY+*wP#+#OZ7!H5If|25- zffjkHIzhS+NbrYzgzz}tq0Hf)%(9YEl!jEV#tOUMX3%xvHKx68qtNeY##Ujp!5P_v zfihF}Ic#1gS!5a>|0Y&~PYEXn5jLn7N>hhPOyzwX*aP;82ko1ujBpH(gaDy1l)Xd< zDUgPx$oA(P5eNS98tump#a&Q*4e4X&r!nnt*`gNmJvc;OYgTMuf~sMBLZKLc5t zjSN)Zm3V~*B%i8AW_s|zH!n_#{%=w6# zI#D1xN%o3LX0uBGj^?Nrt+sX&J!vF4BhxsCIwxUv3#WbS=(RcszMv2eKg@`xvcoo< zae%(6%8~)M>{iw$W(cHBG!B3Hcg1oDT9ffB&Moae#n?Oxl<_R%(wvGT*)3V|dgWP? z`MqX{l!__Qa-LOIaz=MXm?nQLkY)o24Wipr!3RO_c=s^nX_W99w4=->f~e#tcs2~K#e^0RpeL9vSt!D#lk$vBJr;If!g=_5bs9ymv$6F3%CQgY=As@dBs z$!VA*<|cuJn8_v2!g4FFz9d{3E0Tb_C~-a29-`+YE0#&4h_!jBtK)=|5otC=ykl=B znb3`wvBF%uosEEslIh~OB`<^0JFV3NK|#a~t)Evs@wV`FZc&-Evc0-B?9;6_K_E4s!VLnZdLd277#8F{>?jGl5`|tTibnF7 z&*&q%N1QTun1G{Frg0JNbwXrUpt?BDGBwq^D^`ArUks2{s@fAe<`^ArRu0Ds!B5UG zR5;0G=NMMgVpXEXybSEHDC>$t5mlYmu`p6(o_WovEin1FNzBR%_nav<`9o#{T0?IJ zLczYusT*KUHIx=t=B0O|ST(tP5mSlisidzujvFObU^If)m5Dk35DA#1jIsy_=n08k zi?$g)r)2Lhu^9bwtTwmnHk$}zrP&$F>{`Pf!k8WA3u5z}S;jzAkTNCprVDJ)iF)*C7S96WlG7?-D)txY$2)>v zAoNsPhc9{fUq6WU!**BLvWAIp==Fn<8^o7LyI^UDX+EIj1f2vknMorii}(xCl6d8f z17nNdb~sl6<@JLk2ABnjp4LXpf!8^`c_IqT;U;T}I&ELmZ+UC7di#@(lcJo$3H!)E z3PQ_{Lq!>ykZnnZl2~ERumqb%7Aq&MW*S(TD}eWm#VqCjr`8P1Cko9*E0G)m!O+o* zswQv=%u1I~h-+I!Qr^3MkVd$(vvSN%#@nnW8YKw}PD=na_2S?AwE~a{4oyL+b=N5k zn6h5-_#I_~Cwgm?Eo7pjtg)R?@JT1wSBCN!t-ZxyVi`t#V)!egn5ikF*h7;}DwfLp z|JpmZ-@31?j-N0QLKTsC-v*5((Sx``^Yq5@xgPO9b?0ith7Ye-@^bK;KT7#ypufS}%(+#afG&7h&-T z>Pn-PluK^^b+ZA{)vG>oi;BF+G5TN$@_XWIu$`58?QY^l6@bK$4FCgM)(ObYDT@3k3I7LLq~@&Q&2jq4rBD%)+b%j}S^73&bvY=zCBT~! z^Fv8IS`@~d=P!TI|91G|BPEk88R45~Lj_4?@mJnsCl>wqt4N+2$CW(8D~RIrSZM1o zW6;i>F=~l*I5iT4aD0$Y`VTUC>IEGLV0o{sR$YUjlar48X(1cR0h{H*S@Xgk%voRw50fb4yf~L{>sy@Q#3@9uRZHS-iToKubtOvG=PTJPQ^XgBq8WlSy_4 zND@4kloCqwgxyZes$AL`J=qiB#2nZ^{$4u>aOr_jfEWVL&T!`Epz=bbLOV-W>F$i- zzY-p<(RD@js^fZ&Vj;zq#L5-`+dOZssuPY5Lz^~y8gYR&FIj+EQQ=P+g(iT4}1*H-w#kE3S2ztt@lYZpamw}n0 zhGN7XQdnSPB8qSXrzG~SlhJTh6QE&XORGB|(*N^LVu7^FYbuJ6`H@k3wKn+FReu@Sy36BQ9!?;B)>}{!_VO zF>=pX(HIuvbIAS(QobvlRG`orVyIIAmP>cNS^AzBIg*piHk`$Pht~7Nn;`#;h}x1L zN;Zi~Kx!n@yrikYwbpZB4r%Zxv1Wyj37dhTO`82x?R*?d$}%%FtG}X-m?v2WtwhUM zVkCV&7PT7~#gM}jZ(TpwM3s`_NJ>PZgCJ}rS0Cc;ey#(JFT~?>v$~WNQEgDKu^0{_(6OB+C52xl*+6L1tLIvL5Um%Jen^>(&Zs-eO)M4OH0&ultyc2H&D8 z2^LP{7s_i%h&V{pebtK))fMHb-1v- z0OB7=kV9>rTx9h-Nf%9F`r`xaNeL61JWy`d;nB63=h&`T5^D>zbQbmtWN#O8E3JqU zP*zG_UJ=(SPM_4rqhq4}4oOczu*UL!Mv2hOut^fXSNNRhA2M4*KY=XaR@QtBDx^J2j38am;_Ihr*b6KfFeq|_quO>%S`r# z5Dt{ZC!24LhUM~vxUQR`^Tnb;JcgE(#SyVuTg9Ln?5SA=C#uJSJJ4^Iqo)(LA2t-u zn!wo57TmP(e0pPXiXm+}-P9~tbR`2fO+>xiLSBHAJ0zS^x^V|eb5&V^zag5Bn!5;e z%H|&zqb6t(jkLQeAFe26BG2$Cs0}g%oX7#t8JO1r4`FzkR`EbeD{$)A`O?Ez7+w04 z!}z$D0^0Tdr)4eqTww~2^v_m^5;fpcUJ-9qzhtFhkHKx?H>rh6W6)jpcvXdm6insmYBnS?^+UF-i8a zBXV|Oi^+a(yn=+b)|GW!8j1Y#`PP~oBe5-K8~L6oN&EPhS$_N#@tb6YiS|+6$5Zo zT|xGagsUdWUQR^aC?G_gpA^9-^^mZcGtv}MQ4~6;jQmquBQ$}KhQxlkGx)Q;jj376 zMPt5txc2z#{{0AE`%D>B>7eWSzWM>VyIdJvFx9oOf83-gUq?j^?!Jf~@0A|;+n_g* zyQJB8@)h8Qv~Lh4R37|oC??mc(e(2$-U1cD$(@KKBwdD0A_+Tb`03l5`^%kgAd0I9 z;e91{PD@PaAYw3{pK>8K^KRLU!{(baF!xW2US6R@3`9}1*huZJ0s>eGz#3PEEMx8A zYamyUctSIxsWPjK(UP%8^t<#MUxSnIfK(Az8%k$h3sNH-XW&dSV)Z1Wh%MdLa0R==~~2BxAaxGn4blUKny!ieT^yokRT4&zs%LA7Sf2-Ov@+TfTo)5ovhc0GFf^; zLzQ*EN@)xY^i*|k=hTZjf2{Bo+1w#;=I)y&Rxtw zgVvK0yO&x0|6MGTy(8tu-H(^r1 zEVnVsm^LR^t`xOQ^W81OWkN27o*ujDuycCbrbqY}JEX<*tSn45$Lti=atFK6X^e>J zBeq!D$(aME6nUcI*cjTfLpS5$9ic+D48^8@rsZVJY#2@D1@A80QJZmYD_}Z8#*$3X zsQwYoU^RX)(o3yW2TwdtrANYZ(N;RacpIy*P`08F^hZxtF`VMlwKJh?P#%T;XJ0Hw z^AN-aN6%M>+ZewYyBoY{i9qW}NnBum@>1J3twU6%GM$X}ko~iUFf!TjH$yVijiE=8 z^%-e=0OOfD$fR8li=k8=CEjcsV>DaYkXDy7c4q-b4TPIfy=64qCd8++5KAId&`{?u zcyi?OOIW}VJ^OVSqw<;?qit{VQy zLqdu5EFNLf5fg+DlIgykS-tK@k_#rbNesWwuHA07xg(2WWh5u>ZhHO0iP#R1b^C>> zA~XT$N6%mI$0GD+LmrgVtr5Sc$=yKU@cHh^Z+M#-IAdA#5my2G>-YP*JkH5ADOmu4 z`oc++It;!9lBkwlGOxyG^#*!rAuiRBZW<{Eem-*-r_<>uK9Zvh!Vzjn?IbY`cZerw zq3c^MyNqtP5}71quvn^FW8uvxz2sb&YjN#j_m=cxeJf}@J1GPY6Vce!nFhe`FVf}^m1!HzM;bFVDAH{&jPUfGR8p(mrWoOnKJp))s4Jxi2VeB z5#)09Z{EZClC>NfXv9ED_dMR&+93u+3kZPOGMdjM9N0P-A~UU6$*ij4%T9)gfk}K~ zizw(99wH>d&8hnCv;+H#lbvrUvgeE7;}8J2OYj!#viL%z#!3;%0OR|GzJfl)xLYBV z8&Xs-zSDkU!Nh!O4DBf2Df8d_ZJM!s7tMbwD%-R`8UsUug3g4X+-12IWm{Ll6yr6N z(#Tp%*yxjtF2;o!08S&9N;IdAURnt$E;z%YOX#xt#n)Jy=4_BnD?+1QKfY=+x<*M) z&Ac=`RTg_-8VXCsmNKh=jQambD#C~!P@_fr$!Z3eI^}J8x#spY<;dWi;_J;+U(u?v z)E4{}V)Z>Ys~Djox;_#9cttg4wa-=^(Zr~;BIv)Z!YKh>3qxU!htItIq9uYOj3H`a zXEvGCD|yW&y@u1ahDwJ`tHx}Im-r0;PIlKPkqeow_zK~ej-MEAPMt{FnBDSzkCD~TzDGbYFF)p>Ud>pKQgCwG`IqOaHO-jmyfrCAE zYbp@AT{OhgsEd#m-L<-9*K*3ppVAY^^Gqfkv$wlByn3a zhE#%(M8fk96PHkYM7R#-F@0_m-!AG4zl0bm=kG|xr2tj>Hn<3Q;@3txyM4lLszhGa zM@lUmzQTOERMBj|kO+tc`eL_HXTqnsMgN6Pxna>@3 z(!5HO*h%cav?n$ZfhGA6u~lRhde@?9G6+ubcEqhP9zS}rB(=kbCc^92GLkyAT&_%e zU(yvhcE;ow!%D<`7xoL?vRO?wdL|*b+Hy2>y+7HKMz9V+_|P&W+XWcM-q5*?z^izq zg@|LKVq^hz+V+2}A@gkr%%6hV;-p3ZBe&ip-$Y1ilJ|hPI^zu$;le{?$+RxCaD=TB zoRWT!*uQIGd4>1Ytb7hVr2kl2iNTqBlFMO}q8U0mrerh8n5t6}Jwb3LNT8n+Iruj7 zRw?jKWF!1BL9-gM`u3kM^q+>~$;8D$MACS2UR8&-NSU*z0V78Q8lYexwCB5gc+i$^ zj5FiC_Wov+Ycxe2ZXfx#Og$pNRxPGGtt@W1<&llNmHs8{This{J` z0M1zlWrHRmRS^|UJ%$vMI3KiB?4;`2SRdC3+s>NIG+w*nw;bDw5o0gahY#4>+`4u` z1pdMP4a!TEIj~i_lu?FGk_v2beWEwavW(%@)LQe9Q!Q%Wt`CltDQ=L^&*s-m$hAne z`PU~{qKb1hR%W|vrp&fl3h-jt0&Da78#E=B6)Ay;M4tRKbjC~ssY zlH_pHL@{o-#k(Zc0CBC1_u`Sq4Eid#T2V-Z2Ts2$zL(4?)^2sxvjGAoxxcL=4Szk? zR{2GocwcT>FHKpSVdAQ%qzCnrYl=|6khEA+ntJ~b`?kxUX#C056L{FHBmo4WCcmy! zuU`bjz3lX}z}i4h6p#(>I`@cJUByp)(9|Y6(=57yO?ne^9uF$jS8RgBh>Dcm967~@ z#GBD~ArOmRr8p&D&ANkteRl6N1UQhA8&o2Yyxn{&r*oF}HLd81GVm$wA=}s=KqiGr zB4zYf?V;$Er>~vLIDe*=WvNCZwc=qr$FJ^nA?@@ToSF*ST-S}2T#^x7&Q|ZhT!XNbF_2?L3Y~i=+o94&mn0 zc`Jc>b)IQ_C|TM*B`q~V9(+xYBBZdQa841=l^QtLAS%H}F^pj^eU*^-oxPJis@mPe zNvDt?1GF=Bbn)8#zLgs#$qn`**ypA>En2iT5YpkMa7`$difn}tF&SS!Ptw?p1<%o< zFWPcr8Y|H4jB06Wn6W-Qq!zGGuQjPoactQ@Q;6_bA+WlRJV{0y>qfD}iO^XAZW1K$lq!x>R-o7hsKCYQHP&%zCC9VNPpVfO`%Bet zQ}@%0-OW?&POUPoByCS>_p8-eoiV6|FTCS&l7l;KUW-&LZ$?K;-3Z9YCZ|<0oY5Qk z@_fY_r}R&vQ6seY4KcwVZCOTjeA|^bHD}ysk-^tqmA8NO+42*!YFlAsZ!i2)QXmY$ zzS4|4A^<7;=d5afT6tFd0>9^8LtVcZRYLBW75r+`)u`1s!Mg4(tu6MyTv~lfzKSWF zOJ(osAX#~hG;LNFW|gTE+oQ9Y_G_#T7sFcL4U|ZaejU)0oQ!L!CR-}W7Dd`5SJZ-R zk+`EoVjMY8HwKi(fLuUON>(Z?lgQNhDs|Ul;nuzb6B>n<+rEeBuoLO;qNTOwSP`t- zw$GQTGZuqcway|QQh6gkazHvLYr4}~+*6*CTL4_Gtdpg5PMi6Kg6t|O6za{_vx;?C zWK9gC1zl*cq>JJODyA-E9o3OK6@RByjH(^1btk=;9Lz$CV#AE3G%AO*d!)Kh?>k2t zrfLlvCz>R6P9o>Vihx=~7vCDS3}I6i%hy)*s4hT+)U2kdZ&Y`k-JCMEO9occsASZ% zIjd$-Z7RERGO%UwynlLeqMTeTz+oCP3vjVUlznu?OrfV#_t9$7Dx_-+{Gbg!o8v`t zS0tqr>L{sSx%#SBWz9T2mk8tw^q5@|Xi7z(=>+)Jo&NpDD^C{JmhUY;TweQSpC9jk zzVvhoMZS}7tKuW|FfnXKT56PQz+{R6*upzb66wKYaZ|QzUSOYWL+MmnA>HNJhB825 z+vHVjJv8}xz(IU|h)((dF=#9z+iN9XWCO}sHIOu8 zzCx{Rjqvo!)s8fFQ`cx`ys%N!HG1{3MwT9s9onKsG4~nei)L)z&nqrgsA$GWFIAF= zcv>(PJKni!5^3gaBCwt=S@?}sAJU9LehQX_7gwI|)>zBo7gMZq*dlH;b%p|GE#TDA z?3_MdQ5-EJI~~UA-o((!2k_EWZETBuE7fYWl{Zy_raN})MHLyGR#zsVXNfTm=Damy zqGQ8oz>h?jhiWi@+GRqV^gHk!CP^rNZQ#PX9bO|V$H5S)1Dqhs7?}?ihbpw%V z_rTU}&!#`R)DL##N` z3OK5Sh858d4+~EGhuiI@+nGdK8G42dj72Hb%GRG_uBKPYlbtjfvZU|&=aMRb4}fKR#IhC zNwE#se-kGeOGgF|J8>pzo1Uck%4YbU~A6Dbu)Urm(-P zO%6!;tw97OxM}9nc*Q)RG((CLDCwG$&83WEHH`Helx%SGKmfB`nkZLAlXV62!h@Z$ zw*tWdC7dNhT~W90QzgASf(%) z@(pnbQst2J9lb8O9f27m$NzKwmx+WaoHv6*R2WgN&aIIJU37OT3U9KjK< z$VT-Gh>Y91jAs2fVN)J=!n&sY-u8ZD!C83lDLll!CBygU!(GTAhO3_b{Odnn_P_ey zf9mIc`L*-Izc=lAyvIe z{{JaI>(4)5{;&V;G5TfC@O$OoPyB6<-+R5^Nk8X*9`M5@MjiAP6JK(qY^G}!mo-4?PczgUE()*ZMdc7we>&Wx;dk>j)ou5ab*b4t{^6w(;j_9$+H@m$Te4;h0#VV`V z>pk;tyKcKpe~sQ_w%;xD9ePhMfMEW%$Ee@Y`^0PbdGGgWo1yZ6{zttHuj{Y_gLbWT zrFpL0|4aIh7@@-MR&SyA9{=58T|Wm~E*bL2Znw{xcAJ$=pJRdD?ee$RyUNL40!~Aq zubzVFAyCnYZ12sZyTIV(Dw}8`G^W8CQ)Jmsu0$h%p)ppOXg~?6B zzuRvdGA&&0^{%kq$+Mo_=T7h4-p_#Q`}}*G9lymt|8N(mvH0INyF0tLdnajbPrDZ+-6@~giUt4&0$B|!Kc*6M? zRE94NgY&{OE*?JXj7u&FE+0PgoZ)c$CBqk7GQ8=S=L}yQoPEyn?(Xc82=%cC8*^kw z!o0iZgtOz?erOgA=Q{Q@W)oDoHg(Negog=F@-}9Uh8;_{Bt&4w+)F;`@|Q5DUn8LM zulbImlEmL{&rF(QBmmyqgb`E!ZcCc3scFw9K5R^;1ujGUu$K7p%g=e?<-|8_jM^n_ zjp&ZSD02Gpuo9j{g3<?2KP*u&A?IKGsb^k2R-BGrGNZ+8vdj{{~#$L zK$rS!jL90ab1-YdRm8*FdAR;sQvG!{%Z!3g`>?}|EjNP%I~F9G<>-caW8*JoJ*~BB4o)kC>-BmIfssc}k$?*mrJYY*^ zOU4~tWSmKfjOJ~(rx7vG_AH#a%$%r9Zy|a-=TjbiLEjx^ zYdh6A!O;Xq#*#~WOMCh#gebhEzPQ6AN5+av>x&5Na^LM3w{ooHPfCst-cl}24|HXO zXhjo9`E+nR&!uE{n{Wl)83{T>TwcM1ge_lW+$5Nanx7YLT=Vnw(^=pNRzIAvJ`rr7OG21aEc_H z$|G0WyQjlHjZl}-tW0n^5jfY~SuTVx0$(QlfwbZblKpi&jG@Gt1jfF&b9PV1uEL-( zgF&COI$E>ZG*))Z}F7u*m z%nBLrgYfJcguPSRSMblHY}O68Ip$I)40!tIlTx{WN6w_f7m*TNNQCe$3iCdJ5!#(# zn@w-Rm_#t2w65_ED#!#3?QFN{+;I`_U4;^rE2;UUmkjR_G|~!*byhDXw0#tav5bwB z2Es1_Vk5yNWMAiWm<~T6WTh)*+a2R*#n@TB6tLhj9)(>_KINs#TTPT0l9+c(%X?hE zBEdAoNKHNIT?HXvN?j3+Kr_i?$G$=jxw{IqGVY<$ED$`_Yz_D2f+9#i-M)XIL`E%|G~m0RQ)eeNo40I^t>aq;2EB=u`O<_#yspB@L-+ zq|2Ciko2sMi5o6R+;G9J4#bZ-mznT)5L($z?ld0y>!eJfYy4FdR>_@}3>e^%=+26g z3c(8mF15L^cUNk&19H&{rH-QXV>tza(s86_lTK>$ozmrr)aILKrF>Z7YDZ*Jsm;ZS z6H19x;e^y?cUMQ=_1tp5vB^;_#o&cfOR=kz1ffnQBDW7f8tq4CH`|4}pj|g4p1xhZ z-Q(9&SSTyx7_TCx`DAG=oh4G5PZ=-eq%Fben{y>vP2rBqzI zcdjuMmp&f5duKPT&k(i4HasBtO!SmY=cvrZ4i>|auQT0Hhdy)7HN3l|jY*jhOWC=( zLRX=?G-8~D+ZkLzZ9UGcBpjV99JNgE%$0ggXK|vt(+#RX>`Dr&#~w=4`Nb_;a_Iso z(we*pAB3`5NfqnL4q&fv1uCc!G;TT-)HRS#myDMd*%X?n^?#M7XQZe&F^v$hNf^+= zD4DZGrzHF51)YG-&R&kX$G8e!O1Qgo6(rEH)+S+$m!ylC*>vojF9LTdCPUsW zeAdh6JH5_>nL|x4|3ybo)|3X-hRJ72Jp#OzKqrAo2^jxnROn@p45T`r z^K#{kNfeHUH%#e_JVu=~`##(3aog6Q|fef#%rmmTt`+u zSs#YiRfaM{*0Zrfa05|HWU0liuGDJ!mb&gP_w!N*`Ybz=PuC>FOZzmg6ud?dxTUi_ zH+ZcCGsep(RxbrVU}d@AOL`egiI)j(1jtrXTG51bgz@DCt&obOxJ4Th(M27qBW^@T zxabHs(h**=d#C6CovS}>E-QDa4iE`??m6bM!;p&S!~d_+2E=ZIG%HctB(G%c5MB&U zv9HA@MU5~fe9WK{CSSK397>@ei=ZIFbVRa6k;*tKPzHW`%-14yl)(~8_^&6dMv%a4 zY`~NUELge6DbIF-n}AYlQq+EdvO^}}??YWCOs34GiQo+aaE?6eio~ub4g?X_|5PDC z>Pi_AcI@_+_EBvjnL_U&Ywq!dTq#-1l}vhcjd3Iyb-EX_E5?(IV_ud&DQ&2K3)Gdn zo$9SZrEttPyfalO`fny`%Q*(qH?FtArInea78&!CP1dcHM*6WQ@+(#&y%$=z@?oUM1BeYFEoES;NGCHf?-`Kua56 zPGFboHQOjTwvE@e!}K)UC^@!`uWX0OH`^#VGqrIgGEj`#m}>On0<^*=X<@oNI~BZ} zzE7t8Pm@sUa4-h>FUFwA5Q{m3u?3H+?*Ys@DE2eX_Nx(fJO6Z=`g>J+#=?gYB`3Ix zSnxg`Ry`dk8l$(XG|Qr>zF&c~zy9wE8uqy6(mO_q;T8Js3%@Jx zoSRM-edNJ?JBq2JtN;3uCgO+J61JAboHR?SkAk#<$&m$3{o}kJJ{()X0_-UOGM*xU zzWOJKWUdpeHmRGcI>R%8EBbT}_NAIX|Fd@84N`6I^mcs)%y*3ZZ?|h+=GnFDc;Nnx zc75{yeY-w2V}HG4db=ER0dk0C$vUE_>pz{SotdXxp9Lp&kw7x#?u)$4Ff(^|RvCyg z&~()?%XD^DK0`uHQe&TzYYxXQoG0}T#_}&x7|VZiEcCUEi~g2zF;H*H&tN<*#yah| zI8EPu(KzW3Z`b%hG*15g8oT~yHOg>l8JYQHUpzE*b+@8Ml5Pu)V!S{|mgAVht=yDDX-bD4E1{ecBrlppL)J*zu?O zm|4NVQ1tQ4?T^}hKj`aUJ-L1hk+0gw z=^G||=D=)Ehgjilpb?N}r>|tSl7w|%lSa5YuS3n(C8pHuYpJ=&?=KVz{-dOcpo&DF4((AU%g`k>CA^*i8Q#OgKbLV- zN5+%lU3L9#q`eJ%v4H=s0lz0z2%jwP*f1&jo9c6C&opt+( zy#fug{`OduEA`dKC|-S>N1_mXpVwF-RqC)CF!?>R=5*i}3Ln=gAD!9*G}TSjz9O$g z?Lpyc(tm=2{*yf5;(FoYPQrt|z1p`7=R)NNl3CTlRVfsnLYsR1AClY{YkN?a%C%Gd z5$V+*^FX*U+UNPbB7ZCnjMEo|M@Nk_Xu}d5Xa@VEpvdHz9V%R6XTdwMvwi~B-get( zSwjO?gwt)d&rbm#>Q}F_EtGZCZFGv~cQ#FGBMi#kVva4BFum4K`%4_1ft#@28 zi0m!(QWiu1N~L6?g_2*jQX+l~L5%=H&4f(bX@3^X#>au@V)YQRmCkf#wiG9<|1X_! zt^Y6W&ju_{2YNY_fauFLFayDD=-+E#s9m<>eZcJy{FbV%-8~yEF0tTuJi1Dqj(;iR zAX>x;t|9skdEG58|1#in>F&<1%)uEeJ7UY2z4(79|8L~~B>&;8*~YbAMr>UveOKPgC9Yg7gusAj8yzu0yNhgFan3}XceA(2b<^Jzs2TCRQ zgS@+%wUx5d=uxv9zIW(8Gy*QX$}?1SY7&pYag0V({-X>zRQ_YUWL=arSJM!54|bor z9n|a#-wZKHb<8-|EoB=e;r|gDe7t##J$xto6TnU=nD7rkCUlp@=HfZp&tk%->YH$F zH~C2)cc2?#THC-Br8m}TLguNK%s*K&|Dt57JnaLW=moFxJk>wR+ONn%@%&m|soHPk z<l1@IPeyw2UunQ3fus%{9~x@Rg+);NbO^;s(HN(*=OS;~&2%7MPU*q!(rW8*)Dqg+OK_UabFEt?p>7lPdHA0~ z-P(?8`dWoA`$NY}d>IB$U&NYXJ8Oip*l{V&$X5!J*ATeTcG^%g@fT$NjZkbRP66DKhl-&ux(wXjr{+2U)uJf zn9&L4#dabq4<;R}5|eGC+KvE*eQV!}41a|7s@ndHZTR7~laG*BvUZfRLHl~DOm{XU z_}`J~gkg3U9Yq_)a*4>$vYRifK0_8hQ!x#4=>_V)VLSXP`aK~VK-pxF<9Qv%Ye&nh z;dGC`jDqR0ISFfxu>a5n979PJMTT9Makd3ax_{*iAYz3o$OZwKKNE=THYa;Kq3QTb&b7;i8 zSU9`JKOk8x!fA_(C`H2AHGZ9d%wM@6s)4OGHN3$Vi8@^&1w>TojjqzEE(1u-6^$O_ z&ZBDWM**`7HNf_F2Zf}0a7ohbDvR_XcVH#W5UIA!(CuMG6`f*PjS)YWks9>KqIYyD z(V~WA2Kk0%<++xX=f^x0ow8DSSe*~%?XR!~L7y8eAX=W2*#2r#%B?ae z!$hkKc?64i9LK)CYy-2qA^r9}TiKh+U0Sb_FI&x_PUOTm1tTWpt?IA^Vo&_V+LOU9Bx?|AaksV^4oA)FA zbryulm2AqwplraRM$5!Irx+pZ?urazK-sd1ma_At?4CA7%a#`>f<3_D=yUm8`;Lly zjvAWtzHH1|^g3rBITQZ*f`3^n{&{s@(ASso^hbGAN)jsbkhV^zTh?*is`IO30NI6$ z>{leRn8^Fi5MBMaI!x!1;Pnd0o?31&aWiRwcuk7D!x`0 zQp`sQ9l7QCQ%g_7e;j-Bl+y9lpu*N6`pxXbu@&BkwoEkV-emOvDsiqmQRd-4B2UrU zd#6cvGcI*$L)ILKGW(eYCzvv}euu1Q#qY7N%7NOTbd@dxO7>_%JPsW_d$gaG7ab7? z+D26m;%y}?V+y%(@qXA9k*s^ykZE-lYY5F3u}f6fl3wm}f_3tqW8XgWbG%9rzY;RC zB~e{35DWGEZ+XC}Vi06GC!+8AMj`2)?N`lz1<*l|!lii($`6HvEybD~vGw!j@7!7Z2$mr(sCOsO0L)JPrkAsHM? z(2S^tjKiYw;;?9^I4n5hu+U+{lcJMlZS1Nq0{;oNr+=KFRnKo0ufQv%R${~J6P-8v z$CFom4vz^P5N?T6deH+L$`I=lH`>*#Tm zKpr2AVVe6Gx2@kIx$CxQiHvQ0omE#dxjEP>)sCKPG#;ExY^nb|Nwd#U3QAwk<-JOH zXW>o(f)yY-LMEr>6;3Q=Ck3Ox%enI_d9PM@R{zmA7w4PGX#yuH_KcgJUdxs8X+68v zRhJx2nM?I)-82~c*-ngr#tCBu2s`J9`E~|S!I?akYHEF$vNmos!73uVzp%s%ZEWr@ zJP2(EC~d5aEp4klNLoamB-ZtDmQvQrofnPlM?a2L5`gFlKwh}vIiYU>Bs9N?(h7Ndha3PQ! z@0Wwc9Js$(l(S_L)}0#Ac_o`&gBI55D9hY%!QNl9?RSj$sn%%S)oox5F5kLP>8x?WY@|uKyk?65mWh{4zp=^vPvZ$i~ulMV{Pr!4HX>@b&b1I{ZZ3_x7Nq z=-ZU;Z>*>3t zuTZ%{ilTQu?y~Xln_zRoC#SN_bYRFioF<#M(#n9t@Ys8O9DbP@yu+Tacg(5ggb&-W z@a2Gvk#nw|sl1r_vrf(lyFCcLnpjsREXLvPOgIvU^T`7HVwbT$`x2nMTyPC9S3 zZk9J|^$VEjGT~Vb(y*aq0MGVjmpg@Riq{EW(ExB8=UZ+hO-`D9QQv*xU-aD{4)#d; zKzO*kv3=ZdJ0azW%&p;7jTr0R@b)+syh6Az$D6Z?J#^$ExRyAaZ3Pj21+Nr1uXMEM z1(+n+%ik(yuK1YK`FtVYTPk~bulMHsT;ug9L%q4m&3wTtlsjD#ud|4I;YqL8>*di$ z4;ipwFJ;Hxy|dtX+cC>J@VPcE}uRVc@XwhQnXQu=$1F!muMBbz3># z8qqIrG)J^11jyPyXdGTPuEd<&{2EXj`CaS_xz}%_Got09#cAMIP8xbpI_7v z#YMr5keOdr3cY15?HM)R=uGViSAfIzSjl6NNh?NU;hVX@)r|sWuiRF^P@^{c8k)WA z>6$%O%J+=fW-s>^dCQ~5j@ick6sa7W(%2!zy!v;Ee1Z51%e-ru4puOxSHxo)(w=N5ZU1qWyT;q!Qa5hAafPtdt@2h0b*sJA ztMCH@wyNCet!fO21H1!P{i|(2tZEqs2adl)iX7M?IR_cUyAcpJli0bv=w$=d{nH#InXuy^pP z543T3QwxU=DIMq?(!$;yu3QuUBvShAsyxZFVOEyF-88z!!%A$@9hMqZ@_d~o3(n$U! z{Wru%dE@uBMthV#KVi%S;qAOz;a^8w;6KZIHgEY8JijA;CGU%p?eMQ8K1}+1dAGvz zxtbZ^|5v8KufX|m1@Q0Y-OXG61pgA(7;&$Bns+Nbj}spz{U5wr@jpoUV`f5obU*d4%TE@YjwN+P3RM`=lKGPHPqp_+4hRSSZuw4O#h7O(7MJD_y-8lPZmm_kh-6g$IX;B^;>vWZ{?A*;7fNUSsta+{`bVtw(U)tJE&9t94B}) zz~MW=6%Ng1oVLqKFq8^F1#Mbs2B=*LJ;RBwl~+sCmjIj`E>SW(Ym_xS4pL8!zD$q7;{`8x=W9ZX;Wf%1W@_ra2_ z-bt+fHXZ?0h(n9h0Yhz>?`X?Z8M2--Q(6fi^koAEY)J%Cmc;T+vQz5A+`kl}alAvf zZdS3~vvZLUbtD*9pC-ynJqs;f%jn~3>+jjyyz6m0Gza(WGCyN%A1b`C4ZmC)-qP;M zJHd)oG=&pg<5>8n$5Br3@xSH6hEB_d)t$TN!h+VknV6s+;_))*J6pKGs!6z@n|R~1 z$%N%CjF64xzYCY+ zsIbJ(`tRjYynau0rgR2(5ewcY>F?+9Hc9qBK*&(^Ci<%OK_Wew`iFQ?!!OrspX-BF z;9(*YA0{jK2#@-;qU~f&{|W-T+&{~j{-b1!OiE7hF@n8?-eS@JIH6K!C!eOGS+Ywz zgS&Z2$Foix`=z)y#bw>KbFp-V_WuPkpU>`b+Pv0WOV3pi-%Ud~EoUw8+n9}LA7>_veoO%<_qO2_PeT<^oUJ^=(R z&6SPldHBDJ0bVfIB&e$)Xdd3m?#7ruYo;;J9V;Cw_L)LHtG6OpaY-u{$&?ceE0F!P z|0((<7WMS*MctG(HNg9#kuf9qNYU03d>X`42Mhws28fp(jr^Q@o40*8?jy(i7)Ha% zxR0zNF649|b?LL4EtqLN#GcMEt$RA!NdE{p>VF0rR8cy`oELp@k09V!_ZmEMN}l+m zqz5Lt>>=vLCeXW(vGz?ME`Zo}vh>s%E10TD#9g$kQ*(?teVxtG6Cjc^8%Mp*%pzZE zH_lsI8Qse~@A|m?8MBN@5VG-A{RORndeQkv)pD-4E8SGXxC;L&dgC5pF*^_?mEG>n z;Ikyia1oW)%MoZMK>q-dAmrf5uVN-D7xS`RgL#uecgyA)MD5#?vlAOsH^-!`rNo<6 z#BtSOEn{sVKQT&WT%(j!o*1Bl1)Mv~OMfc*>Do0loq)I0?Gyg7` z>epJda%E*Ly*l2^Os*pn-;jFmsfPN`_jopaA<@>#v_c!x64iT!PVN8^*5O2rYU&?< zj)My7x0MYTZ-6te!RLV?sJbV<#>pEpJ4IDj#S;Em6I#1SyK?={U>g$p=7LQ(A4p!>DFD%;0X)n`KRDV7G27fTY0ewC2=~5kTSHuwqxjQ>MHG{72On7w8UFd z=IXWgG|JW=n8J50MR$LN^x#3|b4Px}8!4|6A&^vWF!(Aje2mfs;+LCC&O;0NOiSyNR#Jchg!ugDqE-#br^dA;fP9mcd zNIWBCW|}}oiWwaoGtLP9H^EbVgh%i#9wxSHvO9jtmy| zY>p!1NIN&FkSbl(~aW0Q|q{qSFoEwR>nb7J>e3EA%6~hnAgCbaD%H z@N*%Eb*=vk0+l~fWAIB&+5nFa+r(qVrV6r~9lg2H$oe^mM@)KyO z303h;uk=c%NK;JTHPA=fWBU9&nb0&&-)LimWt_}p*l~rcP5P0v4~JV$@YrVgu7qjM zo-M^JoAt6lnp8j=w-rfgkqG{W%Cj@^)Jd)3W@JIGKPkzTBslAqSN@BRoD?yDa5;w~ z^ZRp@?y*E~$#wi;0J`eyfsjRECm(eGgA`*j<=L8==`q27lOl7P%%BT7{n67A{F5Y| zI_EI;g45_siDQ9f)J~Rve1+}*OAtN5+{sc^F37WEyJ!wQRX^2KKjMohdVs= zxPsS|3Q>NAO>pjYbAybg;}5YbuPzRQcG<;HH^sbe?Z}{0p~%tYl^h1`YBOjnSpf3s zN={x}2bZ+iW|hwFnPsufHs0)^*?t!Q;v|tJWx|vWZX{N_rRW?l?ac{h5tOC2tS~*~ z#G9iG3HZd5HYms(g5K-^QpTszJk@4nheJWh@(S@>T&6!1GLDvBkW>;s?tM1!= zU^^V1h)$(7DtkCY1u2yoGGb^FNSr=XL5B+Qx0dk$er=rhS>F z4Yd((AhDk!tBch))w&ENQ`#KdTCPx=M-uOliFhZag|**HvSd~RQ&km zMndOrtUQEntj!ZBE<+TI^35k>(ws#9J*`EnML{yW-k(qTtZR?-HV+Cj4DFRBydo3$ zqmc>R<3w4Me_(?>7<_UQY*>>X5VL%EgPs@eNi+*Qv0+OS6pV_a1vI%E(CJvia|T(P z+`>cGCi+!h__MaCbyTJLDhp_%%w=i2u0a!uTWj)jy}=MUtn=;iqUaA3HJNa1UW8S* zB#XsjPiEI#7F>f~#$PD7WU+{qRty$N0p<$ny0N`F!$aFk7W~Bk*lcuQ3z{XQ%Zw{) zMmF(^w)3mfjsC+j=c9JR7fr=BLaA0_1dC1=7!kJYH`NA-35$+k%bMXr1n9Y7-Hm`n zYmJI5C~E9yaK3se$b&t2WJ?R&0HZ9MbE=Y+4wez|Meqy&PuU6TNfGA;4rr*2X66W_Y_P1@d$LpOPY}qB# z(XBcaS=n}Rou;mA;g&QcDA9!O(iu$RWkRf#{4sf_GNAsW>`qOt4fu>%g$IxK%!1Hs zmmOZRQp9qz%TklcR98?ifb$3l73@V|>?U*}=b2f%#oErv1bdTHI|OnvRt%$yf9NmE zziZ7Uf4Ayq6eD$|A{3iDVLkzjT{p>sX>v0-^oZ}|5fZ|q<4$5?Cw=zD-APnz(q~89 zokWt8>Sv#1(Vx`)-APDF`gck$3*w~g>$#IGF_QjkB!mH%^!K6W%Dy}%v73^0d9+;l z6znHCSf0tcJPLcy)whBL`;%APBHuyD834DSaMA|XTuB4A%p?zSC!c%n(zRQomAKU> z9mJkXceX*uw-$d~KXJh}Qd^erxX3@UW~=6HX+;vrgKOm>6TYu)s9hjNADqB1(?x2g7gC??j=L*3{yJ@~FL% zjd3MZE!v9}XLe~OtdSgE6X*E{#g$ztVi10yk->B+zKph3)CES&Gt^`G2pXcue$yz^ zKo;(?ptXgKhKMShW4$tq5tT^%OS5AB*a6Vqj-%R8T`7_oUf-5BmCW|?UulEAQsg=8 z7-}W&>C3NggS}G5Ncf_*w5Kos$u`(4WfX%>X}wa$UU*7d+O+cFo7(cP zl(88;+LkuG%>0FI^~fj=Pi#w@R)&P8P`|zn_DazV;rH9pc2izEJ?gXR;c(faR=UC$ zwM83}B@Wg|vicj673oMFzTKUXI%jMBL6Plc&zrq=YqV*nltme+X0esR&r?y+UnApV zEf2#^q*c(J;Wx>mNW&)R41W_-72a+jcO3;H03CLnL}E^LhWW)&i|Xv1C!Ya$eGIHB zp;xf34c3ESt$|s_XFnnSX&ciyMK!g8%R+IsDasWmz#AzA{I=bqm(A>q@&By$MQ1eI z3`;TV!^xo=lA?>19ZkQ|Euu8!udY)J=e}H{ibGCo5!9*WEgICh&)WfhohCDzz3vs?WcKn4Okd~^40LPY`G$9B3 zLY+9`3&Hr3JFz@7{7WqItkQ|DV=7QNl z{hHH1-x{$j6G>0urk%h&tE8$YLZxA?JCr>+pY6%&8NKiq(&BSOmVejiWl_=L9!nw_ zRhgO;DIDK}7P`a3P;c=`_wN>8Nf0~%W}QD~#P=u?U^!&*$;SO|@tyO`_+F;?q#rCk z*+D;WckR998S#}?@2>1)&sa7-XK|_-d!@Ctmg^ZlWh6fLgn0?Xo{TI#gZ;db&ZuGE zwu(r$w320wNJuUn%LgLIO#%X#E(V(@WaR2)jTda3BIi?N?0$sCvSG<)a;$Kw<+t%g+^D06WA~k+Tm=+1B)r5I{NXkRfs; z5fXtrijaS_M2&xpfaLo9W20QxekSW>3--HPab4{JP2FCndZ=dAj{~yTKVINVU3Cr= z#4+QaK!nemI`xD^XZ=Kpc4M%eq=BAUj8d^ndC7Dn7U{j~w-6J1R3rLOBi5Vcb=yhE z%UR;4tQeC1bHTd$etT3cxvPNoix&-YO{^TiV0XkatuuNl>tInZLD?wJ9}$gc;)Mpj zfoThk_`KU|k@1am7W=dfe}}9c(Z=Q!kuClF7R1f&&6Nh3WTk7ns6l!Tota@v^K{xQ zN6@4dV^1K%96@Vof-5(+ilVk_9M(_=+A3$bw@&U^`VV^q`c>>)$!_QtX&?TMWb^JU z-5?LPlHpWO*5~thR!@<~sXQijIjlXnXS2^gjVKb$y1RNh!Gg+JuYU&NrQ%T96SdlXS#G-T;yE5@heR@d!+69gomjy`nc#EP_*1+)SGw5F9S^? zIG2p_BKx)+IFIgds^^hzXVj|@P}yNiRL_^R3wY$@l&{WPgT^MeWRg`AAcG@3y7@q- zE#K5HB-!7_LnbU|hj7Wih-mF%9t;+DoN0wKadN?j+r=5oOGuZh#C%yBRaH>z;l=-x zwq7G>tI{3a&JN@==?7pgFHESPHs96LMWxHB)Tv6B_?Oyx#qA)wA5v!i{eu5 zghVnv9>uI*At)aGPPq++8>*eEbhd3)vRK=$iTrd54pF<7JspAoVb93c3&*8mPT4Ax zpHBhwes^Za3kdlyscHUgry2Zy(xdd2f2EY-4uoC`=qHzO%${jV={@hI=XHwzMJV44ciIE^8q zzsiIgmzqmc{s3b&e1Kp}aet6R{e8An^=fbqKlGio`<&swgdiMC)vqB?oa?`o*VZ`> zor{CTo)yof$NHixT3$x(7)M)Q&KrRg!H{Jzzb{pN1xeLwc?<@sEy5?L-(FNgTYW}Z z3yzVo#M06zw_Iw&UP-B~i++3D-QssxH}Bw+TUh5`M<%M&s0<<5kbE~iBO(Xo*@UFgABJGV3dy;#PrZs|(J}yi9dov=&xR*pYQWX|x z3SVTk@rFxiijLDxIgMIe-d8HMpzX7~0WH^^G&mOA2u^#W7Y7m8ZbhD2@A{A* z&S56VE(-ta%C%GO#z~k*kiRok?wrc&Kvdf%n#c&9)4Kt|yA=H+OnrIrAE8mKkq+hspLZIxOcf`crbK zl;ulyWKweU#`ms_^rdV-xBX;erg3w-omWEI$J~OBnDHD_R!$Nzy82u5tGCb&H@KB2 z_hhw{Ta2vRgHrnAj@ETrYsL++C#e%^3GdjuCIYO34lh>$B7A zXna1Ufd`-sl=NxY<7n_$nA-U2E}k@cNitHvD188F$n zp9%q^^e(b969s=i@?|!Xo}&d_rK6m3!LdiyXE~}k6aFfIL_LUJ(vp6{e=7~ANweJQ zZG@cQcFPD=A+0x^*?vD4VwCUPK^Ij?VP)B|sO~!`3>C^+ZkswNnlkPr8KZ)Wkmk>( zEpH>*lG8Gy*%meKVURjI^!LxKe^|V@RM&~+pzCFO;hF|VA&YaN>t!Mg;rmh$O3PN&Je1b+ew-gyk;G`i2nK6U;1R5^*3ND4t2 zN!~=V9$CtbUrUL!o>}TLC9c(<$hvibz2Slt^EKeU>er&aQB%o`KK=Jlv&!(;!!c}h zm}J-Pc9=)LW#+>=&RRMqprz;8ekq+05!!5}w1(nO z&hFSDlq;PK6wQ=`nmiJE7>!~yKy#QRk~Mj729C)~gjv=Lzk_EN2p#%eBERxN^^AbT zvBCRje&zi`mFU`s@A9<(p5W7kDVV#(*xu%s0-+K6sF)?aLn6i6V6%>7yE~y z68_Aoqi>VU$dhaRuK{cNGzVVHsiWOma|Ser*3PM;Z(4H}Xb!ENQ)jfa<_yizEVV`E z)Defa%yl+XY>+v1c-@+*^e%&5o$oEZwoCb*qj^fZ=zmCh%pRQ8mM3cQY`_;=y=`C~#eXx6sd*ZqN^0=z6(}F}mzjY%7_2yLG$@ z2mNn>37~YJWw7#56CohIAW9T&Y9dmRp|7 z|6*yxI8tehWv~&CnM5+;wB(o8Zq$-Y&%ADzlUedo%Zb~Zp-xhAlIM5rDqPTED zZ%&Hhf?01+isC|v-lP=8g_7`xNJ12snk(NC%+fX1C-xp{C8lSYzDriQmo0n=Y-jZ^ zKWs>cGdIG`lp6c3x!H&J0>%lIHd#ZPp--> z!falNS*TsG#H5=(1X%}Ay_))1Pl=@56~?RyzXllxSUqwVgIAe{EX(gQF&p#y82+P> z&N5qKb`f_c71%G}zeg57JQh%rsm8+iXM(h7f1WA&ZKnOmZ~Qis$3+ZmEj=cjSxDgV zm^0;k6w?OkZ$3yfT#GjNK5%f(b59r7!zw-rVLE6nzRCi&BH>q}o}k#+;Pk9Mn+5-* z67fBpK-YGS#>0K7gw|0w#LIDMgw%hM1bYYhP6<6pck~WS{V}EB2juaaHU~kXt(Z@J z8$Uor8+4EC__peFi%hHA6qDdf6;rmfc3;`Uu%j}co)gE1Tf>CGvdOkGqlW#I437uB zm#s=T_@T7n{q$y(pv{ZIyab1Kd+;Lx{BaEJ|3pI4b{s9)UG9Qd_vO0=^W9OE`B_OX z=XH7Az22-vA|8$3nrg)ySNwMo_*3{vAN#vg5eG$TbRF_J`GT$OCOc#{_WvIT^23m@ zH}O9wHSs6%jJYQI&Z`VX@{EN>s4B0S1UZ*pb%F?$2(rNVXH600uJJ+gGx{TAT#UdS zkP62UtG3RSnNB+Q!nh;t{^!5bxpzQSWmr0w1&v$7#-ejwOa>V|I$Ua)b=Z!(+=Y$K zNQZZba$ICt5T1Ax-wIDWo&Of zF1tUiHw~K6xUV+T5F9q<1^kcuO4c{`k$$P@Os2XsV7oY!#I10UnQ=%y60=svh>D`4 zUnVY8745lf=JqtjqN!q@U3>Pf z|A9KDwTBgG~?p zrCz)KTnnCxjHN|7mYf>Kck?&mPNnu-UW5#d3KMW+}pBOQ2$TRsidhV(c&qA=lP1qPU{S#QdUn&me~T}2c%vK zIxC-IMhedd7Tx@&Eo*tnkwji{v``cK*NkQhqXYFtV!80G6!ayKevS2~@aq9W?}xVhb3auP*s%*}D?g__C$5$kiGIF*fXVAU*1f@5Bs&Upbz z7qyw}$66g|w6{aP&$a!kR962XG{}|m`x#AeYLYT~2*=QcW|YT&6K521(G<-xYyE#p zeDq6B^%<^On`EStw!!vV9ghnk52?AAun-hMnYB>!Ri27^?E37%?cLMyXx^`3BM17 z^;wTrnL`MJ6EMuC7D*MaK%B}KJJOV=hj)cT)%No8;*>OooIYllaym}Kon0jPKDoM&(=WNbB_AU;MJp}$mI+fB zU{EZ>?Q0Jm$#ARFmC4ajr;0Gi;VBt!5|lT*vEL|afP^dJ1Pzc-jT1B==cywx->PEH zs$RvMkNB>kdNcZCs}WYTlJ@MRUi>WL6It4nc^I9S?*p$E)VyCN?@~SLEXTi&cr4c1 ze@<{Ba;*o}vT->^yX{-yimrfUG07){7Hiz^N3PkI^F$Gk8q+M_lSH*<;`*&@B@F#0 zK3dtA(q4EeHS;apdXl50p;>+>ea8sHzUynI7yVuc=Oa%k=YIrC9hcpYC`MlBGYY(JX07`$vUk|Lf^gkgjdy;CIk-_3DW(+85oL?`PplO_-g@cb51b zw4f0YTtfmpE!qURSbzjB#Km8e(BIwI{dmrSbg3KeU5XY`YMcdKHdQPh$KL^a?P}s2 zx+_uy;T2C)qBc_rb@4Xlij3afXl;NN9g&-+B7$ycX($K5+^!0Qx+rCuCXh`h)dW+A zJuX`v_Tpn{&RJiFxAFtN_G9OxOKkNKW-%Os**ws<*~-Te(I@tUYUh>YE`5qE??7a&y}enG&)9|M_* zzO$ckXUFc#rp?OL=19h0$2;s`lKb}X8^4>Ud=NZ%CL?> zJ6vQi#!LAk#37g!Sz-oTFCa@aJ)C5+8h1TJIrX{P1&N*En)epV^8hV;E2nOdg zHba-{Wa2){h1M5jgj|taA zkkI-vo_UEFqVi?*@sdHsOU4R$G6aZ;Wb+b%B2n}hFKIQ2qD6?|7Lu1zUr^>m+w&Mf zzabBcXHwrv+g;G5{%E})LnP4UAj;6O{_CV+yl;}XDGg}8+`kG8R(Q4nWBk_xLXNCL zPP8#`1-Sk{wZs3Lr;k0L4gdr|p_l6KYRxu7BQ2m&-cYng;gbVAqEz0f%I-ht94PBe z9iy{3PnJp)fkL*pH5QOtV$sHLsoM3u z{mmTJM+y0XDr7~9G?&9l-$rm+n8+1}EM?nnQ0h=w;0JV-6Ul(vma|JuX-=Gw2o?y1 zMveduMYPVy2=YrXmw>FDYmHn zmB0fqyxIGBPz1zZM5b!|-l-rqwYTU)Iqr{9xmtQTHE?c&-6OeLn(a?}PQsoQuyUnm z=8}3sE?NH~bu7;&^^$zuGeLsq8GALBe*~G;dwB$(=TZ9{4?TMzx^o_KdX>mNBW4LC zG97N%=#L1oOL;_NJ85K$C>#J)3*aOIDZz^m^0Pjt?JT(Jz1|oeyvxWLTHlJ#{x-1U zvotEhc8mhp!kwzb{ZfpValmyJ(U@Hi{uk?*ZEpYQAw6`#BJ5l7-asmMBwo-J{tcF~w@ivOyA&LxCD_w zX+ZD(CJ{QzTbC2^Npr$}+uo_4wxh%5pu_y{$msHCTeUs!b1piT~BZG z{OCU5ed%<(3ru)Cuo1pl;A^s$Xm`X6{9@Bloqr6Hf5BeYJq<-DJ@ci+U4s zM}v8})*I{unuEWBp}sedp~YLa>G=wNx7{>SYLd^U%X8pWeI;RF=&jiTqtTk=u=tiE zw;TL@fUsBC>`TbnFAVy~_v7y;$Xc7sX?Vx~Ih53-!PuR@AZ$kOh=5Qp@@WgN-|&hW zs*MWv7gTzR&=wK*QxlWpk88f%O(C}KD{Pye0DE;6IRn?v#>yPQ|0_xS7zax3*Muso z$-HBvPuteY^$WIW58pA;-(ZbpIGud&+O1nGZM>S?-*SO1;vWFc%aPCyRW}f7dsk;@ zCpb_E-P!oUt57?L6sNbgMqc%`JZtMDSkNovc>Pv*QK+pa(aKXo&cMVxR(wwI16pJ4 zF+MoiG0*A?cGx+gkY&&hM~Su*Er6=>EfIuGYBp9;=&c-E{0-D>Fa!fOab4`f|D^BQ zI)4$B$i)6j@)7;|e+a-p{crZQ(Go8DIS<{}(l^Wr`$xM8?DHqNS8nv9p zhOgbo;8%#1 zcdIa;F%A>{KZOpem|WZTFl#G^0WMz^arWGPQB|<_c|=45{>hDUzk~=dk=xcy@En!~ z{BgbgKKNWTNqC87A|!z!u2U1u#+b?b3U zluZkc5!|fF?EU*=pXX#2*I=w<1swmJ%9MKbWW@`fsh^_`=1WP@O}wOQd3_avq;n_N zO%QvK7?De@l!lKqIH6rTo!w>%Ey$nl3e4g{%zsMZW3@G-s1X*(a!PFDFYH;e<58PG z7WoX9t^iJ#BY@Grc3<{->E9k{Rdkt;|0@Va3;l`V7#t`3olP8ndkpsmKw z=q#bi-#>vIRrZo8vqF?9L7S;l1vpM5W$YvN2pwyynA;X*tA?Dgh#a|>OeQebzM3j@ zLUnz#F0$=jVvgG$f3s)x#|?Ij9~X^r_Kf2(Zofr(m9*cf{*l&3_MW4^>1*vwn-Pt7 zIjWwh38apXq+u~_UQKzY!VOE=+8@YqD$kXmFwgNP2m<17;T>${ksZH^xEq{IIA_8` z=#jL3`>PSP7p;$;#n`g7XO($ClA1E{!^1>@{td z6FIhd#oz)8RG$>m5-^0}JY_6)l|1ZI8H@4*9%?no&q(ON`Z)uO-;ih-SfUeH=s1R7 zs{Ow0OUKOVSg^cfw)Ca+tJtxxwc|hpm%Fio3&D=KVI}v;3@38NCYv@S z@;6HPMD@><_qS2_avW}a+-k|=w_3%2Aio*SX1sZwz)ovcmS!1kR*v(_KNX#Ys%bXM z`eI^z;rJI(i;2EF&zl8%*>S%H+egMy{ORCk^Dw4=sI4r8vDyyGf6_r-Oh(^2yZf{3pG|? z$x+O^9TEt?&PZdI5l<60W=bDyfS#L#o_d0OehC#cYGsrMqNIvPHNj=l1jjFEl@V-6 zT2;_S#=PL$4}7Y_rs4B!N(;IcGzm+mm5YPG@rHkcrsmqhF|6++d#d^)SW^8l57vVD zxV_Sbd0M%i`L#@_khqi!MK9+)DM|bgk-wb?7K&_?KHmlh!hgWd(UTSpU9)ZNqPJao z&l*uhocJeubYOTL@~J!?CNU}P3Ee%}s@m~F^6fgWhq!-+kR<01gnwrW2L9NcT&TQu z!eIeYE9^-iYcHa-6Q0zbc!efjOQOBhrB;=M`VOA8ngn}mbxpZaQYLvYK1Cj-|K*P_ zWJu(lsId}FI`tO|pcbuPEkP|_ti6P=6TYjxb|Gmr+c%mm(gu4c?;BOduOUO5rgcqF z&zmGY;rK5l$A1|QJK8%7{>zDUl{gtAS=IfSO#&R(r9{97XZ#3jRmcLE`K3$N5D|Q* z8wE^8`FA08P)z35r~tj~)4VBIi@__X#?-lCmV2?Um9QzTw1xN*1_dPBa#IQwqC&}* zLdwU4`7-t1to8b@6lAT{Z#JA`L4w+`Y1QfAI-nzB(nap>)#TuMQpNc^_7xky!4i00 zgFx7@l{@W|rDfCb3U!>~5X2F|_7_ULWL>f%++voFeZi(E_PQ&XuhNR_8X3W~V@G~( z9T&)}C2wkV)=SXVy0;*vEnt;FQ6O(6aa!TvHG*=qUU@C=Nukb$q*p38N}3P_i*>$e zjEzELYedZ($km`b{MGZxAvvkP&WbPwSMlliJg8 z>FDu`+47cOIMV>9E#|}t8X&=o6Er|VPn@6u68Kuv;?MvIoGq{k8n8S$9p1=a<8#G6 zpM%kysVMs6`VKFJLVs@!*WXB6irfmn7tzX_hy*wDu%`4r3W5e(x86rFfP%1D=P#Eq zV=Jw{-*=11c&pvc+Ur5O7TC%4Tb#C7(qB(mU4=PrtsClL2uIVBPO^r3O8Zsz{f?oY zTXpO>Rn4vntX#gMR)~NGw?JpM#IF+EN+5>`x>jq^K?SpQaK)^1&71`o1zaZPnno1AcV}Q6`Bu z3m+2U3+c3Ql85g3gfExqYvbsg4#(dgdhMD%5#A~pZx#l*tG*2`gkj%Cwxi5U%-3xr zd*h3 z3d%Cn@mGLSq-iaV!j}4Oqaf>SbyV1NOO!1TkzmHb4@>TfTgkTpcnc-zZb`ZwB;AR@ z&cQ9g9R%~qMCZH-ZEZePxl>X&-Yh?4PZwu{w@H<9>uKrb$RDz1;k$Z@Lm*Zh`Hb z;`N8J>KrKyz3|P!g-{?r8g;`3eJecVM6b+!V1ur+OZ{GV;b#BcP`b_QE=D2E;%A{K z(!U}(#E;&2-F-HXJCVA)*%wtd(sfY_L>|3as^+$c7_K`x$`I*{GI)urAadVPwv8oG zZlmK-Q!qBWcQo+yC(b`BO^^8~K>fO=I{hkpX(`2i)bK_UR zEUsRF3w+Yr)K-`CEGy;0MGzI;8nN1*^YuTh)q@`V*57x# z&g=e1$Y}Wc_9FidKW*llDJ>m(uzW*?Fyt zF)bI{VVISUOzZ6>I_4!$4DvW{&rG>5qaP`h=cM)2Z3`}Szq6xP7jr!-fge@uEzTy% zcg?a^6#fMtm(J-iLyP@S5JHK)dd)=bZh}2#$0vD>9Bl#hE~g!zBBlCi9@`e(y&$!A z%fv~5eP(8`dlc;4bAP@DF#of}*gyHw#t7Zj*b2i3FqBT=Cj+Q9*pXcfN_wi&I{RLj~WxcaQ#3j5I;Vj1cip{RL z!(Rqdl@A@J+5g&yh!7l>i|pKh)rxSRv)awF(GR(ZB|9}yw%6`g0?u{(FG|2T598vq zez4k?NE!XQ@>F@XP&|P+WTG(DsGWMOeyGgFUstG!_)ESr2h^6oZm** z|22PvmS@YK54Keq@#nAYiBtLWF3X>@BL46hSCc;%$MR#pB|&nw{%>$*^S-S;HjOj! zo>{M1v9T#TgV6GBksV9K6qYo7X={LckH9ry8zX!>z8Dlp*h#} zKT0LKE8A=8-v!K8RC$zOSLqPWJbp|7g6~soEIRF}5p9CKut@Zi7;Eou;<86$ zQZ&_ym)b=5c?@$qa+qN09C4ZM%9!5V_#~N$fIVHg!6a-wv?;&HZEt?t8ueN})u~jm z;(h|Uly7rQeJO-`DeWO;T&}ddQx9dvaKb*|MyA0rA2rT}x&|A;e6UqUs-prejsQZ2U!7q32z31F>&%O7YbIZF0l_5=@i5#LU0tLf<7)FBOi=f;(r3T8FWrJ1ihr@BA6CDa*6tMjv!O^Ja;=;<|uG= zo3yc70zBDSLAj}f6V0rL6a<56I?8b;*j_Zg4hyr&yP29-LEazF1! z5a~1`FPhB(iAm{vhItHieLM22T_hIPZ~qJniyh1hVM!}W0tp5qJHTam3n#!MPp}@M zh!v)$WB|6V30jjGM|QG=nXx&@r)Cv!!;yCogCXUSkPsYEUyOWf-$fKYNk-A`6tqG3 z3J>%fn;@O7cfWE1p_>!3J0h@fW!}ypGtOr}B6AE;P+K9*}h+T@wKfb+M2`EE`O-Db# z5|{D_yUB00RLw+xw7yO-a&);MH#*86`4m)OQYc<0j>wJnX{sCh3^*dIRA-ULTt^;L za~i+-4EezfH_i`fatv+2vw%C)!yeVBSLz;{FLnV1!`6ab$XV={#GN4&l6FQmtcnH5 z4us-zWK!=%gaInbihqu@n4QRP{0jusCW~0n;AiKv?ZR*|N5)>mrh?%9WToX1Gx0UZ=XpQ|K;R1vgp z4I(0*p_g1QsXbPfBWI|-pTLDoNM_;C49kSexye3`!vmrleTR=g#kc9*!kh#fdM{<< zL`Oz&oHPTI2J`}m;OWr}c^n-2nba5ViNO^nghlEheNL57mAV4tq@p%>UoM60x5|?7 zU41*LOpc_qs+jTKk^^oh84;iSVECKh@fbUfF7JAdH^;HLmgX% zI<^c&_5!L}OY@8o%ddz?S6k_{_1Z<5uXO^k`y9C!yLq`I_gICEGC*JfHw~C*S!OJKgj(eXKGpHM%9!2vRn~I(+11K{(2vNo!g-0u2bBS0M&rx z3AQdtWB@Tzj!rag0XyNRlL1F{DAV9V1&ozbyxheJfL^0qses8FX*=PmM%XAfYgaji9Iy7nHUQ-9H*1jh zgUq`=i`?T5&Y(1+;Vzqr21|rFj1R)8&xKRjHZ3X-QSO+reGonY3qkwMN2knX`hknU`x z^UF@$cx$vyZl_{AkDM35eXYS3umQNBD~6BW_%?wHEDI1x^N_e6qLskin!)VK9Bk4p zgpZ?CDtBhANI1#QiL4_lSfwAd%Lf8D#O{x`B?Y_#!@*+9{Fdca#>&sLT-r)E1RT8? zNCt(0$Qe??w?71x{G4TTFxcjIFp}WQ9%B%x3Bx4L=RL48=f^9O8F(^dEz&ZXViXaB zPk7)Eor7??AmCi==r#qW)L8`d<6J?_n8D^m94K(p9tRP?A%Ys7q~F%PB)>oo9&U>i zgJxtnDug!~JC(r)KL&lwLL;JtnYPVui!Gn|*uUqG;Ko91I>B9U!8U~k%Av8iK@73D z(TlP9g)AN)pgk6ThXotgX$5Q6fGv-><`?Sa@MO>Pwu6;l_{XX>b{4p7=af4?g9U#? z3!by#7*sWj{BMaUL9LY5R1HD#rO=($kC|hf8}!{uqDob;odWAN{TYve^-sRht-%MsowbGp{2kOWWnz~U?9y=PqX*@7 z`SsURe$C5_>nr{_WAT+2=)*CYGxqP6$ovz3$i1)2PwF) zO;(Qdd6O`#x8&yTio8rKKQk1^rAJA*?hVSAcK2XX$aHq^R&e@4(Xym(V4uzRjc}1T z^2kLUm}pM``{DXnE7B9G8WZK~MOc(*6F_lA7jP^NxYEOhYOhCgu4esbWKPP@!lEt; zQH(+iuHwev7Pxzyx62kG#=Pb1vn(^OTfP>^SjI0?P*;y4S#6Coe)$#Mcc5j4ZTuX- z>b-oR2aSOJs>4jrOpqw`Hxn{2r?Kc{KJ z9v*%-hwSW-gHr|S`8n<|1>1J1dNgGrlaUjF*l9yJOiz-vCcl}08j&%FKhXy$$olYa2x z$z+V{+%IfAAno_pVni0S8SPwthFK6!73sR3etU7~vF1=C9l%c;kSqsj@&y*qne)ox z?9|o8sLKp_KNd!SylC1%ShB(1lZi-eB9rNQCJr2=>Og7?qN~ABJO)0>^Kc+M6pjpn zpPJ5f&TJTy7+MLOV1BQCZZ_08##tC)SWO2k3x+^fCb&2`ot{A7+3?;zMR+YuMCsuq`aBTL@L*0Hp_ zb%ghFuy+1`2iyMkU1E8#tZOJ1B=(QinNXbdkM3@YL@N+F6bW zXgj)p0N{EPUE~s!K)mwedlxPOI`a-z(%H&iJ5WU>mEwnEaG!yEC@oc>N~9Y;yrDD4 zz?&_lc^ddBZ>xcnOv>5__Y(UJ+SokFdaWN0b^w4bWX5_Swx(hz?#Z7C0>SO55>i za~vWIBO`#@!xLNEWUSp}?7Ajnw|HXLC3CyU6T3Vad!HxvJe`(}^T# zPh-%cB&hu`x0FTkQIaeL8`2miYjso67P2oog4zt!k47TS%V}_0d!mj;R1Xbzf_MrF zYTQAQC`EZ5RGhoBu~Gh7$VWpLHtb-3;$1XJJ;pMaRg_^93%>lL8VE$nlD41Cd z*|8FY2Lm1VR8l3wGm8dT(LA#w%Zl6%#^2(1aQ%*pmx78#Y>_@-&VZCXl}wKvFBu?c z;g7#L_#=bS{AeilIy^BS&|{df;c1Y!@gdsaMKtD%SJpOSK^j}#>aj2vyi)w(dYE?g z+fg!KwDBjwshNxB<4E<@0DkRq!a_Etd7xt@AosXX0V!>)<7ZeM_ec&gu8RQ5xOfSn znA35?h)_-ljRd2tIufeciY&sBwx~o*`)9&p9f*o6ti^I^(C$vOu#gQ0-#&wcom{N? zgMelUp~Pa~dJ+^l33eRrVq-@VIAW$sve?BKoW#JH1Yt_~mJuKy4$ww1fU-QH;0`>j zb1N$i^s4iJ`oC1-(1wY$W<_k>rZb12VB~YutYuKz+Xl`n8IU03^)sE_qGp%Ttr5qzP)#M>!sb!XHgw< zwXO%vj6fWRznsNoC~kp926V$iH9&X`h*NataS-x&hIteQ1#pwQvfsB?HJ|!W;t?&T9)tt zxh%j*2$Ux)PA1|Lm;>*#!GZqD+6Ph94X8-0srVBcQ8i_g_18*ZCs9Tmr|B>=^BM@; z*nkdO48#DY6Z_B^;pSI*FInf$#wPqgib)Syxpw1F zlt=7F*tHUG(n?r~LBI?1ag~5Q1YWEDeN={{$@s!TO(rR5GWSk8gsu9Cpy$OZa9Mg!;5R-QvS1$spX}9h1@r($gas2~ zydag%lJ0bSZc^%wNtZfFh*2)mBO$DXo1s-dMWl{dZ9okSmiDTY-)tr1qKi-qr=NvyCv7TL1QWALleJPtmJCRvRh0}vxrnycYMN6s{`iJjnO zOyWdQO%@_KGOQ9e1^Wkg1e(kbH_K#W+^_M)^+~GsR89L6bfkMoZujHJRJiJ1 zRC5Kn!xE~FRHqR)WKYKrrJFpfbk86F(#_J!TL*wLP6hlh_=wM6`(QZGbz(wgv8Ew| zPX?`o@RE>R1lg)%RyD7H33n_z2qRb|@pghjvB;(P1i=m~R=xIbtWh-pf?Mq3UYv%@ z`q^HZ9Kq~PH#L&7#7Vj1*i;s*N{i=CyjhgGh(laNa8+ot2ArCavG6O{sW0!Oh;FjR zR5$T3OcT1<0FmOKS2wldn3B3Fb)M8svh3<6`y|ZgFpgmg)lI5SN;id)=;q6gZXOD_ zeFz-rCMG)>HXB^@@lEO@$H6z~I5?)`;K4c$9-15nXULn3nC|A|E<}zpkIBa%n@h6p1T^Fnj;NZBPKMDthx#DE;wNc z$wiQ@I%ZYV>wuKzl~+UU4omfaLaxXmw_|RSmbZ@-oMIP8bU~_ux)BJNqdt zZ)Dhq!-0P;{cHl!g^z)O`O0VbX_$w|vN!zknW(1na(^6KwSyJi{M-4_Pv&>=*@P7M zx1*2Mn8@LX!TK+zIq^C0mL2Gi&%+{N%_W&Qcy}szJL3J~lo< z(GwwTjEHw3s1`m9XZTYd(O+F`Oq_@)E3pKwes#cvAs9g(TnWb@s56C@$?Ow|7#8B; z;EtG^5qKyR@=kU#%vobaSW<$>gNn~rj1lpX`5o64UV2HzhHDArT4_*bg!QD%FmG38 zIJS8~WQHkJX4nELnGs4NGhZT0%FJTGZB`Wgar#+a_%S}tuvr5lKR*E5+r*G+w~3d- z>x^wWBmdQsKjBTZF}8Fy-^P~NhV(j*WqMB=XGC+NQ_#R`fPnfS6rRW+v_-r-8}Ves zu-XZcc^D(&-3VGiWV952?PYM#Qba>b$vjMmp*0A%5|U0D3iB|s%Z6g4HWYSaIt|5n zINRxh3sUVwQc8mDB&3q<#GKuBiXz>M$$HXuVl}4PNhnD>{e&EY(gyg3M;*5C&UM2| zQrqn4aEYVC(AabxrpCIOItNyAA5FE%u;gl=;_#O~Pa{GT?TF71&9|eUeYm5mOy8&- zSD_tm)pjIQ6tw{!`I>B>1|J)epy)g_8zbb?vVA&yP*na{iBrY>6Wm6+=_)4CY;=lj zZW2Rt4|544&pN{Qww(r>=j0)cex}9u6r|Cau{L@ZW2l{OoB!hNcIA*OwDWQ z%2Z`-TV}aIvXnB8M}7-YM&8rM%^1m(6MP^LA|V^4qRt7yj)BxSm+}G)$gQxEhaGdv zrNYYEB4&cAOxlv#*$6vAyjk;4mtn$_GMrjdYY$q@_BYw46~?gI-!Od>YYptwTi_2L zGh`t(S`zITorYC4tg4vUPjrgW_s2HDfyh6CADAu@qcz%sUtMUp5I(D(qb+A83<)T- z#KaJ2T`HYbKerK9k&A_KgiGC7jzIl8i(qF#^NTi?qZPY{Qd0*E+qNI*w(PdZk)W)z z56QmRB^>k;egI-&CCIR6xkB(uTzqFCg3PBaL2*|9H^YN<##*3L8 zR)7ey5Wxr?EnWg2tN_#KLPSW?TL}W3^$2pP>k%YNfGzpAbMjZiPvW%hgj)&8L2LjP zA}AXKF;Z;+J|?OS;9GCB`}~&)8R4IId?#fRYP1JJHE9pXgxd$u2D~gbfGN}lP<&H1 zKq!d~C_(150p|d2Q*z)xkN$Jje*yihJ+T3uf$i<9F9pESkIUc%1L^ufcv3&wC&yzw zK;}2}10T>G{a||N2P*+_QaN0cXsjQcBtb*EMQ26pW9a=%Y!98D5U|)-IuFBvqI{(i zN2+YS%kisxU=_JosA4J#)BL|GiV!Y#2@moTRz)Gh z9z_xS5*I(mi+>cfujV@FY2@gn9twJ?i|*)^^6gpR6RdVFmZMjK6}GQI{;a|)@vC}u zEsG7kB7*1@BUG=hgAaPeG_GFJZzTwD^oj*a=@kLC zj8whq#u)akUcDLyIpUvJucS;ujd~?ilX^uayn6MD=oM3_UQz5*dL@)ZukiI(^lB^M zHU$lObp`#~)PEKItUb{yd`C;utLp)9^y)@<9lc7;;|UkN(r>+~^}Q+(YIc1O*D07+ zg@301BkOyUQB$##>0lM!#4u+c6J={n0Vs{bVEFHU_S zwr@jXq(z6uwYT>nq@3|j8P4A#=eM}VX4t-+xFP!vO@d)AKQjsdS7|rMr*#P&&3k3|5*@#;M-j4pY?uETL4nwhC?4 z;F+@KNkt`;t)=Fwf-(E7^WX+I!#}UR5*~yi?Ul55(q55e*Itc6QC~~yyV@(7la##@ zN@B0@3195h&4AlC!GXQHm3|7F*r>k1@b>)=0^ryvbg!Wn;BOP+)$`~K8g43GdZJkg#;HC$4j<%{ zKeD-F*>PBe;tO!en5!7m#o$I=+0=>Ns*6Gq_tl8V@sR68#6-L10pPsVNncff5-B-rkc(a%bicE@Tq`cTd-t5Kouyoi7f?z7}mE;>{{%#iS5PwA@&S5vBX}4NsS!_ zval!{@dE{uDy+q&PXYT4aDblh3p7iGpZlZjHxYv_`Yrw>2(}Wh!&NE!bFL$0aa3;9 z)^;M2G?}*ld!U7T{Tje5a%>sBV?D=D_iXwmit z@Igwq)0Pw#vYJz`(A#lHUV*>RJ`uk;_S@viO7KVdD{}dZF(a+i^y0qHBpv@Fc(E(d zNJ!5(E%68NF^0cNvDl^fA==GNXeFdU5^N9M^F3%VNTn6+fhLNUcpeG5S9F05&_<-Y zH*kN`B_=mHgkp0-yX*K1*Ca_xJMYsp@dvzEz#rj`aKTgD-(v|Kx`#zt7Ky z$`5~(pHi2fn<4aWy+KmQu_GyU#CD~IRoNzB5k;f_0U;>9%f)Sil3EH%1sH{dRL6d0jASi<4B0+nnV)3W`SvYe2Jnj76z-U&; zG9YztAS6;nJrn!{3GmPd54Lop=xDSy>^P=dPCk0ODPT>75AwwG0^HeOgc}#o5p>%1 z)I*tiC<>~w92TPyIeeN8)MC&YjP!BIHNqI5#MsZpaEZu8P4-8~*6O%h#s3oyVQLRX z8vA3$C)6c>Hch@8!9;SslTGW75)e;%0zJNfV||0prJeLZ9Ix~o={*WhCJefoYVEZI zdr$$M z^foJci?H8T7;J)h?mLt-i8GM9m|&^NZIPAWR+H@wOrSXNT*LoE)wXx5 z_A2y)sj5Aep;TdizxsGYZV*=Sk<4S&niQM#BFV`{w?v2h4@%U*EfM-cPl+}&)NFmz zM&Q`qpbs0DAfA$O8C!8g>8+Ums>z$rU)nqJRgyTKw)h`ZMaLYsE}me+Bo*hh#--fU zL@DKJIJaRY{x7%*I^66Snq&oB6*|^U%$W2cS-ZLQhvP&-8Lv~I$&8UHP};iPZj8|Q zhcSix<9tYlYcf{id`QMjIv+{_**6g=eOF^3GbK=%QXqEFbCAU^Yy927F_O$JIG4sk zDfSOBSDjOFn4Owa2{$sQnuH>7PW2k#Hb;5z|BHT(7iCU03m7`58V9=g%!Bi7k!oz_ zDaWwn6JS}1PvQ1$p&{A)UXg1hK0~CMG3+U8AS>kgN(iy>* z@Z$bj?|BhIn_NRY3d}XThL{bT@s!j9)Blk*#Gg?@*%KEV2JMW+>6`%v{VV!Wju1%+ zhf>`AdpM7lT-2*e`itthk6IS{?C+2O_&@2op}SM)LdZAQ4WH+){XKC)_76haN_>M~ zT_gCB01UR7t87z3FT^-qBlrnEm=MV!Av6+YHW0KT7wzseG|$I6K`VCAHl?A-S{>#N&RSjj(P`^elCs1}xnq{g1cxCk zj4kj|7cMIm+6INT6jtj))O4o|^(YclQ`VEJ>0HJ@O}%UDd(oWy^Xe$+YW-5vq@I(S zMm8|XN$wecGbvZ9UliJuehDSfuOpB*_3LZEZG6+AetkcmfMGf-LD`TXr#iWc$ag#DeM!YhHwL{o& zrcfE9IHY7uD2a?6hukS+djPlp0|)+J>1SPwj4c5MZFr`ck9vL^bYVB}$u>g{-X?5V zD=QITn1@Vdg)31HU)?EiA`Ngt1*R~*8lD~?-W2Aah>52YgG)>KIemQN-JV&X?uc~` zyk){qhS>vtR!cdF5DcX4;|>7G$_wJJ75<_H_`hFtQuM^wWeCRZgA*!)kTPw$d4uhz z5D*Y{G13g1AQUx5@R&3~C~k}(#tgGF$C!PRZpjb^~&OqBBnIN-2C0exaBU8VN>ObtF`?5TwH` zaB<4{nC{4cGihapK)|H+F`0H+{}y0-K0D!IF3KG9h2c5E<-tT{izIWg1*OPEk&iD@ zXqppYLpc>=Ge(RJYno7&K#fg;F*G*b{%jg*kbhoVL&{oo+8U{Xq^%(%uDo%)_)fCD zRNg2KDR~o0B5$jZIc*JAl{4%%aNrNo&-xb`TMZ1ajI{&6k+BZ&B2%7qT#Y>O2N@w8 zdhhLzsQ1wT{#Qk3h<+0XH&C>Z^@47W_w{e8 zAGV1hWtQwbm>myvQGOUj-aI7|JaTK_a3PmKlhGeUPjxZ3k9msvXFT z+Wjrk4mcl;7@HL(x_2SlMD&Y8@PC6A*y#nR=V}c;YW@cLY4rF4ITC)YME4D5CT{7-h6Z zBc`1J_M878z4kp!-{_m{H2`8{i@7m-8zP{$vGMp8SNHJDQbwdN+Q;5c02&joKzVFD z@gZFblSG#SnGtb($_d*21UVr@5=<$NvlgS?3Bi$jxRK4=p^a-pf|OjMwy<&_9!}0g zw4=lh3sdeFS!J+LvT(ALj-gIE237<+2C||Z1NO{F$KZaC{pK6(4!FcXT1ta`fv}(K z3z)TQ3)mNYC^EV;eX6V5R*C?!>`(i!SKOG48f0UBj^_!A+Q94j*Un~xHjUV|H4KLU{+z9Jcx}D zX4FQc2&;_{)S^bH5CZa|HiAA4<1{h+P1pz$@z{uuq~K13;6T^U z!Vkos1mH;>42WC~<&AHJQ;#in`tgRfu{Urln5x|dK=%ehBIu-|_4}ve+(w)$1c#7F zkT?gV_vw{oEf3#HAcfn0q3th0uBU@XjrV_ zw8u?F3qTYnDeXhW-*EW_GABqf*pB50XAH5-?d+6fkwbFFLZ^0ElGRD+JHL9S`5c)A17r*^??$Y z(g&d=_UaB~uV+Z^h0iO#W0;$Y??FnOW0wZ-q+=Jto3l&Y1r+NBR2iuflg)N8e$_4= z0w3(sq4 ztfy}S94;@`loJWNhEhoL(B0!sNe6`Q?*fw8$VMd7+t;0`PP3z=16ioB&C-emlwzv| zOcg;bpr95tLUk%ZEg-8yE5%AMb;<&6$BLeel1N0>wmCQcMB1BKYJ0QEQti!nwSV_Z zd*c*5V(hVS&_9i*pGAg$0{v_#v5R=GCru_M0^rERWOyNP>1)!2d*;TeeXUP`P_uL6 z&y#D?O#esLq_2d`#ISs5Vr`H%hT@sn5;!n!+wcPgBPGw8^lcCWS(fV_mNV7rFRH)W zjkjkaL26C(5T&xAVleuixax+lOmjj_|w7==$rhjHB-wE~yzKMJaW{ z?P}IbxV?t$IiwY`kH8OAmBrGPgSiC29J4~*qw$Q>m4hSUBR+raNpPS5#DqmIM)SA{ z<=!~Rv*aSkRvojdc>+whs|oJW_#6zSo%1e2vB;(P1Pz75idDZE_25M-cF`_RLzCr+ z5l9#riMFo!8X0<)CnSRsC*_U>De4aZ*-EfAJ=^pJyVS*&l?stF_A0Ca9Ib_`7lrE4 zc*;GYj8}XA560|k@85^m^3QAUNn1(M-V5oZy(cTKy{GQ4PvGXxi`q}!T|IYxstVW)J$LVUs#YtMlb$5-+64QxjP?ihz- z;cYzLA-IY0&Wp&R+3`-MtlvB(Wn=nA>t?bhk`rwiT_KVQ?T=9C+S#l);i!QQQa=9p ze#O&KW3l_`KqE{n2m-NkIuJAy+eqgYI?vO=30-zl{qch)VYVjKTfC2^cYBMJzep}E zaC?hXk5b}^FRf2~Xl>^?+R)x}h2Jt{hP;~TEwqpM;?%8GuZ*+$ zJU1T-NA2AN52hvX+!!Tj9bB~Y)6hI$Y6K1YRanPZkf}*#F0JOAD`C~8PJ)piThj&I zbn-b-Wxr5Fz!3>q$axFblv@$1Ee$6{MQzr<7_+a?-_^n+5n$u~Gc!CuPmS>_cXxxB zO0EVLB~NF5idIE@hJID$)TU)){z1zj6w4ZAW{bnJg5KEEx_P~4^^|P4n zb4@xwwg#RUmQZQKu=$NPjOg&-6goWdQ_-=-*Tb>@j3DKMa7h9b#>K&iyrSc?PeTye z&!6~xn1bQ-I=#FzL{4rf$UX&;&~p-koDeg@>TMmLMy^AI+)A$!W(NHwENSur!tQ?e|-}&Ray3q>yu=6vru} zNOG<$NwNtDW!Y7dKVl3e+54^PDAXqZTsh`>jSeU(wzB0rwXC$4VL8@^-9uRcy?(xI zd8#(Z3PoN@mlS!{Uvdu=HpDw^tnyA-OUXOyN9Tzjf=SBzpAciSY2iPWem0TF_!q!{ zjN`$jK*Ksj@><>V(RB3}z`?b;BmGw0dc;RAL>QZ%y#4tG#5=-%CX?#-uj5eO)xsa) zD5I`&XGHmbtSluEfc5Ec(O)(u%p)eYlOH*G?--#c}~ENwbcAG@_a@YYVCVG|;~lwFB&Mkub&-8J;W%53pPJ)I|5DQ5%Gd?EN>yRkX^@|Z>Q?Nvy1Bms?@HXPB3||Q^GGhPK8TqKr z65ho8E*E5)o!@1cPoM+e2%k*f=-U+R7<-y0@BgE@;$8(eelPkD zU};=@C2(r4grvl=j_z@+ z;(7p8RvpB%nc>6Ca1(sks0@k5_fbJ?5+#nU&Os4yeAUNyUMRWZ)ogd!=5}YkDTVvV zg-*>SeJJ{5EQJ)m6m(LWV4^J@>_X8Dw;;mbTOR)84TZi@54Y*AW z6PwTqv0j^SGXRcFxD{U51n%j$2l-(BioTTaM*aA4(v1J*1L=Rm(`+4JU&AV-DngfjmG62F)3fBLza< z4o1B%1aG`osnPk~0gcZ0c0toVh}4zEjwdn?WcbkaOIT&n>TvF0|F7vj3zL_p#naJpA?>ft725b!Q*mm0Y@P(dzspx4~@+|#unmX_MS4lz0QQ_M9i+_~F5 z$SLip@+Pc^mDS5O*6TT;2p)F{+OIMhjzTly4k#)n1{H1?+Z50`3bbDY2HKV+(6(~jo|9#v5OIhe45Ag6 zS`n5CT`e=(+ZHq4Qf*#52IX|3?tY%f9@Az$!6}22Cd4$(1Q{J7b5G6lev~$3_S%N5 z?o=BxUgvoOksI6aWyIKYq}}#Mthe1>BfgrNf5E#?yAj?*yWvTkKh|zc-+a3f+FZN6 z2^iarIMQy6&~|%^$*cr_yzM4ox7`@9Ux$NsBMGqxWLJCM<@OYmIR7n2KY#Qk{!A-~rR%m}qM*fl1ZKiJ|Bg>%MSF3Iliqcw%58;Uz zu;?6QMv(GBIOQYp5j=WG`D6G{PX2i1L&C0nFkpWG2l7D@kPo@v*2xY>1_@K5GB}4` zvqZGm%t=)mFDkg>Vppf{yH9nRcACVL2JN&kn6%T(8|s#v@BS?E!4xVVtm%||2qlq^ zNyw7&!RoN-hR~omxn-lmOEOt2#OB0g7M~Gk?oJ5^>26?YB-%BFU{*)BLLL1F~oSP3?R%mNp zViZoZBCHY^1?I0t!4j@@zbEcfFmp4!n=>G5Z;8W z%mFZ6J=!=;6 zEf4{{NSgvjy7o8ZAuJ3+;N$=snT5a!cgigVZtw_Mc4yT>=2!?<=2&`_Ir=QA4Xqik z%>9$wt3>8-3EjRjw+!{oKd;OQBbrqsnIqRJnfs5(9I;jAC@LwL6DlHe#~@?M+;@Q6 zbVTM(KrAj7iocH$8cx6=I({qasq7+*!+#;AL6`(pgb>=z&~1PvZil0jxw5-(77p=# zxs)l~wlEZd1O>|rar%(a3XRmEbKup`=ON-(l8KRMTT32{)hIl4dWW`8+0kk7@>Xm7 zujEPBx5q+6_n^$^NPKt^LC(>Eb$kPFYVWJ_D<>{9zqunk=--Ud^vj9=Qd+)H%GMJ`FbLP1?~w;$NtS#2avM^bo{D z@mC;4d@|H0Yh+Pm%J@KGtV?ge1R7m|j zaF7aDhm_|d>vhPgG#rlK%gVy30_hjK!1t@CPFPzVVP7E?SeVH)MY++8upB%e>8aL^ z!PyJFW84hZx(;6g@Jjmz%nhjT)gse`H~M}NK*pG2VYS#K0=0QhTR(&KBp{%crQuH(@kwW$E z4d6-{=SvZ$bZC3#oQ8065D79knsGJ?xO0<{mL zB=JYsa2^ai&V(3G1S}@-~(lEfrPG|XbC?KYr^f=Dw4f+#*hot2-xpiM?JSJ3jaXCi<@K*LBeHyX>&mEkh(RmsZFlcym(kI!cC zvXb(`{EYlOc`UgiqvNqrtK)u$!35;WCc%n_@RWEio)XV>R;cqca`syC8hI|*&CAbd zfya)u5FA0fuaD!)D2gTH;J5HlI&46z{8r_-sm4=TQV|gtk|>@Nr%la{WWWZ6<4?ek z{ZO(W;8ru{d%39`lY)un^@zS-?pa4`%{EZQFMwC=EbgB&mdFjk(EBW~XyFgDj3)O@ zMLXfGsq+AgVKL9>sRSNx)l&)hVxs1O)XYKWw0a#r(piz4RS3)pq zkAu17MKu7r@s~0F85Gzq1W|l9Zd(|6mce`p+RRamhLlrNsVh(aM(}|%ptv}nnuZ&) z+aiqjBsvB|k>@}X$3GDf`Dc=PaibIoCdjpL2uzaVbS}ajC+@|a$`$uG95_lU%n;Pbn6Il|@~3*T4PAwpW`$$w=7@sYji}9!o$($Z_|<)*Oy6kid^vy^ zJ8#Di#?C~52d9DIiEl?$q!z&H^AIPun9-!|4d8^IULV%Ife>CL64l8xI%^q1lUj5# zs4+q((;eW0T=U1VWSW>cNHZ55 zu5MzCd|-0t(I0=Dnn#nAlHfdAcuUTsnX}uz>=R%o&?hj3wlA9{)xJVW+7~<2rG480 zZqq@ZP)a{5Qrh}_V0gz79RYCKx-+~^TVwR&j3Wq_w$>d^rO9oa*yNzCt@}8=Zy;xw z=V3s!t(hKsm;Qh~>K;26x$4W07y;_3`xs}Fa^pOtBLP38gCs>dy1=7*8oR;A*%Cpq zGNR%2WC#g6bq&*NJXvHqt-DzkqK(d_;^MY35qVZg8irQV^bUQvHIa?<`<=5|P5vNCi zC1t6TQm>|w8bTGY#J0fOxp3L(r|?3l7^kA7GkaXFreVuckXeB$$QLoD@m&8Os2Kja z^DeFpk+2e^OiK$SWtx1rGL6Bb$rPDp3YBS!UrMHhl6?2XW+jp7u7KNYa*^Z95$l!X z9soFU9D#QqIVRjA$Eo{h@L8rgISv@?T5#l;>6_bw_ajOZ;}Q{M6wC9JQKEYeyOf}x zclQye4!(FEP_(O%Aa&S9_xd(^G|}!&oRHl|Xyf27epUSUBLKq3Tw|9~cJQPzp(6f$ z;e+@~4hf-=V3buyLN$T$sV%+b$=f4tPfFX7fP18^CsT$cC)h-}JwnPFmD?jo*A|o_ z7e&rw2nuCNGFIM1;-<*b0Na32@~jef1!Kf?rtQh&>KFgKGDq54T*{mjJ1KKy#g#ek zErl|}jxvSH97QE1b3#dE4%?eV=E?xKd%=MnEvG-K{!02;|00X{R+c7<{Qz)eaR9vg z$RgoQ$|4rpnwQ1#D7V^Frf*IbxfB`u7!G8yRArIqp8HB(gwYXMw1)wZy01hZ@3cc$2b)1)D!2TTK67$QIF?l&$dqG?uM{85goANE#e? z#IMTMAp}6SNX?Zk#;I%_3Lj)kC?Bl-3Dvyblx*Ffl&$}y%ho6+3`<6?Y%x>F z7D?IyE^@&lTUx?GTe3_DS0347tx~oaud;=S-5--J$yW$cwuEp}w#bK9wz5UGm_lWX zO`no2p(L_}r9P3Z0|B?kz=3RyrT-xHSJTgW7umWG*kxwqlVW>zxeu^5SKg@&q9*_a4}L;c)?T zt+=5+^iQbz^ZYjE6Krx0nCq&ZKR96Odehw_?vvu4TXirnbH%Nen4hbz85A_zrhZ-? zF!!z;f~&xGA39`AOH*8R^Q?gB4VnS-RVC?vI{i|(k;yx%Tbdq~(?+y3byd?w1kG{1 zKQ9j&yNvFPg>=80NcVuz)g6N7$bNJ;6jgT!n4hyq|A*k@wgu+avsV_bF`)^@tT!W3 z$bfk=i}9~cSXme_ljrm)2$;UvliLQ&QE;ztaK?@JA`vk4o#{SbHe^iDyg0eKLxHIp zwz4o}F379y6*T7`%G@6~j3s)wik$m;8JxU=5K51L*5nCke&jM*Nf{~g32 z_aO6q0QDI(-}EB%rUJT?y3@@%ot$4?wz4p2_DI_D!x;bY7E<`-9Qxzq>0UmNF*|3{ z-H=E3*3NWqiZPcbkW0`M%^)WqE+hT}(;0u!S>%7^Y?kH6N%Wt)lsWF%$Q&;@kp6bF z=|2`V5Hvf+G3`C`=+;TAeLtN3MF-IRH~0ye{c>3ka|OSsKT}PXvgZ$EF1gcLhxbe% ze!JzLmp|bfkM1XEF78k0`tjs*0{lU97HT+XE*1B@j`U|s-Hwv9wMQ`K^pPx4Vl&;& zC~462ksJq{M(8||t{EHXUo@BQS>PdP`bs?ynL&T1)ZtCyR)omI1CYR=xoZ`norS_! z$?M7e8Pg!;8Vt;!d43|@_r(8RU;5weO?O8X>HJG{BomTZV*K{sMhDFNX?+SxOzpJ4 zjV>{(>KRi!hB2QlX3W?*bmLta-y)klwCceU9XN|LUyReWB=;jaG5*4{8Pl_d{@h-4 zI~+mxk^yvs8|dZ%GhkX(QbUh|o(9b|^`Dn_FeAWK7jyEF)x99+llv5)9y${L&iyIL zuOU8U?#pL8t~-KtI|nroFkM@ctGBxm^VKsMzhVac#ck>TUtabwRV=rs@to%!&2SOzmNQse1+# zF6>R54rfYvr8b^gNB>nKfqy!Z{tMSvcUWV7f>oa4r>zK@u~PQCq&43`xq_x&8@k=& zbmxts`$}h~{rl-G^_K^*yh~2|yu8fp`g3)!GIMoLseviPT)lwqJ0j-|gXw=8x(PiM zHzr(dtYpjzXid-@)|IufN9rL_NB`wMxp3YdKdeseq^=C&L+0je)@RQG<`peqUO#qX+DzmUG*@&X2u5LLJ(zAm@4tOmj+D;&-eZLJp$yTKXCBpnU;z+q~lk22I8$;@8M1;_%Ik?+4ozFpm#oy@ilh$mEsNru_@!2UyDr z;*T0Gxk#zM-;bQvO6g9U^9`hW6l5uAeyE_#>=NiV!rS>$#jdH?e7-ZD4D@59?HE4k&mZZcazKJ<8}# zIph8OfVoCSZq-A{f02~JKZ^dZrB~`A^}k&t=PPkHoJ?D~EJCT^R~Aci`DBWx#Fx@s{) zTz7A6E-KYfcL}{-prM`;@^92oFQM7GXJ{sQo;AQ;9IByl!sj>LG=$*^U{{}^p+f|AK^F~85!eGqJ}$XWlhD`QH8ev) zxw#seDWSVIYG}5E`YqMa90~O<{8^~Xl~8;oL)qpS3H=aXme0^U$-TyYe-uLtB-G(> z4J{GOb(=ShBy6eF(%R~|9T{3Kp|eM6XoZA6JX}L7CEabuYiO0gvIlFZPD0i&4cQX9 zb%2KOWdil`YV5-a%we^Jz8zn107It=<_EPJI!$21HfZQ{3AH;%L+d0of3Ai$N{Lnu z)X-T1tLUX6bZN+M#Q_@PC->H-YN&=V*+=N45gNKsLf1GsTq-nQayYw8LYED_0aBN3 zt`N*yS83=f32i$>L)S>CWU7X)mr%DY8oE)+R~x<)lALXBme8Pu8oEV7i$fZ^RdjPm z!AZ-Bd547F-;bdZC)E3#-qB$=VXv_K}XXyGvE#&*f! z#%UUQO-eLkb~}OnOF|``&s)CE>VuUDYVn2BHT02$demv?Qz=o06Zb5<%Ib^r;>_=t z>3cw>FHSTw-B;^xU2zj&UrFd$C-kj^0vibHZ+?`}pqblh9ps)f9JZ}yn1LjXC4bd^xQLEnvi z+nQ;5NT>jzcM&R+(D(u0joo7%X?ja282=8|<|xz0#}bWRan1~e`bp^Nks2Bxp|LYG zG+5G|;)I3)hV#|a2s_#g7ud%^hK?}@3T&sq=9#g=_10>_=9_Av`R^qR9cK=e(CTv- zikrhFbdM97BcYP`1@j3z&W9|_(VH%q-`*cL$4h=c*%!=TX_h&mifV?In>xXKcDvV25rY>=P$+^rHFe2l;oI`vn$t zLVuS~&x7Z$9|qWy63VKdzkUQl+a)xtT0<{N=v#z{`Lcwj9Hy|>e5=9By7lwd-(>AF zZwPGt8S~eF=lk4zCZT^HsG%<;)E$_FeJ!EkJvH>5gi4NN=u7jHgx&<^1pk-jR|)m& zH-G&e>l@R;T8$dC5E_PaRxPo`q_w$y217rYRuoCoyXzU_+WUXP(l=oZZO(x9TRsgP zv4tVOuML*tAoFv-E|}-f@RdlY?X<58dRrO3P8Lg4dF0mx3jpgZu=O1X%l4HC&Cf@F zMGf~wC6qOUpE zQ9`HG{`2Hb2u+gwRxkbM$(JHDO+wEC#?VZ`yfw1DW-CH-B($hnLvtn6uUy|#^FZP`%q3NrxTl$p0#J5Z^ zhfO4`oo}Uta*t%X4!%DLX1~(n<6rT2@|`82RZ$IXlF;tC8rottpmt{-^zG8Otxmpk z1@`u$ZL*D4HDXnK?XxNO6dE;G<1`Mmafpy&6Xcj@Zni7ZxI+* zmxsaf+%2IWF#KWYUI`UMG<2VY{7&e84`;o74+u@1;zYXrd=Gna=;!;pC$zus8Bb`u z?`5I6a4gf!^t~;inNDb@2Xm(HT~B`Ve4h#|*plfM_`Z}7_WmQZ)c2DIbEVJcXKBX< z3A23xf2uy$`dWEH8+?VH(3!rlq|;hD+gIWVUFz%V30?0i_kxw6xa;N!Z7okZ;XU~&1C2W-@y|4yahuq`6fw7Yxfi1;Sy5LKKC8r z3H|IlPC}Y{rgfqRmSxp=LanV;64E+rXRYysI$G-`G&762cd@oeNOSLHT`VE&)dZ}} zx>Q2SOMmNXPx*#gHw#R27;fDmA*DISy5Ey-qV<@Bl@J1?)AHSIwUf{&Y3X~c z_7c)E+-G%^(6a)&-|8fxvxVyitu7LJTtW|7-8?xwZ1wO^dDJTNPq!+LnO2jpPz=|-o{B1S|>X8 zi8V_?izW26b&P~m%73;Nc|yNfOC+SNvd216LIr-({MD+FkZO+4zf3~2gl2{x8+JRp zRx#JVMqrvl3;$^nIw6l#TKm^Z=zA$`*nhT!R9ZXwFZ6_Z__ujN{roq0LL>cu&B!;8 zkLg>MZ*GkaguAJ@Q&zrtdifCeZ(A_BY*NGINM0~xE<9vn+4P3eik-pf4Nq^nEN6Pd zU%S!2Tw;zEH(T7E;!YCx@e#!AI+E^-Gl<`@oc_;7(0`ENJR#4MZf2HX#aUzQUvPo2FJrMsssC1k%0ny@|h(YF3a(m!KhWA zxm(=N&^n~X7JuCoA?;zAbl=OSTc1n!i9EWaThblYif%z`x+?@{u;5%SIAwy0Z)E*GGB%hdFBvl_t^^4%w3VyDi&{Bbx3G@b``K{nA z5}YH1=3_#wvrsFQa($V>w9~}jR?0X>{O!emzm(-YC9#D$A!YXLb;{zd6v+5N$5-zI%i1C$AZ&VaL$vMHw0&f;Ea>JI!G>e ziQ7ig3B$&gX1p%`F`Vuf3p)Ub*H1q}Ez@aYza}4w)VEzPs37B`FBZwbcgj;;BhOPz7 zhbPm0Zc!J+>}0$nSJQiSL47_ofv#Omcj6GbBW$`QJ?K6%i0=G)x`#|-{XajLT0Ey+ z5hQs+kDk#<4W;|j+DuMRhRytP#BZ$|0Jrt}A;|IIW&bV-m@U((cbA?)yYc3MnWeCk z>**fbJ+sv1C+F<3p#S+U)8- z(JyCGyQ|yp#9ZcF*yldxkYPK6;41%;XvlnJZ3X5;{(K$$SGJ}9#shCg8MnZN z6`gkn{I9_EnacwYzR{h&tVzz7fC}PfUc^yld{~TyWeJ=t(f5F>ucLzQO^pDfO zH$XnO21)b9T=MhVY5SLdi(GocP3LoP;3veqpTn}-d89VE#qU$|mNYJ$T$4k7_U5wG zC$(UyZ*9p^=e8!zk*)tbn!i_jd!+U(d}mmh*#hnt*&WMMHBbh>w$250Rrunu1ulBn zPJ`h82rf3ePTG|bFqv@CB3b(*W?>Ffxpl}|QVQp1jYa&FoNuMoCL^z74fE|L`97MK z?+jqN`5rF$9*&si^PLaqb2&50DGw($L7DN(G(JH8D)^(m-g;UF)vr}Mk=+S4w-T#OWGNIiq@68UFTUyc8 zRL5s;K|8vVb3sxD?q0YRsqTPF8Mp=hkKp>ucLCyGoWrs_Ev4?#f~hWVc`jnkY4un5 zr?+N|FaH6!{qpIbVCerbgZ_)M=}yk2dw1S5aEG>h8T7l(p;Uh%?yd^B9>0^qw98~yglGj5`GX#Am-)(W#BcD1UoMiM@eS4Xu3|C&XH2us^YgS zQmPbc$Esn+ey<(9b-s2TWn&FopGlSUzoFpOJFiuLGnf62SKn>X_iLrUcoY2v>$4Db z;rK%R>w!9VX z#@bfegAYW_ugn~Z+;vvv=2g|g<+HzC)dGDkTp!;n!dS6~%)idh8Ux;r%wfEpR}Ftb zi>elE&8eUn_00s$gI67mc$cOtOBi7;IS%m?0v}1Qu}E5fE9z?JSknKv?j)og+>?Ht zQMwdXB9+$OyfX+L4i|PcK)ZT!4*hv~H^E=sf-;Md6dtr0@Y;jIsi2 zfU`Bo5F`E%{pV&RROnbi6%q4JFW?q}bU$Ep3_AhI{+Lw**M-QE=$; z_9XmTOG=+31lIW-i2p7?%&ox};daY=3$B}rqX?!V=DUbLKkGxdcjPd>DV#6UaC(@< z0|v5$flJb`N>F z*fNJZp#en|*NL$mF3D_fc)@kNNd^qO;ZWuY03Z$J!Cj@Vn3-OSrgsO#*HD~2;4%u)%RXKwA)F=t>}4l#4BgPC#Wu&P)ZY>0W*fxWPCT-A^? z*f7(sLUYJCb5hl?G}r;=SO-SV4oHKIFbRR3hg-;JR*gu5jW%nYbT4c?p=xv*Y@E3( znQmp(xHQ%OVy!iu&KsWx_sVPH8l-3!_0DE`kcw*PVW zSIzoAti1_bRaN&lzV|-&a?ib71{DMp8Dvn5l*us%5LCz!#Q}$aaGr5S(Liv(0l_Iz zG6*NqN>fY1^pa#+`V?g;g$ZgYWvOW;W%*xg?PJ&b^Ld{C@BO@Qea`o@ziX|%*4o3_ zXYjHQ%h#Acv9=v#gtp!vfo{CUbb052ZPeJgiRU|vv+rG_A_>(D^OS-(jfKAs}|918v(`@QZXXi+_m91Ux5;C3X!eqTm zqy0O~w6RQMwNL2M*pYB)c@He-*;p=Q>mnXU_YPTTqg%{$_=7FT>@?I{%*Nsmwt$^< z4-Q$%#&$*qGcvwwNG3a=u}P~UL$YkVEN2%;hwbwYS#G0S!6NZzU*NNPeUA<+Y;>zx zx~9W3V6}~IEqnP1-C7%69y_Y(-dz94F7H3+ba_wfPW1#y%M|He|bv&z;O2 z_Vhr@J?p21>}35lHWS#ZY=p)Z11n}J8cP9IV&mmCHeJ*Gz9KE;HC79|ZQzJ?h{_2m zWo==*4P>o>?P3Y|gF9eBerrQ^v+2YN*wKlbL-yGC+{bb>-KF(!hwQV_?PtyC52R#I z>}SEmw!)flJmd}d3l@wZb%$7v#&mg~ha6_x{$UqGj@bBom(~8G`!3{N78Lo|i+_i5 z7E5d^dn5YSkmGDp)MMSv_9s~;v90X6vEIf?_NJ!8GwuU+Ow++E2m$7U_2kv?L-ybw zoiX%78{HWe+gnDsxxQKG8TOgRba}p^=WQ&jS+i(qiSeqLr^fuoq=i(oV2z#b9vu3) zO}z^&N7L!@I)z@a(OqI^{?SE+Ub4~EvOoXP4GyhkE-^Ct*=Hw&erscSg+*#QUEa*l zD>k}%HeJ(2!8%yacKu`7DYV|k@;i1z(_xFgV-GZjE&84f=_8|K8*bXvyTvyDqgxny z%SQJLyQt}~&wgQb#J0j&tD~rdo?hhN? zL-xx*I{yw2nR6UkZe<|}FNZ#|vEVGM;CC|{E)y04WVA#e~7f4+B!1Cn-9=fJTMc-PJXBLVfwYcvp9gPEbnOS#cm&a1oC-sOM#YY-I919zatqtKO?<;8@?KU77VlCkcV4X zTYljm<`ovi|InCE{v+5vPldk#Ld)f_Yx^@iMq@ielXx)SMy!CH4NT(C@`EGMvVhHR z)+VeyACMy1OMdOcI`CADIj8gp3+3}P_S3Ls_F?=Ev8}AB?<2c#KK?~nkF)5oaNaZ( z*-F(rEEaw(*+OH%VXnaZG?q2@;MvJ?)*il>Tv(7B92=$RyO2$LmWRtEK7ZR zNQ_+^uhw+yf@0y9w>28u8RQD=s>Wu6u0Ow{v1Op^&wUnPW-HZ=QCGzPUMv}89b-3u zTO?yRKL_&og=i^flU@?}WMWyY2!4>8$SpRykPXty z8JFAMiTr*(vMhFQ)rPRqJh?#XO5^XjjNv)NvRK{94Pj$>k;c9eFNcleM~KOI$=pJ0 zD;wt3$t9UPZ$>W#EIp<)Y`o3-GJ$s?-B$K_pY-+TpmkI&ZT*Le4&hY?YSal9>1cowXv44 z`TRC9ILDr|ge~BYG#2e{30ugWw`08m);s82*do4-*h={O!->v|ZTcmHZ{9(cG$%6n zeaTpJ_avUdLtc^5Pq%b5F6BiU%L=;`wv68)R=`$yKeEfT@d<3F)n_KJBDR%gWG0{Y zs`PnwAl56>*wW|8i^gul8<$M}k;YmCBKt~XL!LwSoyI0ELv~+dmGG36$&-sII(yJ7 z!!45^)YyOx7x{8tM{FxApZ>^hIUiesmRs5Di;6E7_W{aUIt3*nN@>bc^e-o?jwXz}7au6}Ex9mr32W)xU)m@bMbU zbNel9BR@v0fc0>z3f;tSX}ZOERiRt>sMoPx0juilZG4#*6N8ngrMGb#zesGQdf7Wz z6!LF1Rz>VPjhQ1+cS~a@U6I`*c3Pdb?kcd~h;3DaBmNF6jJ{HB zwZRpbv&Nzdl<@65pV(G4BKIQS&JSoTI(Kx~cK)8Uq;+=(KS%5|do7B?>hKM*D)nD| zV}UszzzC<=$C0Q@ctf)9yA_Ed{t~g3th}!=yohhpbiPgdd+g*MZ%RwN0`2CVBvUW0 zjs-T5*h=-UxL~oHCur>VEy!fsSE^A3F{a&o4C!Rsck>rD%RgG6ml?!lFYV^@HJ#cL zbxSqo)zTH%N{x-|8q4I&>-jX7_PWqbLn#In?uTU~+elRE09ef%&n*-K^o zV`8$G%DC<=YcG}YgT%7f{Dr}yjQbz5_E{M}t}*PTGVb@bwU-X^XC=*)ZB@I? zyvPsoWR1nn936I$&(l~`Y?JUqJYQo2W8Hx5(pVAb-sTpK9RS_i{DQ`^7hU9s`5ler zFB%E?d?7sTcVX?xV3iQ%8p#;Sm};+WKRUqkM?QK5L!CkMi*vYc}yBe}`vk zEOg@Nuy^=ojYZGC$lv7$H8yVc=&*NrmBvCAT;#`ioyK}E7#((u-`CiZ`4@RPcRnIB z+d6-ASULCCSg7ws{vMCiShVlxu=jX^#(bW;$Se44jYT{+I;?`{Xe?;z#~#OdvBr8% zP2$J-5sgKyzR2I_pJ{B=>d|5E^Xrn)yXF(T?NQ2w?F)TmcY>eO7+%p&@CO>}4r}BI zp8Afoyw%Ao`~=U?*uzc%;V1bXjn&P3WM|>;5tFN%g?~nDC9KJuS@;FXU=AWnepmLy zg}^4^7CuR1KLok~n=Khz7W>GqlD9o3qp$B49A0U24fueMC0!Mp6?)I*1Aazhi$cT0 zPjQ!Wte3?)CH4qE&0~mFu`YS{Tt4EHiLGRLqxyuO;qOXDnSH`7nkD-Dga^NeUaA=S zJjWLilRiJ?`!pT;{EVL?CVf`h_`JY9E6~en_C@sI@C$q|u`D)q&6x0u+(K+6ThV$( z_$BTPTREZS?H;KuzUEyt_64wS_+*XsT9VqLmao>>{dNn&FY}YcZueuh{T`z~o& z_!aK@KKhipI_^VE>gsHC^?WwzWS;fBTGnHW$Hv%Qw~6o_fAEBt@A!}t7@>-V4_g-g zy^YTsJYVXJ89u?{27g&&1;nrx)N?3_$O*r}cS@bQz8_ldBX-)j5uR*rJid|`Q@@ZKk2bCSkvo4#Iu%FrN3CCS)KT;D!++#=NSC9wnv2Z& zH2G8qx)cLztFciodw@MTmu}h2ms>V7>lPnE^<-b);*lT8%y1Um;s-T`Gvp`kewN~~ zF#&Ic|HMaW?Bv=v!hhyD#N>Rr&2LIZ>%?vTfS6qCZgca;=w&NAyXcYKZJSlWWdT%7X6MmcD(%9jo6XADw$S2ZgX|s>Qf8iO#3fLQN(?ag?1DY-+ zY+A^Dn|QzS3Ta7q+rRRUh{@=`^6G!s70+LJEwR(8IjTtf#;(%7K|vFvw#M>00HOKte?Ts<#+ z4vPLR`~jb?v2M{nhd1);#H!fmZX7mEJN7SWiNBlpg9m(yO!oXAJeHWu1uT6~_n5t7 zV|ia%s_i=mi$C~7jdklB0!;rI)l>bJ1dBhpgT_LagaB)>+QX zu|InRi@$gWjoJ4M0oFxhLs$M9{x^@*Sn|q_P5_2O8_Y$~i(2O+J^F{a3Y!&}#~FVtWVnj%X&_iLF#;jv5x>B1RF*Qhy7LWiFza*lBh)Y_yk)sMXjfYdCWi z+rB|BS?ryDi4m@1VJ))LY$DuyHy6bky9~bsYA(LfSmTf+=jP%zF*)vT;(-lodKtYu z*2NObQeTGE#!Vy>JIyA?Z7{ltI~x09RdR%z2>SNPddbAH)LF1*xrt0-kLx*KK})!9 zQoT50kK<($%TnK=c*UBfj2B$@WW5ApRqUn6i4c7!G3mu!?0Z7zZlm)Mcb?FB*yvh_ zF7*ulJIxBZT=Q)qx?M#keYO%Y#7?te!)~>1CGs^^+-p&5Z*fFpSkK3%o}U><#k}j%GJT7ad!V?kv3LDuMzj$}zL&bSlQ;_!pAwUq1&K?V?smSX zPms{vuzG1H<`Ju6_=e{hG5sd$vea^?Y#&cc(JjNV1W zY7F!2DjsMId$*hL|AlCw3n-Nlf5$gTIM2s;1Dp|K)MVPv{2O=mv|`zoVDa4BrS278S&D;Emwt5kti1lF=F&FRl}lZwuoEe_)LsFU-XL zy)KA!IqL2)&l}=Jq>beesbk}N*G0sO1H`geuR%8>hKf3k4efI~VwiY9Oy-#&o_tq1 zT-Y~aE^=pZj}>{lMkhKuetx|~1Iaud64eq=XXTqpLp-Z3B4$^INJ?vO5?6Zj?iFDcUCbV5gTiqlvNz-{4+W1cr8N_5yOcvXS$)1=ZE@=#V zVv4v9@1Gy{1nhJGe?`EU?1?EhJz>>hPfQVJY00rCrid{b!=9KTQi;jvQ$(hw!*Q4@ zEE>b;Q$?-L8hxs0BqpOzwTW)kVf3l+`AN!?qE8h`8pG&Q#Ux@f`c#pl=`i{$05w#k_tmlXvdu!HnLpK{jCv6*#qgcIqq8NAK)nZvS z%aa`I|n_OE=(Y{__)cuj}Vv&AlrVf1V&T{g?p&FE;WTOqpnVDxNO2cK11A!ZYkb8v-?mlYyIv+N?4h1=>@ ziX2V13D%jFqE=(IuzIW%4>a};oUto~i?56qWSG}+rRb!wzm4}?R*69x>t?>^vf3tk zu1L{zv*B#Evgvf_dF*$qI*<@zbVP@+@q_m{j zvrcT#7-qIkyi80+Unh=eI*h(v+}9XJUoSGktkKttLSi!ddYkB09Y$X-c1cT$zFyqZ z7)D=j(=Y4AL(<{g#ppA`F`mq9y~rgdM>9{X(->x!C$>aTU(>y5o=q-R9p;iJilrsx zk|+Mu80L~El#bSTdBTU7jJH7~YYgLU5H~wndt!soceX~~U=!V{!{{4?v$Uk>8$^=E zF!}~DiI{Bd2AkIAiyX}oqvwkzU1U7G7U$cLf_RIufQgrRfq8kgtN4ycm<-L#xP!i7)(sYE3k>TQB2n?G2TXz*Uj3W z8*SoQbr^4>*d{HhKR1eRG=}ju+RUtt;yUTF*;-inHi|6#yn;5fHi{x*a-=tjT8&{Y zo5cO@Xepn8Hi;%ZWM<(x+dFQu$;_(5%r*&6X~|1ci@|c5#xS!@VlFY+6Ps*$VzbEC zEHV0K@ix5s!?g#Wxi;Ixv+6M3W^r6vQcr9ak2HqyHVZ>9^di^!%{KkA+2*cmv&|jL z7SW9A$vc*6P3i|o#Qr}HduAohHc`Uw4~Xy zO(?yo?R4L|P1qBY(YM+3S)pjFSz`1;aU|N>XN5NLtU8QWD2_`@>a#-O7GsT9D7=Zu zc!i?7ro&ZnyU5TO#@jA7_p`QkyEsHlj@Wja=vEy@-!6_zONzc-xW!tdZ?_qv?ZTUM za#h?ex)YO`Z5N}odYIV`u}x!`*$(0Uyfw2Oq9d_-qq1Uu#~n7AS#_A%4iPCW`NHvs zz;c7ea4zi-FB6l|cZegJ4x<-|`x?XOMdI8bYxE+~Kuq>akxg`~4x@t?X-WN3BnA(* z_Dhi%Nleb4@-{2e~<6#?i zip}xXHtZB9G=_HxJ4G$AdgGYv4?6C&X^~ZjE!rurOG|$0#WP?TKGfQxo#HuSvPC;> zTC`L2BV9Hd&A)(pPrl`NRgBPdt#tQXUKNvw$rcscoE;@1hjjA3r$qcNnGsj85}T~8 zI?TF6uwgP!T)|32w8n52l!*SsWY#4%nU(zWOp?JKMwEz=WGORy%_g%_F;DY}eO)S! z4X1d<=oMdgEVaq3R9G|}W>zXblZ=;-uLH|wBdq;dDq0eg@k&J(O^5Symsq4RjJHed zO2m3{W#1+KMXa8p@3M)$OMIp2F#0ZWT{4QkOSBnnjlN5CASR>lvT5yZF+j7#=(|Oe zG1k`Zwu!e}cxXC|w_CK8jN+Tuv^R}CdXm7%{c59FOe=Ap84U|O#ego3@D(88_0h{Pn9Y#MOZc0nuX}o8r1LBz!*&>X7K!g*M z(GQ3rnhvACA@Vhb(ccgmFIuC&AzmgXqrYJj-KxXrZ-`=PNzvaB*EELF-w;0%!{~vX z-ViJmBgk<-WHVxigqd{N>>=!se@FysY?8ibr?+h^4~zDi?l!#dJ1n9#_KZ0e*eGJM zwTHz#VsfO9h$9-q)*cbt##>u^L>wh1TYJQ&wN@Rr_K2`ZOKR;Ap-iy$^$}rDOh!K< z+G;xN>!V__#xVL(ab}`5`cZL>n2dhZCc0IJ(T|E-(vqSd6&>K;)9{HF`}(NpOiV^U zDiSmuMt?_a))+>AM|7WJjsA`pNlZq6$0oW}htb~=$G}M?qIEx@t@q26TGQ#@Mn5Ukd9s&qbvr3WY7C>F z6iLKn^phe((_wUrIIb~_ZV^WoSfg7+H8FWNYO#rK)nRmtsFjv6j9w|)rdy*|iax|-^h%rPRvkvK6hovXMXwb5HHOhE#bIJHdZqYG z(_!=v1pF)?XC%Gt{Xpa_u}1$uln|5AKd^~z)nW7x!~tnZ(LWG|3~Spz5KhEo^bbU^ zro-r`#B_~e+fRwQrPk=D#9zc@^iwv`tvZZ;N~p_ZJp8w_QzBJk*!EKbzjd-A6tN=V ze~YGg{CeV_UJSl|@?1LBifD_HuP0!+eiCUXq824O)@~SnBXV+EXJ`0cVE3nOoSk+5 zR*rQiF8%Ly|Gf>y6>Nns=CB9yeC+=~Uu&MXe6YMN18x3{K%49#7|SgHzXbM&H-j&e zTn7p6FKDgRWQtYNG5B#CaW^}Z*FbLwDl4$>BTA-@LrJk8mNAxq-IA;xWRE>cv(`Gk z&}xZ36_(QEu2m8l1s8vX-BduQ3%1kP$ z?MDG^+bA=%W((iAq1OGsk?7duHO|g@w#NJIQnfmV&)T@ z;Arjwlru`ePIxFUfb&borgnOqr_9zCWnZ0q4s9gH#9;Z@H0!LB{XBUM`h2ptW!>Uu z(eh`Qu?p;ChY@dq|*oLyK}*eaN} zFgM`rgC6LDlBeUMCC(+B`O>F#7D*2}O)jIHibQWEVE;H<84Eo;wtUh<`!QDeGcd0n zpSd_sI2%41CC6L-H*f!^aX%l6E!_>Cb*z3qwktXf*P^HA^J>Tkt`ASO2y;`km0b4l zf10J(b^*I8q955JS(ZH@B~O;0oaaxD8v1#>`pNQnXoY}1qEP;1`Dx1*bI=my3LD)H z?Vpy&TIfyCItDwr4n<3O&PtT$DSQM5{JgaewI>MWbxor5bBOv)&PG|rE0?@}J;sH! zGIWINj({EGP!S*ZQ*h|vXm2-geFCexabxWQUZqwF?~U zz!eIw z0Nyy0<1&!W2wXEc`}N+j4~m|Y5cg|1CcUzeYj z7$MKcIsd0}1+1lTe?=(!;op}Z_xzLNE5`z}5?WR@={UZ}=U|_2>xX?_vk0%JFAT%0 z|71V|>l1|$pY$Wk(%b)yho^o1pGwS~F*k{_?iCtMnVak%ls~?MvdU$P9sn7=*`M_DHr)@%`?n{tsu_+#Z@M;F?f>0f-;-KdmUjY4bneS?0+nSC$a4^9 zBZr*`5#^eIDBJaJ zYgy5>o#^a~?}=HxH4E(vXdO5LtBru&zEL7uC(o=;Va_Y;6VU3I!xGf)rxke694w#g zhbY&mr=LEs-|(IR=efMT%hl#_8SDN#o2P48Ew|2cc80%yr}f-+jQ*2c*0pMzz_ZNb z^SuL?kirQ-v00M884v!RT&sjuBZ~9^#4C4kMof$ zIo?%1UWeE9#_}v0L8%>=hmxn)GAN1Ok2^+y{RBbqJJUP_+451$4$@LNbi z>Fr5;+Vj&AY5#sZ^mB=D5ImjX?vGadPui#DZggdlZGY0klVxdR?dQk6DkaiVUS*!F z^}jDaoz;J@EAK$0jXYE2RaHvU2H8g-`v_zof$SrY zeFU;IAUgxHGax$yvNIq%3$n8yI}5V2AUg}PPhlg;PeJx63xwl59M$l@363w}u!G|~ z9M$Y|kbMra&q4M%$UX3`TS9c1X`D`?wSQ2Gkm_7%v! z0@+27T?E-hkX;1XMUY*Bx|cw93H)6G*(H#D&BEaL5{~w8oQI>DeFJvifb1Kv`vzp+ zfb25(y9~0+;O{cXE`#h_u=^Hd--6w@Ao~_%S3q_JWLH3T1!Px1R?oV@@g*Fc;5ZLQ zHM?Y)Q6J$3*_9J^9jxXWp3&(jl zs@W}&-2&Myklg~=Es*^LvY$Zq6Ucr7*-s#AWJBTj5{^M|oQI>D{lP}V@g*E1;5ZLQ zHTx4}e}e2!ko^g=KSA~gWRF1h2xN~y_6TH*kA~w*IPju<9*%0pLB>JGLB>JGL1y4# zaC`|zdpOR+0kZ&PCXksxW&)WBWcEo0dNcgfQ$_x1w zcpq9qZ(+^sqZPxUjJsNu@Q+rEW-hGPgh{N7_nMH#4uL(~D*-Mfgl7n{_a~cRDo0Sc zJC$Ro%oS=W;Q*2+kbEqa$5R=7e#fShWFAQhby%x}u#7N+v^mmV552+Hkz_MTrr4o< z5lMED;x+88 zi9300GjECOZ0pLa zfW0O>f-jxothhz7JXFl^9GkGg9dZk5?x~z(&-U?DeAS`3@ydP3Z4MyT&4RW#v->Q^ ze-TK&_g|(Y@|uE;N~PiKmLkBKf)c=Pv-c_wsnsc5@%mH=QfGzMC^c+Qek|*%W`%wW zUnQ-Z=BYD7{=aZvb`2T#pLeP*i8A7<<%77TNEI79nf z5vLXp+og+FpP7GHS1va8Kdwtu_pK@tDe4E$eymGT?Yyc1XN8vXLyEEQRb7d|eZLPW zu6^(5YQzr{8g&sosJVl_Uc9`)3-G6@ZS>tKVvH6yFn_RqfL3l;wHj=8w%eyq;hnwT z(wB?WL0{=h3^O`i*H2N6gBtYdY-hWlLEEQoktkF~w`=K|KS5i@()Wx+_rfaSs9uc3_>x6HF^ zqA35^KQ4^u0%Dp^D(5U7j@VJDbV(LVB?_oH9B<{ zYLKxO_WAKO&UbZE)6_)J`l=UJdZ@nY^?(4io=qM2ydhCNGPFq48~VaoT+hzJ-amL2 zyr^b?pI`V{1?Rw7rOUuoY7R(>pzhDB_Nw*D`2O#yca>%_=hZ}|cF7lNSL1|{wQ7`c zLD+S*T+HZnPi<7@2F9{RWmDh-HO@E;%GILjxWCkRT$MEXMkjdUF3ToJGxGH=rhle=VyqmWwzj$LZKS%ggQ?tjW~|v%Y3$s>$#m8@ zV}hHh+PL1u*Hpv&1KXO?#mS}5nre*My}|*%?-FjRH$Jo4+t{eSQqaXzZ7}%sGDX?p z&PCORS5`l7x@(Lo7;LKKXGaV-)d=0xr+ae7Lu z_QxUaFFfAVV&yjbvv4hjueSq!U|&Pm{x*RxReT>6=PJxIQ?Zy;P+aDEdMB zay1gZh|#F?TI0;(O!kY4lqM=(B@a=yWu{Gj0S@t|;5A9S%(Q!WJBM;p<+2Xo;o}&* zs?PI?fbzu{XI5!)=+(`^L*Hld1P3_pV7}$@`;(_S)R@M^&2p$Vwdg$$%D>N_<**rA zSEPFA_qh2O8cY#zE%ShNY^TFrQ|*#6sC&K5+YZ%yD_n!{tUTt>ME}jWli=BVzi#~OCU70y$TaE6{=aOC28 zn<5cpzaf6P<8`XFnPVS@+IRE2$UXEc7G8lf<&xJ8@Zd7wXUAJKm!j;aJaygwihW@7 zXPrVJhmKBZ_T7D=otl``k%>-O_BUTha>}(|yo$3peQBo*r$$xRG0UmIe)2+ZW4wL< z>`d0kYhi7P*C%cX5ry`7oz^<#@|;euImJPf!CuF`;X>*>SPu;?un#L)UO%h zV@RQLnfZ*q1Kcqed|Z_Eo8iTW)~ zeGHy-&GIClo??lAk?JX4&+F&xPx4^Gbnu_#3}x6!Faj*yMTEff?vQ=;mW|Hk_71&X z0Xg=6rTx5d)z00;^w0+97{W?>-;6&&g7-_^DS8Z*W2jtcEQWExdBWLdj?oK^Ghwxf z5jf9d$Y*zf_ck$v14xoUc-H>KKGjWX>^_IDh7BN}12h|K<7PTLYV333FE>dbZ31NO zsU%R`1c7&zV+Gz-ju*J5jTd+)*_}Km>i4eoF(m5o>x9+njJ#)>Vh?u&jEm~tG{_XU zvQN`oMZacv(?tF0U{_YA&+R*zBr}_q=}TKoZW?9EpR%#(Jn%n>Wsv`Rdz_OE_J8zS zX735|MI5DN3%Lb|Eq^xvoiaDpb!Caxc_X_?;X0qh}k+f3oIj)Og&RXJ+q543>ELLf~$#MKg4X>Ouc6`|2pnM zvs|TQNwukoxpv7n%{of?~+RWB!F zFO{rQU2>I;fV-%Tn`zX_X%1)Ef7RxyDA)fDU$iXOw{i_|Y0%GrueME5e4j_j$etZs z%Jq0pk}Jl*?w{3AYmrh(bq_!*e&Jos*v~cWrprthkawErQp5D^(_Ny>r>{~ z+PTD=EiTKT?rX3YZG#@aNLwau!|r}Z#89}SC=>1x`7TF9MCfqF?GhuT{Wi!1zh>K@ zcYMaj5M};l%eyXj^_>?ThhKVOE%>z=*e9A3Mteq6uAG3(QHOJzT2|Kjz1|Ht27| z`U$O=ILNicyy=Buu2Yof;H$@l=F0q0P#z2SKU0*uJ+GM3joXGKgZ~}Z`WzQ-2(d}^}fKb z0ACkdr@hkrp(epE0ymf)dc6m7TqSP744k7pB)m>D=a#^=-G#I@x)0zA)u_XWE;OHA z6kLm36kLB?6kGvZ6kJbS6s&cQYPl%58h9$W8u%-?8k~c=4tjqD&%twawg!{jMZtA1 znB*?>MBiwh=^yXL9cD~Obc;~1PntM9Y7197hrlfvAVEKk<}cc>bnC9*8XiHleD#A; zcDa>_&E_xMs!cUvwQh;Zo-VQQjd8awyWDD69?V8xhn@Yex#5-Zt{a}kf4Ievw?uU> z+_BfN4}6^5Lrv#1T;1_*wuO6FhgWk)xyL!E{^Q)^%sW=M!*gfC6!!-G*KidZ0C64k zCFVUYFS&ELKi}XU@9<(@SmhipOy2CC;xIbC5Naj4wR1@z%P8H_q?7KA;@)(edr2?{ zrZ{Yf|IQupsxHl;D*86qZyDOorr+aj@FN|LVb)AEj0#bX?0W|l!yV3F-Tvj_PuHwOfxFCA@*~Sixj&r+ z{xp};$me*-@E1OvFx2$=vrSv%D)I3FEz<39kHA8Q{TWjM*Q}cblFmI*l09rblyR59 zP$d_>!`nnHjL!fG&gU$`cxC0#iWZ3?7j|Py)Z>18@rwV}E2a{M=I~YD5{GL&pqA5bU`*8GUTKM2RZJCm#B|RVl5N(9fmi; zI(#g+v00+NlJMO@Fj9P5UWhp4a4lWmvfRPRv)XjXA-k8pWu-&i3V*;0?b@|0gTBS* z+_y0U=!BNO!r%dKZyY*r`N5Q-;8~ml z=hV)Y>)_mZr)2~5Nd=VgoZ3vIoIzMfJy4|JTaH~|KZzZnb1j3;*1P>uvvo>Jyn2~SVufV3viT5*n6iE~gZSDd4>{v2g{ma;{>;)y-;z2{lF12H;wfoCqG z<5KvhxzX`Vzn?sP&AZz-Hf!RzpdaF8ckKTYBst~Q*sPlT_?lb!pu8BgO&rVm!F{q_ zQp*RPO&swV)5B3W>9%`=UF{M>tFv~`_Hk@=f!fl<5qDv`KrOmJ>ln!4eyNtQS{)BN z8=tj1xdv@;j@1(Sn*VmiST4;09e3u1whDEe*QZmfAk&^Hk*&A^&mf~=Z&=?}*J%`P z(I`|JUhKJ72{K(=yrxx|-X%Z3Rj%?{WKpY1gMUOR;9uSLQC;Xs!ykTcLiu@kzQEaX z6g)?+JlV=|9M6<=j?b8l%7w5M zUWtz5@?JHj^FWX%ItFfqbH^b!;ajD_!Q5|+SBm4k@C{y593vbHz0w_D*|O6s%W-6n zU0zL~2RQT4us57dzEtjNz>)20SQuwE;oF#v246KPW3QU)Si9tcSE!+G!ezkPCEt5> zCHpuiyLd-YIo|N|n4aD>Y%Sd3N9o!Hz%|rl>N?8-TxH1hIo3PQJaSb#mpF5IDBNjK zEq}VA`O{tNL%M22>E42`drUEW>vGszr^D-r8J^nkE$h-H=e)Vy--!+0m3rKPYYKSy z-8<2MyLh>fWg_`ZG~ljVu&c&e$ie78EZh{ObBgyi8toE#_wp%le6=}dxHPGcPnA|AFfN={*Tf?e7KJ+= zpF@rV6E68wI^IgE_c`mB7w`*sUOKFuOQZ745Ll(ny_#Cd>)hTAW|y^!Iv zwpUF4Iy`@UMVrVIz8=b-EzkM}%UVimyH|}K3f|+D7`}jP3zf5>mwXEqyBY9)LrI4B zb(Qcw`7+ePtFQ-Mg&PF!wdSFOMt`Mm5Obn$`!?wJb-b<*rYH^K3V3S}@AYcYx=fS~ zXal&v1>8@Hr0DS04I+I@kJk7ewa&Fc;0|t;JbcCqke9Ds)4I{|qb~VSF81BoI)eK7 ztmEu}H$gJ3`&Hoq@4;$X*RYohuC^{zN~hmwU1Go;;R=;G@jiwU!`lV-TGtzclDv&& z)aQ+S!ZWcf#e8q2n_q+enZ*HqQO5MJ_E4VDq`zN1omutDecwbVXHK}K^KdHj@G*Ee zxq46V^L1JkGZ!#vO}gI{b$Q1^1y;qe^o*0DE(-PWuV)1V;R?lu0s4xrVQu_t*a?p| zAYV2x#;&`r$&kVR-F3gYCV=Ggo}>KJbi-a4=O5=Z@r4)tYaAxzPiPrK<28WLSADzl zaL+;|6xMuvYr4TdgZB(@$4rJ`CX0LGTg1DGZ~B+O?iu(ja~MV>k!Dnh2<>v%zd^qr zB=_NdsR-USRKtu)bMVM@4md~mx94abs8{0p`v&-`f2IehUCkZfoq4@TZrd#&%L(st zao$D-q^aHlBkqBBq-p9-!h_Ve`vBu~p9~oqkPG8DDxiQyv%u-tfcMlOcs^PfP~vo} z=fZ$8r`ugJ0uDKS9lbK3UP*+vyX8(dm+THGcPi|DAfVD|7L3kWCw!Y!Y3SRhNO)3i zwXi-r=tGS+f{T;{>XWgAkz#h+a{+Kc`wM}GoQk?Yi=4K{prm_`?*elu!+NE| zpof9$sNCT6LxNMA8oN%jMzkpx8F;=M9GC7@Yn&>3Olni_G!XpMJNX76zS?J5o6S_~ zu2Xv0);5h!pD)=3Hm~-1vkiCtv8@IC;I$k6{Q_onnwkM;gd=ljzqK(lAJ($1%KVv6 zTQh6R0swYFl1&k0E0K149 z!0zH(z({coFh*dDV#Q6s0pcgXA>tRn1o1oIDDe<*tl&W^OBQy3_JBDe9B{Sh0=Q1}0L&M?0XK_&fZN0Xz#j6I#8v!qfmjN${BEVWv z0$3;Z0A3gS0dIC;sltZ;3%(FaFo|6ILi47j_+m# zM{}EkV^pMIPZlef&n~Ft$o45NQ1^)94R}n!46l=)o8;#f`MIOuY`IU~9w<0l9x6Cn zm=0%)PIn0AWDor+D6i0Of?1cV_ixvft%tJ8mf8iiGsCk~`*!e)MmwDCxqzUx!j8t%1fB)5B91Iewi*Fcgqj)_gov6l~E??^wfgDoECCrViZ;C{wmh!%%gaZ)PC z-IG&6o&%`xSCX?yl1-9qkPJ*M1<9)uNP300Qmnu8hm?@=7Df@Ve1?)eJs#JD>%_)$7 zJEfk=*U07?*)UxN3+t`ucCdj{6&?1HqTA0Zr}}~9#xy^W44Li+lJV1{NfHf`=VnHO zBz|TpNaoB+1p3l^W*qPZymcdA$Ln*BdbUHK=QveGTfmFJWp0 zyBEz>)N&QIih7tuEb&u!uyVjs)+WPG-Or*jqCsMs9SsuuQPCh7Ga?lv>e5t@%mUoc zmMqN%Nj+dG>%XiN%A)~G*=Nfv;B!EXMUBRJ0`i}hodWrUm+Cp}Ygi``LlGY{yTq7FbSuo;g*p51#jR z!ru0E!rqReauk(QsGLIOVz6x0zYcJ2e;?-x_C^0vXY3z~Gsdzwm$Kji7WjNnuK_+y zD%j|Ok$`UvJk(jJ?@j*V#Dp>rWI>0@Hm`epS46Xy5Fxbx(ZBkt^hiq3oQ?gz0 zOv!e|b*9wyFw1<&;#$E@4L$|hhcBH1?U>AKP@V!<%09|u%`2GK5T!Xvl;)-E5+Ke8 zzvk#O8stA@MuU88R&sOfw^WeK%}NDHZfrJ`_l(Gfvi+!1D8otu<&USFqPo`z6*u(b zM;J|*>b8Sj&PsKIaao>Cl2n38M*<2~!EP2}=o25!P!+Dw?iHG6c2B zgqeiJgcia&iJj1fbw>2*TET9`NA|#SanB0YZ)jw%3bu8qPhd;rR;IZCGUg3YI-AatKP22`xh_*o9%m!(hEiUSSWL)Z190#|7)h8+m`PYXrh;V-uLJyfxX)O$j3g{3v=G)2vT@{xu#S+u zfRbdwOu}M93t=50OQKqYnS{lJ7Q#A0mW(zQ!aBmp6!J`%Nmxv1A&g8VEun?5j*yL~ zScH*;$%L7Nb%bmJ*$_q&CKF~778A0GWJ4H9m`s>SSWIXk^qGW~k%Y;FnS{lJK2u3c zSVzdFk!Qk4!el}VVV#suN1J5AOu}M93t=50n?W{&nS{lJ7Q#Bh$eCnASWIXktRrNz zC=^AlL<2kiwP}+b%Z|i$&xUcFq5!YN*16tldz7EEu^@Fk%Y;F znS{lJb%bmYSrSGPCKF~7789~`vLTElOeV}EtRrNL(I%NNldzc3LRd%0mXII9Ou}M9 z3t=50%Rn0oVI5)eQj}y8786!f5E*%Pvt$Uk8uVKQMRAFg!pN0aPA1GGEGD!N))BH*WJ8!q zSWIXktRrNr(Z+``ldzc3LRd%0a>-^5VkBWPp@p!HkgX*f!brkoLJMIXAzMc_gpq{F zgqehOgls+85JnOvOWc6+OhOA`9U;pnd%{RURzMQMWWr3sVnPdH9UiwP}+b%bm)*$_q&CKFl+>j>EvvLTElOeV}EtRrMw$%ZhJFqtruu$Yj& zOg4m(gvo@NgroU1zJ_n$+xchQOFSp`h^C6a(nVRLysKPQigX|7F6)}HltW)7YXgB+GPv~ld=ILUFH z<9Mfcovu2yaQ1Va@4U+SO=s4`qlu|$PSdxV-fkM#Y*Mq#W)3bxUCLY=8kS#-ClQV=RVN=HTMJVU%1!0H@d?=D|$5bXz!8ak?rxa z#|e)wJT7~D=aJMRtHqiYn_85%IMCuqi;r4dX<=&V*0Nj6SuHDD{;TDMmfoJrJXd>e z^E~Kz+Vhgl(w*IrV z@Qd^t;`f5za=+Dnd48pS`}~ghz2|q@@4DX)es}!1zro+Z-^IU$e|!I}{zd+;`S0`p z*#9&Ci~g7WulYCl-|_#=zimMKfQW#;0RsY(0wx4Z3rGvt7_cqiNWgmm9|fEb_#z-6 z@R`8Sz&?Tf11AN}2wWXl8hAd?zfHR~X>HE7`LxZKZN6z!-{wXe1^yneKm0A$Ao#ni z;mizw;p6~sww>85_=(H=_NMTa z@GIOT`L*zH`0w2N`gQJk{bu-X_-*cSy_I`gzso(X|G~Yiw{s8c9o)NmC-gR>7|eUGehL2PK2b3Lxc{ec|N3g>y4T#-4=er)SNsg_2h2VH zN9F&Y7szeDQmGTq_&MD5uU4)dul;YhyI!vHAKIyy&-|p^(yfC3?(5|4cUHM++I7E!{}*;C=JhsWufF4c{62c$x$9l{ z9p>!)#gaXjm;Ah*N?YHR`@F}!7uQ?jwR^6S;SUl2$vZxR`|{Umw10hC?%R)ReD1hG z?Y#blavyoQAXnWYf9+)-$NfojJJ0zv{sV>y|JCaH39I)Z^FPjJ=bFov>r1V_#C^^4 zgah9=_1Cx;+^d*J>pyww@3Op4J@pTn{}V6zR_1@SWxnFY|MHmg7TZwt7u#_EsinLk zF~7fy!58zMJgv7U=I8zLi`QiF#q#ez{rEh75&zm3U!K9-d|ET&a0UK2bZ(e(vRT2ur!SOUd6qRnr z|FgK|@Ve6T@xLCo9Dc4;!TQwkH{J())4!>FI;{Pq&a(G8+ z2LA)NydGCNf%_Tmn3g#kej)B>OZVV@uJmHu&zDZ){$=St+%J?~iu;w)PvCyF^m5$4 zFa2lSua#bf`}NYRalcV|EiR|axc^jo9qzYFKZpCB(i?CeDg9U6@0H$&8_K_kTPnW^ zx6H{=DGcC(8|7caT~hwzJm<-fxHoAQ@%zghkp+<(Fvmv^DcU%~yi^2502 z415ju+<~v-UOwXu4B$R@ zU&J3)=Ju$Ev_eBG1aZe3gfcvt6i*SE(;9}gL8n^`a zH3OI7zJA~e+@Bv>A3G1xCZx+2R7n< zU|=)uhxjp&a`>}>8*o1{um$%o25!Xt+`!GaUm5rj+=mB-albvV4fm0O9k>I7yKt8b zj^Lg<_$=I&gL`owH#mxW;o!4zHw}*AUN?9M_r}4)xHk_z7kB&M?YKJ!pO1TJu!4Jd zu!{SF!ExL>2J5(!gOj+8!3OS&29M#M8l1xY&x38;R}J2U`?G^x+}97z;J$J21nw^m z&f>m#@P)W<8N3Jgt%EPd{oTRSxDO28hx@L>yag!aVM5sk9%~<4Y+qM z*@D|#awBeQ$<6S#F9Y&{@RLA35MBx71L3EDd?36A$Opnt1NlJsSs>pTejdnohW`TO zJHsyk`Off5K)y5lGLY{KzY63#!<&J8SNIJe-xYof$ajUe0r{@*dqBP`+z;ft!tVq5 zuJ8bm?+)(;^4;NmK)ySC2*`Jb{{!T^!$*L8clc8v-yI$T@;%`%fqYN+B9QM1|8L0- z+%E(9p73`-z9)Qj$u8W#2lB!24Im#3{|MxR;oD0_a32Bk!SF9YJ{bOO$+K|7(wpJm zS1#R%d;ZeRxQ|=97xzLo_CE=aU%CbNhn9}wUJB&^AU_z61Np&l637pRyMg>@ z_*Ec38r}@#N5k(dJ%sx( z9}6F%%#Vft1LQ;DPl0?WJOt!J;m?75D0~XYhr*|Ud?@?{kPn5=0r~Op|A72>_%e_m z4}S;b$HP~F{CN0#AU_`d0mzSsZvgp;@GT%e5xx!NC&Iq~`HApvK=MAt&=%bC(2cl* zLpLKkEgRa1d(O~i+;fLUa90l9fO|fWe;(EhJq!17Kz=ej9!TC30rHdKQXoGWE+4u9 zcO8(Q3{L>^li`U#ekwc#$WMj;1mvf}(}u3c-2mjL!nHttDr};&@DVfWDOxVHlNnXnJY&xHLzekL5C%+G{_Kz=6N2IObLbB1oj z{V^av8;%0`*>ES2pA9YA`PncHY=?y_Y!;GVN=3+}ng?!sNU z>}Dk8H9&qfJPydOhQ|Z>)$l_=el=VQ1M=bUL?9myPX_Yg@Dv~)#(?Pt z+@}HgaM%Fk!{J&WzY|^n0r|b~dq9TL?*kc14*(fTe+XnK{SlC% z^dOL-^d~@u(tCj{l|BGusq`TrOQnwhSt|W0kfqW?K$c1$2eMT9b0CLG-v)B1^azkc zrGHuWT-<*HatL;L3vPM&?YM)>Z-#GPvwS1&R(+aUZ|@2HYP4@|@D8K%P^& z9LN==Cjhyk^h6+6l%BGD7WY2^xuWzmAXk(&EPo;HwLqR*x(>*5OV0rE+|my(zaIA{ zAkQt`0_3@+A6g* zRXPdep6~*+Jg*F|3%`Jt=56eJ{E|2l$=8|ffzr99OG{5GZ7AJTy0vtm^p(>21492y?_?$C*4KeO!L zmcR9!cbxN$b1qnMilnV<)^QB=M{f)#X0M0 z>yEAe==xuM!mcMCd*azu!gr{XL}L|H0q={JovO-$$GI4*vAQ*gKJk--RUn2WU0_kiU1M+597{ zgWtp7gZ%w5^6sDT_dj{*>b=Oj|BF|_-iPM%{ox7l3r~U*crtSHRY=WO@dnM+y#I7{ z_y~U=wUzc2Dq)nBm&{+hop@%R72X!x7(Y-slj!r!7z{W~ z@9`Iq?MkKBhjQtStg>G~qW`6^r1Yk+wDfDxq+dg-e+x4GTcA2`fu6htO7Yv!fZt@B$1ti>q{>gyt?$;gV&cnh5wmL zMoR4^>r3}8*;{)3lHV=eHS~$n_`oOmyT0@z%f3>&f7xB-A3JAwVCQ+m1Gk>Ho;+V0 zc*FT$A9&08pD2BF%_mCtuU)d_$rmhH^0W&^mt1+_*pgc>oLur@{vNvUYXcvp{wptD zzx1^iZ&~`)i+3$O{6l}d^x{j`mv&tG;ic1;4i7wd>DLF|e)-Q0eQNN34gJ*>SC_6? z|Mh{_UrGFxA70vf;@6hl$KT7J_~E55elTR%F{F7(-yJz|R z%U;aitCm-_b zTwgK&{&u%F(KuPzRd3Zh)n0vPqu#7_Z#m+rw{-1$T;)})BzU$@R+$pS*#6AEX@jwgD}#fHP!K6 zqutuuuGP04t+poXH5G4A2RpMnPS(d~diBHY&arwYOBk-zZml+&?L1~zy|=a6trz-k zCG4#ptM99yIM{A9eTc13b9yUCTDVDRd)n<|JKG&vW1UUJ)5mikDqrIa$-tP1cwzvA+JJd+GJ0r0D)$wE1Ny9l3nE7q(R<9wHIoRIcsn;6g zpk*w}addmVS)a@!57ejH$Ll*g?WwWq@dT-6)O!>^+B$eN4j;v9S`Sxy<41)tu~4cU zomPE$_#j}`+|f?W(bAhX-09R=5QWHvP#D;qjaF?}r#;iEjWz4_>9Of{k8y|<%*8Fi zYpzvx1lc;%>$O`M4cS|7&BT<5RWWq1Q*Cvp8%-Kn^WpC!5gwPaSZGhJ*&b(J_SAsn z>ojenzR)zjM$ofb5nbI z8)UA#(S}Xi0$rMLniZoa+lG1CD@YeP1l?u9|(?3`(h-?1_5n`t(+ zqv0Ld(V~Z)6tYEJuk}T4uTN~R_NqtNXvmNeAN*rIs1)B}+sp8XNHJVm=k*R@BQm2W zAiM-pRS;J~yQ|%!WAz@s?Va{?t$m`U<-DU=*LV}Vr_t4C+t?Fr*y%^L*)^=Xp;D_K zXAo|gs#K_{+HB4e8gJP2ZVERszeekgJP4&W(Jpq)&6@%{FD|HkZ3RGQFYqj|Jb@C7 z(SZocUKws$XmuIbCWqeapX>C|&S9S|DI^cef$?tDd_54JI--`#V=PPzv{*9H+cQ$_ zFyk{2#8z*=sC7)Xj+5O-K%S%Z@nbQOd9F93Kdm7^QX5iA+mK#)wTNQuM56=g^?Lj0 z(3y~$GWrl!Ow+;$>nYaQ$PI$RbF+KYWW84b**eF?&!w$gv>kAz?Wx{9J2ze{VN+ZQ zo8n4PSOk8PuY^qrb2kN$d~bF7j!ofN_1W7*wy2GTy8{Il6V*Xg4%yiQcFf_F=bktgkI zn=~c_$B#CewS95f5@tSOIb))YX=Sw2m=wj@3IXu-3!II=@+VJET$q=cmMqD|B}?!) z%q-klHrzx-jwa)eav6)nxdTfSv}^~(%vzfnSfbdAy2BIfqPKbRT4Rfs?1|e%Zt@ij zxTfbiUt%_bHWSwc1g%#6+Up%JHeRo>#nIr~XOn+6`{z1+H2C(}l0x!iLt!INSR1$o z46hF&o)fIfv11LSMo&n{OOh?C7!57$L{5Md?Ff7pA4n1zwKzC7_Ch+B;F|484HqCH zN&8_~x-qQrux{8unC}_har;bSY#I*ETOE!h~a4&co?gP*N1qk^Lo z+Vonp5llS;V)34lxIoW@4?F7!D0EEO6YY&+l*g)j*5(_$Q})?hvCnn-s8cs&>t(Z= zM9`-SPor0#igC61yg*D@yycXj0T&sbyFHMk#>I9$Q_b64;iCrGXA7SUovdMmy5Xa(cXga`bKmrWvq_zVh%U{qr`u=CNwVW^Nen>~_& zH|(x>XXdhV?;clvG%2kR$$GoAXT?STnD)N0%{Q{U6B z)<(96sVXmA3AyVVhDXBQnP#scc}+AuO2w(jC_0sco`tskyer;+G}Awx*J+xL&f4SOtZ*kfU9X9C8r zUXhQ@P@X+?Bw9tZ>Xkz+dFprJ9t^eiwr0Cqe@?K0u2d*&qFJk2(^w5NQ!Ur1RARH$ z19p#M$i}g9px&KkyY5RUjQzHDr@q0a!AdxbX(<3Rprft&*wJ=xw6zV*RHqsa)T=e* zp{m&Ifc%j8g(N#pPSYn#Iy7BFz&Gz!D4Rs-X$uuvz)m&MwMb^yzBQFvfY@NoR~>z^ z-v^;Ia!l`|$>Md^JC;qN_Rk=)@U?HP0`+uIei903tcN{cAfC}vN)Q`1-5VT6c^8A@r5jaOTW zRfG1mlaHp!3zwshV~8LTYbuB_irmqv0VU2{p*#6g5%gdRUXc}bB!J;Z!nSH_XQNZ! z*FG^ea|GHk9(JRqnXI=O<7t6_r%h0gt-ZU!l%*tzD(-2Ihmo!cbfH$CsIoY>*Sq6s z>{RvMYKuiwJ9redu8q_vzgej?T8O&UW)?ZsR+6=@-WewsS(Mm4y0u!<;-A%5>DwuV zW!RoJk4QwAuFf{~rRK(D3tX(Q%qNWy)QYh`2IIqAYy9=uIs<0}ZLXl|LKd5v9`0Ix zIA#z5x?u^bQ?g=BP`g>;S-^)}GnsIrd$66QO4_u7t1TAN_)+;)maSe^a*vuvT8j1D zXQZFrG64(Wg&Lg-x<**}N~Zogn{o=k3G?$P&|oV%P&5 zu`IFHK7{(QxvSbcTJJEP;5#K~ln>5OCI}`jK^qDfl<}qFjr!7+A+Zz-0cUB>Q?}bR zwN+?D$>trMn1Do>*I+ci7TVebdP2}GIjI+pp~#Lc1ixA(>e@rxeHYfm`^X5h6L=&r zRK_l%wK*r@P}g+z%u3WO%}Fa@wKjoxf3qaMo=I!7thar@xxbbX}TA61zWD3_iopxumwUa{$QZ>0FUFSN5Zu^aOkV;4t9{|lE8=gpj1luZHyXP94 zh6Y6c&Q2ZWADk=tpKdWBL;1wn78AFlKcavxW4INa)Xa1&4NbYVYfrs3**m(M*}0qc zRGVXW%~VsG+QfF;>8aWjd4LY1@T!H;mLUlo#eR;6VsU%faE?R%V)Ku-XPS_pJXX6H zMb3$pHtd*$EruzFjkvYFeq?5Hcwz$DAB#O)?H;J#>0xnGyBm{7oBZ|0Xq!QGlSe}j z2!b0#&gc!OTJLGj*)yBU@Y9H#A-JJP_o8}G7EypSq%^GyY#K>?{ zBqE~|I=k2jcFhM7&oq0m?KnR_8RQtJy!ihneQ^nO;vqwaAf2f%$e?9U&OA=qu`+d7;npt8tZ`>|G&)|lcJDaJ2C}uydEk_m zdLi;)n}bEg(46sOoTlL2;Tsh`+Ms>deZ%lR(>*_8jIn-}I>P>BKsVj8xx#-^vRHV; zr;Xl%2#lQYCi)IdPj;%cI`ZUr19s7fFU;fEOhaLBwC%+yMw^81(kaIG>i$rr8w;T2 zIy2ExS{StxHPG8a<1$`ojLViFu%hg1a|^e|0>rIR&EIEoDeQ^>CM5GNs%fdXql+Va$&tbiS@o!=x=O#o6X(#%Qxk+PnxS&2; zin#ls&6j{QH&KJKNRlRFk)+t|xrH_6)LfM+WTa)5B#rTrTD@&UVTd~3Gg;jtyb;IE z->RRm?_tg(kqViZj7JD*Td?ToOf~JxnWTL|hD>z}8jLIJlpKac98~DU-JTNLzKM-h zCkS+A=U5n+@Ugu*Rh?97V{#IlMTY=wY|h5$(N-~}kwUBmTs_%a?{+O~eM-k#QY?+M z?wsk&vic$jg7KdE@p>~SHT>eX3H)=TRbbrL56rX*@bv0gt@a6+NXkT_JfI`uxXHNR zM!#NjB4Vjl7zC*e+BnQeYq~)bVc$L6W0&b}t@lpU>#f5;vJMhpFL~gOqCfFfGOLK2 ziD}B|Xm6(L%)JX-hY{z3nBq~X=Z8-ysMhSBVZUlN2*EzJ`4o(cOh*MVY#NDj&;C82 z7qV$q&aH=m-AHXq^der zpKa;8Q*2wvcpbDOLP+Rpdj{@N_zQs(iL_{i%`@I+=R}CK0Q+gr$ghPUK9UF${kJ%^ zyr**6lBK1KyyPC{Ef_I3AMCq*9XV*z_Kqo(;4fMH?WrUB7N%S(NJw}T9CwP#8f#D0 z6{!kQ8@agS^fL=7Et1VbdVh>0y@J4Gzc|mOQWskEDO3Z zZQGANVuZB_t-1sC371~|dMICx~fsagAsPERBC&uGb6*d|rwi^I_}I8g2QLK#D3 z_GtT7?Hpluoj4?GT$bW*kCgtX@B+UHxFb_d1@y`Uui@S@(BPU5R1c7Sm*DAeh6| zhD39i8UCadQ{)M$5Lh@+6a^<(Eq6mLQ`m(4nASuxOz|$+$RIU1Zd7c8w+N#IQ|5KO zP`01zj6$|W;63bfCkt-x%uMcYHyh)yArYcBKT2rhQq34j9}Gk&C|_uKTs%gC+c{#J zrR(_In~tXP{cMAKnYJptaS%ZlcLc4G$0VSzw~ZVWkc?Tx-7aJk)zJaSJX4A7VW)2X zEO~dm+Uy;*I7EhB40cTCEUzCD@wY!>_e^WDGbc_0xk14UNyBD4V!<+$#S?8rX*Nb* zYFAPl`HmNvkN8Q(qw1tok$`WjHpgeoSJP=&M{%aBmvk(q2aYrI*@}d9+}dfMFgCye z*vZ)<=0s|ljmX+ddN?b`d8J~E!wgSOcG|^g2b>ojiMtne(=8h-m9CYW$urq8h5AXu z^8}q##7OBbUD~l#bmAyHdDz8x=&K~QuZ|tb(DxcF6h=N6X=`sShN6Kx(^9MFKxu%W z@Q2_j7fKWpG(ST&czM#CQOy%*-vtd1T7L zETR}NBjr4CXR|ul&4WH~&h*!t)syBcq^Gj>cVM(Q@y%v69|DPTXxC@+w3JDOW95@4 zM84DFVM-fKww63qNNwAmh(A=KG0hY(79OWmxQPrvGvfh2{%}9cNDh8nduTithmke? zgBT)Mv!e00p)>o3P8c#RTRd^#Om*^LTNKowP+Ov>?Lt+Xwc!>!z!X~~N0=O@WgzUk zK#z1Gr84}CITNDfF(ciWtbHg8h+t;{TjptaJ*PIRCS`gTkY2I8(|NqK)H**+Uf?WB zMT~K5Wz84T!j-ahRgYMth**|7!b;|(%EGRAp^Gt6C3NMmF=`=>P6QLbCh%xKsmo)^ zKlf(aa=#Y96J2hOfXOVvgQ6eqb562I6>lCrHzkhZtTvr7taOk`af zFgl?)_seG-4_p*lX9d$72DY>lFjI;#ei98&jO4*(yI+os?QHmiC-V zR_ItEl0BKoye%fwR1Cju)w%Bw9p?;}N$@b6n2e#-a1OjZZd_QC0 zbq-7lSK>Co%5K+Kly)%L5_9K-CQ5UPVBGD9kt$-E9e4G?C4K^X50R-*^G`l-=wj>L zK3nFfhf2r7uHaT)4K8|Tw5|%x4nqrqn1tJ{IuOVDSs-;%gu2QiEACUgK zK)McESj893NUXlS)swFO!Qe@zcdj6DJ@^<$pp=7%D&q-T%Ryw=ZjAJXIb*>xko7J) zo?*SmxT?+l3!gK28bdtyLPx@Uc94Yi4r{JB)}FR^i)4Nap`Pn( z)Fg@%y)fTQ!|WJ@?7HzeRc(40;YtT1vT;xv6vh3jsbK$LXk85Va|g)|Brm6WGB4+Z zl`a9neH>Rp*$+2T1H0xuYRVH#aS*lP3{SL=+!-z zW(Jn~Iq%Sp%n<2@ng!JnAqqo5BGOv)Dc%+Hp0W?+o(_7SGtH5d^nzjmxw$LfespkV z4sbS9Q~1yBWS@QMLkp!ELhCOL^+AtT6JXgp2Fh>|mQY50w*8|*^8;oy8K@80M8QEb zJ;PY%V6_Vz>lw8Wb4f1W<$SgDr|4RJHzwGc*=uT}W*A1-0Yd4h1^z@B2vx?zW@}O% z;lu;k0%c_S>z|4>5zv@@ z);L=$anab8`RQ@qNZTyC0lJ2!X-i4k_nfElhO#IRwoyF=kYk3ABn>M9X*$f9g>@FJ zOOcBLnhKO^;!)9#9CA|kPPz~Nl^Wf@3(i?~y9PqQJ+QJmnT`Rhrrg&wsL1R|eSlgD zgI=VXCM&g$>l2@iB?M+-Ce;mJ;;pc4xo%olHVAYKCh&S#dU{?zh-ai8=kOJlwugNz zq`q{)zzT+xwa1zJ#@&TTA!s_-H42ag)K$xu3a_5@u(CkMJs<_9`?M9{>dv8N`(n&9+gSWwGyroLNLqv1h@wkcV4&y2}@&IPzMrm7uX85hqZLh5q__~J+)YrR$H!n^aDtXD{{ORkvLon6c}6! zYak6LT`06TbeL#jI?#;P=uEFmSA0M$k>YoQb*AkoM31l_3qgNm!?vLK!?4z~LG2LQz8; z9UO|m7_T=+CScS#>(RaDxVs`iOe5SND0VD%PpzfIxWd>(A==fNzCN1R@+)AfDjD`G zV4UGeJn?{IKWBu}6C5>>hJRC&-OPsKKb>Bbb)6bDlS zj1)34m`TwS6&eovS}Qt=p)zr3>CV7TEMhPmo|&2_8@J*h#2YdJd~9pUQ+VYta`+GM5^nR{HW5A1t^f6NSG7H7DSv3y}xk!GHIAwB>s^}^RhjM11 zJ#`tI14HBEDe)n$h$@C&9CW=(Nfx04n@8B&Vg}BMbsOmQy|;keG=#hh{7CQmyHk`Vo z<>rlTe8oBTJ5-YJK_HFMS@gUBondH(B!xs4V`Ew;Zz`A3<}?|0&x4VDC`J`)*2(e) z(N@RRvu@hlEYAI5xdi{vnv6Ul%g5OQ8{l~ipRrNdnTGh~?K2TxG`kWl-qk4#?en{M zh4?~Ois1dW8++Q=%$fPUiqiRK+`!v4I2AE!g$Z%f*S>gTpo!51zhXkCkU4G>&KO6& zr@z(YEHXtQJ4W!@Vd17&_7(BUw2}!#4-f<6oM|7+LUaHFWE5pF6@L3z^b*~RUX)7` zH?-&Bjgb?5A?f0TRC!?#wflg zy6;E%2|(mOmNgN-eKTF)Ss=s35Dnv0G*wtkQL~eElr&7mw73|GQH}gK2D3>QflB3KzcOt3K^moMB_w^0~?}^H8-D*jAlAVB#oqFf<3cR$YN56 z+9_>U7R+?r7UJ;DzS0%c1if8$Bms%itlnwd!qRiI8cyxHZz6 zXe0f=@wwNJS}j%_QuDSd3L*y2V#FbuC)%53kxpnWxEEW_Is~0!eWR5oS<9RVE3ptp z-Z0YDAs-qY~ z3`al(r(zURY3*=_fap7z;Q`dlhwIbvy&#Ue<<}#3=n8R8@VCnj6HJL@_nbT3qmAjn z)WUtr=gMd#-)SB)kSxjT3$o*vyp)0tWA@qzY}Ki0)0s^QeIxZkm{P!X2Ik$@CXGKf z5bZD=nh%Y0CHX@*sG*L-Ku2144nAXmWhX4?7X8pjH&qV@q!)kz zRvjX>9B7!IO*y+SZ%Shr75|drH?}<3l&y)LoSScm@=fSDw?PO zt<3y3Y_i}_i9!^WAj{bl=XM4uBnWZlDXc{nMUWIF5Rudrezr`MQovRq=X+|3YQpph z9qD$lM+~|t(evl-*bAuLw&L(O|7={8%crB-z<9L5K7OJBL(t&Hxll{jR^pQ` ziiql3)2(G&R3V+s*C-?N-C=;Bk6ag;g zQlYmdC20uzW9oL-J*B%zYYK51RO^np%ySd! zJ~%c2j7N%qT(Y6~xv_3!65+>x1vLQCPL0RAQtX~K4^yZkDWWHfZ4R;$iI;e@y*x{#5{+6OIs!0 zhIsBgsF8N*KRi~_t_>fDj~BPd)}Q4nsFI7(>P2q-!j@&sYnID5 zgDf~5t#6V+mUH#VP-;}%mh(*R-QFf#lhYNq#&^4nDtW0uel=AmLYPC+1cfj{WG@(P z!4Qtw#?s{YU)RjpSm#7YwM-H0XQnx8)yyg;92&_Uav+(_+BBPKua5z3^wGRl@L3rATN$X2ly5Y_`e0X+A^sMdKN@&xuGo>F*D zEmRxeS3*))aeIbC?UAuxHg51D(>zORIK{;_7Kyk~Vc1r(XzVd+3v0fCE+ zW|D>R@e%HL3g!Hn8X!=HUx;YM!6so+g@UGlXC6+o9+UeIO&o**b<)oclRwc=WLIb* zqN(Ts<}{u~BRb3p2o*}sie5D*di&~$aZUxSfQmnrFYQkBsYLO+#(~3MX;{I6L^;S+ z$8=Naf*d!Ws&-#K37JUYueBgIl7&lOdSgITmMc@4Hdv+w+vqkL39+>rSTu-@nubEJ z)J2~vl-{i|X$dZz?W-P-VYBzigSN47K0p!qz=m{lSJ6?ONpI%9CAJ}fG1m6X3inLy z9ox;f@Z4BW$BBM14>Hg=wlc|(3-?lBhWy))MP-&F!qyeugmV;Pa(;YmI?t3Czt zV=S;RY5yLi++}YUKeiGIl%ya_Z77Pt$(k0CiWiT+e>H`bHwSoRkK`Z@%UHU5P&05n zYKBYttPl>fh_fH02#~%`Ra+x`p=1S1u#dP%=W`?_B#S$UYX0gQYB5fe$ifRIN9;VI zqN`$xX-`vYjV;IZnb<7iMQ=Ba@z+S#h#|Hxl9{`EfwwZoW{yXoxm&t}Z2`^cCR2y)1#Z_b!V0n(Hx#%AiXIJ&}2OE@A z>}+=f9HIN-(=zI%)-p3LLta_?i&T3b?O7)gLJy)nD#Xm20MV9Y*GJDmY#9=I_Qa%g zk@@T$k#1P%9T;PSsI6FbBsvQvX@t=I9WlN=129&~F_3=i^p{SFXR=Gi3QjnmP3etj?)~aghDJ_S6=DczkXc<4Go5>j&CEwTK-FM2ggsWo0gi+V!4WtT zDrZ|RL?(`~5aoqSBAl8oL<{#=rQ*o#DF^9myF5n%InV-k z*wtk04U8hk(st8x!Su+1XGp|*7xrXUd^wBd(4yejFuf9N3>R12oEXsB{>X}%DHXvi zZ;}-A+?DG5xU3qA%^{6*R6TvMf`#dj9cB*7RhKz2C&V9Gb9cc9o5xxh%j)GZYPlU4 zdR%e--6EsfMY6A=SqFy=4~w#QmxG#`7(r4gTZ5wKH>98=hN86{a%^Y&jE`r!rOHw_ zLq@+=>Vs`3)LqmDnffZm_(ca@8SP(5)x7cVa-A>MT&`f)C*sA~ubr{cOASEVN&`RAFfzV+szFaTa?7d{KCtYRlROB5|cJ z;zY5+Ohu75L5*@LHjA4!p*9ODH47*$3;60|Q$g$PlpyKAyF7F}LmbRdI&SL1lU!G+ z^o}-|IiCxEpvKmL6m(vM`=lDN6{9s|3lc_UY8w3arIBVm=1H^8?L~X{3e)*43aZAU z&w{96RY+4ZBAXS8FgQW6%w4qh$p}oEqOKXJcHNsxXB8cDcq80*D@IF*ruAALj7z{H zgjsnWDM@Iwe$D_I!K-y$?!mP2>wPHm^vs1JvuAV+h3%oQ7?k0uni{W1%doVI?trDv zAs#S<(!q&`rY$Z*c{2x1#EZA(^^h(Urm$_e&NW6m2{0W_rhwEFS;`VsnLZeEIYQYa z`s^&6;@n`)Cpx^xRth|#%o@E0lsuD@(kyI;Nw%j4tmF2`MO${PQ&n_ZwJ|%=+L4|o zP&4}^nL-MW9A&?ck?~qmOu$b~Vz-BZ1ZE~&!&Vc}&p55;L|&E)+364z8m1Lxst#xR z;v+j)5Z)7&FGd+PH(uSZG*T56$UK4pcB>mFfo=)ngCT0t4SIcRv=z-y8si=r3BCu= zZn}pvZ}()F5QDN|gPpczC_S3|6pPEbufcO6G{b;UP(eiTbt ziE&%9_x+Aiyz4VR-Yb_WgPGn#a`N7&i!7cz!ht0vg3K%?Q}39KV0um} z4wjuj&bsontA~kqVa%4nL^O0%=#SQwkvzsnpg+#HXANNXo1aA{!_k0=O&UwE%6Jqb zR107Xpqj=rBxfR`a99FZ;te4EuET{!w;x;qn8JAM<$m>_+mB)vbvjjd zVs98_udx#?5VXoCvP0V4Ro%0N;+T-VSkfXnh_1-W!0ah1N3){rNh?3ma52LwfVOnU z8@zmEAyJ$i_GES6;6-I12gPj^tm2rw(FvK4W7<+A@(1c3Q@7_)`$O1vc%sj|vps4B z2NV?2vtKUQ@0ZW|8sU?jHZ^a6_5u;By{IzK(n?u^j1=G8S|GP%EW3!cKpIzH%xWyA zZ*MzB(==VY)2t_sXHG(~Ba6}jkcZ8ZVz>+4CHyfw*q-{Xz?3Gky<~3{n{%3ej)Wz%iP>f}1IG@oquH z^>FG;bXcYU}77JVaWImU3$h(oCK+6>Jk zxe{UKXPF7H?ZIhfr+55l8v8fV@xky7$QUic^ZBLhkb`l8DPy$b0E&-h_fE#oVoVNA z^mG>J&#YrJ*&L7F-FA7@USGHQEd&Ln3mUuwt0&3BOe1_qfXvvLnWz{=a%kx^4@KMLrT)#Ge zzPGTQv>Rf<`SL40u5uBEn2uspuh2*>!`8>UI(g8IOqfZfiKjdk{RoDc-#Fq5#LA#J z4Q5)=rG{!Iv&M0Yua_dMMD0Kf2lDYaPt*F_k2F@tHQ4GWSoas_FPGmM;EAV zC6Dd1{n3Rldr&@4_a3GVLB||<+H=x?YS=Ts>q;Oay(~)VObi75-B0EXHFn&@g=TpG z{GcSZKTQGBu09J;5<8e_j29`&++))?j*l+)zyHAW2VSkzjCEuYJ1TvYrN@zDMDs(^ z$5upv#uSf7A7x?Q7n443+3=Y1O8$erebl)lOSj-*=woV#O~_;GLp%U|l+_j%uQSo6 zqBzsh=NT$Uho0Jr&j5B7%S=@DF_rM|Uuyp$Rrf8o$56vUOYX53v&gc03~SeRhWw9yIewo?ic7KxdebeNDwT1+?_vx>@+0a-u~sVM zXekSa(@kt~eO|SdqopBefP%bRN>_R0cEx zpP9jAfr(Ux*+yDviId=wO4ldZtu0jUvYs>u*i8>~^#qW6$1QaimWO7tg{r(4#JEY7 zn@sJ*+{$nc4mdMqk~qlI@{#|I+%OEt$y{44J`-L=kr`)`;!NVsm}$oQIOoLhg2|^R zN8rw2Qe;WT1q;sY{eA#fF3?}=N|TQvmFRj#9^;~(0oVbCr}&TGR52KU0aa$Y9DUZ7 z=--CXD38VAkiO$2Vxo_W6kK-JL67knBI#Bdm%gbyUKzI}s^f>y^jLW@RvBC&q)W{* z#y4Qi`vTFfi0Ffix(Qu^t{f%17=IIQ{1~6+@>?w2K_b#_Tm(}kIAY9u94VfRSSs!1 zu?#V~I=&0t{ve8%qVbx6!1ldbD- zE(0fRi#0C3jHZTVCjgRVbOF$%CQNrEQ|LK)e((f;!`u^~9m1X-%}Jc9&MXj&F{SV0 z;uXu_S*n`sk4aciO)doUUkLQJ$>=K9XZeD1j2^o>$~G;~57X#MRImQx_kZe{# z=HUt(>HKcyZKzWanX!5)gh}PF9gE65wGi%M4`m6w9x}?(l}3hIitmSH(M&oELceet zU&Gms5)sSbcmogxxoC+Z=FxtY7zf0uZ+yOpcE)gDo$;4I4G)IR<~QY%#+Uayq%F#9 za$+!%O|K_Lnvgo19f-!*eW=!=*9el(*-#<98fded1)!h?;ewtz=|_a72pr>=7KUc!6PgP>8IzzOW%@lqA-ll=Yf>h>7zJ zWgb7~k*d%xwIvworrh7K?40vai1$JQH^p(2p+VI5KbuF#Fx9ZbLCfGOO}j~utJ#%e zOJ4?S3doEu`SmLscIcHNT$$E)>XDKX=}6%yVW)#EmJtfS9^0Cl&f8@tLnA)tqZ|rj zc!5%G)U6!yNdN8e2oo<J|Imc4GWKh) z=j*cr#|Ez1wi?;AiuVf-=mxtLykLU%sQKXWw^=YFByTU;9H4NvezV}a@*m?*T|`}D z_j7$a<|jc!2#b-KAA&WZXZ4yC#IJpT|3V$ZCI2O03#v@RwQiQ`K0ore$V3r5At6;E z#4nmtGJ3;!r(ssVheM3(mzm{R<7E6-T}QK1!^D?a$MP#aebJmz=p;EmbL~sbTNYV7 zyPXKeYMi7=w8qYcYokoy91Hp|u6{T8sqa~?rJ_Hx^;)A$#W-vIt1O;p7trA z(kZSEv&rfgX@*-hnNz@H5ari{I1;E&a+^*+kdgWIGai`jr6j}fnLM1fvW@bS^=)EV6_7Z^HQRv4y>&I;}}@I{K-Sczte`JG%OH>nzA5qW5D= zdN!dWE#N(5wvtc@*dI5oJR5Rnm)g+4W%ihnZ2FxHS=G&lfT_N%KE7EtG-`!k)Epkk z!g|Us3pq(+_rdTgL8zt4@42BRS&Zxn*bg)pd8972rYsprPZ82iB)@*YJ^3B`?77ht zCH-vjd(+&kNAWs+Nonx~wiJ|%2`;6epg~}9`g*V>@ zC6)3sMY!Fd=p+NgAw-Io-Il*}p&L0e+%o!_lKo5P$3TJD{5O zNa&VXOSoSdB{XD-JM>FHPNXo#@j!N1wH<5B2Ip1)$S^Z{^^1CX(QgN5H?yp0vriV~ zcGkeQa=n5UYI0O#e!l5eG_t{n6x_UBVEiY8!`&g=up_iWH5>`eP!F}RF6%#G{F>DCe@pnTAlV^f^VYoKjLymEB&xFZvH1r7Zvt#`8vTDSu9v*-p zg(F-bxjTt}CQOGP4(EgyQrkTttSHnuT&y#1*#>KKn|!JPfr@XJRvxf#+iDs&e^@(C zTdG!TogVW-NeHX=k#>R{JNar1!o>&4!*P_gunJt3vVJS2w@KqyrYLD0&>E|J{K8ec zttV4JwZd$u^o?iU=1^a_FNZBRuVGmmf0!Ej%Uee;tJLqcPvCE4Gp81>3;Y5Fc{P(y z2;rh9SPYj+>FE@$ZjpCG2;GHi-w{qyGC%DGl=|6XCRF15TBaGBw!u2qXjD7Y;Jq%k zQgfkF!oc%FSiXUh;qOCOe{(qVzp#2MrPUb2b$lmO!m4%F2hOoAB@C?#Kd$(-KCYV4 zb>NL~FRbOYD?&}$b%Y-AbZ7{te(}+Cd&E$pf9RePuBK3RbrKXw1KK5yAG4+!`BbqG zc?!5RQ619mB1gjp$)`amx-J|frfLKE!!+qCW zKlsLKIo0UKRW^b-DywTkgr;@bmv{fzm9E*wxX%EwQ2q%U<$MXO3#H{+NGB*a+>@ zRB8tzv5mAk?cq6BVw;q6G=$Cj$)%~(qHU1Mo5ohoF|g(+F(RIrV-w#7$(0_46T~{w zQu!jVBE>vXW%aG2-wmrnBPLv}5kKL}baH-+i}S4Zj#!K26XqsTv6oh;ob6WDI%}UJ z;zCg2_8(L|Tdn`9TXSFpe9IWvqD@6}=NrKUP(DLW*fxY6q-hj3#7#~_B3z+SJwvNE z=C!3w;mo5Eo_nj!PI0z((GtvZtaaLgG{Yj1+iZ?fxue9+9r+?*4V53%2==#RC#?`E z57#do|9$#9wx9f3R~0aGhQ4VY5|ukfxMO`?EbSn3G9HdG8u>;SPQ7&4rcb+j1qye9 zDl~PPEPlv`LPa=);?0m#!-SX`S`G4J$=lbAjkj6zvAY9lQaAIm$B5@)@z{M)-!Qz; z6n($pQHg2b!r_HV=+Il|(9V82iafR=!D0WsX3Ta`Cz#uH%IJpGzWj5ZB`iO} zh&1^Zp1xR3niG+EZG$2VO_jt3kz+z}yo&Lvy_@G*J8Wg7Z9=JGwa1N7YSmgAwiQb_ zbIHnE3whqGb(eUlTAhjOPM8u_^{0gkJiO0(m~w@NkN=2;;(15rgnsFXD&~z z%1cR7k+)oBn1s_e=fz&S{3N{4%8Jle&&4Tk!Q7F8+r4;eY`;^6_bi26`kj?q6s8n*oPA$+Q=0H+ zfj)0h8=d{Hum{c)*hrmOq+DyU|m!3sG))~ts>Uom!6YU!X_5d|# zg!nn+ISCi}A zxD-}zV+N|$lbDy7#N5Uh!-u@|L*!5|R9YCg5!rBz5=1f8YRUDI=(Q?c!bPqf;BU27 zg0tqa+=1oj3sT;zLg|{TVhQ=a=jDh}jPp-4gBu3c(^*6U33Sp#g!5ExjZv?W9#(s3 zA1Q($X6+VqAe)dhujl(r`xh=MuECsUh9@l?pLhvpN5k^TSo-4o(+DF}W31-l&*Hm= zSaQwGamr5IP`GO0_K00m*%A$eRc9(yGcS#T#y`&6Qx_}sAmycTbuCj^A)4qsL%70m zLv+^b)vQ+Or;8@xvP5Ns55mHh&6_k7%)=F09f`5m-1b8RX0!_a0C|y^T9v$)ztnnY z;ffRw%nD(uC>8z-gn3isRgK<9VqtC<+Hp5ny()hLqj(6skw`Z`f6g^JSH-KxA?*GB zW%jerQXFX2IWN?o7FHB^#}#V1Mul3|imHlBRxYRiVO22>m?5qHi8Jt3#g>ZFZi8xx z6Ssb>5}ng*9iwg2Av~)Hov()qtp63wPaQ?U8Vs*4CNkN~`9vts`kVuhE>Xmf~(0d~wQGXI+a12`|C%9a8q} z2~zEd+mytTuV~?bD|B+5c-nQ;s^jDkhZ#=&L0(KTVI2&HSdSw6l9*p@HxhkRfg`hW zYSR-lFD;TZgc4y>mCgt}iSSb>(@|9E4x!w|pZtAuCK8W9MF?3(@*Z4GK`TCy5i^-(I?Df%3qdM0?GlSV}(|2U*bxlVv) zE`my^59^01N87B#dp{;{2;~tO3+oqawGeAYZ5Us8If+T!5z7=auktk7C;8Jns4vcF z9v~)7v9ny`q&Z9EVnw)Ol#;YnYox~Mf!GCY%i2bCbTC3l;=;U5`sRgOmqr0IA8U)y z-*tUr-^HY>z2SnKfUdI<(!3?bxAJJzEN=b$MJWAWt`7@q=R<_`BIN3aG=;vk2+GO1 zmW6NB(l;)WZi`GCJ+P(rHzv$xw&;E7z_n&dgz5S|~!_ zMou9?J?gv{QzJV!AQX@+DP4sWRgx&g70iM}zC@)Gm5#}msxLWFMlEmckjn4esnRqc zqHQ@MiQn?}Xs<3^?+f{ypxwlmLWjkwGHOsPm+VBN^Hk{A$iic|*#0RUj%t-canA0! zYq64w`*qrf&rr_AuAmelYqInU=((s)r3h85ZE@X2F^AfnpE8B37wd-;k`uOr=_GG) z9(pdM_Di93KwiuDfqb#~UOd6bx^BUjw~$;!O{8J*oWqP#E{7(K%R%r=Czay2)`3wR z5-i%Uyae}!8y9QkT*w7#JBz%+$N4$;gvDeSaeSH~jX5LnBa5|eA$~$QnzlxfQpRJ^ z7A};(pOS<{xSEA|nGsuQ#=yjiqfUn@zb8fIig6(~eTAtTpvl`k1g| zF-$z0+*unIo!eq5f<8h!_{nyoy^Qmsb9?4|S-p$4K2fjv8@Ti})3%F>SuzQB5xKI+ zaA*fAvXJvj$=Wo!*oYSCwZ>meoLE(-k2{S%@S~d4qu8vxGwezEzViLc3#-&Fv2D^3 zoqz!=wzFuzvbf&kHgbyZkD8c1eQf_u;L@`&+;;gr`WB@q)S zikg@}9$X|QV*~pzve-MZctxGAI2TFJ8gr=45{VFt?^N3Jr57mnOwy5#0ky8e0B2ce z*dgcV78R40&2ldyIcjg6pL2)hWMmhm01M^XPd~-1YRok^i=PcGlv@(KjwZwNbFnVz zm?cuVHIs{O$-HCQ<|sdfOQM&!NzG`k_vc4GX%TH|oT+p%;F`5mzVncxq<%avx+d{a z!i#f^XQ=6zYuHtuSaNBX#jUs&SS5(ZcCpiW-f^2L359}k4tHI+6SyPRs$?+WakGeu zYDrDva@tM6zVl= z#3ZbASgRu;Z?2b2+_UoGmc*%&RIV#IjMB7tWj3Tb!v%R+IbwvTYCz{6 zSEO<^$VX_C*c`T`LTg06XJgxwteD-lBQ3t7R4803Tw z8<@4JcJ(MN zHrUdWd@8@AJ^n>DLA4`SAG^q-QZ;LH+X3M_T-*+FV*coQGrzvDc7eFnbK}AawMbhc z{TUL0fvhb`M)TGsS$+z5zi^(m3P0|`YUv`!?t{ejmC?6#<$aZ+T$I6Um5G7INx8T3Wd;{D z3UF9otp)f?yfwKnCv1ylExHAJPbF$PMhTB|WkkhBLU_#lEwc71QMFN{)vdU0U9Tnz zB693?h!AUaF3t`}r=&x#bR?P!Wb?|nQrImjqcxeBEFTfKBV$Y3xX|ICvjz_7Do|~l z(NJ?yoKbBKw*l?h6tymXNOXdBb(l+;<0Pd{7^uKXKuxRrBJItUFllR(0$8e(DMm5% zTr*fPLs*_iHf$;Csnlv$58XzZt6hHZHH^{oUMSS?{KwvhJ(N{6XIY^AKhV8im34^(C>`1_kcO({W-0gA`|+JKmi;BT*>_^d^KwVQBncj(k)mBvG#XXA z`ummjbUS9B2&F4Tqr}4b&bObkRDzqDL1l-X=Ma_jK5Oq5C76JB(D!)3gd?S;I6Hpt z+wC+0&bs;Gn%irNdvaBa@A6V#^ni3z0;83SuH0mR;OYoFo?DUA;IJa?IIPd}WNsw| zf<|z0Hd?TlI#U@7w<-2;Q3cs!D|PX?E4E&9CIzZr zeNx}WZH8?{X|1^W|}Go$t*uxP<@wk+Uf&^(w#3k<>2X@Y&?= zADf&GO5f100nkxn6J9y&I-7DQ8CS>gTv1b{%v6f_>$52*!Mmm-$@PnAL-O7n(FpcQ zbHc*nI!c^lPX8pyS`Q267jx%1$IK?s&VMX~o#5tKjnkP+F&zH^wC0&1%+Bvg&IxMQ z(>|#2^J8VLwcNN>>bK&W>4z4ltdW!M%56kcj$f%wbhlFI7Z9R=GYW z_?OEs1xHvRLZJ;yv0}|+QWP%EV~6RJEVv{5c`nF0ixV!99ia?wq+*-HFh0p4N63GM z%UpM-=wh7^|hi|vik;4%16aneqVj*R9q^6 zlc=tW<;IdM zghshmWa|>N*jB0Vv=Uwjb-YKIebGKT$!q)!i0ld`4fR;X>(5*UIfon~T%RMw2J5|0 z@+qhs^CLyo=m@xY4m$KlFWz{%z5c%I({C z*xa-j70t6ox<>j!wS}iUwLVU19%yoRIUUM^JV@jLf4y7c;d4Y$ySUoP@y-VXC zI6U&UdELSRtv#v7eOy@~;Ok;A!f@PtB*@exinr*y`29rvU{c0 zq~nS(K_uO|(0tQbTv;bdATxdOvf>c5{+-hvH7r+odq|Zu!{Jchp@zo`N7LP?Gnb>8 zv4eqYbO7bH(RtlnVv5u?uRmO~Fy+i29Pl~OVSQKY^3>nVM-&-dX^|%j6B)X?z$n%( z@4OG>!b^TG5lc%%@%`jw;h28DCY?4WvLn7_Ar58XZa!ZfMfA%T*kZy<*N9je&NRuv z$cQ$=c_|m=Bqx){GG#v(iep1h5v;A>HIAZrKk3vZ4{SwzgZji zMOIB`?G{Re6?r(UQk%3*M6QCXh1#aX|Aq4uE1%FmTr$dc7!s$G2VM-MOd+6zfbiVn z$cPZigjU>Ov0Yw|IJ7heIi!=Y`OsmDmYegWT7J%Rj?&_}u=50tJ|X5XIn*zmnDq7c zBHz^a603!*Ug_(^JrPr#t4jEqlh*`o#m~zf!YjVL?xQ!{@xfbP|I&}&|5ulM@k?QV zL#x4crP8t`IIAy^ccq;2l6B?M%9R%T+;i3q;V+lV%gRehTXX7nhxlA(-?D-$DW<&a zf;Fe!Na%Hg>%v+Ue5qnys~C<+EOBk%V0q1{kFB6^Wxs6o>FZ;*)6b94?omNsPx;OB z#?tE3hdc()xmMl}5fXS$*G^G!&=r8qzrP75t$A#(C+w^2(LwEe|eTbKl=CxwaH84@=G|tvUUm zxqqmP_dQJFsefG(D5JETGWe`My=18>xvM-70uvb4+`Gj`{!OJdcP+hO%{_cHua`c4 z&H1JB<(iW>mGrp>caR$HQtJiGyqDJoD{WSDzGimK3^RJJP~%*y|2yXoEm?Ewr5CI| z^{Vnp{;e5S-qZN3O?MfhoW5&?&HT$LY;8#ZF9$$z%I0xi0N`s&)Tpsq2?mBW!_>EO zNnkKmUOu#J<(gA(AiLog2(_|I3BOiaed^cwe`zSKT>X;LP#9ERaF!9hba3hFQ@>qa zdMTwWvr;Zy&Ir&sGH620qtQ`0Ys0cs-twWLWneo0X=c>KwL{C6Eh}GIsJ&c%{E(MH zQ1;yir;@E7ME)y#OFzL=!Tlw^N`e93x6FAqYH*V5eO31aAi^ULMS)j{>l zVlNMumzJKRtV06xI@HM$#KNMy?2Ey;EMGBu*^pZ8(g<1uy;&@nHTUj@=rE+0gXYf{ z;Jv$-g)(#aoi$Uoeo8|_gN#YJ3=*t)$;L~Ct1sEOQpn5_WQa7Lp|l$m%Vw?$gAEL-;2NvM~l z#Ij_GvfFKG>`+FfKElbtru0meXQv%mj$&bjv%RTLj4Gu`N>sLQH*&pnUteDCi& z=g?~gyRFZSPyB~EmtKcjZ_7nu9v%*h?^&N0-y3ppS$xm;ec|(f#|?5BjQq`h0JZpD zc4;9%bis{&VY@>cK{dPhBSV>w?_m7aIz7>_V6*zOv@m!F1M^Luk3Yi{jm0pJK*oR5 zyuc`yeyGcRg4p7Fx58$6gkyZ8-}nL_KHGQePOxt0AOyl--*yeayCdP0S{Ff3 zV#n>EDj?^VTCa`^Y}xY8zCQPQ*Glf_>(eB`nwU=^>E6MekZAVm5nYa}WA5V%_e8g5 zuf7bHUwt9lQYV-iChXQe-`>(Y0YTrnErNv%LZ`i%TlrzOhFd=xzM2OW^a=QZC+=5e z2KX6_dWAeg!%HxZPsArPJNn?VyMTxdczEf%{FSWvF2A5v&s|Y(crv{BKIQ0r*F34v?(E_Rbbh$~ zHbMiQ)_(hoxowgT9}c&n(iSWp#9um(yn|vjfb7+4J^jOgZ1DsAs_DV()o*;EZ@^C> z&@&d5U3#B(-Us|P7;fHn_i*c>O#guBgW0w(Ml6eOQ}7ND(hc(d$n!Ku@yXO})vGx||2tx=)D(sxz4@ZsZZc`&-o zO-g@1pb^e4{ampB&bA2F0c!v;VY6sB09`k3*XZCFKj$_#$~&VWt`r;MHvfO_n$vao z>hHPspf`w+css1MRpm-1>>Ij7nb z{m?-5U;yu~=%x01d~CxIb^B-f{D5`( zAyx5-eH3CZm5o{NvT~?x!i8+>Wyn|{>hHTveYIX*)m&V=RR#GY-Qn7Hq^pzf2KCfO zX%OHBN|vNH=-zkx0A#>#zy4Aq{S}c2PD}3&_S`nWkc?9Js|SOyyVm(kKeC~}=N`I6 zjV1(PkFIhjfrNqgdERQDQFl;tT)Rv6@z7}ueAvclb`I_w?5DY0hEKOpHeIicb7`1| zs`OUjd=Kp-)**7Khf=N$`TuJM2$g5YhoW04`ypzM`!0oJFx$#!TZL?^m~EA_t=F@y zX129pwO$)_fA-qE=C{M`28XZhAHMeF@U>^|fPuFbve(9WLC>!p5hLeM&*H!C`??!+ z>rE73t3Upb-{~6UZ$A$;UD?GC`D7!_F8BN%{;21cZ5jRVzXx`-_)!=k97Fn<&HlB5-Y@F% zI_(VbXQXdCg&p|I9-qS-!>w-$-rF!-U@WRrs>rnk#I*Xl==s3lc3C#9Z}4O%v`Xzu z88xw_%e7d=X}#_EZ7XP@t+(N=pE14vGtuXAcTn{b!ck1G1@r&;@U`FMvm`Z7zDZ~9 z?(0`y9npnO_TEO-WcB%;?YVwcg9lceo`^$%nq)Z0kMR)|g;`+j6&pzQe5_U?@fK^Sm4DcV&?b44{|Fh8u4G zKEjI9+1Aq-u2$Dz&raFG{O2nwPy4^;7ue8@=xe8JC}*IUvGLmu?!a;Jqe1FMSEgp! zQ-ill!)|?GeBAwog+eO*5`wo4Wul$;N08HwZ9|z`jKp^CFh%3Qh*@1r)C{s3sQDcJ zmJPt@gqa;fJ+8IXGp3%#hpDzD$^q3F1K*wyx((ksKYZ;c zXbBjGXZcm3-%RS27)v!HQ~8q|ibT+s-3QqJdjVO0V1(-K4;Uu3-|WvxzaAWr+5|e_ zKXC~9gDeV{o`7`W7N~|semCl|d%&0Y+4ep!EL(q+ZT%5WMLLTm*!m+4G5&y%ZvD~c z`)+rAplb%U!9kPzp&76S0WUT+2(eOhz&e|4q3~q-KNH>4=hX$?=Qoh#?YUbsgF`)o z0|RheHPC*0U@+)dZE?+OpV0h|xn&yowV%6((!pRY(9^(ueG(ZUf$>OF5cHM**cknT zeYd0^I4VOI=-DStM*537ga%^s;w*70)d-+efJNhcrZ#@=*oLd?tqhFoz8=-Y#M-Cu zuBmKJ1$ygt4MTk%e(QFdgCE#rwWOoHb+?}J2MXY8>&Kt%lcfU=cXq^dNvV2EzvpKD z#{*KFu{Dk(GERV7tv~D4S7BPuub|Z8lQ=uv`f0ZHGnm`Yr1^2-o-tQb8YQOQdO-4_ z^)u=XsPj{?SPBl9&Y~x%@=|<%y1nmK-Osi@(Q|e8lRjs`4ER6W&|RhObJ-E8uyqN_ zPWO(7U;>?ogHq&fvF4v;7aU;K^l^UGxBa?22{Xzd;Ens7uaZNA8GvO=iAz zq{nWY(A^ifwEivQK*+zf-?%C^5QYtWy4RCn2*B zy)S~BcLlFt%DZC@iq?nOzT4Dx;QI_?Ts{jpHFs4U=pYXUo%hV>5um!M>5;>LAD)|+ z3#xDw5S)VF_CBWHHu)fr1X%c)$b5(G7wo2!L9lQCFoOpZ{mV+Cgbly7fIndyFX-I;BFk2!SA61s4|0&KSZeeWc&Dc4NnssO(*sb1f1#0oLI^>+5H zcVw+z{eWUn82xj=}@zYUE6}J-N5vzZ2$3dB?un?~5+pdY22ZaB$p-vVdA-mAX%q z$8I%Avve!*1U)oZg?nah{|SB?`|yAA0YKY?VcC0fSo{bRT+T)PS^8d&OgQ;Z`5Efl zraJ=a17hEX|Lq6lfwj`@2h9t|ACD~XAK}cvX9$wOX!}iyOT&X-5A<#8>G4v=c-mW7 z@)FHd*YEu34;m->exH#ZW}rMOf4q%Bw@0(>z1eZP%-H(P- zKS_Cf?M+Yn7I(RynQr}9|G|eIhAqN*hj>OmXxN`!8U?8sF;Sxaek@+D{enTi)KhT0 zAG3=O-{Zrb?oO;8m;!r@2j<#1)-$N#VBAZbah0p{T`-SpxQ#p$Z`D(|8%9B>#rGIa z`#gH5Gz#3nJ%XrQkWi!$?uhxP{@g#eFaO?u5rcl~BQ^BapNVEAP1|o170?WO*5IgB z==+o5$nXGt0u1{xznC~;lF|)vIMA!Rhudd)h9~JS`Q^qPJYMp5_zcT)Pc2YFS@Fp` zQg8JVV9NkYc{Jr#`>W7XhT9qffP9y}G{moT5^KEu7oNYghIB`Ym3^>+L#Wy~`W8R2 zviC;=LYDSl{7R~-_J2(EfPM$DG2|q~Q2f3BbLItq>*p3CFyY|Q#YGBe7Ls8ykPA54 z{t^oOOLL708n8mm%n&+Z2b83?a35q~ym^a5W?SFwm(-D~k*RO(@SGgSNX}56KcE4= zD4BnNis`xbbCFxSDdcH4RU2HeDX)?KNNS72I*9Q}jw+Y{hKYxvyl2;?H)Y!kgM7O6 zww>AbHSA<&G232J<%^%(?iE^mI|gX`^DSaheZzF~N1*Z`W$h!MakwwN+b<8~z@T^p zCETwZL+UkTqL|hogrnh@@~LLjo`xYG@&I3C(ew}A)3;reOLOSoz9o3jAXL@9Mqz&W zVD!=Y0gfs+u-1<;w0|7qimAFi+3P#`H3PJLq=S55GJ%waqVUPank_qS^Q!f={f#?- zpjd%8s;G4FeN4CZf~W}z6=ep7uj4u#zApZ-eY*oJ&ox)qpVaWKKV!bI>rYaiFFezv zXO~_b)`%Xop-KQil7J|j?9w@kVSgf8 z1PTeBP=}|FdQjTf$_pER%BW=#nm`zt$TJ&Vs&J5fG4NE?! zl(zvKR7S}esg|ve`f%u=@0PRXRQOr8{oS})Utt^PEbU$45i`gY>Cr0@c9+S;ES`?m zgK_Uw>-FP(Qsa@r_uwVEI?&(ml$1A34S|}>`NX}uqgzcEUHqt@_{&)re>w{*<_j#@ z+WiN#XsYc4PHZA%k;6hC1K8aH4t(v<^VP3G^sLkHC6{vL$11!Y=H#CN5(N*NF=uNQ69 z#tB}RsKQP!_Qr)diexOxuK{KKoFG6 z_B#Gh@Z+`|pew`V;i0cPJ_T{z)rXnQ7#&#(y!<$wSy(EhG4}r5;p^8B?bHB~15g)C zN~oQHlr&qhm@j6R^zHg@!ca(&ptf7G*T0GM8r(U2odf`A=9_Y@UjOFs^>-8wfcr~w ze_uRc@h1+=@bQY)gOK>YQ3~z zPyb5Sc4XK7Z8>1HFi42dg2C;3?Y2eiz*+l}v+EbBGwY)2ym8;XeS`GX^gXdbB3cey zkhn|40oaQl+;SUM7-aFJF8gKUFa1y-ObH+ycdL}c!SEGs&R2Iu4&zI~+o!%hZP&wg zJ*KP8<LPVwduoaD!0$l$aIL+FqKl>#y1M91rAPv@frcs=zBYlhPSs zMIt&X=^2WIvkw1^Mc5=PeQ58^*|lWXhE3xKMq&zhX4_Zn`VVx!b;Mq49kE+i?fQ>& zUHqYa{wG4pAKFBf(a|uJ7{bRwu&Yfg@H+$KoB&%aX8r(`okSe^DAnGM+g7dpGfFTX z{e)WoxjpzF?-mFgte4*LleP3tAfk7ig^_&kx8#j?`o%gBg%)0y@~96ssY{?J4I09= z|J*+Rd&M1OaXK~5?){bHk^SDY00`mp4wj1_sl-)7zN@{)rhg)mqk!ii-;juv5SOyiyl@Bf6+SzKbl|QC$IQoWF6_|&jM+NBCw%KS{-aO) z`sw}HA}oeE*2!IV-EG%Bc74pQ2kiQE|Nr#Hxfkzy>`#C5i|H)IB!TzEjvU0^|LR{h zpYH98qNq2Da^t<#>@9z<_rLpZzW?|5)PAaWS`YrwXY}-Y|M!vJul?08e$o5GKmOxq zdcXX?{O%LIh5zG@$N4mNK=AF5LSvmA?8_TsQ<~GMS9-J*RuoS9HN~ zpbIu_)T{5kh&OnOF8#V-QAHpUmjPY2>oTazow^L^GOSBh7y3vFhc5T%@>yN()#W~2 zKBvpC=(0nXox0qw%jb2;>GFUsBf5M+moMt_pf3NJE??4RmoDVuM!mnP%fq_t)@4)| z7FI{SkLbc8=ct#JH&HK3d7|EZx;&=KeqA2dg+o}QUX~w6y-(`G@sUw4ho?lnPwVoG zE^I6k^?pT{uj(?c%RyZZ>2g??Bf1>bh>2h3`uj%r2U7pkBgf7qPa#EL5T(%`g zv-bWA-Hf8euk`-n7r*$2`t&bIqk4h=XU!8wtf=P>Svi=mN=%awe3z%qp!bj%$zw&_ z<2(1=avN@)@RB(SO8Z9gY4_G=d>`Nr^9j{sqZu3v@df%y6Qr>5(b?o7%^rZE1 zXtSNcP=lHJHx=Isy_Ot^iw*bOcB_W)`?`Ez-S}gD`V)N`jZ6InUt2@w_hHy($E&p+ zp-LH`zAzjhehocmxcxfswij$9-z3wPJ8#N{#P+&vyIOfwxA4vnw=s*dt$(JH=uCQz z#9A(YX7#~^NF`)Uix!_0>#@hJf1@Fq4s>6ieY_i%abJIOS3b5ysV9qaw6*?YctTQ} zAg))Fe75j#X~A69=R@006uU{5tZ)z132M%^d#Tlwbb7ws$M+}Hn7O<1x94;NkNRS(}(+28W*x2&yi zb8G2}?*CKfQwRz;K}X%uthcPsf2gnD)8$|3@^6Gr1{Y*;JQ43G(y;WW$#+dm`~RV9 zURZ}tE-9&}{ij@7y>!OHQfj893fg}eD!@UMeAJ_srl&Pw)tC_1*I(m;v^JPBv%0mY zixiow_v&H@Z@pEATE7!2UHaHMh)+4nzM#ulR3B%8`_I`*1FMcqH^{X_p zVHY*KFS-qcdqKAH@Y2iRDa|=W_FhZG@d-5^jk$!zPbTlz! zu^6-EaGxse1^(Lo?R1I0QiArKDuElnNgxfUxqi!do1vGVliWaVxqVrB8*Jp4K2Yjy z_s3i=ctsaK0p_@~zMEZo4}}%^8|Nf05jdmQuV)2eH*euDb)ZZBfh@Mx4j8~rKUbdS zt(gBzvD*y_;@Tu$cpCSA1e+fGNV4B>EdIoP|14X+letl(i0PO1^ix&g#_TGSKF24` zA8>F`X%SD;H{}T0tewS;%csS+`SmwlX;ifn`c>mGnn^|T?X~VU6NtDI9}G#B&fkNc zsi4O4(1nc++f-OYg|El;wVrYHwVvUnL7w{YkScP-7sg1x#VlF+eP5rfE(S!4HdHrX ziyv)sD7$lTs9%8UcR2KI3g34J^Ft%{*-h(x;qCkQ4rj~Lu z@fw%M-aevkw2!+qO$j%?(}b?AAqEThhvYLLWY8L-|00#wZIrL`Q3Gn_v}{9Z7AlUW zA-6@l3AEe?Kxq#w43F9|pb?wHA4Pz? z+&<)o85>8|aqs>$KX04y(v$Bn89Dj0nAr9o0E>7cW#lUw9D*krk#p2=nMO= zu1>2+InchMCGr+Pg=gX$t!JnQ^0V7-CbvBy%FP5Fg!_CnP=JNh55V7X&Ag)mUURs! zqaU~oLfd7Vi`GzL@!QLWmxK+3p7``L_QxQAagCjZyytTEmi}mPTfc_!ZLyhKc9Ac+ zixn`t6u9GI&+U5X^!{Ds(DQIWFE*{j@9Wxrh~$1qkIzKv?9TDqcd1IF6z;Z$cx_Nm zT0gSqZ>sFltK8k8Pbka!e%?NR%$4a-4Q>YPneGB$yXtL0FOZ+zp-l9}C!cs? z|DGqGcx?2ssmaGjADiB{cl5wx`Msn0efj(oPfYGDJX-Lt?j3t<3|sO;H zH7dPatzF#xVxd;2!_Qpe`PicjX7H}~;o)L^zLZ~hp0ao8tz7&hXQh|En2E9-qnM~x zOZ7WXR2#)hdBGv~@ZLQS3IO`)iO!szR(pl9!-dJ_?D&*{YGJ;xJ0AMzp)+&&+WhWZ z=$ATvfI*Hu`uKq-pWK~0)GRfcwZb!%LbFlJmv-k)H785Osjn9nCaM<;m1io=QfXU0 zu2~+2GiPU9tK+3o^>ShQS;ljwk#7|0o80bjet82()MyP*8vQ#cEq$RYE)7o93i(F4 zP-*-fDuGI?0_pECDO&ncS4_%IG;5VyvC^pK=8Y2I$>Z zoGz5BmkPN#{>&CCxyfRQokQHu-%{fHwG8J>CmP|{v3#vutt_0%H>Tza^)dhV!s$XC zH3zQcZ^bw2R^s8OCu;dheZE*K)V@4@;Q|qbQik2USFiX?{!-ykwLFiS#%zGOuE`5u z%NI-4+5}434JEoXw#HE$5sg4BzK!tJb+b_0c*SVQ7hzWo>J9*!D3%M2{A8(cw0NaU z#jj?fSJnWYQ-xZ&SeIr@HNM+ts#C>$=~S&cU#L|I^?LUPUdlwL*U*4z{o^P%zHwaF(W};J{w%$W?g{g~2i-nS_l~~gnC$M{OPgUzhsqha! z4bG-3CY-gnn29b18)nQ6h_Ri@%kpSo1Z=YIedp0??O>@|ot`NarfG;Cw9-BJT6OZ- z;-y0E!n1|OF~^2Bxd+3C@|B}BezFqqI*R^bCMw22IF-L#x$tZgiiT*XE*5H=+<~EV z-4n&Bi@@NwGSQ{D1LJUs#)a|Ad1kFLdjdF3q&;1%0qD+)~Gqlkft z{3P4`t?k7b`5y{?AhaE{J$WMK%Jhd^bIRk?4S!T z*kIMEN{tCW+NJ7ZCYoMHuLH&;Js+Q*J~LIT0-$Q@VV9PsGST1vR4pC3(kN7>Uo6%e z)!OO8RHI89pUXsd!)C`NpDtHSCKb)Zj-uqziNe%e$0O9sd)-^OMs9ejId@Obl#oRo zZ{D4Wh7MO>Dpsbemk(7z4CG%F&B@uqp7m!dh^r$Nw6DULI=nlVzH_KrD}X@F5?+Pi zMA$QC|JLR`h@uKqyAF^Z1dTnug;D5MGI0+-4X13(6tBR1Dxx-IQ;G*;)ZHH*EQ9Y! z^CmHNIgpOm;c=72>FGiR%6>nCLk041t_>3$n@qtkyQ*NBwF{Z(*VhV%GmYx}@tIH~(gsnc<_<0#E0*hp(oC0LuTj23Waybqqv@dS zl&jUo%IZiq6Ky}1uOn7Z;_WnnyL4YBQj*Tr;msBz`zvP_>WxBq>>wV@LLP)K*Qap5 z7AF%f^4MCr$mA1G;d(w3{o4AVaI*%M!+4FgOM(y&D9%<)IrCVdyQgXeSeDbfZ?OK>$N*i< z2Mg1_UiUpfr#?~T(elY$Bixr)J(0iY87oTvMD^t53Vczu-_Z9jXV?HeMI@5sW9FhlJ$or%x(Ew<_~{dL z_W8o)iE6QAb{919l}z;14ZS+qm@CxAC|SoGyoBhWOZqlGgAyyTNrS#yU(ZBG*YrL^ z@^3z0B{p%iRxLXv7*CVxA}R1|8Ma$p4xw&+=~9=vC-X#Aky^MMQ4Crq@H8B3HX7B+ z1*d$C9jca^<%;kd(W7ZjHhg-TOZ1F`2b(eWF4d1KYOgTCt;x^M;)QcByy zPtRgENawH#V9;FwxLS2)u-;hLa^rl3QM=w3YHp0KhpsX~0!#@7tdGRij%7HsYWc*N zxm6!?R@Za+H)3U=?&|8eCD>s$pUOmEzj;MOu4Q%*1KVCUqt(H9|F9+E&PufJS zI6DhPKI}hSfPaq9&zBYs=gaxoZf4U&tHZQzXD>e%LL6_Fn=qOxkYtL2lp%+~m z>$jLS%Hen>+UHd*wB%~DHU(?9u<_WLMy**k2~!vivE6P z3pGp*0NV@HnIqj@@l?{ky8z;?`;Xxou1^VNFcaK4d`qDCgF#?8mRv_O#N(B14PzUu_Q zkUmJ0Q8eis09$8YaQ0IsYQ*Cdm^%cZPau%ncGDq#M<%-Ma8<@<6up^=uEf1aNnJ08 zrMEPTjqwHs%RKH6R4&UK*_7l7b`Hoyw;!(hMxv;7l%8#=S+{i)`s<$6z*^wcn`+c; zVbxn{i*9Az!jkYK-<19*Kl5pKym7EoBo`HGTgJn7WTMYXnM9P#<0h=9s5gpgnW!9- znDr(O9Bqwv-nmNEpF_=B4c6`qC8f43s(#M4oJ@O{VbA5~anfcC1;> zS4zc;g_AWzEMCT?Z#fUnWZI$nBCxC0_HDA4b?az;@&EEf59=<`cTBPRn3*ZXsj=s9 zbHBRxl~lzdoz&~pua{G+y?oL+$$> z-PGBea^1GU!1tyUqu6YXX$#$>OZRxlxTMWj9}OgA1KQ+SIKMkcsm-5OxHBy*!bx;KiyVGH^7)m{+>!>T= z0Wu~@X)K!zCGu#d;$~hdPGghS-y`%Ui|uCW`Y+v6!3lQ!?3~-|CEzzu{neJrk8;QtSwb zZjEgpMGt189P#Di%mVH(&6V+(x{J8RNtgLdbT00fk`6W*8J9_;!{k+0XD_HBGLdGA zcxpG9=e?GR3h{tk8r@bwxP!eaKWnQR%4MQoIY>6K+BjpuvXd3Og%^~-Kww~5Fhexy zGHYJSc64;PTCBKhJV&M@=>;qgocC@)=a!^R zbB?AZU^cv8)|)&Qf($J$^A{(nBCL*1r4$`KuRBOyYi9&R!OqDUG1 zaa%8F)y7s?j7p(*BKZQI;Yx!97V_O1TKo{Qythv8+(I9O#jz6`&?R)n$g?$!>vs5+ zYly)0vuQ&|a%5}T+-7)Mm;h8kd3|RAXE;~vp67&Ztv0!>F?ovWC-Z)a$x@Ey{I%Fj6UF{^I&J;)mQ98Vl4=UcQQ|}EV z#|rsUV{U5#?Sq|Ju<5KyW!!K2sJF9Yk}^b9c@$|4gd6BqWVZ~lR*rhL=FY8xl_7zxL=z{M`X-L+GZNZXf*UZdud;e>d{gD79#X|e(s%!no%RFMzyFI<)c#k z@Xue0qU=;O$IVJKOZgIoW}|<}lJ?BM`yVp4&cqgSY~PmS=jjJVM{~!jmvd}vQ>?H! zvXMhEsXvt)9sP2u#4GjYWTV(970%o4V&U8JQpNJ@`P|spSnica?BfhOkrkCEpW8*{ zEOf~!xjk2%$<2^x{?PK*XY=!}emR4_3irNXf7%M5#*Y`9L5pZ4Dy5^QK+gckE9HNd}|j_292)Xv@CLMD*GGz9bZ9#(9_zWI zQS=Qkxv}Yv&3qsMIIi_W?#T)OS0civsODIeU4~frqMd?r$?RJ1VcLit;m54}WMiMA znF-ca=I1+_n95TxTaszXC6A!>%WG-j%shP+TIHtF+Z;K_0DXwCnmhd5bM-OXd$Xz( z=v=W5hQ8h`qLdr(98Kg(+O%^mjV6FmubXvdF<&d<)04z}t-6q#)mrJ?q!u-a2$X!C zn`h(7TCO2uXe>waE%KY@>B_X*xdiKMve|$y7$2*}D_V2XN(7c-EyrU0X@^P>S+P9N zs#F&D=8iYq%{ej0ibJy%>dBi$rgZeR3=|(5Dl;60aXBD~)?cemx)F{MW0V?_n`sKy z;Ttt<3XQ_pGHc-&Y+yMKyt!%Z2^w#!R%Y=pb2L-UU4|#*W~%}hyd5M9?d4c~$M&fH zN%vka=N(9?HE@r8V|!!KdxJXCO?}~onBT1Ng(m}lT4VVG>n#7oI?J!DQFR~i$~sl| z@+)gq-OI16S9LGHvS!u2d^}&>bStsfmGrB9W1m_+zz1o5zME&LMhE#U!uHdCAl zqU(ah3HyoEzhG~rXj9hPLrOCHj3?lpkfaMJq~((^305jPz`H~1anZhWHSb+%$AbqOIZi(WyV6`xU#x7 zyjs1}GNxC7mYEX`;`1mOB}W#hN4YA3mids?GKOz}?MWF5`%g((DCg=`cEebu;#bzt z_%W=7dIQDPY48`-GFm-amuZEj&Q4Wva86NZH#jpbMc=H7LZ#ZAo%0GzHHSmCq4!v- zKi5FLL}f*Fsukv|cr)^q1tw&c(Sc<$BUG{Y!p*?whL={>*CO{H9gC&fdZhxdZq#ZB zx|E@31vONID^9U&t%K=_Ib%TNjnpv5E~{9haK(%XTwsOzoS2^|&e&8rzW@&|%{!HA zw#L^wo1vfvvaw|o#5itE*jz!W^)k9Ldg$8J>laaLtIfKQ3SAoPvf1{29=Jjg>%*J2 z=+ez88O@ERS?+Zn(}{$c*Bi~Li<^Ov1l}f5EEj}Il3_6B5~(U6l0zstvtqfMm{*U& zO`MwQ41GE%dIl!*%{sf1H~=Q)yUXj1V%%eCpU%znjz`BH+bD+lyuMt1+N_T0f`Tv1 zwEz<4!E51fK-8K~)4xYBo!FIj1d)eHhUgPciI3RcsGy&#Nv;OSQ&JJTrP5(e^a#DXU|Paub3IOPpc}H@ zBpu*7*iMCp+bYPoP>FpiAf|jp?vk!mZwwpujIB@W-7~g6t#{AZ`pg=3ON?peWxGRcChk|2(2w^NO`cDVHK^OZb82<9x<}7L zzpx`I7jw1^r1KPv#FdSR2;hB0Ij0om%sG`fw$XD983MBLA@R#Zy8xZ1zSSEKB|UqT zw3jynMMI8QSjKBu;y7C%4mj{ksx4+{R#fbz{w}seo3550T2GT|&A9SBE0c3*Y?ll9 zc}d975OA5yuYt@R2p`^`o2*ulU&iU=I+-K(5Cg+0DcS?yRFu^_x!L?Qy_pshXdxxX1^+j`7O9^pK-Fj}< z-aUI@zfXz>@7E`eHF-!gM2|SDrIY|8!NX46SZmYC`=*$8C=`P9WI_F!l+9dOy-q|H zbRkP+QhKMj1`3O53+Ap~KSVScc~l6hy@-;O60@Qn0u$!!j)~F8bPcT}ln#c@v!gn@ zkRzO>txTI+klq9CIZGUX6yXE5{eekB$Yb|%)ywSYW@Wa9e(t5_m*A3K!%lRvn{cvI zvG^8movx}`Y%G@mC6A!+{&EL@yGdQ_fjf|A4{Do_(~z)}#8>ZqAU@AjgX#muxQ%{M zWr^GE)~t>o+UDh%9$9y_#yu5Xa10s?Lh%OGshLJ<$dL@$)C)I8U!35IMOP3)dF>^> z9G!##1v?L8^)A-z{3$2S5JS~@F?A$Y_44ZPN^})q{*@|(#5Un_1=wc3pa3(=z!JEs zPYNGk6Bs(=nIcqyT#X&%R&QylT4%fZ;*>E3!fFy2X6@UK_mkBtt5=b9B|)GDdNhK1 zlHt=?zahKfZ@tOZ|FuLO+=NyRdTnL(F33ug8wS{bVPXGdlm$*H6Qd*x2@QU&^-Ouc zTwSqDDP7Vh&@mibZ2gW9%^s7_JliA&xrWMPBn1oQ_fsf_kGZ_|)Ql%oXsQqh`(G(- z4MmNK^_HeA6KmBB+%+^gqog1x!NF(bWaZgrao0m54j#lSiWu0iBUm`o{#6jiK)7qJ z(U`A4^~fW$aPsEl81~L1{@EJ%iEC@Jq)mWOiBO&}b#Noaqh2c!xQb3MlTa(-%bGOP z<1@L1Y7>Ms4N=O9xnLj|XW$=)!Q-}d=Cl~Swmx;P19^eWz8}jySFBtV#J*k~ohdr; zBx72OIM8~SF1#4>3eOf22@}|iX~~vbus-L_p0Ottv`Gbpt)?z9-h(7QFWm8PxZr^1%)*UY#!EIoid)7J54F@ddKzZXGYZ_{u-KtAI zMMAuR4M3Y{K{KWN<@)AA;K}s?;K_~7v(xKImKw!Bub6S}oVoeWjpQ`B@<^T=ac**d zOS;~<5!Sj_D}?*&+;xRwHR;?M#J6jfO~P!0(NwrywJW--ObutoNpkO!Pdd>c@Wx=3 zDJzCF0t^DK8qZBvK+`1*$Z_(q4F%BBkW*W|ds zqAXn5DZe&4h5OexmJPe^yN$)<%U)Q{CXQ!KPU1wcZP-y9GEQT{I}t3`U{?YH z5@@S3B*chK@L!>jU_spAO)d;BsCDMKpDe9R>o?t<}NfxUUP+N?G-&ADmfTE7&M( z)~lCp6gJM^jcX%+Wh_^}C~d4Govl)>jOM3_X-g3&wqeHKs0YKtl@W)V3TGc?L}GZBEmX=wh|G!nRKq` zASUYaOG30M_uJ|XI0SJ_?A(YB_XeYhHx%TdrKYMg*_i`#zXcYjIqzEe#-`)I*t+yw ziho)PuFFAec$|O_>Q;0MUPbDq!mU09Ga=WRH97FQi7e+aadN`6Y@dX&D?dx4n`tu~ z7+aTqP4SJw(v1^6#0^W40v$q%^EXZzb73Fw2v1yBeCfdUWGZ4$o;-`wMMc2m1Peha z!$lVrAq?iupUCYhV-z;3m+{2V5%vS(&H_j})XMjacG-+^zxCz`}o~v4_vNLV5YpDyN;9MDN z>YPjXTW-l1`m(Q2cRizHd|e=Gc|t^yq;giOHL_E3qy-?im@Q8U>9OwH|KJ+B+NB+f z(S#bEt!zF-{Q5;?39UQtcmmd9xr`!(ZdY2^#l9%g@#qth17{cq6*9dF`;dcG&lMU| zV{7P^(}=wVFF$Cbwjet9m|EZi7GKhNd}vh|AT5QAYMzk;*64f-9-_pm6uz73xH_UQ zqa4-`0RC8i4?&8QE1B4z+#HvRaAhUR&%R0s96lr=Ls)1-s}w&n^Oj5zvo}w&qzGxMM7}I5XsYSnfxiZ!s$1A zGr}9zwq7Ku)|e5i7i>vB@t8@RRJmPsv?)Rzlgda`!`<D`w5STC)7TDcQ`npINvO}rFit_2^e*n9UoBSe`8~IQ@DK2 zuS^wewVmPzLCdpcQp>0OvF=m8QP#6AKf-~rPw7Wc0+QEO(iY7w$pi&v6wFlM8A1*A zs<_5Yl(Y`gT1Ks2XcR$NbR^t5>y`{?JQ=U09&7}qD*>0u5E=e&UPSN0YK1G( zNX_nb0&vYuCjx;mf>Q8B>PGU)!#}9|70M_13yRjuuVF;>J_JjphZ0MJHV9|Y<5YPR)qwJ(Y$QuRnb@2Wk!c=4o)3JQpJFC#t41S zd+h22h43bcj+V@F5o;aGQO?i4;_wbtl6n7ShF>ZSDFV7L(WWa=YdPtz=}Stl{7D( z62I4=Bsh&KS+AJ*M#b1*SGnX_Ko3P>R&YS41XO^jU+$BthuL8_1azlH5q){rvIY{4 z0E@Jy;(QrXA~g-n^%}K$Wpb?P*72qekd zRMkwA7Pi?+DXThI{a=zFc+LIo$f9xF(4x&7h%~P+Ij3Wsg)2D1wX`Lyj?jpl`&b-( zEf{_o?4>J8_vwEUL_ba!?xFoGwH1<5xn16 zL*BtPIJH?ZR$+~*REc%Hxh@uG_7-}i&)8&1T2-qp&B^E0ODDM%pzZW9I$@JDfh!Bq zbXa@Qsj*OmD{|xtkW~q#-j>-JaSZJ%moK8y;T@M0P{r{}i5BZya56kGV0M!v&I&&! z2|+O>_HVvXgY%3moE0=)H)(16ef34Xd)5|i8ZXVySyt$VqfO(sHY*5%2c&&$}g#Dfr2iCn^B-pE}1f{@kxRmCo{R{Ed`StbLx)rl;!u(LB}_XenG1 zI~Su75yg>f$9h&3ucPPPIL?hAud!0(j;^8P>^e8%O+&tTxrYrAhWn6GeYED+xHc~_ zXc%wsQN=i7G#%SE7MWi|m(GolOk+AR8iqo651eBMfJ2Ob7M_8NK||JFF*TjXuEBGx zEFH=>5Sw9t7{>?Z1DmwvtUhlXL@!C@6Y(q<)F61TgR@e0u7TdXhHf4;-?Mxvskual zvm|oq5jI1~k~>s3?T#^p(PMUq*i2m7Jj(KbXr+T-X{)3erPR@R4cISvP=75g-2|Q6 z!fOqkO<-ywQ?)Ex0|!~xOAg*+ga-YR3!C6XYTC=TzRRU{p()xF#9&^X(K;q!fk+v{ zX5wgl1Vh#O2-mCh5(x=&k5XiRdje`h+nsgJ3bR=ardaF)I`esHDj#7S)2a$z(|F)cP|A-&M_* z(euwb2bCj$jzp$WcA!ef;|y=jl2bR`G9iqWCOpd<-tdv#CW3^4y9_x@4Q558AzZ<) zUwsIX7d#0VKWGNE`Ff$ghTfhVdCrH2z^V`r0s!Ym5+@u_#0QEM^nR=-Oj2X;;}a7{ zo}V~=^7*H7+)==$i8~ z)zoscBL3+%BQpyx_>Xt(8GD@7oNxuLd~-UH^%BNOMPwCH=S^7p#?XFEnY=ODZ#a=R zVL}SA2m_QJ=bR@prGx5j>XB2uZJRjYz_uF7v|B-E>Cki2I)Nvo`M@bt(w<%5nz-g| zi5bWt^IL2vKe+}R3m9f&NVdd;-790#Rl_bdwn$jn6&9&ELe%;G5QH{kauxB+=voTwowA? z)!{)>$yaiR0}5;1Ge}|jY3RPa>cj>6$+G9E(`6Ol4|?p4IN}%`1T96$j5F z+IUgzI8UiWVNBR7yvdjVCl1(LR%Ba z23)T{a#WhZL{%)$xgYnkIgi%6Xa}iugD%A9$3dT-p7c8*7jPF$ep%ddr53x|*FFN= z*&B6(d^pz=wh00jm5yHIr(YAN)))myrC`a+M1SlSov@bx9@Cju0-LN}+#I%`%uvrM z^K@U0tmF4*FPO^7A4lQfz9C4!rlw_=%q9g}Mtli6kfpp*xtB%RYj9IvI<-k!6y z@eVV^Atm0eN@0PyYccU%l9X2(G&8C$vGFNatYOa-@FKEP6nma(pD>|by}AmLCd$wX zGng=Tbx1w5D3AI1rI$3MpT&z!+)`GX4~%1;v7ZZcyq&C0W7^5EWrJd&gCK0ixNef#FsBK14s4s6{*V-D zkUDk~Yii_VGvL}P2#7i?gqZyDN?q`r`LONDrE%wjz&cWy%9rQmY+M2BCSuk+L%Tv6 zxUx;W=+QejE@F@g7PeWgGp6J1hx4BMugILGuA$mKl@11aPoqNxlSU@i*to!`$L3x% ziJ7kbK(sZO^+~Z^I>O}GllnZ%!MiBUo)P1SvN)U|f;kEYq4ZNBmB!qiVZKeY65Lcg zk9=IRB$TYWt1vb@2I5zx++n`o*vTZ)CyUqb`nmNuIP znx6}csD$_;IxVHh_|P8EtnMUJTaw-zr}YNer}Jz|L}JeINzPEEusTr(qYGl4k_B2oiUvj0TajL2h;mJg{8qp()}*-x$FVR0KKOBV8yd#M<5YQ3isl#33OP3FQcy=EHO+em*I-PkUNECt z)Levr(;Y2cGOt>S!c@a%z^GX@CdQF{j(_mT*%PtJ@8LP1a z$DNd?ZE91814&X?S<4hum7)_{B>^ePcjdU)N`s>VKIzYqJeHz`!!3s5Q~uZ;fhaij z=8lfP;1+eOzsum@z6Jw{r7+$s>}F%JXQ@$&$aSq2R*JNiwH$~eRYFuR<3Hw>0gwSH zOoVsY%hOHyglu^BO5u*R%V8C)43BC^Qji6bB~U=S0C4_hY8rNmB2xcTr#zFvF{{5*|5lw)&wrZ$ZZQYn{jT07^Im-X_>wSlV>X*3Z%DBb>j;33{7pdvwz%7?@=vhx9BJx)qUtj zR%75upOtg7a_cz^=VtYw!LH@B8&$E^<80P^nvE(=W=b}MJe+?MkE_v0PXF~gk4Ctx zgJje_Nq6nNXJjP_<(ZbTHb|KpxC6kn=iqq@#pwk=^o0j?%5Lsm(`&m zTmGS2V@H;W8R>4&PpUfsGgE>lkp=t44yep>X)9n_GKGl-$D?v}VtFcjxTd951|k+Y zBJ*_Sl5-+=9#CP@X5ZKodg+Anu%AD58Xp#`HO;S^00QT3?%A`)U8kKQmaos9F3jSG zr0&klI@1VLrQb~l@uwi8g%&l5+DcC|qcMbVnn4(ytZ=2kmW#{K17YG)L#Sza1%_vO zLEgn=vZzYuLb(OuhB0a_9*}w$w)GDRj0y-h-LX}*!Yplebi_1~eNGWO%L*Sm!4Ah? zM8WH7ZL`<-{DRnf1MU zp4h)AI~1QTxgG z0dsc!#$))wgOx)8)##AY-fR?SiiGMDc$}F(U3US0ew$&GbBtt5OdSz>A9#5?UMB1Q9fwc{kB zt_{f=)1p|Z=(y!jCC&RKHlhvgQ|JTH^w4HM^=f;|?J4o$mCyg(#mt(!%cspdcWd>u4JUEv!nZ z&VFf`n<7G9sMeYuX%t@FR*O!JLrG$X{|+H8rMOP!1nx22Hy2+C^Mx-?jZ_@2rnBk* zm4E7_2zX*kS~PbRG9VI-JnkR+brIQXr~{pzC^M7O?%+pp2dA?-`~dCHlQ~6Km5>CM zx}HjvL9=mL%!YT^jXrZ#jhQ){DCMY^od*HJ-rf~_;OTr zLO;QiM&1Nj*6=bk+c6or1>4RDymIS&P@#>f7_xvm>GBV#%0LYc^HY-$P+OAJ5WtXI z`+Dp_NlNX@1LA6qr*u*u5hBw}laBft(cYUJn`*1#a!;AEe1b*A^n3(6BzIC)iGee` z$%Y5hoI0baqe%wiovE57@e>qh;!=OP4_wK%*J+t5}A*gb~qDYg31hsSbfU_BT| z##}6)Ll#fiuGX>)WXxHl0Vjux`C?$8vc9*G6Sm_~Qtb;{)F?2uOyMHG(3_>B+d zz3B01+QBvG9vKqe+2Pm`+xlHnl8a`zhS!PZUfQiicxGGTrkM`q;AIZ5Vt){p>phKN zZ&~elIY`RU_5gBe>>cBuv!{6hA9c!-C!1=5toz=#q?PkK8=HyAZ3UyoL z(IzwwJSua=AH{A@F+Dj+-7={#N|+-}{|w7Ukbwb$KEq3^CcqYQ0{xshp2N0H9JS8r znBb0~u^E-8-D-Fze$QC;q&vQpU1W@qnh4z*_}}@+&W?ao5)%7Lg6ZB90M3~W$^eap zB!;MXY6DixsSKc{(%5t`l-c8&Ve_+kH;wgOsWg^mh!dk+e8W@_2YYk3PBck|u2vr5 zytlXwe3f=)Sb&b#3e4krN(*S^86&KzzJ@BhdekmX<{R21F7MIL+^>O=tCI}#^(LOE zIJoM1W`5Venayh{z)NHctf?i*pebpEXbB{Tv0@{|XN(WwOblYrG%Eal&qFIZn6@x& zOwm!esdrwh0pjWzi;^QDfi8XBn-tEUxW=k=r`>E;7C)fBur={H_-p_}SR*`0<{(&zkmX1N8Egr2{HGiu4C9ajc(V?=IK6>5UHUkWErm z98OQkC28D5M?<2BkmYufh)Wtp5q+&fsruX4VReWJoMug^mfuJ*ch?P z2~sBtwP)FwsG6dJfLZ3bHK96HtGejLDm4hICNEP^1vMN*d8ny&EFqC1KKI{zS==2p zBTx&J1CMt`mWIzcwW=Xhj$hv$G>F03MLpNP!{HFEIQhs`W3ZRKN_KLw+$?i!=@oIVHxj`bB}->0M)T zWx+r@lWvql>GHfc>PrX>+ydXAGb(>_7kPYfDX%`NVE#4w`lb5#OAXZflCBXu3ax7|>9w@f~F0j6XPm_AqbFQo2 za?`${0}1u|%};k6<#jvEdKMep^y9K~yIwke%0#t! zVdQU*~tdz#TCFpZ>Gjv6bq1F#H^Tk8Hxhl&)4OxvL&MnG`+k4wt+^bR9f0 zF`j$z$mug|NYF)c=_JOal3={Ly~fO3Sm~5Ri9KF6p}mPm54vj2-gPM9*I!yfj}J0V z5O0*R?@#k{=le;oNY3(eJ2S+Y7#ehkmmj(1x{@+EWZk3HIrF|_ zN}a1()w&t=nmRKPwpDTowWuyeH7e*Lu`$I%9*~??W|{lt5)SzsdaQhwQJ15Px-;Ot2Xco_o;Wo= zas1%%=Z;Ujoa5u6V@J+(;m8L9wJJYSYs8$-NL_U&HQ+ME0c^@UK@!=)YyhTBs96l# zoQ2crGzCw~ZW!9~2j3^zlBPf{rH zkkGZzhLKdvWvnACN^Hn`>^hN>NbJbiu}ou^!|EhG%4hU5d_=sxuGRym!*#*--&*IN z=8BVhjZZu4P#}`PFTql5e*}A1&V(CY=`{S-_09Fonhk`%@pGdR_;%q!-pyy?$Da%p zcCmDw2>x2>7r}wD+JQ@IF_2JNw?=vT)JH0*?$n`4#pS0axkHma{h3LoJ)k?JPfT)c zuW}~R3WK-h73(|oXoZ?KbgmKkv|ucLyfqzcq?Ut=!0dGC!drTDky>=@C&n@t#Z}}x z?W|?;W3RC`Tt(eT9ZuwM))btiHVaO#?OYsnBLp3m9eLxb_AvlXe}N#9#bV13H8J7vN2!mFXdnw4P~oNndz)M9Yqxz>~>^~gPv)OZeo^0EW}!t9|PlFObHtB!!s=> z6vTTai`RCPN*6qXQ`z<|@nI>h$&@PBT?2B(QXbb;4wOimKBypZY;K@Zl@>nTfe}g7 z3EM>*2-|rHM3ztB7o2GQol;6nX#A%4jw7>EY@O0Q;uRfP-XKss#e#X zYPe=i4t$O6dxcw*(IYJh6QFQtC++kxiXHnXivb7nGo|-9$16z zo(uTD^@`ligkH?i;Ck#Ca&UDmy8ygKe!>_)a1_rtz%&uu*b>^I#xTV*_Uz9h$)5Z(L6 z(l%U5r5u?dbm+BbC)gG9sZNU>vK6{XZlVwlBd3bBDJ$%N96+w}Mn|0#$381=J6KiE zuAhqajSzXY91y?vD_l{x6*IM*Af`1W_pWs(SdDp^s$`j+I2;UnZ?c81fi%Rb86rX< ziN~1bvdmd5y!Xi)VU7hRzf+3FnSj8sEbKs>nwWU3aZ$h8C@B;8q3#6pW8~#z4;O|e z;Lbys>Lu-xG)5MhwvUCK#)8e#!c#IRZixLxEuFxjsadR&>JlKPx`jryh#4(#3a`VA zLQpPfs}+&yFniK*S*{>lvc+x32*L)M;;y;W#;nf!7xraMY7+{}c}QE%t$CwkZhvYR zhN~8tT3cm&?WC=JUvON5yOcvJEjy9 zTvgtS&fXbuNg)EFDXESSwb`laWyqbo$R*;92{wr1DvF}Jrh2)$pD}&Tg>RjI zbE$Gsbm367cDPhJLGoo(Rvt{DFg9H(*(<+zkUEAs-~OBYEn|bZH;NWJN0Es#+}P9Q zzRDfr|F13fMh9=vH}`Y!mdE(;Vss|D!1YLUnoq~0lhN~hKhE_ipY`*8?|=CJB5Loo z7W(49U$LhV-=nC*UDcn2>kyFhg3%Z diff --git a/1.4/CashRegistry/Assemblies/PrisonLaborCashRegistryCompatibility.dll b/1.4/CashRegistry/Assemblies/PrisonLaborCashRegistryCompatibility.dll index ed4cd198ed8a753f6f72371e0c2962a799b2cc5a..e08b25a7a898e6c62eb0f7923c2405a9cf6aaa14 100644 GIT binary patch delta 83 zcmZp0XmFU&!6JL?<;smc=eSsylo(_-$8jIx5NOOw@Ozbc$*-OBhe4L+_p6%?L{2g? kT5SF$I)#aogMo#Ck%57MWAk*0M3CrD$>$*Ip|m^;02$02sQ>@~ delta 83 zcmZp0XmFU&!D8U|{^rJ>b6hO8io%(jgg)!6M;yVC%-7Gh8f8N(?fSW4KjV+Lc6@Hn(uca0#gXWnL>#vC3;+wT25v u@9r0yKZr6jFgg)!E#ga{N{~4XSi5w6@@b=$8f8#_$V%!v$=&khD)GGwQO>>??jKCbIYcS vuYPE@`GY7k6QlX&FXFS9IN2Fk7#JBC7}z&Ymr7&=ivE;-4x%2)%Ci6f8<-y| diff --git a/1.4/ColonyGroups/Assemblies/PrisonLaborColonyGroupsCompatibility.dll b/1.4/ColonyGroups/Assemblies/PrisonLaborColonyGroupsCompatibility.dll index b0d7ad8dee2bd82258f35e4df10adade17a718e6..e937cdd01d9a00976febddebc86a228e567456a9 100644 GIT binary patch delta 250 zcmZpOXo#55!Sc3>_2|SN8AiE@E5jL2O=e_NXZ>Nvz+f?1kx6HAB%?Z`%H&4IddYwG z3}D~^B$*gk87fp67#buQ7#JrTDw%H%VCrCHRM>ozU6Y-KNr^#bG8?}NOS_T?(`G&X zS-b*CE_rNc8LOQ3ZhCOx>_NTi%{OFPnOSEtGBiw{TqmMGd7^?PyM?i(o~g0XJZ(@n@3jc<0WfrzGPeo4lP;3+W1a%uo3y%Yk kP?)GF#`MpA^A8|3(ST($pUN**CIy4df?DqxCmOH=043={$N&HU delta 251 zcmZpOXo#55!7}Hi>-~v6GK@+SSB5j5o6N|l&icoWfx%+3B9qSKNJe!=jmeFS^^!~u z3}D~^B$*gk87fp67+NG57#JrTDw%H%VCrCHRM~u!U6Y-~R#7-}G8?}Ni;v=xIh*zP zXYmTe-d~izV_BU0yc1Kkmf6J3+I&N%m6>%mBSXW~$#o+7lP4-za+(^M=$RN88W>Ez zsGu#*z;Jm6+Z>RMOh7yfh)wK)c(S0PvOxIM#oU|UPWN4Yhik=|C(i38yC}8^eFI9v kfPe##r7%%ZjETu%^A{ksnNQ^xE0c=BWPrisonLabor_PrisonerChains This pawn has prisoners chains. Note: it is default Vanilla mechanics, but in hediff state + false
  • false
  • - + false 0.01
  • @@ -57,6 +58,7 @@ PrisonLabor_RemovedHandscuffs Prisoner has removed handscuffs + false
  • @@ -73,6 +75,7 @@ PrisonLabor_RemovedLegscuffs Prisoner has removed legscuffs + false
  • diff --git a/1.4/Defs/Interrogation/InterrogationDefs.xml b/1.4/Defs/Interrogation/InterrogationDefs.xml new file mode 100644 index 00000000..94d27e11 --- /dev/null +++ b/1.4/Defs/Interrogation/InterrogationDefs.xml @@ -0,0 +1,67 @@ + + + + PL_GenQuest + +
  • OpportunitySite_ItemStash
  • +
  • OpportunitySite_WorkSite
  • + + + + PL_InterrogationChair + + Not comfortable chair used to interrogate prisoners. + + Things/Building/Furniture/DiningChair + Graphic_Multi + (1,1) + + (0.25,0.234375,0.5,0.28125) + (0.25,0.234375,0.5,0.28125) + (0.28125,0.25,0.453125,0.25) + (0.28125,0.25,0.453125,0.25) + + + (0.23, 0.26, 0.23) + + + Building + + 100 + 8000 + 5 + 1.0 + 1 + 0.30 + 5 + + true + +
  • Metallic
  • +
  • Woody
  • +
    + 45 + 30 + Misc7 + 0.35 + South + 2410 + + true + true + + 4 + +
  • ComplexFurniture
  • +
    + +
  • +
  • + + + + PL_InterrogationRoom + + PrisonLabor.Core.Interrogation.RoomRoleWorker_InterrogationRoom + + \ No newline at end of file diff --git a/1.4/Defs/Interrogation/InterrogationInteractionsDefs.xml b/1.4/Defs/Interrogation/InterrogationInteractionsDefs.xml new file mode 100644 index 00000000..e94b6e25 --- /dev/null +++ b/1.4/Defs/Interrogation/InterrogationInteractionsDefs.xml @@ -0,0 +1,36 @@ + + + + PL_InterrogateInteraction + + InteractionWorker + True + UI/Icons/Rituals/Trial + + +
  • r_logentry->[INITIATOR_nameDef] asked [RECIPIENT_nameDef] [askPart].
  • +
  • r_logentry->[INITIATOR_nameDef] ordered [RECIPIENT_nameDef] to told about [askPart].
  • +
  • askPart->where is the loot
  • +
  • askPart->why is Gamora
  • +
  • askPart->when finally starts talking
  • +
  • askPart->where is their base
  • + + + + + PL_BeIntrrogatedInteraction + + InteractionWorker + True + UI/Icons/Rituals/TrialDefend + + +
  • r_logentry->[INITIATOR_nameDef] called for mercy.
  • +
  • r_logentry->[INITIATOR_nameDef] begged to spare the face.
  • +
  • r_logentry->[INITIATOR_nameDef] kept silence.
  • +
  • r_logentry->[INITIATOR_nameDef] has no idea.
  • +
  • r_logentry->[INITIATOR_nameDef] told everything.
  • +
    +
    +
    + \ No newline at end of file diff --git a/1.4/Defs/Interrogation/InterrogationPatterns.xml b/1.4/Defs/Interrogation/InterrogationPatterns.xml new file mode 100644 index 00000000..cbe8b307 --- /dev/null +++ b/1.4/Defs/Interrogation/InterrogationPatterns.xml @@ -0,0 +1,160 @@ + + + + PL_Interrogation + + Initiate a prisoner interrogation. Warden will take prisoner and try to get usefull information. Depends on warden's traits and abilities prisoner may end up pretty beat up. + PL_Interrogation + Things/Mote/SpeechSymbols/Speech + Ritual + Precept_Ritual + false + true + false + 1.0 + true + false + true + false + false + + + PL_Interrogation + false + PL_Interrogation + SelectedThing + PL_InterrogationRoom + PL_Interrogation + false + true + + + PL_Interrogation + PrisonLabor.Core.Interrogation.Ritual.RitualOutcomeEffectWorker_Interrogation + false + false + +
  • + + + + PL_InterrogationRoom + PrisonLabor.Core.Interrogation.Ritual.RitualObligationTargetWorker_Interrogation + + + PL_Interrogation + PrisonLabor.Core.Interrogation.Ritual.RitualBehaviorWorker_Interrogation + 5000 + + Spectators are not needed + + +
  • + + an warden + warden + 1 + True + False + false + True +
  • +
  • + + a prisoner + prisoner + 1 + True + False + false +
  • + + +
  • + false + +
  • + warden + prisoner + Convicted prisoner is not reachable. +
  • +
  • + escort asleep + warden +
  • + + +
  • + +
  • prisoner
  • + + +
    + +
  • + warden + DeliverPawnToCell + +
  • + +
  • +
  • + prisoner + Idle +
  • +
    + +
  • + false + +
  • + 1 +
  • + + +
  • + warden + PL_Interrogate + +
  • + false +
  • + + +
  • + prisoner + StandOnCell +
  • +
    + +
    + + + PL_Interrogate + HighPriority + Off + true + + +
  • + 0.6 + +
  • + 50~250 +
  • +
    + +
  • + Speech_Ideoligious_Male + Speech_Ideoligious_Female +
  • + +
    +
    + + PL_Interrogate + PrisonLabor.Core.Interrogation.Ritual.JobDriver_Interrogate + talking. + false + +
    \ No newline at end of file diff --git a/1.4/Defs/Interrogation/InterrogationThoughtDefs.xml b/1.4/Defs/Interrogation/InterrogationThoughtDefs.xml new file mode 100644 index 00000000..2dd2e79f --- /dev/null +++ b/1.4/Defs/Interrogation/InterrogationThoughtDefs.xml @@ -0,0 +1,66 @@ + + + + PL_BitMe + Thought_MemorySocial + 10 + 300 + 1 + Baby, Child, Adult + +
  • + + this fricking lunatic bit me during interrogation + -7 +
  • +
    +
    + + PL_KindInterrogation + Thought_MemorySocial + 10 + 300 + 1 + Baby, Child, Adult + +
  • + + Interrogation was kind of... nice? + 2 +
  • +
    +
    + + PL_Interrogated + Thought_MemorySocial + 10 + 300 + 1 + Baby, Child, Adult + +
  • + + -7 +
  • +
    +
    + + PL_BrutallyInterrogated + Thought_MemorySocial + 10 + 300 + 1 + Baby, Child, Adult + +
  • Masochist
  • +
    + +
  • + + they beat me up during interrogation + -7 + -7 +
  • +
    +
    +
    \ No newline at end of file diff --git a/1.4/Defs/MainButton.xml b/1.4/Defs/MainButton.xml index 4c102541..6578d9ae 100644 --- a/1.4/Defs/MainButton.xml +++ b/1.4/Defs/MainButton.xml @@ -1,147 +1,158 @@ - - PL_Prisoners_Menu - - Manage your faction prisoners - PrisonLabor.Core.MainButton_Window.PrisonerButtonWindow - PL_TabIcon - 35 - true - - - - - PL_Overview - - PrisonLabor.Core.MainButton_Window.MainTabWindow_Overview - 10 - - - - PL_LaborWindow - - PrisonLabor.Core.MainButton_Window.MainTabWindow_Labor - 20 - - - - PL_ScheduleWindow - - PrisonLabor.Core.MainButton_Window.MainTabWindow_Schedule - 30 - - - - PL_AssignWindow - - PrisonLabor.Core.MainButton_Window.MainTabWindow_Assign - 40 - - - - PL_DevWindow - - PrisonLabor.Core.MainButton_Window.MainTabWindow_Dev - true - 100 - - - - - PL_Assign - PawnTable_PlayerPawns - -
  • Label
  • -
  • MedicalCare
  • -
  • GapTiny
  • -
  • FoodRestriction
  • -
  • GapTiny
  • -
  • DrugPolicy
  • -
  • RemainingSpace
  • -
    -
    - - - PL_Overview - PawnTable_PlayerPawns - -
  • Label
  • -
  • GapTiny
  • -
  • PL_InteractionColumn
  • -
  • GapTiny
  • -
  • PL_MotivationColumn
  • -
  • GapTiny
  • -
  • PL_HasLegcuffs
  • -
  • GapTiny
  • -
  • PL_HasHandcuffs
  • -
  • GapTiny
  • -
  • PL_Resocialization
  • -
  • RemainingSpace
  • -
    -
    - - - PL_DevTable - PawnTable_PlayerPawns - -
  • Label
  • -
  • GapTiny
  • -
  • PL_EscapeColumn
  • -
  • GapTiny
  • -
  • PL_TreatmentColumn
  • -
  • RemainingSpace
  • -
    -
    - - - - PL_InteractionColumn - - Interaction mode - PrisonLabor.Core.MainButton_Window.ColumnWorker_Interaction - true - - - - PL_Resocialization - - Prisoner wants to join to your colony - PrisonLabor.Core.MainButton_Window.ColumnWorker_Resocialization - - - - PL_HasLegcuffs - - PrisonLabor.Core.MainButton_Window.ColumnWorker_HasLegcuffs - true - - - - PL_HasHandcuffs - - PrisonLabor.Core.MainButton_Window.ColumnWorker_HasHandscuffs - true - - - - PL_EscapeColumn - - PrisonLabor.Core.MainButton_Window.ColumnWorker_EscapeTracker - - - - PL_MotivationColumn - - PrisonLabor.Core.MainButton_Window.ColumnWorker_Motivation - true - - - - PL_TreatmentColumn - - PrisonLabor.Core.MainButton_Window.ColumnWorker_Treatment - true - + + PL_Prisoners_Menu + + Manage your faction prisoners + PrisonLabor.Core.MainButton_Window.PrisonerButtonWindow + PL_TabIcon + 35 + true + + + + + PL_Overview + + PrisonLabor.Core.MainButton_Window.MainTabWindow_Overview + 10 + + + + PL_LaborWindow + + PrisonLabor.Core.MainButton_Window.MainTabWindow_Labor + 20 + + + + PL_ScheduleWindow + + PrisonLabor.Core.MainButton_Window.MainTabWindow_Schedule + 30 + + + + PL_AssignWindow + + PrisonLabor.Core.MainButton_Window.MainTabWindow_Assign + 40 + + + + PL_DevWindow + + PrisonLabor.Core.MainButton_Window.MainTabWindow_Dev + true + 100 + + + + + PL_Assign + PawnTable_PlayerPawns + +
  • Label
  • +
  • MedicalCare
  • +
  • GapTiny
  • +
  • Outfit
  • +
  • GapTiny
  • +
  • FoodRestriction
  • +
  • GapTiny
  • +
  • DrugPolicy
  • +
  • RemainingSpace
  • +
    +
    + + + PL_Overview + PawnTable_PlayerPawns + +
  • Label
  • +
  • GapTiny
  • +
  • PL_InteractionColumn
  • +
  • GapTiny
  • +
  • PL_MotivationColumn
  • +
  • GapTiny
  • +
  • PL_HasLegcuffs
  • +
  • GapTiny
  • +
  • PL_HasHandcuffs
  • +
  • GapTiny
  • +
  • PL_Resocialization
  • +
  • GapTiny
  • +
  • PL_HasIntel
  • +
  • RemainingSpace
  • +
    +
    + + + PL_DevTable + PawnTable_PlayerPawns + +
  • Label
  • +
  • GapTiny
  • +
  • PL_EscapeColumn
  • +
  • GapTiny
  • +
  • PL_TreatmentColumn
  • +
  • RemainingSpace
  • +
    +
    + + + + PL_InteractionColumn + + Interaction mode + PrisonLabor.Core.MainButton_Window.ColumnWorker_Interaction + true + + + + PL_Resocialization + + Prisoner wants to join to your colony + PrisonLabor.Core.MainButton_Window.ColumnWorker_Resocialization + + + + PL_HasLegcuffs + + PrisonLabor.Core.MainButton_Window.ColumnWorker_HasLegcuffs + true + + + + PL_HasHandcuffs + + PrisonLabor.Core.MainButton_Window.ColumnWorker_HasHandscuffs + true + + + + PL_EscapeColumn + + PrisonLabor.Core.MainButton_Window.ColumnWorker_EscapeTracker + + + + PL_MotivationColumn + + PrisonLabor.Core.MainButton_Window.ColumnWorker_Motivation + true + + + + PL_TreatmentColumn + + PrisonLabor.Core.MainButton_Window.ColumnWorker_Treatment + true + + + + PL_HasIntel + + PrisonLabor.Core.MainButton_Window.ColumnWorker_HasIntel + true +
    \ No newline at end of file diff --git a/1.4/Defs/ThinkTreeDef.xml b/1.4/Defs/ThinkTreeDef.xml index 0fffd879..39037819 100644 --- a/1.4/Defs/ThinkTreeDef.xml +++ b/1.4/Defs/ThinkTreeDef.xml @@ -20,7 +20,7 @@
  • ChangingApparel -
  • +
  • diff --git a/1.4/Hospitality/Assemblies/PrisonLaborHospitalityCompatibility.dll b/1.4/Hospitality/Assemblies/PrisonLaborHospitalityCompatibility.dll index 13f3575628a4a3824c9cd5e736970d30e57eaed3..6880cbbf8cbd829131032dd81b509997b4781d53 100644 GIT binary patch delta 83 zcmZp0XmFU&!P303|INl8H7*t=B?g(z+qm{|3f${4UG+2Ppx-i$zyo=X1sgZFh`eWH kwAfrCCdI_b!N9`6$iTqBv3a^gB1rV7 delta 83 zcmZp0XmFU&!6JE%@9M@LH7*ugMd8fN+qm{|3T*6Blt@Z{@7NS2`+n+V{=J)9MBXzp knr|)VDXq=|0KSwO*Z=?k diff --git a/1.4/Kijin/Assemblies/PrisonLaborKijinCompatibility.dll b/1.4/Kijin/Assemblies/PrisonLaborKijinCompatibility.dll index efd8f46cb36dbbcc3664c82256a210e12ebe5c73..d750c5b9afbba5f41e9120885f936bf1df2ad954 100644 GIT binary patch delta 92 zcmZp$X|S2l!6Mz&@nmDqElw6DB?g(vSzIbC?Mfm{nC_1`gP t->aS6EFyB9k=%MON4?%-%9QVQ7fgxnE=vY9#{YX delta 92 zcmZp$X|S2l!E)TV|INmpTbwMmio%(bv$#}Pd=!_=**uA>h*LoQccfy>sR@o<20dCG tCoYF?77@A5$Y{R#jp!mKPId+s21W)32KLRZzXqwsFl*;OaLF29|r&c diff --git a/1.4/Quarry/Assemblies/PrisonLaborQuarryCompatibility.dll b/1.4/Quarry/Assemblies/PrisonLaborQuarryCompatibility.dll index 93ca79acbb343851753ae2e7806aa7b95141de94..381ffd8cfc405065b6007d837d64a96e91bea5cf 100644 GIT binary patch delta 92 zcmZqBY0#O_!NU1k@5II)8#WduB?g(vXV_F&+Lc6@Hh*E8z$&ou;e`DEDXSe?4wP8D uU$`W5^AsLCMn;Rxmw9(HadI%QFfcMOFmP<1E)WV5eJgkvL~RuIX957^dLG08 delta 92 zcmZqBY0#O_!J_eZ-=U2?Hf$`mio%(b&#eL^AsLCMn?0^mw9(Hak4Y8FfcMOFtBf)E)WV5eJgkvL~RuIX955?@gGhA diff --git a/1.4/Therapy/Assemblies/PrisonLaborTherapyCompatibility.dll b/1.4/Therapy/Assemblies/PrisonLaborTherapyCompatibility.dll index 851cc601f9f776f28db99a750a3f4b0c7caedc4a..a6d894a31e96190a0f040499e4665cf8d83b5f95 100644 GIT binary patch delta 292 zcmZpOXo#55!E$HQ*5eanC4O z;Sls-U|?WkU}b1fWnj>dWnf^OY^Z9!Ie=+46Qla%H!NC=+MC5$yBO6y85s&R{23Uy zGy;G`Z6J_PEt(7z6xRp>2?T=$4o^P8_D7O~iGe{mG?+m`f`LH*Xuh(0sHY2%*4TWP z{UHYnlM>J+hXhnu+Lc6@Hop>>$jfNGxlK-nQQ%aef{5(AKEFlczO05~9F?25$a6C@ zT5LX`B*4V`2IvDAV4HkbMH=XSp3N+(T#OS9cqa3yHE?n;urM$Jm2hmHt`^A%)b~;S VIFOpWQ`4VG!g#Zw)_b5*b^s{KMv(vj delta 300 zcmZpOXo#55!D4mt->Hc`GK@+SSB5iQn9Rti&bq~kfk9@nB9qSKNJe!=jmeFS^^z>k z3}D~^B$*gk85&d>7))dt7#Jrjs+w;OV4BUuXgK)|ix#8lW^vXoM)hDuh5`+L1_myT z03cBt2qaXC<^l!9HG)6_!C-;2lTWbykrZKKU{DSXW>Aq}U=RSBuk0S`=>nupHs57` z$iZT(D4aR@kbnw{kK&R!n_me`;Ab*%Rahq zIq*!~;r?C0%`4=&nHkMDZ&4Cpn#9Dx3Ua>CHZ&PUcf<;ACfDVPFKx huy3BO7Rd-y{!#rnkea+x)1OJjc(b6^d&Y?d>;P^4Ok@B6 diff --git a/About/About.xml b/About/About.xml index 7266209f..17622204 100644 --- a/About/About.xml +++ b/About/About.xml @@ -35,7 +35,7 @@ - Version 1.4.7 + Version 1.4.8 This mod force prisoners to work. To enable this feature prisoners must have "Force to work" option checked ("Prisoner" tab). Prison labor needs management that consist: - Motivation - prisoners need to be motivated by presence of colonists. Wardens have new job - supervising prisoners. Low motivation can lead to revolts. diff --git a/Languages/English/Keyed/Keys.xml b/Languages/English/Keyed/Keys.xml index 8d30f201..d5f81313 100644 --- a/Languages/English/Keyed/Keys.xml +++ b/Languages/English/Keyed/Keys.xml @@ -100,4 +100,15 @@ Cannot take to bed Take {0} to bed + + {0} must be a non player faction prisoner. + {0} doesn't have any more intel. + {0} needs some time before next interrogation. + Something goes wrong, pawn is missing important component. + + Prisoner {0} + + Mech can work in prison area + When disabled mechs will not work in prison labor area + diff --git a/README.md b/README.md index c7229750..64640f49 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

    - v1.4.7 + v1.4.8

    diff --git a/Source/CompatibilityProjects/TeraphyCompatibility/Patches/Patch_WorkGIver_ReceiveTherapy.cs b/Source/CompatibilityProjects/TeraphyCompatibility/Patches/Patch_WorkGIver_ReceiveTherapy.cs index 33638ee4..42f59599 100644 --- a/Source/CompatibilityProjects/TeraphyCompatibility/Patches/Patch_WorkGIver_ReceiveTherapy.cs +++ b/Source/CompatibilityProjects/TeraphyCompatibility/Patches/Patch_WorkGIver_ReceiveTherapy.cs @@ -24,7 +24,7 @@ static IEnumerable Transpiler(ILGenerator gen, MethodBase mBase { if (i > 0 && ShouldPatch(codes[i], codes[i - 1])) { - DebugLogger.debug($"[PL] Therapy HasJobOnThing patch: {mBase.ReflectedType.Name}.{mBase.Name}"); + DebugLogger.debug($"Therapy HasJobOnThing patch: {mBase.ReflectedType.Name}.{mBase.Name}"); yield return new CodeInstruction(OpCodes.Call, typeof(PrisonLaborUtility).GetMethod(nameof(PrisonLaborUtility.GetPawnFaction))); } else diff --git a/Source/Core/AI/JobGivers/JobGiver_Labor.cs b/Source/Core/AI/JobGivers/JobGiver_Labor.cs index 4eb6512b..4c359876 100644 --- a/Source/Core/AI/JobGivers/JobGiver_Labor.cs +++ b/Source/Core/AI/JobGivers/JobGiver_Labor.cs @@ -28,15 +28,15 @@ public override float GetPriority(Pawn pawn) TimeAssignmentDef timeAssignmentDef = (pawn.timetable == null) ? TimeAssignmentDefOf.Anything : pawn.timetable.CurrentAssignment; if (timeAssignmentDef == TimeAssignmentDefOf.Joy) { - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} labor piority: 0"); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} labor piority: 0"); return 0f; } if (timeAssignmentDef == TimeAssignmentDefOf.Work) { - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} labor piority: 10"); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} labor piority: 10"); return 10f; } - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} labor piority: 8"); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} labor piority: 8"); return 8f; } diff --git a/Source/Core/AI/JobGivers/JobGiver_Prisoner_OptimizeApparel.cs b/Source/Core/AI/JobGivers/JobGiver_Prisoner_OptimizeApparel.cs new file mode 100644 index 00000000..da0eabbc --- /dev/null +++ b/Source/Core/AI/JobGivers/JobGiver_Prisoner_OptimizeApparel.cs @@ -0,0 +1,143 @@ +using HarmonyLib; +using PrisonLabor.Core.Needs; +using PrisonLabor.Core.Other; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using Verse.AI; + +namespace PrisonLabor.Core.AI.JobGivers +{ + public class JobGiver_Prisoner_OptimizeApparel : JobGiver_OptimizeApparel + { + private static StringBuilder debugSb; + private static List wornApparelScores = new List(); + + protected override Job TryGiveJob(Pawn pawn) + { + if (!pawn.IsPrisonerOfColony) + { + return null; + } + if (pawn.IsQuestLodger()) + { + return null; + } + if (pawn.outfits == null) + { + pawn.outfits = new Pawn_OutfitTracker(pawn); + } + + if (!DebugViewSettings.debugApparelOptimize) + { + if (Find.TickManager.TicksGame < pawn.mindState.nextApparelOptimizeTick) + { + return null; + } + } + else + { + debugSb = new StringBuilder(); + debugSb.AppendLine($"Scanning for {pawn} at {pawn.Position}"); + } + + Outfit currentOutfit = pawn.outfits.CurrentOutfit; + List wornApparel = pawn.apparel.WornApparel; + + if (pawn.IsMotivated()) + { + for (int num = wornApparel.Count - 1; num >= 0; num--) + { + if (!currentOutfit.filter.Allows(wornApparel[num]) && pawn.outfits.forcedHandler.AllowedToAutomaticallyDrop(wornApparel[num]) && !pawn.apparel.IsLocked(wornApparel[num])) + { + Job job2 = JobMaker.MakeJob(JobDefOf.RemoveApparel, wornApparel[num]); + job2.haulDroppedApparel = true; + DebugLogger.debug($"Prisoner {pawn.LabelShort} is removing: {wornApparel[num].def.defName} - called return"); + return job2; + } + } + } + else + { + DebugLogger.debug($"Prisoner {pawn.NameShortColored} not motivated. Removing apparel skiped"); + } + + Thing thing = null; + float num2 = 0f; + List list = pawn.Map.listerThings.ThingsInGroup(ThingRequestGroup.Apparel); + if (list.Count == 0) + { + SetNextOptimizeTick(pawn); + DebugLogger.debug($"No apparel found for prisoner {pawn.LabelShort}. Null return."); + return null; + } + CalculateNeedWarmth(pawn); + wornApparelScores.Clear(); + for (int i = 0; i < wornApparel.Count; i++) + { + wornApparelScores.Add(ApparelScoreRaw(pawn, wornApparel[i])); + } + for (int j = 0; j < list.Count; j++) + { + Apparel apparel = (Apparel)list[j]; + bool filterAllows = currentOutfit.filter.Allows(apparel); + bool isStored = IsStored(apparel); + bool notForbidden = !apparel.IsForbidden(pawn); + bool notBurning = !apparel.IsBurning(); + bool genderMatching = IsGenderMatchingApparel(pawn, apparel); + DebugLogger.debug($"Checking {apparel.def.defName} for {pawn.LabelShort}. Fillter allows: {filterAllows}, isStored: {isStored}," + + $" notForbidden: {notForbidden}, notBurning: {notBurning}, gender Matching: {genderMatching}"); + if (filterAllows && isStored && notForbidden && notBurning && genderMatching) + { + float num3 = ApparelScoreGain(pawn, apparel, wornApparelScores); + if (DebugViewSettings.debugApparelOptimize) + { + debugSb.AppendLine(apparel.LabelCap + ": " + num3.ToString("F2")); + } + if (!(num3 < 0.05f) && !(num3 < num2) && (!CompBiocodable.IsBiocoded(apparel) || CompBiocodable.IsBiocodedFor(apparel, pawn)) && ApparelUtility.HasPartsToWear(pawn, apparel.def) && pawn.CanReserveAndReach(apparel, PathEndMode.OnCell, pawn.NormalMaxDanger()) && apparel.def.apparel.developmentalStageFilter.Has(pawn.DevelopmentalStage)) + { + thing = apparel; + num2 = num3; + } + } + } + if (DebugViewSettings.debugApparelOptimize) + { + debugSb.AppendLine("BEST: " + thing); + Log.Message(debugSb.ToString()); + debugSb = null; + } + if (thing == null) + { + SetNextOptimizeTick(pawn); + DebugLogger.debug($"No matching apparel found for prisoner {pawn.LabelShort}. Null return."); + return null; + } + return JobMaker.MakeJob(JobDefOf.Wear, thing); + } + + private static bool IsGenderMatchingApparel(Pawn pawn, Apparel apparel) + { + return apparel.def.apparel.gender == Gender.None || apparel.def.apparel.gender == pawn.gender; + } + + private static bool IsStored(Apparel apparel) + { + return apparel.GetRoom().IsPrisonCell || apparel.IsInAnyStorage(); + } + + private void CalculateNeedWarmth(Pawn pawn) + { + Traverse.Create(this).Field("neededWarmth").SetValue(PawnApparelGenerator.CalculateNeededWarmth(pawn, pawn.Map.Tile, GenLocalDate.Twelfth(pawn))); + } + + private void SetNextOptimizeTick(Pawn pawn) + { + pawn.mindState.nextApparelOptimizeTick = Find.TickManager.TicksGame + Rand.Range(6000, 9000); + } + } +} diff --git a/Source/Core/AI/JobGivers/JobGiver_PrisonersRecreation.cs b/Source/Core/AI/JobGivers/JobGiver_PrisonersRecreation.cs index d3c8553a..3fdfcc1f 100644 --- a/Source/Core/AI/JobGivers/JobGiver_PrisonersRecreation.cs +++ b/Source/Core/AI/JobGivers/JobGiver_PrisonersRecreation.cs @@ -21,7 +21,7 @@ public override float GetPriority(Pawn pawn) TimeAssignmentDef timeAssignmentDef = (pawn.timetable == null) ? TimeAssignmentDefOf.Anything : pawn.timetable.CurrentAssignment; if (pawn.IsPrisoner && timeAssignmentDef == TimeAssignmentDefOf.Joy) { - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} joy piority: 10"); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} joy piority: 10"); return 10f; } return 0f; @@ -30,29 +30,29 @@ public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobPara { if (!CanDoDuringMedicalRest && pawn.InBed() && HealthAIUtility.ShouldSeekMedicalRest(pawn)) { - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} no joy because of medic needs"); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} no joy because of medic needs"); return ThinkResult.NoJob; } PrisonerJoyDef prisonerJoyDef = DefDatabase.GetNamed("PrisonLabor_PrisonersJoy"); //JoyGiverDef result = prisonerJoyDef.avaliableForPrisonersJoy.RandomElement(); if (prisonerJoyDef.avaliableForPrisonersJoy.TryRandomElementByWeight(def => def.Worker.GetChance(pawn), out JoyGiverDef result)) { - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} checking joy: {result.defName}."); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} checking joy: {result.defName}."); Job job = result.Worker?.TryGiveJob(pawn); if (job != null) { - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} joy from {result.defName}."); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} joy from {result.defName}."); return new ThinkResult(job, this); } } - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} no joy found. Trying walk"); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} no joy found. Trying walk"); Job walk = walkDef.Worker.TryGiveJob(pawn); if (walk != null) { - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} going for a walk."); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} going for a walk."); return new ThinkResult(walk, this); } - DebugLogger.debug($"[PL] Prisoner {pawn.NameShortColored} walk failed. Returning no job."); + DebugLogger.debug($"Prisoner {pawn.NameShortColored} walk failed. Returning no job."); return ThinkResult.NoJob; } diff --git a/Source/Core/Alerts/Alert_EscapingPrisoners.cs b/Source/Core/Alerts/Alert_EscapingPrisoners.cs index 7e5fc9c8..b9eba57d 100644 --- a/Source/Core/Alerts/Alert_EscapingPrisoners.cs +++ b/Source/Core/Alerts/Alert_EscapingPrisoners.cs @@ -1,3 +1,4 @@ +using PrisonLabor.Core.Components; using PrisonLabor.Core.Meta; using PrisonLabor.Core.Other; using PrisonLabor.Core.Trackers; @@ -11,37 +12,43 @@ namespace PrisonLabor.Core.Alerts { - public class Alert_EscapingPrisoners : Alert_Critical + public class Alert_EscapingPrisoners : Alert_Critical + { + public Alert_EscapingPrisoners() { - public Alert_EscapingPrisoners() - { - defaultLabel = "PrisonLabor_Alert_EscapingPrisoners_Title".Translate(); - defaultExplanation = "PrisonLabor_Alert_EscapingPrisoners_DefaultExplanation".Translate(); - } + defaultLabel = "PrisonLabor_Alert_EscapingPrisoners_Title".Translate(); + defaultExplanation = "PrisonLabor_Alert_EscapingPrisoners_DefaultExplanation".Translate(); + } - private IEnumerable PotentialEscapingPrisoners - { - get - { - return EscapeTracker.PrisonersReadyToEscape; - } - } + private IEnumerable PotentialEscapingPrisoners + { + get + { + return PawnsFinder.AllMaps_PrisonersOfColonySpawned.Where(prisoner => EscapingPrisoner(prisoner)); + } + } - public override TaggedString GetExplanation() - { - Tutorials.Motivation(); + private bool EscapingPrisoner(Pawn prisoner) + { + PrisonerComp prisonerComp = prisoner.TryGetComp(); + return prisonerComp != null && prisonerComp.EscapeTracker.ReadyToEscape; + } - var stringBuilder = new StringBuilder(); - foreach (var current in PotentialEscapingPrisoners) - stringBuilder.AppendLine(" " + current.Name.ToStringShort); - return string.Format("PrisonLabor_Alert_EscapingPrisoners_ExplanationFormat".Translate(), stringBuilder); - } + public override TaggedString GetExplanation() + { + Tutorials.Motivation(); + + var stringBuilder = new StringBuilder(); + foreach (var current in PotentialEscapingPrisoners) + stringBuilder.AppendLine(" " + current.Name.ToStringShort); + return string.Format("PrisonLabor_Alert_EscapingPrisoners_ExplanationFormat".Translate(), stringBuilder); + } - public override AlertReport GetReport() - { - if (PrisonLaborPrefs.EnableMotivationMechanics) - return AlertReport.CulpritIs(PotentialEscapingPrisoners.FirstOrDefault()); - return false; - } + public override AlertReport GetReport() + { + if (PrisonLaborPrefs.EnableMotivationMechanics) + return AlertReport.CulpritIs(PotentialEscapingPrisoners.FirstOrDefault()); + return false; } + } } diff --git a/Source/Core/Alerts/Alert_LazyPrisoners.cs b/Source/Core/Alerts/Alert_LazyPrisoners.cs index bad1b4cc..a62cc2cc 100644 --- a/Source/Core/Alerts/Alert_LazyPrisoners.cs +++ b/Source/Core/Alerts/Alert_LazyPrisoners.cs @@ -9,42 +9,44 @@ namespace PrisonLabor.Core.Alerts { - internal class Alert_LazyPrisoners : Alert + internal class Alert_LazyPrisoners : Alert + { + public Alert_LazyPrisoners() { - public Alert_LazyPrisoners() - { - defaultLabel = "PrisonLabor_LazyPrisonerAlert".Translate(); - defaultExplanation = "PrisonLabor_LazyPrisonerExplanationDef".Translate(); - } + defaultLabel = "PrisonLabor_LazyPrisonerAlert".Translate(); + defaultExplanation = "PrisonLabor_LazyPrisonerExplanationDef".Translate(); + } - private IEnumerable LazyPrisoners - { - get - { - var maps = Find.Maps; - for (var i = 0; i < maps.Count; i++) - foreach (var pawn in maps[i].mapPawns.AllPawns) - if (PrisonLaborUtility.LaborEnabled(pawn) && PrisonLaborUtility.WorkTime(pawn) && - pawn.needs.TryGetNeed().IsLazy) - yield return pawn; - } - } + private IEnumerable LazyPrisoners + { + get + { + return PawnsFinder.AllMaps_PrisonersOfColonySpawned.Where(prisoner => IsLazyPrisoner(prisoner)); + } + } - public override TaggedString GetExplanation() - { - Tutorials.Motivation(); + private bool IsLazyPrisoner(Pawn pawn) + { + return PrisonLaborUtility.LaborEnabled(pawn) && + PrisonLaborUtility.WorkTime(pawn) && + !pawn.IsMotivated(); + } - var stringBuilder = new StringBuilder(); - foreach (var current in LazyPrisoners) - stringBuilder.AppendLine(" " + current.Name.ToStringShort); - return string.Format("PrisonLabor_LazyPrisonerExplanation".Translate(), stringBuilder); - } + public override TaggedString GetExplanation() + { + Tutorials.Motivation(); + + var stringBuilder = new StringBuilder(); + foreach (var current in LazyPrisoners) + stringBuilder.AppendLine(" " + current.Name.ToStringShort); + return string.Format("PrisonLabor_LazyPrisonerExplanation".Translate(), stringBuilder); + } - public override AlertReport GetReport() - { - if (PrisonLaborPrefs.EnableMotivationMechanics) - return AlertReport.CulpritIs(LazyPrisoners.FirstOrDefault()); - return false; - } + public override AlertReport GetReport() + { + if (PrisonLaborPrefs.EnableMotivationMechanics) + return AlertReport.CulpritIs(LazyPrisoners.FirstOrDefault()); + return false; } + } } \ No newline at end of file diff --git a/Source/Core/Alerts/Alert_StarvingPrisoners.cs b/Source/Core/Alerts/Alert_StarvingPrisoners.cs index 5663baa1..a9162d9c 100644 --- a/Source/Core/Alerts/Alert_StarvingPrisoners.cs +++ b/Source/Core/Alerts/Alert_StarvingPrisoners.cs @@ -8,41 +8,41 @@ namespace PrisonLabor.Core.Alerts { - internal class Alert_StarvingPrisoners : Alert + internal class Alert_StarvingPrisoners : Alert + { + public Alert_StarvingPrisoners() { - public Alert_StarvingPrisoners() - { - defaultLabel = "PrisonLabor_StarvingPrisonerAlert".Translate(); - defaultExplanation = "PrisonLabor_StarvingPrisonerExplanationDef".Translate(); - } + defaultLabel = "PrisonLabor_StarvingPrisonerAlert".Translate(); + defaultExplanation = "PrisonLabor_StarvingPrisonerExplanationDef".Translate(); + } - private IEnumerable StarvingPrisoners - { - get - { - var maps = Find.Maps; - for (var i = 0; i < maps.Count; i++) - foreach (var pawn in maps[i].mapPawns.AllPawns) - if (PrisonLaborUtility.LaborEnabled(pawn) && PrisonLaborUtility.WorkTime(pawn) && - (!PrisonLaborPrefs.EnableMotivationMechanics || - !pawn.needs.TryGetNeed().IsLazy) && pawn.timetable != null && + private IEnumerable StarvingPrisoners + { + get + { + return PawnsFinder.AllMaps_PrisonersOfColonySpawned.Where(prisoner => IsStarvingPrisoner(prisoner)); + } + } + + private bool IsStarvingPrisoner(Pawn pawn) + { + return PrisonLaborUtility.LaborEnabled(pawn) && PrisonLaborUtility.WorkTime(pawn) && + (!PrisonLaborPrefs.EnableMotivationMechanics || !pawn.needs.TryGetNeed().IsLazy) && pawn.timetable != null && pawn.timetable.CurrentAssignment == TimeAssignmentDefOf.Anything && - pawn.needs.food.Starving) - yield return pawn; - } - } + pawn.needs.food.Starving; + } - public override TaggedString GetExplanation() - { - var stringBuilder = new StringBuilder(); - foreach (var current in StarvingPrisoners) - stringBuilder.AppendLine(" " + current.Name.ToStringShort); - return string.Format("PrisonLabor_StarvingPrisonerExplanation".Translate(), stringBuilder); - } + public override TaggedString GetExplanation() + { + var stringBuilder = new StringBuilder(); + foreach (var current in StarvingPrisoners) + stringBuilder.AppendLine(" " + current.Name.ToStringShort); + return string.Format("PrisonLabor_StarvingPrisonerExplanation".Translate(), stringBuilder); + } - public override AlertReport GetReport() - { - return AlertReport.CulpritIs(StarvingPrisoners.FirstOrDefault()); - } + public override AlertReport GetReport() + { + return AlertReport.CulpritIs(StarvingPrisoners.FirstOrDefault()); } + } } \ No newline at end of file diff --git a/Source/Core/Components/PrisonerComp.cs b/Source/Core/Components/PrisonerComp.cs index fe63946d..908af677 100644 --- a/Source/Core/Components/PrisonerComp.cs +++ b/Source/Core/Components/PrisonerComp.cs @@ -13,99 +13,117 @@ namespace PrisonLabor.Core.Components { - public class PrisonerComp : ThingComp - { - private EscapeTracker escapeTracker; + public class PrisonerComp : ThingComp + { + private EscapeTracker escapeTracker; + private bool hasIntel = true; + private int lastInterraction = 0; - public EscapeTracker EscapeTracker + public EscapeTracker EscapeTracker + { + get + { + if (escapeTracker == null) { - get - { - if (escapeTracker == null) - { - escapeTracker = new EscapeTracker(this.parent as Pawn); - } - return escapeTracker; - } + escapeTracker = new EscapeTracker(this.parent as Pawn); } + return escapeTracker; + } + } + public bool HasIntel + { + get + { + return hasIntel; + } + set + { + hasIntel = value; + } + } + + public int LastInteractionTick + { + get + { + return lastInterraction; + } + set + { + lastInterraction = value; + } + } - private bool Active + private bool Active + { + get + { + Pawn pawn = this.parent as Pawn; + return pawn != null && pawn.IsPrisonerOfColony && !pawn.Dead && pawn.Spawned && pawn.CarriedBy == null; + } + } + + public override void Initialize(CompProperties props) + { + base.Initialize(props); + if (escapeTracker == null) + { + escapeTracker = new EscapeTracker(this.parent as Pawn); + } + } + public override void PostDraw() + { + if (Active && PrisonLaborPrefs.EnableMotivationIcons) + { + Pawn pawn = this.parent as Pawn; + var need = pawn.needs.TryGetNeed(); + if (pawn.health.hediffSet.HasTemperatureInjury(TemperatureInjuryStage.Serious) && PrisonLaborUtility.WorkTime(pawn)) { - get - { - Pawn pawn = this.parent as Pawn; - return pawn != null && pawn.IsPrisonerOfColony && !pawn.Dead && pawn.Spawned && pawn.CarriedBy == null; - } + DrawIcon(TexturePool.freezingTexture); } - - public override void Initialize(CompProperties props) + else if (pawn.IsWatched()) { - base.Initialize(props); - if (escapeTracker == null) - { - escapeTracker = new EscapeTracker(this.parent as Pawn); - } + DrawIcon(TexturePool.watchedTexture); } - public override void PostDraw() + else if (need != null && need.IsLazy && PrisonLaborUtility.LaborEnabled(pawn) && PrisonLaborUtility.WorkTime(pawn)) { - if (Active && PrisonLaborPrefs.EnableMotivationIcons) - { - Pawn pawn = this.parent as Pawn; - var need = pawn.needs.TryGetNeed(); - if (pawn.health.hediffSet.HasTemperatureInjury(TemperatureInjuryStage.Serious) && PrisonLaborUtility.WorkTime(pawn)) - { - DrawIcon(TexturePool.freezingTexture); - } - else if (pawn.IsWatched()) - { - DrawIcon(TexturePool.watchedTexture); - } - else if (need != null && need.IsLazy && PrisonLaborUtility.LaborEnabled(pawn) && PrisonLaborUtility.WorkTime(pawn)) - { - DrawIcon(TexturePool.lazyTexture); - } - } - + DrawIcon(TexturePool.lazyTexture); } + } + } - private void DrawIcon(Material drawIcon) - { - var drawPos = parent.DrawPos; - drawPos.y = AltitudeLayer.MetaOverlays.AltitudeFor() + 0.28125f; - drawPos.x += parent.def.size.x - 0.52f; - drawPos.z += parent.def.size.z - 0.45f; + private void DrawIcon(Material drawIcon) + { + var drawPos = parent.DrawPos; + drawPos.y = AltitudeLayer.MetaOverlays.AltitudeFor() + 0.28125f; + drawPos.x += parent.def.size.x - 0.52f; + drawPos.z += parent.def.size.z - 0.45f; - var num = (Time.realtimeSinceStartup + (397f * (parent.thingIDNumber % 571))) * 4f; - var num2 = ((float)Math.Sin(num) + 1f) * 0.5f; - num2 = 0.3f + (num2 * 0.7f); - var material = FadedMaterialPool.FadedVersionOf(drawIcon, num2); - Graphics.DrawMesh(MeshPool.plane05, drawPos, Quaternion.identity, material, 0); - } - public override void PostExposeData() - { - Scribe_Deep.Look(ref escapeTracker, "EscapeTracker", new object[] { this.parent as Pawn }); - } + var num = (Time.realtimeSinceStartup + (397f * (parent.thingIDNumber % 571))) * 4f; + var num2 = ((float)Math.Sin(num) + 1f) * 0.5f; + num2 = 0.3f + (num2 * 0.7f); + var material = FadedMaterialPool.FadedVersionOf(drawIcon, num2); + Graphics.DrawMesh(MeshPool.plane05, drawPos, Quaternion.identity, material, 0); + } - public override void CompTickRare() - { - if (Active) - { - EscapeTracker.Tick(); - } - else - { - EscapeTracker.DeRegister(this.parent as Pawn); - } - } + public override void PostExposeData() + { + Scribe_Deep.Look(ref escapeTracker, "EscapeTracker", new object[] { this.parent as Pawn }); + Scribe_Values.Look(ref hasIntel, "hasIntel", true); + Scribe_Values.Look(ref lastInterraction, "lastInteractionTick", 0); + } - public override void PostDeSpawn(Map map) - { - EscapeTracker.DeRegister(this.parent as Pawn); - } + public override void CompTickRare() + { + if (Active) + { + EscapeTracker.Tick(); + } } + } } diff --git a/Source/Core/Interrogation/Comp_Interrogation.cs b/Source/Core/Interrogation/Comp_Interrogation.cs new file mode 100644 index 00000000..daa51c0a --- /dev/null +++ b/Source/Core/Interrogation/Comp_Interrogation.cs @@ -0,0 +1,22 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation +{ + public class CompInterrogation : ThingComp + { + } + + public class CompPropertiesInterrogation : CompProperties + { + public CompPropertiesInterrogation() + { + compClass = typeof(CompInterrogation); + } + } +} diff --git a/Source/Core/Interrogation/InterrogationDefsOf.cs b/Source/Core/Interrogation/InterrogationDefsOf.cs new file mode 100644 index 00000000..c8c9be77 --- /dev/null +++ b/Source/Core/Interrogation/InterrogationDefsOf.cs @@ -0,0 +1,24 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; + +namespace PrisonLabor.Core.Interrogation +{ + [DefOf] + public static class InterrogationDefsOf + { + public static InterrogationQuestGenDef PL_GenQuest; + public static ThoughtDef PL_BitMe; + public static ThoughtDef PL_KindInterrogation; + public static ThoughtDef PL_Interrogated; + public static ThoughtDef PL_BrutallyInterrogated; + public static JobDef PL_Interrogate; + public static InteractionDef PL_InterrogateInteraction; + public static InteractionDef PL_BeIntrrogatedInteraction; + } +} diff --git a/Source/Core/Interrogation/InterrogationQuestGenDef.cs b/Source/Core/Interrogation/InterrogationQuestGenDef.cs new file mode 100644 index 00000000..d9cae5fd --- /dev/null +++ b/Source/Core/Interrogation/InterrogationQuestGenDef.cs @@ -0,0 +1,15 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation +{ + public class InterrogationQuestGenDef : Def + { + public List questScriptDefs; + } +} diff --git a/Source/Core/Interrogation/Ritual/JobDriver_Interrogate.cs b/Source/Core/Interrogation/Ritual/JobDriver_Interrogate.cs new file mode 100644 index 00000000..165bdb0a --- /dev/null +++ b/Source/Core/Interrogation/Ritual/JobDriver_Interrogate.cs @@ -0,0 +1,45 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + [StaticConstructorOnStartup] + public class JobDriver_Interrogate : JobDriver + { + public static readonly Texture2D moteIcon = ContentFinder.Get("Things/Mote/SpeechSymbols/Speech"); + public override bool TryMakePreToilReservations(bool errorOnFailed) + { + return true; + } + + protected override IEnumerable MakeNewToils() + { + this.FailOnDespawnedNullOrForbidden(TargetIndex.A); + Toil toil = ToilMaker.MakeToil("MakeNewToils"); + toil.tickAction = delegate + { + pawn.GainComfortFromCellIfPossible(); + pawn.skills.Learn(SkillDefOf.Social, 0.01f); + pawn.rotationTracker.FaceTarget(TargetB); + Pawn prisoner = TargetThingB as Pawn; + prisoner?.rotationTracker.FaceTarget(pawn.Position); + MoteMaker.MakeSpeechBubble(pawn, moteIcon); + }; + if (ModsConfig.IdeologyActive) + { + toil.PlaySustainerOrSound(() => (pawn.gender != Gender.Female) ? job.speechSoundMale : job.speechSoundFemale, pawn.story.VoicePitchFactor); + } + toil.defaultCompleteMode = ToilCompleteMode.Delay; + toil.defaultDuration = 300; + toil.handlingFacing = true; + yield return toil; + } + } +} diff --git a/Source/Core/Interrogation/Ritual/JobGiver_Interrogate.cs b/Source/Core/Interrogation/Ritual/JobGiver_Interrogate.cs new file mode 100644 index 00000000..5c5f948a --- /dev/null +++ b/Source/Core/Interrogation/Ritual/JobGiver_Interrogate.cs @@ -0,0 +1,64 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse.AI; +using Verse; +using Verse.AI.Group; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + public class JobGiver_Interrogate : ThinkNode_JobGiver + { + public SoundDef soundDefMale; + + public SoundDef soundDefFemale; + + public bool faceSpectatorsIfPossible; + + public bool showSpeechBubbles = true; + + protected override Job TryGiveJob(Pawn pawn) + { + PawnDuty duty = pawn.mindState.duty; + if (duty == null) + { + return null; + } + IntVec3 result = pawn.Position; + if (!pawn.CanReserve(pawn.Position)) + { + CellFinder.TryRandomClosewalkCellNear(result, pawn.Map, 2, out result, (IntVec3 c) => pawn.CanReserveAndReach(c, PathEndMode.OnCell, pawn.NormalMaxDanger())); + } + LordJob_Ritual lordJob_Ritual = pawn.GetLord()?.LordJob as LordJob_Ritual; + if (lordJob_Ritual == null) + { + return null; + } + Pawn prisoner = lordJob_Ritual.PawnWithRole("prisoner"); + Job job = JobMaker.MakeJob(InterrogationDefsOf.PL_Interrogate, result, prisoner); + job.showSpeechBubbles = showSpeechBubbles; + LordToil_Ritual lordToil_Ritual; + if (lordJob_Ritual != null && (lordToil_Ritual = (lordJob_Ritual.lord.CurLordToil as LordToil_Ritual)) != null) + { + job.interaction = lordToil_Ritual.stage.BehaviorForRole(lordJob_Ritual.RoleFor(pawn).id).speakerInteraction; + } + job.speechSoundMale = (soundDefMale ?? SoundDefOf.Speech_Leader_Male); + job.speechSoundFemale = (soundDefFemale ?? SoundDefOf.Speech_Leader_Female); + job.speechFaceSpectatorsIfPossible = faceSpectatorsIfPossible; + return job; + } + + public override ThinkNode DeepCopy(bool resolve = true) + { + JobGiver_Interrogate obj = (JobGiver_Interrogate)base.DeepCopy(resolve); + obj.soundDefMale = soundDefMale; + obj.soundDefFemale = soundDefFemale; + obj.showSpeechBubbles = showSpeechBubbles; + obj.faceSpectatorsIfPossible = faceSpectatorsIfPossible; + return obj; + } + } +} \ No newline at end of file diff --git a/Source/Core/Interrogation/Ritual/NonColonyPrisonerRole.cs b/Source/Core/Interrogation/Ritual/NonColonyPrisonerRole.cs new file mode 100644 index 00000000..f5f884b1 --- /dev/null +++ b/Source/Core/Interrogation/Ritual/NonColonyPrisonerRole.cs @@ -0,0 +1,62 @@ +using PrisonLabor.Core.Components; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + public class NonColonyPrisonerRole : RitualRole + { + public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false) + { + if (!AppliesIfChild(p, out reason, skipReason)) + { + return false; + } + if (p.IsPrisonerOfColony && !p.Faction.IsPlayer) + { + PrisonerComp prisonerComp = p.TryGetComp(); + if (prisonerComp == null) + { + PrepareReason("PrisonLabor_MissingComp".Translate(), skipReason, out reason); + return false; + } + + if (!prisonerComp.HasIntel) + { + PrepareReason("PrisonLabor_NoIntel".Translate(base.LabelCap), skipReason, out reason); + return false; + } + if (!ReadyForInterrogation(prisonerComp)) + { + PrepareReason("PrisonLabor_TooSoonInterrogation".Translate(base.LabelCap), skipReason, out reason); + return false; + } + return true; + } + + PrepareReason("PrisonLabor_MustBePrisoner".Translate(base.LabelCap), skipReason, out reason); + return false; + } + + private void PrepareReason(string baseReason, bool skipReason, out string reason) + { + reason = skipReason ? null : baseReason; + } + + private bool ReadyForInterrogation(PrisonerComp prisonerComp) + { + return prisonerComp.LastInteractionTick == 0 || Find.TickManager.TicksGame - prisonerComp.LastInteractionTick > 60_000; + } + + public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn p = null, bool skipReason = false) + { + reason = null; + return false; + } + } +} diff --git a/Source/Core/Interrogation/Ritual/RitualBehaviorWorker_Interrogation.cs b/Source/Core/Interrogation/Ritual/RitualBehaviorWorker_Interrogation.cs new file mode 100644 index 00000000..8588f927 --- /dev/null +++ b/Source/Core/Interrogation/Ritual/RitualBehaviorWorker_Interrogation.cs @@ -0,0 +1,82 @@ +using PrisonLabor.Core.Other; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + public class RitualBehaviorWorker_Interrogation : RitualBehaviorWorker + { + private int ticksSinceLastInteraction = -1; + + public const int SocialInteractionIntervalTicks = 700; + private const string PrisonerRoleId = "prisoner"; + private const string WardenRoleId = "warden"; + + public RitualBehaviorWorker_Interrogation() + { + } + + public RitualBehaviorWorker_Interrogation(RitualBehaviorDef def) + : base(def) + { + } + + public override void Cleanup(LordJob_Ritual ritual) + { + Pawn pawn = ritual.PawnWithRole(PrisonerRoleId); + if (pawn.IsPrisonerOfColony) + { + pawn.guest.WaitInsteadOfEscapingFor(2500); + } + } + + public override void PostCleanup(LordJob_Ritual ritual) + { + Pawn warden = ritual.PawnWithRole(WardenRoleId); + Pawn prisoner = ritual.PawnWithRole(PrisonerRoleId); + if (prisoner.IsPrisonerOfColony) + { + ArrestUtility.TakePrisonerToBed(prisoner, warden); + prisoner.guest.WaitInsteadOfEscapingFor(1250); + } + } + + public override void Tick(LordJob_Ritual ritual) + { + base.Tick(ritual); + if (ritual.StageIndex == 0) + { + return; + } + if (ticksSinceLastInteraction == -1 || ticksSinceLastInteraction > SocialInteractionIntervalTicks) + { + ticksSinceLastInteraction = 0; + Pawn warden = ritual.PawnWithRole(WardenRoleId); + Pawn prisoner = ritual.PawnWithRole(PrisonerRoleId); + if (Rand.Bool) + { + warden.interactions.TryInteractWith(prisoner, InterrogationDefsOf.PL_InterrogateInteraction); + } + else + { + prisoner.interactions.TryInteractWith(warden, InterrogationDefsOf.PL_BeIntrrogatedInteraction); + } + } + else + { + ticksSinceLastInteraction++; + } + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref ticksSinceLastInteraction, "ticksSinceLastInteraction", -1); + } + } +} diff --git a/Source/Core/Interrogation/Ritual/RitualObligationTargetWorker_Interrogation.cs b/Source/Core/Interrogation/Ritual/RitualObligationTargetWorker_Interrogation.cs new file mode 100644 index 00000000..b321040f --- /dev/null +++ b/Source/Core/Interrogation/Ritual/RitualObligationTargetWorker_Interrogation.cs @@ -0,0 +1,37 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + public class RitualObligationTargetWorker_Interrogation : RitualObligationTargetFilter + { + public RitualObligationTargetWorker_Interrogation() + { + } + + public RitualObligationTargetWorker_Interrogation(RitualObligationTargetFilterDef def) + : base(def) + { + } + + public override IEnumerable GetTargetInfos(RitualObligation obligation) + { + return Enumerable.Empty(); + } + + public override IEnumerable GetTargets(RitualObligation obligation, Map map) + { + return Enumerable.Empty(); + } + + protected override RitualTargetUseReport CanUseTargetInternal(TargetInfo target, RitualObligation obligation) + { + return target.HasThing && target.Thing.Faction != null && target.Thing.Faction.IsPlayer && target.Thing.TryGetComp() != null; + } + } +} diff --git a/Source/Core/Interrogation/Ritual/RitualOutcomeEffectWorker_Interrogation.cs b/Source/Core/Interrogation/Ritual/RitualOutcomeEffectWorker_Interrogation.cs new file mode 100644 index 00000000..46ce8897 --- /dev/null +++ b/Source/Core/Interrogation/Ritual/RitualOutcomeEffectWorker_Interrogation.cs @@ -0,0 +1,232 @@ +using Mono.Cecil; +using PrisonLabor.Core.Components; +using PrisonLabor.Core.Other; +using RimWorld; +using RimWorld.QuestGen; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + public class RitualOutcomeEffectWorker_Interrogation : RitualOutcomeEffectWorker + { + public RitualOutcomeEffectWorker_Interrogation() + { + } + + public RitualOutcomeEffectWorker_Interrogation(RitualOutcomeEffectDef def) + : base(def) + { + } + + private readonly float BaseChanceToGetIntel = 0.3f; + public override void Apply(float progress, Dictionary totalPresence, LordJob_Ritual jobRitual) + { + Pawn warden = jobRitual.PawnWithRole("warden"); + Pawn prisoner = jobRitual.PawnWithRole("prisoner"); + InterrogationType interrogationType; + float successChances = BaseChanceToGetIntel + CalculateChances(warden, prisoner, out interrogationType); + int hits = 0; + + if (interrogationType == InterrogationType.Brutal || interrogationType == InterrogationType.Psycho) + { + hits += PunchPrisoner(warden, prisoner); + } + if (interrogationType == InterrogationType.Psycho) + { + hits += BitePrisoner(warden, prisoner); + } + if (interrogationType == InterrogationType.Kind) + { + BeNice(warden, prisoner); + } + if (hits > 0 && warden.Faction != null && prisoner.Faction != null && warden.Faction.IsPlayer && warden.IsFreeColonist && !Faction.OfPlayer.HostileTo(prisoner.Faction)) + { + int goodwillChange = (int)(-1.3f * hits); + Faction.OfPlayer.TryAffectGoodwillWith(prisoner.Faction, goodwillChange, canSendMessage: true, false, HistoryEventDefOf.AttackedMember, prisoner); + } + + PrisonerComp prisonerComp = prisoner.GetComp(); + if (Rand.Chance(successChances)) + { + QuestScriptDef questDef = InterrogationDefsOf.PL_GenQuest.questScriptDefs.RandomElement(); + float points = StorytellerUtility.DefaultThreatPointsNow(jobRitual.Map); + Quest quest = QuestUtility.GenerateQuestAndMakeAvailable(questDef, points); + QuestUtility.SendLetterQuestAvailable(quest); + prisonerComp.HasIntel = false; + } + prisonerComp.LastInteractionTick = Find.TickManager.TicksGame; + + } + + private void BeNice(Pawn warden, Pawn prisoner) + { + if (HasTrait(warden, TraitDefOf.Kind)) + { + TryGainMemory(prisoner, warden, InterrogationDefsOf.PL_KindInterrogation); + } + TryGainMemory(prisoner, warden, InterrogationDefsOf.PL_Interrogated); + } + + private void TryGainMemory(Pawn pawn, Pawn otherPawn, ThoughtDef thoughtDef) + { + pawn.needs?.mood?.thoughts?.memories?.TryGainMemory(thoughtDef, otherPawn: otherPawn); + } + + private int BitePrisoner(Pawn warden, Pawn prisoner) + { + DoDamage(warden, prisoner, false, DamageDefOf.Bite, InterrogationDefsOf.PL_BitMe, out bool hitDone); + return hitDone ? 1 : 0; + } + + private float CalculateChances(Pawn warden, Pawn prisoner, out InterrogationType iterrogationType) + { + if (HasTrait(warden, TraitDefOf.Kind) || warden.WorkTagIsDisabled(WorkTags.Violent)) + { + iterrogationType = InterrogationType.Kind; + return GoEasy(warden, prisoner); + } + if (HasTrait(warden, TraitDefOf.Bloodlust)) + { + iterrogationType = InterrogationType.Brutal; + return GoBrutal(warden, prisoner); + } + if (HasTrait(warden, TraitDefOf.Psychopath)) + { + iterrogationType = InterrogationType.Psycho; + return GoBrutal(warden, prisoner); + } + if (Rand.Chance(0.5f + warden.relations.OpinionOf(prisoner) * 0.005f)) + { + iterrogationType = InterrogationType.Kind; + return GoEasy(warden, prisoner); + } + else + { + iterrogationType = InterrogationType.Brutal; + return GoBrutal(warden, prisoner); + } + } + + private float GoBrutal(Pawn warden, Pawn prisoner) + { + float actualChance = 0f; + //Knows how to hit + actualChance += warden.skills.GetSkill(SkillDefOf.Social).Level * 0.01f; + //Knows where to hit + actualChance += warden.skills.GetSkill(SkillDefOf.Medicine).Level * 0.01f; + //Prisoner will is still important + actualChance += Mathf.Clamp(prisoner.guest.will * 0.01f, 0, 1f); + if (HasTrait(warden, TraitDefOf.Brawler)) + { + actualChance += 0.1f; + } + if (HasTrait(prisoner, TraitDefOf.Tough)) + { + actualChance -= 0.3f; + } + if (HasTrait(prisoner, TraitDefOf.Nerves)) + { + Trait nerves = GetTrait(prisoner, TraitDefOf.Nerves); + actualChance -= nerves.Degree * 0.1f; + } + if (HasTrait(prisoner, TraitDefOf.Wimp)) + { + //Wimp can't handle beating + actualChance = 1f; + } + if (HasTrait(prisoner, TraitDefOf.Masochist)) + { + //Prisoner likes pain... + actualChance = 0f; + } + DebugLogger.debug($"Base chances for successful Brutal Interrogation: {actualChance}"); + return actualChance; + } + + private float GoEasy(Pawn warden, Pawn prisoner) + { + float actualChance = 0f; + if (HasTrait(warden, TraitDefOf.AnnoyingVoice)) + { + actualChance -= 0.2f; + } + if (HasTrait(warden, TraitDefOf.CreepyBreathing)) + { + actualChance -= 0.1f; + } + if (HasTrait(warden, TraitDefOf.TooSmart)) + { + actualChance -= 0.1f; + } + if (HasTrait(prisoner, TraitDefOf.Nerves)) + { + Trait nerves = GetTrait(prisoner, TraitDefOf.Nerves); + actualChance -= nerves.Degree * 0.1f; + } + actualChance += prisoner.relations.OpinionOf(warden) * 0.002f; + actualChance += warden.skills.GetSkill(SkillDefOf.Social).Level * 0.01f; + + actualChance += Mathf.Clamp(prisoner.guest.will * 0.01f, 0, 1f); + DebugLogger.debug($"Base chances for successful Easy Interrogation: {actualChance}"); + return actualChance; + } + + private bool HasTrait(Pawn pawn, TraitDef trait) + { + return pawn?.story?.traits != null && pawn.story.traits.HasTrait(trait); + } + + private Trait GetTrait(Pawn pawn, TraitDef trait) + { + return pawn.story.traits.GetTrait(trait); + } + + private int PunchPrisoner(Pawn warden, Pawn prisoner) + { + bool done = false; + int successful = 0; + int amountOfHits = Rand.RangeInclusive(1, warden.skills.GetSkill(SkillDefOf.Melee).Level); + for (int i = 0; i < amountOfHits && !prisoner.Downed; i++) + { + done = DoDamage(warden, prisoner, done, DamageDefOf.Blunt, InterrogationDefsOf.PL_BrutallyInterrogated, out bool hitDone); + successful += hitDone ? 1 : 0; + } + return successful; + } + + private bool DoDamage(Pawn warden, Pawn prisoner, bool done, DamageDef damageDef, ThoughtDef interrogationThoughDef, out bool hitDone) + { + hitDone = false; + IEnumerable verbs = warden.meleeVerbs.GetUpdatedAvailableVerbsList(false).Where(ve => ve.verb.GetDamageDef() == damageDef); + if (verbs.Any()) + { + Verb verb = verbs.RandomElement().verb; + float damage = verb.verbProps.AdjustedMeleeDamageAmount(verb, warden); + DamageInfo damageInfo = new DamageInfo(def: verb.verbProps.meleeDamageDef, amount: damage, instigatorGuilty: false); + prisoner.TakeDamage(damageInfo); + prisoner.pather?.StopDead(); + hitDone = true; + if (!done) + { + done = true; + TryGainMemory(prisoner, warden, interrogationThoughDef); + } + + } + return done; + } + } + internal enum InterrogationType + { + Kind, + Brutal, + Psycho + } +} diff --git a/Source/Core/Interrogation/Ritual/RitualPosition_ThingCenter.cs b/Source/Core/Interrogation/Ritual/RitualPosition_ThingCenter.cs new file mode 100644 index 00000000..8ca165c7 --- /dev/null +++ b/Source/Core/Interrogation/Ritual/RitualPosition_ThingCenter.cs @@ -0,0 +1,18 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + public class RitualPosition_ThingCenter : RitualPosition + { + public override PawnStagePosition GetCell(IntVec3 spot, Pawn p, LordJob_Ritual ritual) + { + return new PawnStagePosition(spot, null, Rot4.Invalid, highlight); + } + } +} diff --git a/Source/Core/Interrogation/Ritual/RitualSpectatorFilter_None.cs b/Source/Core/Interrogation/Ritual/RitualSpectatorFilter_None.cs new file mode 100644 index 00000000..21b7d9b8 --- /dev/null +++ b/Source/Core/Interrogation/Ritual/RitualSpectatorFilter_None.cs @@ -0,0 +1,18 @@ +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation.Ritual +{ + public class RitualSpectatorFilter_None : RitualSpectatorFilter + { + public override bool Allowed(Pawn p) + { + return false; + } + } +} diff --git a/Source/Core/Interrogation/RoomRoleWorker_InterrogationRoom.cs b/Source/Core/Interrogation/RoomRoleWorker_InterrogationRoom.cs new file mode 100644 index 00000000..798e12ba --- /dev/null +++ b/Source/Core/Interrogation/RoomRoleWorker_InterrogationRoom.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.Interrogation +{ + public class RoomRoleWorker_InterrogationRoom : RoomRoleWorker + { + public override float GetScore(Room room) + { + List containedAndAdjacentThings = room.ContainedAndAdjacentThings; + foreach (Thing thing in containedAndAdjacentThings) + { + if (thing.TryGetComp() != null) + { + return 100000f; + } + } + return 0f; + } + } +} diff --git a/Source/Core/MainButton_Window/ColumnWorker_HasIntel.cs b/Source/Core/MainButton_Window/ColumnWorker_HasIntel.cs new file mode 100644 index 00000000..e88a6620 --- /dev/null +++ b/Source/Core/MainButton_Window/ColumnWorker_HasIntel.cs @@ -0,0 +1,43 @@ +using PrisonLabor.Constants; +using PrisonLabor.Core.Components; +using PrisonLabor.Core.Other; +using PrisonLabor.Core.Trackers; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.Core.MainButton_Window +{ + public class ColumnWorker_HasIntel : PawnColumnWorker_Checkbox + { + protected override bool GetValue(Pawn pawn) + { + if (pawn == null) + { + DebugLogger.debug("Null pawn in ColumnWorker_HasIntel:GetValue"); + return true; + } + PrisonerComp prisonerComp = pawn.GetComp(); + return prisonerComp != null && prisonerComp.HasIntel; + } + + protected override void SetValue(Pawn pawn, bool value, PawnTable table) + { + if (pawn == null) + { + DebugLogger.debug("Null pawn in ColumnWorker_HasIntel:SetValue"); + return; + } + table?.SetDirty(); + } + protected override bool HasCheckbox(Pawn pawn) + { + return pawn != null && pawn.GetComp() != null; + } + } +} + diff --git a/Source/Core/Meta/Prefs.cs b/Source/Core/Meta/Prefs.cs index 9d55d141..34b6920a 100644 --- a/Source/Core/Meta/Prefs.cs +++ b/Source/Core/Meta/Prefs.cs @@ -8,240 +8,250 @@ namespace PrisonLabor.Core.Meta { - public static class PrisonLaborPrefs - { - private static PrisonLaborPrefsData data; - - private static readonly string prefsFilePath = - Path.Combine(GenFilePaths.ConfigFolderPath, "PrisonLabor_Prefs.xml"); - - public static bool DebugLogs - { - get - { - return data.enable_debug_logging; - } - set - { - data.enable_debug_logging = value; - Apply(); - } - } - public static Version Version - { - get { return data.version; } - set - { - data.version = value; - Apply(); - } - } - - public static Version LastVersion - { - get { return data.last_version; } - set - { - data.last_version = value; - Apply(); - } - } - - public static bool ShowNews - { - get { return data.show_news; } - set - { - data.show_news = value; - Apply(); - } - } - - public static bool AllowAllWorkTypes - { - get { return data.allow_all_worktypes; } - set - { - data.allow_all_worktypes = value; - Apply(); - } - } - - public static string DefaultInteractionMode - { - get - { - return data.defaultInteraction; - } - - set - { - data.defaultInteraction = value; - Apply(); - } - } - - public static bool EnableMotivationMechanics - { - get - { - return data.enable_motivation_mechanics; - } - set - { - data.enable_motivation_mechanics = value; - Apply(); - } - } - - public static bool EnableMotivationIcons - { - get - { - return data.enable_motivation_icons; - } - set - { - data.enable_motivation_icons = value; - Apply(); - } - } - - public static bool EnableRevolts - { - get - { - return data.enable_revolts; - } - set - { - data.enable_revolts = value; - Apply(); - } - } - - public static bool ShowTreatmentHappiness - { - get - { - return data.show_treatment_happiness; - } - set - { - data.show_treatment_happiness = value; - Apply(); - } - } - - public static bool EnableSuicide - { - get - { - return data.enable_suicide; - } - set - { - data.enable_suicide = value; - Apply(); - } - } - - public static bool AdvancedGrowing - { - get { return data.advanced_growing; } - set - { - data.advanced_growing = value; - Apply(); - } - } - - public static string AllowedWorkTypes - { - get { return data.allowed_works; } - set - { - data.allowed_works = value; - Apply(); - } - } - - public static bool EnableFullHealRest - { - get { return data.enable_full_heal_rest; } - - set - { - data.enable_full_heal_rest = value; - Apply(); - } - } - - public static void Init() - { - var flag = !new FileInfo(prefsFilePath).Exists; - data = new PrisonLaborPrefsData(); - data = DirectXmlLoader.ItemFromXmlFile(prefsFilePath, true); - Apply(); - } - - public static void Save() - { - Other.Tutorials.UpdateTutorialFlags(); - try - { - var xDocument = new XDocument(); - var content = DirectXmlSaver.XElementFromObject(data, typeof(PrisonLaborPrefsData)); - xDocument.Add(content); - xDocument.Save(prefsFilePath); - } - catch (Exception ex) - { - GenUI.ErrorDialog("ProblemSavingFile".Translate(prefsFilePath, ex.ToString())); - Log.Error("Exception saving prefs: " + ex); - } - } - - public static void Apply() - { - data.Apply(); - WorkSettings.DataString = AllowedWorkTypes; - Tutorials.Apply(); - Need_Treatment.ShowOnList = ShowTreatmentHappiness; - } - - public static void RestoreToDefault() - { - var version = data.version; - var last_version = data.last_version; - var tutorials = data.tutorials_flags; - - data = new PrisonLaborPrefsData(); - - data.version = version; - data.last_version = last_version; - data.tutorials_flags = tutorials; - data.enable_debug_logging = false; - - Apply(); - } - - public static void AddTutorialFlag(TutorialFlag flag) - { - data.tutorials_flags = data.tutorials_flags | flag; - } - - public static bool HasTutorialFlag(TutorialFlag flag) - { - if ((data.tutorials_flags & flag) != 0) - return true; - return false; - } - - public static void ResetTutorials() - { - data.tutorials_flags = TutorialFlag.None; - Tutorials.Reset(); - } + public static class PrisonLaborPrefs + { + private static PrisonLaborPrefsData data; + + private static readonly string prefsFilePath = + Path.Combine(GenFilePaths.ConfigFolderPath, "PrisonLabor_Prefs.xml"); + + public static bool DebugLogs + { + get + { + return data.enable_debug_logging; + } + set + { + data.enable_debug_logging = value; + Apply(); + } + } + public static Version Version + { + get { return data.version; } + set + { + data.version = value; + Apply(); + } + } + + public static Version LastVersion + { + get { return data.last_version; } + set + { + data.last_version = value; + Apply(); + } + } + + public static bool ShowNews + { + get { return data.show_news; } + set + { + data.show_news = value; + Apply(); + } + } + + public static bool AllowAllWorkTypes + { + get { return data.allow_all_worktypes; } + set + { + data.allow_all_worktypes = value; + Apply(); + } + } + + public static string DefaultInteractionMode + { + get + { + return data.defaultInteraction; + } + + set + { + data.defaultInteraction = value; + Apply(); + } + } + + public static bool EnableMotivationMechanics + { + get + { + return data.enable_motivation_mechanics; + } + set + { + data.enable_motivation_mechanics = value; + Apply(); + } + } + + public static bool EnableMotivationIcons + { + get + { + return data.enable_motivation_icons; + } + set + { + data.enable_motivation_icons = value; + Apply(); + } + } + + public static bool EnableRevolts + { + get + { + return data.enable_revolts; + } + set + { + data.enable_revolts = value; + Apply(); + } + } + + public static bool ShowTreatmentHappiness + { + get + { + return data.show_treatment_happiness; + } + set + { + data.show_treatment_happiness = value; + Apply(); + } + } + + public static bool EnableSuicide + { + get + { + return data.enable_suicide; + } + set + { + data.enable_suicide = value; + Apply(); + } + } + + public static bool AdvancedGrowing + { + get { return data.advanced_growing; } + set + { + data.advanced_growing = value; + Apply(); + } + } + + public static string AllowedWorkTypes + { + get { return data.allowed_works; } + set + { + data.allowed_works = value; + Apply(); + } + } + + public static bool EnableFullHealRest + { + get { return data.enable_full_heal_rest; } + + set + { + data.enable_full_heal_rest = value; + Apply(); + } + } + + public static bool MechsWorkInLaborZone + { + get { return data.mechs_work_in_labor_zone; } + set + { + data.mechs_work_in_labor_zone = value; + Apply(); + } + } + + public static void Init() + { + var flag = !new FileInfo(prefsFilePath).Exists; + data = new PrisonLaborPrefsData(); + data = DirectXmlLoader.ItemFromXmlFile(prefsFilePath, true); + Apply(); + } + + public static void Save() + { + Other.Tutorials.UpdateTutorialFlags(); + try + { + var xDocument = new XDocument(); + var content = DirectXmlSaver.XElementFromObject(data, typeof(PrisonLaborPrefsData)); + xDocument.Add(content); + xDocument.Save(prefsFilePath); + } + catch (Exception ex) + { + GenUI.ErrorDialog("ProblemSavingFile".Translate(prefsFilePath, ex.ToString())); + Log.Error("Exception saving prefs: " + ex); + } + } + + public static void Apply() + { + data.Apply(); + WorkSettings.DataString = AllowedWorkTypes; + Tutorials.Apply(); + Need_Treatment.ShowOnList = ShowTreatmentHappiness; + } + + public static void RestoreToDefault() + { + var version = data.version; + var last_version = data.last_version; + var tutorials = data.tutorials_flags; + + data = new PrisonLaborPrefsData(); + + data.version = version; + data.last_version = last_version; + data.tutorials_flags = tutorials; + data.enable_debug_logging = false; + + Apply(); + } + + public static void AddTutorialFlag(TutorialFlag flag) + { + data.tutorials_flags = data.tutorials_flags | flag; + } + + public static bool HasTutorialFlag(TutorialFlag flag) + { + if ((data.tutorials_flags & flag) != 0) + return true; + return false; + } + + public static void ResetTutorials() + { + data.tutorials_flags = TutorialFlag.None; + Tutorials.Reset(); } + } } \ No newline at end of file diff --git a/Source/Core/Meta/PrefsData.cs b/Source/Core/Meta/PrefsData.cs index 0ec8eb8b..66348e76 100644 --- a/Source/Core/Meta/PrefsData.cs +++ b/Source/Core/Meta/PrefsData.cs @@ -2,43 +2,44 @@ namespace PrisonLabor.Core.Meta { - public class PrisonLaborPrefsData - { - public string defaultInteraction = "PrisonLabor_workOption"; - - public string allowed_works = ""; - public bool allow_all_worktypes = false; - public bool advanced_growing = false; - public bool enable_motivation_mechanics = true; - public bool enable_motivation_icons = true; - public bool enable_revolts = true; - public bool show_treatment_happiness = false; - public bool enable_suicide = true; - public bool enable_full_heal_rest = true; - public bool enable_debug_logging = false; + public class PrisonLaborPrefsData + { + public string defaultInteraction = "PrisonLabor_workOption"; - public Version last_version = Version.v0_0; - public bool show_news = true; - public bool enable_reports = false; + public string allowed_works = ""; + public bool allow_all_worktypes = false; + public bool advanced_growing = false; + public bool enable_motivation_mechanics = true; + public bool enable_motivation_icons = true; + public bool enable_revolts = true; + public bool show_treatment_happiness = false; + public bool enable_suicide = true; + public bool enable_full_heal_rest = true; + public bool enable_debug_logging = false; + public bool mechs_work_in_labor_zone = false; - public TutorialFlag tutorials_flags = TutorialFlag.None; - public Version version = Version.v0_0; + public Version last_version = Version.v0_0; + public bool show_news = true; + public bool enable_reports = false; - public void Apply() - { - } - } + public TutorialFlag tutorials_flags = TutorialFlag.None; + public Version version = Version.v0_0; - [Flags] - public enum TutorialFlag + public void Apply() { - None = 0x0, - Introduction = 0x1, - Motivation = 0x2, - Growing = 0x4, - Managment = 0x8, - Timetable = 0x10, - LaborAreaWarning = 0x20, - Treatment = 0x40, } + } + + [Flags] + public enum TutorialFlag + { + None = 0x0, + Introduction = 0x1, + Motivation = 0x2, + Growing = 0x4, + Managment = 0x8, + Timetable = 0x10, + LaborAreaWarning = 0x20, + Treatment = 0x40, + } } \ No newline at end of file diff --git a/Source/Core/Meta/Version.cs b/Source/Core/Meta/Version.cs index 791a4e86..2c0d6ab0 100644 --- a/Source/Core/Meta/Version.cs +++ b/Source/Core/Meta/Version.cs @@ -87,6 +87,7 @@ public enum Version v1_4_4, v1_4_5, v1_4_6, - v1_4_7 + v1_4_7, + v1_4_8 } } diff --git a/Source/Core/Meta/VersionUtility.cs b/Source/Core/Meta/VersionUtility.cs index aead99f0..fbe4cf3e 100644 --- a/Source/Core/Meta/VersionUtility.cs +++ b/Source/Core/Meta/VersionUtility.cs @@ -5,8 +5,8 @@ namespace PrisonLabor.Core.Meta { public class VersionUtility { - public const Version versionNumber = Version.v1_4_7; - public const string versionString = "1.4.7"; + public const Version versionNumber = Version.v1_4_8; + public const string versionString = "1.4.8"; public static Version VersionOfSaveFile { get; set; } diff --git a/Source/Core/Other/CleanPrisonersStatus.cs b/Source/Core/Other/CleanPrisonersStatus.cs index dc7c30aa..d6febf01 100644 --- a/Source/Core/Other/CleanPrisonersStatus.cs +++ b/Source/Core/Other/CleanPrisonersStatus.cs @@ -9,45 +9,49 @@ namespace PrisonLabor.Core.Other { - public static class CleanPrisonersStatus - { + public static class CleanPrisonersStatus + { - static public void Clean(Pawn prisoner) + static public void Clean(Pawn prisoner) + { + prisoner.workSettings = new Pawn_WorkSettings(prisoner); + CleanHediffs(prisoner); + prisoner.playerSettings.AreaRestriction = null; + if (prisoner.drugs != null) + { + prisoner.drugs.CurrentPolicy = Current.Game.drugPolicyDatabase.DefaultDrugPolicy(); + } + if (prisoner.outfits != null) + { + prisoner.outfits = null; + } + if (ModsConfig.BiotechActive) + { + if (prisoner.guest != null) { - prisoner.workSettings = new Pawn_WorkSettings(prisoner); - CleanHediffs(prisoner); - prisoner.playerSettings.AreaRestriction = null; - if (prisoner.drugs != null) - { - prisoner.drugs.CurrentPolicy = Current.Game.drugPolicyDatabase.DefaultDrugPolicy(); - } - if (ModsConfig.BiotechActive) - { - if(prisoner.guest != null) - { - prisoner.guest.interactionMode = PrisonerInteractionModeDefOf.NoInteraction; - } - Bill bill = prisoner.BillStack?.Bills?.FirstOrDefault((Bill x) => x.recipe == RecipeDefOf.ExtractHemogenPack); - if (bill != null) - { - prisoner.BillStack.Bills.Remove(bill); - } - - } + prisoner.guest.interactionMode = PrisonerInteractionModeDefOf.NoInteraction; } - - static public void CleanHediffs(Pawn prisoner) + Bill bill = prisoner.BillStack?.Bills?.FirstOrDefault((Bill x) => x.recipe == RecipeDefOf.ExtractHemogenPack); + if (bill != null) { - Hediff legs = prisoner.health.hediffSet.GetFirstHediffOfDef(PL_DefOf.PrisonLabor_RemovedLegscuffs, false); - if (legs != null) - { - prisoner.health.hediffSet.hediffs.Remove(legs); - } - Hediff hands = prisoner.health.hediffSet.GetFirstHediffOfDef(PL_DefOf.PrisonLabor_RemovedHandscuffs, false); - if (hands != null) - { - prisoner.health.hediffSet.hediffs.Remove(hands); - } + prisoner.BillStack.Bills.Remove(bill); } + + } + } + + static public void CleanHediffs(Pawn prisoner) + { + Hediff legs = prisoner.health.hediffSet.GetFirstHediffOfDef(PL_DefOf.PrisonLabor_RemovedLegscuffs, false); + if (legs != null) + { + prisoner.health.hediffSet.hediffs.Remove(legs); + } + Hediff hands = prisoner.health.hediffSet.GetFirstHediffOfDef(PL_DefOf.PrisonLabor_RemovedHandscuffs, false); + if (hands != null) + { + prisoner.health.hediffSet.hediffs.Remove(hands); + } } + } } diff --git a/Source/Core/Other/CustomForbidenUtil.cs b/Source/Core/Other/CustomForbidenUtil.cs index a0e55e5a..0f4ffb9d 100644 --- a/Source/Core/Other/CustomForbidenUtil.cs +++ b/Source/Core/Other/CustomForbidenUtil.cs @@ -33,7 +33,7 @@ public static bool IsFoodForbiden(this Thing t, Pawn pawn) { if (pawn.IsPrisonerOfColony) { - DebugLogger.debug($"[PL] Pawn {pawn.LabelShort} checking null object"); + DebugLogger.debug($"Pawn {pawn.LabelShort} checking null object"); } return t != null && PrisonerFoodReservation.IsReserved(t) && !pawn.IsPrisoner; } diff --git a/Source/Core/Other/DebugLogger.cs b/Source/Core/Other/DebugLogger.cs index b2a5a23a..77dc89b4 100644 --- a/Source/Core/Other/DebugLogger.cs +++ b/Source/Core/Other/DebugLogger.cs @@ -14,18 +14,18 @@ public static void debug(string msg) { if (PrisonLaborPrefs.DebugLogs) { - Log.Message(msg); + Log.Message("[PL] " + msg); } } public static void info(string msg) { - Log.Message(msg); + Log.Message("[PL] " + msg); } internal static void warn(string msg) { - Log.Warning(msg); + Log.Warning("[PL] " + msg); } } } diff --git a/Source/Core/PrisonLaborUtility.cs b/Source/Core/PrisonLaborUtility.cs index b234d166..93b83eca 100644 --- a/Source/Core/PrisonLaborUtility.cs +++ b/Source/Core/PrisonLaborUtility.cs @@ -10,162 +10,167 @@ namespace PrisonLabor.Core { - public static class PrisonLaborUtility - { - private static readonly List workOptions = new List { + public static class PrisonLaborUtility + { + private static readonly List workOptions = new List { PL_DefOf.PrisonLabor_workOption, PL_DefOf.PrisonLabor_workAndRecruitOption , PL_DefOf.PrisonLabor_workAndConvertOption, PL_DefOf.PrisonLabor_workAndEnslaveOption, PL_DefOf.PrisonLabor_workAndBloodfeedOption, PL_DefOf.PrisonLabor_workAndHemogenFarmOption }; - public static bool LaborEnabled(this Pawn pawn) - { - return pawn.IsPrisoner && workOptions.Contains(pawn.guest.interactionMode); - } + public static bool LaborEnabled(this Pawn pawn) + { + return pawn.IsPrisoner && workOptions.Contains(pawn.guest.interactionMode); + } - public static bool RecruitInLaborEnabled(Pawn pawn) - { - if (pawn.guest.interactionMode == PL_DefOf.PrisonLabor_workAndRecruitOption && pawn.guest.ScheduledForInteraction) - { - return true; - } + public static bool RecruitInLaborEnabled(Pawn pawn) + { + if (pawn.guest.interactionMode == PL_DefOf.PrisonLabor_workAndRecruitOption && pawn.guest.ScheduledForInteraction) + { + return true; + } - return false; - } + return false; + } - public static bool ConvertInLaborEnabled(Pawn doer, Pawn prisoner) - { - if (prisoner.guest.interactionMode == PL_DefOf.PrisonLabor_workAndConvertOption && prisoner.guest.ScheduledForInteraction - && prisoner.Ideo != doer.Ideo && doer.Ideo == prisoner.guest.ideoForConversion) - { - return true; - } - return false; - } + public static bool ConvertInLaborEnabled(Pawn doer, Pawn prisoner) + { + if (prisoner.guest.interactionMode == PL_DefOf.PrisonLabor_workAndConvertOption && prisoner.guest.ScheduledForInteraction + && prisoner.Ideo != doer.Ideo && doer.Ideo == prisoner.guest.ideoForConversion) + { + return true; + } + return false; + } - public static bool EnslaveInLaborEnabled(Pawn doer, Pawn prisoner) - { - if (prisoner.guest.interactionMode == PL_DefOf.PrisonLabor_workAndEnslaveOption && prisoner.guest.ScheduledForInteraction - && new HistoryEvent(HistoryEventDefOf.EnslavedPrisoner, doer.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo_Job()) - { - return true; - } - return false; - } - public static bool WorkTime(Pawn pawn) - { - if (pawn.timetable == null) - return true; - if (pawn.timetable.CurrentAssignment == TimeAssignmentDefOf.Work) - return true; - if (pawn.timetable.CurrentAssignment == TimeAssignmentDefOf.Anything) - { - if (HealthAIUtility.ShouldSeekMedicalRest(pawn) || - pawn.health.hediffSet.HasTemperatureInjury(TemperatureInjuryStage.Serious) || - CheckFoodNeed(pawn) || - CheckRestNeed(pawn)) - return false; - else - return true; - } - return false; - } + public static bool EnslaveInLaborEnabled(Pawn doer, Pawn prisoner) + { + if (prisoner.guest.interactionMode == PL_DefOf.PrisonLabor_workAndEnslaveOption && prisoner.guest.ScheduledForInteraction + && new HistoryEvent(HistoryEventDefOf.EnslavedPrisoner, doer.Named(HistoryEventArgsNames.Doer)).Notify_PawnAboutToDo_Job()) + { + return true; + } + return false; + } + public static bool WorkTime(Pawn pawn) + { + if (pawn.timetable == null) + return true; + if (pawn.timetable.CurrentAssignment == TimeAssignmentDefOf.Work) + return true; + if (pawn.timetable.CurrentAssignment == TimeAssignmentDefOf.Anything) + { + if (HealthAIUtility.ShouldSeekMedicalRest(pawn) || + pawn.health.hediffSet.HasTemperatureInjury(TemperatureInjuryStage.Serious) || + CheckFoodNeed(pawn) || + CheckRestNeed(pawn)) + return false; + else + return true; + } + return false; + } - private static bool CheckFoodNeed(Pawn pawn) - { - return pawn.needs != null && pawn.needs.food != null && pawn.needs.food.CurCategory > HungerCategory.Hungry; - } + private static bool CheckFoodNeed(Pawn pawn) + { + return pawn.needs != null && pawn.needs.food != null && pawn.needs.food.CurCategory > HungerCategory.Hungry; + } - private static bool CheckRestNeed(Pawn pawn) - { - return pawn.needs != null && pawn.needs.rest != null && pawn.needs.rest.CurCategory != RestCategory.Rested; - } + private static bool CheckRestNeed(Pawn pawn) + { + return pawn.needs != null && pawn.needs.rest != null && pawn.needs.rest.CurCategory != RestCategory.Rested; + } - public static bool IsDisabledByLabor(IntVec3 pos, Pawn pawn, WorkTypeDef workType) - { - if (pos != null && pawn.Map.areaManager.Get() != null && - !WorkSettings.WorkDisabled(workType)) - return pawn.Map.areaManager.Get()[pos]; - return false; - } + public static bool IsDisabledByLabor(IntVec3 pos, Pawn pawn, WorkTypeDef workType) + { + if (pos != null && pawn.Map.areaManager.Get() != null && + !WorkSettings.WorkDisabled(workType)) + return pawn.Map.areaManager.Get()[pos]; + return false; + } - public static bool CanWorkHere(IntVec3 pos, Pawn pawn, WorkTypeDef workType) + public static bool CanWorkHere(IntVec3 pos, Pawn pawn, WorkTypeDef workType) + { + if (ShouldPawnBeConsidered(pawn) && pos != null && pawn.Map.areaManager.Get() != null && !WorkSettings.WorkDisabled(workType)) + { + bool result = true; + try { - if ((pawn.IsFreeNonSlaveColonist || pawn.IsColonyMech) && pos != null && pawn.Map.areaManager.Get() != null && !WorkSettings.WorkDisabled(workType)) - { - bool result = true; - try - { - result = !pawn.Map.areaManager.Get()[pos]; - } - catch (IndexOutOfRangeException e) - { - DebugLogger.debug($"{pawn.NameShortColored} cause IndexOutOfRangeException for {workType.label} calling pos {pos}"); - } - return result; - } - return true; + result = !pawn.Map.areaManager.Get()[pos]; } - - public static Faction GetPawnFaction(Pawn pawn) + catch (IndexOutOfRangeException e) { - return pawn.IsPrisonerOfColony ? Faction.OfPlayer : pawn.Faction; + DebugLogger.debug($"{pawn.NameShortColored} cause IndexOutOfRangeException for {workType.label} calling pos {pos}"); } + return result; + } + return true; + } + + private static bool ShouldPawnBeConsidered(Pawn pawn) + { + return pawn.IsFreeNonSlaveColonist || (!PrisonLaborPrefs.MechsWorkInLaborZone && pawn.IsColonyMech); + } + + public static Faction GetPawnFaction(Pawn pawn) + { + return pawn.IsPrisonerOfColony ? Faction.OfPlayer : pawn.Faction; + } - public static bool CanUsePrisonerInteraction(this Pawn prisoner, PrisonerInteractionModeDef mode) + public static bool CanUsePrisonerInteraction(this Pawn prisoner, PrisonerInteractionModeDef mode) + { + if (!prisoner.guest.Recruitable && mode.hideIfNotRecruitable) + { + return false; + } + if (prisoner.IsWildMan() && !mode.allowOnWildMan) + { + return false; + } + if (mode.hideIfNoBloodfeeders && prisoner.MapHeld != null && !ColonyHasAnyBloodfeeder(prisoner.MapHeld)) + { + return false; + } + if (mode.hideOnHemogenicPawns && ModsConfig.BiotechActive && prisoner.genes != null && prisoner.genes.HasGene(GeneDefOf.Hemogenic)) + { + return false; + } + if (!mode.allowInClassicIdeoMode && Find.IdeoManager.classicMode) + { + return false; + } + return true; + } + + private static bool ColonyHasAnyBloodfeeder(Map map) + { + if (ModsConfig.BiotechActive) + { + foreach (Pawn item in map.mapPawns.FreeColonistsSpawned) { - if (!prisoner.guest.Recruitable && mode.hideIfNotRecruitable) - { - return false; - } - if (prisoner.IsWildMan() && !mode.allowOnWildMan) - { - return false; - } - if (mode.hideIfNoBloodfeeders && prisoner.MapHeld != null && !ColonyHasAnyBloodfeeder(prisoner.MapHeld)) - { - return false; - } - if (mode.hideOnHemogenicPawns && ModsConfig.BiotechActive && prisoner.genes != null && prisoner.genes.HasGene(GeneDefOf.Hemogenic)) - { - return false; - } - if (!mode.allowInClassicIdeoMode && Find.IdeoManager.classicMode) - { - return false; - } + if (item.IsBloodfeeder()) + { return true; + } } - - private static bool ColonyHasAnyBloodfeeder(Map map) + foreach (Pawn item2 in map.mapPawns.PrisonersOfColony) { - if (ModsConfig.BiotechActive) - { - foreach (Pawn item in map.mapPawns.FreeColonistsSpawned) - { - if (item.IsBloodfeeder()) - { - return true; - } - } - foreach (Pawn item2 in map.mapPawns.PrisonersOfColony) - { - if (item2.IsBloodfeeder()) - { - return true; - } - } - } - return false; + if (item2.IsBloodfeeder()) + { + return true; + } } + } + return false; + } - public static bool HemogenFarmInteractionMode(PrisonerInteractionModeDef interaction) - { - return interaction == PrisonerInteractionModeDefOf.HemogenFarm || interaction == PL_DefOf.PrisonLabor_workAndHemogenFarmOption; - } + public static bool HemogenFarmInteractionMode(PrisonerInteractionModeDef interaction) + { + return interaction == PrisonerInteractionModeDefOf.HemogenFarm || interaction == PL_DefOf.PrisonLabor_workAndHemogenFarmOption; + } - public static bool BloodFeedInteractionMode(PrisonerInteractionModeDef interaction) - { - return interaction == PrisonerInteractionModeDefOf.Bloodfeed || interaction == PL_DefOf.PrisonLabor_workAndBloodfeedOption; - } + public static bool BloodFeedInteractionMode(PrisonerInteractionModeDef interaction) + { + return interaction == PrisonerInteractionModeDefOf.Bloodfeed || interaction == PL_DefOf.PrisonLabor_workAndBloodfeedOption; } + } } \ No newline at end of file diff --git a/Source/Core/Recreation/JoyGiver_PrisonerRecrationWalking.cs b/Source/Core/Recreation/JoyGiver_PrisonerRecrationWalking.cs index 2b3701c9..64f84c1c 100644 --- a/Source/Core/Recreation/JoyGiver_PrisonerRecrationWalking.cs +++ b/Source/Core/Recreation/JoyGiver_PrisonerRecrationWalking.cs @@ -39,7 +39,7 @@ public override Job TryGiveJob(Pawn pawn) { if (!pawn.IsPrisonerOfColony) { - DebugLogger.debug($"[PL] Pawn {pawn.NameShortColored} is not prisoner {typeof(JoyGiver_PrisonerRecrationWalking).Name}. Return null"); + DebugLogger.debug($"Pawn {pawn.NameShortColored} is not prisoner {typeof(JoyGiver_PrisonerRecrationWalking).Name}. Return null"); return null; } @@ -59,7 +59,7 @@ public override Job TryGiveJob(Pawn pawn) if (!exactWanderDest.IsValid) { pawn.mindState.nextMoveOrderIsWait = false; - DebugLogger.debug($"[PL] Pawn {pawn.NameShortColored} has not valid dest in {typeof(JoyGiver_PrisonerRecrationWalking).Name}. Return null"); + DebugLogger.debug($"Pawn {pawn.NameShortColored} has not valid dest in {typeof(JoyGiver_PrisonerRecrationWalking).Name}. Return null"); return null; } LocomotionUrgency value = locomotionUrgency; diff --git a/Source/Core/Recreation/RecreationUtils.cs b/Source/Core/Recreation/RecreationUtils.cs index 2f320423..87884140 100644 --- a/Source/Core/Recreation/RecreationUtils.cs +++ b/Source/Core/Recreation/RecreationUtils.cs @@ -11,66 +11,66 @@ namespace PrisonLabor.Core.Recreation { - public class RecreationUtils + public class RecreationUtils + { + public static bool PrisonerJoyTickCheckEnd(Pawn pawn, JoyTickFullJoyAction fullJoyAction = JoyTickFullJoyAction.EndJob, float extraJoyGainFactor = 1f, Building joySource = null) { - public static bool PrisonerJoyTickCheckEnd(Pawn pawn, JoyTickFullJoyAction fullJoyAction = JoyTickFullJoyAction.EndJob, float extraJoyGainFactor = 1f, Building joySource = null) + Job curJob = pawn.CurJob; + if (curJob.def.joyKind == null) + { + DebugLogger.warn("This method can only be called for jobs with joyKind."); + return false; + } + if (joySource != null) + { + if (joySource.def.building.joyKind != null && pawn.CurJob.def.joyKind != joySource.def.building.joyKind) { - Job curJob = pawn.CurJob; - if (curJob.def.joyKind == null) - { - Log.Warning("This method can only be called for jobs with joyKind."); - return false; - } - if (joySource != null) - { - if (joySource.def.building.joyKind != null && pawn.CurJob.def.joyKind != joySource.def.building.joyKind) - { - Log.ErrorOnce("Joy source joyKind and jobDef.joyKind are not the same. building=" + joySource.ToStringSafe() + ", jobDef=" + pawn.CurJob.def.ToStringSafe(), joySource.thingIDNumber ^ 0x343FD5CC); - } - extraJoyGainFactor *= joySource.GetStatValue(StatDefOf.JoyGainFactor); - } - Need treatment = pawn.needs.TryGetNeed(); - - if (treatment == null && pawn.needs.joy == null && !curJob.doUntilGatheringEnded ) - { - pawn.jobs.curDriver.EndJobWith(JobCondition.InterruptForced); - DebugLogger.debug("[PL] Both need null. Returning false."); - return false; - } + Log.ErrorOnce("Joy source joyKind and jobDef.joyKind are not the same. building=" + joySource.ToStringSafe() + ", jobDef=" + pawn.CurJob.def.ToStringSafe(), joySource.thingIDNumber ^ 0x343FD5CC); + } + extraJoyGainFactor *= joySource.GetStatValue(StatDefOf.JoyGainFactor); + } + Need treatment = pawn.needs.TryGetNeed(); + if (treatment == null && pawn.needs.joy == null && !curJob.doUntilGatheringEnded) + { + pawn.jobs.curDriver.EndJobWith(JobCondition.InterruptForced); + DebugLogger.debug("Both needs null. Returning false."); + return false; + } - //if somehow prisoner has joy need by other mods. - pawn.needs.joy?.GainJoy(extraJoyGainFactor * curJob.def.joyGainRate * 0.36f / 2500f, curJob.def.joyKind); + //if somehow prisoner has joy need by other mods. + pawn.needs.joy?.GainJoy(extraJoyGainFactor * curJob.def.joyGainRate * 0.36f / 2500f, curJob.def.joyKind); - if (curJob.def.joySkill != null) - { - pawn.skills.GetSkill(curJob.def.joySkill).Learn(curJob.def.joyXpPerTick); - } - if (!curJob.ignoreJoyTimeAssignment && !pawn.GetTimeAssignment().allowJoy && !curJob.doUntilGatheringEnded) - { - pawn.jobs.curDriver.EndJobWith(JobCondition.InterruptForced); - return true; - } - if ((NeedLevelFull(treatment) || NeedLevelFull(pawn.needs.joy)) && !curJob.doUntilGatheringEnded) - { - switch (fullJoyAction) - { - case JoyTickFullJoyAction.EndJob: - pawn.jobs.curDriver.EndJobWith(JobCondition.Succeeded); - return true; - case JoyTickFullJoyAction.GoToNextToil: - pawn.jobs.curDriver.ReadyForNextToil(); - return true; - } - } - return false; - } - private static bool NeedLevelFull(Need need) + if (curJob.def.joySkill != null) + { + pawn.skills.GetSkill(curJob.def.joySkill).Learn(curJob.def.joyXpPerTick); + } + if (!curJob.ignoreJoyTimeAssignment && !pawn.GetTimeAssignment().allowJoy && !curJob.doUntilGatheringEnded) + { + pawn.jobs.curDriver.EndJobWith(JobCondition.InterruptForced); + return true; + } + if ((NeedLevelFull(treatment) || NeedLevelFull(pawn.needs.joy)) && !curJob.doUntilGatheringEnded) + { + switch (fullJoyAction) { - return need != null && need.CurLevel > 0.9999f; + case JoyTickFullJoyAction.EndJob: + pawn.jobs.curDriver.EndJobWith(JobCondition.Succeeded); + return true; + case JoyTickFullJoyAction.GoToNextToil: + pawn.jobs.curDriver.ReadyForNextToil(); + return true; } + } + return false; + } + + private static bool NeedLevelFull(Need need) + { + return need != null && need.CurLevel > 0.9999f; } + } } diff --git a/Source/Core/Settings/SettingsMenu.cs b/Source/Core/Settings/SettingsMenu.cs index 4839ef73..18ac75b3 100644 --- a/Source/Core/Settings/SettingsMenu.cs +++ b/Source/Core/Settings/SettingsMenu.cs @@ -8,219 +8,225 @@ namespace PrisonLabor.Core.Settings { - [StaticConstructorOnStartup] - internal class SettingsMenu : Mod + [StaticConstructorOnStartup] + internal class SettingsMenu : Mod + { + private static string difficulty = ""; + private static bool showNews; + private static bool allowAllWorktypes; + private static bool enableMotivationMechanics; + private static bool enableMotivationIcons; + private static bool enableRevolts; + private static bool showTreatmentHappiness; + private static bool enableSuicide; + private static bool enableFullHealRest; + private static bool advancedGrowing; + private static int defaultInteractionMode; + private static bool enableDebbuging; + private static bool mechsWorkInLaborZone; + + private static List interactionModeList; + + public SettingsMenu(ModContentPack content) : base(content) { - private static string difficulty = ""; - private static bool showNews; - private static bool allowAllWorktypes; - private static bool enableMotivationMechanics; - private static bool enableMotivationIcons; - private static bool enableRevolts; - private static bool showTreatmentHappiness; - private static bool enableSuicide; - private static bool enableFullHealRest; - private static bool advancedGrowing; - private static int defaultInteractionMode; - private static bool enableDebbuging; + } + + public static void Init() + { + showNews = PrisonLaborPrefs.ShowNews; + allowAllWorktypes = PrisonLaborPrefs.AllowAllWorkTypes; + advancedGrowing = PrisonLaborPrefs.AdvancedGrowing; + enableMotivationMechanics = PrisonLaborPrefs.EnableMotivationMechanics; + enableMotivationIcons = PrisonLaborPrefs.EnableMotivationIcons; + enableRevolts = PrisonLaborPrefs.EnableRevolts; + enableSuicide = PrisonLaborPrefs.EnableSuicide; + showTreatmentHappiness = PrisonLaborPrefs.ShowTreatmentHappiness; + enableFullHealRest = PrisonLaborPrefs.EnableFullHealRest; + enableDebbuging = PrisonLaborPrefs.DebugLogs; + mechsWorkInLaborZone = PrisonLaborPrefs.MechsWorkInLaborZone; + + interactionModeList = new List(DefDatabase.AllDefs); + defaultInteractionMode = interactionModeList.IndexOf(DefDatabase.GetNamed(PrisonLaborPrefs.DefaultInteractionMode)); + if (defaultInteractionMode < 0 || defaultInteractionMode > interactionModeList.Count - 1) + defaultInteractionMode = 0; + } + + public override void DoSettingsWindowContents(Rect inRect) + { + var leftRect = new Rect(inRect.x, inRect.y, inRect.width * 0.65f, inRect.height); + var rightRect = new Rect((int)(inRect.x + inRect.width * 0.65f + 30f), inRect.y, inRect.width * 0.35f - 30f, + inRect.height); + + var listing_options = new Listing_Standard(); + + listing_options.Begin(leftRect); + + listing_options.CheckboxLabeled("PrisonLabor_ShowNews".Translate(), ref showNews, + "PrisonLabor_ShowNewsDesc".Translate()); + + listing_options.GapLine(); + + if (listing_options.ButtonTextLabeled("PrisonLabor_DefaultInterMode".Translate(), interactionModeList[defaultInteractionMode].LabelCap)) + defaultInteractionMode = defaultInteractionMode < interactionModeList.Count - 1 ? defaultInteractionMode + 1 : 0; + + listing_options.GapLine(); + + listing_options.Label("PrisonLabor_AllowedWorkTypes".Translate(), -1f); + listing_options.CheckboxLabeled(" " + "PrisonLabor_AllowAll".Translate(), ref allowAllWorktypes, "PrisonLabor_AllowAllWorkTypes".Translate()); + if (!allowAllWorktypes) + { + if (listing_options.ButtonTextLabeled(" " + "PrisonLabor_AllowedWorkTypesL".Translate(), "PrisonLabor_Browse".Translate())) + Find.WindowStack.Add(new SelectWorkTypesDialog()); + } + else + { + listing_options.Gap(); + } + + listing_options.GapLine(); + + listing_options.CheckboxLabeled("PrisonLabor_MotivationMechanics".Translate(), ref enableMotivationMechanics, + "PrisonLabor_MotivationWarning".Translate()); + + listing_options.GapLine(); + + listing_options.CheckboxLabeled("PrisonLabor_MotivationIcons".Translate(), ref enableMotivationIcons, + "PrisonLabor_MotivationIconsDesc".Translate()); + + listing_options.GapLine(); + + listing_options.CheckboxLabeled("PrisonLabor_CanGrowAdvanced".Translate(), ref advancedGrowing, + "PrisonLabor_CanGrowAdvancedDesc".Translate()); - private static List interactionModeList; + listing_options.GapLine(); - public SettingsMenu(ModContentPack content) : base(content) - { - } + listing_options.CheckboxLabeled("PrisonLabor_EnableRevolts".Translate(), ref enableRevolts, + "PrisonLabor_EnableRevoltsDesc".Translate()); - public static void Init() - { - showNews = PrisonLaborPrefs.ShowNews; - allowAllWorktypes = PrisonLaborPrefs.AllowAllWorkTypes; - advancedGrowing = PrisonLaborPrefs.AdvancedGrowing; - enableMotivationMechanics = PrisonLaborPrefs.EnableMotivationMechanics; - enableMotivationIcons = PrisonLaborPrefs.EnableMotivationIcons; - enableRevolts = PrisonLaborPrefs.EnableRevolts; - enableSuicide = PrisonLaborPrefs.EnableSuicide; - showTreatmentHappiness = PrisonLaborPrefs.ShowTreatmentHappiness; - enableFullHealRest = PrisonLaborPrefs.EnableFullHealRest; - enableDebbuging = PrisonLaborPrefs.DebugLogs; + listing_options.GapLine(); - interactionModeList = new List(DefDatabase.AllDefs); - defaultInteractionMode = interactionModeList.IndexOf(DefDatabase.GetNamed(PrisonLaborPrefs.DefaultInteractionMode)); - if (defaultInteractionMode < 0 || defaultInteractionMode > interactionModeList.Count - 1) - defaultInteractionMode = 0; - } + listing_options.CheckboxLabeled("PrisonLabor_EnableSuicide".Translate(), ref enableSuicide, + "PrisonLabor_EnableSuicideDesc".Translate()); - public override void DoSettingsWindowContents(Rect inRect) - { - var leftRect = new Rect(inRect.x, inRect.y, inRect.width * 0.65f, inRect.height); - var rightRect = new Rect((int)(inRect.x + inRect.width * 0.65f + 30f), inRect.y, inRect.width * 0.35f - 30f, - inRect.height); + listing_options.CheckboxLabeled("PrisonLabor_EnableFullHealRest".Translate(), ref enableFullHealRest, + "PrisonLabor_EnableFullHealRestDesc".Translate()); - var listing_options = new Listing_Standard(); + listing_options.CheckboxLabeled("PrisonLabor_MechWorksInLaborArea".Translate(), ref mechsWorkInLaborZone, + "PrisonLabor_MechWorksInLaborAreaDesc".Translate()); - listing_options.Begin(leftRect); + listing_options.CheckboxLabeled("PrisonLabor_EnableDebugLogs".Translate(), ref enableDebbuging, + "PrisonLabor_EnableDebugLogsDesc".Translate()); - listing_options.CheckboxLabeled("PrisonLabor_ShowNews".Translate(), ref showNews, - "PrisonLabor_ShowNewsDesc".Translate()); - listing_options.GapLine(); + listing_options.GapLine(); - if (listing_options.ButtonTextLabeled("PrisonLabor_DefaultInterMode".Translate(), interactionModeList[defaultInteractionMode].LabelCap)) - defaultInteractionMode = defaultInteractionMode < interactionModeList.Count - 1 ? defaultInteractionMode + 1 : 0; + listing_options.CheckboxLabeled("PrisonLabor_ShowTreatmentHappiness".Translate(), ref showTreatmentHappiness, + "PrisonLabor_ShowTreatmentHappinessDesc".Translate()); - listing_options.GapLine(); + listing_options.Gap(); + listing_options.Gap(); + listing_options.Gap(); - listing_options.Label("PrisonLabor_AllowedWorkTypes".Translate(), -1f); - listing_options.CheckboxLabeled(" " + "PrisonLabor_AllowAll".Translate(), ref allowAllWorktypes, "PrisonLabor_AllowAllWorkTypes".Translate()); - if (!allowAllWorktypes) - { - if (listing_options.ButtonTextLabeled(" " + "PrisonLabor_AllowedWorkTypesL".Translate(), "PrisonLabor_Browse".Translate())) - Find.WindowStack.Add(new SelectWorkTypesDialog()); - } - else - { - listing_options.Gap(); - } + if (listing_options.ButtonTextLabeled("PrisonLabor_ButtonRemoveModFromSaveDesc".Translate(), "PrisonLabor_ButtonRemoveModFromSave".Translate())) + Find.WindowStack.Add(new SelectSaveForCleaningDialog()); - listing_options.GapLine(); + listing_options.End(); - listing_options.CheckboxLabeled("PrisonLabor_MotivationMechanics".Translate(), ref enableMotivationMechanics, - "PrisonLabor_MotivationWarning".Translate()); + var listing_panel = new Listing_Standard(); - listing_options.GapLine(); + listing_panel.Begin(rightRect); - listing_options.CheckboxLabeled("PrisonLabor_MotivationIcons".Translate(), ref enableMotivationIcons, - "PrisonLabor_MotivationIconsDesc".Translate()); - - listing_options.GapLine(); + var heigh_temp = rightRect.width * 0.56f; + GUI.DrawTexture(new Rect(0, 0, rightRect.width, heigh_temp), ContentFinder.Get("Preview", true)); + listing_panel.Gap(heigh_temp); + listing_panel.Label("Prison Labor", -1f); + listing_panel.Label("PrisonLabor_Version".Translate() + VersionUtility.versionString, -1f); - listing_options.CheckboxLabeled("PrisonLabor_CanGrowAdvanced".Translate(), ref advancedGrowing, - "PrisonLabor_CanGrowAdvancedDesc".Translate()); - - listing_options.GapLine(); - - listing_options.CheckboxLabeled("PrisonLabor_EnableRevolts".Translate(), ref enableRevolts, - "PrisonLabor_EnableRevoltsDesc".Translate()); - - listing_options.GapLine(); - - listing_options.CheckboxLabeled("PrisonLabor_EnableSuicide".Translate(), ref enableSuicide, - "PrisonLabor_EnableSuicideDesc".Translate()); - - listing_options.CheckboxLabeled("PrisonLabor_EnableFullHealRest".Translate(), ref enableFullHealRest, - "PrisonLabor_EnableFullHealRestDesc".Translate()); - - listing_options.CheckboxLabeled("PrisonLabor_EnableDebugLogs".Translate(), ref enableDebbuging, - "PrisonLabor_EnableDebugLogsDesc".Translate()); - - - listing_options.GapLine(); - - listing_options.CheckboxLabeled("PrisonLabor_ShowTreatmentHappiness".Translate(), ref showTreatmentHappiness, - "PrisonLabor_ShowTreatmentHappinessDesc".Translate()); - - listing_options.Gap(); - listing_options.Gap(); - listing_options.Gap(); - - if (listing_options.ButtonTextLabeled("PrisonLabor_ButtonRemoveModFromSaveDesc".Translate(), "PrisonLabor_ButtonRemoveModFromSave".Translate())) - Find.WindowStack.Add(new SelectSaveForCleaningDialog()); - - listing_options.End(); - - var listing_panel = new Listing_Standard(); - - listing_panel.Begin(rightRect); - - var heigh_temp = rightRect.width * 0.56f; - GUI.DrawTexture(new Rect(0, 0, rightRect.width, heigh_temp), ContentFinder.Get("Preview", true)); - listing_panel.Gap(heigh_temp); - listing_panel.Label("Prison Labor", -1f); - listing_panel.Label("PrisonLabor_Version".Translate() + VersionUtility.versionString, -1f); - - listing_panel.GapLine(); - - listing_panel.Label("PrisonLabor_Difficulty".Translate() + difficulty, -1f); - - listing_panel.GapLine(); - - if (listing_panel.ButtonText("PrisonLabor_Defaults".Translate())) - { - PrisonLaborPrefs.RestoreToDefault(); - Init(); - } - - if (listing_panel.ButtonText("PrisonLabor_ShowNews".Translate())) - { - NewsWindow.ShowAll = true; - NewsWindow.ForceShow(); - } - - if (listing_panel.ButtonText("PrisonLabor_ReplayTurorialsButton".Translate())) - { - ReplayTutorialsWindow.Show(); - } - - listing_panel.End(); - - Apply(); - } - - public override string SettingsCategory() - { - return "Prison Labor"; - } - - public override void WriteSettings() - { - PrisonLaborPrefs.ShowNews = showNews; - PrisonLaborPrefs.AllowAllWorkTypes = allowAllWorktypes; - PrisonLaborPrefs.EnableMotivationMechanics = enableMotivationMechanics; - PrisonLaborPrefs.EnableMotivationIcons = enableMotivationIcons; - PrisonLaborPrefs.EnableRevolts = enableRevolts; - PrisonLaborPrefs.ShowTreatmentHappiness = showTreatmentHappiness; - PrisonLaborPrefs.AdvancedGrowing = advancedGrowing; - PrisonLaborPrefs.EnableSuicide = enableSuicide; - PrisonLaborPrefs.EnableFullHealRest = enableFullHealRest; - PrisonLaborPrefs.DefaultInteractionMode = interactionModeList[defaultInteractionMode].defName; - PrisonLaborPrefs.DebugLogs = enableDebbuging; - PrisonLaborPrefs.Save(); - Log.Message("Prison Labor settings saved"); - } - - private static void Apply() - { - PrisonLaborPrefs.Apply(); - CalculateDifficulty(); - } - - private static void CalculateDifficulty() - { - var value = 1000; - if (!enableMotivationMechanics) - value -= 300; - if (advancedGrowing) - value -= 50; - value -= 500; - if (!allowAllWorktypes) - { - var delta = 500 + 7 * 50 + (DefDatabase.DefCount - 20) * 25; - foreach (var wtd in WorkSettings.AvailableWorkTypes) - if (!WorkSettings.WorkDisabled(wtd)) - delta -= 50; - if (delta > 0) - value += delta; - } - - if (value >= 1000) - difficulty = value / 10 + " (" + "PrisonLabor_DifficultyNormal".Translate() + ")"; - else if (value >= 800) - difficulty = value / 10 + " (" + "PrisonLabor_DifficultyCasual".Translate() + ")"; - else if (value >= 500) - difficulty = value / 10 + " (" + "PrisonLabor_DifficultyEasy".Translate() + ")"; - else if (value >= 300) - difficulty = value / 10 + " (" + "PrisonLabor_DifficultyPeaceful".Translate() + ")"; - else - difficulty = value / 10 + " (" + "PrisonLabor_DifficultyJoke".Translate() + ")"; - } + listing_panel.GapLine(); + + listing_panel.Label("PrisonLabor_Difficulty".Translate() + difficulty, -1f); + + listing_panel.GapLine(); + + if (listing_panel.ButtonText("PrisonLabor_Defaults".Translate())) + { + PrisonLaborPrefs.RestoreToDefault(); + Init(); + } + + if (listing_panel.ButtonText("PrisonLabor_ShowNews".Translate())) + { + NewsWindow.ShowAll = true; + NewsWindow.ForceShow(); + } + + if (listing_panel.ButtonText("PrisonLabor_ReplayTurorialsButton".Translate())) + { + ReplayTutorialsWindow.Show(); + } + + listing_panel.End(); + + Apply(); + } + + public override string SettingsCategory() + { + return "Prison Labor"; + } + + public override void WriteSettings() + { + PrisonLaborPrefs.ShowNews = showNews; + PrisonLaborPrefs.AllowAllWorkTypes = allowAllWorktypes; + PrisonLaborPrefs.EnableMotivationMechanics = enableMotivationMechanics; + PrisonLaborPrefs.EnableMotivationIcons = enableMotivationIcons; + PrisonLaborPrefs.EnableRevolts = enableRevolts; + PrisonLaborPrefs.ShowTreatmentHappiness = showTreatmentHappiness; + PrisonLaborPrefs.AdvancedGrowing = advancedGrowing; + PrisonLaborPrefs.EnableSuicide = enableSuicide; + PrisonLaborPrefs.EnableFullHealRest = enableFullHealRest; + PrisonLaborPrefs.DefaultInteractionMode = interactionModeList[defaultInteractionMode].defName; + PrisonLaborPrefs.DebugLogs = enableDebbuging; + PrisonLaborPrefs.MechsWorkInLaborZone = mechsWorkInLaborZone; + PrisonLaborPrefs.Save(); + Log.Message("Prison Labor settings saved"); + } + + private static void Apply() + { + PrisonLaborPrefs.Apply(); + CalculateDifficulty(); + } + + private static void CalculateDifficulty() + { + var value = 1000; + if (!enableMotivationMechanics) + value -= 300; + if (advancedGrowing) + value -= 50; + value -= 500; + if (!allowAllWorktypes) + { + var delta = 500 + 7 * 50 + (DefDatabase.DefCount - 20) * 25; + foreach (var wtd in WorkSettings.AvailableWorkTypes) + if (!WorkSettings.WorkDisabled(wtd)) + delta -= 50; + if (delta > 0) + value += delta; + } + + if (value >= 1000) + difficulty = value / 10 + " (" + "PrisonLabor_DifficultyNormal".Translate() + ")"; + else if (value >= 800) + difficulty = value / 10 + " (" + "PrisonLabor_DifficultyCasual".Translate() + ")"; + else if (value >= 500) + difficulty = value / 10 + " (" + "PrisonLabor_DifficultyEasy".Translate() + ")"; + else if (value >= 300) + difficulty = value / 10 + " (" + "PrisonLabor_DifficultyPeaceful".Translate() + ")"; + else + difficulty = value / 10 + " (" + "PrisonLabor_DifficultyJoke".Translate() + ")"; } + } } \ No newline at end of file diff --git a/Source/Core/Trackers/EscapeTracker.cs b/Source/Core/Trackers/EscapeTracker.cs index 0d893f21..c77a8d38 100644 --- a/Source/Core/Trackers/EscapeTracker.cs +++ b/Source/Core/Trackers/EscapeTracker.cs @@ -11,39 +11,6 @@ namespace PrisonLabor.Core.Trackers { public class EscapeTracker : IExposable { - #region Object Access - /** - * Object Access region: - * This region is for ensuring that for every pawn there will be only one escape tracker. - * It is constructed in this way to prevent heavy modification of Pawn class (on external library). - */ - private static HashSet prisonersReadyToEscape = new HashSet(); - - public static HashSet PrisonersReadyToEscape - { - get - { - return prisonersReadyToEscape; - } - } - - private static void Register(Pawn pawn) - { - if (pawn.IsPrisoner) - { - prisonersReadyToEscape.Add(pawn); - } - } - - public static void DeRegister(Pawn pawn) - { - prisonersReadyToEscape.Remove(pawn); - } - - /// - /// Access EscapeTracker of Pawn - /// - #endregion private SimpleTimer timer = new SimpleTimer(); @@ -121,14 +88,12 @@ public void Tick() { timer.ResetAndStop(); ReadyToEscape = false; - DeRegister(Pawn); } } // Check if timer should trigger escape else if (timer.Ticks >= EscapeLevel) { ReadyToEscape = true; - Register(Pawn); } // Tick timer diff --git a/Source/HarmonyPatches/Patches_Apparel/PrisonerRespectOutfits.cs b/Source/HarmonyPatches/Patches_Apparel/PrisonerRespectOutfits.cs new file mode 100644 index 00000000..24c2edb9 --- /dev/null +++ b/Source/HarmonyPatches/Patches_Apparel/PrisonerRespectOutfits.cs @@ -0,0 +1,46 @@ +using HarmonyLib; +using PrisonLabor.Core.BillAssignation; +using PrisonLabor.Core.Needs; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.HarmonyPatches.Patches_Apparel +{ + [HarmonyPatch(typeof(JobGiver_PrisonerGetDressed))] + public class PrisonerRespectOutfits + { + [HarmonyPostfix] + [HarmonyPatch("FindGarmentCoveringPart")] + static Apparel Postfix_FindGarmentCoveringPart(Apparel __result, Pawn pawn, BodyPartGroupDef bodyPartGroupDef) + { + return PrisonerWillRespectOutfit(__result, pawn); + } + + [HarmonyPostfix] + [HarmonyPatch("FindGarmentSatisfyingTitleRequirement")] + static Apparel Postfix_FindGarmentSatisfyingTitleRequirement(Apparel __result, Pawn pawn, ApparelRequirement req) + { + return PrisonerWillRespectOutfit(__result, pawn); + } + + private static Apparel PrisonerWillRespectOutfit(Apparel apparel, Pawn prisoner) + { + if (apparel != null && IsMotivatedPrisoner(prisoner) && prisoner.outfits != null && !prisoner.outfits.CurrentOutfit.filter.Allows(apparel.def)) + { + return null; + } + return apparel; + + } + + private static bool IsMotivatedPrisoner(Pawn pawn) + { + return pawn.IsPrisonerOfColony && pawn.IsMotivated(); + } + } +} diff --git a/Source/HarmonyPatches/Patches_GUI/GUI_Feeding/Patch_ITAB_Pawn_Feeding.cs b/Source/HarmonyPatches/Patches_GUI/GUI_Feeding/Patch_ITAB_Pawn_Feeding.cs new file mode 100644 index 00000000..d14c2f85 --- /dev/null +++ b/Source/HarmonyPatches/Patches_GUI/GUI_Feeding/Patch_ITAB_Pawn_Feeding.cs @@ -0,0 +1,76 @@ +using HarmonyLib; +using PrisonLabor.Core; +using PrisonLabor.Core.Other; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Verse; + +namespace PrisonLabor.HarmonyPatches.Patches_GUI.GUI_Feeding +{ + [HarmonyPatch(typeof(ITab_Pawn_Feeding))] + class Patch_ITAB_Pawn_Feeding + { + [HarmonyPatch("FillTab")] + [HarmonyPatch(new[] { typeof(Pawn), typeof(Rect), typeof(Vector2), typeof(Vector2), typeof(List) }, + new ArgumentType[] { ArgumentType.Normal, ArgumentType.Normal, ArgumentType.Out, ArgumentType.Out, ArgumentType.Normal })] + [HarmonyTranspiler] + static IEnumerable FillTabTranspiler(ILGenerator gen, IEnumerable instr) + { + var expected = AccessTools.PropertyGetter(typeof(PawnsFinder), nameof(PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_OfPlayerFaction)); + foreach (CodeInstruction inst in instr) + { + if (inst.OperandIs(expected)) + { + yield return new CodeInstruction(OpCodes.Call, typeof(Patch_ITAB_Pawn_Feeding).GetMethod(nameof(Patch_ITAB_Pawn_Feeding.GetNewRange))); + } + else + { + yield return inst; + + } + } + } + + [HarmonyPatch] + [HarmonyPatch("DrawRow")] + [HarmonyTranspiler] + static IEnumerable DrawRowTranspiler(ILGenerator gen, IEnumerable instr) + { + var expected = AccessTools.PropertyGetter(typeof(Entity), nameof(Entity.LabelShortCap)); + + foreach (CodeInstruction inst in instr) + { + if (inst.OperandIs(expected)) + { + yield return new CodeInstruction(OpCodes.Call, typeof(Patch_ITAB_Pawn_Feeding).GetMethod(nameof(Patch_ITAB_Pawn_Feeding.HandlePrisonerLabel))); + } + else + { + yield return inst; + } + } + } + + public static string HandlePrisonerLabel(Pawn feeder) + { + if (feeder.IsPrisonerOfColony) + { + return "PrisonLabor_Prisoner".Translate(feeder.LabelShortCap); + } + return feeder.LabelShortCap; + } + + public static List GetNewRange() + { + List list = new List(PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_OfPlayerFaction); + list.AddRange(PawnsFinder.AllMapsCaravansAndTravelingTransportPods_Alive_PrisonersOfColony); + return list; + } + } +} diff --git a/Source/HarmonyPatches/Patches_InteractionMode/Patch_RemoveHediffsAfterStatusChange.cs b/Source/HarmonyPatches/Patches_InteractionMode/Patch_RemoveHediffsAfterStatusChange.cs index 1562cfaf..0446bdba 100644 --- a/Source/HarmonyPatches/Patches_InteractionMode/Patch_RemoveHediffsAfterStatusChange.cs +++ b/Source/HarmonyPatches/Patches_InteractionMode/Patch_RemoveHediffsAfterStatusChange.cs @@ -10,26 +10,30 @@ namespace PrisonLabor.HarmonyPatches.Patches_InteractionMode { - [HarmonyPatch(typeof(Pawn_GuestTracker))] - [HarmonyPatch("SetGuestStatus")] - public class Patch_RemoveHediffsAfterStatusChange + [HarmonyPatch(typeof(Pawn_GuestTracker))] + [HarmonyPatch("SetGuestStatus")] + public class Patch_RemoveHediffsAfterStatusChange + { + private static void Postfix(Pawn_GuestTracker __instance, Faction newHost, GuestStatus guestStatus) { - private static void Postfix(Pawn_GuestTracker __instance, Faction newHost, GuestStatus guestStatus) - { - if (guestStatus != GuestStatus.Prisoner) - { - Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue(); - CleanPrisonersStatus.CleanHediffs(pawn); - } + if (guestStatus != GuestStatus.Prisoner) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue(); + CleanPrisonersStatus.CleanHediffs(pawn); + } - if (guestStatus == GuestStatus.Prisoner) - { - Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue(); - if (pawn.drugs == null) - { - pawn.drugs = new Pawn_DrugPolicyTracker(pawn); - } - } + if (guestStatus == GuestStatus.Prisoner) + { + Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue(); + if (pawn.drugs == null) + { + pawn.drugs = new Pawn_DrugPolicyTracker(pawn); + } + if (pawn.outfits == null) + { + pawn.outfits = new Pawn_OutfitTracker(pawn); } + } } + } } diff --git a/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Position.cs b/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Position.cs index ba08b052..176ca436 100644 --- a/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Position.cs +++ b/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Position.cs @@ -11,40 +11,28 @@ namespace PrisonLabor.HarmonyPatches.Patches_LaborArea { - [HarmonyPatch] - class Patch_Labor_Position - { - - static IEnumerable TargetMethods() - { - return Assembly.GetAssembly(typeof(WorkGiver_Scanner)).GetTypes() - .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(WorkGiver_Scanner))) - .SelectMany(type => type.GetMethods()) - .Where(method => method.Name.Equals("PotentialWorkCellsGlobal")) - .Cast(); - } - static IEnumerable Postfix(IEnumerable __result, WorkGiver_Scanner __instance, Pawn pawn) - { - if (__result != null && __instance != null) - { - return checkFields(__result, __instance, pawn); - } - else - { - return __result; - } - } - - private static IEnumerable checkFields(IEnumerable __result, WorkGiver_Scanner __instance, Pawn pawn) - { - foreach (IntVec3 pos in __result) - { - if (PrisonLaborUtility.CanWorkHere(pos, pawn, __instance.def.workType)) - { - yield return pos; - } - } - } + [HarmonyPatch] + class Patch_Labor_Position + { + static IEnumerable TargetMethods() + { + return Assembly.GetAssembly(typeof(WorkGiver_Scanner)).GetTypes() + .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(WorkGiver_Scanner))) + .SelectMany(type => type.GetMethods()) + .Where(method => method.Name.Equals("PotentialWorkCellsGlobal")) + .Cast(); + } + static IEnumerable Postfix(IEnumerable __result, WorkGiver_Scanner __instance, Pawn pawn) + { + if (__result != null && __instance != null) + { + return __result.Where(item => PrisonLaborUtility.CanWorkHere(item, pawn, __instance.def.workType)); + } + else + { + return __result; + } } + } } diff --git a/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Thing.cs b/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Thing.cs index a4fa1d0a..9923b2c3 100644 --- a/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Thing.cs +++ b/Source/HarmonyPatches/Patches_LaborArea/Patch_Labor_Thing.cs @@ -12,56 +12,43 @@ namespace PrisonLabor.HarmonyPatches.Patches_LaborArea { - [HarmonyPatch] - class Patch_Labor_Thing + [HarmonyPatch] + class Patch_Labor_Thing + { + static IEnumerable TargetMethods() { - static IEnumerable TargetMethods() - { - foreach(var method in GetBaseMethods()) - { - yield return method; - } - // yield return getCleanMethod(); - } - static IEnumerable GetBaseMethods() { - return Assembly.GetAssembly(typeof(WorkGiver_Scanner)).GetTypes() - .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(WorkGiver_Scanner)) && myType != typeof(WorkGiver_Teach)) - .SelectMany(type => type.GetMethods()) - .Where(method => method.Name.Equals("PotentialWorkThingsGlobal")) - .Cast(); - } - - static MethodBase getCleanMethod() - { - Assembly asm = typeof(WorkGiver_Scanner).Assembly; - Type type = asm.GetType("RimWorld.WorkGiver_CleanFilth"); - return type.GetMethod("PotentialWorkThingsGlobal"); - } - - static IEnumerable Postfix(IEnumerable __result, WorkGiver_Scanner __instance, Pawn pawn) - { - if (__result != null && __instance != null) - { - return CheckFields(__result, __instance, pawn); - } - else - { - return __result; - } - } + foreach (var method in GetBaseMethods()) + { + yield return method; + } + // yield return getCleanMethod(); + } + static IEnumerable GetBaseMethods() + { + return Assembly.GetAssembly(typeof(WorkGiver_Scanner)).GetTypes() + .Where(myType => myType.IsClass && !myType.IsAbstract && myType.IsSubclassOf(typeof(WorkGiver_Scanner)) && myType != typeof(WorkGiver_Teach)) + .SelectMany(type => type.GetMethods()) + .Where(method => method.Name.Equals("PotentialWorkThingsGlobal")) + .Cast(); + } - private static IEnumerable CheckFields(IEnumerable __result, WorkGiver_Scanner __instance, Pawn pawn) - { - foreach (Thing thing in __result) - { - //Log.Message($"Work type: { __instance.def.workType}, thing is {thing}, value: {PrisonLaborUtility.canWorkHere(thing.Position, pawn, __instance.def.workType)}"); - if (thing != null && PrisonLaborUtility.CanWorkHere(thing.Position, pawn, __instance.def.workType)) - { - // Log.Message($"Work type { __instance.def.workType}, value: {PrisonLaborUtility.canWorkHere(thing.Position, pawn, __instance.def.workType)}"); - yield return thing; - } - } - } + static MethodBase getCleanMethod() + { + Assembly asm = typeof(WorkGiver_Scanner).Assembly; + Type type = asm.GetType("RimWorld.WorkGiver_CleanFilth"); + return type.GetMethod("PotentialWorkThingsGlobal"); + } + static IEnumerable Postfix(IEnumerable __result, WorkGiver_Scanner __instance, Pawn pawn) + { + if (__result != null && __instance != null) + { + return __result.Where(item => item is Thing thing && PrisonLaborUtility.CanWorkHere(thing.Position, pawn, __instance.def.workType)); + } + else + { + return __result; + } } + } } diff --git a/Source/HarmonyPatches/Patches_Work/Patch_Breastfeed.cs b/Source/HarmonyPatches/Patches_Work/Patch_Breastfeed.cs new file mode 100644 index 00000000..a22b16ce --- /dev/null +++ b/Source/HarmonyPatches/Patches_Work/Patch_Breastfeed.cs @@ -0,0 +1,32 @@ +using HarmonyLib; +using PrisonLabor.Core; +using PrisonLabor.Core.Other; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Verse; + +namespace PrisonLabor.HarmonyPatches.Patches_Work +{ + [HarmonyPatch(typeof(ChildcareUtility))] + [HarmonyPatch(new[] { typeof(Pawn), typeof(Pawn) })] + class Patch_BreastfeedCompatibleFactions + { + static readonly MethodInfo expectedMethod = AccessTools.PropertyGetter(typeof(Pawn), nameof(Pawn.Faction)); + + [HarmonyPatch("HasBreastfeedCompatibleFactions")] + static bool Postfix(bool __result, Pawn mom, Pawn baby) + { + if (mom.IsPrisonerOfColony || baby.IsPrisonerOfColony) + { + return ChildcareUtility.HasBreastfeedCompatibleFactions(PrisonLaborUtility.GetPawnFaction(mom), baby); + } + return __result; + } + } +} diff --git a/Source/HarmonyPatches/Patches_Work/Patch_Smoothing.cs b/Source/HarmonyPatches/Patches_Work/Patch_Smoothing.cs index a9a60a26..3480ec20 100644 --- a/Source/HarmonyPatches/Patches_Work/Patch_Smoothing.cs +++ b/Source/HarmonyPatches/Patches_Work/Patch_Smoothing.cs @@ -16,8 +16,8 @@ class Patch_Smoothing { static IEnumerable TargetMethods() { - yield return (MethodBase)typeof(WorkGiver_ConstructSmoothWall).GetMethod("HasJobOnCell"); - yield return (MethodBase)typeof(WorkGiver_ConstructAffectFloor).GetMethod("HasJobOnCell"); + yield return typeof(WorkGiver_ConstructSmoothWall).GetMethod("HasJobOnCell"); + yield return typeof(WorkGiver_ConstructAffectFloor).GetMethod("HasJobOnCell"); } public static bool Postfix(bool __result, Pawn pawn, IntVec3 c) diff --git a/Source/HarmonyPatches/Patches_Work/Patch_WorkGiver_PrisonerFaction.cs b/Source/HarmonyPatches/Patches_Work/Patch_WorkGiver_PrisonerFaction.cs index fd1a29c7..e64273fa 100644 --- a/Source/HarmonyPatches/Patches_Work/Patch_WorkGiver_PrisonerFaction.cs +++ b/Source/HarmonyPatches/Patches_Work/Patch_WorkGiver_PrisonerFaction.cs @@ -16,6 +16,7 @@ namespace PrisonLabor.HarmonyPatches.Patches_Work [HarmonyPatch] public class Patch_WorkGiver_PrisonerFaction { + static readonly MethodInfo expectedMethod = AccessTools.PropertyGetter(typeof(Pawn), nameof(Pawn.Faction)); static IEnumerable TargetMethods() { foreach (MethodBase mb in Assembly.GetAssembly(typeof(WorkGiver_Scanner)).GetTypes() @@ -30,6 +31,7 @@ static IEnumerable TargetMethods() yield return typeof(WorkGiver_ConstructFinishFrames).GetMethod(nameof(WorkGiver_ConstructFinishFrames.JobOnThing)); yield return typeof(WorkGiver_ConstructDeliverResourcesToFrames).GetMethod(nameof(WorkGiver_ConstructDeliverResourcesToFrames.JobOnThing)); yield return typeof(WorkGiver_ConstructDeliverResourcesToBlueprints).GetMethod(nameof(WorkGiver_ConstructDeliverResourcesToBlueprints.JobOnThing)); + yield return typeof(ChildcareUtility).GetMethod(nameof(ChildcareUtility.HasBreastfeedCompatibleFactions), new[] { typeof(Faction), typeof(Pawn) }); } public static IEnumerable Transpiler(ILGenerator gen, MethodBase mBase, IEnumerable inst) @@ -51,7 +53,7 @@ public static IEnumerable Transpiler(ILGenerator gen, MethodBas private static bool ShouldPatch(CodeInstruction actual, CodeInstruction prev) { - return prev.opcode == OpCodes.Ldarg_1 && actual.opcode == OpCodes.Callvirt && actual.operand != null && actual.operand.ToString().Contains("RimWorld.Faction get_Faction()"); + return prev.opcode == OpCodes.Ldarg_1 && actual.opcode == OpCodes.Callvirt && actual.OperandIs(expectedMethod); } } } diff --git a/Source/Organizer/NewsFeed.xml b/Source/Organizer/NewsFeed.xml index 0a6905cc..a45f1946 100644 --- a/Source/Organizer/NewsFeed.xml +++ b/Source/Organizer/NewsFeed.xml @@ -3,331 +3,347 @@ - - - - - - - - - Prison Labor v 1.4.1 - - [-] Added Work and bloodfeed interaction for biotech dlc - [-] Added Work and hemogen farm interaction for biotech dlc - [-] Resocialization offer should not appear on pawn with Unwavering Loyalty - [-] Work and x interaction updated to have similar options to vanilla one - [-] Some interaction should be blocked due to Unwavering Loyalty - [-] Fix for mech gestator usage - [-] Recruited prisoners should have removed drain hemogen bill - [-] Prisoners should not be revolting if genes don't allow that - - - - Prison Labor v 1.4.0 - - [-] Update for Rimworld 1.4. All listed features below will only work with game version 1.4. - [-] Compatibility patch for CleaningArea - [-] Compatibility patch for Hospitality. Prisoners will entertain guest. - [-] Compatibility patch for Therapy. Prisoners can get therapy now. - [-] Split all compatibility patches into DLLs. Mod order is required for prison labor. - [-] Prisoners can use variant of joy giver building like poker table. Joy need is disabled, but during recreation time their mood will be improved. It will happen only during recreation time assignment. - [-] Refactor of prisoners job giver. No new future here, but with enabled prison labor debug logging more info what going on in prisoner mind going on. - - - - - - - - - - - - - - Prison Labor v 1.3.0 - - [-] Update to Rimworld 1.3 - [-] Created menu for prisoners. - [-] Created tab in prisoners menu "Overview". In this tab interaction mode can be chosen, resocialization offer is moved here from pawn prisoner tab. Also, possibility to order removing/putting cuffs on prisoners are here. Motivation level is also displayed here. - [-] Created tab in prisoner menu "Work". It was moved from the tab "Work" in main tab. - [-] Created tab in prisoner menu "Schedule". It was moved from the tab "Schedule" in main tab. - [-] Created tab in prisoner menu "Assign". Allows to assign diet and what kind of medicine should be used for prisoner. - [-] Created tab in prisoner menu "Dev". For dev tools. - [-] Moved restrict bill to group from drop down button to vanilla drop down pawn restriction in bill menu. Added new options to handle vanilla slaves. - [gap] - Some tutorials are now out of date. Hope to fix them soon. - [gap] - Honestly don't know if it will work correctly, didn't have enough time to test it right. Please report any bugs and not working slaves. - - - - Prison Labor v 1.2.5 - - [-]Refactored rendering icons on prisoners. Instead of drawing textures, mesh is used. It may help with gray screen issue. Icons will be smaller now. - [-]Various fixes to work patches which should reduce situations when prisoners stuck. - [gap] - Probably it is the last release for Rimworld version 1.2. Future updates will be pushed with version 1.3 - - - - Prison Labor v 1.2.4 - - [-]Changed adding designer for prisoner labor zone to more "common" way. It may fix missing designators as mod incompatibility - [-]Prisoners should respect their food restriction when motivation is more than 75%, or they are watched - [-]Prisoners should use ground penetration and long scanners - - - - - - - - Prison Labor v0.10.1 - - This patch contains a lot of changes, so there can be bugs. Please [b]report bugs[/b] so I can repair them ASAP - [gap] + + + Prison Labor v1.4.8 + + [-] Apparel policy can be assigned to prisoners + [-] Motivated prisoner will respect assigned apparel policy + [-] Interrogation added as new "ritual" that should not be count to ritual limits + [-] Warden can interrogate prisoners from non-player faction + [-] Interrogation can be performed in interrogation room + [-] Interrogation room needs new furniture "Interrogation chair" (comp from this item can be used in any other mod) + [-] Depends on wardens traits, skills and relation with prisoner interrogation can have different outcome + [-] Patches to allow prisoners to feed colony newborns + [-] Adjusted prisoner related alerts triggers + [gap] + There are a lot of new futures, so creating a backup save is recommended. Also, please do not exploit it too much ;) + + + + + + + + + + Prison Labor v 1.4.1 + + [-] Added Work and bloodfeed interaction for biotech dlc + [-] Added Work and hemogen farm interaction for biotech dlc + [-] Resocialization offer should not appear on pawn with Unwavering Loyalty + [-] Work and x interaction updated to have similar options to vanilla one + [-] Some interaction should be blocked due to Unwavering Loyalty + [-] Fix for mech gestator usage + [-] Recruited prisoners should have removed drain hemogen bill + [-] Prisoners should not be revolting if genes don't allow that + + + + Prison Labor v 1.4.0 + + [-] Update for Rimworld 1.4. All listed features below will only work with game version 1.4. + [-] Compatibility patch for CleaningArea + [-] Compatibility patch for Hospitality. Prisoners will entertain guest. + [-] Compatibility patch for Therapy. Prisoners can get therapy now. + [-] Split all compatibility patches into DLLs. Mod order is required for prison labor. + [-] Prisoners can use variant of joy giver building like poker table. Joy need is disabled, but during recreation time their mood will be improved. It will happen only during recreation time assignment. + [-] Refactor of prisoners job giver. No new future here, but with enabled prison labor debug logging more info what going on in prisoner mind going on. + + + + + + + + + + + + + + Prison Labor v 1.3.0 + + [-] Update to Rimworld 1.3 + [-] Created menu for prisoners. + [-] Created tab in prisoners menu "Overview". In this tab interaction mode can be chosen, resocialization offer is moved here from pawn prisoner tab. Also, possibility to order removing/putting cuffs on prisoners are here. Motivation level is also displayed here. + [-] Created tab in prisoner menu "Work". It was moved from the tab "Work" in main tab. + [-] Created tab in prisoner menu "Schedule". It was moved from the tab "Schedule" in main tab. + [-] Created tab in prisoner menu "Assign". Allows to assign diet and what kind of medicine should be used for prisoner. + [-] Created tab in prisoner menu "Dev". For dev tools. + [-] Moved restrict bill to group from drop down button to vanilla drop down pawn restriction in bill menu. Added new options to handle vanilla slaves. + [gap] + Some tutorials are now out of date. Hope to fix them soon. + [gap] + Honestly don't know if it will work correctly, didn't have enough time to test it right. Please report any bugs and not working slaves. + + + + Prison Labor v 1.2.5 + + [-]Refactored rendering icons on prisoners. Instead of drawing textures, mesh is used. It may help with gray screen issue. Icons will be smaller now. + [-]Various fixes to work patches which should reduce situations when prisoners stuck. + [gap] + Probably it is the last release for Rimworld version 1.2. Future updates will be pushed with version 1.3 + + + + Prison Labor v 1.2.4 + + [-]Changed adding designer for prisoner labor zone to more "common" way. It may fix missing designators as mod incompatibility + [-]Prisoners should respect their food restriction when motivation is more than 75%, or they are watched + [-]Prisoners should use ground penetration and long scanners + + + + + + + + Prison Labor v0.10.1 + + This patch contains a lot of changes, so there can be bugs. Please [b]report bugs[/b] so I can repair them ASAP + [gap] - [b]Treatment system[/b] - [-]added new hidden need "Treatment" that indicates level of prison treatment towards prisoner - [-]prisoners will now give offer to join colony if treatment is good enough (random) - [-]prisoners now will pick up weapons if treated bad - [-]added +5 bonus to mood while prisoner have free time - [-]added +5 bonus to mood if prisoner is not supervised and got lazy - [-]added +15 bonus to mood if treatment is above 75% - [-]added prisoner suicides - [-]added blocking revolts (100%, 95%, 50%, 10%) if overall prisoner treatment is good enough - [-]added treatment drop when prisoner is being beaten - [-]increased base chance for Revolts - [-]added blocking mental breaks for prisoners with low treatment levels - [-]"Treatment happiness" will decrease if health conditions are bad, when prisoners are hungry, or they're working. + [b]Treatment system[/b] + [-]added new hidden need "Treatment" that indicates level of prison treatment towards prisoner + [-]prisoners will now give offer to join colony if treatment is good enough (random) + [-]prisoners now will pick up weapons if treated bad + [-]added +5 bonus to mood while prisoner have free time + [-]added +5 bonus to mood if prisoner is not supervised and got lazy + [-]added +15 bonus to mood if treatment is above 75% + [-]added prisoner suicides + [-]added blocking revolts (100%, 95%, 50%, 10%) if overall prisoner treatment is good enough + [-]added treatment drop when prisoner is being beaten + [-]increased base chance for Revolts + [-]added blocking mental breaks for prisoners with low treatment levels + [-]"Treatment happiness" will decrease if health conditions are bad, when prisoners are hungry, or they're working. - [b]Prisoners can do construction jobs now[/b] + [b]Prisoners can do construction jobs now[/b] - [b]Enchantments[/b] - [-]new system for removing mod from save (new button in mod menu) - [-]prisoners will now seek safe temperature when not supervised - [-]prisoners will respect forbidden items, if "inspired" - [-]prisoners will now work in cold only if "work" time is set - [-]added alert when prisoners can escape - [-]reworked news popup window - [-]wardens no longer deliver food if prisoners can get it from another room - [-]cosmetic changes to bill checkbox - [-]prisoners will now stay at bed if waiting for surgery + [b]Enchantments[/b] + [-]new system for removing mod from save (new button in mod menu) + [-]prisoners will now seek safe temperature when not supervised + [-]prisoners will respect forbidden items, if "inspired" + [-]prisoners will now work in cold only if "work" time is set + [-]added alert when prisoners can escape + [-]reworked news popup window + [-]wardens no longer deliver food if prisoners can get it from another room + [-]cosmetic changes to bill checkbox + [-]prisoners will now stay at bed if waiting for surgery - [b]Bugs[/b] - [-]fixed food reservation throwing errors - [-]fixed cutting some content of bill config in some languages - [-]now work settings reset after prisoner is recruited, so it should fix some issues - [-]finally fixed "OnGui()" error, big thanks to @notfood (https://github.com/notfood) - [-]fixed blurred effect on settings window - [-]fixed Revolts + [b]Bugs[/b] + [-]fixed food reservation throwing errors + [-]fixed cutting some content of bill config in some languages + [-]now work settings reset after prisoner is recruited, so it should fix some issues + [-]finally fixed "OnGui()" error, big thanks to @notfood (https://github.com/notfood) + [-]fixed blurred effect on settings window + [-]fixed Revolts - [gap] + [gap] - If you want to support the work I do, please consider small donation. Link to Ko-fi will be placed at steam page. - - - - Prison Labor Beta v0.9.11 - - [-]fixed compatibility with Fluffy's WorkTab (final) - - - - Prison Labor Beta v0.9.10 - - [-]hotfixed compatibility with Fluffy's WorkTab (still have some visual flaws) - - - - Prison Labor Beta v0.9.9 - - [-]added sub-tabs in \"Work\" Tab and \"Assign\" Tab for \"Colonists\" and \"Prisoners\" - [-]added renaming Prisoners for imprisonment time (pawns will restore old names after releasing) - - - - Prison Labor Beta v0.9.8 - - [-]fixed SeedsPlease compatibility - - - - Prison Labor Beta v0.9.7 - - [-]added warning message before placing labor area for the first time - - - - Prison Labor Beta v0.9.6 - - [-]updated to RimWorld 1.0 - - - - Prison Labor Beta v0.9.5 - - [-]updated to RimWorld Beta 19 - - - - Prison Labor Beta v0.9.4 - - [-]disabled Warden and Jailor types of work for prisoner labor, it should fix bug, where jailors do not warden inside labor area - - - - Prison Labor Beta v0.9.3 - - [-]fixed compatibility with No Water no Life - [-]fixed compatibility with Dubs Bad Hygiene Mod - [-]fixed error with loading old saves - - - - Prison Labor Beta v0.9.2 - - [-]fixed seeds please compatibility issue - [-]added option to disable revolts - - - - Prison Labor Beta v0.9.1 - - [-]changed max. skill required for non-advanced growing by prisoners to 6 instead of 0 - [-]added new work type Jailor - [-]fixed drawing icons on world map - [-]fixed disabling mod from existing saves - [-]fixed incorrectly showing \"advanced growing by prisoners\" option - - - - Prison Labor Beta v0.9.0 - - [-]updated to RimWorld beta v18 - [-]added option to disable icons above prisoners heads in mod menu - [-]fixed error \"null reference in onGui()\" when loading save - - - - Prison Labor Beta v0.8.8 - - [-]changed slow from prisoners chains to act as factor instead offset - [-]fixed compatibility issues with Seeds Please(again) - - - - Prison Labor Beta v0.8.7 - - [-]fixed bug with dropping motivation while in bed - [-]prisoners will now get different weapons when revolt triggers (molotovs, bows, or clubs) - [-]replaced orginal jobs with \"tweak\" jobs (instead of overriding them, this fix is for users who use \"WorkTab\" by Fluffy) - [-]removed warning message from logs - [-]prisoners will now have 50% of normal speed in chains (instead of 35%) - [-]prisoners will now break chains after some period of time instead of immadiately(matter in incidents, breakouts etc.) - [-]wardens will now try to motivate most prisoners at once, but with priority to motivate lowest motivation first - [-]fixed bug with animals do not respect reservations (and vice versa) - - - - Prison Labor Beta v0.8.6 - - [img]NewsElement_Locks[/img][b]Locks mod:[/b]\nIf you want to allow prisoners to pass by closed doors, please check out my other mod called [b]Locks[/b] - [gap] - [-]fixed bug that Sowing job do not comply to Labor Area - [-]fixed bug with JoyGiver debris (sorry about that) - [-]reduced number of null reference errors with OnGui() method (fixed in v 0.8.5) - [-]single warden will be able to maintain 7 prisoners, instead of 5 (because of laziness rate reduction) (changed in v 0.8.5) - [-]decreased laziness rate to 0.002, instead of 0.003 (prisoners will get lazy 1.5x slower) (changed in v 0.8.5) - [-]decreased manipulation to 70% (instead of 80%) (changed in v 0.8.5) - [-]fixed null reference exception at loading game (fixed in v 0.8.4) - - - - Prison Labor Beta v0.8.3 - - [-]fixed bugs with disabling mod(now you can safely disable mod again) - [-]fixed bug with prioritizing work - [-]fixed bug with rendering icons on world map - - - - Prison Labor Beta v0.8.1 - - [-]fixed bug with rendering icons on world map - [subtitle] If you encouter any bugs [b]please report it on github[/b]. I'm fixing most important ones every day. This is (recently) beta version and it has to consist some bugs. Thank you for understaning. - [subtitle] Also you can always [b]download old version[/b] via github, but I think this was last big update - [-]re-enabled button in Bills detail panel - [-]added slider to Bills (temporary fix) - [-]fixed Bill \"Prisoner only\" button (I think, let me know if you still experience errors) - [-]fixed prisoners aren't working when Motivation is disabled (via Settings) - [-]fixed null-reference error on some revolts incidents - - - - Prison Labor Beta v0.8.0 - - [subtitle][b]Now in Beta![/b] I would no longer add any more features. Instead I will focus on improving existing ones. - [gap] - [subtitle][b]Main changes:[/b] - [img]NewsElement_Revolt[/img][b]Revolts:[/b]\nPrisoners will now form organized group under self-elected leader if motivation of prisoners is low. They will try to inflict damage to your colony or they will attemp running to elected enemy faction - [img]NewsElement_InspirationReworked[/img][b]Insiration reworked:[/b]\nQuicker, better and more intuitive.\nYou can now send your prisoners to work outside your walls, but be carefull: they will try to escape if left alone. Prisoners will start thinking about escape after being left for some time. - [img]LaborAreaExpand[/img][b]Labor area:[/b]\nYou can now select area for labor only. Your colonists will no longer go mine with peasants.\nTo access this tool look into \"Architect->Zones\" panel. - [img]NewsElement_PrisonersOnly[/img][b]Prisoners Only button[/b]\nGo to Bill details to mark bills for prisoners only! - [img]NewsElement_WorkAndRecruit[/img][b]Work and recruit:[/b]\nThis feature has been mostly requested by community. I hope it will be well received. - [gap] - [subtitle][b]Other changes:[/b] - [-]added default prisoner interaction mode option to settings menu - [-]added icons above prisoners indicating whenever he's being motivated/inspired - [-]reduced manipulation capability of prisoners (now they have 80% of normal manipulation, down from 100%) - [-]added tutorials triggers (now all tutorials will be shown) - [-]added watched tutorials to properties (tutorials will no longer be shown after reenabling mod) - [-]fixed forbidden bug with harvesting plants (again) - [-]fixed Toil reservation bug (not respecting prisoners' job) - [-]fixed compatibility with Dubs Hygiene Mod - [-]fixed SeedsPlease compatibility - [-]excluded supervising from labor - [-]rewritten news dialog - now with images and stuff - [-]perfomance and code improvements - [-]translation improvements - [gap] - [subtitle]Also I want to annouce that I will start new mod called [b]Prison Expansion[/b] that would be PrisonExtensions remake.The aim of this mod would be improving Prison Labor experience, especially cell doors and fences. - - - - Prison Labor Alpha v0.7 - - [-]Added settings! You can now change almost any aspect of this mod, including:\n * work types\n * motivation mechanics\n * prevention of planting advanced plants. - [-]Added \"uninstaller\" (\"disable\" option in settings), which will allow to disable this mod from existing saves. - [-]\"No more beeping!\". Changed way of informing player what's going on with prisoners. It should be less annoying and more insightful. - [-]Fixed bugs, including bug that prevents prisoners from cleaning and bug that causes warden to stuck in loop of delivering food to prisoner. - [-]\"No more watching while prisoner is sleeping.\"Wardens will no longer watch over not working prisoners. - [-]Prisoners will now stay in bed while waiting for operation - [-]Prisoners will now stop work when starving for default (\"Anything\" time), instead of hungry. They will still get minor debuff. - - - - Prison Labor Alpha v0.6 - - [-]Time restrictions - now you can manage your prisoners time for sleep, work and joy. You can now even force them to work when they're hungry! - [-]Getting food by prisoners - Now prisoners will look for food in much better way, and now (when they desperate enough) they will eat corpses! - [-]\"Laziness\" changed to \"Motivation\" and inverted.\n\n ATTENTION: After PrisonLabor reaches beta all saves with PrisonLabor v0.5a or lower will be corrupted and unplayable. This version (0.6) is safe and converts all older saves. - - - - Prison Labor Alpha v0.5 - - [-]Prisoners can now grow, but only plants that not require any skills. - [-]You can now manage prisoners work types. Just check \"Work\" tab! - [-]Laziness now appear on \"Needs\" tab. Above 50% wardens will watch prisoners. Above 80% prisoners won't work unless supervised. - [-]Wardens will now bring food to prisoners that went too far from his bed. - [-]Prisoners won't gain laziness when not working anymore. - [-]Fixed many bugs - - - + If you want to support the work I do, please consider small donation. Link to Ko-fi will be placed at steam page. + + + + Prison Labor Beta v0.9.11 + + [-]fixed compatibility with Fluffy's WorkTab (final) + + + + Prison Labor Beta v0.9.10 + + [-]hotfixed compatibility with Fluffy's WorkTab (still have some visual flaws) + + + + Prison Labor Beta v0.9.9 + + [-]added sub-tabs in \"Work\" Tab and \"Assign\" Tab for \"Colonists\" and \"Prisoners\" + [-]added renaming Prisoners for imprisonment time (pawns will restore old names after releasing) + + + + Prison Labor Beta v0.9.8 + + [-]fixed SeedsPlease compatibility + + + + Prison Labor Beta v0.9.7 + + [-]added warning message before placing labor area for the first time + + + + Prison Labor Beta v0.9.6 + + [-]updated to RimWorld 1.0 + + + + Prison Labor Beta v0.9.5 + + [-]updated to RimWorld Beta 19 + + + + Prison Labor Beta v0.9.4 + + [-]disabled Warden and Jailor types of work for prisoner labor, it should fix bug, where jailors do not warden inside labor area + + + + Prison Labor Beta v0.9.3 + + [-]fixed compatibility with No Water no Life + [-]fixed compatibility with Dubs Bad Hygiene Mod + [-]fixed error with loading old saves + + + + Prison Labor Beta v0.9.2 + + [-]fixed seeds please compatibility issue + [-]added option to disable revolts + + + + Prison Labor Beta v0.9.1 + + [-]changed max. skill required for non-advanced growing by prisoners to 6 instead of 0 + [-]added new work type Jailor + [-]fixed drawing icons on world map + [-]fixed disabling mod from existing saves + [-]fixed incorrectly showing \"advanced growing by prisoners\" option + + + + Prison Labor Beta v0.9.0 + + [-]updated to RimWorld beta v18 + [-]added option to disable icons above prisoners heads in mod menu + [-]fixed error \"null reference in onGui()\" when loading save + + + + Prison Labor Beta v0.8.8 + + [-]changed slow from prisoners chains to act as factor instead offset + [-]fixed compatibility issues with Seeds Please(again) + + + + Prison Labor Beta v0.8.7 + + [-]fixed bug with dropping motivation while in bed + [-]prisoners will now get different weapons when revolt triggers (molotovs, bows, or clubs) + [-]replaced orginal jobs with \"tweak\" jobs (instead of overriding them, this fix is for users who use \"WorkTab\" by Fluffy) + [-]removed warning message from logs + [-]prisoners will now have 50% of normal speed in chains (instead of 35%) + [-]prisoners will now break chains after some period of time instead of immadiately(matter in incidents, breakouts etc.) + [-]wardens will now try to motivate most prisoners at once, but with priority to motivate lowest motivation first + [-]fixed bug with animals do not respect reservations (and vice versa) + + + + Prison Labor Beta v0.8.6 + + [img]NewsElement_Locks[/img][b]Locks mod:[/b]\nIf you want to allow prisoners to pass by closed doors, please check out my other mod called [b]Locks[/b] + [gap] + [-]fixed bug that Sowing job do not comply to Labor Area + [-]fixed bug with JoyGiver debris (sorry about that) + [-]reduced number of null reference errors with OnGui() method (fixed in v 0.8.5) + [-]single warden will be able to maintain 7 prisoners, instead of 5 (because of laziness rate reduction) (changed in v 0.8.5) + [-]decreased laziness rate to 0.002, instead of 0.003 (prisoners will get lazy 1.5x slower) (changed in v 0.8.5) + [-]decreased manipulation to 70% (instead of 80%) (changed in v 0.8.5) + [-]fixed null reference exception at loading game (fixed in v 0.8.4) + + + + Prison Labor Beta v0.8.3 + + [-]fixed bugs with disabling mod(now you can safely disable mod again) + [-]fixed bug with prioritizing work + [-]fixed bug with rendering icons on world map + + + + Prison Labor Beta v0.8.1 + + [-]fixed bug with rendering icons on world map + [subtitle] If you encouter any bugs [b]please report it on github[/b]. I'm fixing most important ones every day. This is (recently) beta version and it has to consist some bugs. Thank you for understaning. + [subtitle] Also you can always [b]download old version[/b] via github, but I think this was last big update + [-]re-enabled button in Bills detail panel + [-]added slider to Bills (temporary fix) + [-]fixed Bill \"Prisoner only\" button (I think, let me know if you still experience errors) + [-]fixed prisoners aren't working when Motivation is disabled (via Settings) + [-]fixed null-reference error on some revolts incidents + + + + Prison Labor Beta v0.8.0 + + [subtitle][b]Now in Beta![/b] I would no longer add any more features. Instead I will focus on improving existing ones. + [gap] + [subtitle][b]Main changes:[/b] + [img]NewsElement_Revolt[/img][b]Revolts:[/b]\nPrisoners will now form organized group under self-elected leader if motivation of prisoners is low. They will try to inflict damage to your colony or they will attemp running to elected enemy faction + [img]NewsElement_InspirationReworked[/img][b]Insiration reworked:[/b]\nQuicker, better and more intuitive.\nYou can now send your prisoners to work outside your walls, but be carefull: they will try to escape if left alone. Prisoners will start thinking about escape after being left for some time. + [img]LaborAreaExpand[/img][b]Labor area:[/b]\nYou can now select area for labor only. Your colonists will no longer go mine with peasants.\nTo access this tool look into \"Architect->Zones\" panel. + [img]NewsElement_PrisonersOnly[/img][b]Prisoners Only button[/b]\nGo to Bill details to mark bills for prisoners only! + [img]NewsElement_WorkAndRecruit[/img][b]Work and recruit:[/b]\nThis feature has been mostly requested by community. I hope it will be well received. + [gap] + [subtitle][b]Other changes:[/b] + [-]added default prisoner interaction mode option to settings menu + [-]added icons above prisoners indicating whenever he's being motivated/inspired + [-]reduced manipulation capability of prisoners (now they have 80% of normal manipulation, down from 100%) + [-]added tutorials triggers (now all tutorials will be shown) + [-]added watched tutorials to properties (tutorials will no longer be shown after reenabling mod) + [-]fixed forbidden bug with harvesting plants (again) + [-]fixed Toil reservation bug (not respecting prisoners' job) + [-]fixed compatibility with Dubs Hygiene Mod + [-]fixed SeedsPlease compatibility + [-]excluded supervising from labor + [-]rewritten news dialog - now with images and stuff + [-]perfomance and code improvements + [-]translation improvements + [gap] + [subtitle]Also I want to annouce that I will start new mod called [b]Prison Expansion[/b] that would be PrisonExtensions remake.The aim of this mod would be improving Prison Labor experience, especially cell doors and fences. + + + + Prison Labor Alpha v0.7 + + [-]Added settings! You can now change almost any aspect of this mod, including:\n * work types\n * motivation mechanics\n * prevention of planting advanced plants. + [-]Added \"uninstaller\" (\"disable\" option in settings), which will allow to disable this mod from existing saves. + [-]\"No more beeping!\". Changed way of informing player what's going on with prisoners. It should be less annoying and more insightful. + [-]Fixed bugs, including bug that prevents prisoners from cleaning and bug that causes warden to stuck in loop of delivering food to prisoner. + [-]\"No more watching while prisoner is sleeping.\"Wardens will no longer watch over not working prisoners. + [-]Prisoners will now stay in bed while waiting for operation + [-]Prisoners will now stop work when starving for default (\"Anything\" time), instead of hungry. They will still get minor debuff. + + + + Prison Labor Alpha v0.6 + + [-]Time restrictions - now you can manage your prisoners time for sleep, work and joy. You can now even force them to work when they're hungry! + [-]Getting food by prisoners - Now prisoners will look for food in much better way, and now (when they desperate enough) they will eat corpses! + [-]\"Laziness\" changed to \"Motivation\" and inverted.\n\n ATTENTION: After PrisonLabor reaches beta all saves with PrisonLabor v0.5a or lower will be corrupted and unplayable. This version (0.6) is safe and converts all older saves. + + + + Prison Labor Alpha v0.5 + + [-]Prisoners can now grow, but only plants that not require any skills. + [-]You can now manage prisoners work types. Just check \"Work\" tab! + [-]Laziness now appear on \"Needs\" tab. Above 50% wardens will watch prisoners. Above 80% prisoners won't work unless supervised. + [-]Wardens will now bring food to prisoners that went too far from his bed. + [-]Prisoners won't gain laziness when not working anymore. + [-]Fixed many bugs + + + diff --git a/Source/PrisonLabor.csproj b/Source/PrisonLabor.csproj index b3179c40..8fefef98 100644 --- a/Source/PrisonLabor.csproj +++ b/Source/PrisonLabor.csproj @@ -85,6 +85,7 @@ + @@ -97,6 +98,18 @@ + + + + + + + + + + + + @@ -106,6 +119,7 @@ + @@ -142,10 +156,13 @@ + + + diff --git a/changelog.txt b/changelog.txt index 9e602647..d6d9bece 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,14 @@ Changelog: +1.4.8 +- Apparel policy can be assigned to prisoners +- Motivated prisoner will respect assigned apparel policy +- Interrogation added as new "ritual" that should not be count to ritual limits +- Warden can interrogate prisoners from non-player faction +- Interrogation can be performed in interrogation room +- Interrogation room needs new furniture "Interrogation chair" (comp from this item can be used in any other mod) +- Depends on wardens traits, skills and relation with prisoner interrogation can have different outcome +- Patches to allow prisoners to feed colony newborns +- Adjusted prisoner related alerts triggers 1.4.7 - Fixes for Vultures from "Reinforced Mechanoid 2" 1.4.6