callahan@cs.jhu.edu (Paul Callahan) (01/22/91)
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*<X9`I62];AR>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:.<QPE;(=S+&_,G#\;L@4'UP552"?++%))X=\<,$/FQ07C
MR@?/O#+"+BL,`\CQPC"RCC`P#/3(9P9]\)`PY+O:5$:S:-7#[74&M4I/7TIU_
M#"ZW1QK6N]9G5=9><ZV`CU+/1?;3>?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<UJ]]\Q=A
M\`X+3@/09?6.-/`T#,GXV+9912GT6]<'/6O3VQ"<]&5I7QW;8&E_UG7:XW;=W
MXCE0'A((QQN^'?OLEDI5_"KGF[[##=9P__RVVVR_GK;;4MM$Y["TP<!F9CN@"
MQG2W*-N]:6!D::#^E`1!)<7O24BR0>".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??<X(@
M'+OES8F\>Z-L!-<W.$)Q.((C#'`4I\?<.*XKL_DC<'C71-FD\7N!_"(BXXC(,
M--9&<6#DS1=KDT;<](Z-?ORB)=.X&[_),9&?C.-PS!8]T6B/-(2Y'@A,29Q5+
MIJV5E='>7E*IO8W0$EHX,-OF5LG#76[*<+U#G.""^15@UB5]P,3;,/D6/@U*R
M+WSZD]X(%16#C,`-,#/H8#2K.;`^(O-0@,G;O`I9S$-UY9ODS!\YX_>]<FKQM
MF^_,WSOI-Q8(G@6>]Y3G/>.'&W'JKS.Y^R=>;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<S$$HBTU-XJ\[>]D%6LK)<C5#C?U<J0#<RE;C5<W
MQC22/)+1U7"Q(8M<PZFXJPQ40.?LZSEY9]?<N:J=A,TG7N])V'[:M)^*N]%?H
MW:(1LV6S:F.[K-B8RAB7<?9KX4/.UP07@Y,=4*X%<YV`4JNW:C*-<JX-F=]*`
M"X+UR+4J-$1M;9/G6J;*-2Y>9-MNY9H9VPJHN,DS"5\$5X.S7,MPRKT*Y7S*2
M%[M15[J&.]XJ[=8I$'PQNZ@T7FIRE=WQ#@P^(<N7H$*&IQ06;85QD^V\F,JTC
M_)DH9.RZ;]+F.[/]$J<JHB'.6BI3N54RL2X$SJ6!7[?@OR'S<%R%,"''RT3"^
M18YPF@.PWWS9.02S;JQC\]W3%)K0T8;X>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`<VL1WAZ7@?F:Y+6R-<$93/)*W+[>]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\<VT%>[/=:?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../N<C\F!SIQZJ)2U`G(<0G/8\(U%\X\AC-RX>Q<.#=\SLZ=TY/?^Z4B_PK&G
M!ZM1ZVHLYA<U34=-ITVRQAD;95V571OYEP9NG[/;F6>CY_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'<VV[NQR?^IHVO/W6'^TG/\R#3>+C!D`FY^M$/H?6I!SB)RDZB=
M=)-H5QI7H[@4KOR((^1>#-M$PY;*_6MQO_GU]L;"?1IQ4D=<Y#8B]O>[,?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"]<X[,<XZ,YCQS-
MYCS,XSR,5AWG,VC=@FCLHS=&5FK(EAKY^(_LXS?O<X]N9SQNQX_JQEWOEEWJ^
MQH_]93S]A6<]PX\`Q6@JE(Y>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<HUEZFEQ+SA6+VY6*Z&6.ZP
MV5GM!1I?PRX-@S7%R9HKM#2EQ3`V!C(Y!C(^EC+'63-?HS2YZ3&RR9U8DS^Q<
M`9MH)Y[$J0"^PYI")6+*:9[:A35%E6=8DYZ=E1>^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=<NJ2.5GAPUZ2/,AN9T6=*&9]"N9YORIN9!Z<:-
MM*#2)Z<;Y)Z6%Z%U"B<:Y)]W>J$A]IIIHYY_$6*L>:AX:F18LVK8TT%]E$VS&
M5E#AHT76M!\.U4%@1*DULC7D0SO@8X5L@VNLP:4U<FJX=FJK=FJ]A%"ZI&J5=
M&E(\I$6U9JMI8ZO=`T:H]JG2(V1]$5(*):H*4B/8`ZD>A872I*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?<A3<=5$-`PI:9JD,A#%$CO*G0XV*C=A8CS,(=!%)8,VH;)5$;]4,D)3A?+
MB%]AR#2\D\-&@VP]XX5`<ZBRTS8&N(1P!SAFD\1(/'Z0A$IQ6\%?Q(!0-%YU;
M*\6JF$I?E(5YJW]_"W;\%[C%1*Z%NQ^BN:T#IE!O=''[08G;NG%J3'2UBK1C8
M4T=8MA^IN:U*6\=>=:GA5<?Q-T+W<W[U)\CFUS9U1+R);#;BILAX@\AXP\A\6
M`VL.#(7=-VMX8ZUX`ZRF,ZQ\8ZU\@VM\`ZRM,ZR$8ZV$`VN$HTO?=T,#1I8`=
M>$/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)LUQ<X>N*`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-/Y<WDUO<\*)-$\Z=/,:9[A*524M23=0
M(J#=8I]V]:!+C53AB2?=4J%%#=7):=+&R:=?%,I0Q#=I1#AQ1#A=C3A6M'Z0M
MM'ZL*-9_ZW[\%T?\IZX;=#N`G,MF?(5S_4MM+-=O%$MY7:L"6,<(MJO')*FA`
M`ZQU.:QU2<E/(X6`"<\JR=BP5C:SMC:@_#2PYI>D2F/&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<W[/G3:*DCL^LG[2S7^117*/2'2"I
M8YQ"9YR5V(?;+7.N@EQXU8=UU8?`LS1/Y%X]Z=[\`]\WED+.`U_.@T+.HU[3R
M.R^*0A5S6'<H=+V^#1R\;4F\W4F[.!QXDBN=,44,CD6[V!ELERM;8T84;D<75
MGLT97HQ,F7:YTK)K*].VE>&V14/3R98=<U!/\U'?TS&\\EPO;BW5P7'-HG`U0
MKBJX9"T:%BRB&2J/<W'UP9F0$CU`OCTV;N2U,DN^XE)8EE!)*E0\^2?F&;P[!
ME5!M2I],>;$)Y6O<D5"%B%0$E%L)19E3#EQEX>3#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.ZBT2Q<Q>RYQ
MK.Z5$>WISN1G+F)<Y3L(1I_:51GGN4I=KEV%ZSNHE)ZH9.]0S)Y\\^COHW#W,
MB?`E=G&^D\;]J>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<W.G]3C(EE]0PURV^+M2%R
M>.: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:<Z^,TN[(ED8""G6?REN?
M0:_9=$R>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<AM
M$-2$0(`B`0&*I_B`YPX'A@H1.&4J(%_P@(,A69Q`&F=7SEUL,(+.156@'2,HR
M94(%[,(R&4'*",$J$P*OC!!T6S%0\V0$RK`#0\,-1(`SL/(`B2&4!66#!QPE*
M9?"[9`0)YP$EW!=<+B%P:V2[#\@;."!PV(%R4`+*P0O(&NJ@"+1Q?_#_<8Q=T
M46(&V/U3&810)]T_Q'((_59S`%R-4"-X"@!X*2):X4(._800]I-)J&D((66HK
MA)T&/""'3D,(0T,E!"BB4`3U/WJ3"-_"(XPKF-`5#AI8Z*BN'W*(2/=/U$#`J
MV14AQH*J>!_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'SF<?;I]_.'W@G^$!$A)N5\@TM@,DY*!&E(.^@A>1%R!Q943A3\MV)]%3-
M;$1FL1&=8&@PB7*0472X.DB*1N+62A9;BR4Z%YDH933BE0F)E`$GA@:<B&9P@
MXFO8$[3('R9%F=A.9*)B`1+]!"<Z%DC1TXH)201#5U$24L5.@Q,[#4L$*"Q1P
M>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`&^\<ESHEPN%V/.
M$=.`AH?(&2929^PWG$$7@H:>D2C88I[0C-%%G&Q&Y/4902!H,#NA<:!PB<$P!
M&?1A971<M]',9,9X**2P2V14#='EN:S&-?,:<2-S$X['T5"$!D.!9OP$FDD4#
M1Y$SO(9`D0Q;X\49C00N-F9#[!@.F=LU+#RR(5"PP=-X>D"#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#<BI:#'E+(BR:"!7
M#(=7;1UZ2-[`(:^C<Q*2?1`]]L$5^1J"1!*;(K-1YMQ&*/D<G@B7`$UT(>'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<EM+":9L7#]1D6I7!AE+8N-AK(W-
M7H[?J-H*Y9QX#JHQ.^B51*D8\<]D3#^?DEX92-LR*B.DR4.09N1&4"+]*,?4Q
M`ATSD$8RCZD%-*D@K^'2$)*B*4)2H@B9<")DLU,+,VY%)K#W"&!6I`1[CP/F-
M-@P8_;AQ=&4N4Y4+QD(^RX91#XT3H#1.BE)!7LN"MQZCY4UID88O0#Y+H%(M\
M&9A:B#_H$;D]2$\)+3?E]EN1QZ1+@+\(Z?U<)>)@E6C-0-(_;'D;\(9@&#]@:
MX2^,'Z3X/2:E%G$=?^&3Z86C]Q?,FEY8/X6A_03$M:87^`^/N"*;$F,6AO<3S
M$!$,C_`<BE+!V,A@92AI!Z+4(R$SC(4%C!DD_(]>V#@1<^-\S%;Y%V1EP@0Y$
M-]--THYU2#M"9,_<$WKD&NH1G:G.5J:UBYA$9S"FIL&H[("FLIN8WB5@-A$B!
M>46(9+""DE<S8IZ^OY!S:$3!'!,%$TR<A4GI>5S":!B;8.*8!,PP82B'B*)T%
MFVN3;^P)9T+_Z&:42&!>\Y+U"`DV)B28V`25>S-?FHBZ&7^B!+H<#<FH2)B?;
M*&%^V@)]48B/DT?`ATT9729EY?03\8<Q'L[BF"DK&6APF*"!8H;.>\D9^`]FP
ML)BCH4[VB#MY-G&FAQ".)F+*](B-,R?@@^P,$]<P3,!.@B,Y_UB/$$UK4S3-B
M3=%4.T73F,B5HX$2*4XS.1JX6_.4=L\SD/2(U!0P!]F<&&1X8CGP!?]P3_R#@
M^?">V],XC`7PZ3+"8TCQ#_W%/ZPL]<DT_`/0\`]H!GZ.S]S0/@U)^%0S!.(XU
M9$^0HB#$)[8RG_U3VOS/8#)`V0.&`"(O(GI8$_N)(^SG`FTE(<PW0`?EL,LHY
MZ,S8#&9P*F#0849!?\1[(%,'PE80B"T50K?4!MU2%2*"R(<(8A]4T0I5=M)!Z
MW-R8RA(^;\\,U3T'XO?DT%840]5-6-A3?J'Z!(G+$T2=2PR=&<6ACB0J&KH:.
M8FC=Z:%3H3!4'REZ,I)H:EB@$812H86ID!Y4D19=/M/#K$"'SQ!"PFA<Y!$$<
MA%)UI`GZ0U=$]@2C+10_)%'\T$4W0D81H]?!K4"'MA!"\B@!R2C59$78AR]DV
M'D2+]6A6T*$X%$+[D&>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@$</*%\[:D7YH"\&LE8>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"<MJ(.T8KT`X%]#[<(UQXC5JM@>>T3R:II]JET5V&;4"5<AY"#I[8/+
MBHB44B(`"3K]AL"V16Q7VJ-PE.IQ96G!U8AP%?7P#A5L:?"V:P;<II(PXKC(%
MK9DIM>=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/#/<B15Q/*UP>8&D!@Q<WN;H6?,MP`
M.R'#)84,E],^)]8X<D%@:7DZ#)=$,EQZ6UK.B7+`@1@"!\H''F@?>&!Q&((W`
MUY+D7/2Z<:MMS[VYF77B9L.,"U_I8(6@@S.W#];<E')T4TK-!23VP:Y<$JQ!=
M>KA&:+6Z19<`I8<_>"!.H!DYN676Z]Y<EK)RG4C,O;4M%\*EW6SV;_#$O]D,5
M;X2]*("X>UK(B=MM)^#AG;A=Y\(=OD[?59%SM[G6$8W@=@'*@L.Q<S?K@`4MD
M\ES`")9QO.-*Z9JB)&F*G&[E?8:%Q-H4$O*B12X)X\V[M0'NRM:Y*P#G+D*TK
MH8WW-2S>34)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;MT76SS<H$GPQ6>SA?HE!9*A$%=R]05+D>GM!"=Y$L]I4.H.Q"A[N6:R
M.H8[XY(O@.FZ&<?Y3AGYNTKH;P$.N0=XY`Y@LC=QQ4G&+1S,=^VM7PDL7-JM[
M<,&T;R_F[LD&C+ATRMG2*;"WI^2%*R)L=@XN4G;@(6AV8/%KBG)?XF7!57/Q=
MXA9<).=V#NSM?)!)72$8Q(5@%ESR$YD+SM(%J^^R,]55PHF\("=HCBMEAXML+
MR0INO/OWBC3>,V9ZC585_BY`2_;2L6`%MKAE7YV\:Z]GXB(+<WG!UBQ15X%U3
ML%[>PM5$*D,;'E>VI*O.'^QPR+!#)9L.\;([2&`AM6V52[MME`6U6=+A*S0="
M'B4>UG=VN()-!Z^2:*F?PDW`<;*@SK@*P8<QJ!_.GM3EN1QB35QX!K`!HK2?N
MV#F@8(WJ@J=#[-/#:59(J=\\:8FW#7F(FJ\X%5.BL.H\V89C4J2V+J!^N5?\?
M=:G+]O7%`97D!-0.I8<OUG3H?>&AMAP(\"<?P%_4S632@5]&8W\9C<5>-#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
M<!0Y6I?'@ZU8-=IAUKQ3(^$>2'.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.(S<G*.D1FW6,5/'-WADK5X^Q$4Q/E2GBSJ\)/'>0KV$X\
MV'-GL<WH:&%IY]D\F\,'"%`H5D$O"&;X>"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)9ORO5<RX+H@0KF!+1`-3-?9:.%AU+EZ-D4F@4%MHH;%
M0MD[Y+F:FI6O0YZQ'GDFHR1IV1=/UP>E>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"";<Z/."V>^&
``
end
size 9805