From 48628270584e0db149105c8bed3699dea256edc7 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Mon, 23 Mar 2020 11:41:59 -0700 Subject: [PATCH] Remove OSLDR The OSLDR application was badly broken and almost impossible to fix with new expanded OS support. --- Doc/ChangeLog.txt | 1 + Doc/RomWBW Applications.pdf | Bin 145541 -> 140215 bytes Doc/RomWBW Architecture.pdf | Bin 371106 -> 371106 bytes Doc/RomWBW Getting Started.pdf | Bin 159938 -> 159847 bytes ReadMe.md | 28 +- ReadMe.txt | 7 +- Source/Apps/Build.cmd | 1 - Source/Apps/Makefile | 2 +- Source/Apps/OSLdr.asm | 1017 -------------------------------- Source/Doc/Applications.md | 60 +- Source/Doc/GettingStarted.md | 2 - Source/HBIOS/Build.ps1 | 2 +- Source/HBIOS/Build.sh | 2 +- 13 files changed, 19 insertions(+), 1103 deletions(-) delete mode 100644 Source/Apps/OSLdr.asm diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 895dd114..94b7eec7 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -51,6 +51,7 @@ Version 2.9.2 - WBW: Boot from any slice - C?M: Added Unix build process - PLS: FreeRTOS compatibility +- WWB: Removed OSLDR application (can't handle new OSes) Version 2.9.1 ------------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 3f1f2c3ca1c455a56308e881574181ee51f5d339..7c04e88866217ba6f439fdf7d499cd6c3c52328a 100644 GIT binary patch delta 40546 zcmZ^KcOcd8_qf-!_qev~ajoPI*WNoRTat`Qk&FtJaV4{o@sdkONr{XQLRMv#RZ^Kr zC|fBre$Tz~{=DDy{rz>%^E~Hup7WgZJm);mIp;<$(p9$5C0IkMuqBfWArd}tKpf4~ zH2;fJRV|wS`u8oBEzM(LXkiD?k0d zzH*i+;gIxc8CqWP;3?c8`X$1h75l^D1yy=0>Rx;IdDJdS-T3w0z16ZnbhpW&K56j` zY}4RuRLiH``>pN;Ojkxv>NC=_%BPqTG1off<0LqS^9{zR)SM8xHLmr1Kj)oUWWv$n zno=}!xOTDGEw4&GtCV+|*;Go|n<%gK(9nQ1$^9ORN~VN?13dPXY42qS)OYTGno@Mw$08ys7lm1)Z2N@7Az_PlM;4TAuu-Uvcwn&rj`dI(^g$cRDfi zU78bt2(g5MST}c%J)PKcJ3OK8if5Y)`+=6849fiL+>=9IX^F2x!}5E-zvMj;!sjF) z;ygZ~B`O$@laNfSG~6{AZ^?gsZCd_V_cJx(oHX50)y#Qs9-T7IPi;6#FNHhB$Yc- z6^8-e;uVxtRYho<4lRPlf$#8W5u74g0SCvkh`_qk$2oBdXq*Td z3#P>5M6k*@1!dee$@kPJIFzxfU^-O=MJ0>~7N-K(fh}pGIIvj2B?hmcicuB8V$cez zI5>et7=clS8EDoNkN6o#U0v{NF^*DkW*1WD=CR!@Tv+}RaNqs z8l5{AMgfgg0*t5v{=s)R3}6IJ8byGgw{-4EW$ZSeSPb|WjRztkiv~VLe-eqs0c$I|-zE;k~3Dm17V#Tn>>iAh7 z|1(FAp9PwPNBQJoPiA&FocSaT4y~YsRe=|nRbX`{CQ1Vl$D|5r7{$U2?`jr-TX`hm zbRK4+lMF;#c7*jO4TOg;m5XrVl>Z{D1jypqaVlWI$IX*LLxW)tAclkeI#KXmR%U8a z0}uO&io^0eY=Dekg%pR9;vd*}*q;XlDZ%W`a$s&LF6_U?_Z{~>aqgrDR*7io3ds`g z*_a=Aro&ddY(G-)GUuLNn4jH$ zsaDa&p1pTbQ}0Sc!W~M5oDL=Kdr+uqG zJJktl-FmBG4!?4j4hleyCgq3Q}=%@tI=%D&GM&1O2%VbwxPjB$y|pW{o9l034F%xhT$KZ54j5(bE@CW_pI9^#^LNmq`)y8 z_da&^+?nI9r%4b=ui#LV6%0q0^K&YZ^z)zHrGy6CK$#8qFTDZ9E5SW1D0rEh89vOf z1{a7iZEvVNek2Xd%fG!-mHygNN~A5N%=X8QQX=gr4kgt;W*}`X?Dn>TQKIYs8WKgp zE~2EZ#wCVg|C1v;Y%Yc(wn{)uq@AgRha<&M@Ei{l*!EJ)@rz?{cccg`s$!7phV(dSQ$K&Be5oPv2Si>vBJ={_p%75&2(5)tiVn_dX9iaD& z917MDV*;XLU{_HT!T*<;204BB3XTab7@#lXl~19C6H`Tz%B0o(hZSX5cT7r5d0VDh zT07cPR{HOBz-VouIF#{!^kU(oI20@+#{}=2;fF9l0&+yry%4f&9%lv-=_Vl_SeTiS z6L9zEv?@Sll7G*u^2aijVF;{p07o_p%Bt`JUJ6Ln@(K^^k|eM_A+Q1^1Y}vP@;DWQ zBMBU-LSp_ut5ktM@=1yRwMvyg)}w+WYe0o0jeprD&`mN&Mw)D30$`5d4;t(Mir19l zQ29fL0JTLE1&5MRw*XW@hLp9W;5jnnt%ZWHz-*!akG->M%uI3tWk_vCy5CCyp8Aia zsQ%weQT<~nz-y8=ljW1RkFtZ zmLXd450$BsRc3F(LOL&i9-Fx|`@hZecJE$uDL59a*Xau9jr|bEKddxbfZg-i+>#nr zF(;pQZnPq4Y5!3tS`kOuK9YYa6s`EjdePvT0_4DnR{X;{kOoLfMcS}~4Mb9Ewlxw! z&Ne7`*qYRr7J!2H*>C{pwT(0!MaE;Ym4-L>koYb_gc{8wJ@MDWP%J@T5ypAHw};y8cpUMerU_G(>!-b3Pv3w z@l<#S#qo!sAmL9Ol7`a{k=Pe;l!n)Ab`GY+XFObWl!d&#Y8?5fi5Dj!ZqnK0LW3L6 zpW?-k_L$WFINGra;93T7|8+9Z81gpbL}UJxI~ed26@yD%IlxYi2|>a7WN6D(5)L6l z8=!B74Eec9!;)^K6ZH^4&SYpDKxt%1_^34eh736Xi1{c94+ap6BUuf>cR4X*zGYEv-b-tmUZ;ZLiizEoTX9)tQ?m z*?e7|qKv>A$S7bBhNws}?PWI*#kM5fF!{!Td}jHUpdV2F&idl>3u(R2yT9HK=;vqU zY+L-;qEW@m!4g&E-8&pm$WK{ku4+1So`dTB%!FlR1Ti_*Anwhf{@Lk+-*V@w7v8?> zk`a$(P@h%UUv?cKp%`u^`kWV@i|(v^e&&Jq^XiHw%!4_^`-gV#My=EDr#qewa9w9M zDS7@8W`PJEKbAD^;mmx!Xp-4d8LM#m-El4|lNY*2Up78jv!|19^?1kDdPe?<27AGp za})1Mo0?Lsm5n8vJiR8Dt?xyJeA=5AcHQtBYV>jF?GtV&xIK;8Kr2Vc%jYMD+d=b> zEzvK$pXYbrk01Yd=zP(;^;;AOMESQFAq8eiS#DG*0l}q$?8)rkr@)yiz!Q=5N_m2K z;Sd#3GT zT?@BwDDQjxZbLSrAv-42|EgZkQR89C1!K{@tq(H-Cs}G|XXeyu8|5^jtlk-lM3JryD$?+apC zE*`<4)Z^nAT#h>WAK^**)wQ1O=x-}{%k&lI!eggkla!#3V~s!KE8`!!^uTLvX4*me z@|eOde75APTYg(3JgEr!tNU^4SF0c5>!DNL!MO~_Vf}sV2yo9QpLp<^`SW;T@g(c@ zf1NMzBKq(70#tzcf_aaTttqf9P>}>Ie~KMAL6Xg?@kGLnAxPLSfD8WV$pLyvR_pjF z5_G*w3chs;2_WV`6#RkQXB;R6BfUtYVSy+F-~%|K?GprV`Y{tTr(ldbzjU#dRUt^4e6JJY7{2$ih&s#eh?&6k)Ax$+sgTSCa_9QE^F9D?KKL0h8CU$+5db7vj~Ck@K2!?M4P+*pNHF3P3O@eR zOo9HqP!#NR<{z{%(7fwUrX@%~!RBCne_!Z;cSPXPWhI2?G)xW|85aV7eIk6`=hjFP z3Aiqf`igOZC-0x~P*VN>sh503`?vW7PhOIGR|7Z@03;bqY#0`q8ly@cVJBB$YUaFYOh z2fgR?P50doK1yF=`Q-M-lSaVQv3^7^`{Oy5!DR*e20^M_v8`UaKL{pM8F=>^sUsLV zPI=t!OS-!ElE3erpXf(=Q&F9+aUnmoo_K}s4{mC(=&206{IV_iNibvQ=!bHrGn12& zrEcpB%2L!$Ji=0)MFKyU1n5pCoN~~;v#-tE;lAek4X4@Ns}$~(xF;mZBJku(2sfI1 z6aMdB!;^0z|JPY0>0MsTF)BR1h2-a1VyNLOBr1ShBwSL)gh6IE?fJ(!n~DC=ENt zkngMD`+`Ji4&^@&wK6=Bh(e;tx8i^A24z?zNgDnd^8eY2@MJW38E|WoGS#`};Wy)d?QWJ~V8pXdk@(a+-CX$82}<*3!zO>U#g`oR1xTuX`npf?eX_BaZ{RHF?gX_pS9VnZW%1vIlh@M~!pw zoH)pt5lLnEt*w*Fg-V~eN4C&;hws!MxX#^@U$8-od9B+d zQ)c$=QK4uC)saYUowYM1VVKNu%?S2)a41wv7*V}V@n&wOmGIs|`}U9nY#seTz)jc4 z%kRhZC++ETo6qDez7~a57yq(1v1>aacfW9`d*WRZHWCg`zL}6us5g_Aho`v02|pjU zsk_WfWPVA$cS2TEv*eDUg+m`EOqtG5H$PJ3J@E9kVB9mS zLX;L19~^FLxo7!!(u9G(cp!10?wYyIx`UOEYxBZ@JB5WDqi2&O;-!$KVT(b2+`bE`% z^c;g86`aF`Po5%*(^0(B+45_Y7*RfAFbm~&-Jk_PU9r?NHyKCm{lf=h-Ebwmn>yOGlA&uf9ALw&>>!-8#-YN32Q09kv z#QgV37r0)jT@<3^Yvj}|zT5eIX6Zp)-?6!M{kO>-KYa`JvXuGr#A(Kc-k-eUcPu@S zUtb(=nw2N|Gi1Nho8!;ldap}8-n!R%=F<}+kD!JhNL$nx!FQk`KWz2t#l@V_h|Tql zNL@9-{)X|FP3{~z^hZ-;q{E7;^lv!xl%Mj(ZJZ_G`K5aIEnt3jHLn=w?0*UEIaYOy z2}OOdTjW#3J1M49DFr?C2|YYoYnWfCrPE`noX}O6In_Y^Dy5;J+=#N1AOGVSk1=O! zwlY}OlYI$zkdq&@f5!ySsy-VPlc>$z=dXXj|kBt5Vi&aUb0XaA+*offM6S;*Uf zG2fyV=*Y>dT2yVBa&PUY@xnG9zFPBVSc^Xh?wt?FBrjE zbL5i4g=~bp%C&2zvd@-cTMc#{JqC$C7Z~jFHOxr3f5?X>Sv$4+Ti+~`)Llh=WxWF1 zT6LRPQ>ELUEGG+H;B>jU5O%$Z0)sTKa0)AW7m>6YSL^aqkJBltZtm7&gcBH~?=llk zzxVHSF23$(=dFD?wTNl<#-m~9s%WOrb|J$`csdRrd;X;5bDT>}LzSWCK<0baZVZOb zq{8xGVZ`qI@n`gIyva+_IWsR33MH=H?K!d-QL5Nj@~Wn&=t}T|$Cqt9-;ObaPqQ;# zyu8ZtfJtmR?!rTz?t?~OCN92XSsk-Js7tVXflKAwU2WS+`EB>*`(hsmJle%tCwR2? zjJWeC+i!eoIa}HE<@5cnkWRW|Lbs;ME431l-KK_g{dQ)77WNBtV{=vstk$y04~Ggc z%ZKWxX|VzBPQs5(;rp!2n`$KX1JUf!Iwa!GZ6szw zAc`~G)*JX0D_MU+%`i+r=$m*Ts`N~ZeoS)dN~`a~x!^WehJ80VVv&@*p0!a&^8L>K z__`rpl(GSZTk(Bg&$sy1J0mKtoH?tjQrQwObt9km^r>4qZLAZAq>^aZjUz5Ni9dE5 zv$AChdZHMnxa@u6lvhsbVb%CMLmD=4t|I~EXW+;7)62naRa7CjKQDW&Gc_zt>RwGz zCilk`87VC$83qrE&&T!GBsspIKJK@5t+^pxrF5-SeX3uRCAXY{A&BQ*Ng#)b`rWwRKM zCp-_%4!Q1bZXmPkyGP$E;pl`>cEfNAR>bmIm$M93>Kqf#PvVPKT_qnhG@V=W_dm_| z{G6sr)z=&9fy2|g#+1cg;s;AQ7(2wmY?FGG7?YCZ^t8DJh)?t6=~(SvhfEJPzOwoC zzQg%~ZJpGc`6#Emm!N>+SNH=eanvK&0qhc?NwS+qyW&Drom36md$ZPiPIuCq&F?fc zjAp7&^<2;I>khhJSY4=Kyk772qrIv7?24#hW#rg6VzVJ7wDJA5wh-I=ugyR2?fqu* zTKde541ujO@4CaGe%~E`T&DD-4b5nA-9#;)XUJN&xG1-x`iPh+Mqg!dk(l|5b?VJe zUj~>1!GTaz0cKv5Q}M6YDaf#a*XciZ_?KyXq_8CD?dC=yG3Y-Y4WJ)9N@26R>?DdY zAyS+e^dApY3>fe$0@wFHVw$A>hearOFq{1CH~_h~$p{yt;K*&z0f6<}APm6OZLp&l zko)72Kq5!`2nExolV1bdrW%0(A$9^1cm*7cJ| z(o>zA>vufyUl~0NSRN^Cy5sWx7w*S^xaEJI;b0;Nr1#2lIe=Rsy-OvEIACAUGfVCP zp>KHiBeJK$V9+4sErrDV83F_(ges-six0?eA<#MqTIGcta1!|S%K6u_;M5}W!-f)M zip$VXVyGCC(+a{*G!aTeT6sxp0ul4DaxpG)tl&TIK@66(A}NXAL6(0l2;^-4yC4uc z0qipsvjbwuwbHN=8R`U37#X6glZLCwkRE{M3rP=XQc45(T}lkd5|eTa!*$207`gWf z_W>_?%?A-nmUnd}Gd%0d#SM`D3hE15()k^Tk%Jwi z*}gP^V2|qWU=PXVo76HBy|h5E=W;U!Vz{AP)Gjg7QWi)}UJ&1t?G5yI(hft;+WoVh zfLbAPzOJSg32)^}!|$K|OQ|3P-DA#KCfjzOim5etbjc%RdCzb-*EDGggc2z@Cd#Gs zS8NOe5^O+Xl7B1o&qN*u&>+Q5TIf2$1O`tOwT5J2jUE=l)sff%7!e+hkaxNyeO-mhjL18F>D-pkWQIC>gh9FZsk#p( z=C`R4f%FcOof68GRuETfq?^m|r6dlU#soV0=4WPy%yT=1LxS3mbm;qHZ*!I>pHS9y zijqL!!l-5M>(XDka#GPLtiu>tlC<&SOXMgOm#yQ(W>4zWhmFc2f`xQ%v48n|wZ2bT zhF@kix>H{`SGY8zy|=tbd)HXcV&^*Dy+V9rp%W)(|jr~eA(>*Gg_wH%Y{BCiZ>}awS*SPmJ!syq>6EZ{PQ1CNQ??d?4oEu$qE>N z1-k_yfC)lZZrvOJY92$uns2rbj!M#J6nwFZ<$v~$`0fitN)^$UWq!`0VY<7V+Bwm+ zN$sNVSqF=L;3V5()$MH6zrBmxvmh-=k0k$+oiDG{9^1rto zhWzfb62WdKIN`Z&0XU9k`)M~aA4t421tH-*X) z0T|jdWVb+S4g)mwA4x<~Kkpg}j{f`)8eA*|ul19c{%6t}h=FIGxomMwgOX{lwz_`> z(9Kh=$`>RNAV6Z1^z_D}|2k?|H0h}E|D_!)`Lbmt;sn=E^ZkBui^I%YXOQH)>A#K| z77!;{f4W5^$Opax8(V*obm$tQr6{o=O`!`LIVQix)3CRz$lUNiP7W{nR1hyK`o9#2mOwDXJ}QVG!VwdwAVo-tEGwciHN*vAAS^|M z5?M}s#8hgqW~JY90@ZG;z^89ZW0e}nNoiY7?D+rAf!~%Gd7<7k5F4>=cAFU3UO9Ou|TX~0JlAm&kAXR z77)N`F!qZL;)94Q(?ACxqfb{U#{nroBqaepI4gaSkQu2(N3~&?419ehjRerPM!3(KCph@P3lc=Qz$yR>igQ!S-Ael|#c!M9}CN+O^ zCcO(XAT^c9qr}1kfM%f}G)bBTh={W?UkDO}h^wC<7IN`a?w~M4Vu8%vq6nCd_yY*E zQcDb=rO*M$R~$MBL0BT&Cy0w!{25{;&PqTTdf4so7sDPy@1s7)JiJecV0VnZ{z=y} z7H52po&{ao=IviQk^C9ys5%narNF93B%uM~GCjmn*(yaABLl=jaK$T%V98l6U>aRP zUJScaCFKgf$Krp#<6HrG>`ofU6_|M}`8q)QMpXqgemfyoP?U;Q{%vSoNyRIm)^ywK zf)=1hE@vWrg;oSpDdP$M43g-Rl4#q5q$1VdcT#|=1X??ckP1k!J9SK83{1G479tS^ zMii)UhYEO90_FYF0u%1IXMhQ20HMf3zb6Ey5lfCBlBWko4oj{*+HQf>?pR3hA!+)5 zn8AQ4RDWNhTtN{Akl6Mjw6uuxjF1p9ngwi&1R3ZP5yK2|6NUC|H>rtFWTAINKNg4! z?u?Nqf{W@yVlpexdxAW4i#WjsApPA?FOiD_K=KMuDe({z=Dlk`2lnU2Tc=^y8z^*1mzJ= z3j&BA4;2w_2!U@!tN|%{W#}WZRTu)tO&MZFaX>^~1&FIM792W=I1E5ygd3Ro zl_B(ucyA9FxoZSL5HU*;d|7Y+tmCsW^o5v@2A_X4fpj2Z1qOVhv=?e3reFaMiy5>| z+=~Olg8LwPh-j(=Ks9q)r#ewuSMi&e#Izms0A$njKIt-MzUmxO3ae^j^=L`Ve zx)VeT5w95nklPuOhKSdV0HU=ESbB~z#8qkG3JF8RS0;eYZ9~8XP}DP`$XHL?GgETL9AgKzb07Xa_(SUtpSvlm`LN zkNilzy19Uh9fQY66gvwgsp5Yh+<%N74pgp_PwW4T9uB{KqxqlF!{M=&vuB|Vh`4wL zc&1J%h^G=60C6A)WYnFDiz_(AIADRcPd^S=4e}kBblgGk0J~G{=L(9kaXa@$R~!yB zcB~l=4;sJkQ?8)68n;s%=L!m{LCyXSX;7pO%HS162qfB|4g*Ini6A#Xjs8vvtt+Uq z!0kN3UBP=FM}B3K(ZH<0MsITpKE~}7I=F(5aoe?~B+{e>?buI}O()kOk_eFh3!t)N zXh{|xSnO?bK*qS8NS!MX5RQBaC4U4aBFE&&4KUI6g^)xJOhgX3kw?JtfF<3g2HXQ~ z=ZfhH+yic>#?BSE2LcYg!yWJsq(4CX{)jZ|jyVMnJRD|ct-u@LfO-9m24>xfqqzcK zfFsArNGt$XfCF}S8x7cg+)f#tD=_^ya-AFrjQ~tP_`Ado9+(xg!ve7TIPe#T-xR>C z*c}#t)yILq4g4Mfv+e}GT!GEUkt16q+9XE_9N#t?aLwSa7ds7-fXUPdBs>!B9ac$y z-vEDw*#3y*DRJO$6FV&+Jn;95ofaVS`#DbXn_wN}>Lk+4B-e-o+jj>OOt2ID0%L&t zoqrR!5=fpBM-Ft6KLnb_feropL!fFL?jL4=u5n<0?~H*7cm6#9+#hMe9m$cZC~-T5 zNMH<1PcAjuo&n6Kv?B<#2GA>xTuVeA1d7G>fN)=I^KDzmM`xt&JnGBm|PKL<9pf zjle5cGKWCw2;!s@IN**1aJJD{V&emdi%L-u{MA5L4U#54B0zM6!67|lI4$ub_ux>b z_w7XQ!J%+7U(^#?#<|AJwDfb0L*d#<>e#@(kng7^Hdp%A_S;g{v|cSno# zGD%QJs$k2?9xYNPHw3sV?4P>NM(ytRU^m->+h?PDcUC{rVf<F5$D z(kN9_C}x6#gCF3+2&@)Ctj3S--N1$&u{KY?6#I2ZdpALk!d+xHVXR22~vC!IqN z>sD9M=)F6_u5Q=|xUc-SuU(~zu!dxgu{ zFvR;^RDK9Fh5YU76a$1^6cZM7Y#X^aR0@wg8Wkqf&?a<@C6rJ_b4Ho=!`J9?sOj@UYMHpt^AVyt9^17`apqZz*E@EbFe0z6m+gIud>h%MGn+~Xt^|n5q zK0ecn%lIXqUV1>7gvK1&>wy|!oscb^n@L^vW5u4vKA0)i} zQm^@GYdUDt{-g|#qobsC4G~&t35T9~@uI>IAG@xvZn>GyHdF|0=`YpOcwXLYTp%D4 z{qZ3lmw8`&Gi1PXR}gp`_glFHvRP2iczIJlQY;Vo+T&a!MMZb!F}1$VoL1=U#j@b$PUxa{nK%}-_3iz86)5;{u-2A-UA@lCmWJF-HTCczXl;*S zS;^M!U)ptqTTENjMjUP|)SGEY{}a}93&$UCzFcTIJ@@I$N;cuk$h%FeZ-iT0EUI*$ zSun<#S&=sxsT_0Nb5!k-<4f@-UzX36JYSA}&-2cM^Yf~`uKF*l=Y1>f=0bH5k9y-5 zwUvTi%?xOJx1qgR1K9gt`%7KEt_`nSV9!mC%D<_oJJHW_Oi8xcM7{g^H?=gogNEH> zu5bE}2wU1>WiOsLB%u4+zs3ZgdH(Uh?9Ivet)KluZ{BI#!>8P4t`VZCR3mJK;a!&} zZWaZeyj@@Xov9?~>NOd4?ntACahXQ=+OQu+}~lMtJe#p5$GH zljFI3hlr^q71VXPd+SX(^D1%WjD@+PW1*5ma=anpLM)Gu@I_ZHv0Mo-2)XqsyKVnc z`P{h4Sk7>Wj(DJ9NpEjnl9Bj@lZ%*@;BNzSrs(x#0nZ1TqT$WgBomJ_c!o|6Q=hV< zq%sP*Uvxp?tA}ILTLN^QDQW#nhNOzJ)it}|>2WI$Inl{PJK@xn^G&I0G%oUS)As4? zg$_oEuToiJ{Qc9!vJMenWtJM8n3S2iEVMWXu|rOho0a@y-_|?l99Hz>o<9gm-h0&d zRPgEWh8#I&OA%-Z7}7Xc4}AI)g|>| zk@0lGnbXhA;SRwpo`yxoh|*gTtm)AyUKhCdb)WP2_t2JPdDa#@5U21|Q11`6b7@4i z)4|2g22na@F@;=fvjOtT4DBm)y{byj7#sT|%iS^0X{fbBQT9ZJFf;ZgOXA6?NN<;) z-H4JeAD*rkXE`tu&J>Ezuw)@SUPJ5Xdu+0;$>E+!Q(23FKr~y7ip%cF zvvV9{-Y@H2t*xd54lidRm%j1_f8G^pyEdfXinHi%8s2ayn0M7=J?_jpe|O+nmjQ%w zOZRqOS-0PPn>S?tiw>3Lhc|3iQJkCARXT`$eQa%_$kIH$p9BsLx=YUT=mKSpAYKpD zYcE#%_2;LNRi3n;Y?@LWE*$J{&fRsb;oVCmbe?eidh%Ly_Qs1Ati3vto9DBj;Hs_$tp&!M2M18T3X4J(9x zjEplXI=gl$zI5K2(D`UNP&oflRLN$aVPKBeEeF~t?=CpQt)chh(F(DjRYq-@MTxnu!YHaf z^mQB&T5Ss*-?w*HHsQ(fNeAz8`{FD8R${v1%r&RuORm~JUUyFqSTMNRfIDg=p~ccs z<&(6qV1EHWw-IRCCLjBh74g1T^|IicG*LJE_}BY#*3)wC=FtM#S7Ecnbm;5I&-OZf zI{&=!lZF@8Tx)acB*s@fuSRZ^PN0HA4AS}}PGw?`TtdCvkkBK%HNCzc-QidKQ|Kob zM*}_9xV%SV!Jy4=YU6f0a^lgc+NF+}_I>jn=+6dJdLLslon3afMBQcTN`AS3{Fo>A zb}7aGLD~VV!`QS%_wYVnSRy=T+k#_i5eTx_p$wi6DMJj&AF{wl>Y*pW_| zzgLTTr2I3jXXLJPKL|3R6L`gebEX=1%x81=HurHD8}$Z5-{vkwsv|MAWjtS*wZiWn z^>mJ#-q>e6m?*B}q^^1V`In+o>NTmSIa4dPBD=+3bndrRR13v% zfK%dWuG%9;&S=Rc6CU0vd69J<^MHAgiJHIUw2Fqz*g1Qz{Iu#i-l3q+ zB{e+m>n*!h%TEf)X9>4gvkeX15k)xIWkekJ$+F(kMBnZX!||7`S6fBq)hdp|M>4C= zSBI`Q$bU*h!H{kh&G0CNqzrJV2roh7`@0q(Rh{V%28`aSVVAny& zkC#2^h1=89i}x?4zjoU{Kj}engfa8Z!eu#gyt%Y&<&1<@27oUa@ogKQm6`+RzNF-)zepZQsDNkApWZb^jcdneK ztKDk%Y{c@e>(dL;)U|}^uTMtTW2ww8Pv5*-dofA)+AG6u7ek+efgv@T4-kr8ixm%? z!oJu0iEz6dt#y;W@-8x0Hoqc>#kBP*z3iN_Zc$Q!c}KfpcaG~(Z8rtxe)WeD6~XkE z-VvpEMQ`)P{uJkWG1JukO6d9<>$cj0szU~DB6$B7HS}Cs(bM@)?-7P(L|FCKrWO?Z zM)x)FCr2KaJ!o7y-5Il&$HG3s3{@0dUg($5l~a}N{6p91bBga9r1JN>!aqA)-ieN* z`_yi>iVQ!UEp=ByUZXuiX}Pdmn=r2qYK{qNqtJ^_o8>|*jUKDv9cUELb| zA4avuIOMF|3*{KIBQ}XovYR3m2AKsYad2%}`kK^Lp zv(1PYF*B(mlVu$@=Q^j+#AfThQ*uPLA{R^JSDzkFt&EmmRF#b9ykF=~bGC5Lyrn6F zW*}n%gZUZ0JMTlJtR2fu)#xg3@uVoM=I2oM;G?t!j-BNpjtzV`-$+=il06-JiHR|a zUG7!vy8jv9<1O$P`6Sg#b2es-8Hc!mpuJR(|VyeW`WmJ?8mglR2?*SKLRh z+9X!I_5A=(f^pgM-e*_d{IGe@ecJV#mL_xEyozyVugb%Sl2UF-qZpAvyY8Nr&+mO_ zQ#W$XKfLCgnVWP2_dem#jpOQjk9+d;nD9o=bqpNReYlHz{;&bVj4Z*>bmRVu+jqYt z-*Q`ip(he`%<*JL`OwH|7JF`T?5Lz=K{ue(XUb?xYQGb^ zqE{u~_eJ2z9v0iofMdfKQd1w>X4#~bG%Y-xEkF2{Sm^Le^iFe{+{!+WN54*)oj2C+ zGg6AnZa;IuX2r$Nx%KYy-JSu7Eu-k3_CphW-n3lLtS~~i3L5yLzoq{qm{P}A9W$?i z`Jm352&zW66d?{y%RxG?fn!>H+_6@~Bk3Ida|MUS7w;uoO&sHPEDT@ENn*a9nL4p~ z7L(G@HiJkQH}&R!9(Q;g5|(kdJ6x(?IxK>)zUCU!BCgC>r@5x-gI(?Yn-`_# zg5m^t_;YSxDv{BN84Qf21b(!vnS0sVeKFUn%W+>9bQgQkbR+0shF@8hpPRsH=;lw%*@@fzwmL>QMY(3{pCuIK z5tt@4uJ&{8#K4ONLA$Cmmwp~eOLVo1KQKl&)m6rPt7;~k^-=9=PRZoc-N7#_;`UCt z?K*hu7nS3+_wl>)gL^c1@dT@aU;0tgO=tTtON)u)k~z&9;+8pCuW0)|w3=H9h8bvR zr_(OXKbsj6sp@$Dsk~w)^Fy|MYUc@Tg;!|7HC5JuGRI4_!c~?h#}du=GFLuA^J4e< zooSfsw^Lr7&nw#aW{Q7#P_*aS3*X3w6W;e3ehTAFK7X@&m{@h-srDIDLdWIOy)H5h zOIc@W{Jw>=)Lk#+d@$^t=lH-?h0gNDZsQaAtUoFa94?q;l@Q@SRptKcO7D7@-g%D~ zSig~&Cv@Vpl1+ZE%RO6yB?Vtfz?af=*IAg%PB(9Hwv^9O?V0XT^usdVK7`E)!Iq?1 zpsuOR7(R^Teo_eI z>1s{*MT%d4!EGi;qt2GjOmXW|d^}iZY{r?zj0#DZI7cHo-MM;}#b>(Z7vZC1oWZBI zCpYUT4xKxov@%blShnVNT^%u)eNg7BBTrMik6dU_@OpLSlVjL=V;w1hYO|eM^&?glwqspL%vX-I94L?*f!QS zN`CinqK2{m(_}M6VS;Bs_2^3^;oMSpYD-LB8$psY^eEG)*Rt2rb*KDM-EUj6#o>GN zd5rd+m1WAy+ISiva&tpMbV!$dc3-cG`^NpI`D-10pDB=cwkkussJXn)-GD8>*F67p zdt}7=L=p$R2c-`(#MCnQ!uhAAuNE)+-ZQJO{UmL3Ei;|7g%iEmtMqgtBl9&Og;*W< z;)g{Kx?*d8QnJ13#eSM|sNSSK8 zK`9+?!_m&$zfON)Gpnui4mX@?0Uj&z?~ue#JP*+_I6Mezh*;&-BC-?tRebWiN$z*%Lv%~4fkB(?T>)$Pm2 z%vT=m?hw5*R&)QZe1_V`u}}2-JMOO76H;kjUrsqJB~j&^6?~&6SU=C|r9Z13GXXosw@}gQ@y?VU{+ZB>bZ+l-#Qg#-(OeR7tngQJa*WLi*82c zW)-87f(A$Zvpi(4pgN7%Xub0d`L=ffk~Ch!%mRB*4V@QyOBHh8HLKn{Y8H&kxd+`R zj4FLsRs8#onj8HTgB;?PCj{+Xu1xx0Z@mN*DIkoFGQWdnlL` zQ~KHmUp#;K0pk)c9kYpMIpWQc2(Bd+o|8O~WV2)1I1=-#iEV z>dz1)Qx5*RH^ZwGQNF798@LY=la>7iD=dqSEf}7Rq+rEtO>3j$BpaV`jy`!@2B&Z(FYIoN1J%P z2({?{Zm^4%w|23kG`!X!eaGiFHr z`_1@Z=WePTVQEiUA7CJ zXf~ndNr_|^77@Lfw_=vMZF$OmeE3xV`Q<=2z#7Uv;y%NrZh#t9H{O--G zj87jN2)k)>9EJR=ChC{0+S`74i+-Vje#BNx3%CYVSeczud42uYVb6Uvzl#Wv>G^ka@ZMs8_bjnA_L3fC~i^g6DRvtu%F+T@<%2 z9N#EOx!~`v5R4f39Gshb^w6`RK77z&Wk$aYn}DHP1fP(H!=)NCHnui#tA$my0bhJa zq*2VdR$h8)CAa$YytB=kqhr)LnCNz89i=fcaY+0ipP9Oc&-5M2laKlJN#CCt%pR|W zrAq?Xe{em&*=@W-Q^2;Cw0KU zIxsV;&MRMdl=$}4Y)Wc@PIk)0>O8fZsq=FN*B`w6@FM;i+ielWtdd{(&K6m0Ec=VR zrj%t(2UFMRZJXF*QMbM}S!ceHNhuOOGB6%nxA8Qcldwyp9#P|e>ZC{0+jkXV)7-{v zdIj%y#Y|AWdfd{}U3ZICSSkEKY#PJJ#W&R!{%X9P4ska_lzDj#v5(}N2PL9d9;(g5 zt~rmiW2HJC&1PH=>4lQ%Z?HYP5yG>w?~b**GuLw6_~7n!)YFyqv*tYlS4Pes=1vmy zLGfmlduEFghU4wKE;4_K%hs>`@LkSPr_7H=^5lq}$#R&I%%{&Ty9QJL>@#S-4rem% zg>p|!6EnUtFU^TCvW~?dy`Fu>zf^ClXBxcmP?!7ZVOk!Jk=d7$t~c^R)W$QCOX(|; z5B9S1<}@Y{3etYsN_ZxoSa)fw<(V2@%i~toqqOjTEM(isJ&>0ZbUM^3qlPbV|89I> zvd$Z#>F2$sa$QM`5q{U?x$<4Fp!fUYhYqSZYiHernJwDqn zwyTZt=!;N)@9u1;-1rl+=e4dciAN>9O>|z>3}Ylb{?M4qanNV@tVFZmsPC*i1+RUp zP+fgy|C_}-!VJp02A4k_R1?W)a!m{J*WeMuZ8p|UW+YF@wH<5Fa(JbdJ!aF)9GkXR z_LZyHk==xQ+Q&u0_ZNPN%-h4%=#*4z)o{*E{fIXuHxxX~kiU6ShDQ3Xf3W&yQfAIBW`xD>|e|5w;`2WC|)`+K4WNGK+R66!}! zX!+V{QbPc#QZLdaK!6}gfP@kRK9wRRbnysMlrEyk#S0HXkfwAIK?J1t5+EQg6yI-m z&&hYrF20w4Ad}sh*_qkd+1cGWweFQ#_T8}aSE_0Ee#^Zuz4ppk!;XC4wO)g)$}LCr zYBl?2m1Q68-Vif6{KT)XVO zYi6wrOdXnkPE^a+SMM*Juh@hi0>?gRc45xrrHRWgUfgkCZQkj-GyU##AJXK=@yyAs zqlK;(mrFNdQ`-hWDd)@6DJ$YaO*O_E#kv{(3y;nB^ztsoT zIqlP{PCxYLw^xgW<_|4@|M0I>!<((TQ?}C75n+9OpJt!lK4!*}`%9j^>C1O(bL^T8 z6OTqqp2Ec!4{w^U%!U)IvwkVxJh|wKfe*gAF=%$`*i600XyZts*TZkrSn5(o?s;qA zrH+SwyuU;XOuH~?PyOEB!5wBCz16l)$z~OQ9nf;~(g_jsXEyk({+f1gw;#6q=cwL~ zYc_6HP9GCB_Qt86)5~qhTKL`@N1HU-kg;Xg=KDiVRbBI$ z_oqpv@`Y^eaC6rB@qHd=-P>_Dw0M^q13J(9_{0yn&vs@mM7pNy#Zp7=b_%qMEHT{s z(XTJA&KkDyjUf+yn!Ipu`6E}#&AK#W@1uHis*Knqr&N2pUXhAbf4{%?%&iuiU#(Gi z*u_`srAVC%&*5So>JWyFrad;R)e>0=w7vZ z^2jT7!rpE4@w~Tv{>G7~W~G19{NCoLeJ>q7x&GO%K+SeVZpJTc-}`8*YDJnp39VG1 z(!=HRHJVDF&b#*KgBC~68I=bVoPR9s?aBq}l^n64?ZB#I zBfdJ`xzW>K+kDjPucUR|9|ca0>^ODh*=h@1-hLnL4K4ruf-Od7$K2>yy@s}V^!me- zM}4tV!p6ntE*iZ5>@IJa^a}3b59W=@^8B6^a_&%#YqiI?=j1$@HZ_phZDso<)4u8B{*_%e zdS$_Cr@kJSQ&(R(Bmbk^9jQ6ve%ut*=*05AeJ6Kqnb4wkTyh|)ea&a@7kKYQ|GP@q z$T{^BU)*i}k=(G^v>6o&wAr_!;*-0^wyK*BCB-i|x%`VUlLywl@XENhZ~kXm!LYwB z6gn|$S&bfF4e>ThXuh_^_lZ>_^p6_cIejs5T+E&OM{|CybzV=c)b`)>v*9hbS_cB}B&ZSS=!Qu(t+_i7(6(!2JC z`~!chzrM}+n6vdq&6+T*{1@JWMSfr5X?9}Y{B3_%PJKKjy=?Z0?9jBE5y$s_*XVXkmwIVk z=KT1^nf0Ml24ywxJw0LZk`-+~?h~ljxR}}@P+;ya>%8kq5Bc)-{evUsR()e``Ja14 zJ?prvYS!@RKb98j{B66)J=>=3l~#87;rUJN>6mMSj(rz3F`?S^E*JX+=1GNi=Hwdn zBL=Oklr(4O;y)Hl`)T3O2A2vbx$cOk`|@Yz59=}S*8#a-hIXB|{NS^e{pTKNUvlxK zQimHAUr{-0(8Ht^6H5&ZJ-dEI!GrINC|y2~9M`@}?6nqW)3alj43BEJ|G>ZEa$20~ z@vnp3H(pLKVt2%qFT3M(R9WRn&e#11pX(i%{~&XH?(XF$haB3rxmJm;KejqNcF6wj z#~KgMS@2<4vxo~>cYoOT=<{ordv!axx2%>u=T^gSR!iMn)fW|?yY|qePdjfJxAS6h zn?(7`PV**DyZiLojNLF*NZ~eR1 z4-+c?IAz7IGOr}uyuGGg*U6VU*H}|-|Dxk_hm`B{?bN}eYmVQvVd}yWjiqj#D&Gp+ ze0phYweFKQPgq(awAIzMAHB14=A)_d#yvMihfCM<@2jZ3b@2AttHoE}iiy3tYGS9K zOOMIPo!(&J?8u2{u4mM^QMB%=T^({pJ+GVo^D^(x)w|X!vb(_-tOCQA z`jyC)p-Togo_^%m&VySnznZfn>cGyJzgvABy>)l3?(dw{-)}snW3z=-3%34!e(4+8 zUkvVFds?s2A1{9X?as6syRzpt4ahrt&;PK0PWMvxo8>+~_gTRaKaWhQnWS&&^X;Pk zUvzK#`EL)t>|JyDsnEV-*ST6ZT-Ctn-k{#QOFlnv@Yc;8*>yU+*W*r|@dvwQLl;KhSvEa#bI#@eMs)jn>C(Yd621B79$WVIwNVY*Cl9*v->6+NT{fMo*47tw z_OlKB7G4hAT=}o7%~m)1zMHo3y=Oi5eD~;=J@2mRwte=8-DZSO`)_LQW%ccYMc28F z_7@%@G&*qlo77XEC{>;ud$K%qz~az9n`Z9(^LbpWZA~})@mKtr0-fXYbxV0RVPcv6 z^(#&35~erq{KN1i&HAqC^60H2e;+#5?QX{%U7q}Vmm#H2YhU7Sp#>cSJ%0?}_U-9j z;|~sORI>Gj)QSTJT^xKN;nm-a?NPsXS+L$;s{0o`C$(C#N1dJ9Y{JYBqW1;HujwGQ z_%P|p>`CrI(f}dBedn49Xm8`Y5aN#clIW(l#UsR ztE8$?=2HXPoj=vR@v~LZ7d4GKiFo5t`hrwpe_^$3kW z$Xk-`*|>85_fWjvp*MdkUzAo#Hrf^O?9q5|Nva-Yy?DsGUF=i*hVQa8ki1V>d|8UE zYTo0wJ-RUO9|u`LfyunL8fA>~SEQPRm)2LL8d2uOWJhl!>x%S-YQ2YOncNpOPUsb6 z+<+yQEpeNd{=;rby4Xcw7vrPHoWlN+cugK=%)BZ^z3D{49$dKC6A2f4jx^wz5btAiB@uR4tPsd(;9^vYzIXe;0yosI zoejh$82WdPb?Yj1JT7%xSFZm7yE#Y`I~$4NlBB5SHbGmLxCyhSB>w@OIVy(EWPR>B zDXN(rn<-6#%@p0sv02yCO>C4^BmTNnD!}w_U04Sq>t6dmATq7NM8uf1$&lWd=VWNz zn|>jU|AbAe(U-^!_JtVTS1C8vTsZI0@i(gg6IF7L)K#f6AdF_W0L-zXEHdw ztcM4AOfm$eEOxxLf$yBmlQV`_a zRH|sb-80#A%q7P3oRr+?1dGk!w6WfI@NBXXnlCwmjQLgLe6ED2ws)m6jm=dsrg=tE zN^QKf^_YI00el3&94Q0%0bst+6_c2rp4>k*)+HNb!$Qg$at>mThyC#y^VU5nqExJl zmJ?|2ib=}IOi3G*)<3fr-pJxzqVYkFRJs@Ev+&A1|_Bs!0)O;nTQ5{6XqbVxe58AfqrR2QwV;Kxm3p_r)Fd% zr4x!~JQ0(U);9?a%t#;xb>NcHp(s-q^jD%J_Waew{$9%i4!z8g_6Un>m7J2CfygSx zB4@RVa66@fm%oH9qv2ne`&74d9_C?%NWJVyXdZ~F*uf0ZsU=dz9x+MgXRK~iwRA4p z*)sv?fkF17794vCOAP|R#JzKUQ5Qm4k zH4_3>*}7@{POM*3C>Lc25ypj=w4Qa&rQ(IX#3)!#CANogHXY9`ujfhyDf)LvDFQEhU}&`>dS;=L1tEHN3>6YL zgLj76M<$Ks0VypXF$KJ4CjyTkM9hXBDsbc6Fa)RYocSpiJxJ99R!_tllMf`k>}jFZ z72{^5H1gVD+&=a!&}@SyjxT3~DuWm1uy?w&+1o;N z?ERV@NX_17w9l2QmoS}15IeDMkJlLdR4P@D7`Oc|4#N5;FQl?%seQ9`)ZUiZxYuL6 z_7s&Kyt?7Wzj$U%kVZKMW7@0HAOIy6d?7`YB{qgCUvv)=B<>|V;}P9~r&9G=bp5wc zBSwp_OYvPm2p?r4M5D31*oWeU_1g9-e%(uDh%ZPPGoisUWInP-fOaZmPNJU0>St1H z3DYCz35VFI2Wv1P7D;W?{-++sv{le0#uw?qK!ni|3-z$F0ycs^;(D+~4S9}5){G^B zSjp&gH)`AgamG`rSb1XjL4oBk`1%TPNIWWC5YP%#tCK_2{GPRueDGd2LE3ok-HaYmN!%^Rm5y7i(ui}be?Thj8w z!M}o@7Zq0s@$v+%jkv}UC$U>uRHsJ|VGtm~5+gPQGLZo)ct1ENgQ=4=EN(*hGLu@ykGB!>`90 z(hcB81Q$^nW?;F~JgF#zb0nP_N+Gc&&E!k4zd~3?jPZdKQVdm42!+=jb5ilg8gCH- zWIp0~I+|OncaQ{n2s2K>toK>#X|O4D4}R)^vRUIPCVf~+O5)H=jKvIM(=$^u5=X)sEWb#9 zC!w9jtgHy36T_MT+`};LqCimgt04&0h}c<@BiI5xS&1*KG*&O-0`evoBLEP22TgKX zRx_x{lgB%2MH~W4$>qrh@uZ2i5RFC5U;IX$9H|oH3$pW=$tSBVaUNDMZT5iZStZLL z2Xt~-md`jKW|^n=%=A8KgCRT??Y)F0sb^|6{RCaGG~fm{0k)`}?4VwXXP?$~2}J4+_cFc^^8%n0061IXZcE?GI?dyZ!oi&Az_hcyz4$1 zNp^GiJZ`y^X}t+<4CdC_&x&vWvB|Tk5Wl&i`gNT;)gsQtP&HB?Nu>)jdC08xg3CCZ zFQgh>zTMQXSo*R@C$giytkqv($~*WNrxAMoka%MT^ihgte=W8fV+)(^l37g*qhKxq zg)?Cx#Vc7EMr^G%W6|#1#B0qf$gS1X7qv zG8j&nkCwvVU~buMoGTnsEdc9v{>iHohiiu+Swpk+b{NR(#4znJv~%+U2TUeml)atX zEvsY!BtL$T0`4BD#QxqyQ=+`z^HF|!`)ZT9_-qM@|Tdr_38MT!BJ%LQaGz>c^Xt2i5jO z7(IF6`jT%y^Z1d{cn5sM+LW|yrGgJ9M;Tmang?*g^p_Z>j_+X$ zeSM+<>$H?t5Fe4hN5>M+ch)gv4u;QM3x0zm}FH(D^y#?1dl%uzRc|HL72SK06FOW=~6CpB;ya8ha zLn1 ziotc(g%ANr48hNPWw$WxPyim5!QqqXSs0}eu+}KthcJV;Jcon`ir$8BGNY)1tHv%{ zSj3QdCdWTqUsQ{C!UAr@A%gWofMN`T)y}Cqs1B>AU<-;Ycs-A)B8p->#}xiCw}?#$5;vrh14NG_2&hmLlD3GUnH)&$!EjBI?U{PX5J@>0SS z158-UQK4E`OvsLiw{*;GA!>rP*#;M2+an)BL!mQ76YK-gr=Sve3PB}^qlFm4 z7x2;QhfWdt=q)1-Ci9YklhOoz`rxDlbt(wrc{L%rChds)gW^YEA&eO7kl0xj7AK5N zh#>$Y2?Xar5XjnQ1e<@j>?6!~EJHRunQDUX;SJNLAfn`nsG6{DpiZ!ePXm2nbecOa z{I|R#b}Zyj#W@lU2igKm3_uXUiT0uCj7D?2_%&Kg*hxfp3sDXbl6xnPc77aEm&10# zjdTb1ClrAeJT|J3@@pRUZ;G%0V^1ecDnGVryubmYi>Qm=J2B?4~{7X6A%yo`PROEm9#wzzQY!CBTSZaxw_#XR}%QM^pk8T#Mfa`hsSN zH{}t+G4T@v)iTA=0Vpuz^NP|!8CYtHpr1FJQJPZ}zh4!_kMtt%`#_f$KirKj+5&c) z_W48QkIJ*cYK!WhLez$$w4%W&7#=Szg_bpSszjmrJ`N@a#1UhoE2uOuhR@R2g7NY&=(6VU_`?~6VqvVcdj!nlFP${g+Ru(LeRACNDdGjaA*p-2Sk1d zU20*-&e5wQ7LfiGFkzxWSHehSd^p%{v!t_(d=c-KWRG*JOxt+^Vsb#nUY^$=U?j&* ze)6P+2-`jq`bWTo)eE{8f(Jy?Y{9V4a2fZp1R{P~SKmn(^?dm`fGs+|Dq)N07S?~H zA{}mt%3sE$;%!@2Xn}i~M@ z;22b}t*{v!QxnRJGYQ%f2D0WBjZ1%talvm2;@5T2;B;MZ#0cG-j+n?FK!;8Uiwd$F zyb)p~!ibSV5MnoY6d@n4cZAZ0rJNdfOjD1Oh2q)9|>tE zM4Sq!I1wTq!bkBq82Zu=A947wt>6*{=!{&2Fgh{AuHeL$lMMQj&sz{0dEy6QF{!K| z5nx5SR>Ag3i0U4JZR;Z~5L;zSLYEIJx&?>R%lZil`oa!Q6E z>An5c?;AK^(>jQqaUB6-5)zY!$>GLdsmx={G8zgt3-z z7L0=uU9fZ&w#v6tF?Vn;qPL@<;%=4_(v;_#uI?xRE#l;m~S_r{K z!Z?$%Ns#Ivdtxz^Qt@O&AdDA9w$4;HD!v~i5QYFnm{$l|RewN8aU)f%3X2X7aD`wL zI|sqtsxtj&Kep~! zV(ZM>AyN`X2Rjy+e#zN`rUu-C*F_dzNX==ORss%QelOGiJF+q&C@7 zf$`@#HBA?fU^L_bgpugttr!jAKQC$>VJfdq9V?u@9hEexFKT=N1~Z>)haCaW4B`+Zbh&moyyX27iEB() za7TuiR22y09FSkBv6KnvT)=$%6a$Q2S0hGhsTeRWtp@o6_>z1XzV*XdI+TPUk{=yD z5X4Imo`T=Gp)WSNLSM}n5Q)H&_=e;*jR2z`uyT$LYmeAY6$gStHj{3}plGlq6Gn%$ zfNZ#8Ln@ZQyPcOHQjGW_Aw?Ui9{x@Po{tGzRlsl$haU${1vKLie@N8;Kbw(6#(t7- zkCO$?6QG?CLIFna9XjQMg-=kHrka^PyD1`NED}NR#xtY4`5d&zt7BOb+Tra%5SB4C zF?mqZ(6G97U2z?fM0bWq`vF_Z_Ye1h87HtW_=xD8^CP z>dNZLXdij=nB-(kgpyyZ9lstOAj`1o(%6n(8ohq&keY`73U|v`H}})KPTOMgDtgu@ zMaosw&jn8slonH3rBJHn{Bic|hcE6uEH0t_V)r4My%(ukSJv)MvXzRka_W~hMew=2K z(DP*{Lr#^Do$=lI#AmWGBNwd1vlJYh_o)rJ?G^DkUsX^$ddulyY6tgG-r`*r#Yx9= z?k1@(l2{6~Sfg!%!bHpNCBDFArpMW&h1*$)3$u0Xd-06>+P8sYnOY^OpfZZ*VdwCh zi{FB4a@JkMuFSRa>Eziw+$*Rgy~Y$)hgx;dihCo-I?_r7i{^4wNKr~boXV=IC^P}9 zh*!g-aH`6R7!}x+>I|1M8jC{Xaf+%~3<`(GDypgwU^gmZn3vj6_m^l3b}!6={+3vdx|D69%j5r^Iww2#J% z3#Y6G5Gn(NYA7sD70`hJABw^qxFm9A!KhS5*;> z$D=Sfj3R-cinLPVFz`EiPfnaN4v?${<_bPW6BLyZtirG#gEycEun5csivc63s(~pJ z;21^`n2ym4&;wY6BPgPOa~Gqm3fkfTEr0_6n<~OytO}rIgFUKDInle1aq?> z{mYoBh}posU3uI>x0u&rb+_L^TiZ=b^?%OZ*>Y$bx2A_^hVYq=M@k*3J$J2pv>TmC z7s96XTN)lWVt3RfCMCSv=3W^mTgPx>(NW_hg*RT@htb2I^cV|qz_TMLF2Fuzlr^K0 zwa3wbv2a4laM}<*yo*|m zj{rmirv_FM2YO&tQ3O0*5v@$-ftU(f2BoFN2>v|$-2)CDX2jtDLIlvzU{uma?Zd%3 z_oW~loF>2rHx==~0j!dwGERuAqKNeeEzHQv44<^-;l`=`MWzZ|hL?a*vK*Xv7x<|5J9MBPt=q5U+Xai{JU`V?MP znW~SXi129g7wc|Gp_if5i({=x%@vTkpAp+`|HhrscTb`wZNKTGhUdj{lDJ?6@nn*G z%J-}G@g+N*l=Z*kTc(4xu^FcpOp zozj#3#1Em`u{pN*KwTfRqpu6ClPw=*%cp&r#`Em78LrU{&Gh_Qe`=fbfEB&Z0pXgW z&lXam+ZwBl7}#fuehPR;oLBo8b;0^5Zq4Oup-cALgd_KcS9w-ah94)wsG712$5svl z1DlKOiw63i1krEV_aVY^^jNTmo8ND-fgJ=`VTI>B++ag*kykwSUqK-Jxw3d1SrAnC zSYU-VCODv!0d|d$fbbgvHYUJD3;Uop1PuR|fZ;a5zofs7c~lmaZW+jSyDXuHxu zwwPk#Rz>#eA4pV{5hP+8%k{5XQQg9JRWveTPQbuFRs&R{36ii74sbJq3G8;k-}paL z0hRNN@QoTGkeREBEYY8cVKho|hss}wRkvUukU9NBg99!@iNj|#*ujWE?ZAqf8~}Q) zAqjhuA$m0EcOsxMX}K^6(w4k zB-#z}BCEuU28MA9x6sPub=nXH*xO8q3Jt96jI}fzV9QJk5FGMmYb+5}}m||4JYnVIvGW&H(9a zvf%^}vTOI)Z~(~FMhadg*JT3;Z_5E|H%W1$f%)D-iwewQE6urOHPFf`u#v4a%xuoQ zDMW&QY*>UWuzArK;0~ZSw(liJGWm2BE4DwW;9wR`_%06{FB<*#6oB^x>>3>!Lmm=- z=7>xp%~cv^b3#Zjb(Dm6J0a57 z0aR~MnMn1^gVO)*39^(t_XJX-MNfrC1i?s}Sh?2}?jtZa3_FbMex<)ZU2Gxq*?ekM z-@OjP}V8>$cUd&SQHcyr=KH`g&s|{_T{BN}upJ zKKPqm5AoVMb&&T;M>{kVT|iKNzUK=Jne`A=ov^3$>- zqhEN0E?((Z)cn9>>VNu2NS*hC;Ps!6a!&Zw*xvM7RhCOM-9cwnYZtc9Nhk<*&keP& zu#`lnypHlv%~`FCwMiMdF#clZYv3e}`Pj)R&-RQb#2nh)JM8XTjMMs8-*N7BJNZE2 zy+GE3q=K;fuS60Z1#_&qxJnc~4;u*0F;jdYmVN4a;o`Due>aCTbKezZ%Q?N7N*S({ zGkdU@7U=W9FJG-~!nZ|lRMG3VyG?Sr9V2P&v!{<5CQLoh@!CDWt7?DUoKtKv0gqWb zWmdtUH*8I8sKNcLeKDh)%DA35_41N{i(#ykVY}yZKU?$sTl$#zx0zB6iaF13=_WF( zbKj?tn%wTY_dV}8XT6PY{E*NQ(SFXR+8t9I#S_NNEr~(GDlV$tn;E9c)a)Cw zRbLq054-7Pp-X$ET`{zqUwZA3cwBE$Kr~a8T(2_;lWoe7&mg7iclosB&$hU|?>ip0 z`WVs(8o!JpW~Tj87C8Go>D{R-D9z)%7Hm;YQ{&n^sdmw~LJH{`=*NnZi{}n&*NvX% zld=EC5^=Rm=e7NdrB*dA%ECs=5chwce`M7VTEoruMjG+OPIh zcI^1kg0_hH*yXrPU$^~>`X_5&qu8Kt`}q!WR*kZLX?Wu+%ca9Nl5OrVEZw!(ZfQCG zg05-Ys%wt;`8sz0u-|vt5A9W!W-HCRpq;e=hSrp4(5DU;w%HB{9Zp+~*_ zu1_@|tNY;fPqI(^KQoNjMejDbJqlT9X4iSj#u2vlzItXDA($7luq`RfP6xZa?>&dS zdfiK#p3+e2J5L#!$FqED>Iz+TEamB>4Mp{M>Lv%Nors;Ph1r8 z^>13{_+C=!#idN!8iN(>)$gR*< zT&!)X`ZPyr&Hi|dImV2slbCwmnelv)#`*6T#~#QOuz!gC^eBa{I+o6aCdG_fT&8oc z0j)8%XL)Y6r|~egh!-5>$3=-nJY!LA++UtCh#Uad_#Zo_=p_uCXv8%*=EVsh9seDi zTRdhEA0Yb)C0?AoWS=`|%`QEx7uEuC;6&VoV1 zqPAS{K5x#yTCoI0JRWJ4#BH@~AXY+lAU4rqKmY{~&%oT$xGlaWpm9rAEJjfUoH3f+ zxPTvz9H{??uLvvnvoe@@__GjVnNvRtS>X%E(O*lUX`b`YA8K#7vin#nOY4yW6+BpcKn;)_} zD@nxbi@fi>nK>l#V@AZJ z#vPj8sOwp%@ME;MVzfdMc?C_H1*|?WtJ~hcMx1+)64m$SM^Tik{P?{Hxs=1k;?e2G zPGyYn^ojMMDxa64^rv+_`D?y>$@EO>_IbR$VNZwMf!*c)UP8?R4ysc>9-wcHpRYN) z)3;D@nYl>)-cFNz$xOaXk>UU=7LP~?rab~mFDr(U6nEFj+f-hVdD^18T}R6~s^Pxg zjQ$e}qSG~$WoPTLpi}gx@-9=!DxPZ=@LHZ8>Xa#UN&X>kZRKU#sTMa@7i-O%B%l9$ zj*%|>3MJ`_>$hy`tK&n*n#`Mao?v<_Vm-ozACn@gFJ0&Pac$s?bQvLX{YhfATj<;* z(MckD$DVphO(oQ1`Bk+PA2~MT$zT0H()QWy$+jn|e4M#rHE_6dN0vyYE31}JF}5<6 zW<_19Pg#B<{@oMG=ti2;U-w01l_%e28Fa1!eOUTwWZCUd^zOLAB3AeJ#+E+_@ zI(`c=?>?7jWCuWxa#HY<@{+lKCJw+zzi3C!zyArAS7>apC*`KFg@ zL=kUVL<~JcfBA-c>BEXvzC*L@nXW+(){?HBh_9=Nbho;ebKY^uz6F*#UwJsm0+o>N zdrX^#pOIw9d5+UtTXf)ze$zSSUBmpPt7X-f2euFL+gsR>?C!OV6-dXpI8wV0jJ=N! zr&J!cbzhpp5(Q^0N-xG{^T7rF5z0doq9cd<23emHW5Zn=?ZCs{|~l@T4qgGcnupQjg`+8?fe zn*Vl6&>7KE@BKOW$WbnEuGmxyc#NtdK@|h9`|ptZs|^iet|}@h|Kq;C&i@I%p#chT z^#0=@P#>^y5TFE6%b;pmVzRAyK#nqd{jkGN`m;4_51Y!Y;9GWmyBVxm{n)7MYWqtErPKJihQ z3^^{pv@g`Tdtt%m`R=O^Ng-Z^jz$nCfAjTJw z?@@wzX1mKuk+os7+>q0e-uJ7rr<<3%19 zhp_B%yInW@faD|ZeW~m0?`b=A`j{|1VZOE$f_;Xztq)Qsh(lfjw;XsrWj&UM>Bd`H z-S5*8LaT^1;d>1d8#+@Cto2+vn07ew0f&OjH-W|VsF<7VI&#@p^quJ)_=pgdQ>4wt zWnb@&N<`#D50^{=1P0 zh~@w9bYLA>X}BYW3m;2SX;Nm^1!>a z%sv(`>uRHBc75?b_=wC06*V~KoEYcd&Kq2cmy$&P4$1u+^FxE1r$3nhMnGhMDPd!d zpqR!a#*N+@97KbLV<)7zwnhh$`VypmYfuW*k0AA1V-uiWEKCYM7mKX+zriY>B=R&# zaze;e&v`V{LuK|ei)#sjaQ;lN-?j=~+rSIjbU|e|vzraG-wg(cS_Lj^od``i8%TFr zFD9#4fe>MUx~_cqdVP$(!ZyrnZ_d4PcUfPyY0(}?|4`1Kar4y&I#PS<t3 zs$X&QClFNdKG+2aVJ+MT2gUNkB^Sit+u(QPf++k2{Gu-IfJIL6!xt}Nx5S>U^5x+9 zi`;P4DOKuuv$h0y_LMBKp?cxu)WBtnL6zIJQ-g;`8Jd&hrVf8z>gQ+B9puWLKBSZ+ zzIgG6{l&#Jzup^8@*eWtZlaOzm=&xC^2d)#%{W>uvIKLjo}7(z{Kk|o;37}u(S6wA z*uCmU3VNh~IL`Mio*|T+uk1B%M%W6njd0cuztBCL@#?(UrC(xqC54DxzAsO%c`bA- zRkqAO-#H|Ce&+e;>#F~M1B#W>p(pQ!?OMEJ?Q z1A{xAO&)phwaLqo6+3#&@d@ySq#l&irhX>t+iUaMf6Sp~ z^nxYoZGqusMqc(}x3HEL0p2sO^kT)9+`lkgk>^XJ&DlosrO| zQ=v=m#e}KjkOB7reX;OnqUQL8Lj~rQ zbu?~%;_oH3ud#nh8e~>#ve;&EmV=F2req>5h7pxHZ3rbyhBBRK+>WV`+%9`!8~1DN zXYfkKNJ{TYq+N8{LZkL7rryVVsLEkakvrNT?0cG1q}P+LNY6h(=`2ioVQk*DWd zv>$$ImHZ`6xu9or#Wn{e*Gtrx9MC)&T|6C0c%n3a`cn*JnSHpaL>Tw!53;8!h)0&| zYB{}vguQtLzPEO0zmU#3`yBJYtugdG|GUt8XT@8pB=rx4F$y#k9QK>>_o3VV^TXge z`sRMoJ}INbLw5EPF-gZPgPu>k#rqzimx^)7r%7$tFP~@T6~^ZFc%i_hi8vn0D&2HX zUHu@N;27OK^&`P!?8o)wpT;Yc+)-Ss*fXruMtSi&W6?@>y>7XQ);_e~WE`O}BS$8O zyP)&5?XMMQUAHXTQufsf7xNF$A(bipLU~P_(b01(3bC=2j~n$WTlf3C`}%lQ+#~+B z@QOISg<$hRtBe{Gu8~VMANQ6KOLlQd@TdgZgqAw)IO_JOFsQquFHqqfUTu}N(zJ>H zS3r?e86W?nN3I$(CZRY+)5_eR)Ecu4_6GI+B;#zZuH=4a{}l`YYA-MN@Gz;l*OS6h zj_L4MQ|b)Ot5yCYsH=g}C)OTz?G4=i=1Bj}d78YnegbcBpF_sI?PmOEV~9>1p@(B3eRnc*6*$KWs#b#$i z=zCPj82Q1w;Jj*5=%H&ePtyE8_%J7Ti$~sw>t0klZcbuxsGYp@dcrjA>*JtgpC8fV zQn&WRMF#dY-HKjH44*0ZczPmo?IG$itKZP<*MnGwywhkieQxdd{rS&J6MOM0+twlp zf-GEzB~J*fcpX~ZVO{t&ny-96CJv^Q_ht`zc!VnsZ~AV;<>^S`u4T+Gsd>N8ncPqc zyc(}BpF(9|AUCMu9JKA;gwJOe8}>OhJ^p5@?I%n{#e|K|P3b)EDOu?nST}h5zyPFy zaKqTl1E}9lla9ZCz_FvKeJCVP0f{VN&}3zgg7;k92ImYZ!@CnAsX!&T(BBD1eWZsO z6GP$r%>D2{B0nsY&kB!ba>IN{{8UK7!-q@}*eZ!1_RiX=hPrrb7jPvN$cX?QMLc?}1-TSrNN-BMB-HxCI&!fD!xSFUhSf(we7TrBc~+_B;EI1%vd1xeU{18fFh(FV8zz|VQ)PjDBd;G!b3 zlYjyJ{Vz(w1G%j5Wr2UL1mXT0tjH|rD(EwqDVgeSJqS=)r}#NDA4#4Bz=}))-0*Cj z1O}M|-S0`jOohT^QsW9aA#jyKkfg+5{*&q;0bxkd>JSecm8C#*4Cp7YM=h4V-f_m$ zNBAmhV~gS28-Bg03=UlDDfu_Gl*im8dJdp=HR!QkclN8RauE+!#jbu^7XMbP`R!NK zll~QqraG}yH^s;{kmtnc|Eqiz^-@wtz|F~A3?=X{L zZ%|@wo!|1i;exj{N|*eFUiJk=^Yvb3)4>dzEPj3PjMkaIzmb9`$3$4{^?^qc`_nMk zz`fcJ-t}jv#w_2~W}N*%qVPyO+snrg);7kP7yU*sHMr^M*+N!4(O-D=^hoiOWKzYk6@kacu9rJJ3@3gS#{85C=N{NoqEc-9Snt%f z8_*@1mkMJ&-ycUsXQb(9zfFE}xW(5>fo~6cbDp@7=yj<$UkNv%ZaROjKSjW@sfr^rG> z9QQds3(f2*>U)j&HGkCm7`)EJ7l>Uf2 z6W78iMXPK(xh?$W!}hMixs)2GSvq<~zqY9t`xk902}&A9(q$dpG)iu&`cjn6#8dHF3|U_)n;bp7N$y zz5RPCJHnPOqamz0W2iG$p=rj(>?FT+kvGK`54~jx&Jn4hJPgmX%ndi>^P|L=1NCvhQI%0`Jy0>;DP(#Ah--nyNaTkP$x1D|C zyMOMHiDgXU=*ak3FD7m@JTSQ9Na*)E2Z1L6`Wb#Thc5AD8&KSSeC`OZxP-&$s5TYF zFdIj9;X4H@@9v+Gsk+1QL8LBLMZRaJ!Dmn`!~-4q!Rw6??I9ra$o?gA zD>(p!Ok9x+A@(V+60v_s4oEKe0B58O}6(?*6e&fM!bdfZYefRqyja+R* zm<*6118Bv9BpV~S3X_}8)XcU7N19g&>lEczo^B)4ivJI-TaqC+0LebykTih*QWc2k zY?WY8-&KWV-2A>pL6!i>*G8IBU^NC}92Io%NDpZ33Z)}+UgbZWSNU5?RLGqFUz=xZ z00sk6V8J~93cw)sNb1r^Gm;qdub=Yl`R_aq-Uo%$%+d{k%l8^q_&zZ6d?7O!WcVTs z2C?9+j*1G%?2w|}*v+uQ3nZ}v;qTEGoaDrg_2)?L1|qa~UT^^@+eQNZMuv2nKqO>K zlnjI5@si}mYz?&_4J%%fa6%h7GKCbUnxtUQP7X={$}~&Cc^lv%0G@mN#}0+h53!Q! zIYG{>HVTr1WgfB;pNu)9pKM&KV8nmOIR`_cODf%b1-8Gyv5bXG6;(dY;18=Rr2B*^>2th zC?c}d)A^??d4FO>l3pt=KlY$unu^~u%(o7GoSr^LmT)y#^tl)hNGRVbNNVH+Oi9cJ z%KsV$wJq^7j2eziM%2It8K4N_bDX#>;WmsK%<)1RUiiofP85h;Q2K;G*;gdFu*zG) zxS((23!wAKN1Ok|LqYx03n{p|A4&a`{41a&ON9jq$~szH6?ttcbiBi-iUYhrsEXTF zc=q4iQ@HUHFOq%C3;J%IHC7q(2cyrA3PV^B1(Ss7$GG6~PAOOy{7!UA0YsQBI*|a& zj&H<4r7$ZbT(2OAHzFt^7$<=UV;bfAA5D-4HqK-(rs?i@gk%>|_Cp{qJIvojPmOf3F*{ zSTs4N@N?=Y7j`Ra01`5fv0Hfw8fvD&47Yd~SWsVbLXuQB0FecGGc^><3S4T=qhKNx zEu1$)Pl*F}KXcr0!;B2_-a}_z6lR=dp~T_HwFHwabb|p>E^ak0>=n+XvFrX^1vD)*>;D69O53Do~Zf>xkvnc#@ zo|O_Lfg>mr=eLpXSHKWB%pWv?_bo_=nR#(akj9PBZOOsqr#Glpniij^FP>0Sda zb~tr$k@SfRtjVRH9h7Q-{aW1c>7`|m-i)~FaQgBj$(tYAh%b@8iUY5paix*;P5|N| z6+3}a!|DoYX&b~-@$#1}MB)_!ekb!f8$_bq4slm1L0S;05q76`lPD7b;t zaxB>qKn4J5;h^-}83iR|JXPX`ss=>_*KeN&l(68j+3#y9P{JWk&;IEN-nDHeor5-2 zP}-yf4c?p~54_06(hUt_ojCA%X|sepVEb*tKpS`l2i}-@Z#E(*ejj{6BZA@|VgM^~ z8(~vq7HAbv`iB^h#f<|){T>AaP;3S_-H@AG?C-lZEiIC;GLUiRb$Jr+Hs}*+P8kRa ziy%Y~k*d)^P-KOm_asUzfOxku$2yt(0-UHgu2r1JEw17DR3Oe>dJmh_P zMHiYS$v6Wx73x7u5Xs;G=+ml?D2#9yh^NXB+3Igx0Wz?U<*J>HAbE%+b`Xqvc{el# z5lCn;0OuP+&p`GKDM%XPswSF1J0M^M-i&jRs!X9e&%%Ncb zgNy>M>Xm8vgWKvED)T;V14S^||5&;lBKbs>i8_g0WFL?X3<@9Av- za+M9_%(h@XLwg`_^3q};QQ1MifSw1)tGVp~@t_yL&Q)#T0I5QxAu2Gv^u37g)S&@{ zH#-7>eeiJ;HPFD45O~WIC=G#S+Xv}DB)ZR_@uW0Bzsnh-MH+z~2W&h5i68|qeXi>B zE|4BXsrq~V-&}#_1y{+){D=2J^3?|qLc9(&x>*0` zG=ftlR3CMRRskxNYM}deQWF2MK*(D}H)I==9XLc$ffQ04*yS608i#D@O~n9WKsd~% z3IVSf!DHFYZa_zD2F~0-S|^Si7$c7chTc4ayMeciI2B|xBGLp>w{X876@dak1Rh0g zUfm{Gs$=M6!0>Dc46OjT?>bMO*94P=i zSoEge1u7l~wAKbz0zd?w2mdYr9f;jjtOS5)(<5{v07PV$jyyJkXpjE^lB}0a!O9ZEoP18E*5DsvF=Tj{Ja>JT|~e zK01;M04v!mM+$(2IC5Goxd3KIPMjqd5ImbC5CPk88>w^1M*!<)Ql1+SG2CVV%?(Hw zcrE>#I3P1Pa-@tr9KgEyBGC<~c^rO|3&2w1HqRh#z+~dcM+xK`U@~zV_eMmdgp9o@ zK*-Z;{HB~CrV_XLED_i^FyLmGY{NE!Mcm*Q**22%mXPt$z}n%!DsHv`1muLJjW$3% zVbdBC$)*x4>+i0JsRZk~Sway0Lkwan$x$-$Fu?o3Z9YHTu#{kJH@^d{+l+v1SW0q; zYvVgGL2_mhxrD<2gkZ6Me~1{)%}0e~!-=#bZU6CKRMo2Y`U2OBQcbxU_JhTo0|T`&h7W=m zSYw9LhlKmN`tddD&6+j)P)~Q<#~$?>P-*o1o)St~^xDZOw0$ zi-JLdCGQ?~I=-f( z_IAdj#OY&YgriGvpTO({ZIk?!9XiTP?{`W3TF`u?5#ij1vh<2(>VEXqLh-0F1vN1! zSRcK-VQT)$Xvh zdX^Qz1s5Td;!9U`Qvz;J$#4#@;;Z|`C`;UrU8lt8Do;bIYHMzE_jj%qzG9h}uhwBE zddAIUofe>{t(>EdZp!eUc&cU>!OorQCKAN5-G(-k7uq6>aGAm!)! za_%~hQ*YPHJw0t}VH9g+t`x5Xp9tj9|ExH)*0>iN5r27jo&8s7%+4XA^6C}sFZE*#ZfYgAO`o-b{?@^$IOCFcXC2KIY$mRzbw2c^5bx}0&E+jGzTGTLsU z{F=CZ%{4ypkp{(qJ2?UOp*#IT0aru>=~SYxoE;n{K3(LCpS$8Ef#s8mr)wIz@6GzM z@%nn};w$(~W7BRO1=qY?N3VW7NK2!c@{ULpSgTRke>o?Y=hsT_71Om>bAzIEr!<>* zz2_>FnVQ)M&wOMQ2jk1b&q}a7*s019acVo`ZTwvDs+{X&)U*5}tJiNVx}54cY)B(4 zsOj}%yKvQ)tg01t`pJ<#uI5&kr;$Yh>PG`JMzaSo0d(bpd<`aQug}fz%(CBa@Rlyv zn+Wm)Zr>E->u=2C_xlzS9v1v)#9}hzbBe{$$>`A|X|_CiuVbC5&aNngu19~L``(U^ zT-0_6uvifY9_AG|>d7oyoF|YL@KDRHF0t@theu`0DfJ^~w4V$QamXf?tnv9)yZF3T z_fD;9d8#jSCnY)k%zcMP3S+z{3nfB!FMhdCG?bA|-v4=eOzR%&-A-l-0?T+m{;{!% z(cFnBzO0IB>W1qk_2>9*mSHN`ZstpTjuh=s;6A=Xn6}(eK=0lxYeKMYMD~~b_N2wi z(QhUnZ+xgXk_y$UeEYUIRY&T6z$|7pc=pAbmCW1)KFYJ6Hj2PW>?|F0623Hed8fBi=AGcn` z+bdo(xo%GPxaR(zbc+&G4+|%^KuV@?SED9%c1+&2r|b4d&D;iCc2E)XqS*aXti!mW zUwxhYK@+LNb@z^t@`eOkGtu8e_zSx3uYuE35p7D*X zkDjKLc_sM}*V8`}CL9~>LBC?$ooBH7O@>1QTHe=+?V89++4C3KJB9MTKe+ZNfQ2Kx zfLW#Zmn??jfUdtH*1OWH*2=co=<3T`C#$D*q#B>^4|%N|Fy`>7`k>BkbUM__>6bjs z(k~oNMDc=)%&7&ghyzvTHNSM+;ZM~JLzD@*yM4TfT<7~W?yJ_~Zl3s7*PD#N2;9E}xrew5OGN-5#2#+i0XkNw-_b03F)e}B|+abZU5fzoO` z-!aLm$$5j-UsoA~{F;*M1jd6Z)9*~j%UWvk?T#is6PCxjnh>&HIqFkNOec!QEgF7d zmhdymniTt3*XW0GIHH#;--l6RG4J_#VL^6!A=u;CY^&&?cT8m!P435_nZO4BnG;vv zWK43MId$pC*K5rwsX+zC4DYU~TwT~-Uhw0LbsB6baQ=Hj+MWv|?Sn3plFmm)vgsVr zPAzP8cZqMF9k-D9DHEaP!4l54WO?RY@(+Sic%D0@*LDH*!7J`O<$Q-n?oYz>PoVZ4_fJ^uyg!gleb#n#rfvVPCHM@-O~P3k7pCKQmruZ z%{PxL23c2?*FCGj_Oo5%=1C}|zwdxZDm-4yu z%4(UP_3WbJ#+`Di)VDb@#`t5eT9N_Gec)HDUVTnVPoILi)0Y^7+9&Ym({`OSF1h8D zlwZ6qsnil<7`f_YM=z-Am%UJ|s2fu{zDe2!uA2FzRuG?UlY0aoisa5eEY+Hq`E9v) zjdzWPu}J`HTKoYwt>5D_yPEe&v)`>XeCATm#jNigx+CZ4FElZztGqJIr81&PQ@b=n zH&mZ{jEZGNdq<=FRnJN7*W=cGB^6gW!e8y1{BpFfD_P;z$FkY`SKe{vU9~dW&SNik zd`+Q1(ERX~I-;oGnFd)mBTcFVk)Gpssebr^l1A5d8+=HU(%z@8`SnDX<3Ml-dY_W&lu8LURI))-nag5pua&zSiX1=DbR_vz67(aq`CC z>-W)P>I3L}qxUnOnC+-oWF6Z*lCHX%aQTf_ztxnWOzhl|%a*SOPgh&)a=!!lCz+qD zrtkEQUlh5J5^qws9Fk50LLBO1 zV((kp5{;}S?+6o_`AVr9y&|pT?Tow<)x%yDX;BE#REd^c$e3mGjGlkHt;d~lQ?NcTpX_h@&%t-A9UN zS<*Mj_*aEV{UyfIA8R^XR11V0m)FO?+crZPE{U!}?{9A>D)9Z5T#nGQ z+u0`mqvq=C9+qlNyit@wHr1=Cvkw%_h@sx6^)oo+e7Xic_pe;yPYu|;?MzRYbIJ4m z>?`xejZS(RU3tWXgFI_Aop&GHzI@T$%Pvi)wVcYyJ<{~rKRAZd<-F9&m+Ki)7*oIPm2Nb;dLz*YaIHbSM>jM&SLJ8++&!1Bc97B<~T z$sNl-*SuL2#h4x?NEYVhCrTDo(1j}BaQsQ!?|HN8W`F)L(MRgec%T_yk5ZG8K;9d4%@b*m&P$ zlwGtHTHg|VU(g0G4j&{8+ew{!zwP=3Z67oB zOSpHkE)CbNiqn3OWaoL%iLuUaHG6R0>696}KZ}S)il!cL7pX8Y=wa`t~e>yyHKmtH;T8m9WOpr1MM#ifbBasw)?)>ERm59vH z*j;|^Xpqpjiv6y-)M-EaXre(O8na@{RKhd$stG@v5KmEW5v5Rjw5$I8^UkQ}#a|2V zTxS~Z-#vk%!3YGaxX7GTcE}I$_sAcJ5cO%F43W*5YEYh0$J3MztD2tb6u%aKvyKt( zl!91y9?aMCb35xV!E9Ng=(s##%GaH7 zf>Ahit(8xA;TS#Kjs?l!Lp|duSIw0FsEzOf&knwy5-8xD;yyw~Q?N?j|=N8`C z7ag(I&4wnE-0=nHox=|;aT1?YOE+FAbS6kX{Fy!wRyxcb^it}pYG@neOow2f-tW%okm4^K%V)9^vh$C5iG#};>>jRa{Tw5H2Hs=ErE zlzty&^6=Ih>-W1`BX5U&Hc2ceT7QcAq?%*rX>2cJ=+SccK!@e@o;BAU9ryN#?VsIK zI&*#bq7#1hW@K)e#5&Jig>CgchxMI(O6+Q-+)V`=8>X{Y15$%GlNwJDay>55y}R@M!JHl?gvH8caCU`my!ph2xEywLB-L z)A%kbe!uQh_J;R|+>Lt&bL8XCo?kHkzVDV?=qpm&*Ds-?yTf9 ze^B}}NcskwvE|UHxlw(|bK+}*`Fz87IzM$pYFEz8$#)&02puex&vrO-a@T+#r725x zT6-tv&65ChEA}>p$X;c_4_(%qf(Bd@c0w1$*o8)YbuyNUpV3pO+K;^DZ5eJdo-EY7 ztV4WWb95=a<^5{V`lEDDjTwDk4-1OzPa=*#7S*e9q(T>N*EwKyr=YVqQI{vX+$DGL z$RaPvcX*NhDYwuU?LPKH9+mepFIdqhq0&AH;-wkshKFQ^4rsnLvN!B;OTHZ;mwvzG zL3`7xSyU0-j;SPh&r>C04G-gspQ%%xux&TGPo!R)Ics05-ax6dkFVI^UgiT`g^#r= zl9u1!EiQaOn_krBUU#Cg!&(2bwC?Q)eVu(y$#nPCb1CTUAQscIV=usW_j zCHM({bGzO2^^NqkYrCy@#08F39QEJ*GCS0{!%6BJ;}y%uVElE$Gq>$5okJ{!DfPD4 z$oA#90-HtSGwJtyOZrZp$K=Wju}-IUO$7>KnuzwFix(X$#ykV2SMYLtomwewS;1b9 z-ZVHp{wWqu#q6rUSof=e@71iG+`#Ub=m*XJSJ-z45tJ&SA^*&`#_lq3yQqLPyF#_!zMczT}K_4)q#z-`xU z`<=TJo)?qdWV!XZel6=xJ4B9;v1(f?xbZVQ&e&7WD1mIVcDU1{lcm1i%DUKI?OH^9 z9q!%vZeGTXO@_B0hB!R6pSx}@SN4y~9d0ut)m9vFE%Nci!LbH`^)26S^Br@#^X%jq9(G{{ zmoo0P&yNt-w>|1JR}dTL(Qlt3rltKgGNX@Y(%};4mbn)@ODFtpIkdk8bh3Rj%>T;L5)v+pibCzCrh8)%j1^F3tPRto&KivkJ}MFnYb7k(EnHJ;P`d*fim z?a1`rg-v>fcHOz4p6!ayw=Gx~=OH}tNqxX3Ge}+6l4?N#F8t$me6Nj-iJA-nEcu_yjR{K^r{ z)7yR0@e-KkMwRAyZ=3HobXLk6duQhpK7~W#Bqxea_uD)=AjXFzB?|{lwXR%|e*a$H z4&Pfx4qoXy)>;+Q-tlSvk`cl8=eg(CxtO--aQ<`l@nu&gY^$6y>*&r`rygu7Fv@6_ z*E-k2qs7CnZV3-d4oo_2dHZ`{w+VNj)JJu==c#JDf#`8+iDTHOTjZRQ zwPn);`y|T!(VZ)4ivxZ+$K;V!^PQg#%8TlxJU4aBr~Nw;Z9E(&CKu~%2tF1y`S|LU z{}ddZ^P|ay!vd$(h0QFojwFlTq$C)$Nnd{{^w-44H{Fjdn?5q`awp60lZuWg97Zqj z8zYv4{0`9#-CwEf8Gk&}%C7EgSE5B?*0Hp6wX2K7%{#?>uFq>ZZ0wh5W2@rRJjm$& z54YOC)cO83{L<{8MKexMO?7Fe|IXs&E5T&5Vei@<$a{UKO|@yw*{U^z506h&^{pv( zy^(&byHjxDo~eV+Pb~U)dFh|8iNW_>mbxF0>ilzSN=&!huaQds{H;&F2OLlRRsT+C zIkH@?Z?MQ^-?fny!kg~vqJtmL)rq=gZ2rpR11YPC8FVXOwPwTXRJQ}=L)K3J9i-TQ z@xNoe7LO9%Su`W#K-bGbeb2j4ec$CiJah8!al^+S8{IqLc75P)`>f*m%}3749$LKZ z%lVt>=M92)zL0(!Nrr2e*U-4AY-uU~4|3*}!8rBOYCP<<#xQ6K8|q zkEQ3PniNHDYC;xYd%Y$1Nvk94dR)(J+S2Byk&pQn(@uV23%sta^WW0cdY@rV$q(Du zwGWz@uevjQuH*Oo_3<0u$C^fblf_ErrrrFy|MTX6$HNxS@oi`KIy_>>{N=u0zAajY z6h&A5{51O?r|pk&40e{Ctz6N|A^vfy@c3r90vdkk@~`~r#~~qu{K-D;I+j%pIWfEM zrLRj@&(S?Iu9fX2n@x#fj}j`I9Xk@^e&_as?BzY|sut^|IYmbK+_{@~P4s6}`tJcZ zd(8>VD6aQ1uU*-*w!_ZV%P(&pv@mCePwzZ=J6rj(xL}hRgQ^ZyPR`qUe|GuJsdvX8=;i(D+|F?uGAe@Y zRuKpy0YS&dwhnuc5RvuB=b^-7YSO(wdm4`p+Ey;y zOl~UMe6wlH;XIe*57Cr?T~_h4Grt1kyzF+qeD;J&*PZq=XMD*&?}sErrn%HK5qOm4 zELl0_MC8d~^2p0o`faCGQeu? zv#2dGi6a7U}0i< z*o0MQhO}(#9a7Lcdwc|`vDN3FG5 zURPX@G1|PMmd$VPlr5EZRq~U^-H(pntvkZ|OY(;NtgBw% z?@{(t#kvK>84JHRInu7q?O=ZUC+Vcwk)9^4bbbW-xO$HI*~dU;8SXOvbLG;xQZn^= ztDGiDosJFN6nXP>-wLlu$%X-8nL9jIW_MY5;FD|b$i4eKrex`^S6oUeC~Ye(S#O!p zF=&K$UAnNe>z{-L6Ml3~ue1Bs@mSrX;r(hZ_(ZJlzAQ7Y?8%?*L-y^mTkl=cy)L6F zlsuugE8bCo@*txOAChp3D_rmq@!M7LG9z$5P@9m+ptL~P73@~Z53 zqvwW2c@qa6Onn$M^sdFV)w(Apreq%3)j~AHxJwF^_$<2g%gIw~@*j5@bj!Rv<;hDs z&%MvrU$ehDDd$({#H2>Qj!VKWbx+bC9XKY_{QCL%WPW1Iiht*LTaRw`--YWTUs7Y2 zkG|ZZwf!lVYp-j&1a1DaP_LVw=)i;)t9}UYmbZWD7xNn`DR*^Mxh~hFI3Ewekq?8y5HBmJLSn1i$Nks+MURf|d)obis2cw=(p1L_L8&}lZchFb&;gjCp zdC|Khsp5v+{)16H^8AhJR`mLJXGZ#v+_E=EB+sw6ShY}WW1>7fGCfw}p1WkQiIG=I z&9)q!rq@fmCXTEgduDCa8`S~_3AtEsBm2;G$R2RX#=)%(@^Cbl@TXzMZC^jl_R zbl5MuA9s{xn}$^SWjC()arNjy88z|RhOyV&>~23?KHE0q(EiA2!<^?d`V|y4Q(kh+ z;q#^iAqQSJxoEv3a(C~vx_h4Oo#&NJx3-<&nX&tn_u`Lcv+^?5_Z*lk-4N~l#IR^7 zd24-2v%p>#hrZEozItz6bRS#CVXq%1lm#5VI^Sf)kpme8rJMS`JL9nUTuAW&ve$m9 zea_F6VAIQQf|fcoB{ucAwyt*J-GAi)rzBeoH=nmT+TBG`aBUE^zk{JPF1fvZhb~pI z6DFpFgb$e3J;8T??XsD5vj>#kXf`M=e86_om!88(mCK0(p4V?a&bqVRBBAc(vL?qG zJqcWD?U!zTI&aXJ6yt)E#}1ON(+@3pA1c!}QYP zJoBg7_w0NE5_Vj9V%~ewXVIwropndFZ)T?Nmb0MkvEgASeiszkT0en`JM^Uc?<3zE+su&LVH+PArHf@e}`+0|JgJ)bQX?%tzx`}k(E zb(h{L2UT4k4`_aBj#1_73zb&;d>+QlRP`E^G|cD2vPE)n?j2FqjrL?{eQd67azdcl zn-MNo+8Yj>*m_Kh2*=SaXBM_j{vA4N)fhj!Rfcy8cg-}9(c7LpOFHq}#@DV_uRF$P zTRhSI9$EXzWbp3^=X#}7`tCfQ|2ub%?Z!3DV|;BEi861b-rky4-awln5@$o;g+)8Da~zLDt~VTUbG(*}|EuIbfN z)2SI=t&i-gSa4#decvnlT$lS&D;;-V%?zA;W!IopwO{nhE@~|y?bi=ps1i_(dApu7adBGbaMM>B3qi>qUAunf8VyKzqhzf)-CJgn^>RJ zpwybq%kB>gK6ElC<>$_eOV|3k-M*2NMSi-Uvpb?2`SZcDz^>22wm-aQxaMK^A*XFt zum8|wad@!vhem^6{QE+dWiT^tU%%PWy-phy7YubQ^Eh$+afS2A*nau1jFxOT9y7mH zkFg#zvR(Ze`ES1#WL0H$uu0d2g11g*;wJdKp5l7>x4(FGlNRTab(T~m+?#Uubc{}y zO-=_Q+pHXBb|o;qmb_GxsLXC{Y#}|cda*;uHp5fj``_NtvDTRiPqS~j)4JeQ*7i|? z=kY$aeUo;*{d6+W=kARl;nSLXlf2#h-WOKvvv+o_dOB@`ur}G9f-ZZeS6NR=92%sv&3(ER@c1U z>Rq*_XyM##%5ja`R?Mg_?NR(VxaoB=eO0?--Uh8Ib6w^e#?6-;T^N1uYm(>6f{LrZs*FFtcGa{q@pI$o=)#g`aisUcNvXRto@*WUk15k-h)i zaf>&M9ZlZvFw5CSuqU%^OkVBD#Shco4(*d1aWeeN(Cl|U%ao_a4IVc=reBYdXT^=; zue2S}sJi}6)q&-*mXd+Pq7BZaZIsv#5<49%{;?}Qe*4fxgTJjg>HT~h6JR|TD5lJ;)RRF^PO)Oev=hRXPVn}eRXhw{B6RT*TX;TODhkW zWxe_7;fQ8lN%O0BWl8r99H6tJJiqPC9}lJkcr;2)h}WA#^**&`NXM?b(z}w|kB=+5 z<@0KxbE6%nm;I6+)OT++(&gW7e*FiOcD$FhyxZ>= zr>)0|gEH+#zD$d-H2dK~omjS}_u*shro0eN&3&PBVh-uBW$nQFGS^XaK1PeHHU;d@ zJE*hkT}h_R;3Vgf4xe7`{O@C2@C-x0(#NEUsMDSCC(b{!6&jtrsn>g_v+O+8XY;o9 zTRp#z{@QJt{VQd^^}3gqoq73W^sX!6FF(E){l(y2|YWV|8u?BleJl*0wZ)Y9E1SC;mFVNo^1d)(W|Gre|y=^kIVwyf*83;#M# z8<+9bKKO!_qi$=HcQ-p^9Idbro*#9(uyeO{*Q>2oKmNF<%r8Re<6f0%df>|b@7A-z zR}42Ot=MvGPyCBG3;h;b%z7_X<=!D3E(ch-zYwjGOsgS}7AQAv%ve6PbZBDu^IH$s zRmWSkv%6dp-s{}*mW?cD+{u}4yR_ZLj-J)GijKYAm2q&h>5D^cPS#XS{t~dxJly&5 z$hZG~H#%(*f5vrAr}VjHZ=QVd_1LMtB zPaRqA)73Xlez7I&R)`=kS`zotBDoP zWOln}+<dJh$+a5cAC(vxWDH=yDs5t?UH%H1+>CKIVWmdeDcd z&-67U#G#MLLP8uyCSvBq?uM##9=>7P{6R(m8jqMcvMhib^vpMNTvq^hwV7|`IICvM z#kAILIBwLWf!h&0>`Z^clSlL=7J-E25-xJmSS8F&AM{`n`qsn_*YeceWeo>n-F+kd zL!$-gaULkCZ_Vfd+@#}Il&Vk;Lb{*zo#h%8*|XBD0?}u61)MaQBh4UHRvK(Cu@^z9 z!Bs?q7`3?3Ldsqx)NF=SrPezA4hoKK;E`@W+ZrmXn&?E8!DZ;a+%fVIzERO|b%{Mu z><~5!+Afl7oFA4bDc{!wT(V@(JP(1=>`ft7R5I?yk$a^7Z1|N{48TB{=@Z7}*udyu ze}J;5t5J2j57YwVRp$=&kMf_}z?g>7pnvD?U2(|S^Z$UHz9j(N#_>jKGshj4X0dau zHeB69t>j_nZXqD-teiOPJmhQ}8RSeu8iODS^VT&y~2~hmJVL@s=YJq!S!a;2>}fQYKDp0pE_Z$(A!ntfMsCdkXr1J42(Z{0hBdIul+^lH zM0;0ulmSBSf`J;LHa=DlSbPlcn)v83Gn~8HfbjjFV}`po!Qf-L)x;;J`5V?Sh`4JP zf9H?8ufgJDxYfWXRnhoJwo$+zcirQE;A0hl#fJ?Wt;^l4{&2TR5c2;qY)HmpaCcQ0 z>@4q^+@fal`kuSeg0TOek|NE7HSSHslRgpq);iUZ!OV-3<&m(ngJD9m(3y|EHVU9fJYe_ zSqFwjNBc)1n(VA^5fbL-4+U6f!~${)`bR;3(t0akK2cvX&Wk1sEG=~rnDMEXwS-v^ zjiR3jHG_3WxiWOGvn^*!(LK(Jo&}-aW-j%r>4T&tj1V{w-OG@QsE#o1j7YI0#FmTeibQcUOE94mK7zB z73y;#Vd%@$P(cmmx}CrxEGpP95^=(cJluD>e}5z?+5ieHm~UtzD1ok2Bfpw0 zfRXh%Y zI!ghI%=e&bK!wGw;_(4_O-hN5-j)J(QNt9Ipi#gXN4h5^sB4*(A&W`^Vi0p9mMH@Q zlrXp4xiUalA`;WmXrUIbL`ucgGvaMM5t=Ju7g{WBXfBfrg%f}Tnk(V-j-~`?*~J%A z2aquC3QHGIDBwmO^lA$U{KgcLQxz=LR${=&O&T;p5Fg`Cvt>be?E1$dGI|;`RJy5* z=x89Yi1MEn9T*nc2c8xM)uzR3WCqx@e$X1skmCSE+@AVWP3Y;0K#VFCMV1jpFez*- zBlra?h&=|!#oMs%cBzk#$=2yrtJ@E{UPD3@}= zQb!`9qTpX+cATkkiqYtkP=b1*lNqYefD(SuW*S)_2D2CqP>F(S^MUAtaVZAr!eg|Q z`v+(OJF*(cA)aJ#XBwJdhR|rxQ}F1~W`-tcit>^$cYif2piw9nQJ+2#mR9_BA>|Y? zez8Usq@WTBO&z9ZP3rKAc55NA2iHZe5@c<-iA3EN38ZPop$2~J{6tv7bHt48Y(S38 z4s#n@qy183df>@gnxqujo`woM`y;094>LGA11V;eqESJHnhXo(7L`OFD|Y%)W0Rq_ zu_2@e8Zw{=9Mf73D7Ajj>UJ0|>h?C1p@zy7)MX%qskscbQ!c0eR1!u;d^JbLhEX#! zgrtEU3{#C&zYJx1+EG`lh^GDcJuXLWVZ1p_#E4h8a!d;t zVbY)};}O-cKBOF2Wfl&aHDHvAnS3XjP&5eH(3u8y=vfI9NYf|_2(U4r0InoVwgR>H zMfI;ITACpy8ZbgRZ6Q%{Zy3v??**fpxlFHF9_ct6kkh~diXh?q0kwK4KzI@+^?)V@ z5S|3=*{^D%0~(gbU9^lVe^9Co;S^{)JIPx_%?b(ejhqLw5WT7a?DImSedmJyawCNP zrae&BA7V-{{w1?+=W6vs)?KWGmrP-ZngSIT8-nv>gM6`24iiX1%sE#ajFtnvG*n}O zVj?C>j2Z-`L~6M(oPwxCoR7gG138HxZRWKa!la7`uyAbgHHDz%9Aof=HLmohQUP-mn>98gP062^*7WPU_4 zVphMXcyJJWat)6T4DpYIZ?4OtXNAIwf=RXpp2w^xaA=`JS(`(D()}r>rhEaH3JHV* zYBRuE(NVR8F61^q6xa@7i_^W$>In-1WK2#$j&MKZj7r!5FG~jsLE=@$0yFjKexxy} z#~3X2Se(c#P(5o2BRY8gDf1rh|S18pU3tIWwn7FWv6^@L_N(Ez+k-Lm#UdFnaGFbE=*KjiJ8mg@Y z-zm__{KipWrd%1j$dNIzZ-IuJc?@Pv%Xwjz)*iB{lW73yOv3wlw;@!<%o_$YyljUY7yq-0Xan)r?A)`LsD zQNAJQQ!1kTzY$6uspRa=Z$v!N41x|aNFzg8{~%1&A7g$H(~%34 z@q-YNXt9j`1fc?b`hSE%1qw#;U@8>)(1t-46ObYgMn7D@gGrDT;lXHq1Q>(_)r3WI zWDIx(l}IspFcnH{q78%nAsBN!7^JerV08MQhH{SRf5kGiN6-MIVG88BX~QIRMim}R zC{YNsl0~3&IfFFVZ9|$&`|}g%8;oE zg*migkXDCJSSpvJZ6K|3G9k!@4?~iMR7qL|g`jqPB0|^~;@SKW7a{A)D<|g@5ek(`6mr%sr<6cBpbvj)g%iq^DB7V7Q%Z3Lm0+N-a&qK5 z^6Dy(Z>H4mml(Lo+eg#reA7)r{e4O7zT=XfwNt>{Sp4dRF4gtbHo zRs};y@0@BQR4Gx=lLrHrfe%y4G!>W`e;_~gtWs$b zriqEcllV(zIz5>dGcf63Mg=@*%mf1r?N9LPDp1T?69%&)oyQb;5)I-PgGuL$9|jW+ z6RD?9b=Scf2nBaFi3r8ea~M9znXTEKwEV@8Uz#s|V1_S#;97y%3bBlKV6_QD8bX|~ zw884JLlFW!BwFtBDy#TT1h_gdBk;?~aOVlm%U~8x3@$uh7XZeNFbz)*!tW^Mo;EY! zoN9^-{Rn$Wm`4MVb!>hYE5Nb9@X57D36ej=^s%WDV0cSllHe&4)Ro~~r;ziz4$8@K zJyIydB&Mwj1!hJeFoiRtRATNLY~^8&IqWcCGa$e?pSi*R10t9dVD}C4Xkb;1*?u?~ zgn2m->cX57fT1uj`eR29$RC_Sv{9e|L@)_vmH~zt6-eNZEjwVp1oMyp#v_dUPOvF_ z{|^FeTH_OO1w$M2awKAKocK(OL0lM&4smNYP7DK{EvNSXBw%UyHUQKT>raTL{Dm-` z7m`PWUP^1jq|ou&43Z#dI#s52K{4(^!}$noMJAETu_+p0D5$TEPYOc}he3mB`^PB* zh#E4U@(dDKJ$#yllPZ{2OTf_Zjg$n|x_lb|J_(9nF${A4pF}|?7S-ljuEJJxKp3<0 z5(VzOfH#l1YjBndQ%n+oC|aaVSOE$4aTto+X_tc;6;ndUqKoN~N{CrjI3}hYCc9l~ZE20z6C&1IPM*kfyewPuSTBQki3OK3D*(C6MGC z1(CHFgcQGj!G}vmIv94D`K<$g60>HIvJ`V30j8qjTI#eXG2a#91vpyRmF5cwG6`b_ z7GP+jRJ%Pg`p~U54A$4oXr@YA=(HkH9E(=~ccfsjV=gA-*Tn`7z%bQ<5rX-^kb#$- zWHn}T0HPy3JZ4~yz+qT;0gMrUWe00aAbxIT#Ci*G;?M<>=K11k%tCnH&oz!fFF= z@m~UND7wJc1row~Sja~v!=kw$d&CBh8MzRhqC$TSIs=0Vla>+=u<*;t>FW*JGdYU> z@i_z-Hc`sJ(C|eqhqnl|$2J56VTkb=g!qic+J~LVWl9*yJPtw7m{|sdnCmEqQ>J{$ zKuCn|vjQ_ROc&%NY>e@zS2-MP#h8KkHD4Fx@XQBB7zD!?wH&+!tS%huMw0HS*>@0` zz&V6aFco0}?gBP~oLXlX3?+w93jTugW@vS(RTs%%AN6O7t zMVV4XVjRMp#~&jL)`E5Fe4Ccw%Z< zH=XVzAfj(4X_*Ru@xxwd62klxaB(oVLN2GD-_gVeb?NtVG+{s&trK}x9)Ntsh063r zCSGNFGm{VFuXv#@ZOeG&Ca#G?2y6a69!9$=?^R@!SrZZc_57My2@dH2-A86eOg3QGEf&Z z7b7g@+Z+fAfpt`u>%zqA?YM9A@5NFFfO#~g8acd!}c!~uz1BQ z<8dj40(MgPL||`4tB+9^!zv4t3@qi)>pSSLK{QGg=CdhaX~;J>3Y7#`LI`(YgjKj% zf+eYXs#7mSlwd{pEmjH@Sii&m4Ym#hKNC|f7{okL!^SSSY`hUh3c-uR5rSdo4>2Wd zUht&=TjQ7%V6B5mK?(bpe90&!G8j#~DM|^KrZK|c=kt|N34sC}26m3uonWpp?N`Fm zOHG5DqLkop@f8G&8BPRZs8~6CUKJ`~+Tw{COsEixos;0qU=a_c0-G;khZ-hze(T_< zgSsVbAWjLJ?HGdq#3TdJWhkdLMF}CCjw>OA8L^hAAVR@oMg`jid<9m4QuCQs2{n)1 zunQ3g8e=9HZE^6e9(eRvKmqNyVC5iq%b%!KaJq)y5O6QSMc}stc1^H?e_0`e3BVQy zDu|e3_`p>2jT9^w=+!WizuNe~1c+_0g7mS~4g`5|X@Tp_9}y6~;(G`}IMvXw3>WCr z{SQw!O8AZ!z`#q_mJF=Bux%%_;^PllD1_~MfD1#PVbHX;03+!)y?8)~dGHCNbvPfU zfWQw1qhE>E#;1S{QLG%yLafMmAAurRe#l6k5d$D-E}t-LpYTQz#Obg@Tqt(Ox7q-sALr9< z9ITsId}=2M3Sx&50fwEqf}=Osq7h(l#(~c?oMFb8hFlBU4JJYSu=#}-l=D4tD2I}k)zNadQ~E{mpciSGDkfxBI=u)JGnXQ|37cIvFrc< diff --git a/Doc/RomWBW Architecture.pdf b/Doc/RomWBW Architecture.pdf index 274542c19000170d86e7f7b7ea2efe64637c1a81..76c4944bd227c72dbc40261d32fb9c53ee3b1ce7 100644 GIT binary patch delta 194 zcmZ2>Zq+GoCH1Y#y2X5K#Y zEz7!Yc4I?BV?z_;>3)^0GBD2e!b;YQ`UxiHX69z5rY;tS7M3Q4&c;qAmZolIPL5`- s#>S?G24;2&HUyQ#D%ja^6_+Fyl~fd^rg0gYT3DEwaH*=g`nz!f04H!ang9R* delta 194 zcmZ24FM#*VONd^XKNzFPb+jUYHV>>Zq+GoCH1Y#y2X5K#Y zEz7!Yb|XVmQxjve>3)^0GBD2e!b;YQ`U!@nM#gTg&dwIj#)jr@E(Vrv24)5(=9X@b qCT>8cnVo_SK_#&Yc6MCFC5c5P6-B9OT*jsr7G@?~s;aL3Zd?Gn&p7G; diff --git a/Doc/RomWBW Getting Started.pdf b/Doc/RomWBW Getting Started.pdf index d87ceae3794679af70fe8b5409991d6723fe77d1..23eb3b7b682cbfa03d2e1e98d3fcb80a4613b181 100644 GIT binary patch delta 28095 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

(?Z@Me(=#Om+SsayBa_oO2dTFI4w7b>2 zmnl$-#H?3}j5zc*yPDBVz2!{O2AkED^3H(-bL+FgI)ugxit0;7Q}3b ztM-`x~nI<$mB%zFFwYcF6D+@>ma-3yzMgF^>7#%h7d}1>1G6kjGH`7$lAr>73f7dh`|Ksr-z#Qrgl%b|=2oEH2ab+`_mIu^ zpUY;|HVmogg0LNbegU`_&46n_u)7+6w)zb8X`gVlxUN)wN9#D9CpoG>y#0+SN2v}hsP(bd_tujSMorbO#SH4rMoC4picgZ|a$6t=@e>!Iqh-!5wbj`q$ zbWAJGZGm`CuGS9_)?T2ZP=Evt1B2C$#=##0mNyTvRec(bVnr3uXk-=>&{{=WR3=;q z6ZFBi-sfg|450#=V@Q@rbC)6gVdC`#-Rp#0rn?BvTsx(~j zu;B(5z(^o~1bQpK#h)(f!Vd)+#7{{$0uyg}`9#LT#}8(r3 z3LEqA9b*RjHypN4;mx-jC?9DO#c8BjLUU~ao$ti#iQ&h}1VwjG*Wc6QyX&O{qN}*% z;?R!yR}sKY%zk?&s}}pPW z52C^yM2x$nswC(7-SPF*!59aRC&{pG4}y!Cfs>UrNxYsF;y>HK&BB%BUmpR?^gk^b z4FFTmVTL?Mv}?`u#jM_13o~xa&LqtQwGL1}G5jjs&W4&d6Yyw55221FIFB*sVXqSSj9i#}yz10I*cr?5eceK(@4?usE zA?M=Mf^PsiGT+oGMj9VSCst0f&uyfy0v2k05^i-H@qH?0QotlxkCITlag`^ySwH>`5lNao5`#OuajC z@mr^#1BpX-YSE7dhHtrLn+jMw@R5-=F?`zTG(qjf18FUE*ga%GXwXJl#QgpZE&_I5aecG*ko8L*cGy;qS`puK194A;vx8GW+L1}*xbZm74*78j7oC*0G=~qejGc7rWI^K zK}n^}Xi0r0cBsyd=0mcRD0C@Z7YI8$0?08BV3Jk4pIk@7l77aDVgWcPL#)vI#Y4RwB3%DHTmv=~4n;)MP2Rr`0DpbA0*N zyaN0g#stU_iO2z$0Fxe|SBrUA2Hl(Ihh|`JsU?qHKGNE^(7CmpaDlx5RN2&SGM|1g zs_x}OnZ6JAXLuuY5wP{%#{%H+Y_X@LbRa)MRIay9(LXet{cQM(w+#Z79k9AxV^#0% zAt*kD#R7|%4@fq{mp7z5_QyjCPthi?L4^ z8AgI<&-P@OMKMfJPCNBG?ft^DAn|LU?YFuTir0VG3jC$~c$EnC12)Fh7F;253pT`Y zNvA#$j%}$K0HWC~i_Mmvq?`vhRl6S1cUcp29Xckv3NtLKR|F(`wmKfdalRTf|JH0= zE!SONjY33@Yy>9q+M2UZ30 z+g-ci`;E@vXLc32^n|WZ@hOo1cKmIl)AbfGUm~`$1<*t#t}z(6Go>=Q9W#n=^*iIH zwkmwDPjd^&?41yBYp?iv9Xh&)WV8=nJ?5A=Y0Nmed8UVQ5%&!)LWZmeDb8evJf3=g zxHxBfo@Es%{V6pnu*rh7MZNOR_DFBd2$ez!bG#Z_tX|cOm7*T4Jc6kPvEw_&*V}qH zjgf-x128sgncVp?0m1Ap9rIuISSX-MDfGOG{K%V>!P45T|Ma)SGxp-JI&C2M3(_>8 zDoX;N*22wK;%NQ?-wbs5Gwas>!3qt;>Z?+f%Z9{qBp_nP_so9t_!iGw!0~V;5|MVl|m$_t)TRo zoXDfT?UImrT#KmQL3n@-WUf!EGX40?O#XK~)^|K84)llV`vlnc%5(S{FD@+Ss6%m3 zoa49ZEbk8ew2JlXAIUDK0v0cZ@|_U;S6`0(86)^;a*6CB*`yKqLU-c%!~VtRmc}pW zrhZOV({39TFbF5-{}WWVoR9t>_~q5jZz)%>5A`Na>x}9TxE<3&rU*QA1yU`0k)<}J1;}_Uc|P|29f1> z7q!<`}|ADvEWdhvH11gqWBSZj7W_SA{xSdKA! z>c8H8B*>H^a&e|;*~~?x&y3&u9QO|*R>*#OFe&0Y{$aFPN}xkH^PA?a9CfrU(Isk+ zEu1nL{R^Qk0O<)d3TW26uYJqQ&YG}J%ZuLva6R!sdK{cyw`%H)<$ki(qCh{rlQ{CC zmCb9<77(1V=8Q~<3@(l0;k)S6>+!?6a^VJ5si#E+2Ns_a(h2>$JKM<#bn|nuJ0nbn z-Gl762)X%+iL1qyiEdP?n?Jd%1X;F67CHPW{pNW|a#O$hLihP59jRFXWutiwTEXn>mZ6pQcMf>sZzq_E{v z=g!MP%dLo^x8_KYPQH6W9ifFqZk*7>A;<{|*ll7{(&@iOc+QilAceG;WNl~TD$B@} z5;qH!95=0x&h%z_;>hv9(<~+*Nb9T_Z}R>+VHX6ZAF6l(IQ1RYc>=xGWDjE{OS>nGs3!p3)n_e0N%4pXC--Mnl)KZ(q$2)JU>f^73tsCQ$4l= zU~TWgGg>fG=$vm4OO4)L6BynV&5dReRm)x??SNWB^YK}Q{ZHibA>luiW(lF z92<)N%zYmqkpS8tUS=&ojkN`I!*DRZpm5eYLkzoAr#=u&ThKezt{93j0+@4KU%%O2 zZ7RxRp8xH%d2`vPjN5??@P5j(-(L``^H*E^pVbn)>P08VvDQh~ z`mD%i!614@!ZA2o_Ve@XFcuUz&5Fg_!}xhoZE2qc+B(&SFGaz#TBqLqHN18o+NyjK zF#paMN39$Jq79y|$dZKxz!o%4Rwl_ILs-WZ#f~kI1=h)xy7K{I?vE9LH@Zpx?*L-; zPbdp#yC{Wu_dP|YGOoqDZ^2ZTK`%k#^Ak*xuk*xK2OTl?AJp`?0RbgE0)8TqV z!crEfijC09QEx#kC&ZUS)QOQ8GhBRRl7zx29+jf7`&msX=`4o=U@FhzZo=4=y) zAz@K{dv56n;^j(;iB?w&^y@4vxE0^#O{Ev|DT$VU??DK{!K#v}4I+NJ6apNEEs*lF zwpLR$)eXE7Q?6Vu_mVz@*3#pXc$zP%X5Wrxg!`NADl`l(k3}Tv2v!wuq<_SD43X^F zk>(GjduIyJU+morzz_Z@n&NjjS)Kx)-Ry>cM~F$qyXxYaGFY=oW$uS7WkLH{pCXMR zG55A$O^;szXbK7VcA-=6Iwsbwxc-Xj5<4u!Xz;$A}z4_Dvi*A+U;xA zJ>6a4bvY!s8XE)Ygb)kMgdehoKDAC?RJ|v!`V(E*e?p2e*>&WNXJ3ONY#>Ad-^QD! z>WHoh)g*=&kQl^~W1dW97_Q|YIp9U~gisPAHzY;Z1Eg!P0YN&Pl$cfDV7A8Qq zV1?GxVo3Y7v_yquAcaWGaWtm7TWhH>VE5rn%{GiRLG7u8tV*P<0f(+pyY&&rFFIZJ z6+TjF+`nFK=<7`h5hAGa>YZ__1eBQ8eOdt|#ygb;xIVy!C-QrMTk;?yE>M>i=Mq&5 zd)TiB)c~<__oWz;a@(vXo zIusFlC*|53;ex3+ew#%l5INx6Hrz!pJs=ED)nZ|HcBjK~r8H3R1Hv-63G@e#57riH zMAOMff-@MOH03xatU~;SYy^D@Od1~8OZ!IwjG5FqNCLsi#lZ33xzOQYI4Cy<^Z#`$ zC7MbO+gu3#w{_`lOF%K!Qmtl?>-@SDYxS}au!Nm|_!Si+;vSjY8YG_P9KF?Fz z_T-@a9K0+nawsgkjGqous70s?g&ze}_jK7s%5OW*vltzG5g??sHRya+=uA z!#TZ;0wu03+E~=OLirFK+ns@L6a+BJ48@2}Y|DRos|{efhwa+cy96w73~boA<|G+7 zjW*!Q-T+AT1jr*X-Q1%!fkVt8?L(!8c5NCvG0`bPAHr~KKMH$~WG}E`{SQ&F{z^CX zB_RGwh#@^;?UZLlR~c~OR)TH-TK#82!Q|v{V~N(5IueuU#_};~$@B5c_vpGb|IWwD zSDT5w90|6Bb*EgR(&)82Xf)VYC+#pW)1`cF_m+@dN44aLb6PB1M+9_}5JZc!}^iT?^-}=QtkdazGp|%$qKA#+DuIg~@#$ff2DAr&PV0@GU%- zqd)~Qt9+D#LV7dYrITS*e9t1?8%%y*6Ox$&!}aRsU2y?8JZ?ty;$mpz{WFTR^ITCX zXV#sAJtrrDhV{6aIXE7m(}+#=r*O;=>Pm|T0c^6L3Np3EO%~1dg;;M)J}Ra;p9i#{ zkE>2&5Eu$u2VG0T5PoBB7y};A0xkA6G9TKV` zJb}w3fJp7qnX0Msi_myeU+u&5b+BBhq&H39QvGq#Z7J1%jsFxtgpS!(!uZ;%QdnPKE5F1qC!DqN+=(@xv>fWSU zQSRHrVg-Ug_Hyx<6~|_bd-GYa{sB_FWLk%VeVDZ#u1OUU0=4 zsHXo_4x`3C-UKoc(=o$hAN^a7rc7kc6_#)=G<&zQpAW1-rvfal0-aXY9=SaWdodA9 z?Xu4j-U}2K{u7}x&-!5LU}#poB#t$vT#|WJ_y?kkG4BMxy|*aZ7FLrHmQa?j9L6GL z-pE+TsF5dNK&S+Z16l#fyVGgksxvO_QB(1z2=}Y`XVzP_bk4WQXo(Vt7{gX{3%v%i z#&tKNn+Rf1jAm$}ljj6)NR&(NH9)jhn%#(r!jXHM|CY6=I3wpy*J*(?OpA9%5-K$l z5)4%C!(0a-o0u~Wr&<2BzdsOpS;FF;_q?1jFxfe<{ozy{@RuSU*z%YSn;11B6oAHmdqYfmuHonT#lGOPe0xFW7OsJemOtA#2aDSKmn3^e@$L z`1AFOvYrcPCp;nr4m<(4Nv z#hS#ekqV4ZbAkN% zRq`pISoa*1_F*dG0#@ej{2E2s3VOKDcLD^>y@edPu1AuwyZ>Y6#|g|C+@%LJc1+h4 zbN*5Ki14IHA85D3RHSh99<0fWkG#lpP!E2=-t%#HkIDVVowW0dit9-*AoJgWcf=8r zbwAPd-iEd{ou;ClwIco0y&i6iF{qZ{e55%*%f=kb0 zri1atZf&15LYoSy=XY-$@JrEt=nU$n7t-wC_|cUL94pc=Ab<>sIr9Qbme2Jm;t~yL zSYuOtIi_!n%tFPt+%aaO5E8`@iQWFbvcidJM{k0pBg-!EhW>dY0iV`GeA39@U^K#8Cg?$Z z)IETr;GhO7TyJ~nCA-T2T2V_n`Gn*ex78~`qjA!@)80knAv*doi+L`f^w;8W`3BC| zZV4FM$@7c-x#J1?uM*YLVh;Q1!y(^4FkQ2vku$}>=oA_uSFD;?1sL>v2oC-@KQ{fF zqyz?KV)}pkajm$mapeC#n9Q5NrvH1IIAU&HiwJhZTL+bmwndspvj~M2hau@`dc0M^ zq*kW&dJ(^>>a4nayRgZaIU2S7c^Dmkz237N z1f+1Yh7im_hbUGeBC>`xb4r+c!ghYPkM!lQtK7@GS~rc>s)iaiy^H*7x*8nxTfIu{ zJ$KUV0lzP~m@9T0(OuH+RBw-$tKe#Q!e#jv)}99?JD_tnVqRqze)r>r1hocm8qFR} z4;ugqbA1br#zV6;1o53g2rYSwvp@XNazmhg>~~1`(XG$LWRT#0L zx9D=BsnTj{Pi}6ekcjwzvED-|#iXna+X;ZH(FB|>$Rq}Du3?ddVdc=O&hwx~P+-vX zUr4@*(LSuBOsgaWQRJ_5D#hbQo#_i{;uUHG%d3<4{Ga!VEj1rDrTUAlRd1%7a22H( zovJqir5;=Sb|b#Vc>>dVY_%y+vo^tKP+YR0%!Tc>>sU75(&UbVj67nr{@5c2PCCGA z1(hHm%EwJYRxWS920^>R((!hpa4NKt( zr<3qQ2$<_PU&JQR3keZaIiHWe!wgV7hHJ7xIs&L-!G4&un-{U<8_}klzyQ@&u>q`% zeBV8np@*OUr;sa;j;g%kWF%2T05xo-EC~`IQt&O`_E46Ph-ujjn_xi`4YG(J5CpU` z27*>Z76C^k0f{U@@qmJY2+CFwrC5=OA_Atkv{;2u%Tkg4UdYU3?#(&nFVFQ`?tXvw zetGlRu<}6z`|Wz@Qi`+t;-=E=qf5WJbg=BIJ{uowFmvJVq}&!;kG{YAS)mC%#gT6(o%rgryRtG~NxEiP=k~KYohmAh&rH6d$JwINq0^f+nY6LUeBbyR zt4aOMYkq0>#poW#rarlQNQ=5JPfNPX4L1DeS68=sDjqEe z-t_8($6kDOYzLW;FlD3nLf){|M-ofs2Z|b>UiIRvXG*_GlW)}jdFaHShTU}Qf9u}< z{)+Kq*PZK-btdU}e8rw|z0SRKq+`yq^_}as{b1$3K|ig!F6-qEo9Z`d+@aIB&-X7Y zpSQo$16TLyez;GA;JV>W?p*L>?#Z=1x{kW$iG@A?Q|H)2KQwqY?=LAEr_}rMhQb}q zC$8F6^q0YZT6SIX(hajywofpVlH2tVLl%#m((K~kmf2pvvc+BI94IbLuIoMD?#CXp zm)$oiz3Zsm_3LdP_pd=uCl5Z@_tS#goEd+9tYCSgzp3jRy#3|&_aCj(DYMVv0Vhg= zU2p9B?7(eX4i$g6C8_m=-sLSutbF_Ou;=PE&3k=MC4F z_sPF|ZPOcie|@+hZN|!W4_B6bpLTN04|zW~_@GITBL_<&rJNc zGkZ-+QTK%3{<>}WfM(y9Ox)MD&b+r4uD^C`?wst@o1eJ1;+GAVJ(jngu- zt~r&0Y+1Q!d9dpWo7e1k+k=&%M!PO-mapgc>w0WPpz&`$I^Xz_ zXYXy9u=b_n*FSS@`oCLG>$Y{znB^b+_IzgMxWd;vF1_dQ7Zp>UNt=5*q4|!=(=Wca zV$Yzs}JBhNj(|6h0g znw)h{#fSrG&G84Zmj^9=>D`YnHM)Pt(bd+hooh*gH^wi zxb087o}azzjnPFPPFzyFzM|yQ&+qT|-KS@Z?@Q_T)E8p-&q%K&uHNDv#9gjYJ;*+xXre?|q|6sNH>zGHc-P`fpAA8O3 zJM+NmQMsMg4g9chO^fp#R~}!yBzx@Ayotw`jZ`-soAW_w;J<5&x+DxZf3RcVy$%0Z zdvW?BH~%uD#k>VA+P^Zup7o!z9k#_SJsda?_;yskIpc$6Uq0NRX%tS*k_SeENlF9|K_6DBBICW(Shf z*%89gj5F8LUT8#ipk2`B$9r@=z7Tdf*RJK@yRDk+Vx4V>bf8IxD$TY$b;Sq`qgH^z z!PND?hZ@Kk7VK+Lxolf7-fg9{3FYC4AU(n{(&IGEj)i6nRhR2JOng@=kBTKMS61&0 zMx9FthdG>(nmL@%E@jXX#!$H}X}LO9@0KNP6MJ3|c9E{299mL%#AsNj{LlJo8WJ?^ zF~^V|_kLwt>^$X29Xj&|*pa!Zl8P$VQrc$ME2F$nM(dXqFlQ7=)J zvZ+dxYkO2~{rT;Z^FkRz5Ec$1QbAE+#ros@ATl};H~Q&&K0G*qkF;df{kcLa%Q zv=mM(hnA(al++{|e`?KXhWVgzX#C((q~5SrQzMnaa|BfviieF~MCb=kqk>zWVW}Er z#e~ldA8T8vPoX^j2x?p#nx~>7_3;?+5J;id{UfMv<2M~7r+GFN1PR!2LUH|T5yZ9~ zrbr}ZMJ;G6WRp;ie+1RL?MjwdZ5L^j*cQQoBUboF&}hOD4pp(Ow99DHv%Jt5{|KgO zr5x&tw&LDo8`Qi|#vO=##-K91@EC{1K8|3VIj}vorsF4Issx02HSO+5C2?S3!VF9X zQORb<(k?j=RT$Av*C8M1keySDrX4snxyo`}hx0CN4fNw5K^@m|U6%R)pID}H6iQ9# z6C4qwhC$Vp)CU}e3_}G`TClywFpD@w;M0!SO6MpOcFSm%1z4aOM7mO3e4|-5c8p;j zhP=xdbdj}VErKkI1jr&AMq*y?!gSQ^AW=YOVHE=lF0eASEohz~Sr$H{B~_~{c}8{d zjeo2pz_YHf*dCiQRv&2rW!I_kXYRC>WRX<@6gJy7^MfVCzD3YRr zmauFFBwXXNPypoje>5lN63{&AthmIc8WfJr91{>7zU5=K8eNHSEGC^muAmYNd~3v{ za|F{M@QKZs#&=GUR1vIhhX7DC4HE$*%A|7)L##r049ExxI7zjo9fzpj3JSn+N)!?h zify(jo`AC&#V!GUqfRJ1si|)PdHbPQrT<8_6&_#0~@CV`?oW+ss6dDv@3 znGRm*MiEV#YC#HKOYoT*3r{J8h#nX|5Bev9;0~6gWDtD-lTJBN2dVZCDS)-;f$$@$ zYLvAIf(nPWG~5X#pqB51vZnXL&qc&D!xz^Qiuj4v0e+E2lB8~;ESKSYX%y==lqFcR z102I#2RNI$4&2W3(VQ0(xyr#ngD434F*Fq@fQHa@Lj#Q%#sGY0*g>HSWhb~Ub3P>< zE{+teYAR)ip@02|*DDDuyTNCP2_O~A@=9vf+oMt7tfO^gtV5mDivUG z+JyU3cLOYA2^b-ak2rnfMCS~+ge7@x!4@&=kPI~D4m2JVei)4&h*l=7$cP>_suc}l z&^*etMvkX$jx1<9ZDY9cnZdw;(n6^N;rrUrwcL+E8eNWjO%;i#VU|I6#o|Uw$D+DG z*7VU&Y}(YaDwoD+95faIRAK-aw%M~iPQyu6yZGBNOX>a*yKU21pZ09{12P-TA$P=Hk)q-%y?41gSC5Osp8)c{9R^&1D}Eqbx< zW4Jfyv4}J-4QIdUX3>mawt~me1JTWM1_9b)*I_TRpHGAQQT1cs!?+fL+7p{4tMNvl z@W);PrX_Vk>;=ZEv94v68br;IxKjAhLt>!1@Sa+FSR;@$YMgQ92u(o??&8sm9L;7R z=xV8(V6PL#7||XU3(0H=mH|E?!Gg_}VZJE&NZyANDpZ&Y8EfjKN*?KO?~^Flv2xpJ z{uv}N03ZB%N$rEZ2(ByVB}Sbfw9`+^Mr!H{SdT0fdq2cS%fe|Cf@3d=Gh64e0*sN9 zA2~5;8Jjuo0u*A{&Zvmd!t!9R;Nht_EXQ1}#$>B?l@nsK%kzSQUxhB^1=@rr+#84w zGU*Xn(fnTR%u3Z_Ih%(sW&zA{fC1zV@P!HA6>Ub*kHIh?wBcT$ALb-Buam}~VN!!= zn;O`Er=aD}0)>rJ4JKLD$s>Y(uo=^8b_oa8#-De`uESoyl~@`s20Uam+Uf)?Y~~Lp z7^$$bX0)kc^=hNru_>x595FIyMn&}_X$beiG-MQkT!1+!<=U{90BlCtVCy(M!_21^ zGhymgy*Dz7z(Q^(Oov#$LUG{?BC;7XnnD~f&0chZkXVN&fZ;#{4ex8Q2igLYI^x^@ zI-030Y~>jmiGneRD=a#SFrGt^D=yZoS;zREr(8@D34_>+^bsov7?ja@Sa=ixLFk|b znn^+Ks5{Muvj2LunVcO)XwC$gGg zd8lgC3LaWBqBN{SMI}lD=e|{Aay=H}4Tdg+Z`0`W9Dskej@Jnfsh-J=tx*Q6AviDq zLk0+XHi7hClbOUWM$jJ^=JXkyp*Q1x9AESPZDJ<85HZ}1 zg=pq9{#fC8LDpFMJ{?AXVa0YF{n&2!<%Cj(|Eb5PKcOiqO+uu0Gkj;!aDYfhIdN* z^gP`Q*CL^fb*iTKSJ~fx2%|6>G!{<&pPta+9B2&P`H!JAnn2?%fM59O%au=~IRH}A4sf%&3o^a^-Fo#xMc_`?$FGd^ypcFZVT#Df`47B(JJ=%1?KV!XW)RpSMN<^>c? zyiC(|;5ybZeYl94P9+fn&q{PN8dYjz^jfqVg{mwHs6exsANdV3d$|%4y&t_8^D}la z#?jO<@yAs)hD+6W7I}uMAE+jx)i7MNQHLnv292r<+R{KzltGQBP)1{T1$)^ua1cb+ zW7vQn9BU%Pn8fH|nVArF%-BND-ze`4>bnBKlxgc*+!L&&u?@vU(0q;mmOS`Rq Huf+cW$0G@n delta 28461 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 @@ -258,7 +258,6 @@ over any older versions of the app on your disk: - SYSCOPY.COM - MODE.COM - FDU.COM (was FDTST.COM) - - OSLDR.COM - FORMAT.COM - XM.COM - FLASH.COM @@ -484,19 +483,18 @@ the OS variants included with RomWBW. The following custom applications are found on the ROM disk and are, therefore, globally available. -| Application | Description | -| ----------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| ASSIGN | Add, change, and delete drive letter assignments. Use ASSIGN /? for usage instructions. | -| SYSCOPY | Copy system image to a device to make it bootable. Use SYSCOPY with no parms for usage instructions. | -| FDU | Format and test floppy disks. Menu driven interface. | -| OSLDR | Load a new OS on the fly. For example, you can switch to Z-System when running CP/M. Use OSLDR with no parms for usage instructions. | -| FORMAT | Will someday be a command line tool to format floppy disks. Currently does nothing\! | -| MODE | Reconfigures serial ports dynamically. | -| XM | XModem file transfer program adapted to hardware. Automatically uses primary serial port on system. | -| FDISK80 | John Coffman’s Z80 hard disk partitioning tool. See documentation in Doc directory. | -| FAT | Access MS-DOS FAT filesystems from RomWBW (based on FatFs). | -| FLASH | Will Sowerbutts’ in-situ ROM programming utility. | -| CLRDIR | Initialize the directory area of a CP/M disk (Max Scane). | +| Application | Description | +| ----------- | ---------------------------------------------------------------------------------------------------- | +| ASSIGN | Add, change, and delete drive letter assignments. Use ASSIGN /? for usage instructions. | +| SYSCOPY | Copy system image to a device to make it bootable. Use SYSCOPY with no parms for usage instructions. | +| FDU | Format and test floppy disks. Menu driven interface. | +| FORMAT | Will someday be a command line tool to format floppy disks. Currently does nothing\! | +| MODE | Reconfigures serial ports dynamically. | +| XM | XModem file transfer program adapted to hardware. Automatically uses primary serial port on system. | +| FDISK80 | John Coffman’s Z80 hard disk partitioning tool. See documentation in Doc directory. | +| FAT | Access MS-DOS FAT filesystems from RomWBW (based on FatFs). | +| FLASH | Will Sowerbutts’ in-situ ROM programming utility. | +| CLRDIR | Initialize the directory area of a CP/M disk (Max Scane). | Some custom applications do not fit on the ROM disk. They are found on the disk image files or the individual files can be found in the diff --git a/ReadMe.txt b/ReadMe.txt index b62968b4..e6eea6b1 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -3,7 +3,7 @@ RomWBW Z80/Z180 System Software Version 2.9.2 Prerelease -Sunday 22 March 2020 +Monday 23 March 2020 Wayne Warthen wwarthen@gmail.com @@ -271,7 +271,6 @@ over any older versions of the app on your disk: - SYSCOPY.COM - MODE.COM - FDU.COM (was FDTST.COM) -- OSLDR.COM - FORMAT.COM - XM.COM - FLASH.COM @@ -507,10 +506,6 @@ therefore, globally available. FDU Format and test floppy disks. Menu driven interface. - OSLDR Load a new OS on the fly. For example, you can switch to - Z-System when running CP/M. Use OSLDR with no parms for - usage instructions. - FORMAT Will someday be a command line tool to format floppy disks. Currently does nothing! diff --git a/Source/Apps/Build.cmd b/Source/Apps/Build.cmd index f3d58557..794aee0d 100644 --- a/Source/Apps/Build.cmd +++ b/Source/Apps/Build.cmd @@ -16,7 +16,6 @@ call :asm SysCopy || goto :eof call :asm Assign || goto :eof call :asm Format || goto :eof call :asm Talk || goto :eof -call :asm OSLdr || goto :eof call :asm Mode || goto :eof call :asm RTC || goto :eof call :asm Timer || goto :eof diff --git a/Source/Apps/Makefile b/Source/Apps/Makefile index bc549c46..49db6949 100644 --- a/Source/Apps/Makefile +++ b/Source/Apps/Makefile @@ -1,5 +1,5 @@ OBJECTS = SysGen.com Survey.com \ - SysCopy.com Assign.com Format.com Talk.com OSLdr.com Mode.com RTC.com \ + SysCopy.com Assign.com Format.com Talk.com Mode.com RTC.com \ Timer.com IntTest.com OTHERS = *.hex *.com SUBDIRS = XM FDU FAT Tune diff --git a/Source/Apps/OSLdr.asm b/Source/Apps/OSLdr.asm deleted file mode 100644 index 15037790..00000000 --- a/Source/Apps/OSLdr.asm +++ /dev/null @@ -1,1017 +0,0 @@ -;=============================================================================== -; OSLdr - Load a new OS image from filesystem on running system. -; Optionally, load a new HBIOS image at the same time. -;=============================================================================== -; -; Author: Wayne Warthen (wwarthen@gmail.com) -;_______________________________________________________________________________ -; -; Usage: -; OSLDR /F [] -; /F (force) overrides all compatibility checking -; ex. OSLDR CPM.SYS -; OSLDR CPM.SYS HBIOS.BIO -; -; is an os image file such as cpm.sys or zsys.sys -; is an optional bios image such as hbios.bio -;_______________________________________________________________________________ -; -; Operation: -; This application reads an OS image (and optionally HBIOS image) -; into TPA memory from the filesystem. It then copies the images to -; their appropriate locations and restarts the system. -; Note that the application itself is relocated to upper memory -; after starting so that it can manipulate the lower memory bank. -; -; The application uses the following memory layout: -; -; Loc Size Usage -; ----- ----- ----------------------------- -; $0400-$3FFF $3C00 OS Image (max of 15K possible) -; $4000-$BFFF $8000 HBIOS Image (32K fixed size) -; $C000-$CFFF $1000 Application (after relocation) -; -; Notes: -; 1) Drive assignments are not retained. Drive assignments are -; reset during the OS boot. -; 2) The OS boot drive is not explicitly set by this app. If a new -; HBIOS image is not loaded, the boot drive passed to the OS will -; be the same as it was at the last boot. If a new HBIOS image -; is being loaded, the boot drive will be the default imbedded in -; the HBIOS image. -; 3) It is not possible to load a new UNA BIOS. However, when the -; app is run under UNA, it can load a new OS image and optionally -; load an HBIOS image. -;_______________________________________________________________________________ -; -; Change Log: -;_______________________________________________________________________________ -; -; ToDo: -;_______________________________________________________________________________ -; -; Known Issues: -; 1) App will fail badly if OS image exceeds 15K -; 2) No attempt is made to match the BIOS image version against -; the running BIOS version. This is intended behavior and is -; to allow a different BIOS version to be tested. A failure -; could occur if the BIOS image does not conform to the -; expected structure (size, meta data location, entry point -; location, etc.) -; 3) Hardware platform has been removed from the bootloader, so the -; platform check has been removed for OS loading. This is fine -; unless you attempt to switch between UNA and RomWBW. -;_______________________________________________________________________________ -; -;=============================================================================== -; Definitions -;=============================================================================== -; -stksiz .equ $40 ; we are a stack pig -; -restart .equ $0000 ; CP/M restart vector -bdos .equ $0005 ; BDOS invocation vector -; -; Memory layout (see Operation description above) -; -osimg .equ $0400 ; OS image load location (max 15K) -hbimg .equ $4000 ; HBIOS image load location (32K fixed) -runloc .equ $C000 ; running location (after relocation) -; -; Below are offsets in OS image of specific data fields -; The first 1.5K of the OS image is a header -; -hdrsiz .equ $600 ; Len of OS image header (3 sectors) -ossig .equ osimg + $580 ; Signature ($A55A) -osplt .equ osimg + $582 ; Platform ID -osver .equ osimg + $5E3 ; Version (4 bytes, maj, min, up, pat) -osloc .equ osimg + $5FA ; Intended address to load OS image -osend .equ osimg + $5FC ; Ending load address of OS image -osent .equ osimg + $5FE ; Entry point for OS image -osbin .equ osimg + hdrsiz ; Start of actual OS binary (after header) -; -; HBIOS internal info (adjust if HBIOS changes) -; -bfgbnk .equ $F3 ; HBIOS Get Bank function -bfver .equ $F1 ; HBIOS Get Version function -sigptr .equ hbimg + 3 ; HBIOS signature pointer -hbmrk .equ hbimg + $100 ; HBIOS marker -hbver .equ hbimg + $102 ; HBIOS version -hbplt .equ hbimg + $104 ; HBIOS platform -bidusr .equ hbimg + $10B ; User bank id -bidbios .equ hbimg + $10C ; BIOS bank id -pxyimg .equ hbimg + $200 ; Proxy image offset within HBIOS image -pxyloc .equ $FE00 ; Proxy run location -pxysiz .equ $0200 ; Proxy size -srcbnk .equ $FFE4 ; Address of bank copy source bank id -dstbnk .equ $FFE7 ; Address of bank copy destination bank id -curbnk .equ $FFE0 ; Address of current bank id in hbios proxy -hbxbnk .equ $FFF3 ; Bank select function entry address -hbxcpy .equ $FFF6 ; Bank copy function entry address -; -;=============================================================================== -; Code Section -;=============================================================================== -; - .org $100 ; startup org - - ; relocate ourselves to upper memory - ld hl,$0000 ; from startup location - ld de,runloc ; to running location - ld bc,$0800 ; assume we are no more that 2048 bytes - ldir ; copy ourselves - jp phase2 ; jump to new location - - .org $ + runloc ; adjust for phase 2 location -phase2: - ; setup stack (save old value) - ld (stksav),sp ; save stack - ld sp,stack ; set new stack - - ; processing... - call main ; do the real work - call crlf ; formatting - - ; return (we only get here if an error occurs) - jp 0 ; return to CP/M via reset -; -; Main routine -; -main: - call init ; initialize - ret nz ; abort on failure - - call parse ; parse command tail - ret nz ; abort on failure - -; call confirm ; confirm pending action -; ret nz ; abort on failure - - call crlf2 ; formatting - - ; Read OS image into TPA - call rdos ; do the os read - ret nz ; abort on failure - - ; If specified, read BIOS image - ld a,(newbio) ; get BIOS load flag - or a ; set flags - call nz,rdbio ; do the bios read - ret nz ; abort on failure - - call crlf ; formatting - - ; If force flag set, bypass image validitity checking - ld a,(force) ; load the flag - or a ; set flags - jr nz,main1 ; if set, bypass checks - - ; Check BIOS Image is acceptable - ld a,(newbio) ; get BIOS load flag - or a ; set flags - call nz,chkbios ; check the bios image - ret nz ; abort on failure - - ; Check OS Image is acceptable for requested operation - call chkos ; check the os image - ret nz ; abort on failure - -main1: - ; Load OS image into upper memory OS location - call ldos ; load OS - ret nz ; abort on failure - - ; If specified, load BIOS image to BIOS bank - ld a,(newbio) ; get BIOS load flag - or a ; set flags - jr z,main3 ; if not set, skip BIOS load and init - call ldbio ; load BIOS - ret nz ; abort on failure - - ; Initialize BIOS - call initbio ; initialize BIOS - -main3: - ; Launch... - ld hl,(osent) ; OS entry point - jp (hl) ; jump to OS BOOT vector -; -; Initialization -; -init: - call crlf - ld de,msgban ; point to banner - call prtstr ; display it - - ; locate cbios function table address - ld hl,(restart+1) ; load address of CP/M restart vector - ld de,-3 ; adjustment for start of table - add hl,de ; HL now has start of table - ld (cbftbl),hl ; save it - - ; save current drive no - ld c,$19 ; bdos func: get current drive - call bdos ; invoke BDOS function - inc a ; 1-based index for fcb - ld (defdrv),a ; save it - - ; check for UNA (UBIOS) - ld de,msghb ; assume HBIOS (point to HBIOS mode string) - ld a,($fffd) ; fixed location of UNA API vector - cp $c3 ; jp instruction? - jr nz,init1 ; if not, not UNA - ld hl,($fffe) ; get jp address - ld a,(hl) ; get byte at target address - cp $fd ; first byte of UNA push ix instruction - jr nz,init1 ; if not, not UNA - inc hl ; point to next byte - ld a,(hl) ; get next byte - cp $e5 ; second byte of UNA push ix instruction - jr nz,init1 ; if not, not UNA - ld hl,unamod ; point to UNA mode flag - ld (hl),$ff ; set UNA mode - ld a,6 ; UNA platform ID - ld (bioplt),a ; save it - ld de,msgub ; point to UBIOS string - -init1: - call prtstr ; print BIOS name - - ; if HBIOS active, get version number - ld a,(unamod) ; get UNA mode flag - or a ; set flags - jr nz,init2 ; skip if UNA BIOS active - ld b,bfver ; HBIOS func: get version - rst 08 ; do it - ld a,l ; platform to A - ld (bioplt),a ; save platform - ld h,e ; switch bytes - ld l,d ; ... to save as maj/min, up/pat - ld (biover),hl ; save version - ld b,bfgbnk ; HBIOS func: get current bank - rst 08 ; do it - ld a,c ; move to A - ld (tpabnk),a ; save it - -init2: - ; return success - xor a - ret -; -; Parse command tail -; -parse: - ld hl,$81 ; point to start of command tail (after length byte) - call nonblank ; locate start of parms - jp z,erruse ; no parms - call options ; process options - ret nz ; abort if error - ld de,osfcb ; point to os image fcb - call convert ; convert destination spec - jp nz,erramb ; Error, ambiguous file specification - call nonblank ; skip blanks - or a ; end of command tail (null)? - jr z,parse1 ; if end, skip bios image fcb - ld de,biofcb ; point to bios image fcb - call convert ; convert spec to fcb - jp nz,erramb ; Error, ambiguous file specification - or $FF ; flag = true - ld (newbio),a ; set newbio flag to true -; -parse1: - ; return success - xor a ; signal success - ret ; done parsing -; -options: - ; process options - cp '/' ; option introducer? - jr nz,options2 ; if not '/' exit with success - inc hl ; bump past option introducer - ld a,(hl) ; get the next character - cp 'F' ; compare to 'F' - jr z,optf ; handle if so - jp erruse ; bail out if unexpected option - -options1: - ; post-processing after option - inc hl ; move past option - call nonblank ; skip blanks - jr options ; loop - -options2: - ; success exit - xor a ; signal success - ret - -optf: - ; set force flag - or $FF ; load true - ld (force),a ; set flag - jr options1 ; done -; -; Confirm pending action with user -; -confirm: -; ; prompt -; call crlf -; ld de,sconf1 -; call prtstr -; ld hl,biofcb -; call prtfcb -; ld de,sconf2 -; call prtstr -; ld hl,osfcb -; call prtfcb -; ld de,sconf3 -; call prtstr -;; -; ; get input -; ld c,$0A ; get console buffer -; ld de,osimg ; into buf -; ld a,1 ; max of 1 character -; ld (de),a ; set up buffer -; call bdos ; invoke BDOS -; ld a,(osimg+1) ; get num chars entered -; dec a ; check that we got exactly one char -; jr nz,confirm ; bad input, re-prompt -; ld a,(osimg+2) ; get the character -; and $DF ; force upper case -; cp 'Y' ; compare to Y - xor a ; *temp* - ret ; return with Z set appropriately -; -; Read OS image file into memory -; -rdos: - ld de,msgros ; point to "Reading OS" message - call prtstr ; display it - - ; open the file - ld c,$0F ; bdos open file - ld de,osfcb ; bios image fcb - ld (rwfcb),de ; save it - call bdos ; invoke bdos function - cp $FF ; $FF is error - jp z,errfil ; handle error condition - ; read the header - ld a,$14 ; setup for bdos read sequential - ld (rwfun),a ; save bdos function - ld a,12 ; start with 1536 byte header (12 records) - ld (reccnt),a ; init record counter - ld hl,osimg ; start of buffer - ld (bufptr),hl ; init buffer pointer - call rwfil ; read the header - ret nz ; abort on error (no need to close file) - ; check header and get image size - call chkhdr ; verifies marker, hl = image size - ret nz ; abort on error (no need to close file) - ld b,7 ; right shift 7 bits to get 128 byte record count -rdos1: srl h ; shift right msb - rr l ; shift lsb w/ carry from msb - djnz rdos1 ; loop till done - ld a,l ; record count to a - ld (reccnt),a ; set remaining records to read - add a,12 ; add the header back - ld (imgsiz),a ; and save the total image size (in records) - call rwfil ; do it - ret nz ; abort on error - ; return via close file - jp closefile ; close file -; -; -; -rdbio: - ld de,msgrbio ; point to "Reading BIOS" message - call prtstr ; display it - - ; open the file - ld c,$0F ; bdos open file - ld de,biofcb ; bios image fcb - ld (rwfcb),de ; save it - call bdos ; invoke bdos function - cp $FF ; $FF is error - jp z,errfil ; handle error condition - ; read 32K HBIOS image - ld a,$14 ; setup for bdos read sequential - ld (rwfun),a ; save bdos function - ld a,0 ; 0 means 256 records (32K) - ld (reccnt),a ; init record counter - ld hl,hbimg ; start of buffer - ld (bufptr),hl ; init buffer pointer - call rwfil ; read the header - ret nz ; abort on error (no need to close file) - ; return via close file - jp closefile ; close file -; -; Examine the BIOS image loaded. Confirm existence of expected -; BIOS identification marker in first page (fail if not there). -; Display the BIOS identification information. Confirm it is HBIOS -; and fail if not. Save the HBIOS version number. -; -chkbios: - ; locate ROM signature in image - ld hl,sigptr ; point to ROM signature adr - ld a,(hl) ; dereference - inc hl ; ... to point - ld h,(hl) ; ... to location - ld l,a ; ... of signature block - ld de,hbimg ; offset by start - add hl,de ; ... of BIOS image - - ; check signature - ld a,$76 ; first byte value - cp (hl) ; compare - jp nz,errsig ; if not equal, signature error - inc hl ; bump to next byte - ld a,$B5 ; second byte value - cp (hl) ; compare - jp nz,errsig ; if not equal, signature error - inc hl ; bump to next byte - - ;; display short name - ;inc hl ; bump past structure version number - ;inc hl ; bump past rom size - ;ld e,(hl) ; load rom name - ;inc hl ; ... pointer - ;ld d,(hl) ; ... into DE - ;ld hl,hbimg ; offset by start - ;add hl,de ; ... of BIOS image - ;ex de,hl ; get pointer to DE - ;call crlf ; formatting - ;call prtstr ; and display it - - ; check BIOS variant, only HBIOS supported - ld hl,hbmrk ; get the HBIOS marker - ld a,'W' ; first byte should be 'W' - cp (hl) ; compare - jp nz,errbio ; if not equal, fail - inc hl ; next byte - ld a,~'W' ; ... should be ~'W' - cp (hl) ; compare - jp nz,errbio ; if not equal, fail - - ; if UNA is running, skip platform/ver stuff - ld a,(unamod) ; get UNA mode flag - or a ; set flags - jr nz,chkbios1 ; skip if UNA - - ; get and check platform (must match) - ld hl,hbplt ; point to BIOS platform id - ld a,(bioplt) ; get current running platform id - cp (hl) ; match? - jp nz,errplt ; if not, platform error - - ; get HBIOS image version - ld hl,(hbver) ; get version byte from image - ld (biover),hl ; save it for later - -chkbios1: - xor a - ret -; -; Examine the OS image loaded. Confirm existence of expected -; OS identification marker (fail if not there). Check the version -; number in the OS image header. Fail if OS image version does -; not match BIOS version. -; -chkos: - ; check for signature - ; Already verified in chkhdr - - ;; compare platform id - ;ld a,(bioplt) ; get current HBIOS platform ID - ;ld hl,osplt ; point to OS image platform ID - ;cp (hl) ; compare - ;jp nz,errplt ; if not equal platform error - - ; bypass version check if UNA running - ld a,(unamod) ; get UNA mode flag - or a ; set flags - jr nz,chkos1 ; if UNA, bypass - - ; compare version - ld a,(osver) ; get first OS version byte (major) - rlca ; move low nibble - rlca ; ... - rlca ; ... - rlca ; ... to high nibble - ld b,a ; save in b - ld a,(osver + 1) ; get second OS version byte (minor) - or b ; combine with major nibble - ld hl,biover ; point to HBIOS version - cp (hl) ; compare - jp nz,errver ; if not equal, fail - -chkos1: - xor a ; signal success - ret -; -; Load OS image into correct destination -; -ldos: - ; compute the image size (does not include size of header) - ld hl,(osend) ; get CPM_END - ld de,(osloc) ; get CPM_LOC - or a ; clear CF - sbc hl,de ; image size := CPM_END - CPM_LOC - push hl ; move image size - pop bc ; ... to BC - ld hl,osbin ; copy from buf, skip header - ld de,(osloc) ; OS location - ldir ; do the copy - xor a - ret -; -; Load BIOS into correct destination -; -ldbio: -; - ; copy the proxy to upper memory - ld hl,pxyimg ; location of proxy image - ld de,pxyloc ; target location of proxy - ld bc,pxysiz ; size of proxy - ldir ; copy it - ld a,(tpabnk) ; get active tpa bank id - ld (curbnk),a ; fixup the proxy -; - ; copy image to bios bank - ld a,(curbnk) ; load from current bank - ld (srcbnk),a ; set source bank - ld a,(bidbios) ; copy to bios bank - ld (dstbnk),a ; set destination bank - ld hl,hbimg ; set source address - ld de,0 ; set destination address - ld bc,$8000 ; set length - ld a,(curbnk) ; return to current bank - call hbxcpy ; to the inter-bank copy -; - xor a ; signal success - ret -; -; -; -initbio: -; - ; initialize HBIOS - ld a,(bidbios) ; get bios bank - call hbxbnk ; ... and activate it - call $0000 ; call bios init entry point - ld a,(tpabnk) ; get active tpa bank id - call hbxbnk ; ... and activate it -; - xor a - ret -; -; Common routine to handle read/write for file system -; -rwfil: - ld c,$1A ; BDOS set dma - ld de,(bufptr) ; current buffer pointer - push de ; save pointer - call bdos ; do it - pop de ; recover pointer - ld hl,128 ; record length - add hl,de ; increment buffer pointer - ld (bufptr),hl ; save it - ld a,(rwfun) ; get the active function - ld c,a ; set it - ld de,(rwfcb) ; active fcb - call bdos ; do it - or a ; check return code - jp nz,errdos ; BDOS err -; call prtdot ; mark progress - ld hl,reccnt ; point to record count - dec (hl) ; decrement record count - jr nz,rwfil ; loop till done - xor a ; signal success - ret ; done -; -; Close file -; -closefile: - ld c,$10 ; BDOS close file - ld de,(rwfcb) ; active fcb - call bdos ; do it - cp $FF ; $FF is error - jp z,errclo ; if error, handle it - xor a ; signal success - ret ; done -; -jphl: jp (hl) ; indirect jump -; -; Verify system image header in osimg by checking the expected signature. -; Compute and return image size (based on header values) in HL. Size -; does not include header. NZ set if signature error. -; -chkhdr: - ; check signature - ld hl,(ossig) ; get signature - ld de,$A55A ; signature value - or a ; clear CF - sbc hl,de ; compare - jp nz,errsig ; invalid signature - ; compute the image size (does not include size of header) - ld hl,(osend) ; get CPM_END - ld de,(osloc) ; get CPM_LOC - or a ; clear CF - sbc hl,de ; image size := CPM_END - CPM_LOC - xor a ; signal success - ret ; done -; -; Convert a filename at (HL) into an FCB at (DE). -; Includes wildcard expansion. -; On return, A=0 if unambiguous name specified, and -; (HL) points to character following filename spec -; -convert: - push de ; put fcb address on stack - ex de,hl - ld a,(de) ; get first character. - or a - jp z,convrt1 - sbc a,'A'-1 ; might be a drive name, convert to binary. - ld b,a ; and save. - inc de ; check next character for a ':'. - ld a,(de) - cp ':' - jp z,convrt2 - dec de ; nope, move pointer back to the start of the line. -convrt1: - ld a,(defdrv) - ld (hl),a - jp convrt3 -convrt2: - ld a,b - ld (hl),b - inc de - ; Convert the base file name. -convrt3:ld b,08h -convrt4:ld a,(de) - call delim - jp z,convrt8 - inc hl - cp '*' ; note that an '*' will fill the remaining - jp nz,convrt5 ; field with '?' - ld (hl),'?' - jp convrt6 -convrt5:ld (hl),a - inc de -convrt6:dec b - jp nz,convrt4 -convrt7:ld a,(de) - call delim ; get next delimiter - jp z,getext - inc de - jp convrt7 -convrt8:inc hl ; blank fill the file name - ld (hl),' ' - dec b - jp nz,convrt8 -getext: ld b,03h - cp '.' - jp nz,getext5 - inc de -getext1:ld a,(de) - call delim - jp z,getext5 - inc hl - cp '*' - jp nz,getext2 - ld (hl),'?' - jp getext3 -getext2:ld (hl),a - inc de -getext3:dec b - jp nz,getext1 -getext4:ld a,(de) - call delim - jp z,getext6 - inc de - jp getext4 -getext5:inc hl - ld (hl),' ' - dec b - jp nz,getext5 -getext6:ld b,3 -getext7:inc hl - ld (hl),0 - dec b - jp nz,getext7 - pop hl ; HL := start of FCB - push de ; save input line pointer - ; Check to see if this is an ambiguous file name specification. - ; Set the A register to non-zero if it is. - ld bc,11 ; set name length. -getext8:inc hl - ld a,(hl) - cp '?' ; any question marks? - jp nz,getext9 - inc b ; count them. -getext9:dec c - jp nz,getext8 - ld a,b - or a - pop hl ; return with updated input pointer - ret -; -; Print formatted FCB at (HL) -; -prtfcb: - push hl ; save HL - call chkfcb ; set flags indicating nature of FCB - pop hl ; restore HL - ret z ; nothing to print - push af ; save FCB flags - ld a,(hl) ; get first byte of FCB (drive) - inc hl ; point to next char - or a ; is drive specified (non-zero)? - jr z,prtfcb1 ; if zero, do not print drive letter - add a,'@' ; adjust drive number to alpha - call prtchr ; print it - ld a,':' - call prtchr ; print drive separator -prtfcb1: - pop af ; restore FCB flags - bit 1,a ; bit 1 set if filename specified - ret z ; return if no filename - ld b,8 ; base is 8 characters - call prtfcb2 ; print them - ld a,'.' - call prtchr ; print file extension separator - ld b,3 ; extension is 3 characters -prtfcb2: - ld a,(hl) ; load the next character - inc hl ; point to next character - cp ' ' ; check for blank - call nz,prtchr ; print char if it is not a blank - djnz prtfcb2 ; loop till done - ret ; return -; -; Check FCB to see if a drive and/or filename is specified. -; Set bit 0 for drive and bit 1 for filename in A -; -chkfcb: - ld c,0 ; use C for flags, start with none - ld a,(hl) ; get drive - or a ; anything there? - jr z,chkfcb1 ; skip if nothing there - set 0,c ; set bit zero to indicate a drive spec -chkfcb1: - ld b,11 ; set up to check 11 bytes (base & ext) -chkfcb2: - inc hl ; bump to next byte - ld a,(hl) ; get next - cp 'A' ; blank means empty byte - jr nc,chkfcb3 ; if not blank, we have a filename - djnz chkfcb2 ; loop - jr chkfcb4 ; nothing there -chkfcb3: - set 1,c ; set bit 1 to indicate a file spec -chkfcb4: - ld a,c ; put result in a - or a ; set flags - ret -; -; Print character in A without destroying any registers -; -prtchr: - push bc ; save registers - push de - push hl - ld e,a ; character to print in E - ld c,$02 ; BDOS function to output a character - call bdos ; do it - pop hl ; restore registers - pop de - pop bc - ret -; -prtdot: - push af - ld a,'.' - call prtchr - pop af - ret -; -; Print a zero terminated string at (DE) without destroying any registers -; -prtstr: - push de -; -prtstr1: - ld a,(de) ; get next char - or a - jr z,prtstr2 - call prtchr - inc de - jr prtstr1 -; -prtstr2: - pop de ; restore registers - ret -; -; Print the value in A in hex without destroying any registers -; -prthex: - push af ; save AF - push de ; save DE - call hexascii ; convert value in A to hex chars in DE - ld a,d ; get the high order hex char - call prtchr ; print it - ld a,e ; get the low order hex char - call prtchr ; print it - pop de ; restore DE - pop af ; restore AF - ret ; done -; -; Convert binary value in A to ascii hex characters in DE -; -hexascii: - ld d,a ; save A in D - call hexconv ; convert low nibble of A to hex - ld e,a ; save it in E - ld a,d ; get original value back - rlca ; rotate high order nibble to low bits - rlca - rlca - rlca - call hexconv ; convert nibble - ld d,a ; save it in D - ret ; done -; -; Convert low nibble of A to ascii hex -; -hexconv: - and $0F ; low nibble only - add a,$90 - daa - adc a,$40 - daa - ret -; -; Start a new line (or 2) -; -crlf2: - call crlf ; double new line entry -crlf: - ld a,13 ; - call prtchr ; print it - ld a,10 ; - jr prtchr ; print it -; -; Get the next non-blank character from (HL). -; -nonblank: - ld a,(hl) ; load next character - or a ; string ends with a null - ret z ; if null, return pointing to null - cp ' ' ; check for blank - ret nz ; return if not blank - inc hl ; if blank, increment character pointer - jr nonblank ; and loop -; -; Check character at (DE) for delimiter. -; -delim: or a - ret z - cp ' ' ; blank - ret z - jr c,delim1 ; handle control characters - cp '=' ; equal - ret z - cp '_' ; underscore - ret z - cp '.' ; period - ret z - cp ':' ; colon - ret z - cp $3b ; semicolon - ret z - cp '<' ; less than - ret z - cp '>' ; greater than - ret -delim1: - ; treat control chars as delimiters - xor a ; set Z - ret ; return -; -; Invoke CBIOS function -; The CBIOS function offset must be stored in the byte -; following the call instruction. ex: -; call cbios -; .db $0C ; offset of CONOUT CBIOS function -; -cbios: - ex (sp),hl - ld a,(hl) ; get the function offset - inc hl ; point past value following call instruction - ex (sp),hl ; put address back at top of stack and recover HL - ld hl,(cbftbl) ; address of CBIOS function table to HL - call addhl ; determine specific function address - jp (hl) ; invoke CBIOS -; -; Add the value in A to HL (HL := HL + A) -; -addhl: - add a,l ; A := A + L - ld l,a ; Put result back in L - ret nc ; if no carry, we are done - inc h ; if carry, increment H - ret ; and return -; -; Errors -; -erruse: ; command usage error (syntax) - ld de,msguse - jr err -erramb: ; ambiguous file spec (wild cards) is not allowed - ld de,msgamb - jr err -errdlm: ; invalid delimiter in command tail - ld de,msgdlm - jr err -errfil: ; source file not found - ld de,msgfil - jr err -errclo: ; file close error - ld de,msgclo - jr err -errsig: ; invalid system image signature error - ld de,msgsig - jr err -errbio: ; invalid BIOS image, not HBIOS - ld de,msgbio - jr err -errplt: ; platform mismatch - ld de,msgplt - jr err -errver: ; version mismatch - ld de,msgver - jr err -err: ; print error string and return error signal - call crlf2 ; print newline - call prtstr ; print error string - or $FF ; signal error - ret ; done -errdos: ; handle BDOS errors - push af ; save return code - call crlf2 ; newline - ld de,msgdos ; load - call prtstr ; and print error string - pop af ; recover return code - call prthex ; print error code - or $FF ; signal error - ret ; done -; -;=============================================================================== -; Storage Section -;=============================================================================== -; -defdrv .db 0 ; default drive for FCB -cbftbl .dw 0 ; address of CBIOS function table -imgsiz .db 0 ; image size (count of 128 byte records) -; -osfcb .fill 36,0 ; os image FCB -biofcb .fill 36,0 ; bios image FCB -; -unamod .db 0 ; UNA move flag (non-zero if UNA running) -newbio .db 0 ; BIOS load flag (non-zero if new BIOS load) -force .db 0 ; force operation (bypass compatibility checks) -tpabnk .db 0 ; bank id of TPA when app starts -bioplt .db 0 ; Platform ID of running HBIOS -biover .dw 0 ; version of BIOS being loaded -; -stksav .dw 0 ; stack pointer saved at start - .fill stksiz,0 ; stack -stack .equ $ ; stack top -; -rwfun .db 0 ; active read/write function -rwfcb .dw 0 ; active read/write FCB -reccnt .db 0 ; active remaining records to read/write -bufptr .dw 0 ; active pointer into buffer -; -; Messages -; -msgban .db "OSLDR v1.2 for RomWBW, 20-Feb-2020",0 -msghb .db " (HBIOS Mode)",0 -msgub .db " (UBIOS Mode)",0 -msguse .db "Usage: OSLDR [/F] []\r\n" - .db " /F (force) overrides all compatibility checking",0 -msgamb .db "Ambiguous file specification not allowed",0 -msgdlm .db "Invalid delimiter",0 -msgfil .db "File not found",0 -msgclo .db "File close error",0 -msgsig .db "Obsolete or invalid BIOS image (BIOS signature)",0 -msgbio .db "Obsolete or invalid HBIOS image (HBIOS signature)",0 -msgplt .db "Platform (hardware) mismatch",0 -msgver .db "Version mismatch",0 -msgdos .db "DOS error, return code=0x",0 - -msgros .db "Reading OS... ",0 -msgrbio .db "Reading BIOS... ",0 -msglos .db "Loading OS... ",0 -msglbio .db "Loading BIOS... ",0 -; - .end diff --git a/Source/Doc/Applications.md b/Source/Doc/Applications.md index ff21c740..4a145533 100644 --- a/Source/Doc/Applications.md +++ b/Source/Doc/Applications.md @@ -69,7 +69,6 @@ found: | SYSCOPY | Yes | Yes | Yes | | MODE | Yes | Yes | Yes | | FDU | Yes | Yes | Yes | -| OSLDR | Yes | Yes | Yes | | FORMAT | Yes | Yes | Yes | | XM | Yes | Yes | Yes | | FLASH | Yes | Yes | Yes | @@ -402,63 +401,6 @@ provided in the RomWBW distribution. `\clearpage`{=latex} -# OSLDR - -RomWBW supports loading new operating systems on-the-fly. For example, -if CP/M 2.2 is currently running, you can load and run Z-System from -the command line. The `OSLDR` application provides this functionality. - -## Syntax - -`OSLDR [/F] `*``*` [`*``*`]` - -*``* is the name of a file containing an operating system image - -*``* is the name of a file containing an HBIOS firmware image - -`/F` forces operation bypassing compatibility checking - -## Usage - -`OSLDR `*``* will read the specified file, confirm it is an -operating system image file, then load it as though it was being -booted. For example, `OSLDR ZSYS.SYS` would load the Z-System -operating system. - -`OSLDR `*``* *``* will first read and load the -specified *``* file as a new HBIOS image and then read and -load the specified *``* file. HBIOS image can be produced by -the RomWBW build process, but they are not produced by default. You -are encouraged to contact Wayne Warthen for more information on this -capability. - -## Notes - -The primary function of `OSLDR` is to allow switching to a new -operating system while the system if running without a full reboot. - -`OSLDR` is considered generally reliable for when used simply to load -a new operating system (one parameter). However, using it to load an -HBIOS image is considered experimental and should not be relied upon. - -`OSLDR` can also be used to load "test" versions of operating systems -from files transferred to your system. This is especially useful in -when loading both an operating system and HBIOS image because you can -essentially simulate starting your system with new firmware without -reprogramming your ROM. - -`OSLDR` attempts to check the file(s) specified for correctness before -loading them, but it is far from perfect. This application should be -used with caution and may not work in some cases that are hard to -define. - -## Etymology - -The `OSLDR` command is an original product and the source code is -provided in the RomWBW distribution. - -`\clearpage`{=latex} - # FORMAT This application is just a placeholder for a future version that will @@ -476,7 +418,7 @@ function beyond this display currently. ## Etymology -The `OSLDR` command is an original product and the source code is +The `FORMAT` command is an original product and the source code is provided in the RomWBW distribution. `\clearpage`{=latex} diff --git a/Source/Doc/GettingStarted.md b/Source/Doc/GettingStarted.md index 7fff1c07..0083d7d4 100644 --- a/Source/Doc/GettingStarted.md +++ b/Source/Doc/GettingStarted.md @@ -292,7 +292,6 @@ them over any older versions of the app on your disk: * SYSCOPY.COM * MODE.COM * FDU.COM (was FDTST.COM) -* OSLDR.COM * FORMAT.COM * XM.COM * FLASH.COM @@ -529,7 +528,6 @@ therefore, globally available. | ASSIGN | Add, change, and delete drive letter assignments. Use ASSIGN /? for usage instructions. | | SYSCOPY | Copy system image to a device to make it bootable. Use SYSCOPY with no parms for usage instructions. | | FDU | Format and test floppy disks. Menu driven interface. | -| OSLDR | Load a new OS on the fly. For example, you can switch to Z-System when running CP/M. Use OSLDR with no parms for usage instructions. | | FORMAT | Will someday be a command line tool to format floppy disks. Currently does nothing! | | MODE | Reconfigures serial ports dynamically. | | XM | XModem file transfer program adapted to hardware. Automatically uses primary serial port on system. | diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index b84902e9..ff098d8e 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -110,7 +110,7 @@ $ImgFile = "${OutDir}/${RomName}.img" # Final name of IMG image (memory loadable if ($Platform -eq "UNA") {$Bios = 'una'} else {$Bios = 'wbw'} # List of RomWBW proprietary apps to imbed in ROM disk. -$RomApps = "assign","fdu","format","mode","osldr","rtc","survey","syscopy","sysgen","talk","timer","xm","inttest" +$RomApps = "assign","fdu","format","mode","rtc","survey","syscopy","sysgen","talk","timer","xm","inttest" "" "Building ${RomName} ${ROMSize}KB ROM configuration ${Config} for Z${CPUType}..." diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index 62c85db4..24abfa41 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -57,7 +57,7 @@ else BIOS=wbw fi -Apps=(assign fdu format mode osldr rtc survey syscopy sysgen talk timer xm inttest) +Apps=(assign fdu format mode rtc survey syscopy sysgen talk timer xm inttest) blankfile=Blank${romsize}KB.dat romdiskfile=RomDisk.tmp