A430@HASARA11.BITNET (Dept. of Mol. Biology, Section of Mol. Cytology) (06/08/91)
A few months ago someone argued that it would be possible to increase harddisk throughput considerably by reading/writing disk blocks in one go. I implemented something like that for at_wini.c with very good results. Rather than issueing a request to the controller for every separate disk block my at_wini.c now can read/write up to 256 consecutive sectors with only one controller command. It uses this possibility when handling i/o vectors. I did some timing experiments with it, the results of which you'll see below. The first column is the number of consecutive sectors per command, the second column is the disk throughput for reading and the third column is the disk throughput for writing. sectors/ read write command Kb/sec Kb/sec 1 108 28 2 175 54 4 202 101 8 236 162 16 293 233 32 376 259 64 382 265 128 396 268 256 406 269 The experiment was to read/write a 1280 Kb ramdisk straight into/from memory without fs intervention. The timings were performed on a 16 Mhz 386sx with a 40 Mb MiniScribe 8051A IDE (MFM type) drive under 16-bit MINIX 1.5.10. As you'll have seen it makes quite some difference to read 16 disk blocks in one controller command or in 16 commands of one block each. The same goes for writing. I observed that writes of more than 32 consecutive blocks do occur with NR_BUFS equal to 54. Below follows a compressed and uuencoded context diff for my current at_wini.c. Bert Gijsbers table !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ begin 644 at_wini.cdif.Z M'YV-*@*""$/GRYTT;M*X& ,CP90Z;D 0*3,&A(P9(&#$T 'C!D<9(&+DR %#z M08N3( XF7)B 2ITR()1 ! &"AD48.FC8T%'#IL@<,10$'$JTJ JA F/88"$Cy M!@BB)E$J96H#Q,F3"F@^S4I3A5:58]"4F4.GC)PO=,+,6:,C09LP"$&4<4-'x M3IZ48B/.R4.V3!L0:>: $"/G39TS:.B J .'Z]8574$,01/&S9FQ@^\*,:OXw M2!HU<\28G<,"1! X<M*P"3DR*.2G5N6R"2/FC1R",,>\H5N8#1NS(.24.1.Xv MK!P09,:.20V'3IK=<Q2\]MH"!&J$BLD2K".X,AFY<@H?%TZ\[W'==.?2Z6[&u M.(@Y9I]S!R\^^O38PMN\L5/F.QG&;*0Q!FX@Z):<=)%5AQY\8]3A''^#L?'&t M&&MT)UQP981!Q@MWI$9'61'%M5MNN]7UAF_ Z=;&6VZ0X9@*+W#%U0@(C<%&s M'<F!(,(:9KE1!ALNH"$"4D85261-,;! 0PY/#155=3JQ@ -&5[4P8W)F( 33r M%4DX\844101!A%9D9H2'# V]X)6*+'YGAFT@T"$6<JE!2,<;&&KX5(PTC8"Eq MEB!PZ>454B1!11%ET@0#'C.DN>8;*WH'PIO'R0D3&77"=&=*'L($XY5E9.ECp MH%U^,04410R1A!%9E+DH4 FH62"D;4X*IZ6S\G;B;Y7B&<888Y31G'5AW-:&o M8)]"YF>H@ KZ91%3%$%%HF;"0$.L7@D'GV)L2DJI=;8IMN@,1E25+ @(RGI%n MC6*9]UY:=,PG1AKKN; G@LN*NF6I0E0Q1:O4+HJ#HX-Q=U<9>%#D($)G##1Km MI"W>J^R?HSH+II@ NXH'#00+I^%=WX;Q<*WGYMMLJ48$4043TR:Z*)K8<DHOl M3&:$40<;=)36!G>*:5N&8B53O*^7T1:Q!+5FQD P?&6L <(;3@?-;,6E$B%%k M%$A7BT/,9! DLG!QO$26Q""83+67J0Z1]:+6QLS@G<=UG=9[=0 [UAQFW,S&j M7;J%1U%9WTFM+ZE>=DE$$5@$C <,,KC]LUS\V85<8$X+9\>)"^]&MME#?U&$i M%%(\(87B&L5LEGC@RJ'8SF.+EF?@,4X\=>=34!$$%?XF:G$11^"0KE?]_CO0h M& _"A) =800H-V9O6'K<O.L!IA>\\Y%7G%GV@I#RRM/"^7GH4B (VZ_%/WW<g MQ42T"F?11R-$?AH0TA9N=R#LC',:+;P-9[<MNB"^X"?S$IBFP+TIT 0%S@I>f M%OBP.XPQ$&4J8]D#B58$HTW0<Z 3W073E@($_2Y0[!J+>TX')^C-P5X /-L7e MB!"$)JQM<3'@FM<&0@9,W:U^Q7*:&YIG*XC #E]"(]P7J""%)< :6QKG*SJd M\BNGZ<$L>-JA8NKRDH&T!SC"&5" "$.@%'8N"$*00LM<MKAKR8I_WY&?ZOJSc MN2 Z*PEC>J'28@;'2:7A1]^18@\CYD4A"D%,:2,CQV(&D;YE,2UB^ T( MG'b M!(I)"$PXFL8&%C,QZ"F1$W):<LI"/#:>ZX/K<D-81 @<,J0A#&?8(7P&0Z\3a MMG%V('#"$S (/@.2L72R$D,>RB(]4P[(.9;!T+;H9K?^>))/Z**)K*!0K#"Tz MX6>CL56EYF3*M= )?F5 (3(Y!X)H#8$*HC-5$K2 J#+5( 9*] H<T, 7 27Oy M/7^#TQS2\$3I9:8LR(I=V8+H37!*P51(6-48R<0DK<A*0F< R1O,T,U4^5.<x MY'SEX+SY!53]$Y)/&((D08 "C&H4HD5X03_#.85Q%B$%!O4*ZQ3C.CB\X0[ w M6:A%[D43KLBJ".'9WQN2DT]0#>Y["4@ 35H00UE=QD>W60T)C_.I(CGU2#UAv M00V8!)6K@ '.&"!TJI2)9\"R@G_/)P5DC $:"4*!4T( A966"@KF-4K8JWHu MY]B:!+=VL$]!3.M:=T=$@"D-!H"-V5OP4+8XI>&9@ME47>ZR*</0 0X.BA.>t M!$73?<(RKA:EJUNU@@*G0 :L%0V"& V5A"<X80HIB-D=T'"B2V4*!":0RZ_0s M0"S51:2/>GT6QI[5UY ]H@I?0]K;_8=+::!B[R44V D"JC<$C$(IS7"Y\HDr M@QI4);B#A2?Q;",8.*2H1+WAU<@DU4?0^NN?4$!"%FR) M#VRP@&] I%,^O1q M): 4!+(:P=,8NDZ^V(L[P-&0#>< GYY"YH-/,(,9MB48[. )C5OH@C:!",LAp M-($(7_@F$X20A4.1B6#H,=%J=,E+%/0%-;A!:1\MC&$H@&D(3V@"%,A45*]To M:&;6R2*DO.N&.1#D.1$90QX"U"+@O* FS!T5B[]P6H>*SI86B9D;ZM &T1Q'n MIOJ3@X$M.[@ECW1T9)J!:M$@(-IF6;+O*I9BS%"8OZSXPAG. A.^P(0G7(%,m M9O2*A.YP3YC(5,A$3@Y3]<G-)0]!SE\(Z!&0H)4:Q(S,B.GS?@LT9(0(.LDPl M6;+5K)#H,,41!#;@VFNG7.4 1TPL>GHSAI\ !1@?KDPWB%F(P_M=B/VPILKTk MBA6*=<I$CF7"-'%Q76^'*++(H6Z*44D:0+"'H,KJ+7'!%#;?=6SBE69$<N'-j M7;P;M]<VU:E&.=(-;B ED%15*C*@@59GX)2NXAH$PK8"L:67["_XJ#]?\)EBi M>J"](# A6CL0JJR&N2FGK'8NN1*Q>%<Z&)CHN[+QGC=V0."<B;/W,(N,"]h MX@0J6WG2%\?,N2+NX8G?X0O:B5?&G6WC$+HKY=4;SO7.4R+U;)GDB#+Y%Y:Jg M<5F!I5TCS.EX9.ZN$-N\LES!>?WNADJ8G!RQ*Q<LTR]3, 4#YUMQD91CD0[Nf M< _EJNH&2I,"(J-@MW7>$)EG*MD8EF)5?0OU!6D7=H!?X-7!ZL<!\'=T&:<Ye M:4=UC F.8P'UJ9J&0'NBNX)HQS1Q%7W!L2A(P0X4<'@C)'[Q]$XXK<_B,3+Dd M(?*3IXGEI:!X*8SI<FDH[AO@D(<OP*&9QP(]5T9?^M._(?6S8KWK52=[T5_>c M])D/^1?$8##96S4&,YB!5FG0[JN4'=YG]W#:T[#VXE+F>7>'>YT_6E)RSKWNb M(!#"W<T '+UGIN\P^7N\X"#XA8VJ\.@ZO-+[.X?A[Q(SW#D+_;=@WBF@5[U3a M,'<Q0W_NM!H =AP"IBT%=B^'1WF(1WJ8UWB0\G@.TGL/6'L@@'JJIWNO9RQSz M8(&TAWD:F'NMAQIT (*_QWAT<4W\,7S%)WE$TG5D]W4YL!1*XQ3G5ATQ$"4Qy M4 -4XGR^!X' IW-,U&/D)P<H*(0JF&P(\04(02])B($FUX3:<C/K(7N0$8)#x MN((G1P9O\ 5V( =D< <G"(-9F(*9=W+\,09H<1M&:!86:%,JT -T6(=V>(=Xw MF(=ZN(=\V(=[>!1:H0)!%50_1TIGD19K,8A"129>$8,R>"3H1&[(AQ%001,)v M, <'00=A@0)/=S<NT 9HD0?>A5)[P!6+2!,#LDI$D 13L 2Z100Z8(IDDHHPu ML8JM^ 6$8BA%T!;'P6]=^(5B2(8H8 *=2&"2EP"$D2%K,'F'=XH%HA8P,05#t M<#N' B885EJ\" +\YH5@&(PG2(Q? '6E\8OY-H9T('F#X3'+*(M:@24V@S-Ms MD0"]N$A=(F],H'')& ;K:(E]("/'=P,YH%4X4 -6 80@<(F9N(G%>$*@2 >Br M6 :DR(ZH"(T2P8JNB#ZQ:(FS2)&VZ(JY>"C9Z(M?P(W>.(P+>8SYN([-N)&Kq M)(W4^#E%<(U/$)(I,9)?&(;F:)+A>#<HJ8ZA=Y!DXHY6&(_S6 3UZ&_XZ).Fp MV(\U)8-0\74[&) R< -'5(G,)H>242R2LW5?DR'? 2<WQDM@(S9KUF;H-SEKo M 6Q:83TO1T7$DQ)/^!1WX ;,J!43)P>ED1QV("!E4!I+)1C\!@-U21,2$DQ9n M5I<.F&L201$[I2ESLI!-5UO.!$U:-F&'1Q-ZR9?:6#^N5Q<MX -B159%,)B m MP5 HD)G! @(\D!$@P =\@!QEL)>IZ0/\!EJA65:HY8#R^#-U( =N@ )&^00Pl M>)FER5&@V!QR\)DP5@5.,"TAP&]QUWTGI9O"$2^^"9Q'R03#^141P6_$^(1;k M@)IE(( Q<P)S>0+@@AV)A2?J(3G?HER"$7(,R)V?.9<C^5K;&)M\^0*8-5=6j M4U>CZ39A "'R26H?]RG$F0:F.9?UZ0;W.6VT27$6EREST$'-6)V]^9O!N9TTi MP: ^8)^K9R PP6_'Z9D^T) /&7"RTI&O:#X5>8L?B2@(:I>F6:+)Z0-0\ 0Eh M106EY00@4 +AMWVN*)T@\)P98:$'B:'7:91.8(\<JEUPLYDV^IDYNJ,]*E).g M]D_229H*RE$F%D]RL +1:5)8^DTD95(HY0,IX08-BG+T!)'4R9O7"0-/>F8Kf MX(ML^J$.NF>DZ:'V"6B6!AS\=F9'QHEY:I^H1@;(LJ9M.E@,\J1^ZJ!GQF\<e M=69 &JGA& 9X\*@@ !DQT*>'ZJ")NIE?NEW' :2&VJ:)NJB8ZJ@4@5(IP"&Ad MFJF;2A&@VJ:Z 1'[QIG(J9Q/P)Q4<*MZ^@4)>$/\A@)[>18D-A8H-:4^("96c M RU3(*SVB1H34G%2VIDWZF(9Q612@)C$*2M40&:"(2&K-Q"^\5+T4S.JP4:Kb M9Q8_ICF;XCK"X5VX00:6^15DID@H\)>JR6^Y]3U/%I'-^)<KL (]YQ4UDA_Ja M,2NZ^C2B!!/<!@+FRGY"9B.>$B/-V*7]*G2"H:8!FT%2D)O-N)O6J:&EM9VZz M*2M&D 9:QBUB02%HQC3%V97#M%SWEASX.I\)P+$GE[/Y-A8_@U(GIV^RUX#-y MN$QF02E_@2M%B#?8P[/S>')/>X2&NIT]:YJ]R&]/8%_IJ(PJJK ,-0=U$RP$x MEC=LX)=X0"\4^P;G.J.)"0+]B+1K*:>_N;4@T+4@\ -!FE%#:E(@H /T*)P_w MR93)5'=^F+B*N[B,>X> V!6*2+5N"+5RH(AETHB!V+B:N[F<VP,SJG1$.+E6v M.Y=(RI;N86S(!I<)(9=T.8"WEQZ]<I;RB;IO.:.E2)ST9W_XM!ASH*QW1YJFu M"QP3EP9<NH+S*)@.&+?B.B=H!!@-1F OL7=WX5B0!4P-<P-]MIYG.6N[DB)Dt M!@?Y&K?YYX(,Q6^D%@9PD*K#:JUC4''C.*O%2F"E,:;D]*0<.[[$5[['FKO+s M6J%T&J<G"YR@\Z00!@-=L)F82CQLL*RD"6$Q<,!XVJ:HP9AM <-3"O>L04Rr M ,%]RWUD^F4@=<&VM@4SP,&8>IAQ"V$T8,*S"JA%=ARQM2A&8 0BW"9;4 ,<q MK+Y_6FDO# (^H*8X@%*QQ6&'4L,9; ,YC*GRR0.K20,H]9J8.JJON2A!@+S$p M"6$WD,2S&J*-J8W\QJ+HL[="%,:"ZRPQJK():IJ.!WDH9:1=BZ0FFZ$"+ 5Ho M'%Q"("$4,HYP8;W2A)9.@QVGPQATD*\TX;-;# <BZL4O>I&>1K '^2THD 8]n M()B P0/T&U(@O*6 <;".'%195 ;8A )(L'BE5P2E 8Y0A[59RU$J$;1DBS,?m MV,9<Z[6W>Y"$:&]E@&\/QV]$5 6CJ9N>;+=SK,IS:\LNI3I!JR$(5"I@<@1)l MPKN^:P:E@0+35WTHE<EH6I=!A;]WUZG\ALWDI,W%+(^;V;6DV0>RL4JUG "0k M+,F4G 8\D%M\)06M8@*QA0)R8 )!K,COS,G /(]-N*S++$"\$\3:S+'XK,\Hj M18='>I4E^[.Y3 :N_#B\+ 6^K,UQO*0#+,[/%S/C:A9.IQHC!A.506^!/"S?i MDB%A :6VH;;!,BRXPK0$T0),1"&R^"BV!K%[8]+A(<B"L1O!DCU&8!MO\2$,h M@T-WX3I>."IJP#,4FP8\<M,RP\=\MRU\C,4<["RCEU94D#T??2$X^V"_4=)Wg M$ 9Y(-6;XH5]MUQY\#/^HY$SNLHH@-6*K-6BP]5PW+.;^:FZ^2/P <S+!IU"f M"E+XU5!FJJ4FI<UJO<X)<,P%$99E,-#/XLREP<W2S%'5["-D<,U9"E*J;-G>e M;-@/M:7_3!&@S!^B3,JB9<JP=9(8[;-4.!96&,M%.LN=?,M N\L@T,N_7+(9d MK:$;#<SCC,ZKU:X<=1++9J1TJLWS:,YQ6\QQR[%X^SUP#-&Z++2[RMO *\QRc M (,T8;ARV+GB/=Y_^"0WD20TD-X%B14T48J*.01:.;V1U95Z I:=@B%A(T*3b M8I:X4DUKH)8T$;S'0;M,N+HJ,)?%VS.E0;QQ6Y@-@\*XRT[UU[_6(>'@&EP3a MD<BX IE4UX&3:1RN-*.%;)K4W&/4I]G-JJV?>9N($J$5]Z 8!QO]&59M=5(8z M$L ;RJ4DCATIWJLXJJ.D95JPQ5&7'!LQD (HI:0HVZ3^9K\UJN(_;J5"OIITy M>N-RS*1.JN/&">7+V9RUW<%_6[]6OJ396<<=VIVM#9[.RN)S%[=*C)^\:J(Lx M7M@SKEF]39_#RL4Y0J)0CJ+>1:T.RK[8RN<^SJU#X*V 3JPUI("DFJRZRZQQw M?J/0.D#3FKS$.:F13J5 SJ-"_L.B35(!903!&MVF>69J>L)O&AOS-5?UE>3"v MO-R6KA7TMYGGF[Z8*NAXR:C#&K^DP5&.WK\H=<E.SE&SSM PH)UC#MQT3)KMu MO)GOK)J&+5<7):1TEP8'6QJS?J>?CMAB/K[[EP8<3'\7'N (W(:50;F&>LK>t M+N%;8,"EL>K3[K>ED65FGNPH@,^*#.]?T.IB7.2"F^,.6,SQA[CD7? %?Q27s M*8B#6)/<B)-D:+F,F)AS:/ 4W[F?&WTYQX4VV8TY::-("G61J0(VJG&N"\BQr MVWDN"MDU"?)49[L.*"M(X!V*)#)K&*4RE08O@"=C*4*NM-NB^UT]IC#E@TD4q MTF 1,2(2KWG=2W.VYC\)K[%:D7("0FVI^QP[3Q8H!QC[01'\=U%5 %]M?NENp MJ1A67P;YC?7(\AQV >E(?*:ZH3[P?9/H7YP;P>D2>"JNVP'3I?1;;RE47%Fo MW^M!;ZJ]SK[V)@>D^>OWUV#[X:9/1)H.CD-XX'IOD'%QR[^+7^%\L>"-3W^5n MW;MU[WH6'NLT8?B#GNDX&CJ'#E:D"?AQ )BHW^6CGL9>FMG]@5*N_[&QY/7Pm MA5*OEQ!C@ (B$$JCY"[STC!J3Q$B\/=@4Z%<VOCS5$_FV_RP$?UEL% F-O9:l M?_4%X?S1W?D2OIE4AKXH8/C(61I$,,V*CT\HE?QCP/EVX/@029KCJ_:BSQ>Tk M/O[I:_JYCJPN^^@5"O5-.FD%_^3?L*-FH,_^%;O A.Q^GX 0?L0/Z '2_(=j MW-_RRS$3XO ]J=RE&U@/ CP+"E#"%4#/1^PD' !L?]#O3=4[A&;[-AOJFW,Ni M;D)ADT55Y_Z37;%W (\XS:7-])T2PA98<T5@K)25L(?G[)-\(G1R+@B*)CH7h M!*6=G4MT>FY$:;TUU.XDS',(6F=/,<06/\!J.)T3\#=?H+2TOBP#^ZR85A@Lg ME _VZ3!)E>JJ@[[C=TQLVP$4@3+N)%_=8S_>R?UM@=Q'!&E".XM[FXGNJ3T>f MJ <-6+4#A*L)#:H]"S8%X0 G<V@'J=A1'/U7_@H#&W)?ON[_ ;M&^)FN8/Y2e M?YIP\06[P2:=L!;'6H 9 =D5)="AS?R:\3!-B[ 3?B$W0.&,E+ +#IL)RR&Ed MOL8&5@E"XW&<T =<09<R3YR#YKAG14X'(3E<R&]TX3WBA;X0%L8]69@&Z060c M@795KBAEIU;8"U\A1XF%PO +$4-KJ#G4%!HDAB@E)86M;/.5&$J64"1QS15"b M0I8#;V /9;(0,*%K>37]UJ6(7H48"!=B00@];)*O@@K'&GQP0_<=$7L&S,@$a M.!R&E8\<1H3JL BW %&Q@N(P(AK#B& +22&:FH?TT F\@=)0M8##!-M+AD$Pz M^,,0!_4&T=0"0Q3!W+TA)#27YEU:0&9J[^^10566 ! B=W%V&.T2W<2", CYy MS2(,BM+MR^DM>Q8,KR#W&W)=L$>!P93UM?011H-N)6NQ ;,$L.[XPAXD@^%Nx M]/FV;/?-.AMI*UG$;5_!!!1PL'RBEAER*. -"BDCA^0N7% ),0CA)7 TNA4Sw M@D"(< /(0WE(IF=B' KB0YR%%([?(#[=Q+$.(Q8D2U 1"GC!J2B<JJ)*.DAJv M*":61)KH!FRBFJE[.A%,>;]FY!;+H#83A/MA,RW"3A42SIF;@XEL:#.FNS2#u M$_=#:"1\]8X#KI[/$P(W'S0+?22P_)G 36C_K%^]4W(HX(W5)8'W\B9>Q7N.t MC OA0:Y!E!ECX\^K7 LOXB4\Z,@=%=>,JHXR$=W5Q$9X&Q,BDL)[RH9UT9VLs M 7[$TWS">V4O"V8]%7 4%1-R0C,X[PVT@)H')V;4Q"F-ZY$]*B8#%5,8BD!Lr M$.6##,ZG6B:NKJ/#@ ^I@7D82.@P$"'$2LP>4L!N"9/99D_R8P8"4TZO*T"]q M0K:"<A5=6'"E(==5(9P!^7;#@P-3I GS[2X5X.WJ0AU<D;O*N1&G&CF/3$!7p MG -5\.Z!*=4X#<-A-=R(/DQ-9;)0-_L&7H=2BQRE-/JPAK;.3.2N0@%2<C4Yo M%RD 7:: =*%C8DQ*"JXMV26_)',K=[)Q//+(TF EYQV8JF,Q(T.>K T)R^P)n M?Y0#!;'9E<5#1U^H'6#X5\&AVH4VN2CO&J$_*UF.D19FOL!TT+06M+.2MPU'm MYD)6"-B*Y!54E+NK&8I!P"8-UQXU?(JQ)2J:%LJ8#I42HHQ[!PNC64G5N!</l MDI1L ?S&2FHS'AG:9*5NLE.QTC#0!==(G) CCO1N<NOYJ(GN2"SYT.-Z"I$Kk M/!XAB!>(#M=3*);0$@]=O&%3<C1>FNR,O_'\41PRZ"9-U7G4?NEQ[P7(X.(>j M9Y2,%#D\<CW*"@*D17A7@%ET=T/D0+W_2 ;'99G(+Y-&02H6!SFC(M]A8H^Ri M(DN\+)8V:!P0@_0*5,!!B@P">67&EFC$D!H25S#,?"D:X\1U% [X2N*-R,R3h M!O+2B/!+'JM;)D378Q:^@ L3-&R2APD:E ,C25]QPI(*D@<$)E<7P& =<5IJg M4M ,T@1_Q2A=IJP8 KLA<B@&]T@;Y@#FX"5G)JV]EJ)Y--,/B)Q/- %7ZCK[f MQ*<2D_)"F.2J;9VKY+%GUA5<^ U?B=O$JX@PKQR.L,@0@(.0(0<\L<Y\%BZ[e M;MN":$VT,F07?V;0Y P#00P8S1N!-(?DICB99J$TC"I)(1QF0X)\FG&-#)+,d MLP XI]:L6E6PH55I*@:AS1HGRS15@7!( BG%R6U,ILHT"]HL@7W.>42H"&;]c MZ9R-,W0^3J^TF2QGZ92<M6H,J,XVA>GFVNB\G%'J4LTJ5S4&4(JGJIORA3>Qb M'US!O5 $TVL3!1'"&!HJL&$Z3!$X8 BLA=&!!79_*B<&:Q%;8,FXF%018Z a M](Q@ZTO'5##K.<*63),Y; &(UBG(ZH SR:<-\S)9"GI&3]K9,IN1\H0SAV;.z MU)DK\#VGIH-JG$..B-VY!' _,4S^3#1)8-&P,%PU.I/D57&?&4S32 %.@P0\y M#0>C8D?D-:U!& <3XJ 3:TW^\PLD*KMHR-I4%%1D8*R1 ;,"^@58C:MYGINIx M@1 !;A@-6=DA2V0,C46=L15Z/<E ]H0S+O0)'(ZL5BIB% V%"8Q-5@B!^H;(w M&E-!3 G9ZD Q=(6P' FUL**!TE6/ $'4;VV5P]%,\03O"P]PZC&)A ;4XI>v M"R].F3+PDTS1\@)I<,DW-)R!\!>-P[%!:7!"I9D9,.72A,44F1,RC0[0M-M@u MT^#:>(D8NV&GF;P[&CV 6C81/42-(/"QMY#4+@6V:6IC(T!$-4,:EHY:5?L9t M5ZV';H$L%D-1QEV['5Y-+( UP;!#"L18BPAE[:P9TK2&)^ 3"&AK@^RFM<02s MFN>:Z)[[8A;I%=TV/;DV?03=:64XDK8Q-'.6+>O"(V1LC2U<)#,R(-F:V3.Cr MD:!/6Y8XM8/BY& I1(JFZ6 %-O.U$^U=:21FNFF<R<,D:F-N:!?+H<$T1LTGq M8*8N]MABH NJ0>D93^?U.D &G) ;8>")$E-YQLRD!3T3E&J*DB&WO";7 MK]p MJ:8%38@)$:L1!4HEV(IU!A$6\K/;YM$.R_5S$$\4BKY-B:;;M-M65*-Z4;AAo M5'8&)R+99FJ?N\VBC:9F&J96 $=U; :A4T!4RO84UB1F,W'6S)MFLZT(VQQ4n M,HT\:-2B6D6B&DY7P#C=EJ*19LJQ<WH5TRE&E15!X'5PB/LF12=$@_ ;.RNNm M-<8I:45!(L_,"!A-:BX;]CDB,!K.9)56E2_*BB3 4,*HKMBGF^1OT \*&"$Rl M"6 @>X(A;XB2C7C4K!6WV1LL0#=5/U]QX[;2T+E9/\T-[#2>XK)H@R+)1+2Ek M>:A2^L!=0J10$7%R"R\8-TZT<X3.EW,D1 "2' VF>+#\E994*[1D8-U(869%j MUZ&2FX2EIF&:3HMY[HX0QJPLX"W71,OA2H>.@E-R$E]'!@PDII #L)=5H@F.i MY='MU("4]ZJ@"_A3TW-9#3FV802 I1]LJ8$-K?[)U[I7"FIO88K"A_CL!="Sh MR6RJ*=)RIRE3N*#UN@S7V76@"V8 KH<]W '# ,;( -NX 3T#.R6EUZ+>LT#g M7, -B "LA1RI&Z]<2ZK100FTW7$$9, !/ Y&ZLC-P_M*!_+K\-NOP*&_$I< f M.V"W18&=-DLEP2[8G_3;AME/^F[^""70@*FB)&P 5S%(T-5!2%<*2UV5C77%e MKM23E\2PQ=%=7VP?<ZF,<KR" ()*T,YK;$FO+ZC:^3-+!%\Y"D"3L ^5PEI8d M619+9HG &EFMZ34]52;+6^A9)^.P'I8+R($(:(A2@G\%L )6F#P.%% "& <>c M8 %U5@;@@12@8L<1RJ$>O:Z[L=@&&]S(!'@[KC-((+ ;&, "9L!4&3N/RS%@b MB/+@'H97&[UBHM2 (3#P9,"NZ__,KM4SA8G2![9I?6"GK5;BTX*)VA&VP4IMa M&OBQ#HIW&C'LN<*F**8=84B,5/G84RNJO))@4(8@%(/.6A]*2OF-LS@5J6)5z M9(&$U4V\RQA04'?!:#Z3P7@/YRGMFVMFM )QV3<6,[;H8XDLS<L?2BUAYF!=y MYB<+9:/,])2R4^;:2!TKBVVO[ IM6UH6,Z9 +BM.Q5.\_(J7!CBH+8CC6=:-x MI&*WS612+Q2Y#6[$"8N.N"@I V.<FM*P53+3FC#PA,,\K<D$M64!@F)/4NN+w M**Z$0;443-7:3U'::CNN#ZRX]DG6ZB85=D$UK@_-M<?*QZ+<7JLA?FU(>&)Fv M0@B800(J2HNM$$&VJH)5,-LIX&RA[7N %!++'OY;N+6QRB@H.J-NS+X,(BW*u M1<'M%Q6W<:W%EEN#&RS0K6H#$^QV)QFC1OENC:IL@V5(->J2(L5D;[UAO@TPt M=J,YL!$/1QBC2=8-N'.3X,I4%JMU"^U!,EPPMCI\U^,0R299M>,!+R[D9)SVs M&I&J \\=89K6Y+[:-* "9N[%#;)LU"0<) @#<\=K$PNV>*"*31['2]>,;4&=r M1DP@"8018C-Z#Q+'6F/:-JEJWF"&XX*;XSVWJ"W=$H%UV]K$KO=SO$75E<VVq MM&O;KI+C%:FY;>!6M(LV>_ONLIN]_4CP!DLR@1R5(U< ;U:%!@ DJ0(#<,!Zp MLQ+O)L 1G4J[@AB<X=$*Q/39K:;$2Z'HCCCM9"Q4PPC0_NECP9W%56 ,;.6*o M4NWY8KHG_05/]A?DJ@B1NWGW+YPYG_XD?4K>+1" 8^WDM%7ZMWS"F2\C/WOFn MR)7 !A31[,_^N7/C+Z)1-$B@Y4;@]PEG-DVG$1,7-/1FT&^HFIH8SN5$ /CCm MTEQ%11==[@]=-:U&B,)0FF!ZB0:J"+K+MMX673,0;9&NO[6[4&]E>05OVT7#l M+1YS&I*"9G6IMXN XFZ_I;O55JPZ70I4AM!HF%5=PA?MSMO;AF;UJRB1@.>Ak M,L39.3"$[X)\*@%DH,\"!E5&:)]O,\*BCY<$8Q@37$%1L+-3P2#4I7I0K,5"j M@^@0U0H]^%F@7M7+)8L81GV]V;8+1]TOC$S/KKQ-JB"Q#'_8,]QF!P2)Q1#&i M!;FXEFD#A^5P&@"6M/?*^=T$ 'BG;]T*8-87QC8E1'LD9H -4#<<P]PXB?:&h ME8H 'JAI)99#LAE(X47OJKZ](@CHZ(G-C4@2\P*ZVC-Y[T7P-$;:'<X 7' #g M(=+:UBU**[R,UXV,L#NVH/:. VAEMRL>&!@++3#!EGL&PSC*HN 8H!=-@%ZEf M 7HUPC(T4BC@':_@1:$TZBMC=)1#UAY+CW!,T"HL(3XLQ.JQ/:&CE:0.KAW6e M"@*O0"!D@F 0%O*3JK[V93G&NF%)7*&E=$26@X@*3],\D!V[@L3KR!X9ZH&Nd M$BE&C>=(CCP&LSD&"GNJJ_(I%>:GG<>?7IFJ2P?HSFU](H6A.-E2YX!8G@9(c MU<;<)+? F.84.I@ $Y@KZ",+E-DD "T2P%]9&L/EOSZC+7(;DDO6G%'<)('Xb MBRPPB 1&23@\8;E4_"HBXFG(<E#1QS%#"%2;,G "!,,9$!LJ$1I]I8A@!(C a M$ #+;J14U([;X2\&$87U'71+_'+CXW"7?D:$M'R)N;'>$=BGE$T+$7D"3ADJz MM^6I;%9^IYN#DBC@)%2GQ_SE%J()4*R1#,N6!<DVF'$':H&+8EEXO"9GL9:Cy M\CU.Q+6Y+<,QDN=S:#(^70UZY,!"37LWFB?S,9(RNP$HXXDNE9.!J[!TCBB9x M6!X%JW).E$\-\$'?ERNX-_#CBX$QG8P>P[AI,:^6?(S=0TE[5UT9R#1CA,,Uw M7THT;I:+U*<-!&N,$+*Q5Z"KQ5CAE!+<(T4-R=^XA@B!:9VE S00$@LUF2&4v M]%V(M*3G.HY'\L ]D@)7G!E//$??@AS@$7M'3["M+K6ANXM98!'JP3XO$H_Uu M-)Q'WREI?%7<^JMBX3130TJDH]]A#F3EO6,V'5M_L,])N%>.WV[<,\K9$JB#t M2O0)ZS%K&$R^A7^;QH),;>+>R*9[>2\JXTEU\.3 '-CG4%?SL;4=KEFB[@X"s MPC(J761VFU-:D4%4C %"CVT%L2]/2AZ":4 KIF5HJYC-@OE,E^E2P4'@F"96r MLVS67002_]Q)_,,,*6N^B6&HV#3=#>?A*OQ6NBF*FE8+['H7U)_=#H(AML3Fq M+" WD^\P6;X#=)UR2E;VJ%7.D--J$80*5.J(EG<Q]6MSU&%:4M-ID<51%37Jp M,(JJ.;)I69[H-J7H/7,6+,2%P&DO042,R)PN'$0 R6U%Y$NJ2^K>5:EW^!]So M:BEJI%"K:LUK=WK-@MCGH2<D)9VULWC6SO)9!9M8?9N4!K1^=JD\*84KD4$1n M158V##EN^4I@&5P)7G26SHZHZQP)CK$4F(]SW<5723%= =_L'%:#7=7/C%DPm M-.=-L:0=1O.2)W,A1K-I^"-JC7')S,D,>>&B@&\8JW?J/KMG9AGTPN,IA@?Zl M,9?-QQMC'W=L.M7)\*ZQ9KX&M_8^9!BKHV%Q1KZ^S_E=%\OIC!*N,[FI 3>@k M^;"W? U^]C7;JLG^>CP[[(#=3]%,P189!WO )>PTXZD9=H(R7HYY,F^FW!*5j MR^RR=9E:L1E]:T@-CB>L8,;2_L(4FB9.G:HYRJ3^U5]@>[ ,M!V5T3;[$-8Ei MBZ&-Z?3AML_T,E2'STVT\BO1'+69U6P-8,49,QB[XRPK=H@;4,[%23C#GW;-h MD64V=S2NM/CKT(!THR38#:25M (N\Z@ -*)JJ>^.9LPKR+%=6AK%44* 2(;8g M_K@9:6*@.;0I#@]ISG$!]M*!0<UB3;;RC:G,UQ+58>\:+*GS#<@J-6 @96?/f MO9@U-^<VLIE[XHAN&7%MH2Q]/;.I ;\*/SP]K?6I>-$CS?E:Z]EM?0&WMLI!e MQ;;[4N/N7Z:['3+O[D>(%G)[A?16 Y3$#=#%9$=$2MH6R#'=Y!EX)B=RORR8d MGV%DSV5W@)<$!DA[!:#)>LX2%G8/=W*_$6,)/:#82 )')/!P8RZ4_;VKUA!:c ML*QE0(/!!D&1!+X # @M4J )? &W,@3Z(#RYWPV+WUAP")[!S0WAZ. ?' J(b M%A%.PEGC Q/@68D-- C#Z9A(&@#_:0K&@"O=:"(I.B!C$0M-"T_DK^',ZS83a M&K 1 F(-H 5Q*.'$P)="X73!=^KO;1$C3: 11P&\KK*]A?UG";45^@.%RDH4z M?L*08 -20&E0"MH)AQ/P(YYTC46U52Q^9^SU)GDI:CD0[/E :[P'OEH#5N_Ly M9@''%0<<."3P\'R6? Q_^ X/'(,/YPDNOE<X!M?@7H&#?X$8 ,)I>*HPX? !x MBU=PS7C)7;@FY^0R/(2/\%1APXG@U<SA.YQ X(HF/L&%N!W_MT5\-Z*?)%YUw MF/@/=^)0G$),\?L7&JXX_CY'K)&2\^_+Y\5W(QC_X6*<_)F_NG#&,V$:9W]Kv M7"FX<38>QWWF -?EB'R(OT4\GG[TN+88SD;<]?QQ%!#(96X7 ):25E8<@<<Au M,:G,,]&MBE>!BV>8,"\J7V4I?<W< [[C&U #F$ T)^,94%NF/VM^ K/Y-H\!t MW9PZCP068 -$PO#^Y_>4F[*1X66_C_FU43!<7-+Z;QHR8""S75I!:Z@.KJ%2s MZ@1@>"=?Y4. V8%7H*AD<XL-A!;NUZF6AI6N[4[Y2Z_AU4&3Q_ 9#M,[F2&Gr MXT?X."QR_N9W&C@D]YN2/*XI\U$>&TLY;%A#1/ 2#8=COIDLN:_!Y!^R(G@Jq M5YZT!GCRB.5>V8>7=/UMRS\<$8\81GR7HYDE'M>:.+]YX@%"F-\)8F[%0_DQp MU^)379OI1@\8QA?#&*^$"9V:2P0TWM#OSAMOXX^]F\O5;W[(YT0B'^>U-(]7o M&^O$QT>N'_= [-RQISD?J/<D0A/,+#?]G;O&\ M^YOD?A0FDYIZ#' JES\]2n :/^\I9&*P?YZ!7M /.F)G0PJ=L0,[A_[&NSG&m l end