From ce0a6d8754e00a609d6dd03f81603efc17457b41 Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Mon, 5 Jan 2026 21:17:41 +0000 Subject: [PATCH] feat: Update surface colors for floor, ceiling, and wall shaders --- scripts/cube_logic.lua | 6 +++--- shaders/ceiling.frag | 4 ++-- shaders/ceiling.frag.spv | Bin 4212 -> 4044 bytes shaders/floor.frag | 4 ++-- shaders/floor.frag.spv | Bin 4256 -> 4104 bytes shaders/wall.frag | 4 ++-- shaders/wall.frag.spv | Bin 4512 -> 4392 bytes 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/cube_logic.lua b/scripts/cube_logic.lua index 55b66a8..7477678 100644 --- a/scripts/cube_logic.lua +++ b/scripts/cube_logic.lua @@ -576,9 +576,9 @@ local function create_room_objects() local wall_outer_edge = wall_offset + room.wall_thickness log_debug("Room walls: inner=%.2f outer=%.2f", wall_inner_edge, wall_outer_edge) - local floor_color = {0.05, 0.7, 0.45} - local wall_color = {0.95, 0.25, 0.08} - local ceiling_color = {0.95, 0.95, 0.3} + local floor_color = {1.0, 1.0, 1.0} + local wall_color = {1.0, 1.0, 1.0} + local ceiling_color = {1.0, 1.0, 1.0} local objects = { create_static_cube({0.0, floor_center_y, 0.0}, diff --git a/shaders/ceiling.frag b/shaders/ceiling.frag index 10ca2db..befc15c 100644 --- a/shaders/ceiling.frag +++ b/shaders/ceiling.frag @@ -8,7 +8,7 @@ float hash(vec2 p) { return fract(sin(dot(p, vec2(63.1, 157.9))) * 43758.5453123); } -const vec3 SURFACE_TINT = vec3(0.95, 0.98, 0.2); +const vec3 SURFACE_BASE = vec3(0.98, 0.96, 0.1); const vec3 LIGHT_POSITIONS[8] = vec3[8]( vec3(13.0, 4.5, 13.0), @@ -33,7 +33,7 @@ float calculateAttenuation(float distance) { } void main() { - vec3 baseColor = clamp(fragColor * 1.15 * SURFACE_TINT, 0.0, 1.0); + vec3 baseColor = SURFACE_BASE; vec2 gridUv = fragWorldPos.xz * 0.45; vec2 grid = abs(fract(gridUv) - 0.5); float gridLine = step(0.48, max(grid.x, grid.y)); diff --git a/shaders/ceiling.frag.spv b/shaders/ceiling.frag.spv index 105fb77482e3551403eda40b525f8303b42bb460..56b23b6edd7d86822ea789870bcc7811cba56dc4 100644 GIT binary patch literal 4044 zcmZ9ONpMtU6onrojX(fJ1cwp`PEZO_5C_CS0xGB|K|sU-=nS2-gzlJh5D^tb6bHZo z2XI1B#94Q2WsPgsE_7wN(^9Ln{J!pYn^$>Nr|v!H4*&RGcf;t*&qoCM#1^T;*EAb1UQ zPLk6U=1{XWIg}=1efgojIok^h7USp0ACDcV`s3)8BwhLbuHpWCrKi18=_w88E5&kY zPGP?3RuB+P^Wm8*ONyr)z6}54{?bHSmG_V164`z6qP()>-T+ zRp7a#6W(9!?W+_^y|^e1iB7TV=Mv{wjo(((t=8o>zIe5?fRq)AMsrLR>*F&vpjz?B&+UedN{zpTcQ- z-m|JFpH%&6_+!wT!G+{|FXZMm!^dLP#4PwYtZ{YY6R}Zad{P=$zXopZ6i_JaS{D2Q z`LENL&t+BCPEB*vBj+OgSAM^GMeynHB-y<*xNG`t&8gPlm%+>DH?+EjYw#V{x57Ej z#X639FoV0>}PJ&&4JTl-D$ zLgCjXG48E!p87cLkVB{cSTdFRW%$j&$9(znDm%;XfM@&PTaCB1MgO(%pN%ta znz66WH^N)TZ>aOl@P`kbuFtOv?i1_o##akCPw#s(a31bM0qg#%I}dFi@CjbV_s(3v z&GP#Z>+{7{zm&R4Rp;GJ$vqeviY+G0#|>)lq!U)_3Uy)^qT; z!ErysHUM?+y!>RU#XIl~-1<0+Z}DgD+gcy@JGh$flJE76dY^?TFGTK%@%02YGPWSDbfs;T?9cL&pN>CO1Y{qESyeNwZRwYLDZ z37l$e{eq&?39r%tj78rL7?~?i=*6Td)15H5PxOY!2*0mmAZ311)zaQAM1*`?@fH^Ve z4fx&(&)EC$08q2e{>Idz|AY8#Ao@RqAN_sbHUe{^|HJs%{*S=btc(6?k-r5$o1cfP zZ3gE1E~)8vV!Knn7uyH^W|#eMPuG&3>$U)Vz!zHIDHLu*SP?EXGl{#=eJueT?}{k;grJ75_Y-Zu|gN zEo$GySBrb~7XD$N9&>sd-!t5kuKOK)HFNE0OwBX%{M>h~^`6-g;J)vsUjA;X9mQI2 zOf7pSw!&ll_wl_?!9T#Cm*F4cJBNMg{Ep$9qaJhq2;V-(fMdRgRg0b<m1L)o}cQ6)4FM?HWeH9 z`9gf>HxU?j{~hCEVC*6gxtHLZ>sZGBV?4F&+`OkglYn!x@43LaO~yJm`_D}E7_S*V zBh@``b7leeq8UWp<@olCx-0N61L~1;C4M&ND!6&-(R((&{f+HU$D4!ic*b0t+_n7= DKv83C literal 4212 zcmZ9OS8!By6vi(ki$DM?wh;_gMv5X9EC~TrP@@DJ7A%`&H(9gn#$TgNzz{$t>r6yh0vDZ^yWtkYpUhyNS5auizE4g39U6bA8lZy)PMCBdreE%V9v(s zNV&hKI!YM5HCdhI)p;(tIOE-=N;YO|auwR>aG`IgTu5uKhY#mR@|&^t7{KN?_m&Ek z8a$T_!ONwA!CI+e2&E;dVoRx?OSWOt_yr}Gkk;(NmMZ;)t@&O?scU<%lh^+YT7F`? zsBKN2MVpvUF4+q&mMZyjwjs{R^Q(^4VvCZs)VXi-fsfpCmU|cE)ao7WDXj#U#2;4`qs)s4@_Mvd_~SzLV)+}uM!v3S?&;D^b7owsH& zYqEB3mZKgyN8&&F`zdRK&x0q)_{!j}>9-C0I)WbuuO8CU;Tjg^Ntc56m+b^IU=N z6XSYb&Es~#i^X3%BmY7;Ph*@*AiMYf(K(lSUy9!je9V`3r)+|+hd1}%n8v%hqW>oN zPj3x3`rioOH-ATi_rg17Zfx*D_@>?a8|y5?T~ok$`A)S1$92E`2)Y02j;kF8KEZFt z_f8$g&D)ykuIJ87KZd%yQoXLl{O?9flAcw;?@9Tdt~iH#;pV7oBX1m^y6+=zJ8T?8 zUg-CsMZNLR@5h&$uMPbHeD`8sH1bUWQv^p0PNqH}R(c z-?dM$zH6<(aX-cS-l==X<$io1fX)-im)mjKr*_a2=;iLY+rv+@0nhdC%K=iqyv z0->La=3WP8v5WTghupK)x1aUqc5(_!u*PFfovEKB>zTQ8UkTKNk7ww7jjaO4yMVns zFEx7^Ujx);F>m<=zdVLTZ?bLv8Z2%Z@qWOxMO-J)K^jGo?iyk zx`FfXUSAH>Bc})7ob@1bHsGtzVy4zy0UT=~u-1S> zQm_f!2+WB&--7R*h&!3bSF_Ik#?+#JAHM63{{8sT-+R~#%!&R5{O0~exSDm*UoG-W z_|5sZ!qo|x!QbriZCJlG+CRAyqu3hoF+PShu65ka*e$>wpR>2H{emAW=^c}u}lyCcp9s}3ybh~19Q~v zxh>No{|UI7_r^1R5_ksQabwo(!Kz2iQ}|Ki7*7Lhdr6W6x$h?&0(B zgMhm6XRvBf`wG5V+^bjdUk2(ir`Pa@z;^b^IlT_l%(bVn*MVo|`MK{}>pinKfcrj9 zz5K0AdlPHDF}3D9;rYe*Z{vHPg1>{mq=~M`f{@$F;GG52ECqUQ(r zYVpnf5PwAzLjMTO_a_kF@{iFxC-=u*)|(q+8IQ3($9Jp^?1$&~1yJ(|?Mr+$dxrK^ zrulv9;d}TA_G@6h`No}>V}6D;_Aeb)0DtEls}1Ppx@w-cz4Bz`5D?K;YaC#yU6q zADihhUORk#rhDGzECB9BJBYgD@$DCNC*U6k)FbCa{N|jK;O41E@00QEZ)|5a-a>rG KGv?aluI+!QN_AlX diff --git a/shaders/floor.frag b/shaders/floor.frag index 2c3fcd8..7fd4c2a 100644 --- a/shaders/floor.frag +++ b/shaders/floor.frag @@ -8,7 +8,7 @@ float hash(vec2 p) { return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123); } -const vec3 SURFACE_TINT = vec3(0.05, 0.85, 0.65); +const vec3 SURFACE_BASE = vec3(0.02, 0.95, 0.72); const vec3 LIGHT_POSITIONS[8] = vec3[8]( vec3(13.0, 4.5, 13.0), @@ -33,7 +33,7 @@ float calculateAttenuation(float distance) { } void main() { - vec3 baseColor = clamp(fragColor * 1.1 * SURFACE_TINT, 0.0, 1.0); + vec3 baseColor = SURFACE_BASE; float checkerScale = 0.55; float cx = step(0.5, fract(fragWorldPos.x * checkerScale)); float cz = step(0.5, fract(fragWorldPos.z * checkerScale)); diff --git a/shaders/floor.frag.spv b/shaders/floor.frag.spv index 8833d370d90df3c4c7443756a3cefa0cde4680fb..ad261680d1395a210ca8ec156ea5697392129fd5 100644 GIT binary patch literal 4104 zcmZ9N*K-wh6vr1*fFvTQfI0#}EQ}PDpr8;SpkhHyM8$&2CAmqignKc$5$qsFP-y}d zz=B;73;N=#JnOUL-yq|oqt58~`E2&Yo$Sn+bH3kGe`R-T#?Bs>Bx91sWPI{{GW<+V z#=<0U^{HO7cHP|xIh>1x}8feV9zF4=x=I7pLb!_K<)+CGMw_B?| zT}O9+p=W)izptykGJp%dCTTO~Y30 z7i{eLNK4DVs{&sDKKASJ)$>@Dxl^(j`G~m?d++a8tqD9GoFqF|1a?hlJAP;ld?~nc zUQMfOn2T*+*XWG%(Dsp!_yyPvzkIYT@YUd!mVuG_zI10hmaLdZCG)OD%rQ=1;c(hPfEa#O%d(9MXC^~5)%Xn5`$v5j>t;a`RA*+l;iZ2GSZ zydFICTgS*e4}hO&eRTvs3_fsXa0G7v|1e`{1b2at9X+}{>h*$sVjp}bo>4^}OHSRdaoe`4grNZLII*e8joMelr%1 z!iz@Xwo%xBK|bGqL16FKy*X@s{{`W$8ioD# z=lh??@N#x%KDOT(ZTG=%OB=g&BYG*a81ehi%3gUU%Mkg%t=Q%bk)wY(VvKwfjNA&u zvuQx|H!+R;N<`joo8K_woWuQJiNqYMv7KWT5`AyNmJfV0c7Bdqz{beO9BZ&+4*fC5 ztr;J480Q?GyT0ggJGQe0z60BsUD?{#VjCkLJ@3S}r}t66b-h3G)|rdG8*zPivoD@g zd&bH8c%S#vL*G4!e!s!?kXwh?!@H;79^OIu8?xE%!)`?6^?PUKVl5A1J697`Je!9Q zYx@6LkN8bDCgLB#wnoH1iXHI}V{br=iF@%Fwl$5jzwd-x)Z2(H7kg5`_HMdv_h=I$ zw-GU4pIpQjvGeiWV7V^Dc;7iW?H;uM6m8$NEy!Q&avANnLj4D4vlaaW;-kMGtzT{5 z$I%0bHBK|9|CA>)u8RJf7;y!$mbu!I`!cq<&fz;fgm~xYpO&jvRZuj+o=l2 z;S9$;d;>fQk=K6+Ef={*vE}02k74`IkdK*;V|#`>vvt3NEoZDX^~rf=o}c@!Hs3RQ z7jfTrkS~5eSUzd$@EZEKltZ1mC}y}rUefpjph=l3-t=M&sF z*mBkk?%RwTi*DyjbP|0UG2eLo&SuY3Xnp@sVF}`Y+Fp%_&je&KapTbqh-cP>cE)k& z^D_QOmNzxyrl8|KPs4V;a}fRU?YRhB--SrTUW{$5z4ZS}Ke_yD-cz56h_hMuT*TQX zqn*t)%*^=c*9@MK@t(Iavk>>98Hv2v*w%}@%djs+VB_SY_LbPy*S9C@ OHwW8(`dpjXwfzUU9BH}$ literal 4256 zcmZ9OXLD3_6o)S<2qYp3*hVo}kP*ZZ3yL9|pkhG@qGH!2*(58=29pgUqJkPLDk`W1 zd&S;R(Rcb$Cr*eqvP}3+_T)tojG&P?|16I+`HS@aLQpxG9_tArX@cl6VH)J z155%pHPtIutzETbq}I3Oyz|dCVrJ5q1{!k&c}-|#W3gP-aTZcQ4j{9L)khPoMk*)C zPb4NtrTmeu3D{B9WB<%L)C@- z=NL|WGxH=#UwNcftoD|II}>Alaip|js4_I1#W`dDaB<)eH#NBgu6MB1yP-6^mOfd2 zW3pU+i}k0b>oRZM&~T-%XJ`Z$d}DHzFZEubcwo3(L#6n3^rqr)abt$> zOfl;juBQG9xVUkBxm2xzo744I$^(P7a&-U~Ok-lPa%wjx51~{4rDd0w=Ilb3t9_*{ z#r5eztg{Dh^4^TY6%TDCQBBD{xI^+o91~Y+tgHJoj`S;v+7g z#oiOKIpLqpP4F(vXD!|)?W3`#qT7&Ti1*Hj^|gVgq2-kM;OS`n^7;=)M~?oPnO}Yp z*x1=fd;5Rgf#-n7f8DoYF>5k+ZWbdSF~?%>{Ns$3flmY{$@b2`uIcwR2Rj0v3?4eF zvBNbi!nUt#bjHPK`^bxzpr>SbS%%%m32tKMbHKm+ytCe~J;kf){muiA@4dP1KOfxR zzo2t5o$Yf0Vvce8V$P-5K7l*1fBCt!UZ*qlCY>=?0qk6JnX?PshWMB-?oN?>Q?dek z3gX(se>Jve8U1d-re7iOUEs0b*3|nK!S{4LRmXkc=YATkV_(pN^Tz7f_i23Z-sQ3G zd%&(S#JPPz+7M@RPG4ZpL*6;mqli!7ZP?ziIZXdR#&@B&Bl0JZw*&27Z%_5axjl@X zBt2cRzDH8Ls}S=&3N}Vw9dTpWyr{nuJLZ|-ThjGE1Mixg*V&xIp4PXPdG7ghX!m?#&nEWjb?`}J8|r8I2DrVw zy?%$^1pD3@r!UUtee5ZS@7h;r?^_dMpRdu4h`e`Ld?4d4;C*kvHrB_uzhIit#`>O~ zi8!a&Z-~DSdAxiQ_BSB!zitxtcOd-Uo7;2P`gi8A{VS8Ozk`wQy{+Z2@ek#&d+cvO z#9M#QB<#08@AtbO*n0aj+`;<2+h-$wo1SHt#OG$5->0#RyD;PZ=JaIWpNp{L9aIN@ zF}7zK(#qRpU4P6yQ*G;+Z|rhT$urTf?Rj({UG!doz7#1S-H0=L7cN8O17D79p7ZKo zi5Mf_3L|#~V*eS4{#JHH{z^pNedt7ta}Mu;zL;Ybb^*B>iN4oh%Ll#|J3q&2urcy6 zM-O()p+DwWlkqW!an9lW(-%F~ru-p%J=mB>vbEoUZH#>Myb;@;z8Ctf>phmYu4i%+ zQb1O-FW#4%5jn-D0r8ILyA{#zx85Fdw;}fM9nfzN-v#-Lvf1vyZb9Vr`|ila+SX$` zmv_dq=|!yR@9AAg5ius>`?0MN@dMZq--lg7jEQ?Oh;2>d?C-lN7xl{6a=p%2A zcjr~aI{NlyIPT$V;8}>g{&BQi zt)tJL`_Xby<1=iz__lwJy)-Ame*t%5PU4&YC7kEvnOVzxW22Y;==BY@z1FZFp5M2K zoKJAyVar)FxPuwjfbQW-^cDJh#C+rRJDWWZp!NMrg{6r97wpx7_)JGGByJjd2I85u zqMh+D^idhVJIgyd+LSbORJkA8Cb*=B)#W+KjJ z-6IfZI}+_|uHmGNkA7|7c^U6{8#5nqFWQjEI|bW%k#{Qg$%uT!oQ9o`SpYUpK5Czi UZGC-DWc?Om+fScs6T7zm0hv#GdH?_b diff --git a/shaders/wall.frag b/shaders/wall.frag index 68c572d..8de4928 100644 --- a/shaders/wall.frag +++ b/shaders/wall.frag @@ -8,7 +8,7 @@ float hash(vec2 p) { return fract(sin(dot(p, vec2(91.7, 127.3))) * 43758.5453123); } -const vec3 SURFACE_TINT = vec3(1.0, 0.32, 0.08); +const vec3 SURFACE_BASE = vec3(0.98, 0.18, 0.08); const vec3 LIGHT_POSITIONS[8] = vec3[8]( vec3(13.0, 4.5, 13.0), @@ -33,7 +33,7 @@ float calculateAttenuation(float distance) { } void main() { - vec3 baseColor = clamp(fragColor * 1.05 * SURFACE_TINT, 0.0, 1.0); + vec3 baseColor = SURFACE_BASE; float axisSelector = step(abs(fragWorldPos.z), abs(fragWorldPos.x)); float coord = mix(fragWorldPos.z, fragWorldPos.x, axisSelector); float plankScale = 0.4; diff --git a/shaders/wall.frag.spv b/shaders/wall.frag.spv index 3ff91838094d4270643c2a00a3d368397d3f7f28..6a9108c6ae1a00066d6911a4df36e2285193491d 100644 GIT binary patch literal 4392 zcmZ9OYj9NM8OIMK0U?N@pyCt>UYT;KfC_2@0WZOdHjyg5%Sp1EtZa5M*&yDbHrA>Y zYrO@>MkKLR3^XQc%!)bMRs+u-R zTN{m1Z7OY4>a~^Sb*7Ww#XLzeQkiU|wc%1|YjB3r$YEey+3mEdf=yE z)x-+;Jgjkb#P02 zm%)?dz?R@X)8~Wl^#(s5UO%Iw*JoIT@4CJ{&bS)uI_i8vOIYO`9X` z3poEDM|)S($+~sG8uN_VcLR17Fn)E;JrA`d@XN71z@L5PSAf{tjris|Ys9k`Ea&Rm z!Ka^m(wggLIKS51w?LLpf7Xicf*+ol$>Of}9nhSyc^2P?^XrS}9D*#L-qY$g3@?`- zZt*er;^X}-UV|U{c&fEt_Clb=KKUZ61>A=Qyazak`!%=a+d9CdBv{RE%7k0S38m|En8{!_H5 zHy-+@ns?!4_=XLWt+RavzO?hU7Jn5!{n?@|F~d>#%fLKiaaOP6&jP-C?_#~ToxpYf zgzW(8z9VwKQEKtd_>HnY&f>*z&vAD@Ew_rbxnWv{trqQ z)-`ZkDidlTIJg9Yx{ zJyqb&|6CjQ?@ZJiKT_cKJC^g!?9Lkebzmzyv=O@r_}%i`)XV;OepdqZ1u*$lz%z1> zjYaL(@vZf{6}7$i>QTEHKWdFFU{ZT-$#uV{_BYS@JR4)N##a3H`L<>8lR4MqImJ1y zMN^NtuEV$Y0=_J+e?4%nwZMMno8t_9SmXNr*zF+td;`C)z;DDiXPW)A?+##&dhEeX z_^ve{7=I|w{U*M#n?d9b;KzO$cLwjDdd#pBUoD>HTlm&^uD1aDnPcrB)_Bz3hTjKb z-f!cp?EN=kfmi5ZKR{&!cuba5moyjpBlv3Zyd`{ldUiu#7?@-JDr^~e&!3>bd^Fdrv%fL5=wHEipQ8UA z_|bnE{unSP`tQLn_OHU#tc(6?kzdCz=I@28)qwfqST+4SvHl&^_q%Wx_%GkH{aC+i z+JEz$_h9b@{*2#;HLi8t2KIhnk9XLI2eAi$+5_N!DTz4;lcd5 ze}k`Pu04&Zd1juU`>wU#Gy5%Y-w#kPe_BJp_J!bwLzI}|j<}s{V^mqqfZGauM$M3;J0ipi^ZCL@nU*`W2cuxBEvfkWS z%XqBy9=>Z0GOy?NXQ1XUw7=l1*)z1i=GtuR0AHeav3~>Bn{V9NT=N9h*#GIU3HU#S zYjp#E^T0;({D#d3p4kGdGtR}Hk?T+Ab!X+;5^UV(v+5p>& literal 4512 zcmZ9O>z7q^8OOKGoDmp6QBY~64BCYih$1Q)4OeTdD2FI5%W^Yw&dia+IW%*Iu&@So z#LCo4%b_TPZg#=wre&1U<(0kekFeFtR<%~HKA(Ml&tZ4=TF-i(@AtX>E_bMSh z2XYp%%>;U9;)521-nB0V)VhnUPP@d8_OGGGmX4m z-O+AWn=^U4-fFI`Z8V(t3iD*yczwE^H^-{MU5l|VpRVp|HCj_C&KYY{`NVl{AhSq* zxIVqN+Nh4Ti%=>K6l*c|uGUmze6%%97<_+rJ9@0uni?-~CA$NCu#q?S?`2B58?z_4 zBBnq42zp|w)jE{?_Y}CZamG&?pHJlnQhXboAJ|u~Hrv#zWQW0x`ov_r-kiXM>C29w z>xEs(j-dt0a3|2c`*ad6KfkTS^=GHx&d*cH&VXz6X5L5} z=S-e+Yo;ArnT?R={$7Rnh`kSD?~K@-@L$TU@LsGbZb(+xmthaU4I!5k@BI-QHw0dY zmQ&V%7oqjb>tBkF9R16ZUw$3f*h`UG?S-9zSAdVtzrJ%lYch9bijj|)E3hB?$J<5% zUkT2#*=>Pc)8F^JI2`zDaO;x3Vb`z@+rGX%&bS_JA9?Wx^aTlTN!WetaGjYqf@`%$ zy8SkR7ys?l*64R*2M@2OlXY)GoY6Ra5w{uJC;E6k_E|~aVe}B-;o$2(gd*{~5IBA#We`1Bg%Hhq1k5E7*;>#5?b! ziGL$`pD*|h7xR7rF3U!D1pZ=ypWGhvJq9*LULA2?!Y1#PhYEq!pTdrLI{aX<{-@zxlk+;8bJ)}R)-umM|2o<|@9bIU zj(;D#Y14G~EPnuA)qiIf{}4R)+VX8N!*gJBjMEoq^*pv`>$~?7+WYEnj(vZJ_C1vM z9T1;QT!o#e89rpFeb;#rFlK6(iZA8x{?&ie%EgMbWwOg>gZy~|o3g?-GEa7dn?%NUX zg0}U{H+CzhY;JnQR|i~0w#-KVJkN$jZayVXLBiTYF6<@(cLIrE~v zT*M#3F2{cgEH{G~?{`X0`!M?cWFJ94fc%^9>Sxh@U)BF)owMkph>!jU(fZZ)_4oWC z#2RPV=Q;EviF+9RA7aFxLuL_kwIlay*ycLZGw7!g@5g%dJR)aItnql_1AhbT9rCVw zCf`Jik+h*{*oo*f=LA|la-PMG9D95RF~{%Bvq8GnH@#D?`rcs zv(t$CK1;s%XNh|rZN5Ia@|~CkNB^H=d!GXT0^7S6_?Otu5WhFS!Zt=eX8tv{b@bWu z3|cN~ynrnize6u#Z!Ssjzk&1p3Gw~%oPLXVPTJNo-`MD-KYINh+g^Lv56|xph@4Mw zFJsGDGq_h0w*WoLm*^$*ImG;z5&h0(&$DQK|E0n$i2rTuHHi2uLN*iUH_UIiXSM|G zj2EIWN&HhO@3O?LM8|!;9NYPpBKqSyx(Zw06-dOs0oz!6>3^Mma^=~)r#{ONXS41_ zh_fw6JDY1*o%rZC1imWqp0_b;5cgsTiM(sDtrvN3!oC`jkC-=Omt)=nHcmcjzZKj1 S`W{XF)?(XFpKBAlw*LW{nVA>>