From 0c754fb036e207f8f8e178f3ed28b242a8c9c2c4 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Tue, 21 Jan 2020 19:14:14 -0500 Subject: [PATCH 1/2] Update dependency libraries to match Vulkan SDK 1.2.131. Update What's New document. --- Docs/Whats_New.md | 22 +++++++++++++++++++ ExternalRevisions/SPIRV-Cross_repo_revision | 2 +- .../Vulkan-Headers_repo_revision | 2 +- ExternalRevisions/Vulkan-Tools_repo_revision | 2 +- ExternalRevisions/VulkanSamples_repo_revision | 2 +- ExternalRevisions/glslang_repo_revision | 2 +- 6 files changed, 27 insertions(+), 5 deletions(-) diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md index aa010018e..3e08ede56 100644 --- a/Docs/Whats_New.md +++ b/Docs/Whats_New.md @@ -25,11 +25,33 @@ Released 2020/01/21 - Fix crash when app does not use queue family zero. - Fix buffer offset in `vkCmdPushDescriptorSet()` for non-dedicated buffer memory. - Fix Metal validation error on push constant sizing differences between C and MSL structs. +- Use `MTLBuffer` when inline uniform block descriptor is written to instead of copying host-side bytes. +- Fix `EXT_inline_uniform_block` when using push descriptor sets. +- Merge buffer and inline unions to fix issue where binding inline descriptor would interfere with + future binds on the same set index in the same command buffer (now only used in push case anyway). - Track performance of `CAMetalLayer nextDrawable` call. - Document recommendation to use 3 swapchain images, particularly with full-screen rendering. - Update `MoltenVK_Runtime_UserGuide.md` to better explain runtime environment variables. - Update `VK_MVK_MOLTENVK_SPEC_VERSION` to `24`. - Update copyright notices to year 2020. +- Update dependency libraries to match *Vulkan SDK 1.2.131*. +- Update to latest SPIRV-Cross version: + - MSL: Support `ClipDistance` as an input stage variable. + - MSL: Fix automatic binding allocation for image atomic buffers. + - MSL: Deal with packing vectors for vertex input/fragment output. + - MSL: Don't set `OrigID` when emitting component packed vectors. + - MSL: Add trivial tests for `Component` decoration. + - MSL: Deal with padded fragment output + `Component` decoration. + - MSL: Partially implement support for Component decoration in complex scenarios. + - MSL: Explicitly don't support component packing for tessellation. + - MSL: Deal with sign on wave `min/max`. + - MSL: Add support for force-activating IAB resources. + - Deal with illegal names in types as well. + - Basic implementation of `OpCopyLogical`. + - Fix sign handling for `S/UToF`. + - Fix uninitialized memory issue. + - Roll custom versions of `isalpha/isalnum`. + - Update license headers to year 2020. diff --git a/ExternalRevisions/SPIRV-Cross_repo_revision b/ExternalRevisions/SPIRV-Cross_repo_revision index 57d5a9fa0..4101c6fc9 100644 --- a/ExternalRevisions/SPIRV-Cross_repo_revision +++ b/ExternalRevisions/SPIRV-Cross_repo_revision @@ -1 +1 @@ -96a276c2ca86e81530313786e99e2b95623898ca +f9818f0804e6e73ec8afcc523b7e7f8bfc362632 diff --git a/ExternalRevisions/Vulkan-Headers_repo_revision b/ExternalRevisions/Vulkan-Headers_repo_revision index 927555263..1602b8ed3 100644 --- a/ExternalRevisions/Vulkan-Headers_repo_revision +++ b/ExternalRevisions/Vulkan-Headers_repo_revision @@ -1 +1 @@ -0e57fc1cfa56a203efe43e4dfb9b3c9e9b105593 +881bbb347a08d1b5aa77f61a52a30b506de9f2bf diff --git a/ExternalRevisions/Vulkan-Tools_repo_revision b/ExternalRevisions/Vulkan-Tools_repo_revision index 29782053a..2a84555e3 100644 --- a/ExternalRevisions/Vulkan-Tools_repo_revision +++ b/ExternalRevisions/Vulkan-Tools_repo_revision @@ -1 +1 @@ -0c2618b2c31e2f216e131ff4c1c83e2c92c6ae66 +4792a6854238ba3f6d10b8c7fcd11c102cae4ca6 diff --git a/ExternalRevisions/VulkanSamples_repo_revision b/ExternalRevisions/VulkanSamples_repo_revision index 00eb4cf27..c2e97ce56 100644 --- a/ExternalRevisions/VulkanSamples_repo_revision +++ b/ExternalRevisions/VulkanSamples_repo_revision @@ -1 +1 @@ -ae32f2390060925afa9c5b111ac94de6d13fe229 +9f72cf123c673e47679bb72caa06a17d7b0258dd diff --git a/ExternalRevisions/glslang_repo_revision b/ExternalRevisions/glslang_repo_revision index 445aab984..da32f64d3 100644 --- a/ExternalRevisions/glslang_repo_revision +++ b/ExternalRevisions/glslang_repo_revision @@ -1 +1 @@ -ebf634bcaa3e46ca8a912ed05b87281c731b2391 +4fc7a33910fb8e40b970d160e1b38ab3f67fe0f3 From 71c3b4da751925890f492b637a70e531f25e08b2 Mon Sep 17 00:00:00 2001 From: Bill Hollings Date: Wed, 22 Jan 2020 09:14:51 -0500 Subject: [PATCH 2/2] Update Templates/spirv-tools/build.zip. --- Docs/Whats_New.md | 2 +- ExternalRevisions/README.md | 8 +++++--- Templates/spirv-tools/build.zip | Bin 34231 -> 36664 bytes 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Docs/Whats_New.md b/Docs/Whats_New.md index 3e08ede56..26e9a1c5f 100644 --- a/Docs/Whats_New.md +++ b/Docs/Whats_New.md @@ -17,7 +17,7 @@ For best results, use a Markdown reader.* MoltenVK 1.0.40 --------------- -Released 2020/01/21 +Released 2020/01/22 - Refactor descriptor management to reduce memory footprint and fix caching leak. - Add `MVK_CONFIG_PREALLOCATE_DESCRIPTORS` environment variable to support preallocated diff --git a/ExternalRevisions/README.md b/ExternalRevisions/README.md index 76dc0be99..20348239a 100644 --- a/ExternalRevisions/README.md +++ b/ExternalRevisions/README.md @@ -149,7 +149,8 @@ The *SPIRV-Cross* library plays an important part in providing features for **_M you are developing features for **_MoltenVK_**, you may end up making changes to *SPIRV-Cross*. If you make changes to the `SPIRV-Cross` repository, you can build a new version of the `libSPIRVCross.a` -static library by opening the `ExternalDependencies.xcodeproj` *Xcode* project, and running the **_ExternalDependencies_** *Xcode* scheme. You can then rebuild **MoltenVK** to include the new library. +static library by opening the `ExternalDependencies.xcodeproj` *Xcode* project, and running the +**_ExternalDependencies_** *Xcode* scheme. You can then rebuild **MoltenVK** to include the new library. While makng changes to the `SPIRV-Cross` repository, you can regression test your changes using the following steps: @@ -201,8 +202,9 @@ the *SPIRV-Tools* library to the `ExternalDependencies` *Xcode* project as follo 5. Repeat *Step 4* for the `SPIRV-Tools-iOS` target within the `ExternalDependencies` *Xcode* project -6. Update `Templates/spirv-tools/build.zip` from the contents of `External/glslang/External/spirv-tools/build`, - and test by running `./fetchDependencies --skip-spirv-tools-build`, and a **MoltenVK** build. +6. Update `Templates/spirv-tools/build.zip` from the `*.h` and `*.inc` files in + `External/glslang/External/spirv-tools/build`, remove hidden `.*` files, and test + by running `./fetchDependencies --skip-spirv-tools-build`, and a **MoltenVK** build. diff --git a/Templates/spirv-tools/build.zip b/Templates/spirv-tools/build.zip index f66fa7a6d836da81e0c2d6ece0a28b957a9e28e7..c54ae08a9d4d505f62d4632824d9dd1a9f87fc5b 100644 GIT binary patch delta 20003 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 IngsmQ-(u#H`~Uy| delta 17413 zcmajH19WBEwl*4Dm84?Zwr$&}*hWPws@SVyRcu%6if!Ar{i^nU=bp3A{r~r7Yg4Ub z^giY{+gfAH@%5%Gu*OI*BqdpJ2y~D?8>?-cVmuNq3)uLB{=arNPk0beh&xaakiV4v zR)ztA0pT%^Q~b;7_kllNmlUD9=Rv<`^g;jE?>#<(4S?u2BM%H1B~z6pX8=)>g@%D; zLh294(hNprCrE-Jvp2xQlZ#3ZkK6*M z+6b7~JUrgbHSFrWKL@2>g++kMeFNSnU%oFq$XI$qf~Z(d;rSziV2H8JpwPmvgdyzG zIFRAx!L2xg30RQ&(b3aaa3^TBS}g|ia|Nq@eVdl(V`SYIP3RUJ{!Cl0fgH*Vs4OQl zjQ(n{WMM|oc-pvfzaZ;Dx+F_^KObB0T2g*U|NaK~F!zH%)uiJFA zv4r-6ySQxV#f59fz_0`!qt1z-x$@*dmOXnr5AErDOBXEKja`~>BrlCpq76yv+Q3$m z-ULqj(U&Y@Wc-u(6C!9kP}cG~0I2+($I?c;iSzr*L;5;j0oNOIeN&WAob-Xo$bqS_>q=qKu5ssTs`Jy&oHF9ofWD{BM4yj^ z>FMVll0wZ}xXDhGD5;EkB!_}^aFh=ce*-7MnP1!h`Rj2xk7>=gi}8==^y@y1{wxFtc#2Ncl&>0 z_;+;w`7SJDf`DNEjxPR%;2*C<9XaSa7~+3wjssC3$o`=N6oNnpFrlFgo6y;CSs3Aug)CKAScA z8`BXXSn?c3Nxst|;n(1d*Ztgy9HCL$go?iMiI@?1sCDqxMkN&nSeoD^` z6=~&xGmqg7MqTv{&?~T?eMTLb=ZGZ@EdtE9?;M|U*nz*%phpkha1-sZI zM1hyDU_fkh!BL){i=-0JtGjHopgAQj%8A1obWM`J>=Ml0obM`q;}cV#rZDAMU&dve z0@ScXvNyF!t2x0iWXTZ!{_fyI{a68X}LmiLOp;dEn=^N`}0Kl1;@>6-K zDfU?mgQPNv3^$h7$NSa!KCwVXMsFlpz#yzo#$3G(b&qssq#J5kleQ+V#?Ps)sr>raE04*l5lz7Q zC=ObmO`FP+OdFG*9@Bxapq`z0KfE&i*ob=W?HWAj!&mM%XTphHnkrMhy(^W%6LSrL zz3^fLxU1gc%k|-WC7ZXn`f0h2LlALqP^ED%LH&KVw2pr1%A#U103lX1(mnI)Pl8ej z^{R5xV$@SR80=c98whSvHUSOrV(SEi33lj%PwxlwPG21X*KIF(gr`2 zqamQZJXNljx>lOeinbFwFk>SoR-W$ep7u)ofZ={%Ui{zXJNhy<2SHXwe#+h5j-s+! zh?P=~b_@svB3&vc11MP9D+>mkW3QH4n_2|hXE~qpQGFw=DNL@u_wuNvJTZ*ONNUrR zLX=*wYdRN-@v)-`XmFnm_g%SH%>88gTH-ypSM?KKg}h6bUmyKzI|KhbCrWnxM7I6T zn}=#t65bbV!#9nzf~JjAf}MN)k6b)w8q4Lekw zj2)YvGL*w`^JNfpOXeKZdn`0d2aT|U0CyMUFTv)%To)Z5tkUAr-q(lK?=3sLB zJk`P(eU!>n%mDdfkevTbjg6b?e2 zn&I!QO0ZkM^12^&2KB0l-*|Y(>a*78R3=6smz6GUm;fCbwR&D&^bCPD>S3DtUJ=1Y zMSrd%=6Dk2`3cft46thV;a@V44kjum555{yu)9g*vBDzVC{?;Xs(3M*&7OvK35}$0 z76dsK$gTI=sB}vBGrrw_Q8o08av;iJ$44|<4*`mpo96&sp!-RSqWggL2RV=(Hi!1x}eIf;P9Q)iTio7liKaQ2f3}FXIX(wrK}et_)>< zbQa+4LLjXNB+FIDBPld>eb7tABsZg)3d!d#W#ujrq#-oCl(JTysA zLm%>FaFw5_=&&S%34^W?1#2~SL+@EyApMd6M6<&Sx%J)uTGmEFxX+_wo|6BCB83YR z6o3>1nOocf+1*Ns;@`l3-xdw88Bvd~*E=b&xKg?9v6+{)7C+V30Dn@p&tLjj4*}il zR)kew87m_r%c2%KFRrL>k(0tHudbey!VpF@s6YEdAYfr&?pySwIwZ$9@k0{GwTo^T z0Ohn@$zT=S_xn5)s0I&=uaC3PQ_7})E%%z^oVi7hx?owYBNsIoNcw^hale$Fnj(Gq z2o*cl?hZsJW?HhmiUjLH^%A$KBKr!N;z!m#0mA_5KE@<35YF>XhnOF1%6 z7$h?6a7+crE@s&)5(%GgU0x~hImRwncwmbNph0a=VA>%;C7w-4poDb<==)oO0IKz# zV5PRcaHZzH7^UW9$}Jo!lWSr6^WAU6bP>G{kLXBUDW464^H_R4dFG8Kjh5Cp0jy~>t3PVqjzCKuw6Ytq$GWG-zq?ezogM8+`W68` z@S`j10ZBaD=5?I7p)T=B*F6djCw3e7(~W1&S}Uu9xkru0Aej}V#b(}D-Zw55106Re zH5jU9s4f7uOZzuAz37B@%?F>&N3VrIm+zF8ssJ#a$CzpS^>rwEJISLq06d{d{g|7| zl|fR0oT_WtTv9v~l11IGO(8%NW?X49jknnI&YGFZSsfiqQ{Susc_M*n?#*XD|E6XI znk;OunvZjsHB$HB3|Nt+s{3!YW0~|8H zJzZ+^4{CJVnO2p~_;8&n00bAkak$hSZhZ)AQ?nE!_buHpH<#ZwRVJJ3J=+W{g!=}5 zj>X&|9p!W@ML-btk<5|$O4}swYf}X2tvn7_5o3R-$B>bW$>VzFGvj4U;9{3#8aT)Y zI*-HgSqS3jW(Yc1&W`8H>++I?mX&O?kkNo~{u02#It#OmV;2txaPNGb2K&~*5C+UE z2lIs&Q-AQ~BqJ{%dRT{tXhF#TO$D>&II zz9+h?{#Pw^674h@0Ln4Xm*;giZMEY8lVt&IuvpdBFVmx9X33W+KHiDm=P#7KsvCk= zop!~G`ultdGwyT;2wQDqpIFMF*p0%mWSk|dIutO_%Q%kqqk#YeI+{@VY`GGaBA^R!E=w8zEBN|F7Sg+^bNl~b+|d1i;4bU4o>n|WbT6@? z6lS}I`yI1}Vcm`8+FLT(_Xku*c4lH^3$Ce@bwW>47o$vY?tXR99F7^Fqn@zjangdU z`#6_U50xf~uiJu%p?yHA(=LWL2x^T?Z_y)2CnymT1T6Il*{ZOZKD1QcDo*DH8S_vb zELt!pg-sZmp6BX@t!b!hQhguaf%Fw8>6MIGYH4f5Pv<^@|C8XE8&i zOQo6=5k_rc&HbL@QICHz9`4JNNHzAvShXPX8NmC;%4K;-im^jP2vizpV+9KczI9g?CD ztqHexq-0MsswE=i6ym`>(dcB8Rm%4g`nZKH$htfMt5`^{^&x+l3ZQ++4C!FRtx+nq z0s!;TggZ0$xLk$yt(v2VVJeF#2F{K#)YcrL*zxa`L>4|=76?AJqj;AO#Z zK9xw_CDfVIbhfb_a-MM#XzWCW$OHPvzDwN8tLhE&p!f$n)b=lMGu=Y{ytXF{|Ks#!tPaZ6azH$( zi#O(iK^@8vj)R9SxGlI*%2D`JKgptikhg~0Qxk&e0ygBDHuxAA%8BWu z3;VciKdepHBzxaLkH@-jk}qvuJ_teojFyx@y?aIxKtR^j{(H0p)IjI?YrNn8dk*W* zR2eV>eFf=1rv%#Df!{vU{xy#Jm(G8Uqt<+NU3Rz<&R=XBT zfAR68t5&njwMgRe37Xh5ptf|TQ?sh$AV;5YE7nI-!~6LFClPvOO(4VRZ2jCkY?xb)0QsA=IGTQGw0e1#9Qq5rx;>|B7CzjxfT)%oe38(@Ti&X=X_e>Jy(>`(s=zfIA~8Eb4Pqagbv8(bVB(!u=Wi?`2HY_TbKGe>@OvL1>z!N z-&tt|#42p5BsMdnp%JoCUYp^6c^+16;=Z-|(0%@?awiRl*D%a}PdEfPW`%YlzFw2f z7^Zeta)%w!oJKj|7$dDG6FZJM$!RXS!i@`|_u;mkb=v+sB`d%c8X$(yP0fv?RR#~V zWCC^pZl`c;OjyEf!~0SA%hmc#9ccSyA~>M>j^(2UXZ>lPs;we4p$YA;;*XKU1`~zw z{mON({MwVw2}=xd)yDw)mF_C}GO~LXz$cLtKaeXZ__ao?FR*m!Gzlu~KYV=;La1gMml#JMst7mqWSy=y$}}Hn5quA&k4*$;E2_1aYMh(Tt>`N94huU$L@r0N9)oJ`O1WeJ~&YB}d|$H=~4DYT_KVpN$gzRJ@xya06F^QF*Wo zAC#s3v&{>~1URb(8pb)X*ZKfc8sFzJsv$~q^~Azp5z zC-1vsxESOyByhlu(FHJu0GgJ|5Xtn;LYD2@V;#!*Zf6ARQ->=7-3=+D5})nI7V zWwVxT`7R4#^oK2m^|0fgi;@K=B51NmhKw>@YN;(uWg{K6Uaz`A)+NVfRs57BkC^q$ ziIOp+7l>sGg!U}rW@D_sa)P}oNvHL=59%N8C#rEngvB()h9MGwVqIdhe0&rgx%n6h6ERwKg3A09H$^=wx?%6O;#rNOBVv7JeVONP zi#|2X;2)3nvDFcWBUSFP@N-Zk4dwopE<8Wfa$1B2mP?_OG@7WHma1fhYQLCwMci60 zahiWV8Wjg@UDf9Xs$Pr7j5D^KxbR< z&_qr&-!&|=;6JY0G>nrUBkc8o=pxQ7Jp0x*$5b`e7ZEAkCnn)6>ai@ zI!DG9>5y|vp?r6Eb>@dwV+4cWamKfsyV!kjh1J2$yCtd?5Lb&Ninri{>(<~oP}N0ylS#}F7N!QR z7?_B*wI}rMq#lrPdQ&*+m^|REHwWJ?<&yO&Y`9j%XF2$j24u!(gHC4G?XD#u2g$Uv zPAGdB_fqZ8KI<9UyCIgLtpu78ZhO6cYQ2Ym!@5GbgrR1N$}ce^K7GS+@c^r+iJUs8 zx{`I72)V37^nOGSk@91W?XP+}j4WQSGk6I#?%|)QUOQ>ni9eiFHF)g-MJoPb!4~E% zzXVPArSDv@ha(i-_$!5Nmlf6>KJn7UWs)@8PIHPr=MZyLy@CwQ*X}6CvT@ubWP>mR zzPi#dC93N%jky@f>pU=J3PeGT_eb*4VfZA|aR{N8j^t7lcd~U^#7<-@ymruj$9%e$ zuMP$783mIgI-R?d{0v0$bi;2eKmmow!@B4;bI(nfW3y=aMhlT)L85_&{yi`8t<P zyN@?<8d^4t@)jJ`<0=TNpKGKH%cs6{01;Y%=hvGk_GPNKTM0&CRzf!M&I%Ym8S+B|}y)jj;j+wpXy z`L~9gd-d?SSelKIoN^;{+}PyV>}J0p5q?~(IaYY*hH(qms7?CWhN(BBy-q=g04CR1 zhHX3Ah)>mF{0L%R)S*Zp3h)K=CYFC$_Q=j!X#E%|V8Ur6&kLaZIQAln5KG-1!EYQ( zv`#79&b{gWWVEAk9liV&F(MWy`8)KgIY9r*W}*)7)hhA6Lb(nF#}pXBKsLKE%h%_f z>O^i{zohPM707^%i1#G5w;$_Fyze!00rM`_zMcbAbcRyfDgz$S$Tepm7*^tUA0w z%f`5acP}+xfTdTYn5ea9r54VW>~~j+<3}&ve@@VSuU?f)@>__Ly;BFYCB?#UxvE}i z-a_?<-#pHC8xKc_fs?HDjXyOiX20Kk4Qze9Va#S&XSf7h0zR&XHoVsvkm^2OtA5{v zE9s1e+)y4^F&QEhp&bAoj@mv9lbdz{K%Dtk!56@XNLhy{5vux*$Rl7*L4lhMj6D-^ ze@%Kr``v`YG2{&gLZVw{(}PW(75pA05aO%_2M63nAxE;X*R?&yh%RMS$H4>Y;#!1z zJRvkn<1wE{c(h~uNSj&GX#7B@adLFCCR7dYLSxNOV;l+c5*)y=g?rml1@aXlVXC=J zX@>jSEi3Kk+b}h`5NkEJDvV%7-RCyj}KI8;r zc{0U%dgoy1o|=du#GpmjVItddy5wLeu}Qw}Exxv`yo%O9_Jk5?spOe=|M)`}G4aXI z9XZ!Csvc~5qylg}3M9(%m#&$o%gV*-!hJsZo@9&baAhGQ-GDHE*S2|p*J7Eh5=w89 zkg8gaz$sbAT7@|oG<)=8pfXT5bLl~Ac?&WtZJEO6Vh3Xn#Z^+^M4ulnaE;pQX=)%W zt50DZ4C}-M3B+R;X2119i;9@AuX;3G2ijHJpEdAZwhd6?rbB?3{J0@8Te5G=R5cEk z-5$bhY7e6)|r=&e{%^tVbSN%LS~bm<(P{$wOKhEwK^Uu+5E zao=G#9E>i0OyQ_3HWun~uMM>NW&|4bC)BYX<$ndhoy?@FkaKLDl8YRGqkPWv>erjW z1YNLDRCPT}W%+!sH+*%!$~C{Rt;H3h!Tu_znYM7%N)QdEGQ#=e7q@IhM!#cg4{n-; z^aQC*2sGK?TKh5G4+~Fe3L7bB)oZ7fgl528YPg^nD-!s1jgE8E{O%d`JqC9uua?67 zmwm##$-Zah&SM_aP;O4g z!Ylr$vq;0Ub~m z2_k;RFeCIL|Jj?$Pm@^U@%~DR4d!;B1pKzJSa&{Uu&NfZ+cghg#XN^7*x?MMdqE#5V^hMEq zuL<(PTM7Sb3S=R5jCY*nvM9!fls6s=g{kOm;OhXsK^2CbgF-k99UkC$46)NH;3e~^Y}$HbI*Y=@_W1%(a=gyZi5Axm7-~P zq&XTMQ|vKlHpr=#PR~2cV^i_%Zv2n}zT>9eQ3fLgc=CxT(kWoVa#!0xl3sdjOdN`K zUIc6{q|H0<{MwiDKAN_^tE}E()|(6kaI>@EDsSLtu+(;pkqh%F)UgeKns_Wj??(eZ zY^bqD`r&VWnOTA-?-}Iswl9 zC&u8&#FQpvI-bgwo#YLjiS*028r6|n=fDD_=sdOh-h5}@id5ZWy2fuI;?ljlhANuc zzK1)kC4)B-*nY|$8V#<*CAOw^w2a``dEO3$c1fV&K%sQUymhG<0j^Mu;_LI8e#_DK zh>P(Y`DXORa%yXE@yf@i`c1`ourW74!z1@k|01o79=9(P+n8RMz({f$KqfQ!l7ZsF=5$*6kuGo2kt#y0WQz6{E)LL3gC#zrT34O5hy~${zE`!^c2vmg!{k+TmJrud`NV5DbA3 zyR;S|Pg?Clc4al&#Du$5H0{4#a66pMb=IV7w+vWTJ;@6f*x?lh*_aXxr{69dw8D6= z&kVn{g{}W$*pKcwAzJSloLld>VROf7!^2EsR+*4Vk8)gN zy;N|fb|KI#I!e8uI**uT4ji)b5{sHrp3t+Ql}U zo&~@EgqP1gCac#a2yll#v267H$**C}_#zjpzKU39GILz3=#e+#cXL)WV}Vn-y`NF> z$vw6k?2)d83}3=!v#jGuvbgN=m>I5zDBu1&$Bs5DK%%D-swV>5c{kKC7i} zmV?`KxJ>>F(Q05*Up3rKvW4TEcH{MaxRL&Pxi0hlsCM3Ix|dX*z3$g~g?J1B*5sv! ziLB0QhS`*W6hM*`W#ynwFGY2L$B!FK4t3YYB91La#s%cZk8=jb`Dac%ckM}m$&`ds zBv9=tubu=uuw=}&nD_S3J8dna&{}v!u}F&RfU_md%j;g6XS;4*^cPh_7~QoI^p!fs zEk_#R$AnYvv;~TW17ndbwOpnnh%wzyC#=_{LAQz$qX28`FhNW!(JJBR2O_9Bk$eEc z7ZqQTXHKGdGw5wbVFfZy6u^oTNov6D1P|Q^d_G`lDzJQ!^i3AI?pI(=J!zUfwia!X z6x7@>_w_ZHW0Pu$9%F7hCAv;j*HJ!3k6`BFmq$vVE<%S}xBAML`4y0jPy#nY;I4;N zU*V!%AHatnU^(EvW;bB}=4i2`mAUC!f6t;SFydES1Xy`PFrd(rYEV zKQ`;=MdKiJ2Yfvgqsh#+yu$(u=iB=2K5fv=tGq)A%Qvx&k)tsciJV7T>~`v5^e?>_ z$^GZ1s7LY+dMvPWb1QLC!cNRu>@3pw++jJl6o4EwgI%Zk;3kMTkB5Y&klw6d@>4rn zoCqNk4E+l?!!sC;d9W9efoD&>QnW$(87( z0obd+%oBI?ALUU_JPmF+I#1s$jt2HoU%-4F9F{3V1p+$R^p8f{Vvl^dpKO^1q$>~} z20sGs=$jMz4CZav>E7D|X0DS=O8T-u%XL6ctoGYB?z=>7$m$b>tJ9v>y=hAiFNha{G7QH z{cVpjfa*@tvu-L>`b#L25PhGc1>hnaj_->VHtNK;Pwi{|Ob0MZ*fl&el zWSDpq$Y*Mj1(B^Li;nTb$?MFv9a50f5!e?gqOsJx>c|GvV9d7XB%A0=J#xzvhd3V~gH_IQJ zIa8&MnmP6O&1@u<|D2GrogC1e>2|Po1#;ukGP396`Ot(nyOrF`xlK^N7t8U$Y9Zj8 zaT^MRw%|KkFmXiA#Uc#l%;)6zl4@=K+X-C=2khXs!ul#(B>W})D%k=++mQBFu7@WK#bYP26a}+OCg+7 z+38EWA^nKDKUQLb++EDO<@5u8i*R%jlzaORclmqjh(( zH&?$%kp9c_FTv04ZM;5u5eI02g1|R=T+~*$&O^4&E;MMU-4oP2=@FhPAPoZ#V5|8M zwT#(0@@Y5ER*+DDq0a&J5xQqCxh#^TwJ)bF2|K)~Nk*Z;le7y*2X#$_`e|>A2sw@f zYL~kfox_TNIraKAm*6xOrA%d+i5cqSlikkz`)Eo@-z&{S>e_k7MktkfxEpvNzm`ehh2QX?mLha)3amj!48wH%nWMBiwf9 z-j{<MAjmMUk&3$pdM$Lwr3I%8ofjK^pZmaf!F%lY1z63W{vae!85{;Tmfn@f@fXlM-_%#U4;+_;&f z?>+_OHu8g)nQ7rqXeYgq^}x9=E0_A+B^~=Vmmd75M@%f#g$kXIp+rcG=VF#fl`jC&kM9qB=RQUqcF?C%%7}$MrP9qAv zpEjNeMZAqvG$Op{;sa*-KOGnnNhjb5*7MbI9|e(k3+n(qtcma7QZ!{pYMJN1KfUk} zmXSYb5wy(0_44w{qQULiUxu6nPSmgcS4BQUfK6xKHTer++rtO74m7FGPB6ch36-c9pa zg*zucYp4;BHY1IzSBv(f;ahK&IJO1S^|cstR@z`>7nv%s&?_-Bm_nUzN-$?pxue8G zyt`^5VQG``aT8TAEl{4huI|U~IUM1tmA;6!@f|mrf}GWTzRWb(dUqO>=^;Vmz8WHz z-rkgYR#dRgfIv??7aIx51pE~4ZLj~~1e^s25otBxVQnl$s9OvA$(ZD)Ws&oIEbk?i`t3E;EOKu;F#Mw&DFV-&+7YbD7RDWFzYc{ z5yyRuR}W_oL@x36K18oSw#$U@L?fGh4v^6M-8Pby9}SGtL8}&2PXg6f$cX62 zAAbf!7(hkE|8U0Hy2kI5?cQX&hG2dC{4^AnArXV%%egp>|Ma#F&Zsxg`Rq&*j{FOM ziUPxAT+~EqGpUBzwb_x)obdqC_DQ7>$_h2%45-A6}l9ElB>@0%bFfQ zCQ1DC6AZq2rw1XJx!nVm?NA|iea=}-B|CXTsfmu%qhWi;x#3OpX>>L3`yB5^s?xZe zq>Q$mgCOD_&vYa`{=0}jP0awRE$S%gDN%+JHwrqyOx*YYgQa>#TvzvYg^RP2AQGK%FUf(t}X^_uqf< zvJ%!uXRa#QFlEele!$F;gI8ie*1|w-->N7ECU`uv&KXL1lqTC9NaNWmh`mC&@>qLGrMM@(!*A2^1vBKkz%dI zWTvM_mwRN?=1CWI*0ovvo8QCP6La5JC;@TcbRmT=&GW>;@srK*i8dQ%CWRoP10%Ji ztuMUVi}M-iGn3dkv0UZ;w`3Y=k#@VMdlzB%6rDM9=K!C1a{x0%h&vG=>QXFx67Ko@ z#lp@UQ}u_*Zfu}BZvgINe%tBI4@3#cC^{AmmmI0)Q(PNaog^#NLag)dULr@k#g=Xb zJ?S%XSP|||s*=CNr-AfTLM8l$#n}&9%;3!R&PxlvRM!sPQqdu4wz!3t&suz)VD~(M zeDGuq%+Y|*ZWlBJ4^Un}#p;dF$gJROMcl@2(zlLvPC}ZdO_D8U+X#7W5P35~VMvPHH z!unb`EwAFiQDv9AZ=Lg!^k#SGu^2qSrHTIVEHEdy{fqpUMH~RL*Cl@bRVolj3va;^ zN9mq3Y$-0FIX~hJ+^Oj}wAz1!q~g|JT89QnJ&HAbzn5kjBX?>bqLXRGPBFh)Ay5J< z$b`Z{lY*qA>~fp%a)zdt#&U9Q)O<*g0ZoV<5}lxanmtT=0Tma^0xOEO<-!WlwuPgT z>=Dz$ouU`pk5B+Kx0KIQ|7zW3r+S*EG;wWfYZi4{a5L_0IVfF@(_81u)5^@LMZ*RG68a=heAAhqmjpCA9Mb_5FexS@=Dc)8soG zd!qaU^ZQ4j^b-@Sc}hNs1T)xP&oCA&Nn*zDMfEjjKm3&dbucQ5Z3^}g(JW}GEOf>i zbVez!ZUe$mOlG^Y5seLI^iJb?{E8kKF7@>T9!f%G&U#63qpU5;4cJ~*K=a2?GYew5-}WJx_dl z@LRIpi$x}k81(eo zk&%Tmz9C0au~CLo90_)+TQX&Y_}5%wB;>`-&@`Al&A*u|1&E3`Y&C%RM_VjXW;C?u zDe4Y{Ipi;MgI2C}t;m6%p_06?Gz-)f-S}CzHS%`!rKM~vsZ z$Z~yeo;r}2SJ5}T#ks;urNjpq?8avE;Jc^V7GYZbvNB9yCCLWdzF=PqdTkaQzmNdp zZg#U=-?*m*z2*vk-?!eSCMfcJ_&i}wypRM9e|1)Dc}F-Jxn&i<0P@0o+mNqJVs(hd zibb9z`i5GBlOtPip{5hg`>{_Z>UvJELgifwdR%O=D!jz|(NEUnvVJB#&|2Ul%Lg;J zl2|Iy#}9`*WC>7niSaB*yt zW2H@U5Yj+nNA}zEuhEFiKKRjAUL+D9V1`9Q)VG_|R}1*FPha*$*`@t7nMDL3a$u(P z*A>g3%)}XCv^*Cz2T2ZKQKJbyD;Y@ljVBH4mN|a?#V8LrVo)H=K>dJX-cF-bQ?GjK zy-W5l7QJ>1b?&{jF`;#0EgXn%#;%aS*AmR|Y}m21PTgU!*?pdC8+q1(8*s$-2_?wt z3PqWR?UXn-lnWq+QNZKEjfiidqU9`pU5^kn#Z^cO`s9nG*Xb?hthk&+kt0KFH{X79~x(1%0$;iS6tm? zv1Bg5TC(M`Z&z? zX>dcxon2=-7lKIk1SRVz2H!v&+&cCI|9YE;?|PMH@jB*?(#Y&nm|iv%aS_-RL}C)Q zM2u+3N6_;E?#*$x<>cE)>*q&3o%`nI%<&D{aIW^a zl;4LAeqL4Fm`b}<^KFB#9P_vwUC~83GufT7Muc}4xsP{0wD9%gP`PsDNb#WbwRi%= zE_Gr5^)>kx<&i06VW~oiPc*KSxW%^sCKVKSzu{5Z1rcjK`CaRZ+QL)u7hKIt(6Rfz z2RTi|J>*OL)F-N%`Bam)sfg@amR_c6G5{CdJ!xQ%(}VHlNYS~^`dern);srOm7e}A z#sDokM#zUi?YBXhniyV@wruW)H9+4qwny?t=GD(C@y_hEAS!|&Pf-TY#LMX~aIbwv zY=`vH0}qA3Js+OwEyf=M)1o(v*)mWOfpAE9N3I%Be&`UbB)dB-r7?hv@Ai$=z8C=` zBh)Za&^t$XJBa;jL(Yr3Ts<8z;H|IvUG$e%s7e$3U%B~1?W;Jo=pv@Hxd4%1hjPS_ z=T$*ZrcBP}H%D)dY#Dq;;f{iHTXjExbxc~M$b@5qIvUeT$?6pWM>}nyMaCZ2ms-{D znB4-dTQHA|-l$ia+#hCr=!ZdqQ0pJ zRKW+7Y6NY<(Tt2m*@53SsR0L}fv{R&Y%2!^t!;X-m~st!t}&FUGq`SdvN60wlQ-YJ za`7=$Ht$1sx`R)v_1oY-M4?wDb;;MaIMr`jc9txeCMIa@M777WPs^1XwNzXD(URD; zKBz_x2);5Sj5u=BXm6X|kEF^wKL zx(0GxaVisbiUR}kO{odq&TC~q43cCCdx^|ECufE}Ym^z?9PQ*Anpdt*Okdfs;iTlJ z$h=@H_>t?Y%);{xi7JGb%=HO=>?7OYVUSGZ5&LNOF6V*Y ztncLc&*6+tnl%*_HQ~I4Ot*^=ao%%fofVVKJd$B)?}x$Jqiuk@?8S)LjHZelJYYc| zp(*2&4Nk0>gN&FhaZc_F7G!ts#Lr;wnJe2CEQZK}>S>6|ALO*91tK3c-}N-oqCTsc zir1^jROpxRt9Sp{UCta&Qd8s);HC%=m>c3Ep4>)yYXp2ud_ezMdmOppc~MUX0@B_N z`akq!sK2@TKw??ye=I(((~unnh4{1j7)T*c@lTPKd>ho?A}lrLe~Q%AQo;WgU2Dq! zLj;u7YWrIPuPyRViMICs-x5(BmVZd<0(78A{}v$zaQ;ICR0`<-TY?kF_zy{)dSC}6 z#Gh&fK+G^|gnyMP_;Uu> zozycZ2nhKC5MadTf1>W+`71}_fK!Wu z0GVWQ{+HvwGU?q_r2zhBBQv6cfPDIgV+Kj!L?qV#*(x*4g3%Ei1cVG91O)FNRzwOw zhN!1m7jr;K W7V>wG{pqhyAW+aCAnAU8?*1QdTr_R~