From owner-freebsd-current Fri Apr 25 16:14:55 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id QAA19547 for current-outgoing; Fri, 25 Apr 1997 16:14:55 -0700 (PDT) Received: from nlsystems.com (nlsys.demon.co.uk [158.152.125.33]) by hub.freebsd.org (8.8.5/8.8.5) with ESMTP id QAA19533 for ; Fri, 25 Apr 1997 16:14:34 -0700 (PDT) Received: from herring.nlsystems.com (herring.nlsystems.com [10.0.0.2]) by nlsystems.com (8.8.5/8.8.5) with SMTP id AAA25490 for ; Sat, 26 Apr 1997 00:14:41 +0100 (BST) Date: Sat, 26 Apr 1997 00:14:41 +0100 (BST) From: Doug Rabson To: current@freebsd.org Subject: Kernel linker for review (second try) Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-current@freebsd.org X-Loop: FreeBSD.org Precedence: bulk That will teach me to post something in a hurry. I managed to leave out the most interesting part - the linker itself. This is the first cut of my kernel linker. I would appreciate feedback, flames, anything except indifference. To install, unpack the tarball, and do something like this: (cd /usr/src/gnu/usr.bin/ld; patch -p) < ld.diffs (cd /usr/src/sys/i386/conf; patch -p) < i386_conf.diffs (cd /usr/src/sys/conf; patch -p) < conf.diffs (cd /usr/src/sys/kern; patch -p) < kern.diffs (cd /usr/src/lib/libc; patch -p) < libc.diffs (cd /usr/src/gnu/usr.bin/ld; make clean all install) (cd /usr/src/lib/libc; make clean all install) cp bsd.mod.mk /usr/share/mk cp -r sys /usr/src/sys (cd sbin; make all install) (cd testmod; make all install) # ignore warnings from ld (cd testmod2; make all install) # ditto I am part way through reworking i386/isa to make all drivers trivially loadable but that is not ready for the light of day. I use the -Bdynamic format for the kernel to get the global symbol table. This adds about 80-90k of bloat for my local kernel configuration. I use -Bshareable format with non-pic objects for loadable files. This gives me hashed symbol tables and dependancies for free compared with raw .o files. The linker is to support other file formats, including but not limited to ELF. begin 644 kld.tar.gz M'XL(`!0Z83,``^P\;7/:2)/[5?R*6>+:A1@#0B!>`"LIL\NUN4 MC`;06D@N2=CQ97V__;IG1AI)6$G8.SMU]4256-+TRTR_3'>/T.C*-BL_//)! MZM5FHT%^($1M-JIXAB,\BQNB:UJUIC6JM3K<-W6U\0-I//;`\-CZ@>$1\H.Y M]#Z+=[NFU'Z*`3WM<07VM\VR:2V7_F/UH5:K>KV>:7^]T:C'[`^^H*J:5O^! M5!]K0/'CW]S^`\>D'SO$O'.,C;4HKW/'__LC-SF=DJ5ETPZIK-T-K3B+&[_B M>XO*RME6MKY7OK0<\+I*U&OI)N?1P+/HC>6LB`K#P\,=K'JEIA&UWFDT.UHU]^H5 M.:HUVR6='.*I15Z]RA$%#W!-=TD,;[&V;JA/GE=RY)E)EY9#R?1-=]+OG@S[ M2DM1*L_)R=:R36(0?VUXU"3NY5]T$20I!L/AA^[D],W@U[ZBZHSJPG,7U/=) MV3?(PMU<&PX([9>(!;TZ=TA^&)*?C2>G_=Z'4?=\<*IH-49^YGH+&DI'W&UP MO0T(O:$.,G#E'NE"`8DT-DWII"L*;&:%P-(@UBR?U,>PP MT[WJ2?^J:WQ\Z%MX$3F,JD+HZE1;G8:N,"KTJP0&I*UJNU.K=K06^[-$\L*:^6(Q17&81;%$+XB1 M'28[`C8+PZ?DY]G/G;!;3DN.CTFUR`;;T*HXV(96B_F_;3E7\XUK4O+3,?EO MX7MLZ`JU@2-R$J.!$R@V/GS!/,7H[V,2\3G\')^D4(+981:SO^.SXPLC].\V MEZ[]V2%./YR?C(=?Y,3&**)#Q`VUJ7-MZEH]TB8W"#*,&]&_#<@A48'72=+N M(?IA%OH#1O]B%U+RXE<-*2D?%ZVFU]12$R*E7FO"F0O'PH*B+&UCY1/0`GK= M$>/JVN;&6$%P^NDG4N#PGTC__;QW<=Z=OF7C_@HT;/ZQ$'/'1#3DTMP:GO.Q MD#\U',<-B$\A_@`?"'0$F!/.G0[;`+(\APE#!!+G]*K0E0;E`CP*Y%I MO_\6)U&1_!@&4^IY!8P?MYX5T'G87X+$;>[2ZPJ@P]L0P(/0TB%KMJ&I'K7&/:A+\\:6/.5S28>Z!T MNMI0)Y@;IDD=L^"5C*(BH+$FH(WJYDE_.#Z=#T8#,'S_]7E_-)NSIH)75`KP MY^@7;VY39P5S_)C4("'E(-Z0WRP3&K#X)Z]M]]*PR1B6QY!49A@'"`S!NTM4 M]Z_'LSGPGGR83P?_ZBOU'$'O!2"Q76>EK-Q@#L[RK==Z#QU7PNIS"%S+1WH, M\(7UOUK3:JGU?ZVN-K^O_Y_B$.'FW+BB;(V'OO"X(<>_\WF<08^K)#K.C#KM M>B+JM.NI`6/X2;3(*%,C5;W3:'1JJL+X8!S*0&W@(@]BDJ;S6JC!2J&&2%!E MB"_6,@?+@^FL?SX?]N9O^MW>,7E%%VL7YKEAXJ`/7KT@WH8<+>$*:"`[''PZ M&8R@XCCOSNXQGQF0)W)'$1=@; M]*=3`+O`D1R]!X"@'9_\)[3?0$E;AL7^0PSCRX1_QC8F[:P[&(;20I;S/,-9 MH<1\7>&_(']`AH,;UX,\28XVC./Y>-+K3^;]]Z?#=[W^?8A<]EU(L*@K1F3] M%V4WBS44:`2?%8/ROO7,^/RB'\5IA=!C:XRA\>=OH M5+6PQH1U&#Z4:Y;:+*1?4<^I6(X5S#>&Y<"R&'S!,0W/C(-@W%#P90-OZ"(. M/&1`_(.KS2TDF8>!N!ZEWBZ0K5,Q1^SVR.B,Q2(+M+#=Q546#.=X#!3:'^<_ M(GR[^:_J*E@R-?^;JOI]_C_%$2XWXY[^^'%@=W9E/Z)7DX_HU=18,2XDYVD8 M'S25_XGTBU1`K^W7QA MV/8\(,^+C@M\R'U)8;_&U!HU6$)>N[;-GX?NXEL^+"&W*\N,T6A`(]L%H98B MM*'DNG5B5'6@$HWX(]%7C*T!%+SM*PGT?0F:^Q*T]B5H[TF@5_U='-?2S?WM71S M7TLW][5TU=&M?2[?VM71K7TNW]K5T:U]+M_:U=&M?2[?VM71K7TNW M]K5T>U]+M_>U='M?2[?WM71[7TNW][5T>U]+M_>U='M?2[=W+*VF"&!=Y-"/ M042B5='68:L@JNT2X?.Q&)'*B5AK=D_+5%3;BTG#A9@Y.QUFRBE&`Z)_J<#@&R1_]=_-H*2$[S'Z3+/G#E:;'1XF+"'F;L8+0^(]8 M.W@/+!^:.EL^P"E!V`G#0E.!1.$ MZA*J[T*;$MKP>J5R-HNBI'J"JAZBY4JBU=;R-4DU!M%UJ7 MT/HN5.HJ738C5.HJ72,C5.HJ71`C5.HJ7?TB5.HJ7>H"M"EUE:YK$2IUE2YB M$2IUE:Y8$2IUE2Y/$2IUE:Y%$2IUE2X\$2IUE:XR$2IUE2XI$2IUE:X?$2IU ME2X6`=J2NDI7A@B5NDJ7@0B5NDK7?`B5NDH7>`B5NDI7N1%32%Q=@J-?%0_2*0'RHJ\J!!/E`6]+UPBU3J.J M,%Z)&B&!'!4*C4Z-OVZGM;621@[Q)`H%*`V4=Z/!^<50&8W?#'I]A94)A?$U M=4ZFO2)B:,ITUE/@#JHURPEDF5"X<2VS^(+<(U8]A<4+A<)B;7CD^;41K$NL M>6N9_&(E2`^A<$@-@4T.!.A9@&86H)4%:&<`]&H60,T"I#46`;0L0#T+D"6Y MGB6YGB6YGB6YGB5Y,TOR9I;DS2S)FUF2-[,D;V9)WLR2O)DE>3-+\F:6Y*TL MR5M9DK>R)&]E2=[*DKR5)7DK2_)6EN2M+,E;69*WLR1O9TG>SI*\G25Y.TOR M=I;D[2S)VUF2M[,D;V=(_B*,D82_L^N3I>N1,X]2B%BY0\BYJ?`E\F]!7(?! M"C+O+B)F*XE8"C>K\-]C\=7-X#G!OR&+VBZ+Y<.=I4.O2-6%A>OX`>&Q%;-2 MB)\.PE'69JP14_)N[.)B\L[DK>_B1X-.3'+)"C[V*Z3SR MFLE-+TV2&&WR_4]'/IF#=5E-ZU2;':AI&9?DZY_.SC.\ M1J?!G^%I;'\"_.6O"BF^M3+8QH2R2_#:#L!Q%E=XYRZN:!!=7!N6AS<0.<5I MZ<,%>]'QUKCF#.XV^)X/NW(6[.3C5BN!MX5E`P*W8!R;!I1="H*MLW&W#K+> M!M:&^NS",Q:4T1XI-X8)6L.[6\,*ZGC&S0;A^08NYG.1>Z/KP,972/\Y+?1\ MJ(@,#7%9X5T0^N/7<%CJ`TRC6=%$ZH=P41Z*Y(=`B0E;::>Z8< M#,P.0=0K[C.E&WR&HI)HK[2&;]S7ZQW(ZG]=K4G_XS4YR#W+/2.S-0VWGO/M MX?\18_,+61N.:;/=Z6`2V\8,,(0`P;;0VURSBIXOPS,DK2"K<]VXC'> MCK&A)LF7RXD$D\=M@A;N6[?\P"\!'\,GMQ26(0:GW1V?>_D7=E'B=R:]YG

&'?D4B!N#`=!*"I`,-'<&)[%=P["'6L]'?:[(]QH/U6Z)M\H:-C\I542 MX'OU&_>&LJ40#F9A4\/!GOB5:4&SX4&X0PT`M]Y@.IL,3M[-!N,1(2.0&#S[NR4^YH)$=,1*4P0Y- M>,7Y\T48"GN)'TTH1RR`OW*"6]7QV113P<.D/OB@4O`IL+[:%.K%(HRP`I=R M,./?1LKP[3EQ;QW\^,#O;`<&--Y+E->3"X:R\MSM=8@"C3$4^-=G.+AI-$3! M1H$S'(S>3A4%Y;5!XR@O8F.:]F%UNW:WMHF^L=R"=Z%,J!6_A$H!ZN3!7@8V MCT`IS.\6[@:]GZ6]$JC"MMU;<.;+.ZY1AKS#@W^B@>F?^Q/N5H5%HWG$"0!V M!DJE'XW-M4U+:`$$[/!!75;XOR>6NP9*MGZM(/B*XK"%'"<)(@C=#O%1]W M+<(=@O\,:=^-TM3B,7DV/4?@'$;C\R[,"+2DZ8(2<3OYVH`Y:0W5C^:AS,4]XZ3.' MT44S>(I5=G0,A2>*6-(%!/!B+("'XPK#-S^B`(M3(36:&>H1_AG2ZC(KCNCD$`&#WF<\_8L)EL@20Q)X8H M97'UA\K8X11-`2"E-J06OMU5FDR*%C/C#IM+"O.>AL/"H1A+"!!A`R91P_9= M=!KT=9P<"P.N=ACQ%1@H>`/)W3(":M\)YI*K2.-"!6Q$.,7`)L*QQ%Q2<&9V M%(1AF8'!6P`"B%0=;#_U*/0!M@Q8[,+0'*;F^`039#R,,,)W/.1$+&4=T>&I MO"0S.@X<8`*+UQ<=,0=%(Z\L.F@\(1APS8E`^?)8243"7!0$XQ`^N%P.=R3R MXJ>03.OQ*JF8*X=U4#X;*Y\36R)SY>F[L[/!^_ZT0\HN^#&$K?("_N'_CQ]) M^924[TC9)F6?E*#R6WFX1/,+/QZ-D7^Q6@D MT+%H@RO`_W4TOI@>"]H;Q[WV80#E'&:#PV,%&DPZMY;E=4Y6G(EV$ETNI!EC M`Y"9)C$&V1Q101OK%/=[PD7G_'EY?9_#7:30%C:.H+$SZ4PK!Y6R6UD):7^, M>H,46LSAWV,E3'V^&W5Q\`E!]QW@QGN[ARN^3Q5;NKW>/4$UBVVT^+DKEG*Q MA6N=[7/]5)YU)Z_[LSAUF!;3(V)U0&P>)"K\!.8<$"^ZK_O3(OG[;T(WU\%= MK"T'5ZH4JBZ536WDP@-40<[L8DY>=\BT>2GW<'HP[!4,`0(8+@ M-W"(4!41!!&#A!^$2*$:A.QB+-%`XHV)$%[,)6ZC4<4)XA&^F(O?22'`3/:. MJ*"KP6@Z@RF&`X3Y]T%83Y3V<+<2=UBP\YW&8<%^C_,-,T7$1-A?BBQJ@WMA M>[A*.#ZO1-DW8[@M16FJO,+Z`3P*;^]QX[("V1PK.0K%T,'!,Q@6);47$(H0 MIMC'L:X.5$:@^&MK&?#+X`OP@T_]TS=C&/!!0([^^`7.-@>(W>4'`L]&FX=5 M-J+;$0R"(GU!`F]+(XU'VDXDX%#U#\V`A.5(S&+Q;%3&+_!DHX;=)^R=<"$9 M36)+6LA?D+T27B5+KV(N5H9)YUF8L2Q!7I"#PGGW;;\8%01"Y:A\7AK>5_AE MV.D]_WA1[WCA7D,]^6!PA*@/RB[F>*$0QPC'B1`!%R'P/J'E9.!37B6'#\K49N_ M)KMMWB*G/`C(0,Z5*_%.8MDTE1#$LZ%4JWA&E&IENVRQ^5L_\DL<^/P75?N8 M?>SW_5]\_ENM:[7OW_]]BB.T_V/ZP/[V5VN-ZG?[/\41M[_X7L'Z_[J/+_S^ MWU#K]93]M6KU^_>?GN2H/#_*D>?DU+V^XX^:"HLB^RF']-SMBDR,2]]U$*,+ MQ1/#\*-/():A'4$3&G\\Q1YH;'VVGA=/2;`%*CG#N\/G)QN_1&XM_,":Q\[X M/23@@N]9+:W%_[3W[&]I)-G^#']%17<,&'Q'DXUC[A+%A"\*N:*9Y&;RL2TT MVBNOH<$DL^/_?L^CGMT-J$$FN]/][6:DN^K4J5.O\RX/811((=#W!YU@./2; MJ,6Z#C!A,>D+R,9#2G$4\W7&Q1"A8+V./WR!?V^L1E`++=5H`U-!=F#TH3M# MCW6+PCM'\TM#$0.!P-/M#8,&:LQ1MZ=TGZ99ZIZ+$S3::'M!QQ\@C<1F'!', M+&DHHA"!?C9',I_D['%1&E2&U.PU1IA-SU.#M@;CP0J4CH>,O-<.#>%IP!"P M8UV2$^#T3;DF:M7#TU^`F;ZHDH5@[$?K7" MO';UI";^^<]B#%P1`$<"+BZ/R7KTJ`(69#15#4#/026-O2_BEVQ_RU#S0#Y(X*HO:NM%_&/TH? M2M"3XLG'@@1;*_WO&12"CPCMH'B,:@:1FT(5&!!@ITN8`!'I`))([;1\>G9: M$J^KU8,:@@+PM=+)^_)^J;8KCJHU(MA9K52@I*+4/$`!:L%G^/O56:U,="M7 M3DLG)V?O4'C*(Z`WU5^`,(!L$6H?$(VK%>HST*AZ\A'A(CUH"`KBES'^" M)"6J%9$6*(_MGR(TJR2T"O0\M3HK*J771^77I\63<@T+ ME+GE7XH?J8]GU'T<*\"-_[2F;H%&5)0/1?'@?1F1EX5A'M3*E9EBXR\QN)8FO6(V:Q* M'>EW1QW,30L/%*ZSR%30OVMOSDY1'Y*](0OE-2QEK(F))K..P^NNANB\%LO2 M'Q8KJ!+HQYE;5O#0(E\?YD6]_BZ74Z6Q>B&+6;,!$;=E\06V9_T-@Q'$,DB# MF&,U*UUI$<3`OR`#(<.UW5O1<$;UA8N"0(^C^$>[U[L:]<^_ MD1$NL85)M0`PU3&>OU"8VM/(M_P!)?V-425>M.VC03NQH$4/::"<5@RDZF!, MJ6AOH"A'&2665A,.9]%!Z=79ZVQ69O67K=6;_OGH8E=/6%VP?E(ZK&4VLNZ7 M=XKU4.9`(1*B.E'KD[FY(ES^;QTV?\8\M_\F4='.6_]#]>S,F M_VVF^=_F\J3R7RK_I?)?*O^E\M]#R7]H,"Z=Q.0_\SHJ_VEF59;)'-=/81(@ M<_7APP=J8(V6796O&<-MP\>$ENST0FY*[&AVZ87BW/>[Y(08<2"EG6DM*AKR M)XH`7+9_H)"HBF(B\/^EY.>Y@ETF[U3`OUOZ*W"C#9V!!\89Q+`\`XU M2A$N]RKJS>-0O:1[6'#YL=^:*AHJ(.BJUNJ->`_L"GD/5JE2A7E?X,WM2P!' MT^_^H!<%HV!P?7+A:_0Z'=@;^7M!@:.M<-EK-@=X>9N4#!`B^81+*,N4U%Q^ MI$;PMW1W5'#[7@,OE/EM%`S(/[>J$%10L+YN"6M>>^V1!L-XKE"VD"_4#R36@/?IVSQP][`N_!=I%%H1J2ES=C%-L\2DIQ&3#K9+SF) M:CPCZ0*.G%.`I^2NELR6,R2;R1?`WF$Z!_APC"2%!0RPGH2S(TR)#J?L9EIK?U+S3&FR%?4DS MCO6F(`5[@LCBSK`O9TPU18:D2C5G.XJ,/O_<%18,9TV'[E!(("SVYI6'M!K# M$0>G,.ME=Q.G+XQ"?Q!<,[X!>M@;W@HO0*)MFRB7N!TN"_B')Z"SMVM(O+<# M(Q>&FLHY#[TM"\)OM^"?86,U/V%+YZK+]J]IFSH5RCN_QFWK_-'>UX79V)T= M`K=0[`QN8%W_BSOH2-YEF&>C]I"V9P6#@V&P`]HC>>`W>A==W,QUR`_VI<`[ ML?9"5Q"X872MER('RQO?$!6[10/-G"JZJ6;!?#9^[KS""@J,O>E#!_6Q@I5P M)R3\%#K<9MC#>`%BO6';`#:%?@Z!/JX?]\Q=HKB_D9[#FS%Q=CBPZ%3OCLE0T^4:PG7>'[6]B,.K2 M_.5PCE7I\0_]0"&21%`L?\'71CEL"RU.A](9^8MATM&4HUTVV>DK(-,1PX M-IC>SL3#X2WP$*+>]QK9#S%AH&AWS&L\G!UE.*`U[&,TB846'+-!FP):PE&C MX?O-,(:;7A5W7!02BT-,K.5%1D4>T.(BH'MXAZ&&ET!LTT)7)MTX_U;'LHD( MW:ME.-MOVW#@9O%0C>W#TD78@UY''T`6J[%&VOU_0GM=?QKOQ) M%'=G!$^)B2>F03/"B2IV$R2*CM_!,,;HZ!,WW#"G(&PBCP^EK#9(@02M"Q!"+X; M9"5_YPIJMJ20B&],6A#2Q(=]1Y3(II1D=TE**G,[$XN-1\S`(B>&4'86#/,X M*E6FV%EL!O>6_&V$O46EW;#,HZ8U+\:?N,7)VF`*7W MFP;%M0#%8+@FH%LD!+*;EPG_$J#?RE#T%N]12ZU$?]JC[#^4,?&!VKB'_^?6 MLXW4_W,>CS/^SJU5LVMCFOWOV?I.9/R?;NRD][_-Y4GM?ZG]+[7_I?:_U/XW M4_N?+0?TO8'703G`?2T52+'W\/]A0G&9:BWV_K>1/_+CK]O!.06-+L1O;1-F>P0IDR9MBTS40/MJN"5TMGU7XTK M(66M#*L?L1$0AW#3ZUWXG!F@K;,()1EA5/V6`6#7T,*XEA+C1E.RQ7!52WNG MU(.\;2O_6]M(HC2ILHV0(1]L3&KJYDN^"&EZ-A$].>0V&I7\J[)97O M+%X,F6,%%*%@SZYRI7R:6Y+MYUF3X`T-\$AC!;PB2;EGUV'OP&0/E7W4IV>S M(/02.*X#YUPZIA]\83;L66H1$&8`<@S>=@\1\PVE1H._-U4W;`]@ MK15A6X.TZ>)8(DY`2N[S8?FD9G>:J@J[1*7T00XO+H!\/IN)C+KMI]4&#YK9VG8>VBGS"7Y_&)-"=+65*IM#KI>_Z58/JV^E9,%O9]5$WLP ME-F,<4V`@5=(4HF5E[@7\)2VW](TY_G^Y(G[B58WX,XN[GG=%G1/(@#8-_K? MKX49!4Y-V0'D0P)!H8\ M;.69!%@)15=>QAIHR18R"DG:=_=$HB4#L;@1Y$T>+;\ND90CLTX3UEYI>F-V M'>JS)D0#?=+10QXVLX5H)97P`&V@K7#OI^:OW06:ZCS>>44C_08'.88!!10D MMB\=[.7L^9EG6=_K!@T+%ZH.F'C-Z#&SH-H?VP]5]VZ]6%G934"/%H$9=6!, MJ^]+UN2Q9TY&5]5SQJM.V$=&])BD[0"9)6$0XA#IV)'$`743`(E44XDI`JQF50_2A`U&6^4N:>F M[HE1IB2$3E#E<0,L>6-9].V(#/QC`:]IEG&',:.V7>LU.^8YX\[-QB=K#%/K M9'U$E,]$@.K/X[@5@W-B">X%`F&\3?'UW;%3M#5E\%JS&+UY$:HUG5*M^Y.* M;J`83RG\?"=".5RM:9JD!)M!Q!?*[FA+<8J?UF:N*80&K.BP(6/Y+2A,5K8] M88T/7ZX1]:G+$*O=Q/[#BW;9Z:D`UF+US\7%")NK\<"6M)LBX;$ M/R118#Z-(6`R)+2M2CAD9AT');+PD3V%]R_L]20%N.^Y;R5N_Y'JF[G9?S#7 M1S3^Z^G&=IK_8RY/:O])[3^I_2>U_Z3VG]3^>VE)O7LRKX#7:)_I+L@_%)IP$EW2-LPC+NLE1`OH=S>=R-E MK$@Y]M*.&3>X2)*)0[G8)ALN$$OZLH1_P0;P_K@@%JZPS@+9)];SK@X7+1P2 MRX0OA)QKP.#FQQDP:B58S`?:U]6R8:#X=W?O\(F>X:K/3FR+:#+#' MX3XVE4GO3=9/-0Q`O(:K/W?$Z(2IP'Z:WT(:^(@'=DL;39RNASY*NUPE=.1A M^7(9?5_[_3&?OH[[)$+OVC<"]P"$F$^;G]F`")/D]..[4OWMZ9L3Z#!=>]$; M#%6T1H+B'M7Y+25'2V31X!'O"PS1!.?F%JP!61]++YAEP.I6"5J/6\HN+*RW98#Z"#X2Z&P\)$H4I/GI#.@(!\92`$"U4`8IDF%+V7Y7AP MZD5(A*^G"'Y#O575H:F1NE'(G,L=.!AZH7E@)RW=Z7/(\A MC(>^>"5QI@V]\"I"*#]G!5/Y)9S&AXNK7S>:F"$(6MY.57.![YW!;N/ MVYK<,$UK\DZAX244;ZI6<"L#HE[EEA`#..HK9T<@2>`63--8&@6QB`(@45U0 MS0.KAOMC'!Z(49= M&7'YN]^D.4[^(PMY:\W<.'S$_2*YQG,-UFM]?"8JF+EDRUB;XZ%<5OB6&APX MBW$BJ7A1/MLR[9:Q^R8K4*DA',Q=8YLCWL:QTF@F#KLBK._$^6J60MOE5'+NF%HV;&#E!AOY\X//1'LD0?6NG,Q4#SVT=LZWQU`##;P M+[BL\O9@M:*#)?EJI(BPOO)0M8RMRK8&XT0Q(Z/1S3L++AF]D])1J8@BO8.? M33HD/ZM(PE M.+%$@NR,'XWI7$.,"X>MR<(A.T71*H#)WC*BH=[^;CNGXU/:.DRG!,8FV%X+ M1$A'#'3R<"P#/S'1/AM\WT0FAH=\?Y1ST0:=2_+""=EK M8!X%K=B6*3U6L<8:22>)?B^.BY'K_4(:)'44$DNMK<:VKX@^#@D[.A?%Z^": M&6@NCW'6P'0UZ);(:U]RZ?*Z;%7)8O8416,N,L3N6:LM8XV2V$RZ9GW%=N.3$-B'2^;MMU%C6'!\!S3`1@"3'>',6&A&`P."J M""2YN!06^A1\5@<1.HR9#V9S4^N8FFJ@Y%)+F"9J1Z#IGQ'3RA%%:W&BJ`+0 MV7XDPXUQDB-4\;N%8FQ$B;VS^AOMIMO!\5Q5=+>X5\Q[TD&WC%Z=-%#:(U9N MO/(,REF#2;N^6$Z*&!\NYW5.B8D'DFZ`M_8Q"CXS^RG:'S[>X$E'&PSNC>9^$`#H3 M@!Q5E6A`I]:BLX'=M2FHWGZAIC2&V">>"X;^4D"Q$624I)BB\Y8M4<(RY6V- M`%2$OWP5V8+Q:F3&@T9P$`XYO0+F2<$L$M)`',UKINOWNFV\Q!3F*&;GXF[G3J.-)]GY#YP=D`%4'7E1QO41`/ ME2AFF1N#G-TI=5#(H]C1M,J21()[L9)(%&64!-?H1]UY%4'Q MBQEN1;83-8-4]XBV,"LQ%TD[N.BJ+KGSR1F))[:GD5C!K7-)K%COH"?4B41N MW\VK)K?6)_;\U>^B`19J(T[$?)T[`POY]1=$0? M*ZNT@]=.C\(9#O#D5-R>9OL:*A%1[O,E(BZ!_[6K5LU;]O3JK?4Q2$V9L?%`^ MR41F@2/`MA0S)5V3;9.YG)EAIT)`T94_:NOQ?NHP&TW<7N])8_3S%?B M)$=]^7EFJS`2:B%7FUE+QOG>477FH[$5"65DK(7A&1V/X8PY.):W72>$X*)Y"?9S&>ZE52!$%"JJRQ*MO[CL`C.011VB1K6/Y[ M8@X"#WO&C@@7P]WLO?53W?*O9@'*@EI1K_[L@#WF!O%W@P M$8@E8!,D)U$X@%-L^AU`8DT-CW^HL2?]P'?$19@SG-/433S'N<@/Q7HY&[YM M1XCMM$Y(X_AJ,]QX_^S(A?29Q>/$_^!LK7NPFF89_3,M_F=S^]E6-/_?UL[3 MG33^9QY/&O^3QO^D\3]I_$\:_Y/&_XR)_TF.\T%!)HB_;C6Z25A>=V&[O4_T MCWE/%T"XK[!8->I%:Z;ABU5W[>`.&W226XZ%R+A[+@P`\VY/&($FTNV"O/:^)0N:)>":T"QY\XIR M(U]*F$QV?J]FGZ17BZS"P]"=C#?6E5"7'1>"Q?;[EN6E@:U)/W:WVR_$OM=] M#"MLX*,AGGMC]%PP\2GE%:!EFQE19XIO%*GW@$B[V81[6L2>X_-LO#^Y M#"M_O)9#+[525(^2H,Z\A\J&C.DVR0>!>GV(H&(1)YQ ML8APQI_(4$1#QD@TXH2=_[:!!'(VT\%(UP]UFXYZF,Y`AN:\E\HH5(NQ,]NN ME1YU@@H:6@_<%@*0&!K"@_\XKT=!3WCPC_,2`\1@J_&:*L=?=,4F:[OH-;"L MY-G:;1:`4ZR^/7M7`+[VZ*CZ2T&%3.^&/9N2J-WOH$\&=A"?!V%7Y4J@>EH^K^6_1J[Z^\[-='L$A1 MZTI#96A@]R_!JEVIORH>`&>9XQ;SXH\_Q"-X^[IT>GADO5X"Z4#MW@DZ4D.F M7WQQB2%J7E<2BBWC84_@OL4AA.RR1%=)`4T#O(K-)=W=]V_'[NCNLQ(.]V35 MJP_17_:)T+]I_5B_S\.0$VV.A3]N9A!DE(H)9.@WC)Q,-[%A&8!^_VEB=4Q- MC(G=>K@)A%_8I<4F]I-IZ-A$CIN&BF$X@NFAYID,(94N]R(O(DV/NJO->M@$ZNW9`YZ@ZC><@-G[QO,!JJ=MP]SSG=9F=;693QRXLQS*Y_'H5O/9F`_TP4C3+,JQ.[E8QPZDBU] M;GR9,0J]K[ZC#)#[;W-F]:Z;Q02+O-'NA;[U59Y']A+LY\<9H"/,]]30"?>@ M%7O2;9,#0:RYKZU`UCA)QO#N\T-S32H=1K%Z=HJ>]-5]*LIW9_9:T"HEY,9% MBCC8RS2'G_.VD)2]A8PTKM0E[(-K`/[*,\42V?UON M,1;7%#7363N=O*,R)"6RZM00XYZ5LL;9Y9)X6]N=;)*'?*N04%W-,.BMH"VN M4BH=V)M@?'42>6D<.[.PD'301&0.&.+R3-AETW>\(-*W0/2' M_:+7K*OK"96L\6Y`V(#\,KPD"`%=78=G!_I^(1MR'O;:HZ%O78_(4H8RPW]: M_XSH/EY[K+W->%25Q^V=G9]8HI(33]=^DNP6L()N`1F+?'WQ,E)S:4DL]Q6. M&%9-OFAJ^<;*4S?0%;7;D($#4J1PW`7ZT+)3"T#JZYT_1;^BK__C7]2(<%.65Q!]5INO&Z2+][,;S$LP\VC#K_LE@!^=7)$[^<&]5EO"-",YYR MD2H;;I7P$O.J3*FSZ=9!IX=HC6S&=O6D-59D/E&^>` MGJ*3O-WA/'8H_/;D`O[4$@/G<_=W-&DN2[7HN1=ZEC]]*1<>5V+UB<`%!@C^?9=@8ER?/Y+1AN9I8G\`*X! MFIT)P5_NJ/-9GFWP@LII*GSJ M8E#([W5X\_6SBI#%1J"D8D'JS((D+4Z\2$&J\.DP_2FD!0FOZ("UUBNKENG` MDFO=_D1V`SEWQ#E7J==*I^^?5.JE#Z=Y.X;KD6EU M;*]DCWZRHK$BW7*R6RNN`?^CPGATSY[LB>AY"<-*)Z)-;AJN?W7Z9`@9BUB# M%=\]Z"3Y(_QKU.E+VXF!'\I@`I.N26$8::X/@ET[[P[$RIZM`+`BL9R:Z)1Q M:R2Q\*W0LP@8.PPES0H6H+S.J:\6P=A:^HH:[EMNW(C`M+)E37EMABUC)QW? MQ!3QG*E?>N%EG8ZUG'NFQ(-&3:9"V)^Q'E23&[A5LB_W'5E`T'J4^6!0=^FQ MU0SM%O"!MJ=].8%#*\,4,N1[+"$"U[XK^A0&;H#FU)\__XR1<4^PD--C76!) MK']]UN(G+W["_?+5V?[;TFDM(JG=Q(T+=XZKS5KF8:%E?6DFIO_>2JF@N*+S M4>/*5VG^XG17Q]8@I'% ME0H;.NW>%&MO?M@C%P8+R!I(6&TMYSZG2SH/%2$^R9J?#0M\"0?&X-*< MD$C-%4MZ<%Q_I0Q\R:;=KIVIC4F`ET[9IV\4^F<57&H1XXFPSEYCIZSTAOX+ M\<7GY4T)YV"W2ES?MLZ@TH^V!Q3-3:@MG97.O3F:\[`(P0D[#'="!.0Y M97E,1\EJZGYV5)$,V++FFL[Q>:I03Z)V-"P#^XPJDW;@8<(KE?GARR6P]=?^ M@'TB@S`>FF$S!8A*O5PY.)$\`0TDR__.F.2>/.EB$C"`>F3'7!,E<1]P:Z;C\,T>102#N?;^O^2__=Y\&!WO^-SM_O?GT*Q]>WM M]?3^]WD\>OQEC-Q#S(.[C__FYL9..O[S>&+C?PS'+O*.,VQCZQ.+-HC\59!GLLSBS68W%&H1Z+ MLXST6)QAH,?BK.(\%MTP#YCY'.2QF,T"?5[O9>2AF:V=[-?TK]5&]KA8>6Y^ M/\]F5W48PGG87(4E=K':N7KY`\30QLY_W8G9M3'E_-]9WXJ>_T\WMC;3\W\> M3QK_F<9_IO&?:?QG&O_Y,/&?PV80":D<=6$%->.QB:BZ#!.B+Y.C1V]Q;YHT MSTD[&K`<[.1E>]UP!C=,C!*[##Y^UZ]]*3*Q",H?>]+]P,;BH*Y\IE9DOI>\ M^)FTNGWRP\HMR#(+RKO"<8KY=?CK\*?-IC:R(PJ4R`;_D+:/FX3ND>>+N:N@ MH/(WG?="/]);)\M0)($3X7V;[KNIB@P!5)(JA48B!62A9`I0[Y_"_U>>?Y7_ M$"UD#E(1H8E,%H1_&MLA_I))=BRZ:20575`_;0B_WZ-LJZ%*H/Y"&K'MH2DW M106`R2\J@3KEV;O/-(W4PE`$_QH,(.+ MAO0\HZC*:]O=K.$D!D,"ND['W&GS+LE!.(H+ M?]CK#W.,$):"CET'+[HO%MAWGLQX?'\1<7/JSJ+'UX_E[3L&1^7E*DUBLF"@ M"FJ\O6$OR$&K&$Z:6*5K5Y$]X/*1XNX]0'*\=`)Z[!0Z84#50(7/81?1CT2] M,R[R6/@1VX4TH+@C*`54J(ZHA(ZV@ZTJ#05^MK-;\I*T2SHSQ,V9KY8"+(,3 M3)19E+8=44.C#3YF==@HTMTD9I]2FX-:A_8V0&O*[@FMDG582_(E+B81*Z`R M3-DY.Y.;NK<5*7W^4Y^Q\O_SV;4Q1?[?VMG9B,K_ZSOKJ?P_CV?UUX4L_'^: M`@"+)&H`5/T9Z``0S`R4``A&:P'PQ_>K`1#*=^L!$,A,%`$SP$9I`B2HF:@" MU$R8D3*`9MQ,M`$(:8;J`$)L1OH`A#5#A0""FY5&`&'-1B6`D&:H$T!PLU,* M4#=GHQ5`4(Y:0*X(5@S0CX.F*`(#UA:;VP7:9.'54+P].JB=%D_%\^QJ%?:O MVJ6H%(]A]](;AO1'J9BK&4R&9;]"4#M8Z7ZKE:NN4"J M?7'8%M?JCT`482=HJI]=_*FX78)R4*KMGY1I&+.GN%U4.EE8[>U@^$UAP]'@ M!B6\98N#*"5R7KO]C3'#*SWX+JNL"J=X`);6)TU2Q[C_UJ]WHR;F,;_B>WUF/_/LV=/4_YO'L\A7:I* M_O-]D*`+HD_7PHDO7C!<75V%27GNKD,>LNP9:U)PXG[ZM!)T0W_X!\[@S[+T M9P%OAW[GCQ6_.X)_ST?M-A9I!E@FM_AT.\\P",0*\B\KY+SY2;;VB=U2/XL_ MQ$JCU^E[C2'^V6NUH"G]E4#MY"-;@,%P!M"?YV/[`\$_Z'7]F2_'N3_V^N>= M:?8>@/?P_]O>W$[]_^;Q)(S_S#T`I_G_[:P_CTVSY`,HW/Z878,+Y;Z$\FS:FZO^?QOS_GJUOI.?_ M/)Y4_Y_J_U/]?ZK_3_7_?ZK^'_-3%@_&6``DBX$V`*D\]E@%K1,=LSX]4?.O M*L]2]\\P0X6&N=FU/_"O@]XH1)4_7_"*FT5$$_[75/N31^$/HO2WGHG\WXQB M0*;P?T]W=C9C_-_V5LK_S>-)XS_2^(\T_B.-_TCC/_[L^(\Q@1YW#.BXG0,\ MNO$S)_EI)0#F":VU7RJD[_'^3.SSB#M\Q(9+!ZP?QGX\>R(R,DD MAM^HCU-";2+8V0$W,?1T?,L9+18\37\"YB5H[LG,NSJ$1M_C'$L#IKEIY8>O ML;`PX!*$@V[?@N-D79PM_Z?Y__WWM8?*`75W^__&YOI6:O^?Q^.,_TFO-WR` M-J;Y?XF-K:C_!U1)Y;]Y/&N7O8Z_UFUISU7^H.!X$?SKJ-:>M_8_-9 M]/S?V4C]_^;R:&_/M8W5K;^O'8-`=0ST@%%8?_IB^]D+&"_4!J^M975)]&*! MTMM4^-`_%QM0YMF+IQLOMK94X3^[6^ESR\>V_SR,]_>]_+\W=C93^6\>3VS\ M?Y#\KUNI_]=SYX9 M>/4\@,_-1LR%QO:8(?I_7\N3QK_E\;_I?%_:?Q?&O_WI\;_38C^T[%_ M=N2?RJ0W*?(O$OI!4`B]8>!,@R7+6]<]A`FAT_!)8$T^TU1YT^_=,* MQ:\@GL%?;?@3_POL2"O$.[##YCG\$PR0JPE:$B3>(RV"?NN+Z#2W1>>JVVLB M!TE[!``R42Z=WHAN\(!_ZXWFWW=VUN4/_^MPDUOEW]@N_]4U?XV`\>4_^[W! MT%,_0*@V%4<=KR_?@X`/:-/?3='UOP`@^!DZ[5QEQP`3,8 M_"#FC[_\$]O_<;!FW,:4_1\.@*C_#VS_Z?V__K''_Z%$@*G^?S'[_];ZT_3^U[D\J?]?ZO^7^O^E_G^I_]_=_/^R;X^K M!WL9>71*!T#Y:[4!W/%QL;(WC,J^^/''$GSM\U^C/^,VIMI_8_%?6YN;J?YO M+D_J_Y?Z_Z7^?ZG_7^K_]S#^?^,=^^0=:!-N=L_2E=9X*M=;HVX#5YSV[%,> M8(?R`ZUM/K\%WKGF-SF)E[D?&\HS+"CB7\/"S\E[VNEJ\X)0K_&>)'B'_RFP M3^'RJ`O[N;X9WLE&9%^^3=#1)I-+JB9;&_@7L(/X@]P"%E\H"`>G@EAGI&L? M8?C*ISG9IT*M7(=)6S\X*5/^7ZO]2_5^J_TOU?S^@_L__"NNPRTHX5PV(K_*[,=W>YL,J M]S;OJ-W;E.J]S8A^#RM$U)HQI=_F+;5^FZG:+WW2)WW2)WW2)WW2)WW2)WW2 /)WW29]KS_]#V<2T`N`$` ` end -- Doug Rabson Mail: dfr@nlsystems.com Nonlinear Systems Ltd. Phone: +44 181 951 1891