From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from kanga.kvack.org (blah@kanga.kvack.org [199.233.184.222]) by kvack.org (8.8.7/8.8.7) with ESMTP id XAA24550 for ; Thu, 12 Mar 1998 23:54:57 -0500 Date: Thu, 12 Mar 1998 23:54:32 -0500 (EST) From: "Benjamin C.R. LaHaise" Reply-To: "Benjamin C.R. LaHaise" Subject: PATCH: rev_pte_1 -- please test Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-linux-mm@kvack.org To: sct@dcs.ed.ac.uk, torvalds@transmeta.com Cc: linux-mm@kvack.org List-ID: Hello Stephen, Linus et all, This is the first version (call it somewhere between alpha and beta) of the changes needed to support reverse pte mappings for anonymous pages, and is against 2.1.89-5, but almost goes cleanly into 2.1.90-2 (obvious fix in mm/page_alloc.c, and it does work). Sorry, this version *doesn't* include mmscan.c (replacement for vmscan.c), but I hope to have that up and running soon (I'm going to steal the code from the old pte_list patches). My plan is to get mmscan.c up and running, then replace ipc/shm.c with something inode based and much more useful (mm/swapfs.c - anyone got a better name? =). This version has had the following tested (it passed): - read/write/swap shared anonymous memory on fork (parent/child) - shared file mmaping (read/write to syncronize parent and children) - mremap anon mapping (take a 16K hole out of a 1M dirtied anon block by child shared with parent, then dirty) - munmap a hole out of a larger block (both single process and shared between parent and multiple children) - swapping of both shared and not shared anonymous pages (r/w) The following is done but still needs to be tested: - mprotect - mlock The following is still on my `get it working properly' todo: - patch and test merge_vm_segments - clean up debugging code, remove extraneous and ifdef It's been self-hosting its own development over NFS since Saturday, so it seems pretty safe. Many thanks to my employer, Spellcaster Telecommunications, for giving me some extra time to work on this. ;-) Oh, and despite what the cvs headers say, the patch is really against 2.1.89-5. Please send me comments, both positive and negative - especially if you boot a kernel with it. Please note that there are several paranoid sanity checks in the code right now that might slow the system down... Right now I'd really like to get some feedback so that I know the code is 100% stable, as the rest of the development path depends on it (mmscan, page stealing and successful get_free_page for large orders). -ben begin 664 rev_pte_1.diff.gz M'XL(`!Q4"#4"`ZP\:W?;MI*?E5^!])ZFDD7)>EA^R-?9^B9.ZE,G;>.D]^ZV M/3P4!5FL)9+EPX[;>G_[S@,D`3XDN=VD#45@9O"8P6!F,."E/Y>?IV+E^>GG MWJ@_[!\?]M;K?2=RE_O.*EPZ^[BJY]=?/Q.M5M2/4CM.O+7L)W=V&DM7G(E7 M'^V/W]F?KB]>7;?=-(JDG_1>(DS<3]8Q@W=.<_2UYR]6">#EL%!B0Y$&XOQ: M!G%^99">`O'C>R?4(:C@]%FWJ7Z]SF&@F5DDG5O\Y3JQ%!\^79^_O;!??7-Y M]?K#Q?MIWI$T&ZH^TJ:!NJD:Z>4&N?/&QX<9)Y+(";<*70V"DH314Q`VB-N& M%EK73L*R-A3#X^ED,CT8;Y&U&FJM?\LY"=IP*$:#*0CMZ%@3M).!=0AR!H]C M%K,P\OSDMOW%E_%4?#DX6'W^V?_"$G$264)&D7@A!I\7\(=D*EX&]W8D;[PX MD5']+&MP[*2-;"7#KS/E"GPD40B?;I:4<@ M_CRPY6/LCTGQ\)II8.X^\.VA^WUTZT?Y:KCZ'!@#4>B2\\)LP\8E;J)N%O; M#JPR6[WN08&#,YOZL7?C@T2L`O]&./-Y=-8VRCJS=`&`P)']/?%=$,:62)9> M+.Z=6`"/;H(DD;Z82?@M^Z(W@Y>]?8">!_=^^X6QX-=K)X2UNT;^0M-`[PTP M&;A_YR120"5(R0W0_S6-$WP5GB]^EU$@0N<&5C72%2P7T'E0``O/G]OPLZVU M8M$8.JJ:-@;IST6/.G3*+#\:6T-8L*.C0VNH5FR! MQ9V@<2U6:;RT7<==2CMR_!M9G37^5W1Y/CJDWG\'EN'T-^/DP$+]:2'/UB:> M!FJ)[TF]?_?]?]-"+SBJQ;NEKU\0B50T;AI-XKHBQS$X$"/C*JVV MADI"#Z,@Z71@R,V$+?%WJ>LC.7][?OG^M.#,@":X82=R- M2K4Y*S`KVMEN1V6A):ZOSO]E?WOQX?W%%:TE9!;BJMT`?]*DK]>FD4HJ,*_E M[>",]ON0IN_[F\LU'UL,D:>,35C:#S-4BH\/#?HE3X8E_BG?G_['//[RU M$?T:R[I=)4LH6K,P@HX@9W[R?E'E9B>C..YV::9;(>C4N1#%$"^,$V%2Q06*(HB)9Z=9W$ M7>8%][!G^19R-(EOE7-K(:OH-?=W"9:*7'I7KDRKU33IGN^NTKG)K/HM!D.`4/21!DD.S7OE.,!IA/XUU"3N226>`#5Q]967XC7 M$MVQN5C`)H^NSVV[@W85$&&/9TOW%-'3C9"ZHF0OJ8`-0ADY:-3%NA>'FKOJ MR.6:6YL/96$IY5V+`\K[%)0+3(JR,6%CI<&AQ5[AV MP!KMM!OFTA+"P+<$C`WLSCVBP;^9BN=O(%*B8>[3R$KN3>JGH%V;R:A?.`9\ MS;L"HQ=K]'9]V+]G&!"Q^'T&EGWT&\SB0M;,U7!DC28P6:.!-6&?CX"2AU#. MY<)H[0]V&\`K`$V?D5YX$?QH+R(I4=X=<"'\.:Q+,#V`3J]E=!>%][1'D_%C7QB3ZW^RA28X%R?_?H45U;>3,%0C$W]M*) MEXCC),': M0"5U_P&FT(!5+*&#H`0^/!;LHWJ1FZY`^9,!2^W&AAY50G+SFYW)3Z5"2=`_ MP+KS%I6904_,CTZS]C%LC07HDQ.)'FHW&^-,U&QEJGG=@(,=+X-T-1=S+P81 MD-#E.`B4"LM(V!0^ZK+<@,"*>;I>/Q@K,0[$O10WL*/@>,#JQ]Z3A,WDC>?[ M(%O[:*;"_*R\..')`$B)CK1&1YNOGWXYS4%RV='J;==/"`;F"!2#![/__()(B2]%T@'DD7[%L062`= MK*K]NLYZWQKGE($4:!8ML`A-D9=(V+91:IQ9<"?[_;[)-F#0=_X/.#UMLI9:;42P@5UM M;>HL\8*K64IBC"_I)%@[U%'@.=Z&?X%3KM!-?&+&-O0/.6_JNE!PKH8.134G MQQ@'[X[!GAP-:9Z5@KP+O+EXC M(FYC(0:\%4S)3C4=(36_5MMB6:SR*I8 M]M05T=B1O"NX37HQGK^@:&7.`&Y=[0W--74%K0=MG#3OD5R#F%,+Z',9@]Q$ M6QD(RF$P>9ESW4Y0D\89O?6ZF+(U!=QU+'<%VWX=6F6N-4R<(%_>_Q4T-P@? M=L`+:'P]O:>EPY3JZ#!R5LO<3 MG)>:`=$RAU(RJD'T/U9+N;R6Y: M%G^UR=+2N5L#4=^%5=XV?1Y^EFFRRU->2>2\21L8MW#255(KV*BR=A]/+ELX M,_>1!TK(<5W65K0C'!]:)[`AC(?6D#>$LL*#T58FB9VHRHC*PUG+"%@0RYLU M6*=URF1K",$@5PEXUQ%LF)H&[.A7DT?2HMI'MCKU$?0 MTECYK$^#-N<3?"&;\,"\ILZTMX5;#)V\1,'G-0!B$>,N%(C3+O=QIS`NXF,3N\9RAT^`7ZT0U2W0I^2 MA##5"&RIT7@ZGFS,4VD@5HZQ8XQ>RS0:C*WA&$-^].1<(W)>6*T4ATOT#L7@ MO%,\J-?+SO#R&HX3*<^>#MS+5MG89"B&T85'D*W:LJU5V-41FD#71YGE2X/ MV&BFN;\UQ=JP:R@7K-.KY2-+2=M@^U[8$<\98).@;9N-KDZZ/)U&&T\1!!S> M7EB\;,BK,Y=Y["[E?&<-IJ!WU%\%]"[:JT2[JKO&)[OJ+D5JB^::3,B3A\=1 MG4$1H362'4-;@MUF^%D-WH+?RZ?SU2HW3''3QDC,:<5'X]19C#N!@Z$B5!'L MPY)B9VS^L+RS_R#N/(=LK%@[3-#/``=C8_J MAT@'Z#9FV&+/>4^4D8V=IKS;G]Y_L%]]_^GZ%RLOCXWR4]IJUVM!9B#%#BE' MV/,7P93#KJ[C"R>Z21T,8,^DB#&2Y<1">LD21KM>]^)0NMX"=$,0`0JF%!5% M=)!1"@AS9K,E5/ZRQ?-H"3>OFPRFBLM)416W-P ML)K;6;HU\AMCGQ1[PUB?JL@B3.,QY8B/QP>*:1C`ADF/`*#U!^D&2_T[H/_` MPH-)6]D+7SQ:XF="(/81PL"BOX_PCZI#(0-6$E&4)`$PB*D>/S_KH?E$'6HI M;/H+-=VZ&D4VO@]KRZ.5M_8H$"X$2^F'J\MWEQ^O,X"UDRP9$PIV4UKW3["Z M&'C',_0<>">-95`NW2$X.)E.ACLK+*)4S>D^."CTU007<7>2+67#2;BW2?YH M,_4#"D2#5954W!;.R,MMY.P0GXP]3KIB>]D(1A!ISZ]U\AHM<FIV<,!IBK M/AEHZ7C'E#UZ7'6J83+)_(C!]S3WO*(&'.3.YLFT!&Y[,+,#G#5'] MXN0G[G3$'[A,YW*6WMP49^7JI@5F0MJO+_[UZ:WX8AXLGVO=^>G+\)-9%H*G`%PZ=;NYM8?FJ--XS\;_% M(11E2;RY_,^[B^?/G_-`U&'G7+KM%^7S3H.0=I;UB]9,=GC,OPSW13]P-DL* M-`,XOW]UP6GG!726):JJ47G+52Q-H#.A4]1R0)2L9E)99!)@+U"( MSYK%H<,[0)U`M`I9;/.B*"AG$I-EAS3&$FYDXZPU60.ANP][VX84V!RBV7K4 M(!KV^#*-%%,*>0OX-W.TA*[16U#"KA67\T`)^IA[R62])TD<9?=[JG0_J!/`G0E!J$E M\\]3J3D<+,$;BF<"\3'/IXVM=4B@&CBKKDJ"!YULX*X!U9C>7(:J=PQJ:54S M:X<;[#>#1$WHXD2SVBB_LCLNTBP=M^^X=G0/TR1]%T-I;K`.[:3-%5X@]L5P M,#J@O$DNR^\,FPCE&\0Z1G:%N`F#'5FZ,#A MZ!_,X,6 MK+<8?"8*KK3#TG6++/*!FT.8\UUT\<75[Y%K&"IDH3"R-\;0KI47&'QWG.'5 M;X(NKIC7P^8\-^'Q*B3F`&B.I!K7H\`-C6]K9%>2$4KP+*!AY"6Q7"WXBO)F M&<'\\.TRPE#;9"2'.M@D(R:M&ADYVBHC3*(F+5^3$8P,XGU3>$"]NF^:K$-6 MXD5Z/6X%^7T;,S^_13Z[7+UJ5D^YK$>I:`#CSR^#4/H==6..CKR[X]%1?L*F;J/@1)%OSN]JX9X) M?E6K4FWP?%NE!.,:0#WMTDL.D;T1.RM%HIB&A03,0V:)T9Y;6+G8] MNV%>N2>;DYVG(1]@K_E2*EY9K4`WMA$FYB7+S(@K_;A(G!![6?`]3@)*B@71_CU8SSRZ('/)*:VJ@.\G M8P$IT?L`CR9N9$)D8#M!=,J$C9=!A)F]E$')N>$.%`,C`#I*8[3-.^CNBEF0 M+(DLWM611(AH"G0#9GS\0'GTB)@GB%A$2U4 M!?=2S`,^DTE2&-4#)^4Z`K^(@0=#I!T,9!%Y-TN\$7)OX;$(D;K$$Q'_EF\H MS?$Z-U2)--S'-8#^-E/X*A8Q'KTO\0;./26MS[`Q\"V)S%(Z=P_]OCB/;L"/ M%[V9&ZW4W1%TT(KIK@NVABK#9AGD85>&%GM12@XF";7:/2O+S1]CV;;!VG"VD_1T`3Q MAWR.#X__U@2Q4:.ULWHHE5DSU8Z%L:5=,`IR' MJ!VEEG@1<2I1L&A'X+S]E^A=O#G_=/513#`8.1(MJ.XTY.'4 M)]4T9=64FC)S9HR<"=7FCNDR6_):-B>VH!%(Z7ED]U!V,]ZJ4FDL^5W'AH2H MEIZ]KH#I2.*0O@7##Z5;V*2)9"@=Q25B3!-G=F'-1MXT,*>!.T]BSQ/YLXU! MVSBT(XN:>%3'I)I%TJM?:1L76AZ`XX])]$1QUY?O(D6)!R9PEJYKR?Q4<`.FHO'QZ>4)X+/(:#7)Y:K3GXPXF:$CJ>Y6-C;8S%]VZ& M6<$CLU"+0:L9PY`A)[!P*I<*]^*?S`N/E_#CEHSYJ2@A&[C/GS_/OA]&?]3V MTE4]$*IG.[&U!E!/-3,@&];C:,A9-*-!]HF=3.'BA;-7/&M9H-WW7-'^XC4; M=^I&K)9HBIQS.$>&KXMAU1?*X]DP((JI;1X)S1?FEOA@GZI323_P>P[\\[`. MTCC[`)>XYIN096,6+X2!Q:U'\-FL_;_VKO2Y;2/+?V;^"B@IQZ0`VB1%BK)D M*:7$MO:X&.M+W M[KI!@NAS-=D+L@M9C=<5SC4-"_O3Y^-WAS:FK\X\G5$]8> M/"%`,O!5J%[#Z-M-L#*TD->=D+.B6*&Y-51JSC/:I/2-^R5"DQI3MKPMEYFD M3)G(9)79+9*8_';RCC#==JG`)`WD55;=OJ761`M'5[RBOF)_A^BY>+$,YT\^ M'H5>!!^3R\T1&+?R+]!SX@C=Z_3;X6H&]^UUZK<'+Z[(6P_>$"K7#J`;Q9UG MW>09,UV-_?3F[>N3U^)<\#O$7Y$AN:`$GV]04(`/)J+=84%3]C6)%K[F;(LJ M2P'X#=M!_8QCP-1IMUHMW/?<4[`5L2!"86#_DX9EJOXR/!_[.H8??I&E*+L% ME47]D;K5/EHTT$J-TR-Q:'H7\3%#"`(!4SV[%$VS[/)J`0`:@T7EJ"N>\,7% M&)I0_Z#%>$:_9F/R@E&/0,*R M^2B-TNMT>0LZC0O0UMQDRTN"4HDHI-FX(J"%!HS^4.Y\"&&P&8@SJCY!B4`= M=;9\KH!!6A%?2(&SROI9=%R)`PQJ:Q4MX@%"`3CF;A5K!$AH1T0\ZX"@%1"2 M#GW3?N34AA],R0GX7%CD'&@^(7$H[\`3*)L_8N":$"YKB]:.+Q#X`+2M60EQ MK*+!VC/&I^1?3T[?HHM!P\P`?T;%B6.G)GCP>.7PAJV">;2GS)W,O",4F9&, MLX9>[,1!["SJ/QO?>DXD@>J#EE:^"A$S*\X`KAXB] MK:3:`D+A.$XVK>/_U4*6KB2OEUZ$K]14[JLYC9Y&CUI[C$)-L*VJ[<1;=>Z! M+IVXLH8YY39HV!`)PG0AIY-]6<(C[^A,!-`F,%2CIL._<3-&1X>*"WV"V\\:_G;'FHHH#BR.SWPSIX*8Z?98?V1!?D; ME$TT/VB([@8]U;<-3$&]04A4ZPQ-.A9TFF!(W=/\#)JYE8]4-S-5O'PI$2N>@>46%@( MZN'Z7`^G/!'HXY5[Q^N6@[&-?/(FS(9L":'"&RC<+[J9R#W/R"UX.L_FJ:%P MRQ/$M+R/03@,\@.^0^IF-V:]4U,F;VU[*>I'[GK?!3\9`_R'Q'#)+8!O!!&* MX-6!%4(LP&VX=(H>V"GLQ:?;?D0<1!GQCI10)U)!\E$#*R+14L@%06M!P,_/ MT,V^V]E-.JR^T6S`6JR\:A4*X#Z!HLVV69PQ.`CE5DD\5=DC0,9[Y$"ONQ*F M,YG[D9*I5N@E!"*`T4,&V2<<><)47';94#=AS5V$M>59%C*K`-OR&A/8/::# M=30=KM:#?TW.SR?IRM+`2Y/A\US)#]:4>)#5JF_YS9`/\'78-+AHUKDS58A?S7AEMY5Q(L4*F!.1I@(`S3X+)](-EW*B!W:*_-MB8_G@2C61I*C? MZ7?1\]$RRA/H]KOO7[PZU=-&\\WN2PBD;[.4'--.S/A,V@:&42JL)\RWI')D M%O:0;@"XQM&[UR_8?O,U_@WHX@L(?ZEUG-HG;(ISH""?4GQ"&%VTS`\:D.BIEY"NKPX7(RO;5] M(1M8_RE?1QA"79TA+9X4>=(\%([&MPYY\5P2<<@#5EW;222\9JW[7;[YN!:L MBMT`(_=?,->X*Q9S-:J3X2%&.+H'38MX"^U!8V%).=_;9H'YWB/!"[0W&-QP M`3Y,\EZWC;ZJ<:_=T=XMR&DC:4D)W]J?A81&C)_BVT%B>B*!SUP(N")O!O,< M/]"\C(J/31C!!CY:>([*=)NS]$$"]L;%#7?V^27]AZSM3@\=EWK@4!1NV2 M5IO%$@#1#IL(V;Y'6\8^Q(DD9:*-Z5BVT6SL9!IKFK)!3E5U%Q4WLDFN]7<3 M#!-;\S.B_29)I%F>!LQ95+]DX4KQ-L71\E:E:"K,6=7;V]67"E(9'LIE?3"X M'M87'V]7`U)QZ@^G7V=4:3["55GER$D!6D:.C/:K$:0"KQ7"4[BN),1UC MS@`*4/B4CJY!;2KRY60^06\XS'B#YIIT?CU99G.`;&3/)KZ\/!!=MSI^[A?Q MYP?PO4_WSF4'_0V\&S(NT!ZZ_>WN]<1?RCZ(4)S/^T<5>4$5>$!Q0H;-A8WS MDZSZ)L4+M!LTRQ`/<+8([(_9)8*&UNEO7`TY03BD7*<3;.`6!=2M#*D.:4RS M"5)HBN<$>EZAM_9.'U#F^A`PQVG+U&R_P&P`V`CH\[/%[3=\PV%DP[SW`,R4 M*`3+K0E84C,3[5;&CMWB@^BS$J-$U+YP;(7S,E;<#&;BZI]KRPR47"/CV+L( M43UN)*3!M#SMK))Y$YS.Z1$L8>A&GQ)?FYQKC4I45"NCHQIY$8XR&JV>L\3Q M%*P%MHKC:5@K]S5$`NHAU$Y_=T<3T%W8E=29^Q(O7::/F-P^*3?,<`4H"I!= M",V.9RDK?<:8[>*)Y\5I^9\$5L?QR1IG@QL2+NNL=IU>-?8MUQ7V`ZL_6J"R M=@$:6>A!YZU[U.I^:F@=K9873.7Y[BE[_*S7U>'BV%.%"W8@:ZU$5SN##&7?9FW>8`!W#N/X\/W+=R9E MJ^^UP?!Q?)DE.[[$.JFVSZY(SB@RDFKQHE2R^'V$BC*9PN29L.)+[#78**P& M%H):\<0PN8WM[0'N3]QN`0KW7G[19Y>8R$F[SW@"M'E@V1"!5`CJC-L?\)IB_&(E2(VDAAS(_FT?G]M8W91G3 M8^XC>NC:^EF=CMMY",2D;B3KW&L(H8;7^]HGLCB7`N[C.2?>+,O&/,]KK%&9 M@+&#\6['6PZ13KP9-@LR=Y;#69X_%N0W+`@I=Y[U!.UM\U:8IN=K=_(1H<*K M99X5UW-N8-ZRZ=)!-"#3>N'"ZL9E:>T'>G%AJ!TQ2#W;I9RS7:WHT1'%8H=-&X)CIEA\S!,&0/V6L!.%]O&_A_P/AW#$L]BGYR4":T^L9*VVO MEBFEC"9E=#:&R_\$@YG5[,TOG@2\NA^2P(?T+@^NB9*%FRF:\1_M?20[9Z]+ M(;5)1["/:T[X`78=@`33I.[DX:[5M@,OK.(N?MB=:*[4G3Y3PA-HK3`UJ<+:\],SHZHEDE"2/E$Z_J\W1?&&HR]$RPR#!J"-:;_>@`SCK^G^_ M5I?$O_Q\^NK#2?1KI'Z]_^'X].1%0\-`2%B*@T/H-O3K843-G)XPLN>A/,<>8FL08SFAC&^`RGO,R3972M[A-7ZKGH_Z`QQ0UN MTL=+$X&`B<\HC1X`>6'4TW0(`%Z@+.;(S%J-@\Q4%VS!D=M-[IX*UQE2+ZC= MC$8A;Q*CUJ?6^3\`.ZOUD'QEI0#.$AG!JD6 MP``Q+(.C`QCM+V>"IRCO/;AU[W0Z(H8Q7`Y0E67UELI"9]F"X.N0\)#R\6[- M/!''\'+R*;I:&*RS2+4I/G6W"3R?$S0A;JPAFZV-X6F4J=-]M![*.LV-_A\))E`Y''SF;M9KK"24C M5_N;4K__$QCW8Z"R?ZZSQQ05_$:1!L&?$1TB5L4(8HF74.MFLOY(F7$A0_R9 M&M"8VY(6)$;XLZ>-HXCA8/#1.K/E7SO0V_46X7).8+<3!FY%Y-$I@+%_!P=6 M=.Q6/@HAPI]4B!2'B=LL2JXZ&?E9,!./&K;9S@1$4 MN*?17RI%:>6C_K@V&FD-R42KR\DBNDZ7D_-;X(<8F3Y!-@@H)VPU!\0^J/!X MQ:THPLLNA[>0=FT;P+1#T$/:L MXH\0Y$Z[4+'=+=N""KM6,1``M8XN,HN5UC0WK3DQ:=X4V#HPN+9NY:/3)#R# M`S2"$8Z'*#TU;#"><"!DIL%VF(I#093P'[17&$]N`(+N9`F!DG3U4!R$S(/$ MZ7#_.DS'5JC57#<[=9K4Q3-/B1IM]9VJE-`RR3CLH!>'JFIO([_R!556_U)= M$P2J.!@B^F@X!``:)5X]E&/9^,(8T`2$N@1(6(2@Q-Y9B=9QR7M)> M80M2&>E,-0"1@&E*:KEGV/5 MA@LU[&L(+)P?^P5-(N@(0#B)]J-@.;_I$,IR\7$(3281C1$MJA"&?(9XIJGZ M]QQHA_6JD*P-VQDSA]JPGG&M5O!A47`FR.W,(AL1)F%<']BT2_N!K;NE.@N9 M=Q@''F+SC#-+L'\3W2[?O/UPL@_B$RS64Z2BZ`Q4T*LD^G8XAKT%DO0-W&(^ M@AB,>YHNGP,;5<)VGF!#9N%ZJ7Z5'`%S"PU=7:#M>C*Z;*J?381%:1(D"CBS MP?U'-KGZW_5P.AG;G?WBW71DZQ]?\"(BOG`W#3L&;B.E%1$:FY1S.TGPQ0OG@N=*L75--OLB_F>, M>,SD1B2IOLGBCA5XF!AYQI'++#$1T@K"N2'K([SGQ'^]#H+N[K9!]#8AW%"_ M39<3C'J!M="';K-XE_+^P'HK<;T#N4+V)G'T;_P'^WS#,X,'O(EI.F>_0LHI MN=NQD&]=KDA)I,5=(-'YX+K*$LZ=3I*]""FZ[O7LL:<&5-.@"DTG(]!HL`-PY23L MLUF)2^Y"@V'O=G!"^NU=;5LWN*LS`4=Y2?<"/>IWLPP$,B M>JGZ6M!QF>^V/SD!X6^FI,C)@G!JU)3,$&O\#-1.:B)'V0(4>J0)BK+EY&(R M'TX%9ZMFN_\M`A8+CIA;A!6IB\T*UP.[@KBP-:NE8ZU<"16 M0T;M_QJ583!G2,N0F16!":-5>@%>YBN@M@6@`R"MD5#5S'AL-UZKVAY?'[^/EL=R<=D/*E!Y"IDRO M\`CRV@D<0/WR`X@;V'#\D*?0;@&$M)HSN(T$T:*GP[/[P4@#>0-<6F&\Q/@$&,V5S&T=0R73+D8%^&*_60;`!O)-*S8?9T$PG^1X+ M@L;)H1\WV+:J)*$@20>$ZFZRT[&@PJ`=CN@PH&"J$L=3B+OL&.[Y.I(YC]ME M6Z?N9YRR$"D9;LM^XWHM`S!8J47&`JHJ-L?<&?,QJ!A8]W`7#E9N6CXC9C6' M%9%[()PM=.V`*#8&7MW4_KW)Y;XC*",B)#J"[U%_J'<0AB#T#)\KS1.68:Z( MMFMY9>E$`C*SH^N=?8;4CK'[3H=ZW&Y,O;/1:(I@+@*-.$.R6ZNV_'8NOO#= M,[^D@3JAA2M;\!QTB(R\ZGI/46"S(.P=NHUH`_&\Y&&>M-\(*BPC+Z;-*-1, M[_*7VO$4U80G10MUL6US5Z2[*)L0G0`S@FS*M2MM%\XEV:%K3%( MA)C$?AEQU)#C"^[-17^#V4S0FD2I;_/HX(#'@*PFAWJ[=_Q#W5"^!!DAY'W, MX\V7TSO?5RBP,=N[LS;R+00]9276WB_(2;3\Q\[5-%17KJCN([FHYMJT+JR\ MSMQL^852ER47PI]3#2#,_H*3_Z122LS`_DI3LLWA6GO'`*(%NQ'B6BBH8?1*D4%XRA3E*CDV?F:G67^DEW!NR37#S=)2NS5-$T78&OSG0]SE!1O M(J2X&AW%OY6,X@I4Y)4)6_'=$KGK9T#)S4#WVNQ9X*A<1,'Q)@*.[TN_<07R MC>]!O?8(BED25^"HW#*>A-9*1S$?[-H.E/=HB*\;XVPP(T.GVPD'=]LIZ]?9 M>CA53:`2C:@N.CJR$CLQ7`RA4YY1(N@@W0%6; M-?A7U\,BL/Y3<6F/7A+(N+3K7"[,\!3*6QI,>/K%QLER M?AOO-AT-M2$!0Q"U[]SH,+0D.C1OU#'XYG2@=NG@QU?O/[P'QTFZ94$F[`&X M50TFRW^#=PLE.R%ZQQ=*RF;(EJ;)[A[5H0>>PRV7LN!-@U0IIE!944[X]>"6 MW;DKZ((_]6HN'[M,5VLE/I5\K^9P-#A+O]\B?61+9^;4$>PY7U]))#-.1YC/ M8:VZ]1+*N-F`740AO@Q*@LJ7:D'!_AK(1"G9=K?L7%F__AIM2/>IDVOY>9%` M_O2PB##$Q,DI:9S-<"N0^/XV^9NVG^U27%%+6S2_&J?G MP*I.7__73R<_G=2SY1A]29PT<:95:'H,TU2.36(I_X694BP74_]WQ MF\&+U\?U)69&^$7*NVO`6;L.J2?Z=<#?4ZL[IX7^@H9[JO!W2&F?G><_H5%P M(L@(7Q^?_@GRS[^H"^WK^2'7S(8N.E\:X!8$R6Y#`C)#=5#FY,_OCM^\@&E( M(FF0&PNU2_ES$2JRT^X:CT'AB,O']?E\QKW,T=_\L?I`K+-!)]Z=F3 M^;(>AZB.V],C5'<;'"/\^W<;HLC0SG/GH#,?T^D#S^[LZ,.3VF9>`;$R7R/B M#'**1+$)Z@&?D84!!?]7;UY]>'7\XT#]3=_`,#7N=:L!9[!+ MBQX0SZH.2MZ+\\5@-LRC7>(G_LZS4M4$52]72NQTR'>/_V4&!34AC"T[^Y>2\&&/K12E0^XZ\$>] MG!&F>8.\3"]QUS02`2M=4C@;-H2!=*J,]KGD&,Q\V\RY6,RNO?_Q^-O!^Y,/ M`T+X/?[NAY/ZXB*)/C5J=?5'0XM MI1A]-\1AK#@\H-WIM_$:#_^*@$N?_>'XPWLEZ7T'>'-UTGY2%)X.7$:ID7/H M^?AT^$FX?_:C1RLEFPYGZ>&C%6'H1C6Z!,*X$AK5(OJ&_U#2YP!*1_O1EU?S MRWEVPY=E_ZKL:-C@%"]C9,#$H6BZ@9U9Y^V4,SBKD7(V MUT<J5F@J&4TC>'XE!C$G&#,,5C;1P$3JU`H'CI:7>%! MBI(0G[2BRNJ[JBRF3]**4300J5;*TD#YKFOW M=M'W1/VC@[;)^\U!I6+)G",?23:?`X4*Q`!)ZS/KJ8\`'<(U)0U"-2S^H(`X MP"=6/MS:!B15;`AVUO@*H]?6YC*!E_`6QA5U6J(RD?]0,RO`H>I2$H*$5Y*L MZR!MS5I4:3*JSD6UJ=@X$V43T4$5>:>C_;#N\A3,X 5KH6X"]6NYDJTE>W\OY"F,/4VVP`` ` end