Re: Pentium Pro MTRR setting module

Richard Gooch (rgooch@atnf.CSIRO.AU)
Wed, 7 Jan 1998 08:20:18 +1100


Stanislav Meduna writes:
> MTRR are Pentium Pro registers, that control cache strategy for
> specified block of memory. It is possible to significantly boost
> the performance of e.g. a video card by appropriate setting.
>
> I modified the M. Tischhaeuser's proform module so it creates
> a /proc filesystem entry for configuring the registers. This
> is not a patch (yet), but separate module - if there is an
> interest and I get some positive response, I will create
> a kernel source patch.

Whoa! I've already made such a patch and submitted it to
Linus. Earlier versions were posted here. My patch is safe for
non-PPro and non-x86 system, supports SMP and also has an ioctl()
interface for C programmes as well as the ASCII interface for
sysadmins. It creates a /proc/mtrr entry. My patch also does better
checking for overlapped regions and other nasties. It even comes with
example C code to use the ioctl()s. Patch appended. It's against
2.1.78.

Regards,

Richard....

begin 644 mtrr-patch-v1.4.gz
M'XL("*_$L30"`VUT<G(M<&%T8V@M=C$N-`#L7'MWVDB6_]M\BCM,,H'PL,#/
MX#@;@K&;;@PLX$YG.SDZ0BJ@VD*B]<!F=GL_[7Z0O;=*$I(0V)V3[3.STTYW
M#%6W;MVZK_K5*P:?3J'B.STPN>4_5NK56O7L_+`U;%]UQB-9&'[+52J53+*#
ML<_@>\T".(7::>-(:1R?0.W-F_-<J51*\DB3'C5J=4GZ_CU43HZ/RZ=0HE]G
M\/Y]#MH-<&:VK<_?:YXUK>HN=^RJYN?@J@%+S6&6!TO'UIGK@L$T;PXNGUF:
M"9X-^IR;!E)(6D?WS$(1W+6K:Z:9*V'9(;4\7'B.`ZZ_7-J.1\T6FL67OJEY
M#&['PZ$+M@4#[(?["Q@X]BLW!Z,&M$:=81^:ONLYFLDU&#.3N;J]9-#3/&Z3
M"->:SDWNK07]H-JOP@?[$<Y.R]!>+KDU$^6]ZJCZL5J&>JU>RQG9MKBR=7^!
M$@C&ARW;FO*9[[#JG)G+0+G[2+:MMH_Z8#SWI7UJH*!]SALG;]*FW-]^GWU/
MCXX4,K#X7:\+$P.X2\:,*G2FX%LN,BJ#R;05`V_.T:S<U28F,\K`JZP:U'`/
M-`_JBJ)0^PGWW$.7Z=4<Y$ID--!MRW-L$S3+H,]"/B%MKM3J]ZX[-RJ1Y4H`
M?0LZEL?,N(W)2SRV<%$`=`*VL)TUC-=HVZ%FS?!O-N-8[[A0$!Y2)#X+;0T3
M!K[+#.%\@0"!<]H.:+KP4O(PR=$A9FX5QC1*[@HFMNL1BZEOPL.<6;"V?9C3
M@#58<8/94/CQIED$77,,\DN2;]#J4-.)CZS:%JH*70L>'.ZQBFXO)MRB[^CR
M]H-+M+(*T&TM=TIC0($FC#A(:A2?6UBF@:DY,^9$E$@UM1V&'3FN1SSM%=6F
M)!"#T='\W-(=IKD,ELS!=AA5.@-["GRAH0JE$!@NTBHNU*LGQ,/C"X81YZ`F
MT)^H1#"TET0%Q-'#>BT>NE-N(K\YU^=I&VPBF1BA*AT9T54R)J<TL!;R_P0N
M<V@P[MSV38/:"]<+1A.4DAF(CP8T+ILTO889LYC#=5(9#E/#(;HVMD7?=/F"
MHP8C1W`BIR$G!+"Q9V?C'E)I*#SRYL@X2$@8%D3\"=V`ZM%$2QJN"`R-%+&P
M#1\+^%2XR@-WYZ+!B#%(1BGIJNH]>C`-M(LR"[M0+;;)P:W&+6@-[F#JL%]]
M9NGK,LJ*LE"+JW8+G6@YQQXU3*P6RT$02-=CM=D=?-=46]U^ZP<*1PPIUUXP
MT:89;R,#BKK035N_WW1$@[-LCQSQ63DP&DQ6/@HKG\I[(5T\X]64AD+_8<8Z
M4W9FO$W+?;E.*2M0JF&6.Z$T)_-287<V*8:NDBO5SN"*Z<3I+%<:HF=3N-_0
M+)@KO<V:#M^A_?[,9?_@N4QF,P:Q">@K$IO@G$`IORNQB>:9N>V9B8T8[,MM
M3R0VT3R6V^@/*@5M@6`.O`=[TZ,PYT8?#62.20N59$%SU.IT-I2YDE13X!GD
M:-@41V,(`"`,5!6ZE\)))MP6D#!7BOA(FA1SHEXPS9*94S,6Z(6$^D3>I`;(
M0'+:U:9%VI@YVH+\H2!03-PZQ9#+9N"D"P/QI,,GZ,,3AL,J8W(G>*LMEN@6
MZ-_H`88KQM?"KX;TL,MO^X/9!Y5(`2*A\-2Q%T)V%Z&>V:`>7Z)]O9B9<B7T
M!LRA,,&`N50>E>`'"C@S*+<?BF5TG[^S2ZC5SV\_-(+HGFCZ?1F'X5O>94VR
MJ&U8G$<L1*.(!9P>[V5Q$K$XCZ2H*\<)%A!C$>68&)]OKM$6Q?H>E;X$IL]M
MR*<E%_(JC\?RFX<I_#(E=1[>_25AB?\#;UC8JV?('F#VRY,_0J0M!]7B$8=)
MCZJ#$'WE"J<]?(WS$\I3P?SW4-5E;D;4A)D4@U<D7@&30A(HL$<9>!N^F&%$
ME>PXU4LQ9-FREVN'S^8>%%I%,:,#I&9T22C2<<"=T@=B(\JY4^\!D\&%R&F4
M2!UF4/;A$]^3JR#+.!13#.*FM>2$I;YE!/,9IA2<^W&NHB\WO3NXH<2.J].!
MC[.K#EVN,PMG-@232RI!2V+""3A1FVN28Q3(`=<8%H9(?1?`N$BFF,%<FL/J
M82\!2P2/CF13P`0A)BDYVQ51Z#70U!4UKN[2PF:P-)4+]G-:9`N(C0-]X*89
MS(R(,\J2"9+#Q\[XN_[=&)J]3_"Q.1PV>^-/%R*%VEC+5DPRXVA4CKQQ<`@-
MO#6.0?*X;0];WV&CYH=.MS/^1-/X=6?<:X]&<-T?0A,&S>&XT[KK-H<PN!L.
M^J-V5<)N;\XDBSW:CC"XP3R-FVXT?@+Z\3G983KC*Q10PXRT7#]M2,E&,VT"
M3C1A>#&-7M`Z`7%V.01.]K:))8.-G<L(*?5J&4[/3G"%@*"ON4+3MK3%Q.'&
M##_>-D&IUX[>E.%NU(P&DO#Q$+]@YM.E?P%;X+AI#9^]O1,X`\8;HD@<I&88
M#B%.3O$+L-4#)NQ#&YKCWG49!E78VFLI)S9:RIN-&Q3X]:%,"=L>B%$N'(P6
MA!O`0"`G!M/"/$":U'U';$F%FPN(=9A'R7X#C8F19J+O6ZC>%0N!"F6/#=,`
M&!&#CV@I#[T5=;8];/Q>.ZO@.JLBUPJR25<CY+U$^TE=/]%$:N"O"')-WV#P
MUO4,;E?G[Y)E#DJ8+ER[AS0/N1GE:#4O53S5+<_,(!5J394SQ[$"&0PV120O
M5*KVVNTK=30>=GHWHSBY7*0)S<W%6BAL-1[>M:&V^7[=[([:H&P*VL.AY`<X
M1.P5`[,@.B]*U2`H0^_%U$-`\3^#!$NXSK@(#.PYONZ)J4)%T.PY`COCKXO0
M'!AS!?PS->"25@G(*K^Q=+X,?75XU>]U/Y5!*4(1+B^A4H.B;(L]'E![(1)5
MM7O]=F^,M0=41233I>^Y"9X4XIAB,((;XF.$MRF+T41BV-8K+P3]`UPD_MMG
M*X_)\^!`#`CG#J=X$;!GCYAF"S7Q_3?\?[I$3_!0)$E7AGQ;:(U&EG3BS]Y+
ME_AN="R82(;U8J"_W^0ORH@%J;@J0C<+%Z^7H%S(F(/"U"@+#^CT6^I->ZRB
M#H:HL+_)%D)IBI"X5$HP2:DQJ",H!6^AEE1C>ESATK@!+_UH%U(,*-E%J"E:
M#:$?LMV:2G`D?-<`Y?&E^2BP7?B9(@H)W,@DB=ZBSJEY](7:2V+AAS):W9^#
M6N+X):7OI%-U>C\VN\7`UDI(NLO4AKW!.G69#@VVVF/SC1\=T=??\"LAL#:N
M7:Y]2Q=+8!%D0)GH#T'<OP,CXMSS!$1$BAT(D6HPX6=@Q#\1XI\(\4^$^*^"
M$(,\(/.Q$'O*'=<+;+'"D=+L(K().35M].U#C&2<?TK$Z!DFGZ0*?=I/,_ZE
ML25]TIR9CDZ*>H?7K_'+ZAF`TY6`T]T&G,0-_G()QS$$M#V?W[G:C#4^>]$L
M1JA"H!$!0W`FCT&V6@I"N!L@@E@-Q?(P*XF>5S_7OF`\W76[A&DO$N2">9J\
MODTN`*&[`3`2#L8+W@9VN[M5QY\&[=$%@K]8?0KZ88?Z8AGT=X3])9"2&T=*
M`DT688+)Z'X;-<5%>'>9DF&OMCNFR69T-T$@O,]YA$IY`98"F?;`XZ?7$!^'
M_^AKB*-OO88XSE!2QGJA>745K1?<S7JA4MMKK*^$NH%H)^GES1;_D<D8S3O"
MT4_0L7'Y8+ATRA(".5="!;#8@YPX@G`4P42M8]WHIHU1B,/>8'=IT<XK--`O
M.)=)$B-QZ<5&TSXD^PBQ!<[%,]MB@4T3)OV#X?N.`^%;[9X)%"[S<_AU^]`W
MK'G.':5=M,F#W:/S\AF4\.]:35Q@:0X/+E\46L/^:*2V^K>#3K==U)P<]&ZW
MRZU%#LA;!MM5E(N6."M,<?H@\-CL=MO=7.FV^4/[X'*!DD'E%WA1"&O0>YF)
M<`XV!%ABH;IR<-/N_3#Z=#NZ/'0GW#K$=>"]NUZX.<C1&5GCP+`KW*O0/:@=
MVM4<?7[(C\Y/#^\1=S!3?%8%DZH>*&LOS;8=]I(+A=.9]Y$"RDD#=7YR&IQ_
M1\9YFL'N:T?B5AG^?2XOE?TTZ`_'*FKH0[];4-69:4\T$R<#COZ]LQ93G3HU
MM9F[AP@AJ(>H/:(K)>G<Q5)=($K%65==(E3>IA"STMRV[ZF3OP;FQ$_2*\*C
MXU;S^89S?MUC,:I\CJF([N`6XYQL5$?-UAOULT;M_&D;B99[C5,[.R+KT"]Y
MY^_#7:>+4.QVH'9Z8\RN=X,Q(J05@G$"J*HX)W7\I5?,)D4++%5]Z>\@''=P
MY18CUY9<5^FLWHDW*&5Q%L:)<]T8B#`IKK%6-C>@\#JB^;EV]J58H%*<<W"F
MH?&>U84WGM5/RF_$>'-P@/FT,_QW>%5[\PH*N.Y8@O)X7"M"!6<!<RI/XP4X
M[PPZ8L8P;1V11'/0:8E[!@ZE7CAPF4?R.>H,B0O*XU&MQ!%>9(U0H,6HW[JR
MZ?=$H7[#CA+7Z2B_;W5RK%`G*=U$WGN`8HEK/JZGTCT!V\(F=:4L_LJC9#6:
MU#)HM!A-G6B>Z_$89+L]7E0^P^,%72HKU>N-XZ>STJ;E;H^OU=\(EZ??-44X
MP<'!`<8*H5Q4Z(7X'@!0(%"E$\J^'<EK(RIM/-RT&U01M3H1&Z!1JQ*QP)RA
M^:;7$.P$!+DOY.^L>YSV+4#?AB`9P4NYL;EP9T79M\,\W[$NI+C'\E8N_L8Y
M[UB*2V"+@@Q#4ON9\EITXT/E1J'XI3HW/?7!=NY=%9,9\41O*EQ<%$%5-7>A
MJH4\4DC;DY^!J"-X08X9Q-$F&T(41+1.$,Z+7-`$]R2^(!?)->&%LHU81AUH
M^KU*X:*2O@H"JM$0XCTDNB/!?J/8Q&7_#L^;NL'=URIB'^D-\:)M+XO79L"1
MTS0<V4>?]*AZC0R$?]?DG5J#+56$$Y25&+SZ\;HYAL)';AGV@UMY<U*$J1LB
M^E?AI$)$ZO4(7H3W^L17TL#$QM!_)8"CV/B4-\JV&`R&"+:Q!2V1`>4VN+P(
M;:ZC>XLBF417EP@W!DP(]L#/D'^1Y)5'>^?7>?AR02A5W)O<C`K@Z2MU:1GE
MP=R44W@D>^STVN-T=Q#OKH>ZV3-ZK!;J@A1?61YRKFBQ'@?JH#=(][G;UU*(
M-U:2Z6E[<&^6HST/^IZ)?%6B7^?!W)5`)J$/P.CN@WK5&8Z@="GN@N4J?,HP
M\!#T2LK174_M#]H];'%[/2J6%\5<Y;9_A790M]M2Q;BO=CNC,172.A$K%E.W
M:N<J<@XND>*?ZD%NW.[H):K<U5.PR$QT0@ZU8;W57FP;!2TC.05L?RZSG9(^
MLR\)4"*<DNJQ,^J_.3U55-+/NKC'^<2J<=L#$\69;IB@.!CY%C3]&=3.0*DW
M3HX:RA:$W&JS/_&=EX\Q\9V'B:^O]C]\'VE*Q<6ZYS"&:HE44,I4.@Z^U/\I
M:ASJ,C35'D/=;K>*]!_\RD&XF_BB,.X/T);%PZ&/J:0J5FU/:%UPU5/:D86[
M-2[KGW.U.=TBJ>W31EW9NM)\=GHDKC33+L!-<%'TZ5QL.'S%G.K7G7N9?.)H
MR/GWGGM)%O+PZXESKV[01?+8)-@@SSX$>];YE^2P[Q#L=Y]_Q;3QSWG^10H/
M-9NE]6]Z#O8LPZ;.PP(-[SD/"\^#M^S^__\\+'X4WH!\_+7!M;:@YRM7Z#\F
M78E_Y:(.+%\SR_"C;?H+!D>!/'UY81ZU/I*(BLZM1(,;GQLL#P7YEL$(GEZ`
MY2\F&!#UX_KIFWJQ')XJR/W'6JV*_T4'6JTY)9^N/0L+!@Y#LWJ4G&XU![N%
M,7?U^?Q_,"X<>+L09>_YO3[1G'NM.OW[?=5@[X+]:_SI6(AFM<U5]TIPL4M<
MO8:"N%.`:91>!U1J5268PBFKH?9.M\R[ZQ4')'_ZF"`YO24,LP>%0VP'-[HR
M7J;57,75IL(M5RA!0H"SKQ7@`\[54_XH^A6[X"[=C]BHI6D8Z)W1I72#7A7M
M>'@4"%9+"';^M8)=<5?<]A<O-TQ-N"S(O0,WT<,;_/@]ACB:W7?(U+\LQ(?W
M**&/-JPZ<\:M"NU?2XNG.AJF#8[J\)=N,)IZO*]Z_6M'<RUX"BW+7000T_E)
MT,M1HA<:T96VPA7O1T>;S>"ML7QXCU%2Y7I5TZO^_;,'$3V/1*_EF-I%^I-1
MAZ4K"NN4.D7G7S7$ENTN&&V1Z2(TW>!EANT%K]FBB(6+RB9ZSI6:<OJ-M7H>
M:/4X?8PM\5#6J;.LB1T<IVI<2M*9-9ZWSBZG[;C,&OE<-;-*CB*SZD'C7K9H
M6>?PP9DV19">6<5M6MQF5AG,U++'-,U6FTX:S:P1$'U'J\4BNUB\=_SJT_NM
M<5J!VJA*+&1551PKJ+(HI-;<Q:$O7[VE^%#-UN4'*HSVPS+JY!Y"5J.91Q=!
MLIJP&>74C)H)]^QEEEBT(4;O+%/W%DA?NK94;T=#$2;*HT+31KQZ.5^[83UM
MPBK):OQ("%]08/5T&F?_$VKONMT<WPW;8IUTH#S6%$4YH+WFX+6@.#O?/!J3
MUVL2YORQ/1QU^KUX-.<Q8J$0YH1B/MZFV^FUU5'G/]IPKE!YL!LO+U-HKLZY
M.O&G]/`OVC\,2'R+_L$`^5`0(DIULJ;G>/)2:1;E:U^<X0ACQ?<DX\<`M.F%
ML%P57(/]RPMY\R.XPT$[Z6+/D?;7V:,'P7V/J"L!2L59TD56#8Z>5(E&WEL]
MYYG5NG.\TDS:<0VD0@,-$/H3P-T\]0P>4,I-L`?Q4D_>9@R>]1'FH/?*S*L*
M0\8U$(UOZ3#ZQQH*N\;]6D>`L+GODI336RRCJRTH8G`3%Z)=7NE``@Q&1W0%
M8EAY%QS#@6[R0C'.A"@!1^^+=YRMX;&<"DV&#C.@'>4;<9XG'Z$BOL,8@[-B
MU!%&%XZ0MC"I,K^P5R;`RY>HT3*\5#Y;G[V\O`D15BE87HN78W<3@!?*X]D4
MJR:UC#8(N@7+H`JV?A!Z7SJ(D^58I3F+92S\%0M1:T6D0!H9=/EBEA)IU%/3
M=^=H3IS#W"KTY(R,ZXR'";=6077P='O<_4#OSB-AT"\0JE<8AI8>V'^O>I2T
M>FP':T@-Q\$SMSWZH_;Q*BE?K"34Q_.&+KTX%-DQ%JY32"4W7",)U6[B+%TR
MY^&%BP?G60S@;U#X;_&JKYC-Z[<H%H?R+#D5C]J4=@6TK=C:'7R&;7V;R(L[
MBO`<X0X[C"ZMDQ=VV%@"$J9@5H8EGJO(_P*AQKMNMA[3G01B_WX7Q8&:PD4G
M4_GS?!=]GD,&=P:2Z6B_G$%?QSO2`G:TE1=V]UX)-!1+J`4^#?1FH.NQ%;=]
MUUQO\E_BFD,RU\8]^*/<,R'_U;A#0Y.F1H]%#K2\H.?\.'"'"PG$OR*PVY&1
M3B5&A:27HKN4L_00__G?]JZ]J8U<V?_M_10**8@-9F/SR&9YI8`X"74P4!A.
M[JE=RN78!D_AU_78&W+/YKN??DDC:31C`WMN[3FU6UL!9B1-JZ5NM5K=/[DU
M,&0193G]M!<]LJE!*[Y/-X5/81H:L<J2/N2<"8_TULH5DDQ'NV!/#?%,;JJ`
M6E.P<&BRA!#_&Z02S`>^:Z/$-IJFZ%5L3D<8(LD!J@])?_AT6!4?U-Z^>E-2
M[]QHRH<;G&WOEK*"Q=S&Q?YS!_T.2&67LF-W@='H\WJ5,F$D\#`U/JN4&N,9
M;Q(>&M1Y?4ZLZ7,]_+<./"RKSFPP^,9!A4@^GI5/C!PAW_==RWE-;2B4KKM=
M>X&A$91/4(LE__5:-?75DA/96]1O82GAA43B5:W_@.,<M\'YB&"?80PG1=`8
M&<9#\54)WJ70@54)S>4_3,PM_*&#`>R(1LT(*$/](6IN=U/BDEC]/.KHG=<D
M2$6,7B#-6D%UGFX"V^A'@VC*<"1;'X^,=S,>(]J"L?\,9_*;7+2]OG!DJ_+S
MF]T<E0#M;=T?)2M8CY0UUWX!I*@56/6M8:,W>MBXV!X(4E4XK$>%V*.?"2E4
M6C^3,=)#D25N1I:43F1@E\NM+L#CRR:>>%E!5QNUG*S/(J&1I+@VL66I8,5:
M!+8:Y-.0Z6QF<V)SR7:T[!8TLB':AE_R1,L,1/7I2OH\'`W7_Z\[&:$4?>WR
MJ0'VV,>7L3:I/P9[C36;7R=8X_^UV\7JWEZU4C(J.[A(SL;S5:;1F`7O14!9
M(ALD+8$M`JE(3[ZV)L,F._2R>#!@/1;!<N]FQ`)=)G[>GD<8O^XH'"SM?DBK
M+X?0/E*Z:S]-Z7..>4N6%F+-BI18$96_0@V9`"&08Q)'D&/\65*__VZ)-@LR
M/2)AA$=46]G1]1QXA=8;P=@<7UPO=S"H9BJ^4&3%\HS3/\O\[S(AV+A/K/AZ
MY0=<`=O*--*Z@+N,]7D4^1D],GT,$`@-?R$0(#J2/#HY;ZC."&QGR@.`D1EC
M$#%V(]8)(M^=I8$&&_22V)7O>)E2F.!:D3'%64%1:QK>Y/K4&FWFJJC1XH"5
MIJTSI3J_.CA0U9+>#KB-I4Q'1KE*+]+,&VB$&06$6A8%?^YW[E<Y5_O88JC]
M6MJOB+&DS;0[B04/QE-&!WZ3N1IR/.%KHA=_D1EO&V[X6.24?K<$)^6@BL81
MZ#+8WJ35MZ-.G&^Z5"9TE.U/$^^\SXO:XJA09IWP1',JJ,_BP>,4VM,U6HY*
M<]AAIHN(DC2HN4X93/Z@BY6@&M^&[=YD-(29Q*<M#$B%LJ2,_6#"$&&*6V.D
MYS2/!KQ+C$L],(J5E/54IULE5H,>,,6JRGHJ\JH%UWIC,05>NW-*E['CVD',
M&A^;AZ>GS:/KJV:C=OJA[`>O`J,TKR1*)E^@<!X$Y@DZ\,4-ZTUA'&J,2VX]
M9(Q':E($O:3)0%ND:B7VH$(+6/;X-Q`6$17J*\;XNIVU[[L,4L;Y5-!=4JYL
M<A&T4FO0W:$S6++9,&%'SQ-*D8L$)T'M45=5M+9FK9#)6@>L6)&%3M8YLP2X
MLA:%)C>I9'6`NO>=JJ(J+RL['_"E"3@SN6J>V_V>3YM09S^`SC4>^[+Z^.&B
M^;?:Y5GM5%+7T)MN)Z]YRU.;@CYP,:(66U.3IQC:IP@UKK_>(P8[!P:O[=3W
MR,*%\H^F+'S:D#NP=C=^B6Y4LF?P#ALR%RA+7D2:*`L51Y]0#$*3?S&-:H("
M2(T29"(>6)4X3.R7QG6]?GCYCQL,&="0")(/S3W8PX\=4`@+"/B$?$-%-KGT
M[DQB>OB87U=#>J0:SM%BA)G/P,]2N#C2RL5)"4H9S']SRYD.'"`N\70R8V=Y
MTB",,0+W?,/LQG@:E^D5C0^#Q^G(*ZV-I#E!=`6.7-:NKB_/&C=$#+%#'XDI
M"HRFT\8R18NJ%E!XQ^G?HF8B$+@VQ<\D2`R<8RQ@@/2-L_.KV@W'C$U&LRF>
ME1%9!+^*_9D-Z5>L+:?+?"H>4J(II=G/U)J>^=F*IQX<3N(RN+UE`YI&SSS)
M%C(JAZ13$P-,;?R"/_O3:-SOTB2!S;@6O$#E'84P*X*_`K]2Y@,32M,MD5>U
MSL@H:8U"WUY3`B3#)YR52HYF8'Q;5.\R>PC4$51I_0@FJRI:IGY)&_J)&IY+
M$XK8<:\+(SD;CQ'?-)H2)XA.9!8.`2TYW?^=M1@7&[ZO2^*+"JH=^(RI4N5$
M(ZR8>$3P+S8R=/?7C0XBM=6W[1#UHJB=0V"BHQ>$&ECAM:.@^K:G@PSYLOX$
M_2#3WMH8F*T8OLWF-I9BCI94%(M"YMF)<DMTZ_=?*&Z/DFL?RW2D:&X:N$>:
MH/O,5,3)X#3YS$H\;XA/6%O11Z%CGX_1CNV2_+:F!LA#3HHD0R'&*%`S@"Q]
M;/\)U4AQ\_/E\7G]B,;H1=K)8<NC=GIY':.]8O)QW#"202/`^IZ3Q4IEMEP=
MZ[6S\\8_&AZ7M>9$:]C\+E;([EQ+S%C>7<S4HCE*"EOC`5ES&Q1A4P*%BJ6\
MI7AM+<JTL?*]"3S/9;ZO:4>@C1QEJ<<]+L>"XVH<>>%6Q6X>ZFDP0@7]%;2Z
MI'A/:,80+O<]K!VH'"1T[G5WB+GALXF8!$S""TW%P7XF&?M^1W+]'I:*TY^.
MD[&PWMJ.#ML4M1<5X[O@!<P9MX(SI;0H$?(`*1''4Q.@5UFRJ@91'`]:4YDZ
MY(E!^OL=Q.A"N\'!ZO))]HY1>#*D'HO+Z.E=2JPMF)NNC8C%`L9A(?01^4"4
M5CR6]"",S6`\_>9)SQ\L*/UDPV%/\06V*E795A:"MO(S>>%-Z>&(@]-YNV9P
M?"SM%FC:5W@7QYF@"MHL=S>^QF+'])A'F>V^B\1SAYAI5-8GEI3MLXK_NAMK
M\H%D6(6KMVS_[E/M]0/@V6^8MXV9HKL+[)WU,J6;X6V7!V:"8"CZ,QF[.7Z?
ML[_,4E39VSAOZ.JUNI;"07>`QEU1?[1"[$E10ZVDV8*\HO?N;&,W3[(Y"TQV
MFV'B4:^@$N#F?H%'-^Z48Z=1]G0S<\K?'G9P_N;YWP(3+K7Y>]_M=^5BG=>=
MKE[,K5V3WG[!1WB7IO=$/[+QPXA8?;I]H`>JJ$)9DVJ/=X\'9+CN\9[P@#8'
MDO#2)4L$,UG2VTVV>(-[3(/!!1T#0>\@G_>(N`-\BMS.V(<^M1UW6_C?N2-<
M5`L$5:>>Z;#MLG3"?!.OD+-"&4VPZ!*5F-*RA=&G0[3'8:>K/ATJ27G\1H%%
M.J)4?9VI7Q"1-\MYTKTL%04+#Y%IVR2$UD3["6\/\VB;PMOCB%X!?F7O:R8)
MM"D>JH]@7WE'M,"+>6ML<+NS\"F=V1M:J*X91%)[RZS:$6+O603B-VT3`U5M
M_N>A!+&GUXKE?H'*LRE87P_2X)V?$`N#1X(5"W(M8!K--V'FK2>X;.29+[2L
M/,Y\F6^;/-DLL59<(FR]ZDN3KX)</GBVRPNQ7=3Z^O,6Y#078R2H*9RDJTZ*
M*;YH.,$OLUON`)3O=X>:C_W1[2T\684=>FRQ$,BG1RCSGH_:]+:RZQ=>PY;!
M8$_5Z--9L._L7N?/6LU0VB9NB2@CKT@T.V<(:UP%+X<;)D$"(!H?#J]/KW1,
M#!.SCX5</O.#;#X3#W-XS`F@02:/AO$TG]4^KY&$#W3[%AH*&EZG#ZNQ9$?R
M]1\:&WI?`T/O+\=+G!EXJ0OJNS:6.TNAA1HL@.!Z[)UB:A5`G1A/)_;?2-8O
MYL#FQO7DOHAYO)P1N:A=UBW?RW&+S[:ZH`O'Q,<2W_B$^<O=WZ)VUW50T1B"
M[*RPI-XVD6E)ZXV+DXN:]OR(W8TTDC8S=#IK`TW-Y)5,2O,@-0TQGU,F(K=,
MXXJUUE&[9DR^,8?#H4VUAEH*RU/]DN4E99'!DOOJU:_#5R7%?\$?E5>[#F>G
MDR%A5C()9J1AR7CK>,A9:\68JMUM&F1-H>,M+)9C#%CD73',!T?#T3S0JX#&
MB70T&\^@@B-&_@&;3RK-7J!S.\^3#T;,KUSRUR7%$#HN+B:Q;MXJJ/%'P[W?
M=GIO'!5@`<8<ZT=C44)#D'Z&^D3UET@.%^H2E7Q.E\RAO=LEG"9_9(](H2S4
M(RKYG!X1Z?MJ^Q$4^^9Z&NPU\GT"&N.5NN=$)$<WOK/4DH/4WCJ2C?53Q,%C
M7Y2%^6KU-,6X[$6*%Z$,>TJP3V6%BH:8CKU*/P+^'#N^R;&3VH..;WRU)G>N
MB94L*GEHQ(M=CQ%_C="[6H3O^H<,!K[,FEQGYR?GQU>GQ_7WYOR`L=%\M-<=
MX\G.6:$*094O,+%E#BE1JR7D0%F[<C2&;,G?0NFEP)Y;B8LNMN]ML,"0RS:H
M,;DOR:2=,_UL<&*/`PU]/\:?@P./Z7SE&=U^7SO]TPT\K;#9?7_F0'],#72J
M/W=Y_;F;VQ]JU+V5)3]DUW8D)#MX[P:3%><*DQ7[#A/SEQN#ZVX-O-Z83F9T
M*]"O`+2WM;')5K^L83/4+^-RI[1O0/>.$VW*$%_'S>M&K7E\?GUVM?L(<NB+
M&=0((O0BY)06=.XMM(/&#KVOI3L4\.C[F\DYWL`%3I@D9%CVVM$-'2!97C2#
M^,C.;#%\6>S2SIJ4JR@R;C.SG^<#-M=G=D\(5<7$XT_4AYS^DC>^\(#SH'J;
MU&0XF]8EM*R$1N-8[9OA98C])&D%T9CNW506)P85M\1E*7I)V^/,HF28E+DH
MI_V%BJ8(P%8[T621HA>C?C^'`!)-(>#DG,1TD5;K]<.+G%91PC0'SDG:,HO2
MV)1UM_IT7_`"!'R(OPW;B]'ZH>67S2Q*L4#U;B=J,:Y*[A!H9.6YK9[BP4"*
MUN^[Z=E(^L:>C@3U(>BLWJM]$MT5,V'+?FZ5F('8!M2:?F-9PJE-?GTBLT#X
M$GR/<NIQ?S2ZGXW3CZ/A?>KA;!A\''\;!)\/[G'Z^D\G@]#3P3UT/5VV.VP-
MNH''K4[PB[<CQ#UJ!M]AI7'K+MT:B6?PS9=!*\T9&,1AV^$D/P?V8SP$ZJ.L
MD6?8Q6C29&.?_IR,1NR-EK$FE%#4\V6U5>9H"XJ?:#1//ES6/JK?%?SV^;IQ
MR;]=7G\\YW-]_!_*57`+G#FA/+HRL3B,6B0GUVVK/1WI74W^.KA8K/B\(-^G
MK'9/".[6^31\+)"*B:#\3D:Y=%;)=&1C<H8%$Z%:YW3'0H'YANZK^U=TJL6!
M&V`F5BOVV1:ADO)W3$-)W;I7=R-5-^8;-+!4T7,+>SSFG>T2)E55-B)S!?1R
MY6W_0167M_I1<O\S_K7</L(8'GWG,T-A4QLFOH0/ES<JVD'`A'.A4"Q/V6.T
ML1O\Z;"V;_R$^9T*I%FYHJ4OUO'J99D3KD"(11&XB@"6YXQ+"L"$XL1D-Z.'
MT9.\Y"<P"J]/:QQ,0!'H#.-D!/$ESPRH#2\Q+;68.#7@"1<K)6D&_PS`-25^
MTR+FUC4U./F/#_"^W1JWOD1]!#E;22$46=L7+9P:*YUMP=^68P^!K!A"(*/`
M70>_J+1K#Y4^RR^NF*'3BLP,H_'767DM=I*,;RHF3"YH)K/"`P-D.!O[C$;&
M*?7O8)W=T]DPW%>C]ZE'_-54FHR=_23V\4L+TOBE^2U).YD#H(L?3P'H\L-L
M`%U^'P#/_BD`GIU3PX4KWGY+0.WX0]_]\#VYZ&/-N^:#P,J[#WCU&R]C1B(2
M.*GD"@HJD<RF1'!^D(LGWFSS-2C;/\G'"U1Z.OW&A>G2!CTB8XP.'[=A5*28
M'M*LV3N&PCV8L?9L#?6G8'7"ON3D91I(_'WM[R?'M:O+6DT3P:=%3<1T-C1G
MC+Y`H;UNQ8-UNI\!+V;H*8W[%GJ9G@WA<HO<A))1<\Y-*%6^":4J-Z'88X\Y
M=M8M*)/V;S(':$&^X,AKC,X\JY_0;2!^9;HRQ+\'1#L(QG3S1LS9L'3#C5,=
MLW[Y^H0V10>9Z6>7"MS7@+=7Y-ZAD&:30.-ELE'>+S)64M1<XU$%IF_N;,)P
M;<\?+KMR]E50E4W$'\<?&PR(3YR0D[IFKS\U?*`7G%GI/#=72ZZJ0PKPPLSO
M0:O=BX;=]7C<;4>W8,4F:'G%Y+I(F(7;;]]P,DQWRF%B?40RA[80QVN'0]`Z
MJ\IV##`6-J/R3&#K0:V"Q=YM(U!(42-`TVVUU!3%DDN`V83Q=DME/KTE#-98
MW;7;2#6B5P_0#&%JL/+K!*0O04"!25S%?S9*ZE>3!"#7@L!/C7>$=X10I24L
MQN?HA*G46H+I!6T0V%F'_^"VDD)M>`Q5^9Y=34("HQ,@(4P`54D(V%&$)*&`
M0W3#VNIKZY7Y*-!ETVA(=(B9=*9QNPC\*_>BN]X\.JCTDND^5#.]I^I>T^-!
MNTCV;'=27OP34,ON:L:G_![+=X@$E;\D:S&S83D]";1?90NY76H1E/MPO3S1
M%JS[MY4G0-TS5/)?4/=_0=W_!77_GW_U,UBF0S**3T_.KO^'00P^)<K6>QP"
M4]:7$)M*!2I-)]G-H\-&K?"J_LH"AK6.TS-@=3B]4G;V1W8`N^W!3<=0FCH-
M"5*7=-1`'>/J,O[?*\F8=NIH9YM_SI\F7((SA[/!KO$]RS;1!FOZ\W>67O>Z
M2(?@<R)6UF@6B^)7CMV3BDS0KFT8_\]%;R*0DS,]"TKIYLPQ?WYSU06;,\?G
M^<UM+-C<QQ!UE^GV-LN!$)%2F,DR$@30GF8QY[%>GQT?@JX^.G5NXO;S7(FB
M*GXC7<*</&S@%W)+;(9I^'QY]>GR_/KC)Z6VPN]A=WM%+6R'WQ\='O^-WK_Q
M8<YU_)-0\)/M9$OCH#N0CDY`E-O:C75(N(2N?Z@!&XRE<AKHKF)D9\G+Z;5+
MHXLX*?@NU9!=<&/1@IO^IZ>]R6AVUW,K(1B?7W",]PRTIZF"VW[!+ZWV?:C7
M;XST)Q`PQE7"R67HOY+=\),@-4P\UMSL/&O?_;SL++<[MAO77M)(U!:RYPV>
M?]#H-F_G6?6F8*$!-@`9Z)NJ\O-.I;JS6?&];UE57=M^J[*S:;OA\*K9-?B7
M]^Q\(`5&'#JYR_KO\_H)GE#AZ5FO2S!-&A)WQ->CTY6K7/7BN/D)S,/R#^O\
MH'%^??9>GW31'V7WW"N_U>_D-^EBO,TXZC1YVPV[#3SKBM4_%QN-D+_+>C-O
M%$*>KJTW.]6?LUPG=K7TSFK3N3_[#=V?S4XNH^`:>`OCWP]/3]X?7M6:5Z='
MA<I#I5*IDH/K$K9;4QL(&]ZKQ!]&;+-;:ER=7S2/+ZX+W,@&-=+`;$,P;.,>
MV/T=O`0U[J-%#>5>Q3@@N+="%SBFCODM7M8:QY]JZ&.7-C>%,+K]`[WL<H>M
LHMN`!BVR;*!I=ZER8;",DJ$6MQRE(T?WM-U$8G!S33=^__`OL:_?I;6A````
`
end