Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!uunet!mcsun!hp4nl!sara5!hasara11!a430 From: A430@HASARA11.BITNET (Dept. of Mol. Biology, Section of Mol. Cytology) Newsgroups: comp.os.minix Subject: Faster harddisk Message-ID: <91158.091549A430@HASARA11.BITNET> Date: 8 Jun 91 04:47:28 GMT Organization: SARA - Stichting Academisch Rekencentrum Amsterdam Lines: 289 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\H5N8#1NS(.24.1.Xv MK!P09,:.20V'3IK=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*: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\\Y%7G%GV@I#RRM/"^7GH4B (VZ_%/WWf M%OBP.XPQ$&4J8]D#B58$HTW0TX')^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"$*00LMJ'28@;'2:7A1]^18@\CYD4A"D%,:2,CQV(&D;YE,2UB^ T( MG'b M!(I)"$PXFL8&%C,QZ"F1$W):ZX/KRB(]4P[(.9;!T+;H9K?^>))/Z**)K*!0K#"Tz MX6>CL56EYF3*M= )?F5 (3(Y!X)H#8$*HC-5$K2 J#+5( 9*] HY["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*t M!$73?<(RKA:EJUNU@@*G0 :L%0V"& V5A"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]GHSAI\ !1@?KDPWB%F(P_M=B/VPILKTk MBA6*=J"](# A6CL0JJR&N2FGK'8NN1*Q>%?WNADJ8G!RQ*Q$)EG*MD8EF)5?0OU!6D7=H!?X-7!ZLc M])D/^1?$8##96S4&,YB!5FG0[JN4'=YG]W#:T[#VXE+F>7>'>YT_6E)RSKWNb M(!#"W(=Xw MF(=ZN(=\V(=[>!1:H0)!%50_1TIGD19K,8A"129>$8,R>"3H1&[(AQ%001,)v M, <'00=A@0)/=SA5)[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>#242R2LW5?DR'? 2ED1QV("!E4!I+)1C\!@-U21,2$DQ9n M5I<.F&L201$[I2ESLI!-5UO.!$U:-F&'1Q-ZR9?:6#^N5QIZ0/\!EJA65:HY8#R^#-U( =N@ )&^00Pl M>)FER5&@V!QR\)DP5@5.,"TAP&]QUWTGI9O"$2^^"9Q'R03#^141P6_$^(1;k M@)IE(( Q0+@@AV)A2?J(3G?HER"$7(,R)V?.9CZ39A "'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(\F8Kf MX(ML^J$.NF>DZ:'V"6B6!AS\=F9'QHEY:I^H1@;(LJ9M.E@,\J1^ZJ!GQF\'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'-^)$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[FL04Rr M ,%]RWUD^F4@=<&VM@4SP,&8>IAQ"V$T8,*S"JA%=ARQM2A&8 0BW"9;4 ,I&>1K '^2THD 8]n M()B P0/T&U(@O*6 <;".'%195 ;8A )(L'BE5P2E 8Y0A[59RU$J$;1DBS,?m MV,9Y"$:&]E@&\/QV]$5 6CJ9N>;+=SK,IS:\LNI3I!JR$(5"I@<@1)l MPKN^:P:E@0+35WTHERL4JUG "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(."IJP#,4FP8\e M;-@/M:7_3!&@S!^B3,JB9'@&EP3a MD9N($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=?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)/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%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-])T2PA98FY$:;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 G37]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;]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:"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!(#M=3*);0$@]=O&%3FNR,O_'\41PRZ"9-U7G4?NEQ[P7(X.(>j M9Y2,%#D\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 KLA42H"&;]c MZ9R-,W0^3J^TF2QGZ92GFVNB\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/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=:21FNFFD93^?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*19LJQX(A;XB2C7C4K!6WV1LL0#=5/U]QX[;2T+E9/\T-[#2>XK)H@R+)1+2Ek M>:A2^L!=0J10$7%R"R\8-TZT+#\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?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&)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!6M(LV>_ONLIN]_4CP!DLR@1R5(U< ;U:%!@ DJ0(#<,!Zp MLQ+O)L 1G4J[@AB+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#<&!@++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($=BGE$T+$7D"3ADJz MM^6I;%9^IYN#DBC@)%2GQ_SE%J()4*R1#,N6!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(EG5:EW^!]So M:BEJI%"K:LUK=WK-@MCGH2>&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\:+*GS#<@J-6 @96?/f MO9@U-^-$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*HPX? !x MBU=PS7C)7;@FY^0R/(2/\%1APXG@UQWWF -?EB'R(OT4\GG[TN+88SD;<]?QQ%!#(96X7 ):25E8<@<!BV>8,"\J7V4I?4F[*1X66_C_FU43!<7-+Z;QHR8""S75I!:Z@.KJ%2s MZ@1@>"=?Y4. V8%7H*AD&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/