From f10282294d45934d99e834d55de35db718c867c8 Mon Sep 17 00:00:00 2001 From: saphid <4596216+saphid@users.noreply.github.com> Date: Mon, 28 Sep 2026 17:47:35 +1000 Subject: [PATCH] Fix the cross-provider review's findings on VR APK support patch() turns corrupt-manifest struct/index errors into FrameError; a missing layer build says so; the signing key falls back to a rename where hard links aren't supported and explains how to recover from a bad cached key; the layer nulls an instance it can't destroy and logs xrLocateSpaces once. Not changed: the 1.1 Meta profile names match xr.xml's promoted names (meta/touch_pro_controller, meta/touch_plus_controller), and grip_surface is palm_ext renamed, so the rewrite stays (now commented). Co-Authored-By: Claude Opus 5.5 (1M context) --- frame/openxr-compat/README.md | 2 +- frame/openxr-compat/compat_logic.h | 1 + frame/openxr-compat/layer.cpp | 7 +++++-- .../arm64-v8a/libXrApiLayer_FRAME_compat.so | Bin 98936 -> 99864 bytes tests/test_frame_apk_vr.py | 14 ++++++++++++++ ui/frame_android.py | 11 +++++++---- ui/frame_apk_sign.py | 13 +++++++++---- 7 files changed, 37 insertions(+), 11 deletions(-) diff --git a/frame/openxr-compat/README.md b/frame/openxr-compat/README.md index 4d5eb60..5978979 100644 --- a/frame/openxr-compat/README.md +++ b/frame/openxr-compat/README.md @@ -238,7 +238,7 @@ from the binary; runtime execution of those paths remains unverified. Prebuilt library SHA-256: ``` -aace99b7bcdb3c79fa844d75a9483f8f4b16bd6e669fb3003515df8c673ce54b +479d31c374f137906e03f73209b581d65d7e6a41b8476e6425fa55a6aa40bd68 ``` APK SHA-256: diff --git a/frame/openxr-compat/compat_logic.h b/frame/openxr-compat/compat_logic.h index a5c6e57..9d94fbc 100644 --- a/frame/openxr-compat/compat_logic.h +++ b/frame/openxr-compat/compat_logic.h @@ -35,6 +35,7 @@ inline ExtensionPlan extensions(const Names& requested, const Names& available, } return p; } +// 1.1's grip_surface is XR_EXT_palm_pose's palm_ext renamed (same pose), not the grip pose. inline std::string rewritePath(std::string p, bool palm) { const std::string suffix = "/input/grip_surface/pose"; if (palm && (p == "/user/hand/left" + suffix || p == "/user/hand/right" + suffix)) diff --git a/frame/openxr-compat/layer.cpp b/frame/openxr-compat/layer.cpp index a5433a7..79b858c 100644 --- a/frame/openxr-compat/layer.cpp +++ b/frame/openxr-compat/layer.cpp @@ -121,7 +121,8 @@ XrResult XRAPI_CALL destroySession(XrSession s) try { XrResult XRAPI_CALL locateSpaces(XrSession s, const XrSpacesLocateInfo* in, XrSpaceLocations* out) try { auto d = get(s); if (!d) return XR_ERROR_HANDLE_INVALID; if (!d->locate) return XR_ERROR_FUNCTION_UNSUPPORTED; - LOG("xrLocateSpaces -> xrLocateSpacesKHR (core/KHR type aliases)"); + static std::once_flag logged; // called every frame + std::call_once(logged, [] { LOG("xrLocateSpaces -> xrLocateSpacesKHR (core/KHR type aliases)"); }); return frame::locate(d->locate, s, in, out); } GUARD_END XrResult XRAPI_CALL threadSettings(XrSession s, XrAndroidThreadTypeKHR type, uint32_t tid) try { @@ -226,7 +227,9 @@ XrResult XRAPI_CALL createLayer(const XrInstanceCreateInfo* info, const XrApiLay d->gipa = next; d->instance = *instance; d->destroy = proc(next, *instance, "xrDestroyInstance"); // A successful runtime instance must expose xrDestroyInstance. - if (!d->destroy) { LOG("invalid downstream: missing xrDestroyInstance"); return XR_ERROR_INITIALIZATION_FAILED; } + if (!d->destroy) { // nothing could ever destroy it, so don't hand it out + LOG("invalid downstream: missing xrDestroyInstance"); *instance = XR_NULL_HANDLE; return XR_ERROR_INITIALIZATION_FAILED; + } try { d->enabled = std::move(plan.downstream); d->stubbed = std::move(plan.stubbed); d->palm = frame::has(d->enabled, "XR_EXT_palm_pose"); diff --git a/frame/openxr-compat/prebuilt/arm64-v8a/libXrApiLayer_FRAME_compat.so b/frame/openxr-compat/prebuilt/arm64-v8a/libXrApiLayer_FRAME_compat.so index a58721a065638dde82d73ca8f733cde852743df4..608cdd13bf350b8be3133f782a78d0342c888f3d 100755 GIT binary patch delta 27945 zcmc(Id0dp$_y2RBfnnH(ec1O^Mcfc^8%8iHQzA>;ajDQuDK}haP%BI=#!C$u6`B>0 z%a|BgmS9?#R=7rGh34n;!L1LaDN`!H_k9+9eCqT1{rR0%bF;uI-qwEr&M62CIzIJbss^yxNiu_G~-b;%l z_9zdb5X;GeJnF2&vPGgm*@rTvnIvJnY~TOS4pE5X^8U48rW4fld|2q`@6<)Yckd;M z#Q%Y3``v!`;;3(qpPc*P<(lfS@BEicrN>CvZoMXhkOS056GXlhK7SQHuM3~u!e;>e z%_)dP37-kVXQuEuTKJqMe9ofL&Ov0ZP+ll}t`t7kuut0VY#=p4-7b7K2%k+tTd~$a zjtcc3gwJ1u&rab}Lyu{Lh^O!wD}444KKluunZjqD@cD%BxrlwzLKht$wT8}iDWc^r zPBSzdkJ)Dbt;ZZh!7X~cS$&gKXP%nj>5NYe_X?XQyu>fbX3m&4f5GmX zx=X|?Pr8Q9C|+_sNeV_8pE*oyPgCK2VFY_+sPM7(iMUaPR}K;JToE^Oat9-_#fChU zK=xn}FHqsnn?$@&h5sb+7pZWQG=SoJa5KlH<%o((?rGq-Y6-Wf@W)4r{ADUUCqu-` zRe0b)5wBF?w?_a+|6H}I!7)G-s8Qkj(nZ{^!he+TMiriOzsTRD!apA*;w`{g|97T9 z7HCxo%#!A^O@+(+9V*=1`9SQrLxo#z zih4SM3$ZANOz~f0LzhZm%?%OfB!x16nWRXk!mA`)ufp3U+;A5c`sXU74wCLR2tDRX z^)wZ3|5G$5Lxnd=xKV}25z!N}K6wD#9<$hxrxMVN5<4hR;Rb0g3stzh*ostmxTL38 zg_le960@p7R%B7(10_XeDqJ>1Rw$254!TMe{}f42jf9(J0mE+56LytAUbpCpMipKx z;Y}*MTEbgZI49|EyB9ZeatH1AHgGMHq7D__CE=YaTpn?k3V%)-v21`mVA0cNj?+n& z$qgGN0lf;BJtR|^U!Jlk761E^o+K468=k>%^nd3lvPg_Zm4Hsjgg7o&g%?VAo(eCQ z@In?kl0dPdf#KIAyhMe|%Skp^?TIoK|6a)xPENxXOl1JLE!Z~R_=uqLZp`9wcP%^Yj#?4X+ zDqAWmlns)DODAvSaqEv+!NOhwMmt!bbg_lbs z&Qsx144FAuq1w_ymB1~@&>|HskF;2Y%OfsP;l2;C(B?RcfFu6oj+>-ow@f7vPb2C>7;fU_mB+I?~&HO+#rw4pc0Tr7Nx@FktL~d zU(wJs6+Y8b#53;T;{L-8aSDy3YR@(QQ@+O%2c@Qp>h>&)QbZ)SE?FnT*ZcJ72Ya&NFIsWLv|JaQprP& zDqQwZlZfBV|K(-Tq7v9FDQZ{YXEH=XJ5>023GYLB87h3egd0_OrG)3I@PiVb z2V97MdBnQmV#ft40e=ZERN?KbgvG!Wsqj__FIM4kNuvIeySTXiT2sUZ%iRV+^YWj> z4ssjCcG*z*JkL|%^08Z>!YifYworw0^7&t+YLJuCVinFwJ70+kmpito@HVOAG8NwP zhd8iuv#P-$2~?_Z`8cjt;RTXGH7Z;_j_oQuP2z8q@H_c`n$&TVN}xc(TU2t~A{%2(5JkjhipA`L{wCxwaptqf=JFE_}~>GH^Byylh|EV8F$ zyyLcrcc?m;FWm;}|GL)`?YG6cL4gbFPi}}(G%(feTJd&PFO8TWSq&EZ6h3n$oChwd z78~;vxTrzI3lz9Ugv9kf64xGEaT6#~*X6GCgH0(V#NS1WK21zw}TJr%fJ###RFrD$lB8-UASg|Ox(1z}pnKA8^tCD6}gY{1pNn3Oqo8cPj8e1>U8=gA_RTkr*M&(}uga znbRp6Lhd$jdIcV;zzqsKOo2x!@Nfm5q`)H-c$$D?{LG?AMMH){AWDH76?n7)&sE?t z3OrAN<9n$)uL1=gcgO!|E>twc-(lytA_bnHz>5`lq5>~b;7JPHqQH|ST2KsG#=~yHDyk^N3~$&#dWk)35O( zW$qs5eaSv|JK5$(ZhGk3eaU)Hk2Aic$x{!c-BaJ@OFBJ0PWqCqUJNr0eCVH+3EKS6?jpr=qo|pVDH*2}m?y>!Q1Q4>@a(}1RoP@pj zJf?RmzRfeDTn{=HbRTFDXhC0&+Xi|Kv=da{A2WbRH{e^Olb|hG92b{}?Rq4~MPdJL zybss=sC(c-d>`nVJjfu@^YS@v6sXgq99IcCa{|X*PQo5{c_KQ5VA&+RLBl2^?Z*-@ zOobv)VLEAwugH}GtaoIR8 z!e&7)XgO%T8`hZ9Y>W&*|EIv5j1fJJ5#azi!)OW=&xH}FPXZlffj*wfN#h`=;(nCSHKY987pzY!Ro8vF*8o2v^CgYK=*;3M1%c# zC`3K!1sDN31k}(I2Cjt%P|pVSz=>4?+8?y=MUGnlS_E1KTConsf`7;ccn z19a3IFgg{30Bu8ik6pqfCw-FeiRa=2U z(LT@`)H^_{P}jW!<)|0D3uAr21KJa`6|@!Y=iftzy%BV^-~qlKbPnh~&`QuV3`cu* z9gIVLK^^A*JPKpq$H;LOPXbK?Ee6d7tp_azZ3Qg@Jv&|^1L16)?9dr%oLC`ADHqfJ>PX15?Y5?uO z6H@{@6LbM+F=!cR3uq%~7wCCVCp*fZ{Xyf98_WdF1FZmE4qCYjo&_~mqp%N!8qiiy zJLq}Pc2GT%2mJ>KBv2!05oqCVOebjB9vH>iKg8+*-3sc2q+)p^Mg^L&5AFxO{0Ve{ z`tQd8uuU49p#yZy0rX|S{Fi+OR{ zY|wVlGic8{gcX5$Bd9-;75~p+1ZW1R9eCUqFa}iDf*1h495k#CTmN6eQUGb7WBY&} zLFcI7Y{kexdme+bPz2s_bO`Ek62^jdoq|E2{ZE4zv=}rj3^?dm(DHBLCD5(kVHtw< z{~n$NoeA0nS^?@|4##|>5CyvL2Pgsc{|Tc2tpq&-diiIxN8sI#xd$B!S`1nYx(2ia zv=X!ivMiKUqR4;c7W!AUIU#8TKzi&K}&AIXwYr9;gwi)%n_~)G}no6QE@OH zm!XBACvjQ24YbCWaMwW3`w=c99)<@HZVl+sziK&wIscN0OW z3ng67U?>DF0&N4WrYpuprc6o!3TxSm(Vlo00Mju5FQfDxl|tPLGB+0J_^qsDA~)$n z1-<#gVRU6dU%vbiU?KEqfx)@!5rhQwEHF?qK9nyRM4wNxEVDVCRa7 z=!%j_ezbkOQ+OF_Sm5xmmpmEjh7*R!E$1--luSq@Z8Uj8B)LrQpD@mO)MUg8 zeR@(5-8aENs;JMzey$ndUax_dP#es9Or@hI_6@I^{?BR+PH-Q6V`8GSu?Q0&73c($wBnsq$q6(5ZzLGaZ-AEJ&M^&|GB4DwDn(pcT(ce(|KTN%jsj2W3(Pxgw%4n za&l(yC=}0wQ=Y2+;4B2zMvqPI7gLGS0`uSdNCH zp~k8H+73X~FVhKAN4oZh;Z@~WMzqg#18tt_r!4}qubh5Ab!13AipGt1dt-6g0<8Z= znpv3Q$}%X{Y^2fC477TQj&3Ln)edomwUq8C9Oh|3(W63)XO4PWLfwqeunlO>3K}tO zSV$*|8L!;+a}t`J+|a=*bkVeg;4~EDD)08snpxUqpwTm9U9s(P#i)hRJ~M(`Sz9@3 zYgn5b8~8rd$|`B<^uDRrP)vL6t|AsqI(H}s=8rOaF$G})MqiqqFd-MkA!ug3$S)>V z2;8U;W7q;<78OyX;V9(bg`s)1@;aXz>gu ztqwEVvI*6M)czlmuM9SpNx&L6(XSy=hT=XnGgkIuv`T2cSHv#x zF_93KE3#f>k)9Cg6q~2dOwmSpBA^82A)`?204ExS7vn4h*1m}{&TDt?;_rS1W;2^ zh+8L+Ye0JPbjs9Ny0$3PHNyv6NDZPLOyTs)q7-czkfXKq&!WB&O(<5@-Sq?W_(_K0 z*=!C+=Pro4Uo_Ln7YzWF4l@ADRS2VRt|zb|3XH8DBd}^h=cZy-%mij!4iWD?RzXB!E>AmFp26 zMV;Q%zMo^Qj2!Wfb)v z(kV}+Xv46$%NpoQPmRDjZec~rTY{{Pl zPnyibSl)DUD`Ff!WxMxB`!%$W`iMR;r?0kW0LJqXeREE#wh%?`V|pBDC5mVEQMacf zOe`hN{RH~Z$X?7L*49kV&5apZiDEmN8LRwaWxK#~7iZW(U?&y4Z1UQG!GZ_orMT*_U*#S^ znn9<{4y1Hmymk~2%K`f7JX2}~igBOa-JhAh8WolVY@dM9)Zzp!OZ_uGqZ5iv+O%NI z{6V^#>fK`A`#*DzyfRzIizBL$2OXvB~Po9Z2EdX3}7=8i^ zdohtRU{%081VqHDm`Vl4X3Y+4{b3sOY>c)I#qz`SfoIcG+4D!`k$a_+fR!sS*4q$Z zWk=|aXGdzwQ0(}I{)ysA6c>C?N6wGXcA>cD2ReKH2X1z(nKNft3P@MZ3#3C9Bx%`W zNmM(Xy&zMY5ss-lOY0VlbX$XB)FniPxYva*4AmY5wCxHVws4rM9#0rse+7rIH*Q*( zs+|O+KNA&W+8uc4^_oj$QBb3}hUV;uec?&4yLm%Yf+yixfaSsvkD z6}*}VP*|u(q_8xYZ%Wu{gM?M*x1G*g9!dGdA-+T4T)P`Em+jrcE1PyNh|sucn&_Ct z;qJ`EO-^V&vYjqoe7}1}6jmWqv41-~vUretZYRocb`VZE>Bnq$Ay^MW=6pYFvrOjW?ev8ugSuZUoYwFH44z2!FUKl zH@bDyYiWqr0zjj(5ID@L`80iLx>qA0`v{3^47dVm`BEoCJ767FMo*@1;2paPY59^M z`q|Q8uOv9;G8h=uY3RkJBfXcSSaLt+nss<&8y&uEK(OGy2jDjyu=ln}ZuYVhTDmxb zzP~Ko+aDgW=Od40ioV%Kzg?E&RRpZP0MpNUe~Zpt9z`Em9_Y0VaM(nwS_UrzobJ^L zC~YdjjX~q+2g`?rLyj{dn+}_XZW$aYb&DljNPk)xIHbfQvJhUy_Rsv<#vJR$7yca- z4zwz$@}G`vl8x%y_vz1;0Gem<_dW?cL&kT%Pc7#{CE6Ij<`*v*DdcT&2tkM~w!M@!ft5A4aE^u)?R-j{(bUy2Qf z*Gi_SBLd$T*$PAUbH z`v(|*Al+pS@~#2ygn?Eu-v8{P-r zmRAsPjMuhH(7V3CAADo4(9Y0&XVu$!|inq;2a*A^n=x-%sMNx#>{h$ z-v@CO7L5;W^kwn)U9yhD!ROljtn=hUf?@F zK;Zicd`+&BY|lOd_8sd3n9#=>Cu@68bbgX4lo{Ki1jcWGaWdmgKLPua)~<<83=zsr zXs^~u%F71<jZJbw*_nH$R4h9pOLf0Rv$98) zqr=42yAtEx;Q?qjabsPbQ3h|cSauBG?DSi67B@Cvt3VF>?O(XZ<(_3zY5`IENGvblnTdB!=#JVH~+dJW}D{k-ndXSch@asih7DUicrn|FAl(c$R+dE+3i z{r55~d0n%HUMhPy@)BhKIB|dNe%}956wi&lfgru{Vx+YVfoT{qj80q|PBzgcYvWxd z?1e-Ddx0Lhi}f}zEP4U@s(}pwlbH?vmo~$O_P0F{H-UA0vL$~x?epRQeWX=bK^~b_ zwrVD3&_yp!=MN{+?_W%CO-khUH2uEfL@RY&mpFb1^kJ*0Z-@L@O;8<)!JjAi86B5G zjgE_&;JOpt-9cA1T#68dWs%l%u-#M^A?W=@&FLY&`;OJn6Hn^s=WavO+j4)3wfjClouuzM?%Xe&wVEG(x+Bu)Kr-`8 z$L_LCExw$iCJ6ca7A%Yr#Ci?yY&}*c&s$5UbJi@B1;a-1)^^DM<$^ZGi}Ep)JAN?^ zLYSxe9)6x5RD-p|l(#1u9mHYYSRak;0md*xgowa07mT1A)(82t1ab~RH5R%84Uu@U z(iLcogqHWZi{`W>NE)yM{NvzKB&niI!T669#+OURchPAZ{2pEaOG^lsE?XC)zDMiCf6|J5<{xcMmBupDSZ zE4Dt=gXp}M!$~LI@bZ0`yeC&t1U0pqsa=u8^-`9W8*B2r7u)R2jUA73f^E5Myq1UD z^>M+}t2~o5)BDQ@l2f#_JkfbQIzK_Tmj}5%fD*2G{BP2)%14lwsgE^u*htAFT!;!L z)v-EE!k2;-?aPdgYBrA5SSDsp7|QY}#^+yG1sWYqXIr0eEiJs2#%!?A@2sK0QN!Hz zZyK;GNwZKr)LkEVD#x*vdTty}R?>$yzQ0E{51Ydg<%TT!y9i&4m`glw8*AyxE{0F+C!c4xQw<;!*6?FV7Q^PN^;KTW?3xMlZ zPZ3>*ENwsVwe-|0BRn696zzW+^miKn>hRd=5O+Q9ejTMjtc9}@V#&vF9I3wIAauKO z=nJp*<+tb1k6(=rY!7tTUmG)`_7Ciex0Yqqc58_BsUZ6Mt8?9U#BmkhVS|htKxfugNryZq)} z^hRZ!`J)`iD~P{!gmb)w7}Gg($2vYjTobN-GY%h)vuun;-|ZZ?rv|agG8vt#7_Y31 zTOMJ~Se{l80S`f65#wc3g!RFKr}~zg{+&Ps6Bf_{=q;7>x`e*bMu(f89rvXWVNQG0S?uCLsBfj)H!bU7x#p&S7_HwigQU?qFxp!PEY>lLm^#p) zLpk)3*G+tL4z;~L-mkJBSCNE6>JK#ULvz)LRH~_pcVCX&VK3@~W~9=7RSV6B;WV5f zbxf7vP>!RUH(Z+K#EtE^z2Zbi0Jq11Bdr|=Rw48;o-Xim%{dN3v$F$!5;le1i~vmJdyN zGcpEhBcYZp`IgUf1a(88?&r^)g}sQ4@ToV`oa{P`@vS!vDR$SdavaIdoYnO!(fO8d z-Si6r{_gzm>Df0!`Dj0S`^}Ag7r@0hdh3`oAJPg>r^vX(rC-?UrXLIicw!YWwjDZ$ z(*tkCXg`4^PW|Y`w_=h@P-K$@UkLH=YZzBCADG#VdnOnAmY;K3NIl{=h7PFiK^~*i zs$(Oo54-9AWbq?S;WbR*d)R2U8@b~qlx3>)AL595@<}Yj-c2mnxX=4wl zi|kA1zCA3UBb2MC#|Ep6_bs&f?ND-o{`mF?@?RRg)z38_zV7V9RYcLDTknhc05a7x zxMSb*e>eIowB?7AEEy$y5ybJyt9_xekU{KL2L)n zY#i7`+A)?SxDdOon4DmPX-C?{l9R!qbo#sb{H#9o!*_ei12P0#f6;{2o!5la4edj( zzdM0+(}&*+LWVl)y%}UP{p!6QJ{~X}&y)4-nlOZOaNRNLS~D+rPY5P(^`s0;VmfG7 z_3Fu8tec(GTH_Z!i*51P9*Tsm#80u6_|@5IbIpS!fO^&jIq!yJ>S=PVnapDSX3cP>$_&9n_hS8 z=N3Fo>?$PK8-{b%3-EMDEa$j@2LKkVmKAP#Mzx=8rvCQeg4@kjK{(csFT{ z+nMqMZcRg(@^%+~dm*rMp_ZZTE@b;zC_D#2b||t0p`)L1FE+1~B42LrRUAdT;Ys%V zwU8hSM*S)_*J;w`dJKmU3{!fV{`kZdNN~=DrmyIR9ZUV}k`lYAC`wS0+?$5%Odt)^XGbWxO(*Z{&Fg#9mv+WD-$t^r zn(o=zo4iE-h0oUA0rq9Q)0kAQ!e)0T{zIqmVH`#l^tdf zW_xfg(lr)EE&rwwdlI6b11p2mkV2H=4tW*cY)g(#gWCStjvMsxJq{o!C9yY1kHRCZ84)eypGrP3D~ zKFG#N!qQHhCdb%mqD%>%WxFAwujU_8g1v}xW)VvXYUzr`iTuN1Y(fGm6%E(MWFf2$ z)I3jJ_m1HE3k-qF{()guAYHjPJ+|q#tB^@;!2_-`lNy606Z(lY7WKsd# zU#@@4q}J1{kLJ03gN>9WQaL^8M<1n!eAPn;xN==-ko7PgI5~o)=xTIC-%s5>j&dJn zW!E>Gv72<$0UwVEPU(r~Z+EW0FslnZtsR&o*7`5{#>ZoLeNX!9$0o9m_SqLo_Rxp+ z4RT2k9v}A84f}eN*XSqv9wBR}&nJ-t56_7v1%VpW6y|F+Or}>HNu}z^)WLwFt>YP#sHjg1Mk|&-9=Z zJ~jCsgnM7XCK{~?IKqyy@Bq5wQ&WTo)amd%z@Bf|^T0GDwXBWB+vC zr3dwGN+2K6K~0h513JDbJUq-AM2sKQKwA|2oq5*S^%t_@g}BJrvxQLF)Q3-CvJv!r zQ#KwrlA9CB0{U=sBtOTWKHHoMmd(u%@?I(Q*X9VccpjL?&q<*x4`DnKH2t&DxYBy=v)EkE6ycs$ISb|7dVlNCo830W%#>ppTQh)R zBPwTm$QF3PG-2voeD253Nu~*(n*x*YM3#QNyFZ(#f@DlF zZi`I4=;%Y~iOkV(u+R*cMkpQtG@is9NPQq@sVc}#4Npu~pjNdA#}v{rrAi+=O!?TV z%yFdeRAl9Ou6MHXpK%bLhJ}Kj)xEGz*|ikQ%7f}&K{N&??%wf@7k+6?KWQ~YK+$k0 zvS9h-?iTa#GANk3+u6Z7z1o_Z02bFJi@Vn1U{4~rO2F3HA5T?fu+w#~l$7svruQA& z;CZ~O+s1~^cCr?F_E?bfFBs8Wdh6J@kX}$Lcn{YSMX7jV!sQL~UZS4PJ#GpKl$&vj zQ51t_+`_PCy`Fw~+=S`%Ji*em_!A>Y2c2~ymQDVNC&?k9ypIN-+|B33)2~m)kiGP` zlY{w;c$#`Dg1ku|Iu(h}r%y%lQ@!a+r}7cQXHWT&FXL=s$$V!6G;dcbQfl$2m4TasJA~P;O(6W9_feV{Lw9E&W&9 zI5M9O{Vs?+O&|Sk1V71(Zu%~Uf5eM^`dy&YLtdP}cvfHju8N$cYrh{nG?(?n0&@aa zyV#9$;0up>Lj18Q`q#PPfLVlqWzXR^u!CG5XTm{su!iM6|GC|5djTurJ+_v97(u?G zSAK}a*A6~sf=DAxJ~NIa($X`r!5P?nKEp$$ym?e(qhOmy7yaZ+keRO6>bdM}Aw}GL zUZ+3Dwsdf_dtG+WXZ=g3_wRf!pOp)vZwc-Fqqx0M9Jl=q6(8e?iWhlUJL8j&){U{8 z|L|DNsqWPTX)j;fHC0o4eVmgSd9QQrt<{{B?dZ&zOi48iVN=7tC;0;@9m{{~&{+{y z2y)!t*iim-&3P}9#k{mbZt?Q<4f+%hZ**eYN;Tu>C8D6`SkOKd<*SG#mhiA~vaV+Q(QTu~AICa}p>fpi*M1!5 z#3v=v-_OqG4=2+p=hAuinBA|Qo1o>Rj?mvb21n*05g428u;R-PIT09xGK<-_u_w^t zZhu;MLC1Gw(%BbAVsGDdp)hQ6wnLZ23CoFn6Grg(#r8>VCTCqwn=givzvzz_W9giW zI;R4rr1L_UMmH^++AfBBp1~7@%>1Old>YI>ocf83(P7i>RsNBJKS$uNXUbiJu-`K) zeW>+PB6*$ey<{ef>7dKMkX9OgB`6>Ra(I%dw`ly=oy7wuTMvWj{a0d13Vr&@7~)Pp zxzdAp@4j#)i1-{rhHTUXtjj_Q%kEE_sn35OBs=Kj|Mm!Y8*O`_s8ACGMS)NhQ1>Q% zV1KWF`gCR!0**7*mtkY zwy1I%b1fy*2@tZp@(T~Wl#g#V9o#}8>nqotilNM2oV#e&jYo8)w_Vsjkx)UKt{7 z5ZFc8j$iP|F9-H!l$qIoP}21+8AHG8+Ru0VN;f$YQj4y*=s7%iH}wA1tT`%a_;6ZEB>{Liev?2%~jg>&wSoE znLhvL@YIDljv8o_^WkWuJA&ZBA=V$!LlM3bD#RnlIUL^HsBC)m&jfy94h{V)agGnZ z9Al4Iesu@HSOzAdQnne%wVq2M8Y9x@#b~a5- zKhYh3#qiZX(&HeyO?33l7;3ngpzkd_rOO_`&v8fJ%pDjlfTE61vHug{(KJ^|!gSar z{GE_2W2eB~>@ghiX-JxeoVIPyl2GzZL#>wBG~|LU%Z)^mvklYS$jgMRu>Iza)lLka946e}Szes=q9#%}@O${$wgi$jK9b|gdBJh3Z+6)R z29ZQ}t#FVT-CXoXY_oz$_>(F=M^~}Q*OI@((QRWF!-xMZCbZ1??Jh2Q{52C6uwR`P zi|zp0L;q4YIPj33aCDPa8J*$W+eRMgJO9Fcw#g>jHA>*(g5% z_Tj`$xDJvBGRN7LX&|QX2Q)5ve+)F4xILJ>f`0^g_!42Ia4veY?KK1Gr)l9_Y~L72 zkc-xF0naCkZC4EBOx?X_SsI6UYcmXJC>1xtkOw_p+! zeu15G5nTPBI7^r|e34RthgzZh--h@Q;?47iiyP9z$P}KOX?P`q+#t@IaEbGp%^F4K z@$(M9%)buT zffW`LXXQZ`A+5d6;o6Vgq4&AZk&dqdW}z*xkBcMy)>|#uxa?f@AZs_C(eV2ud;4Rf z_u?1I6-|G3?`au{OySD%jRsflSisd4C#oTrg|;Xc&h|wN@d^GJLM%UHk2Xw@ZFcyJ z3x})iw;1vWiL&Lyk{)E2?U`8ON9t|Q#gf=TCm?ei?_+qk;>{v~8K=uyGKl>YBMXTo z+n8>T*)QxH^Bc8#+=1@(w4IG5(LKbGf=T~5gxhhLGT~$x;hHsQ&~2BjuKiL%^?|Kd z9O>gedhhLVVwUy3ZB`r{_>JwgI1)O!#Yf79KO@I(_rnIqTk^jZR2m0j$=GlAGdhN6 zWe)28Ow2`Dj>eqKz1XG4FFLHu_DCo0nIo_lTa7)s6OW9*P1wu6viZc5fbe^TnWJRI zNm-e;5%FYL{L{@t*Fkta-sO0E9-e<<)vV^BB>U{#8RMIW#!YJ;s(sA%ZahhJo!mUM z_3`GR=W}eQ<4F(KXPSpbhrKg8`=JK61Y#t_#r9w#cA5KZ^Abt$(5Qv566aAevl2gP zxPtX`$4cPL$^^9GPP{)Gc__*(gEeX_`3BpeMA8F4rsp^|ImK{>-n7*AS0bFZ)Yc=3 zk%oy$a^ci|R}Io)+;!w0FPiI0!4W+Uha7>!-&Y4|1(chwel zN^~V#hXEJL9)lZfeXviGaGQHS@&k!#_)kAFo+OuExpCLlCJpPnd`487(D^6GMwqSp zL8mv&8h~(3-u%lQ{&Lg4Op!kI zg#*cbJlSLWWDw~QROqJFZ^u0xqL}>+bGdFUZU#2w*t!RiKF(1(t)AKj-~rm%sL|@@ z*p6l5Nb0ox#)z)LXE536WbTK9miZ{_HPL|S>=vps)H(xnhHijhZz%2r+4#aioA8hz z%WSqOWH3fSMjE4+B%=r2t&kzF-Wg~)1}b$V2@y$11NyF;?WM^i!Dca%Bz|08L!FW6 zbbXjf5vva)Tto6yEgI*Tr1lx^2S zt)Ws~7((Z8t6r*4V_8aDgdlrP6I#cmK*5{%F^0cVL3x6eefe_72L-}dY~8RoHvLY& zMCjL&KN8}MmAQ$7x)*JO9w7b9(b+fBD#TS-ZbD=WvxvyHV8)+?2%`%?gYfPzMN6sa zf6F{B$vg?_rjR*n{70FQLPrIX&;-z1_^MIvC~NpX3JEd~N-__Db~f~Rkho*n4fx+7 zc^i6J7~?M^D&B5*d=%M19&Z&+zJxnMt)}`6=7H83W#U?WK@wUE+7oZYz917FuaFUA zzjcNb#!Dp`{3N&{5^o_(Ygj*;+$70aes|B>Dr@N^-YnC1O9+0GeN?t<(QN%kwyV!UOU&7Swjn8glH z1`9%;NDzL+GTh#NQwETVz+V2TK3^2bqfgf=s+5 zlL-1HWNh}qB-(c65%LJX>B9!oSYmQ9Py6_e{NE!5c;jGMjfo#*Cc|(=B(_I^(h!Q(sF$t)TN2LS%=cBhe#vc^x-PGM|Ay zp^%xj?SIR7)=NSkf{wRsm`q*>;x0Jpx1gE}L+{61KBaq1AqzdK&pYWCqw!l@aoXCa zkU-l3d^oqCbJEYU{Wyi}H#ePeLSk+i+K*|3_yoL@Ue0mcPw{IWe8cuO?jiA46!wMd zavc3gz>&i1D^D!HJ%av)AAX$069~H)U{@g&b>`b7=wrVEM)E$E-GTlAd~IOZx-#Bx z-GX(_(2K7)G)+Sd<2jZ?2cBwbbJ7QSBFS~-Zs|(#+mDx>9sUh{3dwfj?P6tT2kXLu zDS6FyWg2-Vw1))hQt(S#p`iqQFovZKOQsVSCv)ixg$vVqi-DNyC(Q5DxK3g7I}a3p ztY6W7vwLi0JbpTjUkuB0T{`V=^7a{pVth=N;(7x2DAgRdXSQuc5s8f+d{KNJZ9U&@i-xCh zird-qXml>F3@q7>?Y8D3@`&edNVRK(Un1_wvPI7#gIzr&$<4OMXOSqK#J|+GVHOF~ zZpn7&`FPvTStQW>F3K_S)+j#mG;#~OPaWzeMSTbA(-rj(P+z5}e~9`PMg1ex4=C!N zqJBuzeat!qJA9pRf_s))VC<=-=ls&QU3|`bBg*o z)cHi&0JGia-vDCn0Ct~?sGAh^Us0c~sQ-@oDnRS}`KT$uRsNY8YoTAR>z!1rQ?xsJo$VQq;XrpRTC;qP|K|4@7;7q8@_!0YyCm^>d1P4C;KcXn>i`c>;hK z31IaU)J=+dD(ce}^}eXDQqJOl9 zQq)JIK3!4IM}3u|{ut_8?$pbDCZK*mQJ;ePIkC>34;8P5yt(8RLiHLa+ng1|gH>ys zXgl#>5b|}7+ky)n_QGYa@WMZACA{Q1`@h(*mt1H67aR7%&xnOry)A1#>CNZ5+n$|I zhQ*XbiLk`Q6(NykFZ}RGc%|*N9S5JeSSQxqB>cD}@W<_L{81PFG)ig@mfGciOBIQ| z@G?jge|spr3Z;KKHB71_;TK+=-J-r4+&Z(@ZL#jlc}N}LkG6yk`3CD8+##Cv*e2QQ z|A?CZuR50c#e(@i8oA(gj`kScqaklG(K!>lZTxc5+ee-`na;Gm2G~uWKM$Sl_;Ql& zDhEuS&1VG}=p)CMOpn{fuYgppyVwoFb>j+>?jwh*Op9#afz78qPGpm5Ph0RxNb3iP zuzr9oe)R8zOAc7T&7(ewh%K(b!&M_47rx4Z24xA z?)$e1(AYLHz9_rM7gcOK4n8+I<_j0ud@ZQUYovIQEuYoPq%~2t$hMKybESVWHn+rf z9Ce>G>EEhMTO#T$w*{BN{3hvNAC&)}V@7A&gi>@b{{yd0OKlrVnfPC#Skf|)+HK#J Zl7W2EGMn!zGR*DL3aOdcCafS4{|{UVG422W delta 27385 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