From 402c146a538b9b84ad6d9ab8f2ba41269add460f Mon Sep 17 00:00:00 2001 From: byuu Date: Sun, 26 Jun 2005 11:07:38 +0000 Subject: [PATCH] Update to bsnes v009 release. - Fixed non-interlaced display modes from not drawing every other frame - Changed OAM halve to skip every other scanline in 224-height modes - Updated renderer to properly support games that switch resolutions mid-frame - Fixed VRAM address remapping modes, fixes DQ3R, FF: MQ - Fixed a bug in main color window clipping affecting BGs - Added video color curve option, thanks to Overload for the idea + color table - Added vblank, FPS counter, and DDraw surface memory options to settings menu - Added fullscreen modes 640x480 and 1024x768 to video modes - Added option to toggle the menubar on and off by pressing the escape key - Mode3 was not rendering sprites - Priorities were wrong for modes 2-4, thanks to anomie for info - Fixed a serious bug in IRQ interrupts. May not be perfect, but helps many games --- bsnes.cfg | 21 +- bsnes_g2.exe | Bin 270336 -> 315392 bytes src/clock/bclock/bclock.h | 20 +- src/cpu/bcpu/bcpu.cpp | 3 +- src/cpu/bcpu/bcpu.h | 20 +- src/cpu/bcpu/bcpu_mmio.cpp | 4 + src/ppu/bppu/bppu.cpp | 22 ++- src/ppu/bppu/bppu_mmio.cpp | 4 +- src/ppu/bppu/bppu_old_render_main.cpp | 4 +- src/ppu/bppu/bppu_render.cpp | 55 +++--- src/ppu/bppu/bppu_render_addsub.cpp | 110 ++++++----- src/ppu/bppu/bppu_render_bg.cpp | 2 - src/ppu/bppu/bppu_render_line.cpp | 5 +- src/ppu/bppu/bppu_render_oam.cpp | 6 +- src/ppu/ppu.cpp | 6 +- src/ppu/ppu.h | 11 +- src/reader/reader.h | 2 +- src/win/Makefile | 2 +- src/win/config.cpp | 10 +- src/win/dd_renderer.cpp | 272 ++++++++++++-------------- src/win/dd_renderer.h | 19 +- src/win/dd_renderer16.cpp | 123 ++++++++++++ src/win/dd_renderer32.cpp | 123 ++++++++++++ src/win/ui.cpp | 5 + src/win/ui.h | 31 ++- src/win/ui_main.cpp | 153 ++++++++++++--- src/win/ui_window.cpp | 144 ++++++++++---- src/win/winmain.cpp | 3 +- 28 files changed, 826 insertions(+), 354 deletions(-) create mode 100644 src/win/dd_renderer16.cpp create mode 100644 src/win/dd_renderer32.cpp diff --git a/bsnes.cfg b/bsnes.cfg index 4d0ac23f..897d2416 100644 --- a/bsnes.cfg +++ b/bsnes.cfg @@ -1,9 +1,11 @@ -#[bsnes v0.007a configuration file] +#[bsnes v0.009 configuration file] #[video mode] -# 0: 256x224w -# 1: 512x448w -# 2: 960x720w +# 0: 256x224w +# 1: 512x448w +# 2: 960x720w +# 3: 640x480f +# 4: 1024x768f video.mode = 1 #[video memory type] @@ -19,9 +21,16 @@ video.mode = 1 # way to guarantee that the output image will not be # filtered. video.use_vram = true -#video.use_vram = false + +#[color curve] +# gives a more NTSC TV-style feel to the color palette +# by darkening the image contrast. +video.color_curve = enabled #[show fps] # true: show fps in titlebar # false: do not show fps in titlebar -#gui.show_fps = false +gui.show_fps = true + +#[wait for vertical retrace] +video.vblank = false diff --git a/bsnes_g2.exe b/bsnes_g2.exe index f18dd6d8136c9332f552c30f07bc2827860f943a..2681758fcc6aaaeaf3e238c69995edbf32f8a517 100644 GIT binary patch literal 315392 zcmeFae|(h1wLkuBb`us7*abIXg;1leH411nP@@UD0kQ-I+$1DHg~aw^TvkMcUBDVJ zaTDF$VJ+U;TYD>2DsAo6+tSwCqEbotk$?ySieT|7+G?M;s32AXD*Jt(Gtaa8Y!a=0 zKlk%_-9LoalbvVg%$YN1&YYP!b7r2IH?C34ilSKXBod0U5x?}$&40iAkBa1B=R7-1 zd3x~fb2pl1>^^t4Z^6=n#Y^tEb;);cFZh@5E?RU)px}GA6f6lYDp;_nVCwZX1-IWZ z|CURJ4jtmsP%rw$@242d z=i~R{ZErZQ!|%Aizv8?Qzts!=#YZ^4h+=PrqRcRvm5tk;pRB_iQEaAcQx+AFT{ZgjTm_19^Ce5>e>d=5MR}XjsP2fAJixE^&yC!dNHAs7e;{%( z;BMA_@uUB9D@unR{^s`^4t&FbZ#eJ`2fpFJHyrqe1K)7q8xDNKfp0kQ4F~>raNwE3 zZBrHX+dowlzr}CzwJn~i_|{k|6dC`(1Bh1;AE5Y$lJUzZ-i-L0DgNPPe1n8nd|rxw zBpL6~@wh4ev1I%ui1)3ryA^f!b7tj+t!vhBxjpaxyP~Y&e`2c3;#H3!HMGrwbou_T znW$T1>snm%ZeXwY_`i%Rjuv=WN2GXY^niJWYfiTw9i&HI|X*F#MW;R~l(Xh4N zw-HpRKTISN{v0(QloO_ofU{e9xN54>O$&4dKUVq?$Kn~qpVa#mu}7_XQc>DEf@jtH z9wr1CKoHtyy}YBbVe7hAz|uNVX%WK{)lR@}2W;$qs-M{7^_$dOyo;d{YC1#Z1L{%4 zwto^hM|dpVSyVX480=LqXP#N=)Njc^*ZoYt70AOrY4;@+?ztYdZkyYHHCS%`QjFHRlD3riFGUiaS2~&B=XZPl--(Qk?GW$vE)~ zv7@*n^p^R=dT|;6lsr8=b$B8^=8M2nz!KYZ(KB+1Rb$CP8x=4@{m!$H z(l(a`VboY0k9cxIs$y$<2Dn3NrmgKU1S)Oq-6n`d?s_z<6b?~s6{gm=Az4aw!d_Mo zIH&Bq!058i0wcRTB}%s^2SzUiC8Fy9HOgH_Jt0~-p>1c-(dC|C5{mCLknRt96S-|@ zIx&=xtABh|QKCE6QMmOjSQ(Y#{laIBdWV>I;~f#5Z`-q9h|C&i#7#vS-?=O?hS0XG zm|zOpQJ{hXd$j^z7DGFzCgYi=R%&$;%DVqj?OA(x%%Zftegj6*jO4s;`{ z;NS&Bu2+~6UVB;uAac?o0FkdpAdgpeMGXf>0K#zr)iyT6`m{SV9MKMPy^ztFivO0X#LFZH$yPBav~|Ri)}v&jgd9Y}%$1$C zwz)8K3QtaDs5i@Y|MhrDxY}<%+pR=BcIcQ9vLaN42^2w(aOPXDDNopwQT$e=r-Bf-^2@L>}sJ1MV*HHQIC~cYa5c*QI8hx zoKVN-p2FiA=nXnPE1UiAl)Ag$>%6J0H< z?55!DOaLmS?))rSx@X|h*9=hl=su-~e%-h9;fB(UtauA`PO{<^yck(gmLldEBuVWi z%8k5OPt@eHkl(BGBF3=Pzo_nB^&d~Llz|IXk|k=W>6Ub?N72s7O23I0Bi3oas<%Iq25A3{1GKO(^YLawFGi=V`6RW(o>iQHz^ z<*x(NA55j_!M_2vdNHX5(f)5I4tA=x^S1g6!=B-K_=2!!gdV;y>^Vyd`_>_2*yBhX zY!ZijkKv^=ZsW8ehx|ju%YQJP_j0&yw4Sp(?8(=|H-ge z)x%T5p0l-ZW7sn)I?Hl-$5p#*?JuHGDJCVY>!3;k=5WJs*`G@8{kawa1xOvNr1fzv z;w&9vy%yonA%3AnjC?5j^5I*o_&b9C zp2dG1{5O~X=JDT={MX5U&*s0Q`0r@`n~%Sjci@jmj0VaJ@mz`L8a$tmb}MH54#s1{ zlZ)qEJmc{c;~^R$U1Ej{vsgJV=<*CUg-)4m_mhAnT(Q|>+zLp~Dc+BPGoeHf6g#4` zUBl$GA$0nhW%kz7EdX9}ZtLmI_+5T>>nWuG@55V9B^vQQ`0|dhXK({i$P-{1m`9)- zMMgbEW6f+=PBn&jd;e%?Ga4yP)d{b4z*HzmPEF-aJdV00@Z^E`33&9jpkHk$t{0nJ zIW&SC7u}V?!6FO8D-@|E>OpJS+D@V(v1w;Qy;j@(afH!ck9-T9s4K#x$TZonMCyt( zom+)@3XQYX^=d&SW?6C={Ub6Bphi0g2}^cr7!?3bs!?mT`s~l?ounT_iIs-Y%I{#t zuZ^Qya!|xzNK`%6M-Hk1W>WaUFr!iN@6-B1i>Da`nQ}2H+mWP3Z{z+N%-_qUs2*0nw zREt2nG1Wppgbw1I!djKcU4gPScpy^O-9#laUP+x^qE6R9tCRoTEw}oq|CyHK?yh>L zC;3bKy7NZ723&SlS%K*ym#6)c^{H+idgtHHb8Ab?Fwb;%2F}CU$pK}<%SzkN2qCMg z*)9j#Rb6`-W|kg{NiK(|?`;){p92d$ztesxtoPAmuk7Josi0TN9;r#&q?EKB6l0Ro z79eR;yor~MB6g4)97%b8ET562$wC&SQcoJ@SFl?1o5b#}3X7u7JeEiht;rF)sz!{t z8FE!C<-D#wGQ(vrmTIA;xn!a#aK5m|uAg63oyeU}@^=gd9J~KmUE%#QNX?kuAoPeZfcO0{?ty4RMwX-vVv(h5Qs_h=X9JuvVjW zxlO*D${iw?8bT{aWOz{$calC#mg*&@@!+dq-p%?+M~sF)AQc!RMmgMim~t`G%dJY< zY;nyRHjo`x|LYfKrTB2T!4YmaE8H*wGvsiCGu$vT+>jS;$PG8-hZ{zR8%Bj2&JH&e zgd5HYH+(DHFecpK3OAe|Za6R8aBjGvFx+rqxZ&I3h6}p0)`LHhhMaK2;BbRo_Bnqu zhC#ivO-fVkBf)IhVTOo7HK3XLotUI4bDOTr14G2f8c2pr)jHcCuu{)!s{wvWMSt59 zZm_6t98Dxdm$Ac%&f=ZL`yK)ZyVNF!ciB9vC*~0hJ3M{y|`2EzvTL=d>RVTwHuO`p6){FSb(9#=%__yn=%#I#qLL zkGb;$bLWxF?9R{@3;lLgL?(aM`Z^#L~ze~lV>~Vd{mIcNQWKh}fXQ24_VDW+Zlg`gA*&lQs$;#f&w2*L3j+jE7 zme$im3H9dY)fzPgw)PgH?sM8X}#xL)tM} z58>sR(L`m3_|&hQc(U8P5O3Wc=OEZ}yFJZryop=_7g@1YIVb-zdVja4zykHt`nFO+ zAo)k2ty;H`&A;0-w*c^wy5?@r&6Km-;{zJ}EL3{wXYr9i^b<(q)XE#H zbLf>ied0;*uEB~zGBoCbV_-uwX>kyXVXVqY?6sq0fj{0vwOtI77^`Ur1VDipEo>NJ z%?a;f%(v}lpbhq@(_wPM&)dKUdX2=QM@xFMKrfb|c8IpauRKRZgZS{zi1^5TG*gT` z@EHE8KYWbq@c`Fjc$Kh&46oocOc?A{;sF8{_A12B?pwb|gEOs)|0i{u0Fx>zbvrC; z_<@fr)eURl)}u}^j7-7Id92CYf~jS@VHKK?gpHaqhkg^eGf4H`NA-b~HHT&kUW&n* z9V0h(*y5Ff88E2@cmv;>1W{0e*Z34ON({24%pB&csn z@(=gBL4gD4XXAApZ5=|Wb7+=@Sv{*!bV(q5pbeyun3=#uF)ODEMdTAZ9h0`0mW5%u z_E^2bo~T|ZmgUrmtb}*ry2rGh`XREd+eZCxvBMKt><|;_1(S(wUQ}t8y||+ZHu2I< zTibT3?`l^*ksH1fcKV3NuC5{>&81m9_T98?rQqEXVJ@xiM5QA-c>=9-t5BH&Uo&!g z)oI8U+LjX^BbAQZ_S;S`h<5pWgjg-)WP5ErmPjsMB4PdJLc!W><)rA*HloCCZR=+@ zuj3l$iJ?>~_5+AcIZK*D+@o4`yB(+lnZK#QlTsZzYDMD{Q&Ce0px!m+LzA@!(P-<) zAW~CXFWlB>r73Fv zN?`tnweU&+h>fJ43S6r|{0RnoeB0LFn9 zopIY0_ZKqmE?^$p8Jj&ggX+MIE-I}pWy4Lu^EOfkE#4XG1~X?W;3>Gd`T@z!>(2z= ziBFWZO+s{Mgtl7@FrO9gM9$CBv+bp7fn-!Pv?Zf5R@O)*2itl+plW$sTFp|`Dn7ig zcRZ0oaI#L>$d5WbM{NK*jgXuq@$3OV5ps`bxE?PozX**(`P!B=~hAeC%b2={IA$QF95=1 z{~W0NKD~48SL&Vr*|QsLBZYP-jbYqf#i|l9T=q{%E=bVT%U9{1OTM^!79_hTsv^6m z);lBDe-`|E{IX={lDw_M<&GKcd7tXVVv*{ei%Kx-7Q?w; zO2tjU#fSC&$;x`*{t08v0R8hES)IeILC!%ht<<_%WF90VUL(T1k4xbPn7x%dSuM%Ui#^U+VTES{oE6gvVam9T?1$N^4}5on{U6PSZWS z=U@(EOt-?p#+YsqS$MT-*{_BJkB)v#jhO4QlFJ6UslbLHvLX%RypdH!(&8b;yD`9H zecPb~9R5Lx1Ac2Pe+qsq&_#&@=3Y2A9Vk5%9OgISw>OA=1*<7;!C$#E5FAgo(A=p& zg6UP3-$r?0uga>gp#hxdW0gpx#Srb7VEUz{Brv!eQgnhtN1Y(HWtG(w{1)%4jw9=r zw~DbPFuS8XP;btyVpt6(MfQ3x$}dACChI(*M7MB4GN^m-j76JrV$p~RCZ=~trdcOV z3&kX=J*s#R)0aaq^_%4u2*UyYEyL62^(FvHQ#~?>mi|iB3A{S!asZ zR0j|*V4u@C5}YVzSwtQg*CwE(sAmW!b2;E;ZV6tyJVQ)W(|}FZ)LVtA^>rAt4eb{? zY6nUXZ4txtnv%mA5iV%Z$N_EEu@tiSGtFB>oy)I`-9k*O!hE?Jy{RC{H2c;y1P7e3 z3KGxi;0q>Bq2)$k0-1wZ@5?ZtI!WZm9utGK2|BEcT6v9yVh0kP#K^G}vX9+^LOW67 zR_q~7b>(}-AOnABwPrVZ6R|x=94|gxA6t}DQ(NON3O86`#34>Z8Z3$2A`k`IsCI1C z>;**_?CR{1S@~j?Gg4O|>KtQFkL`@Caz#9a>9!Z*zqAEmmzs7#XkSF}FQ`hqDtJDP z7r&Tn@#39lx_G}$R9UJMuW~lLE@T^03jFpy;EU41@8|=*xDWW9>EKH=@VTxWE>OJe zw;~FAf{@qHmIW~OfwE0BVJ24@7Xvkf=S)bsWRZNahZ=bhxiFv2)?NW$AhNKBelsfW z1HKmjG1|QthMl3KRS49T2~P=Lm1@WZ{wL6Hs55B^LwBIqYOi|Jam*)DeY!C)L7Jag zfVp2fT2>7)1;>ySYEn$w{p15NjwLukJ{@|mp#5T!H`t%4Fp$ry-K)0NhdowX`=cP# zP@k)|_NmX;s?LEvRapaLxS=Yxw)IpRdWO~=OB$@fktGd7Z0)pXX{=9trCy)-LXnpw z;sx*&dp*2}Jjz=`#58rqhbV{nSMn2D!3VFQ%_Lm~Tn=R|`)*1F45^X43pWe_5$ONe ze)WvQ${zh6-XmgGnW!tNs>W-X?o5LHs6FZ%l$dIMuP)8NB3df?ia$ha*iY)G{2SlEp89aEI#tDIi6m%e?utO7ek|v}+&iVuyNe3Pv zrQWxLqk(CVfd(Xlx-^_-lhi@l0xWG7tOX~@Jxc#l;--f>X@J-{i$XybRthakrY@({ zg_!QY!#(A5i|zhTF{4Si{_~-$-B@YU_UBT{*Qc$z;qnK#ZciC4GHKKT44D87t@rHv zdh4}3L#=0GPER0CbC=;(`LABhr-u{kPbHgyx@k`d%AjgkWi^JS2}~6cLDMx)+4F$Y zh=3IOk5c_uZq$h&VjT%n%f=K98>pC+C|st~U~At5I(s(YkE}Ygtbf%zFug~qdr|nn zRo_hJYbL;0^((2^RMnq7sXJ4(TQR5U`HZYwT-jyRDtl197Fj)7SE3-3T2EG@6yYm$ z49vVysD?p?p~8xJxB7cj>>f26Kk;*Ay_Ta%$<$69#OeoiAv2Kr1kgvuuK~Bvnb9Fx z)Eeiput9(D_9zQm1I8ZgsRzp3$|*c|OmZvl;+Y1Sp|OJgZJa^->2*Ia!$u*Va?QnC z9Sq*6Nxkj{tAy`FXrqD-C+^DOG_;gZh$R3zxP-ocp z)O2g`Txhl6SffUh1D?9}6A&E$6LtLtj=%N~Y7in!T}8>YNN)XnI9On7pH83;ah1pq z53A(KkA!-iw)=~afDKij2QFi@xuqML=0X&V+hXY+(9ggljJEFWFu&@yCdz@intcY6 z@SFeGonY2*)<_YU^f0R^Li7X+=)rHLVz<(-_Yr`pi-Z~6w6*;lIHb3(`rN)mf_JOb z*1c3OX#C7?AduF{heat^V>JLP;4hvzuGvRVN~2&+Dk7 zm_!7pT;O*g4j%9oF+Q+>7S9$t)a97~WKaIs56Hip=8ZMYh|858`PW*gLIsE&idbyu z4yInDdXX*N%l!?ssphFIz4%={^(c^iLQ=lHQxWAWTmpVy@)E%l$3olK>pw@jkBs51 z_VHAqRJM1}pkGBc{+~LLEY_V!Osm-yp}C(E35f~$?hoWAO=)RPB$`t?%SmS;GN$C@ z?JM!ROWk!CEPKi|A4);2b}ghI*`Gw4>t?)FRo7y$90v_S!)fa_(nnkDnq4@0uTnq~ z71-vp6aRm++sJ<@v?MRW*Z@gS_5a-s&=UQhZUFa%X$|n*5_Hrl>;--|jahyCK}JD+ zy$JQiyYNxXAH>$?C7bCC*IeBvEO_4BWbtlCfNyS*yKT*scj-g$?&~Z~_C+P?y`Et+EWM1X`hKSIY$k3WLUCt(~89f6a>UGYM> zS<2%-CDYcax*EqP#83*Jgw-+hmbJ?NeYtqzrH#Z|%%nXAAl}Si`shs(#@-dYZ;*;R zc?c^Zt>n8gVl#0^X`?JPo0UP#2Zqq%r=VvyB}2w>3WDkj)%z$$s-8bmbmGJ{ZpB^h zR<`4*oZ?naU`#(c^{YLz(dtb4(z6M6-d^}j4 z=U}(Ur(j5^!C*H5@4%IOFG}Rv@h&FL2NVGmCSJw(=h%P>)3``S&=6aIfyC|wz6q3w z!5Nbh2lCa_BwqE_)c9!X$s1(|E6NKk+;Dt;4NDOx6~Ii6V5y%^Z*u=>d;!9d$rd<$ zOmtCnukVSau$auRsZYG>dxV0waPSBk2#BqiHX-35N@(JQ77E@v0L%(X@KFLwuWvEl z*=5R(MKH=cgs0cHkf0XO=I^W01qGGR3h_~rUnb3`@NF`DGldt*@LUSxWCmrQL*Yd- zJe$II$gr2fi)DBQh3}N%N(wKL;WC8l{dVw@sVbnPr83Dv;eZSug^u;KrSRP{OiYG@Au)imOr@k|PLj>#D?v;R z`l%mwLl_cBWyqA1uOU|2M6^!5f+1KV$bK#XtNeHACJfR6hTOU`;Czn_n07bPwYoV-Q9O3EaTNLcUOO1W$AbWt-ouqR^@%-9ykpdH_%Ov*s{H=CZg&wv=)_iZ zJDx?MgFB-3=sD3Bu6jB6t+t(kyr|a{Z8Y)wuuw+^Y~46E_j++hJQJGsP=Y4L7ioCa zHV-C(h;Zr=OA#UY#Gdf}L6LGCyPPV!pWnj747j>1rWCH>s2Eh0_9a344qYcs1kDCRKs^3QjyF z8BgBuuTwusJ6aY%TXT1l9m1>rbV;%bsl#R82E8zln0&_}3;yPwn=DwlFaa7maW56@ zRS(|7gDqec9rjYd8oJUwaL1rNL{aJolfi;XEAYxWrlFVmSJsi~pOnF85Gk+M$FZyG z5(jZyV)IU&AU1Kw|-vR7RKINzLC!8T}c|>akE)qJ)->bb!ee9F^o}R|~}` zzI)LQJqNJ*Nw$hiG0BwYkfLFr6HnKVcB*7#LQj+?m4gt9}?L22*arFg+au!^)IPQyA!6SUL?9qxd3(VNf~- zhLtI_Ppk2P4w9u~pcus$B@El~$G``Ml_^iAFwn`fbPN=u_{ikmLqcJ|z_6SWU#Jm4 z=hRF=b^zoK-qk`eif=V?#-|zbGN6nu((=-gHaPsiE3k!vC@G$;znC=T;)?+hR0Qb+ zvD)QASHSw5W+0e|&=^xy?M1R&pJRDWGZ|W*OFc^Kl;VzLtnX<|2GwW&tS@WGNJ54f zBgnOGr5(@D@r=FBt?b70+6=ey=uEe=3D14A+{(u5-O6b^WnQ70-Qm zcHkLO?N+AaX~(k(k7CNmHCuAEf0k@tLNegPMo#?<#4JXB?gjvGMdm5-r3~5fUR>8~fVrzPvz~OmeVQzyAi*fjnx)d+x9R!wpre%7+)i%OWq*%v<<& z>1$Ahy)oJ+r9DdQ7Vv0|J$^6Q`&0YyvkH0Z-^ttlcJmfEL=BVqQ7P=f(;wP#!|oDc zPzQnA>^fbtRo>^(v<&A5J20iF5wE2Twlwj^X&GGzb!o>8;(y8A7BfLMb`QSrZj1ho zt+6(yU9;I{)72I%t1>%(HvseqfY6p%s^ zc~svEX8JE@VBa_@jo{(CPgaTn;PbrxrfPqg4@Wo%vxsx`>oB&5Aihz#^IK5H=1T2&U6#7yG9PJND1l;b`dF4s+YL4$ve_-OkB1u4PlG-@~@(Kjp zAql8Wk~+sX0I!IE#gYTHNmA$d2H+Kyey1#bfuZy-;1vj1A_-VvAYcGq5dljj0SgQS z48SWQAW(&dBDvxzbdp_O-`)Y(1sZ}(gYVxcM@qWr+Mhm6Mr15wG9+-SeYXvO8I&w% zR!CsIiRbt>4FC)>R#f}`gGgY?pQcc%Q*7v;g^0P!>$mxi5hy7qNjyY(j&F5;c;d|W zt91DN>F~Y*;6c*e)jIrJ>F`tg!xKHtNqU$lW+v$I`dt0tiJp~Jz8yde(WdQONxwNm zR~k-aN+|*AFRQB4;2)xH`$h0X&plp$u8y4C9;Dv*0%;uP^|gSQs#KO74Dp((8G!yg zudfyGNfwPsRspeI-^WnIzN4&-4SI~%$KVpEA|;t@GOtf1_&zEEB!!ryBs^D{S$bpu zc#za4Nz(Citr`AMe|WHnSGopzxXKK_w?90ZjMuf0BH%Agr=JGIzVw40THk_2I(&-$ z7yH8#Jz-*A3O+?Yjjnz1gC1JD8t6&UPeX5Cc+f*DRY}ja>GbdD4^Q;ax>VA`@G1JY z^@k_^tWMIy@G1H?4FC^%V(Ijx=zrP>zitCYQ2|FHo>7~;{vw)99~8M94-c1W#N0xY zf}u|nBrYMSLQE4T0P8pc4!e};R?fsRS|(q=Obd|7Z_-MnO#XhEZtIt6Vc(K&@0V#& zzf5=Z&9t~*o$lne>A!M>T6^&^jc%F;5e=$q-Tewn`C zk38&Vrn4Le{?SfGmaj}^A`5382wp{*WE0DFx~Fd@R!zx#TKh`hb5) z`$ksgtOR z$5!Ulz}3AdJkJ`QH@K?;4$kv*2WRO{4e33mIab%&g)LHBAZi_vnfYR-bL>a(a1Od6 z6@{=LfKDt??c|fzcWEa0zCoOrg9abi7_qxCJa0mHE!jrGYsuCbUQ0I9@LICHhS!pH zH@uc?f8n)cLkzDaTV!}G*)+pz$!Zo}OP00pTC&ZB*OHA-Y)8HIJE3R+IR*Fk*xH&v zUo`YE{?gkV{Azb&;%xRG)}j(o&mc;<1S$GmM6}$1-NkpSTlvIeve??l>#XH!#nx^` z0P9$%nDr^n<+Yze{#suEll7k6jLP(cNnXW>-6f}}`xHl^+FwCRC}9o`0fxXtHcy5U zne=K3e7on5oH~eJGXf)fe#NhYZS8c7q~&U}t^G#`JYfwCr{yyah}R`b_sYZNm{+6V zczx7kdLkomXR^d#Qz&5x4x-Xr@f$;lEDDWHj5kV}>JtZGh_cI_OL545YklaiHo4~_PEbncyB0Ng5m4t+ zjd-__fg^2sjKk}{y*{~3V^^mUG}oWkvRuxh`f%H@M*xo}vuB$G$7mix8=lCg0^)eCJM z()m|QwZ!O_U3?UCJC-_=5~*ny<>iMtu&aYC&p!BE9X7vNq2=3uD9K8YlwtIhrp zpno@4O&ANx|;@f?H8za(!KBv5*6lxPFlM#l*F zLwmlb*#|M0N&6s}VX^OdkLC<_$Uuf*1e|aGY2VTw*3& zG2p8DWN&qJZ_C?OG)R8O+Zk21=U<5K4ehLJdD~Le@1s>r@L-ih44IQ1l2`)l?^ed(XF zs~sT41u=)U0QN;2{G&2`!-ylu>Gf?~0VLWYTZe?5ps8A#Aj@DcWZ-^Af&=JvyqNMm z4HWtev56;Iul)m%HG^VzOisWU6@!2Y^I7+)3@Q!uJ^UZ0>td{$8KM2uw1SoTz|i zO^Q&=5-MhekFB4nUj7->R$rP>Qh@BXE0~qZ3e52x>kmv-W%Kb0-|I=T5SZipn-N$H z-9Q7gW;>Y=PNmsSuvgT_;KDs3Ez_-(iLqz~7hf`yw9zb(sv<3uzi+17IFr$2u#j3d zEz|9N$zu^ovoqYmnHY^$r^S6U-Py0CCH*qdp}aIk1dwTS5%~Aqi`sH|g0@`Fia9Q& z!_;5CT+SIAI;Ag{F?su^=YNyS<6dofTxZAbvON1M&jIrZU{4_q0mt~Vpl9r$E;8q{ zuroZz6rPh2nPUmhv0{EZJ=lXQq0r?_;h)j6s^5X(zU!k3i?%)*iU1!8qj|6Hp!y<| z2WG@{J&x$q)<{348@%rSJyOVn;4W-s_t-(V5q^IM5;d4Fy8;F^qu8#O(`M#0gyWKrMNC#={QgAjSeyssY z-oz4LU_b<@4nVomq1;&APDzIXvIrL~qq%j&8Y=tzeG&eR7o{VCaVo;Z$!PdNf}@P$ z{Es9ms?o=JG_z;oJ=_Zq-7 z;%Uc2^YQ<;%ZriEN14G`S_jA`kn3fFqxCYWFLmZ~;1?Sw zB)jFRS!9%M4-BJDtF3^YaWfofQcGZVqxrIxG$H@LwUTDSUx75GucV3l(!Z^)y#tpN z2IfGC+uFGA^x`PQ5eO%l*V@hn1MpoETif?IkO`9{0&J*$9s>X$-TW^KWZ(?vQxq^G z@Hhe+QK%AsLON-01AEm+XVXH`Dte!%kwkha*5TyTJC7w2?5SVxRXZe%rxmNbdz4jw zsaGF_ZxehK*;Pa$+epZ&4agQ7kUeZbwls+h_9I3%wI8yl2wA3%toRe1ER#CRfa#(n zCORQNWSy?+OV)bA^jwWr#}uXv)ndT(rUXC*&%ppdm^Spo^e|z%vp*)Y`s|}AR{bc6 ziR>PPsmXwe+IOQBK16CBV*C43{Q#wF#_={9iQtO_U^F#OxP@p4Y43=S!UuDLgG0~J zt2v$nm-FC6`DU@TlX*sjNMfL&9LNh(_`O#mGLvj+r8|~fO&+O;hbvvEcS!J3nG+J^ z7$_&zLCa|ieT0{RoxRxX$JQHI!yG7F-&$ZJ0qg<}@g&pq++#>H?>_$}*hQRGzE{A~ zYW3IfOi$iCm~=#h?SavL!R3R+@8iouC`>%Zhy`<_+q^w=Dsy=~PW(J|k6V*J__e9d zpCuAu?1;q6r6kb@$t-%@cs(vdJ+@YZgSR~$QSjnK#_M`qW*65ya=*t4ur`FSCoDN*3+il=J`V{jm zY3=!3^f2;1S2u>X;HwoR6F4#Nu&thho-MLry`jQky-9O=)8qwX&yB0x%719jBK+Qq z=il&7CRrnFA`b?uKa##4QcRMgR_{;eB1mn8uS0?Wb{4zBUv7Z> zVglG-?0f*H2@Rkszt(`+H2}4sVWH;#a-)Bd1ny_oGB5!yV-Ej~z7Q&9 zz-(Oc8fajbvGH=%o?=D8z+|x3mIF|z_jpY$FcEpNuR>(=nqULKK32cfK!-r z1^@;(*mrEaT>qyqTlxbh*Z&%D3iD^^ow{YgzzukiIbcb8J)LzQ4*(1@*nLa`PGLT3 z1WtF~Ko`{AH?%cAJW_P`4b21rpB97r2Cmof7h(S-&3%J2N%sw7CUW1i_8-mjc|Bav$%qx~H8FrsUq|8%+z86KBH0F3_x z*Nm@#i=XJ0gB13Oq^$LoWpQ!b!FE}yzcB(I95sYl5 zTLad}97kl19Uo5Z5XTvyX)fDp%sf)ltOY>&Ei11>${>w^drU5Mb@ zK$ym+VOsg$z(hX(1Vq2SN1(6OtTdn%xc2Gsy;^bf>st@Sr@qBJO_f;1CDQ7KkkPMy zs=7&X6Ko;E_qb5IO&SFK;%a%5qW(AyXhAW6UeSQ)*Ea{VN_9yZ(9}eR@;DuGq_XJO zR|Y2lb!HmS9oLwZ$LZo@0-|4knL0KJF&G5JFukLOdYta4d7LJF>X6S93AO!s{Mmrp zQ`F~h!G-$nFA>o@ev?Q%wuV4BvsWGZ z2R*GuZT&5Uxy<{1ieQ^-Dnz$*tF4Wuvn5V>&A+^n$gBP#LeL};YGIgyL@`}_0Y?IA zI5Cki&DcX})JW=g`LZ5rhngC-4OflO)p2eKjT!LovDJ*bhlcXuw~~j+d;BHpMh=xGugPvyoR61@RKLd36Y~ORw>(c>L0+yl5*4mf?Nhmj zts}XCJlVYJnJF9-8ADNGBFPG*KM&GhaWQq}H}rH$;Ul&(UzZ+Ff+NjlrMm({!IViL zNs7uk;;#h%u?|jAq!-jI7`z&aJFuD}Z3CZ%q{4)?T3vA_LrGreaih$vUFQM&N)BA0 zXi-!vYV38fa#KCrhC)3k7uPmD0ATLKxPvL*KfK#xfl|P_v)rsive47IKwSU}87o#= zl%j~Gc5%0*^dw@Pu{u+v#@@U_TxZ>gPOR)ZQrdY>N$HlAB`_qcJT5*g?OBx}dP+YG z)W#BbCUCI*bto60Elxx#l*r1Q$V$@q2{htP;tgx!lg37T3h-%-XaT$JB4`&Y4Gmap zZ*CSd4GnlD8t_WlfNz$*2FAQr`exvU*aUK6LIc(TtC*=Z;A`A~HW5_Nf}_Q2@jc>D z`~|dN5Ze!FO*j)y1iLA#p$%&lcpR1nlZ}`qAnnOktgwR!+r6XEevRzW2Ohx(1owqQ zp6kWk_Ulo&)fRpRWPxF5;xo;6gVnKm(}2?WfhLU~7^E?BH7NT3A&q9eCXnBxG~S)8 z2utHeQG`x490%jnS5Qoy+KEgseG%DqTjV;_3$id8-=7&=qy8QcK-37y(C$UoJ2*at zo94nPOlhyo4^$r}Dg;v@4iZ}Y+_NAU!1upe?bP{S>D&Pl_`~o-uNhg@J zmO^K95nIquASQAat@}xkb@a)PhnE_&(R7Gu$Ja()s}=8o2$Wr0hr(geJNN69{!0Qz z=~47!pcGrUvp0rw3dyaL`wb4k*~6BL<*Uvq`AhQAhaaUnJB~}!#1sp76B~C~k~#O5 zeGTRe(#ZQ_=9~nh`+mckO;brG8AuKtb!ha`=g#%-sh`%&C?FKXJH@He&q-|VxmD~Q z`x4H==C7ECPctAUn&WIabzT_iJ&@UQ>OyRBk@@SG?fKbGlUsgbv~(Z*$_fI*O1G~Z zCgV%@1wSg?-kc%2#7jWpj7@MB??3TNe0>C%-OyFP2<>1$&d@eTy0p>#(fd-OMlyCh zbS9&@IGRy*UNEa!z*iGRaySucj`Qxss_A^T3 z22;b<#>+c!3om^?iZ1^?!?iDdzxXiOlBO5$Z{NA9AZoe1tf<*icI7I2Svh_^tE^?; zZ5~|KbWbL}Ezo@A+7)gFSz;}_a=FE_H=b8kj<5&eo$(=M-(7NUS<~_{mS2-GPV6FE z8orRkrnHxjWUJSRI-eRWc zB4!&%r7k5pW#lM%_$Bn!R;F-t3WIvYHl>M8?6&3m!dJ1yk` zY}Hvhfm!;8D+XezdtjE9fKDKuN{E@IB?GV&iR02(D%Dw}B8Sy}p*D9RwI=V610PFh zOp?7?yeFmib4@Lt+y`$>*L1N3{VRck1Q2&rg&P40PSSK>KV;BeFk}V#VnT;?-$3Y6O5wn zL5kBFwu>otlvOCZfrE2B5JJNveWK z;Y3T(5rEmQGBb?|+-&1`nAV%k$<6lJ#DSV^+`!G&3SvlrQB=Vf_5>uB$!0Te*CwhY zLufqGFmM{hSP`}YD&MRU<1vj!as?tLpaIKDRoerrNbJEF)GT&~sdPK>n#F!L30W`c ziUjM5X>#Ro1u794glMcBXnKl#DJC6*2Xv%_n6!P#Cc;{Jx24%yi%UrFgW;rc_GFZTsz90KQqeb?LRS zDVPiXuox`3x-Y{960`s?VE*bL7L%~i2fM(pJbVgaN{xCQ;W<>?f!0PR1c_8b+XG}w zz`WvRNjwii1*NzE;vPTck4?a*V2clfs%nxss>m*?yZMxP zA9YWvmU(;pGUOVEu!KN*bnvwB5FKE$JC13QDLe#F_VUT#AZ8xjw$%Yz3Bt`r8&tb2 zqj2pB7=$)4Oq7>hJ`i(C2Iz$vb52qQbZ*I*MHUS`qBLji8qRx_aki{(K_;+GP6!JO z>J$3Y)nA@UAWwxvXI^Sv2t5Mrrb`h^+9~S9EKQ_83rM1TFc(0g@@)^$0c%a7#;sTq z&B>7SMwgs7jsvq?G;f@nq0bwEqR3tPT3|Rn-I8s4K0gC5!4q+sH8w-P?T$^zpm{}b zINFKEdZ)+S2{H=eCU>%Zh@Q?>|H>^n7b2;PV*!ifWEMxuWz2Ea(0^HJeXgl2DG$W$ zEUy|NV9ZyD+m}c&+=i>Zg$iyK@5gjAK^n^Tz&lji??iL5(rS4F*YXgCi7dUArKhN# z0XzDReWhKdl%5J6qxWWu*cv}q?1+_JJa(7)gy@kJ?Z!?2<0Mr(5WkNl5%m`*#~v^3 zx~EF(fQ8~aX3V_6k|J>FA{3pE6by?%ClP6)PFYEqPncgdcgD{HAoVo+WOsCMc*ezv zIQxxEc8kH$8KwlqPyr;-qe-GaXTEh=E>21FYv}5pSPcwlPh85p?V}sZzF3+sB4$E+ z>fKyJpOWU<0i^k3l#-NYmrWE^j*|QRGnRJWBw}TWJ=luT!rkGSlrM+0rgD5;hUCY7J-;d4{rKg$MT0Ff@-< zf{}yx7{w`ZDQ^6S`OOx34q{ygqw=d%Ick$4kL^CN-Z;yX$%Ma=ju zj+TWw3)Kw-Ml9W-wgXB`{VlC9>=(#LHm`c|nr{>KJ?N5Pr@Bn*)za7u?NFbz*;6Ze z)!~QP&MwQV?Br{N$T0@wzk_~ zS4Ib+FHbqDV-FCe>I(#=#C|rL$$m z1iEKOE#lf7^+Of$)WBWXVd_}~jOyzYr98hL)%+UN+Sb@DdQ!ZsoCQfijgA2>kCkL zhzu`A82e|=D)kSAq|0;QHD~AgzVkPbvjg>g5yYmdCK5mR1@6AY^Iv#&;Q2eA!+3bG z!k>)}48&^Jg&2R~zJ@T5T*tMM3zF0|)iqjC|8x-muspV6TpEO^vrO^ZXauWQzl%|& zUNvJ#q7kfKsOt4R&g8ehuS1r{W@6Mj3bk4<4%K3_Q$2byWs0KI&^Bl60UEKoEMt*h z&6gETGpT8z zEzlrX0y;}iEgcm9MJSO77SfEG2+s%Z+8DDDL;f%-$qwefgRa-}2hiU&wajJWZ)+m< zx6m-LKM~7o(Zk=OPibiLg&pcraDuouueDoKCNHU*31Y{y%=5>gSSZ(%6lbj^!vx;e zrs230IGC}=%(%J_1+HQQ7;tYPwS?U=B6$HKG5!1j6(f$RHxi5;xGp1gfoh3e6>28J zq!T}fa|C1}p?(ZG2YV;i13@7did9&F*Y_g2c&&O9i+zsRHBH?Gz|!8O!+bPNt5wT6 z#fn_N=Y%ECL!075gvIZ-chGX#c3&^J6szMsvzF#@F1Wz&MGP}vVP$)>n1jz3$13gW zZ;yZ)Qkc8c^%SHj!`Hd*o{FXmwMkeYe{z2YR%ffg+-Z36&eDUnA9Z4~R85S|pf9|^ zHjJ-v<;iXtl$EMc7eY0lJA7Y*B4&qr1Tru0Tdh&20|dEYugP&kI7uFHB)=lm zX(?6Fb`IOUHmn|N)bE_n3WHQ&>o(GDsiB8e9yVvBzEQsiu4_}odJd8tsWUjpRFrd& z`ic4-1iN9=10TDRpIT&mw4Nz`KXi?b>L~oysXshV zDzZTp*s>{AmmF-kDfR=#eVU44;ZZ;2Ak*U~HpxxpT^N6XLZDz_`)@)2F-4khl4mOF6uP1OkTk>^YY+y8%Z@=UnO zfp}5nq8fCUV@-=8>>=D+KRjBVHTI)uRp#YeuX-6&gv+yn4*LFCce!f@YSUd_I0&qW zk3`&H#Pu%CRN{jW_!xo6g2M0(d1!wm=2DgIvdXA>cX^RFGoD4ivopKOF9%z4+Y`3- zCtxj~Cv%LZ9C=!fVO;f2H3JnL62FY!o*k75u8L!$_sdUCocznax5s|e^sJSlM|Ye& zwC~8+W1VM^<<24Cr>Jr^Hk59Olo#BzZ0K10=A&ilx4>nBJ0>)p1%oAf|m)SG7>iz zr4Zs9Dfm_f`!&%)z^G^VA58KqsZYVwK>lJF7sZ~0x2U8cFL+LuCl3x#3{EEkOB#mL z2UQsq*+^iXV?i9uWcu0RsAyTu-FVnp%I#;Dqm{aTaQ%AbfP zQ(ay?sx$(|1wi6^B2eTITp-DQDSAj`;d6Hhd-49p=&^?Ezv$WKB3o7srHH&K_{Dcz zdI@mOOelw= zMINq3>7M45C?t?181!oVuGJVWkCasgZUWK!B-1exf$7X@n6wXx55f4>cZlaQZcp}h zFdl_~JNRl$_G|K7Yxd`2Pkmwp!!&jtv1cD@5L@MUyD_z(tB}Fnept~ytXIT9Si!0I z6U-C6ZDjslGED=WPQ=!X>{HZuvT!Q9m)cAgj(M6ElJ$4W z66!VI5I!LMiuk&b9V8m*0UhzROFfvKK#24i2iTH((8{XvkL$SB@ zZTiAHjtD7kC78K^*1vV)SnIn=ON-KahW<7LM?_n#aNecS({(1)K`@k|Lm4PV>}Y*U zIf7nrN-4kxk25!90sI2xjG|0J5fniVcSywxW@ME*#x?b^yR6Sp>_)1`i6#u^U{%+pj$H)%)c&3T!R(;>{ctj24JP{0?3NOT_%Mt_I+!2#(eOm>t3n~ z(2Fg73g|Xbda6(|om;iD+2U1krt>|!*n;kW)(aiEC)8WCuADoSqZv*xh+#sJZ*v^S3lML@mV6(CNiX zE)Jbux%>iAj(Ml8EylTWWcjThC^(N_dH%7+s3nhX?WU2~9(qp+jJ`IAG0j0>*C?gO zmfnD|96&_`bh2A%!I`nV;{BU%2DXzY0d)_K?7eNvel=c@jD=TBhB$~=nVkJ<>wA>1 zw92tGTTHhSg~Nf3oQCj|5+RH~0as4Fq;Oyc%_Ig@rt>EVA62l2HpQ4dI}y;>gOjO! z*b{|yw6P)Vu#$?7Lgx~nE+9S?XnE-NNJ)ZZ(zWM*gjrNL|MHf*ET+I6Nk-*g8~mP; zQMJUVaDEXh|NnDNWr0)S{Ncs{M07?gGqI#N3kv{ComlJ)b>xWQbzbybW~82;C%h02 zc=7`bpSh^37MFPw+{!6lQz&%QNguOVnTd7MhzyuNi2sH4v3XdH$nlNFA=aFGse77~ zNUdY(<*7@!x+?7axrrFe&e&+DEyHp6egoWT4z86MuTc!Dvzl`4h4Ezlgs20SM;iq*= z$34ioSA2Bh7whBld}Xx4F0#+;fQ9A))+`q&Er~=XxGEES@c`#9-i{kv|w2f}Xi{}PB-@|hoo&cVe zc<#eP@`UMQ)PpH@;1c1n!k2%TubFDCS{SDlM^`v8+C^EARRV+@1h08nGTU`I}xVaMlF4XUUHc_~1x7U6tre5zK5OC&a% ztOH>P=V!!G2G!z8trm=!ssbgemx75ozHCQl4`fxSV7~>GU@b+BX86bB8-yFi#Ak_D z7}7Gt3kh$bHm-H?pq(1fuogY8{=F9#p#1KvO&IFbA!nH(m)Nx{?F{60D{BxJsdQqk z+vT>HumZ+jWQQ+|_V-bjp}ovQvmyAs&rqKt?-Og}d9CEGMqMnD6!ux38Yz^d@PIWhGKvPQBr7;T^Yc2kR*U0a)ehbh1F4F^EE-#_ywU1apUp!J zXIZM$8>p&ve7R_K#A8+0Apwg_R6QRHn7elgM@1 ztYH*MiROKMlX&}dz$Boel?h+4WA0{j7$%2f^tBf6BMNG z8v)fNs-3i&X)MEQV;$NN_TNDcupEk@X;6QOXdxtduEC zsh%>jcxRKCH7uEK?nK@JAnXG{Xyp#+S1$7nd??;;-WshN!qo?tlBl_pAU2^8*CZ{J zr_sEH8e5A7dPI(p^3iDSOv!=PHX~AemMW5%WG2lIHehjPXk0l}M+=)f&DtV=&AHFJ zmG9uG!m|+1&+xp8=Mo)=IoM3n2SL>+U|eneC|dCe|M91v}1bXkN{P_-XGKD8{Pc&ei&?OfyA($FwE?iuBdeTleZ2V zg89BMV5)k?4*+x+dn5qD&aH1DmDuzDvG+ajQC(I3Gf7AW7?KH1168zXjVsze8%cGk zr8;ft6kW_tQbm&`ryy!+m}=g&R&+;h+M*dYCik(z?^ zq!%uY{gy)YF3|`*=_-CwCy<(^5c2u{TIW+1AfzEsMV@H<5}1BE~lm+B81IontBbA_k!qmr4J|BK31k*@XQ$XO3_jU zwKPBOdcImL-i_!`0G!(1YvPc6YA_A5QkKxeo{PXB|YhOTxXImrZ&|-j};{UD%}R|AqElts@KrB zef3MnsZ)&in8ok$QQ$UJQDe6e|3CvaO-3!KZjp^uQDcH!#|61GN_o_MFw`KEF1r0q z+-{FIR=r=~shfazC<)$bf!9rVKQZv^*rZsk703@0@@fM)<|Rwj_X@l%gjY{^7A7fB z$MSU+`&Qu8_I?mZ*bne{q>nl=a)`UIMd)^uQXqUQ?k(#ceSNo04_0Jnmn#@o7o(bj-}=#Hn}h8__qsE=b;fUmZxjh>{g;#kb8m9TN-!0P~E}T z`AK1Z(yJGNoXZLQJ@{p7(aa%4b$UK^k+-)CXof{Io$g#zE<3Y=F^d_~)4Q3P_7K8j zaFf{^DW&Q(@kS&qeP5@~T7=u|kv-}d1Nkr`PfLP)7{N_aI--m`hL8nk+HuGP^?tsi zX)CaM58<6tSu}0j?1S`m&1NfjjJiOy)J!d{kGr0)&JgcLj4=;5wY~ouhvZWy86Pl% zpEQ$@$h5zMxrg~iSct(|X3!~&_Kvu=-0EJWA|VriUg*T6*cW!IKjG`l7{@l!3muL_ zDpJ=8B%)Opkm`DW2_#kl?WhLTGPe+;d+ASF?LI^mr(8jUeR#;W%Uyb8iQVBp!YOR@T8 zf$SmVdo>y8+d!W(PJYUFsSOKn6sUf_jp_9Skn4IsM@R{5_zMi=ZH(-XYq3QA3nIhO z3tNED`}Vl&h@au>Ox#v_z1}x3jD0Pa`Xhlv#BJgyJ!ON`DxNf(p7is$>xJqP<4HK} z1W)<~keVhF`YvSSvDGi9@1Pz#jO-_*Uz%`(p*D>m5jl>{0JCkVA}oFbVQX1G$Nj?<3@7`X#`3GzICMzXaq| z`eiydTSLuScxa4z8jZu(f0C~=#a+Ou?HwD3R$X_Z0)rUawp%kRKxC*+5RkCieibuJ=9Etc6Vq z)F%KR0POIkkuTE<_@~^I};?!H8bWc#`N?aMuSZY2%!+a?6r(XT_)a$K5Hg$>w3SF z1oN0~y&2(DFwJIhmH}L0mM5emabIo&e-j>~jo=b-gNF|5l2RQSTBh zbx}*5ao6+JTlqRu`~l$9_WoBKl25G_NYpiL{G`=!NN)9V@uX&Y(kE=LdyOZ}<0oAm zhm@zjgm?<6>Syqi%HoiU)a{JaR6$SrYq2D`huT!VX>~$zID{r{(kYSMf5D)b@~LZ_4ZR*4U38^ zQD6I$t_vQf`+F~rdk2^LxIiKvyaz~iy{EjfExFXKjMNmOCp~F%J#0K_2|ww-!?`^3ye|!N&)lrO;=G%Q{t}YtNZyntEtJrsqH;Y$!#o+ z_|zW@Bw~@%t@Na)W{JbDF=_0)L8G+hzFwXrJm=RcCcvy zw{oRypJb$_ZXopL;W~5C!>HA&O|J?rI#DDQk;R>S58ZKl0lLxRP7cwN)GPQ_ zZ|`q$E3;A)z(KWKws=2*iCu&Ipn*Q|psxdL%dQ^vO7Si9!PDuU-ua1f^9EK@y<354<%Th8JvZ014G6t0 zao6+J4;qi#!jJoxI3%B1Dv(Gqwepib9EX&zzVZk9(xxVQ(nWFC-Rfg}9aNdpG@GAv z5Dt^)vaY#k#*Tj>`=t)1rb*A*`5V6#Se-)Izk8ZP9Of!x5I7avM zegU{mkKt$U55aBBO%I_KRJ;Bn8k{XUc&&u@CLUwo z9@f7E-ZH{FWZ>B=rmqO(IfQ&aknI)IbX=}e-~2OujJH<-o>ehT!S!18IeGoF^iYdR zDNsxKIcz_Y@wCb-gF@V;|*G?`Nc@2Y}Ff z$mTj?Hc96Y7q!t7dw*$z^eN*>&HSW|aY%*g4DqCS^rU~q^(H_4+K{IkMWDF0v{i{q zV2mk2^`TcpHzK2NjAHW8lhjS}dL^ziEA_1=R{AP~J-vupfUOQtFP|K1$Dtne2hZu> z7zJu=?|!_LEjN4ATMgW;jQd}SaX)6@wlVIPftyShU1Z#_l5e1+v{UJ##lWoVokFi+ zVWTnXo@ZHBW&)v?4_>xh&sTrU*O|6c`EgIXV;k|QYXuT%2robB7lf3+bve&Ke*LTT zT5IE4bgR|kwGIQJcd^a&3yjy=2AtYne;iVg`j=;P=H9|jdOMJq0m7&T)m1MGT|zN7 z_Od@t{V})Ew47e#X%`q}9)6)aumPh#6=7Z>Kg(WK?PK(&9-yLEDuU`~d#OWw2&XRN zJR-_Hd_bAZn)U_~H&Mz;RKBu@JsZ6W3hoL$Wh4{^-mAmd4m%Eu9ZHFsjL zwmRB~%#w8o1V0EMcG1oC;_x%P$>mKC;FW^N-hm)$Y_)`I9ERzI#Pftj$-EOM?*(E zxV#Lhw@F7U!d$p`5VdrO8KLRXG3X3*@*HR zlowDuJN>S!Q5K@CM)@z4E)*4I0Odow5I={~gt7@Git-A|JG%U?n@~Q3atF%KQ4XN= zqr82$-*pX29m;ByFv|B)cA@+gWzrtMYbMHkln~0dQMRGHfa2MUZ$bGuN(0I_P`0A{ z0_Be=-pBC1D2*s>DD5auqMSmx|d>>^8 z$}yBTQQmXV?|MJVER^LaccVm6{){r|5YDzoS%T7v@*|XeD1Sk@;0g3GN(0L0QC6bd zhjI{Q0Oj&0!6zuUqI?e}iqeBJ<|&*Bi1IO%PoZo;`8LXfC{LlBLHWC<{jQr)zK0S; zIfZiZVbBC+3Cenu2T>kHneYtW6Xi;jdX&{D_oEy_c?;zo&-z{0qkIPCc9aKD4xqe> z;(5;Rx(emPD05N1igF*y<0z+4u74i)p@dO>it;$hYbcX`kA6X^L0ONo1?7KGUO*}N z19%H%8OmKKze0Hq#q~$Os{-Xll%*&Ul>bC|9OY@0zo3-&;9XD}QND%p9E$4*_y#3_ z(uksO^$@_MkM}>G1!?MC|}s$-O^Lx z^>?UaKG8X&aK!|`2;}otbf^UjIjJ)3XBYd|z1Y8AjN(I?h*B1wRUV!-DLiZPE*#}I z)3wWAKwIvNt#2H!T}uJm4Kjw6-U!AWq5|<=0v0*U=QD&6)vuH)(-CC;Zn};L>k4H8 z9n&CY-~$a)BQ@BA7OD3}IvNK8o|YbW{&tLgUSTYTH(y?cy+PaiJ3P%53icqCgielK zo!=5Iq|J$aE=0GVYQw(-TC8++^cEqBg15iJjaHFCad+r=e(1<;;hOSDjW@z=MGjOS z!d@}&8waDkMIA2}P1}3v0U-BpcN4y!@PF4D#T_e9&7Jg@S$aG)F!+{h`wq)@u6 z54~})LoMlexnx?$rQO7)AVY!I58U51t{njSiUMyQYHzI}?ml=fCI(ZL3Oa$kk?5ji0$pU0=Rb#w zba8%*#kr{D`_Uls5j}WU9uky%9uj?v%p#HI_%eLri%l^k!WP+W%VI@#MPYxS z+_z$aPzXy4DZR#2LGA!%M;l4bvGt`RQa?$sxN?dK4+a3e-E)z2LDMA-Ea>l*XlTbe zT&5KGThf$x40%d7hCey(#gCKK&%AMnM#$qu)An5Y42_VTPL7bAOgWe2eF*8RleYn* zbrRCXag0z5;F=9HJvix_t-n*6)*#MFw`D_BScZJ5GsrH;r_q0SR0Ufb)!mknKTc67 z`;jRqsIK^Co@)*3ijwbl)Iw9V0$|k?V$gR+Uqk|BB;>IFHdjGro2?R!{d;noUUhVC zWF27;5yVz9ofMJ7!zIJ#oW1Kr_ot9Cq9OKSG4agfuHS}|DVl;%X*M+kNeC8M)zY56 zg+=OIF{mA~r_-l!LitKT6)S-avpoX>bE1oyNtPiW$zE9xYvVWemk!EY$DD`)a#oj1 z-F{evd$+vc=1Fk=Gx^VM^)z3sbZQn`XQ8q;#$xMStQ^A3>g6K1N$b?@cjRFSN;wn> zcoj9Wj;3-r$pHt8(Cqe&?rD2E)S^qt=}GGIQ6RTISF(w9>0~U=ta+0rx6roV-(IJ_ z2Y~QGw!(~)mxO+GX1pFP4;e|GID`-I9-OF=-xaF%mm z+D?D40V+yN`t^~1xTpFzo96oSEkk}&R=VzU@ts zAzV179kNfz`e%=;Ar~2XT=kX=LCvD2MB*CnEQ0?4j>HDL5d+dFJ?+`}3WvyZkitXg zjK0^2GGfV_$QWQnZnh|H68hY6AHg$lC#Et^W88_I>`v^oxDz|2J8`eoomdSYVWaYS ztPpHuL-t9fv-)u?4`7ktjRVuVfqdx!Wk1`!r`Es|uokxL_Bt50v%ki+ER0#QW#KuP z4?yF3Va!5Boa6eTdH~wHSZWEOIN3IUVNfaucFKXKt;zXtR19ASI}O^!n5KtO^G=+- zH3idh5YCU%7f^F%eSrrWM}~*A$S)`^nE(ucb%r?avh-CWz9#@~A`#rMN^?C*h2rq? zM9%1wAAi-XPfnwTxv`;7#;=aiCuyyJ59j)Xk486(vm%}K3E%nk32i+;r}c$WGi3DD zUDqjQd~$ul;25DHM)Uf_lV6EhpEw4<*;=0v)AqSoe?&sksbV@uiX34F8+oy!Lkt0$ zQQ&gftTbmBXpru@qh=MH?HCL%OE}P(0m{r4zS4MkTC$wXpLp!K{LS6taX^yIk3VZL)vR(Y+nXz9Z!8}5NjRJ z09jw_xV$-Lt>YR1Oluv^%n#19gZ)|s#k|pELWV#2IS@`;N{d{6Qpm)gEMENJa)GA(F*6dU1n z`Z;8u3YXCPxi2VKUB;$@>tuvEjbwD$W+cl#kZlBcik*>{Y`QzO;V@AnmS7{n-5D4T zDJFX(C2p33#5AoV zOWupQUH&t2!$~^fYuH9`NXDLP8-t3#+X!GglsbehuhBHEn~RDigl!1`rfHq-(j8&) zJv8jV3xhOmNU|AWaMq@&MWK`&a0ctv=5%bI*9Jsq{B`wS($JS4ifj+pd$)$52u(ZF zz<;e^!txbky?KkUtBiJ+y(NFp`A}(WcTBO|gD3FwJF$UKXm8rQN2kHi&d9;-CyN9o zXl+dZNxgV+>ry)Hi)&f!b=iJSPOgV$u|3Y#r&;e!Md@*p(lmSsQfvE0pvJ(D0WTspwz{nXCfL!w&vUN7 zb6`IZLMJn3;Pd?%AKZZcBsLEeUwR1YpH@!f&b*jGON;HNIZ?X9A=GiEtj{)zGxSRC zeL$Z=YiyjO+xi@sLsGH&w?pNN`HyYl3kUZKRb&hDBHm(3+*{7 zH~4Y%=6MtWxru#RJw6$WdmX^$kdhln*8(f;x@#LLV2=^W|scy zL;>jO?-#-3N2i`Qs^Tb7Pko*X+pSII0=<-d zJU0*%13&G+xUdc+t6?$h3fJ(&6SGdaxp4X%DTlOq8`}vVM%`I@(u~)+`IK|tDzLPkMEyPoOx92>;CIyg5g&9Eh*ZnE5dZobS)X{vO{b_4im71ch}u=x}i7XV$`G zafV-$+xIr#?@0J9(BG_G9`XSCQG>-H$>){a9&MNU%Sd} zBca2gk8_OPR#DH=zvx{2a=c%-?;}>f@N$2=jy+GmT#0W6{bF4TIB-&na6WcTjKi2C zLn__Me)#`CY#mF(sB2@XGxQ~YPIz->;m;|;H?taToSd%@-SdMZcyFuTD)5JqAzrS5c&{Gr>t4YOru_ESn=V z&p4F9Ef>$RWH;t&se;qYr;Ka?sm}L6zEgx<$-T$0>iW4Mdn6piW-*dRHmU5djTInBMV#&PT$e(E( zIih{_SnaFzkCx}KIJm#Txdp#00#p;Fosb8n1-ycDF6)qC=631p6L8LW*@tw{gk&9Y z=7hmLPL9Vp(VccK4Z)MFvm7~pLgVpl_*;`|-oL|AEd#J~kH3c_AUKUJIKw0m&e>ZI z$-{7Te~KYmGQ4r3hhtk_hE$YT%{e4b4mh}SgU6lWZwI;~1Aj?kvcamN_Lx1F;|z6WyGBK7X1Uu3_=-rk~e&FWXM%H_6weGWB0p;%Zf;S^B>d zMSP|o53T3zusy#4GiIIK5slh(N|J@znDL}T?DO>2TxxWLRz~?i9H6(@UTMx}zYE9K zgAHUp`_sm5XUFo>=^hP3ax(O2=q(w7lSNC3x-&jp1|wyneD*^*6>>&D>YX-XyFWp^ zx(KE=k9dR5H$SB2s8jhJbCrN;1q7#??|mrcNb|9s+wznaIfP|6Z28wmn|uvN0C#Tq zE=Z(UtOuCd1Vj%yAp9(OE}Y@_tMo~dAN&3ZCI|URbAEG&#z*q+Wg0-8`Do&RiRX-d$>#G@Xj^cbQ~9bBOm_73 z&l+0)+)eABM|k}+S@>vNpqU($bAX=))uG0MLI#l_ns$~M;pw!nINwR?fadf3ue?`S z&vu8XTKRuy$mL}GxnKZOi_SUE1}I`-wO5N1T}Qr;mYwC7oly2`$)onEZ;r)gptS>h zobNvMtK;%qsKB09_Ni^CX#0XR8`_b0Z`#O@0btr$&Idis!FtK`!Z^=TJgmt3A*d(vL7#ZjZOI3{^0Yy>^YqFt-$$Z=+w|krDbL3~7G6_6=rJci zGR_A*Ej}Og)KgLpWj^SwsB80hXXxqde2OhwLoS9Tyg5O9ZFYkdhOG1bd-y-ey_u+g zwS3UivdagZsX2F!)5o!R*o@`i+~$Ah`d3Tdq+4a#<%2$VM{9mm-?*2VPNq46-ezsu(P9f|LSoQk=XIUn@2?DIiqtV|t~|FhGd z=838nFP&TQpV??;!SK%5C+F#d6L+WDWd09$b%TceRu1KZj`uaqJZ|+h?Lb|d<4V=W ze};qJBsZfeoHs?lOjbgAo?cyz`A9$5)&Jt(~DT5YkHv;SS`3&SrAs*!*S) z`9XBnh{^|@d34+e;NRh(hbekCb@+5@dDCO?bbpnj`JiJY&^90R-~J#~aJ}-X#eD*G zcV>HJJCee04MhUw%>~}j@x030kf9mlcPr98m#--D=261t&dRs=k9juK))w0yBoR)O zBw>OvtvML4?@&M+0*M_C$UM`zv`|E0i>_BFP(Q+Hq;=K^&#n|X!eu1-DP>Nj53v-y zcv+W!LUA_?1PjDPeL-w;?2P$l*=&2LwX1oICs2O8Ak4Zz`bmhu8mi~oYRTSN#Om;DI&I{bB0vrM=_g*XM%B}%1OC} zSu|@7!cl+_Y#68m^N5Aii{ztAl0ll92lqf}i^j#H1f7&p@tAZq zY_KUnvzN8YF>u1T;8GjIWaLXi**qI|va? zSB7d2*~rka(A#3Om$}D&ZqO(%U6x6Rgc(=Ydf4kKz%0E$O z$nbEOzO1oEbbrT_P7HZjw|31FV-UoU30zUiq@ul%T-ZOg~^)J+%_b*tCw7FBy>^<*axY3nGn770J zo}uzDu*b+UR!7cJ|3YAorhOe6k4NBq^~~P${sr?%=2^)1IpSYPDF5faf8hf=HH9!@ z{R@c)X<@dX_bPc`t>ZCCmPfZ^|+MLQ>f~2mK36erF?$3H%E@e|F5jP?NQP zf#1h5|3b~6{0olc3*&I1g+c*muQ(e9 z&N=?gf&P?R9!%#yLqpV0GFC~HQ(EK|I3Iym>8&7V#QM(AC%O4eW}6sjG&_(!YjDfs zneyOB`98C0tB=c>%q4R|{|!AqSo$lc@`Gi{sZNgfqq+a%%n4nb%u$IjC(=1g+0d!T z5LW39D*M&%{@l8|y%b|Q=*$qyP$;&z0zw$g|ZQ?rU!;Fpb2GQ@a(KlY#id55AhxA#l(#NrURT;~{ zxvgIu>tC^Rm$%^;(}29n;}$bOn)MC1hRvOmd-9M2`KvN!{#?}mInbZdpJO^N_}upA z*es_~$S9)NHc}97#^KtT@TD{QIQe|p=6i=~ITNZf^TT|zHXa<4@0{sRp4n#6r4Hwg zA3TSjWBi?C^uVsFg$U=?QhS;9#KriE(%Efdh@b8&`uz8;zM{XNZk@9Z2YsFJzgwL= z4je-!d%aN^_WV$T7eeSo?Z5N%8g_aOk$HvlTo+DIr+nR-#cLGO*DBgs`fr`f{{%5L z{J8J_uGNowAL^_~&(kYA|E+WMGEMn?M7ued^6#sIL-)ORNrx_nW$0sL-QCu)@gVBf zv5|DHGxX(vtId>cO1I@HDFZlP?jxmzX}Uao3)6By$@%Z2KGJ#zWEF8$pO zG&+mE6{m6?i7!R!E}?NL?LuoOCGkoW(dx+a^yLa8%|oUktqQjH@>%Yb@&Pa2xRxWs z6Tkml-T_TJKN^&J55k&`l7qXBVzvk<6BHo5^mHr(@>>OC)0{L+)jza2`Tma8hI3`Ew16o-b~7=p6Qkm0 z&g3&RqQe%wGxSXEKc@-17+tc6rxjfqw*w_xr9M)=pZZYiJ!iIW4h>TcM}O*bVw!P? zj&Wu^ZwPqoEcM4wt@m*cWwAab(<2QH?~y{QP0v6NFR1jUuyK{yl{h9n0<{hkb^{us3jdZLU=XG<^*!f5w zdq(>uohkT}-s`4#RoxuVdOjh2*Zj>ItysnCA6;Vk=tlm`_^%$TeYO74azmg)`=|9U zKHC!zFjAS_Nj%^lq?rZx2+p~zLmFj+;GFTY4{tG8hkhEoL%*ESFFDhlc3tW8d_?2% zZ1`J~>RYhmRY)~{5j`B@ZwCyj$l(TN&LlZJhk;3*;ZFy;BZZsMLHlZm`3wG=24PJn z@!t$$eDjUM@r}PZ8~Hy!zRB^;cYb_h@4A+oI)gZzAsXL&+3@$dHNFiYlaAi;ZD{z* zvH4JVVR8HtKtQILO|-h>@O*4xu^6bcSQ`m1EWt7xeF`?03IDiu;Ec#`oA^`6932hw zgQS#BwW8yU{EpE1lg6Ke%2xt@Opq_Uj`)2lhK9F{u(L{Jj0nF5hq%l&EiKU3dF=a^wUB6*k@xO%OejG8I8lYLz5oPCVcDZZ@i#KhBqRI1)4xLHiUcq|(ROfo-YPp6UcdE0sSDoq4 z?bpNiNs;U%u<<&i&P}3M$t`~DoAJg%h~yUgtpO*+VO#7acsZeiSeQI zoERVEXf|TU2Q0-nIX;x0Q{w~TglS#roEaaO*zhsX_)zTF_y9qsKnQa$4aNB2sDInE zojVH`H)}9te%ef_PIMbrhyWS7rQCLY-%^*bZ)qFve{RD+i6;$45cx>?-jnisU(&z# z#8RAnS63k5{JnIl`sCP2(#>*v9!Kf%e%4pTE!uR8jO>iMj=dJS)_=~r7hlsli3~65 zBsy1KuvYTq&>ml{Kw_KPl!*(>@Q#99iq;vQV5 zJJR3Dr+ebV%=1*kEFUzF48!{xwnudoJyB&>*L$aR zMLNQIZEFb2w05WK6?yZJ4q+kA*5f}W?s06tk+Tz8TZ_eJ1W)&jG~RWp_aw1#q{bUr zN4p(cyU=MX3cPtp8bRGd{mbapyZaAfxWDw-NT=9(2WycnZ4s_-V+6oS=u6+nCb!}_ zwBIYI`#oMf`5Y9}vH zfO@v4TT%#&!4EWL)+{%2r=OsekwLoWt@PEK6CQe)MATx&3lquJ=NC(inKHufAD%rK}qB(Lc!73?|Vl_Py z@SW*6gX}uR;ehWrzJN3I_!`%&_6`g*7dEa5c-|VYOfK{a&A};UbIT5o=Ab-JpP``7 z?lWBmeJBE`#v%Gd0+ag>zdfpyw)9LM^CDhdIRTz$Ue^Ud186STpq&pk5*WueA~Rx; zSKubHv`7ax)~+U^Sv){Gauc*Nxi#86=1k4R;|2K0iIMuTg0<^t^{aj&0=aaTaHcJK z9B;8)w76kmIigO)i`u=WoE+MG_*{6htRF5~6cY*MuW@Puy6J+sP;T7Y$&^F{h&P#M zkWyci>aHScN?+}n8mry#X1Ko89cD*?^eQy2ukk2*cLv6})VDt5cEQ29SA7CMVpIW7 z(PQ+1iQjxcy_L99}rNxiV5;9@KPkzgZ{4ZZMP`TDsd%bJJT@^l;YkfT-Y*<&} z#qR+B-dN$mZ@v*Y1saYrurGMM>sgc+QC>sQ$7*^@d~@vglG4_`jRZFKI$o>tjLA)I zcm0hN*WXNWostu4?_kru*PY_JC&l#w({)GISE$os=0Cg~!E+q&K!5k87_ZA&sYg1R z$9k(oqQXvt!v6pYAFBg}Hxh*x>7)dS7wPl{jTh+zCnDEOL4uanw);br=DWGbTZJw@ezoy=SK{-!ZZ5Bcnv!r$DSe?b@O9k$U6dc7{1ip|#(4hlh6Ba%OFc3%N!(IT?ESDJyp8LV>_U%e zA@+VGJcrpF|9rXeGv@Ai`I67~+2!$WS&jXcF)hSCU*2D4e}7rZ`@y3K1M;>;F{n>$ zE+BoRi6VEo&GX98Utas?;e_H8?;EMX^8yoFcT*$H?}7`wJ!H-xe;Ycq6?q=ZS4@?w zbm=}xa7gU?MgkMF<&TNk@du_=-gy3y9~skIw)|0?ReuNY{E6|;pC~#x-RDoVr^3Y4 z^rq)$Cm;0v8OsM|x7qf;FT4K7^Rv@W^!#G`{x6Q}e@FB`7JX@m8+V9T)#I5*GOyiM zaA%$`&JP*a3DSu*^G?(4yjD~zqpmr)sC*Eb9 zrZX-bM;zHyj_eO}I9viF61T|gXzYqQ>4!H@cm;VHo__-IlH@!z9s5ENly-CKzyxXx z{Fr1QweRzs>u+ZRBrO4e4VqUpMXuRw82EgD+PHk`dGlYOc-$cbRgoimBgrK~#jWR3 zG4n$Ru&@27*olKXdPP?17q~r)rUjR z57zJ%W0=dJw;Vo`JX1~;^R1D>uQ}ZR3Cs&AO&KIWhB)Dr)p4E5e#6G7bO+U*ORXoa zE`C?s@qZ54yCX`TtgMmc`N!eS@54~3JYq<=SaG3c+4KShVQ%Ww^G4O8pgQ#u>*2>+ zQP)n&9fk6jd-PKFiK!}wLi>X_^Y{br0Lf}t4B;!~i6>^Ap(E~EWxqP_Vkw8p{*q1G z>(s-jJ4;WR@nUxD(0qzpGUP(cc@PO910~X&hzqB=y>uwXdZausGttZ`o4G2DSkB1H zx!b>RxUlXT*Ljofe35I$!(!u~+w`d(fbuGqV}#f^A$QK)aa@nxR=XrXWHhS<}Zz#<(;k=rlPQ<>FcnNJ(u9LA|*BQAKt}AbB`3fQ? z3K61pT{-1Zz`sJOheLno7=Kt*gW)G@iRKMn&r}Zx?*JP0DGwT6o?`o+2+d>iJ#1+lLV4(2BcV;syJNmA)n_6OAy9_!eHtOCS};iX$wv?C(NtShJHKSL;=!$A+8nuzShPFTBo%%1Mwq6ERt1T$@@ z!9u&S%)ZqfaqB6k+&EFx>*6K8zvW96>_~j9zWhWve#Bsv;i8=7Ok>*DN4qa9^D_k0 zr#>D%-SEz=-&g-~%3GAxmkSZOlA7UEN!Wtp!M8i751m_oC7Y1U%Es8R0vD1nr5SQc zZBXx9+PG=3vtW%~c%u`-(!nmb#PG{p-hn|eunkJR2M;((8`SG4_`wtyn=Zo`25^Q9 zF32p5a+9TEN?9VZ;F6vhCti_f)h-tTZ^jQIu#pnViVkM&CH!-wWyTrqxy)Kl+Ue){ zHCfUv;(F2)7OrpEl{a|4XGOtmZ{>Pt_4!b-J8gVTZ!f*fc44zgy&-OsdIa*#LY;JX ze(Dw{VUyM(WH<;+l-Za`vp^TixMNBLpbt$s*55Mifo55fhD)0KAa!RL$qy`ss#Hxf zHv?r>z)Xu2TDs9UN)5t+DEfxFG7^w^6&!n6r+DE)ofj0=qkaqJL}i8Ksq);w~}iy<;*OcdK_T&}^4wwhXxGelzd zf9gWS8??tnH)?fk47LdQxUuDp$I8c#QU+)zVch9jrI#oi6T0YT|nlE=rqzqbe{O;^{#x} zQ;c#Eip_jass(b9q$xpqC*=sM3qIFhp1wqK_M*n?Xbcn+U1?8@{O=tqRt#^pn7%Zh zGW!S|v&V$K)9FR(y5x~ZNIg-Cg8bDUh}cEYo}R|)UHv--nyss(jq6v7*K+KAc=}F{ z7nT>;8)?=CZ+3B}5aFya4YgA7E^2hMp=%OAN8TTMoQY0b-J(-h%*eW1^*0=f_iN78 z_sh%i{*&*Qv;7y!@&1$Vm$Uun&+-0~@8@LyrJ0W$NiuN&Y0~7L$iswH$bdI;p#LCg z!@hnO`X)IoIZW!w8ZJk1qKSId!-(8;l@^IOzHrF+fMK47dl)rNlwv{>ot z=q>8+aLfE&A_qNe3M;Amrt2OG=4JQt12w zlc<=EGjJ$AEoaDOmp#O^cERVbofHm~0jbi2y^6q#^dqW~kFY$_&6|_FLX!IrlDa%a z$xMYvpW5na{;0C6rKe;DY01A9Do@8~$-gdEcDNpylK+SX)nB|wzRlHM z>yng1`P3a`h~Y?>5;@$!f}Z3&67%plf(72$@iBYtJcQJpn{KSK3~Ip%TrzKq(B?4# z51Q7X5Uq4u#>7(S2jn`AboC#o9%wn@Mns6$P!uOGJ9SH(uGqik2wPMqr9}l@L3)7( z|5Fxi0SyAgYkBOKx+0RV?2pOVm9Gu_W@XU@WpRX+#Q`Xbd_-Yr%7P*=l)d46_1})V zTx$nNTOecc*H97q!n}g*kiJO10RcUhIv{;?$gnf(Hx6`niX2l!GHv&O5GOItW)OyE zv7uS@lI?uic0-1EQZhp9XU#5Siy6Tn(k|1gY0l?T&E*1ox&o$9o2$@QvCcn}I5~74 zhcOUjK;SGkRV6gf1La5xLe_YsOR!({bCHE|D%*bmTKJaBp1JHePR&R=Ua0Ji zQM|_&D~F&?UoHwAb=Rr;pU0$?qn~)DyygfDFU-KIJH>pqde7Rfk~^U+_p46=v-P=> zO&yfKV(RaqMxQJB4`|i>>NTi@7sBd-O-}PwN8*2mTb|DrxzjT5&FTh&wst->?a;#F zKL=nWOW?2U6GOII3gTLgW6TYhuoS&ERn&RgGqsO1HBb$_Gsb8>uN)_K{^hW_oI z=8q}eEk{d2rxLqIXwq&B=E-LA-5oEN^lx|Lu}GA@ha4$KZwuF!%STopT=Sx^{%gI; zsp{@EFY$o>#-g>a;f{s#=^pZ?9K{?UirX-m-$U+{qvTGhEnhW0w8u@Yt-sFO89I7K z`$>)z`QIqyPwUW?<^GiH^BWOA5_=`*$H;YF=Elo9q3FIN*l|8FV?}CagnF}KF~s84 zdh3b^y5pCTqRcnrf$Jd2GJEEd)|jDBg{H7fOAuJISgn<)FF zbDFX-{qPWmwSD3Y6Ls910|SN{bjaR!&_AI0Y7IfnYV9%IgiEkIFtjw-jY#K+tAK^n z8T~)<$(>+3w}>z|TO2nHe&1m_K7zCDB2f0O?Jl_!$=BXI05<@f0-M+=@bQDfLjXH> zueunOSdZd4t}oI`P$jb+vBp4nkcjn1z($1#Gcb}=odatM=eE8`i`;_3lIRKYkx5S@ zrV%*rfz7)tvSp1Z{qdW}&H7`)K9l~aKqdF}$8aQ|8Xdk&GB9#)J;F!Einf7F#A4@n zIgxK<3KO9r&aX%Oakptb;x$yx(t3m*9w?$@$se%oBAje;D~fj17tuHK651k~Q>( zF_VTo4jBWG>pKeu7_zkvIYxBRnuil>9WQjIyVlVQOnt3m#tze3$3LNBTI(QwaAtmx ze7$2h^}*R=2RqMG%%*BT2fkSn)v<3Z?QC`WTF4kAon$BAaL|wRu9!q=E69USi(}T^ z=52}@EKgEmjiImy(+wig7XW;!*%M3BG(7T@WAw1nV)*j`#^u0q%skh{?XDLzN{>o; zGlz~CZvC^IUrZOn^~W^gj86Hps@B}0j|ko)>l*5s?Q}i++fxsl7PPMJG11RK|8#hB zW(nR#kF&=yc@Zv}%(^>u;2M(6Y5CKLjf5$Zf#EQ!0@uhG!GAd*PlFb{~!GK`u`F!|3DANf+9|?!0#E5z}sLSUD5Me(VE{UhD3lJfgWd8A~$3OBS~7@SnIL~8$I1Gh|3lyh!kcr{xj)EaV8~fRp_IkynZ%sRdKzr2NO&2}BMPPZ$XmvpS|AkycFx>h zUpuXU850j!qz*;#nL~4^G;X&gq9?p=XRQ z*GP~#$yk2K>_CgG^oPDlj@X1W$%dJwZkB!#c6n0p153RPyCmCT$s8&d+R!jW1lwtu zH8E~!i>k^g8m!PfKdz2OE1SW}X2*7{KFRw@oIbe?pg4U3izw@azRA}s%>LDk_v4tw z{}z2Hz;K+(DiH1*2)|dXnF;za>5wu)tZrJyf@~yyoHPgwd%&!`owEnh?{M+a#75de zZhFTKTfJae`3bU+M}u|5pe{*RO5O^HkPY=x3SgopGifna<~IH?PUgmMwaDCvUN254 zgQ><~!A#h3A&-5lFV5di5-G=4Bw@)vQD<5rAwqyH5rtBdZn$SPUfcK!ml*(Y#@Tm>&jw!>AhHFl;L@QP_-g1NkH`vLFI-K`xw zKiDUirn;M{oQ>;?xmr-sB|KnX-*`~}B_j96rHi2Mbj z+4hi`KW;nkFNoa-V452`=r0ic40i#}+=%fNJZSP2kP|zyk$nZ)#E`P`Px8n5i!w05 zhs#y)p6|!0u6qHBG3`mcjNZJ3$o&erKjzB6G64XLl-sqe-ql$*b2t5Akx{zBHDFd?g>PWTJlHvWRd zR)H|Go$(i>lz96|3Ttlh&#=r_%pIOH{(?cvqfR)V^b%-(|4e4~;^{`mm}euJpLlTI zhuHbYKYu$;=Kcs!%pg7-@+M5x2sl}-Eouu(%C z#j~(nafe>u83(5IA#LuiPf!Ei?jAmW-8|u^Sv`VOgy+D66P2;PJfF@~=D)f>q5&=f zJgBtN-B|Lg6MWdJC7M8c2n8859_Sgri!yK}j5fe?c=cLa#nv;Jw7lYp33-XoSIJY{ z=;I_6L4gZ+Ej?B0uGy6rXx;>lXcSDqs~vR8lsqnin!|#YVw|@k((T7=D#syIvOTQq zMKO&FZ#2gsh{gW|r=sH#laem{;uXX!L38YAeJa?WXt%V`JdcnI(KOrC){C)qE@mM* zX1%z~;=jsf?O}o*jL@>fqY?6!`BX6s3XPtP)w_vDIshKp7 z%MgaIZ;a8BkE`CV3oWT}p~iorZ|O+L9Mva6k?13HrZEjetYqZ;5WJFbepr^uk(Ei{ zQ(C%)w2nsaoYyzb#5^F@72_WdJEVhX!)68R9zzx3*r@pE7-=cjTVfwH!of5$GVsBZi+YpT;92YD5ANg9G>~8}| zlYQc`IDbp@g(6zvt?{6p5WJXg`6!rQ@X%m~s69ubU$^^q2$T zZBaAzwix!Z{rreNZZ!B?VtQ3@9FcDr{VgdS#%axgH2o*&*@(;~>~tZ&9iP=68dI1s}HV@!7%5A=@T3m?q6=YH{hHBMb_0LZK^_4#zCp8zht6x zhG^pIjP9ZF(W-ygH4fLN#H>et2(7JNj8tO>JMk_7u_{>K^m?x zF|RcyD|&XRK}kB#ljRhe@>FZ{Wrf@yVix3tXlGz|SSW7tp@^L>gLI-8Q#3Ko3yIb| zJx;h~?rn|{;K$WVR@ewI@sA)v9ef|NphJGT; z8joG{=Mil?yfpwz;lKFhNi!054~4gK2NlV-p;j6{7SDxBoMLvph(Ol>s7(J z#KWb6bu(dHsS=#w-{gx{l=6y05(Ik*Gq6#)75;hg{%c+w7;w2V`ifzCe~Wbt5wV!E z-a)Qe1|}rx4!;BaG5QX?WDSNeIBVY{>=2;5LoZ zY%IhSdCl0OlYE+Gg63rXd(t$HviF=Pch=-a$$SIG01eW?OTz}0BpMCV#sCd%mjTs= zC4N4~=w&5+mI-7*e0j#^uMA_CB#o3dVxoCrKLf((823%%3yk894ST&EOL%r2$Fsk~G z`B#K8fbsIBZ9~>QdJl)u>h1xJk8S$z=BZ-h#;ymN@X&N_LvyKH^f*lnr6S45iIa2m z81!*{Y)#6AL@^;`e}iw-_!|a!0A4!%m94)4c`45!e}l!XPtH|LEO2_DY2c9+OW8W4}k(kJ3xW8(QPOXRz7KSX&9llhI2go#cBmG#7dPL^oyX zfF73ln5Dza*0yl2Ihy~BjPCSeZcFV>lu98pi4*VdMFyk5W%Tr*oeE;q1B9W9~0G85^el z8t2ISr{7=Y!~DGBVSZkTBhNGQgZzSF;s+TzIc)M%>Ue+2FBsDPlImG^MN$GMp=rmQ z39#l1OeF0lKJI3rrb`=4tJZu~DsFihs@*!(X_$(WA+f7r5ss>x-&~-l<%eZ!pZZ_d zhr{)L_-4E!1{k}~);~*T-HRMf_oF8OkxW2g-fTo}Gab*UmtxYhmZ^ zn{IF&KzSbJC6u%9eZ{u?SDZ`yhnI0!Ka_y~iWBi)aZd4{&z3&ET%r$N#$o!Dff<7&w3JaoPm;M$&&3NE=R5@InvcbLO&>SZHi9rZ9zcI(JlRJ zrp>OIFFz48rz0MzMZ+u>G@pmnNro_l-_w}S!QPGQc{8LqK3DX;gR*0s8Kir$E7k|6?8>Y7$Ln3ntSP&$E2wCezdUUpm%qFfx5;0==uG*mtY?w@ zHM!#V^4Apqr{%ATitBC=?Nz!yAz@Q}Psm@F_kBcOt@2$bVOIq|DSu7x*6?OTntD>J3zt)6s@bL18thA!y|A=U7O&FCPMP9iB z72n6?l{QpDr)6amDz3|9Ac z=K(?sNVImk(l5~-qRP8vZ#jhDzVn@`{Rz>wjhC75r|KG+EP! zivOg%@;aeSm6a2Oc2a)NX;gYXD6hEObV*(*KqdGcdBuZDh4uzss@yBD_)rObRNhmD zif^sFG8vWNpXHS)s4S1jD;0F*!}3cjQK?!juS`Y7e@xzUIV$abiB^TmmR5P?DpW$Z z$$O@w;`)=kG6R*q4f2Yg(7r3L%tWQ<9(iRJDiycO%4}4s?w6Gyq1`0!nS+Y!+w#gh zRHA+I$^ukETjZ6+RMC283Ei_vUTLCxu9u&%43(ZavVrBO1lP(+Gb+BX$$M6!;_8)G zR-w|@Ca;80@qbHRX+>rEM0q7ll^Xe+J5cexLtbe^CHO&k&n8s-{eB@BccT(5k@wt# zO4S*8WeX~OH^?jZqSAg`UfGID&lq{-0lH_CY`Ps4|2kQD2$kSpZzp%T(6%TZ~2zr50nO3y{|o|ULXtL2qdbkBR_l@KabZwOaa|&>Y(k~#fV^@yDm@ppS-dS71y)!N|dgATVB~g_o(tp7b^Zkvho-z-LJ|@ zH!8k&$$Oqa#r1-`au}7qN%G3`sQ6!zS9(y{qUpC|sQ7y16%`d%y}aiYR6-gV`v~ow z^2+O|`1i?sPN32^QC>NXitG3CiYp)8>ycLqP-**|yy8KnqE24%652|6#fM6}S6(SY zWpRVNG8vWS+ht`6Rc?`$3ab2CRw_|x`zKkMii%&8tjkfU3d*LdQ0X2kD_7B#T6xcO zRNDSmR%W2$`;@HsQE}ZZ@0m$gz96s6LM8eMS(%MW=-*`}h)Vlx$rN)?aeY=^nMYS1 zm6ZjkbT`Y&VpJAu^jSh^pOIIZP-&A!=9*=wxU}zCj!IuxzFRXYzB%%qm8b+Ck(E_c zSt2VTs<`Dnt*9*CE-PVFTpC~BL6yhll{Qqm$H>YiRQ&hL%H62=ej%H_2bGEk<&`a{ z^gJxD+>1(78zi>UJ=&K(fJ*n(@}727`toGuAyk5!W#wU1s(vh6+eVdN$SYA)wg~!c zc(|g#h^Rvtqo*exsFRQX3qrzcS9eneh5OjrI}KJR%{w(OQy zdQj=n-u@U}`CoZOMa2gnBwMVnpt4w_Qy(gQ8zkE6g!ThjIYC!`DxY(j?)laAu3x(_ zApPHc_#BT*RFv1a>a|vVrs}V|U-7%vhj*01zZu>!fv)rs;0XpiL4dyhBS6_i!YC^S zAo>OY9%77#2xH5e1W*~E5}?g>9RS-Hu#Er}1q67W0nZa)v4;RtxX~%pXq%S+1q>)4 zz;Yh}Uguk0r&~g01h|(0_Y$Cc5&@1e;1~gdZzsTM2At+w-bsK581MiA7GFw$R~YaL z0k&XvfDcEP;9u&ew!b656AXBQ0KxYXpp0)Rqg#3~3Bl(x#zTC|l>|^3pc240jR4yi zu#Euz4-nva20YJz=>(Xt5F!KWX{Fx;Hgz5+|hXHd4&^DI< zn;5W(0L$kQ;3@`O#en$)XktJU0TwSJzzhb=;5Po501FtffB-$8Ccr%mxQ75$|4M*X z2DB2OVi^IN8PH6C;J*=|k^z+j==&l8mM~xm0hZrNfK?1wMS!ZW5a4nKT+V=11X#v^ zWdvwnO@Nu)>ob`hLIjw@fH?$M+(Lj&4A{hU!4wCd&w#7=mM{UD7|=w3iaQ7}g8?%L z5d1m;7BFA|1HMUsdl+yJ1MVb1D+5{y;JTXt%?xNJK;L%>P|1Kw0<>)=z!C;5A%On} z1X#s@RoupX1h||5mlGiRLjo*gz%l~#z%&8dv&`)vnd^Rx08cRB36{$J1SsPkE2AFs z9VEa*jPVd*M4upl$^exBRfh?%jRD&Tu=qIwJkNmV8Sn=JOyNeSP@{{F5TJko1qA4W zT>|FkTVAJIx?d!~y$raQ+jyA(#~5&o0DXTZz-b1YCO~^10Ult$1ANQ>5#SXDyh4D` zC$0xzCQHLil7{8;2{4BNa|lqikN}$)u!#WC#RRyD0ax)Y|3ZK!1~d_%uaN*V7%+nX z6-x=QfB_2_@Hqn9!+?7ju$%y`3}_`l_ZJD!%z$PBL{|`?k^z+jSo{?NEMdSB0{Fj5 zfK?1wMF3Zb0GBi1a&F^m1X#v^Wd!KHhX6ac*LP5_yS5PE2?jjDWcV)vl$DWoD8r4v zZvPt?q$He1c>e;z%d3KBY=M|0ZudEG~cq101q(W0RjXM65tgEyh4Ds z$u|HnhuL8cv4ijJ1lYuYP0TRwAiz}&xQYPX7Zad~0Zjy`cozX?Fkl7&Tz^M^1q@g~ zfap{L+{1u-2oSoA0IdvYB|s16NFX)?nhDTWMSw~MR1%=CngB}}u!P(A2Lh~Oz$yZ` zK16`a8E`pc%pkxr1}x(?eniY4X6lET9ezT9!`vT-sXw;-i~y6F43n7*za+rJjPWpG zM1Mtq6AU=PeG1EWeb~ba#X}0EVjBVGF~&T?a777lHv{hGHaZC~odMGcP_c^uD;cno z097!~*N3AFh>iy!$^btD`~+x&k-k1WivhC;P{Df4&tK~w2SEGZ2xBG#X42=kzd?X* z{`_wG{Pt4>@bRnr=+#4S5ulwh+6kj)fB=0A=p#UA8gWn?H`+#x_FP4PyBTmd0bKt; zfOc-Qoi*-s0`xJUj{(74Ksy64^;#dUU_b@;>39MJ z84x5ubOHgY7*IukHq4pVhqv-$w^FZ%N(pe70f!0TFC)NYzGX7EQBHt|8RKEX=$TA_ z6AU=PlzSTiwlH7|0k%vbKsN)r39$HL0{FO5A2r&889Kg&G1>{kRY`z82J{gi_;&=D z$AEd<##91KXTWp<_}@o>l?+%(faRAHAjp6q0YX<2po#%i+(s1vmNQ^E0V*)-Umxyb zKo*bJ5up2J0^H4jyP3`ZLV)QEm`(uyYXn%yfR%j9>jdcHr*!dS z-ypzY1{@|p=uHAl=36GyE$ssYc$hIBW{iANawiyYf&l(P0(9{$U35#xLx95!I7|T7 z1OiOv{+-OSQ%Zn`8RKEXsJM^-Cm3*o0MQQ;vSPmb<4qD!s9`inK#_(KkN}T{@c{`Kt6@}1z&H)#0tpzeVdS;DBOB>^&vb-N zmWKJ~twlSz3rZ2bymsjguJ54y6r}^@Nt72+-azr7TP{L*AIdc-vr%rbDe~}HTDxqR z_8j-K2>&RXIfEW9@yY=9TD;n1htSD@3c`NUWZ{vVBkuJ`E z&50Erf_|ysniH!$zYK*p(kTAJUiL;rvoK z@sDD@_pLcXe>Vi(*X&s}wk4W>P1kLCzjQaY3>4g2)VOBgV+CK#5AF3guI*nj7QnnO zp%%Jk&x-L>p-ZT&ra$yD^O^fh@#owXk##rXWf!(aSL9EN;$4X!Z)S!h{t@-a;ib%E zd@zoLEzOJeU?q5|YusTSZ)twCXUw?63Xu6bnYRm~Jq59NW1>Czv3P~ip1fGRBAi#H zH8-wPet;f-MekpQ$PLf67hLahmE8Vw@O4Qmas0LAewXXZ4b30DB6Nw%)jY99y}r3< z*0kut?FFv(3i?;M72)ZWzFS#01K+QdLdI9SD0Fip)vu$Dce~beh4E_&)EiC@4AAc@ ze0W^*6|1e>cBCkEVa~=J3Y4?BWEs0iNurTtq04|}i zF|Yh~V4&s1n3CIXL5>ngd)2=|+5^A{)d>tdVPT`PhH4$Ehu)p=bqu(i7Fz)Ajs}JJtNVBID_xd7eu`%YJIQ&R+WdYqY$AgU?9$zfJjK3g# zp>de+TA2Lcu(!d5Skn3xjL6qw9T$M(@XD36eh=Vl;Q|HV61cldTERN5Yh4WZBz~5( zPA0(Dz>6if{{Wxayj(Em`)8G`U5M6*S~%-Q^uZ#*f}ta>@p~+6I3HahF=d2{au+kN zd(9r=Ufy%T?7YYi{Q>sn%0j-6j%L2K0PW%Ni^P4X;I%rAc<8xqJWaAY;a}T=mu86$*xBR4z9-pLZ zhw0U{hPxwO(U*(DcU_N$Bi+&7G0~R`@T|~LcO@P-6VUKoH_*SVvBV?B46yX%m)t%H zF9PZ5S^??7TOwAde;tWfsM&|W>J{Ua2@gnuP7ZIT3-TRn3cxdEix!5zaT9>1*KVvn zxCrN>ZzOP}JG^cd{+9fV&NwAm(>|~|x+rr0KN1S|QX&xMW9DnSBg@cqWFrA_pMGsa z_!M4y&B;@s1>_z)gv=)2aNT+XzTnQo;tLcItaW#I<80j9TrQ6Qrxq~u;I{9)F>pMu zI@-D$&m_&zd~tPD5EmI332o7L-Z1#|?^bt&r`~L};)cAqHN&qY_`%4pY6&0xg{FdpUoP5NQVB&v0JKAYBCPnJb=HO;4?EXg4VYVYI7M;Y zTG0BOeugRbJ0YHEZuOtnyg*-8J@7EN(xp6psAp|w^ZS&Iq$!qqcFrs*a4UCFW#`OE zW59HpfKJ`Hu7cWc*;R4l8e(MEs^8usAGV4gR=rzvT6Oe)x#`W+%AuocpDwv`dw9;| zF)h)G>#pS+|0wQbmgM1~60aRz-+l|{-U^aivAH*x^#2`Mu1#ZXDa|8u4nip!A$(U%Ls z{eTn!jc*AZ_4Pmdwu7OgXU^cwr+W;{d|-x-(CuSIFX6ps`^GUt*Ay(mW0h~vL-7v2 zmY$-8c-nj*j2AkEu2<5L3SMO$VL=;t7YcPWzvJi_Wp*CY$mDqehGurbCK1=5GCZOI zXkq>^rWSu#GrAt1wurxtA4kfaHM?uTB{e%~J&bRBZ?H~1a&llmmrDUe8%(9z4ZRl|7wV}QCBh$xX7Q2u#_${u_Q6pvwEg@GH@JR}(ueZ4FW%t#63UY(e?}Se zr5jxDK&e6b4a)za+|&%46T;|n=j9iSDJ&X0>i+Yz9YG&liauC?vI1oz$`4VvZ!G=e zk^dDIiT<+I&G*=~$^ER|BKzBwZCx51;GhC*&Vhv0gCRCt<&lOTc8*hqNemS}W_)6P zmib^LFdo~lJNcf_W0%lw%t&A?OyrA79;rcCr8mFp-570LVld0^T3>@ZIX2S6x(s2R zJ_?Q&d}ll#kMiOb>h*VsdyugaoHys=1@W{jpO1;hDty|j%C4m@{-g%HLu7VUVe4*X z-->@wpNC=CxHj6nXsN3K`9dF;)!qPZus4gO-PlbiSw@nqdmCNcy03i|YlXiZM20A+8s#DoXynOj|4B|JAYdKL=a=RBp4h*2j z{vU>#eM^Zqnd6U)iOjsZP}xs|@w0%af5t4P_mB9cJOwPay6Z{B?~lyZAKCZOLUsE1k` zOE1~-RUZu0{Y2@VHx{_4(*}O=?>D#(qr4Bj^fQzOlux02R@O;n81hP=k>3G(Xx6xv zlj!0t_{M?C4G*nC7mLXw2D$3z>Lc@@FGBk-xfzNAGVgUo{NqWj7)be@INrmoPXrop zfNG$%ynx=0(L9W);6cEwr@sOnIo$9z2mS)|opBAfU5Hn#Mxnp0^7kiAb^1>2zm`|L zH_u%Uv!Gsqx!SN3=i<1kpWE<-^3dvW?vmDe@RhFJFln3$3*v$^9gQs?b|C@61tn|m zBgzNzf*WSJ*Vp99k0~9P2;(^lHfmg7xMJ+iz&Lj=acJYUA=jkF0Dc`dv0*009<=yqb`0K)Iz!c&SOfiu_+a~q!P63;DEYVy|C6hfK;uS1%? z{5D8Z>*^a^zr`!Nj(dL#E7o;<%x^KrfPK35&#PzRp+UH1=t+VT@Rk@w%0zSd1A#oS zQ5lT*$-#!3)gOT$^*$tP_oi#!TD9$lmYo$XZ+c4Z_!f8+Cg%kZ?AGXflVMEV-Lk{m z*>?J?H@NcgK2*k;idNTXNq^yKng;S+@H+&E;PYO?2N&)POmH9n;Lbw#&Vbw1xGR7u zhY~osJ}?Fsfb+U|xig)>9g7*h2d{X%2!0%#lR6b|`A;kUKXLB^9#wJfkMCwrk^|Xf z7f2vTlpu>jgWgC`0}Hw_*-cOqHzFINkkD4sG}l@r=YZG*Hl8G&v%?~^)av(oX(`@Y z`sY?#do5bUY=TKZ#RRNH(H2ngghh=)lK>(6{k(H_H=+Ky_x`^3d4Bsmvu9?`JMYZA zGxN?n@4PeTkJVMpN5>Y8YGEjpmIVtEU!c75_CIS@OCqYMmf)G7uCS;jf?ATOmLzE< z$u(L@idvGYmZYgAHUuVUC6lz0De8)8U~sp}oiX*))<6?2&!WmIst;W^QsLiAye|Q& zEu3sHBz_bBd{dPE`8bb2LkzO%mmIN;65lww5b#CM!~Z`XC>V1>#5c|;#{VM5sF?D< zh%tI9|9=f5#EKX*!u`7FQD*jO(}(0+PTymraThqU9G^AfBSgE?@s(foHNJapz!l@d zHI6R+dA|ShiWd4{Z}jt!U^G~SdPE$^t1~$U>reum2KB!x)Fr6+YH3_kkxBPUL5xBF zik+9D@SOeBVS8sQ>6uOP#M)Ct{e$`;On}C{SvbQg*jgST2GCl>fn|3-*PcL8?A*)O z?h6;T%em2jT%G?IEz;$R+D|wx^)XUi8Y_2`z9Eh{iUjF)kYZr%)zNg*zcgJzJY95@ z`bgJ=3eyE4(dm&Ei^f3y`j7VU6HPec6~5b`u>R&ithWDq$eAb05Q*5qNcz^O+LQKY zpqj>3fk9m8IIACqepA5)5S~BBllX4zcZq&Fy=L)okdZorNuK84OUib$3^AW{zoV`Y*o123dLQ9@J$YTo2qwa3gSbls{HKEQdbRKl=8? zNEbhCh=FA4;s*}NS1W*%b|qylD>CV4Jm}Ly%08hbBBii5v>Wwr4q`=+kQb>FHLgC> zdjLWJZBk|z?3s&9+8Ti!)I5Sd&;=2#6IUid)ygA2j72~)6L6B-ELp97)jZ3OTrqJt zHjVmYB{iOL`0-YkYF3W92>RuiZ|l}E??sBGEgi>T%y-Fqfno)Ee<9|(nG|ANW~SkS&tW)YE2I& zoAiHqWH_Si6WP%7roWo;y<2VXF{D28Yc)yrn1de6^Phqw)t#=03A@s`p>T&>(3%N3Xuv$jzsB6!Er-^T8OEFX6A5 z&^XiiJwx1}jz_xe7ZB6gx)=XuT!qC7?xOx)!452uN|s2DCGy>YZq}n5-!#jF<8h%= z$)V#GB|5Dz%YFl)Ig@TQ;A;$h!vOa`+_paQM1^T zuyz9Yg1Fl(Thy|v*yM6=xDbJ9xH8LuULn@pqI#~v`~&H{M)NsH%@QEEStE!k_hL@E zgT6)J04EaJp>Qb(76pS%M1O5`Qgvs(Tjc@wy|G0@X<3O?-Hl;5uw z)Q`n(^iP5X{vXhjNZk>L`!Z_w{4DwP-2S% zVTQ2U6u|!_7>x7|3$L0*ZQ4R$+a8UB#qb*i-H!M;MYjDY8sbFR_Cp?um37-T1l6Xk z`2UjpqU7E7L=*$B__oKRAp_q}cqoqVF$C47ALIXP@X_}BX!-s%8Zz*a%4oFRw*3o& zYSaJ0|JUH#6~$nb@8{8wfo~@d#mo0I1l6XW;{QwWp?#j>2~hPOo!Z2#ZX@M|+Vt;Z z)5PeVtZw^76yE4RyQ3lAMYsJn8Zw&YKcXR{n7@gJjAH(phvLN~HJaM=OZ*$fr2KaK zaeH5n|HO248(A^zcEy9wP%v8(9n;mOr{ihjgEiX!FvbJ4f7+LX9aD7+Spv~+YJ&eb z6>s3}Y5Ud3o<*c`+;&G(=ooz1+4}>B>ghug+F^YTLACXd_>VGEE*SDv9FHYU4D?%< z(3Z;aW&7np^|im!MwxAW4HRZYKZGHuVH}lEhzF3I^TV4c4tafSEYu+y^a@}!-F8XI&0m-Xja zkV4{3jLuROC`i3K77GGj+k8Y$XBn{+x1`1183i;_*hW(%$p1unj7?(yvLq8mlUU@` zXMR;(#i6Kbiv&dcX>3FyB3>I45lFop#jXy7MnXn1l}AwGpHYQq^HDH)9)+$MZY^98 z?myt(hO=%hG}XW{xIe(X2lpY|P1`PYW5;`3{^81sT+Hp(V3X-@WJQ!`d!#*)Zv!+u zUdT-nXxF)?8k4QVruwo}&*fEEQ-I^x=|y*-$6+BOhc?WxFt`9uRLiai9ZOSv(;*hX zP>LIz5I7Ch`)8`2D+ArV$N2~v#p5ue5B95`nE~IG)x9SS(FG|fmomYtU*HS%QFzL? ztuI+E`v&o-B%U$$uFa}%j#@UG^RZJxTOYAfVok}a?`pLyNA=9b#>ypy2MkSPl=2$2 z>^e$`swRM=87UE;tCszf>bZ7o!X6Aw|A~g`z=6>5aSjVAGf(v_{CbG_s>k{D5I3lv zMPCn*uX+}L5hB^KCU5|@CTOM5@zl_XaVXDCAfan4Xt!ex_VxiqZ58OP4xLC19RsBA z7Bo{4L83XqUGBqvd!VcsC_J&qLjf$#ssp~;0bLf0Yzy2&k)9<;UJ{FpB`-&EZ!9vF z{5B-NH5M65z6{Clh(*Sdmm>MnSY#~uawNZ#M@G9IH}*-u1#Rea=nJ@}O)c}Oz6#qT zX0T{1(3d_@h<$+-Fuy?U;K`18{MMEArZW68gR zMN6>;BXlw*wj4~2TnQ({xWIQIu zAWp?&VyW`a#!~qNsy~cb9&W|tL72J47R78M{U*hD$g+lFR5cnino5ht#4wk|F~`c& z5RZwKClHT`rRt8y#8M^wJyyb4s-k#IEY-vDm{_Wx#baWrM&dECRC8nO5_-nxAvqm_ z8-cs*M}?+*xLe^Kh3kep1!vt}Xu1~83-<%Ke}j7g?hUvP;LgFN{kYIH6D}XF6z<1x zzk+)iZu(=e*M!>zw+HTZxD#-LaMqu|b`$P;xMH|UxPOLggnJZjC)~4eufY8Ut`F`4 zTq>rY>2TM<6~Zlt`wrYg$WMXW9Cb9WVgHe)3T*RmB^LWk(M=Va)@L_?+{ebQ(z=0CH&qz0Q`Q*;%`rYFPr-W_$G0m2wyt) z+2PCJzHIm=bDs;oDct8*Clt&(G|=ISVRXeYav#UYeH)Wr$bB)4*)fdS zag5x@F>)Wr$bB3m_i>Ee$1!qW45K}U(H_UheH)Wr$bB3m_r)-ZF^pmy zBlmHP+{ZC;AIHdj93%H}jNBK)D8w)dag5x@F>)Wr$bB3m_i>Ee$1!qW3}ZqJV?rDw z_i>Ee$1!pr$H;vgBlo$$l&0+F-WW=A45c}alKVJH?&B!AkE7&1j*|OayZM9AVdt9t zxwPewtz|B49JkVJ0ESB24{Ex2H+F=H>)l5q;Z3|U_T0KK3Pg+s_Gfl6bRx;p8~P~G z7!E7U0TGwyIRYzSZ7>18?0HAgH6XL&kle>1xi1EZu4h0}_c3sCABW_=7$mxs0ZHA$faE?7$$c?M zbQJ@Vn%jWnJ`Tx!F-UX)1CmCb_6h|bD$AP32N5qTAfp`>0 zWQxauOcY0?iN}E+6h}0mICM>i3zc62BNB(LWidARh$2iSafhl;+h#_mHTXRd%({%d zjafT$xzB&jTp{1cx($n^!1k%65yGLHYR2|ae{OJOv);V6P+!8CU$XajwhZ?GehP@#IAn}1BvJ8w(=S(mK!B)0i z&PKr;y&q}#hcB!5WbX-tkc{3UHjB?@!MT}%qRjiDRhXIYeo(&R>ua;fY-=HfoWJow zm@bhDFyO97+M>L+mi@LZR^$z0XB!($&d!F3u%C6%j;hJzY~LjO-W*QAY?dyv9}(qT z&i00PMoDGh=!QPw>u}6F6vj08RXE6sjC6V^Ad1ShkM2ek&|@I~=O}Xa`6Wf9J=Om~ z5oi6ESiZiHd54Hte?u{e+I&2v8+4o&E!JBNsU%2n5yIKCF*|P{JR|;!_U;_$j8x*@ zO#q4ebyWZmLv2DH@qinQozXdGc zhg%1yz>U=xfS-xVX?t@U9YK3rPBnV+9y5Mn>mrLh(}=*n7awVtjx!81I)MZ2%S22t zWWi;^(}9O6Y^NCVQ4GC_4;b5Xe~OJPKB8>TDSU)sAlWY&NU$KmkjaGA1O`p-vEGkp z7-8`6SQ%gIs8rIS020i@e(J7w-l>biz ziy_1{*gsO>2MUkTG3L@JlE74k3_BC&Um7N$S!om38tV}P^#Rp7FHZ1=x1q=}XklPE zNuBgkEPT^9)*A@HMnYq~1kI5+nr2Mzqh&?Gd0CYfDk}{r-iiH`%LwIjNm=dxv$8Jy zA{HuZ^e~RI_rEM_-T;lLGbq|}5<4)Y8XTDc#_76WzKr!m2l(d=JjNwH=ff&JO32SJIuBuV8XV+vusrOw$KCQHU)PZruh+)#WT8wdJ{dZ{9P{)+NDCf=6?C_Non8^dv!Wk6E$OG)^*BGXZO%ZaqN5~6!(%=6!oL-oy5Qb~I}T^eXANw-!;ielQmq}vyPWd}Hs{mU z3(oK?bxf3P2-40;^L|_N50c1Mu7)iwo`(T(pW(d;-W4&RLu6SgkEd~E%Em~WJaS;* zooR=fPMF$oZm8Yl;&YILZFbOh5U7EF)~lQ{Nmtw|*>07ugc0WioRe|blfsk9Zzq3Z zcs%(9@(XPHqa=p}R_0&LHa|);bq)LDKHzCSijqhedkuk~bQ9iBY(EYuAqxfWdfzSP)=hN0{iJ}2nExZg)KZpFM(lE(*+Kah#Xyl|C}HT7~dZTm*y`-9`^*s zK{YQW^qw3DLCWa;kSO9Q3oefs$-o%$fy4`wzux0B4n@sk0I8N5>5V>Rc^#Roo_WCEkbkXNrf*DFT*H3z zli}H*dlGw^p3t@B9kO)Quscglc>^^}T4iESI;eGnst(F&_c^lb%-Uv$N>RJ@$=I!3 z1_K04&f0Grn-Qre!xEv+v>dVeFxL0%5h^s=7X~b}`)%7&BY@OJjyoX}8OMPjNzO(D zHfaHYKrI3*4iCY%2EKgGsSsEZsGjS;kRYY`F9^~&|Ai!5OCE+6JQ$ZnAP|v0^KE$xZ@eMh0>~`9TS^B;X%lIr+c6!8cXQ(s@|_%)jFZvaQ*V6a)MG@|syg(`m0MIVA*y`7=YTJN%s*_Wc`x zrJohsgDYhd4tt?uy$?Ty)Elq;3Dt-2IIZRF&7mxh5w0lBHir6L$i*d=;5gpU~e5BI((i-^d4(EK`&C; zA<6^gT#k?@0Awv7&*OO?`>S$nIt%q- z6YZ}Ii2$F^XS*U;T+pmHACZmY;GqaJ9eYL!e}m&rLB5j8ZzO9N*K$Z2N1(~@Sdv~_MqTGcz$qm@ta7`njOt} zA=I>U+Zqa8s&bjEah4OZFBB;->DfhY6zY~p~@LmrI~y;DB$6AT(?jM!Gv@}d4=NZ5v?p|^1;aov$t=$U+WB;h zBbKm$Qf5&~wP0*Avj4Ux^r+<*QM8rFWkv87GrZX|JM#w6YAexeZ^5CDAq#qsQ-{z- z1OZ81w-CwMPl%r=p(JNJfYWW86O2Vzy1^Y?&X5uP#)X*F*wAi=ZJFs;uqTJJ!cB#v z`K+9kr(;i7;ud4TS^)t>_`Pz{68bbj8LbB3Lp(}Xkj1kho zWx*$Fw5EPUph*j^2%VbhKY^_XZ2X@^ob8eG$OBsucGR-@sJ!eM5h~`UKD<(!PT~LV zO6=@4AGNjY1Kd}dFofZkXFWCxQrC8Sc;6;izupW z{vsBc{ojIqCVOo4AooxOw@&|$Lem1cQn+uzCH}V1bOoFf?oPM|-~w>F;CkVd(^)LE zEN}nvfJ(ITv1f=rtgnJT61<0+EA+9YX@oivCeGP%LhnZbmD&iK)YI4s>|@n1m0A!} z@m8X<OTyTKjK;HGRwCpa@b4ju1(;6-wsynQdmIvqoMs@FlPoHUBsFX+HLt-G z2RhAC8v5Ca>7n;iwUrPjMDX@3fSK6avAMYE{h>`H%G^b>cVH`Zgtikx%f~7-$hIxF zqRT+gI+0w8*V!mO%^UCqRO(hZ?gUOIlOUOn`Nv^-HFR76Z-jgswBE|Ft8XcZO-cvy zJ`R+d15<(59w@g5mXMBm0;H>nFXUq5^vQZ&lo9I*u-Moiv7 z^E;BUJZ%Odu;$JLcqWiXfM+6kL`=?71u9NT@Xg5sSAoNy6N1|(6HYl@-JU#v!Ut3u zTB`BBY0o~q$#T}%XVCdnd6(7yo* zg1^-vJk^<(*TEzsxL3adQr6CoNy@6A82!ia2lrBCpZ5dB9s$2Izs`%$sllmWgMn7+ zK3Hlk#Eufl0j<>MoZSs10zSt3T@P+uSs4$t8%M z*h*CkZlU=tM+e)_e6~5T{U+Xu=LK6cu@QsuDd#Qgufz=kOP|Hk2XJAUV6(#G@lRTi zB2st&II#UjKFb}Fe8w#22&Vs&|HXNfjY*z@`c826G}=_NS~&t(>Kkf#bUt%XV!&ZF zJr#iEW^Ej2LIgjp(z{u339dX zTTLIIn~qE_S}d=8Wf5#o_k`XTEr-E8vXG|cYXLtJEq}phc2={$(G1`8zR3@M1{v9A zETmbNL7~)GkW&g+@4-}`%TA$eJi*6Ez!%S~J(eIED8e7S-w+ zUY#L}B}AEuO>abL`4Q35_ViFq%g0dEz%uPpDx->lR$4l+Qy5!wfVwEKg;u`2@8w01 zpCiypYbT_hjbU9x!#aF<;4v~+475Imf36zV- zn2WKm&>GBJq3`O$;<$rWUv;KsG|Yd92ymeJGytHn$igD-bxRkhNjh5MNlSrY5lS>4 z+&?>lobk*$k8MVXF;y$sh0u@~IwvX-%ld+d_C?_^S zkVpSg-rocf)^a%SC~hAJWL4xH3R>R|3f+M_i_Iix%3uKobx4uQ?E*bjzcVik*;N+%%_Uf5WV%bKHM9&ps-F_poy)Lns0R=1s~+o5IkD9C-5Dm{6U+6pNJ`F*DBf zznDXf2DuoNe)2}*ZO$W*i&vscH1i-Xtx})7@ep39+i&c_1BoXgF_ub!C+AQjLnNDx zwc6$z|4ga78>b;9c~Q36ki?sBJZvQH#RD~%j{=dg)FR}ck6NW$UO`Nz<<(;4l_YdD zs%aL@=u`#e)1*=*a-O;d?;^&lY}=#nV?)lEwsPt0Lh5ta>xTOQ+z~k9XPlY+2`z1^ z$gj$hr_)EAHVUDSQrPdw)IG25d74)(BWHe1h&rA(p?&k(f_tfwXMP=MeG1Ru7NQxM zcI%5zVXk`Y-zc(GzY?FhfE~C#8u_J&GK72-O02`ha5&3!P%oySKo@;k5L!SXYu&iIq&iCWjyru3AehXR&ZigpT7357l~J%oo| z0qmFb0x2lTzZ&V207M#60-{>rjWPymeHb#^l|)jujT#&+Z#loP z16L3|Mj~nG#CXejwqjBMI{z{in2o09oWC#&8 z+U>&)f90LW0K9b+FadyfazOO48m(d^3JBfhe}H|Rh5PRFxW@zTcW}?cy$g2+j`}YB z(0}R1i1eVaDX_hOMquy{1=KmAv2M1Yvj#jC(hu!N4uN*%*rvdf;xFm-QCssaifgt} zKP8au6y(;`6xs%2unn20brSJcGlLQKCa!_`K55nFSNqQkvbE`A8<5#H&!U{R{Q`df zDU+@FRd_}Y*jlVSdN)GsAkEI-g7W#esexo5`giu$C;C57!U;Jcc932j13dIH_{Xc{ zS<@kI@t57o$?3}R>CS`ocE_>mUcGA7tWOuy1yF)1r}NVA|8oxG&{mFPQPddo$Rn_A zvr^ zq^AA&Jb`846~C?duZZb;3x9cSXp1EFKxW_xvOH%)d2MJFXvH?NGkEjFGl&eGOibYc zGC=16qopEk2-`OQ0PQ;3QY}6@&Hn#u^{_Afdc!~nd*I6c=?2ZJS*Qv$Ta^+b>a!)h z7ou5E(E^HTJ|yK}8VfX!=Uur?dNzm4c&_u@y;F~s@ zy`3k13q+13UScHXhTCNI96QMz9lx01>=?r5u%kyi8;98XOjNV1hNV|27}qq$&b1*M z+vc^@a*y&c)`u}h>}h1bgzj3C2Wxse-cc{b20c3*#tNc?E9C%&4(AJe zjPZLT#tyQ(S;!b;cF24N6Zx8yUoytNq!UI_La{z+*HP zA>3@?!|z05N-qWY@S^~=tAgzmYg2Rx(mr8eOS~aTEjEDXg@F!P0juGPOoc6JmaK|g*WCxl~P^%a%1OsaO zmo;mZ?NT%woX5b;u(pyLpycy=G|8U}x&iCXUHBPKATUJMB$-S8n zbMo5Msg&?8GXgmFxfq8-O=^~z;#MY@8~S4BuX`(=H@Rr0VGr41!t+r2^D43@UnW=0 zz?Z-dM7(pWIq7IT@RO!MgfuUZ3Y1Z@zM*>P)PU-_1}6Yi56%JL%iz}mZXVoxxEtVLmA??i{jlDLc|O9h zz4y4_xMe+_WpExiFI)-S9dNh8-3hmpY}P#$D(uH$fv$R1sva`QMqoAEx8Ux9tAVS9 ztAo2w_1v#|zOQ=LsGbK@&sx<}uX-faBdeZus%O3Gc~JFiP(2T+o*$^52G!H3dN!(_ zO=_zj6jNK9`2WNFU*Z4F{GWEw)z()2{|Nsl3ahOe|0i=3wUzPz&HO*e|4DPCw$i4# z$`|Bn>o)HHA^#`i9+m6h)K*%*t9)s$wvrI8w$jdy+Df`PwUz9()K-3)uk}gpClevH zbqD|dDgXZ&|KG{~f6o7R@qb$EsI9cRQCo>MsjbAs)K=nGYAa2KYU_XS|KIR`S~IJy zzvBNiQ>(4S6xCMZlWHq*O_ggO)YfO=ujy+210Kf^`5b@sM~XB~3`dU%tF5&3Q2C)J zl^+?#i#9~Dy|h36JlH1nzP)5=dDY`l@t6LfH9|Yjr*yP9_kB` z!D>3oUPr+?mt<(t^$Hu;y~`hY(qVF!)h4Up1hszr=eE6^RQwGuxGkA9%Jt@@S{ zei&YJ+iPnnK05(==MAyQ^xBmim?G~%Bx|&5?#w9rLpN%S^S;Iy@2iDqjze+iKky}( zv=-`i`V1qCJX@&e=@WR^4y{=W8Ncgh9u_G~{ZIc43!GZ&gjx%ALH#(w%D!x^g}NUu zlY5Em7<{!wymZ+B=q#psSo8J=tIS%mhlQRPyuhZ|p6;yCgj)+>N`br@`q&w)J(UrA z!@k;Fg9_Ouo$;h1ba^ebie>$zJvoYP$GrWd-+woCHHZhpj8LFAbRjV`G#=+#{qIl5 z307=Tv_#OrSP6EzjdZkyNZXBVa7VG}p3;F068P!P=#=&XaO4qGm6{d>w{0$l za;sR0koji%dq<*1c65;eEP&Eu12{gJubxlc3Ae=18Cf4qi}}&xsdTT)=!L_xqZh3p z7B}MaOUG#n-D{d*GVSEI5*v{&x{%Trxg*QdG;%ZEZ9K8p^)(=c1_<47zLU;GMp3(P z@plXhUE;j)#24Pywj&<-eDOucSG|}FX7{BjrWh~w(rwpYz!$9yKITD{F%^C_$R@no zc!D#@IDNf~M#+hbregOu&yADwTeFG&q=y^(>nsq=v9_XkgvZ<_hV}||nVvxp?Q|J% zky)F|i%gMOCU23+7rB1VWw;9?Aq_n%gS?e2^$&Qk&vHJ;mYTD(s(#@e`uotND{Xdf z6ncIN4K`~_n{37n`UIYnN@;h|U+7#y(5h+%7O-N?tRxbM&=J8smaYK{#F*CEM`qA`Bgo>-{)k3N)gQ;clv|?7;d?IEGCi z!klHGktZ*J0jOl>aSR0qYWc5uZ5=zG0uI{e7jgPd&TwA;B*N=&_UWHadaM2C&Bvg zA%N?D2DFikZcw+XV>vrr?qf3U|B&wD`BT=Defn%0ir>=alWy?p#pJIHFQmM$3c5va z&^_$+>8nv6PGkwUw#s5e9@d{SqQbT@`MgH??5B*B)7i`|`XVw|u&%j}1>MIYvbD>7 z8od#ho_qkpZ}RGoqQ?Vmr1S&U|Ded+$Nbr*a4KMNzo)(`n~K6Zf$+8XuY57_#vrcL zSexF|NB(Q*uf@#c>rZ1RWnYV#9cLnQ30|X>1!Pu>mKoNv%h`H=q79E`Jdc0B=4Ufae*z=tQ|Vk$I2idTOD+7+cH3;nW7sj*_I+firc zJ;00?=mDb@kJZ{9tup9n5FlFfAER<#S@UmCkJo(XW^jIFo)GD&&0d2k&yGL+Ac$CN zrJ#v|FC(bzvv-ib6veUX89c&D5mY{_j=71l>!_$RS1(vxi;gQ#pn^v-j(Cf3XJ5vf zc%c7Up{`zu9h$}W07SifH32T-y&q+`(imR8-~+?X{l2I<@6T!&`ZvDqqwR5RZ z4k{FAisq}GPZ7BkF_lNO9KBnn;UH?f7?F$~Z;`3mXdNetTAv!n+bM)UuIkX=046@V zy+}q$xzkH{BcakRL|Mt{y=Z8vC7Qukfo`f>b7+PPy1^`DD@9xZ%Hqj}e0n3^Df=>6 z7gRVMnB~OC65+u#HUT>rf|?L9W8Ug02U<~o69Wv5OMY_bnlW-Bqo&iM8KNXxC1RuQ zj%7L>_@_ZWwJXs9>R~vUx)QVD!{Em%?C$*?7*YOvQ%v4q3th~Mjv@LxT>L5}uewU? zbdOuu=^lS=B;yze6P_4_;_o9F?;;LV|D$WMfLzx<%}T8;`{fxNSI{j(t2k#N1NTO&?de84Xu;lSiD-?(TB#@}=e70GVu8u&HG>|j z)hywj(M-*q9tJx|r@@Pj-BL07?i+kzEzNXxvvX?`*ic2}hGqI+t}&VBG>UUJ3g(;8 zzLvkS#^La7&eHU?*D8(aCKi%lB07k>20}UQ-eoj`f6E&elY(@EG8B<+oZ}WPN5Yvt z{YBIjF_qG6)q-LaMoL8#MQIdauf7fh01=@f+TWp+S?yr~|Jkf7?@*3g9F(o$5Bd1E z@|xm$Hkf2Cs1`K&Y@+Gq&(!X%LY>BvsZV7*e zLr6FUz#Ufh9((Me@r}*=EQA8Jt zQkq=7A5PzK0!|I@??@`rvk$^ow~*Sxx8|D`_TnpSiOXW!l{?glsNiS z{c)t>%)ER|r*@0z(CF2uz~6YMex1ntg-)Fu?bNKy+H{;)1KOB$MbeedBkY3Fr7?lt zpeLY<#(H$l-^`6-*yCK4zSh&SUrO=mkIyvN$Oh`*xRkcT=-?M}&W97&1!8VgpM0Y} z)WwUv_N)dS9X~-(?Bo~=>>F{(V_T%3rlJ6{he!S>P9D;8);&u(g)A1UOvVCX& za5&vtrW57N9_VM+9MDqYr7{FneL%(kFRNK zB*DQBZUx#-yH}57JO!48J%l&4jC>R?cGOKvosST{zhXI{rRI`Xx9^&ZXWoEMe;^S= z!<-}5W$DiVTcrkpr*$soj*Q*Fwre+}Dt%-DYAhjz{)-zyfW8~>S2`4lXmU@`{S@ZZ zJpk1oLbT?7a=_hVmXd6LbiWA^Zu|<&M^E~Ek&Jr);?=+N^f3C>&%C-5$(j2!gqLwz z>Em9o=K09HvV)->^5gn7c&#jMK$d1XQEys=@{p|gJ9ug%C}t$%@yCk@eiUeB3}`bv zl~E{~ayic?z6UbNX_y}M9B3aa`~2wpOtwOjM5L&9^T_WaGA1$FS`yH2@*>K}G20`D zDOZ4fh#8R`sYGXLCRJ2aoL$NqMIUZprbRWF0|EA*cN9S|+kAK+-x zTaL;zE=7a4qf+wEKo-IzU#=`B+1@0j`*hm+!F+CO8IM8Iw;CbV)ps`@kdSRH#M42D z^|qFQb)q45a}hmCo; zCdUX3#{NA6hult^YM6n+1qJ2u4%Y}kuR(E%*CorUyYkIf-SWm!7^_be{M&eA{kqO z0r^~}y!0U6CCC$$m+pfnajl5#`e-x-Ti%2EL!UqW; z|6l1}niMcE`euW;=%G!*+-%ickUv%a*uYRX*<1SolI!;_j*>tYjW^*X!Ipc_R)(Cp z44eY^^Z%8ifNOsZESx&7T!m^vp(@m9Oh@%N|re2joy+gLemc5&i9IZ)> zTI&LtM~6BMhL*Nnj}s=S4VF3tW!6>%OvfcF8p;~}wL?;1+9Iv$r7VCD?+GM3IJ**>JE-c!?l(2^bJH`S#Z26VW;hYWD(5E)` z#&`D%=*+>*<|33#EA3}#OK>7fD;>7AoFpEceqAu@I&Jw`<{Q?Q53%KE2incrDyzIP zbY8esIe+syOWn2=SM~}p$6;`BwS#!Zcff<=3Z#$|@*a3K3AnF*>=K$w<<{==t& z&Ai~_>=3WCB&{eHGH`!Hw6zT4{Z8tA^x2Phsf4L2LhSlx^wQ9Ao2A71CzGF4%q}qc z^2l4pd!8hUdz@F~!DvdCU3p5~2TTTD=CY5J6dC{}cK?P#lRQpYEsXFOzVq|@QOo@MYpFZe_FR%AB^%;^p;op8E5Sdw1u)vv=?huDeX9!aH9 z;!LDEtrL{*iRpZ}@F4{VZ824E7rl*fdTa}f$zz!>DEKRaiykK6#^GSe6yIRB=t66>d8h%o2O(xI6n zDR0OrN=LeL)i7SH{RmHa1AE7LgupT`0ZRl}_@wiQTnV813Ca&d^dH0lGW;>6yDFA0 zmA~Wgp8!5h&!@3_q~$0;rSxU`I|x>?+w7W|721{j2wyqa5UE|xOIc`VcIA9TTRtqM zv&~zn%~-?MqF8xvWJc7QqM6HwX3A%kdxuTIlA@Hin0!{A!nQR7KH?t6OC=<*k(mop z{v!3U<-_biUgRGb%vrV+cn{(Tx{*y?HZrM(@o8f3@#63xD?Q8ZJSVX6IT#+FX{AG< z5ur>Oxp^blOqFxc)|?79#cmaxw~F#Nl}L7DjxhkcPp zIiJM4($h0i!q)|FkMW);Y;ZI0o?uc_M{Gz2`#b~qHi3^=cB{x95|qXvleR%XuIwRE z+aSWGjp&1tHhhNh`&l*TzDA%9~EzLkD2Fs3d06_kL*kbTSURp#)xzM;9S?Lfh)U@&1(h0-F zGl!VmZ|Mz|nJH@CFxrQuwd@aWFl#r-mpLz|&W@YsONX6&Y|F{f`35nX7`#Q`1Hl*q zsWjX8a9{_YAIJ?BX=gD(l-@jYT^@FG&RB1?km6?CSnvB34-&R z3?;C$OY_*JZ`293rfgy;n6N4$8Geq97TB~(j%Pw6A6F+#QOd-Kc9XVIh$Pau#=SO* zXk6D#G8)(%t&$(GvjXTuVAq`3d#n)ssiW@Z@3zqtcUQ1Em(OuvdoEFP2}+xIE68)9 z4tBXV%LXf-@N0>~MazOYTqFg@kI-PjpP1HQL2-WlqF}LIDH)0=>S@S#k)S$^N0)23 z9}kdF9sU$cuM(lluOosY6KTp0mh?Lhtm^{H4c=}|96}$41{7dgff&5is+EXZfuP*8 z1N)6H?x4XJ@Dv8RM?$!3!Y!(0g|cPbg97KV?A61k1`o~fiVU}F8saJ4orNWb+iqwH z*k6KcrsR~oH7XSFDofDP79kIv`le8Ht=KI3nt89xW5!i?_#U;F~Z zlboN7ne?HKf({F_|Lp?XM1zc#+H($?ONU9bWZUv9&;$wv%&?(|aC>m+b;C-8iyqZ% z)!AUy1#Oibk^-e)W!EZ24a~Mu&~6j)@2nK%m4T(n0=R`*imw)_@Ym1qH%^MrrJQ+S zE)5oKEi$P5Mi`SV0PJH~2A@ZpdC3tSoAT_COlWWx&BGAVmYQi8F1H3fX6=??t!Um* zUonUXMjZ#AL055T>N080FJOWv#Lp<%8fn;BsFe`zk9b0@p+A;FMnvDFot*-69Wb zvi*`=N4eb(h_FQJ+dyzJD*A!KQEtbjl_XAKl2*pBIC0#9Q3@X<3IhOih;ccRR5l2~ zD22<$P}ptPELu_KFhpqH>y^cOpkav67QURkcQ^du%WJc<|53DN{d6LoE-Yc!5OW#j zH!c#w|4i#pTQjYW>jZRBGdK~(>avQ+pGgFI8u5Dwx3gcqLRm~c*l6vdr?U7rJe0MI zp5Y8FX(xGL(xqKb9;n*1+~6Z7lM7b-WG16|(u2@8msz!q_(+wQ_wnjyCgA0=ukDXH?6}_FW|ASZ^VUp63+()OgCt^JvYH@$L@VoJ`tqL zB~Z7Jr$iE|>dIpJ&xZQLu0MrEr=bhx55|D6BbXmw%d?` z@KvocdvGH(=tIsStf1=iShBODVJaa@Uj}8zuwEBOcNK6oxrcfCbcxQ!p|yt$EH^lL z=aMq|3PFC22j)!IHi~_-k(iG(e7R#2w$+l9O;!`usy91_Y|Vc`?ZP^%wo)HrXIMwh zpz=v(Xv7jaX|=4kE6xZs8I8mC#uPL)`Ujd_`V>{dw0_K()4e_vJStvv+FJGiAx6K9 z%{O;02)2Bf=x~U=x-mD1al3rjubu@+B=lH>@aN9%X>Bt@TCtTTaF3`}i*qb+`Wq zhTc7gmDtrvF?i=xk&ilU0?#$)Fl0*GbBE`6GjX{y(vT%mY}O}%hb_mPkJW1hTM&GL z7=!b3tW#JQtt(~(g(>P3XGeXqdBU7>Av{j`reF#dh?*J9qmOoOErb4>OcGR{!TEM4 zK6V?(#A&KrjGYzcD!P5FEVtSoeges9I_?N3+MYXO z;TU9b?MuN2MCV}r#-K3S=@#qP1?XFnE?}%OuON)G3SHsBV3ys9mCm@F&$X$9)F{{k zqIR8XM+=5;aJJV^n&YO7*3M^V!oS51C_cUOi(uAdBV9Yv6~xj}h1AJGkND5~ZBVh{ z=7>vZ1Oh>s;Iln99=n1f??D|o#rDvU729^fhOW$Y6PY_br&~=h+rUq0^o3W~-;225 z{Dh#wY1+AVc~F?(?5rP8mpE8l;j_+8`Idk?T}@yXXV3Z^XaBmZqpG(EEUVf6C z?D8*4GD+vOLMrOFLHj~cv*eVfBO^@hL_qg&tT7GM3_eC%W#9d1wDQfVE1O2VFM#cfO(SdYlv9@J z=da=FN;%o5{~F#(+T;|?71BMh1!gzp4AEB`(^y&N66`CL2^;Md-evkd*xtjqfVo>Z zPq`40CbJIqDs9^xpUwonZHIG&xXu#C;Lu~pZ9WVzP@cUW{9bu&|a- zYuMjyJ_}1ds8DeC6GX*+CimnWTCn`IZS%W`_g~0vnB>3k;HEU&-j0C(EL4%W!-RT< zZEtgD`kl0EB;eGX=I*gQ@_ j_k`fLjYn`>_OmOYw72P6Tqv)bEy`)5%h>)$N60eogVX@C^c!a)U!(;Bd2_Apxu)ptmBPOA5F2!8< zhCGw30rbBk1cfgQQ*6PB28b|t1i?N5AsC|A_P&bMQ?RI@C)}qk@9+CK(MWy;PySpi zdA}`q7;mWjeFxwP3L2$EGR@uJw}&TMB3_2E|A-_C*b4u+Q2z3r`~H(06Q)W}%gpp?ht?$I!i%p%u1Aso&e0 zAEbD_(3syq?KN=s;he9nr4K6CnnCw)t|$vs0jznIk%*kQ7xT&{PMIfxpCIfatPrqX zu{Doi$iWNO5yL=Re*jr_EF857@YLt9rd;mU|EBsNH`!#~_cVwe^UBQ?3 z;M^y!FK8UH1>Zn?m%AVIH}&=6Z)|Cde5n|cQ_n>~ptz=_UcEPm*Isj!*v+Y z1k4?9UlgS&wwH1J0P2XGqSfsCPon0%?^4b2wvP_!?d%~+V7H=g3y{lJ|Ap^huiD*D zSz$RDkzWHphLLMT?q?;K_xCW@u;zY|S~yyxpnDHwHXUfNNP&4|(@8(lN-$*Thv**# zie%6hYb9ZyNc(y5Xxfsk^mDRagU?BnUNi?^dLD!Vg)8)LkTpmjF-k@MuC1Aftmuih zW-=%TnVRV#mD2!hzKAp>i2EIf!HC?CR9)^jvF&CGFUkq^4)y&3F-Gh2I%5HAG`l2% zr%T}JpXG%59_7jUu`x)glkvbJ%n#Z_)HF$}0`50E-KTPea@dW5dM4E!4wpnBD2?Pq z6%xYN^LCkr7R0;kN@-jTv`;mf7*51fgQYQV^}dFW<+dlnv-B6a|Br3q&*K21{tKS)nEq3G<{hFp(zKRCo2E2iAh<-wP z;?jO>+9%N)$%!5CC+_f8K)PzvmhaP#klC8N4;zaexe>Xo!l(PlHtNCx%4eg+vg%D3 zTSQ8S)XeaI0$~mU?jhu#fLe#gr>MAoK6?ek~b$jj_#*Tfj1k?gN8(pJeDJWkRzWR=&;HYqfE$Gm#t61TWo7m zOwfG_EGr^^;MM0Dv2+_Q?g1CZq{!7j1UjTp8s9ZZ1*FB_NOi{+L-0XdXJaV@o^EfU z{y91vw(Bc5&I^{FE(c;BuOBf|v##4wx1MlDv?#DyfegwGwSXIqB}ijS`9L&Pqt%%C zFz2;Q!ck-F%X6v0{#l{vSjC6YroCgSI4QOa>v;uq6wpP{DK+ zr<5zn9s}cCPJ|w9RY%0Ms)HZ;weym0oPqUBrVpEvnPj%2{|3AjoLjjmg7586RW`j3 zD-|-+v$Brcd=)r`bQPVRr&W+`Z&HN^sj|Gf98GpJCF{5i$xfj7d^Mz)1ZDzDi3UWN z8x#z&@>m!zYv^t4D6(_0A6h>fzeJREvB57hA<7lZ(swKLXQ+aTk1O=kv(b?(mHvBj1yjq%(zxaN zcc_uW8Bj>3E3?S74*POsS2vE@tDD~oU@WZ-Gos631T;0WPSlhBjPC_C)mR5FbV%@kC*?%rUzOm+)qFK5wD%iC|HeOZXrL;dbY#*FmxT_KNO}HM#aghv_l1T_t zUWGNPNW!F+RL$_sN$geXU?Q+Sg7}p;kasjMvf%pFFxA>vy0c^)7UjY-ShnP|5?EL% zQZ6hu?Pl5L)vu-2Cc$<1B(!tKi+NZ zwUhQ>PZE8Gw-J?tbsChDf#gNslrCGeRhtu8kT8xeC$dm`LIu zKum3oRa+rwnc50bTal%e7}kX>gW41WEbn79a+~wd6&qKv%XtG|U^eILQpP}mRguQy zVs8QWNT0^{Pvlrq_%^Y5r{nLVQ2FKG8$ zwfjZwTJ8QU`nV>pyWn7i(yM}!!Rk2qWGr< zCKTYL`912C;%FA1gcG$XXfvJh`6XJOt2mJiz0qN?&cAnEjdh)Egv?*ljU)@n- zcsh#{U=|$>RClP+x4Z>8hqE>BLsD9;zDUmmX*^%X_5Btht2wqP1$(=0Ix$XsjsQ&) zS(gc(NIhUPz%Z?#oxo7;1MiT&!+h3(_J`&9&^c8o=OWmUJQs@ab?2g&$XqnI=nY&Q zOzY0T?LxKx_{08l56emZgV~zT+O&~dTEa%Aj2nMiVf<;>U!te5v=ZcFd(K>-rB!v% zfeYmrR1WrW(Se6n2hQYE3pTcF*?s^sWkEQ-9#A^9Tzp*6)=b(Ay2I0d^LSaX;#?bjQI@%}dx3?5o$PCAaiF{kFo*>K z)1u34&D4yGQl%6%xj5ps_t6}+WI?IDJ`)fwGR93(-1dZURcCT)F_47ojk*9f=#JEx zsZwJq6rEim2NjbTB^8iCZmv)Qs~>j+^qB%QETvd2x-Kz1$JuC=Q~ZsQ@p58k^7wFO zow*Lz4vBn8g)T#HB!Tip`B5a>!*p^B_nldS66&0^+l5Lds7X1ERxBtWdVbY}4V^F9 zdRB1r80?8PidY=qICZAAS(z9PFZ@ET`jQbmfFaIVY~2bLQW0&Dv};WQDF5 z=%vypthM4}R+esP6I>>2PdI}4c)bLwe}nYXQ3xxX05^=h&%&LC z`vC4;I99af1Fh)M5Af9S#PxDpPUCqR&wf1n@jQ#?Sv+y`@T2&A))s7RJvtl|f~dC1 z(r+1xQ6fSWcEK%$TMY;0PF3~(j;&PNv3{fG(HNBR5^8`HG1#DV9p9jg(%&&k|I~|T z{%sifwk05!$l%+c@)~%7E7l(8jP}T(_UJ}g071Z8kH9|!myH1K@R-@F7F)`I_;#Y) zb7Rm_xuWk!+vt-71y`UFjmJQ49Rr8bqju4@`oyAqN-b)8_%3wLF)4ssLjDbK&2XFH zw!=LM_Y~Y8;Xvms&^ZgwOgwP|*OqiVabNQmJD#}MZ;KUAd^l+f?(}_B#8bdixU^ji z`t$(b5jY)gm~hA1#bZJ3$Fu_vqqbw(0CfY55qC+uDW{7_IIktuv@Y$(+N8e{qO4dq zO@Hq&rbq31V%J@X#6`2wQw+tov%mf_Kj|&gBAuSZ@jD3y_fsZv1^0xXp46 zX69R~^Qr2=dEnR`-$Q%Et8f7UOG@vH6L@0JE9fEVD;f1`TMr9Wri3H~#kxN^S zc6x*+Ik9eF1ukgpDB&|w+uwosK3akdDKLkeg1x+GHn2x}@SlG{4=1irc;|qYw1~e7e@Mm9Kc%0hv7gU^6t_EDveqS3lQQn5v*pQJH z3Uoe!8=;EWocD~;I|`vHFk|Dat04s%{~Wg!hoII5a6cc#*;*Kiu%JEv#1f2G~r*20zXO9<#U%IeR@%>Fud6pg&l+9qu=Wfq>C{;w%U)~T9bv$b<8;XXPidk@>1q|iH}36 z{@$vg_Y${qPyc)F{&(e}cT0!f{a*ijtMvEW`n#8_c=fkqJJ!*GEwZx(z84W?*fyi@ zWYqo)L3FN_2IX*HQlzJ&?+LUcmp7qS@an@?P~W__Qkv^g7SC=gGMP8p@S+YUQ18Pl z92%vdp`Q*21OXfcw1wx~q%HiIb(i?_bEWh7cG+AKnBal{uG-}RKF;1Vy?c4L zQPs6EOKy;vJls|UdekSj+R3F!XCyjHr44=9<~L3KKjb8iQER=zxZ*! z^zlho!^CChb_DYF!@l9D?Wdt~tb+5e!L_@VQfs+Rs$ozeA56Wx{5{iqSq^=G@WDc+ z-$#}yg=Q}-<8MNOw!Hlufu+ZCpj@v66m+ZdGr zJyFBiAs2%VR4ppb>nzl1%Jr`{o5H!6Jkn#N2+sg1a4j>@!XsEZ;-s*=;?*ngGD?Aq za&o8JbWO04uEv4Z%3f!#&^Lp<{NMJz1-_{&+xw(VOK1ZrP_#;sqfkUarcfSzfTWL< zRw)ERTPhalBc&~+smVFCcqyc&%#g+m&Wz*C-0O8jgz>7Q%tOG(KuZ~3GRnhIR0dHQ zO%3CKU|XK~{%fCe+B8l5yubT>zwdtcm%!@YXTSH_@3q!myXe56#G<+0u<&jmC!Ji^ z!1Y<`KtNI^&J(I+Jz=%hVZMEy+b-Q*~mY=g2UY*K(#=fQ}uE z(M3%*h?*=DMcGRA0$o3sgqns>by-6jO;S_4E*5yU@gU<su-Ax;xX_8%LujN3}#|gD-o9&%R05H3~iH82^|ky_i#CB^Ru%a3LZA=z<{V z9f+WYraQd77hhL`>TXY9y%Iqwn6@{VbP+ZOQ%p|~b{`f8BQtm%jWGtuYBa`Fh$E0E zyECHk+>X#F267Z3#G$x;23NW`;pg-ZoV}4{aXV9)g)29=GfG&2rxQ5U8wsSLvuEXE(;{|C)8b`XP0*!Ne zGaP1vmefisDt$PRfVXb;6MjxjIBg`SnX|F;?s0mIoW{-G z?C11DavC-pS1w!ef(*;C1x`LzkZO(ZB=%-hjG|>;4OM+1Trgj3rTT*C=p9T=GI9x~ zVRQhxSKu0ANAQ%99R3#UroRH!7Ih`Nqg4y`xH=_9{MN0_UFO!h$rU>-I0@Jn;3C)# ztm}}T@;o_~?zm5o|X^kWtWoq(vHUu1hfx8Hx4I3(K} zHH%*pnQgzHufIwn1<+^3uj#;z{B~2)$0?&JX~=;^c#@H}Yr23sB>7q*Q`?2%vt|pb zxdomxkkcuGgq+IjajXA?wHrs}{d?GcHSLmfdJbY>*E-m9H}GBjA>~m%dcjbFFBNDEfI3ro`Zfr4&a5LC*6W3CTpc$el{6_K^@o=$^6~Z%OFKvQH zQ*zEbmM=RP@iIz^4#p{z&OW7o6w~jX7Z8@+jVX}t#%v)>Ij1jyyXz)yx8N=^tsZoB z#f0f352;}zLGp*{O-9c@|3sC-wW+jAD51tvKqXYdWB1`!|Ik=a=(&}}B8FX#bGjZ$ zFJHEG77R(A)Rl+BJzjrs+zB2EZi_T(53*9DgJ7&_oHMaa23yyje3zJoXIAz0t9J?a zfS{BBl`5T&rE8$pLeTnDQ11}g60_-+Y(2C8mD#=Tun)C;JeN%gWb3_|%q4<(x5Vgm zJ3s1l_$Ly9cUiqY4 z!?D34nl$7L;&e~$bLPh#_qt9#2#U&3+zJFKBJ$yEpXx#JQcDcV`GBJ_j>G00MVW)5 z2&uIC3zHG>Hoq!HO8Aj*qw_;xII!kZ={uHS^TTQhg!xn*x6-E%IxX);v&Uk7Caw+c zr@agsuPNVkUlxWeDE1$NoQsYsCPBvWLfRz(vkrxz+IlDWM&=-tt2^zQuK6ptNPc0k zbzly`<_dDBG#Q}}X{GqO=6(3CNV&sxKp3jmSER&=S0v+`i3eP>=OMY{-6oUXWHJ_* z=p~(Lz7JfUG_No<-}CUB(vZQqP8e%4Vuv^~mUiDr zBNeaRYodeBytHdH6)7baW+jht9Rx)>IZnJre>x`~)Vnthf23siM*|40}*45Ot8Xq=&v-e`ksq)LrQ$gu(45 ztO+`ziee^=afa;P=G4R`nTd&P zyH0}gxSIjlU+5Fivr6hV(kjAuymUCil;O<0?y_lJ|DvH9l(@BP9P2i#Il)kn?_L$- zTfA9aybLKsw+cxOvk=PU`46^ytKnN<@|_WLC7V(k+=s3Aa2VJ^nWmCnFbR&N6Y*zAf)L$@lag(*wya-C9PXA z0*Ml)&z=DBsdX2jiV&ycw5P~Rw=o_;mCPWlfrOCZ5II9hSh49U<*IAGh`;WQ52Gg1 zZAYAD*mXxl7$LjATuAq>_kM}~UnDsd8r^@QD4u)4P}GA%J8R87k`M0C!->wE4mf=c95H^IZxD-_EB|Cn=24lM9#1 z7;KK@R93KX97}o9axZD&akB^@Rb$O-(O^x5rTVf&uE4R4&Z4-`%4h_=`$Sr9Q8tCL zP84!d(V=M>Ui`XfSlz~LF+>z})X1{hHVu9|Q z7aQh{uwR=fM#3FVph$y6^f+zOX%1_4Fv~dI=0{6bj{?iXBLU zFl5#e=7joi-Z8io0a~(nD*}qcnZJ705>W$9)!CE>Hb_OD=0VY2+3RuS> z%F!{CC=xSVVmE55NfR$yW3gA2%YX|dgan8e>RyG&{zWHlJwiMhq>H$YavE-Vu@F+l ziI2!tF<7P|G2St_sRg`woo(vf2(&?r2T4o3-|=afFt`a9ojA^3KNzAilTr-bYwqrZ zb_R(^fZYiPkv&{?^A1DG_D{n)KOA+q>%(vouR`Jx$lDo)@L{+WZRjQ`HWa7Z3(5ou zaECdQW!Y86GIMA6mbS~>GI#kn+>e018;!|zs_iVzvYM`aG|7T35S5Yqp>Q0hmW7g& z_>bsQg?RAu^O%C@Q?97J#7P64s4MAh(4nt5F8YY6_AVYy-KT~iHu!2{d;(*yog@P) zP@2A=DvJA;EnkX_sVn1p@+n~k_LTojJ}ul0-rJW@zyK%OkDi88B%I#!KDBJQRN{=A zh}Z7UxFH$W$)F0+%v12j2S94?4n_j+GTNffAU#ze@l8e3K7>*;d8XXLHNY`JMb%)E^pb_aS}6t zd#(>3?XH9L7t>f_feCkJJ|7RId)TLRCAEI@3R>rFJlrK}FKuth_9Y!oo$ISt3+mk5 zuH#T2PK0@df63z0_2B<3|KoP7tikvnw=sHqGQ1i81D{VA@n;?2S-|(>e;_vK@;VdBYR7)QWOM7I_qFTF$)G{QW9FpL3@ zzfcdzq&L{*7|-w>*e0+{T5)Yq7~;s)Y7VBykqm@)7(UeQ^jLVniT3ii21yeCPN)?? zLK5lU8ctK*A*g@_@!zFol>e5jHnrodzJ1FIumK9HV>h-g69+LpO5R93Q;2sGw~`Oh zR~JHlyJ#zkd(c{XC)PVBljHFu_wmqF-|qR_>nJPsQ;BZ?*CQnfkztNj9uf$%X=z;d zRnm#q_2jwF^^HX1m-*=~^#$U!5Y;x^F&I-HpV4&XS%h5o9+a?^e+-J!>=oGTaY97L zBgj{p!U!$0I7F-@ZlPDiE!bxIyJaq>V%{Am$y|)+mAOb~QXCW8+TH0lDSc+U(PJYK z406NNiQa_bh82U(p&5jtiNhiDsja|kI$V89HAtt>Pv*|U^#f2^usfPgWNRGZwcw94 z-Lbyuafs#{Ne3ycm67bIC~Jhe7j20Zzqn_rX1xvq3R&agqFeE3Hr5x|q2j;mqU#iF zT9_xj>0t3dgC3n&$nAK?@sE#xb^KH`sM=kZAOu>DH*V-X)Yz^s!jD^rrXgIt#yThs zVb`eUvO_;bX8Rz6Z)Dk#K4P#V$7uqxJA~|Fe}X@F-jwB~ zMP5UZmu8J-BFa7ruQ9>Yz|?kq1Uc1@@FoHzD1hLk6OypQ?$$lnnQH_dJM#>-=~{Qu zab<*cwByRS`Z#HeLdT?bm-?^!5p*lbzu#%%wsT%yd6Nr)6A4i3jh96oBDo%0=)DC#rC>D*S-N`dW;oxRK5C6gYMppUh{+W+x#9>T zKO4hKN};@aGhDl z(Siv^4>6KR)H9h4vjE2BaK>$ux&_WzH0GouOFV`$=!^xOZT3Ql7DJAba~6Aq!B7`) zz~GDVM%&Fk$OxWC!$bd^9S6cg;;_y?>qSjU1dm}23RRxZjwhDdmW@3yv0b}6f~(1z)tM7%BBoA$0S8Z1o25oW=}Mq9VB z7N~(l5=&<$EOcn|PR5DCdk=zO3KedL337-)_aKLM+%JWvxs}S;O_j$+e~%sJ#)HBL z*N_PqUR}q>=EVYUOdBkeoklgi1ApM7Q`Na2l;P+uFl#l;QR9tzAqKD0P=FXu6)5}| zV(mHsd+)D?l3o#n&~rxIO<;o5;6hKM4t^o6OBfCslEgC?N5M*xy%JB< z==qOpw1ysJuii*}^gN#)_p`u9r)JWCbnzHT_CXw}2zL$N)~X~n`6ffO+mBNYt&}+s zQc{Zzkfaql4caiF7T2FZxcJ#wMs&gwhMPBdiIlNb9VoPr=bd9WkANus2u%A3_#q33 zb>kM?G{2n~x)&hGNQXjVy$i#MHf8c;_M|6jO`Z!UP&V{T?`@<`0^Q7@)dFyn-hf@$g##t^=0c9NyrcF;t|y1g5r9rB3{QK9x-_nz9MyU?_M;jqh1&Ht4vz>f;FTOIhZq?R@?rG8Wt5(p zTZ(sGjxvhILf{j(=cL5ywKC0Ompa{xIU9Tq+Uwx;K;6#commAc`!Z;!GT-Djz&#SW*Y3`Xf`A*^d?6$5LjZdU`hsIWRQ`%#hufjDFA5DOHLbkO02vR; zF`??FJ6-qqi)cAENe_iVLOlY(dgxR*1Fy(nNYE0 z>;dFMf*NMmNGddr*xe}hq0X!aaJfroH%H-tH>hFVR6KYI6?-tZsTg`ZaV6ZHcfC5C z3av3hWe4qlJguzcJl4@ya8)u=w-bsShv4rG-A*WzIID@4)NN9S!-b4r6?I*y9)li= zoxrcUt`w2;#3PO)zLTGIo!A(=LyXVHlhcjE-0B?;T)-Tf?P!HwmGE`n0Be#6FU0^d zs(IS-P;xA>SS042^@qahF+~VD@yN-uM&C@2jqzQz^BdyfhZ2s2E@C)8EIT{?sRsM@ zOQO7DW493POL|su&!d_zVwc#LtB_6mGNg?%ACkD&I80PSWmY$MFc?r1zj+AST|V0w zBixw@cB;k`OSq;j^H8P@cs_lC4g-#x7PX|X)!{{V#(-LaH@X|OphQBU(X7XkTJczb zd`FaONZX-;>hOt&9&#l*r>TI22S7w%Oi&EamtJ}a!~pCXh(`>)Wa)&ZD-xDKM3&Yv z68?}7)u>qt?M1(Gy$$Jh3{S2L_rx#57xkhGrBL7X#l(-g-iM;tLu21T)!^WXHfWuY z;_G(34Gz%Bvmh>^w&H15<*^eP?hPLt9BilxImNkAzfC4Cy}y?ytC3yZJ0B$ofJ2FkO17*z#SGyNWJ2h z)O%oryXI>3QkW-M!hBL^$2#PeHfG%f7L^`E^VMtZd0lq)y&B)H`dAS8!)I2jIu^kf z-f*#-yKsf^vN8OUCl_IgilC2fOwq&zTGxh{lV5`eHOxG5Pe+r3B4m z`Q5lp?HmRrbUt3hT{Eq73d40}GEN)BohR@-#)_wHuQd9**2u2t^3W!e)M~^JEMQ4z zBr5(11~hsyE4g$LXdIh~f(HJ*U*MmkT8{lvV7jeNm$4yQ?Rr34=w7cn5Sh5~W7om; zV{l;|@5~JY;Ve?O=R`VmS0+BRDMk-f4b)^nQDj zv)?~OjPPZsy~7JVS1$T|dfZ0yB!U}@rbXr1HDZ*p0Fx64>(qn`fVd*Jc)6&u6$}B) zx5G$%&h>5EDzh?tJgKg_s{8_Hs8$qGBp2Ht#lEvTsfZgN=dN<7z zpt7PXSGY1F_xiB$ave&b?%dX)9{VoFh$}^ zVNWw*FLiY9ok<^qZ#O*cB<|^eT1$5}DsXAT`=I-E6@uX|jO$2S$H=y`(b0zxAR6=O zXVH)xa>i_Y2a7>W_+i&aZQe1_AG)=}p^j#Wy6GUjG2?pM`w6;4^t%<%HN?6F?n5QN zi2l`%=PX(G@X($Q{jpuQ6SGJQ?iVy~B0j7b4>?S%p+j}M)P^^(G>pYuBuV>0XCY=* zX=;f>{b{n>q@vvhlxs}FO5ntO;O1($pjMZ3%>`sTvAYgkFC|g1I$9GmX0K?&(f%S0 zF>KWmu~lRIM@$!7wH`O6_UcgtN25pOWC>n+=|$)0EKneHKl~>RfyS@FXd&%F?!13e z|B(dNbvx62;H9SR)BOmt6P%sZL#_9I-J9g4m)z490h?`Ks9$tHV@HXgpuqLEFbVHj zqZ@*k4bAIU(+<|hLO(>yPb(2X^8}$o4^1TBrl;FeIPpEwHqj2Xe%IC3HZ;b;h*_vJ zO3oR#Qtdqls9-w<#NC^S?`_+Pwo=)*dGnFLS|9e^IT#;6p;SVRem0tlvqG+iu0=?J zdlU6WI!99mNv$k3O!(d*DWfl-6AD8;5H8_7zsDaOvBI%KWNl2#fg^!J0IN5}7^ppl zoeJnnn7~kdqp#y6=6GGyZ6Sh0Z*aD--1j^d3gIq?M=jjy@C*^OIRep>@TfWt(YuGU zziRC1+IJ5ldttR6a~Eqrw3=LKhL^2W3x)}{Xkq+70u)CHT#PJ$hA~2&Ust$=I!!A( zSZ`{MIFFf153RG8TMXYE*hpVIh~zVIB`E(Av^+q9B(1G}G}h0zSkUy{JbtbZL1V*W z`Zh>$mtM@sXvy$_0Do-xQtVzfp1+DVm`?2?Wo?8LlEu?YD$gq@6$^tYUh*yI@y0VD z6v=ZEry>>x=Z3&Am9*EC!@Y!Xj{Ohgm0veyS>YOnTO-0PQq#w@JQ;BwnQVGOkJ@|V zadAY5k-T{FLfVjqd6qmmeR?_&u-BU_V+Gqk>uuQjVeMcYJ*MT5y^Y_riKR5g(OqI4 z;pl#}eyEb%A$te!J*y;!r1oGEQzUeTSKshVq7%@;2$HLzz9LE4Tt?5qelw%;GWdeN zk>k))NQ3~_b*7WJW~B$tg}(Qp&6Gk4#>!KYL*;%lw|2wP_x{%FFt(5#JFi=O$4En= zFmwyK!Xd&$E?B1G6o3#6rH0OoEsVEYp++%&i?$H=-5&+h<3rrsitRc;yBOlWh=b7B zqQ!eBI4eYR6%x=v?veaOFY5~8LdWOf!VoC{e18C;4UCl-uteIWn+C#gimGdFL89{A zgRiBiHSl;)yt;H5ZON9mvwK##!mH9%t4QUl)h&<)lCE`~!E7=Kte`vSiWM$(Y01Q5 zdcb+BHx5r0VZ_5mkJZB&HlldZ-L0h7Tp0ae~5pgmg6a|4ifPQ z!*p2JFH!V;Rg z)Z@0~5ThsVUlENC@hWI(i(Pjs3*(!%!=nNTihUG0#_iygYp`!o`m~C&+oPUm5r`i0 zC`jr|8%=~oorB~Q`{`fl%sQk7n;QpIh%Vwt7l%ubSic$R0n4tJ+{56`^|2M$K*h#+x8qO2kTT*$?JEl@4!5Rbm5Zv@?jIn=(38hWD6vwa!}ay(5Y7rM@j z>g+lLWuHFft{WvHQEnJ)4HFCNO-HLpi+%E*n+G;S+F~m?Xc;z)RN=HG1s3 z<9s9I5f5r$pyRp>n-upfFj=9Udfau7;}B9NuX}vrS$g>hg~1V5Nfk-LB^J9aB7jnDX)otCAB7g3awlP&rdzhF1tQ}HLS(#z zNQlYJo`7nL*@ZYqFEueNNJi@z8zBA{>-sw~#MkdbCfBS0sU{TC56`P{$d>Whg$$5`oS%8O3}dcBPb@ z%P`Il#k_=K7nJUvOZ!Apf=?=b)uSXd$3G>ZdB4+en$YP5(N4lIw39FwSMj-&#?wLt zTJW@#10h*X7ab@Mm1SO1DG3#LBu_jA`sCD3!w|KgPic(THPeKdn=#b;TWhxe2@>0@$mA@@&&KcX*-=K_j`0zZxN z6c&o=!a{GPRG0#j#GRsA5o?NwtGeb#u+4ED=%^tBk{Yzf+<2nE{eTbBlF+4si!v8; zaSQAcK9-3Q6XD(N+Q)>5nUpqaqMe#{#Hz-t>qNaH4%ISelyoPY1iB#sI1}+r{)%j+)RC)Fqu~Q*plc?|Ggiw&_kx?$7I`sJTV%=YNcu0zSv%^0vucgk4CQK6 znFuOEC!**c|AsYJif(fUEZ!)>{ZQ&5gR2KGS1)tJjGpn>^YxcMRHNi=z16}lF()hJxA|x!iuDicN0a5(X5hAfWe6|!g-g?-r@E6NKw== zisn5?dkM!P{NwFazPzRth*U@+kV%2`m ztQdKkXv3-H&PO7hMPU`r^eC6%JZ7k2n4spRWpV!o_y!O^3lC2Mz6Ok&oyFAx@&G3Q zZvi#|*t{H%8ev|JFK`{&!wAWY%slo$#m2*h2Mp(q9x(hJ@CD#YfCtb4_zK_!oCo{^ z@b$F=hJVhH*IU;yXq?InyU(k}Umknu3cPT32cGM>9oIO;krj@y9C;kb3|AeZ-LJIsF-QELTr_i_;jGj~MEC-R6 z#;d+LRxA+bvL%mSBh#XyPD7lk!kHut!{f$?g}ZUS4VsRNm`dQ_@QsA_{*lXdyTq$a zU*DVqbU4gcF#zL96oVyS+>NOxFTO~;2;%vtOC+eo(zGF|Ez2BQkR&$jmw3i*%7mU*QYC$=%yNDST6AIP?kG z%j4AGcuN{Q5gylJ66s3HWd#1PPajYv+RGy7a+&ue+l5F%9kz!8gdE(9+dy<}Q_}_W z`&-)f&@z_*;8H-g7bEPSZtxCiqL(rCkS`i$KWwMn?53!S1gAk}BAjk^Xk(^hS^K%uh>?qfjH)wn$b&uUQ_DIv0lzYW&C{v78IrB9-2g%`+ zJkti99XH^p0fDFjY&eoyQ?l{mK?>BNc32QN zskI{Qka!1qV+V6fN~T&ImJ%)wk+fksBRf_h5Zm`)n{oZ1L5n#BSiTV6>S)w*>vN%L z78e^xuo#cQ;EfFraij7sgH@#41u5t@+=FtoU0-PQP4T$CRrZe%d%jM0gdpDFSbaIn zm*)`=ISkjsaJAc)hsjsVZFsuLpb2ZGj)^h1KB3d_rCp438%`TN?MMcmY{SHSH+&`; zDY7g3YMiLsi@Ox3RCwC%R3{Wm(hGyOcdm_3WMl0gsh?X^fY(@ zDsDDs2ZwpOqw$PSoa8W{0lE7#di=}$8BpH%1Hy!3w#NB z94tb=5C%dR2w@XK91!w?YFIRK#16l#w0gnUf0LuV7;9v8QnwtvyU4R&X8qm2+&3yrQA8-ip z2H<7D(}2eSHGma>MSv{8RKPx@wFq(TNRP*N3_y?Xhw=Rs%KaSR6~J47V}Nsj>wpu8 zN55Yp+|7s8+*g420Y?D)06PKC1D*o302%-lfF*!zKr&!FAQo_ashax+a1QVupcSwa zupRIupc$|RP!4zqkON2sOaR0IA_3hf$7g_}fZc%Y0Qwc6tjh1gn|h9WOV922lb$;} z5^$TI$w$U5N<5|UWN&X0gycrpa&QMD*$x>JKza`^}WoX zz`-vDzylHidVmqI0#FCA1J1sp=Z?J!6L10FMl#{X!L0iO!T>J7zGDaC{SNT^-uwdH z`9C5Lz!Qk0lxYXPkGFv#WSD2jTx`e!J9K%TsUUOFVt;oIKgjb$a-dhlaN&_$WLS*aU@%0`Z+aqU zqyYScWaE-S8g6D{VxbXIfjmzHFU$p%EAZpEy1EAZGzh^B;xrl<8vLVAZUR@!iChi- z-9u5h3AJKPjbz0aUeE%CaJ|Zy4%6=Q%}vj>8LgHwv(09)W}8a{(P}nY%{FtbfB+8~ z7R@)zOPUI6&(AzDF)u`h9X)3-Z!) z=l8lSnvpm)c}UcKyjWXOT4Uw~3tv@RB~+EvR6T0uE6pW!EE$f%&7^R(7J)a{TEvx= zysfUJ%*g4j88p>Jv(R}gTj4WT!G58A%zwXqOtA_*)3nwmm{%{xT+EH9 z?>tMnSYys9sV%QDW0wD1l_%C@Rjuir&82?1N9EsRCxw~JLRQVnTuRE^Af$7jQ?F0A zt*tG4(7e_pU?RgJL+NK*tmc(gi&$GO_k11V)|ShWg6C@0mYO)=2>c2 zqFmFs%t~|FsyuV8NSShvs&Z@BVDiV*V_t-*4!5@`j+`tQ_f*0@DP)lg3%ab=Pbxfj zLbafx!X|rj7pN|oHC32gSol;<`dDl+m08W^TIf~lO~Gifaa=sZB+ABRlTE^Lo>{O~ zmBIJn-rBJADp*}JMJpCjj+;(tQN6fF!la1C63jAYOr5se+6qfL*UV*^E2O&6;tOn? zRUunpp;(28Y#zb7o?eG_p_~#*=az7pn9T)g@?mKg$}a4KE0VvYL=BjOzELeQudG7X zux8ej*lft-8Pz<@o4HtM(z$g%AQWZomLsmW;8OZ6UvZpGAvSN#yq*qCJS0U z!z$V;Ic|pRmTjp;A5387VhdtsNu7B*lj8WTpPQ7c#kv+Hx`oQ0js2IgM5vTYDdF0Rg=F#CIuzSTVKBb1 zn#}SsAW%X(d;dxcH2m@(QvrvHUgB=LRJ;%zs$Sjq9EBi8G)5LM(D4aC@{qQoF zTn)VoaY2c-iuNN|r~J~TKJ)J^tt_)muv*q~|Hi%)-0cl3koH0hQEw_=QX#n8DJ5DX z+0x2!qcFlOHhC7};?SE)%Be^kx0-s9G&^Nt62UlML~%_*x#Y-kBk7w06M|?Sk-m(y z{F^bpJ_#$dRtaX7-2D`mjiK^#Y+KPYe;bxxTgfKBazjIzxsG;i2+Csqo}DW!IqlQ;jmjiV8F|n;+STC&zT$ghhUtM(QBk>ts*Q#6e*Sm12P*kL>%{ zh?X}z=zArUhoQE7K?Oq;caGKpsq~92N|iVhr66HJ>Wmms z|2OJx2pB6k=<+ti+Cihu< z7WZjlmg28$!kh$N@`d2ewSHlEY{^^qIC^O zEOHodA(pQJ;ZgZsZ7GLmsjb#b2{A$qxI-o7#9OIaU9u7!HP9OPr3tp;J2~!No~VW7 zM-Idt0guFHMQY%qrzRwo^EuMr%+!Qw<$P{x0{&#v-v#)?crBbsuz*t{=atIm*V@Fo zI*XOqSggQccGU@$$e_GfDo-k(U4k-{6F0Dokw5reDjr{2Qnsp;(MKkM4_8Y}BoH&f z8xm13K9xt_KoY;S!bbLDKR1+t)tg_FI5{yfg_fGxbG2&18IyW+6znbUW#)s%5g7mwA7oe z{DhnmYdOCNtX6?>XYb`r#Kd9_gtPG=-w@l2+G>23xl~-al89e$M`z%(jV9RhZDxLa zCN(_|QZ8$HZhT=07>>jn1;J3L0>2Vz3RW;oh8?e(_f`7Q_gTt13_WY5)BV+P+4N* zO9?gQ62a75erMF;N^r!%ek~Eu0QFVq0XBjDf?Ga`FBJtIZL?am35dvpUP)wMpsCc1 z_A*Bah%DuX{=p*mu$@a*mQ>Z!5ad`>POh=6guT8LH$5bFsocL=bfut@+j6+@h+LmEQ^-`LNu7Kpm$@J>V?o9O%9aB!0sMRg zy%tfZ1Ew$q(0oMx3nUk*a_A7mXtl99LSmZxg-JK&Lyo{ESVhLK?;A=^2UQ$6jNh>1 z7F+oFdATT`g=amH@{u??ps&`6`~;h&b}gh4${?pfgBbh|BCJdG!FM8sXT29VCkBGK z9Jn8Q*gKI(Q)R&j>Gp3g%Pnp5y0z+2rVhVFFpMgnmmBjeQ>{f~1GohY{ z-|!F{6P`D3kv22{!hBN+MP*j=S$ZDZK{R=dd5f#N0*c zc|7_d{_-#j=o2Q`Nz61f(5fb_k-4jT?U`VqS$SFqdfSoabAu%E(#KH>n?Xa9jS;f3 zeDRHZS)Sxad6HRBQX`sEd8`_uwalE#6~K*%@sQ480yztY6LCIndJ7MHDuy63HSHOCi_Ns z_6?K1VX$v9@lAHlfDtFJ$h3xGO8}g+pVZ0}cCH2e0c~A{wPC)wo?Bc}X<1zYUNjpl zlglcwAl!v;wD(Ft=T&+=#kF8vtVR5ak{TOLsAksx$~odDuElN;vn88nXTxtSU@(AW zxU5)T_}M%GC5^QP^FQraQh|YK4Kz8*w%kPvWn0Fg2bb0s%O9BwjJ+S^WA^t^J{S&p zVqx-Z7q<%8a%?-s6H|)ZY+OziVVKqy$&~zwsS5wQ5^Pk!Qh24NQp+tT2`2fQS-Dc| zcrrv=YHB^a5jITzsUlRW@bGYT&v&@=9Udk*4dkyvgm8erKl?^}HPTZt-@g8ohe}Rg ziaoG@WLP8x?~^|Jmg7sl|2co9d{kd$`cq7xgiDv3ZHa6a$)-s*vlKIfEK?hJ#Ico@ z@#ENlnAE^8m29+6tg4mVr!~Nx@AXl_2fA0=uqUSIS`$2e!rgb zAepuB?J1EB`>Y^87M=x~+ECm#MsFRaN_Fr{t+(F6{OZgl3?~>O^y@7HaK-9~NVa>B zTaS;Fp6qu|-&lS90?Sxxeq_MBq}K2+L2sRcl}$o_-`vaU8iJQ1Qy1XG zJ{g|J`emR5LRabaLzn9Nqw)s2^`@t^8*}l)rPB9$lJoOZ`d=_VrLMvJdgD#91?Fcn z*YT`wJrR{!^l3Zl*M7Z$_I?dgJh?G?WBK_7NwaKqUC=RCZVo=?l<@t=9MWN^nbuJ3 zUox8zybbFrgSUlW`hCV+SxxXUN8y#W3+&HI9fFN3C7)n^b>=E%Z1o#I6mOt$=jZob z@o2R6X}i)|bI@_2lo313KH-&m1&%uJy5@` z!pSDckE1wB+cAH?v8B|pr_1{JDfJBMC)YKoAM&GVgQm>D{H)(G?kGQ{&HInLwcj!B zWWS!mC|KaQnsRAgpF!(^U)^fTl{vC+FHyn=j=P$2rEUAJjl$aCZ7A4+yZfczr+1ds ztWgT>Z?f_$ZP&M?R5z&(z_Zlwed;IGJJ`5W>Jr?qq^Au6*E=fvK)%WOf% zg@TK~ai`QPaC|A@`@1V`)3>+P)s*_n8j4B-(>2*8c_?lhls}PIKTf2^t#f4}oLSCOj(l zlfGk22_HBnd&Bp|uFw#?J%k2nI#OyUo19*w<~sz++O$C)l{N z2}--Ny7yU!D4x;=fn(Couiske?-y9k(lTY=(HD1083V_pQm??Vr-bkCKERl)9AHc~ z1jltLj@bkCu^zu5{kGg3ybn-$mA30!bL{(i+D`5neq&3iXHQmr{FJu)u6X^&WT~|# z=)6dIDeWD&4&ri5&^RR^M@nahzUv&_^pdvleaDm%K5$G`D{C-$_?_tlq#xvmGhJ{z z`=#G!OxdvK3-aSAywWa#eO0MLuyLd06U?q*_-Tm5z%GJ{YtwK!@l=2*UTfgUCIznz)#PjANlQSO614dCae)H9gh z>NP!QvjN*r^5{Rd>dROA<3X|aY4iSLD|p|;bq|K~z_DeuC~IQCdL@Ss99y&pklLmkR#ZlUh z^##ANqtr3j*iq^k%ulInFu&e-{l`?bE%@3%ag_EB98*Mh4>n&}IlhU}HncCzzj7mtgHe@e~{f zu2p`1{l=8PUtl>)>y-JcZ_iT77&xYsdIgRVC48W}U<=+hb(O*Q5|nXwPDXw3dhvc8j`YE&eTTqxUII>N~+2v$E68VA>by3 zWt?o;4o-GYcuDq8g>UhfIFACh{xy?(Lx%g`&E&%17XzT*3%|@_&JugfI}oKnMdN41_Qc!axWEAq<2t z5W+wR10f8AFc88(2m>JugfQ^`I|fKT;4Fj*?2EIwI)L&c83DR1eqs_HQ4RtTP#7F7 z2ObT(TDCvsXLrL+Z_73d|J2X^Ge3Jc(i#Myd+d(`_=um~2BYUk zvJc6HS$H;uq(lkeIH1E=!OF-^-0?3{8e$jWj{GBO( z8(~tMMY6j|HVa`=`b7ZBy9Pk%tOoFaIsnbpRsgL5R1XSo2T+-tWb-kYHjX9Omd*7n$q?YbWOxXZ&8 zyZxzO-lEv~xAxp7+0}awkNWX6vTymv(RW7eJ2_v^UwG!Vx`{9R_Rs%br9W1DBjNA2 z|9HV|UWfjXr#|?3=FkZDJ+D5azq0q)tba5O-`w=r>-xR3{<{5LU+$QOeJAyn17{!a zupgfL#?M|ze{18a{JT@!U3F*IWxVybAD_AM@7KKRUtE~E<%>0+AN}T@A2c_O&zcZ( z>x4)N)!#R0N zGS2p1suFZL5cGL%3>*!DSoQKNO zK3U-YMeT6Mw{zN0PBP#2*^*m#9lto|m~L$I+);C1{_}6Xo}=Hsv#RFRh(FEzp?6Nw z?6)!={rg{^-248QbN1c1@lHweu==AfotyK6c}qXd+rQ_@pMP<9&QJH7(!{L4#P0dm zSLd8r`NoqehTq=tyLX?QGj8mG&)#|?ZAyvj(K#jgMQ!VUXIeM>&E<1G`1%L#$UQ&Z zIPzN7oN;rub);;&`>PEv+&ic7~Hz^m;FoR(Xor`9loD5&Hl;N)Y~2{ zOURtk`tqzhoyU_OoBNC1+>H;?PH$SG8TC8Q=Re#Yo_3(wkTGcIuf&-jPfksGB>u$M zkEec}`@};j+kdpDweX{Dk8OYMwW*&~{(jhR7X3P_XjjangxquY&6u{p^vXM{5;hm9 zpKm?0uko7az#Y$gx#^+8pUm28blep;|3P!<4aeqJBcE&>cJ972zkcV$A@$$3pQ7m{ g^b27ignb&2z_L*BUX#M^A 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

JFBP;LeAAC!)R8`B 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 status.hirq_pos && status.irq_pin == 1) { status.irq_triggered = true; status.irq_pin = 0; @@ -148,6 +148,7 @@ void bCPU::frame() { status.nmi_triggered = false; status.r4210_read = false; + status.irq_triggered = false; status.irq_pin = 1; dma->hdma_initialize(); diff --git a/src/cpu/bcpu/bcpu.h b/src/cpu/bcpu/bcpu.h index 8bbcb791..4570bf8a 100644 --- a/src/cpu/bcpu/bcpu.h +++ b/src/cpu/bcpu/bcpu.h @@ -165,19 +165,19 @@ struct { void mmio_w43x6(uint8 value, uint8 i); void mmio_w43x7(uint8 value, uint8 i); - void exec_opcode(); + inline void exec_opcode(); - uint8 op_read (); - uint8 op_read (uint8 mode, uint32 addr); - void op_write(uint8 mode, uint32 addr, uint8 value); - uint8 stack_read (); - void stack_write(uint8 value); + inline uint8 op_read (); + inline uint8 op_read (uint8 mode, uint32 addr); + inline void op_write(uint8 mode, uint32 addr, uint8 value); + inline uint8 stack_read (); + inline void stack_write(uint8 value); //cpu extra-cycle conditions - void cpu_c2(); - void cpu_c4(uint16 a, uint16 b); - void cpu_c6(uint16 a); - void cpu_io(); + inline void cpu_c2(); + inline void cpu_c4(uint16 a, uint16 b); + inline void cpu_c6(uint16 a); + inline void cpu_io(); //opcode functions void init_op_tables(); diff --git a/src/cpu/bcpu/bcpu_mmio.cpp b/src/cpu/bcpu/bcpu_mmio.cpp index c782ff6d..55c175f7 100644 --- a/src/cpu/bcpu/bcpu_mmio.cpp +++ b/src/cpu/bcpu/bcpu_mmio.cpp @@ -303,21 +303,25 @@ void bCPU::mmio_w4206(uint8 value) { //HTIMEL void bCPU::mmio_w4207(uint8 value) { status.hirq_pos = (status.hirq_pos & 0xff00) | value; + if(status.irq_triggered == false)status.irq_pin = 1; } //HTIMEH void bCPU::mmio_w4208(uint8 value) { status.hirq_pos = (status.hirq_pos & 0x00ff) | (value << 8); + if(status.irq_triggered == false)status.irq_pin = 1; } //VTIMEL void bCPU::mmio_w4209(uint8 value) { status.virq_pos = (status.virq_pos & 0xff00) | value; + if(status.irq_triggered == false)status.irq_pin = 1; } //VTIMEH void bCPU::mmio_w420a(uint8 value) { status.virq_pos = (status.virq_pos & 0x00ff) | (value << 8); + if(status.irq_triggered == false)status.irq_pin = 1; } //DMAEN diff --git a/src/ppu/bppu/bppu.cpp b/src/ppu/bppu/bppu.cpp index 3acb40a8..1e61bbf9 100644 --- a/src/ppu/bppu/bppu.cpp +++ b/src/ppu/bppu/bppu.cpp @@ -11,14 +11,18 @@ void bPPU::run() {} void bPPU::scanline() { _y = clock->vcounter(); + _screen_width = (regs.bg_mode == 5 || regs.bg_mode == 6)?512:256; + _interlace = clock->interlace(); + _interlace_field = clock->interlace_field(); + if(_y > 0 && _y < clock->visible_scanlines()) { - if(clock->interlace() || regs.oam_halve == true) { - output->frame_mode |= PPUOutput::INTERLACE; - output->scanline_mode[_y] |= PPUOutput::INTERLACE; - } if(regs.bg_mode == 5 || regs.bg_mode == 6) { - output->frame_mode |= PPUOutput::DOUBLEWIDTH; - output->scanline_mode[_y] |= PPUOutput::DOUBLEWIDTH; + output->hires = true; + output->line[_y].hires = true; + } + if(_interlace == true) { + output->interlace = true; + output->line[_y].interlace = true; } render_line(); } @@ -26,9 +30,11 @@ void bPPU::scanline() { void bPPU::frame() { snes->notify(SNES::RENDER_FRAME); - output->frame_mode = PPUOutput::NORMAL; + output->hires = false; + output->interlace = false; for(int i=0;i<239;i++) { - output->scanline_mode[i] = PPUOutput::NORMAL; + output->line[i].hires = false; + output->line[i].interlace = false; } } diff --git a/src/ppu/bppu/bppu_mmio.cpp b/src/ppu/bppu/bppu_mmio.cpp index 4122ff31..6b58b0ce 100644 --- a/src/ppu/bppu/bppu_mmio.cpp +++ b/src/ppu/bppu/bppu_mmio.cpp @@ -6,14 +6,14 @@ void bPPU::latch_counters() { uint16 bPPU::get_vram_address() { uint16 addr; - addr = regs.vram_addr << 1; + addr = regs.vram_addr; switch(regs.vram_mapping) { case 0:break; case 1:addr = (addr & 0xff00) | ((addr & 0x001f) << 3) | ((addr >> 5) & 7);break; case 2:addr = (addr & 0xfe00) | ((addr & 0x003f) << 3) | ((addr >> 6) & 7);break; case 3:addr = (addr & 0xfc00) | ((addr & 0x007f) << 3) | ((addr >> 7) & 7);break; } - return addr; + return (addr << 1); } //INIDISP diff --git a/src/ppu/bppu/bppu_old_render_main.cpp b/src/ppu/bppu/bppu_old_render_main.cpp index 875a77ce..e7ae5c4a 100644 --- a/src/ppu/bppu/bppu_old_render_main.cpp +++ b/src/ppu/bppu/bppu_old_render_main.cpp @@ -195,9 +195,9 @@ uint16 c, cx, cy; uint16 screen_width; uint16 v, vline_pos = clock->vcounter(); v = vline_pos; - screen_width = (output->scanline_mode[v] & PPUOutput::DOUBLEWIDTH)?512:256; + screen_width = (output->line[v].hires)?512:256; - if(!(output->scanline_mode[v] & PPUOutput::INTERLACE)) { + if(output->line[v].interlace == false) { ptr = (uint16*)output->buffer + ((vline_pos << 1)) * 512; } else { ptr = (uint16*)output->buffer + ((vline_pos << 1) + clock->interlace_field()) * 512; diff --git a/src/ppu/bppu/bppu_render.cpp b/src/ppu/bppu/bppu_render.cpp index 0cc9096a..52f25a6c 100644 --- a/src/ppu/bppu/bppu_render.cpp +++ b/src/ppu/bppu/bppu_render.cpp @@ -48,54 +48,55 @@ inline void bPPU::render_line_mode1() { /* Mode 2: -> 1, 2, 3, 4, 5, 6, 7, 8 - OAM0, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3 + BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3 */ inline void bPPU::render_line_mode2() { - render_line_bg(BG1, COLORDEPTH_16, 4, 7); - render_line_bg(BG2, COLORDEPTH_16, 3, 6); - render_line_oam(1, 2, 5, 8); + render_line_bg(BG1, COLORDEPTH_16, 3, 7); + render_line_bg(BG2, COLORDEPTH_16, 1, 5); + render_line_oam(2, 4, 6, 8); } /* Mode 3: -> 1, 2, 3, 4, 5, 6, 7, 8 - OAM0, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3 + BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3 */ inline void bPPU::render_line_mode3() { - render_line_bg(BG1, COLORDEPTH_256, 4, 7); - render_line_bg(BG2, COLORDEPTH_16, 3, 6); + render_line_bg(BG1, COLORDEPTH_256, 3, 7); + render_line_bg(BG2, COLORDEPTH_16, 1, 5); + render_line_oam(2, 4, 6, 8); } /* Mode 4: -> 1, 2, 3, 4, 5, 6, 7, 8 - OAM0, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3 + BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3 */ inline void bPPU::render_line_mode4() { - render_line_bg(BG1, COLORDEPTH_256, 4, 7); - render_line_bg(BG2, COLORDEPTH_4, 3, 6); - render_line_oam(1, 2, 5, 8); + render_line_bg(BG1, COLORDEPTH_256, 3, 7); + render_line_bg(BG2, COLORDEPTH_4, 1, 5); + render_line_oam(2, 4, 6, 8); } /* Mode 5: -> 1, 2, 3, 4, 5, 6, 7, 8 - OAM0, OAM1, BG2B, BG1B, OAM2, BG2A, BG1A, OAM3 + BG2B, OAM0, BG1B, OAM1, BG2A, OAM2, BG1A, OAM3 */ inline void bPPU::render_line_mode5() { - render_line_bg(BG1, COLORDEPTH_16, 4, 7); - render_line_bg(BG2, COLORDEPTH_4, 3, 6); - render_line_oam(1, 2, 5, 8); + render_line_bg(BG1, COLORDEPTH_16, 3, 7); + render_line_bg(BG2, COLORDEPTH_4, 1, 5); + render_line_oam(2, 4, 6, 8); } /* Mode 6: -> 1, 2, 3, 4, 5, 6 - OAM0, OAM1, BG1B, OAM2, BG1A, OAM3 + OAM0, BG1B, OAM1, OAM2, BG1A, OAM3 */ inline void bPPU::render_line_mode6() { - render_line_bg(BG1, COLORDEPTH_16, 3, 5); - render_line_oam(1, 2, 4, 6); + render_line_bg(BG1, COLORDEPTH_16, 2, 5); + render_line_oam(1, 3, 4, 6); } /* @@ -103,27 +104,27 @@ Mode7: -> 1, 2, 3, 4, 5 OAM0, BG1n, OAM1, OAM2, OAM3 +*** +This appears to be incorrect, possibly should be... + BG2B, OAM0, BG1n, OAM1, BG2A, OAM2, OAM3 +*** Mode 7 (extbg): -> 1, 2, 3, 4, 5, 6 BG2B, OAM0, OAM1, BG2A, OAM2, OAM3 */ inline void bPPU::render_line_mode7() { if(regs.mode7_extbg == false) { - render_line_mode7(1, 0, 0); //bg2 priorities are ignored - render_line_oam(0, 2, 3, 4); + render_line_mode7(2, 0, 0); //bg2 priorities are ignored + render_line_oam(1, 3, 4, 5); } else { - render_line_mode7(0, 0, 3); //bg1 priority is ignored - render_line_oam(1, 2, 4, 5); + render_line_mode7(0, 1, 4); //bg1 priority is ignored + render_line_oam(2, 3, 5, 6); } } void bPPU::render_line() { - _screen_width = (regs.bg_mode == 5 || regs.bg_mode == 6)?512:256; - _interlace = clock->interlace(); - _interlace_field = clock->interlace_field(); - if(regs.display_disabled == true) { - memset(output->buffer + (((_y << 1) + _interlace_field) << 9), 0, 1024); + memset(output->buffer + (_y << 10), 0, 2048); return; } diff --git a/src/ppu/bppu/bppu_render_addsub.cpp b/src/ppu/bppu/bppu_render_addsub.cpp index 35367bab..fa727483 100644 --- a/src/ppu/bppu/bppu_render_addsub.cpp +++ b/src/ppu/bppu/bppu_render_addsub.cpp @@ -1,20 +1,7 @@ -namespace bPPUAddSubTables { - uint8 adjust_buffer_full[96] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31 - }; - uint8 adjust_buffer_half[96] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 - }; -}; - inline uint16 bPPU::addsub_pixels(int cdest_index, int cdest_bg, int csrc_index, int csrc_bg) { int r, g, b; -uint16 cdest = get_palette(cdest_index); -uint16 csrc = get_palette(csrc_index); +uint32 cdest = get_palette(cdest_index); +uint32 csrc = get_palette(csrc_index); uint16 res; //oam palettes 0-3 are not affected by color add/sub if(cdest_bg == OAM) { @@ -22,43 +9,54 @@ uint16 res; return cdest; } } - if(csrc_bg == OAM) { - if(csrc_index < 192) { - return csrc; - } - } switch(regs.color_mode) { case 0: //COLORMODE_ADD: if(regs.color_halve == true) { - r = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest ) & 31) + ((csrc ) & 31) )) >> 1; - g = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 5) & 31) + ((csrc >> 5) & 31) )) >> 1; - b = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 10) & 31) + ((csrc >> 10) & 31) )) >> 1; + cdest = ((cdest << 16) | cdest) & 0x03e07c1f; + csrc = ((csrc << 16) | csrc) & 0x03e07c1f; + cdest += csrc; + cdest >>= 1; + cdest &= 0x03e07c1f; + return (cdest >> 16) | cdest; } else { - r = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest ) & 31) + ((csrc ) & 31) )); - g = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 5) & 31) + ((csrc >> 5) & 31) )); - b = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 10) & 31) + ((csrc >> 10) & 31) )); + cdest = ((cdest << 16) | cdest) & 0x03e07c1f; + csrc = ((csrc << 16) | csrc) & 0x03e07c1f; + cdest += csrc; + if(cdest & 0x04000000)cdest |= 0x03e00000; + if(cdest & 0x00008000)cdest |= 0x00007c00; + if(cdest & 0x00000020)cdest |= 0x0000001f; + cdest &= 0x03e07c1f; + return (cdest >> 16) | cdest; } break; case 1: //COLORMODE_SUB: if(regs.color_halve == true) { - r = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest ) & 31) - ((csrc ) & 31) )) >> 1; - g = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 5) & 31) - ((csrc >> 5) & 31) )) >> 1; - b = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 10) & 31) - ((csrc >> 10) & 31) )) >> 1; + if((cdest & 0x7c00) < (csrc & 0x7c00))cdest &= ~0x7c00; + else cdest -= (csrc & 0x7c00); + if((cdest & 0x03e0) < (csrc & 0x03e0))cdest &= ~0x03e0; + else cdest -= (csrc & 0x03e0); + if((cdest & 0x001f) < (csrc & 0x001f))cdest &= ~0x001f; + else cdest -= (csrc & 0x001f); + return (cdest & 0x7bde) >> 1; } else { - r = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest ) & 31) - ((csrc ) & 31) )); - g = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 5) & 31) - ((csrc >> 5) & 31) )); - b = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 10) & 31) - ((csrc >> 10) & 31) )); + if((cdest & 0x7c00) < (csrc & 0x7c00))cdest &= ~0x7c00; + else cdest -= (csrc & 0x7c00); + if((cdest & 0x03e0) < (csrc & 0x03e0))cdest &= ~0x03e0; + else cdest -= (csrc & 0x03e0); + if((cdest & 0x001f) < (csrc & 0x001f))cdest &= ~0x001f; + else cdest -= (csrc & 0x001f); + return cdest; } break; } - return ((r) | (g << 5) | (b << 10)); + return 0x0000; //prevent annoying warning message } inline uint16 bPPU::addsub_pixel(int cdest_index, int cdest_bg) { int r, g, b; -uint16 cdest = get_palette(cdest_index); -uint16 csrc = (regs.color_r) | (regs.color_g << 5) | (regs.color_b << 10); +uint32 cdest = get_palette(cdest_index); +uint32 csrc = (regs.color_r) | (regs.color_g << 5) | (regs.color_b << 10); uint16 res; //only oam palettes 4-7 are affected by color add/sub if(cdest_bg == OAM) { @@ -70,26 +68,42 @@ uint16 res; switch(regs.color_mode) { case 0: //COLORMODE_ADD: if(regs.color_halve == true && regs.addsub_mode == 0) { - r = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest ) & 31) + ((csrc ) & 31) )) >> 1; - g = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 5) & 31) + ((csrc >> 5) & 31) )) >> 1; - b = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 10) & 31) + ((csrc >> 10) & 31) )) >> 1; + cdest = ((cdest << 16) | cdest) & 0x03e07c1f; + csrc = ((csrc << 16) | csrc) & 0x03e07c1f; + cdest += csrc; + cdest >>= 1; + cdest &= 0x03e07c1f; + return (cdest >> 16) | cdest; } else { - r = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest ) & 31) + ((csrc ) & 31) )); - g = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 5) & 31) + ((csrc >> 5) & 31) )); - b = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 10) & 31) + ((csrc >> 10) & 31) )); + cdest = ((cdest << 16) | cdest) & 0x03e07c1f; + csrc = ((csrc << 16) | csrc) & 0x03e07c1f; + cdest += csrc; + if(cdest & 0x04000000)cdest |= 0x03e00000; + if(cdest & 0x00008000)cdest |= 0x00007c00; + if(cdest & 0x00000020)cdest |= 0x0000001f; + cdest &= 0x03e07c1f; + return (cdest >> 16) | cdest; } break; case 1: //COLORMODE_SUB: if(regs.color_halve == true && regs.addsub_mode == 0) { - r = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest ) & 31) - ((csrc ) & 31) )) >> 1; - g = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 5) & 31) - ((csrc >> 5) & 31) )) >> 1; - b = *(bPPUAddSubTables::adjust_buffer_half + 32 + ( ((cdest >> 10) & 31) - ((csrc >> 10) & 31) )) >> 1; + if((cdest & 0x7c00) < (csrc & 0x7c00))cdest &= ~0x7c00; + else cdest -= (csrc & 0x7c00); + if((cdest & 0x03e0) < (csrc & 0x03e0))cdest &= ~0x03e0; + else cdest -= (csrc & 0x03e0); + if((cdest & 0x001f) < (csrc & 0x001f))cdest &= ~0x001f; + else cdest -= (csrc & 0x001f); + return (cdest & 0x7bde) >> 1; } else { - r = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest ) & 31) - ((csrc ) & 31) )); - g = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 5) & 31) - ((csrc >> 5) & 31) )); - b = *(bPPUAddSubTables::adjust_buffer_full + 32 + ( ((cdest >> 10) & 31) - ((csrc >> 10) & 31) )); + if((cdest & 0x7c00) < (csrc & 0x7c00))cdest &= ~0x7c00; + else cdest -= (csrc & 0x7c00); + if((cdest & 0x03e0) < (csrc & 0x03e0))cdest &= ~0x03e0; + else cdest -= (csrc & 0x03e0); + if((cdest & 0x001f) < (csrc & 0x001f))cdest &= ~0x001f; + else cdest -= (csrc & 0x001f); + return cdest; } break; } - return ((r) | (g << 5) | (b << 10)); + return 0x0000; //prevent annoying warning message } diff --git a/src/ppu/bppu/bppu_render_bg.cpp b/src/ppu/bppu/bppu_render_bg.cpp index b01e299f..a131b09c 100644 --- a/src/ppu/bppu/bppu_render_bg.cpp +++ b/src/ppu/bppu/bppu_render_bg.cpp @@ -111,8 +111,6 @@ uint8 *wt_main = main_windowtable[bg]; uint8 *wt_sub = sub_windowtable[bg]; build_window_tables(bg); for(screen_x=0;screen_x<_screen_width;screen_x++) { - if(wt_main[screen_x] && wt_sub[screen_x])continue; - if(regs.bg_mode == 2 || regs.bg_mode == 4 || regs.bg_mode == 6) { if(regs.bg_mode == 6) { tile_x = (mtable[screen_x + (hscroll & 15)] >> 4); diff --git a/src/ppu/bppu/bppu_render_line.cpp b/src/ppu/bppu/bppu_render_line.cpp index 5df8e34c..67e087ad 100644 --- a/src/ppu/bppu/bppu_render_line.cpp +++ b/src/ppu/bppu/bppu_render_line.cpp @@ -53,7 +53,10 @@ inline void bPPU::render_line_output() { int x; uint16 _r; uint16 *ptr; - ptr = (uint16*)output->buffer + (((_y << 1) + _interlace_field) << 9); //((y * 2) + interlace) * scanline_width + ptr = (uint16*)output->buffer + (_y << 10); + if(_interlace == true) { + ptr += _interlace_field << 9; + } uint16 *ltable; ltable = (uint16*)light_table + (regs.display_brightness << 16); diff --git a/src/ppu/bppu/bppu_render_oam.cpp b/src/ppu/bppu/bppu_render_oam.cpp index ba5de57c..b487604b 100644 --- a/src/ppu/bppu/bppu_render_oam.cpp +++ b/src/ppu/bppu/bppu_render_oam.cpp @@ -81,11 +81,13 @@ int tile_width; } else { y = (_y - current_sprite.y); } - y &= 255; if(regs.oam_halve == true) { y <<= 1; - y += _interlace_field; + if(_interlace == true && _screen_width == 512) { + y += _interlace_field; + } } + y &= 255; chr = current_sprite.character; tiledata_inc = (chr & 0x100)?(regs.oam_nameselect << 13):0; diff --git a/src/ppu/ppu.cpp b/src/ppu/ppu.cpp index 9b0466a4..8f9ff5b5 100644 --- a/src/ppu/ppu.cpp +++ b/src/ppu/ppu.cpp @@ -3,9 +3,11 @@ PPUOutput::PPUOutput() { buffer = (uint16*)memalloc(512 * 478 * 2, "PPUOutput::buffer"); memset(buffer, 0, 512 * 478 * 2); - frame_mode = NORMAL; + hires = false; + interlace = false; for(int i=0;i<239;i++) { - scanline_mode[i] = NORMAL; + line[i].hires = false; + line[i].interlace = false; } } diff --git a/src/ppu/ppu.h b/src/ppu/ppu.h index 1e16b35b..4aeefdff 100644 --- a/src/ppu/ppu.h +++ b/src/ppu/ppu.h @@ -1,12 +1,9 @@ class PPUOutput { public: -enum { - NORMAL = 0, - INTERLACE = 1, - DOUBLEWIDTH = 2 -}; -uint8 frame_mode; -uint8 scanline_mode[239]; +bool hires, interlace; +struct { +bool hires, interlace; +}line[239]; uint16 *buffer; PPUOutput(); ~PPUOutput(); diff --git a/src/reader/reader.h b/src/reader/reader.h index 38fea7dd..200fe92f 100644 --- a/src/reader/reader.h +++ b/src/reader/reader.h @@ -25,7 +25,7 @@ enum { class Writer { public: - virtual void write(uint8 *buffer, uint32 length); + virtual void write(uint8 *buffer, uint32 length) = 0; }; class FileWriter : public Writer { diff --git a/src/win/Makefile b/src/win/Makefile index 2abf98c7..40414f21 100644 --- a/src/win/Makefile +++ b/src/win/Makefile @@ -8,7 +8,7 @@ OBJS = winmain.obj \ cpu.obj bcpu.obj \ ppu.obj bppu.obj \ snes.obj -LIBS = kernel32.lib user32.lib gdi32.lib comdlg32.lib ddraw.lib +LIBS = kernel32.lib user32.lib gdi32.lib comdlg32.lib ddraw.lib dxguid.lib all: $(OBJS) $(CC) /Febsnes_g2.exe $(CFLAGS) $(OBJS) $(LIBS) diff --git a/src/win/config.cpp b/src/win/config.cpp index ba910014..79a0f1c5 100644 --- a/src/win/config.cpp +++ b/src/win/config.cpp @@ -6,6 +6,8 @@ public: struct { uint32 mode; uint32 use_vram; + uint32 color_curve; + uint32 vblank; }video; struct { @@ -13,8 +15,10 @@ struct { }gui; Config() { - __config_add(video.mode, 1, DEC); - __config_add(video.use_vram, true, TRUEFALSE); - __config_add(gui.show_fps, true, TRUEFALSE); + __config_add(video.mode, 1, DEC); + __config_add(video.use_vram, true, TRUEFALSE); + __config_add(video.color_curve, true, ENABLED); + __config_add(video.vblank, false, TRUEFALSE); + __config_add(gui.show_fps, true, TRUEFALSE); } }cfg; diff --git a/src/win/dd_renderer.cpp b/src/win/dd_renderer.cpp index f753cc85..6d3d2618 100644 --- a/src/win/dd_renderer.cpp +++ b/src/win/dd_renderer.cpp @@ -1,8 +1,20 @@ DDRenderer::DDRenderer() { lpdd = 0; + lpdd7 = 0; lpdds = 0; lpddsb = 0; lpddc = 0; + +int i, c; + for(i=0,c=0;i<16;i++) { + color_curve_table[i] = c; + c = c + i + 1; + } + for(;i<31;i++) { + color_curve_table[i] = c; + c += 8; + } + color_curve_table[i] = 0xff; } void DDRenderer::update_color_lookup_table() { @@ -14,6 +26,11 @@ int i, r, g, b; r = (i ) & 31; g = (i >> 5) & 31; b = (i >> 10) & 31; + if(cfg.video.color_curve) { + r = color_curve_table[r] >> 3; + g = color_curve_table[g] >> 3; + b = color_curve_table[b] >> 3; + } color_lookup_table[i] = (r << 10) | (g << 5) | (b); } } else if(color_depth == 16) { @@ -21,7 +38,13 @@ int i, r, g, b; r = (i ) & 31; g = (i >> 5) & 31; b = (i >> 10) & 31; - g = (g << 1) | (g >> 4); + if(cfg.video.color_curve) { + r = color_curve_table[r] >> 3; + g = color_curve_table[g] >> 2; + b = color_curve_table[b] >> 3; + } else { + g = (g << 1) | (g >> 4); + } color_lookup_table[i] = (r << 11) | (g << 5) | (b); } } else if(color_depth == 32) { @@ -29,9 +52,15 @@ int i, r, g, b; r = (i ) & 31; g = (i >> 5) & 31; b = (i >> 10) & 31; - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); + if(cfg.video.color_curve) { + r = color_curve_table[r]; + g = color_curve_table[g]; + b = color_curve_table[b]; + } else { + r = (r << 3) | (r >> 2); + g = (g << 3) | (g >> 2); + b = (b << 3) | (b >> 2); + } color_lookup_table[i] = (r << 16) | (g << 8) | (b); } } else { @@ -46,6 +75,17 @@ void DDRenderer::set_window(HWND hwnd_handle) { hwnd = hwnd_handle; } even in 24/32-bit mode. This is possible because DDraw automatically handles conversion from 16bpp->32bpp in hardware. This only works when both the source and dest buffers are in VRAM, though. + + The SNES resolution is 256x224. The top scanline is never drawn, so + 256x223 is used. Hires mode doubles the screen width, and hires+interlace + double the screen height, making the resolution 512x446. + There is one more problem, however. On some video cards, when blitting + from video memory from 256x223->512x446, a bilinear filter is applied by + the video card, and sometimes this filter tries to read past the source + video memory to get interpolation data. This results in a line of garble + on the right and bottom edges of the screen. Therefore, an additional + 4 pixels in each direction is added to the backbuffer. + The backbuffer is thusly 512+4 * 476+4 */ void DDRenderer::create_backbuffer() { int color_depth; @@ -69,8 +109,8 @@ int color_depth; ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; } - ddsd.dwWidth = 512; - ddsd.dwHeight = 478; + ddsd.dwWidth = 512 + 4; + ddsd.dwHeight = 476 + 4; ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; @@ -79,7 +119,7 @@ int color_depth; ddsd.ddpfPixelFormat.dwGBitMask = 0x07e0; ddsd.ddpfPixelFormat.dwBBitMask = 0x001f; - if(lpdd->CreateSurface(&ddsd, &lpddsb, 0) == DD_OK)return; + if(lpdd->CreateSurface(&ddsd, &lpddsb, 0) == DD_OK)goto clear_backbuffer; try_native_backbuffer: memset(&ddsd, 0, sizeof(DDSURFACEDESC)); @@ -92,14 +132,26 @@ try_native_backbuffer: ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; } - ddsd.dwWidth = 512; - ddsd.dwHeight = 478; + ddsd.dwWidth = 512 + 4; + ddsd.dwHeight = 476 + 4; lpdd->CreateSurface(&ddsd, &lpddsb, 0); + +clear_backbuffer: + if(!lpddsb) { + alert("Error: Failed to create DirectDraw backbuffer, cannot continue"); + exit(0); + } + +DDBLTFX fx; + fx.dwSize = sizeof(DDBLTFX); + fx.dwFillColor = 0x00000000; + lpddsb->Blt(0, 0, 0, DDBLT_WAIT | DDBLT_COLORFILL, &fx); } void DDRenderer::to_windowed() { destroy(); + fullscreen = false; DirectDrawCreate(0, &lpdd, 0); lpdd->SetCooperativeLevel(hwnd, DDSCL_NORMAL); @@ -115,14 +167,22 @@ void DDRenderer::to_windowed() { create_backbuffer(); update_color_lookup_table(); - update(); + redraw(); } -void DDRenderer::to_fullscreen() { +void DDRenderer::to_fullscreen(int _width, int _height) { destroy(); + fullscreen = true; + width = _width; + height = _height; DirectDrawCreate(0, &lpdd, 0); +/* + lpdd->QueryInterface(IID_IDirectDraw7, (void**)&lpdd7); + lpdd7->SetCooperativeLevel(hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE); + lpdd7->SetDisplayMode(width, height, 16, 60, 0); +*/ lpdd->SetCooperativeLevel(hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE); - lpdd->SetDisplayMode(640, 480, 16); + lpdd->SetDisplayMode(width, height, 16); memset(&ddsd, 0, sizeof(DDSURFACEDESC)); ddsd.dwSize = sizeof(DDSURFACEDESC); @@ -136,28 +196,40 @@ void DDRenderer::to_fullscreen() { create_backbuffer(); update_color_lookup_table(); - update(); + redraw(); } -void DDRenderer::set_source_window(RECT *rs) { - switch(ppu->output->frame_mode) { - case 0:SetRect(rs, 0, 0, 256, 223);break; - case 1:SetRect(rs, 0, 0, 256, 446);break; - case 2:SetRect(rs, 0, 0, 512, 223);break; - case 3:SetRect(rs, 0, 0, 512, 446);break; - } +void DDRenderer::set_source_window() { + SetRect(&lpddrc, 0, 0, + (ppu->output->hires == false)?256:512, + (ppu->output->interlace == false)?223:446); } void DDRenderer::redraw() { -RECT rd, rs; +RECT rd; POINT p; HRESULT hr; - p.x = p.y = 0; - ClientToScreen(hwnd, &p); - GetClientRect(hwnd, &rd); - OffsetRect(&rd, p.x, p.y); - set_source_window(&rs); - hr = lpdds->Blt(&rd, lpddsb, &rs, DDBLT_WAIT, 0); +int rx, ry; + if(fullscreen == false) { + p.x = p.y = 0; + ClientToScreen(hwnd, &p); + GetClientRect(hwnd, &rd); + OffsetRect(&rd, p.x, p.y); + } else { + switch(width) { + case 640: //x480 + SetRect(&rd, 0, 2, 512, 448); + OffsetRect(&rd, (640 - 512) / 2, (480 - 446) / 2); + break; + case 1024: //x768 + SetRect(&rd, 0, 0, 1024, 768); + break; + } + } + if(cfg.video.vblank) { + lpdd->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0); + } + hr = lpdds->Blt(&rd, lpddsb, &lpddrc, DDBLT_WAIT, 0); if(hr == DDERR_SURFACELOST) { lpdds->Restore(); lpddsb->Restore(); @@ -168,7 +240,7 @@ uint32 fps; char s[256], t[256]; fps_timer->tick(); if(fps_timer->second_passed() == true) { - sprintf(s, "bsnes v" BSNES_VERSION " ~byuu"); + sprintf(s, BSNES_TITLE); if(rom_image->loaded() == true) { fps = fps_timer->get_ticks(); if(w_main->frameskip == 0) { @@ -183,147 +255,51 @@ char s[256], t[256]; } } +#include "dd_renderer16.cpp" void DDRenderer::update16() { HRESULT hr; hr = lpddsb->Lock(0, &ddsd, DDLOCK_WAIT, 0); if(hr != DD_OK)return; -uint16 *src = (uint16*)ppu->output->buffer; -uint16 *dest = (uint16*)ddsd.lpSurface; -uint32 pitch; -int x, y; -/* skip first scanline */ - src += 1024; - - if(clock->overscan() == true) { - if(ppu->output->frame_mode & PPUOutput::INTERLACE) { - src += 1024 * 16; + set_source_window(); + if(ppu->output->hires == false) { + if(ppu->output->interlace == false) { + update16_256x224(); } else { - src += 1024 * 8; - } - } - - if(ppu->output->frame_mode == PPUOutput::NORMAL) { - /* 256x223 */ - pitch = (ddsd.lPitch >> 1) - 256; - y = 223; - while(y--) { - x = 256; - while(x--) { - *dest++ = color_lookup_table[*src]; - src += 2; - } - dest += pitch; - src += 512; - } - } else if(ppu->output->frame_mode == PPUOutput::INTERLACE) { - /* 256x446 */ - pitch = (ddsd.lPitch >> 1) - 256; - y = 446; - while(y--) { - x = 256; - while(x--) { - *dest++ = color_lookup_table[*src]; - src += 2; - } - dest += pitch; - } - } else if(ppu->output->frame_mode == PPUOutput::DOUBLEWIDTH) { - /* 512x223 */ - pitch = (ddsd.lPitch >> 1) - 512; - y = 223; - while(y--) { - x = 512; - while(x--) { - *dest++ = color_lookup_table[*src++]; - } - dest += pitch; - src += 512; + update16_256x448(); } } else { - /* 512x446 */ - pitch = (ddsd.lPitch >> 1) - 512; - y = 446; - while(y--) { - x = 512; - while(x--) { - *dest++ = color_lookup_table[*src++]; - } - dest += pitch; + if(ppu->output->interlace == false) { + update16_512x224(); + } else { + update16_512x448(); } } + lpddsb->Unlock(0); } +#include "dd_renderer32.cpp" void DDRenderer::update32() { HRESULT hr; hr = lpddsb->Lock(0, &ddsd, DDLOCK_WAIT, 0); if(hr != DD_OK)return; -uint16 *src = (uint16*)ppu->output->buffer; -uint32 *dest = (uint32*)ddsd.lpSurface; -uint32 pitch; -int x, y; -/* skip first scanline */ - src += 1024; - - if(clock->overscan() == true) { - if(ppu->output->frame_mode & PPUOutput::INTERLACE) { - src += 1024 * 16; + set_source_window(); + if(ppu->output->hires == false) { + if(ppu->output->interlace == false) { + update32_256x224(); } else { - src += 1024 * 8; - } - } - - if(ppu->output->frame_mode == PPUOutput::NORMAL) { - /* 256x223 */ - pitch = (ddsd.lPitch >> 2) - 256; - y = 223; - while(y--) { - x = 256; - while(x--) { - *dest++ = color_lookup_table[*src]; - src += 2; - } - dest += pitch; - src += 512; - } - } else if(ppu->output->frame_mode == PPUOutput::INTERLACE) { - /* 256x446 */ - pitch = (ddsd.lPitch >> 2) - 256; - y = 446; - while(y--) { - x = 256; - while(x--) { - *dest++ = color_lookup_table[*src]; - src += 2; - } - dest += pitch; - } - } else if(ppu->output->frame_mode == PPUOutput::DOUBLEWIDTH) { - /* 512x223 */ - pitch = (ddsd.lPitch >> 2) - 512; - y = 223; - while(y--) { - x = 512; - while(x--) { - *dest++ = color_lookup_table[*src++]; - } - dest += pitch; - src += 512; + update32_256x448(); } } else { - /* 512x446 */ - pitch = (ddsd.lPitch >> 2) - 512; - y = 446; - while(y--) { - x = 512; - while(x--) { - *dest++ = color_lookup_table[*src++]; - } - dest += pitch; + if(ppu->output->interlace == false) { + update32_512x224(); + } else { + update32_512x448(); } } + lpddsb->Unlock(0); } @@ -353,6 +329,10 @@ void DDRenderer::destroy() { lpdds->Release(); lpdds = 0; } + if(lpdd7) { + lpdd7->Release(); + lpdd7 = 0; + } if(lpdd) { lpdd->Release(); lpdd = 0; diff --git a/src/win/dd_renderer.h b/src/win/dd_renderer.h index acaf8bfe..f1054b1d 100644 --- a/src/win/dd_renderer.h +++ b/src/win/dd_renderer.h @@ -2,20 +2,33 @@ class DDRenderer { public: LPDIRECTDRAW lpdd; +LPDIRECTDRAW7 lpdd7; LPDIRECTDRAWSURFACE lpdds, lpddsb; LPDIRECTDRAWCLIPPER lpddc; DDSURFACEDESC ddsd; DDSCAPS ddscaps; +RECT lpddrc; HWND hwnd; -uint8 color_depth; +bool fullscreen; +int width, height; //used for fullscreen mode clipping only +uint8 color_depth; +uint8 color_curve_table[32]; uint32 color_lookup_table[65536]; void set_window(HWND hwnd_handle); void create_backbuffer(); void to_windowed(); - void to_fullscreen(); - void set_source_window(RECT *rs); + void to_fullscreen(int _width, int _height); + void set_source_window(); void redraw(); + inline void update16_256x224(); + inline void update16_256x448(); + inline void update16_512x224(); + inline void update16_512x448(); void update16(); + inline void update32_256x224(); + inline void update32_256x448(); + inline void update32_512x224(); + inline void update32_512x448(); void update32(); void update(); void destroy(); diff --git a/src/win/dd_renderer16.cpp b/src/win/dd_renderer16.cpp new file mode 100644 index 00000000..00fa4b2b --- /dev/null +++ b/src/win/dd_renderer16.cpp @@ -0,0 +1,123 @@ +inline void DDRenderer::update16_256x224() { +uint16 *src; +uint16 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint16*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 1) - 256; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 8; + } + + for(y=1+overscan_adjust;y<224+overscan_adjust;y++) { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + src += 2; + } + dest += pitch; + src += 512; + } +} + +inline void DDRenderer::update16_256x448() { +uint16 *src; +uint16 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint16*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 1) - 256; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 16; + } + + for(y=2+overscan_adjust;y<448+overscan_adjust;y++) { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + src += 2; + } + dest += pitch; + if(ppu->output->line[y >> 1].interlace == false) { + src += (y & 1)?512:-512; + } + } +} + +inline void DDRenderer::update16_512x224() { +uint16 *src; +uint16 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint16*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 1) - 512; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 8; + } + + for(y=1+overscan_adjust;y<224+overscan_adjust;y++) { + if(ppu->output->line[y].hires == true) { + x = 512; + while(x--) { + *dest++ = color_lookup_table[*src++]; + } + } else { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + *dest++ = color_lookup_table[*src]; + src += 2; + } + } + dest += pitch; + src += 512; + } +} + +inline void DDRenderer::update16_512x448() { +uint16 *src; +uint16 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint16*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 1) - 512; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 16; + } + + for(y=2+overscan_adjust;y<448+overscan_adjust;y++) { + if(ppu->output->line[y >> 1].hires == true) { + x = 512; + while(x--) { + *dest++ = color_lookup_table[*src++]; + } + } else { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + *dest++ = color_lookup_table[*src]; + src += 2; + } + } + dest += pitch; + if(ppu->output->line[y >> 1].interlace == false) { + src += (y & 1)?512:-512; + } + } +} diff --git a/src/win/dd_renderer32.cpp b/src/win/dd_renderer32.cpp new file mode 100644 index 00000000..9a097583 --- /dev/null +++ b/src/win/dd_renderer32.cpp @@ -0,0 +1,123 @@ +inline void DDRenderer::update32_256x224() { +uint16 *src; +uint32 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint32*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 2) - 256; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 8; + } + + for(y=1+overscan_adjust;y<224+overscan_adjust;y++) { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + src += 2; + } + dest += pitch; + src += 512; + } +} + +inline void DDRenderer::update32_256x448() { +uint16 *src; +uint32 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint32*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 2) - 256; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 16; + } + + for(y=2+overscan_adjust;y<448+overscan_adjust;y++) { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + src += 2; + } + dest += pitch; + if(ppu->output->line[y >> 1].interlace == false) { + src += (y & 1)?512:-512; + } + } +} + +inline void DDRenderer::update32_512x224() { +uint16 *src; +uint32 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint32*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 2) - 512; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 8; + } + + for(y=1+overscan_adjust;y<224+overscan_adjust;y++) { + if(ppu->output->line[y].hires == true) { + x = 512; + while(x--) { + *dest++ = color_lookup_table[*src++]; + } + } else { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + *dest++ = color_lookup_table[*src]; + src += 2; + } + } + dest += pitch; + src += 512; + } +} + +inline void DDRenderer::update32_512x448() { +uint16 *src; +uint32 *dest; +uint32 pitch; +int x, y; + src = (uint16*)ppu->output->buffer + (1 << 10); + dest = (uint32*)ddsd.lpSurface; + pitch = (ddsd.lPitch >> 2) - 512; + +int overscan_adjust = 0; + if(clock->overscan() == true) { + src += 8 << 10; + overscan_adjust = 16; + } + + for(y=2+overscan_adjust;y<448+overscan_adjust;y++) { + if(ppu->output->line[y >> 1].hires == true) { + x = 512; + while(x--) { + *dest++ = color_lookup_table[*src++]; + } + } else { + x = 256; + while(x--) { + *dest++ = color_lookup_table[*src]; + *dest++ = color_lookup_table[*src]; + src += 2; + } + } + dest += pitch; + if(ppu->output->line[y >> 1].interlace == false) { + src += (y & 1)?512:-512; + } + } +} diff --git a/src/win/ui.cpp b/src/win/ui.cpp index 91f4e315..b1fa2ff6 100644 --- a/src/win/ui.cpp +++ b/src/win/ui.cpp @@ -42,5 +42,10 @@ void init_ui1() { SetFocus(w_main->hwnd); dd_renderer->set_window(w_main->hwnd); dd_renderer->to_windowed(); + + w_main->show_menu(); + w_main->set_video_mode(cfg.video.mode); + w_main->set_frameskip(0); + bsnes->debugger_deactivate(); } diff --git a/src/win/ui.h b/src/win/ui.h index f8def5da..41d27037 100644 --- a/src/win/ui.h +++ b/src/win/ui.h @@ -1,7 +1,9 @@ enum { VIDEOMODE_256x224w = 0, VIDEOMODE_512x448w, - VIDEOMODE_960x720w + VIDEOMODE_960x720w, + VIDEOMODE_640x480f, + VIDEOMODE_1024x768f }; enum { @@ -23,6 +25,12 @@ enum { MENU_SETTINGS_VIDEOMODE_256x224w, MENU_SETTINGS_VIDEOMODE_512x448w, MENU_SETTINGS_VIDEOMODE_960x720w, + MENU_SETTINGS_VIDEOMODE_640x480f, + MENU_SETTINGS_VIDEOMODE_1024x768f, + MENU_SETTINGS_USEVRAM, + MENU_SETTINGS_VBLANK, + MENU_SETTINGS_COLORCURVE, + MENU_SETTINGS_SHOWFPS, MENU_SETTINGS_DEBUGGER }; @@ -122,27 +130,36 @@ enum { class Window { public: -HWND hwnd; +HWND hwnd; HMENU hmenu; -bool visible, menu_visible; +bool fullscreen, visible, cursor_visible; +RECT workarea, wa_offset; +struct { int width, height; }window; void resize(int width, int height); + void center(); + void show_menu(); + void hide_menu(); + void show(); + void hide(); + void to_left(HWND _hwnd = 0); void to_center(); void to_right(); void to_top(); void to_middle(); void to_bottom(HWND _hwnd = 0); - void hide(); - void show(); - void show_menu(); - void hide_menu(); + Window(); }; class MainWindow : public Window { public: uint8 frameskip; +int width, height; + void to_fullscreen(); + void to_windowed(); void set_frameskip(uint8 fs); + void adjust_video_mode(bool fullscreen_mode); void set_video_mode(uint8 mode); void menu_load(); void menu_unload(); diff --git a/src/win/ui_main.cpp b/src/win/ui_main.cpp index b105956c..dfd8b6a1 100644 --- a/src/win/ui_main.cpp +++ b/src/win/ui_main.cpp @@ -15,32 +15,86 @@ void MainWindow::set_frameskip(uint8 fs) { w_main->frameskip = fs; } -void MainWindow::set_video_mode(uint8 mode) { - hide(); - CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VIDEOMODE_256x224w, MF_UNCHECKED); - CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VIDEOMODE_512x448w, MF_UNCHECKED); - CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VIDEOMODE_960x720w, MF_UNCHECKED); - switch(mode) { - case VIDEOMODE_256x224w: - CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VIDEOMODE_256x224w, MF_CHECKED); - resize(256, 223); - break; - case VIDEOMODE_512x448w: - CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VIDEOMODE_512x448w, MF_CHECKED); - resize(512, 446); - break; - case VIDEOMODE_960x720w: - CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VIDEOMODE_960x720w, MF_CHECKED); - resize(960, 720); - break; +void MainWindow::to_fullscreen() { + if(bsnes->debugger_enabled() == true) { + bsnes->debugger_disable(); } + SetWindowLong(hwnd, GWL_STYLE, WS_POPUP); + SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_TOPMOST); + SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, width, height, 0); + dd_renderer->to_fullscreen(width, height); + hide_menu(); +} + +void MainWindow::to_windowed() { + SetWindowLong(hwnd, GWL_STYLE, WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX); + SetWindowLong(hwnd, GWL_EXSTYLE, 0); +//always call in case the video mode change is simply changing +//the backbuffer from a VRAM surface to a DRAM surface. + dd_renderer->to_windowed(); + if(dd_renderer->fullscreen == true) { + show_menu(); + } +} + +void MainWindow::adjust_video_mode(bool fullscreen_mode) { + fullscreen = fullscreen_mode; + + if(fullscreen == true) { + to_fullscreen(); + } else { + to_windowed(); + } + + resize(width, height); + if(fullscreen == false)center(); + if(bsnes->debugger_enabled() == true) { to_bottom(); to_right(); - } else { - to_middle(); - to_center(); } +} + +void MainWindow::set_video_mode(uint8 mode) { + hide(); + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_256x224w, MF_UNCHECKED); + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_512x448w, MF_UNCHECKED); + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_960x720w, MF_UNCHECKED); + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_640x480f, MF_UNCHECKED); + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_1024x768f, MF_UNCHECKED); + switch(mode) { + case VIDEOMODE_256x224w: + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_256x224w, MF_CHECKED); + width = 256; + height = 223; + adjust_video_mode(false); + break; + case VIDEOMODE_512x448w: + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_512x448w, MF_CHECKED); + width = 512; + height = 446; + adjust_video_mode(false); + break; + case VIDEOMODE_960x720w: + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_960x720w, MF_CHECKED); + width = 960; + height = 720; + adjust_video_mode(false); + break; + case VIDEOMODE_640x480f: + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_640x480f, MF_CHECKED); + width = 640; + height = 480; + adjust_video_mode(true); + break; + case VIDEOMODE_1024x768f: + CheckMenuItem(hmenu, MENU_SETTINGS_VIDEOMODE_1024x768f, MF_CHECKED); + width = 1024; + height = 768; + adjust_video_mode(true); + break; + } + cfg.video.mode = mode; show(); } @@ -79,6 +133,16 @@ void MainWindow::menu_unload() { long __stdcall wndproc_main(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { + case WM_KEYDOWN: + if(wparam == VK_ESCAPE) { + if(GetMenu(w_main->hwnd) == NULL) { + w_main->show_menu(); + } else { + w_main->hide_menu(); + } + w_main->center(); + } + break; case WM_COMMAND: switch(LOWORD(wparam)) { case MENU_FILE_LOAD: @@ -123,6 +187,31 @@ long __stdcall wndproc_main(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { case MENU_SETTINGS_VIDEOMODE_960x720w: w_main->set_video_mode(VIDEOMODE_960x720w); break; + case MENU_SETTINGS_VIDEOMODE_640x480f: + w_main->set_video_mode(VIDEOMODE_640x480f); + break; + case MENU_SETTINGS_VIDEOMODE_1024x768f: + w_main->set_video_mode(VIDEOMODE_1024x768f); + break; + case MENU_SETTINGS_USEVRAM: + cfg.video.use_vram ^= 1; + w_main->set_video_mode(cfg.video.mode); + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_USEVRAM, (cfg.video.use_vram)?MF_CHECKED:MF_UNCHECKED); + break; + case MENU_SETTINGS_VBLANK: + cfg.video.vblank ^= 1; + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VBLANK, (cfg.video.vblank)?MF_CHECKED:MF_UNCHECKED); + break; + case MENU_SETTINGS_COLORCURVE: + cfg.video.color_curve ^= 1; + dd_renderer->update_color_lookup_table(); + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_COLORCURVE, (cfg.video.color_curve)?MF_CHECKED:MF_UNCHECKED); + break; + case MENU_SETTINGS_SHOWFPS: + cfg.gui.show_fps ^= 1; + SetWindowText(w_main->hwnd, BSNES_TITLE); + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_SHOWFPS, (cfg.gui.show_fps)?MF_CHECKED:MF_UNCHECKED); + break; case MENU_SETTINGS_DEBUGGER: if(bsnes->debugger_enabled() == true) { bsnes->debugger_disable(); @@ -157,7 +246,7 @@ WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); - w_main->hwnd = CreateWindow("bsnes", "bsnes v" BSNES_VERSION " ~byuu", + w_main->hwnd = CreateWindowEx(0, "bsnes", "bsnes v" BSNES_VERSION " ~byuu", WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 0, 0, 512, 446, 0, 0, GetModuleHandle(0), 0); @@ -192,18 +281,26 @@ HMENU hsubmenu, hbranchmenu; AppendMenu(hsubmenu, MF_STRING | MF_POPUP, (unsigned int)hbranchmenu, "&Frameskip"); hbranchmenu = CreatePopupMenu(); - AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_256x224w, "256x224 Windowed [16:15]"); - AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_512x448w, "512x448 Windowed [16:15]"); - AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_960x720w, "960x720 Windowed [4:3]"); + AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_256x224w, "256x224 Windowed [16:15]"); + AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_512x448w, "512x448 Windowed [16:15]"); + AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_960x720w, "960x720 Windowed [4:3]"); + AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_640x480f, "640x480 Fullscreen [16:15]"); + AppendMenu(hbranchmenu, MF_STRING, MENU_SETTINGS_VIDEOMODE_1024x768f, "1024x768 Fullscreen [4:3]"); AppendMenu(hsubmenu, MF_STRING | MF_POPUP, (unsigned int)hbranchmenu, "&Video Mode"); + AppendMenu(hsubmenu, MF_STRING, MENU_SETTINGS_USEVRAM, "Use &Video Memory Surface"); + AppendMenu(hsubmenu, MF_STRING, MENU_SETTINGS_VBLANK, "&Wait for Vertical Retrace"); + AppendMenu(hsubmenu, MF_STRING, MENU_SETTINGS_COLORCURVE, "Use &Color Curve"); + AppendMenu(hsubmenu, MF_STRING, MENU_SETTINGS_SHOWFPS, "&Show FPS"); + AppendMenu(hsubmenu, MF_SEPARATOR, 0, ""); AppendMenu(hsubmenu, MF_STRING, MENU_SETTINGS_DEBUGGER, "&Debugger"); AppendMenu(w_main->hmenu, MF_STRING | MF_POPUP, (unsigned int)hsubmenu, "&Settings"); - w_main->show_menu(); - w_main->set_video_mode(cfg.video.mode); - w_main->set_frameskip(0); + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_USEVRAM, (cfg.video.use_vram)?MF_CHECKED:MF_UNCHECKED); + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_VBLANK, (cfg.video.vblank)?MF_CHECKED:MF_UNCHECKED); + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_COLORCURVE, (cfg.video.color_curve)?MF_CHECKED:MF_UNCHECKED); + CheckMenuItem(w_main->hmenu, MENU_SETTINGS_SHOWFPS, (cfg.gui.show_fps)?MF_CHECKED:MF_UNCHECKED); } MainWindow::MainWindow() { diff --git a/src/win/ui_window.cpp b/src/win/ui_window.cpp index 0b0b07dc..1696d73c 100644 --- a/src/win/ui_window.cpp +++ b/src/win/ui_window.cpp @@ -1,14 +1,95 @@ void Window::resize(int width, int height) { +int style; + window.width = width; + window.height = height; + + style = GetWindowLong(hwnd, GWL_STYLE); + if(style & WS_CAPTION) { + width += GetSystemMetrics(SM_CXFIXEDFRAME) << 1; + height += GetSystemMetrics(SM_CYFIXEDFRAME) << 1; + height += GetSystemMetrics(SM_CYCAPTION); + } + + if(width == GetSystemMetrics(SM_CXSCREEN) && height == GetSystemMetrics(SM_CYSCREEN)) { + fullscreen = true; + } else { + fullscreen = false; + } + + if(fullscreen == false) { + if(GetMenu(hwnd) != 0) { + height += GetSystemMetrics(SM_CYMENU); + } + SetWindowPos(hwnd, 0, 0, 0, width, height, SWP_NOZORDER | SWP_NOMOVE); + } else { + SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, width, height, 0); + } +} + +void Window::center() { RECT rc; -int x, y, wx, wy; - hide(); - SetWindowPos(hwnd, 0, 0, 0, width, height, SWP_NOZORDER); - GetClientRect(hwnd, &rc); - x = width + width - (rc.right - rc.left); - y = height + height - (rc.bottom - rc.top); - wx = (GetSystemMetrics(SM_CXSCREEN) - x) / 2; - wy = (GetSystemMetrics(SM_CYSCREEN) - y) / 2; - SetWindowPos(hwnd, 0, wx, wy, x, y, SWP_NOZORDER); +POINT p; + if(fullscreen == true) { + SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, window.width, window.height, 0); + return; + } + GetWindowRect(hwnd, &rc); + p.x = p.y = 0; + ClientToScreen(hwnd, &p); + OffsetRect(&rc, p.x, p.y); +int sw = GetSystemMetrics(SM_CXSCREEN), + sh = GetSystemMetrics(SM_CYSCREEN); +int x = (sw - (rc.right - rc.left)) >> 1, + y = (sh - (rc.bottom - rc.top)) >> 1; + SetWindowPos(hwnd, 0, x, y, 0, 0, SWP_NOZORDER | SWP_NOSIZE); +} + +void Window::show_menu() { +RECT rc; +int width, height; + if(GetMenu(hwnd) != NULL)return; + + SetMenu(hwnd, hmenu); + if(cursor_visible == false) { + ShowCursor(TRUE); + cursor_visible = true; + } + if(fullscreen == true) { + return; + } + + resize(window.width, window.height); +} + +void Window::hide_menu() { +RECT rc; +int width, height; + if(GetMenu(hwnd) == NULL)return; + + SetMenu(hwnd, NULL); + if(fullscreen == true) { + if(cursor_visible == true) { + ShowCursor(FALSE); + cursor_visible = false; + } + return; + } + + resize(window.width, window.height); +} + +void Window::show() { +int style; + style = GetWindowLong(hwnd, GWL_STYLE); + if(style & WS_VISIBLE)return; + ShowWindow(hwnd, SW_NORMAL); +} + +void Window::hide() { +int style; + style = GetWindowLong(hwnd, GWL_STYLE); + if(!(style & WS_VISIBLE))return; + ShowWindow(hwnd, SW_HIDE); } void Window::to_left(HWND _hwnd) { @@ -17,6 +98,8 @@ int offset = 0; if(_hwnd) { GetWindowRect(_hwnd, &rc); offset = rc.right; + } else { + offset = wa_offset.left; } GetWindowRect(hwnd, &rc); rc.left = offset; @@ -34,13 +117,14 @@ void Window::to_right() { RECT rc; GetWindowRect(hwnd, &rc); rc.left = GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left); + rc.left -= wa_offset.right; SetWindowPos(hwnd, 0, rc.left, rc.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE); } void Window::to_top() { RECT rc; GetWindowRect(hwnd, &rc); - rc.top = 0; + rc.top = wa_offset.top; SetWindowPos(hwnd, 0, rc.left, rc.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE); } @@ -60,34 +144,22 @@ int offset = 0; } GetWindowRect(hwnd, &rc); rc.top = GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top) - offset; + rc.top -= wa_offset.bottom; SetWindowPos(hwnd, 0, rc.left, rc.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE); } -void Window::hide() { - if(visible == true) { - ShowWindow(hwnd, SW_HIDE); - visible = false; - } -} - -void Window::show() { - if(visible == false) { - ShowWindow(hwnd, SW_NORMAL); - visible = true; - } -} - -void Window::show_menu() { - SetMenu(hwnd, hmenu); - menu_visible = true; -} - -void Window::hide_menu() { - SetMenu(hwnd, 0); - menu_visible = false; -} - Window::Window() { - visible = false; - menu_visible = false; + fullscreen = false; + visible = false; + cursor_visible = true; + hmenu = NULL; + + SystemParametersInfo(SPI_GETWORKAREA, 0, &workarea, 0); +int sw = GetSystemMetrics(SM_CXSCREEN), + sh = GetSystemMetrics(SM_CYSCREEN); + + wa_offset.left = workarea.left; + wa_offset.top = workarea.top; + wa_offset.right = sw - workarea.right; + wa_offset.bottom = sh - workarea.bottom; } diff --git a/src/win/winmain.cpp b/src/win/winmain.cpp index 239954cc..a75a53ad 100644 --- a/src/win/winmain.cpp +++ b/src/win/winmain.cpp @@ -1,5 +1,6 @@ #define INTERFACE_MAIN -#define BSNES_VERSION "0.008" +#define BSNES_VERSION "0.009" +#define BSNES_TITLE "bsnes v" BSNES_VERSION " ~byuu" #include "winmain.h" #include "../base.h"