From 9ba23bd4498954eed769fcd1e4ae02ef4c0c1609 Mon Sep 17 00:00:00 2001 From: Simon Date: Sun, 10 May 2020 23:13:07 +0100 Subject: [PATCH] Fix incorrect Pitch calculation --- Projects/Android/AndroidManifest.xml | 4 ++-- .../Android/jni/QzDoom/QzDoom_SurfaceView.c | 3 +++ Projects/Android/jni/QzDoom/VrCommon.h | 2 ++ .../src/gl/stereo3d/gl_oculusquest.cpp | 17 ++++++++++++----- .../jni/gzdoom-g3.3mgw_mobile/src/p_setup.cpp | 3 ++- .../jni/gzdoom-g3.3mgw_mobile/src/version.h | 2 +- assets/mods/Ultimate-Cheat-Menu.zip | Bin 12157 -> 12169 bytes 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/Projects/Android/AndroidManifest.xml b/Projects/Android/AndroidManifest.xml index 199ee3c..729e5c1 100644 --- a/Projects/Android/AndroidManifest.xml +++ b/Projects/Android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="14" + android:versionName="0.7.0" android:installLocation="auto" > diff --git a/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c b/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c index a82a3d9..c6327af 100644 --- a/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c +++ b/Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c @@ -47,7 +47,9 @@ long long global_time; float playerHeight; float playerYaw; bool resetDoomYaw; +bool resetPreviousPitch; float doomYaw; +float previousPitch; float vrFOV; vec3_t worldPosition; vec3_t hmdPosition; @@ -1283,6 +1285,7 @@ void VR_Init() //Initialise all our variables playerYaw = 0.0f; resetDoomYaw = true; + resetPreviousPitch = true; remote_movementSideways = 0.0f; remote_movementForward = 0.0f; remote_movementUp = 0.0f; diff --git a/Projects/Android/jni/QzDoom/VrCommon.h b/Projects/Android/jni/QzDoom/VrCommon.h index c899690..882cafb 100644 --- a/Projects/Android/jni/QzDoom/VrCommon.h +++ b/Projects/Android/jni/QzDoom/VrCommon.h @@ -35,6 +35,8 @@ extern float playerHeight; extern float playerYaw; extern bool resetDoomYaw; extern float doomYaw; +extern bool resetPreviousPitch; +extern float previousPitch; extern float vrFOV; diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp index a702d0f..c507a1f 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/gl/stereo3d/gl_oculusquest.cpp @@ -578,11 +578,18 @@ namespace s3d // Pitch { - double viewPitchInDoom = GLRenderer->mAngles.Pitch.Radians(); - double dPitch = - - DEG2RAD(pitch) - - viewPitchInDoom; - G_AddViewPitch(mAngleFromRadians(dPitch)); + if (resetPreviousPitch) + { + previousPitch = GLRenderer->mAngles.Pitch.Degrees; + resetPreviousPitch = false; + } + + double hmdPitchDeltaDegrees = pitch - previousPitch; + + ALOGV("dPitch = %f", hmdPitchDeltaDegrees ); + + G_AddViewPitch(mAngleFromRadians(DEG2RAD(-hmdPitchDeltaDegrees))); + previousPitch = pitch; } if (gamestate == GS_LEVEL && !getMenuState()) diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_setup.cpp b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_setup.cpp index 00796b7..69579a9 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_setup.cpp +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/p_setup.cpp @@ -3807,8 +3807,9 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame) AnnounceGameStart(); } - //Trigger a Yaw recalc in the QuestZDoom code to avoid moving in the wrong direction + //Trigger a Yaw/Pitch recalc in the QuestZDoom code to avoid moving in the wrong direction resetDoomYaw = true; + resetPreviousPitch = true; // This check was previously done at run time each time the heightsec was checked. // However, since 3D floors are static data, we can easily precalculate this and store it in the sector's flags for quick access. diff --git a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/version.h b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/version.h index a960fd1..dbd48a8 100644 --- a/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/version.h +++ b/Projects/Android/jni/gzdoom-g3.3mgw_mobile/src/version.h @@ -41,7 +41,7 @@ const char *GetVersionString(); /** Lots of different version numbers **/ -#define VERSIONSTR "DrBeef's QuestZDoom-0.6.0 (LZDoom 3.83a)" +#define VERSIONSTR "DrBeef's QuestZDoom-0.7.0 (LZDoom 3.83a)" // The version as seen in the Windows resource #define RC_FILEVERSION 3,83,1 diff --git a/assets/mods/Ultimate-Cheat-Menu.zip b/assets/mods/Ultimate-Cheat-Menu.zip index 0ed72305e09a1f5317813570f8266add4289a5d9..0d3b85853e27f5a5ffe4c4f2eb2fb40e5c897604 100644 GIT binary patch delta 10681 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
gMcr-D6m5z^k~yo5SPE1jVlD@t7VV01lG#V; zW-hwct;FV5@=zrvXiAZqT*{nV#}&3Ye+|K(X;D0K#9NNVdhjcJmtVcn^~C7<*})vN zu~>-Ut!^Y%scvYqFuKuz4v{l0DoOU$3bvf9I_On+Xm=~IyH(JWfywQ}Va0mtxEVsOH&vCXbKeVVnQ0t7A-OI5uD#XGu<&QO|g}3W8Q%%FF4cy z#1fn!JK-AepB4mpZ9W1=d2H26a$2Us6>UseBRVZs*S9DnG#Z2_DC~{6g8S3 zApd}?{dEJsFik~*dXMiueSoJz^qq;_8^}_d>-|sf8qNpqZf`xwKQ}O zsSSMP`|3#>p?eSR;}7-#32BW4_z38D~_4U3)XzYDHe%n1z!F5kQ zE^Lh#r#bFJxWOwef2@ZM&2R6{@IXP@+H%sN>=|D%sT(atOY`5jM1hV2MP`!ZzulVV ztbuo)D3{TdN1i;h^92(qoI-w0^4=3+P>9@AGsQ`c8?Unqm$aPZxY6baXsd?j0hbV+ zWMJzJIq%S*deC*_HoZvu^a8b{K9_C!SN*6j<@sq{D&ob$}m2zlPu?&f*!&>buq_;30`n@&)6vrFXop#sbgQb zm!bSkWitMWAju>&iooHH7rzkrNQ8b7Xc6dw>+a{R%3AzKH9nl~I_)jWT7kYuz!?za z_~1-8Mkrs)e_2d1^&A>Y(!5DohW`RHjlO_w>e?|93Y6WIB&&s=mOsxeIjY*}5WypK zwQw&GxMQPzsbVpy``2{pw4=z0uwH3TMnKM9Rbxf991~u^i7UF7YLkpDnK_)yI1h zJoIh}6jMi&^+zjrO>l}iqd9M^tg&Q`QgiHg&b-^sU@=1!^$(a}>K&`d3H8QDYz-6B zB_*STn&bH~>pJWukDu1VXnRE{JATG&t0lK*O-&B3^@JRV^Umq4~hNICp^IRe8HpUOWl?=`jeNrn05L@*X!oxMf z4>gb+>}|TMtiF>N+(`@smoAI`81o}8r&1BBgXbq)sNZ|ISJjyn!X=FcVDE3T(f!-$ z?A=Z^vJPqI#{fFq8(dEevMq_dWSP4NU$J`Qf2@DCIxt4}6 ze~`_7;Y88(;RX?JBX{Gkr`JdpLf_i?=l36NHRt$2KC_`kDt(J(<^mpwzdnsI*qDRapvx5;U#$+?hVfeo*?i@FfC+E}K#y-TWQ8)$9I zPGApjwSvTQ=qW5Hr*ZZIBVvN`0PAaZf0rl;{`QwZ)V~P34hA<;gLFyw(|VtZOonF# zbijg;pkda4TtJ22evX1}*KeoSiC2Q}q3%{Vs?dpY?a)SjXGc_R@4CE$p|c|t1ha!VMk>=OQC z4OkQT!_F8UV8y9CVulOW{U01Kl}m(6!LO9}Nr5&JOS5;27G9Et<+#}He*hxQfL-lg z>w(i}k-3JC5XU5AjAl$E_?`-@@FRXP#xV9(2MZ=DJoW5ij9&CjWO|oFEaJ{8W+Ju` z(~TjN!+w-0wB+Kb9N-2lZ=_dF-47g^);v7s*?%L6AiHqLFHlPX0zUv0000080GU9f zP!1OAMeQyC0AVr#01E&lGynhq00000AOHXW00000O=WI%WMyV9ba-?M03ZMW00001 f02ly~nomvQA=UwrnomvQA(LG%8U_|G00000Wy^d# delta 10649 zcmV;KDQ4D*U;SPeP)h>@6axSN2mo-TnowEUEOFs3002;t7bXp)%}hHZgTOT0iokCA zkxEB0GBT~<*Tm@73H$T6dau_ZwSif04XqSiJ+2;;^N*x%bX#Vd49!;Ug1jd6Zkzr2 z{o9elgMYtGe1FmMraol*&&!utIdkIwCXm6U-3!^nSL+4hZ7SM?kg_V~t|JloU!@qu7>EJ%Jh!68^O-CSVuSHUZOV(+R z9WHC1f5acMwc<=B!0#Gn+RcfR5$l^UfE?a})$Y_&+X|!9zj|6nLZkfYxHzp>3zA^y|_PJw1ZATUu zH+ZU0c2{m>Lx40w?!2=`IdE((QdC5T1sSNYgAWYsm8U7t~t<6<@8$u zX$*#&T28w&V9+&M18B>^s7pTfM&zmmCF`1I9UI@M)yzK61X{Y&vMd~xavC^H&U?cP zV)Xm%R?T2TH-%dk?~z{3XhT+QlUN_Ep?}#aY-K16>%MO9Dy?g8)oH|FW5*;-qhng^ zQ>RzAHdeddf+06-e`M{usnPU@a1E;Yf%Ljrd1}4EdSPl8y`E)4Mm&(WtkK<~B_P@* zEZsCwRwb5P7Gm`vF&5lvXe4ShhA^fqvu!ea@`|JdPwLDHr(bQ>(I%J%7^xOn*MH-z zrj3DVVyjj+rh3&HUVwa3kMqH32qOa_tg4p-NZ9DZ2+}TA*Ss_bkYF1J8;*gtQl`v841Mm{{ z7HHmg*;rJnx+kyyg1fAP@w5r+*?+mS<-(eNwLUmE&BkVLt35!^jb`&>Qx1KM*}fe7 zem?4SEOp>@ddxVo;W~s2z`edAsHLMWdh7bAZffVUKF^ZlnggSM(W+Um2$<%p-r&P4 zk~g`7;%H}Q{0zp-_<1CUuS^1_2Ic7+wGaB%p>{E7SQo}jM`VDL8I}tlD1)? zX>TRy z3qzvGv*-_cKZAFZh2GYCjem61w0q4~?G+z9OgF6lpfyDA)vcQYP!R2`q1YKYW3|hv zTqdDkC*-J5T;|UCT;Aw@AV?B{pCY9)>naBUhEa#HH#C@{gG>Gb-Njz~1)C-2D*S5# z>n~j%vZr+j?!mMQ10jq{K7FA?&!(YM5WY{Ch8*s@;TG++;R*x`&orYb0ojj1IiWT|qi3^aoktJ(*K0H?uU_C!#hFb0oJgWqwtGXOdEm#hIk~f4Hxxh>&mX(avXWs41h%|e zCv>h|N+O?_9$h$8fqzAIFr$$K?7%3BXb_SqwF7eR$0Ex1;%g_AFpYrHzbK)%G`NrE zjyDrAQx>f>h)_wxb;%9A4_}cxYA<~c{;-3EA0$aQlbfksIg%l&a3ZY;59wm*2X=5z z7WOieyQXvBoe;aSLHHV4f(ADVAlw9Sc)L5U6Ww!E268r*$$xcb^GM0WmE>!4+nZ6W z0GZIpcHFg5BX{Em2U^F5{})Mrrm{EATA&0P&@c`HI*uTHdqS43eNWRK2+}wS)AUIM z|II1!pj+2l7eB*CrQZn=Lo!vf`o8$#)vBd>`|*9PRi+X>{jh%4>g7_5=plWK zq$t0O-+vQWpKs%;w+Ykliwzyj5-2QLW3@d0o{byxveh2pO8cf%BQIhpZ%b)4_L5Bl z;48yT=`Gzj@;%4qiSBYZvIHM98g)ukVlZNIrN`nyQsZP{Wq*`7$#4g(I7#U}u`Uc) zlTEkuEfe$@hX0^dhqXVRp!K|>@qeJm&s_J(xqt5N)-&cbppfjtmo$I?$ZjWQ8`60X8#Et#-FoVOp3U^LnSM6YpT|spqTXYSG{B$4L_@kd z1{%bYNz9?yXTD3hKLgG4+ku7V3BBjLf$7OHKEr*s)6aJL*-n2BI~_)WGo=qV)Exf= zmVeq}2^X7cUVxRYJ~V6H?cs62zA=R3^68P~1|EEaI5-fs2QyCHkY>g^-*y-EoLGw% zoOa}ufXT~#Z_4C1`-YvAr*B+77D^Rr{|9=qlTlmG1{{eVenas=?C3E^ex%RI;qxti zj#S#{a>;LgFrG8ZS_$LD0&E%!Pl82&@c|o?LqLgD|3I z2NOYhKqtAv5U$96q^|4V<%;ttL==_357&2-7z*+M!?Ozu0s#WNO_L7{7y+x3C=AI6 z2c!A=u> zvsPXeGl4a6Fn{Q7q(=qT)=kjOKg}s1X2$i80rlfx=~C^JK)nEOxtBQ!#LJ_}50cX8 z5d>D2RQL(`L3Zj#AZGqk#*P8HEROav?d{K;Ne8e`3urLakNbaoJwR0%2ha z6H#glHe7f`C~I+bxUh_*$qEfTKgFn!yt=e$7($Z=vBwIfjx@DCP3V|tGiH^~V}1YH zE$1u`48RB-uM7b!CTAj^E6k%RnqD^f9@I-PjDNks$AW#n84dt^X$Q!u#1Ut`=>?C- z9htX|G?tTyO9+>A6t?)h2qvrHT$z8aA}tmtaXH5YwabI?m^=(H2oi!tb={oxJ&2T~ zVUcN0dbjaHUT%mSb0${&3R;3$?JL*>oP)e5-f-__qXARazX<3{c%w-3nY~P1?TLSv zD1WemSU*@SuJ%B=uvjSIjaNsHMYO!>Av6N?8&IB6;Hizknk^};bWy_(SFdtNpdsw7 z!DANU41S0g!_WQ2b?W#GC@fqA59OkwAj*kof5B{3Kbgac5RC0jS)7D|OXF&#Snwh5 zYwYRC&Wy2!eeBB#e$Ed z!3)ho>`xM#YM{IUq2dI^UMx6W06H8v*D>GHlwe#+T38Rp2%AvZ!gLV9W-=ZcF=Xvi-IMt_KG z)(`UiGe(G3HV(l{<;wD?it4#?rFm3E+F_?|t}u%cW$$36I9C>93SXLg07)qA@Qp|#;K;xhRZ=WZj#$zeFtEeuDT2tW^}-hV=;6p!x} z5S3~Pe=bZ?C^)nzqN;G;hbTz)8sybySq1R&}HSXFYy;O^H-VpAlJcFB?1zLcI-yV z#!3>7!Rk9~^7&f%4YwqI6|F8OWScV?lEowu@*FQ#Hi&sx?x}+`?v)~5V#9~G8W+j0 z$q=lX<;)y$;>m&vSI7&O#eZN(C3#Cb#AXsa@MCWh$}4-Ys^bT7m|~SpolHbZMm-i{ z=k4(Hrs*+T%@eo~m0>mwBoTr!X+(*`xGc6eP2-d+^Q#JF5Wbq&_b2(n$r(8Xz=CD% zV|8_<+Vcn=E-vfRF^sQq4kV3YF`D~(7-QKHjL^b?_W(Y4cFfiw$$!{~(_PBai+P3O=^!Nc9zAmNZEYhnPzM$WwVEeO0w)E?+58P zW)cp;^0O0gQZ%?%+#qRF8=Y(JWSIHTLkiY(-b0 zLc!pehH^9|4SacY5P#pA&cA{0FkT8y3Ujb81m_Zu)J~SC z?dFtDEtdRlCyH$YatQ@@KX&~kwAD6fDwL&Bc;l-D@07PcK7Xt$rhx;qw#Rk|Po-41 za7gLS;jjmH5r;pbqj&;ay6bbFCrH%(zw-#`j*Qo1o*vy`%;cw*7uODjzt`#ZUumFn zI1|^4Eeg&Tmt-wHCrPB5WE5f~4(T@8({RqVTVBB6b{!mr+6h#?4C1;ufnY zSv%niOq8;(LJQB?r3SNncXQ=0-RT^r+4WplZvb#vyZVNsw9Gfg0GLNlEn`hWGL#iTKYZ&7Yt%dTtN%UJhv z_Pxl$!~VoLzGhchh0PogmG4c!$+o0jGr?7;WE}WD!UcaEG1q-4ht|jkPuWJ9L--8~ zmLGF-*vbo^I|~quTE)nlxAu4rUnv&I8$?-nvDJFhJ;HJ04Q?$4HwTjT!CpV^!&n+@*?Ly3>??Lb|R|f z{OjEwjbqUYyUW2S_k%SMihDKmaJ;-RBR%ec#9=|5@T59ZObC$jK`Pn8{j zg~zSy45Bv${6BgHd9nT42FmN=U2b(!s2paq@Dc(mvpO%-uovr=LKQy`pciPMH7m4O zG=CG;n-H!WA-x&lvkTN$Ar36BNdI5wsiS5bQ%2c1qKwLML}|t2uyX2GJVjhrrZRKH zJ@bgqeReZ($Orej){fZ2L*CTVA`ruQJkz2NhBpcL-mngF!0%}fVs@sO=&*)X&D2;p zK9B!`7qSYOLh|CD#>#R1HLOMHIDPn1+Sx=S&8f z_Sz~NYWnVv4>(m^f7o&P(u0q~$_+scFP06&LML``e&lf8G}@Ur(R#^9%YmFzynjgN zczRx>0T-L`K)j|Ki6dZaYov~7xRP4nL_lXW+({qKfTdSv)VW!aJ_@5&C;*QCIM}wY zm7Red&z*^9gY4#MQsJW%dL}yUs4{js?XFUWTIn=xW1V!Jw!vO?pbF6LMlN2eGdZM8 zmu{fj2WadL=oOw_8M|G)y`yCcuYaK66Lw)z)Muu7@PA@4z_HdHoMLZofGPma;{f#jCfR{6u%e>o6=- zO5X?GAPK^+`@B-jxU4LiQ-rPq`aIi^G~CF*NwJ!~w}#3GF*yO*TY}O%@_$^y^6Z-x z4b1N1I!pd=P5n!2311;095lRg@X>6k+Ax*(?_K%o6ju{CJD^^;%MiJMr0P3yE7_pW zv3R;epG%if0FKaC11?`$891z*N^neB#o#Dy_2A+ql!ODystQLvNMShi0cyj64^SQs z)K?)cUs{nA7_Z$SE`c4$Lw_tg^W+bBenrc3v$f-E2Pm!Zba)a3vW4`X2TGO;-dCN? zHwyD%qwrIR3m0%1WSr)sBH`cM89_!1qVo z-NUOUVo~|q7xLzZJ%Kf-IF#8KWp`Y|P}*mLy_*}kS}-JNpvr>!Q1`}B?uE~&DvP!! zbZq4{iM8-`@eh7re-b4zsPGwCJqEC*JgS-0Rv|84N|89^;p)Wk4^=9Tet>Fmpr(Rx z;j(JRQTocp<;$oXM}O!l9+xhqejHLl2|1vIDsn(ch2)@eYRNJB%9+Tshy!F5hw~W9 zj(Ei*oo8On2(Q<~)HdXS~rGd(M>Y z?ko5Kl__rwSt9P5S)&Z8LSuP0V7josPi9F9IGNa%HOx*{d4FeL=M+*J@a)+G)-yDw zTM}vWCq<8PZtnAT>|t4}JQ`w1z@uYU6XFRRPXd6$Vw9awZBQ%dE@JRjRiImksjw+>#9HOt0T)u=} zCIA+<&$Wwfub{NeOS4U`j6wf%KY@~!qWUW-lOeP!&NLrdp9Qxdspb6X{ba zi&IhD2tb@h@q$agk)+><(lt~eFJv!z*?;-Y4M&}cB|58Uw-~7ww3)TU7wP-(Y7=Hv zm0PTOB7YSS?9syJqE$(>Dv3h>!-{H1dEKjWOI1%LdFTMNnG~KY0^1yq71!mu35OPFSL`ZFR>A0@V z9&2IJa+94(P1X;5_6|7|s}Bns9P>uZL29%PJbyU_-xSNb9UgmMa?F{CIjbD)&B*Fm zwF7@CWfx`+s>Ghf6f0RUDlgy*gX}=d*mYwF2HCy~YcZLn+hXd5{wD{S_7s$U&D?FV zcFA85g5PlEu58|BlZP)S0)Zl6Rx?|t7&}!BVd%pE4#C`W*jq7^w@SH|F)W<$ru03I zd4DHj-sKj|@O)rvN$tNE5#LL?g-*nVmO8h?!~y*v)#itS{;X4Hk!89v$y+QkHnr`r zr{~~c2+eHs7So(|sg_;FBJmE=vdZkQWTlb@E4wV3WoZn%?&>Rg;L903I^nRlB24O2 z3l~(d|1a&-VZ4)yCiW<2z1+6~q34kA#S%QE9&LbMgoQ9xI($ob)n-44lL#M8f4!Bm zkovTVuZ%`MX*-K+pCjH$2&qr&4o{hNq#!7D$qI}jZ`YB&xdpPBKt3k&cr;VJ~w7CqF}2XuxZgCO9p%^0^dqNFdMAh z_))&JM(;$>JGn-YkBxv6U7A$tdl4ZkHF!ZLmkxtWvTz(Q!lBdu=k{_A-;@%4iQn7; z#+f^WGs&2r$(lc>+-sikzF!xW=`~DTa;)Z=Gyu+I$_V3;f3Xh5M{6e@e^@t;dn4lB zNPTmC4KJg5P@PNPNpd<95odD8z}a&9#>Php`?vr!j#Jlr#s)%$l*U094!uMR8;&&K zVV3~D;n_`cd?)7kF5i)0b`vMd?0XUQz3dEacY&zZwd*8p@q>u?;d38;l-TeA+&O0V zjd#a;TdntSNTQ9ZMNDHbf4tbPUhErG@9%6hEBGx`$C7b9mh_5^qd5+b6i}4_RoU+0 zc^dY$fGOfsLY%6IhChy1IlPhN->C9ec)FGh@eQ7=WP(<~M+L@~^x)uW3V17JBx)18 z&j>H0!(tmv5$_~~%##8z+95#}2iup+RmlWBf{$v+`p&AkL>CL6e-#QEQ#|3#$Z`TY zIbP2JKFTWu!8kckg>E$kors{5oPM##xL}h43Z^}ESS*j=|5RLA;ZZYac|egPD3+Ji zW&5Dp%Z&}HU-HxBtq23E$Ro1E042)~|8wLhDWl2}a zty3a??~Dcz0@xJtPK4xiIy})7fZ|@EpG{Hnyhug0om*62f74rG7>h&)$$U zFI(`2WUJRLaOTMpZnkKYx%7=5{o>#1t|hsN7>J&LI}9sU6jl6T=a`W2HN^a?C>CNY zJ0h|)XhsCHf8rWkkCV_XSso;1Mh%ss!itbmXFihpJ$1kCvG7B+xA(H50lNEOVS0&Z zpJ#}UtqI`7%ZY%Fp*U_L6d#81S;H~E&RVUAF#f^_7)(TP_sNF{wufZ=iWxvmd?LKbPrU9TP#?l{{Jfgk zPyrpwf0W(9UJ(&}56~YTfAclM@i8E`s&kRKU{DBc9`gDmg6?7LK62mJp2N*VxIGNq zPZ_M=DLerYwqG1G!}Ku`vZu_5j~_WxgQ$JM4&N83@pB_>r%f6FIvjEpUapzVu-UcqUP2;5=sKV>35 zfDZ!q6!qZlOhp857my-?HyjhXP7A|{*gaFN*QXPq`w;vPUxdMh45Rx9BN4ED9AndT z#8dVGSG*Nel*YgQ>J-QZJSpvHjTW;tSH!cmODL)Z@nrp+TciC~|A`3w{Mmkl$Pp&z ze|PTVArJH#5QB!ubICT`5D(T+H>O+nc^UuxH?3%=>sNRX2M@&~3?4sOKNN~dFUb@A z4c?5ebJle8b*Q#u<^&c?blM(9W~)xPA;R(m?&<3E*Z`ChaT)K-=~P-GI?ooHw&fdq zj^|pmyrmtkeY~>cr_7li@(8Vm!8$Zoe@Gle%PxO@D_e^(e9 z`+I_B?0Vr0&oD?Zc`<(NCW zqI4vvEx_ye@wd{O%chk#V&P|}ze>T0bnSGRQ=AvueN^EW=54BQU+qQZHd*8O(D-~5G&vkXgSB7`~ zCHScx(UeS7EnuDl$DfwPC6oHIWx`SAw*r{hff0O(rWC2krOdf?Tw$Bje-Qkc7R4h+ zyyaM|2fxC1`PCa;PmHdg9n3)+i-ic@>PBLf>V`H8qZ`^ox~=YbN`v?;N!i7BpRRcw1yiGk8XS}CAnyt zfq&Vn{1Sl+osW2++^PIhf4+Ko_ylyo!Dp$+D*jC5e29%v=ps)S#(G=%|xra;j?t_-1Qe|d@{CZy49(Gnvc z!TIeo(;d^&6kF*w<{gOgfU^W)>>kU z!d+lx@Z0}8041d;e_nCZ2~?Lqg~jHDGjYPAr`1`$&ZW4h@&k;Y;Bl-wZi#Ub@Bj^5 zB=l3oN1~|@fG4dhxIb+_b~NRIOGdcLO=9-qF*|L&WM~O6L<@@SaX7pQ-VuW$&o$hV zHT-|cVEmhI23(ht1nCD1BZz*J`H*`L z>BESAC>CIqdS`_7VNjnaJmmk|;$F9xhv0nteH`fSSe#S`%z8Cw z5Ar$0=TTo8f4;vmdf|9fOGEdN+Q3)7ub#9Ky7%Bd{$LM~kk&|mkARLxu5QTD0gdfA z^9_Q(Mg$?^2WheyZ_@*E&k%+Q!XCE7Gn&Q?yo%PiM`$BzFvJX8=m0T(A^}h@50HWj z=du4$U++tV#@^@Sx7`C3T=(ST!q#|kn&Uo%8@$rOe|p%^{Pyk)4-}-WEhinyp79lv zy3ta!H2;lD6zDimWF|@e+pTHN8hGc4av5ED!L)g~&}cQ=H_u z@jAP3Ny|x&8*Pq&wrY4Da0$^#2DaXi^9~KF2VFOA(~GoEFHlSBbJ?bU)sOm8o}bn= z9zO_Gf68t&96-5?tWk=TedaSnAP6lP(89OI@dcq*%SFnO&Ye)D4CCWE$#SkK=po!w z7jsOQ;00IrjGf}}Vt&b!I`)No8Oq;OCgYz7l1xIQ2psNs@e6^EMCccR7J)9f?tb2? zti^v+-{5U!8&g-4Y~2{f6(j6(Cb-Bd{gzs!z1OxeSKJ{8IDHZ%yWgT z+ZaFiRx&tC^hvE0Ky1}l2oKi?Kh!{Su(#>1vieS9a3?VkT)Hg!W6Y1ZoJvKg4xXQI zp?>e-UR7sS2$wV(fW5!TM)z;0vv)hy$U3B*9|P!cZ*V;^$hIW*l4b59e8uXGf3r#) z?d=;E?O^+ly1p0NzMl_Uru2Nj6wk9zN}md~@>GE)pq_JBO`b21E1DhS6%5z1V@xzH zb#LW38MPMbcQaRGLseJ%?vPVsYgC&O(~;ng7y7h%t92x?j!f?4IS$w`{ed?fe>ZQ; z=9!r=HC1fwbO?F&vA2L<o zwL=^AogGoNz3cK0hR%+doO~m`Fw?*58;O5_U*v8p^^SRV@`7Rf#p%I*9w7fG4cIRw z&RxM0L09|U@Rex&2?Bc~f5Sa~s7N7hOiG?mw*R;m~`ZvUCuHMuI&f0_~j3YA(Jc)z>+3$Sq;CvP<}nHDFET4?AOcfEB0mh#4+e_kVD}R4x%N1;0|>Ck5I_ zEY036T6jqomg8c(e*=g#19r80tp`q@MdlhlLL8HfF`6-v;Cm{p!jJgH7{l0C9W0or z@YJ)5F?!KAk?CCyv4}gXn2Fd%OgDy54*OB2(2|Rza)2AKypdixbw6-uTJ!LjXa9{P zg6zT}zW`860Rle*6axSN2mo-TnowEUEOFs3002-j0RRgC3?u*m0000003d+vfs;Tl z8!mtw>~{GZ)&T&rgm?KH)&YPU>~{GZ)&WpU1qJ{B000310RUY9000Uv00000m34CR