From 9e61bde56a65c92ff67559f8ab94887f8aa57a4d Mon Sep 17 00:00:00 2001 From: bellard Date: Fri, 11 Nov 2005 00:24:58 +0000 Subject: [PATCH] sparc merge (Blue Swirl) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1620 c046a42c-6fe2-441c-8c8c-71466251a162 --- hw/esp.c | 42 +- pc-bios/proll.elf | Bin 152807 -> 132317 bytes pc-bios/proll.patch | 840 +++++++++++++++++++++++++++++++-------- target-sparc/helper.c | 8 +- target-sparc/op_helper.c | 8 + target-sparc/translate.c | 10 +- 6 files changed, 735 insertions(+), 173 deletions(-) diff --git a/hw/esp.c b/hw/esp.c index 6890bd144c..169531ff17 100644 --- a/hw/esp.c +++ b/hw/esp.c @@ -29,6 +29,8 @@ #ifdef DEBUG_ESP #define DPRINTF(fmt, args...) \ do { printf("ESP: " fmt , ##args); } while (0) +#define pic_set_irq(irq, level) \ +do { printf("ESP: set_irq(%d): %d\n", (irq), (level)); pic_set_irq((irq),(level));} while (0) #else #define DPRINTF(fmt, args...) #endif @@ -38,6 +40,8 @@ do { printf("ESP: " fmt , ##args); } while (0) #define ESP_MAXREG 0x3f #define TI_BUFSZ 65536 #define DMA_VER 0xa0000000 +#define DMA_INTR 1 +#define DMA_INTREN 0x10 #define DMA_LOADED 0x04000000 typedef struct ESPState { @@ -66,6 +70,7 @@ typedef struct ESPState { #define INTR_FC 0x08 #define INTR_BS 0x10 #define INTR_DC 0x20 +#define INTR_RST 0x80 #define SEQ_0 0x0 #define SEQ_CD 0x4 @@ -98,11 +103,11 @@ static void handle_satn(ESPState *s) s->ti_rptr = 0; s->ti_wptr = 0; - if (target > 4 || !s->bd[target]) { // No such drive + if (target >= 4 || !s->bd[target]) { // No such drive s->rregs[4] = STAT_IN; s->rregs[5] = INTR_DC; s->rregs[6] = SEQ_0; - s->espdmaregs[0] |= 1; + s->espdmaregs[0] |= DMA_INTR; pic_set_irq(s->irq, 1); return; } @@ -192,7 +197,7 @@ static void handle_satn(ESPState *s) s->rregs[4] = STAT_IN | STAT_TC | STAT_DI; s->rregs[5] = INTR_BS | INTR_FC; s->rregs[6] = SEQ_CD; - s->espdmaregs[0] |= 1; + s->espdmaregs[0] |= DMA_INTR; pic_set_irq(s->irq, 1); } @@ -209,13 +214,14 @@ static void dma_write(ESPState *s, const uint8_t *buf, uint32_t len) s->rregs[4] = STAT_IN | STAT_TC | STAT_ST; s->rregs[5] = INTR_BS | INTR_FC; s->rregs[6] = SEQ_CD; - s->espdmaregs[0] |= 1; } else { memcpy(s->ti_buf, buf, len); s->ti_size = dmalen; s->ti_rptr = 0; s->ti_wptr = 0; + s->rregs[7] = dmalen; } + s->espdmaregs[0] |= DMA_INTR; pic_set_irq(s->irq, 1); } @@ -242,11 +248,12 @@ static void handle_ti(ESPState *s) s->rregs[4] = STAT_IN | STAT_TC | STAT_ST; s->rregs[5] = INTR_BS; s->rregs[6] = 0; - s->espdmaregs[0] |= 1; + s->espdmaregs[0] |= DMA_INTR; } else { s->ti_size = dmalen; s->ti_rptr = 0; s->ti_wptr = 0; + s->rregs[7] = dmalen; } pic_set_irq(s->irq, 1); } @@ -265,6 +272,7 @@ static uint32_t esp_mem_readb(void *opaque, target_phys_addr_t addr) uint32_t saddr; saddr = (addr & ESP_MAXREG) >> 2; + DPRINTF("read reg[%d]: 0x%2.2x\n", saddr, s->rregs[saddr]); switch (saddr) { case 2: // FIFO @@ -278,11 +286,16 @@ static uint32_t esp_mem_readb(void *opaque, target_phys_addr_t addr) s->ti_wptr = 0; } break; + case 5: + // interrupt + // Clear status bits except TC + s->rregs[4] &= STAT_TC; + pic_set_irq(s->irq, 0); + s->espdmaregs[0] &= ~DMA_INTR; + break; default: break; } - DPRINTF("read reg[%d]: 0x%2.2x\n", saddr, s->rregs[saddr]); - return s->rregs[saddr]; } @@ -317,8 +330,9 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) break; case 1: DPRINTF("Flush FIFO (%2.2x)\n", val); - s->rregs[6] = 0; + //s->ti_size = 0; s->rregs[5] = INTR_FC; + s->rregs[6] = 0; break; case 2: DPRINTF("Chip reset (%2.2x)\n", val); @@ -326,6 +340,11 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) break; case 3: DPRINTF("Bus reset (%2.2x)\n", val); + s->rregs[5] = INTR_RST; + if (!(s->wregs[8] & 0x40)) { + s->espdmaregs[0] |= DMA_INTR; + pic_set_irq(s->irq, 1); + } break; case 0x10: handle_ti(s); @@ -362,7 +381,10 @@ static void esp_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val) break; case 9 ... 10: break; - case 11 ... 15: + case 11: + s->rregs[saddr] = val & 0x15; + break; + case 12 ... 15: s->rregs[saddr] = val; break; default: @@ -403,7 +425,7 @@ static void espdma_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t va DPRINTF("write dmareg[%d]: 0x%8.8x -> 0x%8.8x\n", saddr, s->espdmaregs[saddr], val); switch (saddr) { case 0: - if (!(val & 0x10)) + if (!(val & DMA_INTREN)) pic_set_irq(s->irq, 0); if (val & 0x80) { esp_reset(s); diff --git a/pc-bios/proll.elf b/pc-bios/proll.elf index f6198f4d60c4e1e47f5ac8f371b5a0c5a6ca9196..21c739cac684e8db33020c48e2716f586249955c 100644 GIT binary patch literal 132317 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
    JEcY$@*uSXZPFfTNXqC+ihsSQ}`KP?4_Mt-Z_n zzRtf&`;O8+`mmWzJ>|sv2z;lE|Dq?K{VC@q+Tv-Qv@G z=%bnxOWZ%q6PgHq5ohn0IZh+~rZmI)&cqpG z?f9oX;-ScEXVX#Uo)I^;kNp?w3*{0?)K|%XNzI|)p zSF1JCK~L|Ct!)pPI<`d4j5PKd*0zeH|7goala=scePMkgShhY`w#Lk(F2|^BhUW*A zs|uE5|0MSFMaG;Wrj_bQwx;cKp2gm$qf9Fv&&Zc%(4Gcl+&*mAzVoH0KcgSqKTO=j z50*<$%n6vEdpdd%9i3i;4yGTQEc(J<;HyU~w9fy{Fgj^?QN9ZQ<;43mbOHW_&eq zL#}K1{*`!9wpV49E?+4fBg&1b;M@#-K3B+Q{-^B2P5DqZ^Ps!Oy^xD4$XJNH&q8PUZzX)&6WES={Sx z&4=fYxreNe)TmF{H2`yYVji(F8C%6XA|KKEw!nFSi8BX`f8$3<&GD=Ak!Nk$<;;;t zKNqLQ6HaV`HmI&~^y1a&#OPnKJq~9EtXT%lu>yPbkwN2DrDHB@WHW7!Vjpu|>Ydhv z&BqrwI@7S_H7C*D3^Hh+V-E8C1A3i3>iKs>aWH8Nd(!7)iuPpPkzdx4W8j*I<%FlYplwn9b3XU37z;*<{izIRYo)=Wo8_J|M8o$X6&Y<-S)ZGU)6r(U-Q5bLiOEx~#RM=v9a69=pldG|K1<*^@b8%FstzeNtyT zC&P)@f!bHA-&~wohhFMWFV3t_R~(ysYjI}7a7AX_nZ=onZ!gYlIn0aCpGu} zalZ82V?H{417Fv?!meEg@tKF4G-pal{_=-cWH--w&5?c$t?kZ)M-Gwt6&+Cbm zYo1unnzXjVe0Mo}s>~~fSoe-zY^oRw?b#==@N@p6@--^ABE@`Xfgw()Tr53337=#Y zV_WQd%To2gvK8z3GoJ@Ox2LW0FYM_lG~hFwA=Yc`|K2sJYU$=##(c#obi$mxkkVYh z_Zh|%*4^b9rQf0SBlwc~r^=y&Wuw?jagF_jyRud`|hSABsRwp7p>>=2(B3i2_;dHzEOe=Q{k-3y?sdhwnFmLP zqe(lD7!D_^$m^v(oiWX1P8lI~)Tj>l)x!6>6U1)ni>2*a>%CJtQz-f~=Q1|t?ukE} zQ~w$>>Qk=v*Ut4R;&)kueQ3rD_DNZL_*<-#O>Hv0hnaIvdB)O?6_PV0$qJN+@Q zbG5PvzQ#E{_dD8Iw|n{c#WeQ4bF$%^iDXRW?3fWwPGem(f&a5tuJv}Z3co;RCt8$Q z^}2^sb7QXg5;BLzryHaGlAo@#vrsBiXDZHVl5z5_l1U)8Aq!wLHr_4I#qj!9_z#hM;gJ)DS`Fty& zS^YkI*HfOovWU_B0L`zV`$#VG>Vz-vTJa!lDPv5l+AGysSASD9yCii9 z-&(#i`PT8B1)s-xUMzdiFXzi1^vh9fqP>)cq$z)r=M0|q9W~AIuuBE~i}}xc|D~w6 zDC+|Ck&9guk^Zn(h4d?(k4Bj**Uq2Nnh*Hg80U_xvFl4>)An&QGNC(R*kzjV<7VV# zH&al4`QRMJmc6d#^md<2u`K6|*twMIRGg4c(U#A$4zc}+*inJKD2j2{KuVFUsik72k5uDlR}rzIUjDy=pM-$(J&V(JVKd0vAoKZX-=d(rAvw^*gFWZ}nfCP;pkBpZ+MpOT zo4BKS4s+wOYt?Tw_o2R9z5TPY9_c{yf~adgEdR!b(jPX-?9jz+oDEnXwf9Cze^mLT zb5F>o+p$`FsOv8D_IitJJ_enuF?l8`K2)oDk~6Q4{=vP9Ja%NS!_wb^EpED5L(t-5{kE9!IB=cMW}~FjVa_-!)pN>6}OVamKr_FW_gFft>O}0ZH|CC;otuOkk-)FQpJ3mwFRI@k0+`0W=I`Yvh{Qef7Ev|df zlcRoGJ{tMxnAR4GS))<*PndroM=V|Cu!eFJn{+QsdW#@Od=S&a zlJS%|s?tpjv}NKI)DzaHg7h=f87rVLp^JM)Rxj+L7tRzcQU!&6>XQHTBow+L5ai6VX8{v{j;I{-%BZ z5OqfbvNc}$M|OknmL*A#%+pPb)}?!PK|OZ6>U z#)yBTc*k7;wQntTU9WOU6COJ>YsB||Cqlb2v~QorTkh2M*3hoYX#3$>=ikBO>+I3j;og#*xgXgTYxgft=?q`8{pon4+CofZKJ3f%Nyg*3!}tSzS^HJcjVd2Blt#|_KjCLZz!H&cWX=JybHZpAE7_#E}!jB@^{+L{6BHB1wVo> zx##q0yD39h4_zL6Eh~lgE z&+Wbf{KJjtTk9jzFH*Wc9xL{Je$3<}ZYE>s*Z<5qN%smqKh9p$gp<|$Gg%x96>kpN zwS)P%{BZ;y#P`@YN~w&$=ewYVc23A9$Uh%C&R7(G-x-k}pxaL0kD?ptib||5Rg2Yy8ij;BGDaY9_+@mT&yXRor4+wR+cDUh`=iw>`gm z=X>aILs2)99b0Y7MG~zllc2AtOwyREil9lPx0D{zPRJ!Y{}h}_4Y8275-uW63sO-x>K0YT9^A+4XU$Lrpc($ zymc!vfO(&@WhjxXr`~XOiK)zlSp%(iR9?Ps_2Tu3ciNFT$Nk|@kr(@z?CH6c@`*9_ z|D;##2MmYVqhNhGu}J4ahmGQj+Jx-PnN86@II~$mpL=J0seJIP#vdzJx+ct?Vs)v% zVei>m|5HYLE^~@<=w9PkEMKj8R4$gki1l1paa3jZ5$ip~*=CH^OJ zH|0YkR`<3KFUz3&TzO)pY)Bt1h(~T=V&%cQSL4|wdCkvRL%zy0-YWo3O&KUQ0d`qvzm zae#fpO#SgHyBDGRj+L4Z^DN78A4;}J$5~q}Pt`xdy|X8lr`Vfy%Ep!$a~z#3e*##%Q*u(C)~ps z6G5jhL{p(0`wZHHeKE?#Yu0G)I2v7Z*3Wy7Jof*b z4dktK4<{6tiscxe-`+}Iio7e4GmD(w9t-uVAIT@F$F2>CpNU*uDx9fvc0v1R)cYQH z1vQ74KmP81Yz&`y+cQ)(%_Y!QQj>0<= zf&P$F$=r!KzGD5^MvW;?HZ$&5IcpA7y@FoN#RtNtINNk?Aog#Gr0s&_+v3TvZH0_Qj&}^Va)$Rjezx^XagbKixeUPHY%&Ossbg z&o4AG?$FmaN_Oo>)9&tEB(a`0b!m>{w>Oqsl-QtjZ{Ab*WRCLO-JhI{CN`+evY}sY zt@f$iL#ax}oPSiB_+y)?_dBRZGBS7Tesg(Z)9K~ycT6Tmwh+%XmfLr9#8WirM)RZ; z=N8!52_dWIqNTdnI}&y3(C@{$iya&9-NUH{`3gRL%?sf*Z-7?-U+o_5cmsPppz>Pd z(7qd(t9(hg>V=2qR&{DO=>tk9&A?ZC7L!Aai;R!>e@gk?9v_D_qf-OE#p3h@+VOwj zpWVK%Zz}pNG>e%9k^hcV?fL_1(Ys<*!p4J^9}~ zCHd9Ap^anXUGPyk+S9~&i&wX813pN<|DV}MNR6VyQads}oh|N#V}shE+SK#Vep9l^ zCT_;W*oWLTnmiw)o-R9o?&!XYHNqe`$6X7K5{ET9O?*7NL zCeob+V!|}(Rx+w@oD8==#=hMqbTiHK+cVuK%Itc&d#1zOGdwZ~@2UyzC=4y(ei*VT z)^Ik-95kc-?^*KI@$jpI)M+ju|3o6G^?0xLX*5>k5*hsB*MFzJrFt2!(&|@r@X$OM znY7*yi4QtUm+Be07za`_rp`;w@Q&wv-2>B|z3wNN!yll{Io=iY<6p%=@4Z3IC78#Y zq5sdW;dv{QJevCUDcAftLvgke_~hWL zJ9xh(2fiOI$^q@g&}x6Q%A3EN*{aj$GXtB&$YX!rot8z8(t2we1{i!Gg2ybIE$$kHC*>bT@)Nzswg8(ZRXCuNaac@jG*?vEq4WSL;y zFIlMjO=Pfj52^0D1y2(rLkDKQmS+80i4Jsz8lGv)B=yEViatKP=JYJ=Jquon7rLK( zlyNzpUGQ33zJspnnF}vGNnPws&SGvni@v*xxv}Qj@^ihfz5OBXszN_2U7LBHGHhVbtMpT=_sPxY5B^tO=pq3;DphG#ml z9QT^&4^`~fZpP=A=int8*$A4^;fwRkxAQUb`zhZ!z9jQ7^p%`}t4}W+Z%RE3-BIZj zeRt;;v%k`m8kF89Dl(hWwW-+2ip&Oo42U5!{m2Q4zsls6<-eu=n7hI`BAcol?~NSc zZ1h{yM@;$W<{C~zNw@tdm*{93m94$Jg*E)PfbvM6atC)G`^cm(#Q${OuuJ~Om=#lu zr7PJr5cOV^iyF zZB)A^!-}JYzYU@8U@v%(dUzJi%VgB;O)`Z$D&BLGq{`*hE!N?j~Y` z+Ws%sJI${*qk2WJ@~STv)}EV{Lvz-1^{F1&T(+MGw-0E3KrFEDo9aDxf6lQGc{y`k zkd@4`MN!_;eDdyw<|W#1&!dWYq<@C=GlBF)q~FRsSNqVGp157S^VUy07vra9Y+XL& zW-@voeS!P|JObVfK2LaVUA~-lMKy;QkL7juo_N6hyI4Lt$p1Vu7|Rr(k8w|b`e1l> zDPF~#BZr^VKa6iavNB)Ko@I=^su1@PbMPtG`S-(1QuW+*Bk!2XR-{d)Up7+Ro~^ul z8zblk9nDQgc7GLl^gcl?dY-L)1^1AtXPz`eWrjGr6Ak_zN}390DczgkXvY~N_K z{g*vLorgKP`^EmeeQJFsoIP_V#=d-<^8bN%)y}=kJQh}ePMPDJkTNE6_K?w9l{=~O z)nu5xm5A6VdR0d3r)D-`MC#P)M%^J<4=mi+X`Q;h59_J_&i z9XMn-oG}sC{4F+|b7FeZjIgsvU)8!lO#iu5dxiLyeiK7yKOxfaox*RZ|I5U+dhi74 z5uVri>A$aZ?t<0tU*%}t`YG}{c<%$Asn6oOn(r;bzr*l&fjh&@qyCw>iNj*a{Hc2= zrFTT?hoepda@hO)S;p;gU~g}dc`$3yacJOCCR*`Oee8YeE{6L4)zrh80l%q0Iq>QD zBy$QUL>*5+j}H}cY41$8lDwKfyxOTJ9@QV9UhYA$=E`#4GR3_Gd*6)td$vk4=u99N z&cb_5jy&1yLGmh*Mfab1C#`T)?SI0`ky!}uX0@F*Un0J=^Wb>cR6Y13Jc2%fe7rYm zV-@ea5vvy2b~}MIM|Pxs2RnWRIUA_AQ@Sdar@blR(8ZyPLsQNBg7UkM>V0GAHx={c ztDLd%`vmHTp}*z6lJv5{=hw{osXn(LbLak5se0K;^&xkXyN1rmsMCnO8h^%nQIxq} zWqdo=(bmQ1+luaLowcQHO&X&;>w3z4MCHIA5l$Oye2#F})L#oVqlaqpcPpRgHox3r zzubL3o}fO_?ey_WRX_L_gkux6Yqsn{9rPPJ22=pE&L#G6TZ%l5S$faR`iF4IgAUo} z;XPG!#~FTA6@AmMTYJ{^e!bc^s#kjJvBGloAL_nEX`_qWbNkhW+-KMGy_4@teDC+4 zf`?0B;s4V2ke{#Ti-p`BDZZ0@GyYR>t^^kT-{M=W_kDQZ*{GO<{^IIu6H)wo5qsR> z4ErFa5*_kR#BR=_O%?jK{wLp)KjMd1vc8_OM~w}zS&9H-W}xpFerVV8;M0U_PJ~b5 zL*2ry&)v98$8 zTBY}J-77y~{bI+lLv@)gBXy~#(Q`Zcw{uXf@qpO}S|I&Dp!bSYx8_9LqmO7T`&qbs z7c|_hFg4ITLd?*5IjR1`dupQ5eUK*Zjx?WQJp4K19s6QSbNt=`abezr*nB*ax91~@ zcj+&2M%Rc>a35pes+98e8xwX;q5PpQVLQfA?m9Ozb~f;J_}Ve{!5`=CJ^hll?sX5R zP^_tY6}w}9?gk|*nQ!pSm_^*>(m1VH$Xc?Bbk>x4(Q{uqIafZpl6l7W6Uo``Hy!Qc zMAA`Lv2~%!soyLAXu_Ry5?>pSq;!v|dLojF9k?r7$@?3MgN+C8HdRA+B`d#?b#B1yu9fJC(W&gF3NAfpIPW5N^n>KDl(iKKy*dpI9m8-DJ z!9b|4;0eai&+g<%Y`fSB7W=CAaz&{wDTkw0@Z|1C!UoUcJ2XX0B{r&*9 zmCsX8HGba2+%@vl-JE}i3x%SuKjoNhnF zFrFEsT;14$RLk)N{8q_=RFh&T<(g+h%f6G!%x2Gsy`%O!*+UrSokHDTX^~8kq%9a_x9@cY|7#bscNky)h^QF>`~B8Cr)}D zX?3JEf;WO|@2LsAMY54*pCQHswV(Rq;&GBXs4pVjAeYLEwtnm;m-pLKktbJXG^W_! z@>E%U_v~`3eujLK=Y-^O+%oQTPeZQiRB_F9Y|!u?nu5qObk7-z;X7(3TKsf+#N&qHQZ%(r|pSl z!=yD7$1bh+CrqAsen#c&e$TjJ-u=*8TjsdQH&Cu>aES@){`B#YwRX*|_7F#Ry;_k; zX?>le|G9@u3_sX-sv>hI=ZYsaRdr4NeRx zBVG50J~U38AFj$2p5UBA{?B~v%rNhQaBqpYk3Qy~MaFM3m4E2X3C_(I z)ZX-$lGra_oxa0VomBf0$=F0VtC*s9!>YNHQmNn27+ZYoRCckg_hrpLsdLiORvbJ1 z#41bkGHna_?=b!~x@YcJc!rpzciXKVqsI#0l@5zzR?#Q$1NpOjBaS~*4;i;=Pna0& z>7h7_Dsr#@D=&YU{#8K=**L!jN=pB{fVU=`HM48{=y!pv!`lzslU93 z-DCfPzo=Z$U*7wF(O(w6kG~xIulP%-#9w$%?_cdN^Zx(lFIxZLPjmnBiqyRC(?9=m zO==$JG1{A8&XbkzUxO~^oG#1r4xi(^S(ayiiQnLhW~&G9a>Mcy;?nGg4CioG*yuny%9(#4=?AwJ06K;62EMNW5-i-WV#%R=(?bUdiNj5~7yFGH52@N{@7T{&X zkCtqBY)`}t@_zB2E0Xvs@%V7WjIzFhuj6L24eHl>qj`S+nYAnFZ)XPioj+4n%%@-Q z9yx1W_>1=YaTD1C|3{W2%Pj9Ec+WV`Tls1)<^C77t=ONWpC8OfX$?5{;VZcJc7^>N zz_LHTBE>l8&V2@*?Tx!1vif??>g#H&FXo8oEAl3DX6b7(>QoPwNoUFMVAO=s*_w`uULRKtI#4dFWgn{I2A2`0r`T zh6gMCcn*KjxU`Y7|Etbx~*0C;xBPH@Jv4XG}=%C95vgvwvkiyk~|p@B53gGZ^0;*?o|48GY#8j+IAa znR)oY+yjgGeTxdmc?$dCj}0%NfAtG&8{bPmVtkd)$FOVUyG^d%)1EfE!dQKe?HM$K zO>RB0wBC-Phu4}Hu-)EhM)yIgp242(VLNtS^ylpBp_kd{F|s%0MA-L?jJbnmEHkEl zP(P}E0xh;WBRbW&0z30Q%3S(c?BUCk;mJK~&G82#MzMQv89r(I*;*qS+Eq>2+z%>} zb4%?EZ`pXx52%Cjbgtj$9yWJRj(AqQLCWoEw^O@^La;e?M@q^d{nqTMDNezStU zgFf*C%}KPcR?BntU^H2InzEyg8+ySJ?Xd#)9Se#tD*qPco?MX%zj&9+-afJ#cdpN4 z4&~?mKy#cK4nE~XWE0lMp%<~wa4b`HbjF&q?qOFp`W^MH!Gx>d+?e|;ed+7GmwGUq ziECbuovN@;gL~MsmD*`-bvQZ0x79`1D(=}TV#eqnQ*8BY#O$qbA`f9N`dRf*G=r_O zGpP4c_Iks|-L(drL?-t{%nOG5@#y|Vld3+A&5u)d5F1Wr2F;$36MHi=CcOGIIC9O! zzVYuzQ(AM*z$U-qcT+VNs^mUU1p9};tq&CKPZ?rjig;#3FZ%;0B}?^-8uu5`=M+nt ziOJYsvQ6;;gWVo~ClyOIccQG91x*6`d>rT+? zU*s7P4e$UoAs_w%aJdif0G@Kbr9HC!%TnxjJM6r@zFB*^^1t)%+-B65y!ph)RTPM%lJ%ux)VgfIMbzpB2tZ>G5#X`fCF`*B)E3UlixadNS9qQ+@17X+0L_z4H4xi@#d>az`A=u6HyRGjC--F2TLAf8<>h z`))-Q`zz4c_Hk!1tG)8-(%&AGev5Ug4*DN=EPnlQ)#J7G{P|YRr4DWTha>1Wsdvq& z_oAVQ?&bacM{0~Ao-h}0Of`@nKHZp#zuAb+d5;5qROTB~y4Uhs=UMt~FL>^!4Ev*w z_6oRfVzdXhSZ$y!-2b)jxolJ#_>JHzWz+u)zvs31zwz&RMUcxut|Wa(zvpGYtPzyX z?|(1YK)T*{Doxk#f6)Q$yB?+K{QlR1Uea~PqBLE=Zs;&LDF@f#HLS# zlbqo$7?pl@7k>4&|9f8OQ}+86_kR|=RBCg|ZRdBqUdG>_#y71USP$tPExl`tPt89? z-fqo3e1Fs39c=Nd*Wi^a<+T7G8Jg}?uxCtv{l!-nV&B8WcI_pn>oSo{op}A?_s1jn zA!{_?hp>GW^yumr{63JQ{gYZ?^>6kYId@@?z}~lyJ57IhO{)Iu{BClN^oMyTh<5`* zf3_?Wf8?4B`-)D(pIwvT9g0*Ke(Z^{cH_5ydFQ;0bD)NwEy?pc0Zzjh@1P5Rb4flb zJi8=QA^iA~d`viXf9~f?GMr~w`RHa zp46w%(*=r9`2Yc2{=sB83N2(KjD+c`ub=5Pz=$=l~_{O$T z$~Y4n+g{8>+OqI`=)}gh?+-;XZ4;3-XHP_|&G|nQ^2tLH#*0Il3eF0DlZiO7lavt; zek==ugh|hm{onh!e6gq}Lgt0f1r1!#zy%Fl(7*)^ zT+qM;4P4N`e@7bFaLcFHuXh&qJHKg(Uyv%^`~Y4eo7p|5AV)6uh|zo)xvm9z2sO=Rx+!2JHMzO5eP z>w08Q6_q26(skTpbZSU#3&)M1E)w#;K zcWd8()3R&fu2uT;*@c~-{G7A3XM0=k`NSeapP$FaY4eITJN;X~)P5oY#q3JYiBRbTjg}L?bw01s-UY&NmZuh%H#kpW!;R8~J{vbVeOq_j)4$3WU?JinZ*Z8zSp=WRExZ+7~+`Ul$j1}JLFiLULQwyisCsVVXxLr)*37-$>V z+3zfDY2DTAv~_mUyp|Q+p0@a(&y5#RJYgT?5Y6zAu#eAJugYs5Ym&t8;ss zrv$&<1AT2f`nPW#Kv~<-UC&NhHKjIN*ekNpra0ZrSC? zAvf;wJjs#k(doMG?b_kA_w3x!+17X8xpKDEcgtI+xM^S4JzM)}i)TFKL^my~9Aj>w z%h^8M0>bBpTd#M{rCsTq&j;4$T;6gIU-zjSoVB-q>RRWXwt+5(Hn!boGtSXn>1b{DkdiJ*6)8$k9vB~M#T#Qam`+Wmlz6A^RgTMJsV&hX=UvIHNQ_^>K zo=aEYTjku`&3VP zW%baVJG?Qvr(>XNfciGxDD!Nj=ipWd;Nj3VuQdOEE# zy!7knRokF*=6}prwwHeGEgNi5_v)5nZ(EBv?QNY-(Y01NTNuXdgn-E3X8{DDYus&Z zRjP?|S`eoX_~;PeU-9YKvh8jgPZ$h#Fx}AvM{0I@yZSnMcP<-f_hs7Nrucjgmu~d& z9sO>GIj=pxHQw2d;OFn`zt7i;HUIk*I-g$ZZhj%^JD)G*we>N24V=$4rXPKF{`UCN zePydPKwnYr51_k#!)-*Hfj$kU1ART-oKo%l0Q!5nd)nK&-@k~887~g*4QwS`d-*rD-P?96GZF@D zo6t_&@9JB+qiwrK;7tjQx%IZ2f48}Wc%a6YZ9n3g)9#xAn=>Gjh*xgJY_mKSo5 zNyZFtC-6GHD}gWKYd=N3ZDE4g*4MFx7}c!|Zwi06Vuht6@ZHnZkAB;C^4EUC#^vcX zAnXgP-W0Y1DG%5h$cKHOvNXPuEIi$kS{;Oq8sRYw8^>mdUD&h;jx|_Vph_ye(LOzz zCJTqk{_}VeD8rXi74sp!5@Ro4=?@>$Lq+s8F}~#j_@FP@^zkfkCC{UU+*j4Y2=FMd zXayeuuJd8uXZWi8Qt1bQC8J>c;j4}h?*+CMlI{Yl`J&kc+~~u-z)e1!0&ezUVYE00lv#WPN6>B+Vr!O{@@pEgZP2bYB^`0#d-%H^60(re# zcUfr5=H4FMigfR}rT@Minh4zMKex2|`To=PKPvaxm-&8@1ecAhojeG^AUVCwx^j_;j5oCQw#@F;MnV7~SvTXeJ$h?nk=TCD{5h(pqCN~`jV*iY#tm1pR^9ONYkg+^L%Nrgo_uMw(~kjPI}Kdt$@<$dpr_q7 z9}+%k`#0qC=mqoRTRI8so5YK6Z98|JFPJB{7!h9aV4ufPuqt5uH?6kR+g$z>{qdY1 z7Bg}dh}*wE^zC8F z^W~ogMy?@v?>hqQ_u-=N%GdV|lTQASVQg#?4PX0_>{@8E$Tj`lZTEJO`X#SlpReE3 zsBNz&e`)Nl_b-=~?#dk{m!edDrz#U*->X43xa=^Y14Y|Oo zBg^+O;3?(XclPxUSl9Oix9ebtL>J3?PySZ$T_nuozhCnCHW)ey4FCNt@IM8N4z1j; z1IPH|gz{-L~lS!zKPOtakfy4?hMxg?Dey7mK~w7?<30{pJbLUF6GZZEkbiPP0JaOiH`V;v=?g`b0 zKAw1~gyv`oO{Pc#o&6N;IWTZv`_jIF{-vD*eM{N9DCXPrt@rHc>FZkB(aHELIt3q} zU~^k{zhKhaKA?Qt(vtF5t!Qa!UfH~(`O4;{Vqwdb@EhpcX;}~Sb}ePJ*|wA&iGel7 zEdPjCVSfkf&K*k^^!0qvcEpt}Q`0+ox_55h(QkTsHKp!1%tc0_2#E?ft0y1cTK-Bm z&uM(o^JP%VUUM&&N%i;twm-%c}uUk0AR7n*%_JmMalUeB|}gNK@V)_U;1=XuWb;Ng`# zRfe*|86LBISaRAAcCSAVZ#-1UZ5-o!s*t-4AHS`e??BAHs zj=rvTcG9(6Z(7)YnRX`FB4v}QYkL>tTW7P~Tl*6E{-nB1+a|x2YRs0l?kUN)?byO5 zBvIAr>hEY{BR~stcE>yH?l|l156o|7Q>%|X`DT`prC)y|tk~%HeV*G?Z&~`W^ZnaY zeu2(CaNo|YJ-wg(TuH&U{?5(!Z2A1Q?yDEyd2Xe`ShlO<-u4~ao0nZtLhF>k9|+D* zE@)hM*P+_EK^OkPtt zy$WvzO78Yjr&sw4A*M9-57gJ22gG`9=f?FLnE=el>R|Zd$v_g7q=m>w&8+H$=oN7DPloo3W-JoIPXMRQ;(hmYpJ& zCvjL!P9;UQ`o^2@=xbjsuzuwxI9qV_W+;~1l7J1-%{G-nn;(cqMf*VN{>^^sYCxJ{ zQ*RVwD;Z7GKc%Xb*F-HSvCe7Df@+|ILGhx6v*%B0X0^B}&5GkqpjTga*X?&DEwg$U zKi~~b_ix^;e;#crmGUYkiH}WvpgpxK)ovSP!Bonp-GOWZA%vGzzfUWX1wL>i8uOaDxBEMFO??ft2M-7om@M?rF&PZ0~WfHCnsZ zH;7qvHUFxsyI0cnQfT;oOOTS}D=Yyk@ZHp2I~EP=6k zV5_EL{;AVuo!@g{tD{v;FpKQW_3LisP`dL9`_B&PUa{iA_QDQjJD2mvmMP9cn5VQf zGw`=uwyM)7utOrPo!4Yd+KjT3Hk-}-zkBAaUL$KDuI`kz`t7pZ+pn-Q+^f4 zP=`JEFMbL98Z`DSh$E>A;B%jmb5QwzbdC985iLo7)8pgil%yBlKRsIGrT0C^&bR~5 zbD#5NE6%=u+1N#1`W4^6r1RdtZ0zqopzK@kpI%wvrI!zJtX2n4ySXNzM)b#iDlhkF zA}67_+U0c(KckdpgGaOLZ=h*|#{X3Q<~&@=bDB@z^EHkI?|Ofli&rK!icb255O42(^(zleP z+wD>qO154^6efSoh zSs(s1&oLiXTVE_E=kY(@CKfzd{}jz_Tk(8V`}Lf9fx9mI`xLC zefU=3cu9Jl52O1~LrJ<*0yp|FvW1#`_%pyQK70r8>JplDCF$#ZSp1R6`orD8oj%+F zJmABmh3@xZ)s^;P_S8ceAKn6-_2I3+MIC+~c*0L-^FQ>m4|fBf^5Gr8Z}@Nz@T3p- z>cGy2zW`kC!+pSx4|7)_-0H($0^Z=mzXwbmwq3{`hL?pobqyEW#qNK2m!G~HxY$O~ zyMDU(4Eiu3BD~j!#pkh-^t2C)=dcfp=RqHKfuHta@yYn`mw}J?F!h9w`tZZRMZN6- zF6!zJ7(+xNU!wl9Mjuvsb4hxO4|5BqY?BWYcgyZ9Nl%reclt20mlgH!Byh1Uw4xc8kyVs8Z}ecz8*A%bo31~#pIgK| zqeAY%B=BzRd%35>+OLqX1cG|fpY>sUzV<~Qom83DBB)cB?AAMMM zJmbSfJFbVue$YAn@|^8%11{=8>9&o~h`x@mY{Z=89Q?b$ttIKmV`-FLw4>l8UzPm~ zk99tL2hUAD{8^rztOY|Z^LFkZ=7HxYjnN$JxAaV=KF}BSV7j4iZsbaQAve1L_^PBa zDY9wH%ON8eyCv|yJrB>i`8-^@W{kb{BUAiTR(P=1&a--CM3#8}8TfwJkJG?k1NJ|&{!jMa zI8Mr{{QsU=rd$pCqGF+m$pie%P z`X`4&ySB+!8-?D+WD-t)7+aZe>K$xv*Z0GQT>T67T&1OZomSR!WqOul)Nl7U&xz@t zlk_ee_MDjRIWc{-msS0FXT?RhR;Tna&bwj9IV;BT&U;`dI`4^Xa^4Hu>a2EjIO{dX zd}p>B68uv;VD z`j6ZyuiITeg7u70Ij3wo6Y0vG^dr%GJ8LbZdzQ02@BxdQqL>dP%q7e_Sq=KC!#F-$Hm&K9xR!!yymMi^)bC zPl2o+=Sm%c$6-PaPlrQUt-Gpt$Vcm|kSnd7M!SAa#An0xkxu)q?70}7L-m}83AvgC zhg>zn4Lsx{y~$ZRZ8Tln>O2|S;Vj=yXRUu0I8Vhca-N1=?5z5hI$sd+40xIAv#`sZ zrLTg+-PLD-ne$g09p9FtIJ_YS;Y#eX_y6RxwIba@qD%?j03)=ZODH$d? zOjz}o$0U7pKvyo6X3f@r8_XP@zMRATQC!B#qJ&1UDtM|#NB&2WGB zxfL7o@J(24Q=Ru<#yhLu8l3eWh5BAT-^Fw|uf}#d--lI9^0^F(kIdCF=G{1_+dv79_DtBp8+f~j47)GAt%3rYk25f&tvk=zs8Pnei1vtxrA+Seihs5{2F$C#LA26{0(Md#2O#c ze}`G?{CdQHg$u6#4O?{n7gq79>_0G@oVQ_1&RPp?c9y=y`EBf*&hKD#O!ZJ_d5paa zTYuH3DiFiHvVt6!#}7FSbCK!QUXS#ULvmXlSLC*QeVfx%eM}k?oB14o31zcz6%Un_^;}hC zVb4{?C*WEh@)>}sa~_DzJF9HHv-B~MKGyj#?09F^LSd{{41#H+)jt^1>O2HH&spd1 zbUp^V-uYPU#)zMHJ`U?+uj12iDbhDPE5>ckCy;ZY+IS*NpBi(2NoPUnC&Ox|_!Kzg zXB-@Iaw$#T@>;&1yo{@zwio{}e$;mdUQBzrKOVFZzK-#u z`y+8$+r^rX)UKyxwZT8ZWSpPHhWz{j4tdxBhdf9RdCdc{yw(Tc@4J9S^9!VU*h}_ zcA4|T*yYaB)i-L3bk!wZi&0+0KfsW4W39(FITx@cXX%@r3)n5rk73_%ejNLz^AE9G zBR%j_Xxm+XCE^luOUCs-MNEBK`|W<163|`zgvX%wIyA5DwKCBMRC-y?ldkRYACOOU z{ar8J>dZJ7m&=axvaB)E^PN?{s#boqW?1A*?CHgk9`Y}Jsq5YFvdDjVq=&wc|H?>T z?ffqK+DI=%`npJ8pKz~U_?MhB@Egv%z}uX;{wg@8w)E-^d#-xz4)fe}G_7xpKMMDa z^nT8&r+=hpBRv=CRgqrptn=15>%8<)`CN6*oWCOP%p6%U&v|cnzB6kT{arqchg?gd ztAERXm#2Tlp?`Cso_)}ldp-NYD}27v9KyM6zS;nD4z0l|o`E^{fwy+1Dt^k}JGR1i zqyG&3z24*e4ie|J`^!q0_+y{)J!QM}l6HRGl?;<>t?&UH`}FXEe<9Al zQ-rpMb0yc5`?S&)e0piTL_SHsBtAPZ`497d#VVSd&ZT-Cz<;LP1^1zz{W(ls+5Mc! zL$=15{6jSt3HK3(ta`arDZ3SB;ZT|W@3xK+;pOc>{f!dV{DRaWN^ zOSgW64}q&Ay(Z#XXRT33I}gH+i}a324`WsSovshYE_7CXOPq&cmph+?UE|DJF?{x^ zm-O|KzQK7sw&;8ccBAtd*yo+k#+IDV#BO$${)Y3p*sad2&C){UXA&Ip+z4lprB8-K z4yA`2PKme)u5^c#O03vCh-rkXz|$r_MVQp6JZ_E!`05oX>oucQ~`& z3-^Lv?eHSkFNT*ne;!`$JRe@+d?~y#@>v!6td4v_e_ewATGv&7!CCdMbMA!KJL_Db zAHM(>T^DbR{5Lt%rgSOdEzTFAzv=wNgf-{%(zVbhnP+-sVXig3Ki2D@gu}I;Tx%u7 zP){!5ZCo<>T&h=BcX1%GW>2H+mpIf$k$>*?gA4{hYrE_mA|f^S97L9+tx)54Xc157O)0{|-3syaFEMd>1@6 z(#JX9jXuHo9=O4I6+F-RK6rklcSiaG=lk)2vkmn76==IkFKFj|T{5)y(UMNK>nl4w zm+HlD9#!?$Ve+=d+!B5S6LR<%T&ZLDNDuyN;l8dvitXq8Lu|;W%4S`cf6iHYm9xrL zM|#M!d_tZdhex~56WB4%PhvxEe+;*{t~Exh^9F2}^E23m&OgI0a@Lw*iP!?PwSD#y z0(_qJLp4qK2K)lN4E`?sYuNJDL>Y3p661fz7iS-h^n)#M9N20*&Dd^A#Fs{VU&Mdt z;q<_W=S2Ky#G8Bg|G&@btFyvq^%K@-u0HhFgmo;t;c^+@ZVSNAcJ=sF?w+tdGoO7S z@gMpeyrr}3f6(9_j{na7L4WJtHTwJeuH%yW^||+tIO{X*;d2PnH}cWFhkNQj=r29| ziBS=EM!cbi2b|Hvacl!V#~3>}88ZW}$R|UNYsWrg$)WJNJEirKZS~1#%rbfc55iPB zGd9EZXnLPW_iNKWm*v-{U1xr6nt#^)br1UA>vl&;n)u6I_x~>qp)4h zqp%B7sR7sKli&Iy<^eauhoJ8R-vw8}d%*X@hr$+r0bsNCmJE~E;JJhs;r|2p)7`~G zxwHoSJfD0%pEeG7*_rySEuWUvR-b%+-s*%;KL+z69%t8)q5pZt%`C!gix^?PoN^PceO&Xw@_ z@Wm;cA95|ueR#gJwGDMrLc3HNlbgftTiwOO7sHq5lh3FVgI!18#EE{-U4y<1)_FBA ziT8swHpF}IP``XjRvUaLCgUufILmtPh%HY1??MZCQ2%7z=iAs?=Xq8tigs=_;@G{s6Pq`B7}aS^7F> z>Fb>f*f6f77hQi0yV3ba*pl;8*e%XK#=hbFG9RUUhR}%+rbAA z|G$X8#FC;W4Omcs%fo1M30D4%j$TJZl&E|uo@J&zcZ#Gl@s!@J6d*u=KMb}j0O>sF`h zb}pFfI9y+8=9Mr%+dLHF-y5CtT0I}fEOh=Dc9FC039#Cd{wPc?4n7P1AK1=S0K!&E zz{*-u?RCV#lXI!`ezeOD6We~lAJ*6m@gETJfv}IObQZQTjQ>G!4G*>b6Brv0uufO+ z`XN|yXg*aK`pDu}9et!1wA-;StRFpQ`tjhoIX>ssT|9C$d?oEY0)N_j@DgYG*e*TpNn`7zMpdq<6MlfgP)*IjXTRN^$d&Z86McnDxPO3 zdlY5WMwK0j4|&u2*;sMD>>T1eD%3;$N5dhuPr{ZT*Zay3mag21^O%tHV-i02b?P4l zTg(L@Y^4O=bIl&SHOG5t#Jt#J{xoh}rxvrAF=sK0nbYjN^|IQC;j@?!^YL&M{)*u^ zn0j{Fzxb4|HTq-Vhl$}7Vps?FrR>QZCjNo@JCnD81D!+OPEj4&h~cz^${gZ39X;gm z3^?Ra9CCOjoa3Q-&PsUT5Y9CY*1QwOr!ZBred2G0Z2lZLiuhR@ANeM69#7e`aZ~)~ zIupOX%V2tlUp}^R-g6>87Y;F>4~LkgTR!oh2#5IPljWiK#TJ&wR!a;`#5Se7I0$KA z8!=4AhdFWJ=bb}r(nD-hVB4s3+Iu*o=jhWhArmo*QMgQRmGG8Q%iqZ~TpjzYd4I-5T*X;Vci;vka5vym`)h6I{U~v{x9e z_pI1suEPHWVqQ+nSB&33{O}%+E0HPvUPt_0oA`aj z9o{F5-W%Ngu%v7gbNC?}a(r($>5D^N$tU0E{g}UBcMvC_-w%1qb-#Cq@A+yx*mp=X z_=yk4_!zda!2D*q)>@;TwWb>5tm6}%M_`*Gy~TMLwl&h*oaNsU>GL98^QPkAItZU{ zF<$EWNbGWF)w9C+80>22W3g)@eXVmIyFSu4ILp5n@kVE@c{WG-mPmiYnNY)LUF`Qa zwnqNjBLD3@dRnM9em0d#S2~Y@dpjSWu)RMy0IeTa=K1;L^4yy~?RM_V`vy0|2jfFu z+k2G*VP0=k?TRk$liW}3y-i-LRP{x#LbrLf0I+4WD{1F3dX z^_JqPcJ{f&-fy&0v}*!jb;4)ESsj42&Z%~uh^=*Qj(93u=epJmqn)+3$vaD@I@?Xc zkUL}fjCF3rj&qjJcxTnG_*B7UjN%Y0h6d**tRB);w#8Yt)tP=sh4DNS?r>ePbvn<+ zE^(Ic3TLfzR_%lrpsjZOtJpQp($_|MA=1}H`ua%U5a~r{#k?`npLf0nyV+Uy=&khi zr}D{r#f+1xv9Q+C8b9a2FAU#-)C#ZCGBiH zn9o<>*k_dvmbCM{l?;>58{`t+F4M%LyEsI-@_UoG>Z(Zp54$(*a36`jTe{=ln=V)K zQlDQ$u5Riy*6z@uJskg?=&-92|4+^3783a%e&){o55JB+;&rk5;_z?gliv)nu~DD= zW(eo9YweQ;36H{L^c)}QmCm2S+SqVC>$>Lu8s}rNj4S)T*l5_w7Ie_JQetiF4j7OK^wlUGNI$E8v3jmGDOA1@N2B%oPcnqqn7`gRbWi-o~xxL-6A6;; z-qrBhNG~{l4;$ul`4nA$5F2tL{dw2rzsXrXCFk#x6QSZ<1BbRe1lPI#Fg(ur5qNy0 zPl)u;uE+6N==u}zV&`>mXv;G&&+WWFfW^?xW zhY`eCU7JtZT`3>h^@6N6_{D^bUxKZTl+{MxReuuR(p?;}L<0WQoow*yP)5(-KVxc~ z|AMWJIOOdOw7m43c6MD?pIpUBc-=&MtD9in!+e&$tNt=PsJr+aZq+xz{NG^D*}0lf zh-Wj#?_c8TJ0ktR_pg+G8zH`b?f4l91|*w)t08=jLcf7f{ov)M_wNfo(P^CQZY%Q< z{@Z|`x`dyM8NPF$^1W{k-I?w2Ir5brj_;L&_RW@m18~sMIqqfNzZzHZ{Z98a+tBj> z!@|a%^lIlk*2W?AXv1~TiSP;C#X1eC^YY2(2P)y|FzpWSpCtDgo~uxN|I)ptx9eO_ z<@xPY*iM80X>b_xr^BOps2!N|!=23AIF)x4@=9BrdpM0pZ zSymf76_XL;uPuxJ?eK+^T_FLV3uU#z@xAOKq|mO=y_S$d$aE~jm zZN#>@KlKcH0p`86ky-c;`Q-0H(*NNc)=^hmL3Z`we?(09dQ50L*G>6;Cq2ynntMY| zq*wD$JvU)Oeip;EuIpZzca~4!CGZ&6Z^n*y{yKJIq&Gx*lk+XumPqe#{swlQ^Ea`b zgjA7FrLKW@Jf-ajD!H3OaZk!yYO`)@+=y_k&i z-PlTJ>4EQo`$T$Q=T+Enjoc59bNxYVr?c+SUCz=MIzND2&W~fCkGSN#4!gzqN7(JoPjZhAd3XvAZTtz`-+i8jv(D0U&Kuxb zXRQJ9&Oe14oPP$lIum1g9r$Z_zUwc-ovag9=acnSANp=6to4=pF%Q$XdVN}R3atLx zlSddE7Jo^C)f2`>dIA3D66~wp#Zfh|#zqOJFgC=DjhY$xMBf*_$az1GX`H+&s}24G z#?A%*4(=W4#B4r)#MC+e37dD;x?*g^6P(|~HaPzk+vNNGBhuB4sUlS_CZWfx`3zwcMG3?7mks#ygOb$$%CzQzAp_^3or0wkXr zhrWgp*Syq(;QD{pFt&z?*DdjSCcMY1HB8MLmxsh+Z!2@nzvwSMXQS>ZevyV`jkwjj=FXRikb9}lx8Il5Xxy`SG%YmAKZ)e+wa zTR!o>2JY)V;;gfL!gx@;p?>KhSMOa9jPMjeGb6; zJ>5jvi}*VrpWpuEBKh+-zJq18!2>ZF=ffgC0?xU9B(~03bAHU;_ViG6Z*>!ucO23WxWqP_=QfAmuy4!>kOD0GMT>M z{R+#iuECmc2p$Y)^c>bW39M_#`WJl|oZ}%MjT5@fcqB&8rE4t_u9s180}tt+#56g7 z3ftx^y~FufY^SsCYYY53Qf#|QFKD;p7{jMLf713LTt}(T(8dk$wfR&^1NZX0|;#L_c*?s}zje9sm4bzO5t$j?b|wd*HiLrzYI$GCnPR%KNGshDxj@(Fp9 zoj}ZY=k4!|y6+FUA66Z`c!WF%!#WWEavmD+|51+jw7ZLW;<4A8x{nj5eI{AVI&;Vi z`Q&ds`|@1z=>BdSJPpX`3EYC|A90oQbZm|DOl+<5EG)%rr~9VGhR_C2jPwR)-9ww4 zbuXUh+<~3%d@**J^F`Pd&bptjjP%vcmtf%`f66E4-$TP1J{!FckC4NRxTKxmmvafP z#eX;WGIF>@QhoAydpin$5y-fHIhNd-PZuWZd<8b->PpyhmD52R8$TV7887~gQ=q2@6wdUWru z)DxI{UwJ$)g+u+)vpnRp9Fudt9Xs0j+gJ{lea1N7i4Eg?1x!5VBmeQv%diujzlCjZ zUWRRQz75;rET4H1&v)j&UtXK7g2|oz{b&iywLkQ{d@6M_{1F~I>vzkwHO|&@L-jfT z`^n*E$}XVn{S*s15!+UuN<9E%^aR$p3;FyWoaG_?K}@al_py2Bhp-$Tx)?$ASp5Zn z&FU-}Cb`WeOg@L+3O~|aJXU?J*dE~!=N)>VbLea7wsDfRfxVtS_^*W@r=Gmm^Ef`l zVD*Ui;h~d@ZG)cxGI|29!-V!q?;YvXU-s$iydIl%{t>n+;*g&w(Zaa;al%74yLj9-bDRtJmweC6|?39 zafo>nY#a5w6!FWj)rtNJOl;+GE)4UV>6}Yjmh&D3zs7lq$;Q&F=;lK`ugOUp{2NTh z`HvC54u`&$9{O5(mWRqp&pAu4aefOM`dxbHcjF$GeO5b?~e_%mKAc@r!MPZO+gWnCl?v z_ksl9N{O|qllrw@s^vGM(*3Ew$?NZr8}-{~AjLlZ(_-7G|A2@Ogl*gwf`~08Y`UK- zOZ``nRNC@fANWp~&)_|WseOjsfbM6Px4?gf5AJ?;1$nN02R;nWv-}+cAKv}!y^Pyo zXTa4kISH>>>bpRH%_1H)nFjG%#`OQbW=ZL9e;@R|*|4_DmB^I-i<)6y=rm4tx0QL= zX8Q57Nj``DJ)f+N>EGcQcnofgzv27B$HN+bjKdw)_NOCdTpy3M@r2J=Fyqkt&&1R? zpMj;XO_z`LHU1M|l~?`J^*nHs^V!(>&gWn|ouzjAVcP z)%jb@=Y1pY?|d7&^#yIbGhrJWmvOwGdgde*`O?HAYrBYmKnlbEvlOA-$m8jyc4qJm;*%|Dh_{%6&W!KLwBMes&e15B~*x zRQI#@kAX|@D0nRV7CaiJ?ISdq9SvLCo2a+DI7V&vHGp`;Mewl|Gg&f=^WwTmC)yTsvk^reg0>}ex2r{-H5N}7=ua9N8FQ7#v@~U#2WZi9GG)P zJPDr$hdD=U0Nd)5dv``p;0c&Y=d-cBoppb=>(PCP!TjaJxs284{hiOp)HW* zbsy<8!|GWE=bhz48%@6rR(^FZ=?%`(n(yg8D-{$&V_;)z3fV-UUiFg&fFw)f? zotGS^7dvw=OD}W27p5-rk&d77cVX%>me1-)U*r58^tH|^8<_iJdY$Xs2g{$EmHvFB zZ*r#Y^qbDS@08x&qgMzO|ATxzF5}Gow4$#wu~g)oABy;qh>5GBim~+Zd@^SCfDi9X zrDpRT!!7Vg^b4s&DI=Q1dn+qOq^kEuc)D(4jT7lcku*rRo9h=IZT~)jXVV_=4;W{!(1bE-++G% z@5e)V(;CAz_@_WdPn;{Ae})bDEW)*}KZnKDc0b3AbKZz;aQ+3h#aZitFmBb)u&u$g zwjoy`KS>NF3GSauxP$n=1M_~)iJZ&Y`x=Lc)83o<4QzQPsLe?ci!ELoNDu9j-dle7 zZ^e+eGWT`yBcZvAJ@Zv~c67f=J-4nh5`PT#zA#;W()*+1XS_Gu&v}2CW9710=Z~XTM|w@9 z*E(|@gujF9y`3-*>;0VYcX0jgMEQLu&Kc%sz5kPL@Ol(m=sU$T&-DY~&@TtUOI;rT zuXWDB1;+5B`Q&}7z2Ilz-*J3T_+|L_FnOr^8@vU!wif_4^?j05t0&9}>Gk+`=lHFO z?&3)yS4YTK8~GfBv9bi9t&Zj3|5ULcVU0HdJ^;?c=fH=<$G{En2>4jI1wIb`G~5d7 zJ)(NJ4W0rY2Y0~j@Mqw8I!O}`;u(kWb)$G>SET6$QwIJUb2nc z(it#y)CCbg+QXyvjJR>2?q$WVFdjyIg?_&z>5Eaf=9Axvs!XxfqswZ8Kaa^ce<9*a z;ovX5xBEzEtXf&=e$A$&bKbJv-&uOr`7$iS#e6z3HN?3BPz+5xQU&dH81u>8n@jXM z{QYyzCoPaf{9VZ*<165d>(@klEgWKA1c%tJgF`%DgMHpei8+_mxg;^hH^XCHzXdzq z`F1SVg83}R%yX7L-&uO6v-B=!>7gxm!g{WD-Gy1{yaK!0S!;}S&fmsvaAs|mOcRt< zxh<}dS#Pvw)({8WRxgU&r1^zPJ&)<7jjLiF^UPu25toy;v z`pfFi>7f0+V6jpzP=aoSA1wAMU(wijDZcC#wy92t#bfk6`*b zKa3@|vYvJR0oG1W*&o6+u8V7(3)sB#V^~~mSHO&MmOjpT9d^9)Q`ia4Kf<;+uaEf0 zaEI$!^K?3^uexaOh?4#nit z+VV45ZS|?tbC{4rt=~cpH^Sjs(3&mFL;lZWsv{0Ld;x8=>%Yc^Ty28Ky8aS&qVvnx zCg)eNAy==#t*&pzwo$EeQiN&OPRA8K;ohg~Yjk6dzsHe>F6s5j-{yqkH!vAzy)P8n z`&T&Y`roj%&Rem0=f7jA!gkU_8>NqPU2DSe&TmJ&4Gv@DUvL8tRVJU%cIlz*+u;r# z@_852>HKeOm$UQ*k-jKlTSG2(uE4Hv-UYkbxe~i3($_|MA=1}5YaO^g;tkHdup6B- z*ykf%eNX)M9@l1ZPCM&^(e2q(YKlEejlR5!&*896=%nxTU9%Rr3tkCNhZn$)!56>_ z;a|e7Fzp@vJ9s8+?QNpM?&3I&2VY}|kKQHH|HIZ8NAG#LlH6k3P z-bY1zdk-J;(H=hblM%1$;o~%U`}WzrB7Ucb$DAAS%{_d4UBplH@Ci5c@QH`^aQxZw z9lkTZ!`jK(o4SC0Kk>IcWykIl@#Ki_j`*)Ve9}cdyu*2SPwGE%D?eF#)6RY3HQUJ( zdVEg4BjW7?`SN;q@v2p+)G2-8!{D{>!7$&)ys7|?g=@QuUu}Rdf=9s252t(sJ{n#I zKMmJ+7Z+yWw_yG+(S)!ZY9;d<)Fq%dX~99CsHy6Rw8Wz_Z{Q_(w47&#P`e+N#(wB?Ln!<8_3J~It}1SYp<9t8J>x4_54yTfn7 z7sGpZ7q1@+FNgPmC&08ZeIUF5eh23B2G`TBvuI;_08G2iqEFL|^XoUlj3vE3y}ktB z3G=<<>p9n1&%*q+;o=-juF`yVdNFO8kcCIWb?^!BF)(eJK(5lq!klZu&G2#XGMKTE z9t+d134er7foa#-Tx;nwx{EjTgFgvR=`P+l4{m_3>@MC!oo8PNUk5LTFXwgiZOJ|5 z>>Ki_^tV#B9vkqov#+Vrx1rm{{q9a6qbKlPm_E)cu(XT8quq|LWlXo7t*_3$jq`q& z^OCo-f55rEgTG>a+L`m7{faYdP~wzm!b9uVSu z5U$h#bgemiJIg1;AFZ*iY}S2L)>=UR(tiS$(J?{Ht8w2vRjXeGQ8ILH*mrEx9~dW-@)sh--I_fzXcba{|aw(=JiYX8%nwa z(@q-?ufjYxR^M%QR^Jhy>5B6WXT`?(OjjR~J7dKe#vXNqzs019xk4@)d&FFkai;Go zDxLof_jac5D*8Bco{GNCw5y_@GwrJA?@YTYvd$$q=S;gQs+@_rqS~3hsHk!N2VCo1 zg2T9_A1g+?u6pv$w6~((nf6wUai+Z$W1ZFBan5S*cxU>(VuCaIteEKhI^5t)jw_m+ zm7f-8<)_tI`Dt@jemb0$pLx#8&wOX)r_)*O?Q*8CD;7A@*A)w$xn3$3IV%r=-+@=T z{x5i)^Scpu!y6L4f=;j4=-dmY%^Cyh{|ee^EPbo*eF2Li*@P&qx0C&U@e!cu#n&>wCfD zoTZPCbRQ2Dd!tWu{o`<}v-Gw|?{NMYy7#rNiCznn&-~lGvb%f=+Sz^loB?_Jf5Y{j z&pAWkr_guP!Gd;vuPGTO_m_lKr{BO+y%tmU(>ea{-R|P}8u;vd%KlGY&V5d^v#)vV z|L3*Z=r83v^w<7y$o~N_^;kbAWM=fSetsQ=J}%4M_oUr$-qpX1kg*=l@3*&~8KWd{dViErGwiZ3)M;!7q47QDWh65Qrfk$BaMBLYT6gK4T7&uG)%8ANaYz2VL>M0q@ zr`)b8{J&3ZydFHGx5xHr4u{yp8XHejrFC& zb1-@5Q?X;5&%lm%J{LQ|+j1QILH&zQxh)O&KTlhDt$K#WhWhtB4wDBPhvLu{G2>i+ z|1}@pi?-O#m(@m`lM^b}uX4JL-2j`IfTIqmEkITx)oJ(wDBdVvCdU(x#W`FAWEcIN4kDZIM zV%y-a0->ITu#JDOM`cf^o@=S6P6hD4R#qFl2ouU)2gfmRu5+6y%kQV1sWB@5#j@Jq z8!(~ljqrQR@}0^G-YYn>#pAyPpI$svR%{#m4ItF>O}JJE(7zS&Z6+o9?U=DVww?PGa;|tP^t7Oz$5t{->WMj*=&NY& zO}SLXz1_vLl*4;eCbdc>;p6=&w0 zbN}QVuCFzrPU`<5+*{9`t&iXW5@W;k$1v3q*Ev6q%{v#cW1ZJwCpbTeo#^}&wt;xw zCZ302J68c<%V<~9&aYo@FJogOHyZul-)Aj=`%(7C_|V3Q1Du)v_5V+qPJ8wJMC1Kb z8Etu5RvY{r#?A%*5)L{4IUMpJ4te+$%(<-W^O%~5>z!Y~hPJ;5k8}McEN$2C@mBl< zCLaAiVz!RsyaVospFy{C6#%w450*F2LladEB@ZR?@P_B%75u5k+A9wITY_z)jlT`- z_2578#47&Q+WqVU%Hf6ZYcOWwmF(VvtKp?psq`0M+B@-w@MZ8K_*J+QUJCyez8v1p z+ns6nOWn_|=5*)r*@ko%Ok2)75MBgV!h_)J;pOnL@M3rce7f`9a5MaE^p%R6M)Mxp zSz9sw_XY8Jb0hsf?C%Se{(gAPU&zCkJ4sB~Gyx{t`Da{iaNJS6^*pW9Rhb^2^8Xvi z_?{HiGwG2Y|AtJ&V5Ly^`Sy0^S`XK0YJZsFYd!-ojA7%0FpS}{Uh8}ywl2~~M|$3wuyuOd zWiex%RsT3=%`tYJ;&^bvjota=|G2h!qkzbk(XOPO`>S%cCVq0dFU;C_!UUK(&0?p$ zlaF-fx}H4Bc{j=^sA$b>|2Lv!>1tobc?dS-Z7>}2CZE7sGxz18vLi74ot2xAPsUL> zheyL9ho6M=JXH2mn2;Z7AwS2$w99;OQ?4eD$@4>ra0PsZb1!%@JSfr2_fwvJVBXqt zoRhq*rEF)u{Jky9+h-}pSh2i`HC7a-#prxIHY27UZM1#zRq#pF`MlRT7QG+5G@s1z z)M>waAU)Knb-QiUe+poA!Y9Ka|EEVh9u7G_6An2SXL%^jvoH3nX) zx{t~&cAkn|>O2j*JknP=PsgrvZo#gP^bO84utn#Y*lo_Uc%MqBw#1}YW^M$bW4f-57jGwu17(ZgQO=T~F7dU?|;(2gr*TryX%O!BZ{pZ7>Enk42 zcfAvS)A@2ZwB<_-)jqC&8Sdx&RhUpLo@-!@3B|Su?r^>i=6t4K4|h4!58-_w{gy&S zh--=*!TI}e zgYz1=iED60KDnm$fG5Mc*65eX_rc@fkMKwpwDW7QV3_KZDQV}|LcuT@KPBU&PZQR; z!kmyHp2-jA>~E3h)xer(9_DaA`P3&Y6#oE|aef3F@*|x%&F6<0sxy8RQ{^nZ+W9eT z-rJ~pY|bwLY*v5CP(C3}&1;jNqv9vKi|5VrIG^Njh*NA^eJb@7VD-T3VTxHiKgQHL z|0I#h^^d1cUcc+}PUmg#`hSWK<6*CseEG9aR?p8=hc@ajCRDBm|H?$JL<%@oRfDV{udm^^L9APL;mk#LVx`mu5-ORIV_*Fq_K%^pAnkiT!C$H z)`iyUoWXWD?}F`gRt}arYmBdS-W|KfS>tOR?VXWN+R{&YLAxEt3_j()*nq$OAHBW0 zi|4OM@{`_^!{pQA-%C~-ZTVP2<+958m$UrGGKoIrhARG6*8S}F*6Vo_59(Zn@pZd+ z%3YEEAGU5k|BT0#n3UG!Qy#k9_(I0_l%I6+p<{cRn(`{Feq@{S&rY-2HBIc{c#R!@ z?xk7Z+2p-h<+=Ice9}$SWov8>h4)B5@c-$i`$E6l|NGOM=NjjSVk{)XDr%iqSB z`-E%caP+MEoQRd5>Z!q0JJ(|K&g8>}i+o1HEv}EiwmNf2YXz%EK7NhZZ-UKpeK>Z$ za~-zRc@(zG`55d1=VP%eoK^pN=i{+l7j~}WFh%FjVmCUE!9MRi7Q2a@|0JLM-#Xlz znm0P@TH4t)h=2Jy+Km58IqqfM#Yu}v*RcGK>qgz)^$%UyluA@+Nqr>o-Sy3;aBBYV0YVosGTg-ZS>B{u0h?R%gjDnKyC?BTc;re!ROl zx!Utq;E?k6Xg>K~zsBBE&Ki3~XXQ=#d@R+Ix5r`I$lH@Z$lFtJA00sdF@{qbKaHtz z-hi!j{uwrmz2_qSIXvHe)TWR(t;bfl{!8p?=U-vhIlqYA>ii0?t+LJ~IGp!Yc%196 z!7a|efjgXk4=;0m9bWJJCR}uW3obeT4c_eh4_@PBowr5&HcU>ef1ltu{X6x=d=mSf z@-Jv-`Lyfh>G$+?jSiNyv%HzlTljFkP&SFDB*9~F=DcAps$dLE{cRQf$vTSunELl@ z%HG$)W7>z{0|48a*moD3CSZJhC7#wN(*MKOS7A*x=UnpeiO%wxYFZuKhdi-OJGs-W z@dG^^uc@Z@(j>`CkimQmxBoz1cy&UT%BNCukt=nm-rkoG z8Eam$4SgYy(GysD@YfvG+jZVUC|{@Y=^N?&oK;VMXO+#0bK2P)IK2h_8nJZ}|7H2) z|9xN%xBLEe`0NS~aD6v?7CAFNTWnvG)kd6}8#B&JupwsYA?6!k%P;=&2{GRYhnN?` zA!hkxd8mHPvDMC+W9>RZUkcZ{F8?}b`Hyy%f8JUC6tkWD$2dzL>#VZloK<$b^VhKx z#5wJ3-7ABRO*}PwB2$j4mlJnhd*+kki%u@wh`3b5q}%b=sEgIOvtBv zLO$ga@+qH?&u_u~c!aY3ouy};Z^sh4`P_l2a$bS0cGkHBh zkC2}+v{&ylJkVX_Pc=z?R&lrz-h!i8`8gfF58e&d{as9cEQj~QwAaR=nDJ>bKOn1( z{H#vM_z(cv+TUHxP-Qk)wmY;Oa6LPEH87SwF^MtXKJ`fILX*M@0WA_OShS zf$R3$1#1!?d%e5f`46d7y1(=5aMt+^IG?b7_p;0f!DC$~pXu?=1K=j|zc!!r1${H) zNmx0i&t??ikHPfij2Ajn{I+Lz_wy=S(9Y(E8JqE;Ka=-$3sODj1;Zr&r83WW3xD-X zKS>4cyk822HXbzQ^(-FqT@p&#dHzd=Ne=(-S#1pSWSYL7@h`?R-yLf~)p{U35a^Ar z@q7sE^Q5uQlj$mSpC{9Y!nQFE4+AoK0#{>doTb+~AC4XEET6oye8xIU_pzEj0-oUd zkywkrKKcJ&T3sK6^|6{B40lQ|Xy;oYv6L;(6}=?&=;eG`{UsgrbCnE}I&%p#&Rh2) zZ%30i*z$HXhpbN8F18K+B#_aQ`lPKIPvUrP{1j3c!@7>te))XR+;|L!EuRHB+Gca3 z>WRk*=PI|iQf>w9-ZvkX+wT5p)f4B(VlJtqpSNU~#E?svK5adeobWxVmUW&Jnoyn_ zkAuV9_!&6Njh}_X+&Bg%4>mU*4|6Tq+;{>!5!T#zBHX}3W6Z{jv&M_H5nXIC!>7WY z+w^I0Ef1AF9i#J!&%}iBHWcPurpq_*FgT1i>0!L7zvl5!J>vP!>btIlQ_>eW$8%#H z+LA<1kHju@mcGn+6n44uSv~y!+1z+Ws%LJT09#IJ3;8I|jpx8k~6`XbDY>WeTp zo&@*7=Y`Hx`s5Fo8^`0b8;>v!E$0OZp8t}e`oiW$^-DiV1?_e|H!7d;n75pl)odvyTMuQC_2x@mYgrbzLBua$y;6j9Cn-Q#Af$k@~QgM8P~aHZ5^pR&x@Eo zD(jcP{YdqN`BeIR$}t97=fjg==DpS{ojF14BDet^|MHmUT&*{wEC0PBoxZR+Upb8Z zm!O}VPuBkxkw1EQo_`O=_1M~2b^dS4(ic{CPU3H6#Wv0h09!%3l6J<{7Ueu{3;DNt zl=HYP(s$Mt^m3i=;kX`)M|H++iTsm3DycH>FK3G(m*`pYe_Jkv&R1Z^I$w!xa9)6IasCQ6T;o^4icjPDs~Gud%;zySX5bIHmaoQVDG&L7(6xLG zhgT*(>1(m!T3*z{A9yW)4WA8O_Ihm5c`>%+d;|84gzZ}1=K77;?XK%u&N%B@u5{M5 z+&kg)O%ZoRd^6mieq591^TYU3k6p``!Q2<@S{CcN*0tOTTVEFdHu>vXR?g$`PyTJ( zDu=N@Ip68{x4tOh%=R9R>#^~#I^*&G9{=)nL|<6h>k@w}E4Ew}0Jeg5CGC2yW#v4s zpZr@r%6Z%t=_lvk|Gorzxz6`+T#v=0I^(=W{z>1JRGIgqGyPS5y^|yVk8>?A?Jl;G zb6dB6ox}b7S{Co)*Rq&3s@>DY`@xgwJ27LX_1DhyyIn6f_MLCTTHd&hmcxBqza87x zSvu#nvUgyro$thsc9x!ZmOj?`E^LFd^d@KN;kp*Ly1oKSd+l6zW9B=58*6bB=RNSs zNM}5lzx1`vI=(UD=bi7xZgEz*HzNJbNZ%Ui+ai5?4~P3~`ab$G zgX@~#iV3HG6!B9LuaB7Xl)nT1G+bghY29)wb!e{J41WWrUs~UUzX@}_w{Cal+L>7i zFGJszN2;J*G6!CXPXB6AHFIy6{?&Ci^Fa84#3%UM+UaI=`Z``4sNZdVpubeM>`!WT zHqRt|U6P~sdk>fE$>?Z7JM$^mQz50G-TTUhxl8qz>meSSuM}G}UwvQdF)?|>iHlp$tR~>D$Tq!Q}0VW(_Ng!HEVOet_jAft>46)SAWN` zYo(Gge5Nzw*5-WqXw3iGb(^HP9-l$C4gNXMS5M$yV6x5|u@;K!Rj&UMTkZTSY>l(Z z);i0lF49Lw`dH`ZvE!Uyz)o=fHMYU|MQoF^d|I64(;De*&hnq{ET2wimF;qtzR39{ z>{91fu`42dmGjHk)z0!+_;H)+_MS4r5`xvm-wrz=?{x|*|&hNtWoV(%q zk=_~U&J}b-xUX5vixVHaXDxG9%*zw5V4g^?aL&Lhoj(Mxb^b8CK4Gh8qwBk%Z*pC2 z-0ZCSw>Xc4=}YCdqB7#$dN}=R4_ABy4&zPwRxi7IGA-GC@TX||a`|k|r_w)zsmtzz zMYun#`=FS4#_og9!qgk)Rjm*0^}=gN`}loO;~(AbgK7tPEc??&o6mJE*jO#-pj{U> ze=?p`Hu!7&m*;cx8|&qH7@wHS^+f00p`MEW!+MCv?t_Z$e-lF$Z9j&*aUIEj=84X< zcjg(+%GD%i@?UP(Xuq%h3n`8tJ@zTL*YuJO+O=tISJ^1H$u(P$i(kK`opQM>vF&)S z!cP6;7|Lbe)0Q3UDebf#E4!UTAS_{a6X zuU$RWRl&Tuj&Flku&R$PBXTf67i)G-xu*8dN@5W;yDpN8u8{HuJ~xg(RnM*j`a43 zuZj5Hh=1S1y>^TE$cWGC;mX|~PifP4jd%C|H)r~<$caAdyL*z8=7;midvCk>cMW<| zz{Y>Qf38P0znqfcv|T>d86pjjeY6IJVAN*DJ-s z`c~_`nb%V20AgOt+knIJ$@?z&*>{(?|CD1sK;^Vi!GV~J^Cz$&{sFMgAs?z0&s?5Q z{LQC;$Yy0rhKawN*|PZG4?O@=+tB1ffAEL`<|)T=7)OxVcXy;AfqSnVVID^ zLt*78=poL-k#eppXEkCIEN?TPf@`{q7gE;pGl;_>9&w0A9OAJ$c&>8|#$=p_VneQK z;m~(tJ0{`6L`-kpKTShBt|U-^0AH!(+%(Hq?I%Y#Zn0U$Wt^&3u{w%FfsG9-j4~ z9!~v-%`;(c(f_{?|IYBK(aS$lSpykwhodS}4YtZRCBw*JpYz7M55 z&z_S{#$D*6gF}(}y{arBkQ2Rc67>Bw>Y@<$H z3mH9ulD*F+9OpV|XIxy(6Do#~(Cq@hM;9P57_L@w$(g zw|LB-;&6zWs*;WKej3W?8O*=(+`{XxgbM(h`IHP3J(n(E zk8-LyPsQY&r3Y61A^#I#&M~{2gD1d!c!Y715tp>{_Ze~tQ>JY<_+0V;Tieg!P(K~! zyyqrv#*<*H2fYFAuVZi{ChOdQ%{faC?QMobd#AynT`ll>9;#=0#23IDT%Up6=sXL% z$$2KWz?`5TP8q33F@L1zyCO7M;J3 z-Q@fb_6_Gpu-lxeFS%ZF66_jjYwR@EuI-T?zHpZwZr>MwzDG8<&d0!GIQQeBn3LOR z!mna7u8aFP{{b8Pe*^b-U0mfXpBm@iVr!j$j~(s21v}1J{teF3o1FiMZFQDUr}Lk% zi=6+A4SghiNu)1zmcA^~S2(|k4gK|Zc$Mq&4}GWl$+hL@EzCOSzhO5K+0a*==ad<^ZdLnYR^0G0iO)Nf=?eF zJGs}Sv(j_g+1%KEP8HuR;=5y;D0>0?Rd}b>(Ix;nVR>x5tRW;Rv4?TL0 znNc-0Lu$$!&jybuZ=+IES{mn=|B%Fg$f2WZMhzY^VpOVi_N-~yP}|V|U2St`wNIZm ztGTIMt~M%Hj-jT8D2A4U2(OG+NR87y>Bl1RDUGIx#L{FtX z6{#svK6j|Ay=C^Cj&dgIlHzrTjyhuKkP*Y{Mrlve6R-E3ZDis;Qr$6p*s!6)@Jv!$ z?yDR%>+D7!Cf@HHtL12_Y4+U7tgn`4 z9kR5<$9p>0j%y6IHqR@!crg9fUN@(?vGph$h}AXKLx+r-KC^L}KOZ_o0%On%Mp1k+p-S&zjOYx2bthdq-2_oM}h4{68pqQR5L-F@+~h znl@|hlt~vgPHLUrt}Yp(E0;a}a+t?9NryWwZfl-2rM0oWy}A9U@i@>s&66h0njIZE z>WIPBIMcjXtU=>CZl2aWCzj=^F%oM-(3)q>o!LC6u{G9*qEDVZyS2G-RxH;dx6M}F zJJd1^c~0}x<~hx?rZmU?!#OZ}>eTk;j#wRG?mM2a4$b>Kb{&a4b?&Sw9n)v;5XfM) zab|Nz%j_LmK3Hv>(>!JNoE>E~bMCD7)}cl=&Y9DAaeT(XYGZrHoawWs?I5d-?`g+i zHE$}j@D7e@U2EfeO4n77O7(R4VDIw5ho+7^a!~u6DT5l@r!zMEN!zrJ_Bk_W&h1gA z&rY72rGe8lB8I7!_PW6%hfkS3tAiVbuCif=CRg3$#`b1^o?Labe{Oqo)8L~h$53kw z_li+NMkU3D*H(`lKB}X2^3>M3?JZt*@Nm0^+Zv}e?;ww~E7|KDqB8*-U<<4)pxP8(E7xeV~Mf7evS0aj# zOK&EfKf*eHaJo0_y};i}hMsZI*D%$YrtX&blp>6dUF$|i{v9qp>qiTj{$>ml@g(b(#It%xEg6^0+&Onj$83fNRd6*NCd=)8 zDp7OetsY{R!Km47${2^ZtD6fqZF5n>tQ*=pW;2q_qk8Bt8^qkbnvxt$nm2QL5+%2E zE3eg2sG!aUczLKb&S`6;^SPmQw5jWd+Qlo(wn;h(k&&z#a)r?HIo*1LSm$Es zVCyv3X1BEmH%7M=o>#uK{j#ISo2Qr?ZKsEr7&%8W8LKdA9j7;S%5=}D#<}`V*KOOR zi+7N{_t4vS)RVakecFzCa($w6^VfBx_U~{97+mgKU8K~nleQ-V5Z@hU_Te_4DO>6i zUC{XI9%$9>Fk1`MdN6MVohnw^=|PPBhUGqbCe39SIrV}cDzVjvvcR;Ps1(57HW8$z1{rcEgn zQ%2OZ;ou%z>K1dF7Pn1l+J;U)-+S+Szu&A@vT-@|^c?0`-rs%izWd(0@4ox)yYHWn zH#)0`ztKHZn@1ReNM}>+IWwt1>($vz1PK$PX69!LB{H}$7C9niG~tBPpq1$Y5@MRb;$P^EkSCR@wl8Dl2vhWm$=oYqgb*)G~qa zU{I?^0gC>+-dpajM2GhLTkHMM)S*L8RC-Gnf{IM(TD{joU`3SvBjYgDrnk)4X2DUH z9^<{F2?W;yCn{zuc#-I0gF1#eW`k1E)85KRWfG5sX>e~0o0WW#V|>ws?Oi~1dU0v| zG-<29h3h1bze|PVbEylLR9#sx=y*nejZVv;I&Gh9=zepB4nlDQZFTKTzu8-&WD0;z z2b<}F18Jcdo(FEUZ5;aWG<7V zI+iP5DcVL1X)4NF4$WdK&!1ot+KxfP(6NQ2;?8#ZtDR+UEvGY!N+hDS(q<-R5(jbm zSt+m)3Rw}ertT@SS$1{gyC`z4CM84>jvSqnc%JXJT@OedAH@imJF(R1o>{WNQDJB# z!rGl)Mmt(HwM~~gv%1#rG!~od%R|_2qF_M7W7;W@L3wp}wz0TMfC)X+su=pcjnO`ww1cfQ|sBQ5oSIwBq778>G2WeE-2 zTsUq*GNH_Fswb#hc;Di~J0~ItNvg1# zMSp^7Wi|DZ1^a*xy*}odBymz=>q!r^dfsE9yg6KJ=F+MN#z-aCr}CDBM2B7Ptq<2~ zxfm_SL9fUdG`%w^=eT*CC2N}&tvF%u~ z4`NgrcxrBXsfBz1jPXa|ArU_QSU?&x()gqCrWk(QM6(`i-O@)NLW9ut1|JPJ#n^+j zgK|Pv5aLa&f7F=IX1$CPBTFG z=${=009TJ!59zZrXw{C_?32*i@p}5KAD>B|GskDsXOCI@@goK;F_W0X0Z~kT+;wox zxsQ1WWFkA9E4Jm>*_Jw*6$KzV->wmZ^NU zku~3)nEwcIyXnsnx7v=V`y^dFG5I-?EHQe8AxL7Z&OY@~{55AjG$EbH>^P)5B~KF{ zd{T&6F<{i{$qMrkLNe?UyRgnQ{1IG?h89pI0cLKQ9Sm+L&C{%6qw@{`a<~UH>*qo^_%vD(%k5@27leG>>j09+= z+=u1dkWa7*sM+vIMcuPXO0b@R$h=4__i0?qQu+DK~979q{ZdtB|=@QCB|j9|l|P*s*yx(5OR^6KRiW+888|iw@>=cSCL}wabi@eXTav z#A&=??SiOTuj;N!>6XNN*<7YGVgApUwhI~8Tq*QPsoh0B+1E6gtL`GcAw3;xJ?!Xi z|D3Yau;lY|>ayCgd6oKw&&}av5vDmftO0Lr+5JTH6!$ZNR|<1K3TuGMlY%9ateVxx zFx(hfi!`x<@JB3nTA2}Hv7-fsW`QR~Ad8)1;3HbWAB4Xj1+w8QJ4lx-cciP=T{C~0 z%eBIhV!}HZ|Lzn<@~J&RNTzwTDCmS3Cb5`L<6x-)tU1-kXZvmJ-I9XQtkXaVqbY|D zOCF1BE&+%xjy-ilcX*KJgoNVqw(%JX^rXzB)STY`)I9FBE3-H?qgKb5%(MoW1j!;? z?wMIRV@3{nVl*OQnrBYSn)gDKt~8CP>!*5=F7`6yq?-A#RkIEq53E z6MMO7->OWdn}|6X3=CX_T8Y4G>BEC)$R4JEm9~usHWemqOJN|&Mi)ujzOq7RUPCGmReWBB`(vV;q~QSe@KpCf!yP zI)n_K8K(ZyXx6|n%`r*cLP6@mT3xd-@{z^lI&*EIlP6FpQH;&ircDoL(Q$?DwyBT_ zbBEQ(cBg7M%HFbbkZEbfopBBAQeaLL#&xSdz_<=z*kz>=(Ee(b4Noy$))zD8JDa_3 z-z^a=D)pKZ%%Ia+hAk`@U(hq|K|2wIY$a7>G$hxntL92P>N6k(I<20JYmo8;XfnSr z&dsrJPA^vnY4uSlQCx53PsyGO4dJdtYJ&e#!_Obp|7Z@`>-rzJxMAggR90fdg#U5I zc#!>%bJ@;|`JV+i_k8|m0bcjQ|7c#=Vgfj`z5h|c(Gu620?vqG#T;Paa=DzL4HL^XaRG!nr$1dH6t0!8|b~$dj7E4#X2kX))RP|Sk;#X z$vHW6%Fs-?37;{6y$l5&F5-@l1}NeFI{OF|H^@YAt-8wG!fP9%-~^4h!1Q0fBz2Yw zeta}^07|?FA2PLQDDV_D;X!UL<0dq&P!Ms^$O-L{2|PmBX#hp{JCnjb+-XHpjW4v3 z4JsmIu?wxWUg3idCs+&>Nq_=zrRSwZW7n)W8ifb-;?w-*#tp(fI9a`3aGU*1cqQd+ zzP4A=6eo#Fnlou|a}auOv6TRGFdAd}w*xi(#qY1KMux1R*rs#H36}%igwbsLUHy5riMWf_w!YN?uKaQZ^IdrSm>nwB|rNL5_Ws z-PJY(ojVo2q>JfJpgP6W2`Pz`3udqx=djkYWiQ%BN}ZP`=&5{L?~EbUa*p)m!d#mj zKR7Q$JuT^oq&A?P!O?NPwA^^+d@7U;$5b|HMn09NE%?}AW-~Hz!wlxD7lN3J+gwuy zG}D2eB_-Q-XR$#x4|v@}G}u(53=2ztz1_pK=l?D%VblXR25akmW}ziQX3&JLyxFn>UsxYv-w9G~W+hC-G@-|A?h#9VBucWqi zSP0W(S3+d#4h4}&^6dp7WU=2oqwS0nMG=9a`H_?f;%YP}lo;Xou`Ik?72ozj`s}4Z zxWfklcU&56CX#0vw24>sm{;{rrX$X2%Jj+|(a>IXM?8ipr8TB&cSNI?I^u$MB`uw| z1y*&ks}*a74N`4Z+0|z>#x1g+bakh|3M!uj=@=Ug|G-QLGf!TcE!-Cyp!G7uXT1#iy`sJzUQJQ83Y1wnW(yAT~j)q_? zGC7zMzKe(wV43)C3HgOYc~yN}(|Q0Uakr9ztwasN?yg!4c9;gD0EV_uRz<@#Sz0Or ziB>LzR=gKm75ZYK$)%RHEj}?a0tTJ_Mj2tyVXxcdqPFeADzt`!OBFSNZ4EM=S5l+q z>#@?L#b5L%dx+drk>9~c;MQbc(W1%?_dN)jN%`VLYAso{u*@|9z%!F-X~>DwsX{WV zsiERf$1N(M`L@H_hR%Iv$o2?p9GnOpU2D2D@3Pt7Vj3=sV#2_X!42H=h>w0n|y68Xa2;w_0GC)EhIq7P2MZ_bV`RE)8R?*38R7R0B|wi>Fn2@&>nmTVdO z%&A=hFsRG~rIRVy*~NaRlaon&M8b*-iOnP?Y5@jjB)sf4%ku?AvqvB?(I$AZLapW4 zPab_A>eK|?)Vt6?VQD|8Gs&ux*rcNOW0wLX@;o0NDYe?AVTP@xB`IQy#_MlpT1CT5 zRGf*?tl>b_XGF4qnFx8PDlb{xFhQL`Y%Ce^>C)ldM-h5FFNLMaj1z+8Nw?`VA;++Qk#R<**ZnDuv)Ox@FhUHVYU_s^bNsgT^8j% z;+v0DT#aK@+Z`u8g&dvBx{B|0nL-jcN|>}eovNe-6)Gbokk(p5I+wI`RvEO5DAVmS zWiM$Y>9;mgr!*}|LsMU>2UY7X>VFb$O_NRcO_W4Vl-Mr^q9v7jwce>wC`?T=G10Bw zoCXa;TapZyW8Vv<#vz~!o~o6=ffXm9XdO&Ino5RXZ_rt9`x=jUW7flj^<;)T7FF4J zg7b1DcbAt#N?yrKn>0h+N;_fsXI@cq&muS#25xZL4BPm&!LZy;(tMO~+lhf0>F@;< zOD7r(1m_7Um{Pt|CVfN}~nk%T5~`oG4F{s`cQj z#7CY&=q5!>RdwNX-dYXH0U>n*O!anSb_LNJtgp_> zMJUDC=ym$7-g+^X*XqLso5m!6LyJRG)-D9N?8%u&4S|wl!IV*Af%O_~bOtEUztKM`mjUn$>I5tX`Am5@TfAYogVi`EItAk`Q51m_kDx zd;h1x)-TMipgZ|w5+xw>XNcQitzpK$BxyU>9+Iz#c9MRRZp4pmy-EG%20+9y>?cvN zwHfTA&pD<5sFJ&Hk>qf2`6WMZm=NwxY}qW|vh;$oMj4H@aO@N2U^?bo<&Mv^?)wQ2;$L`V+fl`i(USeW)t zNDr;xTJ*qhJu^HRGZ)s_GAnFgiW`OjEn1A0vB!jpO3yNbR^N->m_wFeE@v~fySTAY zwX=b?gCDwIF_@Vnh#1q;Y%?@{TGK8z6OfP($MNM~kW5)=yIDeVaR#g3URXX0Ikv^4 zW#C3FFa4#i4Ayx@v;r$8@D`3u7OBnPtf9kF9?=gilQLS`USJX0Zkn@~{jPz`C{M=3 zjuB#*Zl$8gCumzOVNBFMc9F1kp~$7C3d8 zmNkg1Su^t&E-ngAoigdZawVqY#74R*%SS?-mw_`YA8z~C1LHckVXwQvuk;!lD zN=lh%_2_6TqGN0%yt%>?sM_@liau-At+ z+mL62oAXO0Q*|2~brS<^eHzr}6wEym9DyQv$N;_7Wgw-A$Y`5IowaMT@JW)i{UXxA2s*6{+{*J0sq{1CoTMMAAM?1qz8VCqG%wy)TsJxUcFdX^5oIdImcXzfvy zt|f&y!#clA#9Nbd)T-A=gfR1ry=L*EB7>i~L z1u@4WiKkEJ55Plh+1VA3SY4PTaY*M?QdB7wxgPby#^g$PRBJZW&1^{<$LVbF`W|6XaY$5;`9{l!E8r}W+fv8&EmAVryFQD?$pJQ65djNK zsb_6f&p5MeOSUFBap;(j43OQZmV3+*>y3~J4q*`44%w(1yQ=)y<)I_d@8)2U@}ose zpEwUT>SdyITURJZucT_DUXnLupnbSH3z=rN*eGzkP;NEzvq-(nac+`rm?oPD+t3bL z9-4~|FqcL&DqpYq!K;m#29q2c8N}VWkjuG3F6*%hmoVie0WoB0F3A!kwIVBPNf*7f|u4z1hvDbGg6 z^P*T-#=B-w3U1BIP^!;6tL%(Grf7^WMZ^UWxlE;~oMY%tXW}He7zRsGIaQQ%vO=*n zeM^nf^0|+VCYoX{7t+Y%>IXSHaXU@z(7cWE{|~s_VT*dBB$V^?N7O@!W!GeL=1R1D ziD5a-)od;r=hg8!x@<5xZx!{eG=IdMqPD^2dK*R2wdFwoYgqY6w9DH><=vB3$r?Ue zg87)BLYyt>oS;IS8+oIs?Vf>-pHsITFEUG0_wVVLdfHE+L5}_$+(?9MKNHHtHoN3a zqH#vuHn_aP7SS^KSG_}2^-pGDKCcd=)I(=cpsAGBFS)s=xOYV!Z97+O_pX>F9ws!7 zcN;be#{EfMxw2)|!Tl&yP*$wBx`v=me|P~#o4;6XU!GyO;%_dm+fXX|)SI3GGj2`D zcK?Zrjkrcgtf29oxSU9$9tNCjR3kg+E}%ioBjiY7sjnWiUw9Gq) zOG)He>!N7kK2m_@3z(&bGa>L_<`cD)&bQ0aqK=Bx7Y34};*WBIE{R5w0eUMM)$x+( zuAroD44LtHD{`hOWY3wAb}LpUIc#z4N6iK(O?a%ZpoDw>6lp&(y>_$3-5u$t$oZ(w6Ls2rsJ~ncJjy@vwIH6rR~N#16Z; z!F^?3dg>(Dwu<3PUuBh9)=My|h+0+L7B&#;8Eqr9S#;JGIDr*|pQ!2(*fpylWGA_e z%x03!^-a-CJl#fcb4yw7hVNvz5#3A{_7_CA7Yb*z5e3^w%I&bVKAB{zL{d(Mt%#H5 z1lvh&)5@7-r$Zsk1b5tR8hMf`2^{l!tu(Mx?vD3L4a9~3N4#DeJu)bInC9)*sCfgt z)R4?$uZK2RZnCXGBBc5KHR$0|mApOTlB$XRR>aK6M+UW`h;jvN#SAt=tmwc;wrQF& zUQx&+uh=lqwd!cnzcue%NAZ|l(hC;r*RaHYjE`Qsd7}6CwCv8|g>9NA zXWU{dQVbwRw`rBhnzVe2vfLtD3z!IMEk_P>S3GiwY=@31MCu*yh5yt#B_ESM$zK2 zy)9o|6$`rQexsf!KwSPmEhg!rL0j8ZiPN=JJ!nw{5jM9-tSQ@#Woh?^7Kz!hp3LYA zwi8G@NX%vzNiji73wC1<>%CGawpuJKaU=WGe3i?>+*~gOD3zRPrJ&?Eiy&OCSnMem z5l$|%QX1uD1<=x=7+?j+?(8z=LULqBU~EI7I!Y5>YKzk$1KQTCP+aVY2Qzp-^I}J*G5R3Fe_zAJDO08)P&tPlTq` zJyDY@tLTBY7w_0b_ zk$PJJXxJKn5nwBjP<#PKr3jghrI!ftrK!*X2vBS>$oH(a%JY4iXJWpOdQ1y%HoMgv z-=_VjL)$Kqrp|v-lYe=+OKq{u_a11OONX|k>af80d-L&b-jLmj;1q|~9xs&WdDI|Q5o4vI`LJH^Dg>sPl zAMrj7xcfPr1+g%98}H}tKr@vM62?GH#h*Z4a)w~l9*3$xz- zfJUh%tIRX{)`B?SvwUl7)!EJkF3fuS14~V=zn%(b&2c z>WN~mZTd*A-Ps$lD_jG4=R7w!r%@fik6aV8(%d8_wx9{{i!O8SKjGPh zc7t|lX_3#=_k`71+%T)Xhb3GN5ON@$VniCRjxCd?+~PC{EU|ni&TyN4)TNxZht_D} zDW^q6jucxpYTl;SFLdlX?qZ(i&vmC()KI0iSEGHw z6qOAsI<*~Zo7yPgIy1Xc%`ul0o%>S#YRMGl`jFZBChJknjz3 z{H3R+4D#_f%6+An;MOBNS$M}HpVo*g%ZMz}j- z1JJ=Q832`5RU9Ta%S7EOQOpE0y*`J)VtaUhA%EtCaWMkcl@+CQzQFhVM%IS!JWN^X z<_PN_es~7KW)pG><1|a?qebn$)m3OV=Yl~A=Hgo^mwrQC&pxB0<~NEA6a za(!!oOubu1ULZ{ujM7MLU?OYvf4U(DXHnLJ5xbIxR7nCJ4>S$l*Gh zHJQ-Cp{Z?UFNKA!cHOP3chx;m!lAE?rxSxisOv>n*9=CXuC>FSQfsnr<6Javy1oWo zZIdLrY}`=7luc_N-av3XRvbf-7>)RL)jWR{Y25|x>1qAVGGG=<@SeDOgn1Wc=XtZ6!hWwQ&eShG-Z8m*JZIc5 z87RHyfb6`Jv4Piq{rRb@!hMbDA zH5+W{s7`UiQZrYvIg?^T%gFQ_umr(D1G55cU8OM9Q`m%=3XY47jXVj(w|~bdo&w9p zYzmt&LQ~*`RS;#vtxd7y64woGdEq{;@ki!t2BGO@OwsceSbVS8Q z^0cK3w{=|mX9AlP5hW5cR1;HD{MG(m_Y^pBiwr%3=~gHv)uteu6qDR|al%~t<)xi8 z%M!93A27Uh(3tG-a>Y%IIvksnnb0S^gPs|Z6zPFo#W`(NLS0chLUoUB8Mj4B*N{MK zF*b1w8r~sP0#V0FSGvAWAz9jlVq4D>S^S#%B$#OuG}Aqq42XkSU2?5mI6Fi)|46<%Do?(|K zX9jw3A)lMGaKEG12osmlMJ4hx#%sHO(NA*~W@depYU!O|6RRbHvwmh_ zwOJ11N)n+B`~KjG$}_8LbqQ0eByvam@dGR4i~=XGQY{K|#Ld4f1J2V4x3lw94SggY zkFf&*k=1M!Q-$p9)(Ynw6|~B@8nd0~_YlLN;G$u=-po46C1#pMm@4WZx-}#n<{^s979?+~+XKKd|-pQ?zeJ;$!#`sgjKV{GV zuR;-Twd*0;YVB~frblQ0H0+O`2Zsk2R=9+(a+rC8|6NL7Ll!$Lhx==ql~fM<{}%=W zp?ZSm0;rY4yn?CYZk5BUYePL8|3~<}5!@;M-83F4m7XQ$P2u9VD?Y!Nzrx!w9$nJCmQ;FIscTVz?+)35-2jBN7lzI|56%0pW)ws z5aAp7r=QBVmw(6kx08SVoBBK83^o$T-$diC(l@nv)0gtU-`NK5e!_0b;XD2;Wu02e za6ykZolE)d_>vy*JGQ|y-sSKeZ~joF@@FmszYbF3h3YZQzdigb>apXlyLnFfM+r;6 zRF4Gbzutb9*l@g^4BjCmZx4fwehF6I`A6gp8Q=pr@!Eoc3%+=KYWozgI^-YtH)ntk zVCtOPgNl#!R(Gz~YlL^F`UkCB#-r)m`PNUgZzEp()lcx7fDa1bC-_UjHz43D@zn@W z{88YOCHO0VdnNcT;EN^rtAQ_-;8VbtOYpmZpDw`<13y!OTjSBx%O$uw9$7OgNag7P zPnY61fe)78i@+yK@MFNIO7JD%({ld2l?E z8nd6$BM<~y@#qWGzaB;^RoF=Og{6#-rPw23`)B_8&b2{L7Kw?~X@T?f_2t|3}iF0zOsb|AtQi>!-v0dxKxJ$DJPm){meal+}OEj~zb^{wE39 zUEo*C_&+;|ulB8fBEm%P7bfF((7!GIZBgET4t)t!)#>k`fB(9Yr24-w9?kSh_5D5Y zpDo3|4F0YHR{lp{6ajw9|G)cZZeQY0l*+dg9RGQJckUUF-u4h7&w2TFz8?B}fulS- z>EFLDg_Phg8;`!?5LrcgEC0XvHm9ikcOH%JkguI5$5%eA_>}(b<0~Ip0`EDm|IV)& zU-^moQv50Mn+A^d-1#ojpJeF$OyGYr__HPa)8HdNzkbr=Ri3*aC0;+3r|X}IA3J*y z|H-KDh4GcA?}l%we8|_^?;}n0hn?R8jJ!^TyzYFG{7;tfe`I{+r|$eYY_*r21nd$!v;M2f220r@Z zzK@W+8ufjFc;qYN|1R*b1phwpW(oc*@NxmGykDpK=%+0B=RYs+F2;}Vxs4FD2U+fV z1L@TsQU6_E1bnFk|2g2tO7J0I_+7c^<=<5Ue!LVv2Yj)BRi0C-kA6yW!aw;k{kH3# z@#wuz6Q=&J@?c-QSN%cd5sdu2_Zi@~1$=gV<)bS9w21NF#(4C-r-4)Y?*?g;$% z0bd4g2mCk3qsK{S{af@I4<1+hJQeZ(a6EcK@hSg*47|Gp{|fNl5_|=Cx&;3w@as!3 zL0%Ip8}B_y*=NPaG=2wC5Am5_~K0EU@$=^}FGX zz^Q)=ek<@v;$MvTW8=~HJqsNCyWy*WKLs4+z2TdIp9fC#(Es1}BJhKe{=#_l{STM$ zzZ3X$3I0Lgb_xDlz~c9Pk^ZNEKLh;wfdA2WbV>Y{{#AK@75F4@D&O2G}Vc=SHy7xZsD0<89n{BOkmdEe<$Jo@i_ z%fKo9w*o&29Q?WQEbvn${PVyc1`dAShO{|xw0iQaEQPq6Y6z27DNVk!L}06!k_q`&DVVDT&Jd(&;eYX8XZ zCdQZdzgWU&{_y^nfTMgjeGTx-z|lW%f*&8azm$Fz_#xon*G=f}4?I?ie*(C~zngvp zSo}-nK|Vh4TnYc@fL{Pk`9BM+@+AD<8jqg5qZI!Vu=tVc^BLfI;3)5I`qPu*N6_1S z09fS-{M~N^z6>1ncfSR=#Gl>B%ah_y)Nl7)l+Vi%6=b`@*$cKHh=j3?wjh`ky__OB}@jnh6`S1B=;?-U$ehK&>aPV)> zI`mHgC;ESx^dAC_`tJE2@E-#Xduz`R(O%-;(95Io?;Ae@tRGe0^JD%gX34(a^YnQ1 z&_jf!^gjdq3E)(}pC6CD1^KBw81)+gi~fB9zc3zsQ1KTbPSBp;2mWjU-+bfv%HRJb z;3%)k^Q}(<>qnBCZ}HDmo||t6|5?JOy?un=R{8W3{+sg`)U-i$Fzv9om zC&Co}zRCETX%CCv9rS+;Smg_T-;91e_Y!cl@68_{kNP6N8j?C=tcbh9*^$5 z4Eza)Ux$7^{2=hjfNvR(zF{x$X24%K9)0;8z^4L!(|GjxlDC5aGu}^K1fCAK27Iyv z&%u#wME}>QZ%<&v|4ZT@F2(;F{8y(+@h^=>Cl3K9{$r0d?+1Rt)97zaO!v7BZt~?m=A0z&kfYrW~doTLw-Br?u{OrYEo4QPVD*tcr zt)F0id;c}%7r#<{UWT6d@o>|=cR%7esL1O5`| zEdlR!di&u2`aIbI{w9t~9f`y+l8 z|G{U0qd)FDKOTMkMc_n_@%jz71J4HjW6WMljz4!QlI63v4_6pS>mHT_x&>Z4EfA3@_zVjz|kK2ew+M7Kh=lv`eVXR`F|RI zKV8CCdn^N|@{HlP+9&G2f8Y4ZGb%sv8qfBlpH4l+Jo!m4-+t`JTg9J9zrRj?n}Ctu z{^RJI4+FOY|1R{|r-5$^_^ZKxu7v*%+UEt}rHFqR{s_J=VCIJ(dk=85|Nb8R+kVq9 zjq=exx4xi&fZt315q}iZ$$Q~7_3{67Vp_`~>KISrifvFEFYfI~j_{}kv5P;lQsDFa0qa<@q(>Y2b$f*7za$O8760N4I>U1k+zW?>^-JBaz=9Qa`nC zP1FKfYD; zLtdx9mhtQ*;Ar1zjUN|*qx{ngVV_3-n_fm9#gE|kbf5CVzto?mHzws_`r9Y_|MYi; zy?AGohw=SR@%wVX*kfOJ8*nNQ{p;5Ifm3<@HuRnX4E|3u-X9Zwst^53*ctyBcF zqCKG$A0=C>F*Di@&D*4;QIo;cRZ>+1N^yw z-@&*2rtSZ?oDTc_#fX15{o`(;qP=d}4F6y7_ZG(cd!8fy*}$hgjx15$mjaf)d!Bfg zPrXce_yL~9XzKo|4u_`Ld$(NSg78JG9$paSwq%YRuP^9DjvfI$1q>UD)N$BYS#8>P zhyS-d0Vml3&i5>Fv(4);jn$Pd|L-?j0=oPW`a-i^uk*LnV>29oc`9MRD-{+#XW^Yq z;kN^S>3sVUfxP0-kKh&lii}DkvVz&EwAA5 zO;xtLwz0^c0f+bma%uH~h(LT^6=Zwg`liFjYW&qUSCx&8;Pw~1rs|^fsw!}+>VMm_ z{ zJGSM59jx3;N}?q;V6fA|HuE<7oN^|7RWGqE9*J|uS2R}dX9gkSs z(SH)1@m#pDQbqC?wgaWV86U&+k$0R%gf^ANr)?Oma29HCcy>O*oTOf$rVO_GlfP*r zsDgBmzp4-2RoC>$>Xw(6?FRmVKNU$mcr;8bvzP4bQ94}`&EY|R;9UZ$e=UhJ8c{F;ot zDMB{seH3v2rpH%(_12yu00~6cP*e6Pe}ON5%Ew2f0oXt zM>r$^96DhCy}b+JuNR4UdPXAd%(s^yXwCe5fZd9p@3yz=@a<-My93|u(J$X)zvXr_ zKVz?3&FsssGqc0%A-r}5Ki^&!NCtaSyMM(meu_wicwD+qEL|FwZVU5k!YXk;SY<=U z=PPz27%_GgSS9WNqp$G9>ab#GKJ0*oUH64-^oD4lxZo>&#I;(ba_IUlFH3PnSEaaa zDc&2(j5c zQ3@On%@{>S+U&lSV36RCCy4ug3Sesj5Iiz&=gB}(inwRTW8yBI3~WK`o%a~O`NqEE zzMK}S#AG|Ju(7*X2Kg!)>-6c;6$9+H75h>;=_Xxjfld`@-*J_SeWyEA4A50J>7#U& zjjr9$4Y6@SN4|w4Zr|`*H~7EZw&6MG-gl>;u44%(4WBAgT$*Areg%tt+I1_HxMssb zN*9zE>=$x)RNSj#Kzeb*0Nv42y5hsJ?WPm%2${U+#!m0p#v}@}Dunc>w zP71|IC1jj|Ejod#QiII2P_P>oj({P-N46mRyQ(m3DNd2_^gGrRmLH$oLtk$kl@(~` zk~AXbhrWu}%q!_pnaV(ZJl#~ff@f;_XGEb;o=y8oO zhspF}XXPAk!P{^Xk9?X*K(fl9SCp*gCENOT9&GZ*3rjD%8#k=<>1``AO?g`Bj`9p% zE(NBzY+F0Q1s7zt6vwDlNF7$LHR7mQu9xA%L|zqyiG%VxK>qmWpknWoJ3nd@T%N3% z@fOo`nRk7c&qjuJ7S!5^VQb5AH`z9RIRmN%#dfx_hyi2ejFYDM<<4AuJFpjJk>O1n z)s9S*Big>*!(8j}Tv`K3Xs?~utCRf;o?<3H)2YY%(sPWJ9*->;(`6#MLFexz=2u7E zWL{ZW=R_|zGi-Up(9)va7CQN1W!lwV#Zx&eo5M9sUFHetc~RPPAvI`fAL}5^TwgyK z>8<4=SUzlLESEtKrCC*q%hlnbvjzLVoyqHfSbiW5W|{by-I)P)d!VFZiBWm(Ur@!W` z@kZ1n7M2@{xAU{Jf)B~VDZ6B47>&MN;0B?J2w diff --git a/pc-bios/proll.patch b/pc-bios/proll.patch index fb215a0c61..dbe01e432a 100644 --- a/pc-bios/proll.patch +++ b/pc-bios/proll.patch @@ -1,6 +1,6 @@ -diff -ruN proll_18.orig/Makefile proll-patch10/Makefile +diff -ruN proll_18.orig/Makefile proll-patch-15/Makefile --- proll_18.orig/Makefile 2002-09-13 14:16:59.000000000 +0000 -+++ proll-patch10/Makefile 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/Makefile 2005-11-09 18:14:51.000000000 +0000 @@ -4,6 +4,7 @@ make -C krups-ser all make -C espresso all @@ -14,14 +14,14 @@ diff -ruN proll_18.orig/Makefile proll-patch10/Makefile make -C espresso clean make -C espresso-ser clean + make -C qemu clean -diff -ruN proll_18.orig/qemu/Makefile proll-patch10/qemu/Makefile +diff -ruN proll_18.orig/qemu/Makefile proll-patch-15/qemu/Makefile --- proll_18.orig/qemu/Makefile 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/Makefile 2005-04-12 14:42:23.000000000 +0000 ++++ proll-patch-15/qemu/Makefile 2005-08-14 10:25:06.000000000 +0000 @@ -0,0 +1,123 @@ +# +# proll: +# qemu/Makefile - make PROLL for QEMU -+# $Id: proll.patch,v 1.5 2005-04-26 21:02:48 bellard Exp $ ++# $Id: proll.patch,v 1.6 2005-11-11 00:24:57 bellard Exp $ +# +# Copyright 1999 Pete Zaitcev +# This is Free Software is licensed under terms of GNU General Public License. @@ -55,8 +55,8 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch10/qemu/Makefile +# Fixed %g6 is for arch/sparc/kernel/head.S, it seems ok w/o -ffixed-g6. +# Kernel uses -fcall-used-g5 -fcall-used-g7, we probably do not need them. +# __ANSI__ is supposed to be on by default but it is not. -+CFLAGS = -O2 -Wall -DPROLBASE=$(PROLBASE) -DPROLDATA=$(PROLDATA) -DPROLRODATA=$(PROLRODATA) -D__ANSI__=1 -I$(SRC) -mcpu=hypersparc -g -DQEMU -+ASFLAGS = -D__ASSEMBLY__ -I$(SRC) -DPROLRODATA=$(PROLRODATA) -DPROLDATA=$(PROLDATA) -DPROLSIZE=$(PROLSIZE) -g ++CFLAGS = -O2 -W -Wall -DPROLBASE=$(PROLBASE) -DPROLDATA=$(PROLDATA) -DPROLRODATA=$(PROLRODATA) -D__ANSI__=1 -I$(SRC) -mcpu=hypersparc -Wa,-xarch=v8 -g -DQEMU -m32 -fno-builtin ++ASFLAGS = -D__ASSEMBLY__ -I$(SRC) -DPROLRODATA=$(PROLRODATA) -DPROLDATA=$(PROLDATA) -DPROLSIZE=$(PROLSIZE) -g -Wa,-xarch=v8 -Wa,-32 +# Solaris or Linux/i386 cross compilation +#CFLAGS = -Iinclude -O + @@ -141,17 +141,17 @@ diff -ruN proll_18.orig/qemu/Makefile proll-patch10/qemu/Makefile + +proll.aout: $(PROLLEXE) + $(ELFTOAOUT) -o proll.aout $(PROLLEXE) -diff -ruN proll_18.orig/qemu/head.S proll-patch10/qemu/head.S +diff -ruN proll_18.orig/qemu/head.S proll-patch-15/qemu/head.S --- proll_18.orig/qemu/head.S 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/head.S 2005-03-02 15:30:47.000000000 +0000 -@@ -0,0 +1,539 @@ ++++ proll-patch-15/qemu/head.S 2005-07-12 22:24:17.000000000 +0000 +@@ -0,0 +1,543 @@ +/** + ** Standalone startup code for Linux PROM emulator. + ** Copyright 1999 Pete A. Zaitcev + ** This code is licensed under GNU General Public License. + **/ +/* -+ * $Id: proll.patch,v 1.5 2005-04-26 21:02:48 bellard Exp $ ++ * $Id: proll.patch,v 1.6 2005-11-11 00:24:57 bellard Exp $ + */ + +#include @@ -443,6 +443,10 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch10/qemu/head.S +C_LABEL(bootup_user_stack): .skip 0x2000 + + .section ".text" ++ .register %g2, #scratch ++ .register %g3, #scratch ++ .register %g6, #scratch ++ .register %g7, #scratch + +goprol: + ! %g1 contains end of memory @@ -684,9 +688,9 @@ diff -ruN proll_18.orig/qemu/head.S proll-patch10/qemu/head.S +C_LABEL(ldb_bypass): + retl + lduba [%o0] ASI_M_BYPASS, %o0 -diff -ruN proll_18.orig/qemu/main.c proll-patch10/qemu/main.c +diff -ruN proll_18.orig/qemu/main.c proll-patch-15/qemu/main.c --- proll_18.orig/qemu/main.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/main.c 2005-04-16 18:03:23.000000000 +0000 ++++ proll-patch-15/qemu/main.c 2005-08-14 10:07:48.000000000 +0000 @@ -0,0 +1,185 @@ +/** + ** Proll (PROM replacement) @@ -852,7 +856,7 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch10/qemu/main.c + +/* + */ -+void udelay(unsigned long usecs) ++void udelay(__attribute__((unused)) unsigned long usecs) +{ + // Qemu hardware is perfect and does not need any delays! +} @@ -873,10 +877,10 @@ diff -ruN proll_18.orig/qemu/main.c proll-patch10/qemu/main.c + hw_idprom = va_prom; +} + -diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +diff -ruN proll_18.orig/qemu/openprom.c proll-patch-15/qemu/openprom.c --- proll_18.orig/qemu/openprom.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/openprom.c 2005-04-16 17:30:19.000000000 +0000 -@@ -0,0 +1,741 @@ ++++ proll-patch-15/qemu/openprom.c 2005-11-07 20:11:04.000000000 +0000 +@@ -0,0 +1,910 @@ +/* + * PROM interface support + * Copyright 1996 The Australian National University. @@ -900,7 +904,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +struct property { + const char *name; + const char *value; -+ const int length; ++ int length; +}; + +struct node { @@ -920,12 +924,13 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static const struct property null_properties = { NULL, NULL, -1 }; +static const int prop_true = -1; + -+static const struct property propv_root[] = { -+ {"name", "SUNW,JavaStation-1", sizeof("SUNW,JavaStation-1") }, ++static struct property propv_root[7]; ++ ++static const struct property propv_root_templ[] = { ++ {"name", "SUNW,SparcStation-5", sizeof("SUNW,SparcStation-5") }, + {"idprom", obp_idprom, IDPROM_SIZE}, -+ {"banner-name", "JavaStation", sizeof("JavaStation")}, ++ {"banner-name", "SparcStation", sizeof("SparcStation")}, + {"compatible", "sun4m", 6}, -+ {NULL, NULL, -1} +}; + +static const int prop_iommu_reg[] = { @@ -986,7 +991,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static const int height = 0x300; +static const int width = 0x400; +static const int linebytes = 0x400; -+static const int depth = 8; ++static const int depth = 24; +static const int tcx_intr[] = { 5, 0 }; +static const int tcx_interrupts = 5; +static const struct property propv_sbus_tcx[] = { @@ -1004,7 +1009,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + {"linebytes", (char*)&linebytes, sizeof(int)}, + {"depth", (char*)&depth, sizeof(int)}, + {"reg", (char*)&prop_tcx_regs[0], sizeof(prop_tcx_regs)}, -+ {"tcx-8-bit", (char*)&prop_true, 0}, ++ {"tcx-8-bit", 0, -1}, + {"intr", (char*)&tcx_intr[0], sizeof(tcx_intr)}, + {"interrupts", (char*)&tcx_interrupts, sizeof(tcx_interrupts)}, + {"device_type", "display", sizeof("display")}, @@ -1101,15 +1106,17 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static const int prop_zs_reg[] = { + 0x0, 0x00000000, 0x00000008, +}; -+static const int prop_zs_slave[] = { 1 }; +static void *prop_zs_addr; ++static const int prop_zs_slave = 1; +static const struct property propv_obio_zs[] = { + {"name", "zs", sizeof("zs")}, + {"reg", (char*)&prop_zs_reg[0], sizeof(prop_zs_reg) }, -+ {"slave", (char*)&prop_zs_slave[0], sizeof(prop_zs_slave) }, ++ {"slave", (char*)&prop_zs_slave, sizeof(prop_zs_slave) }, + {"device_type", "serial", sizeof("serial") }, + {"intr", (char*)&prop_zs_intr[0], sizeof(prop_zs_intr) }, + {"address", (char*)&prop_zs_addr, sizeof(prop_zs_addr) }, ++ {"keyboard", (char*)&prop_true, 0}, ++ {"mouse", (char*)&prop_true, 0}, + {NULL, NULL, -1} +}; + @@ -1118,11 +1125,11 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + 0x0, 0x00100000, 0x00000008, +}; +static void *prop_zs1_addr; -+static const int prop_zs1_slave[] = { 0 }; ++static const int prop_zs1_slave = 0; +static const struct property propv_obio_zs1[] = { + {"name", "zs", sizeof("zs")}, + {"reg", (char*)&prop_zs1_reg[0], sizeof(prop_zs1_reg) }, -+ {"slave", (char*)&prop_zs1_slave[0], sizeof(prop_zs1_slave) }, ++ {"slave", (char*)&prop_zs1_slave, sizeof(prop_zs1_slave) }, + {"device_type", "serial", sizeof("serial") }, + {"intr", (char*)&prop_zs1_intr[0], sizeof(prop_zs1_intr) }, + {"address", (char*)&prop_zs1_addr, sizeof(prop_zs1_addr) }, @@ -1185,6 +1192,15 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + {NULL, NULL, -1} +}; + ++static const int prop_apc_reg[] = { ++ 0x4, 0x0a000000, 0x00000010, ++}; ++static const struct property propv_sbus_apc[] = { ++ {"name", "xxxpower-management", sizeof("xxxpower-management")}, ++ {"reg", (char*)&prop_apc_reg[0], sizeof(prop_apc_reg) }, ++ {NULL, NULL, -1} ++}; ++ +static const int prop_fd_intr[] = { 0x2b, 0x0 }; +static const int prop_fd_reg[] = { + 0x0, 0x00400000, 0x0000000f, @@ -1221,41 +1237,62 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + {"name", "options", sizeof("options")}, + {"screen-#columns", "80", sizeof("80")}, + {"screen-#rows", "25", sizeof("25")}, -+ {"tpe-link-test?", "true", sizeof("true")}, ++ {"tpe-link-test?", (char *)&prop_true, 0}, + {"ttya-mode", "9600,8,n,1,-", sizeof("9600,8,n,1,-")}, -+ {"ttya-ignore-cd", "true", sizeof("true")}, -+ {"ttya-rts-dtr-off", "false", sizeof("false")}, ++ {"ttya-ignore-cd", (char *)&prop_true, 0}, ++ {"ttya-rts-dtr-off", 0, -1}, + {"ttyb-mode", "9600,8,n,1,-", sizeof("9600,8,n,1,-")}, -+ {"ttyb-ignore-cd", "true", sizeof("true")}, -+ {"ttyb-rts-dtr-off", "false", sizeof("false")}, ++ {"ttyb-ignore-cd", (char *)&prop_true, 0}, ++ {"ttyb-rts-dtr-off", 0, -1}, ++ {NULL, NULL, -1} ++}; ++ ++static int prop_mem_reg[3]; ++static int prop_mem_avail[3]; ++ ++static const struct property propv_memory[] = { ++ {"name", "memory", sizeof("memory")}, ++ {"reg", (char*)&prop_mem_reg[0], sizeof(prop_mem_reg) }, ++ {"available", (char*)&prop_mem_avail[0], sizeof(prop_mem_avail) }, ++ {NULL, NULL, -1} ++}; ++ ++static int prop_vmem_avail[6]; ++ ++static const struct property propv_vmemory[] = { ++ {"name", "virtual-memory", sizeof("virtual-memory")}, ++ {"available", (char*)&prop_vmem_avail[0], sizeof(prop_vmem_avail) }, + {NULL, NULL, -1} +}; + +static const struct node nodes[] = { + { &null_properties, 1, 0 }, /* 0 = big brother of root */ + { propv_root, 0, 2 }, /* 1 "/" */ -+ { propv_iommu, 11, 3 }, /* 2 "/iommu" */ ++ { propv_iommu, 12, 3 }, /* 2 "/iommu" */ + { propv_sbus, 0, 4 }, /* 3 "/iommu/sbus" */ + { propv_sbus_tcx, 5, 0 }, /* 4 "/iommu/sbus/SUNW,tcx" */ + { propv_sbus_ledma, 7, 6 }, /* 5 "/iommu/sbus/ledma" */ + { propv_sbus_ledma_le, 0, 0 }, /* 6 "/iommu/sbus/ledma/le" */ + { propv_sbus_cs4231, 8, 0 }, /* 7 "/iommu/sbus/SUNW,CS4231 */ + { propv_sbus_bpp, 9, 0 }, /* 8 "/iommu/sbus/SUNW,bpp */ -+ { propv_sbus_espdma, 0, 10 }, /* 9 "/iommu/sbus/espdma" */ ++ { propv_sbus_espdma, 11, 10 }, /* 9 "/iommu/sbus/espdma" */ + { propv_sbus_espdma_esp, 0, 0 }, /* 10 "/iommu/sbus/espdma/esp" */ -+ { propv_cpu, 12, 0 }, /* 11 "/STP1012PGA" */ -+ { propv_obio, 22, 13 }, /* 12 "/obio" */ -+ { propv_obio_int, 14, 0 }, /* 13 "/obio/interrupt" */ -+ { propv_obio_cnt, 15, 0 }, /* 14 "/obio/counter" */ -+ { propv_obio_eep, 16, 0 }, /* 15 "/obio/eeprom" */ -+ { propv_obio_auxio, 17, 0 }, /* 16 "/obio/auxio" */ -+ { propv_obio_zs1, 18, 0 }, /* 17 "/obio/zs@0,100000" ++ { propv_sbus_apc, 0, 0 }, /* 11 "/iommu/sbus/power-management */ ++ { propv_cpu, 13, 0 }, /* 12 "/STP1012PGA" */ ++ { propv_obio, 23, 14 }, /* 13 "/obio" */ ++ { propv_obio_int, 15, 0 }, /* 14 "/obio/interrupt" */ ++ { propv_obio_cnt, 16, 0 }, /* 15 "/obio/counter" */ ++ { propv_obio_eep, 17, 0 }, /* 16 "/obio/eeprom" */ ++ { propv_obio_auxio, 18, 0 }, /* 17 "/obio/auxio" */ ++ { propv_obio_zs1, 19, 0 }, /* 18 "/obio/zs@0,100000" + Must be before zs@0,0! */ -+ { propv_obio_zs, 19, 0 }, /* 18 "/obio/zs@0,0" */ -+ { propv_obio_fd, 20, 0 }, /* 19 "/obio/SUNW,fdtwo" */ -+ { propv_obio_pw, 21, 0 }, /* 20 "/obio/power" */ -+ { propv_obio_cf, 0, 0 }, /* 21 "/obio/slavioconfig@0,800000" */ -+ { propv_options, 0, 0 }, /* 22 "/options" */ ++ { propv_obio_zs, 20, 0 }, /* 19 "/obio/zs@0,0" */ ++ { propv_obio_fd, 21, 0 }, /* 20 "/obio/SUNW,fdtwo" */ ++ { propv_obio_pw, 22, 0 }, /* 21 "/obio/power" */ ++ { propv_obio_cf, 0, 0 }, /* 22 "/obio/slavioconfig@0,800000" */ ++ { propv_options, 24, 0 }, /* 23 "/options" */ ++ { propv_memory, 25, 0 }, /* 24 "/memory" */ ++ { propv_vmemory, 0, 0 }, /* 25 "/virtual-memory" */ +}; + +static struct linux_mlist_v0 totphys[MAX_BANKS]; @@ -1281,6 +1318,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + +static void (*synch_hook)(void); +static char obp_stdin, obp_stdout; ++static int obp_fd_stdin, obp_fd_stdout; + +static int obp_nbgetchar(void); +static int obp_nbputchar(int ch); @@ -1289,9 +1327,13 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +static void obp_halt(void); +static int obp_devopen(char *str); +static int obp_devclose(int dev_desc); ++static int obp_devread(int dev_desc, char *buf, int nbytes); ++static int obp_devwrite(int dev_desc, char *buf, int nbytes); ++static int obp_devseek(int dev_desc, int hi, int lo); +static int obp_rdblkdev(int dev_desc, int num_blks, int blk_st, char *buf); +static char *obp_dumb_mmap(char *va, int which_io, unsigned int pa, unsigned int size); +static void obp_dumb_munmap(char *va, unsigned int size); ++static int obp_inst2pkg(int dev_desc); + +static void doublewalk(unsigned ptab1, unsigned va) +{ @@ -1304,6 +1346,17 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + +static struct linux_romvec romvec0; + ++struct fd { ++ int unit, part; ++ int offset; ++ int (*pread)(int dev_desc, int offset, char *buf, unsigned int nbytes); ++ int (*pwrite)(int dev_desc, int offset, char *buf, unsigned int nbytes); ++} fd_table[16]; ++ ++static int fd_index; ++static int con_pread(int dev_desc, int offset, char *buf, unsigned int nbytes); ++static int con_pwrite(int dev_desc, int offset, char *buf, unsigned int nbytes); ++ +void * +init_openprom_qemu(int bankc, struct bank *bankv, unsigned hiphybas, + const char *cmdline, char boot_device, int nographic) @@ -1345,6 +1398,18 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + totmap[0].theres_more = 0; + totmap[0].start_adr = (char*) PROLBASE; + totmap[0].num_bytes = PROLSIZE; ++ prop_mem_reg[0] = 0; ++ prop_mem_reg[1] = 0; ++ prop_mem_reg[2] = bankv[0].length; ++ prop_mem_avail[0] = 0; ++ prop_mem_avail[1] = 0; ++ prop_mem_avail[2] = hiphybas; ++ prop_vmem_avail[0] = 0; ++ prop_vmem_avail[1] = 0; ++ prop_vmem_avail[2] = PROLBASE-1; ++ prop_vmem_avail[3] = 0; ++ prop_vmem_avail[4] = 0xffe00000; ++ prop_vmem_avail[5] = 0x00200000; + + /* + * idprom @@ -1353,6 +1418,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + + // Linux wants a R/W romvec table + romvec0.pv_magic_cookie = LINUX_OPPROM_MAGIC; ++ romvec0.pv_romvers = 3; + romvec0.pv_plugin_revision = 77; + romvec0.pv_printrev = 0x10203; + romvec0.pv_v0mem.v0_totphys = &ptphys; @@ -1375,10 +1441,17 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + romvec0.pv_halt = obp_halt; + romvec0.pv_synchook = &synch_hook; + romvec0.pv_v0bootargs = &obp_argp; ++ romvec0.pv_v2devops.v2_inst2pkg = obp_inst2pkg; + romvec0.pv_v2devops.v2_dumb_mmap = obp_dumb_mmap; + romvec0.pv_v2devops.v2_dumb_munmap = obp_dumb_munmap; ++ romvec0.pv_v2devops.v2_dev_open = obp_devopen; ++ romvec0.pv_v2devops.v2_dev_close = (void (*)(int))obp_devclose; ++ romvec0.pv_v2devops.v2_dev_read = obp_devread; ++ romvec0.pv_v2devops.v2_dev_write = obp_devwrite; ++ romvec0.pv_v2devops.v2_dev_seek = obp_devseek; + obp_arg.boot_dev_ctrl = 0; + obp_arg.boot_dev_unit = '0'; ++ obp_arg.argv[0] = "sd(0,0,0):d"; + switch(boot_device) { + default: + case 'a': @@ -1388,9 +1461,9 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + break; + case 'd': + obp_arg.boot_dev_unit = '2'; ++ obp_arg.argv[0] = "sd(0,2,0):d"; + // Fall through + case 'c': -+ obp_arg.argv[0] = "sd()"; + obp_arg.boot_dev[0] = 's'; + obp_arg.boot_dev[1] = 'd'; + break; @@ -1401,13 +1474,39 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + break; + } + obp_arg.argv[1] = cmdline; ++ romvec0.pv_v2bootargs.bootpath = &obp_arg.argv[0]; ++ romvec0.pv_v2bootargs.bootargs = &cmdline; ++ romvec0.pv_v2bootargs.fd_stdin = &obp_fd_stdin; ++ romvec0.pv_v2bootargs.fd_stdout = &obp_fd_stdout; + ++ bcopy(propv_root_templ, propv_root, sizeof(propv_root_templ)); ++ propv_root[4].name = "stdin-path"; ++ propv_root[5].name = "stdout-path"; ++ obp_fd_stdin = 0; ++ obp_fd_stdout = 1; ++ fd_table[0].pread = con_pread; ++ fd_table[0].pwrite = con_pwrite; ++ fd_table[1].pread = con_pread; ++ fd_table[1].pwrite = con_pwrite; ++ fd_index = 2; + if (nographic) { + obp_stdin = PROMDEV_TTYA; ++ propv_root[4].value = "/obio/zs@0,100000:a"; ++ propv_root[4].length = sizeof("/obio/zs@0,100000:a"); ++ fd_table[0].unit = 18; + obp_stdout = PROMDEV_TTYA; ++ propv_root[5].value = "/obio/zs@0,100000:a"; ++ propv_root[5].length = sizeof("/obio/zs@0,100000:a"); ++ fd_table[1].unit = 18; + } else { + obp_stdin = PROMDEV_KBD; ++ propv_root[4].value = "/obio/zs@0,0"; ++ propv_root[4].length = sizeof("/obio/zs@0,0"); ++ fd_table[0].unit = 19; + obp_stdout = PROMDEV_SCREEN; ++ propv_root[5].value = "/iommu/sbus/SUNW,tcx"; ++ propv_root[5].length = sizeof("/iommu/sbus/SUNW,tcx"); ++ fd_table[1].unit = 4; + } + prop_zs_addr = map_io(0x71000000, 8); + prop_zs1_addr = map_io(0x71100000, 8); @@ -1481,7 +1580,10 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + return -1; +} + -+static int obp_setprop(int node, char *name, char *value, int len) ++static int obp_setprop(__attribute__((unused)) int node, ++ __attribute__((unused)) char *name, ++ __attribute__((unused)) char *value, ++ __attribute__((unused)) int len) +{ +#ifdef DEBUG_OBP + printk("obp_setprop(%d, %s) = %s (%d)\n", node, name, value, len); @@ -1511,7 +1613,7 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +#ifdef DEBUG_OBP + printk("obp_nextprop(%d, %s): not found\n", node, name); +#endif -+ return (const char *)-1; ++ return ""; +} + +extern int (*getch_fn)(struct vconterm *v); @@ -1527,21 +1629,60 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c +} + +static void obp_reboot(char *str) { -+ printk("rebooting (%s): not implemented, freezing\n", str); ++ printk("rebooting (%s)\n", str); ++ stb_bypass(0x71f00000, 1); + for (;;) {} +} + +static void obp_abort() { -+ printk("abort, freezing\n"); ++ printk("abort, power off\n"); ++ stb_bypass(0x71910000, 1); + for (;;) {} +} + +static void obp_halt() { -+ printk("halt, freezing\n"); ++ printk("halt, power off\n"); ++ stb_bypass(0x71910000, 1); + for (;;) {} +} ++ ++extern void *esp_read(int unit, int part, int offset, short len); ++ ++static int esp_pread(int dev_desc, int offset, char *buf, unsigned int nbytes) ++{ ++ unsigned int i; ++ void *src; ++ ++ for(i = 0; i < nbytes; i += 512) { ++ src = esp_read(fd_table[dev_desc].unit, fd_table[dev_desc].part, (offset + i) / 512, 512); ++ memcpy(&buf[i], src, 512); ++ } ++ return nbytes; ++} ++ ++static int con_pread(__attribute__((unused)) int dev_desc, __attribute__((unused)) int offset, char *buf, unsigned int nbytes) ++{ ++ unsigned int i; ++ ++ for(i = 0; i < nbytes; i ++) { ++ buf[i] = obp_nbgetchar(); ++ } ++ return nbytes; ++} ++ ++static int con_pwrite(__attribute__((unused)) int dev_desc, __attribute__((unused)) int offset, char *buf, unsigned int nbytes) ++{ ++ unsigned int i; ++ ++ for(i = 0; i < nbytes; i ++) { ++ obp_nbputchar(buf[i]); ++ } ++ return nbytes; ++} ++ +#define isnum(c) ((c >= '0') && (c < '9')) +#define ctoi(c) (c - '0') ++ +static int obp_devopen(char *str) { +#ifdef DEBUG_OBP + printk("obp_devopen(%s)\n", str); @@ -1557,39 +1698,32 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + else { + target = ctoi(str[5]) & 7; + } -+ return 's' + target; ++ fd_table[fd_index].unit = target; ++ fd_table[fd_index].part = str[10] - 'a'; ++ fd_table[fd_index].pread = esp_pread; ++ return fd_index++; // XXX + } + return 0; +} + -+static int obp_devclose(int dev_desc) { ++static int obp_devclose(__attribute__((unused)) int dev_desc) { +#ifdef DEBUG_OBP + printk("obp_devclose %d\n", dev_desc); +#endif ++ fd_index--; // XXX + return 0; +} + -+extern void *esp_read(int unit, int offset, short len); -+ +static int obp_rdblkdev(int dev_desc, int num_blks, int offset, char *buf) +{ -+ unsigned int i; -+ void *src; -+ +#ifdef DEBUG_OBP + printk("obp_rdblkdev: fd %d, num_blks %d, offset %d, buf 0x%x\n", dev_desc, num_blks, offset, buf); +#endif -+ if (dev_desc >= 's' && dev_desc < 'v') { -+ for(i = 0; i < num_blks; i++) { -+ src = esp_read(dev_desc - 's', offset + i, 1); -+ memcpy(&buf[i << 9], src, 512); -+ } -+ return num_blks; -+ } -+ return -1; ++ return fd_table[dev_desc].pread(dev_desc, offset, buf, num_blks * 512); +} + -+static char *obp_dumb_mmap(char *va, int which_io, unsigned int pa, unsigned int size) ++static char *obp_dumb_mmap(char *va, __attribute__((unused)) int which_io, ++ unsigned int pa, unsigned int size) +{ + unsigned int npages; + unsigned int off; @@ -1611,16 +1745,55 @@ diff -ruN proll_18.orig/qemu/openprom.c proll-patch10/qemu/openprom.c + return va; +} + -+static void obp_dumb_munmap(char *va, unsigned int size) ++static void obp_dumb_munmap(__attribute__((unused)) char *va, ++ __attribute__((unused)) unsigned int size) +{ +#ifdef DEBUG_OBP + printk("obp_dumb_munmap: virta %x, sz %d\n", va, size); +#endif -+ +} -diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch10/qemu/system_qemu.c ++ ++static int obp_devread(int dev_desc, char *buf, int nbytes) ++{ ++ int ret; ++#ifdef DEBUG_OBP ++ printk("obp_devread: fd %d, nbytes %d\n", dev_desc, nbytes); ++#endif ++ ret = fd_table[dev_desc].pread(dev_desc, fd_table[dev_desc].offset, buf, nbytes); ++ fd_table[dev_desc].offset += nbytes; ++ return ret; ++} ++ ++static int obp_devwrite(int dev_desc, char *buf, int nbytes) ++{ ++ int ret; ++#ifdef DEBUG_OBP ++ printk("obp_devwrite: fd %d, buf %s, nbytes %d\n", dev_desc, buf, nbytes); ++#endif ++ ret = fd_table[dev_desc].pwrite(dev_desc, fd_table[dev_desc].offset, buf, nbytes); ++ fd_table[dev_desc].offset += nbytes; ++ return ret; ++} ++ ++static int obp_devseek(int dev_desc, __attribute__((unused)) int hi, int lo) ++{ ++#ifdef DEBUG_OBP ++ printk("obp_devseek: fd %d, hi %d, lo %d\n", dev_desc, hi, lo); ++#endif ++ fd_table[dev_desc].offset = lo; ++ return 0; ++} ++ ++static int obp_inst2pkg(int dev_desc) ++{ ++#ifdef DEBUG_OBP ++ printk("obp_inst2pkg: fd %d\n", dev_desc); ++#endif ++ return fd_table[dev_desc].unit; ++} +diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch-15/qemu/system_qemu.c --- proll_18.orig/qemu/system_qemu.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/qemu/system_qemu.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/qemu/system_qemu.c 2005-04-16 06:16:20.000000000 +0000 @@ -0,0 +1,430 @@ +/** + ** Proll (PROM replacement) @@ -2052,9 +2225,9 @@ diff -ruN proll_18.orig/qemu/system_qemu.c proll-patch10/qemu/system_qemu.c + n = (n>>24 & 0xFF) | (n>>8 & 0xFF00) | ((n&0xFF00) << 8) | (n<<24); + st_bypass(ptr, n); +}; -diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c +diff -ruN proll_18.orig/src/arp.c proll-patch-15/src/arp.c --- proll_18.orig/src/arp.c 2001-12-24 05:12:31.000000000 +0000 -+++ proll-patch10/src/arp.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/arp.c 2005-08-14 10:10:11.000000000 +0000 @@ -45,7 +45,7 @@ #endif static struct arp_cache arp_list[ARPNUM]; /* ARP address cache */ @@ -2064,7 +2237,19 @@ diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c -@@ -144,7 +144,7 @@ +@@ -100,10 +100,7 @@ + * + * ARP receiver routine + */ +-static int arp_recv(buf, bufsize, addr) +-unsigned char *buf; +-int bufsize; +-unsigned char *addr; ++static int arp_recv(unsigned char *buf, unsigned int bufsize, unsigned char *addr) + { + register struct arphdr *ahp = (struct arphdr *)buf; + +@@ -144,7 +141,7 @@ * * Resolve IP address and return pointer to hardware address. */ @@ -2073,7 +2258,7 @@ diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c t_ipaddr ip; { int i; -@@ -230,14 +230,11 @@ +@@ -230,14 +227,11 @@ */ int init_arp() { @@ -2089,9 +2274,9 @@ diff -ruN proll_18.orig/src/arp.c proll-patch10/src/arp.c + def_gw = IP_ANY; return(TRUE); } -diff -ruN proll_18.orig/src/arp.h proll-patch10/src/arp.h +diff -ruN proll_18.orig/src/arp.h proll-patch-15/src/arp.h --- proll_18.orig/src/arp.h 1999-03-18 03:39:43.000000000 +0000 -+++ proll-patch10/src/arp.h 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/arp.h 2004-11-13 15:50:49.000000000 +0000 @@ -104,7 +104,7 @@ extern int init_arp __P((void)); @@ -2101,10 +2286,22 @@ diff -ruN proll_18.orig/src/arp.h proll-patch10/src/arp.h /* Add a new antry to the ARP cache */ extern void addcache __P((unsigned char *ha, t_ipaddr ip)); -diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c +diff -ruN proll_18.orig/src/bootp.c proll-patch-15/src/bootp.c +--- proll_18.orig/src/bootp.c 1999-12-15 17:20:30.000000000 +0000 ++++ proll-patch-15/src/bootp.c 2005-08-14 10:16:09.000000000 +0000 +@@ -151,7 +151,7 @@ + while (TRUE) { + boot_xid = get_ticks() + random(); + bootp_send(); +- i = udp_read((char *)(&boot_rec), BOOTP_REC_SIZE, timeout, CHR_ESC); ++ i = udp_read((char *)(&boot_rec), BOOTP_REC_SIZE, timeout); + if (i < 0) { /* user pressed ESC */ + printf("\nAborted\n"); + return(1); +diff -ruN proll_18.orig/src/esp.c proll-patch-15/src/esp.c --- proll_18.orig/src/esp.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/esp.c 2005-04-16 06:24:23.000000000 +0000 -@@ -0,0 +1,252 @@ ++++ proll-patch-15/src/esp.c 2005-08-15 18:42:46.000000000 +0000 +@@ -0,0 +1,305 @@ +#include /* == */ +#include /* __P for netpriv.h */ +#include /* dmaga */ @@ -2138,6 +2335,10 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + struct esp_dma *espdma; /* If set this points to espdma */ + + unsigned char *buffer; ++ struct disk_info { ++ unsigned int hw_sector; ++ unsigned int part_offset[8]; ++ } disk[8]; +}; + +static void esp_interrupt(void *dev_id) @@ -2260,7 +2461,7 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + return; +} + -+void *esp_read(int unit, int offset, short len) ++void esp_read_capacity(int unit) +{ + // Set SCSI target + stb_bypass(PHYS_JJ_ESP + 4*4, unit & 7); @@ -2271,28 +2472,74 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + stb_bypass(PHYS_JJ_ESP + 1*4, 0); + // Set DMA direction + st_bypass(PHYS_JJ_ESPDMA + 0, 0x000); ++ // Setup command = Read Capacity ++ esp.buffer[0] = 0x80; ++ esp.buffer[1] = 0x25; ++ esp.buffer[2] = 0x00; ++ esp.buffer[3] = 0x00; ++ esp.buffer[4] = 0x00; ++ esp.buffer[5] = 0x00; ++ esp.buffer[6] = 0x00; ++ esp.buffer[7] = 0x00; ++ esp.buffer[8] = 0x00; ++ esp.buffer[9] = 0x00; ++ esp.buffer[10] = 0x00; ++ // Set ATN, issue command ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0xc2); ++ ++ // Set DMA length = 512 * read length ++ stb_bypass(PHYS_JJ_ESP + 0*4, 0); ++ stb_bypass(PHYS_JJ_ESP + 1*4, 8 & 0xff); ++ // Set DMA direction ++ st_bypass(PHYS_JJ_ESPDMA + 0, 0x100); ++ // Transfer ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0x90); ++ esp.disk[unit].hw_sector = (esp.buffer[4] << 24) | (esp.buffer[5] << 16) | (esp.buffer[6] << 8) | esp.buffer[7]; ++} ++ ++// offset is multiple of 512, len in bytes ++void *esp_read(int unit, int part, int offset, short len) ++{ ++ int pos, hw_sect, sect_offset, spb; ++ ++ // Set SCSI target ++ stb_bypass(PHYS_JJ_ESP + 4*4, unit & 7); ++ // Set DMA address ++ st_bypass(PHYS_JJ_ESPDMA + 4, esp.buffer_dvma); ++ // Set DMA length ++ stb_bypass(PHYS_JJ_ESP + 0*4, 10); ++ stb_bypass(PHYS_JJ_ESP + 1*4, 0); ++ // Set DMA direction ++ st_bypass(PHYS_JJ_ESPDMA + 0, 0x000); ++ hw_sect = esp.disk[unit].hw_sector; ++ offset += esp.disk[unit].part_offset[part]; ++ spb = hw_sect / 512; ++ sect_offset = offset / spb; ++ pos = (offset - sect_offset * spb) * 512; ++ len /= 512; ++ //printk("Read unit %d, offset %d -> offset %d, pos %d, hw_sect %d\n", unit, offset, sect_offset, pos, hw_sect); + // Setup command = Read(10) + esp.buffer[0] = 0x80; + esp.buffer[1] = 0x28; + esp.buffer[2] = 0x00; -+ esp.buffer[3] = (offset >> 24) & 0xff; -+ esp.buffer[4] = (offset >> 16) & 0xff; -+ esp.buffer[5] = (offset >> 8) & 0xff; -+ esp.buffer[6] = offset & 0xff; ++ esp.buffer[3] = (sect_offset >> 24) & 0xff; ++ esp.buffer[4] = (sect_offset >> 16) & 0xff; ++ esp.buffer[5] = (sect_offset >> 8) & 0xff; ++ esp.buffer[6] = sect_offset & 0xff; + esp.buffer[7] = 0x00; + esp.buffer[8] = (len >> 8) & 0xff; + esp.buffer[9] = len & 0xff; + // Set ATN, issue command -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0x42); ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0xc2); + -+ // Set DMA length = 512 * read length -+ stb_bypass(PHYS_JJ_ESP + 0*4, 0); -+ stb_bypass(PHYS_JJ_ESP + 1*4, (len << 1) & 0xff); ++ // Set DMA length = sector size * read length ++ stb_bypass(PHYS_JJ_ESP + 0*4, (len * hw_sect) & 0xff); ++ stb_bypass(PHYS_JJ_ESP + 1*4, ((len * hw_sect) >> 8) & 0xff); + // Set DMA direction + st_bypass(PHYS_JJ_ESPDMA + 0, 0x100); + // Transfer -+ stb_bypass(PHYS_JJ_ESP + 3*4, 0x10); -+ return esp.buffer; ++ stb_bypass(PHYS_JJ_ESP + 3*4, 0x90); ++ return esp.buffer + pos; +} + +// Sparc boot sequence can be found in SILO docs, @@ -2334,32 +2581,35 @@ diff -ruN proll_18.orig/src/esp.c proll-patch10/src/esp.c + stb_bypass(PHYS_JJ_ESP + 3*4, 2); + + esp_open(&esp); ++ esp_read_capacity(unit); + -+ label = esp_read(unit, 0, 1); -+ printk("CHS: %d/%d/%d, partitions:\n", label->ncyl, label->ntrks, label->nsect); ++ label = esp_read(unit, 0, 0, 512); ++ printk("hw sector: %d, CHS: %d/%d/%d, partitions:\n", esp.disk[unit].hw_sector, ++ label->ncyl, label->ntrks, label->nsect); + for (i = 0; i < 8; i++) { -+ printk("%c: %d + %d\n", 'a' + i, label->partitions[i].start_cylinder, -+ label->partitions[i].num_sectors); ++ printk("%c: %d + %d, id %x, flags %x\n", 'a' + i, label->partitions[i].start_cylinder, ++ label->partitions[i].num_sectors, label->infos[i].id, label->infos[i].flags); ++ esp.disk[unit].part_offset[i] = label->partitions[3].start_cylinder * label->ntrks * label->nsect; + } -+ offset = label->partitions[4].start_cylinder * label->ntrks * label->nsect + 1; ++ offset = 1; + printk("booting sd(0,%d,0):d (offset %d)\n", unit, offset); + // Skip a.out header (0x20) + dst = (void *)0x4000; -+ src = esp_read(unit, offset, 1); ++ src = esp_read(unit, 3, offset, 512); + src = (void *)((unsigned int) src + 0x20); + memcpy(dst, src, 512 - 0x20); + dst = (void *)0x4000 + 512 - 0x20; + for (i = 1; i < 7680/512; i++) { -+ src = esp_read(unit, offset + i, 1); ++ src = esp_read(unit, 3, offset + i, 512); + memcpy(dst, src, 512); + dst += 512; + } + esp_close(&esp); + return 0; +} -diff -ruN proll_18.orig/src/hconsole.c proll-patch10/src/hconsole.c +diff -ruN proll_18.orig/src/hconsole.c proll-patch-15/src/hconsole.c --- proll_18.orig/src/hconsole.c 2002-07-23 05:52:48.000000000 +0000 -+++ proll-patch10/src/hconsole.c 2005-03-02 17:03:09.000000000 +0000 ++++ proll-patch-15/src/hconsole.c 2005-11-09 18:46:34.000000000 +0000 @@ -29,6 +29,10 @@ struct raster r_master; /* For a case of resize, whole fb */ struct raster r_0; /* malloc() erzatz */ @@ -2383,9 +2633,84 @@ diff -ruN proll_18.orig/src/hconsole.c proll-patch10/src/hconsole.c t->r_ = r; t->r0_ = q; t->f_ = &f_master; -diff -ruN proll_18.orig/src/hme.c proll-patch10/src/hme.c +@@ -67,7 +75,7 @@ + return 0; + } + +-void hcon_fini (struct hconsole *t) ++void hcon_fini (__attribute((unused)) struct hconsole *t) + { + return; + } +@@ -77,12 +85,12 @@ + { + struct rfont *f = t->f_; + +- if (sy < 0 || sy >= t->ydim_) return -1; +- if (sx < 0 || sx >= t->xdim_) return -1; ++ if (sy < 0 || (unsigned)sy >= t->ydim_) return -1; ++ if (sx < 0 || (unsigned)sx >= t->xdim_) return -1; + if (height < 0) return -1; +- if (sy + height > t->ydim_) height = t->ydim_ - sy; ++ if ((unsigned)sy + (unsigned)height > t->ydim_) height = t->ydim_ - sy; + if (width < 0) return -1; +- if (sx + width > t->xdim_) width = t->xdim_ - sx; ++ if ((unsigned)sx + (unsigned)width > t->xdim_) width = t->xdim_ - sx; + + /* XXX Clear with correct background color */ + (*t->r_->clear_)(t->r_, +@@ -107,10 +115,10 @@ + char c0 = c; + RC_color rfg, rbg; + +- if (y < 0 || y >= t->ydim_) return -1; +- if (x < 0 || x >= t->xdim_) return -1; ++ if (y < 0 || (unsigned)y >= t->ydim_) return -1; ++ if (x < 0 || (unsigned)x >= t->xdim_) return -1; + +- if (t->curson_ && t->ypos_ == y && t->xpos_ == x) { ++ if (t->curson_ && t->ypos_ == (unsigned)y && t->xpos_ == (unsigned)x) { + rfg = t->bg_; rbg = t->fg_; + } else { + rfg = t->fg_; rbg = t->bg_; +@@ -126,9 +134,9 @@ + { + struct rfont *f = t->f_; + +- if (y < 0 || y >= t->ydim_) return -1; +- if (x < 0 || x >= t->xdim_) return -1; +- if (x + count >= t->xdim_) count = t->xdim_ - x; ++ if (y < 0 || (unsigned)y >= t->ydim_) return -1; ++ if (x < 0 || (unsigned)x >= t->xdim_) return -1; ++ if ((unsigned)x + (unsigned)count >= t->xdim_) count = t->xdim_ - x; + + (*t->r_->render_)(t->r_, y*f->height_, x*f->width_, + s, count, t->bg_, t->fg_, f); +@@ -200,8 +208,8 @@ + + rc = 0; + if (dir == SM_UP) { +- if (d < 0 || d >= t->ydim_) return -1; +- if (b <= d || b > t->ydim_) return -1; ++ if (d < 0 || (unsigned)d >= t->ydim_) return -1; ++ if (b <= d || (unsigned)b > t->ydim_) return -1; + if (d + count >= b) count = b - d; + if (d + count >= b) count = b - d; + (*t->r_->yscroll_)(t->r_, +@@ -213,8 +221,8 @@ + count*f->height_, raster_qwidth(t->r_), + t->bg_); + } else if (dir == SM_DOWN) { +- if (d < 0 || d >= t->ydim_) return -1; +- if (b <= d || b > t->ydim_) return -1; ++ if (d < 0 || (unsigned)d >= t->ydim_) return -1; ++ if (b <= d || (unsigned)b > t->ydim_) return -1; + if (d + count >= b) count = b - d; + (*t->r_->yscroll_)(t->r_, + d*f->height_, 0, +diff -ruN proll_18.orig/src/hme.c proll-patch-15/src/hme.c --- proll_18.orig/src/hme.c 2002-07-23 05:52:52.000000000 +0000 -+++ proll-patch10/src/hme.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/hme.c 2005-04-16 06:16:20.000000000 +0000 @@ -655,10 +655,10 @@ unsigned int flags, unsigned int addr) @@ -2443,9 +2768,21 @@ diff -ruN proll_18.orig/src/hme.c proll-patch10/src/hme.c : "=r" (flags) : "r" (&this->rx_flags), "i" (ASI_PL)); #else -diff -ruN proll_18.orig/src/lat7_2.bm proll-patch10/src/lat7_2.bm +diff -ruN proll_18.orig/src/iommu.c proll-patch-15/src/iommu.c +--- proll_18.orig/src/iommu.c 2002-07-23 05:52:49.000000000 +0000 ++++ proll-patch-15/src/iommu.c 2005-08-14 10:08:17.000000000 +0000 +@@ -36,7 +36,7 @@ + unsigned int pa, ba; + unsigned int npages; + unsigned int mva, mpa; +- int i; ++ unsigned int i; + unsigned int *iopte; + + npages = (size + (PAGE_SIZE-1)) / PAGE_SIZE; +diff -ruN proll_18.orig/src/lat7_2.bm proll-patch-15/src/lat7_2.bm --- proll_18.orig/src/lat7_2.bm 1999-02-27 05:48:54.000000000 +0000 -+++ proll-patch10/src/lat7_2.bm 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/lat7_2.bm 2004-11-13 15:50:49.000000000 +0000 @@ -1,6 +1,6 @@ #define lat7_2_width 128 #define lat7_2_height 88 @@ -2454,9 +2791,9 @@ diff -ruN proll_18.orig/src/lat7_2.bm proll-patch10/src/lat7_2.bm 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x12, 0x1e, 0x0c, 0x02, 0x70, 0x18, 0x22, 0x22, 0x18, 0x00, 0x00, 0x18, 0x18, 0xff, 0x18, 0x00, 0x12, 0x02, -diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch10/src/lat7_2_swapped.bm +diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch-15/src/lat7_2_swapped.bm --- proll_18.orig/src/lat7_2_swapped.bm 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/lat7_2_swapped.bm 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/lat7_2_swapped.bm 2004-11-13 15:50:49.000000000 +0000 @@ -0,0 +1,121 @@ +#define lat7_2_width 128 +#define lat7_2_height 88 @@ -2579,9 +2916,9 @@ diff -ruN proll_18.orig/src/lat7_2_swapped.bm proll-patch10/src/lat7_2_swapped.b + 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00}; -diff -ruN proll_18.orig/src/le.c proll-patch10/src/le.c +diff -ruN proll_18.orig/src/le.c proll-patch-15/src/le.c --- proll_18.orig/src/le.c 2002-07-23 05:52:49.000000000 +0000 -+++ proll-patch10/src/le.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/le.c 2005-04-16 06:16:20.000000000 +0000 @@ -185,8 +185,6 @@ unsigned short rap; /* register address port */ }; @@ -2600,9 +2937,21 @@ diff -ruN proll_18.orig/src/le.c proll-patch10/src/le.c /* Now, give the packet to the lance */ ib->btx_ring [entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN); -diff -ruN proll_18.orig/src/netinit.c proll-patch10/src/netinit.c +diff -ruN proll_18.orig/src/net.h proll-patch-15/src/net.h +--- proll_18.orig/src/net.h 1999-12-15 17:20:17.000000000 +0000 ++++ proll-patch-15/src/net.h 2005-08-14 10:17:02.000000000 +0000 +@@ -124,7 +124,7 @@ + extern int udp_open __P((t_ipaddr daddr, int source, int dest)); + + /* Read from a UDP socket */ +-extern int udp_read __P((char *buf, int bufsize, int timeout, char abortch)); ++extern int udp_read(char *buf, unsigned int bufsize, int timeout); + + /* Write to a UDP socket */ + extern int udp_write __P((char *buf, int writelen)); +diff -ruN proll_18.orig/src/netinit.c proll-patch-15/src/netinit.c --- proll_18.orig/src/netinit.c 2002-09-13 21:53:33.000000000 +0000 -+++ proll-patch10/src/netinit.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/netinit.c 2004-11-13 15:50:49.000000000 +0000 @@ -49,13 +49,20 @@ unsigned char myhwaddr[ETH_ALEN]; /* my own hardware addr */ t_ipaddr myipaddr; /* my own IP address */ @@ -2646,9 +2995,18 @@ diff -ruN proll_18.orig/src/netinit.c proll-patch10/src/netinit.c fatal(); } } -diff -ruN proll_18.orig/src/netpriv.h proll-patch10/src/netpriv.h +diff -ruN proll_18.orig/src/netpriv.h proll-patch-15/src/netpriv.h --- proll_18.orig/src/netpriv.h 1999-04-27 05:39:37.000000000 +0000 -+++ proll-patch10/src/netpriv.h 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/netpriv.h 2005-08-14 10:12:20.000000000 +0000 +@@ -83,7 +83,7 @@ + */ + struct device *dev; + char *data; +- int len; ++ unsigned int len; + int protocol; + unsigned char ip_summed; + }; @@ -130,10 +130,9 @@ * */ @@ -2670,10 +3028,10 @@ diff -ruN proll_18.orig/src/netpriv.h proll-patch10/src/netpriv.h /* Empty read buffer */ extern void empty_buf __P((void)); -diff -ruN proll_18.orig/src/openprom.h proll-patch10/src/openprom.h +diff -ruN proll_18.orig/src/openprom.h proll-patch-15/src/openprom.h --- proll_18.orig/src/openprom.h 2002-07-14 02:26:30.000000000 +0000 -+++ proll-patch10/src/openprom.h 2004-11-13 15:50:49.000000000 +0000 -@@ -54,20 +54,20 @@ ++++ proll-patch-15/src/openprom.h 2005-05-13 16:23:14.000000000 +0000 +@@ -54,29 +54,29 @@ }; struct linux_mem_v0 { @@ -2699,6 +3057,19 @@ diff -ruN proll_18.orig/src/openprom.h proll-patch10/src/openprom.h void *aieee1; /* XXX */ }; + /* V2 and up boot things. */ + struct linux_bootargs_v2 { +- char **bootpath; +- char **bootargs; +- int *fd_stdin; +- int *fd_stdout; ++ const char **bootpath; ++ const char **bootargs; ++ const int *fd_stdin; ++ const int *fd_stdout; + }; + + /* The top level PROM vector. */ @@ -91,13 +91,13 @@ struct linux_mem_v0 pv_v0mem; @@ -2734,9 +3105,9 @@ diff -ruN proll_18.orig/src/openprom.h proll-patch10/src/openprom.h }; /* More fun PROM structures for device probing. */ -diff -ruN proll_18.orig/src/packet.c proll-patch10/src/packet.c +diff -ruN proll_18.orig/src/packet.c proll-patch-15/src/packet.c --- proll_18.orig/src/packet.c 2000-02-11 04:56:45.000000000 +0000 -+++ proll-patch10/src/packet.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/packet.c 2005-08-14 10:12:49.000000000 +0000 @@ -41,7 +41,7 @@ int aligner; } wbuf; @@ -2764,9 +3135,24 @@ diff -ruN proll_18.orig/src/packet.c proll-patch10/src/packet.c { struct sk_buff *skb; unsigned char *s; -diff -ruN proll_18.orig/src/printf.c proll-patch10/src/printf.c +@@ -209,12 +211,12 @@ + /* + */ + void +-eth_copy_and_sum(struct sk_buff *dest, unsigned char *src, int len, int base) ++eth_copy_and_sum(struct sk_buff *dest, unsigned char *src, int len, __attribute__((unused)) int base) + { + bcopy(src, dest->data, len); + } + +-unsigned short eth_type_trans(struct sk_buff *skb, struct device *dev) ++unsigned short eth_type_trans(struct sk_buff *skb, __attribute__((unused)) struct device *dev) + { + unsigned char *s = skb->data + 12; + return s[0] << 8 | s[1]; /* Network order word */ +diff -ruN proll_18.orig/src/printf.c proll-patch-15/src/printf.c --- proll_18.orig/src/printf.c 1999-03-19 07:03:59.000000000 +0000 -+++ proll-patch10/src/printf.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/printf.c 2005-08-14 10:07:26.000000000 +0000 @@ -19,7 +19,7 @@ static void printn(struct prf_fp *, unsigned long, unsigned int); static void putchar(char, struct prf_fp *); @@ -2794,9 +3180,20 @@ diff -ruN proll_18.orig/src/printf.c proll-patch10/src/printf.c putchar(c,filog); } else if (c == 'l' || c == 'O') { printn(filog, (long)va_arg(adx,long), c=='l'?10:8); -diff -ruN proll_18.orig/src/rconsole.c proll-patch10/src/rconsole.c +@@ -77,10 +77,6 @@ + char prbuf[24]; + register char *cp; + +- if (b == 10 && n < 0) { +- putchar('-',filog); +- n = (~n) + 1; /* n = -n */ +- } + cp = prbuf; + do + *cp++ = hextab[(unsigned int)(n%b)]; +diff -ruN proll_18.orig/src/rconsole.c proll-patch-15/src/rconsole.c --- proll_18.orig/src/rconsole.c 1999-01-16 07:16:55.000000000 +0000 -+++ proll-patch10/src/rconsole.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/rconsole.c 2005-08-14 10:25:53.000000000 +0000 @@ -28,12 +28,18 @@ * move to California. Only plain lat7 survived. * I recreated lat7-1 changes in lat7-2. --zaitcev @@ -2882,9 +3279,18 @@ diff -ruN proll_18.orig/src/rconsole.c proll-patch10/src/rconsole.c p->nchars_ = LAT7_NCHARS; p->width_ = LAT7_WIDTH; p->height_ = LAT7_HEIGHT; -diff -ruN proll_18.orig/src/rconsole.h proll-patch10/src/rconsole.h +@@ -175,7 +188,7 @@ + r->render_ = p->render_; + } + +-void raster_dest(struct raster *r) ++void raster_dest(__attribute((unused)) struct raster *r) + { + } + +diff -ruN proll_18.orig/src/rconsole.h proll-patch-15/src/rconsole.h --- proll_18.orig/src/rconsole.h 1999-01-16 05:00:59.000000000 +0000 -+++ proll-patch10/src/rconsole.h 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/rconsole.h 2004-11-13 15:50:49.000000000 +0000 @@ -13,10 +13,10 @@ */ @@ -2898,9 +3304,9 @@ diff -ruN proll_18.orig/src/rconsole.h proll-patch10/src/rconsole.h int nchars_; /* 128 for ASCII ... 65536 for Unicode */ int width_; /* [Pixels]. Maximum size is 16. */ int height_; /* [Pixels == scan lines]. */ -diff -ruN proll_18.orig/src/romlib.h proll-patch10/src/romlib.h +diff -ruN proll_18.orig/src/romlib.h proll-patch-15/src/romlib.h --- proll_18.orig/src/romlib.h 1999-04-20 04:26:45.000000000 +0000 -+++ proll-patch10/src/romlib.h 2005-04-16 20:32:49.000000000 +0000 ++++ proll-patch-15/src/romlib.h 2005-04-16 20:32:49.000000000 +0000 @@ -72,13 +72,13 @@ */ #define memcpy(dst, src, len) bcopy(src, dst, len) @@ -2920,9 +3326,9 @@ diff -ruN proll_18.orig/src/romlib.h proll-patch10/src/romlib.h /* -diff -ruN proll_18.orig/src/sched_4m.c proll-patch10/src/sched_4m.c +diff -ruN proll_18.orig/src/sched_4m.c proll-patch-15/src/sched_4m.c --- proll_18.orig/src/sched_4m.c 1999-04-27 05:48:51.000000000 +0000 -+++ proll-patch10/src/sched_4m.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/sched_4m.c 2005-08-14 10:18:14.000000000 +0000 @@ -108,7 +108,7 @@ static int set_bolt; /* Tick counter limit */ static struct handsc hndv[16]; @@ -2932,9 +3338,36 @@ diff -ruN proll_18.orig/src/sched_4m.c proll-patch10/src/sched_4m.c 0, 0, 0, 0, 0, 0, SUN4M_INT_ETHERNET, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -diff -ruN proll_18.orig/src/swap.c proll-patch10/src/swap.c +@@ -130,7 +130,7 @@ + int /* 0 - not expired yet; <>0 - timer expired */ + chk_timeout() + { +- int lim = (((1000000/HZ) + 1) << 10); ++ unsigned int lim = (((1000000/HZ) + 1) << 10); + unsigned int clear; + unsigned int intc; + int n; +@@ -182,7 +182,7 @@ + struct handsc *hndp; + unsigned int mask; + +- if (irq < 0 || irq >= 16) { ++ if (irq == 0 || irq >= 16) { + printk("request_irq: bad irq %d\n", irq); + return -1; + } +@@ -207,7 +207,7 @@ + { + struct handsc *hndp; + +- if (irq < 0 || irq >= 16) { ++ if (irq == 0 || irq >= 16) { + printk("free_irq: bad irq %d\n", irq); + return; + } +diff -ruN proll_18.orig/src/swap.c proll-patch-15/src/swap.c --- proll_18.orig/src/swap.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/swap.c 2004-11-13 15:50:49.000000000 +0000 ++++ proll-patch-15/src/swap.c 2004-11-13 15:50:49.000000000 +0000 @@ -0,0 +1,21 @@ +// Convert the lat7 font so that no conversion is needed at runtime. +#define ORIG @@ -2957,9 +3390,9 @@ diff -ruN proll_18.orig/src/swap.c proll-patch10/src/swap.c + } + printf("\n"); +} -diff -ruN proll_18.orig/src/system.c proll-patch10/src/system.c +diff -ruN proll_18.orig/src/system.c proll-patch-15/src/system.c --- proll_18.orig/src/system.c 2002-07-23 05:52:49.000000000 +0000 -+++ proll-patch10/src/system.c 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/system.c 2005-04-16 06:16:20.000000000 +0000 @@ -298,8 +298,8 @@ } @@ -3050,9 +3483,9 @@ diff -ruN proll_18.orig/src/system.c proll-patch10/src/system.c void fatal() { printk("fatal."); -diff -ruN proll_18.orig/src/system.h proll-patch10/src/system.h +diff -ruN proll_18.orig/src/system.h proll-patch-15/src/system.h --- proll_18.orig/src/system.h 2002-09-13 21:53:32.000000000 +0000 -+++ proll-patch10/src/system.h 2005-04-16 06:16:20.000000000 +0000 ++++ proll-patch-15/src/system.h 2005-04-16 06:16:20.000000000 +0000 @@ -16,7 +16,7 @@ #define IOMAPSIZE (1*1024*1024) /* 1 Meg maximum: we do not map framebuffer. */ #define NCTX_SWIFT 0x100 @@ -3171,19 +3604,72 @@ diff -ruN proll_18.orig/src/system.h proll-patch10/src/system.h : "i" (PSR_PIL) : "g1", "memory"); -diff -ruN proll_18.orig/src/udp.c proll-patch10/src/udp.c +diff -ruN proll_18.orig/src/tftp.c proll-patch-15/src/tftp.c +--- proll_18.orig/src/tftp.c 2002-09-13 21:53:34.000000000 +0000 ++++ proll-patch-15/src/tftp.c 2005-08-14 10:16:15.000000000 +0000 +@@ -127,7 +127,7 @@ + int len; + + /* Read packet with timeout */ +- len = udp_read((char *)(&inpbuf), sizeof(inpbuf), TFTP_TIMEOUT, CHR_ESC); ++ len = udp_read((char *)(&inpbuf), sizeof(inpbuf), TFTP_TIMEOUT); + if (len == 0) { + printf("TFTP: Timeout\n"); + return(ERR_TIMEOUT); +diff -ruN proll_18.orig/src/udp.c proll-patch-15/src/udp.c --- proll_18.orig/src/udp.c 2001-12-24 05:12:53.000000000 +0000 -+++ proll-patch10/src/udp.c 2004-11-13 15:50:49.000000000 +0000 -@@ -81,7 +81,7 @@ - int source; - int dest; ++++ proll-patch-15/src/udp.c 2005-08-14 10:17:19.000000000 +0000 +@@ -76,12 +76,9 @@ + * + * Open a new UDP socket. + */ +-int udp_open(daddr, source, dest) +-t_ipaddr daddr; +-int source; +-int dest; ++int udp_open(t_ipaddr daddr, int source, int dest) { - register unsigned char *addr; -+ const register unsigned char *addr; ++ const unsigned char *addr; /* Set global variables */ usource = source; -@@ -299,9 +299,6 @@ +@@ -101,16 +98,13 @@ + * + * IP receiver routine + */ +-static int ip_recv(buf, bufsize, addr) +-unsigned char *buf; +-int bufsize; +-unsigned char *addr; ++static int ip_recv(unsigned char *buf, unsigned int bufsize, unsigned char *addr) + { + struct iphdr *ipp = ((struct iphdr *)buf); + struct udphdr *udpp = ((struct udphdr *)(buf + IP_MIN_HSIZE)); + struct udp_pseudo psehdr; + +- int size; ++ unsigned int size; + t_ipaddr dadr; + + #ifdef DEBUG +@@ -194,13 +188,9 @@ + * + * Read one packet from a UDP socket + */ +-int udp_read(buf, bufsize, timeout, abortch) +-char *buf; +-int bufsize; +-int timeout; +-char abortch; ++int udp_read(char *buf, unsigned int bufsize, int timeout) + { +- int len; ++ unsigned int len; + + /* Wait until we get something */ + set_timeout(timeout); +@@ -299,9 +289,6 @@ */ int init_udp() { @@ -3193,9 +3679,21 @@ diff -ruN proll_18.orig/src/udp.c proll-patch10/src/udp.c /* Register IP packet type and set write buffer pointer */ if ((writebuf = reg_type(htons(ETH_P_IP), ip_recv)) == NULL) return(FALSE); -diff -ruN proll_18.orig/src/vcons_zs.c proll-patch10/src/vcons_zs.c +diff -ruN proll_18.orig/src/udp.h proll-patch-15/src/udp.h +--- proll_18.orig/src/udp.h 2001-12-24 05:12:34.000000000 +0000 ++++ proll-patch-15/src/udp.h 2005-08-14 10:16:40.000000000 +0000 +@@ -53,7 +53,7 @@ + extern int udp_open __P((t_ipaddr daddr, int source, int dest)); + + /* Read from a UDP socket */ +-extern int udp_read __P((char *buf, int bufsize, int timeout, char abortch)); ++extern int udp_read(char *buf, unsigned int bufsize, int timeout); + + /* Write to a UDP socket */ + extern int udp_write __P((char *buf, int writelen)); +diff -ruN proll_18.orig/src/vcons_zs.c proll-patch-15/src/vcons_zs.c --- proll_18.orig/src/vcons_zs.c 1970-01-01 00:00:00.000000000 +0000 -+++ proll-patch10/src/vcons_zs.c 2005-04-10 07:01:03.000000000 +0000 ++++ proll-patch-15/src/vcons_zs.c 2005-08-14 10:25:51.000000000 +0000 @@ -0,0 +1,68 @@ +/** + ** Console over 'zs' (Zilog serial port) @@ -3243,7 +3741,7 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch10/src/vcons_zs.c + return leng; +} + -+int vcon_zs_read(struct vconterm *t, char *data, int leng) ++int vcon_zs_read(struct vconterm *t, char *data, __attribute((unused)) int leng) +{ + unsigned zs_ptr = (unsigned) t->impl; + @@ -3260,14 +3758,14 @@ diff -ruN proll_18.orig/src/vcons_zs.c proll-patch10/src/vcons_zs.c + return ldb_bypass(zs_ptr + ZS_DATA) & 0xff; +} + -+void vcon_zs_fini(struct vconterm *t) ++void vcon_zs_fini(__attribute((unused)) struct vconterm *t) +{ + /* violent crash in the end */ + ; +} -diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c +diff -ruN proll_18.orig/src/vconsole.c proll-patch-15/src/vconsole.c --- proll_18.orig/src/vconsole.c 1999-11-08 03:10:28.000000000 +0000 -+++ proll-patch10/src/vconsole.c 2005-04-17 19:23:21.000000000 +0000 ++++ proll-patch-15/src/vconsole.c 2005-08-14 10:24:49.000000000 +0000 @@ -7,12 +7,17 @@ #include "vconsole.h" @@ -3336,7 +3834,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c int vcon_write(struct vconterm *t, char *data, int leng) { int l = leng; -@@ -40,29 +83,99 @@ +@@ -40,29 +83,101 @@ if (l <= 0) break; c = *data++; --l; @@ -3358,7 +3856,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); + break; + default: -+ printk("Unhandled escape code '%c'\n", c); ++ //printk("Unhandled escape code '%c'\n", c); + break; + } break; @@ -3399,8 +3897,10 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + case 'm': + break; + default: -+ printk("Unhandled escape code '%c', par[%d, %d, %d, %d, %d]\n", ++#if 0 ++ printk("Unhandled escape code '%c', par[%d, %d, %d, %d, %d]\n", + c, t->vc_par[0], t->vc_par[1], t->vc_par[2], t->vc_par[3], t->vc_par[4]); ++#endif + break; + } break; @@ -3446,7 +3946,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + } else { + t->backc++; + } -+ if (t->vc_x + t->backc >= hcon_qxdim(hconp)) { ++ if ((unsigned int)t->vc_x + t->backc >= hcon_qxdim(hconp)) { + vcon_i_backflush(t); + t->vc_x = 0; + vcon_i_cursfeed(t); @@ -3454,10 +3954,32 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c } } } -@@ -100,9 +213,62 @@ +@@ -73,7 +188,7 @@ + static void vcon_i_cursfeed(struct vconterm *t) { + struct hconsole *hconp = t->impl; + +- if (++t->vc_y >= hcon_qydim(hconp)) { ++ if ((unsigned int)++t->vc_y >= hcon_qydim(hconp)) { + t->vc_y = hcon_qydim(hconp)-1; + hcon_scroll(hconp, 0, hcon_qydim(hconp), SM_UP, 1); + } +@@ -90,22 +205,75 @@ + t->backp = 0; t->backc = 0; + } + +-int vcon_putch(struct vconterm *t, char c) ++int vcon_putch(__attribute__((unused)) struct vconterm *t, __attribute__((unused)) char c) + { + return -1; + } + +-int vcon_read(struct vconterm *t, char *data, int leng) ++int vcon_read(__attribute__((unused)) struct vconterm *t, __attribute__((unused)) char *data, __attribute__((unused)) int leng) + { return 0; } +-int vcon_getch(struct vconterm *t) +static const unsigned char sunkbd_keycode[128] = { + 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, @@ -3488,7 +4010,7 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + +static int shiftstate; + - int vcon_getch(struct vconterm *t) ++int vcon_getch(__attribute__((unused)) struct vconterm *t) { - return -1; + int ch; @@ -3517,10 +4039,14 @@ diff -ruN proll_18.orig/src/vconsole.c proll-patch10/src/vconsole.c + return ch; } - void vcon_fini(struct vconterm *t) -diff -ruN proll_18.orig/src/vconsole.h proll-patch10/src/vconsole.h +-void vcon_fini(struct vconterm *t) ++void vcon_fini(__attribute__((unused)) struct vconterm *t) + { + /* violent crash in the end */ + ; +diff -ruN proll_18.orig/src/vconsole.h proll-patch-15/src/vconsole.h --- proll_18.orig/src/vconsole.h 1999-11-08 00:58:13.000000000 +0000 -+++ proll-patch10/src/vconsole.h 2005-03-02 12:40:12.000000000 +0000 ++++ proll-patch-15/src/vconsole.h 2005-03-02 12:40:12.000000000 +0000 @@ -6,6 +6,8 @@ #ifndef VCONSOLE_H #define VCONSOLE_H diff --git a/target-sparc/helper.c b/target-sparc/helper.c index ad1ae5bbb9..7436e4ff40 100644 --- a/target-sparc/helper.c +++ b/target-sparc/helper.c @@ -195,15 +195,17 @@ int get_physical_address (CPUState *env, target_phys_addr_t *physical, int *prot int cpu_sparc_handle_mmu_fault (CPUState *env, target_ulong address, int rw, int is_user, int is_softmmu) { - target_ulong virt_addr; target_phys_addr_t paddr; unsigned long vaddr; int error_code = 0, prot, ret = 0, access_index; error_code = get_physical_address(env, &paddr, &prot, &access_index, address, rw, is_user); if (error_code == 0) { - virt_addr = address & TARGET_PAGE_MASK; - vaddr = virt_addr + ((address & TARGET_PAGE_MASK) & (TARGET_PAGE_SIZE - 1)); + vaddr = address & TARGET_PAGE_MASK; + paddr &= TARGET_PAGE_MASK; +#ifdef DEBUG_MMU + printf("Translate at 0x%lx -> 0x%lx, vaddr 0x%lx\n", (long)address, (long)paddr, (long)vaddr); +#endif ret = tlb_set_page(env, vaddr, paddr, prot, is_user, is_softmmu); return ret; } diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c index 695bc21e09..eaf5cb64e0 100644 --- a/target-sparc/op_helper.c +++ b/target-sparc/op_helper.c @@ -276,6 +276,10 @@ void helper_ld_asi(int asi, int size, int sign) case 4: ret = ldl_phys(T0 & ~3); break; + case 8: + ret = ldl_phys(T0 & ~3); + T0 = ldl_phys((T0 + 4) & ~3); + break; } break; default: @@ -396,6 +400,10 @@ void helper_st_asi(int asi, int size, int sign) default: stl_phys(T0 & ~3, T1); break; + case 8: + stl_phys(T0 & ~3, T1); + stl_phys((T0 + 4) & ~3, T2); + break; } } return; diff --git a/target-sparc/translate.c b/target-sparc/translate.c index c2ba2e35cd..9abcedda73 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -1897,6 +1897,11 @@ static void disas_sparc_insn(DisasContext * dc) #else gen_op_xor_T1_T0(); gen_op_wrpsr(); + save_state(dc); + gen_op_next_insn(); + gen_op_movl_T0_0(); + gen_op_exit_tb(); + dc->is_br = 1; #endif } break; @@ -2343,8 +2348,8 @@ static void disas_sparc_insn(DisasContext * dc) gen_op_store_FT0_fpr(rd); break; case 0x21: /* load fsr */ + gen_op_ldst(ldf); gen_op_ldfsr(); - gen_op_store_FT0_fpr(rd); break; case 0x22: /* load quad fpreg */ goto nfpu_insn; @@ -2426,9 +2431,8 @@ static void disas_sparc_insn(DisasContext * dc) gen_op_ldst(stf); break; case 0x25: /* stfsr, V9 stxfsr */ - gen_op_load_fpr_FT0(rd); - // XXX gen_op_stfsr(); + gen_op_ldst(stf); break; case 0x26: /* stdfq */ goto nfpu_insn;