%deffont "standard" xfont "utopia-medium-r", vfont "goth", tfont "arial.ttf" %deffont "thick" xfont "utopia-bold-r", vfont "goth", tfont "arialbd.ttf" %deffont "typewriter" xfont "courier-medium-r", vfont "goth", tfont "courbd.ttf" %default 1 leftfill, size 3, fore "white", back "black", font "thick" %default 2 size 7, vgap 10, prefix " " %default 3 size 2, bar "gray70", vgap 10 %default 4 size 5, fore "white", vgap 30, prefix " ", font "standard" %tab 1 size 4, vgap 40, prefix " ", icon box "green" 50 %tab 2 size 4, vgap 40, prefix " ", icon arc "lightblue" 50 %tab 3 size 3, vgap 40, prefix " ", icon delta3 "red" 40 %default 1 xfont "utopia-bold-r", size 4, fore "white", back "black" %default 2 xfont "utopia-bold-r", size 3, fore "white", back "black" %default 3 xfont "utopia-bold-r", size 4, fore "white", back "black" %default 4 xfont "utopia-bold-r", size 4, fore "white", back "black" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Presentation overview Introduction General introduction Introduction to Linux Virtual Server Actual installations Geographical load balancing The Future Conclusions Questions? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Introduction %center %image "EMBEDDIR/vslogo-200.jpg" %size 8, lcutin Linux Virtual Server %rcutin Project %size 4 %pause %newimage "EMBEDDIR/logolmbschwarz.jpg" Lars Marowsky-Brée %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Why clustering? A cluster groups resources to form a system beyond a single node's abilities. Availability Cluster remains operational even if nodes fail Remaining nodes take over the work Prevent loss of $$$ in E-Commerce Performance Distribute load to multiple nodes Scalable systems Simply add more nodes when more orders roll in! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Where and How High Availability: UPS Redundant hardware Redundant links & dynamic routing Mirrored data Failover Journaled filesystems (Go Stephen!) Load distribution: Round-Robin DNS TCP/IP Redirection Data Locality (HTTP Proxying) HTTP Redirection The most commonly deployed solution at the moment: %pause OSI Layer 10 - Religion Pray that your servers don't crash! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Layer 4 Switching Presents a virtual IP address and port to the Internet, which is inverse-multiplexed to multiple servers. Appears to the "outside" world as a single entity Transparent for all single stream TCP based protocols HTTP(S), NNTP, telnet, ssh, SMTP etc all work Protocols with embedded IP addresses require additional support (ftp 'ACTIVE mode') Transparent for most UDP based protocols Examples for commercial layer 4 switches: Cisco Systems LocalDirector, F5 Big/IP, Alteon %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Why Linux? Firewall features available Sophisticated packet filtering, transparent proxying, application level gateways Source Code freely available Previous experience Possibility to fix bugs & add new features on our own %pause But also: Unbeatable price! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How is it done? %size 3 A kernel patch and a user level tool (ipvsadm) to control the new functionality. %center, newimage "EMBEDDIR/ipvs_overview_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Scheduling strategies Deciding which server to use for a new connection is implemented using different algorithms, which are available as modules and can be adapted to specific needs. Round Robin Scheduling Weighted Round Robin Scheduling Weighted Least Connection Scheduling Session persistence Dynamic Load Balancing Taking into account failed servers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Round Robin Scheduling Not very difficult: Send connections to servers in a round robin fashion. %center, newimage "EMBEDDIR/rr_scheduler_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Weighted Round Robin Scheduling Servers will receive approximately "server weight/total weight" percentage of connections. %center, newimage "EMBEDDIR/wrr_scheduler_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Weighted Least Connection Scheduling Directs new connection to server with the lowest connections/server weight ratio. %center, newimage "EMBEDDIR/wlc_scheduler_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Session persistence After a server has been selected for the first connection, a client (identified by the source IP) is always forwarded to the same server. %center, newimage "EMBEDDIR/persistence_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Dynamic Load Balancing For weighted scheduling, adjust server weights periodically based on observed load average. The following example tries to adjust the weight so that all servers reach a "target load" of 1. %center Weight:= min(1/loadavg,2) * Base_Weight %center, newimage "EMBEDDIR/dyn_wrr_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page No talking to the dead! Do not forward packets to servers which are down, as determined by a monitor on the LVS. Place them back into service if they have been up for a certain period of time. Can be manually triggered to not assign new connections to a server to allow for upgrading without disrupting service. %center, newimage "EMBEDDIR/no_dead_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page How the packets get forwarded to the real servers After it has been determined to which server the packet will go, LVS uses the forwarding method configured for this server to send the packet. IP Masquerading / NAT mode Direct Routing Tunneling All are fully transparent to the client and can be mixed for a single virtual service. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Forwarding using NAT Destination address of incoming packets is rewritten to the real server on the way in, source address is set to the virtual address again on the way out. Fully transparent to both servers & clients LVS must be "in between" network-wise the client & servers all the time Theoretical maximum bandwidth has been estimated to be ~70 mbit/s %center, newimage "EMBEDDIR/nat_fwd_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Forwarding using Direct Routing LVS forwards packets directly to the real servers MAC address without modifying the IP packet. Server replies directly to the client, not via the LVS. Requires an additional IP alias to be bound on the real server All real servers must be reachable directly via ethernet from the LVS LVS MUST NOT be in the return path Theoretical higher performance due to asymetric behaviour of Internet applications: Incoming requests are small, outgoing replies are large Requires at least one additional outgoing router or a kernel hack on the LVS %page Direct Routing Schemata %center, newimage "EMBEDDIR/dr_fwd_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Forwarding using tunneling Incoming packet to the virtual address is encapsulated and tunneled via IPIP to the real server, which strips off the encapsulation, processes the embedded packet and replies directly to the client using the tunl0 address. Requires a tunnel interface to be setup on the server LVS MUST NOT be in the return path Servers may (in theory) be geographically distributed LVS may be enhanced to select server based on "closeness" to the client Estimated to equal DR in performance %page Forwarding using tunneling Schemata %center, newimage "EMBEDDIR/tun_fwd_inv.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Eliminating the Single Point of Failure If you have redundant servers, your LVS should be redundant too. UPS is mandatory Simple failover can already be done on Linux "heartbeat", "heart" for failure detection "arping" from iputils by Alexey for IP address takeover "Mirrored" configurations using rsync Active connection status is currently lost! Run a dynamic routing protocol (OSPF/EIGRP) in your network so you can get to the Internet Minimize the time where only one LVS is running %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Short How-To to NAT On the LVS: Basic network setup ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 ifconfig eth1 172.16.1.1 netmask 255.255.255.0 Masquerade packets on the way out ipchains -A forward -s 172.16.1.0/24 -j MASQ echo 1>/proc/sys/net/ipv4/ip_forward Setup LVS to listen on port 80, use round-robin scheduling & persistance ipvsadm -A -t 192.168.1.1:80 -s rr -p Add real servers on the internal network using NAT ipvsadm -a -t 192.168.1.1:80 -r 172.16.1.2 -m ipvsadm -a -t 192.168.1.1:80 -r 172.16.1.3 -m Start httpd on real servers, enter LVS as default gateway, works. %center, size 6 ipvsadm -h %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Behind the LVS - Content replication Remember your application suddenly runs on N servers! How does the application deal with failure of a real server? Keep it simple, stupid! Content replication using rsync Very application specific issues %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Actual implementations %size 14, center Yes, it works! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page ID Media - Powering the IFA! %center http://www.cycosmos.com/ %center, newimage "EMBEDDIR/cycosmos.gif" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page BFK - a slightly more complex setup %center,newimage "EMBEDDIR/BFK+Logo.gif" http://www.bfk-pb.de/ %center, newimage "EMBEDDIR/intermoves.gif" %leftfill Running Intermoves, BFK's leading business to business E-Commerce and data warehousing application based on Java servlets, this setup requires highest performance and reliability. Fully redundant setup with 2 routers, 2 LVS, n+1 webservers, 2 mailservers, 2 internal choke routers, 3 database servers combined with both internal and external monitoring. %center Entire infrastructure powered by Linux! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Geographical load balancing "Geographical" LB is misleading: usually, it is about "network topology based" LB When the user connects to the virtual service, he is redirected to the appropriate cluster, based on network proximity, load and of course, availability Coping with failure of a local cluster or a network breakdown GLB requires a solid illusion about how the Internet works and usually can't be tried at home %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Thoughts about GLB - Network proximity Current approaches at determining network proximity: ping, reverse DNS, /dev/urandom Apparently forgotten: BGP4, Internet Routing Registry Get an EBGP feed from each BGP4 router closest to each cluster. BGP4 provides a "view" of how the Internet looks like from every cluster, which the GLBs consolidate. Determining the closest cluster becomes a single lookup on the source IP of the client in the routing table of the BGP4 master, which is very fast. You can almost determine how big the netblock the client is coming from is, and only run extended diagnostics once. All standard features of BGP4 for load balancing are available and highly flexible. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Thoughts about GLB - Session Redirection Geographical load balancing should not redirect single TCP/IP connections, but instead the whole session to the target cluster, otherwise the connection to the GLB is the bottleneck. However, if a cluster or the clients network connectivity to it dies, all sessions connected to it die. Combine with a JavaScript "proxy.pac" to have the client detect it should consult the GLB about another cluster if the connection to the current one dies? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Thoughts about GLB - Session redirection II Currently deployed solutions: Round-Robin DNS (multiple A records) Intelligent DNS (Eddieware) HTTP redirect (CPAN) Distributed proxies LVS can basically do this using tunneling, but packets always travel through the LVS on the way in: bottleneck, SPOF! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Thoughts about GLB - SPOFs Ensuring availability on the Internet is not only about ensuring that your system is up and running, but also about ensuring that it is actually reachable from the client! Multi-Homed ISPs are mandatory DNS tricks still useful to have multiple GLBs at different locations Have GLBs / clusters distributed at major NAPs and play with the routing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page The future A larger user base Sync'ing kernel tables between the standby nodes Linux HA - Phase II Investigate and play around with world wide load balancing BUG FREE! Of course, all this is just the beginning... %pause %size 9, center, fore "Red" World Domination, Fast. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Conclusions Useable for a lot of applications Development is speeding up right now since a useful base exists Already surpasses some, will surpass most alternatives Still a long way before all layers of Linux HA hook into eachother cleanly Well understood on a LAN scale, more difficult for WANs Most interesting issues are at the application level %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page Questions? %size 6, center http://www.LinuxVirtualServer.org/ %leftfill Thanks to: Wensong Zhang for LVS Joseph Mack for his talk at LinuxExpo The Linux Developers Further questions: lvs-users@LinuxVirtualServer.org - Please subscribe! Lars Marowsky-Brée %size 4, center, newimage "EMBEDDIR/logolmbschwarz.jpg-0" %embed "intermoves.gif" M1TE&.#=A"0$R`/<``(P&!(R&A%1.3,3&Q)Q&4L2&A&QJ:IQI;,2FI*RFI(1* M3.3FY*0I/*R&A,2ZO.S'Q+Q&3+QR=(QK;,2:E%Q>7'Q=7)PV1)R6E-RVM)Q6 M7.36U/3V])QZ?*R9E(1Z>XQ:7)P6)-RJI+Q^?.26E*PV1)R&A&Q25-S6U+RV MM'1V=/3GY+Q68.3>W%165-R*C&Q>7-3*Q*RNK,2^O,2AG-S"O*Q67)P-'*Q& M3'QJ::QF;(Q*5)2"@8QC9,2.C,QP=*RBG,RNK*R.C.32U)0_3(2"?-RNK*P_ M3)R.C/3N[+Q>9/3>W)2.C&115)QN++RRM-3`O(Q67)0&#%Q.3-2JJ+2FI.SN[+0J M/+R&A-2VM+Q.5&1F9*2:F>2VM*167/36U/S^_+R7E(Q]?)1:7-RBH.S>W&1: M7'1>7)P2'Y1B9-22E,QV>*1`3.RRKKQ"3*2.C/SO[*Q^?)2*A9+R@G,1V>;R"A'1:7.22E+1N=,R"A'QR=-S> MW+R^O'1L;,RFI.SFY*PF-,RVM,1&5&1@7:0Z1>S9U/SZ^J1V=+2:G*0:+.2G MI:2*BGQW=<188%Q86-S+QK2QKLS"O,R?G^2^O9+1.5*1F;/3)Q,1N=)1K;(1>7,1Z?+0W1'165/SFY+1J M;)1,5+2>G-2PK+20C)Q"3+0^3(QT=(1C9)0)%(165(R"?=S2S.2BI*02)-1V M?,R:E'1F9-2"A%124YQ*5,2JK*R*C+Q*5)R:E]RZO.3:W(1^?(Q>8.2:G-S: MVKRZNN3BX]R.E&QB9-3.S,3"P7QN;-RRM)R2E/3R[KQB;/3BWY22C9QR=-2B MH)Q27%Q25+2JI+R*A]2ZM[Q27.2ZMJ1:7I1>9.SBY'1B891F9Z22E,S*R-2* MC-2:G/32T,QB;.SJZZPJ/"P`````"0$R```(_@#;"!Q(L*#!@P@3*ES(L*'# MAQ`C2IQ(L:+%BQ@S:MS(L:/'CR!#BAQ)LJ3)DRA3JES)LJ7+ES!CRIQ)LZ;- MFSASZMS)LZ?/GP4Y"1TJ%":GC$0O$DU*<.E0A4Z/%AVZ06A53E>O'A6X-*O5 MKT^;@M5:E&%4LV$/5@X$'/RB,Q-P&Q9,-I9*7JK/GSO[:]K&E.)5FSI\]A[;,:71I MS9WE^/,WQK`YN`-['9)LR/;MOP-=9V9\>"$G=*#V,`/`_(LE'T58+%C0&'@; M%8D)$_^=4#?O[9S8_I!^`#NU/-B;;)?E9*O?%^;'$!7QMH`V=X^).@?N]%"$"$W$1"G2$/3JBAA._Q1YTY#V3X MGG[,^%"*=*$92!`F#Y(C8(IS#03*@X5$TB!K";%'AH8\_O?%/B?8:!AP>HS( MW`@"4O?802PF>&)]YOR3((>KH9B3^I4/DGW#)`/-PL@`9RCD`("PX+W%=1'D_]!*.H70"A*X'V]<&F8;_NB0 M"8N9)[!0B25D5LDC'N*8.H8*CT[)XQ<]G/*F/TM"].N(/IG23#SDBB@L`N<]RDTJXZ<8CSJ0+L":5B-6* M"Q*W^QLDAHP)00AJF`,)-@5MQ MLDS17RP1A2F35MR4'ND":O0Y)>]+\`9(J-'C_BS6N"/#"94DVX:CHAYQP=H# M7+%CR%T#$$@Z45B+1J$CCG96'7^W^=) M&]TT#,MK" MSI--.@G(L,>47ZS!3IY&^$,4NA$.?KUL<.9P`9.Q M)H$+%$4`TN`&-PBC`>JP`82^8`)>\*("QIA$-B[@#MI)*!85X`4C!E&!&E8@ M%\:`!/'"QC0)P6$0_B?4@29VIP[SI&""&EHGLNXTHPUX8*! MLC.7)21D@QC**&:QI$-&( M!BF^"`XK6,$`>`0;(((Q)5Y$HQVDV"4<'O2*;%B#"U?P1F7VJ"LH>,`:S<.6 M4,XF+`!(PP#)^($XQB:5_7%H#5RD0!@-`,Q)3,(`=NCD$1[8*G\LP`QK_B*! M*-(1@RKZ;'R]C-T/'!`.*9&(%,?<)1A].0DM9&.>#IA2!L*H4&T`(`M6F(0' M\"B85>+,`IEP9C=.X-$'Y.D>5O#B+R&1U``0(1G)$(4$M@>` M*5R@GY3RQ@FHU-,T..`$J.,'E_)052TX<&+4?,\GL$Z$K0('9IA:02 MX1,)^H05*'C8^N0I0E^P0DD=T+(-0#%!0T$7A M!PF(0A0NL(0F].@+MQ6=-[A1A0?90107X$(!?].,*>4B$\Z-)`Q.L*/F,".9 MX.CO$J9;W6;-:W[O06N(LQ&`%O\A`.6H(`LL=4!.C))'&([M8;EQX"DY(0#Y M:U4E"(&S%QC`F5P80#CR(0/\,N<35"7I7YUZ@B*$BA&D`(<&2VP*4Z#``;WB MC]XV1(==BB(9T^40_@BTW#OC2:%H":H`A%$PX1E1#0"D<"S;*K6^[1D@$Q3H M+M2X`&9QB$,&*$B`-5H1J@,$X`EH$*2'L$CB/+]@0\3A`!AK"[ M-X0N'R>`QII\;0T'?&\!+#`Y`#Z18VSF=@QJ8)RNF!..-WFC$F/6CR9BD8%` M[.(85:K`NZD8"4*0Z:8:LH$59/!,U/IAA`%D=XI!F5,_5JBJQE&P*2B9 M`PEC6$`D8(`"$1[LWY"N%3=4,2P>S)=M+/#'P_X#!0S/&5J5P*_<>O2(*[2* M!=P(@P1M\`=V`<+EF:.1X)(.!(#5YOSX!^9ZA(\P?/O#AL8? M4AH1U<&I25R;XUVA*N-_]O0F%ES#4/2>T!SD_@OO2$C=!H.8DCTHGH\X/(@1 MH?J%%6+[MTHD;T+QS7'O\C$HRV3%'&-8O"(>](P5BHX%7;`FB`1D8B,'7&(# M+S!2Y`4X_D!-]",J53`O0<(-,-`#/68#H>`.DH!TF4)KLJ4, M0:+`F/1=;W3`V;"%Z4S=2C\95!6(.;U9&?#4B0S,QW)!= MNB)!Z&8%3]!F=_(?#``&7/(!CH5&^Z,A'X8S#)!6%]`-M,4C60!&L]1\'A44 M^!<)024A.;0$[C`I+'`"N^`C.$`$5F=^1D(/C86&@$`@_F"#1=@$B07\`-L\R-54S+5ZP2\PW6QJ0?M'``!""2!1$-$8"!Z3P?@!@`_)5 M#A(6"1H-(X&02A#-3\`:I92.'LB."(D.%NYER!9P%T\ M,"U3$`".L":,R%ZVH8F?P(DU\"`5<&GBH`QD0@!& M103BY(DY8@ZKH&W=MFS[L@#<,`I3`@4K)(C_08?=!6]6Q!:1-2%#H`.G:99G MF9:6IS:?Y@UK*`[N4`(Y&0K6]CNLQ0DA."57"72B$@N!YE""L#O%$`CW:'OY MN(_]B(,/9$4V-I`;8@*N=$R`%D:_M&59,%><-%98@ MF;!+V:,?B/0&/4*'8D0FRDAWX>!D-WAI`S!CK(4$Y3DBO;56E>`/+(`*7)(% M*?`'CJG/@#YV-_&)(@QJ1+&-90 M6H!9R8`_WV)E$L(+`E`T8)!E^W2;]?$/?#0'@19//`(%!R`JG6=4#_(+RF8N MH\`E1@5DIQ`MK&4.[Z<]L&69H;$`'^DCD\">!W.%S*F#?,&/695+=?E+1Y54 MLI:=];=&#B<&1R!"_CT2"$9TE+JVCAHBDK[Y'R%92C'6`)VT/8'F`;*%B78J M672:(SLZ(II0=5AY>)%P!CAC#&L0*A?F M7"R5#])D%?0)9;O$0,D0`$LPJH=CB!^"-][@<*@$I3Z2#7%40)82%YRS/5>) M)FO2A;-$,^Z0!+L3*M-VB961B3:*F&2U`1AB)(.@3K-T.`D0`QN#`O/"']EV MI+H4,H<)9#*`:YM`)EW87=^U(80Z(G#06-E`G^FU3QQS"H1U3<8G.$V!_G<3 M\@$81D$RD#GF<$\/H@D(\T5=RE97D8D2\F&>IS8_L#&IY@`#H`S1XA@..@8L MX'#N<`&J`@E,-$X$$Q>[R2,DN%8\]D*8Q#PH(`;SF%+39JG-^J#_X8\$Z)P\ M:)CR)P:2<`IFD@]V(AT+$)'ZP5R$*2J?,$OB1(,[JA]0T',>L`1"V4W,00>A MM3R^P"&9``F/!0/Q\"`3%TGQEFM-\0UY0JM`=I\!Z0^#19``H`G;-PE3RPU: M8[;Z077'!W7A(`ZF0`4/8@S.1&?U0J*\B9Q,.27V MRD1&*P-N`&?ZT0[K-T"8R(U;R;>B MQD!>RE`)8[`L$D('(58^'4`YVM=I%U"."6(,E_8ME,8E1D!WN)D^G``W/K*Q M#<0V7FEC+'`+NC,(575Y$V8Q-E::S!!H_B_`>0@";D0"(R6N& MCMN``BTMO5$6V^EB#9[NISBF0:V*]CU4K M"_"?M=$6/7BWP7BE/+(%Y)=YB&"5F?"%ID"HT0>/F5"@4=#!&J(-&H>]^=!& MH6(#?(!&G&(O2+!Y1J*+UOA,^Y(5W@`/!/D%+RP!CD0`;KP"(2@#_K@`MN+?Z#X'KE@5"S6 M>^\A`4!F,S:X?!M5+040,N_!!&/+0BCP(%F@;-9RNT[,([0`#,82">:["4F) MI13`4[<,QVV`-]R`<>$R#-&PQ$S$J7&\.,U!=H'@"XJ`RBZ@RO+0()-Y2`BP M63";L\. MRM"D6S/X^7Q;MZ\`0#/)A5VB,M<-M#9E<_A@#SD`F@?MOFG0%RB#/$@(& MT8`&Y)=T9`(.`2TVD7`%#M`!*9TNJ#TA%R9X%$1GV4H0&^`/V+`+5*(`X-F1 M``G:3=V-^N$+:],-,L#=[3TB7O!%_`V9K[U;`/`")#7;OLB%H9F&QW-X+)`/ MB9!2S%N3_PJ]7.E/#JK6;.TC0YH_^4!,1I(+&?937'!3$N)H4;!_$-)+!2K0 MD1"`4V+2,@MT"JD?],M$)`>;XY@&Q@G3/<(,]O!%/(5:+24X-N8-PYH@W@W4 M]95K#8S<>#(%?_!7-=?+V<<<>;!]5G"-+/V[B5JB&@),`O0W+(`S&8`F M2^7CQ2,JPN;@#Z5P2+#TA50+/4/]WP`.`!DPN#O3#:;0`9^@=5^0"]QU.W^S M6NJHH5R0!LD`"4&*AB2'>J>0`'\@"D$:W\YS&P[*I@X0!0$`"5P$WG\P5IKF M#:9>#ME`5SA-(%B!!"?@`#_P!N,PF,FT2-N7@!E5/J:@9#`P[@$@"G35YJ\+ M"*90#F\`"0RT0@G@#JB45^.@0;+E/`":#UQ0#AY@`+U42LL630`:#J9P_@$- MKP4;Q7;'%PGY<.K;S@/LH`F?P`R?P`"_D`LOL'U@A$=_A8Y3G7_9ONUA)'^F M8#Q0;@[LOO!/$'C)1`K\_@(OD%'/[2T.8`IIL`/T0`*?4/._L&T&5TI')^B; MXP_@%0;5/1>:0Z5@-X_ ML`1WI3:SY3(V%@FG4/)$H`63X$N^9`!Z2E?,@W0.M_!_L%1N"71.FTK9D`Q+ M0#.FX`XU95$*3W4S,<_A_[5>5<.]11ATSK&1Y<:5!=OO.?E5#V5F\-0D-`SCDX6)%_XXA* MI)H&,:`O*;(!=J[P`/$CC;4?*`!%\K>!TP9S"TYT2W#A3S:*%2D2";`DBBEQ MRB)Q"^<@090+4<1("L=B@;0 M":RE*VE*QHD%09%XRR=CY,Z>)X`J%!JI):N6SYN M316V@1LW+J.W1T7<2D7+)@N#H4I MU^$0CO%7[\JIF^0=#,@'2)P#UBA\LAB#%0F+R[?)OXYMH0U\BVJ\X2*1C1,% MS4%B@2L`H2^!-,K9ZX^STK$F#>$&N`(A)!0T32[4_%'M)G=BX"ZE!$WCI,$3 M`$$AAA^N2R.*&FF,P10'`.'&FP7J*1$G:_;:JR0QUFIK#.A"Y`V\$_()YPKG M9&-HJ!.N@+)#?Y0\;;83PLDGGRNXP>^MA1JT+,NVC(-N1!:>E$\&!V3H_F9. M&600!Q"VO-$-O3?!E)(%W:I<(,TPI<2&FRL!G?*X$;WY,A\8PFD+"4=[BR32 M0'5;(,VG-E-,2>#$4>T#9,P%+-V`R2[]^1,0/5UK_VY M9Y'Q16);J:,^&&FG!<179A![]MDXAKH&6D2FJRW:8HJ;UEG$L]%KMUX?MR3: MV9V#1AKMD+D>>@R]HY:Z[K*/9OO6^VTXW*T\'*ME5OLK>]>J.?((T_\ M-&N?9=Q:1PEW_'*C&9];\[JM+EMQ6RLO/'/))S?3M./.-J[9QDVGO7;;;\<] >=]USUQSTW7__7;`V9P>^>../1SYYY9=GWM6````[ ` %endembed %embed "rr_scheduler_inv.gif" M1TE&.#EA+`*9`<(``/___V]P;P```````````/___________R'^#DUA9&4@ M=VET:"!'24U0`"'Y!`$```<`+``````L`ID!``/^>+K<_C#*2:N]..O-N_]@ M*(YD:9YHJJYLZ[YP+,]T;=]XKN]\[__`H'!(+!J/R*1RR6PZG]"H=$JM6J_8 MK';+[7J_X+!X3"Z;S^BT>LUNN]_PN'Q.K]OO^+Q^S^_[_X"!@H.$A8:'B(F* MBXR-CH^0D9*3E)66EYB9FINHJ:JKK*VNK["QLK.TM;:W MN+EJ`+R]OKRZP<(-O\7%P\BVQQ#&R:2XR#EY^R+Z2'K[?*$[R+U\_A]]_;`^?[Z`%;T^T<0ST`4^PHJ9)-PQ$$) M`1=*!/,0844&QJ)-W`C^I:'#BAE#7N1(THC'CQ$5:'PPK:1+&BDMC#S1+9XT MFR]SFA!Y[R0)8#AO^M1)]`+/9AAGTFR);6C1IRR91EVG=&?0#$ZA:I4ZH675 M$EF[AM6J\RK$;%^'C"7KTJQ8MT76LMT(]VU:(G+G*JPK-*:3NWHY`JZ0MT?A MP/@.._#[9##B@H[%1'Z<3_$6RY3!8Y;8F;/HT7M/NP&-6K/J M-JQ;:XM-\;7LQ+;7T+[M;+<7W[R'`>A;OV6->E>/\.:SR3\.2WH_^[/CWX]DOXNI\-/TG(^?/,V\^(OYW^ M_O/R]1=,?8T%**`L2-%AX(&LB'0'5PRJMR!L!$;XR$H`26=A*1/.\=^&B'Q8 MFX8@>M*A'2*6",B)#U:HXHHNEI'BBWO,2$:,--9(8B`VYEA'CS?NZ",D+N+H M@Y%#>EAD;@3BB&22<<3X59-"PE,EE(I(&1%0-95#54!<'O#E0!"J`"26#%WI MS9;->+7,-/R)>4R99JJ)9B%:JM1/ETGIR69*7;+IIYXS/'GG+GG*V:>B@Q+* MJ*.$CK.GG1V<>>@9(DZZ*)G\'>0IF)U2VI2HE_J1J:`+:.KGG#%]*F>;I&I@ M:*F8)NKJHY*B"JFBN>[JPJRTRFAKJW\6RV>JQ*[^&FBL1C$;;!ZG[CHII[TB MN^BKU#HKU+.3`!N:MMRBZ&UMX78+KI+GEJM@NG!8JNZWCKC[;ACR)C?NO".Z MR"2_8?(4(Z>\&LHVM.SRPB*S.S.,4<)\L[`V=Z?SSO3^ MG(/,0!=<<]&7$,V#T$C;VV+3E3"M@]106T$U#DI7;?75-V2M-15>[\#UU^Q! MVS/9:9J-=B-C=WWVVFFT74/8<#=#?ZZ.Z*!C3?JHI6\V47K-DAQO?3L^";C:.UEBZV^X[A4Z-^>NT=TEE_/%I M!M4[E<18'&?UKT-OTE%T4H\]]TH]K'V&'D?@O?F]VS6^.\V^;9[XM,*/D+47 MPO>?_&BF+Y"NFM>^7HKX&U*U!(<6.5QO3>SJT?/<\Q!`?>--SLL5\W#UP`A* M[H"C2Z"A`OBBD<"J@EZ"DYL<]4$)9@]]L[/2N=S%01!=A%J,4A7SF")#4"'+ MAA0,'`:7HJU_M3!"#7P4KU!5P_1IRE6JPI;<]&<1X"PP@ZQ[3*^F2,0J$JO^ MBI'B5`P!U:@C,'%__D/9#P54PF/5\(89&YX2S[C&*&Y@AS(8H[(`=T)_6-"! M).0?"&&8+?IERXT8@&/,B$>W)ZX/!H(,W5#D.,@ZCB^1AK'>%^EX.K1!$@C@ M,R0B-7E(!'*R;Y,$T,\820[Z02F4\0$D*%N&2K#PKX.M!-`72-E$4RX/*#FZ MI,]4B;=]!7&.:U36%1TXP3\*,RF5C*-,5!-+2GYR:;RQ"55X9%;S8\S(:5=R,[NC'?JX*F*\B:4W1 M&%.PO>:+,A/GXW#74W:$+Z$@$^K$#.A(YN"QFKZ2%F/8^).7AF8Q*4U5ZPJ5 M53L^M:5"M"5(;`K%KMJM@1Q=BBT9BD]KR.2M!/SH4F^X5A8\$)IM)45:]KHX MJR*J>L3@Z3$'BRUD9K.BUR0FN.3*+Z5J#K!3*5XWES5#@U;VL)6U7%Y?XE@E M816L.84G0%EE+2WRT8H]8VQDU9?/T73V1U/UBT&'*-#1BO"S6>P32O_7G('Z MUJR]\2NZL$I1BM8VB[+^=6=I34O$+C9Q=4G$+3._NA7APK::W-0F!;<94LDB M5[L3G:9JJ6O8F6@1*M9MT733$<+CZA28QRJL1%-JNW`^++XY2:_9BHH=D]F7 MI>SDK'YUI"_+>)"\Y>6O*5[[.P5C88SG)6Y4M3IAKZ:5;0ZV5V1(^[TP132Z M\WT&@Q.Q6=-E1:3?BRJ*=QK67(Q8=1DF#HLT)!KV^N?"48NQ/-?"5\+HN'ZJ MA3%KL=L0X/[`R.=X,3K,^UOIX5BE2/[,@(GT4P37%;14^X3!/HWO2Y#[T6X+6\E@?#8V,WK;#:Z6A MI4VJ=N'>@]$]NI$N1R)F7=:.?6(GAZG7:J&Y3.XTB6V:?>MK]^^UO>!MMFN;,+ M\$9F)``(1S@O_,WPAL=[W60.+<0?S#V('3SA&,]XQA?N\([ON^`&\3#(B8IO MBA=#XRA/NYS:0`XI-\9$/NN2^GC@`%)[S MHN=\YSQWN,]U8\.EYWL7";>YT:>>\I8GO><3[R_0GS5TC'>=ZF#W.M*OSG"G MA]OLZH5YS#3^];"[G>4`('O#?2$`":F]P!F9>Z;;'G6^OYWJ8\=Z,0A`@'K; M&^VE-H;DIL'_NJ-%]/*I1[YHQ_E M\JA/_>9?%OK8L=,7I9_\XM$.^8W''GRJ3[WN54_LUN^G]J77>=P73WG1`5_L M5<\DYG>?>^8S?_6!-C/+@V_TSY,=Y,<7?DBPS>_UYX/?\@#@OB_^WH]Z\7.>_%$_?]%EG_Z'BY_]4>=^]'=ZA!=_]`=_ MSX9_?:=_^S=\_5=\=B-Y`EAXW/-^!GB`A8<@'()R`,B`UO=R<"8X$DB`\F>! M&%B`&JA7R<>`#0B"O\![\2%Y%UA_!SB#SF>#%K@^Q]>!'MAR@R=_YR&!NX># M-WB#\W>"]F=.(2@(V4=ZYZ=M2!B$U3>!\D>"WQ>%V:9O+M@)[,>#RN=]1`B& M4KA_`DB`8=A]-=[A=.`4$B%18B%L2.#/&&"X'>&-QASQ@"'Z7=W M]&*'.*B':#B'&+AY7BB')9B')YB!@\`3^O>!/.>&0R.$X5>#];=]=&@?EEC^ MB(L(AHV8A)3#@H_G@'^8=7;5B33X?'GB$6(>YNX(G!'BLEGBL1' MB7&DB@5HA06(AX<(BSAWAH/8BI^8AH^8?[B8?`_(>**(28)XA(2XBJ!8BUYD MB14HBY>(C::"?,W(@;IXBJ@(#[X(?YC(B-X8%X+HB8:8C`-(#VP7CL[XC(Q7 M=\LXA:XX@/"'C,I8A_K8C<(XA+WPBOFH<_0HCN/H@O,7C948D.Y(@2(!CSD8 M@Q!IC7F(C-48?O)8=0E9CV7W@_77D628B1,ID!29A\3H>52XC=BHCC`)D&3HDMP8D3;)A,7XA+3^>(4]R2/G&(S\R)/_R(G5 M%X8ZR90O^92V6)2>IWPZ.9681Y*QN(\#V8\B:979>)'+UY1`&8\W68I'^8YN M69%$:98[:80U>99)B02)N(_:EI9PJ91R295.^98JN9:CQXK^N)4&Z9.FMY>, M>81WF3!+B93JR)>#&9=PF!'I6)5JJ9@XV9B>F9A^69(H^8O^")9D^8U_*9F: M&91[:)&7Z9E["9I7*9H2J8FF*9AB2)B/QYJ%6)>;"96O"9O3)IN0&94%:9>! MR9M#Z)7%R)K`B)R_B9?3*)Q?^)BH29L8N9KAQY4(J)M5MYVEJ9K*R9&NN9C4 M.9SKR`=Y.9I5>'KN"F4KZ&F=^A"9-OBCHB?HZ>?^WF:_:F/E`F=XPF#EDF@]@F;Q&D2T\F@OBF@Q0F'!3JA M".J06-.)'-JAE0F->*? MF7F@8QF='[JB/#JD'JJAQGFDE>>C!`6D!(FC].FBH6FD3'J<_(D7&WJE(\J< M+&F2*(J83@HM6WJE&6YHX,ZI@9AH@`*F#*ZG/')=I_*"Y8JC8*JIZ3Z(-.8G2D9 MHHU:I*(JJX!:,89ZI*]*JY@:ED(:J32JJW0*J<%Z)+_*H\OZ(U"*>>?YK`K2 MK#=*K6)CK2R*K0:DK2?*K5'BK1P*KB4:JY4ZJR@BK@Q*KBJCKOK)KFMGKF:* MKM`JKX=*K]5JK\"*K]FJK\[*K]WJK]<*L.$JL-M*L.5*J?/:JY>JL/?*L*5J ML-^*L%WCKM-*L:MAL=0)K["AL<+)L3#AL1B*L1TKL>-*L@PALI^)LH6BLHT) MLKKALHP)LU!GLNO*LKUHL^^*LW$CL[')L]/ALW'^"+%')K0->J);>,>I]5NJMK2[6^:KGFJO7J;8+"[AOZ+@S"[DW(KF:*J?(ZJG*RKD"X;E2 MRJFKJGVCR[@QJ[D_R[HYJ[@["[L]Z[I#B[D1*[M/B[M%:[M'*ZE\JKMO2[M! MZ[M32[>%:KQS"[Q5:[D/R[M-*[QW2[PBJ+Q[B[HOFJRC2KUY:[V3R[?2Z;V? M2[E)Z[Q+"[WU*KV#B[[^2V.ZMLF^'N*^/].! MK>JJI)O!$GS!%-RV#ORZ)NWE]O"1P9[0/R\0BRL/'R\S-O`,SRV.KQ*-YR+^QO"@3C"&PRZE5O$ MYWO$44O$.,RK3]R_37RV85R\2;R\/ERH7JR_JUO&<6O%\XG!57S&UXN_X;O& M\MG&7)R^8[RX;NQ1'OS!_%N]>,RJK3K(;TS'WXN]!@/'COG'J5A^44R34RS^ MQQ2AP7$,R>&FR.,+OGA:R)2LQTOLPEH\P'N\:)Q\O^3IDZ`LR96LR0Z#R8]\ MRH?7A8),Q0C1=Y/LRJ*,RY'S MS7D\S>F,Q,2\N^&\,SZHKS[[,Q,!,P_>\P]Y,SN[,S&P,T,MN<::[=>A>LTMO=E(?-">/=E,K-JS?=GA"]8-3=M9*]NBG=-4=:GOU_W9?"S2VTVA8+/5ZPW>])S6[\W> MM2W4\SV25F/?6PS?%5S:NFW3_$W*KOW:Y`V+KEW.B:S5H8W@^%V^"Z[3P(U( M!T[A8,J+QRSA?,WA#5ZC%P[AXIS82VC"$O[?7C)-) M+L;FYPW=66+F31ZE,D9SPA#F4V[*!-ZP#VZ8-/YMC,.-)->Y*-=O*VJ-9E>Z)L>M%>J-Y]^Y]S--HRN;9-3ZC?NY(]X MGK##ZE*-YR[.F(^TY8+>Y51=<9TD>@*>ZSC^ZI%.-F&^V\'.A!Y.1K_>Z+K> MZT2BYUP>I8GN[%$+Y_<][-1^"%WWX-AN(>Y6YZE^HS?3[>93Y=;.H5`#0YLT M[6_(I);4*H956G2V+/(>[^9^HG]C$_9O5?CUV>;V9<#RM>C_JD7_I^/_9GG_ID[VBL;V9LCU\\7V$A/_N&H!'M GM56]WV%+K_O"/_S$7_S&?_S(G_S*O_S,W_S.__S0'_W2'_@)```[ ` %endembed %embed "BFK+Logo.gif" M1TE&.#=AW0&.`/<`````````H`\(#Q`8$"`G("]G_R^7_S`P,#]`/T]/3U]8 M7V!H8&"7_W!W<("'@(^0CY"7_Y#(_Y^?GZ^OK["XL,#'P,_(_\___]#7T.#@ MX._O[____[0$H/,`\?\`_[\`OWPX(&#:\A`+_PA`O__X[O\O-/\4`_\(0'SX MY&`O-A`4%`@("+2,H//R\;^_OP#;)*O'Y#NXT@NG1;P)U3JUY,X,`$ MR!57RYY-&W')"@)J%SZP$K3IWP$VD`9.'+7NXZD%("``&R+RY]`]CZ20&WJ" MEKZ)AQ8X7'MIX]'#_DL6X""B^//G1TH(O^!E=N][!W:'WQ<\^ON%"5!XB+^_ M;I$.A%?>2Q?0YQ=!\QF8EWW^^:>`0PU&J%I(#83W@$P%*JA700EJ^!:#$MXW M04,AEE@92`M$)\!^,V7H(5P&=?CB6B":*-Z("]FH8V(?):`B!C:Y..-?,0XY M5TD[]H=C0DDV.5A'&AP0'7,X"6DD6@C)>&5P2#J)WH-,>MDD1QD0$!T"&NAD MP99I):2ED36*>1R+!\F9Y$88<`8=F#NMR:99"KTY8YQVTD9`F(6:J!%UT37P MDY]_+B2HAX0F*MN`!EFJ*$;K18>I3Y!NR="D"E:J:7+-$71JB!@]$)X$_D.% M"N>HD7:YZG&'9GIK@Q=5"-V*1R_5F4(G0#`&F4L)0Z M5*QVQS)+&:P%:8M?13Y"=T":2%%;ZD/7`I>MMXOQUBV[Z4FD`0+1)4!N4N;2 M%U&ZIJT+;V+2#O2O>!*5&5U[3>7KG43\BN:OB=4AA[#``T<749Z-0M7P@0P/ M2Y)L*&4P08#_O5OQ&$N:3!;P`+=S+37",V;L5>1EZ51Z%Q^S'E+>JIV;^:) M(WZX0!J8"=VGC2\\NNVFS;=E+@ZN6J]RG M`W^XRL\!6Y?C'6&O_(DN;7W9=;[3O/GO&TP0\7'1VB40!.IFWW[NXJ.^FKO0 MD^]Z]$\_1Z7ZZ__VT=Z3(TSE9!.U\!EM?/%[VW'0Q#^"L.\[_^O7]B@CN-4, M8%FOB\G2[H8$XV,:Q?_*3G)0'TT(H'P2+11A*S)6;&)!J@``;.EYHJBG%7 M.2HCYM"8QI>5Q&5N!$!(-("!"5`@`:F;C1WO>*L\>FEB?$2(&J_VQRR.Y&24 M620C5^5(+Q$QDGU<8R5%*1),2D:3FSQ5)[U$)U`:D90DX5<@;P6^52++EDT2 M0-E<"4*YJ"1=L]24`(JG$'CALDG/X^45J?9+9G+1E(*Q%W_8=5"9O?S0 M2HH5S$+5$D+4+*:E:(?-#4RR32PA53<+-0!BBM-;U702*EUY3LFU9%+K_DS4 M`<20>734@-87129]<\F);2-5*3/O.AAR,DZ>*944Y_\:$L! M)9,.E715D#2I0/6A*HEZ M'`7LL#9-G2IH;-(=K)Y*`*M#*52/$S<4RB:H'\7+!MLS&@0V>FFE6(]+"4M:C^4 M?'4U2_+K0@VURPW,\3BZG"I!#*M9>]J5>RUQ_F)J$.#4,4Y1-])$2*=TDTS5 MLK:UI>.L;5="K\M!MK,:U,U*#2);V7@TL\!%YVLI^!(-[!4S[M*<30;KD.(J M5[6KC:Y+A=M%EV!@-F#2+AEY-\^":""1M'&G3L7+T^F:L(*RR6[PDFO!@"ZD M`L@1@']92M_@)A:Y*;&<8X\[7)G,1J$.<:L%(3Q?\092)O"]C`!ZI][;(I@A M@JT-;<$[D)UJ]L(Q$>)E(-/A^WV8(9:MS7(_.M!9V5!>L))[A85',/-H`: M3$PDG*PTX;DE>GX(@)%#V#$#^L:"?DF2+0/%0[,DT0\AM&K:BTTJX\[*=]T= M; M(]\A;YO9,AW,8Z>-DFJ[.<`#UK6&N'VJ6K+[).[>H'9WL`#]87N@'O[VU<.M[`[HNG4P)7$"__T@0.^F%82O.&V$4FJ_FDC M9(PS'-(I;+7PYZX1XQ=FU4C.W0TE]/#;T[= M[6:P(]>F35C]G#R67S3F&U@YP(L^$C"OYII,+P[(,4E8J6]LP7>1B77*LY=W/:/C'PVS\UZ#>G.K@%(&6<^9OO:7?Z<&9-8 MB5MGE@"DRA"OAR3?&>%Y;+-U<-3?O0DL;IJ6)]MXO/-^+E,/@(DQX`!QD_SZ&P&/TG$3AN[5]^2 M<4^_^D&UH?6[__TYL;YKX4__^K]$_G6UO_[W?Q+\\___`"@2\A>`!%B`&F%] M!IB`"B@1Q+>`#OB`"F$EXP6!%`B!$EA?%9B!#GB!!J:!'EB`%_B!(IB`%X!4 M(WB"!%A5*+B"_S=6+/B"^H<7,#B#]4<6-'B#[U<`.+B#/-B#/OB#0!B$0CB$ M1%B$1GB$2)B$2KB$3-B$3OB$4!B%4CB%5%B%5GB%6)B%6KB%7-B%7OB%8(@3 $`0$`.P`` ` %endembed %embed "nat_fwd_inv.gif" M1TE&.#=A%P,.`<(``/___V]P;X"`@,#`P````````$!`0````"P`````%P,. M`0`#_EBZW/XPRDFKO3CKS;O_8"B.9&F>:*JN;.N^<"S/=&W?>*[O?.__P*!P M2"P:C\BD$PNF\_HM'K-;KO?\+A\3J_; M[_B\?L_O^_^`@8*#A(6&AXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.D MI::GJ*FJJZRMKJ^PL;*SKP"VM[<>MK2\O;Y(N,$`';N_QL?(-[D+RQO%R=#1 MTB;-!290X<])12?.FNVT11D)XEI'D39DZDRI]PQ-D M/I=(&3+BPX<.($RM>S+BQX\>0(TN>3+FRYS+FS MY\^@0XL>3;JTZ=.H4ZM>S;JUZTL168(;^O)H-@FSU=[-_;KW+(_O6`XUR_MJ M[;ZR\?E>[JJXS)\.9KLCWK,2Q3+??JHX=+Q69U)P#O4[1*GL?Q7Y^_G7XRD7W7GYZ&0=>9]7]1\UU,`UX(#%\!;@? M#?WY-)^!UEUX(8$=???@9@ENN"!U>>$F(@8\"3?A#`RVZ&"$]25DXGM4425: MB`Z2<%>&+YYX@5W`K5A#BP+F"".&,;XDGWM(*8A9B#*DJ%V1(P"IFX]"+GCE MEA5$:%10MCE98VRCX8A5.419F1%Z:CX5$UQC2>4/=4VIF.*8.9KFY95SIC3F25**)NG2I<=I=J`*NIT>J$3Z5@]=00IJ:AFZ6L.JI[*:J"'T@HK ML<.._OKJI[(.6M>N@C[ZZ[1#!!NMH[8>RJ-T*^RZX%>(+ M)IVW*OGOQ,"N:^^\^4GXU<%SBIHPF1]3.;#'GPK\7+\4IWR"I/8I_.AN-=4F M,L(1K_IRD+I^?'&!`C>H\L]1L@RNSF6QFW//H>*Z;UAWHEGT<*$RC3+05.LB M-+MWAOSNLQPW7.C(T&7+FZM':>MTU6BGK?;:;+?M]MMPQRWWW'37;??=>.>M M]]Y\=Z%MWX!O(JDM!!1.P+F!)UY(/88W[OCCAT^M^.1R_D@:0`"$0Z[YYG]3 M[CD:@U\N^NBDW[+YZ9`C;L7@K+?N^NNPQR[[[+2K[E?MN.>N^^Z\R^Y%Z*0' M+_SPIJ-NO.&VOT5*GH$Q;XGSU5H^_/345W]YYL?O?';)Q$^).]S%?\C\_-`/N;WHZ___O@#L'[VG8-"_1@Q0*44_!J(/>_]CG^2(D$"!/*:"%I3"`O'GP`ZFSW\1!.`$@8!!0Y3P)"=< MW/B$MT$/NG!TZ@LAZMJW@Q0.PH85P:$@=/B"%E[/AR]\(01E>#H:*J-(([0` ML2QV(B,I$8F":A7S>`@0B*G`_HI0:V*7GLBS\'3H1RN<'A"#Z,(A$K%P*G)? MK9*XI#7"ZU+C,=(2#45'+%'Q'U$,H-7"92%.-5&.;D0+L[CXENK9@HR(%%T, M11B,`SC2D7>D1I*,^"UZ-4P[Y`D@V::"$+L0DC%,XA"$Q(;)\T#Q81LZVT(\ MF;!//F&,,$RD+!?IN'H\\I:WC&0)0LD,H."L6S`#)C!QY**"8<<@5X&*?"Z8 M)&OX,HHF\V)[B"0O8Y[2DL$\4UJFZ4HGP!*&WY0E_P:'RW*64Y81BH4`F(W<*")Y_/%A52+:67J$S!>&,I3C-][H# M`,"<_A"-Z$%%,,=9&FB(S`PFVG6$TH__D:#RG]-&H M_/)HXPGC`Q,Z4]=%%))G5"CB)7C\!":/&E597(,I;GI`RGC. M3T1B*MM$`>;3K*3I1X%JIDO#U*,N";552.PF]QJ84-F=J:[[O8V&NQ@(S%[69Z:T"2CV=6GDH3575/E\XO1E&USK7K1P()6HPBC M[DK?6C+.*G.IP76@+7:*W,OV-ZVV3&XNVZHTYVX,H'G$D\W8*U1L572?$!:K M`K=I7Z'P-3ENC=IU]RG(#MN)C<18HREKA6`^MBQ61Y*7IY2%XE+IL9?YC2Q_ M!>Q0UJ65QLHE<)SDV=2\6I..)EOQ4#LK3:?U:[D2BVNVZ,O-#V'M5<::IS9# MDEL6A8NN,./J-8E6SV@*&4!94^=C!2C<_YX5LS8^+HYYR@0DS\'-6Y(R-8F, M8J@YN#Y*3C"OQ'S$Y,<*+$6B/T!3%DI*N30^M$37[%`=@V+3Z$WFHZ-K2MAB*I1Y3F]]#]QG M_OQY?_LU=*B3*VJTHAJ,MB;ADH=\XF.6\EK/C?)M:?UC)/_:#<]V1IEG+.!> MY_(6I(ZV=D41;>D6,R8>[B-B`57G0)KKU0?5]AK4C:)IZ[K:U_XT)+-MZD]T M>\[D@@F)ATRN#H=[R[1F)X@YP.XT%%R)[B:TKP=-;1P?/+7!;LS#S3!Q^0C7 MUS66]YG]2^\V+UKBFKZU_M3*\,I:>^.AKK*Z)"V\UKQGF MI@T%_LY#_G$RZQ?C->?XS74,[C&[DFQ:Y!.?HW-/5,Y1+2-5FH3Q6V!ITD;I M1J^DT[7>=)^3%>B\7JLP.KX$/?L(92'=L&)WG,:6NE?2:HW%>9Z3$>Y\)3?V.;._SPR.+7:GEKG=T2U4J2[RKN MS^^"WN[%%JAC MT0U5[0]_JW+':`#'*=Z'=58'<5G'==8D!)?G)@R!=E)E9XF'=X[E5IJ'5-OF M=$+7@2E'?RHF?K]56VET?MB$+]E'6E7%9)5G/Q`381/(=GI77=5%;I34 M`@VX9R.(6I>T=D.3>3.S@@"8@8#W&P%@@131_)E70+G?P`X5_+U M5P_(7:JU(V%#>9VW+?=U@%TX;O=7+>!W:?.%9?;D@PWV6RDXAJA">ME@>@H7 M=,I%3DJ(6=`79.4&71:(>20H'D0V@E:H:G*2A68K4'<`HH>Y0V74RE MAPE&@T"8AFJH6ZZU6"/VAB+W_D!@QU\E1W//QX1U$FOXQUCP1()?0H64.(B. MV"Y!D&(B47[TA'VN&(.T8AX#QP*M-RF/R(?Z9U".MRY]F'BZR'Z0]74-%XIW M.&_S5W:65B\8DU?\]X-2!!:R(E#?5C2[$8OQTF-YQXT#$E#W0F%G6&N*8EX, M0XS!."ZJN&!@AG?BHHZCUXGG@URM$W^(MGIJ)(W[IC7AN#1&DW;J)'Q@(S)( M]R?>R$<-6(&Y.(/SY5I2LX/H6'0!QXK\)F(AJ(`&.3@G2)!3QWHR-W,HYX'[ M^(RLUW-[)82`A5(828ZAUVA^6$,\EXP;>'KZB'K8AI+]R&T+:8%ON&RKM(95 M"$?/_I2*.@"'?F./#/6)23@[I%9J3'AJ/VEL,PF%JWA\$6F4B'B5P%*3&NA^ MR]@[\/>!T!AQ66AB_M:1X^)ZJNAV=02#9*B2WE1F9,D[48ES2KD%]W9-X&:0 MS;9:B!>/1?9B20F611A9=[D[>:ERG;"75$F78Z5?B\F8_`@,DHD8D*D%D-EI MP5.9ELF3F(F6EH>8=4F9H(D[C3F5]K9[.L>4'Y2:M;.:92>;MGF;N/DZ%Y2; MO-F;O@F;AN2;-G69GU.<%&*7PLE\HVBXCF>Y%F>YGF>Z)F>ZFF>FTD:GEDZ_MHY$+3Y&@`P``"P MGOB9G_JYG_PI`.UY(]D9GSLIFJQ1G_;9GPB:H`JZGO\)&N\)3@`0H1(ZH11: MH19ZH1B*H?/I&@9ZGPOZH2#ZH0WJ&0^J2!EZHBB:HAK*G9TR`"[JH2$:HS** MGR/*&27Z0RJ:HSJZH@3:G2[ZHC,:I$):GC6J&3?:/SN:I$FZH:W)%#]ZH$,: MI5%:I$_B04IZI3K*I(])I<3PI%`JI6`JHUQ:&4>*I%AZIA>JI9E`H7!@H$\* MHV$:IPLZII-1IFAZIVG*HK`QH6WJI4`JIX":H'0J0'RZIZN>@2F>JKTDZJJBJ:LB@FWV@:/ZJ5P.JO$*IZU6@1$ M"1NZNJM8VJM[ZJFP.JS%.JW':JN_RJG+RJQ*ZJS/4ZVX`:L_*JW32JS>&CWE MRFC9JJT[RJV5<*U8X*[R`:[A.J[TZI^G!J\7\2/IJJXYRJZ4@*]58*GC(:^Q M6J_%>J[;!3]LBAO[RJ\IZJ^[>:%!0;`%:["SBK!)";`7(;'1T;`.>Z(0BT\I MJA846[$6*ZH8.V$+BT`CBYV8^K$H&K(2MZ/64+(F>[*2FK)#8J&-D*0>"[-Y MVJ/(_@JT1%NT1LNO-@NJ.(NRK76T3ONT4!NU4KNC/_NT,@M*.BW;"U7-NU@:JST8"BI?>R4DNVBL&Q$[NUXJJV@,JVR4"W M'0NW42NWB5&H78*V:8NWHH:UVNS/8*\JDJ$_E7#O5/KO=]KNNQ[ M13'P(N+[G,);OJEQO@1KOW*GD`5XJ[GWOWN!'08(`PD6,P44LQ#H,[MFK\ MKVS_`?VMQ.B/".DC,18 M',:E[,4AS,JIC,/'+,O'C,1F+,`*^X21@,;D*[2^^LMO%LP8!FNLCKAKY&)<#&5V&_:([U;"__ M3(CLW"3L(,B<8,V(C,W=2HELP+_AJH+T2U5U]R+-V MX-#0JWCJFZC$=\L<73D4S8OQ#+/SK"Z:S(!\N\W]"]%\>1"CM+)M2I'5?,BM MJ]$4_F2VI:H'#BV%?F/3096A*&V.FXS1W>O3C):U02W4\DK4@F74(NVV20W* M>WJC(]W2*S/28!W6=QJOX$K5-3W0!2;6:KW6;%VT3/V^3NV"8,O$94W3G&G5 M<(?5S#&A+9R_"@T,+4O7GVK6=XW6;^31>RVA?9W1?UV;,=VV@VW762#-3?O8 M],G7N*:^7NW2)[VWDNGA#W9>*U9W%&AF8W: M<4V?PNI>2CS7#$G:*Q#)K]V^2#K;+ES;''K;XV46-IS'`X1D.H64UX68Y,6T]M6VC MX8H=G!U.X=<9XRI-XOSMUS`NXSB.`BP.WP=NXM*9XT".4/#)XQ+^XB?N/BF> MY+L:L4K>Y'BZ.B0.2PCNX9%(FG-KFF&YX29JY#]^EC[Y?9F9F-1-/#[.:XYY MT*X9F0$[Y$3.YC9^Y*/YY7-GY38YYI]9YL=UYH*3YDT*Y5'.X?T-Y[8:YH8A MXCWTKFX.Z&_>Y2G9B+O4B#A]_G5)M8`(2'47V(6&_F:,^.AW1^G(-^F2;GO_ MY^FAON9_[N:,?>-&8'8Z7E%^]W8R&.E`..M]5^N#?.7^J"5W]]T.*>N8^-*O MSNLKC.BG'N6I+NBKGGY5HKB`K,\&5IA9&7P`Z^M6^8IFK)G*7M&=S<\'@M/- MGMO;_NTQ>84A*>;OO4%3KNK(:EU'N36P]ZO.WF0<:2'2GM[@CHK==^V'T6#8 M!4W#-.T!G8C)^GGX/F7RONW`1>Q;WN9F>NR,WI.4;JF:'.ZL]L&%!>_[1UPKOIXB&*7^",2@Q;X2!"BQRIGWN#F_F MK(E-.MWKWO[U7_7+)0_:[Y7O01\'@\5>!"=N^D>-`\_&"/_Q'__VMQ;W,0_7 M,T^3&SF$(+_VL.)5+IGX#'[UC/7;(5_Y99_`FE^!7FGY3C;XE_CY?W<%+13W MZ8[LZY[Y6V52J\_ZI5]LC6_ZO']8C1_X.4W[HV_['-^$(,[U?@CP_B?ND`AU M?'GG+1[[#Q_GZZ>".R^5? M?Y2\_=GO_2C(]>&O])4^V=`/W])/]UZ.:?P6+P'I[`@`JE7;D$&WP*PVRK9Y M[UZ&3=1SD6BJKNQ:M>"5M71MWW:,[_PIOYH4,.2::8P8DRGX^SA)R=$Q!)+6 MC+VL5@L(>+^80'1,+IO+A[1ZS6ZOL=MX#RZOV^_X+#W/LPKW%'R">H"#>H:( MB8ISBXTP7V!GDI.4&&Z7F`>%CH>WN;I;HKMW79!>EZB,X\2/-#SR42!$PT?3KSY1M=(@7T.OJ197^?34!*?XL8/ M*A:GV,9P8_T''&6YB%'K=K";Q6>+H7N.=E,:4?'>99G9;7S;]K?("!6[DMJR M]:GC_G&P(V^D/7'%X**'L^F>A_QV0^;/9T^/7OUA]KI^@Q`"X%W2V>5??P9>\-U\%]5G7U$* M+O@'#M#ID-2(,/1RG36N7?A?AO3DMU>(RZ&8PVLRGDA7BB'A:)L5.C((HP/! M<-BAAVG`)P=^/_1XQ70+?3,3?[5!:(MC2ZBRU(1#Q@CA?4TR5,23%D9)X920 M/0C(E0MEV1@?PN:$HN@F%T6H)R, MCJ)G-7T"6=FAK>T(T)]5^KC25(8""J=OC'95)SS'X%G8_J,'Q>7FFFOY.5.- M:-HHYFJN!OIEA(WFRAVJAHX@*:N/N7H9L#P^2NNER`J+H9RBCDK,>#*>QF23 M@EI5[)233F7IF$YJ&QV%Y2BIJWO3"E2IM;[AJ"VVQ*;;+5O?@EM@J*`YZTZ7 MY1+!)HFMQBJ9K(0^&2R[*RXZ[L&"Y)MJF?P.;.V_VP9\+;M-/&)G0NP"0#7.VZL2Z+\,J_\+K/QYZI*^S)$9?L\+`UIXP3OKMR"%SZ^Z[6L-E_@',7*J7Z-7K3-U1U7-+IC9;.`]<=M=P#PLS MW4Z//2K+$K)F'8ML.YQ4KW(W?>FDEL/VHXAB#PGQ>AQ7%QWD6:^K^6S(NF7Z MYYI7SOF+],['>(.0E5EYZ8"W\J;J:$HG)>";]BE\W>3T_:=EG;;IDNLE<:ZE M@G7MKO=^M+7$T.`BKXHIPUE?A[+N*X:K:Q>`S2Z1^9PIYZNJ!5$^R_H>QU^C M;.*,3K]-TZ./*]`7Z;^D_U137[\ZQ1P_W4U1^D+0F0K8OKN531WY\U\$;T$, M`+;,@N10C>B,1[]C^4TVGZ.86FKWP'-,$'TG',49,)@7%@Y%@R1\7M^&YJFT M@=!R^2+LX.->!T$7QH=C+O+A_X3H*/6ABD]R$QS33(1#I20K;C,B(BA26$0I MML>*CLB?!U\&J=[!R8$$2=D'_?&O$IJ#BHQ#(Q8WHT:$:=%'KNNB54XFOVXD M[8.2JDY.VNC&-?HQ<7^\8D>RI[HD%FUD>02>$X<7/A`%$AV/C&0,R4;)2KY# MDK.SI"8W>4E,>O*3H`RE*$=)RE*:\I2H3*4J5\G*5KKRE;",I2QG2S*8VM\G-;GKSF^`,ISC'2