lWn(rb#nKD#{zSfaQ$jAocahVt`m-<+)G!Un!=A_cbQ zFR!59`)gr|HZOQhdzG3wQ;G#mm!O1Pe4D_=ah)h;GR3;S`?9+wcK*D0)YFN6D|AueQ!a*-YA 0^NB>%P>P0r+D$z=Ol%j5zxg`1k2}*@yg<%n+vS zf (A5jKG+OE(cT)hM=!OW4fCqp=> wi(vbyn}Oh8#$xur6@h5a?N=piZ{OFozE)yD*NNlbycb&L zn$)Unl;%>No=2`s3E|{T8Yp5(;o)b142-fz% zD}|9y<~tDO#7L+&Xpjb1pD`)-|M3 9H;6Y-b(h%ykVq^O#* z3~@jJ%~3vTll{+q`b}}g{ZtOz5<5OJkMOZh_ O8OZxR^#VYOYO-h@Msg zQ)gbUC=&5sx}D Egl{5;8-N-UF>jF6(={!weD9X2MW zWglWP6f*B$3o>z|h;Yik1Co;CTl02qmL=At6`5Cw{*Mx3E2E4iSb0_8flt(u8Jq(i zOQE$<&VQ8<4h!;P3v$rVg=diQ(~)*LxQi~#TuGd!1erQc$5=l%EnI2I4Z+oEB1W}- z;42zfZWhWr{_REWF)G0$Xf4a{zjo}!7~(YbZch`&44D}-PetJWQKcgh|JMZwv{`2T z*a<;Q(Ymjy>~ef;YP+e)R8c8WxYy=9W1Ert)|UG=?Jn0+i5lvXdF+-CB6Z{w-$Y|| zRQ;JXSQUqp2iOCc(uy-v%dbX9uw+=Vxhd__j<@r&ekBEp{!^YuoRhpM+51C?yd`Zy zV;@idn8A_E8su0o-#+|TE&kIXtnB&@yC~uz^8Q`vPti;Pih+;ZzXg0^{hmp&Mf ozfHS@AbBsJC))FR&UCmwTyC z;;Vv=iW56>_<(veYw@PHV-BbGYnx@oB_=VWz{Ciu^P3rs6`fjf@GY7=2GU)VKJ?Pi z)t_hJ-91Ub$`1#-o55Hz4y%k>$ysV;7=#$DZ#Nx}^nh=-TwQiTr`{d&O}pQXi2%<> zUH-2}ug+emg^=ABIx#gv193i|?RAC$z-$&Wlf&S@D~8>lH>=b-Lp(3QNEg433^*~O zl_-!Ces70_`@nQ-9=AG3g7&$@N=wD78j+%(e0+z}r*blH*|iW5*p26d5}m4nO0Qo# zu(ohF2h@PN;EmiM9T08Pesee^ts3|4>M-BOexb2a69}L9@!W+<-(`h>=x@%^udI=q zSz2oGx?^Wd1QLZiYE{ncnl34r?$w>Pt4|jq%dw2@P@CGTh`RJ+_d|x Ey0TbGXB$K|i zpDC _q)LZ#(@0mhvc$C`1v$ey zlF`39L0=32`@nHQV|2SBwzupb<6s#-(K3DuV}*pXJ3nTnnspaVH8|Jtbmf25*HU#y z;FYeF;wgo-6?g@tn7b12VEFN}CGP)4@`WL~)2n6aD!Io0rV17Cm%=G`n}y=3295xP z!2pkEFGETGbdRm--e@4?v3{>}hAA>|B()|kdjAV+NJra&*!A_R0igEFu59H~_tV?2 zrInZI;{b2w^EU<-nD1%UyxAp;L|76 ;bBjf0~6sg zIDmh6naK8B93L(3^~P%{gV&>A_Lcb+^vdJH( 7vH zrTmNQ;nZWcB2R~h%N704FT3IaqLUt*2=9pe1<66D0S|L_&cdh8@6RgoLo=H`Fzo|JA`?<@#ADrjlFBX 7wOK3{TG9wxy47^fHL0&rT96NW7vfiGbse1jyoRo8U4%3?9oC m)*Y4 zF7orhD)M^?XF8z#i}2A %kH&d0atBBY8(hhtTrsP7EeI z2hnJRW_Ku-ctOCT{P29j2Q8UfrFQcZ3N&asV}T?DTYob%ThG;L7r?5Ou}lOq9xKyR z<-Jjo4lLO;>eu(vg^&edw&R+0{mW}7Zqyu%>Tlu@Dt`{Jd{-+EZ~}zU4k}|A)v%by z0$m%bCs{V7XxHm~-gVq8>N$h@7Vdrjh`5~v0O0^a-jDqL{_gN m;FsiQe{W8$%>!Y+;x ^ zG)n@Z9D+5`(2J?lrBhc}{moja4rT10D$7ZFxu=o@WKgudz2~43eQh)Qa@|(`z$rQV zYQyXHdLaAwrwS&=i*))8ee)d#91Idx#o(c*FpGyr)7DDyYW(@d5-`1%jGA%kAux)? z|GQXtGu(eLDtc#Xx2oeUR@Kc^FpdeMJ%YI= e8a*(% U%CfmGG~#`w0q zQs^z1r*?(HTEqiB!QNWr3#?{YUOe=Q>&MU9ahenk1xauo;dl(YgT>x|^ge-)lJqc} z?7^4MS!}zMc_r{MdVf^F_arSpW)7VE7%WqX0Yf*b+9FT|N 4OATK{0HSMoiPtcJOD7EB z;_DAT=)$qgwu@vUSW$~=w|C>kWi4*JiH+Xlu!3ebHZaoXzRuS32>I1h;4$VR0fc LI$vx7tbA~wnhQ>$v+ENHbPp+`R;ai`?Sq6Aq+qLLcqfRq OL-@uBjcuCGLDFx*VUYeQAUShAdejA%12xq!v4>*zO{7;C~_ zYZTxGl*b0h$4a<#!i8VjcL#4CcD1AAk$YY@sK#SM`!a+qNEH !{>@l fktJZ&VFThsvecAW(aM+tpWFb6*RvxEyzdW5U8q%#rGEu8n;6&Hr zhI}@8R) GaOC2X}A4PS;4So6xOd7kx^*gb%8#x@wFB9GZ3D`H^%65!;hIy zzAt9u?AFEy000rkzyAvmAmqKS=8;9BGz7#t-`>5TTY0oUMWRlG)#XsJD51?*ZA1q` zza1lV%~$IVfA1?_5s1>&bs5l|V4f@79SpW)W%?Q4{LN6Mu ZO-0FgSI-~ zsqmKhI~L{l7ox=*zIp=NTq;w$!L4Y{uL!Q(0qPW|m`untzoB2)YZi1GjA6l>UhpQh zC}nW=R_sL{P_wi=3TD)!nlN?XHzr=PGP~ *V8@LzE7r3U;Mj`3xT=fNXdENd21TJ)_^*7?I z!E(#n@5A39JSnZ`@hV12_rkqod;}q6Hz3c*+dq2D3@CjRvta!n0q+$M>KslN!l41Q zwrqpjT?E-?gVX82+}RhP^JE*`MIJa@Zg@({2~MR!Kp>^{(agR@!vFAekmCAm;=Sa= zehT++-0br(tdD1A-`GyYz7_F?3oPyMHr~C{v|P+LNJ0Q{B>QUbe;fPFf-k(H?$#X= ztH@}-z3u(Z4iX;d?{khBM_{)}m^FJgO2>?cs;ZDAiclzwL;Lq&TtyXZHW^)~gIG}a z38<=yXe5k*z952Kr?9WR9S)}pWn;%992#gh`|e4DFo_mtgb4w&U2&1be%!s}+kUq1 zArt%Q-b22K$Ai!PiNs*XSdeC}crpjkeFXrqYR1e4Ls8MfP|xu_J8ZIC-_vsjZEYt| zKCTLH|9vYKEV>ZWXUssb`xHE7V_~z&kYpRij2#PARiP?Ty#L;NIIwRo=3Oui{R92z z?Ciu9^J~%5eR{u{y_7~nSUm*8Ro;}!Lzv5ZVb@M{54pCV&+k86NR+GNNoYnghIGhg zh0cyP|D?&2>kl733|El{$3H# E zhoLGFOr27V)?F>AnlKR?*00BsE0!YI+x1J> aqz%FT)*;0ba$TodwZ{RsIoHNR$)qt0!9^vV*;kx^;e#3 zefza +M=Q=M?T+<0fpW;kS^ zx^f)0{(TE(&YS@v*-`9v_8&cT;0u-07n#;x7A9pXpa2uhx%Aq{yH20{ p#;wwMjZu>ZRb6?My z2j|Y4t9Xiw@zKEpXghHNR8=r#VkMv|aM*0&?I#j_s(dtiaT%)A~Nzx9f9X_^1DU ze=-{e0f%$Cax+^6`}wtBfH`KbULBcx+46_GPM`j~%jtM_(M1=97GJ&;(`L-Vz`y{C zJf*m3@#XmJsxRU*H-7%i1#{>9|L&6V858F&c{!D}B4S+7eE-K3>=%eJQZe_kYoGV| zd@uax&mXLcga$4x8#}&X+O+9vN% zI0*CYZ-3kPwf^A`e>m)w6pugtI4vpBMhL7~vnKDA90e4R2{H=8+ 6r3K&fol?tdRX{~=zz*!1<&*)FvWE2I>w+onW`{xoaYW;@s$9`|lk4HqbnGw(T ze|+%kpULB+bJ^`eEocFjxTy6TwB(}O2e;q*2F*7K={-K``#(Non|=1* firr%zMd2x5v1pKN<59;a^tQOqHmqK%5TKY 9X-9T*tMtNn8U13lVg zz?)|NYs@>_Z-qoe%q9uX7L3X$s3eWb+a5J|Z_bZN 4D_5p z hNcqbHe={JPl%0_Gl!gp#Kc0~0TX X2m_cDo$|0|SsG36dnm+2?-{*m;s9#pEm5j~3tdcfb1`0b*-wnS0NtT4Y%^_VYh} zVpqUsvuV@gsVZD97b1~}aSwzL %aahAwlBEHs`8D&66TqgsiyT7Z-%d z6?lTJx^xl%VBLKyQ2pqONsrxhERgj3j!FV%6OTXsIGsFsa$an+5hYWmOv#J=#~**3 z-gD1Ami@I{yOHUFJnkocAq~Oc|CT>zxj;s+h38)eN{(RN+eZzxV^}c#JP A9Z&l$ z`-91@od`S$kKMNdt*xzCv27awV8ym=Xl-o;ppkFq9X`x|%8%+tUo=RV2&0mK*#;xR zxoSV#P`Wl#yR!&k_rkQl*ZeuaPENs?`td;*UiHK%Xvfq3xT+X>kB`ou1MF eV;}VE$9ueWpS_Aj33-%~s%T0p{pC{%0ze zFCmdoU)txA$Ngkyt46{^BONLpeKaNym?#&>lP?qXd+@;r>4OhGXhb`GJ|C{U@=84T z;Dgxn{5pL0v!BJPRjc6h`EcyM71*$BW(@gq(g)0U5T-C1V&tN~w+lr8 -QOLci!Q{gMe|ZhaP$;?jA-Z0Sg$p7&r4Ka`?UfOWQ)T0L%i0NJ6uI z9gBckZ3EhQ>5wlG=@_aXeGwb=^g|#JKy7U;Hg4Pq0NA*3qoH~`@9>$P&us8S%!q(4 zmn)OgvW7w>Om4tZ21C70TWA)(c>5gyfJh{SwZDIc0>H&fu1=YVA_*BPZue=y7hUc6 zZ3fmp74oG*JOD;;Wm$z2Xn8xPf9Lw~=drB9iEXeZpOwvw2pAET>m6 TBzB za!(yk`v=R=SpSdP9&N~ofcYK~U%>DpRTuQ)C0COdUU-fI!18OC0RY-NBU%5o rV03Y*P5S@?*0*oQ8^&DfRTv{rdLy^ z%Z >ux0@+PrIlU9SNU0x$EfMa84n4!WTnG1)c!*WVXMI%B)co9-=V6&bG&nD6Dm z^1VD-0oj3-(hV8AUQ4Qy{_F3 LXP2!VnJQhekZNk|M zpU;<9`=fSPL%{DRUZ0QVgM8VxpD783YCqrPFJKfBP+UiSxRvl+w?7;RG&a&z!61(L z{Up%XNC99~FlZcK=kb`HXV%8s)I_TFztOP~`1ctV1hjg{L 4jG<8Qgy3%QPD#3^X=UZ&MTTHZ{eOPb3{{%ie)l zVy@HAUlj~$B-D?s^LVgo1d%Z9d;%k1Rn-*ZHMgc7$Bw+3_5Q?A9wOF9E7;F2MDhW^ zg;y7zE$O%7x7b(k37yU(1eGw6z^U%Z^rqgxN$k ze!++G5T5Jy&A^lI{WmtpybqOx$Nc^n 379O6yCZ>%UcruR^q@0FO!rLhT zBiPc`b_Az8+Ay{Pw5m#5T!bm1>{u}3e|ZW>4`#&U!H#7kC1JRT)7NMuoW2GC@UVW| zJ#j%ydm0(QtU2@XFxCJEejP(XmiOb+6(b2LDPUPy8wE6C?QYqMy?eu?ySs|at*J+M zcNN*YH%xZ7Y&D3-+NXozC@V{(0_VE@L`X(H9@$7qu)xX#2Yw9zu+3Nj+l&=pE@z}@ zM$9W(HXnyiMl=#mUxT>|zK(}=^3GlGb>o^txu;wqDFK=CF>=kVsmH8Y4$4SYR@O#m z&2kutdDf1dmv7`E0(dUj=gIe0w|M}DfgR6;gv|Y9>UYfVH%J)W|01IMUo^ UOPj4R6G-O;CC z@uH(+9)S1pbhj5(RX3rfWi#!bu_Ud(Egv9ZZX-)kxNfP&vSrHvsCe_M{Qydg_xFFd z2JVmE#oE=H%Nc0=HT5<%k=1YgiC*^)-^8- +31uHrm#9 z1c0V^I@yw*Zw5Z8Y;`OVk|nLpY9vJxp3C-=fu$KzaVxuLEFsvxnO0S0<^h={)QzCZ z_r3=#TZX=#9_%M&Ko9^a!;GG8fRuq=zXsq`jwj#xlij%PAHIpz|M??&S4MZ18>AEk z)rhA3K{fJe%I3SOp6=ZnCS_%9w7Yvy>G<}kz-nw=D(aM}n()^>hwYDue!3aNlC)L9 zAa=d<5&)oR!R45-eUs6)Xu;)xzBmdnNZ2JW{{*i908_vpe+Nrm{t1BmF0H^LVIS~x zM;pq@+Ke;<19L0=Z)o%5^L<1BsH&QRva&XMx+D40&%+V<8_D)_jcnKt*26NWvi_Z$ zu>PH!jP0`hn`uQwMaH%Qjg6EiAMcW`d|)F0V8@Of*iXug7h9Q#MLZdPxHXC;FaHD+ zzFNtVZ)7295T>eX3fkI^VAd=L1+@Mh`|P_)TPcR$H*1!IwzVCBNZL$rHaxte**?P+ zWlIoDvDUt#q5?%lMQCeF{^QGoFA?L($KK~I_&RJewC8Qim@%gBwizq%u%0ty=Z^b- z?VU|%8)p!PpCwYX*h-B|Qf&n;)CPgT)uEJPLyKa34gG 0)@Isduk7*hhj(q zfzl8PEh)62^k(c5<>nL}d@#nRM#jQ8hqWR#vYk5H1mVg}wukMvTCIM(D@*pu@_Sk7 z+n>>4UuM3UcSb>pbWUgVx2wc6GVzS;sX}~10`{K@BgiDY9bgjDdK5_AnKnu5CKK8& z(XbVbLb`6ZUk{?R5Ok 9_#nyt5A}hMGQj!GWz>ulc3r&yES(x(O zkb;YqTF*E7Myu+9g+c+5bkT-JB~?{XRh7MFKoiNN^!4C}Cix`4%;33OHSZlfcMHic zn TUu(MFelF#0*O4J 6G`P$-0= zC?qCk%yR)PjZa(R%a^|6;S-%pi~qLex3vnM>V^R4UcgOLs@u6L-E7|tTG@hBt6%TR z7w_ZKmXM39JSsjzF0P{QY?IZFadY-Qfk1$pv-inr$Iy4SE3OmXPwWL7^&1`}TobTf zVx<+*GXW }l^lkcqu{iMtQVA*VP$ z5x&mDCpt5wkAZ6Pb$mnae&8?+HR@#h`wh`(Yb9Z3GR{wLmzeu>fXrlBWu@ r&5wvMiN2? z4Cb}JguCe;om_Wh- VSuLEkgUk3Qj%yJ$~`w^JSUZ6s_M#h zK6oVxL@jG?F$Uy-L^4_RJg>nK0j(n@meY$EqbSPfW5chCb@RIYP{CN!@COlcwaWgU v{-sDa97NOiJA}0%*X~PHRc*KVLyP|a<>jGh9fpt<`INy}s@)qEtS}praC_f aW|=lF?4Zr?swA49kX%l5;|;PgWcanQXJWieDRPIj59uW~sQp z>0_vhO`BWd2%1kaRTWre6w66bW{xxeEXFXtsPCRhWrj{;`;-~s>xoxupgHjNgHQZ# z_3|pWi4Y|mjU_%;tBCn@t|njY$(5kemTBAh!px|@Rs5hl@~d%sn0serz}vmzcIx40 z I$3aE3dY-$8g*swl zqG=QR3Nna6KAO%P8g=~+lHB?|A!HCj8cAoKf^AIjgsnh1&%LU;b}v}j{T^l0^fWZ~ zDIQzBLD+uWvRk1W^ujTbV`=kT0s>Kh e)4`dm%;jy3pFg6- ZSy@~h ztlULFF>Pqc0;$H}BfA7GVr` MiIlB+c>L zG2z{*En~c8PFVO+M)G;>fX#)&aZ@t_6^1exY)lI_-Pf4tBAhwv
UTwVp1c ZbnOxeTVcIC}W zRazRwC}TE*K&y!jAn6F4%UxeT&mM{uf8S2M;FAP)nEO)H6-%s@7+IWvhki3Wkk&Vy zaIv41-p7+j3^zeH?q;WUPDH2Da70RvK|gz^)I%k|vC!wTlPA+n$sLB|`Ok+mPm(ES zi6G^X*}tDV`SO$Yk28|8Nb`hjI@}*g(|(20AoXi)A(V#5PQwYMT+(5(imbrDW*;?$ z@fTQ(;9vCwxAa^Xraj&^mXYM;@P*HP4?qBkDd+Vr(~%WPyzgD(U6b4we)aosB0EAn zZs^TTtDGB}iyJ6aer!E^3%Rrc8Pgj#`Z~=!wN+QgvFbI)%+JlKzPQb!qx{kCY$&b} zLQS;4J-v3ENPK|6lKvK A$% z5O7MAsn&q?_b NqJ`Z@qVYX(E?vFO~ zTg~ad*ymQYEp&vEJ?B#yqnT~_c><19e5KbgYl#iWXa3~=H)@JmxtS!Rk%VrY%t3T{ zM1&|=nVGJaNM;ogZ5Sjf18dq5=pxob^>~pZ&By8ZUMUr%zQf0VpY2yRguSIs&W`%4 z{oC`)8EL1|Kkr1`6m>R`mgK7Wd2SQZ!Xe&!o-73$+YyfQv}3*mAiA*$ouMFJ6rV+N zaN8dr1bOWYhVj6nqvHixw1<5XlcstbW8$2uSSLjH%i|XX oFq(#qH zj@L$SpBEwItZSJADgDNB$@tr+*FFr&BGN*GJ#Dn7Yx@^!H`7=9#c&&J0a8z|J1bno zn$xSZXsFR$T_Wz+?k4Mv{MN!QI3VZxBJMN&+_3HEVpwVB`HiawzZ7jzY4IB(5ZMgM zU}z%C^t2c`+UFQgOK_w6dr^;7Ny$CeRK?&1b5yds7h#CQ{VDnLF5O6%m9$Q?J&~~Y z9}2Ks2w1LVKNlwJcGWGu?sfA=C{U%VwT4ysD^z#0q`L2Ia fsfv=}&^2s9!oJqpwwPm`ti$SX}< zdm$k!x4G-9Ni)_=$#`wJC%^Cd=lOY6P>$tQT(oWMGTeB+98l1!uI6Xpiy+-BCIN?j z5awGCMOD_)EGX<)RgoZ*3uQ+GKm*x>l)IT6PzdpY?D;U+rFdKl!};Ow;la^S$i_Kc zrPeo&>UP^X#_iijIc;r%Qsul{7B|rL$dHWKk`;t869t7o(!cvhZwFgCt?4jQtT(5i zAf%x|ow^_(hHlGv^ZC{Y=jQTxTibjgmy_O=;D?21@KsrMyo3zq)^yo(%Y$ex#J`Kf zMU-eH7f?VWK}u{zKmY`q;xhcQ;eSu8Xb@0xarurvBydh{ME1^@J`7N%la3Hxa3Lm4 zPGRQmWwQ)PkKK0*Pw3$%-Oh5IfBehe5yC=CxG=1Tn-!;>%P}_Pisu!lZgg?vk`&9> zC%=3tw6=f9dVLITR2!Rtm+p!eeMtxP6iR(LP`9vX5&Xg K)#3@y%)Ws;m|5 z(!z&@v(}nUSp+b7LFMMJJ?(8TkfVW%oWA3w*Jc2NQ2;4sxOlh#EHM%J;X&jIW^qAK zUK0>lB6J0hBbBB+F86zBLkZ`>NM!kT3)S2Ka`V*&3gq6KFsLA5VPTh3&d;*6rM53n zFVo9_n3$8hod!4s#EOtUSmwf!$~;*S(B0imd{jYL2r33GBO~MC-0KAz|6iN#_aaQ! zX2X&Qx}(A8uiUQ(LyaxP#Fb7Rh{2^2f4;T+q97krs_wdG(rGd!3b@^~LreO^>j*yK zq$XFFwq&z_{ZI|Q`)jNa(|+G`dk#s7_qSZhYqAujp8okWbbH&>e!YW8S%g2oS6Sp9 z%;U6fUrgiU<5O?Dz&JsHXd1No)-vx4J2j z~gI0WH5ay?O`E2`YGdB{7h%{1$x-(N&T_ zQ&>gcWQYrUY*>9AgO5V}o?Nlnv7bi=IYh|eWA+xenotzv9g$Iz5+Xz;vWZHGpsw3K z$$NPe07be9-%kN{K!j<)N3pO$78zxb%M7Z7+Mbv>)V~+2yUR@cQb9&dMqMo1r7@B& zjz4Z}9PkYdwPAv)0E9S9SH5BVqdiY+Vcc@-#t|}9cDqF8BJkd7Lh`vV3WSxGWzM%W z6aDkF%;n%`fY5UN#^RKW%o2~AsyY<~H92Ter~#LD8-`GI+P;iRZQ|TQ;n^Fu{*p6S zMF?A0nBI;$iL2t94$kk?Ae$sMT`DpqIHyph{wrDO9`nyD>b7rTr{8=x@@1k#nXnZ; zM?rMS8ww3PI+I2Sl6m`!aEQJnox6ds)4%f|UNJ@?9(cWIb@xK4jCe2%PU##{<0ng! zs2j bw(Nvgws7nXEre_Uh@p!~)lPV8Hs^+DI$n~)UtY9|rS@2%rhE3v zpIqtsPtF Y>Sgp4jO<7VTb+vfVC5CUR!oqC09hQ6F@5|X*Ktu579 zD$5rlqC~sPjQ25d7!N)#po_Vo1QoCf2UYZtn|zl(+Aw!0-|P>S&G&eYSBn#SPu?7p zSN8`({Wv2rF+zvle%yrpj@@~+c4s_9^C`a&glht5;_UU1#7O2Q bi;wQIP-o6pHR6RjLSE}8a@jgeZ^LJK6Tu5-un2;xm=C+^dkPW4WJQ>r zl^C%FPEGIE=QPO1ajcVn@?@UiTQS?uE2i5y*p_79mEUE;g92^si{rh#c0}Tl7OIWN zIm1SduVx;F$ZB_hQaHl$TK 1GW|+a{>f zfr&{NsF@PPU_#CLVS*SR5i@H=t=Q%sd{+hY=R)f3@DfA_O%#7&$<8&s8-S*v#e_Y1 z3hcjD)FrZF*cF|gUwOwof9W&Xd}EXkV&7v6q*NRU3KrRM>|{}H4BAkB8QCvVG+5%7 zGnj^r;wmP#AMs@P7()yzS5|5jJv2En?;j&stRO%ZBUIQMWh@Dcb9-GC7k?IPrz;LM zdvfJskwQx}9ZoNHfcZy2N|CiJ5&J6(*t`$5Qe<`}M-WiqNeqUUmaz~3F5_CP`R1b- zOdt9N9~YY!KDmT(U_Z|EaX^gETKwL1ypdSIMXbctfz#AR4sV(e$qnZjT)1ra#UH^6 zCZ|C7nnwun0m=Or_u?-r3kGIS&v^#-4+(*(J@XUW9p(O@9 z+%F>x-fVcD5xU}htk`H38w8$`IFC{5_=`YS{i=YhyfU1S O%j%%d7X*{ m|9f024@XLd559~U z4zzB!l>FUTk=0;ILtn9yhlPbjx3k7dyX%9akr(>fHNPNhI`dX2mh%sDly=%->p-@o ztANeASt9s|+nJ+^hUtx;vDH86jJ>{sKyl>j5#c|LIE2~sFsn*ME{c{TP+M#BJjqq) zC|B#z_b}*I>se}c;U>SO^fxdW(Vd=4{c#P&on%B| G8^Fteww@TQFxc#Ad@_wWx z${F9+`RPwrx-5OXeG*&VQ5w^ujnsQx@^}UcIBH6EcLtPP=X)(NCUZR)U2>=K{S%dz zv*r^j>xH!`eVjyukLj=+>^QK)QK)fRmoPRh`Ia-v;im1RCyRim F z*Uap!_~ICJ;`cYbm^6HmT+t10^tWX%Z^QMA*FG$qExsZ(vk+isKj?W+H;>nLw~id# zo;o>33nGG^h1Xn$5Wfty! Z-v&-cR#DGp)r4K=8*ftlq+>r- 6sJj^YdAt|gn zs;a?-g;em#<7Gx-M+pY-mc=-skRWNTAwCp&<(ph(?Yf~9jVh;Mvy(g9mT2M9q597= zlD)<7<^v0YKvrAwrvAl9Rdr_bj2WiCzQHf0fF?TSrbb`xQM)>(wM?{HUv7zsR8SuC zv%aG7d<|0uf%0g>O3@(y5{Rjb=XfDDhaKWbZnw{P(@#1^EByuq7bjuP{}Rq|sD0HX zaoU(YlF=XL%OsJ)$W~v3%iSLn_eq^h57C@NrFU?A#CGp>*Y+#AKgUwUm}Q$wN)h#z zY4Q!qrS6-fYTb??uEG)@N_q&oU533M1Y)%JqVI7#y5U|#z4<}8C^$?Ge_GC TI}?4_R8W*AG2c{9a|j=FCCgeY!@jvU1tw+i{^0UWEccXZERm4+YA zDXH^>`b)l#cbe~xHMM6jdYi`JJ%(oDI}{Tb#JlgBanO>rl7*Om&JoO#b8tX^9xV9e zuIPY3c8-y-yiDBYW_6YDBwTM3*#AL6r>7O6l-2Njo$%`xdBDY@Y^{-O|30YN<2c5s zm*nabbrG`JP_=}^sXQ@qkawr=VFoAn#|;JY)Pw7@lHi_`YzE`%lXyY|^Jl?^0J82^ z{q)p7`jQmvS=Qj`6zh{kkMM^W(sqniuo3HNJUxOUo;gE;)87!`znKqJBs%Or+tXlu zU4D @zoe`S zgNxoM>~~kYR|i`kDhcPX5@9Sd4cwQ)6kB0^%XLM+oIBN-QDI9*`-|Hc7$&C$_w4Ma zWa6{Cs%UG=@Y*j1?Tw`sRaA_4f6&v@Q{q?G)g@X8->^bdg1M3k#;fSInj+iwY*+pG zF&c;;(}tyddQ^biSE0W@Ev3TlK(cyI0CP@<%yWPX3S*H}>z^`}^`%dhp2pM=Mr zeOW_GE2*tbVENatu=#l{TPaB;7!<5OWi^tahdRFgx2n@R2&-NGf|Oxca&W*!H#Mqn zD?y(%?ZjQcBBIZPIt)un)!NC)skpL|X?bI#hCaHts{@~i0fY}SXmK_Pu0_x(Y-;+- zF=y7lBlq2;5Ao;K_%b^cY^17cxJh#O^oUh5c*LY(>BO^r&9Y(1Jga%Damn6ME-5>@ zkPl`U3RRQ05e+f~J%=SAmuSG`#M^^f+U-rHpmzfoSpyV-m{{|JTH}> zim+co)Gmq})Hn@cTCdO$zExF)RYwor6XCKW;eHzp!}>m9dDXJ!=%uQfsE}$wK-urD zDo+Z9E;E#HlxR?e(I #);c=|Naj z_8$F#(a}-9%cx>AhflXjP7Q!^ZGQKz%tl@B{$tt$fBDcbqSpK+3i9)iqoe&4a79OX zd3j@1Rn_>GbBe0`7Y$%78hVtUvivs 82LdGv8u~ zPXh9h#!5f-ZaIUAV;S3Qo8b<~4;k-@tPBgnuo9?F?daF=FxT(*vMZBr$GwnJ5r*qf zeHOgG!-^Su7|XGq)&?ms?wYYv7kKM;#1Ur8>A|?Qh{uBEl1`lYvOU{7H8kfqq*S9d zH9cH+&EUZxF$Nl*EOeeMCDSfi%CMtR!saFWwR&c+a;Q(~_wTp%US3{KV4Ns5c^O5N zT%v%#<4hWtvh-v|h*>8bH|m%JMRtazm{pU)C~oM|Lcaza_oE{L2Q03ypQS)Qcg@6( zv6F%6Z%vJ{J`pIyskbYAruglg>8ME;Z=jm8ZO!$ukY2u`kiG;8O@%@~N;9xfhk1kL zTu1Be(=3(%XNh*;(TiGhWOL(tX94&P^;o?`szuqFBl(VNE3L0kuFc-w9{#|<0IP25 zdt{=-(c6E95`C%Bwz09Gk&k9HPFtgR5|vj`Q~NBF8^CY15r6)OF!&Pl$2OgtMCksG zAdp$%U(hhi_9n--7WxUk2)!+?sHy@-&ElO1Fz5V0@&HzOXVpXWzkPtVhcJSm^wIBP zrPoqsIY1>zVEnQAllmq55AADb%`2xgAIcgQ_gt6O9KZMNx#IJ`i!+S?Vh9XauP8+g zw&w%#1&B}qxx$_A-B&>7fe&TL@=3*UT(?&<+-xNM$&v7|g%KHuhGAIrw(v<@g$Ral zG6FwOnI*vFfibO#G38?RlF6^*%aIkRiD4(%DX(SW#))W9C?i#3q=agUskkg)s@oR* zYO1ucJ-}MP3x2Wy7Q^ffQUjt(Q!c5no;l*w(>GFWnS5RhPs*hNdZeW}ho1k>OYsN@ z)W5HM+dUB6g%>q^L}j_qu<54;*EGaN`*+#j!gSho=$Q>$Uh-!#(nHgbbNK+*7c(#* z 2FZWbY}LWFLl=Hetzh=`G|+t8V?y=jHuQ ze87uRJQj%Wb%1R~!pQ%t4(Sx)KYwg&gyJy9ifh7T?N0mjY*UN a?{HF%D|PJDDNojHjGqV$d0VhE>6nqD+*PjFm3hk_F>nMD%eH$I62u0YQHr zx&yG$KDL*1;wd;|q>*YNo3sl+72snzP^duR4E QrNqGW< }y#!!g$lpRi1}(A7er#E`d%Dx^ k8X6K*9GAdSO()wDRy&Ce`1L+6!%3KZpe(N;=M5yUT#KLN6Yb%%y z#Wfu^ d5vSM3ft4A=80Y?8~&!g80U_jH#sbkgzEq~4jJyliJI>0?< zQOXa_m`YMOJQR=He~#LXeD)m*hDDY!&)&}tN;<>g%l_~;f@{>E#p|85#SQYG%^V}z z&a(C`_cYtx P1RCd{UaEF>0+I>GVG>SO-j82`g z6N8I2r>Cbfo6s4%(lQ +=OI;?EEFp4WCgbg zOcD4}a#{3F5xn`uemMF&N6y=JSy-))nzA%+oHs(JdeucxoFXRtUw??zRFhDU2O*;u z)YRZ^bh{v^R-hKG##z>!?+afUWYP~LFyAGeJeea`VK8s4shSDmqj7|c-X4Y>y#+-c z?`Kp{V!rKw2&N{X?)oK)%Te)6bi2zYNdnGe&y%$a#4T&uSOt=~y$}1q$k$?iWJ(P2 zNJZp2nA$^zH^9gwF^}O;O3sh$CxAy- 5V0WoTFUtYU!2l}5Xz=Kj6Q0eIlZAGomHwV(N>DX_q%-OL&cm~Wzro(pl zenw`*eEVK$mTq@0Mme+L+45Pa!QYfMVGm8pmqELC*VTqzo O_{pp)T HIkKl^Wb58h9lDYmKccMokrXl2~R`8kUg$oDoD9jc+q9n}Pa6TK=M0 zSA31RK11>P?h3brdX`aY3?Btw>OHV?b)Ao@z+0}rfj%8+S(JjKsVM=4N?%hQ1DL`i zU!kNe@fnM1q~1PM+VVT|Sifb1TpMitY;)uJM!=H9Zp*6)Dk! !$8VRlS42Y(8T?K^CT-3!G zRF?~*AF*f&&aCP23ZI{!0k4ZXdgd;N$`{ShM@biHsN%`d#fGYVltgAo1&^Qyl|!Mm z9r;kGsx=I8X*N&$nxXyo6$Nu$PlcpiaF}^Y$mUjh6QP&?InnBM=f+m`xiI=r)c{~D zG+gsBkMT? c_oe1RO*R@DNt~=2xovpQNl%jdFrBp605-O%AkU_j5bq3k zzb6qkJHc_ol08qMZ#)J_Dn*SxdbR{=OHjfk&JYWQ5(Azz kA`kQ?HSYuO!G9k7xUgrIvCcE& zX#4-(_CMw7W^whvg0<8?un+7|XKL9XUkE|)e~4Vky;f=UqFMU$MD$TEHL8@L2gRyI zTXPYsX*LmvMNV9aGiU-6V9WRK-)q|2+kxA6Q9yI?0u}H(jN5YPa%}J+Z6p~!I<9zO zikc?oq9neBBzk0|1j!`j^%&&NL|RB^W1899bT8y`pQg <{E}ITf;=Ai8oN1mVbSG)e%OOD60*SA*+A+v9hvqcXhZh5N@YXXf6WQO#5e5 z|MncUW&Bv_6^Q~BFM2#RK%nsNK8_MGF~3d4sw2}Wz7Vc)*(D?1-Rt+iZ|D(|BgRso ztyJTxONqTEA4vLMT1uOA=?ta_@NsN5(kEw0)-?Tlh-4vOA<1xBmf}et4dB{W`VuuT zP65DU0Ob;8!BxpD0CNG-)0`x&&!lxLr~a&I3P3*PsGI5#mJk411N=utUJw{Ck>k_T z)3ei4nnYQ14I~z6(z|W@2E4wL_xe5*!#KS9k)-={YNn@mc7G&)%OR&PWO2BbD)#7C zPtlHX{4KPj8gm8kD@PMg3MHa1P8Pfkj} DPtz=TWXOz!)K%6?K&EID!Ko zTZdG~ba_g_%v+7>PcnyYqKZ%io2J=ge{s94h)djb3Q9SPd|ll9e06b;p@V;8PD4Yz zNY Xvg0w7WY{pNrT- zO}^yi dLLCD*xrI}bL(8@uiz-YcNkeBq0OlIGO8&JiL%AKI8k95 znx`cxo~B_R6uepKwgHkQ643TT689>)DcADn!quo1&$b8+!ua)reNIjeKscFU^OLct zq>5C_0A4^@Tn5BLSxt?yDxTCJ=;GvIKb?R?ln^6A?mzRDQVkSp(&-5VH98D(yyPWJ zk?2;gGP}q2nsRASZ{ro@k$D*uNwjKb`%|T-BZx_gL^MDMKwO?2zj`PXurE5$y-Ym0 z=m&`cEQMLl-le}@0j7wsgl?hI1trvY!X{I{G1UoJ^>xy@N`g{);?d1zYx%xhWawqn zP_~D!U7DK>#!x;O>-yZBEVcNq0Lu@eB++weMLx#itU9&El8gp0eQ;XImzhly=ASr# zQw=Pb9~f_En%MBn=Fo-t<{_I89oK`XKS^{vukBnM?)(pXy{^GW{7&d?@m1lkv1WrF z#OKKA%SNvxPWmJPMr|!FN%1$;3=%U(AD%82dv2Z3^sO8>9_9a2S$=bW@G%~#vaQ`E z+f5iQHn#Mp^LSyXY3mlB{mEFa=li LUC5;2m>r7ArOh+``QDy7q8vvftnMA)p5X zK#-qqJ_{-6iv*KOX_3K$(nki}xf+jte_J+`y=T82o$&};eH$|KdppH~HA8&Qxbx=j z`S+*)$ih8mRy^BG Cg}YJD}sqy;741`ATBfK`q9eL>ju^!EN0EmqJIX%thvx zH7Gc*GW7|xDRrAT_s0Nzw9;DqG5FXTkYF=i8Y+FTA^`NXxx!W58V73;q`eYI&Bak_ zDmuL=tL@>n!{@GcxPm4$ NN*w+F&?NQEiKqhc#zg`@{( zQ#Y+44atJO%z`gaW9#U^C}}=AAWH+yTH?1;(r|S!qrT?A5Boj;Hj*&DAcnP}7gfyp z{U>czaGtEd{QPKVqd=gT!A>{(Ib-xLuH4Y_$JR8heIRoL?;1!Y`cWO~=rP^S9{DwI z#DsNJ(kCf{N$u?R3_s>LmD>e}A$Ew6lOFxWXt2REQ)VPj7%<<3 L>E)%kIXL>6#rOc5Aj|}i)U-6nuiZRRZ9Y|7oYR!^G71b)7wa;p zmu0XUV=Aa{J^KG^V?xPZL|KD+H&4PuuP&OaF;*QAn_hxXNVt^>IIEnbh$m_4r16l} z+H|Pgp2)JdOc2NQj$G3Vuc2wGma%b|-YW^)|8CXTGY(!RY>E3%ll4bbhyoKkd+)c~ zE^(a1c!P)%&c(XIxtxDtga~Y;{(If}^>LK$#~*i($6;61M#}%YndaIW1ga+%VBC^V zb$=&4PP(_Ik?Z_qH7~8G841RF3<65c{tru0`f%g^X8~mC2#&S&1aoJ?aH+*p sv^-Fz(?m<`XQXG0( zn`G5dy_7ClTkt`+db}HcjG81UC-q3{qaRj11w3)DVcab8mKqiN;p*VGM+i3ZBvv8P zy^2ti@zG)L%cy65iWfp^6WTd;OAB+M`|U@!NWnqbbUE%AT_Pgou9lZ~SY9!S&b4#w zwEbT`VYQFutyp^+$_;%(f4H|v{Lz0S3BpZYg76cF`ACjO_^ZR#b8xUkO@=_a(#z>; z!Ym&Nm$*t4YG_lwCUURWh1XL=pWF6J3V)*ES{WKHCA})u#2p pDjT9q+(7ET%~hIkP;NX8A}%B37w^m?Oh?g)L^eXg zqJ83$xtEcb)c2+w-l3rkL bnlq#l1%ZnjFBDR!FsyO<51hZ^KHB*uNTIc)&xOHe5@$+D z?(_1jB7vGP*X+leIlAkDd8W_`K3O79llQV*D?1g(QvRuleuyGIbSz(3-%ka(DX_l` zl$>lSwkumd{5f9ObI|;y9Of;mca*n2d{Y0Ix3OsaH)F}me1qTU#`km?6{WPH@WNlf zu=OsRT$zKDd-q2OuNHSP)tv}wjlSPxJY7Zx@ul$(l1gGVY`?rXZB~)}q2zHz^iQ>$ zv6|==$X&`qOaysXJ93t#;X*op1{n|P0YeP|Vs|uNZHe|Py0p8m _D46JtX!<;-D?q>%;6{o*toCpL*gK16s5JE~C@15mmBs7UP2LCGr%} zb{~t*cKWgV;=*s4E!z60=^%E3HfKXU7X-_!NqHQhKHDUzJ1{0Q<7-J&Fk$6?(fZ`2 z{kicfW+k+Kol{)5U}mfIagiEJOA8xQib31F^f%`G5=`yw^G+QB0cL$#ARX5wa$5xf zM+f8nqFBm1$BfA6!26{6yYPo#0$;xUR0=Me-X7mnY&VBV%kfT7`CS^@53et!iZRGE zq~Cd%0o-T;v3J**99LhH)R42@>^uZnqIfinrkg{D^71~sPB9laY7r&>WBET1Uo&Wa zO)#1zRgeV+2t126gth5fD00m0Oer_Leg_OlQ?-E<)S9 hvfcBY@L=E7>qqU_bCsgopB$%{zh}Gl`a4X8tqVo+T9kzx zxr2DI`+cS*{Y6~zyjN{OPU4T^|DTmLM2m2 b&kcp|YfHvY3Fcy5`YZ9&n|e-F z`F_TOj6J5(e3fG8Z(54Q`v(PKA;CnIpf5yQRj}OBJv0bZJc!j_P{wr-bjFdb@XJkL z(ljCot?gs}pG8qEcF)pkfM5LceCERzkN5vT1rT#_u2AabF73T|mlHh5x6S#eQcp*N zeJ?wI{WpMc|3)YK;V4z->y`ued2D;00gKo~0G&KA()2(lKT;pcc;`>NN)@{bn#t25 zk;dHu#F&4KFJBGm_%^H>7fK2l=U%~?qFB!7iViMk?IGgQY{Oh-lVd5cH{3iy=GU2d z)9JA>)Ayf(bV4$k_T%erEL(rL<6M|h3G8u6BJMWSXVIgJ%?p}M?#zN1R)EFr{pEmO zNuj(2IK+p~W7Xj{AH@{~-yIw4F_n9N)9Bg126Y)7a4RYFW6ldBf`D{OqeF{v^U4Rb z!1lM7iv^okN1HQVT3=?st^`)31_|x&o6eyB>cfg8HWp~yw%B(6Tb;QAt)DLUAO3pV zJ`*`kz3nm>oMZ1;ON!GY`H%tbMai~|a@NY=C}+$rs3(``F}E-`733`0G2zMVwG| F!(_%NOVS;C?f$v6A_-_>90oH+h>eMNEx2Q5i&Ka%_GXIXJFt*;cr;tZLxA@H8t z%}9E%yc#z&T2z+Yd+^j4 me|KQp*~ns0i^NPs z84(Rndz qDWQLvO)SEf-XvSl?-GJ;T#!XBVpiZ zY{Zx|s%9}v8Ay&rqiLLmo&%C>x)UPqK)<7rB`mDUPwBFgLcB-@mc}JD@z#`G^s0E3 zxFE?H3JjB$w9vwXfan#|PMgB0jB$N=7amSke5qUY)wjn=xJu*Zzty4}GNPdLZF$?x zI!+(c(``U~mTI(JqSmEh+fw~DOhLQ5X4Pfh!aUPFi8#?W1OKm*!6kyyZ=fV#gDZFY zdQogeQl5U9pzOa(5H8U%`;`=ihbey}PDBnm>5(dXxC>zkTI8pba8VO?J9r4q&0L6` zqy(EfP6IUfh9#~{K!7YVheKr?Jrg^2qgfz#WOKz0{a&Mo5H>p0Dp_fqY2GJO$!Lnn z2spv`e_9Y6`J0dj-h6Y!G_@OdY-W7)r}y4&1XW34n2_%HrI#sxrtT-=n(QZ)VvUpp zx-YsfADCr0nUr_FCX+{}MB`kVL&i3u_N*=UY&u*oB@$8LW00~+e9Fs8zk?|-1MDdz z+P*ZP{kFWX3r0I+o#Y^Vd|DI>cPFqSit+!S+QFCBAd~NWZ{mab#qa$qSd~kaWFUlS zEwP4X @Fvqb+&lNmAarg^F!{SiqRbtR- z_Q0aj1FN4f_g^ mou7J3v>njkXUV;YcS3%f z`8S3 VjufGSmJk}rM4jj6d5xZ_>`O?Ja@l%h`!TN{tSe5K z7Rd!35sJel9y8gp)EaiB0`h#HV!F@PyT1ASELBS7RMerg!72@c4QHCaGxS9TX+3JM z3gg{$7}~DfdwL;(p6*2h?+3b^y-^FGJ4HnX$_AREoNeA`v!);$rLbfkvp4j{e8#co zO=astNM4=sm}i&O3E}-E81S-xhYR|IL7NQMs{#ek%Z1$8StE_*_AkD^K7(mf*%>#? z8VCr?#{I#GPSqj`FWb3DE_LUHWx0$mvj)Kn8dS}D-;pX)t8s3l2=W5_<{B&1MPL$D z&Roeq`W)^NxaXX%rjA_CQc;N39jRa-5Pi6%_`sS~(=7qhlez8t$9w8=G4$G-oP5>8 z3p1dTm gqIJ;@Y6Fd&(r NSNn}2pfC$DYU|IrTGEZUa&_p8Ni z1F*qbi1ZWLvCA7`7c8U;R*@Dvc5v0%sYk$-;09A%_=C`zffXgT+Vg!SvHWEAB5$P( ztEh^uZbh+M=f86&QM3Wo3Hrhy*n5_9N~4=4;oZf67zfMviI(vjn4-`~m!mySx(S(q z_|2tUxV!Q@?A5g^#ttU%XnO&Y%d~f1+@Uu?d-8I?!MS6WO5jD|O59(*fR|IJKs}hC zbzBxsp%Sy#*6u=RL6~vKx8cy8Jkr6#=FRQ8oxyHPuSJH*ck34;1(<;XUG=s*=~o0^ zpq^5ttm4T~@@G9K-~GPI*Nd%|*R*2z#*c*~_DPxgLZGP90o-$w^3yN331*LC9S?@q zE|Zb8l++tE=@EzN7@#}h`3;0T&ur|(#Pb^`=7EOpwUDytZuf;X;hGm>5yB%cETkVA ze+*6r2U-pmqJBB;w+E8(dc9P6X+$43C4ZrtQObJRx7xA4HBxD~i`XhReLc=Iiuh>~ zF=iuky<2f0uo4yj-9O0KF2Orm|BcmT_Px;$+#$@fmCncTsc$X!eSa?2rZlxQS64N6 zGwXhLJyz>I-|b+p8;ZjYPQ>2z)qzaYEJkUtCx(?tBnDk7eTV1a(#N};F$ZxBqfQn? z+})B}kmVU~KIye}h8Mg*2vH+<%}`5|Wz{8(d={RB=XXr?|JqTs9_#v!5Gdyf`TQ+O zQk(L>A~5pXulq?iG+FVj`#v_7q<~R%Jcsj5nR4FXh%pIOBK@em0;JA|N`7oqMPqj` zE?!hpYT)j$WN*)j?BVVkdUDys-RQ`U%-8CMwHn~KD-IU>On)){HSSF5)L?2fmB&}n z1;k=rZf{21qQdoup`H_%?2Sb+^-iQpa&qj|4U>or{|mBTrRpxPC>4uHK^JVS++D8~ zm-{@lcM!r0N%P$ugF(G%WHEIKX?jFMgn<_d3FvcIrBmA#dDhG2HhEvCfzyW^$o_9H zIHy7%aRdRusop)-UMU63zAe|HrY3ZGu4oiosPn<*`*$Mlpr2NgA#09(ht0;V_6^?z zUPE+QRB2qtzVfavnOlx=VWzwLbD=S-57flYYrbUH@esdq=+VV~i%(7UH#Q~}cplgY z&G3h){Lli)!>d1LE6s?sBh7TZ^x?W;KETqmmDp|EksNpqy*k^UaF~dVZ@~2Q13Bb5 zdwYcaCY|X0NWQC+)_%=RP0QoI@mRNj5Av#8QIP;eesOedL5P)}rcocyHEOUPzZ=~a z78L1yLipl*bD|5BeMwc0-x(hHNl&8vxw?yeP&qwpR8C!$Cjgc;T`!dX$_^VtMn&yo zTy8GeJ6ju1>Bn{!g3(Czo-j<&{J?qH;a>^wHKcA7IslIJrrELU6CEFH{q@XjJzJMu zAfrb5B7vsy@$W2U$hCrGQ1OOQzrMdNlq86!gV?Mapt0fqw9sigokXZ;8({dRTo&jA z3a1)W#5Ag5Fpm{+Yp9-N*pQ%F?eO95+)K@JvFOwEt~vB?`~50{1mg4fjTZ1p6J9x2 zKgO5V56=rYL3jRYJ9JlPc7YlAdi!@H;C_rRK1_ k^I{*O0xj4@vWiO+P0qIv| zc;yby# qu-u3!;%L~;C zW~cMp@x;9o2pWxcapudpb6!D8Fc)0S-M(5oD@1}xhdRwtC>}uHY^Pb`kcYI=^t@SV zyxuWfL<}558P9{O{mk$$YtO%Z@Jw-E)m8PiIP%X=f2{pTW$PFv9U^Q{KAkps`Mo2W z*xy00S&Yi}&X&BbRSqG}e1HdY>yh&j;0mAx-V=a`3U6Dfe;5gP!lVR^$F04Fq+*i2 z_SNxS_i_3WP};n55iJM$!aeV4f c0B1&f{vLtoG%1F>5&ybGKl(X}mYNXm+H!sE}Ee>QK$nWYP0?-u@?+K|iw~ zifss@bnS+RV!y-Q@;M6ia)BZK`FFcA|6}b}C06)9-|)JqsdEnuKmG^CxrdQJcN6xj z7@(=|mc@Rc&1;{LL}gF^{ewhmofd2C!srls`@55dDHUCRvO(<+Ve*>po}RsX?gfqZ zXp`Bt17ULeFrc^`>wyttEVuoMzDd#*O2O4y{?&m!)`dCHi+W?45N1o+n-hp9nIO@3 zcuhqWc(Ik+?GdESet?^!bS}u)HR6k>6)S*Va=O23oE~Easu6IN_+q7*{SNT+TeM_W zZ_@bgl%PEHkIGN&J`VXgIYu#q#2Nw=wZ(3zYwb$!H+sL6!KCBHobG7GAW;*5#s^$F zYDAAW9_9jZrMcdiG{WcIw!>eU##zj!RZ8RptfTBaJh?DQfx|X?a^v@ lj`qJHoD2V z-w^DW*Wx$5A>b*mz?!z#BrGDQ67qJKdf4gi@u9QD>K4ENbiDSMO$9&n(KJp`RCO#j zJM m;HyJO$K$Y1dxBw{K%j73S$wq0N{g<%HS$M;c1*apWu3yvoOE(sir z1uKpW478Zdz0RUN5Aacue;)}imkR82iJ1#d3Ob=i3zgj6h2E-Yi8%WB(x0)8<4<2w zTCdwZ&1Qa!9b7&pe>93-27$1D|NFlHW-omsxB>NJ<2nL2pPVtt1Ib6`t;|G0QFz0) zHjLExKYo>d+T60b?MciF{zl!iAt8>Sc=!DI6)qfn{0rvoE~h&GjDN?cYg^Rk9J&qT zD7ugmvK!>?c(;PYTGCU(P>8gq0vbv%;pGKByZ!@gnlah(Om%B(mp6{5XCtFjiJ5F& z89as;w&&@3sIaf-51KAE #nbHI?ETB&G#giR|0$EZA+Tc)yF1M>m%yfj?6vp Mb 0oqRm;V$yP;c~-MQciF>4FUowt&e8*EfW5R zr-KyNXA|!wC-zgghZAO>hhTj?GyBGND)z02H&kG0hj;P8U8dz?z5x;fh$Gpzd;ZJV zZx(#v6?Kp9kXS`V`|QDw+S^FDzpvLhW*mXtCSlg>*(e<|9;&KBk|;u =+Bu%oR`OAiA#rAXd$o* d@rq7sx?#|Qjl#PYWCPR{K7&CS(R8@tlMDfvwAL8Kt zeVBK_H1zfNp}oBwm(Q<7SLc}nX7*AV4Po^V3{`nkDi2{U?}c4E(LLnaem=kdP$5yS zjwhiR$r#chn-$vIg8oU9C)Xc2as;j-4^Dh`7 odpiytJcMgk-hj^bQ}4C*NQWyc<82kDq$prS zVJIeGnq7azsg`$N|K6m@lmGSocQ=z|SA793yLVznIE>~!pWswm8!oxz5`@BGoH^YN zx66(9w{C$$2C6H^VcUCKF>~e&5Xp{Wx3llq;e%hVoW97k_OdW3Qvn5-V9q7iJkfFH z)SnhCUWj)Cn?R_7w>JG1Wo{W&<4W<_r~9#G^Je%ry@^vNKf}BWrs7QNF*I#^ABz?) zKv`KCY8TYfJv*8n7(ac{CsuX}3Rpk^7C772aaS}PR_E2szkbiooftEIJVHHP*t_#1 z^z`-tih^ Hghc{rcbkuLqLZFbFu5)0LaqD%j7j{Q}G}d-dwb+)GzH(sAa@*IZ7=^NTLLFtp^d zWtcW&7W(`9QRFGbg-b5OS61DIFW>OBvlq;r_y4;~%4bZRyY!V*){2O6LG%3|Q?Oqk z#&E^lORss+=ku-mzrTE_DiZ3yq-^Z?hH2BLt0m=QTn?A(VCmR#@7TIaKRDAzx`-q7 z>lT(LE1-ZpBI6*;_rL#r nP+#~pX%y^^DV0y05HL6}=^ zxh2L`y6v{xhSYWX`q#fsgF$V))&BkahunSv1!M~&G774y<^x3wC}5;vL=uqFg5VV} zI*<_o^Q}O#Y(1r60R@aCj7SAkl(g2rC}5O=-aGQsHW@`h^X&rW+y1$P3tPTx{INfr z^Rr SgKGt_XTkuak^ zV7>`px7+h-f3$-qU;Rhlj(IP+@b(zD^ygz l|Oh}k6JXu*h#f=beeyzLQ#59j=hL_Ya5`nyg-?QRA3 zy$ZFv75!Z&5&7iLDFtJ);c_NI#bb}fyyqH!toBm=mFlr%$mmHXB)@KUfq=OOBcbG} zME}H#AbBcNCLcpCN!WJ({W0&k1S8e)`>)6G`>&7Lm*`k37?DAkXf&GD>wW#}U#F_7 zf>H`umZ2z$k?N3T8FsrJ{r&xrBngrv#o6b75ZHN=B*o+_*^d_A_V>U4Jpp2CYngk` zr&?rLHum#BeqvX^X0vJ2 x$rX5lt-53q0ATI?*Q5Hemy#a4@pvHV_Z^W0%qE_A;t4u=^5neOW+O_b zOqr4w`%gUa1ikm(doBBGxppJd1$n|x{6ZRn!T(SGoaF);!4{r>DJVILweKD?)Q(}n z^z%UI6aeoSBuoVv5is9Dm~5h?qy)iWFyFV47qH=6BC;7Q`T3ZaNjAvLC*J|B@7H$! z{aPPz_v<-L%2z-35`M6JCVp}^FsI=zJpAw% g!+!i=`ApQldkhah{4icxxDeNG-)_7=^w2{9 zV36;4imvF0Bw#j!Fn8Q>2g%oX!r%SwcLW&v@steWK 0|2hyz8x(sEdVs~?Yh&4`A_>%{n$$e z2@_#N5-{6fL^xONXB$e#7HW4EA?#k5_V=1U2iV0a7*jt!=)$X>7zJ&6)*n|DL+|y` z`E!6>Et!2E9<{Z#Si5#D9)9>?ELgArJ9g~A4}S0itX{nurvc1=TD#9w$OmMYhOpTR zye+^Sy(j)c^K@66#I+T=ImU>}t_Sm}sO!#bb}f ud_EtJ-+w(eE}t1gzMS*{^BsgKjD{G#= pjO*}c3wK c?KfCO!QS2n0}DTZ>JbHUR)OZQ5k0-mW`+ zrsp#oJP|V@pv&dT ^&hLRj;M=O_SNwDhW!i71kg zq2hL*7JSjwj^Acr?NcFND#Qa|1Xq? E1cL4Yw}sy%!q&yVY%L+ zMqxyJ?!c2Ull ZRm#GyAMRg2? z`q1Ckjn`h^kdu3Ad)7ZthQ|7T-1bOAMg+|Fi1-4A7OA?R7cISttXua21%MUTEC&Fz zwnwu5Ysr(1k#M9UBNsH^eZWE#bogTB${Vn9 IAM5F>Ix zZUMs+7fi3FPL~@;j<=I^$j1}U_ov5 k$O1ICz_E9T2P<@%<##< z<7xjg^TcED{pm6Iuhrd3Mznd?0J~oYAOv3KU4x3pt{HGcIbyPF`men|jO$nK#{A z&MGoqA28p`gXMd9v;wjNE2SGWcE6rfCH>dlj~|Xy0_Ge1YO(?U(9Z>#E&KO*)0@O6 z+ju;XeA r*l3=j*^G*H&Mj!#jb<~Gi3D0%= z1!NZ^f`C>JnWzA{dKk}j`({`f{ib1So$Z+d@iRn51U!E9H9EJZ-q_yLybaY;R^;SA zAssg>(ZgA=pFOOMev>Y~a_PYKo8P1b5@v?9^9hW6RaH}r*W8+V96$P6*83BKd5Bma ztzbX95XlDsi?3W7qlg8hj hFyP~ofot;%#=>w$m%b$z3Lv8;)ub1*^h@rGE+D-*# zE-0WWVJ7{+b3G53QB4_BKK9C{`V}y|vCj4kVQwcwrsOLiLjqP$SwWcMb#_*fY(+qG z8M#Zv6+74MC&S9 #YLDB%8mtv zU&B!bE7y~O9V?_H(nCrLSXLIKfJUr6&D*eVUzl`uR*|_i_2}%ZBK!7*$)4tI2Ju+? zbTAZUWr #=WN7yzKP zuOdo#2Tj%=9IWe=$%D*q=iB~ZkxToc>*?7Byj{NqmzTx6qtCwTMO)iE03YGmPA{se zZbWnQ7TP&uX`w%u00{}GsbB0q*4I 8ap;c9b_khj?q!b0!h^GBPHS%f7=DV_%Nk8Wo1Fy**Tze zeEU>jHMTAlb;?vt`0Jj-_6z;AJR@Nr@Jw3}Wo1Dl&A`CiO8=YM{P+q z-vW{laBM{t7@3&b0Wb*3zccvXe90hfI+4&^6%F%9 M7>5rZMj-;497$bJvDTC20cXu}(9X^(BSpdI0r^_dbdXCGNaff6 zT(@tAb+%`SS!o%|3pO`5$DPwTV<{<+FEylHj9pbV1;>xRX1JZf;87eu`dVC|rhw58 zM#6%-nK_2lXb2#66-Z}LYP$2PoXhspL80h+@JO40R)Ljll%6r9@(>36e!?Cq{ zkegQ*=VY|q~XqeP!B-<}wXpm7KP#o!?gm>hm4>*!1H5v`}3&=f&{lvWDLzt}Y zF_m@&`vnXaWJJJV@F=RMEQs08_OygN#A0IcINO)Y=^V~w`+#*RnuxLkg%J?xAZ-Hj zRWI@Tb6)|UNx^c#{@{@6i1?bC8UQE^LrMcF5s;r^Vo&onXj4%P9G_cL&-NSbhN23F z55wof<;s@*L9J3mDKG@18u$UZ9^u&G!-sQie$?Xs0S3`jOS`4(ga7~l07*qoM6N<$ Ef;RkrTL1t6 From 0f2ac26c9ac604e0b736808d23f308566cc6caff Mon Sep 17 00:00:00 2001 From: Nich Date: Sun, 2 Dec 2018 18:14:25 +0100 Subject: [PATCH 10/93] adds tooltips to radials --- code/_onclick/hud/radial.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 134949bf878..688360a8aaf 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -17,10 +17,12 @@ GLOBAL_LIST_EMPTY(radial_menus) /obj/screen/radial/slice/MouseEntered(location, control, params) . = ..() icon_state = "radial_slice_focus" + openToolTip(usr, src, params, title = name) /obj/screen/radial/slice/MouseExited(location, control, params) . = ..() icon_state = "radial_slice" + closeToolTip(usr) /obj/screen/radial/slice/Click(location, control, params) if(usr.client == parent.current_user) From 45b5bc20fbc0bdeb04e169f7aaa7ea8e14b4990b Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 2 Dec 2018 10:01:27 -0800 Subject: [PATCH 11/93] Adds sofas --- .../objects/items/stacks/sheets/sheet_types.dm | 6 ++++++ code/game/objects/structures/beds_chairs/sofa.dm | 14 ++++++++++++++ icons/obj/sofa.dmi | Bin 0 -> 2488 bytes tgstation.dme | 1 + 4 files changed, 21 insertions(+) create mode 100644 code/game/objects/structures/beds_chairs/sofa.dm create mode 100644 icons/obj/sofa.dmi diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index fbfa3f50fe0..9a1db8a599e 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -32,6 +32,12 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("lime comfy chair", /obj/structure/chair/comfy/lime, 2, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("teal comfy chair", /obj/structure/chair/comfy/teal, 2, one_per_turf = TRUE, on_floor = TRUE), \ )), \ + new/datum/stack_recipe_list("sofas", list( + new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, 1, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, 1, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, 1, one_per_turf = TRUE, on_floor = TRUE), + new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, 1, one_per_turf = TRUE, on_floor = TRUE) + )), null, \ new/datum/stack_recipe("rack parts", /obj/item/rack_parts), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm new file mode 100644 index 00000000000..473374f86ff --- /dev/null +++ b/code/game/objects/structures/beds_chairs/sofa.dm @@ -0,0 +1,14 @@ +/obj/structure/chair/sofa + name = "old ratty sofa" + icon_state = "sofamiddle" + icon = 'icons/obj/sofa.dmi' + buildstackamount = 1 + +/obj/structure/chair/sofa/left + icon_state = "sofaend_left" + +/obj/structure/chair/sofa/right + icon_state = "sofaend_right" + +/obj/structure/chair/sofa/corner + icon_state = "sofacorner" \ No newline at end of file diff --git a/icons/obj/sofa.dmi b/icons/obj/sofa.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9e250506e1bc2395bd37d13e1e1bbbed2eb7c321 GIT binary patch literal 2488 zcmV;p2}kycP) +7=J#%w&sg{y%00001bW%=J06^y0W&i*Hh i#VEipO2C@-~0iHkEOv#1!PlZ!L0C^0t`#5P1#nwpmqpOczaLbT!{ zkex)S&dp3o$w|efR9V5*&jsv502)3-g8KnEPXGW2x=BPqRA_ qiJOAKKN?+q-TO^hR8Td8t7l+}$*U3H;1>^ag_H0dX z?$Mur;&K9D>uqoufP%N4KLtQG2niWL2nhaj6p*n!1>SrTzz5q>AlnRZ8tck8#{M$_ zsQY?80ZgW>C4WQnnZbT}3}w}~&y${S{#Hq>pM^c(;R~OxalO7iR)FWH{P7k0YqOr3 z_j-OdhK+Hik*Z3a$q^f3l{(`KN&Yj>OnO|dxeTCt*8`B8C&$KNulMzk;h7Xk5efj{ zooNB&gkE43B2i|W-E26$cbS58vImfl^cE>V;sEDnMN=L!00~z_)U)974eVV7a18)O zJK*$ZZUKaOJw)z6f!R~w c6#7 `|cy7{P1kpz=kT?;-&D5)LF#r&hWJpPH6e-YcGNcX1f*I{)95cW;Zhn++_sJWX ziy81l*$_CI@@C||9QT)&g3StK02PsfWCR2XoJ(LXvk<}}C_M|on@N7Gj}&ma!Z76| z&P0Ly-WHtQxw8$+bctH%LfkIgMMHwfZO?)#=H~(mxpgz)$U-m|F&edlm%9F(zrK}~ z ZPr>A&h^t@S>~k2ZCirAzlx0;CJi zdjN?-m&xtx1HG^Zyalj%Z|!B?=LHlA$NfzJkzwE|29(K3yp<@6q`|BB1~+TH0|06> z1riVNk8xiC;*RqEHU$!H+*8ht`dxT6wCY~6rRGN6-vS_H3^!$WW~3S9cXn$kIAYvo za|gg8VH6gO>v*1P>bpz97Q_-<65`B_+D5QYx2^zmh3JXBRH~d=Xr=ym9-5eE+%hJB z5Vo-WRWldX6Cds1ap?fe63!8TuPp!1g$1=b-qi=PrX9fQ&n*k3;n>6wEk~AG4tO%> z+W_)6GKGRGzcIgEBY@NgN)YM+FCIFlJlq3_mPKqC;3*Zy5db+TNI&6?2@23^!DI?F z24#RX3NZp~LV$d?Rugudb^uz@qh1gKYym*^CiWVYyx}5h3{h>E*K;hQk}2| W|d`6##3D&j3SAZx8PgfV7H)=2b4bkIhAv zQ)EFZh?{v}A{7ZPsa$j~B;|dfAQU_37ebiU>r#R_{u1}F+q5qfNEEyY&}aM~hkXJN zMVs3!e6$;p%YHxf^};VLwL~_>8-E1=W!N1d{v3d00v~>(pm^Ri6Z{SfFr<4dbQQsP z+-p2QMX+O`lnq@%H@k!%`-Mfr&JLiIIQt8GKmk}|MQ{h8bKvW7F9Bp>f!?dJ0L;kb zlrkjkaup{E!qFEh0PZ8hBd3!lc%%IlUL(LONz}hjfm2^ZkP-)ke N@`0n zBLkeCRRE9!eui;6Qt;Ym=f5xE5<&);o;$st!els&dGMkD(bj5W(Q2UpES>G2Y+K|g z1;fZ*Oz~2(bH~ETES=#9Kn(KnHFmDo7v>kf77Da5%K-LSCkROKUS2?f(>^)A;!GNh zy%qq;Ql&{l1*HRopaTPcG6zE%o}v)vQX?Tg6$+LS)rnCE0Xi*F2C-FCQ--Y~ol*f1 zqj0%jIL)g^yaNg*2B(=16wF#qn+gDy3kAGtm4q20c#!&K?~PK?BiYp=Yr_}13eaD8 zy6!{T@J&61*Y`q!sXfy$&V2xxU-kiI_#UzT$N;EUYTu~tFWJ Rkp_L` zn*h*S0r=im1c&`C7L2iV>XRgt*27_c10eMVpPH@z|9s(RpD$=k91m)gk4PJe41o96 z-I^cB>XUt}574oosVM-6KUs+T3wyu>APq$g>(Zncn*sW2pda_;`asKlQC*<`(I?9w zKVLv*hVkq31C3~L9G10!0b>y&s>TAKV{y1L5+srKOq{}c%1m)QXe)qk#)p$8F-NIP zq165(TbA^$b)qyq836OkGDn(lRAa8uz&GdlYm;0dL|GL;y8j}?iPNwhI8FgdW~*B0 zI+i{nDGPEpK9wOSA(C|F>rBG}>BzErqp!X&>)c&y1C44JiGTzbCzlDJ>lgZXu-7|+ zbOdOHNVExJp}^6l#DksbkEwSqku_;SO65)lwv5twx8`U@u}rKH7A4B!r{{faeQH z>qv~K52l=&si&ar-jSUP1*G?|@M?7!ZB(MBwM3m9)$H6PSM5a%NC-;HR74P;g$$`* z@I8Pn^F)2V0Ov^0L?8nsDvr<8IGgf5sD_4x0HLN5!Om*ZI$BeY$cE&7D+9UU?r34J z)=UAya&;!5_VTHKf{w*k7A*Rg5)VLW3?`Te&R^f~1mP Date: Mon, 3 Dec 2018 04:22:44 +0000 Subject: [PATCH 12/93] Fixes curse of madness :cl: coiax fix: Fixes bug where Curse of Madness was not giving proper brain traumas. /:cl: Also adds some messages so magic immune and foil hatted people on the station plus observers will know when a curse of madness is cast/badminned. --- .../antagonists/wizard/equipment/spellbook.dm | 4 ++-- code/modules/spells/spell_types/curse.dm | 24 ++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 7940d5a24ff..0c190100364 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -532,12 +532,12 @@ if(times>0) . += "You cast it [times] times.
" return . - + /datum/spellbook_entry/summon/curse_of_madness name = "Curse of Madness" desc = "Curses the station, warping the minds of everyone inside, causing lasting traumas. Warning: this spell can affect you if not cast from a safe distance." cost = 4 - + /datum/spellbook_entry/summon/curse_of_madness/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name) active = TRUE diff --git a/code/modules/spells/spell_types/curse.dm b/code/modules/spells/spell_types/curse.dm index 31ef5c6f53d..fdb6c42fc5a 100644 --- a/code/modules/spells/spell_types/curse.dm +++ b/code/modules/spells/spell_types/curse.dm @@ -4,26 +4,34 @@ message_admins("[ADMIN_LOOKUPFLW(user)] sent a curse of madness with the message \"[message]\"!") log_game("[key_name(user)] sent a curse of madness with the message \"[message]\"!") - for(var/mob/living/carbon/human/H in GLOB.player_list) + for(var/M in GLOB.player_list) var/turf/T = get_turf(H) + if(M.stat == DEAD || isobserver(M)) + to_chat(H, "A dark breeze whispers, \"[message]\" into every ear...") + continue + + if(!ishuman(M)) + continue + + var/mob/living/carbon/human/H = M if(T && !is_station_level(T.z)) continue - if(H.stat == DEAD) - continue if(H.anti_magic_check(TRUE, FALSE)) + to_chat(H, "You have a strange feeling for a moment, but then it passes.") continue if(istype(H.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat)) + to_chat(H, "Your protective headgear successfully deflects mind controlling brainwaves!") continue H.playsound_local(H,'sound/hallucinations/veryfar_noise.ogg',40,1) to_chat(H, "[message]") to_chat(H, "Your mind shatters!") switch(rand(1,10)) if(1 to 3) - H.gain_trauma(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_LOBOTOMY) - H.gain_trauma(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_LOBOTOMY) + H.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_LOBOTOMY) + H.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_LOBOTOMY) if(4 to 6) - H.gain_trauma(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) + H.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) if(7 to 8) - H.gain_trauma(BRAIN_TRAUMA_MAGIC, TRAUMA_RESILIENCE_LOBOTOMY) + H.gain_trauma_type(BRAIN_TRAUMA_MAGIC, TRAUMA_RESILIENCE_LOBOTOMY) if(9 to 10) - H.gain_trauma(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_LOBOTOMY) \ No newline at end of file + H.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_LOBOTOMY) From ab50f2762a5c62d90db353e88b584e4115113f21 Mon Sep 17 00:00:00 2001 From: MMMiraclesDate: Mon, 3 Dec 2018 02:14:20 -0500 Subject: [PATCH 13/93] fixes runtime with paystand --- code/modules/economy/pay_stand.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/economy/pay_stand.dm b/code/modules/economy/pay_stand.dm index 550dce39232..342e421ce12 100644 --- a/code/modules/economy/pay_stand.dm +++ b/code/modules/economy/pay_stand.dm @@ -61,7 +61,8 @@ to_chat(user, "What is this, the 1800s? We only take card here.") return if(istype(W, /obj/item/assembly/signaler)) - if(signaler.secured) + var/obj/item/assembly/signaler/S = W + if(S.secured) to_chat(user, "The signaler needs to be in attachable mode to add it to the paystand!") return if(!my_card) @@ -73,8 +74,8 @@ to_chat(user, "ERROR: Invalid amount designated.") return if(cash_limit) - W.forceMove(src) - signaler = W + S.forceMove(src) + signaler = S signaler_threshold = cash_limit to_chat(user, "You attach the signaler to the paystand.") desc += " A signaler appears to be attached to the scanner." From bcecb676a52bd4e530d5d2f1a8e2407ea0d68859 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 3 Dec 2018 14:34:13 +0000 Subject: [PATCH 14/93] Compilation --- code/modules/spells/spell_types/curse.dm | 14 +++++--------- strings/phobia.json | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/code/modules/spells/spell_types/curse.dm b/code/modules/spells/spell_types/curse.dm index fdb6c42fc5a..51d4c84c9af 100644 --- a/code/modules/spells/spell_types/curse.dm +++ b/code/modules/spells/spell_types/curse.dm @@ -4,16 +4,12 @@ message_admins("[ADMIN_LOOKUPFLW(user)] sent a curse of madness with the message \"[message]\"!") log_game("[key_name(user)] sent a curse of madness with the message \"[message]\"!") - for(var/M in GLOB.player_list) + deadchat_broadcast("A Curse of Madness has stricken the station, shattering their minds with the awful secret: \"[message]\"") + + for(var/mob/living/carbon/human/H in GLOB.player_list) var/turf/T = get_turf(H) - if(M.stat == DEAD || isobserver(M)) - to_chat(H, "A dark breeze whispers, \"[message]\" into every ear...") + if(H.stat == DEAD) continue - - if(!ishuman(M)) - continue - - var/mob/living/carbon/human/H = M if(T && !is_station_level(T.z)) continue if(H.anti_magic_check(TRUE, FALSE)) @@ -23,7 +19,7 @@ to_chat(H, "Your protective headgear successfully deflects mind controlling brainwaves!") continue H.playsound_local(H,'sound/hallucinations/veryfar_noise.ogg',40,1) - to_chat(H, "[message]") + to_chat(H, "[message]") to_chat(H, "Your mind shatters!") switch(rand(1,10)) if(1 to 3) diff --git a/strings/phobia.json b/strings/phobia.json index 950ab0b7694..601228eb14c 100644 --- a/strings/phobia.json +++ b/strings/phobia.json @@ -25,7 +25,7 @@ "brig", "gulag" ], - + "conspiracies": [ "central command", "command", From ef4b2d32bce934cf1f91a4294469e91a72db2e20 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Tue, 4 Dec 2018 19:44:05 +0000 Subject: [PATCH 15/93] Deathsquad now has TRAIT_DISK_VERIFIER, and code review --- code/__DEFINES/traits.dm | 5 +++-- code/datums/outfit.dm | 4 ---- code/datums/traits.dm | 16 ++++++++-------- code/modules/antagonists/ert/ert.dm | 6 ++++++ .../antagonists/nukeop/equipment/nuclearbomb.dm | 2 +- code/modules/antagonists/nukeop/nukeop.dm | 4 ++-- code/modules/jobs/job_types/captain.dm | 4 +++- code/modules/mob/dead/observer/observer.dm | 4 ---- 8 files changed, 23 insertions(+), 22 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2c6de96739a..ee69cf03333 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -88,8 +88,8 @@ #define TRAUMA_TRAIT "trauma" #define SPECIES_TRAIT "species" #define ORGAN_TRAIT "organ" -#define OUTFIT_TRAIT "outfit" #define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention +#define JOB_TRAIT "job" // unique trait sources, still defines #define STATUE_MUTE "statue" @@ -102,5 +102,6 @@ #define GENETICS_SPELL "genetics_spell" #define EYES_COVERED "eyes_covered" #define CULT_EYES "cult_eyes" -#define OBSERVER_TRAIT "observer-trait" #define SCRYING_ORB "scrying-orb" +#define NUKEOP_TRAIT "nuke-op" +#define DEATHSQUAD_TRAIT "deathsquad" diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 698996ddede..1f5c28d3c2a 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -22,7 +22,6 @@ var/internals_slot = null //ID of slot containing a gas tank var/list/backpack_contents = null // In the list(path=count,otherpath=count) format var/list/implants = null - var/list/mind_traits = null var/accessory = null var/can_be_admin_equipped = TRUE // Set to FALSE if your outfit requires runtime parameters @@ -107,9 +106,6 @@ for(var/implant_type in implants) var/obj/item/implant/I = new implant_type(H) I.implant(H, null, TRUE) - if(mind_traits && H.mind) - for(var/mt in mind_traits) - H.mind.add_trait(mt, OUTFIT_TRAIT) H.update_body() return TRUE diff --git a/code/datums/traits.dm b/code/datums/traits.dm index c105865b11e..15715c3c888 100644 --- a/code/datums/traits.dm +++ b/code/datums/traits.dm @@ -1,16 +1,16 @@ /datum/proc/add_trait(trait, source) LAZYINITLIST(status_traits) - + if(!status_traits[trait]) status_traits[trait] = list(source) else status_traits[trait] |= list(source) - + /datum/proc/remove_trait(trait, list/sources, force) if(!status_traits) return //nothing to remove - + if(!status_traits[trait]) return @@ -33,11 +33,11 @@ if(!LAZYLEN(status_traits[trait])) status_traits -= trait - + /datum/proc/has_trait(trait, list/sources) if(!status_traits) return FALSE //well of course it doesn't have the trait - + if(!status_traits[trait]) return FALSE @@ -51,11 +51,11 @@ return TRUE else if(LAZYLEN(status_traits[trait])) return TRUE - + /datum/proc/remove_all_traits(remove_species_traits = FALSE, remove_organ_traits = FALSE, remove_quirks = FALSE) if(!status_traits) return //nothing to remove - + var/list/blacklisted_sources = list() if(!remove_species_traits) blacklisted_sources += SPECIES_TRAIT @@ -72,4 +72,4 @@ break if(!skip) remove_trait(kebab, null, TRUE) - CHECK_TICK \ No newline at end of file + CHECK_TICK diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 76dc6983471..5f069b99066 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -34,6 +34,12 @@ . = ..() name_source = GLOB.commando_names +/datum/antagonist/ert/deathsquad/apply_innate_effects(mob/living/mob_override) + owner.add_trait(TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + +/datum/antagonist/ert/deathsquad/remove_innate_effects(mob/living/mob_override) + owner.remove_trait(TRAIT_DISK_VERIFIER, DEATHSQUAD_TRAIT) + /datum/antagonist/ert/security // kinda handled by the base template but here for completion /datum/antagonist/ert/security/red diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index cc35b8f5d84..fe136774b4a 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -600,7 +600,7 @@ This is here to make the tiles around the station mininuke change when it's arme if(!fake) return - if(user.has_trait(TRAIT_DISK_VERIFIER) || (user.mind && user.mind.has_trait(TRAIT_DISK_VERIFIER))) + if(isobserver(user) || user.has_trait(TRAIT_DISK_VERIFIER) || (user.mind && user.mind.has_trait(TRAIT_DISK_VERIFIER))) to_chat(user, "The serial numbers on [src] are incorrect.") /obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index 5ed70c6ef7d..b391a1c7a10 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -23,10 +23,12 @@ /datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override) var/mob/living/M = mob_override || owner.current update_synd_icons_added(M) + owner.add_trait(TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) /datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override) var/mob/living/M = mob_override || owner.current update_synd_icons_removed(M) + owner.remove_trait(TRAIT_DISK_VERIFIER, NUKEOP_TRAIT) /datum/antagonist/nukeop/proc/equip_op() if(!ishuman(owner.current)) @@ -42,7 +44,6 @@ owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0) to_chat(owner, "You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!") owner.announce_objectives() - return /datum/antagonist/nukeop/on_gain() give_alias() @@ -50,7 +51,6 @@ . = ..() equip_op() memorize_code() - owner.add_trait(TRAIT_DISK_VERIFIER, "nuke-op") if(send_to_spawnpoint) move_to_spawnpoint() diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 621681293e8..091f3e70f28 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -26,6 +26,9 @@ Captain /datum/job/captain/get_access() return get_all_accesses() +/datum/job/captain/after_spawn(mob/living/H, mob/M, latejoin = FALSE) + H.mind.add_trait(TRAIT_DISK_VERIFIER, JOB_TRAIT) + /datum/job/captain/announce(mob/living/carbon/human/H) ..() SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.real_name] on deck!")) @@ -50,7 +53,6 @@ Captain duffelbag = /obj/item/storage/backpack/duffelbag/captain implants = list(/obj/item/implant/mindshield) - mind_traits = list(TRAIT_DISK_VERIFIER) accessory = /obj/item/clothing/accessory/medal/gold/captain chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 66dd3712fec..fe109ee0e71 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -133,7 +133,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) . = ..() grant_all_languages() - grant_observer_traits() /mob/dead/observer/get_photo_description(obj/item/camera/camera) if(!invisibility || camera.see_ghosts) @@ -842,6 +841,3 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp spawners_menu = new(src) spawners_menu.ui_interact(src) - -/mob/dead/observer/proc/grant_observer_traits() - add_trait(TRAIT_DISK_VERIFIER, OBSERVER_TRAIT) From 7646b21362e4244249a7e78ed786ab4cd00d3d50 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Tue, 4 Dec 2018 22:35:24 +0000 Subject: [PATCH 16/93] During the Christmas season, you can find Santa hats and presents in maint :cl: coiax add: During the Christmas season, you can find Santa hats and presents in maintenance. /:cl: Presents are 'anything' presents, same as you'd find under the tree. --- code/modules/holiday/holidays.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 7d1e25235d7..7bf4cc3c620 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -460,6 +460,10 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and /datum/holiday/xmas/celebrate() SSticker.OnRoundstart(CALLBACK(src, .proc/roundstart_celebrate)) + GLOB.maintenance_loot += list( + /obj/item/clothing/head/santa = 1, + /obj/item/a_gift/anything = 1 + ) /datum/holiday/xmas/proc/roundstart_celebrate() for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines) From b99b0876911e868b6017aec03172524edc5d8a83 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Tue, 4 Dec 2018 22:39:44 +0000 Subject: [PATCH 17/93] And also christmas crackers --- code/modules/holiday/holidays.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 7bf4cc3c620..a84e0712ee2 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -461,6 +461,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and /datum/holiday/xmas/celebrate() SSticker.OnRoundstart(CALLBACK(src, .proc/roundstart_celebrate)) GLOB.maintenance_loot += list( + /obj/item/toy/xmas_cracker = 3, /obj/item/clothing/head/santa = 1, /obj/item/a_gift/anything = 1 ) From aafdf97dcf92e927b3ee146c9fdc881d0d726d99 Mon Sep 17 00:00:00 2001 From: 4dplanner <3combined@gmail.com> Date: Tue, 4 Dec 2018 23:30:01 +0000 Subject: [PATCH 18/93] Requested changes --- code/modules/mob/living/silicon/ai/freelook/eye.dm | 10 ++++------ code/modules/mob/living/silicon/ai/life.dm | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 6fd896c9fce..dcddd4f0ae3 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -160,13 +160,11 @@ cameraFollow = null unset_machine() - if(isturf(loc)) //not shunted - if(!eyeobj || !eyeobj.loc || QDELETED(eyeobj)) - to_chat(src, "ERROR: Eyeobj not found. Creating new eye...") - create_eye() + if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) + to_chat(src, "ERROR: Eyeobj not found. Creating new eye...") + create_eye() - if(eyeobj) - eyeobj.setLoc(loc) + eyeobj?.setLoc(loc) /mob/living/silicon/ai/proc/create_eye() if(eyeobj) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 56db46c2a37..ecbac3189eb 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -20,7 +20,7 @@ malfhacked(malfhack) if(isturf(loc)) //not shunted - if(!eyeobj || QDELETED(eyeobj) || !eyeobj.loc) + if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) view_core() if(machine) From 8ada6a7a650637031333319c698150ebf96af6c8 Mon Sep 17 00:00:00 2001 From: 4dplanner <3combined@gmail.com> Date: Tue, 4 Dec 2018 23:31:08 +0000 Subject: [PATCH 19/93] Redundant check removed --- code/modules/mob/living/silicon/ai/life.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index ecbac3189eb..15a04235cc0 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -19,9 +19,8 @@ // messenging the client malfhacked(malfhack) - if(isturf(loc)) //not shunted - if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) - view_core() + if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) + view_core() if(machine) machine.check_eye(src) From e0df9bc7241d13be59470b9be6b4db2abb0cc5d6 Mon Sep 17 00:00:00 2001 From: XDTM Date: Wed, 5 Dec 2018 11:19:20 +0100 Subject: [PATCH 20/93] Fixes curse of normality alerts on hypnosis --- code/datums/status_effects/debuffs.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 863993d8895..eb8e1044497 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -88,6 +88,7 @@ status_type = STATUS_EFFECT_REPLACE tick_interval = 1 duration = 100 + alert_type = null /datum/status_effect/pacify/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) @@ -553,6 +554,12 @@ tick_interval = 10 examine_text = "SUBJECTPRONOUN seems slow and unfocused." var/stun = TRUE + alert_type = /obj/screen/alert/status_effect/trance + +/obj/screen/alert/status_effect/trance + name = "Trance" + desc = "Everything feels so distant, and you can feel your thoughts forming loops inside your head..." + icon_state = "high" /datum/status_effect/trance/tick() if(stun) From 70c62fe3553393f4114c1673fa1bddaaa9fea5d0 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 5 Dec 2018 23:14:32 -0800 Subject: [PATCH 21/93] T/F pill.dm this time with no merge conflicts --- .../reagents/reagent_containers/pill.dm | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 481b06c665f..9f5558354a6 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -11,7 +11,7 @@ grind_results = list() var/apply_type = INGEST var/apply_method = "swallow" - var/roundstart = 0 + var/roundstart = FALSE var/self_delay = 0 //pills are instant, this is because patches inheret their aplication from pills var/dissolvable = TRUE @@ -29,20 +29,20 @@ /obj/item/reagent_containers/pill/attack(mob/M, mob/user, def_zone) if(!canconsume(M, user)) - return 0 + return FALSE if(M == user) M.visible_message("[user] attempts to [apply_method] [src].") if(self_delay) if(!do_mob(user, M, self_delay)) - return 0 + return FALSE to_chat(M, "You [apply_method] [src].") else M.visible_message("[user] attempts to force [M] to [apply_method] [src].", \ "[user] attempts to force [M] to [apply_method] [src].") if(!do_mob(user, M)) - return 0 + return FALSE M.visible_message("[user] forces [M] to [apply_method] [src].", \ "[user] forces [M] to [apply_method] [src].") @@ -51,7 +51,7 @@ reagents.reaction(M, apply_type) reagents.trans_to(M, reagents.total_volume, transfered_by = user) qdel(src) - return 1 + return TRUE /obj/item/reagent_containers/pill/afterattack(obj/target, mob/user , proximity) @@ -79,93 +79,93 @@ desc = "Highly toxic." icon_state = "pill5" list_reagents = list("toxin" = 50) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/cyanide name = "cyanide pill" desc = "Don't swallow this." icon_state = "pill5" list_reagents = list("cyanide" = 50) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/adminordrazine name = "adminordrazine pill" desc = "It's magic. We don't have to explain it." icon_state = "pill16" list_reagents = list("adminordrazine" = 50) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/morphine name = "morphine pill" desc = "Commonly used to treat insomnia." icon_state = "pill8" list_reagents = list("morphine" = 30) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/stimulant name = "stimulant pill" desc = "Often taken by overworked employees, athletes, and the inebriated. You'll snap to attention immediately!" icon_state = "pill19" list_reagents = list("ephedrine" = 10, "antihol" = 10, "coffee" = 30) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/salbutamol name = "salbutamol pill" desc = "Used to treat oxygen deprivation." icon_state = "pill16" list_reagents = list("salbutamol" = 30) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/charcoal name = "charcoal pill" desc = "Neutralizes many common toxins." icon_state = "pill17" list_reagents = list("charcoal" = 10) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/epinephrine name = "epinephrine pill" desc = "Used to stabilize patients." icon_state = "pill5" list_reagents = list("epinephrine" = 15) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/mannitol name = "mannitol pill" desc = "Used to treat brain damage." icon_state = "pill17" list_reagents = list("mannitol" = 50) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/mutadone name = "mutadone pill" desc = "Used to treat genetic damage." icon_state = "pill20" list_reagents = list("mutadone" = 50) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/salicyclic name = "salicylic acid pill" desc = "Used to dull pain." icon_state = "pill9" list_reagents = list("sal_acid" = 24) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/oxandrolone name = "oxandrolone pill" desc = "Used to stimulate burn healing." icon_state = "pill11" list_reagents = list("oxandrolone" = 24) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/insulin name = "insulin pill" desc = "Handles hyperglycaemic coma." icon_state = "pill18" list_reagents = list("insulin" = 50) - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/psicodine name = "psicodine pill" desc = "Used to treat mental instability and traumas." list_reagents = list("psicodine" = 10) icon_state = "pill22" - roundstart = 1 + roundstart = TRUE /obj/item/reagent_containers/pill/penacid name = "pentetic acid pill" desc = "Used to expunge radioation and toxins." list_reagents = list("pen_acid" = 10) icon_state = "pill22" - roundstart = 1 + roundstart = TRUE ///////////////////////////////////////// this pill is used only in a legion mob drop /obj/item/reagent_containers/pill/shadowtoxin name = "black pill" From 6bc49cdd1bb5557bcc8edfc63508e31f89ce920c Mon Sep 17 00:00:00 2001 From: swindly Date: Thu, 6 Dec 2018 13:27:00 -0500 Subject: [PATCH 22/93] adds radial menu to arm-mounted implants --- code/modules/surgery/organs/augments_arms.dm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index ad07ce72388..f09258f19f0 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -129,11 +129,14 @@ holder = null if(contents.len == 1) Extend(contents[1]) - else // TODO: make it similar to borg's storage-like module selection - var/obj/item/choise = input("Activate which item?", "Arm Implant", null, null) as null|anything in items_list - if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && istype(choise) && (choise in contents)) - // This monster sanity check is a nice example of how bad input() is. - Extend(choise) + else + var/list/choice_list = list() + for(var/obj/item/I in items_list) + choice_list[I] = getFlatIcon(I) + var/obj/item/choice = show_radial_menu(owner, owner, choice_list) + if(owner && owner == usr && owner.stat != DEAD && (src in owner.internal_organs) && !holder && (choice in contents)) + // This monster sanity check is a nice example of how bad input is. + Extend(choice) else Retract() From b20d4fb7b70609114421e1c95d8581faf3d23f1f Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Thu, 6 Dec 2018 19:09:06 +0000 Subject: [PATCH 23/93] Code review --- code/modules/spells/spell_types/curse.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/spells/spell_types/curse.dm b/code/modules/spells/spell_types/curse.dm index 51d4c84c9af..699c19911cb 100644 --- a/code/modules/spells/spell_types/curse.dm +++ b/code/modules/spells/spell_types/curse.dm @@ -7,9 +7,9 @@ deadchat_broadcast("A Curse of Madness has stricken the station, shattering their minds with the awful secret: \"[message]\"") for(var/mob/living/carbon/human/H in GLOB.player_list) - var/turf/T = get_turf(H) if(H.stat == DEAD) continue + var/turf/T = get_turf(H) if(T && !is_station_level(T.z)) continue if(H.anti_magic_check(TRUE, FALSE)) From e6ccb3df61935a574a55dab53e6793b0e4060cd8 Mon Sep 17 00:00:00 2001 From: XDTM Date: Fri, 7 Dec 2018 08:53:57 +0100 Subject: [PATCH 24/93] Prevents stacking projected forcefields --- code/game/objects/items/devices/forcefieldprojector.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 3e395dfc145..18796aedf31 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -27,6 +27,10 @@ qdel(F) return var/turf/T = get_turf(target) + var/obj/structure/projected_forcefield/found_field = locate() in T + if(found_field) + to_chat(user, "There is already a forcefield in that location!") + return if(T.density) return if(get_dist(T,src) > field_distance_limit) From b3568c943ade36626650a2635435b577735fd89c Mon Sep 17 00:00:00 2001 From: swindly Date: Fri, 7 Dec 2018 11:40:30 -0500 Subject: [PATCH 25/93] fixes repair droids with short circuit --- code/game/mecha/equipment/tools/other_tools.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index f941f2e1029..715ddb234d5 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -251,8 +251,8 @@ chassis.clearInternalDamage(int_dam_flag) repaired = 1 break - if(health_boost<0 || chassis.obj_integrity < chassis.max_integrity) - chassis.obj_integrity += min(health_boost, chassis.max_integrity-chassis.obj_integrity) + if(h_boost<0 || chassis.obj_integrity < chassis.max_integrity) + chassis.obj_integrity += min(h_boost, chassis.max_integrity-chassis.obj_integrity) repaired = 1 if(repaired) if(!chassis.use_power(energy_drain)) From da239b43da8df4b7d23bf8b4d361c554f4c87e79 Mon Sep 17 00:00:00 2001 From: nicbn Date: Fri, 7 Dec 2018 19:52:22 -0200 Subject: [PATCH 26/93] Fixes reaper's scythe sprite --- .../mob/inhands/weapons/polearms_lefthand.dmi | Bin 6634 -> 6607 bytes .../inhands/weapons/polearms_righthand.dmi | Bin 6522 -> 6525 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/inhands/weapons/polearms_lefthand.dmi b/icons/mob/inhands/weapons/polearms_lefthand.dmi index 5e04b3daa34c085c9760566aae25c6e3b593dc44..3d8ac84a1269a59b053124ff5711faf5bbeb488f 100644 GIT binary patch delta 5512 zcmYjVbzBtDw;xJfDG8AVMY@zO2>}TS5ta~PkzQ$#l2}5KT59R;Sdo^H7FoI_mRdrZ z1?h&j{@(k%_wFC_xik07Id|@y@At%}@Q`rKK3;e1feYbQ##{!%7SH1DkH-rKXTR1C z)M^mpcpvZ{A=L3DVX^s2L5F9)uMO%9YMn3~x+Vlgy+U;rA`pE?WPGP5zYu)ocMqb< z@1nNC<<@)re{xzGGLnnQKYlb lOCR ;<{uqibMXx%;a+lGA6Afb-_QR&jumD417i>)w7fWW!0DYF 1Q ns5r;ZN{_q-PsxcnxM<6 zt?ub59x$Q>(bE&TZd$ZX;gps?@p+KYt%B$6w$Jg*`e+Q#WKG(n_q*JcTKMi;LSS@k z+NQ)_9Cs?CV>1zniHXHqBFFUFEjRMMl`xguI?eAGL8o+ySdrb6$NJ@g@M@Suk4#@@ zFW;)IHH@tqtnv=p^5+jGvqH?x{P^ImxcQ0i1%1+GtW*p7wfG3rEXX>EsB&1abz8zf z= ;+mR3F|{2B3jF*5+M1Z9}Hx!1kv4lDL2 zoxO2sEjaLK_0(zbEg|RCPgp)4f-$#BPsKM)%7H$dy=JMZs*X|rnwOYJQ&3cw#2ffz z37YolhPwhiP~j|v*?3Jk*N(U{Rr>eUaJjj*aPW#6WYTtBtxcFExS@LtB$UViIbR8w zVVZrJ#Qf1jmm35yU+~RZLC1;396g-{$+!e3QkD=PB1KMA-&A{s>(MeVEj@kBB}heR z1B%rR3AyEhdlXi7H&*!W%Y%kr><9`n23Qr`rOtS0*O#HdGGg)ob6b9X^d2?cj)c&) zkGeg~LC1DmAF}+)9e9El6Ork+m)&&0BA0yVHTLyl0gWx^M>@&yX_oIqoV#mrs&W8S zqzbVi*{Xia@6>*6$FJ{ayuzOJHMwbWbu%lhZHQa1M|)=aTcDcy6}Erx9IQ^hff@gk z(89|0_c5m5YXoa?{L>=MLv5w h;@gErbgB3^FpxdDy?+)|bd&eRjg+ z>1cN+oaDl0Nsl#PyU%GEhPmE~vvZiZM}3y`rMKc>ls)|}AppSP@XU`xBASS@G6COr zE{g*>rCo&&Y?>~68r;@|g4-7~fa2m}S}tDRM)!Ar+R^BaBk`Llw6Nbuu5xC?m`488 zxB8pw3-MV`jNeUz^WyWSzdwn)`}=FYJD{}lG1*=kjY9{dPK7P7y$Z_&!t9~#kx@?z zenG+83p?_9U~un#h;x~o^uv`d `kVqp_3 qmie5akw5QtNoN;A%~j}93w!$Da4uc&Df1KwX4KU(A#$*= z@-e|PiglmXEr