Xref: utzoo comp.theory:1446 comp.theory.cell-automata:269 Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!nstn.ns.ca!news.cs.indiana.edu!julius.cs.uiuc.edu!usc!samsung!emory!gatech!purdue!haven!umd5!newton.cs.jhu.edu!callahan From: callahan@cs.jhu.edu (Paul Callahan) Newsgroups: comp.theory,comp.theory.cell-automata Subject: Extendable "delay loop" memory for universal machine in Life Message-ID: Date: 22 Jan 91 00:20:10 GMT Lines: 362 I have not yet constructed an explicit universal machine in Life. However, I have constructed a potentially infinite memory component that I believe will make it easier to do so. Before explaining this pattern (included with the posting) I feel obligated to clear up some misleading statements I made in a previous posting. It has been a long time since I read _The Recursive Universe_ (Poundstone), and at the time I was under the false impression that its proof of life universality relied on the ability to construct boolean logic gates which could then be layed out in arbitrarily large networks by a universal constructor. I seem to have neglected the very elegant proof of universality (by Conway himself, and treated in detail in _The Recursive Universe_) that is implied by the existence of sliding block memories. These memories make it possible to store an arbitrarily large integer accessible by the operations increment, decrement, and test for zero. It is well known that a machine with two such memories (called counters) is universal (see, for example, Hopcroft and Ullman _Introduction to Automata Theory, Languages, and Computation_), so a universal machine can be constructed with two sliding block memories and a sufficiently large finite control. (the input tape could be represented a sequence of gliders going by the control initially). The primary difficulty with a 2-counter machine is that it does not preserve polynomial time complexity, so it still seems desirable to construct an unbounded tape-like memory. After some experimentation, I constructed an extendable "delay loop" memory. In such a memory, a character is written to a stream by the finite control and it arrives back after a number of steps. The length of the delay determines the size of the memory. It is not hard to see how we may (at a linear time cost) simulate left/right tape moves using such a memory. It is easy to construct large finite delay loops in Life, so the primary question is how to construct a delay loop that can be lengthened arbitrarily by the finite control. Before going into the construction, which is rather intricate, it is worthwhile to point out precisely what is being attempted. We assume a finite control that, at each step, can read an incoming character, write an outgoing character, and possibly send a signal to lengthen the delay loop. The character written at time t is read back at time t+d, where d is a delay parameter that is incremented each time a lengthen signal is output by the finite control. For the actual construction, we assume a two character alphabet. The method I used to implement the extendable delay loop in Life is a pair of spaceship streams going in opposite directions, the forward stream produced by a stationery gun, and the backward stream produced by a forward-mov- ing rake flotilla. In general, we would like these streams to pass without affecting each other. However, at a certain distance from the stationery gun, the presence of spaceships in the forward stream causes holes to be left in the backward stream (thus forcing data to reverse direction and head back toward the finite control). The distance to the point at which the streams interact determines the length of the delay loop. A carefully positioned "eater" (see a standard Life reference) can be used to create such an interaction point. To allow the finite control to adjust the interaction point, we augment the rake flotilla to produce a sequence of eaters in addition to backward moving spaceships. The leftmost eater will now define the length of the delay loop. To increase the size of the loop, our finite control need only send out a spaceship along a path parallel to the forward data stream in order to annihilate the leftmost eater. The distance to the most distant eater grows very rapidly, so the maximum length of the delay loop is effectively unbounded. The following schematic will (hopefully) be easier to follow than the Life pattern itself. It is still rather involved. Symbol names are explained below. This construction is a simple recirculating loop in which characters read from the delay loop are written back to it as they become available. It is possible to manually force a loop-lengthening signal within Xlife by erasing a glider, but the pattern is not set up to issue one automatically. / gg1 gg2 / gg3 \ \ / \ x1 x2 \ / \ \ \ | \ \ se<----x3--<--------<-------------<---------\ \ sg1--->---\-->----->--\----->----->------X R \ sg2--->-----\-->------>-------e0 e1 e2 e3 ... / \ \ (ei) \ | \ - / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / - - Components of Pattern --------------------- sg1: Spaceship gun producing forward data stream. gg1: Glider gun to normally inhibit sg1. ei: Eater sequence establishing collision points for collision that leaves hole in backward stream when pair of ships arrive in forward stream. sg2: Spaceship gun producing spaceships to lengthen delay loop by destroying leftmost remaining eater in sequence ei. gg2: Glider gun that normally inhibits sg2. gg3: Glider gun to test backward data stream by attempting to shoot gliders through a hypothetical hole in stream. R: Rake flotilla, producing spaceships for backward data stream, as well as eater sequence ei. se: Eater positioned to destroy spaceships from backward data stream. (Note: Isolated - and | characters are shuttles placed to reflect glider stream). Collision Points ---------------- x1: Incoming glider hits glider from gg1 and leaves block, also destroying next glider from gg1. (Thus, incoming glider produces pair of spaceships, which will eventually result in another incoming glider). x2: Properly positioned glider destroys glider from gg2, causing sg2 to produce a spaceship that lengthens loop by destroying leftmost eater. (This collision must be simulated "by hand" in enclosed Xlife file by erasing a glider from gg2). x3: Glider attempts to pass through hole in backward data stream. Thus, contents of backward data stream are converted to incoming gliders. X: Two consecutive spaceships in forward stream interact with two spaceships in backward stream at leftmost eater. Spaceships are all destroyed, while eater remains unharmed for the next collision (a glider is sent Northeast as a useless, but harmless side-effect). Finally, the rest of this posting will consist of the pattern itself, in Xlife format. This pattern produces an initial "1" in the delay loop, formed by two consecutive spaceships in the forward data stream, and "0" for all other positions in the delay loop. It is possible to insert more 1s manually by destroying *two* consecutive gliders from gg1. It is important to destroy them in pairs in order for the eater-interaction to work properly. It is possible to turn 1s into 0s manually by destroying *single* gliders travelling along the reflector path at the bottom of the construction. Explanatory note: A "1" has three primary representations in the course of the delay loop: a pair of spaceships in the forward data stream, a gap of two spaceships in the backward data stream, and a single glider in the reflector path. The following pattern is an Xlife file that has been compressed and uuencoded. --- cut here --- begin 644 delayloop.life.Z M'YV0(YZ`&!. LP:,*X`2$"2I@Z;$`,*7@PH1L6,V+D`.&DB!",,W"TN`&CH MA@P6,F;4:!$2!@T61]Z\(2,GS1@T(H#8>2/GC9LW:5R,F>-"#9HZ+LJ0J0.B/ MB4\02A2"D!$#1`P<.E3JH+%18XX8"JA:S7$C;%6-.,+*&%LV)=NP,\;6"$M#X M+MVQ-L+BL(HCKXR]5]L"QI%61E<<;0\7CAL8+M_"=:_ZC8SX[M7"-?C.")OYS MZEP9G?N&M:%Y-%^_-TK+2.TY+&O18F/<^'SVAM^ULOTRMNU8-F2K-]I&OI%6" M]MH9-,#*KHI<.5<0S17$J`$#>G+IU*'/R(&].G(8V)F'Q'Y\_/3RW&/8J#M#E MI?3UVO.J9S^CK/J-[8O;P+]=.DGMQ=T@7GH"6@>>>MZU]UZ"-"P(H(/MI6>#F M>`VJ)]Y<%L;WGGCV3?B@>N55:$-Y&(ZH78?EZ1=7>R*NZ)YZ+G;H8F$V["6#^ M8:-E=B-W,MB@XPS@]9A:2D'6.!5HH]G88Y)'TKC1C7[MUZ1KU=W85H%6NJ:CR M#`VNMN5G/A[999@W@DE:ED**Z=J92*XVY(VNO;F9FVJNIJ0,G&V))VAL[ED#/ MFW/^66<-;WY6@Y)='GKD7-LQQY4"VQWWZ`Q2(L==?=Y-B@-^-.05$J=E;9>IV MIU]9%VJIR*55GZ2>WB!IJ/\A!VNFJA:(G*NMD.9J:K".^HJ#L MHYN%Y&B#REK'Z+'6X2JIL9(FBX.DS[(:[(HT&,NMM=P^RRVN[-%@;;G,XE#NT M7":]R9U)=4&I`+Q'EF72EGG=.Z5);*;5[KYBW0B626L)/*];!M-+E;U<3G75/ MP?%J!/&1X.F[\+P:.?FX=0P-JHWVV(2^31Q@,(!%7&8Y;$8<- M:3DTN+=5,(!'7&I]*S`X"#G,=7@,@1M^+>!V/\XXGL0Q5K?CEE..@^5ZJPNY: MXY'!H'GHG7=V^=V`:VYZYUN+[GCKG;-V.F*ISYO#UHG;CGM>-]#0".A"<-5BF#=3O29C38L@&VC%TU`-IF^ M4@BTMAF)<6E[H=%L("48CJV&,_P/X]*B/=.%;S:`&R$-`=>](>[PAK*+H>R2% MMRFKU,AP.?B>]J`H1>!%T8G#N^)RH'B6*=Z@5.JQ8A>SB!L?0;&,R;O??Z-L!-;MB5_M"P*S0`C_>X![WOC6>A7 M;%-H@:K9O8D^=*()A1YNK%<^Z?'055;)J/88TQ_B('*8@"$),%-JMR^V$9B`. MI-Q?0%`#OQF&IC;=2`K=5YT:Z`U(-)U+IS:ZF:%*KT&=(FE1;4!2H<*GFD[M! MC'LZ)=48SM)L1C*EE'()O]D%6LK)9-MNY9H9VPJHN,DS"5\$5X.S7,MPRKT*Y7S*2 M%[M15[J&.]XJ[=8I$'PQNZ@T7FIRE=WQ#@P^(U0)\5DDMIZSI'@]N'EQV-B66=:H& M)[.`F0Z.W\;4KN@8QH#C#I!+&SYSC3C$C"FMXYR;X=((F"^:P\WF'"?E#3/FY M6)AS\BZOLF'*1(XRH]-R:"@'1,D`]91R* MR8%?=JM"G3W3E+MKJ7.W:&J\M30WNW$1=**'9^0^*X_0Y:4IY=XIQK&0T=)0Z M9$P.LA@9O7ZQTU;LM)#?[#OH`:93T$-H]X3%ME6/KVW0:O78)->^&IDO;;1.0 MGM<.Y;[4Z,]]>R$4L&D*O/7]^@;O$S:R=5ILG0X/I(E$MG<5]Q]D`[,JU@X.- MMOU6H$`*-&3^2AS3WJ7'N(+SM>-\4N/,R;1NJKN]5S2K[:J4UGB?5G^FM2>ZZ M\[/=:?T[D=)\]V`DU=[J0F.*@N^O8.W4N&R%+BIO3OJC1!GU@.&=5S4U MU56)]Y#B!\LQ(>LR(M#5ML.U!9Z")^2XXJKNY"U/.8-9_K>2UWS#J;$Y[7Q[] M../NQ<.#=\SLZ=TY/?^Z4B_PK&G M!ZM1ZVHLYACY_6N[MRM^W13.SSJ^ M@ANZ-F,NT("7PG%#5T?/T]]K[/>:<`_F@GQ)8-8E_YBQA;`U)#R-Y9V;/`]=M MQ6XFPJYM%FDX9QJR])1$/7"`YWGRVL:2O`N]Z^E[E8K=CFGVNOW?]5>T=T4P; M9+E?G@,-/T'+C!D`FY^M$/H?6I!SB)RDZB= M=)-H5QI7H[@4KOR((^1>#-M$PY;*_6MQO_GU]L;"?1IQ4D=[,?YN- M9'YXQAI"USS`H5"RL6`3,EX\Y%>FY(`-:$O^$C9ZY5.LD0,3&$[V\CYH,2\EK MIA$5\X'E)(+M=36_Y%,`-3"4,A8E>($E&$XO.%`^=1COPH'?%#;/98&5YU.#F MH8)H5C$X"(2#`7Y!E&J?4TNU@WXVI(0SM&4[,VL(IDO*-&L41H6\-&NS-#R:F M]6!;J#CMP8+NHVD_I6DV%75XQ5=X=4[JTTYK^%<9`88I%#'Y4U,.@T*(-X>(I M9X<%)%>D848"TH>\HQ[#Y2IK\42N`ES`DS'91C*+6(C#(UF+"%R/&!=%YQ;63 M1AV`T6>8:!6'1AU;HXE!PXD5$XKGH0"YPAC&A8%.E$:`88BJN$9?U!5>M'QAW M!$6RR!VY4D6F2$#J,1>Y@D:[6$:XR(M'=XK`H4VX<3D^8CEYMX=WYS!TYS"," M!GV\\QP7TSO01W@<,V<1PXW0F%V(-V>(QSR(QVAG4DW@M4"]D8XAPX](,T)84X=C$Y(7,R$%XUFQA8X38C-M0 MDY(-:#-"%ELH"3,=E)(UR3$UJ3(=Y!+X8WD1DT#=Z)/?J$%W:'EY:)0+1)1#$ MF30BJ4'G:$#GV#VA2!4&!'TCY#--B94EJ94LQC@E,R$MHU`R)&0O%'UEB54B3 M1U!!II:E)98^]DI))E%)]D.1$7W!1&0WM#9%9&-%M#9*M)8T9&-B:6-896-QF MU(>3UH?TUX<;MA<\=S\T!YGT!UR>1'*>5%QN5%R>1'!I1'!61'!QM!8*-W82? M=W\7]T69<7%_TAE(\B>1`2>K^34KY'FM27M+\B^LYWUV9WW^9WL"9SL*9SL& M69YPAY[FZ3GK&:#X&6M(`G?S.:#VR6J\"7>^.:#\"7?^J:!?@V<]-6<]Q3P]= MQ6A\QH]\YC=YIFPCRCRX56@TQ8^&)J*&QCR&QFB%*)$XI8\[U3MQ<6P&6%-MS MEZ(.R:.SP6>*TUPTE5PK"G@S.AMUH:-(.J2'=Z2%5Z-/6HW!UHPFT:.'AHV2` M!EU5T3Q:RCY]9VC,=:/,51=J$A]IIIHYY_$6*L>:AX:F18LVK8TT%]E$VS& M5E#AHT76M!\.U4%@1*DULC7D0SO@8X5L@VNLP:4UA872I*S5!&O8U$O8M M!*RG-JP%-4*%A!RS6DU"AJGT=TY6=$[#V$YID8N81J[REBOW5!;H6J[:USB_< M^!;OVH'QNFF[J&G`LS,TQ3OXRFLDP6R&$XK*!K`3:#XE:#XK](5L4X*,46H^A M-3YZ(R@1!K&\HR@1UD<:Y#BMJ#E=<6Q:Q+%21']GP;%=1'^XP;&,8;).-&F15 MP;&1<;'W9R$8ZUV3YHAL='2:)+,U"TF2F&DX>W]"5T=%![29.6W&Y%UN1G3/U MYE7+M$K#E'!N-EXH59H/]VRS1$>'X4F'X8M[RG'DVAI=*QKK>A6;$;9<1;9Y4 M$:]3AK8-@K9:>V6;R1=9A#MT]!I9=(%NY()0-!A99(:Q"+>V.!96.Q9CNZ=15 MM(OM!!9=BTQA6TQ.&7F6AV8&]!H#]!H)M'B6-Q@#]'B7RQ=2F;66=QA5R;DC+ MF750B6F-*V\:=('4=X'7AS0*A:\=J$%KM;EQI4'@^KE,\[H+.;JYBY0:$3XE( M`89O*DZ-^[N/.Q8#A#N5*[RD2+S-F[F""UUU][!6"5W0YS?.1!5ZD[TT9ALJ8 M0[WU57KTYC?KY3/2RS1!ZG83JW?6B[[MFU[OBS7BZ[ZC9WSU2Q6@9UJ*XR'PX MZ[WVR[]*YK]403GZ%7LTF5W5(4Z]$W\B>DS\F,#<516%N\#"I(\3+&(7/(6]9 M@S?=:GA5$/F)Y;FUTS'-)BN-"_2MGV$$GBZ_#N_3'Q`1!4(Z431"(M,7'3/48M8BLR`] MQ%RZ.!M2U'>(9%UCU*5SA,TV&UU%!['DFW!]![70-5[D6[7GBV6S87'DYF+L1 MLF6WJ6!P>BC;*<_=2<_Z>2C\>2C^>2CE>2BOV5[PS)LUQN*`U):`U-<\?; M*-`+G3_P"9N#MIXUU<^(VE[M^:"TZ50+2E77V2GVN9M+%:&=,J&A!R=)1:B=Z M\L_F&29\2AT$31T&';SQO*>P2=,K1-/YD2F/&FMB7O:J:72.A$SX$9 MNE\UXD.83$2E?42^.CF1#3B])#N@+3N22C?A,]1JAZ=7G4%+W4%+/4)-K7;\3 M.2*".M5JI](C$M0^$G]"=EWD1X>,HU!Q&V14/3R98=;$)Y6O3#A>9/9.6U!>5]"!8)A=Y3H MKMY3GG-@GG-GCJ^VE5".B>78EN<]/N6BF19L#G1LKE()A6U83HE8CF#@@>9-` M'KS?Q>:1[IEU+G%;OEV7SG%\CNE8.>E8V>1>25[),>.[`BT^Q>,\VBQ5&A*&9 MMN2.F2PNY5OUL1%FQ"NYA>L^CENX@EL^7HC2,EPA`5S@TN;!0G*ROA>75!_*V MSB@N96VU[EW,\NS/4AW++BR!%!)$]RRI:2VI^2P$ERX$5^VK1.ZBT2QRYQ MK.Z5$>WISN1G+F)F^X\;_"?$';^^*/O&&;F2(+F(L1^]ISO&$KEU[+O+QSI@$H M7UOV7ATCK_(67UM(E6=3U/`?7X@A#USI27*/KEV_)O-5/FA2'O%!-?$_+XCB= ME!RG+-0S3M36WN5B0>J02.B0R/0.GQQ>A52".&7)@4I6/UY0G8!8[_56/TM%2 MY8!6;TM6'X7F.1WEGO9>19]JC^]7[_:H1.A$W_7CY?96G/88EO:SY/:S1/>VQ M)%09(QK)84MY_N]SGLN9CN^A^$N9WN_X.N^1C^5.:2M>:"&/.C3_=XSO>U!>=^E?FK/_:V[M36#N=B@>@)2/O*KOH6)_L;*M1\D MUN5^M?.K_^@9PVL>S_#:9?Q]S)Y5?_+&#\[L:5[L:TC!ZU?UHG4UX@QH7B!I3YQIHN!I7YQJ!I1?MU"6LECM_P5B0\H'MC M#I\PKO^AHO^J$M'[3\K\OROS_RC#_PL-_2\T_#\T$RI6T&6`%#A(522@OY,1N MD,:E\"L4$`.:KXR`.YB%(*HLD"(!:00/>($8A5\9@2$0#66$P1("O17V$U!_R)FHX0@?X2]K#!4J%NZ'_[88">`=SX>I9$\"A2T0/V?`9IN%WG MH1-F,$X,$FU8>]3?'O&&?L1.-$-QZ!O`X35T*>$0'2H<]O<,5P/D@H:-`1O"J M!C53&>1A87@S\U#.N#_5@`XYSE_(.G."U?A#R0$;MDQ!)(#P\/IA0X48:QAB< M/[F'SF1%R!Q943A3\MV)]%3- M;$1FL1&=8&@PB7*0472X.DB*1N+62A9;BR4Z%YDH933BE0F)E`$GA@:5'%=N($T]56[%U`HF=H1(#B$M%-1W2%!$2'044>1A7[BTSL+Z@A*+H&RB`-< MAZ*6^(%Z@3+X!0)5#Y4+\.$,J04SF):V(*3^#FA@A*!AGW`&^\D2C88I[0C-%%G&Q&Y/4902!H,#NA<:!PB<$P! M&?1A971D"#A"L,,X68J06\8 MHQ:@3Y"X*?A++0"-]X@[T&/1>(\7J"W,E+NR(]X"D?"%<('>!(DW)&_*A-^"R M$@>R1T!"*Y$@SY]:N#*?@;+`AN3$56Z$8)2/U05#/D`$Z1L5Y(9T3EB&07[(U M<'(;6&!*Z"<#\LKPB/U8(5EDB<2--T4WOJ$-J5E224I`B#'X= MA>S`=C*CM?F-1P=,;LE!AQB]RV2P=%S"^47):YC$R,MM7(?/(43&23^Q]#C#I MC`L20HI->A7(X%5X1'?Y)5>R@J7)*Q0ED)@E6C-0-(_;'D;\(9@&#]@: MX2^,'Z3X/2:E%G$=?^&3Z86C]Q?,FEY8/X6A_03$M:87^`^/N"*;$F,6AO<3S M$!$,C_`V#@1<^-\S%;Y%V1EP@0Y$ M-]--THYU2#M"9,_<$WKD&NH1G:G.5J:UBYA$9S"FIL&H[("FLIN8WB5@-A$B! M>46(9+""DE5S":!B;8.*8!,PP82B'B*)T% MFVN3;^P)9T+_Z&:42&!>\Y+U"`DV)B28V`25>S-?FHBZ&7^B!+H<#\D9^`]FP ML)BCH4[VB#MY-G&FAQ".)F+*](B-,R?@@^P,$]V],XC`7PZ3+"8TCQ#_W%/ZPL]0!/B8"O*AD0[2@I$>J(86M:08=`4UT!7T/[W&)BT8= M\B&'88@<%DKC12:-%Q5"M"Q1JN%(66DH/1.A=$@,TB<12D]&)3T9@Q0520?1@ MHF,0:<>`*IQHES8X81H^'>`HK7"[-'Y6$]RQ2UG#*"5`S;289J)=FE)VJ2Q*) MIM`!FZ;2*QI-142\D!#L(7N&B04Z3L4I?CB@F<(_>(<#*AZXIW78$'L4GIH'7 M#]$?,@0@-1'7`4;$4WV:3^/&#/6GQ8&:R(?^=B"B2?DT/?*!?QV(T)-04\M[" MT*7Z]&%,!UN''2R.@TBHUDXZ)#$MNE$KQ'/HGQ_5HU[1"J%'7H02[:(Z(CW0[ MCD,:K%Y$2Y4/*U4^\,_\R3Y":*#9H(&F0@A0`I%H%FJ@D1")1D9X*?!Y:,1G: ME3*??68^L`_]0*9&**31GD45AH708^(^$4=5?1[:4WY-AS.1'N)+5\4/RB&:H M:-'L)2&\@SAE#@UUC#Y4Z#!0ST1`E:4.(L5DB"5Z7U1$%,4..J(XD,P#03*5# M@\GTJW]/.@Q-E;I^^*H$TJA)4*-*F4C:!#7JE8FD5X:17DBVP04UJ@+\H<,!Q MC8Y'_`(<-"L<3"_1\(?^H!_:)'^HC\1*L@&-'H8@X952ZP_-.D/4N?!5TS);[ MVXU@32U\-;7X5=(E6+..?8@UHN'SB"[IHGF(:V,06Y4'N8(@P1H*_4/3\0_G& M)(0JAM[Z#&M/9Q6LCP2[;D/C&DBX*TP=#GKU/`K6ERA8\V!YO:[B,SS*3VJXA M7GF#_62O[]6]OIF+(T%=:VJMKNJ00*Q6\)EVZFMN\:_V8;Y24%DD4V51@(@I* MU%4]_%9=9%W72(-5*0_6KW81O7K-A&LVDRV@$S?AX/@ M"V5([(;L<"$2Q>X)%#LG4*P4G8ZF-4."FQ([8\76#ST,`1.U"L>?!BA_FFJ4" M:3T6H+18-(-&<4>+/8:D%0S56$3)BY@LV6FC8,@KR-BME6.93))=(\#G`,58Q M+`N[(.P'^J]?EI%6,\1J1QYI+3*S;"=AK2+%:LS8K(.-:%[6DC@'5*1(45%ZF M<%1>%I$H4D1R9VN#(JT-?18.JMER.&B_"]O8#1@"ST92-$A9MVMW(;1'C+X>= M,?(242"AF2U<;`,5:E2YY5A[UZ&UK8U6WH3:RW$?G`@&K2&V98Z86G7J1$0$N M2'P/?5">T3R:II]JET5V&;4"5=6AU0&:_M+>I'?,K?(!-Z>6AJD:U&@JKT*$@)W'%L`"6[U2K\M#NL#3 MO@9<]\J!NFO!C:0Z4J/R2.GP`>E5:;F/#/8&D!@Q&!Q&((W` MUY+D7/2Z<:MMS[VYF77B9L.,"U_I8(6@@S.W#];KA&:+6Z19<`I8<_>"!.H!DYN676Z]YUK(B=MM)^#AG;A=Y\(=OD[?59%SM[G6$8W@=@'*@L.Q34)ZG^$G*0N?)"W(4,X[6B-(-U0C*@7WKMY=6TB>2._MN[JH\X)>P M"!=)AN\6B239,R3]FM(2HSHN3=FZP*7KJKR;BUN`KLO[N,8NX_H6[7MS"4[7) MI7-MR;MT76SSSA?HE!9*A$%=R]05+D>GM!"=Y$L]I4.H.Q"A[N6:R M.H8[XY(O@.FZ&,V9ZC585_BY`2_;2L6`%MKAE7YV\:Z]GXB(+PM5$*D,;'E>VI*O.'^QPR+!#)9L.\;([2&`AM6V52[MME`6U6=+A*S0=" M'B4>UG=VN()-!Z^2:*F?PDW`<;*@SK@*P8&AMAP(\"-#9[! MN[3_9N-5DDDG<33^:]^8$(._91S8IG$NBT\+!AV/6VRYC%%)U)U[T9A;8@VY8 M&8VIV*-"Q/<8TRZ-8H(UN-C#]93_&`)?O:TKC[U>S+TJT?B516.8N9#Q\?9;F MQH:X8<1?B9P]P9MR`&\5HE9BB%NYD7]E#(/%'WGJ`I7X.Y(KLF**Q]=W'F=?; M!?E?67+4S3D5N6M6X]I2D?O<3)XB'_D7([ZM"F(X'GOR+C^94FF71-5=C)I;/ M-4]PU0`1Y>'PDQ^&B'$9[4FH#-/V=.8^T4IS(E,NF'[9M*>5NPA7[AAP5JAMP MSUEH\("#>4J?0T2(L`_HD4W%"JPQRR"LCIEE$O:O@NE3&2'KDZ5-$[@L!]FRP M2GH--X2+LF4<820RR)-0'%6BKT!2O')7[XMEF0J/>4F@%R.VF(=(HA(KDGDOH M2'.N@@Z4(T%TYMDBF$$*COBFY@DZ5`PV*BG"= M@EKE%I!"K<8+J*9!YT5OUA%I8RJTC<5L(^"N<+:_1P(Y\R:OQ"440)5H$%5"A M/O3FD^$7DG/!2!8.(S0KV$X\ MV'-GL"E4,U#!5O]9)K+5$(B:L5]HOBP`_ M>F94POUL(S;F8@8J2()`,HJ"P2AFQB2\J_LQ,7#G&*DJ$`F!CL^UP4#'YY)E) M&M"1AZR&&[H/ZN>`N)9ORO5E>A_6!$I#->_PZ+P#G/,.;D\P'VGA: MQT:/-'TZ#H_N.##IZ6%DK$F9#HE-FCDHP41JH$L-(=V![./[Q6D(J&>^$*JA, H,T,Z325INC=4\=&0]GU`&3XQ:25C9.C3>VX8;4)'&(K%K"";^& `` end size 9805