From fd997e16153f29f28ba890673e796b0c3d82aef4 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Tue, 22 Feb 2022 21:59:28 +0000 Subject: [PATCH 1/5] initial test changes --- code/_globalvars/lists/objects.dm | 1 + code/game/objects/items/devices/PDA/PDA.dm | 26 +++++++++++++++++++++ code/game/objects/items/devices/PDA/cart.dm | 7 ++++++ code/modules/reagents/chemistry/holder.dm | 6 +++++ 4 files changed, 40 insertions(+) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 14969e6c92..d29bdfae23 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -16,6 +16,7 @@ GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the stati GLOBAL_LIST_EMPTY(grounding_rods) //list of all grounding rods on the station GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions +GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 2339e88a76..9a873fb561 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -369,6 +369,8 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "
{=ndUBfAMZ$CJIiYPuXpg&b|AM-nPT3DxSop60 zeHWauR!_l$#G(3%`9iT|DFj4P7j41rc&kGS6Kq^njb$%$jCj7i_%*Z R0i@O<8U2 zz|)D+Z77A0;`PE=bhqK4fzHAd7B^9oeGyeK;*(ssdcgPN0GR|CGaNghd?nm>U*fa! z5J6%(ctgq^JMCJxPr0PLw`{f-^1CUONd)Q?LMtL*nA0Lw8u5+->z(lmt%uE4AF=8C zu5F|*#hDIT7BB-)40}c}#iDjBdclGv>KXGwmu#>(6>#58l>J-WN(1(q^lONY&rp>J zBVl~|@=8^%<^>~(%XIe^`=F-qky+3VPBNbWzJWn(8dJaQpL)|`M6rg7CH$1Ku&n~~ z=|%{n6*QFwW^aOMWSMTY+@JSt+$ZU0x^+&21zDKt*DpQ0b>?F^Z*!l-_U}C$b->U> zt@hhL9bRw{u@-;}x1Hf_ZEd~Zso^zlPflyRk+2u^7=53B!%!W@f+zCS8+O`_@P$>m zsFhcguCOZdi%{1+^D3?=RRzhQRk%dQynl^s0 ztRR5}LV;F~NB&Mp5O@Xdi=J&YuQ7U6!I%X(hKthXtwU`^4lgjV#XLyl<&>9a9plnG zq>H+Vsk?KE2c)xGMdydw3skbRwCFv 53o>RR<3AS>Fgc%JB=4#M56{XcYjZSa)! zl*OZpXY+!VwQUtHPdy8)S@WW=L4a@>KQ6%MxawZo5ctS|_CF=G2U8ok !|b#7;E3#-de^A7&7xnMqTvaNi8M4cobTojTYg54;8wpdrXCHJ7za(<++%OF zu3JVQzp;HfhI8|7b3$jw1Y4oL-OK%iS bDlKuLG>^~4Tv_jF8f-%YKdHPIXZanlKa`6!H zbNU~)VUDS|Vk7Xb?Hb XZ{wRPR6U)|q`8Ch+~E=vK~$J$52-?f1Woc=a1I9vdU6l%KZwSTO)+bCY}&((34O zd2SUfeXPzrGy|2i1%pu7WiONaGs~uslNu(oAPKVHh~t+&e-&LxYc{ffytYxFjq`Md zkoUVhDrMqZ+Zo_E4zAM59Z(ksmmf M>3$Z!ji!;#a_B&B|8I(RXI%e<+h>>55+Eid8LSPV|sJ&f`v{a}<3+1FP5kn%rA^ zmK@rHq$wPXtV~UgmUpO1f%9Gc@T)G1e2wRM9pIYW7%IB?VZJfAc}FHW`Mu(Ex#8XO ziuQm+*Hd{WW&a$@Eb{^G7wr0{Z1N&<15Hy?kAL!R?_hAJF9czGx`NaPI;nR*7kxs!pt955FKl)Nh`=Z)_hzlB&ES4F61 z_HpJ*)0tff;2CoP$oA~{(IF$d?t5a{!tci) ( w~ zovW6Mo8zUNNye#G9yH)GN*Rp3CueuQM8WTYW0tD9y`nd;Vujkd-&Ik`E%kecLn{aM zz{(%?7!)K3IEhgjY9Sm?L&+mKNX9roLZc$_3l2&c6!$p(kBd9+;G>T&&lMDtg$W&Z zb~cJ;{~Q~c;$D^^`-}Bxu0#+{^jkX{qNc%quRvV&Q(?6y7QqE17?yJsEbG*N7VELz zM`N)t|1BW@my6t)RgfFYm+_2aPS_eso+-{U$HwnUdbm+iQlk98mb sia~|k~!>Zy?8%4%4T|O$- zDP{n$pvV(=euj~qk?tGy#0miIo?n>|fd-2yK`JUCFIIoWM}Alh@6xRh2y3&oif}N~ z;dN;(zQ!PwTU`7Lxr_V#hXCv2h87FCwCrKW2LuMLS*0+|sYl_~u#t!g#q}g?rnHA3 zmE1mHW#waMZ=Y}0;Bwz*k7apf#UfdZsmZ7|Th@n?k&)45A_A2(#(;T(_L~s;?&OV0 zaMOJyGV=Yca5-|^vRQOFSP0$zt&R6)sMjcg1MBqLCjMR4Hx@3+N0l-lE4mra*=HN- z_DZ~iq*3^z@B-MC?{y=ani?9*UGHf51q8l70@`l_)H hhpHDQdiB7cWog@{T$@TLB#hOWm=$$my$U=3m~%!{JBzt~>vucdU)B{Sc% zBS)Vi_0SbM;0#UcKOPcJi%7JOy}wGa$r$zLt;4UXs&-kA!!Iw7?t_BErce_0ha>*@ zH?t^3VK&}a?9P$vcDb$Z6k@|!3noFaOE$BTNF#GOV8>dl3(6DZ>gwuesF^yU9o#DZ z?akRHv22kwYa>L&Su6NnXy*yPyhypR{>cp|pdf%3ID>8STTm^^;C0NHsWiiGsZy?m zpG2u{e;42MlnHEd&ML+%m0^2oH1$oMtGrSp*)DBjn2cqM&n<3~cUs{8giw@<8nh4P z^`FLCQe-*Yp}x`o_SG!)mvPVgZ1@SB8n_Xk7JxjIh2>YxFtU##!oY8dOF-CoH0u2z z-t!KUzwXy6Et`2uu%Jq!{Ee~xSaI@t!WVumM_72-E<%cr_FDpGlu`6DD9E%=(td}2 zT$Bz3=gS6+%z~IV*S!DET@%z)&tScFOET2VAkJ*zB-NTI*A8Pcw>vtw74SmoWTjnJ z+swm1Q ?yucD~h>Fv>ZLY;`S z$pwfjb0X|!J>uAQ!}{myobSOG#LACuEG5R+LE}a3g!^YI0NUzp{6zOnkk{QSt`K;W zao5Sv0k!MB{bdC~(nk#J$$m31gz3#Jv?We6IN{#>aPojN7q!-xR^H+gTY6|fTPZF< zs M5Yg1K8N=ULAJ@MM zfYQ-QnVaXn4wPQ_9ViP#v&k?IGfi}k|NabW3C%?Td2|81%)LFn{DtMkHqDJ)oQcAkuMlx`h3z~43NmNQwhAdhwN~U?J`hH1BEIn!lq+q zFOYp7vYTaYMcvC?^NFUp^se`SEGBlp%vEqDPhOA+kAjmKMwzruG>#CL>sDjV%k-b0 z1i!K@LNf>*vIiK`_BAdEGQ}D`D1D7E$lA3VCy;etB^k() oI3%9m>W6vE2Eu8 zFw-EH`O}zmmwIWA0ig9A&^kse#|)0T4Y|@I82#~N(2Ud|CI(J~`aszJOav5Ts;nK} z9e)*TAxlm^5u+DE1v|MzkDGW?X_wo=8E)hda_A9=*IH$c z26N4zK~e)MGO7Q}0=Or5 16-39$Y0ayY%An~(PE{C_{r=#{`kNAszLE}$oVKS&k(A*pRsb>c_GEG zbQ^!6w6w|_MB_gNXez*o87xK%OKWrZ6 zM+|6~{9p`BuQR`nfnTT$S60h!Ym(}fFXGS6A^L&o(>e{lt2g9RHK}6ID()Q#a20W( z;+KN%JV0*1W6FpAv7V+1l9KeiiKNof(g~Y`y6-hjp0l-CVRJb!SO$cfS VrX_Rh?a-4xCwGjVEE^;@)Dm%Ho>_6ce05#K0e;J*dSO t1^fH7PEJ+(?Ud7 z&S%iJmOFf41#B?XV_<(W!fS6<8iib7FM5>aZkEh?24X1Ne_*H#W$asX*ZkI)5LD9W zspcT9%{U0IqYN)VFNWG(3982P|A*uJSEAH BTzNc^L7Y>O zG+g0Fzd)8#^;Ecv3+8nU5*&>ZoNmQ}xSb+Eu7jH?rtJx~*y?XJdDFe#+ Krz gLV;n6(^NnufVNyOG3rF3gzsLUk$+g?m_k=PMa?8oF$Wjm? zj&p*se%j{dnceQ-TE4hyLqmy_l2SuWjo|n1-#jJ3JpqYw$zo#-%EyiRuVe_gMZ}rn zJLq|!3f$*dhR{D3xNnTlf!}k ^kSi~vVvYu896Rhk?Wf1zoE+PXW zYWX~6SV6&=1hh-I0Uoz1e|nwQ;vL5S)4aJgLHrl{E@2N8Cl|w|?`7<~*+^^KCtOG$ zvMzXgjhK-7f)Xkk7B1QFXF+ GTt zS7 {0$byoX{cukbu9z8HZ9&Yq(Opjm4@L6#GmK)`ZkAHCc zE3shFKcY_AH(Wr`{ns3~i*T{EngCpkorWgPC}qi+IGy EF{z|1+HNBY=lrB<{+20tp8Ots@tYDqltm5*YnYm&WME1PI2J7A+6` zZ|Gck4WIS)LVp}sVh|7Ws!p)rZ$0=?B661>mq9uqxru#u(-Wu0BTiwm _|B$fC73-17tmq!DqWW%MgJC*-lp&hh}Kvz&3EDRni zeU>U8P%lUmcN2qg&=m2{mZOQ|!;DwsX0SWgD>0mE$s}4Iu**J8W!7KSlvFQ%NP8hh z637&y-{ykm3n+ycNr4oF3*-Y*N@k$x6~Dr+^+BNwVG1_$UzbLrV>J@qI)w#KpXkI2 z*Sel6_0T~441#;OIih(}TgH*R?5|ccte bq#T+JDLzt(FIDIo@MWLneqY`D;e`xtC^8 z?`|x9ib%koNh_~m7sbwmy}MM>(>vM#z|ww|3&50(H@`dhxnG8`b-rh{?J`sPda+r` z#D?t7;iGYg7irXuVZGNgq@bs|Su4&CxVm-dKYxQRi&?uPu&>j$a-`g*Z^QuKcATI| z>fvcckJP<3dTIpLoU3#lgX)2~7ET^~VbEJcTJY*(rm(f2f3IFn*4z~y!{*3Ule}H) z&%QRDq}SUl_%7%?Uq0@DV}Fxq?{vlof >Y|ar|3@hZk!{bM{ z5)-faCev(Km~S?HQi3I4GrTdgX#azF%4)O*_a2i387&1-AG(x<)+`&Be*8?jP{xn` z!(&rZ0T2UnDu|z&iw}vwntRU+Mu_1cX?Wwd0 -95)$P#BGGXT`|+KDCf{Mo z1TJlu6&PY|R}^bRCUD*&k);lwR;_CfUF`dX&ql#7b;>g$<*AIG71|6~y#C1O56R&v zyK5^F&N!%OlzG}p#D!|Gx3j(oAslj8AdH`J3c-VS&3gJ= <~!r98o%8)%%W_~T -Tw9#e_Uz+i zw%}hY!AJ}S)Iq+m2a*H#VU}l(<3ScGuAWFAl1r!=Lg%U<<>pP4GFgvMa-a(XRD(*` zLJ&^+iNOTgIfOu2D|RzwgxD#K^a}1LrgC~`wWo+3LWVET9GB$cEg)w&%U4;CB1#PS z{*gyKKpY0=_~9Bj6>3c@7N!Z5e?`2)2T8yut9w*@gKTcUn1{sZORkOT2a2 (<-O{ZrJdVSw z5G-f~s%#6B=gZyU^)Ch#i^xFFdbEN{iu$?pGgdVD)>2$Bhv;K)Ez`3a=v4me7s-_P z1BBP6X4pbVxLJ%+K22dpzml4-Ae?t Ba=N5Dcdf<8Vf*fd`GZpk+}iXuM)oL1$>Yro@%lj4!RWqmPRfP{!7AA} z0rSN&!fpALLdfYwLn~$uq1sa>jQ?O3d56LX0PJHJMK({`E} Ob5rGp7^lmHReN&yu%v^2Irekm?V-uHN>?A==PER?m)Kcv0B#Za zZdl-ikB&C~?Rv=Z88Q53&6GW?isDy2B0{%DYcsjn62!7flH$QQw) D zG=JO&|J&dFEPWO|{R~-F2;G}an~?I^BiDI!=;!xu!o;I0H4BH@7?b{VYY=yJ5MZ^S zrM8OD)-ER+GkzMDV3ZH}MGL8;|0v1!^H+TSImxTlU&A-Y?^V#zYbP$wj8iAIJ4woB z?!T-tc?<&r3GytC+YZr*iTb05W-Z&WkLXXr({S;0>jEJikBs2Duc^?GT??$>PcN}N z{X7t|6#yQ^4E$e{#7~WV$xMxLZyxFDX*8+e+H??YY`$oRZvrqSW~s`R3`oF9ATjWM zn}I$X&xMc;3YB2{jE0xKu2f-eqWS#j>W~N7@4C1rd%EO~e`>$bBE qFeQp$sy{010Ak;qFRAY5vg))2{6e#gNc6|lZN=Qb6FMco;t(g$~S?_%T z>>c m3IIyL-=U%>pwemL^4k- H#rrmyvO@%^FhcO%rz~^+3?1`41Fk_O+&l$AWFk$_fqrHbGzwk1{_;LY|me#q1&v z9DLyctPxdsPg-NR!Ih&uro3Fx|9Uou>FvBLwO@s@GD?c;I)R(5%6~~s{J+4k|24ny ze{&Pd=)%H@qDGi>pyRfwi4}0QXcpTU%s^Ty?)L9gVe_mWR)M&+yh1yh+%qtc;LNvq zd^ uN`!Ne0F)wV^PSO#?RTJ$oH@RR3fI)_U|c-4MvROB=Z9}(WvcDkwM vjwLl9tpv&gRpvZMvAgyayJC&5?;=(E(<-pdj=Jodmv zWPc0zT}c5HBHKEn=6;fnB XyLIGDhU6V9bJ06ClJ9|o1qKJ<0v|s{2?i)IX-x7i{ z-@C8V#NrgVEbMzbSZLX0x4Wp~)e%Eqslw*yVe4L4%)4Pc;Gw-@#K_d(r xDERym%;wb zo(wSkKtToqC$UJ} M;9qhfNnhYJ z3q|MtaZ&a2b@t)ceNej56ee&br`wzR2Mn&A;5a+-@*Oxle4br@Ep)Gy7I0;0q5gt- ztbRPxK+F!QgH{!b)6?VEn6*KGn&@`*7Zb|5zDExP@LY)ZC+5Ln3k{7(8lKqlB-w EPW_Gyglh&f-jOuyYWgUqZ>>*QZwe z2i?ln7)~u)msZCigtr3EN%yo&B_{=}B`GCEWu{4t?3&)W;P#!IU^aL`_l&h`G9jU& z8?U&p6^lp%g~GzJ*R#OyZS%V`vV}c8e`D=)cjMj^PYtjF&iTYPC*5Lnqr{Dh?Bm1* zwWO?at!zHdY42NenhF>8XA<4^_x;stUpqR+ef$_^qWK{NRZzeKC~0X${@u}UMQWp% zj+iqqeEC6R82(DAVwCo)_K}nHEWmOy=jn8?B`|pk^9Q_*Z0Wv{B@bzwnJMcOItp4| z^1#gj(A7)?N^g84lU(T@0AxH!`92k6v(_>i-*s2`i>_q=gq0zLLgta>9vgA;9`u0F z_N0$1eY%mJs!D^)*B$)Xr0R91F1-8KsVT)LI3(rdF12)Zqq)#m(@y)0{UxNG8t|of z+zC-iE3-CGxM(>dXRitw&Ke3cs@C2=S&*X5;3bz%I9PQJJXmyfN*7s;Oqk|;jh4X} zzHhM2%M7}BZ$zW-?VW68gZ=7c!fqW_rgMHgb`>6CVZL;L2$Bw9slQMVXu%$NZNOat zX2WY@-{16mZDbB`-;%K)DL+O3fdIy3+V9pU-gF-|k;(%s^noc{R^FH%t3U$4mkrn+ zAVruRwyLADhCspciK?#1|FIGKUq#CQ8#lK~ `%kt0bI$5Kw`wE|oG1G{umR({0r{tiLX(Mi_;_KTudiftg zmzAJGSy4fu!#VBmU%`=-$H8mAy?{mtnX`lGR{~)F`?XQKQCug=E%}ovMRSC>On;RV ziBjb!Wl36p|7kmID2CyF@W{D{odr=>9{;hZlW~K|2_`2ii_pG1MEGK%j3hGal2yi& zy1=R}u;~`EG_k2b)fon7PW!|7Fy@25*p9uuJ$F4+=(^EQ061yYkKvx0ij0j-u`o06 zqnIe2$!jx7Wn%%tBzlAYW-0m+fb|?AW}MKpOiX1%F4LMq(GMKK_w=LTxHJoK+g@;0 z#LLQ(l8$f+WIVUL9A)G_B}q^uN(Ng~J(nc0o7%5{+!FNydG%>*4yCk|I#bPMg0L zjL0&GSU7Q=7mN#?%nx4bD_RTG219S_J_85VY^tvRu`> vTBKKE!h&W1J^_ zTz|(t_tO_LR`id2Y17bjC)!F0^LUG#=dDlifJSp~8q5XNk)O0B^U%rejHuJ3h$ji< zx?ye`+e`zrdsI(x_vqnS9yF)$qk`-?7>9`gk&OOG2%Q+D5E1C-sQsQ%RMhkbsz@g- z9NY-7xW6RlBpD7V?&J&C|Dh8pl~cgA=nVw#MuS22zOQl6ZVUU~hvq`DO&a+j&Ov=Q zyr!MiZ-oX1FH}; 1wN)~ACLUV$!D*q zC~smE)qfM-(`-sdFTg;!1if1{{cn6Ms< $v}=7)V~%qjN{Kg*%-j15&k3 zVeO7`4;}H_|DVkH&UoMV*}KT)A#N}fyO}+#w&@q-A0i|$cp>UI&;W7$&RKO>P|lF+ zJN-2Eyp0{W^m&2Ydgb%-^I!Dmq*->|ryDT<9Q93>X8aCOVxW1p5z$ivgHUjPiS@ +~)+e`>o59r-+5tZ<>u#A`6_qh} z?k#Ql+oi$F8|?ay>3G0o&4w&sjzP8=1Yv3j2e|}`)1*LQ6{Y19CXZzspug0%bOXBG z8_TQ<@nif7!JRS`U#mhZ&Iz^@*G4;o<>0+v%RHW17B3fdQ@!tQ6O#r9ZHI&(v +jVr7M)!znxuJ$E5|z2J6*Rh`n! zH);X}RVA(AF)5j+N9M1S5u|ipd)(sU?e@7{OD1X3W<+Rz{hg-Yv~C+oV+#B#S}; zHQGxl!gtnMDl`|Ih)hkb^&1J*&;r{T`O|p uA zzWFN{=JR3osF^%6=^L%gy?c14F-%eH-pCsT3$l*o_fnR;nyHPEbxYGB cZ00nP7jl7+ zt*8mB6RL0bI@PErBqrWMzFj^nB?M4MIHA%&OH0adD)t`SxMNetrMvrAQD?LVJyh@e zctO>e<73lpe`=Kq!zif*^Y^$5gu~a(C{E$Q)5q5%GolP}564ri9@O#h&PT*^ugqop zlKb!l`}r}Fk;VAkAgz_ew6?Oyp*NxWrlw@zJwAL8_LG09aI_)3IPokRt(bTjxjGyR z=IFSkR1Fi@4(HwYs%{ZQ-(Q#7UrD_9(F~{Y`I)AYFe1Ux?|jYZY~in+&14R>%_HoN z?gDm|T_KPMs`giE^!Kl`>%bXOlN}Rnhps< j8guV-Rr98d*us;dd#aU6)Fk_nndM01`yKp4l<>#&X2Y+cv00bB z$(T;Bv=pl)J-ntqO R_(=G(#ON`fz7j%8B`Z9x57>%B{@LoyUw1o_~io~Z`Y%? z7rodwHR`iU{GXn)vi`nnc0$F&r^tQ(+!^;7BY!?NzEES&aGe&Z+Tb!CuVf@>^}qYd70L?mQ(xrN#74@ zZBI9}j7d$siEY62_|)^WXGm6h_ xD*HaU~Zg>S=m_8!$bFKdmr9`6S Xmo9VZfFuj3evC(5Y`5j}FyC2u)m>yQe~3XIS4EH0~Pc0pYuiy_r%S7`o< znY&%etOye+WtOSau_~7 _V83A7Wz~qwzWtL`s53e=;zN7(T$;-UqnsUqqBB(g*)v}C z?J9!3z2o6mAuq h<%^=Gb}Y(VveF^cOEbR6Tv> z$B X{$-nzk92RSkzOa5O}4mO#Mk-9gH=a Ty( z(k7x{B8TrF0Tx-mcoLva$*K|&YFllC4*n3cUbHqOtZ;NKyV*2$g`3T@6dEOq`SnOf zPU1!STb;=L p@zHeR`+6J{imCzMD37phKeDK#-pj zjjfhNE^!NrqNP;$#NAegOW8GEOfDGMvO^{%y)GS2Y7H?(mF}l|EVaY2@7^sTo0H9Q zI9Bt Wwy8@l#g>e-fz=}W!C!RU%!aW zPB>&y{N}xTL3y5?{ic}>#r@JSx4FwN+Z;{6$yYHB&%~6qbYkbk>yIwn59>5Ahlh5+ zz=XCVEJQ!V@Is@js8Hu<`>R#U$vAVz-yEOAwbhoXV^S4T(+Y5dsoRQb=OHz?&(t{p zh1O4&Wg!jWkfX8Y$Fd$%&35td@DzU|>(V8c==ksQJUgrGJH{(5oEh)!8v^ZLXf@*# z?j;Is(GqYn`O~fNM(p8p{RvCA{!bJfc3dD{{h(KO+8pSz+cU!Ma)vFMKnT>$N(+($ z`=d*yR|kr$m4rYmI`SmEO3`h_%|cx%b`#DX vEqzt3}0O4+>1+=yn#NMmu{ zEK5&u%U=@oDsE3$5Oi^|&mc2y;pIg}G!8fJadE(-0*wi}M)>i#B6nhUe#2)qWInqb zl7zfUGB*NO3Rz=0#-lH>$rmopG(+D`CFf5&sdl|fzOfMur-SZF =YTIs`y=30Kd)M>4Yi}Yg$3d3-O04U)@106X9$NA2Yv#{n{)Ao zoQZq7ylT`gSKl*Ujz1z0FR0TgT9SDcP7`Jt2YC?L9`-Ac #EdyocIZ(_t-=B$^Vxf!vBRV9N+}>%%89(RjPoy+<^z`kJKtvtV8|>>Ow%t literal 16000 zcmcJ$byQr>moIu6hu|b3KyXda;1*nhySqd1;M!P#1WiKF-~oa|aED+axNC5Cmj=4u z;XA)KGjGkT_3oX!?jLYYS6A2BRds6bPklbSKBy|o;$V?t0RVs__eM$`03cKke;8;0 z06Y#Y3j#mf_-g99OIf*Dyt8w0w{vy^0Pk< |5Pw6FR^pJe^z=D_RsloP5UVrCFcME$YcJ))+m3E}GPej6d_W1ddOI9;FSywtzS z(&0N@|F@RKH?gd)f7sG;pVZ4k>#4Z=yO{Ze?y9l&q$4j=>@bdtc5z|p$k!h>lbc9F z7%!b)hIeGh(8}qq3ZQoUyyTYQE{(g1{`5^yZUC!;J)w)UN7 KqjP zZR@Z^o=J!$O7q6Pe2vFBtFD!~&1Gl0KUw{~=S5KI$#-&I^2{?=Oct2Kc=8~RQ&nN@ z{H}(BsfF`9BrieE?9dIqH7U&b ^>hzG1%juH9xj!yK*$#|-(c@2g&HfE|StBAgpl<1~{b4bUBM3Ll$x zMF _{q%Nqj3YxijORziVhDysZ|6#~1^~+QQFYAU#x`!)U-`Vq+Wn9QG`3V`?>CQeQ?! zhRj)ez!-Xc45#R~vdN?i7)z3dDx$~qzVl;Gu^PYfT%2mXe@!~F<;rd_RdVtJ2mR;+ zBwxiwu`ekmYno9n!v{7@(XXYMtZHBoae08WOzDD5L-VWBbsX>a@9V!d_g|T(#S6wE zz|%wi?tT-_vhq%0nOp*(;x#LdLL%E&P3VPJF~?f49`5+NT`2y-phd&(?%T(F+*y82 zo 1h8sAZ+;ZC=!jU*G;0_}Q?i^Ug?iXzx2MEv*Ijw{IcV!?EIab}!`R<^31odVP$- z#CKDNSD|8eIoTA$qN3T%gl&~1)^6$j{xJ;rehg>CbqtugP1-*~{CJ&U9l7vz#>0)g z7z!Q~5|XytlG5=V4y!*X1u#rRX+Gch6*BQ<=PaZyZkoSOmi{Oa87OI%T?A7!aDVPDNFLbV zr)He_Nk_+o!Qlcz_1&T(7k(oweg5|d>TwYoO8+$09vS T}-kZf2xkK zBAC~ljQb!ECgAqn&cnr07q|z+VIP{ zaK@S0b@?H=a3%np~p{L5$%_-ID~V7!<@vfXxnOL(JrMRUFQw)v`ht@ zSVhP#hFA|(Emn`}Z>^WggFa5$q?v*%jhan071#C^?A5Dih{wU) zli=XsF^oDXF^O}qu?*>m$`@;XaZ#7M%C`AyA8uwkc{^nM4WkGm?8#5_+S5hmQReG+ z(D&yvi+=>>^>y)d 80J7!0`}d*gHReua(7Gh_rdgQX~`3*g#Zd-);~e8t7x?LFryAL zal>mZb;F^rW@)DH{xK6@H5TK|!>IQY1Y?Xj+aVQ}vdf~-y=lwCWB{+$h`1yCFlxww z=6Dh<5}_L$GbRY-3S!3{JkTQIbP5`%xGO@H4I1#DuFpCi%-1^KV{=pDD7*~{o62+y zk^75Ir}?j|)RJZ6Z=R0thsa|rq%VKK!C%`_#+xF~an0iK(=90e%)mv%g*g7iU11N| zdN&BVn)e;5G>vzkq0aGQ=^vQJ>Kr?hwj{iFuC9q2SVi3~9po;q()+u%*(!mcfGy5f zGi{kPuosR()OBSG9>Icv)nCSHiQe`1pJ Qq# zF9{16wP{TK?W25!^Ji!P-Rq?28p>ViL0T=!_)*)g16o=0kdB~G&*2ay65^wGt)B^3 z!e3~%T{oF4dI$ONmOb3~n5OQ-0Q@RHJ`U}L*CIB1d-UT_2i)TgtiU+{@2sASsdAv0 zKcbGNF*230u2P)y{+nb32aC+Y4Wk| +$BQbMH#=+8ZC>gA0-)?LJ|6` zi%Mo$DI;PE$$sT-$Gg(fCNoUt44Jp*Z^$STE!C9wcW+!4p s`R;`knRoT-(Z oH4Z(MENDkPq-5Nl+H=ypz5D! z{^}WaC$NseBtkw=&tb!${LQ }UJfEIs-Q&4g%mfY1vrIrp> z+uO#xE(~{!YkTi`L}$V| crm)#vl~H;k0@ajuwlb}%=_r&vB3-XTj>vCtjtWtwJP*(4$q z^v!jCR6L9wN(6+OeR~Njh{9%?SAVbOma8=y7Z=yNnem$7X4b}VF-tu3@i^Z%){aa* zigv^~reVhCizR3lB(qjDG|s6;M)4gvV(5HQ1l~MKEW&~pbU#ZH8HtS!ELM~}*&tcq z=HkrZMo;GoFpv;LtHUO+FJS*mnHkzz0OMkfcOBVrzh;$vQ!M>WB suYBY$|#;~KOLylqnp;`A(jP}ygovQkxwuRoziQYCQWb+7fD-z*j zYoNVy4eDYiiTlSwgypq!GXda|{{sU8hvV*P2J~+Iw0l%2D#Tet2pbw(T|!h9!3-q- z#)ZA8gI7+vJsJ0^MTq+LxIsT@g5M_y!@u*xrAbtktXQ{#E`PDyeA)8>y|{pe=6Z#4 ztrRKoX{xC@&3E`~-~HwHS?YUL6? ?-Q*f58g5 z3*@`|hPVLINAoBO=@Vp87Si`^^_J!enX&lyrP l+Awun#l$=om0}vlv&j zmO4pU@;j5$#5{rk;rc!_fY(JicghHe(tvglQyp*UAU^q%1GQ_TU5^lYmjxU;F9`WE zd-hTWac|!3mD}wg%PT5M>FOra`Sv?gvc5r_$>v*JHfdDcU5*Zjx-7o!zSz5yEiOXr zl^D*Rza~d4ZbxxuQ3qIjYjl>Y^cZmAMM s}HVx4ejZrjR$hS^`(Z zc&UOi(Z)DlM>O{883;)hhP-O;^P+=lo&LVmg%)%Kl^WEoev+l=DAFpX8?_ ;liK_}&+w~QP1DzrDya`~(wDQ wv$t=@W8=rm{VmRlF6>#CH) z-&D40@97UjjEP7C0b;1As3LpF?FT9g=$*5KqZ^{owYJaORiGPPe+{2q+v#_^BO^OH zVSi^}T(qWAwq{ZR`75}}6z@S)<`A`>S4ZwMv>}XIK%Pl-lBm}v9IS }XVv~FPfXsxkNSU}H`G;#wR4%(CajaukK4pSU%m0To2P)HA7r4Wak4FL z_^bcp<0){MKvbg6=Pthcjcwa)nI`1V&G1(vVV6-e3eV2Are8GznDk(c#;dvD*Dd)u zaqY2IQ{Js?hKwKJm(|=3CKbS( zACoaYcGSOZi^BtBl=}%p6GOF^m>x z6msW|aZu_v0S{JpdlIO^YIAYVz>j@CcaH+eBPu36*7beJQFgwF>?oA8KkyP%>p_c= zZ~lj9<-b6lNX{&s&A~HRrT+_60~1m9oyM}ZG1#<0K)Gzd$A4Im4t6>s&ffu^wQIK# zdA`)2cVV^?VL`&ye^m>9_o*~dAG7#nb9fsaqzZRMo7#Mdy WU=5z_SVOQYvE!YPFz@urp9(ux|cwwl$nvQ8BW0fY?poKlD=D)o8vWBN9ah z5;E7?*m! l_eL@cUh|m|IvFC32Cb=u~IC z_Iqk)XXi8xc5;&VP94^u!`ANLdH>l}$%RT?;)cECXv( !wiGfJa>u~@0Xq}b0^^e0Woa7GM`k5!#Lh_e(QH
YUk;JUOfAPDN zx!14Ct BG-~p7a_4;S#vG z>oeP4*5RFn{7}e~t lnLQXQ+nAqvygpU; znn4#?^(Wln@4@)rohVMKTi50Eyix(4sqAP?j8UisqW^R!LV&k$e;odVkSVj($Os*; znFMgzufL%D^W05zUE=qpivLl_u;9KZ2bDwGd>OhQA-@nw;A|S(OCO%WEr70M?ndKG?tR$dF?-NFVk}oK lomGtv=VrxVVNP!DXldHkJYyHtcaSu2P?lh!p!5yZ5v)bDOK?MO zXn<_kq70zEgS;#q@MMEwLUZa}K2=?7sWOO^4lN!g0j(N@FwILto@{_W{I~nWO f&4KDB>9Afc80*`OGG)4eO ~n#TDw|=@zE!7NaKN6JSgl5NCbj4Xg6kzV)u~p1Y5?ex0?aQU!)R0mt@z0C8ksS^ z4s8c%TOzVz_kJ?SrZ1m8f7+#0@qNa3Hl+nC@$;$BQ?~N}hj*1QMIyxvj2|W{`Qv|t(#`5eg(Mz14-Oc z+Bz>K2)#i%hp_R%CiVa^VI{ozZ{3rP2e%BeS^>-GS{IXL2;6$-_ZWv^%69XZAhlZd zXyT;v03_Jr4UA(8-n|wo!*|-b;Fj-KdBi6A_BTsHVrCC9Nk9GQRg=)O1FX4RCpttI zmT>#R{XBM70HwWqj^9tl-AAd%dj+kTkpPEjJ8&q|$=)do0FA`f+4a*H1sl1!xn`Ux z@n65ve}I1r(@l7~zFe?zbuxD3bK+OGVZ(A2h(PRQ^#0wfs=F4wJJzh*c++;V`^YJz zdw(&8`qL*0(b{jN 9R#58W;z&fe7s+?J!kW* zCpx+P*8PAh`l>Q-V0|7A^;nSr+JC(#(5*kl=5vf1wOv<6QHeYtq7AsYcr6l53Nj2n zxy~lQugnAUn5`O(0^s^m%JU(X-o1vRQr*q6O?lTM&Ogw>_?GxE0Q@2xR}#qVFVbPk zr7gLfVczn6TB> QVvT4QvAt9u)=WO_*S8A`fyIYUKcbghGo{8|d z+}Atbo5s7jxpC_Mi5{r0pW1st9bk2V+7{bsK}~GPT%Jo6uyGzRdKMNBez9?m`asWw zJs%+>!2JIzGF1P)Q1ib~tcG^}r`hM{>wJ|5QfN9;MEZdT3STDvj6=z0${**@dxem{ zkYE|p(OH`JDgO#HnT9EaULm&!O+aIXKV8RtHQyXO7Uk_VYVA!L+XK0orJqi#fo<_M ziAinmP`K13Jua*O 7uG-GhW^ChY7LTL#oY{geM z$3Gu|P_qRgnoNO|HQ?9~^3xidWF9v?Bqci@CUry2+}2@pU!UK>j0QhBe* ){Jf&JPVyQL^ma64}b}78suVj2|4qeox;waUgFxRY`Y68 zrf@>6-N?g{- (z%7TXqTevkirVL=_b<$gpFHaEv%tZ$m--bqLgQdQa}xtLPBbe^h645kLp z_ad4&{iipNpwqB-hloK&U!RFg?yUHvp43l|rSeEjc{AI;s6d9$P^WE?)Gk%=7zGXq z9K=A=&J{LS*HdV5eL%NK>tlv>Nogy#^)+z2Zq#?Vw-?jzQ}g5hB;Y(KI>iYvg8n3n zb&5URH}bn%Q(xCwW*c;?W=Y9k6q;yxkRa}lps(zwSlFCLvcx~`WU_H)IVe1l8LT0R zJ{Fuqpjr)XCmF{v52F?4#9^79Y+85+Y?@{viG{7b+Xrm|Dnx}s$#$nabr(OLVmmcv zSKtTzL-jnJzo?kB3AZLkPgjmude=;uFlcZep7@DrV$4Q1|0^;zOnq9fM5O9Iml|EC z6V6_tJEEYj 8-(xZBnJJ52#PV49^MqdiZ#zN? zT+fU(v_#8(ywSSnDd-VQP*X>I85RMH;P;}%Mdg?9qp#~F!Qa2Z+cYRpfF6GoDX|>3 z&UsvJJdPd }k&3GW z4O1c5ob&CdwAKZ2+i)~0W0yZbNke7hgaJB#kZpKcWjhKh8&77K0VxH|Q5#8@ng`iq zftffck_@Q&33I5*{g)z>^#jy86c$+gpE>VbOwJ>~*nNgsOTF2+rjHwt4-a*{W6YNn zS>wG*T9K9&b68RVsg @!%M*IHibOKm^>n?)oma>ndAV2=JpE(fQ{|(15QDM84-UkWldqP%423UwcO{ zRLMRG2m)oOSz+zOheD95-~eAIJsK)%*sVsa>4c#V4V4P4)C^H~zfDsnOh%`GLMH`1 zxgF5r(4+Y`ro=?fRUoM+JPQ -Ua(&>gr)L=4rfX1~w1w;G@#+wRA%b7M8xWwAY zHYi=}l9al=1D4wi{yQ$CBJjWuR~!JI^FHJP1PHq2nu#0-iZVD_iyX@^ez`rZvQfx# zGBQ4*EbSN4do *HIQ%5N8H>G9kegu);@M ZaOAItJ@SgT(4R99K{Gaj1X4 P(8owL&`N|)xNAf5~_oo{E& zXh`RE|1R#Jtt0R3yIKi3A~&riu^7E<2t0Zh2)Ap3N(-EOUABaz2i)cu_y`ETVkI+V zV)qijvllK;7u=`{G&ZKF)@OCsXGJP5LK*BNjeE>!>Uk+g_ZBI*-k?I)6s3z)MW*NI z^Y&S+C P$c?}^z3{WrC9^WDAY9k;liXdULKw%LV>94 zW!wVcgk;z5DX9FQi^IM{|L*#2zws PSo0LJYT7TFPm@4fBdK2IK$nw#nazm7^}Nt z36K^}=Zv?Ey!Im5XUf#>i!U7Jsy}d%f{i>>WQ$Xbq$ T z{k5|`MMf&;yd6dUt1|+WQQwnmiJvdrWb}Q7(>m`LZ_hz4
N-FcuH$7O&&l)YNHpcC}xro2soeGM{1k^dp &L^j#H$Kp?_lwKiZAGwC z9uug*c?*SbQ_ezH431;}zE{C9=oiOJ`MB`SK)J&g?{Fm^N+n_p`oX?+e}|IeV~$yF zxi*jOi1&*@FtS*&+?9f~K{0T*6vQw)y`n!4H~xo%N4dUr8;xgmAhJC=wZUIv1qx0Q zbeMZMi>_6+;o% nFq z87EZJX84PdEOCATtHHoV+1(AAn2`RsCo8QdbhXr1)NSHB@v=x1k$=`)Z6zzjobUXS zB*<{w(m0jZpSId4VbmtBt!3>H4OpyJht+L758f26!W&2zTB|b~HD({)!}$FKjJyL; zh>j1r4HyeY^QV_y2!ihNL3G08C2&ZApz&VpXWj~whkOc#Y6Kq*^2ePQ!|(T?T~flE z^YSwz1uCLIlPc$)03g<;MJd6xC-C_3x bTA^apJCWhai zA3ZIG8hCrsK&|_V$h;Qe<4{Ox^#!ea*Tg&(JH`k@6TCPkl|LD^8O)r;1u7n?sp)sa z!*X(}N50ijAOL(TUcXZIxgdvIzZpAT!ba* MX z_?DY``7Z`0O}mnl=Y#1&Zm`Xv^k6wmV|JAU2uQXaoXcxkgnA6Tt$j#_=-R!aSU?6< zwFNJ^%E>HJtVe2h`gH$1HDs)(lheG5i4BSLmHFfFT1Dpf-D6$1wLDVv9BG5NjLowS z+M1LAaj>mUz>jA5cNERKyQwl5KE25HBVMZiSHUnTV_Ho$^-B^Bt^6C!6wic2n1cs= z7`B9PUP7KcUYC5dC#njsmP&YWe$>A^Jqb|}Db&fsvt8@)Fyt~F&Y*;dsojT!_%Aao zk6vo8sTJY Z!tciWat1ZpYBe$Q@F?y8>=6Ex>vh25TRTuwy> zDU}rjvoY2-v{Ii7bTVdy^RnVKTzrhJ-}9s*;~coMk#ckG}eFs*qB z9)e?gR5JRk>MiAALoOwIK>G)3wk 4IUVgXP11 *r5OVQSpF zQX2HQd@V96>P%mhmNqmaj4@LC a*EFq+k| zN2n+pGw(fGmdiXZx4CaPTi7dT_PCfd0RsS-$e`fh@NJ$mC57bY0SXwzIH7PmI^nr} zZbUI_pl)qRT?y>%w29+=Ibt{PxJgz-;AJuV&(}QwfIlKWJxxtyfdI|NzclqOVtS%5 zaBw#AL@V!g&+|`0<1}@2BnuvWR)QWj)Aj#mE$dxI4nmIG{9`QvstZ kj=9pb8>F78{RR(ETqu0hk z`se_U+ENWOek9tef88Vk3 =hT($n0t!NgmBRE3G#cPRUH`!aM`RHE`~Y~kq7RL z#;-_;?j=46@*=2!=Xx6YyZ9u1(%l~oT-UZED$RNnfFMSlwy2yZV#6D;oeBLNJ-zVQ zB)2W9&HPrwxsSZi-hrY}V^$S+Mt9AGr@(__P8jgTo%}*r&rSbB@4NIQ>YjJC7V!Xh z|4qbRWGNsi`lwZ*$0CkZB2(lKiP*HXy$je0?LkiSNfz3&gv|EAqf#|RO4EUezleJg zB`wXS!!Ld$X97se82D|RSRR=R#mR6TlK@lziVCDFgGi${{{@o0h+}NH=?u)@A^C*R z>G^$yIZT~a5NWI$TfWrjf*N!txxVU1N%@aA3!6BOYv%!=xAKwMJf*s3TY#Snf$Ht$ zM|le~0*>MhGJvBW!%)?ed?Ji1GfZOnDS+61fBjXB-&>a?0DN8>ZX|lp1n%EY-i6Nu z)0IhF$;@%d)eXPU8?Ld>{*)q%pB<2*q_4_wd!rE&&rci8zaEdq#E0Y-@cQ_#S07L! z^ZjX+_71+_Vx- FUe&Dfc$kV_&@-oF646D04&UYO3)^H9zY7FTPR|QaFZ+lRRC&?@1oX3V7B2 zjraO()OL~g`+%1DIxod9U-UASWam4ORa?>pfH@i5_LAXz=6pO3sE7k){1}7#@v-kh zs}wY=e~>F0Wl?{KhN0i;GP~FAgCyMlovVFLe#c;LfP8KyU1QvIhKw0JF1k z$UoH2U(TGH2qA9|(0vQbfz^F=G-sfw*_Hn4i1fG~YqQOTnsX>adNVo&Nd955)RAIq z{Q8OO-^RW&JPw^-sl^01%aJBbBZe{CBO@cUlarGlw`IXq$F>Sh#soqk%N|nL$beN@ zh!XtNWQeP|8B4}Xf+)w7y<;9~qT)a*di`c@t@HRIptHj6Zkbm8EqdwB+PT4t#Sb4{ zUx+*9Vl Uf%ZK~RA!}SW|>DS@tn}JViUx$R^2^n+{bJX=|}(Ldp%N3jEr#7+1}KK zX7OzI_VhHceo09YhjH$f8#dqqTw>X*N(zYpVC-#H LxhVbi+2@5T3T$sZwd6g#;`nv zB>hu1p%ewdi7E8tPjczm>%V_YR|Q&IGvwS_(gs>R226(^S@D1Vm&@jPqT`ZR#JZb$ zvlARB_NMBtcd_A%> |6A(q#1!7Yfn{$yzuv#4k-Wu-ML+w7C51#52|c|JIWQ1E9$pFQ)m$s! zZ4Dv`M2f(?di?c=>OdFL{s@Y04vjaOe?IzjMO rQ?509DF z0HF;3Q@L`TUt|Hd+ >p+CC $rjMi-J;42b3<)>gw5ZJ|IY7`=j|@JpX2(roSF05czDJ zz^7^2r-fw{&Heh=%&@3 O*jt+qC0@C1cN_vi$*kSFmDUW8w~;~$b1){i<^cYc zcpX>usYj~M9sdj(F5v-(O*zxt)j}=mprVhp8OM<0CJTt|E~aBNyuu=CG0b2>E-EYQ zxjtE|47l|K^Kbyb?KF;3lmfs9cP<-mBd6=6U)&2h%||F)3?8R_9afkQca}0KrR3zY z`nm-sV53x9_R&aRsNBK1 U#x zj$40%?!pq)fMqSXoNQBcg{;bcD>##?5(Iz5_WFDpxt^{`P_p|*-pO~NU3Xt7edFS% zl&n~GcDDEBtPS~CQE_pL@rPo$2Vk6fbYo|IhB=Yuq^^i4$Si5IupsVm2+x82gP32G znluDa28S_!FE6YQi6u_IIy1COY{Pu)dZ{tN#{mOZ6jlN=+5JzQR?>8L&!$GfUCdE5 z6po~pS%sA(wig>srLs#7X!`o5s`aQ+u$Q}Ov~xL}kqu*$?(dh@8%LJW8zke;2;z`t zLOwc;2Mu6{d17y!HlD{Nwh##l3uAl5JP*zEI@-uv;&~U%nY7~3NTqvJV>TD!P%L}6 zsbW6@y$xjm?v2*}Krs`~CntwlU(rrml{Le%TSC>+FJ2TuuItV(W?)8U3M2x30|NkH zOM5MNbF+BWfz?Ws3bH k#uiRKEQ#4vVt5!lXX+hU;v1T9+`wZP5tua zy;-M>OIwY;HAhQHiQ+>G())5VspmENtn%`Pct}4c-=0hvD4akMd|FQfsMpuMMdcyl zOdonNY~jUyiPzUnugs-N=859E|Mr<^YkzERw#cCgp32Vzn~tFHeFk!k;7OV{3b*0o z7K1j6&8Q2FMQVrwLdpbT*y!FDmcvt?R52F)YKht(_M zc8#RtRu-n;k)ssJK)s!ZNhW9&uB# zoixzh$0a*5GZB{hM?cIRTLz@$!D9q6r@tOISVDjY!6=UGV-(K-$Fr4mNi)G=?C!^p zbHp!kH_!^`zIWz9Dj5+!tq`69XLmQ{?-+v(H*@m?{qO$HRM`+;?$2&iE1IureACvS z =BG@V3gyX@nU OEFG=OK4ro zbX&vHl$GwWKYUQ3W<4O=pG}Wd!HQcu B}8uHOVPVn*dA3(TX~(2 zwj8WJaPyPA_E0(E;48Dq#X;p1LOjXpdx)biL`=E?6R6KmRuA*S^|-c9Gw+&==q)xq zm_vUjLxnQ`Wr^Zdza0)N6b <9SEz^3W!J;`M6h!xDAlr(Eqlx)rAm~h zijf8~dL+a6f^*n0^X2YLeCZT=A%S^{8WjW=#(VQ`>v(m~)E;rB+at>zg;Ds RSeP(>3lZ!?p9bsY;4|mKlJ%=6-i=u9 zHM>o_ceMvxoJJfuwfSSYBI1VZ_5S3t;B@EY Smh5GXA=_UxuX^ zyU3*cF8Dxx8?wv(x- )>y?fRF5>bLJ0eht=5U%034ooqkOaUM zSvCZHCqzZ=M24QPkDv!B@u8fa>v26Ug0i|x5QR-(d<@z@Dy)nH9MS|^x&8Eu;Y3L( zeqOk9+p^Nqu3kp{r7HN-FF_fCrG)m%dD!@^r{{|~3L8dqJ-gs-k@%^sVHv(U8)#fn zaOmSn#z=dTI5fI*%GWP;1e|;i=J3c*-x~(JJ%E{U{ZZ4}7gk{l2&qqWwG$hHPyRJS zIFZiZv Hyc$G>3eA)ae8Y|U9c`J7pPqodq> z;`m{sHk%p N61Tn2rW7rXpLm-Oloibt$qz|bMk ?cHasG~C4BLyXscI6aS*w8oiu<$?ju+z2t;y(ZIl4H0*~v>JU)3YJswdK7 zUVkTD_->ULr0`3V?42~RK_s| @!aI9+nDD~r;60>;;|4D zKC^QYt+Pr6 Date: Wed, 23 Feb 2022 00:57:39 +0000 Subject: [PATCH 3/5] improves formatting of the couldn't find reagent text --- code/game/objects/items/devices/PDA/PDA.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 8a97cc9f80..c339b0024c 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -731,7 +731,7 @@ GLOBAL_LIST_EMPTY(PDAs) to_chat(U, reagents_required_string) return else - to_chat(U, "Reagent with term: [option] could not be located!") + to_chat(U, "Reagent with term: [option] could not be located!") //LINK FUNCTIONS=================================== From 56547a2556e6ac516c03a85b05efa25ce466e61f Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:38:04 +0000 Subject: [PATCH 4/5] generalizes recipe searching, adds chemistry functionality --- code/_globalvars/lists/objects.dm | 3 +- code/game/objects/items/devices/PDA/PDA.dm | 30 ++++++------------- code/game/objects/items/devices/PDA/cart.dm | 3 +- code/modules/reagents/chemistry/holder.dm | 32 +++++++++++++++++++-- 4 files changed, 42 insertions(+), 26 deletions(-) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index d29bdfae23..921b512d32 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -16,7 +16,8 @@ GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the stati GLOBAL_LIST_EMPTY(grounding_rods) //list of all grounding rods on the station GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions -GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable +GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable for bartender PDA +GLOBAL_LIST(normalized_chemical_reactions_list) //list of all /datum/chemical_reaction datums with actual sane indexing for chemistry PDA GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index c339b0024c..1a130998b6 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -371,6 +371,8 @@ GLOBAL_LIST_EMPTY(PDAs) dat += " [PDAIMG(dronephone)]Drone Phone " if (cartridge.access & CART_BARTENDER) dat += "[PDAIMG(bucket)]Drink Recipe Browser " + if (cartridge.access & CART_CHEMISTRY) + dat += "[PDAIMG(bucket)]Chemistry Recipe Browser " dat += "[PDAIMG(atmos)]Atmospheric Scan " dat += "[PDAIMG(flashlight)][fon ? "Disable" : "Enable"] Flashlight " if (pai) @@ -710,28 +712,12 @@ GLOBAL_LIST_EMPTY(PDAs) //DRINK RECIPE BROWSER============================= if("Drink Recipe Browser") if(cartridge && cartridge.access & CART_BARTENDER) - var/option = input(U, "Enter keyword to return a recipe.") - if(option) - option = lowertext(option) - var/list/reagents_required - var/found_reagent_name - var/required_temp - for(var/reagent_name in GLOB.drink_reactions_list) - if(findtext(lowertext(reagent_name), option)) - found_reagent_name = reagent_name - reagents_required = GLOB.drink_reactions_list[reagent_name].required_reagents - required_temp = GLOB.drink_reactions_list[reagent_name].required_temp - break - if(length(reagents_required)) - to_chat(U, "Recipe found: [found_reagent_name][required_temp ? "
Required Temperature: [required_temp]K" : ""]
Required Reagents:") - var/reagents_required_string = "" - for(var/r in reagents_required) - var/datum/reagent/reagent = r - reagents_required_string += "
[initial(reagent.name)]: [reagents_required[r]]" - to_chat(U, reagents_required_string) - return - else - to_chat(U, "Reagent with term: [option] could not be located!") + recipe_search(U, GLOB.drink_reactions_list) + +//CHEMISTRY RECIPE BROWSER + if("Chemistry Recipe Browser") + if(cartridge && cartridge.access & CART_CHEMISTRY) + recipe_search(U, GLOB.normalized_chemical_reactions_list) //LINK FUNCTIONS=================================== diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 9d02207375..ca72e3371b 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -14,6 +14,7 @@ #define CART_HYDROPONICS (1<<13) #define CART_DRONEPHONE (1<<14) #define CART_BARTENDER (1<<15) +#define CART_CHEMISTRY (1<<16) /obj/item/cartridge @@ -78,7 +79,7 @@ /obj/item/cartridge/chemistry name = "\improper ChemWhiz cartridge" icon_state = "cart-chem" - access = CART_REAGENT_SCANNER + access = CART_REAGENT_SCANNER | CART_CHEMISTRY bot_access_flags = MED_BOT /obj/item/cartridge/security diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 89ff24d2f3..e1602fab4a 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -27,7 +27,8 @@ //Randomized need to go last since they need to check against conflicts with normal recipes var/paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/randomized) + subtypesof(/datum/chemical_reaction/randomized) GLOB.chemical_reactions_list = list() - GLOB.drink_reactions_list = list() + GLOB.normalized_chemical_reactions_list = list() // chemistry pda + GLOB.drink_reactions_list = list() // bartender pda for(var/path in paths) @@ -35,9 +36,11 @@ var/list/reaction_ids = list() // store drinks separately for bartender cartridge if(D.id) + var/datum/reagent/r = D.id if(ispath(D.id, /datum/reagent/consumable)) - var/datum/reagent/consumable/r = D.id GLOB.drink_reactions_list[initial(r.name)] = D + if(ispath(D.id, /datum/reagent)) + GLOB.normalized_chemical_reactions_list[initial(r.name)] = D if(D.required_reagents && D.required_reagents.len) for(var/reaction in D.required_reagents) @@ -50,6 +53,31 @@ GLOB.chemical_reactions_list[id] += D break // Don't bother adding ourselves to other reagent ids, it is redundant +/proc/recipe_search(mob/M, list/reaction_list) + var/option = input(M, "Enter keyword to return a recipe.") + if(option) + option = lowertext(option) + var/list/reagents_required + var/found_reagent_name + var/required_temp + for(var/reagent_name in reaction_list) + if(findtext(lowertext(reagent_name), option)) + var/datum/chemical_reaction/reaction = reaction_list[reagent_name] + found_reagent_name = reagent_name + reagents_required = reaction.required_reagents + required_temp = reaction.required_temp + break + if(length(reagents_required)) + to_chat(M, "Recipe found: [found_reagent_name][required_temp ? "
Required Temperature: [required_temp]K" : ""]
Required Reagents:") + var/reagents_required_string = "" + for(var/r in reagents_required) + var/datum/reagent/reagent = r + reagents_required_string += "
[initial(reagent.name)]: [reagents_required[r]]" + to_chat(M, reagents_required_string) + return + else + to_chat(M, "Reagent with term: [option] could not be located!") + /////////////////////////////////////////////////////////////////////////////////// /datum/reagents From 027002f92884d0819b8004bb542a3d677e67e091 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 23 Feb 2022 12:07:03 +0000 Subject: [PATCH 5/5] haha what if we didn't show secretcatchem --- code/modules/reagents/chemistry/holder.dm | 4 ++-- code/modules/reagents/chemistry/recipes.dm | 2 ++ code/modules/reagents/chemistry/recipes/special.dm | 2 ++ .../code/modules/reagents/chemistry/recipes/fermi.dm | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index e1602fab4a..cdad332def 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -34,8 +34,8 @@ var/datum/chemical_reaction/D = new path() var/list/reaction_ids = list() - // store drinks separately for bartender cartridge - if(D.id) + // store recipes separately for bartender/chemistry cartridges + if(D.id && !D.is_secret) // don't show things like secretcatchem or secret sauce var/datum/reagent/r = D.id if(ispath(D.id, /datum/reagent/consumable)) GLOB.drink_reactions_list[initial(r.name)] = D diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 41c0ed717e..aab46bc3e4 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -38,6 +38,8 @@ var/clear_conversion //bitflags for clear conversions; REACTION_CLEAR_IMPURE or REACTION_CLEAR_INVERSE var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this. + var/is_secret = FALSE // If it should show in recipe searchers such as the bartender/chemistry PDA functions + /datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, multiplier, specialreact) set waitfor = FALSE diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm index ad277ef4ff..4aab8e4046 100644 --- a/code/modules/reagents/chemistry/recipes/special.dm +++ b/code/modules/reagents/chemistry/recipes/special.dm @@ -54,6 +54,8 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related var/max_result_reagents = 1 var/list/possible_results = list() + is_secret = TRUE + /datum/chemical_reaction/randomized/proc/GenerateRecipe() created = world.time if(randomize_container) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index a78092988e..ce27433c07 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -548,6 +548,8 @@ FermiExplode = FALSE PurityMin = 0.2 + is_secret = TRUE + /datum/chemical_reaction/fermi/secretcatchem/New() //rand doesn't seem to work with n^-e OptimalTempMin += rand(-100, 100)