From 3397a1f090c50da85455aa4bcd74dfc1400fad26 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Thu, 11 Jul 2024 21:06:46 +0200 Subject: [PATCH 1/2] GTAONode: Implement composite. --- .../screenshots/webgpu_postprocessing_ao.jpg | Bin 23638 -> 45418 bytes examples/webgpu_postprocessing_ao.html | 33 +++++++++++++++++- src/nodes/display/GTAONode.js | 25 +++++++------ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/examples/screenshots/webgpu_postprocessing_ao.jpg b/examples/screenshots/webgpu_postprocessing_ao.jpg index d97c2dbd9d9a81084fe94ce7efce7416c9becc0a..a8e0bef975666ac336a7ffa4e7eba0492904163c 100644 GIT binary patch delta 43662 zcmWh!by!p18=s&eAsB?TN=iy2H46|BP`VKT$3nsjY6Oj=sHW21W` z2OIF?_wRk4d(V09^Pczp)ETe6wuvPx|3G%*LuuQATY?o?FwlmdXy>FQ$yZi3?n zQ8YuEBL*uz6K5BtvDOi?x=%50-?~i>M&~X-bQ~A>PV)V4_#=8l5{3+f68=#>24Fdt zpc~iljCuIT4hzon6b164&FR3Mm=cE)LYUr&&9|KARt?e4AUiNxXh`dI#kSsl`l?6+ zECWj~fMF99>?+(_4n&h-9D|l$;}mT75c}_O_Z%o?B%vEQRsWDbNB7=otyx>gNWKeU~|&8 zo1<4defQ90Z#A&lA*#=l&ARiG6pv2vkw%`#m0W-pgd1T#@>QjV~oePNe|QVbF3LdE4$qxwo;pI3Z5F=@wQxsRq+pc zU0ub`-`!!QC=07|V;(KvPdd+rD56fhhzS5!?~-%xQ>>7XI~4BkHLB|~FR&rAR%jwB z?s$Hk^oJkxAK7Or5Pw3dDHtG6B@ALGa7?Y7^w42;O`*KuL+Xa~0L1fovjXY|e|2tI zH@GlSxc_Mx5R|LZ+fav0cUK`O!mc`fH|=m$Hh$sj)Mc|&%0Y@M3u(+*=pFF`n+!3R!E$VqfteIB_MiL%7|FDw~CMjE-{i|2;j zh$=(8doww9_S8)lNN>{7i75kAsslypY|^yuzdz9qT|oH;!yq`{4)_C-@-It!#vqF1 zBL$7y-Nuc-oSfKa<6n1QRD*eyAC>23;G^yzpK7^=4m`Cq&Q6P&o<8%J4pMAa5KYC6 zyHsxLoG+;rnLF_1Z@8kJOm&yQUpSFvZ3_&9k#_ilAn5^Mn&yIQj1S#V@AM<6i?a0< zWhU8j3t1cJ$CtQU8~QoNQM%S<4F!aH<|>SS*O}*M?@rk59=J}MMXg?f>^Z-n*)Bw&AGh8N z!~AlMU_-MTL-VGo*qZv#*J<;H&m&j2(_|NznWuoLiGXfG;hBVRXT1IA(z$RJMZ-I$Qhhy+Giyi_vYhU>M)^+PhCE zQ^o7|&q{xsf5kRI6`OnY{9*iZVTgf{%6Qkt-TrcMx5zY|cun51qe)U4?3sZWMC%wm zrL=RPge5THgWEVcFX#xqOW@#~EJgWte>2}7FFb1F$=c}dFMa)s`H{q)a|$dqSN2i zR{IGDtA;D=cQboFNa)sAwM2rJ-`pIG?OL7kk&AxwWM0fknL7hO&bjU`*g+tu*zx_h zu@ad2e}&j2KNYoR4Wjg1hUv&jM!h7wKF?`>BapS!A&ZSrwg^$gjK_vGYUaJ(`9(;7 z^W~n?O%K)NI~9f@UnX(S1pfGZU=QNWx|?(1qd+` zDi~kQ;$;c$&_1m%!}DzJ4m%n;kaX-erws4D>n~8&g(c-2i@HpARHwYj^QnU{!s~AR zAn_CS@C#VZi2n$z`Swiy?1SIEz5kJ3ofqXd<;DyDQkw(#qAArP$)fVee$M+m?|c#g zM#llIn(9eU^qQ0`9F*k|LsCPKmcv<@_LyxDymMfSY$n#T~nA7Ch@rtcL72K=PZ5H0g#!30x^% zbW>Fw0JRY8QI3-nIM$VX-m%J&Mbei_tzhSQWsB*YBAMH0?nfRw{YCjE` z$;yS_44+*_+ZUnl8NsgMo7RH41&cc{!peuq_Zn@?A{}T{y*|{FFn;fhyg_Mxv+Kq6 zjyXfq7b%A9^yh^YryG}`>(KK$Ok)+8LczAc?|4L&=Kag@mkcA5k92$dkts9UPgDv3HLut_S7}K`kk^}>gT#oN)%L#RfoktOVk4v0+&3oxvMeNzi^6CfT9u4{IA=vRldWSCisJLB!|J5(+7|LzWJ zr&>Y|>&L*!YXcXzFF{|UFF`FT!mcstzex-@&hO()H&=iZJ;o6wpWk=y@@uB@RJOS- zTh%h`ACg`s@%Sf1TDT?8mBQCAmUac9x}n9>xw-JfC8v`rOQHvHfcXCElT{>b9B&vG zN#{Ha_R95l7vyJX2v$}UVi!2$VRJY3iJHw4?Sc}>I(mM9uAQxlVaRLCX~Q>1eIYho zbzq4k0QBMfiJDUL@{aLiY6x_4gRpic;7T_GUYghu!wqUZwf6_wYK6GsHSN@q_`tFA zjs~Gk332KNIn|lG!M(;jhW42@`#rMO+N@cxB)|FT>PjCZ9oHa{=zImS9L8`v~F z-iIbXx7@oO_uuu;T7TRG@k%@e-?IYE3#2~9Z@7BP2ML{5h5W`~;)iwB4bhoLHRi{P zB3I)_G}FMLnREShF{r9EBce@s^v<<@Xk1BD6tY0HDQl~3F^}D$YuCaq?P3&89z+X} zUJx_`^Sb_%ik>bB=|`>PZ3!js*8HFof4u$LBT1+sB}0Pt=ny88y6Pm2pw#RUMviX~ z%Yrss_v;QCUnJX(?st#pF;I5!<|3<$TxDwd4qWL8bX@?sf*9grsLC;={wwF5)&w*t|J--0i6N?vC2l1DL;pRz3c_u1EDVQ&Ittb zct+kHUvWCB4y9p}B3V76dm!2Yzo+niNtu+BB%uPO6a5gb&3)5NGRd?0J3k8`PQif+TmwcQSyO1Nf z;S5_ALhBb|6(EIOH$oHgv;kk}z=99|l2AJlblbqHUB61DeAL@xWbfa|wG_Pqu!EC| zT+KSbofb=?H$0BVSw@Y|U{WFy+E{|JON0~On{=K?A8X2g&pA;0_$KPcT)gLiXMYe{ ziL-Z;p9npW=RF!~UW;a1U@Y5Su?7AR(=RB)uBbxadA3WlAW7-`Wn42aRK6_@9wH(o z%-NbIonvP$=^u@B9zSN>-e*33bCbO8No|S;Em>ZGn2VUkzf-dyQ{{qj%>&0vkaW<$ zaYTQ@FA8bk+VcmN_bwi8fTTwAQA!+_1jI_!5 zM#02>3(uz(8NCWXm}mds{i;XD`uWcts&d(f98UItmej*M_AJEB$026IenW*N{MBjO zBUP4uSUB!IFzwpLS>?OkflW^@qt8#m3J0{Eg~Au7L?AAt0&hNKYPO~HEgPdrXFJxO zCj$S~-<*9`G5Ou9d^n>)y!>!>Q&`dzo}jwK*LFJqOMeM^5cHJL=v3b~t&jTNIF9lY zap3{<`M-s)eq3QN@@1Yi{n`bNTH3TTS{Lw0%(H8l$cM*`spnh2?D>{k5?G2BIY+-N zi&gN&y=nzl(S3(m;k-6Xe4{1z7}Cpbt6AZhbo@Hv?vT^Wa0aNf*tk~R7ft03NbOFL zY6;6p#Yz-rvy8=^6l^4N~zfT5Qm*u2@WRvtO-9x-@B zcc%E_u&!gi-Wl?-sZLx)|KU%oEbX}RVZXwmZ+bc}mi~5pkWI^C9?9RF-W)nfGw?^v zbQ>dl21K{FXC`Ys26}DnT(_3}>9&c)SFnc!W1=jSul1~}ot;awW*FJKZXLRLYE2Y^ z6wLp8?BmOgPAXrCF%r-6pv3l7Mgb$tsrp6Rxw9D-gO(mLPRipKVMn5rtF;Pzv=}Rk z?5I&G&D@dIfKvFf&(d)j;RRzjZ^b2u`qgVE!)k5bMaTEfKh6YQ+PoAM1^X}By8^Tf z)eR5rhKrZ3v1kR2OCP-?j4X+UHojU!BaNJV4wM6(?2i4iQ;lTK^u%rM_yMPe3O;Lj zzRN}|i4qa8o^cQK1v$50-Gz8E7k7GaJ*@f?^e21Z5`^Vz7Y!S?q;0%6FEuXNk|!D? zc{HZ9An<@IBq#Mjf5XaM(&Wbleu^x?-QQ0F)H53P8~oQ{H((-M`syY2xsESE z1n^?)S4$MdcO?9)#ghs=82GlECO;=|3DRz6a-i3Rt@8G)7kfj;!+%aE zous2Ae>Kp5Tw#PaXczRfASUq=RCSSnTj(+gApA06H!)XjOOX~={Pl=sUNTuqcvXzQ z-3=r-R!g*C2f8brX}Pwf99#Bx9Qew7KOHN{DCEG$^NyUAXmiaPTHlXA?rQ{=!c>b% zWQ4W64e8t7IKhr&Y3Ud9L-#omXnEbNMDNfnT|Uj)>0|irl^`-;C8Q58 zxA=9&=C!j2?Nbj*hV_vG6?d~}i8W7k*$gF)pkZ2(L9g*MZ*ZRfx)NK$HDg&|e{e>_ ztP!`cy;i&>Efe3uZIT>M^W$i8I9U{s6vWMS>&8bW(R4PSP&HBad ziifG9YWrder5mj@Jdru!t-x?M|3@)3(w&)x2)j?x->f@MW9V*8h?kiL?66d7SZZ*} zuLC&EK>|N50%QLOH`p4@E2#F1L$?iZqUrFg<&@-4Q1I}zi3*N0)0W3f4(#i=UKRYR z&((g`VD)OE8muOUqxBL_WgAdE*htD z#bLXqW0n(t-LFbQ255O@;0uMl!rX6M`PMAZ+_iZ77dftjb4yy)brD<#`~*I%?p%Uc z@xZeE9MHl9c53*3xCQaW8hou`8o8AdHkf5J?tZ^VMLp^>m$Mk?aPj_^yV$4->7`e$ zFZ0??L*g?72LS5h|n@UwMapxg&^(n25 zQp%IISGRjrf{2w17xQ~TT~{#r2G@BVV5j|Me~$D3H$l1|hOv$PUMkG+t8Q3CIHwlr zLZ!`@geVf&Guu9R@q-Mp@~NcOm#b^lLq9J(vWzlTFr{hUG~C)vtl zGeV5;aqeurzPV;IHWPEYbinbjZFn{4{7qT2hV61-06qol8u5V;izSNQhVH#b4sS~p z{2JNG8TGiUV*n~0IZ=Dpqj;;Vzg$*brv(^JdV}Cia2?|uHBJ_A@6?Z$i{|0WBh8O* z%=~S|GuHWHFG1f-Ak}r)0#{Kf)^jb>IA5>69p_3_$UO$wXF#54s?C#RoIuKrn>bY|quaO+m? zanlqQ$w-kNC(0;N7!ksXw>U&6q?$yrv=!D??w;=6)`-&TzrxsfLwhVW>kg}4VTeUA zr^$f>=1J!_E`Hu&wFZ}+=6d*B01rFj0XuMK&ef%%W=2#Y(*K5VdOl(Lc&!F3HF6B4 zVJ`T(dN>b%{lF~SOzn45U#^|JxfLq;ojCd3;Q5@pth$I>g1oD9#mM(+u=J!De|LmJ zpq7(bo?1XZsyOe7C~xAkMp8^$dlm>EWx{5b#s3cmYQvcfX7@2pyUzz&!*VS|qH%e{s@-Fd?CM64^O%tZB6Qg-aOHVNFcMt{! zF>%pHnn+BJgR*BpxPwhveN_z?7ED1>kMI3+)<2I@D#{gNV!V*6q!fDf{!RWtvi`^H z7w(FQ#YJIklVTu<^D&@X6cX_}9$8w)k!J3_VaqeKB`xo6b<;-5D}H$ist zPBT~n_L!#NC6}N|bf-2Y2}0ocMaXI6c&w>nBuRjHs~oJvjju{lEhAfOygyPG$6SkJ zw&auw8cDHsu*Ss|QIw#}^B}qhs<_xYwhWbTr%PF!<}~+v?o6vQ!75GdCsLBbvM1cJ z{}JO8~rk8qeo&yNYP<7Rkz@VA8)MGRpShXnp}c97b;!9 z!+7!tB}n;9Ro$TvVFqtrhfbv%R$Z%(zjjCpI4rv#&PV0P?x$(aQxo|9_=35!xc1;0 zi-&tcRc)08?#P(GK|l^mk6$-RK+fuV~N_rBS-F|bKfvRxZ))?ojZDYvi5sU6ax;+3EZR9isd zZSL{3zg*lm9#7oMlc>=DLSrG0%cC$9I@pJ_KOHk`oC%Xi({C`r@8$m1krI-)d#kY)x zxR7H8lsd<(4oOr`-NX%4-vUay_t@JQHf$M+Fcm{?J`HLcLrAwzdcQwDjn_3qO&`5E z&?a!-xC8}D#WDpAj{DS;&n&dLd(vj}CGkeJrWuA`^xYjxRdZeV`^W31!je5%ZPvZ_ zWxn2*pc!5Cx*wDZzI{0Bk_9Jv$6ggoaEiihOlq?v!BD6AU-4qr3czQYUg09aZw7f8 zc+=?1R_)Q&2Em)tiK-%D$l10dVHu&K;aj)gwVi;0hc$!nDc@jz?!LJW<7bNf$5q8G z)UWJ#4jBzPvE0r-cy24Wf98ztK|G96%;JwWw&GJygY*oUSPW6FzNWKV2-&ZDV2PnALi5y>~4H)Bt+0Xu}~lk#uCzIIcE% z?(k`nMNd>Nt{$~Lp}Ac~V87iJ6U4GHF|8Wf_`b}j<2){V<2a?_Jdc~hGo`5(cEs0L zZ~u4grh@+jy8@$huA|;J&ZZ|)Ia4Nrxaf(3LM&SX-S)a6(EdX9B_%?($$X8kNb4jM z{woJZT=H!hyg`D18J6(3BVJ+p1$9P|Q0|vl?5;dBSIy_g9(@OI9^CFdk&Do;EN-o) z{I~3z5D_Spk>IjdX%Gyg;I?D6^j#pc*Iml~Rs)JRB{gSw7PNIDLxmEibnJY$xL3K4_uoBvdAmWLmqc2VMB)Mo@Z#Wr(j--+SG}3Zw>I zk&D64jpR5{-7%X{2qIV)&t=gmEQ)d9iD5O`{_vc2MR3i$S5UmdzWtTQ%4abl1hXmY zg9Z_!8G{;+)d2Y&`s%9YH3ktS%;p1uB!{}*EJ!X;&~L6nMd_(d#klHXxLRLn0LeW- z{vTdmfxv#lHeWncWkK71)#~>w>2-O;*}PqQq&Ux3`==Rjrd!2-A|_V7ps2|)%q$xZ zQ@@DQC1|kD1BGfD-SM^!L{6DcKW%iyMTn4)9$VtF=2%;mq``5fpeI)?MY$9@@Pe^ThWBwX*P7Sz?Q^fu8p} zJqR|-kjnU*!$`uOPv%@nfHcbgiKShkOWzp{n6Xy^GySt}h37FVEA$pLmUo|uP4HiUu>@*lKYpSnrCII<0!AMa``ify%WOU#iH@Gx7r zo#EPV8_-b17syy(51YE05)@aJB6KSb$eoW}4s| z7D`w4$Ce_pB%~Etk;pzVH{m2esp0~v}o5lj$; zbmCzCCCCa+5a|k5qK8_(BCrxQpn>QrudVOfR`}4=64r4fO1%4y!!O$d?igO>6-p~= zH+TcpY@HTw<<}hj10SDiAh`*iKe4q{k9`ZL`(7esaZiAWkQ2yO=G28csR8&98=%1(Vn>(b8FcGPebZ6|kHeDMMU?(QyC zZAz&$H9soFWR)QGa^#)v4YCiHuHS1aQCcomv^!SE2TfR3eaivkP{mxwSx>CNgncTD zY53vKixSIIO=?&4G!tg5=(SY^-geuNaYM0bKH;h)jhkxHWLT5p?S(m{uit@Mx6lXJ zi^T2%%i0z2lzDXDEY2|YP?XbD+xM4|lN(Rt7jBk`&@$vWcND3}kLK;t+zayY!uz_@ zmmtZB)wlm)nwk$UL0m4ypRe)|oB*>Y#5KT`Cv&AxM*KbIhi&OmG2*zb$?!z;1Y+7RP&#K}*KhvyM!Yk<-5028bX%=p{(S9KfYt8E^xs zSJV7SfLvglrCBF1*d4fix_7*ARjW1^EgW~wvyR}5P^U$3C`>HKyNN}tKM4g;++WnDA21mIW!JO-U_c*A@n~VpJ z#l|SyCz1yZ%roN*n(*>~!9OIxuwGx&As9>3=KZ4^acW>N!B}#?-3K!`y_5+0m5C+4 z@!XXvl#5+A?3a0U{&>?w7P>6%sPP3&eHc6Tsgbwi`-Bw}uU)&N9-idWm5d#?D7@rH( zPmex$khr(>Ew+JyZc*t&)lOeaHiZ{UoJ`DbHUBe8Rr@OMM>Evf@Utu(E&5RY^G9~i ziZ@gmcI)FDPZ4vMAj=8e183FypV$VxmZ$-dE2SRbj?DpVo2XlYMDXl`pDzR*e4jdw ztFd-TRTn%AJthN!A+2Pe^R?7o{Gh$%nht>yx<|j!Z)m8lRBZ=_(SDkIyGOgy>!9il zbgh-m28LtyCW{t1YI5&+l{{y*<{y4lJWyQs;P1mD_SjPnp$fw9Uf|Ce>T6p!gplP; zG!FW^a2;|9`iTCnBtCLT$vfs%cEhnotav)Q&9vk9^s7g}CCHGgTp;BRK3;|1D)zRy zk&qAH*5OirPCW6dGPu(3e``Be_oyxaHvugQ0T+~I#OoJ>@cUAhUoC_QaGW|oO4_i+T({XR(LfydCx<@-L_Ed z$9`I~ofu=ri`>8cEsEg*|Cv9BDp7>Qgv1+e_hYrg=S6WLCG9o-sQfU@Oyu|LA)n?& zcJt)xu00H~ra^?(w$M;g$l;JdnxWTMh9j`fm z;xk5?+R*97>Dvm#D!i8Zb{L*0O%p4$FG0LM(m6?(gn|bn z5gyAi)1`)kPel24JGc7HQZ;l_%s8AZ?eya_D> zow2H^yNGCers_z*Rk0FpHmDr zJ%f`T?y_pyYBLP(2tILmqGXBd9I`yqcxG=q+dS}XBOi0CKyFj@Nq);1}nFBuGBNp zM$#on3G)^!C8%&)wqCq3t*Q}l&C%#p7IY0T_FX9^8RNkiL_7Qr)J`WvzfslUHVT{9 zvX4@fYX3C7%e6oz8~YZ+Z5H)c)$BK>f?zZeifcH~wAjJ}{(-USdEtFfCuW7_!V|~b z(&|K;kw^;@-X=D$hMJ*;8g#oQ4GBEf%)V7)!kbjGSslb!9zXJG0+57?ZZGsEtC9E8 z;2S+uG)|qP#9MGV&jj}y>1fnTEQ%!~e(w_3lh7qKb`ykfg=%AnkfP0sju$pNd9%OS z=FGT3i72?``dz{Fmm~ZxO!GG(ZMQ?x&$Vo=A+7hth*f2E`0|fBqyIwmA4R#ec7A>= z!k}^^s7NbTVlBA@4uq;#eq)ezZa&!z`VVLUHB-Q-2pD`(XE{lkK(V;v`?d;K|28>` z8@E!j5#bvkrOVQNSO1S%_(QU{hzF-t#ZQoPM+$7y$c^F1V26bqu$2NI&T?_@vun02K;OABP$&)=3>`Mozy zY*%86JeDAIU}hjTy{-X^(H^UJfA~Ay)5&73S$(uPzl9hzCYK`pmcE@Ze6>H{858g(&v)!r=>}O&* z4WksRE{|g&uyUG#KiV2#^6>Xlc3?PdlGz;`_JAFPmivjYQnTRI?~dBF?!^dq1sl&AR~t#m)1H97#KbPw3F;74ipVm`xiR3r&b@lO}1na zX4qXJM*2Q{{NRlCdAGs`J3`Y9?J@WMEeZlh(%Zd9hRY?K3ESRfc=)j!J}i{PhuM)> zT1}xbarv%=aFs4tP8t=-m0{Wq_+i@p+2w*2Rz{s-CC0p9?hv_PZQKjAQvi?-pofeE5~E zk+X3TkkuqG>A?4XbX>D(Jmo4+Iis19J+|w;K%>O&z#&dZDTJ!FHuID>3<(Q^tJu{1 zQ)?Tp*^ntVMrS1R=1;3x|X#L5la$7}b9^vYV5oc62L_ zhFi8dN9)8QAF$MtSrzryJWeO4f`XR|pLTa?_w*YRDy!<%EZP@pEWb4~IFwm01!`c~ zG_a4Dwx4QlhF zErQQ8Xg0GHRYj*>VN+#}rn0B`^wIql1D}mjw3D(gkS?kHorCN&O;f-{ZSC)?jlCVq z3cmZNOUbJ16C~EMr9E`LbO~MhRrHmdwPoQB=`Nm{s7$(z4bU`E6nr1wdVy`# z7Jsmt)0Im1Q%S{(&nbjEhpZ&@I;BojwPdD1;?6)xpk`Xm(<{Cs2+#?gBaa|XFVEAZ z&aK-_RF6XuuAT^`R79#Yby3`JQ@?k~Ez|7BrQ2+Fva%h1b?uLI1A`+et zds|Z%YHH3a|6kNG;HDT~p7`J0f&*KhD9SkVFG+f&U1Rl7YT@_49SDErFQR+Faduy7wkeCuCvB6T=$oAg;DoZc205Q&Vzdj*^%o_@O@PN~CnEeOBA?BV~k-}e2# zc0Kn*-Jn2pnWXGT_rwWB-cf)$GpK3l=9QpnXEG#37nQ}07mCiG<=SA8A}!cfsYZo5 z*x1ScVdfUI{qXdryIGH3!DwU@y|+no^Y`(L10g*K;4{21QnFyZEjm?moQ`J+8k`1N z*4zJoCLkE3N%y+!6VO>n2$; zMdr&b~#b+>aM1yL%fV~Au*cvMJ& z;O*L*bf&vha5qjO%1R{rrI~G|kN-%hd;#WOd`#^$R&k?bXi2rJZKT26;-1aVE?Zmo z{ZJVtBBs`}!C&XF49(B+#d%5Z9FrxdmwS#I(eREME#=f6CGF*p2*TJ>oHkc`k1FXl0cNRr#> z-f#k1loGWGk5qTw!^kx8GOd*$4|3DlW$!Wu{3=BW=ifs^%8xbr+93Sk_A9&u2GJFJ zpG1XEiBV!B1QFXzY*AZ|^MZJQd8DLlXZ7`@m0fuF!|GPrr|+V&B(~mT71*7*ojQY4 zBpkcV^Bb~k&9YHKdcU!Fa_Vyo>ME|Ixm} zxU|dgu2}8!hj_XH1lwl|*O))Wa>2QEYc`ol-a5BGZ^~W z*ATzOO!Wz!SgEq91?@3Evy&X1i2g@ZF8GA#bN$jQ!L#q!a;5<@v2z2UCtLYHm zP`X(|@XHnbek0Kob{Yb7OmQ=q#WRdNyyIs<82r*IwU1&hHgQ3q;G%gsXBUWZLUdT? zxqoEq#tjvw>J-?B67^M#(Wg0nd`T~=gDr|LUeMtuFP&RC=f2a?!WH6)J6|US!~x>O z)Qzm`S8`Q*z}yRD>^1uwSUeK}=!g0MXtKi2; zO;z};hSK@JfRtTDRe&b=b+rDyneG1TuE(GC6sp)iSC#8cGemg3D@hZwnR}fnsH~c! zX_?w2S~8wxPRGQaXmj-RT@1VIsFvo@YJ)-aY;%vcsZ*d!faq1gZLtYm?i#CLDHGN# z3Qfl{q7k#RZzKzf6=;PTpFwX9&gKG+0qIqt^3B5vmI(gs$Fa*Mhn9jDTJ=|wcw0YdZV9Xb+N@6V{SX<&klggmHPJWV3bJEn&k2Q>rUyqluAeEWO z9TNq=eEAY1m}fHW43*H;bu>LXk}QZ%XrUAYu614fE8_-VYjp4>PfVL>tvQ%cS31<` za@k{x2oSF?A|GYA?jaZ{uC_9kaG@6T_E^^60|CeIFnuZV0JT}9_Q{{`PfKCdyC+5zu+pbwu}LM zQ2txC69Zk_7Q8w-_-h84W%k4-Tj-3Y{#_aJ|@jO zvrp$w{7xp0FX9zk7@cpmFnEt*-)W%RodG~KD{}UAv(ZPvAi3={E zMIuPzVgO93@B$CkCFB*FxBXH>0Q31F*>k;0{c?T5?iFk1tM8e9uGc=4v@YG|)2HS3 z-cre|sc+alp2`@jRMX87NSVprt`UPhB2tr>@YflAFCLv|qUQWcU5uB7Hvi-AgYUN{(_U} zFYv@pU;hHDG-0%*%Irn6gXcBUd73iv>I333p< zf6+D1OK`=(j{#^sAxtLn;-*u*!o79>mAu?D$ANo1X-2N>3g@M>LP7)QWVDwca626h zLOstUBSPx&k>>owh%%yRr0+~96U#No;&oa^Da>LpgIg85+U1btB2_PHD#i3P&c}o zsa1QL0t0mHaa?pQJP;9*v}AMePp(Y{(@53rI`5Q-=EQ6EjH{QLGo-%uc%$`?)q$Js zfM!s*e?YAoYj+8NTME)QcfltH;i25O5OR%e9E+N6;cu!VUZc=D6dp?=>so-(4%g}WAb#}i{q{rHhAaZ zTN3y#L2c}04}$mzt|s{T|K>GEw~Cw+OsA$TKQQMaV@5l;-5Yl0dE#|zKou=~$|}^J z?Iju30$}ecz#6#6vpd;a1IGaqDv zq!^n<5rMWjXE9Q+Mv%x^%oDdCjV!bQ%-(@g@1d`wcu@0`1Jcp|(Ly_&#zRG!d^N`) zC3{z%wxr*f$240ZqEbzk=nNth+kKsA5qOHkheff?6(EJsjV1R|CA31Zmv zD^swcAMyd;jER0gAjD>qDm2E5T;XLg+K#Me&#nMVV9@Y5)@c zP?iV&42p@S5Jd|B@#+eSR1mxu=^`vas4{BkOxx3inJrFQ>#t|bW^g4sR8OZg^YTrq zSDbs&bS4CRq*i*BE)e*`#)}{OG(JSx3*+Qx4wokhod+x3+7yGPw96TW=2wj! z?lEmXT~C-^P)FN{^@=7T1wX&MZbn8Yby(RaMkSfxs{=%t9@HBuz-V86=~{Hx=i&6f zSD51JGp=+KpPa)K)=24_?O6W}qcn^DXz*24-%{8(?ggvT!CIOBnTgXvy=ve4giP+K zv+hgK%^i};Fw82*>o@Y&;l?3nSdM1>*X!3lLGvoLk?tfN20Pe6W8JgAd>Cjq|Dr+7 z$=*qUJPe3!z^rR*$vDohEf0g=mX?0bQh75OEV#G>o|igpId)RE8lTRqG@%oJo-47; z0scNZ6|2E^jNqHjOC613l2xovo7v7`CH9f7+@r7GuhL{!mahFJXgYYQae<+k0}5|V zk=B`fWp^X?y9IQ5Ty|e;;?44a`CK{Kmxj9jARxHSO#gGwQ>E5oo`4!}i0hV1*k3ys zII^$8Vmu?M#7TbR6fS%*U|C_=z88YVy&ELIy1OKipxrp;?aJ%`pB8sux~CvES+Ak+ zpKG`lEXlh?C)G7wFzr|ZwnP{Cw{Xc}jytog=}@CAz+1tL*HV`}O(oi(ac9PNq;fkj z;mUiwu~boY6`5PCOk%r^Hu8Y{t>r>fcRw9PF-u+URlV(2DOxv+A^+ z(|sO|Nx^~5zo&M`8|Otq)K~feQ*00jYS)s2gNAjE*K@t461lg=>(X<>B3ts-60(jqZ>5~D*}Ktvcha&)s1W3VxweSfd#57=wx-hFnR z>w4GOd0TU`Z=#>5hMCj3+`ruHQlO8Lo@;uPpvCxEn;6^ zryme};n^b8=C0+wf87RjjKHLhppU9!>SyvDEDkzG{gt3n4MfwYdAhk**Cr8bRNA*cxm+`=1yH(@ii^R zcfVweo&J7LT}z*@#ofbsU&hxzSB>z(LstHSAVB>f zw)t7J^KK9$QM0q<$E4D(FX*YIEFhA>09AXiXQw`BH+X2tv$ng!F<&^yav@^+`z*%c z@&7j#QUV?Trvv6@GiI7hbG13Ggb4lhkL_vn6>$PWICQ1F`v1NW_WYT76+@?U<&&Op z3b!oinu$))JMurrZ{2(0RewxF4wg8E&n54OBy4*0iWuwClD|u@Ozog8x+?yO9`9|T zrMbd~b4g!V)_mb3wSiu+1XHqpGDX$*_l|lA@M;g&xse#|4cv7$2!1@x7NR#&%(j>t z@rB0qs2aaL{f`0;F*Xq1{ej#YK8`*z0@tECS0dMWkR)d36lX}?PqwcS_FMv%{$q@; zx860nX?UbV|Fl_k3(2Qv1vL^!3x@;*-|Z`h>;l^Y8U8Q9?O4j#$`i|x8^mTex;vUc zuLM;u4M&1*kX+P@JT3#vnR6nO#iT^i=OR?cKuu_uwGdV{KJ;m4kNt#bl?Vbtzhs%7 zvKeo=w;^RCPVG8+P5I_c;eiz@MyKVp{}2X=n-_Vbw5t-vHRHvCLDf%*^@PL;IG!gV zyJV-c77|I~oi`6qNbO+jKngrkF0KN`kHv-QjrHTs7P8LsMBU^_YK>$jFVAmzChsZo?5Mpt9BAHn4SLZh9Oe6y?lIxx={the()9br# zut{<*fhIg5ox7$Vf#q2Ndbw}-CoJ_~Pz!U8cR_`<){7drCSDr-PazX_^8-|En=F07 zXLsyQy=asbUb|!t$xf>s0K*p=Q+8i3{GAk%L1_Z6(hJ z@v$|OuC?-EcJiXW=d)2oKX18FrehB@ho8vAcM`A>Si7S1$k$nC^1ULN1poAhG}L$& zZ|ku-9BY52NF=1ddQMap2y}eyke3Sx4FwBlsX>xS31Ua@r&vh&a(7-pS?1eo2(SN>JROk&QdPlo|;zhW@f8X?=A8(xjAUc^Fe7C z@&1Hm_)bC8g*M*L^yB7@4){UvQnHF?CA_!wq;aw8B2{&{yb}R*jV1u~XP;HL$?M_I zs9dnbC$af^w?7xXu3g!tny&eB;&^bs3oiL+2;1}oD6ev^pEng=usoi>5UWOeur6|? z$(Kp<)itkhV_t)KOz|05!(EBwOwkdZ<`1jo1 z51O-y3vwrTnG7-$bh^n87o7EL+u!cUE5^sm8?R`eIQ8$pU=FDQWgktRJBPY$UA&UD zsPqLIrddrhUuUp9z>>kl3)5XKVeTX{?YY#WD`4F+{xDl@jIZqo@z_qn^4V`0L3!TC zilz_VB`r2#g|kvKe4xJ>larz325X1=<5E5O(dirox#IvEU6oU*#=Brm6m4pUrW`cS zr8rJd@$9|*Amsy&>0WzQ-?w_c36g0Y89*9o-D~fM**vYImy*c%I4-{94BB*(n7D*7 zgofwWk9L7&(W5`1*B$e&O-RSi+SK5I?^`8zUF@#cip_~0*c$14-MCxJ@<@D`^-Z_Q z;M`c6dycq)Sq|9Aq?FLkyg??@21ez&OSnFl=@*raCG49Io*>_K-rG_A0AP&70MtS~ z*$%8aMPejM*33CE#kcZJ6;P@CWMYs`ce0BA7~p3=Y7lg3IWUyNzSaUx9H?pT(ASo% zU@|b7B-D(lW}b*&){&>qYuvXNiIB^jU`8qEUH?%{%;{7kdNgXz_(B5fD{ny=U8UuQqST!}pwcVIv(Cpb?VBP2+q!^C=;3@juS`u^DZJwT(_Hm!0>v zFHRGUQo6440Cs(S?ZvGN3xAT-7?{(|S%kiSOx9AOpbVrq&c8#N$*+Y+NYn3uLAcMD z*c}zK6oOEXRm8#Zu+n+H!^b@E*R_s?!e*xI3N1yj)pi0sle7<|8?KgslO(I0Tyn*F zzi4=1I+yADAdHp2Xj|2mqrH97YMMS=%$b#5xfQYoM9nGc&yuv2zX$P?Oo)4?lN_P) zeZhzSD2k5nS>cay?O58L9yIstZa0dv%#(r8ucBn@9ur`CKmC46Q6vjZ#D+LaZsoF@ zfV4&}Vd>n;dh|ATjO&HiB;uS)gM3~`LNMlFFRN()O?g=mN<-eC$jTNDEi|FAEuOaJ zHt^u-Fk@0*gDaZPv09F5FYb0ktdWbC|HLqlOE+kfyri*6FU%S40twX*6$@s@()V7u zpU*kbk{AX!v!0aX9r4*2S-OD5)Z=wN$UcNVI53#Y_PX)wqJiW~tTdL`Fh)2Yn>Yq_dT5dt1)p62=4itCo*L$6)?b0aCfv6Y3p7Rc#qKzwx1?n#KFF zFA?tFK0j)kpHydYtbjg-Z7npa#6}d$Z!kF5Ccnx(_JY7u6iY{UW&&Oa7FF>#E~PIhjfGMEB#S%f+Fo7! zX~pFCp%k1Xhcf(H8orEK_V_VA-$eMW-qYx`?N>MM;z~oB-qS1Lggvf5sSP}Ixsb(k z_y;RJjMd|qUNSD3CMGoE4E_RWvzAfRfAH(5g{`ZJub`Yhj571DI8iCWtFFjv^yJfnode->KpvF)AwjLE&p_Rw5w+?- zQ^=F>na*WRvZ)hZ;Y8>pX%UZ z$pTI`x1&?QLUh+MRYk}@3>SdG;77!wl^&ylRcI1>AShRy zMK*weZ224t>;Ff=5G+#dm_#NxCDC`w=DQgEu8@h^UN2RYDcLb(@hp~)j;xM=2}o$L z=L89P#bs}%rK8%Vrd^5cx)ROw)R$0Zz1R9UqlwDY3?Y)M?6E~B|GQx6OR`wkzCCCl z@9Nk|mCeQw*tGj1v?2iNBy_u1R%j;ILQ`+TCZYWb%c>JACsSR{VmMo^ud_%Wq-DDh zI0?#g<)TNof!|BXXW>#OP$00O-&u-P^%RN}K^ZBvtBQZG%83^?h?{r%8!XoTqp=|q zWq5yy?$Lk7YlAdZ5tQ;YvOcWU#8>N=@p?|Pg#Z3g9EE^B6zZv>>SE`T;KbBXY(`i9 zEh0Pq6b;;PwAk;j@S%)RD)jTNsY3$-x!3F{P`6@lXgzq^`0}HbkJl4*MUe`@3Q@@J zF(I+3@XMR0?>9a>bvPZ99Y(Sw>%b+~gntycwBwUR?$B}TClig*ZTglk+4^qVvNmJX z3*Xl=&<|Zt`tCJwsO*t15SbDXYI&ozl~8jRs30VIMHMrB-DI*JTTfUT3CjWjhqdSV zS)|*4SEr!g?&xicH@|#1z#{N>dN2LV9DmJWQ5B;pb{mfzfZS~}EyTa<^J`HlfT7HX zGElzXaBvzC_vn=1mZwKIt^TAM93Lw`X)yCQb*pW2tvOi2SX>6JaDQ%N z#`K_NV-W!e8E!gPIP{dA5G??-Bp-oI^|jL0Me1RLT$5C{dOX!7R$j;PfwfUZ|0wQv z{yHg^t5ix;4WBSM(fUV`i3aLAdqz=LM{(Ym$liUwpD5bIZs0!t(4Zajr^3mWCNTGO z&Bfz3!755tGwGv}Mz428xZ-ms&fBP{o9-Km9rO-lz69%X>=gooOe-( z?avOj_RPSgZZh~FWDuM96LPylmNcA4ffajdhO2 z>~U$># zm!Q|s8B3gUm4_9c6=a=eMy zy`bjCUHFEZKRwP3Z;l!6y`T3GqkvBy*po4^KyBL&u+?YT@ba`Oa{tiso+^3qXW+L4 z^X8#<$@dg~pB*s;(>Xdg@cV@z-Yh2J7Vt7~XOMri% z*dORoVaKHBU#6fT^fTM(9kyCHSCz4ci2*xvudk%cpH(qvnRAS%mK+NBT9;_PzVhq_ zMX(@wgl@+7VaVH=vMltsh|5YVoN?(T7Yt^JCnsZ|gdge-Jxaa3>R8CH*)voy^yEXi z=Fj2)v-7{bf^W~O_#7^(taIt%06LD&mTH$(FJFo+)o*G}nE?vVD8tW{?WhQ2zUCqO z17(_>OLp#(D{0TP4#n&l%gyKv-p}*5cM6gD)C8IGDGAU>!1>Z|!nw_PsEXY#NjHE; zrKgwcN^Vh2tQKbKT-u0P3s?Fm_wUoDxQLm3uC-T>mEKTL>fh^`hA^Z9i=lw<&SRU$ zC&}l<>&FfGn1LYX-Vo6F$t@p7kXs!B@m6 zwOswK=~&fNRbQ2g1N&;cq7FWYoM%Rde>ASx{9sH;^?G{4(>Zvi&l6_DFPuzKe5nUY z$@(67U*nW=t*mxr5JA-=BK4%q?UnCkZwhqzEAtW-7B9%CeBmKLp7u9NDEAhsD>I&q zbNZg=C^|rYGhe&RlY^_qr0w>Mg=%oq4^3$0#%Rt2%Vl=JMcs zicmi@vg{Du)PT%n)ZC+|=`>n&&+X*8SXf4HhnKADkwH*8kor^$4u}|Vv;8_9uLRC= zvJouy@2h~+fgsA$>Kf!kw2Q_MosJ+@*-u1O02gA~gRFaBUaW)Nw(u^ruTRUGGI46G&f0#5 z(A)`?2{y-wW?*?%t47W~e(Q7rMVjDRM*6DZPyCo`=3lzsXy%r3M{_H7AM}KUSv8S4 z0W@Y%d%6^bRC94z*q`4Y@n{kXh;SIyJ|L%~6-{KhDh9P1j2*h{PE6x{FL+fs+63(E zigsS_WI?(_1ome-;wuYk%{RjD&=xGd6H@X}R?m$~2oHTzDEkqDn_if8L0uJJ#c|3k9KEJq|(_GjsJ?spje0`D`4J7#3LKJNbT z(b`QR2irlG`T395=_1_;TI!(lX;S*qR;Xpf=iN=?N1Yk}C|q?;IkADbMPN=+TSrrX zlEjc{Z=d_3Mg$1OQ;!a(2g`)o32AbeCQ*}ZC`O$}q$E;XB2t3bxy#AKP7DcgAmb*Z zs==gC_&Fmt4!=bdI1piuUyM6&!?4cZ4nJ(H5A}p7olqFvgIZ zI+b%o-tqM@AF%HVcUbz18}+e4TD*bjr7TvOBT+pREJ`-^^8v3oCy#t~TI5i9M==(P z9q}R=U~uJL+n)>b2FtLnBh%L0^JIuG+-_>FT}CAosdN`RK7eyjxsrnWFu~l_!BDGE z9ltzBtMLbcdPhW{IF$0Tsh4RlcNX1Gix=6({ZMH zb{V$hQ|cyn;(5MK##91b4q8xGpz#R`3=NWABbn@kB(0Jg1-y_L@!lEfE;Kxyi|Z2h zzPd745gVyKbt=pbrn`7sVrDtBBh16=VJTH9J51$DH6z;89U(l@a~}FO{CBR^fAXfn zrpTcFg&_U_x!=lSZw;jGZ*C=aaVL_$TGff0a*#YOe+2Hi7 zX?d@pbk`ihM{a5O5%u1}jeHa9*$?g>NM>PnH1eO8rXNTEafxGiKMB&v;Pzx{a-!5! z18H~nSTTRrp@)q*Mv3~4!tO9|-5{VL$?Drj*c^qmRX-!gFFidKlYUKj?(c2mVqw(4 zRwjh$FHjX#Z)HcTgt9nDBX*pSRajkW|0v!;BK&|l*$+g>cgIk=rk070M=$M4`$Qw% z)-4JAICNpM+S10AM_hCP#>z&v84s&s@@$2?QW}L3b6cxr=4W@-nHX(3l#Fu^k|%?P zUBviPKE{w{edG*V~{WXp<7g!Ct#n|4O`O&5j$)HyRsez$D0 zaG3RTGVoiJ?MFscp-Z3JoLs3JKZQPU8fM&h(_l&)az}vmfq3ebpMT~(J_J%>cN`8< zrX+xmr;KtgA0>I4J%T%Gb^cLkEAimM$O9(?O!}42(k6}BRL2jjaw@3a+45t{@!SE} zywoCMmWBJm9php%U(#HTTgor#+MiVX^#Sv>Hy)jYB<7C#yNC{9zZ8V^1^tH%l-h4R z>S#o6yvB@%tMG;XB8iW=21{U(;C#|O!fvePOw~f=sum;f98S2&Z?H=s9!7EH%lu?b zy`++~nu1mkZ`RIP1I~hr8yE7P)&dCqQ_-$|h%7#MZw2eqRW)zU=&5l3e&D5a78pPN zh`1z`?H|C}cwhdZhR_uy^xu&!PN z{NEdXfHjSt!{)k2xQ8r33|o>$cwvQCKYNKq^y(M)r=Drayt8Lu;ExZp^TAKWM6LFM_K;Ya4t8uW?DD0dcQE*ZC`6) zasU0oq2ErxbT5GCVJ0#??def@gh2*BK(@WKTT%SwFqN&21?Lemc^qfo=}RRgg)w-1 zL>4=NIC~h%^qfWMZWm*ng8os&Hdk5s-T4#lY*<=Uju3Q2IF$emh=#3z{66?BGl}X3 zx*as20PCfn)fv#Y@}CBMqIC`uqaXBP;A^vafX()J@YA4K{%zi>bQK$i!sKHl+)lTl zdg|b?Ji0yf!Km{@?_`CRys7q6#JCo38X~0iYZhpqb|vvTQA_o%5(v%tV)6~p-x{uH0-W$Op^~e!(&Dd-GvL?P?=66Hy`9DZf4G_p~_;YLgnI^lR&k-|w60(JLLj1X%(I|FPw1)K@vL0i zO3`A19w7UVqVY{K(Lkf0?M8g@Q~^z(N#3s9mw-^)FRgWx%|Bm11tCH+1%}z@46)wL zx!Hd&$o3GtyZ6#v7dDx2Y>@F^s5kYT?fn8+Mtn)G#f!ZzPB4`M=Gs+QwTJb6XhI&> zXJ(Oe_=W3P?pGz+CoWm3^A?E85JPl;Sxsq+Oq6kG(nu`i$S@d?6aMO z`UF3YEF^FVzD7^eC`A0?^+;M`+O(I)*`-b4eE1wXF6m;-l@*4U=Z=+adzLWT^s`4V zxR70eiW08<|3%x{gjR%E|A#;3osT%aTJO3kcLzGvu!{azk_$K=m_$_jxke~i%{U1ez zd2soq_3PMdOKIc*;Fq_VLHa|k;Krc1P#P>O7I7FIyRsDBNvFgIvz}Sv2GigJ`&adm zVpaLx20G%&w`Rz>=Arv!?N6r3V_we^4SfPm|LY2=m_uDbOYq22S4<|=rlny%xm62d zH%ZdTTAL9{ERN|mOqE&8iROD;Kp?Mz&Hl&g0{)x(00Bz+lV8&q`TiY# zb;UpVtXJi|!u<~guUeA8-}T-JGwPSRo3Gnhxl>C}d6gM3PPh5K759&``bXi1gxg|@ z23Ps9Y8}y-9^)D;uf&VmMGL%#Nb;>BswjI?HHdg_r(`R`Ku)@V5{vv;kFi&(pGoH* zQskHoW*i;?B;0=rO3i9Hu8l^ygFXbtY{5^TXb|shI@_^ac&0k(gmC7+Y`cW1E*IocVb6L%bdDCxy>jTu%3xj2 z2~^0`7H@*2oeyhB@(mu52dw>}ws_As7%3;4b9gb3nLtmO`37dNqm6A0tvHcUwTH~T z1Y`bGHm*V2}aRS>mNo?3vKBIKXX zV*m(Vgn3_W8HD1-b>l5%KZzW)0+UhRvj#j<$`(V>86({)#?bRnGN4so!7dE zS^a64tGV))iOfE#z}X)o%OX?rqC0>61h5(Vkmcdn%{q)qZpg~*;P2&GN-EA*pHXD0 zY+XOQzRD@wO5bC4XkTt4qNlvJkB6SKfaD7e^zt|rl1V!)1e}uTO5(mb)}n{a?W>_~ zYf>g{RZ7VB6{c&2^5;A%1K02Exy*OJJAcBtIbyKjI?SD6dN#A%JN*a7Znz#B0^Hkh znIsAyt7>;HFO5bS_(v|o<89ksOT+j5tq%g0RGpFvj$g&kGmL);P?pR(Zu^zBON`D-ELAFORvLlnw4u_B$HleTzvte${~6v8`n03< z`qtW&r7SE%q{Nu7;rlx}^mAt=Ps9UHt4<%zwv7NO71vwywm?eV)e z4)QX}H+selg8`MhM+2PeavOzl<@+ik&%+{AqDHx|ab|5FPPag^P|jYdT=s^$9Ux zxne<2XF<^#>F}j*qnFRBsNyWltLLi3Pv^~Ms5-cVrsXHG3HaspqYFQ6f&JNe6_ z$wPB_0nlAH=Xx1#v9Hz$L;S@=CQnOcPm zh#jykp=#vw9iNw*k4pJRF_Z$7l@ToIV>_f;@Y!S_=OXk1w zh(cK0arC!Yj>MIK5pVZ3@p^Z>Hlhd_FO{CE@JSF%jg%oO6WDNQ+Ct#xsCA@}0T zj6qqsOa$tN)~Tc>gbZ}0no}%ErCV(f!eb{DHoQ{+7OH{GU4*0Ag+Hj_Dm+Ab z8w@qas%JketxJk6yr-Aw{(fkOl6RklBYK}mm7xmv?Lu(m@Q;$imkY2D!|o?`u`vA? z)P+mMr#c77G06cXyA`p!Js9ib6?o4(MC~|p|6Tt;K(TqYU^4l+6Rspnz`%f)Uy9F9 zV&Tgz&JbtOL|l27F(^A}l+duTUbnNf6+C5^XOa#U!mIi!4c+ccbZMyEOK}+m*DF_$ zZo{w|EBwWn)d64Gmi6&De-H1@y)o4kf%HaZF~&YttwGdF;&S}(-?iy}Z2vV%5O;)o z0zw`*>}adeg>06j|D6t(Xv&(=UL5z+UvC`QB{>uYKPArwAN@%|rERL;+IK_Jhjx4- z4&;iDr}&;eu`Im%rH?7Yebs}~jgFGbp-aw!vArHO+2^>JG1d+(-rGm*oK0@0VMAVl z0b9m{)V#9y2py1!*d$qgwhjBFBJaW$xd(`>l1){62Lj`tlsq86D(-N-56X?bN$H&a zMq=>wmFoxGvB=@aEB+-BT%I0ri@PCtb8aU`%_p;@MQ~>dr^$uPwhl zc^XifrtR*eRqTn@E>=6}>-^6>AEEj)L;#nJw}tI?(1ZEUdf6DUE-G|wttxi8=LX4$ z_#SnQY+L`R8tu$?TZ_aD`M_r$O z*{#9j=i8y=c;!Y{kP^P2bceg{#^h85T3J?~ob3-)L%LQXcJmo@u3v0-4ude4xp^`m5K0s%dj3-dsVb z+(H_d{(an0Oy!?Ji4}nMFPKj*Xe?*DdKqG&@xX~HEtuU>s>y{@)i~rS`r5bDw@kbb zfBZ7`TW_qm>Q1mvPBT!1&vjGM~{%(hI5xQ+D9m5-lIDppi!1>eR7l1cNvaUHa3 z6qoehHwj`Y!eqBA>F=9-Z#&Mpznjiq#I*+aTU8oGYmvW?gzThTMi)z}$WiI6*q{~O zMSy4O8bKdEJ=nHFJwWNt^X1Gwd`OZh_O7ay`o)PnxWQhINAb z!oOi8*SZJNFAa&Of3e)0L?e7S*07tcp|BL6VJ6dJho}$qP4NrjCA~iWE17Pun3KW! z=BD~h@o!W;Z@2zdjpzx=oM|tx?weFu14TSkb)KiE8h<+&urgs@1U{#T(>KUd_Ojoe zzgXsOrE^h>TbH~z7l|V_ABHW<83h#O)e?aU?tqvoDi*5XsW^ky_^RIvQ=R!0N=OaN ziydZqy0l_zkPuHx6(V;2_FZ)?S}ycYd6h7MZ*qraQE71G#ewk?b#vBo&(hR=Ak@@l zt|M34Vt>ODZ-|Y=O{O?&$w@FQ09vrHS?UcnBAtcQ%b^;Tl9Il5aC1GC{fmrLwqVOnXTD zjX~-$ww3;GZVvK@Wy^kc<5U(0K&%_h9k3)L6!rwz^b|E!P*VAKbsPt|vD~6&c8d!?=RcgRR=xa%ktA^fHN-ZyP?$z6q8L{`nsu|e9-JOW(&w#54R0jhcfJArP!v~-rOH(@$ zK^3tseLNl7C5!RHRENCwMA$Ic?oOh}TKdSGrF7NkJ#Hni z5Hg+KTsbexr=x`{1udLEdvLgliw?lZSjL8%CIfga_-c@S-W%C-$7Ig6bb*L#yvuZ} z8_p{=sp3q^l?EOVs%enqd-%0p!#;g@V&y-IAcMOW3j|M_7gpSN10S9PlkC7LU5 z?phAACMAM+F4)5{O*HqxQQ?}+6Y<(f8-DGn6QZrMAybVzp_cwZ#?u`SL;vnyW|kdH z)K?iO(gU~Wx4T5LUCWO4-LXPK9X#q!b0nLcI5RW9l3F%ztuy%edbpWR`}m!2b?E#T zdRM`!xf}MfXrD7kQ3QZwo{8;+5S|26<4-ZND-QkiaZB}_OA)8=tBxKnvTVNj_BU|f zkF9jpg}?#jdgobkx$XgunO`G>A$cnjGg(XpdO(~QtD^A!cO4hsNmWY`(amFUOrGV;svwtPbMwteYzkm>o7ig7REqH z|8YIJT#I^RaNv*2o;cp(OV10V&0#@x*;Lu zv|m{2O^5s$hu#U6m?TkaV8FpV0d}y4HtB)@hYD!M{tJOfUWGT+{rz%;a<81tVbaKN z!3{W9g`iGG@*f$K_A^ir$zFBttNi*fr2?&}n@bsZacZ`D(ZPiv@4tl3_}O_AAJ%hU z_F`mc7x~jiC)4#2Na)s#tMQ{3W|7Kd0J+V7HJ@8$$SZi7Ne}U@JuA2(v$b(2tzJ1e zCF-eFE4_kP{!(CvaqY?bX7axK*h!CgM^3OHJp?c6Fq{j+mQVq9pFi_35IlbJ!`SeN z+!{Nlm~D~s?}rVokmhQzD0A0}ayyNV+thk8S^lK41&<8nCEh3B3B=~ViUv6TQE=3U zFcSbBg5uKLVo`F>P=hb!^-VX4Er5!sxWn;04J$%pir0DDwkMQP`Zj!sdQ1$^IjIlsu1j9j=fm0^}(}!3; z;C^qqMY)M4XW#GwT;_!L!Or9}$02bR+V_uwIatyb7q6pR8zUl5_xFBKY*baDr+FHa zaS4t2tp1DSy>e>0V6f>+TKTGR1$Xbzn&^0yy>rE7ve}UA%8xK8Hf&!5D|?-XVdE!E$3><#YPOa2{BVZcv=cExe0Z z_(|uzV8wAI*FrEz(aI_#VPi>8mU^ST=;M8K@HybU?REFz2klFZa4!yPF;Qa=V;(_e z5q3x9G+^ftR8?QA>o$j}3$8V587q4s0}TPVcaK!)@ika1i7oW+T@q6Dx_9ubOW?u@ z+cT_g-Wej+NcY7bnWhBUTW&Tno4>nj^dE&CQ#{|TFc8nxsvf_jiz}oSD$ipmYA8b% z=j6gs+n1YH2fz9+&+rt$dmrh0)5Vr>xxNXPtqel11^Tq)1hsv&xRuSyS zao*=oB1J~TXFu;u#}^FpA}k5&xFutUki^d4J8zg+Uc^ll`?uel%W!Q`W|N1;bckU3 zaN%!lZT(6(y4IkA$#Tb=8-o5`Fy`+B9SSWui z1mFXB3wSqRvkM~7iiJS(?(N&97EX-GYD@U8LDsKk-86U>pOEc1(jTy#1P%y-(scHz zUW#gDWNt@6(2=C1dnw~j>Iaoxdf1kBj}P#tGt7pGn{CYFzwB>PX$gcOi=9^uod5cs zb<#?mCkcAV6%#8kx}@vOd6d|_Y1MZ?6VgrWW-jlqFLN#)!|Ui-vm(2%%d4u7Syx(& zoh3}#J0PWnFFdUVp>Q%mkZH5owfG2=_~}qgNyEYGdSG=5)Cb1b-+yf5RN!MLG*GHc zcMIkDR9qonS(qI1=b%(LB1cZ&8b0Pk0}TEdeI~NvE)U-|)KlN6m-y7GwJ-?mCTl=~ zZ8?wD6Sx?1?pHap{NBBnX*0=os42pLbS3jW@R#I3Z+j5a2xb@kr*nlmJi559zBLil z*qVwC9(H>0CX&_aJU&jGVm0iSlFxRfv7$~@CnfOrywYCO>l&>G#wzUr4N9T$^;E{UvJFUI%ZhfBa-1~z-jUdTltWx~u z(`Aa=;B#owTvS~I4qTh*p3Vj4G1qwI2)->gH}=))AV7=LF2#=Jw>{L@n&XxD-aoP0 z*h@ZxB25D2Xh_>}3&eEYF0>HMYA(9*_n?E9U_kZh~I_5^vyXYq9>YQRPN+ZVhf42#`vAxLV+h0U(rEK}2=~&4exTIaV#6%BU1V-}EwQ6>IagtH&$Wy++{vKif`xWjbX2VR zjvoM(^`Gm0bmYDJY>^%{hp4R=BKhjDs{iFN;klMS>ct`IxQm48EVsCxv|lV)S{|$F z57k*UQZt!&Y5O^A9UaS6C<>P#wq4y2V?1c`si4v0w0wA%Xpf1E=LZ|^mj!0s=;hbU zzq>!2ok?$UW#8L#MbPMT$gd^aLovMUg&3^`eqbfo zL`5|XmfWK!V{v2TAH|{D8}sV8j8L8G;QFL)Vf8sT83Di}L7VmVjy}_E)QD)r?Th{DE2n6t;SDvb?wRzq=_tg^O z*d$cNk^S|7dGRzAoKchN!>vftZH(AHxevdwH32w|epY#e=fv#dAjm2u)fG+|7ZL4U zpzoq^enIQrN5o2FgG3a6T>OrO275R52;D5SvOOYa>9x?ccCS$1DCZPhPcG@d&LL=7 zB4ZG)2oGAOXYdEqv27^CVyR8GA(p?BZ)TEgLd_H7D`e)sdTo)?UTEY&W1Qpi~&X2bs24YIaR~#j~BNg8W$Y&-5|~Zpc+4{hf$3e ztrqi!VQEX=!&(`lUcdC~eY0-+zV^oh8Yv-%#hCw$-ODsCa5%YzYDXsrsRV`Z7u+R3P{XrvArnBbQ)`UPnisUvo|ul-JH!@R7|$>xhlFf)EtwO zWeEKwfjkhm6N$B{30ch_RO+^@{-A%YVYTr9;}r%0sdeXZK5sYB!KkRTDw+DtE2i&2>UomD+Itp9a zkner^o;S-hy#XvbH#K)kY#YqgH0>)h))OCtjPYGKtsMk85E)f*5|?>Ifn{>qDBcMR z(rk_FO6Q;MM!9{IMfn7k@p#7&cNnyI4$P3 zn)V%D8Q=|J26VyuB^e5iZ?-`94DvXeOZyEhoE-axAiOEl4ZrZaI{3F(P+#cN_6`g* zTSkSzh_v}J z>G_xxJWtOR5xXdJJiB&u?OJpGn)wiov4J8|+{6sK`WC+tHTFgNb~-SObYD0r8KBPjYnTQE0Ec_7)GT6YL%M zO>|YgQVxMK>Q_yDxlyduS#n2wMaA~)3E=PK*CCk9`La8d=Ke((%Ca6x!yuK&ufEA6 z_vGmnKxj!Eq{95`0i(Yh>BvMsl_Wph=jqxXs zr`VP4r&fpJo=_Qoe-jvj0bwxygG$(OM4l{D;(}*T&jl#n(L?ma_Uv>U^-!&yrmf0yn?9E*#r)?MTJXoM z#YaJ$8({=fyh9%sU*2v%TVh5jc!6h8*UK@9i0Qwp=Uzw^b5n!z`dXe#!S93t^OPgkL)OtXRCVqRxE(# zj%kCexJsZW_FTPn6l1p_m%(AL4FLYpXTQUB+ye%;ep2d)z%o|1k;TG&&8i@uZIZ?l zY+e7GO~EPyooUF<=2s$j?G)*Wi-OqaHeJ}#cKX@27iR-P(EP@r`{!S6N2a&TIJk4X zD}K)nZ)>-S2utm6|2?ghrTNq5UK`vZ4OqHt)+{=!QW3SV2Gd|XtQ22A2$U>5_b6n2 zPaM|z&@lBzO`thm%EBy*l98l>{QJVlGA$Ty)@;dnKo*qHaz1N45T9cs z;e+*YelAO;H$UuRJ$No~T;~KaN^n`Jj$T>1?$1IL_#eA8>Li3(QpqpaItn=CX!J|E z^25#Uix4lgQ}HWBsOz^NfV3DNc&ALC_q2U6Lrb-l#DOkWZx^c5ciXqrJ$1$%FJU!a z5?D#I$lZXprT1C1WMsqD5!!8PibUVI)C;d}~IAtSqzR z91Zi2F3Cz3PrrcV7d0Q;L3u@Vv6iKJVz~pxyj2S_)g-N@HJ=xE^j{kw({?vfYR?h) z%uqVa`dNHYP?QC4LnD{n$YR0!aOP`5<>G!d6ljXU0oK84)ahdbCw0-o@1*)u`L}wN zEAv^kJGNrcRo?r6Hdsun&V2Aj?92nyfSVrEElQ|Tg52n%MsFvb&eI)_p?k@?MVH>h zN|4iPY*3@6zd#d%<}>4Kyc}L1!%kU=BQJY;LZR)f1QDOa`F|86Txf#Qf96dlJjC9Fxldhqmj-pGY%P%J-y+ zxDi4&4-bj=TyVGlcG`kIW1RDz)Yi4(6X9n4!RD3E!t7cO$g6+zTk4`-7q_gs~Dzz&;Y3*)m!*Mw-vUP{*w6#PJlj3h3r}F0(ZX2|1b{TMve9l zhX95MN;cEa-(1czKe^3vRK)teM|*6x1$gilBk8`gGw}R-+nHZHQMpT}?0peT&kigJgTiPZ4$yxlzpZ)5V7ePBokbdhfr*$@j850K7G> z=jXYGUbI8Y6k1(W>?u;IwHH$BYTy!hi1!>6B2BV(3(DU}Tr3u~Y^_fxwL@GMH^&xf zFF!w++ON+A>ES=VEmRm_oJzMAst-RD<(t`HDE8A#W-#>pAamu>4;l%Guw^up;D~m1 z`k6a4V|1{3;UtJ#L?=q3{vBx&XhGo+Er^R<&&K`RXlU#bjSu)G&Keu1yFx7@{7PYc zq&hsX@`0@WuQ=?8P?F@2=!mC9EasY5^!A^&`Lc8C$z42M-^dVaYjmC~MpU;bPlu>v zQ1;cpKN?~6&)mk>x9et?T3X4TxnSP^SJ8R+Q}zFGT&bjtkUcZABYUPo+{|!s<5n_n z*PgkYl08HAEGu!{>`hj(;~JS4*XDAsd2#vv?(ZKsk8>W6&-t9sdB0w-=POu(cyAG( z`nAYrTtOH0j!T5J>>4= zus$*XKY@MQ$k@oM7Qs0ZFvqUrukbpVsqZJVJS0x|f6WRAg*JfW_0-Bi684E+sj)b} z)3#lVxZ*GSX(auEhE4t0_7Cu=DztHe`2_=~iN1R)uB~)?4QQtwDQ$PvoGs~qGWnET zeDTJFHtB?F@Xe9qUbCA*wG+Qnu0G3_MC%X#b8Il7voi~aiaw5;Z3_(F=SY8UG^M=9 zCcisfh$*Vstf)^~o8R0rY~v5J{_f6Kd*5^&&`T7%SpI`>v zvSbx+{}|e7E5u3`X=N0Q<&F0FLRiRvdn8ECA9oG{W=dOk6GN`Ba|f<3w2-Q72c)v| zcMiu7NxEH6*t^GB$dmvpD`?R~-6?t8GmdyLRzrWwzhV|rO?Q2N=HXB=CUSM~@6%cE zK$u;WZbq#AbZ0h>+~vz6Rwpw|rm~FJB%yVV!0`H#r%4Bah&ubn?7`e`oC2%DGGS=P zw`A}>uDN~v&^wr>YW$Lo99U0#Z%|R7QSBu*FaEsMLtKILwc1_kUsudWC~r|EvYC}w z=;!Ei!cXBo1DsGq?Mq>Qkaim$zQZc=B>I`itQSX9_Yfl=zYfiMfH6hiX`HY9gnEvi4gi}P z>{T47^cL0e3`;`$T)rLQ4PUzez8rCLcAgbw&wR;@Pd_1ad2zDX`M6_M10FN*|54@( zdHBzn%GBzIr{Tg;{Uwy>6*3xbIWckAR=@op1x;`xiRvO#^GzXsFPuDDIyu(I{~13- zvWx^xw6@$V74PiOV@z`76=NK$mJ#z~d?r7k;=)j?Ti85*++JeCaEf~l49MmL=wz?% z*44PEm#8&Y5cq0%)mMHRIl`bPKH2R+X)*51wWP+tcYNch)Q2 zNO{j@?eERY+LRrag`RI%k`?{Ms9*0p3q%H3CD0JjZp3)oz#bes%2+ zkGN3Cq(HENjncu+ZGrLn1^E&Z%>b@OV;Ec%JJG$2Gmlzwu_Y z0RH>0nO(6_<)_XdTWW&?Q2S}nx`H&*QS?-F74F3Cgzb_RZ+08-fTR2mK&=V7bhfXr zCQAG$5R}rHp!(R5O|$-)PGzg1pH9v`pyFI0POnpM!XhDc2g*&-8%Owj*ImR=Z0=7x zD{S(|1U{uP2wy+y{(n-F*ZI!B)nMkH#mNP99RlhEnP}ZXdS;G%MBr#KnHir z!*i|;i*}wiRbp`G!LsjHS0wCh!B9PZ@Oi`jHwlPOhYXimqf*~fr9Rg|b!x9b>#ReY z_QgwRAi$lq)?elSPW42keeFMr4^4jahoHSCoCbo-58wtUIhRGc_NWnHaw#8vs<#OO zb!u7-O|>q{oa>{`q`q5*%3u;N*4iq+xuY$rtuLt_Q)KGxBHA&HBuB=3jEIU4kKt3h zYvXNqNKk@ic&6F)@>;f~@p}@iTnYl89odC4{zyE-u2$%$%M0x`2SdLevIX-ajfg)@ z53DuEPl1Qn6Vjc);~JuB@s@_fn2(KS4~Kl_UcBb*8CzS7O41`}RnL`7o#DC2l%H(e z|K?sq*YP0P&VQ~48%PiL)`kw_ElaJvj)TdxnvwP>US`ZvZnf9a{kFSXsb@uv)B?oZ zc^tcz@vj;x#yg%BiVavQN~K#$i07Beo)rTmGNF8tCleW7yIJ9;5ReenCWg=<)Yhb0 zqauqSI)7Axl5Xf@XAE{ei_1k51(o`fx}0W~KAI$saQc+e`Oh3b3~dw&e0jKc8(~OfVy-A-iM#mv z4X|-(;$FxR6e68JjrQ-{z2DE(Up^;W%{=}4(fS|c#~w5HH5YwZ!*g}sdDrbyG{?9N zkCn2>Doms9K^q(C=>&p~$uzmk+NM+fk5fUq3Yix7qJGHqeF**F{F7I2xqPt?(p?T4 zh4YR!OM3>mo;SK^YyLW;TpGazE*WTA{sahgjVz4?3zqXyxZU05G}Ee(rMHY_k=P84 zoydwCk2>u>4ATFx^LL5!Z$LW>mycD!-<=q2WkK=JOA;3yc2V>xQ%82Xwio#=4+(C^ zA(NN)HiD&oHixf`zQf%H36wRts(j}Lz z@n_8x@@>#n%az9>@iYF~fI245 z+^1|c805J6wPTAVS7@r%Ssuec46$Svv0Gmlv@D~WAK-nRxf7@2l2&EXw9}5H(@*y5 zRx{A6SDa|B9#>;8CnmzxRI%_ER_#sILFVN(PKXaIE1gUuukPZRfWc6jb&q7q-8!`< z@1K^>pD!7TXHF%PJ74NCjwbXE zAAIF>n;1)+aw}J!E^0_~h(nX^NR?Kx*B45Q27&yS2y#_r18!BG8{BLPMuM*HhMJ)? zglPOhG;E8hl;!x;@_7Fpni;}GBd_l)IcsDKcbhu2NdUx%&iIq(#81nXa@;_V#hEu8 z##Pq|8;ZPBeP1YzQ}5Lr4}dC)|M63fS)0f4Bqv)ab?Ko0pv1yO4OLcO(70=>a1o=% zil=`BWzxmkJTz9x0Nu{vAKt8BD=btNN@@4RI^C<{jP()Vl?fZ!a$t+sHuycWFgbgm z`FMGl4(M1p<*XpwGSHI(9jLZl)HH8at~9MigtiEM_pjIaS$Qs;2KzzuWihpCbC#HS z?3FavOlQ=-bofuDR?IL(uesUm!h~2M8*6v#%jQNaW;D-sOOxIwk8%62O~*L|@hlT- z@%LM@NrV~U-4w^uiVjMN&lFVYTElv)X?_b5^uV>Uk%yETRgLKu7ufyMC~_^I z{ns@@A1ZxW%>dDUUCrheV$2gvu6MH4UnoCq=@03ztSqA{#E#U~yMYkxO9_I+JObwu za2a>5N$dqpXgY2~cq28KlcA$~2uP6K^=g;51y+9^>&yzJ!~}hfq?yG^=4DrIb}e~v z8M^7zsy*>`2~^$}p08a$THUC#2y}k+3tSqJoa2z~$i9zhwrFcs#jPR#;iaeRPF@mA z^2w76`zMPzyk?a?puj8~htfxFbB7e5kZ(1Tkr|pMsCf@eiSr;7MN}teB|sD|m{FIG z7IcQ?jZD#5Gn?LEH^(#B_}UJ%x4mX$nj9tm%|h)HSRtP>uw|NV`shVaCgXSCvUllX zc08}v*L;|_m+*%hS~{7PYf~uYp<&mR1#;~i-~_q=^#D}f20EMuPoCUXC;{^2vAvQj zuR^Mx?7w*`0;5l-`6B4ZJUSr$uVcK#UikG!`^`2%m^BwK=k9Wl!!Y+N2#i5jbtnkN z=bqOZ8#fzn9Q&3ufUa6yi_$N&6X$Kh;B`lc0v1u{%2~WK1;@#MQ}=qOj0G2X|LzI& zZ`^#uZ^hg+|Ng3`x6Eh3Wi{ak4SLYrABQ$An7q~P`iLAy{i?Gz_VacZ8&X3;0lpN7ox6s8$EmK` zElDqZ9~V=<(9A=P2jo_n#W`N0Fu9ZOIL{RC7*2YEUpG#qjyIxmIjxh$xwGSTQ|+fy zP5anm_#a$(S?T1xJfait6 zFuHK8g4+^H;o$#Pj84xn;hr9)(u=IZGoB)eHw111wkH<8QHpbx)R0>}*e^RIfU9=|=+&b*bqN@BtcVI5jM!pD9% zx7@5F^{tFB`lI(s)MM4LbK^i3$O7s5A4T3kNh&N?q%}xN)%i&MNjJl$-JjarGiTeG zJ|ld0TxZCmMXb`QKk8daL?|RFI_{(j9E=2P9S4mVl#4hqwf|9QU%Y3_WyY68X^8p{ zqq{OaC6ecrWz|9>k;}$bD{rodMSe|Rbf==sFYA6I`U<~Wcx+X7&6w%ms8iO)XdLs#c&8(ko+}_jZPb^etRwtjq|_woq{#Q&D&W#Kf*LPy z$vhI#608Aqz`VZer%s+QLS_p3g?xElN6K;&K0~gzhkg!zz5hwU$7N{-l;VOq+b&9| zTa>a^$}p>!OO8*4%TEM071vBX*-V%z>7E(PqaoeRTu9*`PKw-JGrO4S>#_ql+jf;k zmL}Uo1WF9-%J$V&c+30?j-uR$>2q9)_Iz72Pj>;tz%q{iyaz>~*Fo>Zb&V|N-4+nL zz?T)<$cS$yNTW0-+fFEJSyx|>^TwLlG8Mzf^R9i3RD52y^oKl#U7aYr?(+C#9SK#I@bz$BGI6FJVbPgr0PDU^BJ6-(M-LG6a zOiHQi@9rtJ1|&n^>r<83wTvDYVv4D=wvLpjwsZCF!iieoZ(A8MA6314Mn`zO;t0b~ zn|&#e_U7f*t(bL?%;R;cwMWmW!h6$Y0oZgGy7-5-(7*um+d9zOx_vYnPUmEddO=I0 zZ6M&AgbtKUJrhP1)k0n#jYKR^oeP&N!BvmL(JKU=N-ypZ=S%8brF;mt{K`G)TB{V} zZ&f4Wy;s~+>|{TM?r*PFznm<3uI{#T>Z#>rTTDVn6P=N6u)wi;iFYT?dAccpJ@uPS z5L;t0&I!pFo7baQl-!m$zc~+GPq+b_(Tva#n15+$J#XpnWz~=*?w}(rlr1TB?yN=A z-6B<~A*&~on3tY;o~>D9_U4CbfB#-{9jfF-N5xmsz7A(UHzT6m1S#nJwLkE30&$N3 zdGZ&v6UGwJe~})`g&$!;s5{EKuN$KgS$@t^c-G90xkhk(i-ZQ1DEuK>lb5p^B~E3pdh_8 zSZq)oZ5jo=%%7`UXul9g> zp^G95tZcKB4;^`Cfcd|jy@8^)Jj1f_LAqZr%@q{TUy(&51Am+u12i z)+I9U-P<*LoiCU7OZIP$XKS#GdXsd~N7BhQkact3{lm)nG_o7!dC02-o#8;cFQtz) zZ`J2t6fU4ld-6#4>QDFOIh|Jc%Bvs?r(z#s?M{}}r`gZ*f%7AFLq-Vma8m&~n1;kR zfq*QIM5zp?eJ8{JtXV@=Ce=>u6ox!#JVjG)=$JIxa0cI?-}MM#5A#2*Q^;j0=3wT_ zQ-4~!Sx{~3S9Lmfv>$u@`AZLZ=b;LH_(sbFI*17ji1YN~4}RxWxA(Z+1bs)i64Owd z7P+_Zg~%l!@TOq+JrD1FVdAf6>8a^US+8lXQb1g2+q??Elp62k@Ant!NjX-`OmCgN ztFx|$)xk`gdwL!tbxJ!l%u8&JZTtdTQ+5(pJP^kCpw)kEXdZvQaBr3aHF)E##u-m) zG51E!p8&^j1!IfDc)cG9SQ;iNNW~Q0ZGzx0+Xa9+JgOJq+MIMNCade}gVyRu*>qGf$RS>`k1r=?5>Qy(NP#XO~1Gr)Tfg*~AyS55l9shi;g z=#MxwIZsut1GkP0H0WbleQAqxRCtwc%a6TcXl>&0EY}jr_3U2Rht;!+B@KMp8$83H zR*Ag29Y5|23SG+%^hAOe@~{OO2^Uo@j)Ds;c=gcgnjwv^*JMEgtKs(&>pgZ`8`j#u z5v5R8Ynx;sTJt#p!m!f-r8RI_H4z5RNV0w;dQLRyg+c~z^sY%k^qMrUC0mlI{udj5 zd-~t>e3ZQ?EYvR~9Amhs6-@p99{1Xg7&+p^2jsf?6lCOO&~A(5j-HNC3oPAq?)IPP$qINLL+#D zs)%qxVApZ57~v@kn0Hpi%(V9+Ye|WNzZg^scFH`nFn<~)Yo{7@`tb$cstz90ZIUWL zrFaYcvZ}rnY+h)Ad;tL(HKX9gC3CApm6w0Jz!7put|slxw~;G{Cks)!CFFoReYA!o zv6WDL{ArS;zNEBXABTW?`HC=AIB3m3g$ z*t5+xM}9L9?~zvY6KM|INV0Wsj6y-=N)5wPvx4hfhuVc)ZGnNIx($TqR4_Y{(g>|4 zviJ;%DnakAG>+FgF__5HKFQxVr!cSm`0-Z<7)bH_n%TP3#+FfUU6)3*n+`aw?)j~s zfG^#KWBgWEf-cA#DI<9!6W+kE;Jou@%Z{7y*q20v(Q(2RqV$WJSD9s{*L^sPe6HZC z2Tk^?8Ct8^*=|c$8**Fi2UIw0E`*7oz_Wb;c@4~!2gwXK(x^w~J2x~JtfI(R82nQsqOdfMS$s=F)%oKEx47l7QaX1#L*G?9lOI%KZ zP4vJ29?&L!1PUc$1ngGn1D$K~hp+HYH?4EMTHEw>ECp!>nn%oEl0(x`?M}Qzz6cUC z({V5;PRDJUKyogIG#cTgBc?Wgup6#Z+W)|{@cnQdN&LXA)y4RYTUh{Il(`6V9&%hS z!PYM$5|=SIi0!{PcG_48C!s#-^e;YL1m~1H??a3LUbjr;yAL+r$4_wbgxa&0_003c z;H8h_s)#a$TfQbll}YS5*dP#88#nBFH}>_3qpPRkqNPWI#3!g`)(S|z)X?+$lt9z| zWt-99S$0g6eUfRJpc_rp0YS~W1>;iHP&$in zTvCdq9l*15oWVuQW%M+R6~unFDum;TX=5v`?GA7KDMx!1-8Eq;9x<{=59}s zZriA%Z6r4DlRJ_A7tc*%-16PlpH+n4d47OT5s1gePT?Tk#*ol=t-$^LgQFq;8nJQ< z*)|?(MZLl^+pSGh4{Ul#DmEjRbmaVF%xK`cWE`-hvlLJ0zxgo4gR=hu8+IX5z=f^0_m zWSC20Tn%>j&d7}-&=`$wa_55sTWG2VYpQx=1J!_Z4bS?A0uiz`D{~)E3QsC!({0xM z>mH;VQ5Km7BmdETC^=1U#~bZ2YA;F8pdJ&X3M4kUb8<-MSYsO+U(Y6$w+T5`=4pxj z@!C=kN>m!JKYKit9KAoOCr8R`3f7gT-B(-S+U*lnSNn#+cq7-I1Q6D{7x)Omd5R$| zni^R}&JWp_qO$)?F{S`AeF1)CD4~_;V`Cm>rknZpG4JI(X;i+7L?wM$ZOatQ8Gq9x zc(l8K#JO@z4?$g9Lsp{?CYr7KPJGdQPA%uC=t~tmZ>Snw6F5vw%fpBJsDW&erZyLu zbZz-bqyK2o!hJWBS zh^!u8lO*qNGP9RcDk<%_taGc41d*-_O=Iz;gxj_dS?MUp7~ZzecPK4&Fnrp7QbtFA zMh=Ly8nRC0iDs@r!M4BCdM1v^R|r0UKp@kQUPnjQ#3zi`qVInuv#dYl(@{{yTCDfG zYJ4E~rBdWyP4>Sk4^UfQB!m1}Om~E*#$&@+sv#~o z`iJP&b(ZH1=B0WIjIhyv#AdSG#2HAw=MiGx^$AP}f}w(>HX)+(wgsQtEdE%iw|~gZ zZ(WB;sb5Fn57l+OdE?EV+#IfTPNQWP&=8PFVEzBm7`RawJZj65Y4hUP;i8~LetAHv zO&i@};wY8u`^gI)#iOYqnl3fh%%-K=If^$ooxC6efFo z>5nbP?X$3`oepfE!HvH3EspgF?~XF79yaO-MV4}Wz8(LSHI;o!JI|`vA3q46Rxm}! z7e?UQK)HB1E5ThHEa%kL=0mr8g;e&IG)!C%;^t>_tUuKZx3a|v zba-QUw-q=FHmwaSJ=78vdIBGzb%;v+D_3>ibJreM6-AVheQJ{1?Zdt6VwTb70f1=# zh1~Y0*KDvn>AC^z*qNw`2*qcLzk3ms6*oJzEN7u7nHSA>z-+je} zSkTKftiNOTAlfbEzLNOn+su@9`j#_t#8NPqHQe2DQ%lNGUbw#5xi^ad`dfMafXHev zbxDnI!YjtKhzr$KekaPmsj3T@0R(7!idOvW#CpYyrjJRz>`EFbz1;y{@Y8L#3^1w1 zZ7)aNfin|KXQN={w6JPwUw_WnUjO(+GxW=WTiAOtdb-O-e=UfKj9o$Y;98EGef}Y; z+27vZiD+csxrvqETh5WtmfISGJ5AIc=nlMIjqIFADgdWimmpg*CW40nOtou7AVGFP zlRbDsgB?FE?I?#VMOH27Ro(AZiLQ`;F$xJW&HP35%*UBgGTldZ4<&2pb z%&y;}prE+!&C5TV+$?F#N4DcV1;|^@en3Q!(f#a{Nj9*C}jS zgv1FycOcP62N^A~M#|-JJWX7Rk0~Rkm}W#1{BmIa-#?Is%>^=s|IOy~m{;dqS5j)t z*nEAkqgfNX5T{D^hESZ2U^P2OX0{iNBKU~`gxN*=i}>{Vr_LTQg{IW_5gDDe1zoS( zIn6)&4Igx=aruwSa`CVNY=j5xs`Hzu)ZR&QEXvjXgQc>83hZqKZoPfLEZ{}~ArDN1 zOO$?{-!j<>YzGR7x&2dS^(lJlLZ2Vnm2QVT!rA!jlbHPix}cI8eil=Mt6dHOaW_5D z-%o>&?8k<;79c#}AO11Wi5Bg^<Wl}S8h7^&iw<-eo^GQ-w^-C5U2FL z$4Zi6L|MNuyQu8_&t?K|^j`UJ)^}q3CCuUXhH#7DlTV5J$?^Fd-z1rE?L_`|5+g5| zyo4f125HOEJ%I*K42cFyfkhmxD`KM>&E5~X3`1-c;@aiLq^$1#h(q!>ZQk@!H*>YBm9@_Bqs~Sjy(8$UAlCR<(7dk~#n3LB{ z#V72lsG*^$-#c{vXY$ek0THHXZ=9oH-m{6FdrdV>VM|T5jge|zI={*U#ILeH6TIWk z_g8MlPj@h{hL^;Uc1evo*I%&N4pzTN^9Ipc6K3>$5^nWLB`c@29hOU438eJ(2|q<7 zCnpbqLZMIU;_c(|k?fo6s5L|_c8@3zI#!;n^=%{i5l)s_KEVZn_&vM#@AgvFD#a4( zlR2-M{93Sym$l4HuxDyxKNb?#7rj`w!ZTgc#{K`RNs^l2p9&U-**+k~s2LjllaDib zSI${6*XvX&D!`XLX#P{S;g6(gv}{?<@*48C?g0t-b8!n_5=xR>G@`X6KKymbfj)%u zKCcDA74^o-#}+te#_qCNE=NCLk)!(^b delta 21618 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 import * as THREE from 'three'; - import { pass, mrt, output, transformedNormalView } from 'three/tsl'; + import { pass, mrt, output, transformedNormalView, uniform, mix, vec3 } from 'three/tsl'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js'; @@ -28,9 +28,15 @@ import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; import Stats from 'three/addons/libs/stats.module.js'; + import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; let camera, scene, renderer, postProcessing, controls, clock, stats, mixer; + const params = { + blendIntensity: 1, + enabled: true + }; + init(); async function init() { @@ -102,6 +108,31 @@ window.addEventListener( 'resize', onWindowResize ); + // + + const gui = new GUI(); + gui.title( 'AO settings' ); + gui.add( params, 'blendIntensity' ).min( 0 ).max( 1 ).onChange( ( value ) => { + + aoPass.blendIntensity.value = value; + + } ); + gui.add( params, 'enabled' ).onChange( ( value ) => { + + if ( value === true ) { + + postProcessing.outputNode = aoPass; + + } else { + + postProcessing.outputNode = scenePassColor; + + } + + postProcessing.needsUpdate = true; + + } ); + } function onWindowResize() { diff --git a/src/nodes/display/GTAONode.js b/src/nodes/display/GTAONode.js index f306ebfd645388..6113c7aa0dbb85 100644 --- a/src/nodes/display/GTAONode.js +++ b/src/nodes/display/GTAONode.js @@ -36,6 +36,7 @@ class GTAONode extends TempNode { this.distanceExponent = uniform( 1 ); this.distanceFallOff = uniform( 1 ); this.scale = uniform( 1 ); + this.blendIntensity = uniform( 1 ); this.noiseNode = texture( generateMagicSquareNoise() ); this.cameraProjectionMatrix = uniform( camera.projectionMatrix ); @@ -53,12 +54,6 @@ class GTAONode extends TempNode { } - getTextureNode() { - - return this._textureNode; - - } - setSize( width, height ) { this.resolution.value.set( width, height ); @@ -115,7 +110,7 @@ class GTAONode extends TempNode { const uvNode = uv(); - // const sampleTexture = ( uv ) => textureNode.uv( uv ); + const sampleTexture = ( uv ) => textureNode.uv( uv ); const sampleDepth = ( uv ) => this.depthNode.uv( uv ).x; const sampleNoise = ( uv ) => this.noiseNode.uv( uv ); @@ -228,18 +223,22 @@ class GTAONode extends TempNode { } ); + const composite = tslFn( () => { + + const beauty = sampleTexture( uvNode ); + const ao = this._textureNode.uv( uvNode ); + + return beauty.mul( mix( vec3( 1.0 ), ao, this.blendIntensity ) ); + + } ); + const material = this._material || ( this._material = builder.createNodeMaterial() ); material.fragmentNode = ao().context( builder.getSharedContext() ); material.needsUpdate = true; // - const properties = builder.getNodeProperties( this ); - properties.textureNode = textureNode; - - // - - return this._textureNode; + return composite(); } From f48b8b6d3168e56cd3c733f62151d5da6bbded76 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Thu, 11 Jul 2024 21:08:42 +0200 Subject: [PATCH 2/2] Examples: Clean up. --- examples/webgpu_postprocessing_ao.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/webgpu_postprocessing_ao.html b/examples/webgpu_postprocessing_ao.html index 3e43e8ea94f898..4d25758657d01a 100644 --- a/examples/webgpu_postprocessing_ao.html +++ b/examples/webgpu_postprocessing_ao.html @@ -20,7 +20,7 @@