From 5f753e022204cf020f427f967bd6fcde8b6b6111 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sun, 8 Sep 2013 21:04:46 +0000 Subject: [PATCH] Full thread safety working: - don't use [] for map lookups, it can modify the map - copy up built-in symbols out of shared symbol table levels before modifying them - enforce shallow vs. deep TType copies - combine maxArraySize with the array dimensions vector, encapsulate - remove chaining of array types git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@22953 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- Install/Windows/glslangValidator.exe | Bin 328192 -> 327680 bytes Test/120.frag | 9 ++ Test/baseResults/120.frag.out | 17 ++- Test/baseResults/300.vert.out | 2 +- Test/baseResults/array100.frag.out | 6 +- glslang/Include/Types.h | 120 ++++++++-------- glslang/Include/intermediate.h | 6 +- glslang/MachineIndependent/Constant.cpp | 30 ++-- glslang/MachineIndependent/Initialize.cpp | 4 +- glslang/MachineIndependent/Intermediate.cpp | 6 +- glslang/MachineIndependent/ParseHelper.cpp | 145 +++++++------------- glslang/MachineIndependent/ParseHelper.h | 11 +- glslang/MachineIndependent/Scan.cpp | 5 +- glslang/MachineIndependent/ShaderLang.cpp | 3 - glslang/MachineIndependent/SymbolTable.cpp | 85 ++++++------ glslang/MachineIndependent/SymbolTable.h | 41 +++--- glslang/MachineIndependent/glslang.y | 36 ++--- 17 files changed, 259 insertions(+), 267 deletions(-) diff --git a/Install/Windows/glslangValidator.exe b/Install/Windows/glslangValidator.exe index b31e3fce94a59b9ecf51bb66e7d8705b0e0d89f5..259801786302d4bdef9461fec90acdb5e2fb8a18 100644 GIT binary patch delta 120355 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�}q14XoI56GP$FMuxGH9qq~_2Bf@ct%yGe+Q{k znKQj7kh{~0b` zldmq+|KPmh1s}Fb34-vP)sqVcN8PdQJ*sHB;)>=`T|l4eE`*{)29yIrl>S z>%afq0pFx)o% zZ7QP_%h68^4AZ&O7~|O=fL3+Am^-~NjZxjgru%fa1$@fFqEx5b6*T!N174{IDF%Lk z)H8sVdVx#?4Jf_v+dBP18lwvf#~B8O=@RLTYAp9oGcas-N@wI^WSX#jx?nYyIyryU5Ft#vVSU3G$4&xT4Q`@I6$z`k)JGO}tl2pL%hg?N6!E3rj9%CnS z_S%1wmxPBh39p?lozJ*{iE+*Jz4?r?OiUZ5-^pi`WO}}S`uBWBBmVsxz-B-+Z}0-` zyJ5~=4b{7Px^yAqLS}|l|0d6mFlYL-Zu*Zx#wAP+Yp2gEVpL_kG5tspV>r{o71L#l z8J8(Zt^q|aORt+ow~vYmBK|=cN5S~ai?3^@KP_f#V+ve8J-39>hAG*7`sxx!6;4}s z2GD(BX71B(lrUB^?wlS{%9zA^&4Yo#hO3ml``im}x9NvV8M7trA{iLsqcOS{kUBvVQWsGf1Ztl}P${FRERNbd% zmNRNF{+>RmoH0;T(}jV-M!7^dZUZBzu^<6zgsqtVqnt4%W`i>WgH0-b>vT|NJNIHC zh+D+p3Obmp``n93AZ{^#Yb8Xs8N|)xZ_R>mOF-Ow{?=#+Hx@Y8+nMVRyS z9Tkk~OuEj~A676*GYL3P|5w4N$oO`;LM5XP(~bGl{VExCMPrwPf>Y*j^M967OVCW7 zOvau0(O5?MMg zHZPs7TE(cx)Vy?hXceO&Q^3;c9aW5WOae=%pQvJVXF9tCk`Om7*{)N~D8$IPZ@PUA zqpIYa72vA!e;H4}3!WF?lBWAy+)GD?>9sYCW_dnv>A)9zp##(BUVOHP+#}Tdi@8*w zu~Gokd#wS*u9OpK%e(@tE{8ggXllCSYeosiebax{FuE{BESm06%c#XzG(EeP(V9uE zXZpexMiJ13&I~Vhe*twIS*9OsVU*(DwGb3cELrRsFQy09G0HL>>IN&Fu29Fw${r3@ zstH!g6t-}>M;)UYQyfGE4|wF`^JkD@Y7iBl7EE6QQt_(`Yz7;6?4W=8yE;Y%roIK! z1?m~qn5IGGct8g_z0d~h)&T3~(OLj;3R}jP`P1LkGRiO+LDWv)P|wK9e*6>2rkN16 z$L2%SvS$2&sy){Uwvz{R=+TR0uv#v#TJ9vMT8<2s=@07}Wtp-dO4&h&wY>QMae93N zqdfP&c@PtsG6W#1*dVHSI6>q4vp<3?=YbeF3#ybkLjBT984?hsb`YgJ+#pjge*l>}8?2P)(p-oG*fJK(g?Rr~JJ?t@9+2An>3mI$3OspG zRV*1lpsLCss(5%os<^=>3PViff~sZDcmP!^1W`NvLK7n^`||f7+eN@?xtGm>*v^!p z0CDKLHn8P9{2*hU!AkkTN`;*uN;6azfY0)jc`>mOq7<~55Pa3>aRy$9(yz0@re^5C zl)6Bb3W7{s`3~d&0f^ESP^Bg?rQaLCrm_ivl*UX~Y++Ooj)p3-$$?tE3aUsLq=>6N|91xZ2P?a_?_m_cH@`!`Xy!{4brWi!!t(j2kVJbDjD%m7J zD*L9tZ)H>v?uDxHfvLGu2MG;HkRr$FHf@Xw!VXYHAuvV#5JfyvAVptZgY1+C+bR5c z2E@)7m{KQ*(&-o4Kq&#NQ~|71Xc<QXzO>56TPqC7GnL!-bd6(K4kp(=A=Dp!D2 zvdMx}@=h;kXH*d4fvPEisfh-wVV47`Iq+)wzIH}=q5ab#uB(A5;sYzBsDn)91}kNPn92oJdH|+05~7q1wEOnOzUlkB7!`!~PJy`c1WXYR zRFNjgyu#@`-HZxC1yDs7V2bun|JcPS%A*BRqw*Z&X+5x=LdsB;cVH@uz$&LN=w@VP zzy1uQ(g33J+GL2uFJLNF!76!lKxTG_D}Q)LHH#iI{WwfHH>efkhv7eSRuz?6P0 z2iwYH08$zTR%!!L8VXgqrx}6CC z-aQfGN)4DIE~p}7kfQwQe0_`x!g)|d1~5f?%ceW_F-o#4JpuVb6l9;Y5LD3wn9B;v zAf5mnH~8Y}W01zK@ZWy#uWD3Pfo;RA~cD>9tabsi2b{ zUs!{cUWF*Nf-1Fvxv~?YlpVCo`^CFQ(lr=zQ@1e{T<1{5XRPnqzE0W_3W!S_8Vc{&o?PSu2Ij<-~pMn z0%BGO$gI`KW(6RbBKH2)lsfZ$RWrK=P0Cr%O*|lwow8ZZVZnrvAqr(7|31`6VFv z>G?>WSb$_P=xV7KKktA&0TMsX;EU#oH6XJE7i;RKMz4-iMNfRg?Hyy^czj!c{`GmTM3SOg^h10rt%lHZ&+-Fq6N45R4ujA@KA z^(Sus|DVCK$eE$HM*vN3dk&J zWV0q9nH31~MD6YW|EDugXOt8+0BMwfXgmVacs_T!{&YqeM#Jeo(-~!ipWFhSN&%7o z0+MgeonAeiQHJU1t?4tTGfLOb04XqlC{ST%V0dAki{uLhc7!iLHx|5@c?;|dkoa+i zIy7JSfXuRhm=yvt>vay2Spi69g@SzHd+Y!I>Bch{C50J48eJe7TRaXBMN3a0p0#4@BMsB>y>cI`?cw z8OG4*8nYQ?>N!C2XCU$^Ao=B)NS;XGM5Lz#kj0$W!JYt#A7|)7^TeKO|Nm#)ftWP~ zWL7k?Srd@VN(7m;_uBve(+|&PloT!iX?z3Gcm$-8KXdwfkRuDH^UPtC5mo`o|AENg z0p*Ir8Pl!jFv>8hPLG(wC{usq>i_>4Jd43u`wploDbGOi#0{iM3Uu$pi#9f(FAP*rh1eY*TyMj1xO z={9p2WrV+6`Tsw|1}YCq^pn%4XU}DnVfuPydgok5>G~BQ1wIf3HXsAs(~*2(fmBI> zPXBtb@(S1&Ao1f2lhAw-12QWHVpb0*J^fBYGOGhAJ!OJ?5qstT|LMx}7$t=TKpHb3 z8goF7Sf4iCe;%U@qu}(Md5ki`M=t;WpHTvlw*mPgIc@svd5khlM=wv`Ige4gz5=A6 z0is|I$N+IT0yNbAqVh7>7a;ND4Aanjp#w5&0>msIP+Xi&Me>CQQe5PMe4%^! z|NrU1^BEhu@$8D;7{K=KoB_1;9a`pqW&&RP zx%mHo#tw*Cdq8n98`-QKNO4gJ^2Oha|Nl>KUce|RyaA-~07Rn>sH*f&nZAAjqYUH5 z>1P%&$_S@`jhFwRD#T!d;b6b z>5msNN(u*nGzLI5f*kQaaXSBEMj6Jy={k!UWrSHk@-YzkKOj#mPMjVMl4qS>v6xY& ze#g20|1)wR@-meDWII}gKSX(Qceb)xbtG&^z%y@WrPz!x-LL;O#uZXL;UoAOBrPtlcq~A zW0VmV1N7#~I?#{8bAw>j%WFD6} z2zwLr@BeWrNF%PBfdSNqH2`gE0edyzh2M1j6^t^%j38|e5N#o#>mnA!OpjZ^D8tA! zy&5FH^(3fG3Xv}Xc`PJm`l=O-GWFX|f<0CM_84fA3OU9yLAnwkxl~S zB9K96f4sXn<(j0`gcv^z^=!j517@PE233l2KZ#6{MgCqyTgPkUGdvaL~ZEPk=i56G2hk zGyUUAMoD2Okoq|w^*t(2Kn6aHnl8JFQHIfZy45O18SQV!|NqZe1Cj^r#F`NW_ppnK z2h4$>n`K`7JwCm06{AGhW{`#h5DhgiLXkC8z%+m}(XQj*Tv~CQp$si-3P46&0U6Pw z0@{f3fqU7a z+}SNE97ypr9i;o_F;Fc5N+w8=-P;3J_@W177Rxel7O??^k2bPdprHkrr$AetUi2OV zwE$OxT7V#p0uYU$$bWG^V!HeqNDFWcs0DcR|NjgHh&<>8w0j>qL06`iE#E&yrq4`1wWL62pEYLoY7pKFJ ze6a(`EYK2}7rIA4Ex>i47T{q}u7PNL19C)t*!22!j516Q4^N-F4%7k!Dd>PGkOAdJ zp(3)ko*?Vm}QTO4@mxbD3Z+{NcF~IkS{zBgM9%KKhAI+%@=E@KuiL<=$ar`9f(?vf!qY(Vdm!@Qa4`*; zeiCHfBp$GN;1EDE&l{xv2t++NoL>b`7um?DsO1h(FTo7&p@Z#b0I5F#Q4fx|`N7lU zH!>jBWw!w`9JiUOrTS^!BKL(;bp~DRAhWVy>Bz4nD7daJP$-3Tu8YGPT#(nQL%mrC)mB{ z5WK6O%LC~D9*&kIlW*Dqp0xlz5oAbXh4*L%lou|=`*%4Drz0(0J{=&Z56W7H6Zl{ z5cS~tLposk<1LJe>J_1(5E2Er>F-WnGN(HjY_j~^T z&+ve#^m#GSe|qj#M!EWr?BH`8Jdjnc1*r@Gsf5<6KK@7{^#D|Q_qwRSLke^S!i$w4 zb9z)jlE_9SfsBd(83n4+SrF!cE*kB1QJK!Qjge111*F+W#Q<5S0!U{9NN0}Myc^0~*vSK{me&q`m~A9^4?( z^qYPaq`nQJ9^CXnN{;p*^)(Rn;AYo7-{}h585OmxA?m@+E+q9|c7Zw}5cQz?`Nd@4 z>DeIlA6UWe2|#oIN|5>ou!BKIejz)c7NmX+L_MV4?t_#{z|D5#RB{xQpDH0nfh3WQG6EU31!5GqJ8{t) zVbpZP0Mu<; z;Wa&M7o(gyXzOgRk4gfvQAf6e3RIBF9+fYko?)`r^x3-@6?qSUHhlJ|d;p2HOh37c zQC4zODtKe%;WKA~yJJ*%!oq{Qf4*Qm@c;kx|MHA-Oz{cR7oMK zVgXtT0lER12Xv>pP4e`lJ&Yb~{|h)?!Ddl=0a&rIjv%P7GVx@o%R zUPf!a14s^tSvI|BFQX%G16(Zd1@H6&dl^&sX2694Ud&lK-Dn@9j(`kEtWe;8A3)85lr&R6zrX z#%Ep}O8~9;1dTf$;(#asomPmXU@5YK9iR(5kR&^hCBeoYLNz|!8AHWRR26O*3U;9? zP)(T5dVo>hh6P#Sjw7gwp2s73W5-cc$y4#u6Amy+Gp&uEUJIfp#801ffKl3}7)8@b zR83(hlBZB5E#s$u1eqigKb`L&qcqe1xaryl8Kom1#UVT69IB?HD3a$klzXGxfzzp97)`W2f&t#3*eOf}&{^swQ(3Nzie4NNGqacDle}Mro$M zG1GNH^n;k`UWXZ_Z4SpEI|FpvDUzmTD3Z%jt?P`Lz7S+mPR#UuAlg4>`t8Gv(ve0e znn2Ygl8K@ylABRY{1J`pmaV9gx1*=~A7PYc+7~@N2ShK7p5A$cQJtwGdio|1?H@h; z_7O&HCM7T}t3MyK1hz*7ngPE?AsO9$`UNKwO8&eSH9h1gqau^~lTMIqm9oPA9xXrV#|Mvi;fHnPdhUB zpK)Y(aK@3r?zAIA{Aou9(KC(=KTbO`+&|^WuWXB`>L&pI+3KI6y`a@LVy*%?QM!n2MHw@*7VoWJ16z%V`V z7^Cd;gky{>)ANoo#?>D<>&S5TtRus(vyKen=NuVK&N(s!o^xc#I|tDacEORM`J;n6uqhX3ar8D!2oGFYB>WC%MCQ4g}D_`D;-g!7IJYtK6} zoI3Bw@El1FBoD&67aSRyFF106SBGc)&oBr9osg%`+#M`4`C_f;^f|{Fl@uLb%yInp zzgrjF%5_n(=&of50AF7ZngnBbv3}F^`^On&VnF8{xMVTB;0y-sBdK8PEKw18&EDvEM9yLV`S)ZQIT&x!qRe}gs1!T3&wB% z|G#_zI^jH6X7acP z>y!K~&;Ehcg3e#z@4X4y8-Du5{*V9vzkJ5Tz>qNkl*vxN$lLh;fA-6(pmUo}znBCH zfRhmRF_2^SLfEf1{Qv)QBZM9I;s5`aOCjt>AoVjrY|tJ`4#wsR5oZ3D=@5HC7QE~P zhaU%H2KdN>(=QmN?>ogP=`jstIOwpb43O)(PakvUV0>{AWQzsJZPP$~e~927kf1V} z6|EW&-^fpwKg}qi#R0Jpv^xCdXV5LR$gX+v7aj^PuT4)p%_yzE=PxLLO2yzI<^wuS z?g$Zc6Qa3z07DElM zo!EW)h1DlW(f|$igAYy@sNnDY0XiA)^ox7%|Nno<3W^L^9IyBTb}=aY_o0H^_VZErAeoyg*lq^}0Y5E}TC1 z45O*=?RWqGzYaa-q9Vco-v532#mVVU&oF8zEC5MJ{Vx{i_GbBC%+u}3k-@S8d{*}~ z$^ZYMr-#>H4FY8#pTiT>t~xSIzT(Jm>WU+S@HIyU*K3Xpv#vNY9J}hs(0ARD!TqWu zL+@2bhUBY`3?)|`8Qx!YWH7nr$dG;Ak-_M?Bg5mXjtrgG92r(#b7XjY&5^<2nj^!p zYmN-@*Blv2t~oONzUs)pe$A2L>J>+Z6W1LXmS1;dxPDc@k>T}qM+TJ}jtrSM92q9v z*na6OqYY#Iy7&M8qZ}%C=7qQazyHm)DOX$={+Fu0$o2pCe=&&D{NsNq#|yiFfB%gR z9DbqJ^6!7kfs*$x!0W;_0{;Eq0KPi#%$bES#mq(r4hOtg3o`8pOY4CW<_(O8U)VMO z`=7=5-xQ?i#X|q-z2_M<7|C@^n2V)6m*o)bI)0;0asw&3$F*0=f zaX5m`j}+*1V+nXs+d3R>RE@S-Mgdh10-D<+AR z(+^%`Ok#p+mjP+d0BJ+g0ZO6_FPH`aEP#pu>65hQBY+`-$f96tQ;{(lqQ$SVR0VdExBcytr2fcC~vWxUU2{ zg#~0J=xU+X10_!2Ep{xSS%O)Npfy>bLF!sX&>r@H=F<)t0SIS{f}O26<==nMg$2z= zSOQ+KKpkF>aJd+$s~ihCSOjDZs3!b&*r7zI`SE_R%Ue`@7$LWvLxX!K=wOoO|I8(v z&3`NSdp0vLFc=?b{?E+saxe>Yb*jt@Ifw_^8^9ib1v+Q}f9rt~k1U3)dWI~}nawJ_ zJu0BPva*D-7+>rHpBEL-cp5YfnvsC;hXmLk(UZac&;a|xP7yr)$SgkxM=(fs!3|3n*TGEh=SbT0=h4|@h_jE0?2m65Ke~Ahx)tmtxA;g=-_#$2od{mLlZcwW(3v`AlC_6HC#;8cV zD25n&rxqMv8lXdbp$3CeaO;5*z6_CUXNK+*FDyO&{RbU$4z`04M1n6OW2pyS90R*I zCbjF|f6zYjUSEM@t_}>)3u9iaTmSDrG+Tr6Z)o>9(BuIV185A8;l+bol<@g>m=Tn- z{z20s==?fR_<*8U!uUY*9&mYOL)lp1MJIYrIeaxwF1SMFN_A!9g1So}V+q7vAZPJ|oi(8s9+0Kd=m81d%yus8|Nn1?1$KZEJLp&x9cbzW z)i$7WWvBbyVHD%!$XM{*nc>C771M3+FsgH^WGn%37p|Co@HV4l?3VA4^CFxX7&5?h z#1zm~n&)2dIWsUo%W|2lx{L;h=np3bhOGLG9tiIhXiF$xw;PN0!Gk}TjQ_VDD3R;t z*_ox5ai!du;e|HXMg=~wSX{=H24{vBf0u(?0Tt8BI0ACYd1NvDj58pyh0CX(y~C)< zegniQTt59Ti1P%*aa=xK_b#I*`v(w5aQXCD5QpK1GsBCA%cl3u@^jGF8cAdcd)>AoP242bh_>GWCmj? zGW{=zlK|p4E}5?TfKiW0aLM#o5dCoR^j;9Xaq;xMAi8n!^tT{7aPf56hm3kmii@ZF zK4jEn&j4xuxM+GUh*JXM99%SgEr?SA;!IpL{Vs^p0OBMrn$G)(QIE-R5yb6L88tP| z3@;cLP0s}hUtBnS?juG`_70HRg$t*j1#u>TIE4$R{{^XVTsU3#G02e%r^kZmhYP0n zg6NG4rtbyOjSHr~1<`>ErprD7IdZ{tUl9Fq{`6W9eQ^HtwIF)p{ONZ=bmIK!yiY+6 znm^qZL^IBZI4mcFr52P%=S`mr5?(lO`dJWNIB)u25bZc`y6!WOGv-Z?1^@mz69hDU9gB2`v#Dv+JKDB}ebUV#4cLxU8RhDb#fa+s2V^EhMBK(+(iU-4sS5e?YjBF6+D>NUmf%lX{ zyWccF`H}TMLn3^8^lQdTj7<9{OxJ(Qc!Fu8(e$5h8Ev?hymMyg^=5hTzJ9v>J4QS9 zHSe4mUaYF0-tvx7+o-nwAE>t~!V%x=%~Had#htO`oioF0_AK6v10Z#=_5Z-v>4F

7VEh4J>4?-`?+m^2cnvwdRJWxDfjy6GoI`}!T#|NdvOW;_9z=A#nxVny{o z(4Ml8*0&{`S*#gvAns$&_yTfYclE#j%{3|t3?%|tEE#`bdP*R|Iv`=@43_ucO^Got zVyplCZ~YHe$^jGe1c|*Z5y)cA5CDnQgX}bg=+^-0XUmWPiGzgYKu%-K*wF$tj}OHE z55B)91T^FKBDNCj90SmaAR#3@S*#ff@0}T5g8DRBj2Rm5of%%-s`~fe_(1Dh{;3Cg zSzJNQ;^u#hr76unILh7rtF+oMGEFc3%-AkuRQ2zF7ITIU%x*D9FASi!1*9f9;vYnh^mqWNO9q znO_;r4P!vaV1rih)|qF9J}-z>6_#P{lxN;a+Hf#lXj3#RPP_sHpUMu)Gj1n_m5mu}d11 z_Q1m(E-E#kWgVc_H>h><;-=1Yh3|~=`k9)b@=1h|f#Hw{L+U?AhMa$n48{K(8LIv{ zGBo~kWa#+k$k6}Kkzv|DM~1oorssWUG-gV8KmEaXMv>{;zcWhnMV0;g|G(S-G|`(2@7k6F@?xAXN%rp+E1ZFZjV|%mWru0Sj47zyF=l1R`Pq7Ri|| z{{tohDz5}GmQ0WT!Du2<0#0igDZMT#Jf+V6%S|#ae3+j8lhKih;UmOZ`+hP?@r9It zEOY>yWr8dr0hVw9OJqPL%ziP-@ZBl~>F@wc%=tJy;TNMR(*>vku#xFt1rTrjfJ%UZ zfL9AF0r8y1bj4qcqSI4;Gs^Q6feeIrFa{#L1TGBmQwK!&$sa~}Zjfqou*X7hrDdBDOVpQm5=!)VL{77_sq*-YpE&1eD< zkpPS2O!o(g6o5?A0EiylfE9C8Ghtiv{s?GfqHw{ve)x#t#V35yZ2}u=ol##Tdl1 z&ZziW59X?ZxKjgx3S%-3RfEGY&v_ z7a_ba5Z+-3PXp45-wNTye0Np?9o4fO#AVC?&%m8~F%z`8(MKgFJ`Qx-54+Oz#s3(! z>Sb0sGjyK^_gzCk%4IWbz#=c)AiNj|&jP}$f$+2-yg3k_41~7_!sCPR?m&195Z)gM z?^E8t|5@T0GOIv#zIc-N?|*%kc!mjtdkrG#1L2*3@KPYWT@YRkgtrF5n*!m@gYecs zcoQJJBM@E_gm(wRD}nI7KzL~&UcGn*&uXx1B0ya63>65^3&a!2uz~PwAiNL=PY=S& zf$$U{ycP&g2*R5K;jut?TOhn|x&QuWiDaCC@Lqs<^%+kf+*=^7Y{nl5?+k<|vj*(6 zeGr}vgtr00i-GVKfq2pxH4xqu2yX_2*9PHjf$%CIybBOs7KkU2QU3ER0m3ta@M0i56$q~a!V`n=ra*Wc5Z(p|?^n)0(7CZ^AiOsa-ivw&_a21H zvJPzh1qe?8!aD@wiDuY9cv~R65D0G>gqH*1&4BP)AiORJZw`c41L19f@bVzMGwVS4 z^!$qi2=@s@G6=+z$@l}|xj=X_>%mSlgYax1JPimh2Evnq@M<7D9tdv^g!eD|-~TL` zj6D$E2MF)ZdgpqE?(;7mfw;mMe;|@qAUuH$U<;2ycq$Oy4hYWz!dnI5`9OGcAiM+! zuMfg2f$$n2ybcJj2*eY~n6tr|p}zb4ixdcV3q&#u!aD=uc|dqiAUrDw?+=8h1L28m z1Upm?!qb891Ry*Y2#*QEi-GXIWP$TR35ZvJ{>3v0w+F;M|KbLOw*#9(?1Aw1 zKzKJGymb)X7YJ_wgeR~G?3hU)o^XZ^gx3P$IY4-25MBtFSN|dd!p#74Uqpd=2RSMd zkWr@^i!9-c8i0^zAZcsn3GF%VBA;|zqy0pUG?@P1{2{r(5Sdy@%j zsEcHXYzDjfUgp35aEnDUbReQ9AX;1?yj>7p41~7^!YhIB=7D&k89fl*1PE^lgx3V& z?Sb%0AiOJ^A?ZI2ZZUrkXnAUuXvQ0eLLZ1imMvfh+Cg|S5S{^qX9D3VL3ln8o(P1O z0^zYicr_5-kBoo+vqUqdfOz%iU%UcwB{SB5xaVKof$&a1c;_IzClKBN2#;Ya*fEjBK{`?jkj>Zw z5j_P`Bb#vt!rKGk{eke-L3lFT!4@w7@nkY=AiPNsUJQiS0^!v_cx4b?{Tv841H#<{ z;YC4scOX0;2=5PsX9ss8e-CJ-XO?t^%nq>SDj;>z85R(p7=#xB;c-BC1rXk^w15Az z5LN)?h^>_350hI!eiJCw)_N$Czl}u;q8L(Y#_Wf z5MB&~HxI;<$*6(wCO~*|AiO3BZx4i5QV-$YfpF76Jh_ZN5MBg?C$k4^y%&UM1L4_# zc!n7<5S|`{Hvz&^fbfn$ctQ}~4+xJ1!qeFcHuGBwsQfd`NPuu(r2PAzWtcGq!n>7% z7HB#dCm=EhKl$a#52rDfbaq!yeSZ#6NGmH!ZQK!Of&vKcxn)y$pNq_5)fVvgvSNqsb(yJ z@ctzK`=6y+pK%7leFx@de1Y&DKzK3-!Ny#I@LV9gBM@E=gtraCn*!mjNQQ-3jYXDf z#vX|1B#4?P5MB#}$8!i|cKwSo2-gJ6eUSm;DP+Vzcu^2u1BB-T;Vpsi>>#`o5S{^q z_XfgKg75?mgRFQV0^ylJcx)h^Nk#;OSN|jF-~TL=j0q6#D+uodgm(wRV>kjf<{X4) z0pT5h@CqQjO%UD+2yaOeJQNDDL^B>hMEgK$L^FOscnuJqzrazj;YARx285Ra;WJ<6qF)uUf9xF^zvgbAmM?Sqd2s zAd2c)L3%VYSWbX#{+{sff0jaq0fhGw#M8(Kf$(mFcxo995Z+l3Pa|Umgts5W6U(>) z;cbNQ-avSZAv~6oU>l}Fcrp-Pdp(G&oM8gtRzi3Y5MDNfR|Db2LU;=xJbw^RCgTW% z=Lq3Ff$)qWJeE^n3soUJ6$nop#FNf&f$%sJK!uuQMgoNUJO1DQEXj--2=6U~Hv_`E z58-Wr@GgRQ1{oJ1yu%P4%W1HMTOm9P2yZ!rmjmI=1o0Fy7C?C2@&D>U!F>e6t%XRw zfbjAmJf1UPLlZ$f?F<75FBrm$f$&@*ybcJ@9KzcI;c0?+Dj5$TJZT7z<1E-r-gr=_ zUM0f-!u=oj?>~4!3uw7ZmP$qhMEFJAzyDb(84VELEeLM~gm(tQy8z+sgYbSpcpD%* zg>zuL7D0F(5Z)9BuizY{QPBqB&VWc(fOygw2OzvG2=5Mr7X#t_fbjevJdyKYD;yv^ z0|?Iu!t;UfR3N+z2u}>cYdH^TRB%AJ3m}reVnHPmcreN%V-G|uE$rX_j2jSk6o~x= z!uA8P1ulTCcLK3BAZ#-b+X2GX3j6mzOFkn4!kZHd=2bv=ec;i5`HUG5ZUabCF=GdW zR|MhRf$&lwJcf&4%fdiBl?)XK&jZ5qf$*##yb=gc2gFm$m;>R-L3l?XJb_qH`cunz z1K~1(B$YBmE`hE15(6#~Eg-yS5MB&~cLT&z$!LJ^PCC06A)e$h$oZr1;X=z@IQ--2+st2yY35Hv__(2Ikdg?16AQz}$=n5MC98$8rs9MGl0g z0pZ1gctROI5MBU;mjK~8L3kw)o(Y840pY1Zcyk~;2?)<|1BA;3;tFRRf$;uB{rjIK zoN)ufdk5jYf$$!Hc+io`^Diz%O^*>~lBs974tD8Ukfch63WPTw!t;UfCPH{65MFZ> zxOOV3Z2reo!U0*nP@9u62O|44=->a00}%F25c>s$eHO$PxB<57Ac$=OVb^a3abh5x zl^}KtggqC;UISrI1hH>G*sVdJ#i@|-*7GmEM}i&0-vSLFYk2v-Zj3xV)tAiNw1j}OFyM;`;o-o zfYh9R@halq|JSU|e^W{=va~X0Km@Nw{QIA!mvIEbI}YJ}f$(B$Tfo2i|BZjaid{0MKmVbPTkOvbjb@hPf2HB(fEBCv28_hQ>XxPldw&{m;_Q2!QbFSs>gR2=^PPHqy>m z0pYy}1J7{DFvFti3Pd~rWHrNmuyHORwhn}C0b)l$*g7C~1B9&rVy}U)ML_I35H^SZ zzxw|fJP*JI{qg(vKf?jS{@@25TPuO^l0c3U$>@RbLLj^)5S|-^w+F(rfbgzBc;Kp4 zB;yT)Cj*gVc?h!M8TbQ;tpH&^@%{Hdiz&kZ!V3dgqL*O;;dz8ke;MQm48(4Mu)RR+4G^{+h~r2*ie3zy@MNE%@dA?|%l=f_EVH zABg%#Ahy7Bu;Z?Q*cuS_DG=KQ!rljB$3WPdKUjO zeFMTi4`Tm;u!RqUI0~=97HkKxU0zTBBf}(Fp8^q^01~T!uvB&H=Ia zK-dW&_6-O-1jPOVVS9ks0&l?f*nrqN5Viq`?Ezt{fY>PzcD)3M(*WV{fY@^&Yz7b; zTtA+E@x=pF4K^__Fw{C{Y=Ou>@c8#X;|hd*1;qXUVV?l8CEkJ^um{9;fUq}!*a>f) z8D9HA8h|yd&HtH7>pe0WAPOdc6wHCJTR`kB5OxKKeFMVI0kQu;*a;xE#5=G>As{x? zu^tG=YG;^$T0~{^qUi@(fU5*3_+H)^H zfY=2PL!N-x9T4^n5F2dyxff^Lr$3Toa$_<{ovtO%q{Cz83*H355%9vtVS180lO0cw zA6SGZ;02Sz^fmHK0g@Z+|NZZFQQ?V;JPcmr1tPNkXY3B2zT1RRa=M-ZQ&5Pjyg{k(7ZJZf3*#hSg7yo1bC+S_Z=D5NNWm4@>!M;3@M5L}NSdenLvSzXPSzIi zp;_SjBK`mW{hu-C*Yqn2Oj=A8zoscNIk4~?`}cqPdP_!8PS9d$<1;Tj{%=oGWa49F znj=2FNQvo+K;2)^OWAssROs0vd*#|>TZ;(L?n=T9(-PA^ntl9$~h1zx!)6VTfWI-Ci5Nj%t* zffuK*Rb{f^Hvjb(e8*Wt2E+6Zs!XCxZ+=c^S7QoidUs%Yf*R9gF&;?JfHq0|-=YGd zLSH=nGM!VMNr|cU=X70lrV5iSznmGeYy$p^E=h1^0H5F&X(fZpN_x0UX`_4zC5e{T+}+T(;Y4G8HhIp(;aGVe?wH+utS(Y%sd!>5sLT zo-jIWKcUTJ&&Z@=F`ZMFNt=(&!inLxIRr~uOn1^{Qe~QBF+Ee4$(b+L!igaoirX!= z@6u%wU{WXoHAjDRi*=vt4zl@wspUY4Xt$fp{{n$-hW`dHo@h;frO#Bsw8eUQiUCtX zeXO+;Ll_k2Sv!HZQG*gS2xtAzh=_o1hiiUg0a~KUV0@(0Ma2YVBb^J}Npdv~&#r{SO1(dI7tW z`9(z-c+sQ8i~DZ>{&%~{82|5P=$2@`&EL0Rdafapw`vn8n||naQIP=n9eB+h92)jQ4k8b_ zvkkGv6nsaiiSd~iIqyK(#08Pj&zv~}xjd{PV)BWJM$AIW|0e&PD97R$@$dg+`AJ61 z*WWTs4w=+5d4UJZ^bjK^KW&>%9~FWB7rIZp0M!}YAG%#Rnh*4MmZ(TH|Bxw{;osI# z;O@lmU!^z2efn7=CKXv}dGOYZ7DaIO;{mDvQCPy+{G*h=wPre>F;gd#=ZEPtjhW;u zuYvc0b-JiQL_q1R+8D1&yEsBmPz!}?gQ>A?pq%q}WC-Pg54RCv12Y5S;fyk_g2Jw3;SNy*noh37bEvn^=1 z#W()GP*w(pPy7PB7QdYtnh*TyzOH?-(?vz5w~(VVM1|uubFU`@$f50A|Nj5y-`2q4 z0rFbw1a~I}(1oVcZ<{d5@-=ukfy`h};}2&I_&uG?l*y7&V7h}TQ#O;q@9AqznKbGR zemgUK;um!L@$xG(*h2OfpWcEPf^I*Kvw?OE{%$TJ7IDR`bygu@YUx59^-!~vvMzTu4 zJOFj=eI}5&0Q-w~U2)riWWF>FcC{ zG{&eneBu{y0g;hl)nKI_cU@FGz$}NmGAb`@UQgd-!KA^+F#Wa#lfE#>P_SggT^E%I zkb(=-Wi6SanMz(wud-y)7hNpN!0=iSev7OSq?9RCBO;3MhbLkW9v8m7SIO8>4H{FBD}}k1Q@#A z1dhA$e93m6tp7#U<`9PNP#)F)@SEY?1RByLKBOIY6JcOzOp{^w_y2!Gn&N|Q zH<3Jj_Z_y7L~Ul8BvrqY}ybD+zKrDJ-$6_Y%xn}D$s%XAAXChh6-0Cx*v%P7H6SvsyDL*FSe~V(@WvVkmKRV%Y5H z#BkZsiQ%)O69bQv6N9Rg6N8<=)?eD4Zj*uVmH3YU}9i^71}K-2}}$O!H|sx z;C%)yDiur&4A7GMW@n6wKzFrGcPURdGw9@t&Kebk{{c4LCtf7jgSM(672FA(^)4zp zFCta`{qJV(K7G7Jr2&*J85kJ;2iSm4(Fk}k*Yn^1Zt(r@0^L3;BHcH-8M}*ZI%8A} zI!jb^Am(z~|NFlSv8|NGw^ zq9Osl*i)zVk|=+lJm~O&bKSo{#TBTK>vp!8u58Psr{8S{QQQ23k-zUE0|P_zFGl{> z6QE5LAeR)|bTcB{5N9{N!InvcQvza7quBJhwoEco%66b5K59V^lm4 zce~k4zii8-%=FB5`VU(sMH^!ea0^icRH1`{YP0RX|J@flK`wRWXg+WceECfCk0}0j zc0SM<91Sj!;6m|5gcHN`2QEw^oX)~v53UiNUS!9l$^{xS0&U6QeK&of9g|kQ!;AYu zU*xSXoM1EMl93} zZipG;54pfrdx6XVI}zl(N8hJ6xiJMX^?e7sPb>kV=p@KHa7BsJncSIznD`)S#2;{i z4e~@$^YGjBW_PAQroL}bgCL4df*gJWl{5r519HpmA>&6BUw z8$6ginPz?k8zhkpQFI05FeI<1P5)-#d?(^L@Uc^5JZ65^}ZcJIMy*=P#5IUHTJ9B{VuM`l6C8so-fB#=z{{l8;7dzN- z%5YOM(M@4tWMDv;a!O1cW{d*Jn2BHhgRFmH4ALghb>l@A#K6m()9t*NWXwT(G!VMW z#bBDxTL1h1(hjP5!XuDdx^BD>hiGnqXqKOXVzmlfa}`MQ>(A3Gy_jU8ZMsi`%IX*K zPe8}y@w6N$Wd)U0j9CIN=CFZ1$IAKde?yImJhY_gzLCYmKji>8h`ylMutpT-JSLD0 z#nV4{G089`Jebbs&14hs6{1ki$1b~EsEm6X;BChawsywEef~#_y6UIPt!ko zF-bFp-UrzvG5w-9lTtmnMuTs|1Dyi~s`ZS|yx4PzfuZ|p>>&<@?*B)+=<~^xD$h9m=i;Mm=nX&Feio| zVNMLw1DqH-{GAw7L!B7rhB`5<2ytTg@8iU-^ktG({Gt2rfA@`-pdp8DSB7p5P@yFN zxiA}4E8WzczSNiLkmyq;aDe-P!X321&)~&nrhn6G{FqFIZ8}|4G`M{3mA2R&yp!+xYw>9`AfgI4Pku+UCfXRw+;`FEhCS%6- z?R^1EvzQnKrfUW>l`slSpBK#JB`5IPnIVl||3Vovzs3bn2SVewGXuZIp-=pgtO~!U zvxP9}*E_rr{reYuefR&r|GRH=#;90yuTcRlq&?Q60xJ0!TW^Yt4-Yk;Wa{JqS!LYoqY@C#R{L^&~ROPnqg%4DVVF~*6(HP(qCKh}vsG|q`(X`BT~s)rG*1D9F94+_ptJ~-mVwd=P+A2Rp(1U<+rOqr<*{xw?ga565ejcZu9>EA_3j!|A+B_ zu2lzJq<%Mo$%!#`xt) zJbhmzQ;qZnb{B@wZrv#f&J1Dv+cq``xiAFuI{pvHu&9|H8pULwkx=8p@c(M_0f&J9 zqB9bl8M<9mG@6g_@NZ{vb@=Pdz2E+8VQA~bJ8a31ZMloqHnbb^Ik7hCx znZf14&}|FSXL}no>?)ZdP&2(Snn|2V226`hUl7g2&XiL#ePuLLg30%2_>fBAjw2Qf z3@{f&8^dJ4XJgL5@Of#ci%Ldsi;B(k>KGK!%z~C@uFrrdpuK`kb{#8 zgY|L#Rzc8tU;9~nGi0aN$1{mCH3&_g7SH6#*`Lb5@L#31=znc7+zR^p8hz2NzrYCgbM@nH(L+Tu_)>ewwXc<4CV4^ z%{Hze%NR>VK(U!2>%!3KqLR>hfWJS6g@M7kMkS}jpMQIsM7j$@a6rbF#_3*(Or8Q9 zso-;ezc4T`1O{Y0Xq>({kx9MY=^nT>uJCepG6O@Fzze1K;QZSC@$dg`Zw^rL)cqlg zv6C;0DT}$cM`Z)()NnTr(CIiY%>VuU|G${!c#FytaBr4@;lD9x)22*VH^+-vW)O3a zx2Qa@fLtJXyhUXW6Xcwum%7Oe4Ba&<0`(azwJr?*i&?tQ|2KYNwinb8crpJS*bN+5 z+`!V?qmlqR`NoX{R7Aem@)zueZvOwq$6HihSTKNk-3$R?FQl>B@52JMe_ayTx27Br ztLA-}ej$lTD)#`yXix;daDx~P^&UtF$$KkJv3YL|%y^q5i1#uikbL)bH`sUU-hzE6 z4z^OPo~gG-MS&G`Xc%Z?J;RIrf6#pd3haQe7iw6o1YJ%JI`ZS?&P1?}93ZBzeE;`< z7b5;TK=B7^6M_!&I_?H(5r%?ns)t7)C_IsTxWfdS4|!k_=$**G@W1#Bs7w5Rvkzz+ zZgI>1;)WNA2O!#BYJnAi3RIE*#XbLvS^gWpcybad$(slXpWfp7GhyB5U!3{<@Be?Z z?(-QMkns9%{Nm<=f1uO_irN2WSzIqNogjK!5Ae61Pheo^=4*Z<6Y^qG^}qixUEnly z@hhmm4myeGFVWqayNo=}YZ+28Q0^17Jaj zP&YHE3)=0>0y@d;B{zor%O7zJ3|XK<*LQ$M5kOn9OJ0GK+TAyQLC3L(f^svYvC&C=gfB$!Xc+F(|t=pTYbBhW{S2rVg7#egm-c7lG|GSH?^tPygc54Up`U$-FCi(Aw zcMn)$^Ra-i7iMgrO|w~y-RE9Jvw#BP3aIS`3y&?PPa{%`*NPi#F< zg6y6XFSyX01JZ@$9B;65ru4Rer=!5m$$&Tqq!8?!6|8XQoMrwueL*^twEllrNUC{x zB9;L>c-!kN0y?4;JP7i?*yew+#f#ks!D=*KE{UD~DxJx(zU0N*7hso$z5e^Z`$uPu zN(8hR1NEdpheW_b5>zG{fG%?T{rxYfkDieMnhOf(W@|pp*zHizeeM{fRATFlQ7Pz* zQOWp!A)x#Gi`>?K|6j9p$Eai&9{`0J)Ob)f`gWKPet=a5=$xzRJ2IF|m`rM?zsq29 ztoMHN?|)Xwizm;)4)g^@FsK0xb0Dbs*!m52@)5|Hy*(-dpsPJTeS5I`7vzuQEh>MQrti*V(x?vrWrhNl{|5g{ zR8(HPT>tNX_Z;weNb?bi<{A|Z2L9HzXaNcfAL>p(Mn z5-*dZK*c3bca4e&w6r?Xeg1#(ffp9HK*ijVZvOwp2mTlHWbwQ>W(`h`3ZQ~c2V}K3 z54fazR{}5Tpn7%QgEAeY^kG6+;GF>~ss0y3Rb2-iJzI>hf%io!k`1RL85p{uHuQpQ z0O@@_x7+yyXnZbh`h#pH5neSU4L#EtbC`@7)ux-~FsU&bPM?s&Br?4qhl!O@9L#11 z9Y6N+Z^ZP8IZP6akEbi%#E5efq^*CSg0Z7kAVUj{Ovl?$~vpo2HQ+3p(mD&_OcD3B#a&pzETModP-~ zGvvkd!hioW)_@GE|M&ktsGXIu0hA`8q4+|4UVP?s| zAPNp1VUSfTsVZYb8 z{t#Ra9e6x_K>?G9X8|*~X$C6zU*vrNHO(M73EJ8Oowykg_Tq{LB;&As1NFjdg9frfDLH)L{7dp_ajvC^7U?ILgc>4K5Ch?>e zC4{4A1*1DU40Jm-vZF!ggND4Y&-?d3;|UH&8_ffU_U(IMN4q?PgmwU=Ujz>APj4|C z4LTz}JuyM#$j<$E9l1K9oy zmkwu!tcolKPhugyKNAdL#Qv2^>G}+5i4$d;k@T_rF6+;4esid{K^R zllF^xB_yjXFs%9lI*tI@DrK-$ce6m1WStAc%TkzC0(GE1HMIWc#k5N6#SS@yr_T99 zJ*5sW?7Psd0=1VzUKE3@(x{vMu9Qh8DFMldGMEu?6F_Gopp*xyV8=>>Owd7c9&!oH zHwzrw+i!tmTj4G^wmlt?%7b$+F=AT{65A%wjE)-HId*dc>(_&Hy6hj)RFv_p2dCfMP{8UOxgnBZ`D+6=J6`5_Lk zxD9f+s4G&YF?fqFb2_NS2WjutPv@&-l8^{FgVKBkk2IWkp(i!nu98W@ zi3QzU9k97?(?I(px}4!<7IGpC09~Wx3~5$=^9Gl8?AN>*7&2;ROy66{B+InP8`QKF zp8md)iIr&vgu{N6fq~&=9h3taihP*@9nhf6?Og{6*z2}pjV)e(65}FQ33%G*-YYBpO=A&e7U2v#gOab*z-eV8dBcLz>dp*zL)ped^#(rhsmru0JmpOxLbqQZSUi4L&y#RM#-P zH1UKiH~3$C<$v*!|HTKoeN5@tv_Z>IoUb$=PzdPtQ|NS2iFqL;48E8lt=mT>qPIn52Y6kA?VrE@n=3>F zpc!9}fq|ijsT$Y=D#;FO0iDm5~Tc8OR?BU{xnTszB-I#e+*=C7sS2x{FU_8N4Vs z2lm~~3x8$6kpy+P5yX4^z1~v-yHC9MJ^fr0lUO~hF#z^b3DipyouK2ypdsPz&!3lm zcYXl64zEO_+ebwQR0epC)D%!lALQBo)Bpazd;_{b>tZvLOuZHsC1D^Xn;jV# zvJ75Wodx@S@p+V(HHLVdx7S+){!G8s!lcf5r2|sl zteei&%A~*+-TLqU%Z}*=txU#@MblGSnKT%GPVa4Hl9ttN2X$~NQ8Ey;X+CNG^rNjz zTAXTAA!gN2|Ix}MCwU&)Sb90bo`Ipe85FYMQLfJE`fW@WT9c|Ns&piX?jiv zlZvA8wSWI#D%gT*z$u_n&;OeZAoVt6nnLVW!cbe9ukUkPZ0^4cdvmo4DMbZGDOCByV>olF^=Unf8``At{vVhUpk$aqjc zy|If)q<-Hl%=~Wy%D5IU7SH+*@w-U3vjHr7gC`0&TVbJBq7u@5{(p%|$cw8d|NVb? z$qF(;+*>RX*6aKr0A38TPyhG7x!QoCqzGJ2!i&)9JzY$k=4QAZA&t`!jV;pyx|u{7 zv!oNA8qf0b zy#*vBGjgEDKbivC|F+B-sRal%-UDPj=sI@{i3jV-gk51|^#xW)Qg+a3~iyya=6sx{pb+{`V=+qA;i=EDF?4{{Nq`rx-ki z0>0o_wf`@8T_!P9qD%_8^sDLIzOhAj6jbFS!0lv{4R+}7eQ30*0gEqiG zXZ3)ZV8>ciK=&gvybK0eDhQg72Rq65#l{o=|G%`GUeeE$Qh$BNzyB|7 z-hhjPrg^d$wO|G*OoeHHH98=vieu{k|K08^8Cw=iZ=Ap+TW>fKwAvdH^o7S^PCeXw z0yKeR^74ZTG`SsE;EW#IP9Xac;&AtB!Nno&f;p>b%K!fvVD%7Z3Be?yra;_v0OBse z<_W0oIy^mgB9jcG#q_F)Oj@eiXtLSIV6Hyde1a3SW9j89WStPpye+nFa3<6VNn9kZICfNNXTBC^#6YbL>S)C zgUD>31o2zRGH{ry3ZU5&a1@gDm|os6f*P-|5L|Gmo(A6qhKL?+s8WTOlVM6VAWEg% z(3BoK0x{L$rQh_F$xK?#jxYuPK`Y%%UNjzodGBcR3081OFc>i~WSm&w%I=mS(*>q6>BxTuohlDm_1NvB0=gb5qSr+wBH%?7NMrc);Au?CY=$7V-t?MjOjZJg z5DlQsr7tW0|NlSz<4h(Me%*ur|HImWFE{B;Ph8HVru^doL=e=6d|9gpOD4otWW;5#nRT^w zdf+N1CC0$%7iTibFdfqd+duunOeU7;lCzi$8Lv5g-lWSGJgnYmt{jw` zGJW4XCOPrzYEYl)AO+Nf2C&bVcy>+~pU)&KUXM+Y1w;|!mg#x(ndHRPv8j1b4>pJ~ zX8JLZn)9kyEbD-%VPe@aU48+Rtav##MFtQ>jBBQsEnt!pm&c~&Mjgbmkm=_@YL2U5 zv8(~2hUw3?>4x)|M5bFWWa1Rh$EH#PqLOjR^ty#ia^m9H)Lf{A*yuC;+CnBd#{JVB z7cr?bv2L3#w}?rJu^7x{+&MjS5tA~bI)s-yed{77Wv1Io;5g$~+zO6b9aTn_|NnUz zrz@;v5@qU#NHSgBGX3B>CdujPi z=@XYQsWa`_JpKF{CdugyATec#SmtJkQD>Gi2{2ty09(!^22}_atc3_N9-bb*lu3(8 z3(743aiyk%lrUbOesCF+I+N_C>1@lGlo-3gT*iyj1D7!=GulIVt<&d%c%P>yEN4<@ zvfMcR6-eoFFqiS|bkpTbT8trJ9@DH1(|I>ANlrh#l1YG(5iG{&KK=G`CM~9QvS1f7 zewnVff=QVv3CdkDy$Zw?gK}f09|Lhu$$%9z39O$kyplD+DRr5ur-RF>b<;~$F)1s{ z;7|{5jLocqsCS)ycNLSg6q>PcWsXo~Z>O8CW>Qv;mcs4~xcVEF5Mx`W&s)u;%=AeT z;th*6(_gPznT1f^aOch8FH@hd^8 zcRiB;qcTKE<_d^)XEuORuPE3$Cb1PD*J?7=LinJBy8)DNq1=M$n>H|M)n69@kG%?X z7l5wBO`r4kzXxb3q2A2D|M|Ba0Ci5FO&gizpf(kFbr*9MbFYtz!*LfC8_=zYFB(_; z|NpWNW{?NV3xhs%-S?Iu=>|2vpt{o-7+yGovc|{oNVGouUWf)3TmQAf(r44F zHZe)ndxKO)AgTP-gYNnjOW~epK?^!wkZvg?-Fq-}XCdoG3OWXc7w4D#umAt@ju65} zbr{-p5Zc+$f^Oon|NmdkL(=Vlq5ItuxYOCtoE{9)ogjy#oe4wxhUptNGfAn6f|M#D zsXWq+9!5n=roZ3JB&m9R>Hq&Pp9ms+)P|wdWXW{hEliRsGeJt1Au091Q2K3p))pqI z`e=~K3?!9Y7%F!xhI*7SiwP~5WI?*MkaVBvLU(-?vToGOaeoOYj@}3$eAI`b-3D1Z zY7{SA^8f$Kbx67cFm(T01a~?Mn$wd(x(noxv(S6yp zX!`xFOp>b47ytkN@(Vx0N7FErx-6P5yNyXwbtOpYHYBAH7)sd|O^@EjBw3#gQd)te zR0>1siG~0FL)MmNF=e5KlP*ZN6_V~d9q7*Q0_%Qx7IXoOtcZ%@6I34}yEFVbkYqXOgae z(GIfvL?EK4JZ-`M|J~<6OtjF9rBOlZPDO`J@*Y+yDL#$OwQmH2)ie zC$nsmz*8?TpYuZNzmx{#sa5DOS9&fe3BatYH-4eM05T%V-?|>8(M82X_5Z*B|9L^X z^uR8i0TKo^>l?6{CxK#~@rxVtVa6qZ^nr}q4>At4g&J&}CrB7%+?)m%1|5uX#gjS6 z?lXST2{%u0`okSeBK3cG7#RK+w?HOd8(u_D`S<_j3m)(^#QIgBNjA_Ddf19-Q^*vA zSQg{|%^aZK)rtSbS6--Ffu>MFi{rCApwn!i8Gsl05dEzON`$f)!(cjI%&>+`T!2Ov z0;IbASzdha0*ySEYIk>o49)m5-t=GnW?Ls&0*wLwA0(Q=@~xw}Lqq1#&|?8Qlta*l3Bu#)Z*FFIR5dzVB4 zz#)*aqrrtC?8VZRfB*k4;P_tvzTW!9Gtf!YMC59TX9pNw1R{s4DZps`3o9*6NqmuA~@$~e$yP1@j9@I}ixSL7DYkMZ+9*o&+cprr;= z0=qe0*v|nU2cY5hg7wtj|JEOh4!-o`M4BiKg3nY;KfarZ&+B*wPEW1LK=u?Lil+pE z(L8m3IoMOCCQCsl<@Gj$jxY-7bzTtgzZmMlRo%$moda6z$>&uoS ze7Ly=lpi-&fKuQ&&_PjPe}*iF`%`l^%%AU1fc?4qr3D9QkK#&@63}!bc-6(H!+-z3 zl;;2sf@y#@hrD)g7!v3D~;p5fB(NU z0SVNo2tZb{1ibjv19B8d(7Ok;>|oCH+xwW58Q)L;zmG|mNg;8%-hL)ANsh#S|7|CO zwmr7aX9JaZJl*HB7+xeUnI5~JNzdS5!oUBvlNcBnN+i0yc|h620JKrz#Y&JkNL#7Q z|654!6ev=s`p7y&%y*XwD4 zT#&X-=Qzlu62HLx-~V2J3()lDixyBcatTq@X{7)4yb_M z-!*;zK_)Tz=beB5|KAKMhr9XzgG*shqX4{+jOT^a-RWNrGHEi_PnSEyB+qpI&UE`j zOj6Rx74;e_Kt+nO~ZI{VhEDze|7ybft0DbcjiI)#RtA@PKfDE+(EkAMzcyapd z-~TNK_*;%LqL^NTr27ZxVA~@SFBgGygKBym&{UBCC_KPxh$WH`v$`353=9zrFW8_y zc$p8<16fK2+HES*&GCY3+W-GA!xZcg5 zyH=o+eHgnPME+ms7U=C!xx&c65ZHa9y9v}X`hNi`0#ytu{$4OegW87f3f(>`3IQNn zKw3|{h@SHQKmRs&MKs|rlfgxzLa)0DlHzj@ME?GVZD$VYmYtH|%#d-SaXQN}CJo*h z{4NXu|1X2~TECbw-SQZd1LNoERmYf=bU-rv+r|0!^OU}la$(@#e~9@+<4^DoW!*GO z5ns>_lGl|vTuwY<79E}G$P6M<(-T2H4NzkU6r?H18+{$xe z@Gf#<_@3v)kectr@Fd@fA*{fO;bwso!_y9koO>aJ&M0(ZXf1SNcva}cU{&PA5MJcO z5L)cSkPgM|#Ss3iVkZWT5+{cC`eG-BQzcFe?@F8)PLw+_=vO!~OsH^TxK-iA;9lv( zkXY%&P+jT7Ftrk5!TL%k2DK_DhUzK^|8kWRgLXB9-CXU&@D|DruW@3~u61JgU+cth zxeg+~yxxgncLRjIvk^kqD>p$Hy-@l)ls?@I5ue`zp^IA~v~Zgf!?89eh6im<48Pi( z7)08g81&km7(CjY7?RqZ82a0t81}R~F}!SdVi1Fdj&p|-!;TIohQLlIhN~S;3?Dn3 z7~(pe7#cgB>KP_>Ix(#7bYi&O>BPX-<-`!#<;0NN<;1YL%ZcGkmlMOoE+>W;JrMk* z$BBWj*NLIM*NH*D&xt{---&^7f)hjT1PHxsf)m6236LPxp6JAoHPMNIYmyTK=VT{_ z#>q|$pC>yp^iOeOD4OcTFlm|-1ON1TCx!#lofy8%aAMG!>BO*jrW1qAEGLG(SxyWW zXE`y5%ywePpY6mj3yM$8c4Dxf1Ca}X(jax{c;6f+hKF;U7#7WSVu+gO#IRzX6T`Q8 zP7E&dofvk_cVhTI--*FxffK`|`UOr5GZ#29d|%+iAh^(pL3^PSgX=;khWLd}43!I= z7@8M4F-*Dy!6z0vG3YLGVpy}tiQCkE@qP7EoFofuXxc4Bz2*oi@Oi4#Ng5+{ZU zOPm<4EpcMtUh2dUu+)iR>QX0$TT7i76qY$Llr3{&IJ3-&fpNJLgWGZ^hWhU1P7DW@ zJ29}XaANRU;lwaug%iWG6;2E`E1ejcS2{7AS_xqbu5x0CSmnepe-%Xh*(xUn-PKME zC95H7cCU6~5MJZNkiEu<0mMGM#)(0CtrJ7>T8Q}RwN4Dm>zo*>*Fn^P9C~@3Q$2(H zdMAeL^-c`i*E=yVZ*XD=+u+2|x50_w^$VfQ8{ z2KLQP48fb780K$wVtBpTiNS7*6T`$UP7F`BI58M(bz-R5>cntjs}qCBHYbMkZB7ik zwmC8IZg*lR+wR10Zo3nM`3@(B1v{J=-t4G%VzAih#L%+SiQ)QACkCxuP7JlXoER?b za$->4?Zi;F+lk@iZYKtrJx&bydz=^!?Qvod-Rs1VvDb-V_g*IkmVHhPPWzk~8umFc z?AzzW@MoVBgVlZ~hKl`84BPfQF?`wY#9(y5iJ{ zpcBKB`h!jkN{5^n5)L^r%sb@7aOaQ{gVbRshKR#X47G=y7*-v2Vz_?TiNWTG6T|8w zP7J?}I5Bu0bz+!y)QMr$Q74AtV@?e1#~``G?6?y{$O$I~my=EmQKy_3icdK)w4QQe zICTn=bwP!d6tvs`6=)z_4p&?Zgmw+KHj~G{i8N9+)`DaF9As{+@i=iGk+~ zB)@~iTh2H!96sa3aP5o}!>cn+3=(IZ7?RIAF>E;NR1Yo`K!$xg>%?Go&WR!PoD)Ol zIVXli=bRYULHTdbp;`*EsNg)r(3bN~49CwqF$i98Vo12)#PH#Q6NBb`7k~79Mc{ymY3kO zfVRAFn*RP8lh|~_^GvP66PjHZGG;WpF#IoP`EUNeOyfn$^poeA?h9{ea$(5W(S#&X zG=294CO5t-$YOHa`7bg_GxDn-oAA|ry5%LN3O*FUyy^QdG1c%pAS-<0Hr?wolP_Na zvS7#brI(rB@;yPerg!>+D@@va9LVZIrr*56l)#Uo?wQMUkE={mP;GXe{^}~zRlW*j z%?aDjUSs;oQojP^{SC-65q99l>kckP28P#6-G{q-RCHJv7(l1n7@v9Z&541b@d#+% z^ze)Qpf&RUmG3$+^gVTAxc=OUq2h@XgXA+O2CFAd3~wJhF)VoO#L)KKiQ&v`Cx-ZY zP7DE$oEVNiabie&=EM;2)QN#rUc^klc$diz zS+G#!1^;xpdrTLQ1q(D@7)<|rk4cd~1w}i|+-K556RerO@jg?n z0IKaDEVtV|V4BUy$UOblL#7SFCqSWl1{Au*EdP!FmutM3uzl_$CMHJ4)a?r%Glelq zeF81tJ0f%Vzsp|GB3}*A5!bPxOS^AQ7kJ8aLi$6C3&SA}hSrm%96JPB!R#F}tu73^ zR9dHhe#&%6+}{Q?DrnMuRQuq;2TTFIEPYuF0WU14pLxdghS6a9&gV=ijHjo|y%XE8bjIh^Z)U!Mn@(q&Zuai;$6QoI82^Kh-jwX0-ui|qj?rfNlQ&F- zOzwTt!{0KgvCH@U{on0pGri?4Qz)a&^jmM4T$yTnrz^f=>S21{GkyI#rW(!-KfotH z@qE~B@}B7vqliG83qyuP8>p`W3bQhe7hg1{TYY3&WC@n>XmeqBozUI3fRTZr*Jdqf z1S%YKp7OcQ92J!pwOR}e;k`a87J&hvPA7N_;G@oT(N9d85Q8m{4Zfp3J?ImYHKYFY zzE4bE0xc>G49)*zN{$4FgHC%Yo&MqzlMdsI>7t*Re6)Uprpa?uR6sKCRT&t9|Cg(D zpL-#qz`)S`quZG$IJEm5==iG_Ow+qRGwBI~9UFseTjKOHpP7sqUrzhNB*XY%yX+UH za7N)LAm6?LDT5V1%ci$~W%7|(0FnU7!po)QIpB=ho1!v3fSp-nI`cOs1tyD_?W*6H zv>AnL;{X27V$7(>b!O=GQBioI6F)uaJCmVOPba8}U!tNA3QB(6N?E6GXf`tt_To^JeI*|0$OyBs6Nz()*@tQTG1SAhmX0U*_ln48^`*3_*^dSz0 z(18EjK#8pT+>80s`F=Ag%Yt-fG$0%KQVy&IbYAsze|Bck>B+yDQiP9yj6MTW2hR0n z8ZUyU-}=o|?hTgs(&57JTCe#(S1D&~_i>P2uy6rO>vXy>yyk}t2Y>})I$apL-84|k zzKPT4{9y{>pVH~V@E=n4m4QpNKTHo9_iexbmx-B?Zx2Wkd~ipZ#tYl&AO119i{yY( z71-CXIDRZO-TOb2v;~uxtq^nZooHPv7;Q$I8<0&f2_-3Tm^A<9DpiMg1FS{`IlcUooNB-HI&L#H33WBN<$Stju8QUuG9Z@99pA%*sp^t<%#PnU(4v%yni6>ptJv?f~kRr@r|A zKck`51tR1E5()wdb-;u?KtlE)p$RY{ACQm^NJwP?)GW}Bn-`KGp&2k$0U%XuARz^q zst85~hWZzupa1`#u>htl2Bho(NN5F2C;=pN79_L*CX@ma+65BY0Tapq2`vW+9e@et zfP|)igigSO3P3`QAfXGbE)1RRCH0I9AiuuI1BvluLp@#rQWgyox&hN!0}}E82|a-c zfz}PbFa-&HfC+(DCo6%3{=kGfKpOc$LU-mvgQo{1^yk_C{~1rzU}B*4$S+=k#BRWZ zK&zEsTmuQQOxIy%mg77m$-n?QLTA?WU}k1RMvdvM%*@t|d!`>`W?souATvFOg;|+t zfyDHQEX;b0d#4{@VK(Mi(e1*}eg4Iv>AzW+D;Qr+FJWa4U}tD|VaPbrJ^eH*bC@WY za|cx7Kr&0Y#)}`q)6LkJ9T}fauV7==6#=W*f})~i`c5`x1*U*o({HmeD+DKk=A>&> zM8I`J3l9T>Eg$G8xYkXeCP}$O_c=&$@uHKHfuZ$4$&KJFh77RF&b?>@O`d>i2ZFGf{%;Aier?28+Hkaari-1K~2W+i#B1gHvx*M2`kzy$!Ps0FnUzc7ihhi5T# zpL(Wq7kdvxdir@jW*M=Cum1mk zdFS8%|JH4wELqAMp2hg0W;!E3vq*jV>;L~>ZUW1Ja$PBR_=}b||Np<74;BLDI*?G~ z+yDPx_JD;zISeFp?*0G&FDt=9pd1DgI{obb|CecCAy7ss6$pQk@!|jfV=gKJj4%Db z;-JHcKuQZ<{Qv*b`rm)${{g*iJ3u=DUi4l2|34rD+_s#8?BTZQ+xeMyGtQb`EWoV7 zSUP=%0P}Vx2KniMg3Pl86|VgM-~Ho%8Bh1=|0OC4F9fFl6=XJN`qI7KOo-W$ktsl9 zdZjS)WDWskXV5u@KcW5e`b5$0S*q3ORxm}8Kez~ve* zuCq)}7iF&Jm*|04P30OdJf?pYWsaAu>1kBezrymh#o+5Z##hGEAiZeryiZjC}6=w#9>4g%^w z#WCGmlDU>iKx6wUN#<%6rW?DayUQ`_Fq%#;kz+PyAr+rdKL3e__<0o~OuM!6-5Pxgv8qlf~}o z0ZPodOcA@c?^j}$WaJI)e$)6yg_(gNOZ&NN4Ry0#i~B;%v$t!m7T zY!$m*7&3Nl=TT>FVpNZq;li*VM7-wiW@|lA!u0Mgrav>Lztm(_W18zWT~LcziQi(T3&YE6Um(V01Wb3*Vpa?6ndQRpav@X@Y(9kO z_I>j*u$a9W1%;pg|G(t<24epC z@&Erz!S5g@1IV;*i~s%a?S1n1|NocOU;lv4;pgaW+VbQ7|L(30KmPwWKJjA1=l}nk z4+wO7{V_iAV)5ty|99*F*{r|*GsK%<%RxkMuMNnarC=+;hR*^UE&&pqKRr*IS*$(; zY#0y3Fn5q)CqNzy2AKu*pXpNY5&s;$O`u(V-CZaCft?`*)(Le6FG%MXkWNXEPLS(9?-36LwH9qm8^Al3Q)O`B?e}@YwU^+g*!lfImfv4N+iSdaS(I5r&H$Vv_ z9j2n&^+Ui5_Jv@Vg4KTM_WEFa;)MZ7Z34)9HZY}NFLwKWXg(hqUyg7bhHC(Mu?l2r!$KE^mu*lDaOpds5cv2%@c#}4kbF8+{!F*; ziWC@c;h~op~+{FQ0vYc(U8~!^;^aAS*tAY|8~%0SXCSFhf@)QGX#~;=ij9Dm>Yx62K=O?fH2RW2#{2;plLs~i6tWNuGVsPnm~WuU zjX}ykfP7;=-9V37ww@a#uwbqW!%K0Pen`N72zar19{6-#Xuv~Fxb^=3{~c#Q8lJs} z`V<^d9|B%9qo{{Q|0qUliiGw_%Ml}ymA6Yu~0M~ycokdhCec;K6!XuvE||NIR&KwKvT zyqGfw#O(E*^RnsvpZ_4b3QX^LS@a$j3W&03)mxBLp{3*8xBvg|5CMhC%C}(OfkGTq zI$D5qx^8HGz{n43j59Q+ZukfCi2~GR^&GuUE4saw7@v3%g>0ZN$iM=SfsqIUAxZK@ zz>Ckbp+OD~VQ6tD1=2EQsSCqPHK-PN3IZjI-)}&58%UZRDt)Hg_k-Na8Sh|zgC_0E zAcc39xG=oD|7N-&D0hGaEEa>R>o-u(b^9K8sSyv#n+KW?I=sw{gE9kNCV`k>XC3JF z+GBj;MJ`D9mPIZMFDqfX&wy-x`2wyIYOym&4zoe@6<)8}DCFzi7lPQr|uc z6ycCif|f@cK#F8Qp5OBt>Q_)yp6Pbo5bz=#tiIRxz)M@W;n2vdc#V`AvO$K_fD9>z z83KxPj<=vxwc{lN)cN(jPEe;=BkR@!>D~a+Z3WYP=FAyz?iGK9a4>ZB_#IbOpO>xFKwGoUgH z>?CNxVFuD3vdo3yr4z_Wy*$7F|9^S)6;w+T&+q>^|GT?5euEoiTwtBh((&($|NnPr zfOK*qECv-hGhTs`*_D?QV5YzdnA0zyVF7AZ?gMH611b(qy+F8oni;dKv;C_-{}1=} zf{t)_X$&)@2^34+U4I~PkpVUe>W65MQ71q~rNfMxZeYMHBKzVcy!eHNmJ&$mg5@p@ zFZHHRG-H;j|NR`)x?SVK@RA*-7m^=&Al1fgki5WJ7lxP5pF^Dqs?ld?g9;pQlVUDt z{R*gDPIJAz@S^b`=xU6Y ze?UBN97F58aF8(^D_j^}CWDLtRdV3$$UF_X7=~s@Es){{P`sFd6oa!aOF*|PPr!@I zQ<2q!s^5C!6EA)}`~QE(8juDysD@tO3omED9RaQCE3X4y`~tScu@g18ycP2AOko+W|t!y zzyUGGIw0#a2I;%9+J)hzJxm`s6M#cNAmGLIDF}<9VZ~4n(qjU$iw8wdH>ek} z9HF5J)B))30xh&OKJntzQ&3PqoxAtx|NlF9K-Qjo3iU6j^wW76@f?&71YQO_hvp`y zKagUe8>FLRl?%hm>Gd!zy}nCcYH0lhw=xvK8n3*R0BQ7H@KOLogMAJyRJ@Vxw*#5B z0%X4z%&;>c2OM~LLlb1)ftMFFVaaj^B)GZZ`a$vk@5%rFJ6Kk_FudeKF<{5b8P7mI z=y*8+WB@2crcVY1A*e2?g-Vseq-wxYki65;?bTv@;>A+XWkd%!AU(esAX`L0o?h|< z6ilErVWC+Ma^ZxR24I&?c&P!U6`-^P*p>q?1;G3RFF8QAfkL7w1+*@?3shVipLk&l zwg?&@1|W+xK;E$dTLeo3y}k=xp3nfHhRfRUzpKO z(BSEK{QrLxyqjGOGIa^a)OMJupdgZf=|W9`zF-GIee3|zdI3~C_`tM+S}lAw%;H*4 z;3Xim^k)L=ghtBON1$E=D6cX;p6+kMESCKQ6dqSzHavl)S!gS2_ajh}XMx1!I*>LS zkcGP*AwrwSodH-x7Qrw6EED64YdLp`T*oKH>jbI zaD`S)(je&zTU;1kszap_UA7y>Ctm!10IHz3f~qzQc~Fn&_JjZbMR!zy40!$k>UB`o zt}vQzX2-0^q_Aarq#d(Ny}1!+yy(x@|Nmd=Aef2>rWk_BjbJh$m|qRyCcHv0?<1I3 z5X_SZ<~}g99&GbwFdNKVfnd%>Fef3H?FeQKf?0@QrXiTo2xb6+>55=l)g##Y2&M{x zDT!e6A(+ev<_`n7_unFzj}Xl32<90C^B{y-4+{8g5H^Up8o^wEU`|CayAaHJ1hWLe z%tSEb5X@i%(*wb@HK>O>-UuPAj$q0ln1To<8-n>;A8x`21oJ6^c?-cjk6<2wGVA~U zf4LLN25sC!Fc*WFcYgi<|8fSH+4JZB|ChaBrVXg6-vnm%fCeMW!OSHfW)7Hn1;k7Q zGg&|;gn^kRAf`8%nF3-u=>Mz#-`hI{#5M&B9|1A7z|1coraYLb0%|skfSDm6CMTHL z0%HEt19^W7i1``Jd;(&=05e5E4!#R!x`3FMz|0a5^EjBfAU15KZx$#19B}3gb51jpSu74 zgL+6GL3HmMkkB&-6QuAqm?;Aa&)*AZC594@h_yh}|m#^1*sAvj!x(1kBU{ zSw9oZTmusA12cUmF15&96X3hbLDubDzaqE{75GF{J7tFi^Qp*Hp{sD=8*8wGk7?5k9L{Ed6fBu2u{{Wcn^6mfsms=rBkbhQznI$06`C#Uk@Bjb5oC0Pp z0f}~knV^yVmvvy~6_98#n5hDq6vzNGSwPxi!Aud5xj|s22}smk2OR$)AjLLd;S`Xt zA(;6DB&r5xP63HZgP9^AI|RVYBOp;$FjEI4`b!(^eGv0KnArnjJ^?fLfS5PI%r_wB zIWSY^JE)g_7|iwonYIJWtN}6Cf|+YT%tc`49T0Omn8^cjS`V0M17bFUnK>Y48JIZ- z#LNaW&w!W-U?zB`Boxfl0fmGYh*{qo17h2Q*u5!6ZF~=Ag5B{1%mlmcCYT9!^Eoh+=Le|#I}B!nJ-7qR z1bcfem00W-lV_9B?M3{_X7rjUT=ALoo+py%(A} zRxoqG#;_n8^BX$Y$PO_E;tnnp^&I>y^`L_VA@+U;wexRDf`bU6`ff8Qh+v)-KsNn- zZ?6C-s#k&4gS)w)8oRp-bmNNgi5K^-ASJkqSN{LsaRZd3?p}c;Zb*_k)9Y(`o59p8s&=Cfp8S+~Omp~>%M+DAZ`u~5&1(1VoUP5@t zch1WhE}&?b67V9wak{<_vv~a^kV+PiMe`6U!4cQnyW`~l|1VX=K_k)`r~m(dDFtSp z05SQ&OpP=D|G#8`FhOd6iv9iH-CA-Sl!yK{K$2C>aZm}u2uoHV?!Vq%3y>kF#K7H6 zsD`sB8sM1)q~ULGuf(bU|6k4$`wJR}-2poNvhVUAxLuP_w8Aq8NbB$3-X9>l;z3%w zdqHk{84S`2Vb*&f*tQ6!5rV0XV9Fqvf(RztWza%~3XuDLi~ju&wd2DjkmwAM)lU(k zx4@z|Kx)r}MeD&1Isz7s00rSrurOG39ayvjB)S+OIs+{F0wmgt5N*2j2WE3Qf|-M0 zCW5tjfNTy!X!EWI3$FkPJ0OHj!J-@>$7>-(jhPQwvU}BjEw{t3o3q^bdLWw``_KAaU49P)^{E$12vup4MBslMelid z1_EUZPz5ZZIDMKwv!eEfT`mkSgU4naiuUQ~ib zIY6R9FV;Xr`ClYQPrn_&EUWDj{r7)xua64fiz}6qS*~`K(YcC7Ks=X`>oA$CW9NWvnaA_|K!-Ksn4Da@`FmUW+VK{S`g<;!a z7KS;8Sr{4)voPcwW?_gq%);Pvn1$idVbHmO3=9VQSQxVQu`qP)V_{gekA=Z&A4J?| zKMO}O$U+RswY(6yh1VbXpUhB^CL7}o4(Vc55yh2g}0 z7KUs4Sr{JdXJL4?pM~MeeijCX11t<&2Ur+H4zMsN9AIIvI>5pZa)5;)?*I$KlYJ}< ziw>|b>^Z=~aP0sK!v~PsgDeax2U!?&4ze(q9b{o}+0Vk@b&!Q2=pYM2)Ik=8qJu09 zRR`-?7+MapFibkg!m!{V3&W~|EDVPZvM^jY$ii^%APd90gDeaThgcXm4zVx@9AaUR zI>f?YaEOJ$c+=y;ARy?#Fh$E5j1|Nj z7!1T57y`r`7)*L0at#s=3<2T}3~;&Wwjs>Yk_}Ml2@(zr2T-I7LzvY=FF>UiNH{PE zNH{Qj5Ji|=Tv=R_n#;h@)91p_VBo;u(2l?h`dk@xF z6Ck#ro2cOHz~HbwFotmV@|6-Fwq4Zo(~Eg7(lK^ z_92W73iA~cTo^XgIWP!->=sA(801zE2CHp#V9=Q8!k|#=!0@5afnmZv)Dm&G7W6Pl;n#WNSxOH6fP5ZLL!u;C&k0e~%o8itRpFy8@`&=^vt zpy~&ijZYs;j$yt7gTf_;dWH)-9l-d*4hM#Yoem5IAbie&;lNG@27{dr3=TUT7!-Cp zFnrkMz!0$8fx%$61A`8dqaT03POdt+`S%PjkG9Mb}$RSWqbeu1+b7Gj_;RLduK?TVH4~!uW zK(+{%V=x_1Pkf>i*z3UX;i3bBz$FI;hMf)!3qXkz#AaY%xG)J3A`{S}1eaq#4rZvw zmMB2!0fY&pi3cYk4gxtw;4&m_Tmj{MXm(CO3K?9Es0XZ<0;0AjJFx@Fg|8{%lMA*8zUnV6B9R+2$L+6 zCX*JE36mp}6O%8KA5$b#6jLfw8dDKdF;hKL15*!EFVjq>Sxn2AmNTtjTFJDEX*JUt zrVUJ6n07GjVLHrojOhZ?b*9@)513xoGreW{$n=%zC(~ahR%TXaK4u|iNoH4O4`zSn zaOQ00YUVEHh0H6NH!<&GKFoZI`7HA#<_F9_n7LT^StM9ASe#fwSrS>QS(;h8SSGT} zW?9Ixgk=@WI+jf=+gSFo9AP=ma*^c<%XOApEcaL*vAkq?%kqA>lD_RtaDixu`Xj> z&ANegE9-97gRI9{&#+!(y~cW*^#SWs*4L~bS--RXVP#}vW8-EMU=wANVv}c6Vbf&O zV>4#6WV2^;W%FhWWD94DWlLtuWXoqOWvi}dYhY_->tgF?o5D7eZ64cVwiRq^**39l zXWPSeknI@TX|@Y&SJ`f{-Di8k_LA)#+h?{PY=7C9*xA|n*hSf8*p=Be*mc>B*v;8( z*d5v3*uB{U*hAT)*yGt#*fZJl*o)aK*lXFF*xT8A*e9}2W1r2wfPE?ZD)#m4TiAE9 z?_;k&%zlFXEc+$)>+E;fAF@AVf6e}Z{VV%Vc1{j{4p9y{4ml1D4h;??4pR;%ju4J4 zjy#SMj!KR;j!upqj!7I-Ip%OI;8@79oMQ#YN{&?=t2x$itmW9qv58|d$0m+F9D6wq zavTD~V;mN$BhB{-!y6*<*7bvSi6O*u_DtvRhZ zeK`F&LpdWj<2aKzGdc4(i#aPe8#p^TdpW0YPUoDLBC=f=60%(wGO}G5O0r!TDzaS|8nRs&TC(e1 z7&@|D7$#)9FwDqyVOWsu!muLSg<(Us3&Wml7ltF*E(~X~T^O!pyD;3zc42su?ZWUT z+lApvwhP0bY!?QW92W+j92W+W92W+e92W+a92W+i92W+Y92W+M92W+c92W+U92bUw z92bU&92bU!92bU+92bUy92bU)92bTbkmdMTgF&GSgF~SULqMSm zLqeeoLqVYnLqnkp!-PT?h6RN#3~LHq7u{_3=X9(3=yR+3^k=L3`3 zx-iI8x-jTex-i&Ox-j@ux-g_vx-e8!x-j%qx-d+rbYYlM>B6w4(uLtbr3=H2N*9JV zl`afFDqR?Os$3XUs$3Wh>Z@EBT&i3cBC1>%Vyavi5~^GnDym!l{Mqs4`RosogzPKyfz2WabTtqTJu zBLf5IN?I9428IVME(|=33=E)at9e2CYF!v4K>QXL1_6+KtqX%7BLf5Is&+|`{uUPo zAw~ve2Ax_L24O}92GAAEB8&_SpsQk~LHrgM22n-^294V7+saw;*jYoSxiIXTu369G zFS}rx3qvjg14B@-OR(D)!vMQu*W6}UU%Yl`sjofb^r`hM;ff5s2(N-JPY~#JVUU1| z@mz3WV3=;$$Rf%y=Fp>G~YAF>*dzK#nn3{TMXed%>!VCjR~_pX6OP6}BK$UO#qE(|t(E({TU z)72VTo$R2hg5(i+q6!jRHG z-LHv7&JWvCcq;=ubD;86j=>O>642t3?)eVK=!mu zaAD|yih<-IPBcSS2GYuK$%SDLR2hg5itjTMTo`UlaAEiY6TdWFuaQNJ6QoYz5;XOS z_)bI(euarhIzUE2vBM=71{)-`ARBxpx-di_sds?bpogpuq&?x13quE*-Wd~J7?yzb zPVZ}BkqbqZ2k8O1Pyk5}NUY_O3&RT}G0=G3kBKe}Jd<1)G$y$)q)c*Qm@^6DACOvR zaQ@^3X<2j0g@Fmom2-ir0GSAinh+G-)BRdm2-kU)k0PW z(wlL`h2aL0UQh~s0qSK>oqnr>Ma~de4y3;4iVK6nG=w`r>J6s3FjzpvdZs_@U=i0s zRsz!Y;;IWn22=@%57JgK&4r<1+VreW7P)$u+)g8Ah6kq13@T>K3>jw33|q{Y8NQh@ zGZ>pQGeny+Gh8)iW-zp1X2`Z+X83Qx%wS;2%n)tK%+PJg%&^;%nc;yYGlQTNGlPK@ zGee~nGs8wJW`@UB%nX{=%nT9M%nS|I%nTc?nHe5hGcz#QFf%CFFf(}DFxN9w+b}b% zuwiESWW&rLVav?mVav?WY0J!T&z70N(2kj*(2kj5f*mu%4m)Os2X@R1a`wy&9`?)( z&GyU;E9{vWZrd|62s~LUacj<;f5nKgP0RDgNG9{ zL$wn#!vQB|23cojhD>K>h6&E~%nTcxnHk6;D>DOw8#9B08#6na?#v9#9?T3D9?T4#9?T3E zJeV1{J((FiJee69Jee7Gcrr75@MLCi@nU8u@M30|;Kj_a!Hb#Uh8Hu#KD%IM2F4I( z27?f0hU^e#hUH<*44=c886?7)84|;p8Fq&=Ge}1;Gekr%Gc-gnGpvqaX80Vz%ts;ljp54-mx+p^(*-87aLSoMrf6oHIfIpfXpl0Hc7>T> zWfyu`IOG|i>bT9EK?_5ELxm9X1ai#`e*ve zZWd+36*DniI%6ipr3&T{Cux{NTns9jRHhsDu*mZUSVDwA9*ckoJ%Bm{B-8>Hk`=Ik z7$9u{ajTjIL>I`d8$e1Fc%UL6O>aOV^3w}?Sy(thJ_m_OOb_g3k)D2FHVX?Y=y0kG z5MMrY0o33XPPPGFJeEr6;72?aoe9FQDe0~Qj!UYdJX-3!@68>^fCxW8&4p^;f0MwWWD~Qr$D~QrOsIefW z3ez7>WKn0DQ3?r!l=+B|Dwz)nsh0UJ)AJ{>i18pfbkFp{iJ)W-wG`x?7a$?&=?QaK zI2bLa3r=Q{x7}b137_3i`WTcx2c@q;X#qQkIte>SfPws*05*cx0V%+yK!g?`2_2X| zaT1I4^oD*G9wx&qh#%f8K=|R$0*D`Y7D8g%IVlZNJb_#cvIa!EEQI7|P_Tlr6~s9p zHYlTkvSY?Vh(RF>U8euS^yP1{0{aI$Ae6~01*eJO)+~&TvkA( zL6-gjOHW(L!odm}{0o_WaSDrkYLX+wS^+360i~6pv>ueUgwl>s+6PL9Lum%6jU4un zXcvas4D!YtuvNSb4hXm200}{ZaP@R>5Q?%aMg*bAVu;UGrazp@B0OzA3o8%QK#)&k zrZ-Myk)EzFkA-zQ=X4fs#tyK+v_2MA9wbY)fJLVZ^sumqGB`o}$?XJj1SmuvAmsTk zAQ>;R1RTJi+{EVyQ4X@z0U`_vcX0*>sBuv1K*r@D$vZ&hJ&@!Vz~wplplJ?d>=lSG zxP0oL3JwZ!hNXz05LgNc3WcT6)D$-bGc`plMNLf!(8P_Lnrfg1Wh@1!CNVK5NFot( zhWHWWhaF47Ucb=G!U>WForAsuDa77Dq(MoH2PzEmg2MEJGg#z#9gu{4AVL8y5VJw5 zDj-4)NJ2|MLXc!2T*u;wQa9GII8NU^lSOj+nVBpCoFA4!YDkmmPiL|yTRwntL2d>m zF_8HemO;Ycf-}TlH=H3!@iEkYAaya*6=#Bq5U3DH+YE?Mfd|5+N5Dd|0xl4Pq+K8e zsX<*1GUx+XiRb|jNIEzH)eUlw&UD9FEb^iSo)Fy?o)CjUQV9^L2T-XONK#Y4QoIIG zgFr4j0TvQ1aD&)U;f65i3rGrF1#>X^OfQ_xA|ET@4pAlnr4^vG29!2%ht!c4P`(3{ zegLIkKH%)SA!<@Fn&$~xR3finThp8=&8K(&Kvaf?;pRP|ss z3lBIT)vzw8Ea;%%t-2UoCih99mFr+|Vm17a2^h4Mjz4-{5&Ai^7F zv2e`Fs!%EZ>5M?0UJWxYHx>=?R&Sg>HK{C$(BqGntfFu+H7E)DkgBY&? zr46981vGj<;ne|Bstj*1odI#>MH!&p;egr<^3D&i6n_I$2;>-@HQ>+!xseZ=;y}U? z5MgjR5%dF6PPD8+loM0dK+1_FYarzWQ}8daBC$J2irzpK{aG{JZvl%GW5jg9`7HAF z4Bn8S;)BwXP+A2_>qBWPDD4WR1E6#?lum=vg;2T%O1DGlNl;G?tF#hj@ z(kG$x6)1flO22~AU!gRE55(czP+AO1D?(`R^d~6&7fN&ZIy3wSt&|rAG5-JmF9)SH zp|lB^n572 z3QBK<(g&dQX()XSNQ2IEOz67Q3Lg^P!`ZJXN z2c;i+6QOhtlrD$TO;EZQO3#4Oi=p&7D7_O( z9|6<#|Nox{Gyea-1*M-t=?_r)H{4W}x&8D7_d;uY=M%q4W_beI82Rg3?c+^am*Y8%nbULmdvKWuUZrFf{)g zK?Q7~vpX)# z7EZokh&ZUudjk;$b$j`|5W*5$z^Xx2A@jx>$Lan3EQ;bTTM%_&$QDRln6d>@7cyU} zfU25Y=xL5vejk!{aGwxd{B3T+~>0u;*e=9oP6O3_f$h+Vg3VVP6sKi?+Jw{ofQgc9_7b;d7Y+%4 z-{Ft|V~&7~HE>5j+LOW&5Mw}rwE&_GG^%F?jglEqZ41I7+E#}{v~7kOy8x;k6w@al z+7HZQ;S`I2Iua@ka^x3?G$z+Fo(`oKf$94H|JQ;U|NrlR(ubk+IVgP-N<2-%%Gpez`zg-708Ctl~B4JN>7E-3!wD6XlDk{1)+POd>DNX%6|i; z4Pqdv5|pe~>;fm|3%x8Xv7o;CzyJULgXl9*8pf~IhNL+d{|b`4rk*o{tsbiU1tfWp zdFQ7Ku49o`w9`jbhHOo(zB9wJ>4EE5q@6WQoEdCPoEe_%26bjY`WYCMK$}7mm>CTA zAjD4XV`1<~U}o?@5=%MA!jO^x8k!&7qcX62RCrPLsBHJ!z%q%APb0~hAtuS0VNQ}W zgGJADz8x$|Ocp)UjdrkTf#^6W-L->7OUj}LG7X_;?-&;1oS$2enUh-N-~iHhZU>7L zNd2oFEPf!`YA1^vh>n8NRZx1?PKf#YcCx6|qnH;`S&-_Go>QEYn3oPV6UnZy#G=f^ zq#T^`!Iim5`8i0s85mH^b}P+GF3HT#LsDVU<1#&Y7mFguk!`zJ)Ijt)D1B`g#F4*t zK|Ce48^X7O(s8>Xfz!1cqHhya{2G-01*PToK=e87fvC%Z^85C%DAj|`=6^EZnE`b8 ze!x#>hKQfe3o(JKCTacylkle?>09rl-s%aShI599X zLKbf*{BdHaVPF8ysyO^{Vu)j405=Q*{x~tHF))Bfz~wDGk~r=F8JdFUXKJ~ zH~ev8uw!5VPq}RP;{;yd1e$)C@W+Y41}c8wj}v%-6G(i)A1Cl4Cr(f$^~Z?;v=9o! ze(=YML7Rbr0W=fz;g1u8E|ksi*NH)kfdSm|5cq53#Gnu5DExI|P=&G${z5c6{Do)? z`0K<_$H2gl@Yjg}G~-b4*NMTRXZx$YEK)4>po@n-7)Tig8!j{4VQ6F&X!OsB#rS~n zGvhbL9434wRwfQ6cBU?-KTLVd#LX6%Ei?OVmSCP|{=!_rLeHYnVxq-Di>a2MEm^I^ ztz4|ytY%s*vpR2e(fYBqtc|{nsg1vlvu(ERMB7KUE_M-isdjyKGwrV0J+*VT53-N9 zKUHtfpuoUz2jp@CH-iF$UV~KztcHAsN`{9GFBv{GWHypEGBolr$}uW7sx)dfnrJlF zXr<9sqk~38#!HO186P%2Z~VlV!^8yaP!|&q6CaZRlMs^#lNghBlUXLKOtzcsHMwH) z+eFw@($vJ%#nj6*)wITRg6VqGJEp2;^#Nu*W|PbeEzB({EP5>#TAa1GY{6v7XDMuH zVd-bN#&WOa7t3Fk99FzmN>&b5Ay(;DWmYv-%d8GtU9);;#bnK4U2NTGJ=1!g^%`q$ zn{75;c024Y*}b$&wlA?~U|=v{VA#OGz|duI%7EEW)KJ|}*~rw$-RQLOauZckLsQ#& z)4irAP2ZaOn$0qcHqSIKHJ@s})clJ1Q}d7Jk``JPW)}Vy2^KjPQ!Q3o?6Eju!E7mF zsbCpxnPXXDxykad<$22|mM<*dSbnhlV%cmp)oPiQt@Re`1J-A(Z&=^6{${<|=BUke zn+UsjyD4_F?GD%-u{&XR#_odM6}uaD0`?;I^%C|n_6qhY_LJ=w*>427*nxooRB9L) z^c!j#nHn(~OB$;h8yUNpEGs5Wv6?!oa{_WME+sWE^3<%lw4-74tO~TPzM*oU^!X@xtP(1&bwzC6A>* zy`_kygr%~jk)@wakxh%uW1EjQN_Nh6fp#f&$L)UF3E7+3d)W7Y9G1Yq0J@#q+Q88u z#VE_D-Kf`SF(@q4?@eBJo7$xjnz(^;kqOjns+GksxNYu0R5X3=4B&&t_4%(~I~ zvdv?gKQ@zXneBw_yzLI#U9x*^r)6L7ZC_;HY(EKPK>-897tk6(gEoU120sn74IddY z83`Ln8rc{*8o3+!8U-6g8pRu>8f6<58kHN>8Z{er8uc4ZHJWX-&}g~QTB9vSJB;=i z9WXj#bi(M2(FLO`MmLP^7(Fn0V)Vl3jnN0AFGfF%{unVBvlt5-D;sY%K4fehWa4Zh zW~yeo&GeXQx7kE9HFF*FDdw}xx0~-ZzifWfyw#%HVy?wvi>a2gEjL)%+Zx&~w%ua8+3uj7vAr|M ze+>)_po_4C4b%*r4Z{p48!s~6V0_D%&BWZK*rds1qRCT}-zI{l&Za@8iKe?uFPn;* zDVcpTi!o0$PdCpsFE+03)kK7IPaCoIDCk1ak~1XxB|=37=+_E}E0oMpMt za)sr3%WamYEbm!2r~xY!2UC)pQ* zoHl`hp@M;dVX@&RLt`T+qi@C>Cf`grOr6bw%$}M3Fbgw}F+Xg6)m+ZP!ot(yvc*#i zJxdqM$a+gDD|4%0t0b#wR$HxDtX-{3tT$TUwf=0)WMgI%Y4gg4-PX}I-gd36l%1lT zv7MzIvpuK1lD(_FxBUeBX&{RiFfimWFfcqY5;oH_D>iF03pI~17qQT@$g@~vam@mj zwSHLsv1G8iV0FdnhSeRb2Ubt4URb@cnx1!tMXvsxwXuz(O|osVt+2h4y`eoQ!-LFJ zH&8Y-G<9p$;L&-$|go8jwbCUeI^>FlTB01GR$(!D$Huk8q8YE zI?Ps@eKGrC_Q#CDT+-aYJjy)J{ITUH%Vg^kYh@cl8(~{jTXS0vJAb=%_FF;jKfsU% zj?^xLi3SRW*@nLjJB;j%FPeQZ`)yWXUSr;1-eTTi-eYcK;b7rn;bHN`;)lf_3kFM2 z_S<2($MU0Pg;kAJgH?-FhgFZ&1gj}lE3I}|9kcSW&bD4;{mlBWwT{g!8xh+#(+l6Q zSl1WZwb?OTU|?`zVqj=Cm}1alJkfZ%@m%A@#w(3C7;iD&VZ6uqu<<41`^HQr{3cE& zo+g1NaVFU&6(;jcj+k6Dxo7g)sg9|osherAX@Y64X_aZa=@iq2rt3_1 zo1QSeYWm3Zz3CrQPBSqxWitaaTQe`SaI+M%!XUFcvu?8)W=qXBne8__V|LT*nb~JE z26J9>DRXsm6LUv%Kl5nw4D(X+Ci8ytIp!XOw%D>-XbYb|RNYddQX z>mchG>on^E>niIO>ptrl){CsySZ}jFV9jqMX`^hTYh!NXXya`YY7=jhW|M1EVpDC? zWYcLg!DhP6Je#F9Yiu^#?6Ns%bHe7l%{805Hot7dY?W+trhk9W5?cS;j=`SYp3h#? zUdCS8Ud!ImKEb}gzQn%5zQ(@6zQuknDApe^F#KU;U|=;6Hjpw}> zH&|-0)?kal9)s%!j}1N;a2SdhDj0?sMi|BzCK#p|_8TrVTx)pQ@P#3#k(`meQL<5y zQKQj1qZ39?j1-N-j0@|HryDbvNSSz=6q~e~Of&gq!ev@)+GIMx^rmToS&7+VaLE5L zV>ahDmoQf~H!`<3_c4z&PcttzZ!qsQpJl$>e2e)(^K<66&0m;*HD|Kmw~(>Wv@o-9 zwg|9@waBt4w`j4LXfe-XwZ#sLqZXGe?pwUE_-VmrDQu}=scRW*W$A7iVwq@}XIX98 zVL8=uk>z^JJ(edeuUS5}{9yUllFLfmO2x|1%FfE$D#9w&s>rI|s>f=Y)dH(kR$Hw0 zS)H)DWOc{tnbilYKUN&pO4fGPUeh_>vn;G{ww-Fb-1egFUt3+f0K0IzIJ<1SX?APv zPT4)TW3gAXx3iD7udttLzsdf*{Tq9R4-5>TrV*!snn9RBwZRmF9R_<1ju@OaxMXnC z;F*Dlp}FA)!!L$E4F4GN8VMOm7|9u_7-<<97?~JZ7}*%P808q18g&}YHF|0E(defU zW4$qlv4F9Jv4XLNaj|i;@f4FaCd^i#Ypvc{iC9Zn>sT9E*9TcgSTDBTWPQ+jmd$*dB{pAee%buD$+0c8 zEwjC1d(-xwZG(NQeV6@HPy!QR1eYqF27U&?2ImYe8{9BpHWV^cG~8?yV)EC7+0@k3 z8k{bsnQk<-FtastGAlAGH>)wzHcvJ$GH*2hYW~~Y$il)R*do%R)}qg1O1*`;Wsp^d zRjbt@tK(L0t(dKotTU_^STD2owh6EawJEcywrQ~0VYAofkj-P84>l^cTDHZu4Ypft zciYO^DcPyp)z~%Kwb^~M`)_Aw?`l86eyaT}dj_rxdFF2ot(a|`ou^91t}^Jequ=Bv#Qn}0TEvJkZRZNX^iX&GVp&yv}S z!z#=w)hf<9#d@~&0_&yL);1GtrrB(?*=|#9yUF&At&Cl$U6ftB-445hcH;H+GWLr0 zF7}D`9rjD@Z`m^#FftrrU|$VY1d_lL@mahbgbAxoM(ly(uJ1J}`S~#%RuFZeqU1yv`!ea)aeN zO9d-Os{pHVt1nhRtfrToVbQBkwl1}9w|;KTV8dz?X%lbLWZP`lVb^Q7-EOblO}l$` zkL^nAtLzyZ7#Wr@FfjBRoHV#?@Wvp-Fv{?j;RD0NMkkGWjVBpTH*PRlWU}03jmc+I zCNn{^db3uuwPu^mzL}|-Ynx}7=b2krR9Q4wJg_)u8DllwYL3-Ht94d)tRB`|J+u03 zWni6RJq;XYtE|^sZ?WEI{oVSHHKPrmjg5_?jhjud%>SZnapkjW_6D9R|sD8s15sMEO5 zc#839;|s<-Cc-8XCh{g~CiS`|CMMS4dMUxA%Veg>d~o;RjmZa-FD5@s{+KYBvY2w1 z@|dnNU2nR@^qT2y(+8&7W(H=aW+7&gW^v#o-e@+}Y?j%4v-4(G%x;>+m}i?WGv8{y z%yPBm2FqKP_bs1Ta#`_PiC7t1Iavi--LPV_HncXkuCs2nKHy?~#G2WL)5gKZ-DZi+ zR+|epS8Q(B+_Cv=!(_{En`xVG>tyF{=VRAmx6W>hoq)Z#JwpN`cy~>XL6N~SgEa=b z4GvC!|CU9%KG-nEFxfE2u+Z?b;UhyHBWWW8BYUG}qe(^!jLsVQ83!9j7?&CM8&5Hw zW&FpO%jBZT0}~5Vf72S%m8Mrr|Cp+n`IyC-C7WfK<(oB{wV8FB%`#hH_QQ zyZv{_5VCZF}Z)|F; zYg%t?s%CCs{>_5J@|zWh^(&iZ+ex+yYz6HY8W_O^cZv}x+WkyIO?pfwn|v@)Fby@G zYAR!{VxDbYZ2r@n+d|61z@pru$6}4e8w&x;0Lv1~EtWSdC9G_$YOEGmJ+NZ2cCpT| zUSWO4n#ab#rod*3%@vy;HWs!qwsUL`)Y~%Hsn{ji722)0+h_O3j@#bTKEi&Q{ZjkK z_Mhw-CNP5gv<3$D2DJt~2B!>e8i*UJ8KxK(8*Vf_VEE6F*T~x_%4mksa-*k4UyO{5 z9gXXa`;5;R-!_&s(J)CfDK*(_a>#_il;70XG{$t6=}Ob*rr%6W%$&^{%_f+gGpoOA zCT*@|o?%{YzSaB)xM=dXh_jeuvD)IL#SaTJOIOQg%So0OEbm*&TIpD2SyftXw>oCU zVl8Z)V_j~&+IpAuJL|vJhBnSNwKn}WCv9%qh}x>#CfXL;uC?87`_q=&&ebm5Zlc{{ zySsMp?KJJJ?Mv<3?GM^twr5zt$nXF(D#B|ZZxCsaZLri}yTL~TWlH`8vl-BY{oc82!O_OIR7h1qMqDwi$dd zU^28Z^fT-*oMm{$@R^~4k&#i3QJv8aqf))3Halu|-AvG2**w-f-+ZO{Zu76^>=up| z!4|z1^DS;#ytYuaG`B3YY_{BMdES!KO4=&as>o`g)n+SEYaMHI>jLX0>)qC8t=ViO zYyxePZRXe#At=l8lw&1Zu4QIOGXck%#7Jg>`gjM`b}<{ z%%5)gl*P4vxz!e{hgNLXrq(B{7u#&KIc4+G=A8|%t+=hCt+uVHt-bAH+l{uTY|q;& z+nL(A+a0kJv#+whXwUF~kzob{1A~LXJOfd~BE#E;21aL$J{kELzcA)ANjBMP!eyFj zy33T?%+0LKY?;|Hv+HJW&3>E7n0uL5m@hNGX3l0|W|21C`36fUj4xvTe3)vu%&$IC-H{EWY-BP=ccGdQi?DyE8wP&bjU;Fp4osF)A~fXmrkq&)Cnn&-k1%pGm0643jG+0;YbZt)>S}|C!pE)tT)z`)6in zUT40~{GYj&Mm~t^Zr|+DO}I+L+t8+63Dq+T`2R+H~8@v{`Pm z)#k9xMVtFJZ*6|taN3I7s@fXcIwsos+s4{v+g94P+fD^X`+nQAwzq9x+J3iXwG*~e zw9~h}wotoM~Kc+-f}8c%kun#?l5A3FQg700GTUUO$##>YCYMbfn!GppYr<_RX{v5&YU*qnXc}*t zYuao&(R9A)TGQR8Crz)LJ~jPp%4o)KCTpf`W@+Yb7HXDkR%q64Hq~sg*+#SdW@pWA zo4quXG*>q_HFq`-G>ztnuQ`9bsZ=6B6sn+sUTS?E|;S$J54S)^DL zSu_xpR=O-_ST3{NVtL5&g5^ESH{bzOF)LjwYb#HyaH~|SVyi~0eyh1wtF3lg9k;q_ z_1Nm8)qg8qYiVnJYil-Zck5v5_~|!qvSin1*p=C}*iEwAV7JHagxwXp2X=4le%P_t z3)suqo7y|u2inKm=h|1>ciK<4UuwVE{-FJN`@8n9?SI-cC@?XsVPs%nHxM<@HgGWT zGl((BGH5X9F_>Yn#9)KL9)lAGR}3B)yfct8R5LU(v@`TFOfoDt>^EF&xZZHL;c>(3 zhRpRwf=2R2x<;->fkv@LnMS2XjYhpjGmVxSZ8kb+bl&K$(QBihM(oC-C{bEx++jS$ zc((CUoyhH<@fQ-(nYNj^nX{R{S+rTYS+QBYS-07Av&ClX&32m|H@j?h-|V&7cQa;lesgJXWJj5& znHQPYnRl5_GhbxB&U}~oG4o62_sn0JvswsR$XaMxm|8em_*z6-q*@f#Thv-~T1>TA zXtCAepv75>n-)(kK3cF^3R=oqYFe6FI$HW#CR*lNR$8`N&a_-=xzTd3n!U6>qFM>taWXTZGCKmY%kjK*#+4}*d4SxZg

f!#N|KX&Ezo9&OXqBMT);F!+f-DGNVgMZ}H{IhYi(dT#%O#d8EZ10WwmfNRU}bLg%;v4l z4||3LCWb!@3=FvjI}A=5TrmhT%rd-Uc*F3H;RC}bhA#}?7-|^lzy}T>#kqoshKYfR zg^7cShe?1*gh_%)s9CgGlzF0grg^b>v-wi+;Zpk0i8mi=u|ycRGq6fiI__!>kT zTrjXRoN0L8@SmZHk-gDOqmxFLjIJBqF?wS3(}>S_ujv!hm!|Jb_nX}|1NCNk&8L|Q zSx8uzTNGQ&u()FJ&$86&l$DZom34>p6YEdbem2W&lx(YPzuEfPow8H1pI2}H4P;>h z#KIzjIR*<2xD4A2HyG|SlrqvVYB8E*^v=l5_>i%b$uyI9CRwIWO{L9B%=Vh4n@=%6 zX#UPz+G2vmUW;!Q->saims_v3cCbmXIc;;%M%GrzR^4`%?MhoUJ1aYTyHL9scJu5M z?bYmU>=`C7F+?yhFtixecN)o=DVs%@$C?+LKQMo4{@eVgg}!B&Wr5`i%k!2mEfuXi ztfH-MTR*e;X(MQ>Y3pbkW4qjTzwLF~_qJSi@pfzNe%pE4C)n58?+1Bg0TTmg&XC2x z)nKy0JcEq}rwytMI}D{vrkdP0RW++N^S794@!H~mwS-N9%?TTYdfN)y3$_||4WNX% zfr&wafq_BDT-?0cyutjk`3-X$3r7ov156AS3=9lyCKF9InEW^KGgUFuH(PFY$NZsr zyhVydm4&}$h-H@LZ(AA%>ZO!Opm*xu~?g1AGAJUooJJ0lWh}h z8(|x3yWDn-?MB-Rc316g*@fH3*eBXQw0~y*+MeM76T=h+1_oOLCj)l_3qxB4Lnp&R zaJTZl;SgT6?%6QfhS-|gTiM&&GkjoT@Bp1FX%Jz+V))UJ z$;i&A!)S`p9HWIsV#a#LDkgrW9j1p&PnkY2u`_WtSz>b57TM zYGvwZ8f?15bg$_lQyDWwGc~gs@Ce6evma)E&4kSr&DG4c&3nxco1ZqnY<}DPvH5Fr zJ&SOQA`5NH@0Nco8Lf1z46V$p)>v({+GbV%#_FThH>+gp4C`EL7aLET={E0euh`wP zv$t=wzhTdyz{~(T%|zV5-C&KuW`nl|pA5bmyfyq}_}$RnsK%(#sLkkz5p3Fz!PWrSNvm^KPpv*! zeY4`Umb2EhwzrP7PPU$B4VrD;Wqrn)%SOUR#YW4<#>UOYA3Um;VUuT5Y*S%VYtw4e zWi!WSiOnjTZ8isOPT5?sxoz{%=9$fFn-4Z$ZGPJ@+lt#7+6LMt+h*Gq*p}K(x1DRd z#CE0aHru1NXKkZ~Mjek1dlOhn=XMw4JJ*i=CHUh+ULjvR#HY} z2kej8pRvDWf5ZNs{S*6F_8;uO+5Z6*VFt{g5n2W&0|x_lgD8VZ1~Uxi87whaWw60u zyTLw#qXuUTE*so3cxdp_;G@A$1JKOBu%V=(vZ1b_t)Z`BtYKQc;dH~fhKmhX8m>3o zYPiSnu;D4gi-tE0?;Acdd}sL0@Sh>45ucHWk(`l+k+qS7k)KhBQIt`lQJv9AqjN_0 zj8u$GjIE598Lu|pYkb@Iz42G$878|;j+_`f6ouon<}A`mpt9YatsWn^>D(n_V_6w&u3!wzF*+>;mkX?H1XcvioFbU>{{a z)qWRf#LI!1Aq6~Do^LSM;JU$IgGq+R4PO~*7^NF6FuHH#RBv2uyvX>FF@uSlNwLXd zlj|m*OpHvkOy`q-e&&5+`*#UVv@xL3vNppn{b;%n?jpLn@Ki{ zY_{6$w>e^S$wuOu%_EyXYpUFto{JH~p31{Q`h3=9k^CORf2CN?H6CO#%1CNU-{COIZ0CN(B4COsxo zOy-y@F#bl4k5fc*|3mY372b&g~4x1k~e{6Vc1#Bg34Qw53U2H>aBWz=AQ*3K& zdu%7zF0frYEDSPC3=BL5G6o9psRkE=7=s*x0)qyF7K0vxB?emzb{L#6IAd_Z z;D$l{2ZJvLJccrc3Wg?z7KR>%K868?5rzeZ4Tdd-Qw(Pq&M{nKxX18};RSF@@C$e{ ziNT1)h{s69NW;hhsY_pD)MGROTy<;#uPy+sDnP6!;4oG&HZV3Zb}{xa_Aw4H4l#}~ zE-`MYH|{W=VLZopf$V3{$qkbiCXnIrKPDokDyABy7N$0)KBfVtA*L~=C8jN=9i}r( z=a?=qU155_^n&RX(mNk}3EVo!buzX?3W2IoFVP#-tV-;hSVbx(Z z#cGSy9;+i(7r=9SGS(W_KGr$bCDt|8E!I8OQ>^D$FR@+&Ui|XF`i1oe>mT*j3^p7# z0yZ)>E;bo9B{nrSQ*0L49I!cK^Ty_fje@O@Fy3K&#Q2Hv8{;3w5+*7pE+zpc1tt|HE#S!8VRED1G_n zYJt@nt20(ttnOI7u;Q>5u{N=Guuibffye9y>kHO*tp8ZE*a+Ad*x1;_*kssDu-RgB zz~+R_3mYC=30nnQ8*urMV_RZdW7}feQ*S%Pc8={5a3QhB_K58n+bgzrY@gV^0mn0o z9gm%eos6A|oerq5uye8Vu?w+_u}iVbu`98wv1_sGv72Hy$8HHY4eYTyVt2;wirpQ% zCw6b_zS#Y-W3lJ47qOSIhouM?dmsA{a0!xQUt(Wl-(p|iV?V`y4!9uMV!y}!i2WJ+ zEB1HnpMZ;#KlTh8SQreL7#LU#cnm}gWDHacbPP=3i3gH)N(^ei1|yBPa` zi=g@x;~e7>;~L`@;~wKF#&f{M&=%u8#z%}V7=JMSV=QB$VG>|cV$xvJVY0&HjL8j? z2PO=rDy9ae7N!BFF{U-99i}TxH<<1*ePGI9#$hI4CSj&vrU5Qf9Lzk-0?Z=J63jBp z3cw{xhuH+P8D_olU1+yDw56oVeeK7lB#$e82E@Ey0PuUgbE#^zi z*O+fH-(!Bn{EYbx^B?967CaU@78Vu>7A+PNEM{12vAAM!$Kr{_8;dU%e=Jxmc`QXN zWuOI?jirmFk7bBujAe>tj%A5ujb#gXbbOBG63aD~TP*ij1{|?GV|m5$j^z`}H)-ey2pBg R_4Y$QSnN2b2Lv)t003ugo38)> delta 121192 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 diff --git a/Test/120.frag b/Test/120.frag index c00eccbc..e6ed62a6 100644 --- a/Test/120.frag +++ b/Test/120.frag @@ -114,3 +114,12 @@ void v2() { return v1(); // ERROR, no expression allowed, even though void } + +void atest() +{ + vec4 v = gl_TexCoord[1]; + v += gl_TexCoord[3]; +} + +varying vec4 gl_TexCoord[6]; // okay, assigning a size +varying vec4 gl_TexCoord[5]; // ERROR, changing size diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out index 7d28dcd6..49efdfc2 100644 --- a/Test/baseResults/120.frag.out +++ b/Test/baseResults/120.frag.out @@ -27,7 +27,8 @@ ERROR: 0:94: 'a' : variables with qualifier 'const' must be initialized ERROR: 0:97: 'out' : overloaded functions must have the same parameter qualifiers ERROR: 0:99: 'return' : function return is not matching type: ERROR: 0:115: 'return' : void function cannot return a value -ERROR: 29 compilation errors. No code generated. +ERROR: 0:125: 'gl_TexCoord' : redeclaration of array with size +ERROR: 30 compilation errors. No code generated. ERROR: node is still EOpNull! 0:21 Function Definition: main( (void) @@ -265,6 +266,20 @@ ERROR: node is still EOpNull! 0:115 Sequence 0:115 Branch: Return with expression 0:115 Function Call: v1( (void) +0:118 Function Definition: atest( (void) +0:118 Function Parameters: +0:120 Sequence +0:120 Sequence +0:120 move second child to first child (4-component vector of float) +0:120 'v' (4-component vector of float) +0:120 direct index (smooth in 4-component vector of float) +0:120 'gl_TexCoord' (smooth in unsized array of 4-component vector of float) +0:120 1 (const int) +0:121 add second child into first child (4-component vector of float) +0:121 'v' (4-component vector of float) +0:121 direct index (smooth in 4-component vector of float) +0:121 'gl_TexCoord' (smooth in unsized array of 4-component vector of float) +0:121 3 (const int) 0:? Linker Objects 0:? 'i' (smooth in 4-component vector of float) 0:? 'o' (out 4-component vector of float) diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out index 7f75c657..550b7483 100644 --- a/Test/baseResults/300.vert.out +++ b/Test/baseResults/300.vert.out @@ -134,7 +134,7 @@ ERROR: node is still EOpNull! 0:? 'rep2' (centroid smooth sample out highp 4-component vector of float) 0:? 'rep3' (in highp 4-component vector of float) 0:? 's' (smooth out structure) -0:? 'ubInst' (layout(shared ) uniform 1-element array of block) +0:? 'ubInst' (layout(shared ) uniform unsized array of block) 0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int) diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out index 83577c95..4dd0235f 100644 --- a/Test/baseResults/array100.frag.out +++ b/Test/baseResults/array100.frag.out @@ -5,7 +5,7 @@ ERROR: 0:9: 'arrayed type' : not supported for this version or the enabled exten ERROR: 0:11: 'arrayed constructor' : not supported for this version or the enabled extensions ERROR: 0:21: '[' : array index out of range '2' ERROR: 0:25: 'assign' : cannot convert from '4-element array of mediump float' to '5-element array of mediump float' -ERROR: 0:26: 'assign' : cannot convert from '4-element array of mediump float' to '1-element array of mediump float' +ERROR: 0:26: 'assign' : cannot convert from '4-element array of mediump float' to 'unsized array of mediump float' ERROR: 0:28: 'foo' : no matching overloaded function found ERROR: 0:31: 'arrayed constructor' : not supported for this version or the enabled extensions ERROR: 0:35: '[' : array index out of range '5' @@ -49,7 +49,7 @@ ERROR: node is still EOpNull! 0:24 Function Call: foo(f1[5]; (4-element array of mediump float) 0:24 'g5' (5-element array of mediump float) 0:25 'g5' (5-element array of mediump float) -0:26 'gu' (1-element array of mediump float) +0:26 'gu' (unsized array of mediump float) 0:28 0.000000 0:29 Function Call: bar(f1[5]; (void) 0:29 'g5' (5-element array of mediump float) @@ -64,7 +64,7 @@ ERROR: node is still EOpNull! 0:31 true case 0:32 move second child to first child (mediump float) 0:32 direct index (mediump float) -0:32 'gu' (1-element array of mediump float) +0:32 'gu' (unsized array of mediump float) 0:32 0 (const int) 0:32 2.000000 0:35 move second child to first child (mediump float) diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index e4f60555..feee5b94 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -174,12 +174,21 @@ inline TIdentifierList* NewPoolTIdentifierList() // for the vast majority of non-array types. Note that means if it // is used, it will be containing at least one size. -typedef TVector* TArraySizes; +struct TArraySizes { + TArraySizes() : maxArraySize(0) { } + int getSize() { return sizes.front(); } // TArraySizes only exists if there is at least one dimension + void setSize(int s) { sizes.push_back(s); } + bool isArrayOfArrays() { return sizes.size() > 1; } +protected: + TVector sizes; + friend class TType; + int maxArraySize; // for tracking maximum referenced index, before an explicit size is given +}; -inline TArraySizes NewPoolTArraySizes() +inline TArraySizes* NewPoolTArraySizes() { - void* memory = GetThreadPoolAllocator().allocate(sizeof(TVector)); - return new(memory) TVector; + void* memory = GetThreadPoolAllocator().allocate(sizeof(TArraySizes)); + return new(memory) TArraySizes; } // @@ -347,7 +356,7 @@ public: int vectorSize : 4; int matrixCols : 4; int matrixRows : 4; - TArraySizes arraySizes; + TArraySizes* arraySizes; const TType* userDef; TSourceLoc loc; @@ -398,16 +407,16 @@ public: typedef std::map TStructureMap; typedef std::map::const_iterator TStructureMapIterator; + // // Base class for things that have a type. // class TType { public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - explicit TType(TBasicType t, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0) : + explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0) : basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), arraySizes(0), - structure(0), structureSize(0), maxArraySize(0), arrayInformationType(0), - fieldName(0), typeName(0) + structure(0), structureSize(0), fieldName(0), typeName(0) { sampler.clear(); qualifier.clear(); @@ -415,8 +424,7 @@ public: } TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0) : basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), arraySizes(0), - structure(0), structureSize(0), maxArraySize(0), arrayInformationType(0), - fieldName(0), typeName(0) + structure(0), structureSize(0), fieldName(0), typeName(0) { sampler.clear(); qualifier.clear(); @@ -426,7 +434,7 @@ public: } explicit TType(const TPublicType &p) : basicType(p.basicType), vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), arraySizes(p.arraySizes), - structure(0), structureSize(0), maxArraySize(0), arrayInformationType(0), fieldName(0), typeName(0) + structure(0), structureSize(0), fieldName(0), typeName(0) { if (basicType == EbtSampler) sampler = p.sampler; @@ -440,7 +448,7 @@ public: } TType(TTypeList* userDef, const TString& n, TStorageQualifier blockQualifier = EvqGlobal) : basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), arraySizes(0), - structure(userDef), maxArraySize(0), arrayInformationType(0), fieldName(0) + structure(userDef), fieldName(0) { sampler.clear(); qualifier.clear(); @@ -451,32 +459,37 @@ public: } typeName = NewPoolTString(n.c_str()); } - TType() {} virtual ~TType() {} - - // "dumb" copy, using built-in operator=(), not for use across pool pops. - // It will also cause multiple copies of TType to point to the same information. - // This only works if that information (like a structure's list of types) does not - // change. - explicit TType(const TType& type) { *this = type; } - - void copyType(const TType& copyOf, const TStructureMap& remapper) - { + + // Not for use across pool pops; it will cause multiple instances of TType to point to the same information. + // This only works if that information (like a structure's list of types) does not change and + // the instances are sharing the same pool. + void shallowCopy(const TType& copyOf) + { basicType = copyOf.basicType; sampler = copyOf.sampler; qualifier = copyOf.qualifier; vectorSize = copyOf.vectorSize; matrixCols = copyOf.matrixCols; matrixRows = copyOf.matrixRows; + arraySizes = copyOf.arraySizes; + structure = copyOf.structure; + structureSize = copyOf.structureSize; + fieldName = copyOf.fieldName; + typeName = copyOf.typeName; + } - if (copyOf.arraySizes) { + void deepCopy(const TType& copyOf, const TStructureMap& remapper) + { + shallowCopy(copyOf); + + if (arraySizes) { arraySizes = NewPoolTArraySizes(); *arraySizes = *copyOf.arraySizes; - } else - arraySizes = 0; + } - TStructureMapIterator iter; - if (copyOf.structure) { + if (structure) { + TStructureMapIterator iter; if ((iter = remapper.find(structure)) == remapper.end()) { // create the new structure here structure = NewPoolTTypeList(); @@ -489,20 +502,12 @@ public: } else { structure = iter->second; } - } else - structure = 0; + } - fieldName = 0; - if (copyOf.fieldName) + if (fieldName) fieldName = NewPoolTString(copyOf.fieldName->c_str()); - typeName = 0; - if (copyOf.typeName) + if (typeName) typeName = NewPoolTString(copyOf.typeName->c_str()); - - structureSize = copyOf.structureSize; - maxArraySize = copyOf.maxArraySize; - assert(copyOf.arrayInformationType == 0); - arrayInformationType = 0; // arrayInformationType should not be set for builtIn symbol table level } // Merge type from parent, where a parentType is at the beginning of a declaration, @@ -523,17 +528,16 @@ public: TType* clone(const TStructureMap& remapper) { TType *newType = new TType(); - newType->copyType(*this, remapper); + newType->deepCopy(*this, remapper); return newType; } virtual void dereference() { - if (arraySizes) { + if (arraySizes) arraySizes = 0; - maxArraySize = 0; - } else if (matrixCols > 0) { + else if (matrixCols > 0) { vectorSize = matrixRows; matrixCols = 0; matrixRows = 0; @@ -576,8 +580,8 @@ public: virtual bool isMatrix() const { return matrixCols ? true : false; } virtual bool isArray() const { return arraySizes != 0; } - int getArraySize() const { return arraySizes->front(); } - void setArraySizes(TArraySizes s) + int getArraySize() const { return arraySizes->sizes.front(); } + void setArraySizes(TArraySizes* s) { // copy; we don't want distinct types sharing the same descriptor if (! arraySizes) @@ -585,11 +589,9 @@ public: *arraySizes = *s; } - void changeArraySize(int s) { arraySizes->front() = s; } - void setMaxArraySize (int s) { maxArraySize = s; } - int getMaxArraySize () const { return maxArraySize; } - void setArrayInformationType(TType* t) { arrayInformationType = t; } - TType* getArrayInformationType() { return arrayInformationType; } + void changeArraySize(int s) { arraySizes->sizes.front() = s; } + void setMaxArraySize (int s) { arraySizes->maxArraySize = s; } + int getMaxArraySize () const { return arraySizes->maxArraySize; } virtual bool isVector() const { return vectorSize > 1; } virtual bool isScalar() const { return vectorSize == 1; } const char* getBasicString() const @@ -660,10 +662,10 @@ public: if (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal) p += snprintf(p, end - p, "%s ", getStorageQualifierString()); if (arraySizes) { - if (arraySizes->front() == 0) + if (arraySizes->sizes.front() == 0) p += snprintf(p, end - p, "unsized array of "); else - p += snprintf(p, end - p, "%d-element array of ", arraySizes->front()); + p += snprintf(p, end - p, "%d-element array of ", arraySizes->sizes.front()); } if (qualifier.precision != EpqNone) p += snprintf(p, end - p, "%s ", getPrecisionQualifierString()); @@ -706,6 +708,8 @@ public: if (isArray()) totalSize *= Max(getArraySize(), getMaxArraySize()); + // TODO: desktop arrays: it should be ill-defined to get object size if the array is not sized, so the max() above maybe should be an assert + return totalSize; } @@ -730,7 +734,7 @@ public: { return sameElementType(right) && (arraySizes == 0 && right.arraySizes == 0 || - (arraySizes && right.arraySizes && *arraySizes == *right.arraySizes)); + (arraySizes && right.arraySizes && arraySizes->sizes == right.arraySizes->sizes)); // don't check the qualifier, it's not ever what's being sought after } @@ -740,6 +744,10 @@ public: } protected: + // Require consumer to pick between deep copy and shallow copy. + TType(const TType& type); + TType& operator=(const TType& type); + void buildMangledName(TString&); int getStructSize() const; @@ -750,12 +758,10 @@ protected: TSampler sampler; TQualifier qualifier; - TArraySizes arraySizes; + TArraySizes* arraySizes; - TTypeList* structure; // 0 unless this is a struct - mutable int structureSize; // a cache, updated on first access - int maxArraySize; - TType* arrayInformationType; + TTypeList* structure; // 0 unless this is a struct + mutable int structureSize; // a cache, updated on first access TString *fieldName; // for structure field names TString *typeName; // for structure field type name }; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index f87428a4..d735bda1 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -372,11 +372,11 @@ struct TIntermNodePair { // class TIntermTyped : public TIntermNode { public: - TIntermTyped(const TType& t) : type(t) { } + TIntermTyped(const TType& t) { type.shallowCopy(t); } virtual TIntermTyped* getAsTyped() { return this; } - virtual void setType(const TType& t) { type = t; } + virtual void setType(const TType& t) { type.shallowCopy(t); } virtual const TType& getType() const { return type; } - virtual TType* getTypePointer() { return &type; } + virtual TType& getWritableType() { return type; } virtual TBasicType getBasicType() const { return type.getBasicType(); } virtual TQualifier& getQualifier() { return type.getQualifier(); } diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 77cfcb1a..8aa4ed8e 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -71,7 +71,8 @@ bool CompareStruct(const TType& leftNodeType, TConstUnion* rightUnionArray, TCon bool CompareStructure(const TType& leftNodeType, TConstUnion* rightUnionArray, TConstUnion* leftUnionArray) { if (leftNodeType.isArray()) { - TType typeWithoutArrayness(leftNodeType); + TType typeWithoutArrayness; + typeWithoutArrayness.shallowCopy(leftNodeType); // TODO: arrays of arrays: the shallow copy won't work if arrays are shared and dereferenced typeWithoutArrayness.dereference(); int arraySize = leftNodeType.getArraySize(); @@ -137,7 +138,8 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod // For most cases, the return type matches the argument type, so set that // up and just code to exceptions below. - TType returnType(getType()); + TType returnType; + returnType.shallowCopy(getType()); // // A pair of nodes is to be folded together @@ -157,7 +159,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod unionArray = new TConstUnion[constantNode->getType().getObjectSize()]; for (int i = 0; i < constantNode->getType().getObjectSize(); ++i) unionArray[i] = *getUnionArrayPointer(); - returnType = node->getType(); + returnType.shallowCopy(node->getType()); objectSize = constantNode->getType().getObjectSize(); } @@ -192,7 +194,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray[column * getMatrixRows() + row].setDConst(sum); } } - returnType = TType(getType().getBasicType(), EvqConst, 0, getMatrixRows(), node->getMatrixCols()); + returnType.shallowCopy(TType(getType().getBasicType(), EvqConst, 0, getMatrixRows(), node->getMatrixCols())); break; case EOpDiv: newConstArray = new TConstUnion[objectSize]; @@ -232,7 +234,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray[i].setDConst(sum); } - returnType = TType(getBasicType(), EvqConst, getMatrixRows()); + returnType.shallowCopy(TType(getBasicType(), EvqConst, getMatrixRows())); break; case EOpVectorTimesMatrix: @@ -244,7 +246,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray[i].setDConst(sum); } - returnType = TType(getBasicType(), EvqConst, node->getMatrixCols()); + returnType.shallowCopy(TType(getBasicType(), EvqConst, node->getMatrixCols())); break; case EOpMod: @@ -307,13 +309,13 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod assert(objectSize == 1); newConstArray = new TConstUnion[1]; newConstArray->setBConst(*unionArray < *rightUnionArray); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; case EOpGreaterThan: assert(objectSize == 1); newConstArray = new TConstUnion[1]; newConstArray->setBConst(*unionArray > *rightUnionArray); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; case EOpLessThanEqual: { @@ -322,7 +324,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod constant.setBConst(*unionArray > *rightUnionArray); newConstArray = new TConstUnion[1]; newConstArray->setBConst(!constant.getBConst()); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; } case EOpGreaterThanEqual: @@ -332,7 +334,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod constant.setBConst(*unionArray < *rightUnionArray); newConstArray = new TConstUnion[1]; newConstArray->setBConst(!constant.getBConst()); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; } @@ -351,7 +353,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray = new TConstUnion[1]; newConstArray->setBConst(! boolNodeFlag); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; case EOpNotEqual: @@ -369,7 +371,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray = new TConstUnion[1]; newConstArray->setBConst(! boolNodeFlag); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; default: @@ -607,7 +609,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) } TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType); - newNode->getTypePointer()->getQualifier().storage = EvqConst; + newNode->getWritableType().getQualifier().storage = EvqConst; newNode->setLoc(getLoc()); return newNode; @@ -775,7 +777,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) } TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, aggrNode->getType()); - newNode->getTypePointer()->getQualifier().storage = EvqConst; + newNode->getWritableType().getQualifier().storage = EvqConst; newNode->setLoc(aggrNode->getLoc()); return newNode; diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 7739d74a..0080c771 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1654,8 +1654,8 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb if (version < FirstProfileVersion || profile == ECompatibilityProfile || (! ForwardCompatibility && profile != EEsProfile && version < 420)) { TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone; TType fragData(EbtFloat, EvqFragColor, 4); - TArraySizes arraySizes = NewPoolTArraySizes(); - arraySizes->push_back(resources.maxDrawBuffers); + TArraySizes* arraySizes = NewPoolTArraySizes(); + arraySizes->setSize(resources.maxDrawBuffers); fragData.setArraySizes(arraySizes); symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData)); } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 9baa2934..a4847422 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -716,8 +716,8 @@ TIntermTyped* TIntermediate::addComma(TIntermTyped* left, TIntermTyped* right, T TIntermTyped *commaAggregate = growAggregate(left, right, loc); commaAggregate->getAsAggregate()->setOperator(EOpComma); commaAggregate->setType(right->getType()); - commaAggregate->getTypePointer()->getQualifier().storage = EvqTemporary; - commaAggregate->getTypePointer()->getQualifier().precision = right->getTypePointer()->getQualifier().precision; + commaAggregate->getWritableType().getQualifier().storage = EvqTemporary; + commaAggregate->getWritableType().getQualifier().precision = right->getType().getQualifier().precision; return commaAggregate; } @@ -1028,7 +1028,7 @@ bool TIntermUnary::promote() } setType(operand->getType()); - getTypePointer()->getQualifier().storage = EvqTemporary; + getWritableType().getQualifier().storage = EvqTemporary; return true; } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index b03063e2..2ad40e7d 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -482,8 +482,7 @@ TIntermTyped* TParseContext::handleVariable(TSourceLoc loc, TSymbol* symbol, TSt if (variable->getType().getQualifier().storage == EvqConst ) { TConstUnion* constArray = variable->getConstUnionPointer(); - TType t(variable->getType()); - node = intermediate.addConstantUnion(constArray, t, loc); + node = intermediate.addConstantUnion(constArray, variable->getType(), loc); } else node = intermediate.addSymbol(variable->getUniqueId(), variable->getName(), variable->getType(), loc); } @@ -527,9 +526,7 @@ TIntermTyped* TParseContext::handleBracketDereference(TSourceLoc loc, TIntermTyp if (base->isArray()) { if (base->getType().getArraySize() == 0) { if (base->getType().getMaxArraySize() <= index->getAsConstantUnion()->getUnionArrayPointer()->getIConst()) - arraySetMaxSize(base->getAsSymbolNode(), base->getTypePointer(), index->getAsConstantUnion()->getUnionArrayPointer()->getIConst(), true, loc); - else - arraySetMaxSize(base->getAsSymbolNode(), base->getTypePointer(), 0, false, loc); + arraySetMaxSize(loc, base->getAsSymbolNode(), index->getAsConstantUnion()->getUnionArrayPointer()->getIConst() + 1); } else if ( index->getAsConstantUnion()->getUnionArrayPointer()->getIConst() >= base->getType().getArraySize() || index->getAsConstantUnion()->getUnionArrayPointer()->getIConst() < 0) error(loc, "", "[", "array index out of range '%d'", index->getAsConstantUnion()->getUnionArrayPointer()->getIConst()); @@ -554,7 +551,8 @@ TIntermTyped* TParseContext::handleBracketDereference(TSourceLoc loc, TIntermTyp unionArray->setDConst(0.0); result = intermediate.addConstantUnion(unionArray, TType(EbtFloat, EvqConst), loc); } else { - TType newType(base->getType()); + TType newType; + newType.shallowCopy(base->getType()); if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) newType.getQualifier().storage = EvqConst; newType.dereference(); @@ -634,7 +632,7 @@ TIntermTyped* TParseContext::handleDotDereference(TSourceLoc loc, TIntermTyped* result->setType(*(*fields)[i].type); // change the qualifier of the return type, not of the structure field // as the structure definition is shared between various structures. - result->getTypePointer()->getQualifier().storage = EvqConst; + result->getWritableType().getQualifier().storage = EvqConst; } } else { TConstUnion *unionArray = new TConstUnion[1]; @@ -1213,7 +1211,7 @@ bool TParseContext::reservedErrorCheck(TSourceLoc loc, const TString& identifier // bool TParseContext::constructorError(TSourceLoc loc, TIntermNode* node, TFunction& function, TOperator op, TType& type) { - type = function.getReturnType(); + type.shallowCopy(function.getReturnType()); bool constructingMatrix = false; switch(op) { @@ -1617,33 +1615,6 @@ bool TParseContext::containsSampler(const TType& type) return false; } -bool TParseContext::insertBuiltInArrayAtGlobalLevel() -{ - TString *name = NewPoolTString("gl_TexCoord"); - TSymbol* symbol = symbolTable.find(*name); - if (! symbol) { - // assume it was not added due to version/profile - - return false; - } - const TVariable* variable = symbol->getAsVariable(); - - if (! variable) { - infoSink.info.message(EPrefixInternalError, "variable expected"); - return true; - } - - TVariable* newVariable = new TVariable(name, variable->getType()); - - if (! symbolTable.insert(*newVariable)) { - delete newVariable; - infoSink.info.message(EPrefixInternalError, "inserting new symbol"); - return true; - } - - return false; -} - // // Do size checking for an array type's size. // @@ -1688,7 +1659,7 @@ bool TParseContext::arrayQualifierError(TSourceLoc loc, const TPublicType& type) // // Require array to have size // -void TParseContext::arraySizeRequiredCheck(TSourceLoc loc, int& size) +void TParseContext::arraySizeRequiredCheck(TSourceLoc loc, int size) { if (size == 0) { error(loc, "array size required", "", ""); @@ -1703,18 +1674,18 @@ void TParseContext::arrayDimError(TSourceLoc loc) profileRequires(loc, ECompatibilityProfile, 430, 0, "arrays of arrays"); } -void TParseContext::arrayDimCheck(TSourceLoc loc, TArraySizes sizes1, TArraySizes sizes2) +void TParseContext::arrayDimCheck(TSourceLoc loc, TArraySizes* sizes1, TArraySizes* sizes2) { if (sizes1 && sizes2 || - sizes1 && sizes1->size() > 1 || - sizes2 && sizes2->size() > 1) + sizes1 && sizes1->isArrayOfArrays() || + sizes2 && sizes2->isArrayOfArrays()) arrayDimError(loc); } -void TParseContext::arrayDimCheck(TSourceLoc loc, const TType* type, TArraySizes sizes2) +void TParseContext::arrayDimCheck(TSourceLoc loc, const TType* type, TArraySizes* sizes2) { if (type && type->isArray() && sizes2 || - sizes2 && sizes2->size() > 1) + sizes2 && sizes2->isArrayOfArrays()) arrayDimError(loc); } @@ -1733,6 +1704,8 @@ void TParseContext::arrayCheck(TSourceLoc loc, TString& identifier, const TPubli // However, reserved arrays cannot be modified in a shared symbol table, so add a new // one at a non-shared level in the table. // + // Redeclarations have to take place at the same scope; otherwise they are hiding declarations + // bool currentScope; TSymbol* symbol = symbolTable.find(identifier, 0, ¤tScope); @@ -1764,23 +1737,19 @@ void TParseContext::arrayCheck(TSourceLoc loc, TString& identifier, const TPubli return; } - TType* t = variable->getArrayInformationType(); - while (t != 0) { - if (t->getMaxArraySize() > type.arraySizes->front()) { - error(loc, "higher index value already used for the array", identifier.c_str(), ""); - return; - } - t->setArraySizes(type.arraySizes); - t = t->getArrayInformationType(); - } + // For read-only built-ins, add a new variable for holding the declared array size of an implicitly-sized shared array. + if (variable->isReadOnly()) + variable = symbolTable.copyUp(variable); + // TODO: desktop unsized arrays: include modified built-in arrays (gl_TexCoord) in the linker objects subtree + variable->getWritableType().setArraySizes(type.arraySizes); } voidErrorCheck(loc, identifier, type); } -bool TParseContext::arraySetMaxSize(TIntermSymbol *node, TType* type, int size, bool updateFlag, TSourceLoc loc) +bool TParseContext::arraySetMaxSize(TSourceLoc loc, TIntermSymbol *node, int size) { TSymbol* symbol = symbolTable.find(node->getName()); if (symbol == 0) { @@ -1794,41 +1763,26 @@ bool TParseContext::arraySetMaxSize(TIntermSymbol *node, TType* type, int size, return true; } - // There are multiple copies of the array type tagging results of operations. - // Chain these together, so they can all reflect the final size. - type->setArrayInformationType(variable->getArrayInformationType()); - variable->updateArrayInformationType(type); + // TODO: desktop linker: make this a link-time check (note if it's here, an explicit declaration skips it) + //if (node->getName() == "gl_TexCoord") { + // TSymbol* texCoord = symbolTable.find("gl_MaxTextureCoords"); + // if (! texCoord || ! texCoord->getAsVariable()) { + // infoSink.info.message(EPrefixInternalError, "gl_MaxTextureCoords not defined", loc); + // return true; + // } - // special casing to test index value of gl_TexCoord. If the accessed index is >= gl_MaxTextureCoords - // its an error - if (node->getName() == "gl_TexCoord") { - TSymbol* texCoord = symbolTable.find("gl_MaxTextureCoords"); - if (! texCoord || ! texCoord->getAsVariable()) { - infoSink.info.message(EPrefixInternalError, "gl_MaxTextureCoords not defined", loc); - return true; - } + // int texCoordValue = texCoord->getAsVariable()->getConstUnionPointer()[0].getIConst(); + // if (texCoordValue <= size) { + // error(loc, "", "[", "gl_TexCoord can only have a max array size of up to gl_MaxTextureCoords", ""); + // return true; + // } + //} - int texCoordValue = texCoord->getAsVariable()->getConstUnionPointer()[0].getIConst(); - if (texCoordValue <= size) { - error(loc, "", "[", "gl_TexCoord can only have a max array size of up to gl_MaxTextureCoords", ""); - return true; - } - } + // For read-only built-ins, add a new variable for holding the maximum array size of an implicitly-sized shared array. + if (variable->isReadOnly()) + variable = symbolTable.copyUp(variable); - // We don't want to update the maxArraySize when this flag is not set, we just want to include this - // node type in the chain of node types so that it's updated when a higher maxArraySize comes in. - if (! updateFlag) - return false; - - size++; variable->getWritableType().setMaxArraySize(size); - type->setMaxArraySize(size); - TType* tt = type; - - while(tt->getArrayInformationType() != 0) { - tt = tt->getArrayInformationType(); - tt->setMaxArraySize(size); - } return false; } @@ -2104,9 +2058,10 @@ TIntermTyped* TParseContext::addConstructor(TIntermNode* node, const TType& type if (op == EOpConstructStruct) memberTypes = type.getStruct()->begin(); - TType elementType(type); + TType elementType; + elementType.shallowCopy(type); if (type.isArray()) - elementType.dereference(); + elementType.dereference(); // TODO: arrays of arrays: shallow copy won't work if sharing same array structure and then doing a dereference bool singleArg; if (aggrNode) { @@ -2280,7 +2235,7 @@ TIntermTyped* TParseContext::constructStruct(TIntermNode* node, const TType& typ // // Do everything needed to add an interface block. // -void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* instanceName, TArraySizes arraySizes) +void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes) { // First, error checks @@ -2291,7 +2246,7 @@ void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* return; if (profile == EEsProfile && arraySizes) - arraySizeRequiredCheck(loc, arraySizes->front()); + arraySizeRequiredCheck(loc, arraySizes->getSize()); if (currentBlockDefaults.storage == EvqUniform) { requireProfile(loc, (EProfileMask)(~ENoProfileMask), "uniform block"); @@ -2370,8 +2325,7 @@ void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* // For an identifier that is already declared, add more qualification to it. void TParseContext::addQualifierToExisting(TSourceLoc loc, TQualifier qualifier, const TString& identifier) { - bool sharedLevel; - TSymbol* existing = symbolTable.find(identifier, 0, 0, &sharedLevel); + TSymbol* existing = symbolTable.find(identifier); TVariable* variable = existing ? existing->getAsVariable() : 0; if (! variable) { error(loc, "identifier not previously declared", identifier.c_str(), ""); @@ -2389,13 +2343,9 @@ void TParseContext::addQualifierToExisting(TSourceLoc loc, TQualifier qualifier, return; } - // - // Don't change a shared variable; rather add a new one at the current scope. - // - if (sharedLevel) { - variable = new TVariable(&variable->getName(), variable->getType()); - symbolTable.insert(*variable); - } + // For read-only built-ins, add a new variable for holding the modified qualifier. + if (variable->isReadOnly()) + variable = symbolTable.copyUp(variable); if (qualifier.invariant) variable->getWritableType().getQualifier().invariant = true; @@ -2646,8 +2596,9 @@ TIntermTyped* TParseContext::addConstArrayNode(int index, TIntermTyped* node, TS TIntermTyped* typedNode; TIntermConstantUnion* tempConstantNode = node->getAsConstantUnion(); int arraySize = node->getType().getArraySize(); - TType arrayElementType(node->getType()); - arrayElementType.dereference(); + TType arrayElementType; + arrayElementType.shallowCopy(node->getType()); + arrayElementType.dereference(); // TODO: arrays of arrays: shallow copy won't work if sharing same array structure and then doing a dereference if (index >= node->getType().getArraySize() || index < 0) { error(loc, "", "[", "array index '%d' out of range", index); diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index f077ce6e..22ded39d 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -101,12 +101,11 @@ public: bool constructorError(TSourceLoc, TIntermNode*, TFunction&, TOperator, TType&); void arraySizeCheck(TSourceLoc, TIntermTyped* expr, int& size); bool arrayQualifierError(TSourceLoc, const TPublicType&); - void arraySizeRequiredCheck(TSourceLoc, int& size); + void arraySizeRequiredCheck(TSourceLoc, int size); void arrayDimError(TSourceLoc); - void arrayDimCheck(TSourceLoc, TArraySizes sizes1, TArraySizes sizes2); - void arrayDimCheck(TSourceLoc, const TType*, TArraySizes); + void arrayDimCheck(TSourceLoc, TArraySizes* sizes1, TArraySizes* sizes2); + void arrayDimCheck(TSourceLoc, const TType*, TArraySizes*); void arrayCheck(TSourceLoc, TString& identifier, const TPublicType&, TVariable*& variable); - bool insertBuiltInArrayAtGlobalLevel(); bool voidErrorCheck(TSourceLoc, const TString&, const TPublicType&); void boolCheck(TSourceLoc, const TIntermTyped*); void boolCheck(TSourceLoc, const TPublicType&); @@ -136,7 +135,7 @@ public: TIntermTyped* addConstructor(TIntermNode*, const TType&, TOperator, TFunction*, TSourceLoc); TIntermTyped* constructStruct(TIntermNode*, const TType&, int, TSourceLoc); TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermNode*, TSourceLoc, bool subset); - void addBlock(TSourceLoc, TTypeList& typeList, const TString* instanceName = 0, TArraySizes arraySizes = 0); + void addBlock(TSourceLoc, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0); void addQualifierToExisting(TSourceLoc, TQualifier, const TString& identifier); void addQualifierToExisting(TSourceLoc, TQualifier, TIdentifierList&); void updateQualifierDefaults(TQualifier); @@ -149,7 +148,7 @@ public: TIntermTyped* addConstArrayNode(int index, TIntermTyped* node, TSourceLoc); TIntermTyped* addConstStruct(TString& , TIntermTyped*, TSourceLoc); - bool arraySetMaxSize(TIntermSymbol*, TType*, int, bool, TSourceLoc); + bool arraySetMaxSize(TSourceLoc, TIntermSymbol*, int); void requireProfile(TSourceLoc, EProfileMask profileMask, const char *featureDesc); void requireStage(TSourceLoc, EShLanguageMask languageMask, const char *featureDesc); diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index e6232fbe..446a0149 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -550,11 +550,12 @@ int TScanContext::tokenizeIdentifier() if (ReservedSet->find(tokenText) != ReservedSet->end()) return reservedWord(); - keyword = (*KeywordMap)[tokenText]; - if (keyword == 0) { + std::map::const_iterator it = KeywordMap->find(tokenText); + if (it == KeywordMap->end()) { // Should have an identifier of some sort return identifierOrType(); } + keyword = it->second; field = false; switch (keyword) { diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 1b1b98d2..7d7b75ed 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -449,9 +449,6 @@ bool CompileDeferred( if (! symbolTable.atGlobalLevel()) parseContext.infoSink.info.message(EPrefixInternalError, "Wrong symbol table level"); - if (parseContext.insertBuiltInArrayAtGlobalLevel()) - success = false; - bool ret = parseContext.parseShaderStrings(ppContext, const_cast(shaderStrings), lengths, numStrings); if (! ret) success = false; diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 8fd892b1..8e1c79d4 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -90,7 +90,7 @@ void TType::buildMangledName(TString& mangledName) case EbtStruct: mangledName += "struct-"; if (typeName) - mangledName += *typeName; + mangledName += *typeName; for (unsigned int i = 0; i < structure->size(); ++i) { mangledName += '-'; (*structure)[i].type->buildMangledName(mangledName); @@ -107,9 +107,9 @@ void TType::buildMangledName(TString& mangledName) } if (arraySizes) { - const int maxSize = 11; + const int maxSize = 11; char buf[maxSize]; - snprintf(buf, maxSize, "%d", arraySizes->front()); + snprintf(buf, maxSize, "%d", arraySizes->sizes.front()); mangledName += '['; mangledName += buf; mangledName += ']'; @@ -173,8 +173,8 @@ void TSymbolTable::dump(TInfoSink &infoSink) const // TFunction::~TFunction() { - for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i) - delete (*i).type; + for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i) + delete (*i).type; } // @@ -182,8 +182,8 @@ TFunction::~TFunction() // TSymbolTableLevel::~TSymbolTableLevel() { - for (tLevel::iterator it = level.begin(); it != level.end(); ++it) - delete (*it).second; + for (tLevel::iterator it = level.begin(); it != level.end(); ++it) + delete (*it).second; delete [] defaultPrecision; } @@ -213,58 +213,59 @@ void TSymbolTableLevel::relateToOperator(const char* name, TOperator op) void TSymbolTableLevel::readOnly() { for (tLevel::iterator it = level.begin(); it != level.end(); ++it) - (*it).second->readOnly(); + (*it).second->makeReadOnly(); } +// +// Copy a symbol, but the copy is writable; call readOnly() afterward if that's not desired. +// TSymbol::TSymbol(const TSymbol& copyOf) { - name = NewPoolTString(copyOf.name->c_str()); - uniqueId = copyOf.uniqueId; + name = NewPoolTString(copyOf.name->c_str()); + uniqueId = copyOf.uniqueId; + writable = true; } TVariable::TVariable(const TVariable& copyOf, TStructureMap& remapper) : TSymbol(copyOf) { - type.copyType(copyOf.type, remapper); - userType = copyOf.userType; - // for builtIn symbol table level, unionArray and arrayInformation pointers should be NULL - assert(copyOf.arrayInformationType == 0); - arrayInformationType = 0; + type.deepCopy(copyOf.type, remapper); + userType = copyOf.userType; - if (copyOf.unionArray) { - assert(!copyOf.type.getStruct()); - assert(copyOf.type.getObjectSize() == 1); - unionArray = new TConstUnion[1]; + if (copyOf.unionArray) { + assert(!copyOf.type.getStruct()); + assert(copyOf.type.getObjectSize() == 1); + unionArray = new TConstUnion[1]; unionArray[0] = copyOf.unionArray[0]; - } else - unionArray = 0; + } else + unionArray = 0; } TVariable* TVariable::clone(TStructureMap& remapper) { - TVariable *variable = new TVariable(*this, remapper); + TVariable *variable = new TVariable(*this, remapper); - return variable; + return variable; } TFunction::TFunction(const TFunction& copyOf, const TStructureMap& remapper) : TSymbol(copyOf) { - for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) { - TParameter param; - parameters.push_back(param); - parameters.back().copyParam(copyOf.parameters[i], remapper); - } + for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) { + TParameter param; + parameters.push_back(param); + parameters.back().copyParam(copyOf.parameters[i], remapper); + } - returnType.copyType(copyOf.returnType, remapper); - mangledName = copyOf.mangledName; - op = copyOf.op; - defined = copyOf.defined; + returnType.deepCopy(copyOf.returnType, remapper); + mangledName = copyOf.mangledName; + op = copyOf.op; + defined = copyOf.defined; } TFunction* TFunction::clone(TStructureMap& remapper) { - TFunction *function = new TFunction(*this, remapper); + TFunction *function = new TFunction(*this, remapper); - return function; + return function; } TAnonMember* TAnonMember::clone(TStructureMap& remapper) @@ -277,24 +278,24 @@ TAnonMember* TAnonMember::clone(TStructureMap& remapper) TSymbolTableLevel* TSymbolTableLevel::clone(TStructureMap& remapper) { - TSymbolTableLevel *symTableLevel = new TSymbolTableLevel(); + TSymbolTableLevel *symTableLevel = new TSymbolTableLevel(); symTableLevel->anonId = anonId; - tLevel::iterator iter; - for (iter = level.begin(); iter != level.end(); ++iter) - symTableLevel->insert(*iter->second->clone(remapper)); + tLevel::iterator iter; + for (iter = level.begin(); iter != level.end(); ++iter) + symTableLevel->insert(*iter->second->clone(remapper)); - return symTableLevel; + return symTableLevel; } void TSymbolTable::copyTable(const TSymbolTable& copyOf) { assert(adoptedLevels == copyOf.adoptedLevels); - TStructureMap remapper; - uniqueId = copyOf.uniqueId; + TStructureMap remapper; + uniqueId = copyOf.uniqueId; noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations; for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i) - table.push_back(copyOf.table[i]->clone(remapper)); + table.push_back(copyOf.table[i]->clone(remapper)); } } // end namespace glslang diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 2a0352c8..0b307234 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -96,7 +96,8 @@ public: int getUniqueId() const { return uniqueId; } virtual void dump(TInfoSink &infoSink) const = 0; - void readOnly() { writable = false; } + bool isReadOnly() { return ! writable; } + void makeReadOnly() { writable = false; } protected: explicit TSymbol(const TSymbol&); @@ -124,7 +125,7 @@ protected: // class TVariable : public TSymbol { public: - TVariable(const TString *name, const TType& t, bool uT = false ) : TSymbol(name), type(t), userType(uT), unionArray(0), arrayInformationType(0) { } + TVariable(const TString *name, const TType& t, bool uT = false ) : TSymbol(name), userType(uT), unionArray(0) { type.shallowCopy(t); } virtual TVariable* clone(TStructureMap& remapper); virtual ~TVariable() { } @@ -133,12 +134,11 @@ public: TType& getWritableType() { assert(writable); return type; } const TType& getType() const { return type; } bool isUserType() const { return userType; } - void updateArrayInformationType(TType *t) { assert(writable); arrayInformationType = t; } - TType* getArrayInformationType() { assert(writable); return arrayInformationType; } virtual void dump(TInfoSink &infoSink) const; - TConstUnion* getConstUnionPointer() { + TConstUnion* getConstUnionPointer() + { if (!unionArray) unionArray = new TConstUnion[type.getObjectSize()]; @@ -154,16 +154,15 @@ public: } protected: - explicit TVariable(TVariable&); - TVariable(const TVariable&, TStructureMap& remapper); - TVariable& operator=(TVariable&); + explicit TVariable(const TVariable&); + TVariable(const TVariable&, TStructureMap& remapper); + TVariable& operator=(const TVariable&); TType type; bool userType; // we are assuming that Pool Allocator will free the memory allocated to unionArray // when this object is destroyed TConstUnion *unionArray; - TType *arrayInformationType; // this is used for updating maxArraySize in all the references to a given symbol }; // @@ -190,15 +189,13 @@ class TFunction : public TSymbol { public: explicit TFunction(TOperator o) : TSymbol(0), - returnType(TType(EbtVoid)), op(o), defined(false) { } TFunction(const TString *name, const TType& retType, TOperator tOp = EOpNull) : TSymbol(name), - returnType(retType), mangledName(*name + '('), op(tOp), - defined(false) { } + defined(false) { returnType.shallowCopy(retType); } virtual TFunction* clone(TStructureMap& remapper); virtual ~TFunction(); @@ -455,7 +452,20 @@ public: return table[currentLevel()]->insert(symbol); } - TSymbol* find(const TString& name, bool* builtIn = 0, bool *currentScope = 0, bool *sharedLevel = 0) + // + // To copy a variable from a shared level up to the current level, so it can be + // modified without impacting other users of the shared table. + // + TVariable* copyUp(TVariable* shared) + { + TVariable* variable = shared->clone(remapper); + variable->setUniqueId(shared->getUniqueId()); + table[currentLevel()]->insert(*variable); + + return variable; + } + + TSymbol* find(const TString& name, bool* builtIn = 0, bool *currentScope = 0) { int level = currentLevel(); TSymbol* symbol; @@ -467,9 +477,7 @@ public: if (builtIn) *builtIn = isBuiltInLevel(level); if (currentScope) - *currentScope = level == currentLevel(); - if (sharedLevel) - *sharedLevel = isSharedLevel(level); + *currentScope = isGlobalLevel(currentLevel()) || level == currentLevel(); // consider shared levels as "current scope" WRT user globals return symbol; } @@ -502,6 +510,7 @@ protected: int uniqueId; // for unique identification in code generation bool noBuiltInRedeclarations; unsigned int adoptedLevels; + TStructureMap remapper; // for now, dummy for copyUp(), which is not yet used for structures }; } // end namespace glslang diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 3de7e724..73688db1 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -90,7 +90,7 @@ using namespace glslang; glslang::TParameter param; glslang::TTypeLoc typeLine; glslang::TTypeList* typeList; - glslang::TArraySizes arraySizes; + glslang::TArraySizes* arraySizes; glslang::TIdentifierList* identifierList; }; } interm; @@ -334,13 +334,15 @@ function_call_header_no_parameters function_call_header_with_parameters : function_call_header assignment_expression { - TParameter param = { 0, new TType($2->getType()) }; + TParameter param = { 0, new TType }; + param.type->shallowCopy($2->getType()); $1.function->addParameter(param); $$.function = $1.function; $$.intermNode = $2; } | function_call_header_with_parameters COMMA assignment_expression { - TParameter param = { 0, new TType($3->getType()) }; + TParameter param = { 0, new TType }; + param.type->shallowCopy($3->getType()); $1.function->addParameter(param); $$.function = $1.function; $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc); @@ -890,7 +892,7 @@ parameter_declarator if ($1.arraySizes) { parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } if ($1.basicType == EbtVoid) { parseContext.error($2.loc, "illegal use of type 'void'", $2.string->c_str(), ""); @@ -905,11 +907,11 @@ parameter_declarator if ($1.arraySizes) { parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } parseContext.arrayDimCheck($2.loc, $1.arraySizes, $3.arraySizes); - parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->front()); + parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->getSize()); parseContext.reservedErrorCheck($2.loc, *$2.string); $1.arraySizes = $3.arraySizes; @@ -976,7 +978,7 @@ init_declarator_list | init_declarator_list COMMA IDENTIFIER array_specifier { parseContext.nonInitConstCheck($3.loc, *$3.string, $1.type); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($4.loc, $4.arraySizes->front()); + parseContext.arraySizeRequiredCheck($4.loc, $4.arraySizes->getSize()); parseContext.arrayDimCheck($3.loc, $1.type.arraySizes, $4.arraySizes); $$ = $1; @@ -1047,7 +1049,7 @@ single_declaration $$.intermAggregate = 0; parseContext.nonInitConstCheck($2.loc, *$2.string, $1); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->front()); + parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->getSize()); parseContext.arrayDimCheck($2.loc, $1.arraySizes, $3.arraySizes); $$.type = $1; @@ -1111,7 +1113,7 @@ fully_specified_type parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } parseContext.precisionQualifierCheck($$.loc, $$); @@ -1123,7 +1125,7 @@ fully_specified_type parseContext.profileRequires($2.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->front()); + parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->getSize()); } if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1)) @@ -1391,7 +1393,7 @@ array_specifier : LEFT_BRACKET RIGHT_BRACKET { $$.loc = $1.loc; $$.arraySizes = NewPoolTArraySizes(); - $$.arraySizes->push_back(0); + $$.arraySizes->setSize(0); } | LEFT_BRACKET constant_expression RIGHT_BRACKET { $$.loc = $1.loc; @@ -1399,18 +1401,18 @@ array_specifier int size; parseContext.arraySizeCheck($2->getLoc(), $2, size); - $$.arraySizes->push_back(size); + $$.arraySizes->setSize(size); } | array_specifier LEFT_BRACKET RIGHT_BRACKET { $$ = $1; - $$.arraySizes->push_back(0); + $$.arraySizes->setSize(0); } | array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET { $$ = $1; int size; parseContext.arraySizeCheck($3->getLoc(), $3, size); - $$.arraySizes->push_back(size); + $$.arraySizes->setSize(size); } ; @@ -2114,7 +2116,7 @@ struct_declaration parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } $$ = $2; @@ -2132,7 +2134,7 @@ struct_declaration parseContext.profileRequires($2.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->front()); + parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->getSize()); } $$ = $3; @@ -2166,7 +2168,7 @@ struct_declarator } | IDENTIFIER array_specifier { if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->front()); + parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->getSize()); parseContext.arrayDimCheck($1.loc, $2.arraySizes, 0); $$.type = new TType(EbtVoid);