(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 6.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 99683, 2063] NotebookOptionsPosition[ 95471, 1934] NotebookOutlinePosition[ 95910, 1953] CellTagsIndexPosition[ 95867, 1950] WindowFrame->Normal ContainsDynamic->False*) (* Beginning of Notebook Content *) Notebook[{ Cell[CellGroupData[{ Cell["Solutions to Exercises (7)", "Title"], Cell["The Game of Life", "Subtitle"], Cell[TextData[{ "M. E. Mauel\nColumbia University\n", StyleBox["(with help from \nComputer Simulations with ", FontSize->12], StyleBox["Mathematica", FontSize->12, FontSlant->"Italic"], StyleBox[", \nR. Gaylord and P. Wellin, Springer-Verlag 1995)", FontSize->12] }], "Subsubtitle"], Cell[CellGroupData[{ Cell["Introduction", "Section"], Cell[TextData[{ "In this exercise, you are to write a program to simulate the ", StyleBox["Game of Life.", FontSlant->"Italic"] }], "Text", FontVariations->{"CompatibilityType"->0}], Cell[TextData[{ "The ", StyleBox["Game of Life", FontSlant->"Italic"], " was invented by the mathematician John Conway and first published in ", StyleBox["Scientific American", FontSlant->"Italic"], " in 1970. The game made Conway internationally famous and launched a whole \ new field of mathematica research which includes \"cellular automation\". " }], "Text", FontVariations->{"CompatibilityType"->0}], Cell[GraphicsData["PICT", "\<\ J_P000000F813@0A0_l<0?ooool000000000004=0001HP000000000OP0200800 01h00@0:0000005R0@f20000JS000001000000000000000000000@0000000000 00000000@000000000000000000000100000005R0@d000<00000000005IZL6EW 0000000000000000HG1`K000000000800@d1HP180000B000001YUP01351XKgA_ 82dPBU15A`000000000000000000000000006?ooomSoh00@BTI9AP010P40B018 003of`2400<20P820@<20P830`<310L410@410T61`D72`T;2`X92PX<3A4>30`@ 3@X:3a@?418B4a2lALe>7B39CHgHi:R /[?2dPXHMI>S]4Afh_o001480F813@<18P024@434@7ofP0<0`410P430@0o0?WG ^Q^;g][cigPi^6OWOFfPj@hB>@@_C[1UBc^j^l4S`?Q 1X;6^NR5<_=NVg8b[KP1W:M>Wio=hPZPQOJT54F >UI5biB_U7UIbCLYcWHG6MdIHUUB3d=bag@IBZDQ6<:2T_1`P C[8h/YmUGhOE6OENBnCL5cHUa^g9]e6nLCkHnQkXTIMbl=jTd4P2:Rg;^QT[d2?4 Wjh8D:@P9_aS[H`ik:h7K5KGNlHUL=hDa3Rg41Xn6cYZ HQTP[=TaG^2eUU?50>]G@50nFRKA_LijYI3R/id@5 ?WBnXd5h`]eP8EKMW?Ymd8]?8NnKQMjFLU`=k3970jMKSY2^HQ_9HgEc]dPkUeSW YYl8:jf1:]S9g[Vd:`Q0G>ld?XM8 3VkF5i3mdF5naU[Vo`1DEVY]7N60Q=LATa<^?^T^7Do__3^YHNa3AY9ZI[52ZC/E6LI`O/2ZfZeC3F5Z_EI:QBgK:[H^Z52NWOGDmanKU/ l^7]glfLUd4P[b:elCFZUj;f`^UkF=XALZnl6Sa=:b/g?E5^BTIIjHV7STKJJ@EZFO029Gm2/I;Zji0HA[AVVf` jYS/3^L8?8f]bdac PR_kCj=EJIPg5E@KLnDgiMa29bCA<1^JLIGkNCR_K[7XkdYg]]=1oUU/@HEfG^Cd [;2Dk7Q:@YRP:Ol083TWY^Do11gVAW;[M1cUOBNf[nSAj>N09GK5=bN 3LCUSI2oPjOLgeLgWbW:eAYW];7cBMfDk`U:kWRl^6>SXl9icN0_7_OJ9j6f`?0l aSK5dSR=5DYN2iU[4Sm8CDRWOHHVi5`diHMkgJW9Y3J?0MXJ=[6dEfMm5gIOQ;d2 :S]KaIP747Jj1;hEa0o9o:Zb^MT:W_@n>16jKA`IVK;F]>Vnii8j>SaGVPj7217X [d`=TVbkHM]0GQ71LZg>^E^KnGj7DFimah9`nl`bZBcRmRl]AOcL]6dT2baKcR8j >SDFVeYFQa;Zd>3^F5bV;?Q^]Cl/kfZ@Ve]>8dFSVTWgMHPVf0U`95[Zjn?^SV7g 9Eh?bcGQWblUND:;AV4>Fg2Pg4J4f[269G=gR6U2WccPoWT_jT;n8o6l=:e/_VY6 WM[XLf:PdTI]dj;;:OQXHQ>f=ZUmlf/UXmfjcN9>Rh^ZU4NoD7@F^NiL^FoloM3C M[KnI>3N9NG2[B=db]]1iaC:=BijWd8blhl]aagSL J_`Xl11JeAYR/BGbM:c4[;4^8c_C;fjKA[e/Ef/87H7bY/9]Ho J?h`DC5cVPcL__51/`n`mP3IAAfTC>;/I8[[`7ldTRhe;8mikjoQUSE/>kF]Wf79 3/>DiYIViibHJ;>nOmP2o/SGjha:O`i>BE6=AVi^C@U0/ 0]digOfDRdBUF[d[Af]g;^XGHWWZQE3FgV/g02km7g@;nG/lZFdTP]G inIQi4;4MHkfc@enl`KMUC3[_O;FGYmL?6]cI@L12_j=2=MH:b6DDae]>XMbLahN L1J>4ARD=f:MkK`<:=XDE[^l4JG4:5QKKNlo[=M?O2WI40/YEI6liZc@F1Q5KI^L g?[Y4M>B>lK^4SSjA;k]Bi_8fS8BNAi`@8KF]2EndKAd1cRZ?Dd5b;ARgJ;Sc66d 2UhVWZbm9c>7Y6GYM5CCbII5;UF1IYYRfZ;JVonHemD_SeAa:hNFYQ`:L5LcKhLh9f1YKfKYc]J>P=g4?ELG hm[><9;4MHaSGYnZdh9k7?C=AMMOU/Y^WM^4gCHjj@jod[kFfLG>em_JORi=DOHC ;>cX[La_W6PKQ/^IkU89>WW3QjW8:Nibi`cLXnOX?gAd5gL@EC[^8JcCiFD[5LZ4 na8kc/[Dc<[MBa_5ig05HBT=XN9iJQ[IE;ZYS=GOA;5] GNA^P[9Hn4=edNai656jAU_LJad1TQ9_4N;SQRCXWjCEOi>YkgJ9BCkJi^YMcjJ4 G/TnHRBZNdgJSDY6NUJ[]7aC>VDg]1V?TnAHJ@c;Bnl?OgK;KJb]?o05N09QA2 ;aIFgg[;BdhFo6`S]5X_HjjmkVH=A:GE:oRZCXM4UD_e2MLgD^bGffLb_kKQ2?[< NaMTOlWMDjS9/EcKQSKi7UeN/nB:64__[7oFCAmDWo05nn2C4he;2kYQfc:^C7LS b7AFZ_>eRGX]5HVYfNVUi9JCUT[MNM?k3H5hm4K?o@XfReme^[KCjRW0m=DWN^/^ O[=BMjo=3PJoaVokic^ej2lK9j>>:j9@=R4f5SOW6 QcGY1h6YeWI6[E2NL0ib/V/OJ^dDo5Fd[3N>:JhQN5JW9ZEgY]/]]^>2o;MlSkhI BGKdOcQ6T?Ma;Kh6GENmY>7lHH@WC:dmLhi@GETbiKAIBOkdS f_?TO/RJUiYP[gHkoW3FX;OLKcPN[l^/DbXDB_bE6OW9^MHI4_XY]Y`InO@O68]i KbjH/CDdjhiW2;:GXSlfQdUZY9WMn]SLP3:S=<8K=o7DlhA@QL[;c0LV:KUV4INI NbJm;29HAF5Fj@c^@b0/ZE2ZeoZ;5Vm@W;cjGQ5J;kYZFM;P?G9H21MD?TZDLigg UanOO1[`S3P>84[WLKO^Mm ch`3>JLWP9JFAM`l247mmhima/CJfD8KdhATe1lC0@<7A`/kY]2DZnUN>CM4/]aJ f^VR^IdQ=;Y_YbPkFEc8bB45AkgBlM7Ab];W<;WXHiaNOiaA?GDgPUX S9bD^EK^9NhgfW:4gDImDX<174AF7YMkM5/MbnK^MHBKT3_>DFC/WSmD6JT^k`Oa S[`U^hHb==diOI4/dc`F2KoE2kC;HimgcPic1ba7e`B5@;A7^lK2mhf<]^XRkh6f iKH]VJD=H6fTEnUBcO:AZUCl@D]7lhGC9U4aTAmCn OX`nWoT[3DcfZjfYhRmYEcL^OF>DGTD9i_d>llb]13YWM[WdG]ZKgPc>BLUFgYM i3cJTl2d`ZVG:3jYIdClHSg5ZFK[Rh<<==XboCYiEo2 GE[3QaQZI7[8XSKklT/Q^6^;mT8/4Z=@X[mml`dK[U3iN:;o4AVWLYb=iTe EI8]ZAn?B=PT5EW3[WK6FYjBcZ0g[cBVT>NAcJ68c4^7Y:_b9W:9 3D`NYBOHEncbQa;[Fg`>6oW2o?:=d]95kNl@7jVVA;27fRWNilgIeg7f`nR>4=FiJLCTGf=A_h]G Q9a1m]2QYhA:m/IA9]1:gCTkYGe7^1P/al?0f1Q1nIY9LeTe7oPPOS0Ae_>8i805efcNn 28F^oZcI`Ma@GJf_nDB3B:Dk`KQKEnj[`P[e8H;]Tc2QWl/eh2>]2>oLH[=k3O=I fg2PSWZ;g6WaQ6FgJi]ILdKb:LGmD>Fj2n[i]a]H5nFT4G9cHTB;:F5MhAd3H`SO eNBhmoQ1T6h9j0G9PYB/88GLNc1AKOJ0lm;;SX93Wh_l0Q01=VkjO234Jj7k;`F>QW^eT4kP0 44fl?MN5IFFLWJTUQ[__JLGF2[?Z4]X>K:;l@iNj9c3lmBJ8^IZ;lafRHK>jUf6d 7Fo=N_`Qb_@J@FGKBjj4^6`Rh=DiRBYcL_;^Yk?;8bgo07a1EK5D/`P/D`P[1/G1 emd@mD[]CZY_<^X@cOBGCX?Sha51H7/@gJUPWEcW4_?EYCWZYGA<:^[NVIS>mV99 cVoSmN_F?IWX^hHU=X?lU1Ro2DlT>MPa6jjgVmP[Uf[OJTah/B_8lSMgAKhAkPoT hjSfS0ndW3fNf@bCSQj=96I GgAh/aESVZEoJSELJ^P=?cCbYQ;A_I]/3PJn2@4a6]GWmA5[IZ::CI?=9RCG]bfW k?/K^DRUEmZMX[Fj;M>Z/^RJIAM6][lJ1oIE6RhMm:;0UEV18k@<3CE:VNAVjQYMUg1l>TN 5LLhAZf2mYUC`SR:WRDZ4Pm^Gfb>4n2ai4JR82X]^Dc4Da:Uc52M4Y^^lM:bWI2LQdQ]=COJaj`J`SD?mM?U3@ka5 ]337;WAgmhAXO;h@iVW/dnhLhD54WRQ4RiD52m_cY3f6D9FgZ`SW[h`IKJNaXGc_ d7B3i5XGbmlB3=1VUdQMAMVVIA]:C^MhC_7_80OO1BK@XQ1EbR?KUg=n4[?5Lj3B l9G@Cld1d]c0PfAg^11dd<3TmIUiad5Pfj@6k5ecSd/WUnND5k?UCI>Y0cG7>5=h _@jJLbMH1akNc0M/fmnNT4^2/I31QKOGGYk n/5PKV5]n;SN8E_No`044gkCRoG/PnHA1cTmHY2eYCHIBTloh@c6Ja6_ead6_3Q] ZENNhb/0l_>3;U6dLWlfUn7F4Feg6@9^CY0TZBZfXmaSXjl3IHm/jjj`>jMco7aP 6b_Z/Yml2Qe`TGGcjad17F>Nnj/DL?_PQdj@/fjjGLP1=Q[Y2IOh@2=;J60PH6a: M5g]kDLfKVd05]U1_Ol0QN1d;^O>?22`<:K`fnK6_B1mPF=XkS?N/H2m_K<5PHA: >FP]hfPj0YiIFkgBLQDY`8]1WV`57>ga3VCnkllXA]UL=UlQe=XM`fPi;SCVG:Vb Ckk`gF_>?8M31^Dac1?@acD_j`Z/W;0@<5e/5;@?fAJ?FWlVmDFfoB`aE@kVe@`l YO?fVgTOnlai=/BdmCijFV5^6`BgfMKQ9?o3Q] >Ycbja2l]Xl8m;NWI]0J`Y/AYVc:WCjFZWS=dCfWgY NMG=1:;WQ8_V_h`W9B^hH2N/:C3nlL_1FPNeiT:cfiVnT4gNJG>OTN/:i5GBfdLf HjJgQBBU@kG66e/K`^_9kfPil^D?HKFQ>KV>eE5aneRCM<39:]FFlQ6CNJRoW0C; ^m[<`K1:77e524Scj@JB0nDLh^=CI?Q1H>>LLPinnmi9^;gQA]UKR`bdbYeIhDF5 c10d/^4;8RcbL/9;2[DbcO]4bQBR__ID0fPYQEY[?4N:NVVc3Da?[ILL]WBbghac :9ZNZcZgBWAYH@^/= Gj7=8N:4BjW4PW:A[mdM0;@C[5O;:>WS1Ffe4451Gkefnoha9?Bee[E^T3GE8j@f FQa=n3Q]Z>/326F6SS@kJ^eeX6QGh@WH488?e7THEBGfB5]l:eOE1ST^G7@3LLT: ]0@45gJ=cLPJL9]dmoS1fF=n_LYdKmg>1b/=B@0Ocg75`fn4>YASOE=;@gKG9=]A [khj0Q]=Bj1I@AT6k_Noe26RdQ]dN^7`?fA8];95kO=2oU3H]Xbj7P_bPH22EoRC012Vn^Xn< 6@QACn7F0PH3^/F6Q?:>AHg_LjN<3^en>@`L8/l;8bRoQbP/M2SB>4JOK1fbDG]T n<1T^_8PY]2cNG9aZnYL10`dMMmL;SCk;n45DE:O6]XD@bfj>5J>OS1kCj]_=^aKnk dPHj6;W2_Mg^0NQ]3RCOIg[ALN3=UgLET]`fi2gaPl`h3`k]=^G2;@dGVoZU90lA 0@H@hUN9mbl`f43ePKD@;K_WT1<7J0BXI@LgoIPH 62ILZ;;_mD;//C[eHKJYZ5kji:=O:oh@>NkZCI8lc2l^lUU6@g02N@7Fd5PA4DU/ iDT3=ha8dlGV^I^6Se]dQ=J=jFoOY[4fm ;KZVda6l?1;TTS`gQQ/`SN=P03CULGRLATVEboJ]o`3ZkHI6A=aKGml9V7SGF6S< VFVlQ@Xfi5OGbQbe:_;Tgdk^fK;KQlhTYMQYKXFRHMdmYKOLnf95RW8G:?=YOJDD PMB>Xl[Ad;14E@BAbg?P>T:bFkSj@KNn;7=D>L;NE]]J3X^hhXCU95jGV T5KD`XPieU:88ND62=HYlnbjmDIQaMSjaB^ke^HRWiIenJBLW=H6JfP?i_5/W9E> l:mCLm8RIRG=_6o71Q23SN/Eee;0>k@N:ocR^A4=fIEJi`bnkLF]>]TJo29>LHKe 99F[WOWJ6PJOUiY3`i]WA@PK`eDV6gIGVWbdi`^7PQ<:bTN[CHGlhMKWM[9FXT7c Q>HDfY/878JNn1Q:d=gG5:J/Fm?4`G>>bjYd_l8;HZd5kgi@:feY0D[TCb2[ad5P Y^5PjN4Mbd0e7W71`XGe=]>OB5NP/>6b5f_WbL[G]cQL8@e;^ 5mh8hK1:^8V6AMGVmJ5;jNn2]=?^SeC;[R[GD@=OO0ad>A[9U2KN=lg>5D9L;f]l QddQ=5mK3VO65=4<7Qdm^>Pd24=WQAci0MHLb=?E=E?:U/T=jZ5mK26nO8>3Uc<> ZI<LA=>:`WRd^ NMni5QT4jQ6C@Jjn45PR8=5;9:`fdE6hei249]TXK<^`2Y2m77OY o`08]laCKBfhc6bESNf6Q<<9^BB;=BkIAVo=X9g^L:41?::5?/8Jh505BcN`R5NU /cUT8][5fVZD=j?EG_[khQibCmNFT8jlFU_O1hKZA5;V9BnE1do26/c9ZgYUT4OE4eCa^4PWUOWJ4GQ>2Y@f1e6VP4LYbd/]Y>UnlK`9^4LFPmd8^Ik fBAJ>P8EB_MQJ4>:AW6EDL4i3bQ8Z^4jl]08<[Sh;WG`<17@XFa^l`AKFeh>Sgj` WHi<`]i`M:B4jJm>LM0@/EGFEl7khC:VfnYQCECNU^mm:41ckl4PdF]KLo9YAT:gFUo@4@;B CfKAF^KW1DWPiI;3gad6PnKeHKFO]QE/l[8:OQX8Kl9N_dlXL1;UPE];mKZPiK1O ^P8<8FK>BE=d7_jgRJU;o8gO5Rmk_HR6ID0kYHgeRJJDWm79M9e^l_hLX;3QZ7e> 5V@59:/icJA=bc`Jc;M8@_94=:;jTLQYJ9BGcYbKd;/NEmA1HN8>>c05n2f P>TG2PCI4YUH/UI=`/N?B:ICg4kdGBWRdmlFNCVQ:]QYPI0Z9jIV7=j 4kboVEF]2;j]g9UKgQb]c<=Fi/9?IiE/>_feKCk?_?B9FCY_[Tc4fhYign/nS[dl 8Ci@YN8=bAVIXn_2TKcS38=R[g`W>dREYhkAFVQVKnJT1`kc`cn2O_Rd_b[<_/IEWBa]c1R1Z4[JG?CBe[`J4R8ZTilfK=M=M>LA:fWWWR0^h7OD[TPAIgY7O8;[ Y;CCNUl_NmgS4G>kYaB@6lT^dKi1c?_Pl=5R8Ui^DoAil=8cOO0`gF8KgGOQdlB86iKVMh1NgO_1PQIM5aZ?;W1 LQ;>O;YdPHB<5:>?ULS@Vo>5DJo7@`/]Me6j@L`hlokh6fE1MBeL0i@^gF>P/8:@ h5YKKeSQL:>mbn7>5licl:Nh8;T3S_[1T]c=k`431MhDYdej`U_LT:N`0B=>D9gc RhB1khCPdF>E:iNKFQCVOMjQFknM5]33albE?<@kQBmXNQnc?02DUeE1VCILC<8V; NZE`K_c1mV0@bG7[=P^LOZdf_4_AZNQn^YNdLOU`LYj1FGA8lH:/f5c1dP^JAAIR Eg4`0@/Ren=6XoS1Vd:DP8ebSCW2UEmKRJJMj;MDN9Eko61C^mm_V5U105^_51XI WW2iJ0@6DZ9?RPLo/Q`c87O7NRbL_SZ8i:7E_IW47`C4W;bZedCO:J9I@?WAbdj@ J2a4^dbHA9ZFcTD;JjLhViC3V9TH5LVEdjONUi`8F`d62l0;o>jMcn<=AbBh[?O` Q5==kcBNTB3NTQ:i=Ca[=nG>6 ANOVBYK[Zg5>W>EZe9<>SM@U64]Z9g@8mmh92cLCE?[gVLib5L`N;lm8UiFNgdaUKOCl1Jd@4/bn`fk[lfiT_4cBTY ;6Ff^U_O0F4;GTFY_nKlB;lTNn4e@L@`NJJ@UC[[0@KS9M/XeR>MIIG^eTGgW43U6/F2/CYI2= ajaNL2b_X`Y:Y4m:3Lbb;GjV0PehY4eCV4=:gVkAHJL4@4kA49UQ=6VZ8b9Y3SlW`0mbofAGmEj`N6A:M4Nj 6E;HU5e9eRXbhLIFdEi^FDPA=ce>TVG<^lW;o`1h21l8Q9bEJc4RKELOeSIPl86: nlVCoB2EG:i`bQd=gn<@d``/>;6Q8=S4o1Q/H4XmAXkaXlo]QA 3Zdbk/^bhN7N95[`E I@Y`97ZdJl>CUlH6LNgQFW8LRNiU5]>L8Jk_E73cP/32[cAgXb[hNH_25PQ`g7eR 5GP5B8>C^J64BG7NZn4FdPT6RgcM@KVD8WU57Kd3^U5[W`_el8SIfJ@VNE;QW`:A h3n47KVIMeg<@@Agc^hCG>BGbd9MZab;b85]2Tfo67@dPBZl?I<[G8:4_K>[@im? ZRch:MUEEg]3Q1C9]?4JO/6hmdEfFNHA9iYA/0Z^RGo4a9XNCC/=CjiDKT]BbfSH 7eRb=E@TmaS;3ZGmF[?55h5iRSF>@bMmTKlH=j/L/fI8ec`_;c8]HY@DU?DLXGR: 44AjY`X2L]]?h@kkD@a^e>48>YQZ>;eO`lX5]eJGU1Abflh61<;lHJiJlk6lC==V :@S3[cCU@i6YQQh1=`]TW:OaQfnjhRLI3ONIJ@Di?L346fmnZT;7 mY9ja>cJUX[fABoVlR1eeb22`ZPa8clc>O:i03CkKmWVlk@GH:eQi9>mXWnc^Bl^ 3[VMKLFW:1ei``@]ac2TU>Kg;fAeC1?UgdOnZ7SALYlUfGD__FDoT=k3j7hV4[A8 1N]c4c<^9FF9]QJe<>l:@Oj=@ign`aEI1Q6X]8C8j9^2WC[N:;EiO:El9/Ab1Rd?cAkB]YS>n SV=L__]4CE6lnKi_Jeo]R5V[3EGQN;=D0Q]/T6m^UX[LfT^?JjJgi`< =G8RmhGYWMY7W22UW8NNVT>E<9m/7CCg`gD;=GkUnGW7@f<7IE;M[?KB^`6RF[J` AcL^C6MDkol0P?37?ILh>CFgF4UMlnOU7@4>T]Qe]_9=BmSdQ^6mi>kY3R0K lceSV/PTgT:8^3_1[1GOeM>E`3>/OmT@432Zm99`3S@SUIO<`fc6oZU21gVGE9>;W4bXkBjfkI:cjWUK=KglXSi6CKZ4n MjPZ@gJjDjIoXY4BRG2fYBV6e4SAJlUTGl_;B7:h=;3FiQMS8JHbD>^>^2b5iaK8 /LdFlXC[4`g;k?]cZE_mHT;o02V9Ml9hfcT;X=[go`3Eml@f9T?KZGB=d48K:/]] FeGeQ98eQdnLSLEa:0EK_N9CT>T:O=>6kNXd]1=D;]Ub3g@L:Cc8:kSX8LA5@;5^ ?9HO63;CVe2>_:4D97MDKn7^l8E]j_gJFPH21gSlY>2IUmi_TSAGQ3YRZ/:b?RAB e>go09`fKODWTUGW1Fg2dD^Z0F6d5JD[i6>M[SlijV[>;OU^Z1YU?dTM11C1d62k QUKFiK7P;MK`m[5_dbW4FnKN:1dlXK=bc[5OJTeQ>L?Q0din7`QBYlEOVeMk>n]I ?aSXDi29NTe9ZCYCkCXcgLKMJl2XNO^<:bklPGB[SCI>A;Rfn22JGQ`QJkA>b?bIfM_?fa2o4I5JoI4bbo: VK3TXB6k3_jG=_3Y5GTgD9EankKB?=bo`1]XP5kD/ObaJ3cU=LI/;oZJBEPSZM;WF0` e/ZacRU27:A@GIFFM@>UQ:_L;G?eAX3WXchRoAQfInGYMbHbiE0?DG9Q Zi=bkA/E@hHYe@VTid8R1`i]hA8KYVHYS[BK4;Kg^I[gPF9AkQY5kY>dZQH/OCf2 [dnC9hdbjUIg?MLf7`]6>hSfDeo2lX]DkCg6mbgMCZTj;_el_aR3`i>b4[R5[iGT ]i;Z=]lPLKIj:lh?W@/GA2FEiQNkV=8m3cSPFfYL_/ ;bCC[B>ab/da:cn@;IJV6KbdfRg<46h=[W[o08^L@K]AJZMA;CnkUi]6RiO?V_iY Een>/9]c0G3ejEDe45?/ZFoLV8BJIb/5FG[5VW6lYF;M;A0cSEWRUO8J0P@jRL 7fkmKV0d_Y7@F>@]aUe;[C]Ufj@WT;RcVEa4j`IIcZig_nOg`:;XoS0Ad01j_=L@ K9[cgLMcn1Qa9BUadXh6KL_P8Je2Lg1dMMHH0/fKgMLloo0?AR6GDI]nj6/kC@hKIkUG_<;fQ` G4]2dCobUCI=UnEDMkM5W/^X0l8PibILWIUbIOMgYiZ=`2HKl9cPneePSQ@IK[KU di@H2d=G7U>@E0cfFF[`^Q]JS`]]fo>T4JKA_oib0TjGFKjAcAb880ioWlH=2D2h /9F2FalM8>M6Fk0SBilh53:Na>UCUR1I?W1`P=0>^1O0>3CV860Q2JM@fYTX6BdL c>B7JllaBfG>]]h]:EO0OQ2BoFgG_2L`d]nO:2=YIAM3[NHg_Wnn2`HA;b4f^Nae 9cDhDkejKK:/Pd]d07UJ7U=g:9JOa0nf7Q;5:FT^JY;b^kmESYiA7dGMW4C89:Mf Lo5kXObeUk?9Y>_ZY]YaFWk:QmD0HEAhadb^H>;MDQ:RQO[cMQiF]ia: 8V6Gl:h[WZO;MTY/bVFJA;Vgcfl5[ODhH8Z5TLhBZOIi:]FT7W79>HCfREDhW_8o N>D:]E9CPmITemVoF63SbGMVDP]eNIL[>_bj?k10Emoga8_d5jUc3U>ZTbF9nF>k VIOLOcMOd5Z_X/MAHfjj`5o65MBM8Z>9:c=EBO4^igFSH=W[6QK8MW35O[[KkCD[ DWd[BM`g=8c4o@@?aRT[IU9?5kDflQ^LA;ZmJQ]ba]OjkJajXf?dW1f:L?Bn8WET ]bZ7ELQfY]gMTYg;Peif5SLNDAmBV2beY4e@994dnG7NTJGPbWB]@`QlYBG8LaY6QHMX59g>L]5m6PA^aL;mmh[L]QBZDC4/U9CE@@^/c4]JKZT XfKKgMibe=/ng`JiTJjSb4GNTd^XcTbb]K;[;K06MbDA_6eWZB;IP?N8ZMmH^4f/ Z6QQenS>6Z[:_bdo8khc2@dhhFalOQY7SgdU?A?Z>0Y6HaaPmYfIYJg3f^G@cadJJ:GiBJHE;[HL1=o:l?I IiK9cXR/CKb5nZMSi:dEYW56aZGVe^FWZJ_87@_8jUG/52^Q_KQjnn:IG63>^VID X=e6EGTW67Df3a_lh?XWXHm4kCMSSfboJI>bDV`U_>lFfd47M>XE[T?k7gJm8`W4 ]>@kGKXF]Ug8DQ^H_WK7dKmOM[4e;>1aEd`U=]I6QVo?W3>We2JDhJODVWViW;j_ NG^XOS2]@HJA;=WN1aecf4lT3mlEIoj ]J6[4fnn98A2UNJ85m/I54i/gPHS7]MHV7T92>XR;VM7Cn<33MD N/9Kj`Z__`CABleSnj>Q>>DhPbh6_3dQ<6m[Sh`Nb5YdC[N`/>L3^oDoWF0P84[LDY J[VnK[eQfFFnd89L76Vj];GQZ`KVem8M89kB5]LdnL>8AQ5`I9G>>Pe1j`dG_=ia ;CKZ@Z7DaWk1MH=TNeUnb6o6;injSYhNDM7@hIK:_EX:[Gd6N5ncUQX0S9HMMK@e @/1d;o7lfQfhmnYj]o0`<129=RB]A7CW2L`EKjcUUM0EN4>Cll;[gHGclHI_[>Lj j2oG_@431N;gWj5h?^AWI6L3NS?[[ePPeKgMk3cQAdmbb;X3HC[lH21RAXKBfjdg =XDUKNkN@2SWOMWXOO2/Q=9TiUiYe^kKh;Ke_3a7W3BR5k]Jn3eK3BUUB^E^6l>G M`:/]cEd5AmVgfAd:LQY3a]RYDVWUbDMFi;_WAa24@cnD9fBVOeFHMHMj;K=[OE1UeJXcd^6I^YcLb1a8KFhB8230aN]Wl XeEM[e6YcK8VY6T9NZCVLJC2fFU?Z_i7M97^Q_RS45Ja3RBI[=GWeC/hnQ3KbW@1 X;I>@l4LXKK=lEbN4]ZSEGWfbi:_BTeCiS8W<]3Ck2fR/3ZDilm^]Xj_d>[b5CND lhgN9:YnShWG3A:; JfA[KA?U4I>c25X;EXW95Si?MA8A4]W6LAJIQa3jDX7F?ZeBJBI:HK@nQk]Bo`2T@=d]JO=7 ;ljAHV>b[@5YFCddCQ?H9nJLD@h=6gEN`_mPm3k^H<>IIBVW;@nTUmXUk7fHl^hcX DU8^:NTDmWAeAWcX7WOjXID]KQ`G:/1/5JK^J6f/B^=6gY[N?ZW5XV4G2fUlG7ee lh[/ZjmnRl__BAKmlFAUAba1cB4XMdQ=mKJgCNokhRW[YN_M@Qhm=KbG9G[4N_Z/ F]2d3 HcOR]>/8]^^/6OD;nZj8if4 9RfPCkm82>PMijg<2KiNHQjdn`R@:4]W>/l`;OK309GHZ:XM=8bBHF3HZ_dSX61m Fi<3P10>/^8M>l^53 Ba]0;K@P48L5o4@[<^^>cZYQ^j5[mRl9];@jUNL2i]U<11XMbEiNWcCSZnJ0WgL@ jO22mZDBN523gNk3VFH@cAgNd]8FfiT_TilRK`d:;5`Ujn]T48io^SXRo7YcQ=:QViJF]1gCVFPl/o>g8`A3Em6fkinE^/10R7c3[JAW_LST1YN;=@W9J WHKE>cTjnbmllen3l1cF1IF_D2IIKHgFFckV/`_a^N/NQNabEJ`oDJDbE^C1U7F Fd;>Z^3UnA7c1fAhWZ2:@WIoCZoF9HBSfFFWI6HMTiUYO]gBUAKLijGA7/bQh_f^ /nSQYRZ^gH^TaKiRCIG=iIB4FBT=^M;L>CjhLhBfHh7X?XXeNRbF2iQn]cTb IYbN6j^jf_AjG:^5HAUh`WXjU]OB=2fVhFK[67YOJWP^A=CXEIIA>E>W/^3]5>O= bYaSBbf/ekX=/_@iM0mfIHSXBPC[E?3DcAig3^<O;@3c^Hl3nT@o;VYCL^YBFW]lNc_9]Ye_nOYA/NfcK7S6Ph`T:3]6`nVV eYm@gSdSMbCWFT:eLUW3Z0^jOE[hfm1[X/nOm]UBkL]ajFB`h`n=nf7;J7Qc[l]E fo`67<^UNn1<2b`fa9jAima3=c]Jc>US8l`OGNAiG_c]3:W^[nAPUORNGfa8HeY@ Tim3LVm_4C3FHSTFkLoQbR894]CP`X4I1UdRb]F]5HVL`L=h9Q:18@9SDO_P7T8K0@fQSX24TPgD3@AY]a]]aFGQ_KU2VmC^MAYKUN52Q_L8/gbi@S=;h@d= AhFQi3B6k[;fGOk/fiTn<5FUNn9@3aLG^QBj2mUGMBnG`o8PDIAlo`0kL<5PhS]g VGHJj`j/hJF4Tl0eCiO62<<;V9UX5[GFeTjZQJI__0dQ9d6]^/6P8KY0@/QKPK7S O@`g1gSaen/`^nRo[6j02^`KcJj2dM0@hKW_eIK30MA_cZ1b8j@PZHDZkW;cPRfR6 /RbN7fO229GMF]R/`46QDG3VUSVnWePcOcX86m?FnT9f/TIdTFjaHL=mkWTe?`Qk/i`;CjCR4[[3T_>?^LdFkW7hmEF5oS6nh5fJd5g5QO YTPk:_4:Kg[NU[Sk^m4;?cfCeJ8^]3XX/9]fdE6Rh4Z^4cC=Q?bSfM ]NVSUe2o^cJJmjlNS=R6?4RX>D9VT1IUKSGS]b_Y[6Mhhf9=DIZEa1PBIV>`C/`d>`3^/_jn]AOUk5` =3JlEeakNMj9h_bTcjVe_>=8f0C?jYeA[iAWLmAJYQj@YdfRY]_CI[RiSSL]j]m93Q?a@?M[5W`KFFjm8 =cl]E5;V0eWV0[f3LjOElH9Ve2IV92EW> d5]]=WVfU877Li@hBOL3kR83D`fUYM=[fQUjAn2YCJ1/`IOI]=eVUKnIUD1H6J`7 0TL`i`jN>B?;DgQ34EFf7HT[?HIIU^VBJ9k:Yl2IKHcQ;R`WVD8;Wi_7Z?6UHZ]5 fZh=T:SBFijUcRg^eW]1^fQ?/Gj:08=o/eS9_C?aY@l9HGTJG9;@J]?DiM>UFf`= IAa@_Eb/_VLl37UZHgK]?JWgEXLOToeMm1E`Wnc celR_>[VG7C`UB[V; BdeTRWcDg_]10?F8h`CVifQFEdDib2bgb]cPZEU7GY1VQ`2b=?MY0Yc fiIh;0`/QB6fK^J3g`cgjBZhA`Gi4LhEWVG[SeSC^W/WLY0d45Bhf``P]VkW=EaJg^eQcCN`9WQB1J1P/9K/=C6Q:_MN53MBbfL[Z361;6A_;ko[PZ^UnXSElCH2XU>V eYnCFNG=QaHn`V7LIk9dhn@QI3XMi@eOU79O_@`bka8:W?M6YkDo IY><1___5e2cH4fB;JnGBnPcWcS;dbj/jR47CbRcH@Z29BZC<[=YDi:c3F[B>[P? ?UnO>>MCVA0bC^kN5he^VO9kJbBNWC@3^a^E6a9nQ/cJ GGMI@QOcSIbJJG9=k4M>;YgHaSIIFI5k6VkWII]jLgc^8Df/3GUce7?W2n^HmcC@gJ8a[l/kD7Ji:_Uh>^n aaPGnL=^H6Y]enn8abV@mJVfBXYMABhm=]^c4c9=^>_W:P<9mQ[G_JjJG5n^Q/cFbDJA85a>j8R dEFZ_KO^1nZE`kDglCeIObj]cMa_kS59J>:n ^UbAHAhGfcbF:=Yne1o65AgC^9IceSTVfjUKCKG/=8Ch8dmnYSd3]=m6ec06bj]K HlFKBJcRk5U=3;d^9ZDJA8g;XC^bbLa;ERN6jA6LHMm8_6[nfG3ce8`?QjU=dUjk Z:5:KQ^H2^5Jg^Ii7adP9:M;gjaCn>g`Q]^F9QWM^PWlnjR7YQJ9M_l0kBb=8c_4f5jaQG6DeQb^<=blg9^Q2`fh74L]51HiScSj:KG=/8[k I`U@>dBRffonEQF_Nf^]X]lE<`VEn^][ijlXCggZ@W9eQb^LBh7EcJMjlQ_MX? F6ldbQ=BG^]6o[SXj2IC2cH/]=nEh:FVffd1]e2mNH^33YUTkdj3^>j5ICdjJa`] cd]e9PB;X>YD;G5_aPj@gV_cmXZdBCLRn:E8K`X=[]jL?f24Gg`b;V7/W:;VUFR@ f=k?Z1>NRbaSfRB;kN8TC?IGik]1^bfEFF@>@6CbRbdVEnE/7C2JH]k_@SB:QPW5N5Y]_NBkDb2D:?:o`3U4o8H;ZV2oC3VL8BFkk;S FVC/W:YN7ZS 8<>O9_Xo`0e=cbd8Flhf5Tnn6Vb?dFlAhgTaSJ]bOIJNjW? Cfg=2h?j`n7U4hc=]/X:Ua7ClV]mH2Hl/c5>WV`2^CFWQiI8ADYNn5_Ejg]W_Kn< N/mX^`NJHYSVhYg0PLA@=?[Sc1DJ6mClE_B2dJ<9cTf?0SadibDR `h=Zbi:^/hPNDQ`8F@ji^k>4SVZe_?GV=He^VKCJTS0bJOB9Y^AT6bMfU]QY/:eh cM8_ifhAZCJlHSPjTZZMNW9QbIVfJGCTM]WNc[eF0@Q85m0XUJDi^VHWbSIL;K?Y ZZhNO[9TL]b]l1Y6LBoQTlAiLhKCRff]EaF]X1kH7>i1]4=9:G>eX9E;cddjlgTI2D8K@ahn=o/RhDVPCR9X2YC;@IKhMoO >SGl8Vf<7cdSS4Dh]iIJHBL]TG2kM;feil[`aG>84CR:DjA5Y`=QZLOMJYb:PYQQ QUJ=i9XgSVA`F9LFNhELSci2=8`MC7gLHBk>JBnkFMf<[HDWnS0/CKCF`kUmN LAn6l6>mSOOKDj]]W^kQEei[JFGc]kX^m5XSU:JV:W<0<;M0^]I9h1bho`0lXQWI h:i@mGYd[;cUHZAUiI^BU5_VIbMl=Pi[6o82i_eSbm/o`0>KAM/f1in GVAlWdR]>;VJM<_/3SL9:o2jV[Sgn4K[?>7JWD7I6XcBCPfF^IaMPU4oo`1GW?/N =nMX_V5ibReZLYKV6ek]bFYcdZB?jn`ekQc]5Wm:o0M@`g/JXDh9]P^b]Bc<;KMhcM/gEHjlhlicZ/AB=0H[WIii jGWTKfKOUdZ/U`7VOQ1Y48ZP4hTf1jNLB3<`98j3>1[N?F>?/:DK6F3J?RFIg3=C Ui912mh4MYK]ZSgSY5AZ>cCJm];m2>/^hZa9D7:7ADm_XE?ViE:ec6j^5fFAWBe^ le]O/S>]WN<6:UPUabS7cS6l [=?a2efVFU3KeR6T:kfl78=U?FmXRgINJT=0A`Jg?Co>7Tfhdi98DSFogMHl?HS` hoC9]fHUiUYnGKka3X9Kl8[c_c__e;4Tg=TT4XUVPb?aRj]e>GBd5[EcRPc56OV72^EKh?/S4LiB h5P0mCVAN02C^P=5fI@1oC8_l06:_S7I=R:We;]=2TYJJU Ffl^EPQ3VQ=^4lcJd:/eBEN=PHI?dJLH5bVk o`0@Pj@BhfS:1eeddSUT7C9Jaj8i`F>PaTg18JBZ@eK>7E0oE4W8HGgk:7EcJ45H _^mgV0_47_gmIL_^Y@^edPaN=VN4JoSkJ:aQnTcCd]:io`1IO5_D=o7fXGD_:;`3 ;HF[:1373n1:QRf]:XU43Tg>I[==BkNIBnY?T1hlQ6ak>oAW`hoCgJeRf[VZmVET A9DlFU`[m]c=Mc[b/?O6bCn2j9/Wm7RIX^2Ja>XbO9e;^WWhOQmD@[m@FhPZJiAHYJU=?<^e2WKgJA9HNY//698?Q YYQ]0KCcdd4Nagl5KWH?:bFibU^EAjW8KSB8_i@W3m6W49/RJG=^QHiQ7 lKAk0a3CiMg6kE?I0<_:S;YHJR6_6F59e_8UjFC =8@M;S?niLNPM_>7`<c[B4lc^m5:nZl=IUgN?8L7Go: 0IA^SUQ7H>^G`oj6Aa8h]4X:iE:QR9NOj;cbg4Omc;6GBddgRW6_=Q57TKO^Gjne9BkA@B0^HDU0mF1hJA1HCY4_]Xd ZC`kZkOeBB?lAlQ7ZBJYdUlU8KUiI^GIJJ3_2?:e_8@UQBCU3BfVf6ff9MY7Zd=P FK]d4F:MUT5_M[^NP^;fQZjm_8SgE[;TI7Gl9=ClQ=<;0F/lQnOc[7QKdW=RJj3W a7B9LMMiK@i;mOS7dTVIFFkK^VGDQi:kW>?7Cl8`cdZl9/Bf`fOZaD`6^a>=5[9a ZL9BKgl=8FTIXbkX]2j`9Y1JG7cnk3RGIZoBVRL7ZPXMmKCcA1d]W@M 5M37YgH?R6UEkIfRNTJA;bK^oFaY2ESMO/;172NA_iAJi7H_DjQj7^cVMT /;ceBJX]6VJS?>hWYbEV4BbTo=fJM^ O3Fm_Q4Q>cB9QTg6XQaCFS;;/UFWQ3bYKTFS3Na Hbe8H;ddffd_TQ2lb6nM[1OgGC6QdMBJA9XFhG2/YeF>;Bg;h@ga?]6XLVfa8bFj GDITNZ6m3HEknW`R3:e7B9ELe<4fKRUHPTIW0boU0^Bb?Di2_/cZ3hF9A_4Wo7Ob P]8XUHa?PIjXkAiIZSd1]J9NEU6T:KNW56h^kNfA7UYOFoWX>0jBi9?/=l[7V2MHOk@iL]DNFZBUc5DWd_^=ZJIKjSRGM^h2[Mng?`Q>6j ieEmgm/NEL@c]I`KSm62JMB/U?Z3kDYCcKM]gLD=fP7A5nj<_?DfSd?@mVU=UJKC 9=jFKBkQiYbGE?=4KaieeJ5CCP:NQDdU8oHCd^K]=Uf1Om7d_?kAlFYUig4EKNDJ N]Qie8LUg@UHFhdZeW>mYk:O2mQZT[Bg93IQWWEi7WoF[oj^iQb]d8d4ZYFJ4eJ@=3bSb_l0Y=>dSI^^Xc>oU9>W >RAMFg8:gJ7;J8>UP/fi6?Okf9iBGZ7bI8bSmAOV@7lAKaDbf_PV4_WTnE8^T^0PJ`W_/Z00Rn/B4YEiVBAIO`Si_hIaJdNbl6K:9S2VaVW8Y9A<^^XKWne;oBfZfc[dOj 9C9Gi?N[OH6FfiIYXZMCI7=hZ^6oMcQWFaCYnMHLblfifCO^ZejV7Vg^S ?c?Y0b>?IjCFgDJU@aCjRL]]hhb_eKP7VQGo07HbZGA=_cKKC;2gg5V`CUjV8_IM S7JY]^fdCkf9JkDjm=6F/`cVoEiA6OG8S^]YlhmQk<]TU=`G8XZLd6ib/oenCASb KoOcSYYki2I34aZ/N4?JKDV4b8DPLhck2^`2KZ61GIc54g9O6f42nbU]5FUF?eEb o`0h?j^8BA[SVol0eS^Wk82FVQ_K^mHnN6e>Pc_nTYfY]B`g4`bdXZ7CQ][mDDIa Qi]hIfG45Hc8cX/CiSaSJjc;cMFf`/d48@e]_l01H99_cdR`^DK3:jFgC:Q ;BZffQTBQe^h4JY;?;3BAJlDJYbCK/hjX;][7W55Q;[ijjJ`g:0AaJO6=TZnbo14 g_Eb=JMYkXhlZEK`3h6:M?k<9eYndWFJM>=G=UiRg3a;UnWfA3>BRdNOaR9`SQ2/ hb[YTZDUHIUmIVIEg64o_lXm4k=6i70=FU9>@H:6RJ;RV^ M[T9BKHLFm_0dn4IlWS`Z?gaPN3<>=h/XmL`1RTb_K3NAZ;ZfLkSLbdOWd[j45:G =M3lHC`OE:mQSJ;?HA[T[TZe8G^MhPMkZUi7TY=SY2KSMakXUfjJfXFcJWU6nkBZ 3fk6fc?4d^f_]=6a>4;^026gFUPoQ5Ofle]VGfNeZIMF]3SE4WZLAWkbgEQ/OMm/ JIPnLIaWQ2@NViK9=dZI7JD7^iQbF0O7mlND=_7bTkj>@WJ:P:3/fQUmgNi_E[Md F/7UdP/]jeJ4a6MW:MiOVR<^ZTnLCKAFi9Ql]b/V@BjSYkXm7K;fVF?Hf3I;9A`Y]EUZKdA5PZ3oI9Aiai`1AE`g?B8?1d`TDQP]SN128[^>jY>^k@ G9=W^XKkWdXPG8I=8c[RCEE99YAGZBQ96 /J2hUfLXJE^c7OM]`oBeQFWH>YbjWfZY^]Ccd_IK88/Q1o7n40g`;_3m6kKhS4jo CZePgdH^chIZ/g9C4U@FiOPM6jF[;c/XJ4I^JK7U6=k=YU4Q/NDjldb`le>5]gBe `fU20CoRca^Nd2KV9_HGR9fW0[3Uk3EcXgYn5]=KnLNJVJ[?BNcA5>C<]=]HL Ul]EVRMhf`ocFf5mCWEKCc<:f:TV5JKT=ldCf9EY2Ui?X5@@ >G`_khLh1fL_cB9[5F:LQZ//S]e=KNUkTVmPinf4LkG?^4@F1Z84chMa[:O9lgBJ UjZYBkflebY:CI>YF/J3YHgj6f[]Ec4/`jm=bJfZJK9gkkBN[WiA4VDC2PhFR3LIa`LSaU5`M37BV99nH ZGJ:]8=DeY2lic;:b/gcg9i0g/M1LFiaGIJ_b/[DfjOAI3]mCW>881c;o][?QiaJ iG2;WI>fhTOC>C:Uidbg9UWjnIml=^NPQPD1/IUA0MVaMSWJkfjAYKjjC:]K]4c< [gCL`^heCe8la6V]h3V:PEC68ZXi 99:0[@WDLnL628HC4fCXR8RFX5?Y/WfFTbD]:Xe?ZdF_mW>8;5EK56TGW6BgO8BL aiAHZQ?]]U ?4Pn8=b;@kTgc:;c`JLO@iMX7@alEmVN>lEKD`em9?oF9j7g` h[M8AFf>dbgcPo=XBTi/B]VGHnT[B7G3IK2Ad97AGi<@V<<@HO`SPEn_HV[4]CZI ;2k[kR]3nb1cD/n0R[hkm8?IQP_HSC/J74LYDDEYW]E9TF7A_I[cEoEPMOYRUdO3TaDUiW>14CDc>=bZMNLJ4aF Y?J=]5[V?VjLI>Wclc^Y=]OcSR1XGENO;jX=DVbVK/k^c_?3jGGjnOaQm9Da57`U :d^E7ZiI/=YlhHe1]1Jc^Q`m;n1lH_l0BIlBLeHO=l_g@QDY0cc:BgJi fHViVHJD19B`NLDB/m4YiTa69BOXA8K[aRG`ERC3Vfg4/cR>BY[M;[U>JAfQa1cY VV?j]kmXN`_h7Be^f_hNX]:a_QG6lXjg<8M_B:RNFNme/oK_4GldAKMRgXfDJWej NfUhbXK4]FJf@hRV=?[;4]eeAO9_Cc=]1mLgd]e]JFdgMJjl@eiLhYV 9<>5[d5IQc]6mBg9?=U=mDT8?fj@R>1LB;KSEUi>^Wgah@oAN/D>MFgEF`Y06_>= jm6bLW6LG?CW5dm5K3LmROJNmCYO>Q] Y6nVEYnS5PV7]h`EA0XHg:/TNhl3c1V:>Ua/;b86ZE8mgin<>JQCIF]e5nKMM@QK EPCOYhaWdU]=J`[]OK`[?BkJ9IJ`Q;PmTjSF=K/aDI@><:]OePR/[P2P]6lD2OYL i;>12k^0^g5^/@MLZb:K]=X/S8CHUfi^DVVE^I?jBcJ47G[jbfDfSC:a=?bc6kKL :g>JFd91:XbO5^4EkHLO^HHXnmI<^YaVXcc2PQaPn[D=c[[<2b;3U[aNO=lJhDAb ^^:G]GaOSIo6U0fEd5a^INUkCLk?DJA;[T^Q=`a^[o=?K/5G?@7@ja58;F5JM8h8 TVTEjXGkHfdQ1KUI50F^bg7AZmWAL5^f_daY6aB^2IO0>6Y^Q1[/[DZG7i_NE1Cg KKJUmi`lCRl^GV;3TT0AV5DWjECJa=eIaPBjiSQbSVQ[f4ND>^d3^P@/dgWCY4i9 oZ`UY_4Li_eb[IJALFKHAKi]]?@JO__4A?HgYDkRnAT9g4R:C;eFL4YCa^Mjo>?4 iDXIAhG81LEUK5mC[4kPc0=AaOD4EC4J7fI897I97T^H]bcn2?:9F_l0XohjaOjJ >6/JC^;gJAQk1c?o02FcCE/jgciVPdY[eO=>I`Ubo7K9`Q0WQmd4ai;7oA[?;HEjgL;iMC3Gm^8ma`^;3MhE`EFiB]hIkG;Y2E]N ZLei4A?/_N[^ZanB[CTg?Fgjc^95S?IB`1bCiLkV4Qm:76lbnXA4 Z^ZbkNKL9gZnn[8=CifQU8/cTaL=;k_B8?4V5j9RG2Ti@/@bC5DY=AHG;CTTh aWC<8>RT7n7Q7bHfnnSSEMQNgYfUe5<`iQRX>5nPEAcA4dccgBUl]lgbDWhlS7f0 G9C7Ik;ZRmEik==17ggRRkGmSf7m/N`bYk?/B>cS/]D4gUWUYJ9TiTO=?Xh=22OR 2@HObDgfIGU2JQ_NLO6j/DRQ?Bb5bBY=2d39M]a>XRZ_8FaDfmfjAINO>PjScRMa GBJUQG7UA`cE9EYZMY^InTG:QkE LId@XKG?8ZD_OERN1=on9g__Rkb>fC2EG/gFYEnTC17[2XKiSh;6_eR<<^/WA?:3 1K^LL17DG=[`eNY/^m[J7S5IViO@6o_SOSEJNo:C4laDYIjGJ6OO<^0Q8mmk@F@a 7@YS3TZhgFJM;[gNELXVNJNFakbSCGV8`QRNWY7OMTVWf=ndFW]b_9_D7XO4@R6f gMG;PLQeQcaU];BcbQ7]@3YM@WW7ePfdBce;YcfWLEilQ3GJU]BYN3JDJI:lLaK>TNLH@V]EW4db_;H1d0KdlBce>WB:bQ P_ZgZh/j>0`lHWj_ELA=dW3dVIZKV7;18jGlHm1K9=W==`E>2 E7E;@j7cR]klGRAOjXd?SYmDHOLg`JMCYODXGJn_a]1IQkf 4`LlDKDmESCl3ZW7lR[X9^WP2M;jaiDf`XVJa:Cf8I][L^^=:JUR1[UlalO/SdA; EQ[462S:8OgDb/JST;L[OM7W7dPieR@UEbe;LgJ]gT;M]1Yni<8<2k^T8BjLUka2 nRSRMac7A:A gck]CN?96bn]OXASM_4:fE2D3Z6bLm]3n7W7^5[JQCZU/gTEd:IMNVY`IfYBFmHm Wij3gmM13VL@0iVPnnOK/FhlAKCJ?DY_IYB7YJVCDd79A[8IJFFiOCb4Jmj1DTPe V^eD7j35l_/feRmd?dGj6g]lWMY^;I]bFOWiXE1^QblaIUQdLenJRKZiiKgRhHaY UBfCe2MfPk>/>b^B>=_B7GGYO42a3X0^Eg7@N<=WTf @Q<:?G80QiRK5UBLa4W0n4]fRZe9[AEjDV99icNGhMh]@ENjb]75NnNoW5CfIBdkCJ2mSN^]iYc4ZTc2ij G^m^F;79:?8mSZBAkIEh@`f^kA9BCUYNCXk[Ti=C2ma;/bY/Y:eJ`WJg0V6nk:Ui H[VecJ4R_BXY[6hWi^[c:LYJEWLdD=hSUh03o:9c06bYl>/hSaPQ]idVk<^XIT/O _G2VcCIc;d=lHYaNdUEHWP2@1`=GnS6T?_c9g]d7Cgfn45@Y7]`25<3ADFg0^f K3V<:E:CKDc^g7dfF`Y@cXEeRnChADL;C:@WNM[IDPSc]Y7S[5WXnKA/2Coj@h9W SF9AQILg/XK>0Nk[o2;Q//fncE?YOb;RRFLA<=l2/j=Pa@ ]T]NV<2ObTEDX;fmKKW9c/QBRo;VV?Mcj/Oj>/9hN=KaalWK_M5beX@Z3BU:BYBOIJ3jk4Ldjj6ffgb?D/K`j39L[?FLEEjEM]DIYTk`<>7GM3`2O?Dlhc?I_//a5:H9B_4HTJM< CSjYVIC8CJYbIg[UU;F^JL0c;DNmT0nQ26LR8]3=@T7I3PWfPXj2kT7g:WV]h72Li1R]cn=JKT4_CFG9YlS TQ_CGa<:D1ZIVZPmTH]l9_eml?]`m;ZmDj7AKTkYm/9>?<]G;h:>]U23WB40O2?UEo:8k:YW1gYJ< hoUjO^JOSBGgke^GKF[8Mok@gJolBXlU[AW>CUlHn]OYlhMY^=oi>>/cD[IjM`W> BmIUaJi2n[JMck];USbGe4FJV?kjGmd=iY>Eb8]`7=W?:>6Wk =o?khN>ILjTI>O;GU2=QW5VdFmlB<=HCb;FP3:OQ6Uk6mU[ndKiHGTL2:O^@2TOB gWkXce1>@8EKUc6TJ1/df_ECIaC:Q:B=>OOkHlUJUYW=eb5P=FU`TiNg32k6C?aa ZN;GgYcK=?>CKbge:LM^G3V_5/YSKHa788204T]0RgmV:QRCoYPW?kaf;SCOnM5? o]mdVdH5]3F^JaGD1<[;XE=?gcjg ia_KOnZfo`3L_`S0/NOlkYko07VHo63b_c/2>AS?fFVSBdY_3^VE:L8DD8i2 lNPi_oVfOceSc]/^nj2i]W?Ul;mHPoB2o`2VFJogYgkc 4]/Lo`1WB/Oo05VUo`3kKnGZ@ 8X6bEQVMm6J>nZ2Zi6=ca:YB6N0TMkUlHOBA;>0F2bLQGV_Ud_334oc7aEn9SJ=QeGZdkQUW]UDVgm3ljnYGB=V Gjf^BVmhk^46o^S3]P_o03GImanj=a7n_I?nm?gA5^Lh@LklGRQBTZRV39;=2h_X SbRG@06`1YbR=XWnZdOf?`RC7L7_44AcR;V8OG9U1L`0mI87?aJMOO7Oo`0;jXi_ nHWlmHFja7R95UQS/Umbglh[fHH7nLb?`nn9=WnIOlEL9V728ooI00L0[P1l00L00@01 00<00`0400003@0<01013@4=0@d13@0X0:D0DA1AMFUSJeAYKFFZ865^I21Q000X 0;40"], "Graphics", TextAlignment->Center, ImageSize->{269, 354}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}], Cell[TextData[{ "The basic idea of the ", StyleBox["Game of Life", FontSlant->"Italic"], " is to consider a rectangular domain of square sites, or cells, which can \ be empty or be occupied by no more than one organism. The population of \ \"organisms\" are dynamic since some \"die\" and new organisms are \"born\" \ each generation. Conway's ", StyleBox["genetic laws", FontSlant->"Italic"], " are the \"rules\" for the game of life. Conway devised these rules so that \ (1) it could not be proven that an initial population would grow without \ bound, (2) there are some initial population patterns that appear to grow, \ and (3) some initial patterns have very interesting dynamics." }], "Text"], Cell[TextData[{ "The ", StyleBox["Rules of the Game of Life", FontSlant->"Italic"], " are very simple. They are:\n1. Death by overcrowding: Any site with four \ or more neighbors dies by overcrowding.\n2. Birth: Any empty site with \ exactly three neighbors gives birth to new life.\n3. Death by loneliness: Any \ site with one or none nearest neighbors, dies from loneliness." }], "Text"], Cell["\<\ For example, the Cheshire cat proceeds to from a simple up-down asymmetric \ pattern to a smile and finally to a stationary 2x2 block.\ \>", "Text"], Cell[GraphicsData["PICT", "\<\ ID80000008h1000A0_l<0?ooool00000000000400000SP000000000OP0200800 01h00@0:0000002>0@220000I7X00001000000000000000000000@0000000000 00000000@000000000000000000000100000002>0@0000<00000000005IZL6EW 0000000000000000HG1`K000000000800@00SP180000B000001Sh001351XKgA_ 82dPBU15A`000000000000000000000000006?ooomSoh00@BTI9AP010P40B018 003of`2400<20P820@<20P830`<310L410@410T61`D72`T;2`X92PX<3A4>30`@ 3@X:3a@?418B4aA`M7Q2AQCLY:R=K;a9RM4Hh:3 `^9DLi=Tol004@P0SP400`4R008A0@5Q2mRC]c^nWZ=BjC mO:ESR=:Ab/KDJ3M^fEZ]haK=foDk1OPRVi:T1LnXLA40iZOF=@;9DX[dOj@M4aA Z9_>Wm5W3U5:_Y=MDB:_FBJ`7mJ7D1@3jHSKSZla4fe5NefdH^c]3YSfA]]?9@BR QBV_c]hNNgFng]^IQTLI5RiS7b^X5OC6V>E``BChkcJo[0LKo]Rf_O INScd>fa3ZANBa0ZH6S:O:gHkcFT`X14`SFZXT>DkVeljZi[6nCbhL40a3IV3h/O gQ]_e0Oio`3CoGlQ]dU]kKUV8O@2GANXYEcGeDmL>0YYEj:mHBP;:2^/gcg4EQh6 /O<78@e>80K=]:BLWC2OB2HRQE]G6I9dnmL;=oB:H:0[9>6QD`>V2Pm_fPi28icG 3]1/VO4EXCmR?ShQhKKNSZ]kLOl0CnO/fjBfm]c`gWjEBX:[7B=Fe6]^j[eA5K[b GDBCCdBfkN[fN@LQ2`V6e[lI^U9F;E[NPb=JSWG:[Q`0MnoTaCLPLA7QOgO8;nNcJLWijCo]IjLQXNKa :Rh^4QeTYI^NW7AjMUQEBDD:RAa^VU_1K8Z7L7L02NTVgB:LkUcY7GH59Cj1NTAR 2`V9NYcWKeHdCI=fj/VXVTRHcB=YjG^U>0Ioo=<7K5@M]j?[ 6;?RSFWF3^/7ZJ=F9TSR37CBVj8Q4A^I>fWgMe1>LY>AQE4@_V7I^5MU>713koW] iKI=173co`1?iojKM7kNfiEYZ[f[cXTD2mUU:]jfN8DfgO;RaVeS::RIV3RkPBm/ 3PZX5a7]jQQ7=f`f/2mFDdYSU7Z>4jU8fm7WX^6?Xa=21cK`d6fQjl0?f7WkgUmVfNXQlaodkM5KNfigHeIC:;JZWRlMDASX_7IV1TjDVUU6 i=e@o`3:>HPgCmTQ2g/5Rm[?YTMfd1`>ZEZ@PTD8Z_LmlY`F41^FhK>7EE7J^38J=k3Kf_jKJ9a0 ZU0oeN7Wm^gGNg]^HYNH`f@jB<>kCXFKgEF4URZXTX6CL3jEQ7PeHGT2DJiJZJ^h:0 8RkDKT]koK4oJ_YlAD0Yef]EWL;4A5_JhP7?c7j]TeHWC89lggKBKjUNT^d15LjC?8ZkHPSjdh5COBTcZW@:UU>08[9n]7KH7B1/?5> TUF9jUXEBLTfdXe:Vjm4G4SXYKPf?YP^A0hL=`_ B5f@U>X^M6PgADUD]hIJX0OMk6389_NlklQfl_EIdUSYJ78A3WiOI]i:9cf^KWK` lo]fjZfm]caeCQGo07RX8Ff7>AXkR9I5bTNQedAL:jk2bQdmg3QgRgN69K_CLN8g Vh28`]ME9:^G65[L@FO0jKR=4;0H2VIYIQ=M_L5>d]`mZanG7K0EHNoa7godfl=L@;C2iTA4/79QYWY?9a1c7i>6Sbk8Oj0il``J[Q:5m3kojKKmCUcILho^o [/M]_K0VVJB`nMEQEP?L;F:j:/hQ^JJU<4kXQHb?b1a9iflkL@hI1];HL`m84XRS gJ508OWmVfZ/D@ RHW0ho^onfd@WEMBAGB995R1B9T5b8U4m[T0aBL1;LbI_I9DLeZiO Y8HS:`Le4/Fi:VKU4Sf3DM6=nQhkSZ4FBk=lWPKh/gJo`j;eCESGX>D43fLPdfZJ U8Y]TcDfXMA4MoHjH7=_G7]j=k078o3b6<]H9IKo0?Ko017lo`1M[0fdlRHL?fOb _;KN]/KG67V94;?eMQgE:2ZlM8HabUCCBE4` l]W^6N;;f/4iRZj=XnEVHfXYHSU^^FGI8W0@H/4U4c9VE1@ZZA`>AE<@k2Q31KU/ =^UQ5bBCZQ6;PjKRXg;^A2Wi][6KVF8:::6Z:aeMh1G7M=?hZS:>KnS5>_UY>YBC3RkhbYQCALkXh8KAL2XhK_eR^UbY9^55b958SU<1 H]53eK/Lo[o?fOO/l:e:ZR2RIKo_]coO/OGN9Rm9m1VSjPZ:TGb5<@[FWgCVFMc; 7C18P]LR^GEHN7LX>HBLTfkAhS[[ /c9Z[8R/9LY`:OBD;Zg=ZYidS9V:??;o01oU77ASJDAR;A_F=3:]F[:7=4]e6/TO ZXjAEW3c<[jTT:[HC6DC?WSc5@eLiSMTPM428L]lCjQYi42A]C@TFTNMTD`g]=hT /[WHXY4STLMgY42bQ5PaYFZZ/@PJc52RemA9N@6b4dfDc:KXGP@We1F:mNd@bUjB@K8[ >[;^PVB^/XmF^A^D03T9RF_OSafS0PZTEY^]MnZCE@5bmm^5C04`g@PMWhca7VI< m`8?3SaUhF4Z1_GE2:^ZTFLX]7UU4CaQD;Tj/LP0IQc3c41mXN?2o?IF18995]on `WhQ/PlGP7dOS?Zf55G6T/?Ok9f4a1Vi^JO=jJQZKVW 39S7=KVgEMRZHRMRMT>i=a7<1@hg40]]=Bh2A8T7:ABE `Ca=V:lOeMFm9`DG^LaEimE9o=:LS1Q_ACW9[:;=eA5EA5V12968XViBG8X14LU]YB SlOUESUe6NV8 99]55EUS7]I<3Z2Ln@;Vck9D5SID^9F>bQhW3P8ZGYR2G@OaLoD0T>g5IbgdE0DK X;X:YZ2gD3DC>8U5//1P0N6`29SE?1dF4j;Z^QGMBdZS5]VR4FcH5JbCGZhDbIYD LQdd4mA^0:ZYP@c9ADRH2i=Hi8W3W4^/n:Rab:K6BmZo?SnOio?lfbNjQHCRD?_lM^a3Cf9bT=E B:]1D]gKQaM9N/7BIA=^bMnLKUbiA_LN74OW7IkQdna5M^J2=D=<`:4NHj9R_@Z5 bhMZ5j/Lm/j2S56bW/G;Ogcn8F6SH9;e7R9dDeLDEZUZ1X[D9gKo079ZdHRV9bXP TLDE=c3>R/:AUTU?K>VZV=n>eg`ZQ9]S0HO^5jZW3]TDFVXeL8T3P?k8PN8P:lE`T42R7k@_hk=G>V3MC9KT?WlWI=];EjUdSLaab1HYcRKULMRW2@lZjjCN8ka_>C;18UG]NiI/f`YZQe?5 mXC:=cW6hmPK3k=nE[k1j/63j8o/WXfX]a[J_Xi6Vh8gXVN;HOYQ3E8S><4EE9oFJ9J[EV_YP>/ML04EK?5UGCX;TiPZgEB0`I2QiOWmnc`DT?RT[O_7 cf90eeF=2OfNmSL8I2S8B2;<9^:VCT=NXjXNJbdH^gBA58f^@FbhSXVE@BCgU14Y1L3T>ZN a]b88Ul?Wo?7o[]/14_H=cngbfj1`Ra5[F^JOWJlXbQJEg:HVAF3Q1Z eJ^DE21773EC>gUj2IbU;ddbP`I]22h@Z=`^j;ISf0: fj_B9c]NiRF3HiPT3V4ikTEf8N6DFoAXG3anhZbOGIRaIj3MI^c8R[N??`?UJT>Cch2 C]i>@MPGK4QB?DP]nd9inHN>dJibJJU_hn@k;8b=JXHjed58daCdVV4ffBEEOCZc AD5>[FXiGh`gIh0IBX>jXZFVnPa3EED/IB3NV82:QiQc9Ze6mc0fK Z8[:ZJNi6>8PA<10^H`W4fGia_LM7b/WSGG:R5CC/JPQD;A;B@J]PB=nSVIa41FA >9ki[29A]fK1H@?]@JVHcd9d28nYTgmAE24ECDLiCYUE1PA>GG8:1Tfim9YVcW<0 9i4[P?823bfGMf1b]fON?n8kJ=bT>:O;mWinGinKJZb?BFW4LA6TXm`X96eH`SYA ZaYYe=lGB9UVImDc]9^M/QYk^ZEHQcPMjEZC:KFO]J0>mAL?3>j X1^mkfVPBA:P/TLP8gN^4c]79c9XjPj:>LXSWA8LKm7JW:Aa9aTLdP[[E32>4Ta<;`lS5bR[23 TDfRK@IN2M_iK:ZPcAk/BgoUoe f7DCdUV7`=`/=:DdcKDc5YA>heAe^ZhKB2SYBLQQAeADBLFn6:YUkXf>AHc]94j20T8R_[92>X@LUPEe4a?Hj O`UXaWPgBf9Zh>EJRUb`jSYIe8RlJR/lDK9>eDVemfCEL0ZYZ;8YQZjal`V1@h6X 6=V450HGDM0AM=MKDi2bA53B5B_YXECDhA/D^j2PnGEeFZQ=EA1^6Y^a2;>2RV8[ f>ShOdo?mMW1@J::I;N9_jk6?22^In_F0F_c6m^>c]/@MlB6g_Uo4=XmeT9Z07 ihK2JA=QL7BZa22[JgjVT?BE^>k4Zmg5jPMCa`0X::BbAAhR0G/?QfncU0Ie5:dJ Ud1h=cQ]F19b^0I@?ETH]F[]LbcWNVQcfJKlVAED^Ji4leQ=UC^1N6aWCZJOR>TO R2eS:>W9Y/=D=aEGI?fB2KOm4aWI=[>B7i3O/Qc<7WL@mRK>c5@OfEI:FVV4cA[H l70XB=C>ieQ^c@VXc5@bPY_@E>V87<@m/ZRP284^8TcE2L6d^]oW7Wm^dbc_TBom _anKboQhkD72NX:0a1Kcm;hkeB=BHNRdE;@9i2:Z8F]4R]gLg5?IYi5dJkK7U60=oA>7NPaj_dCl7Ib>Me3ELl42V:U`8a8V:XWBE 8Rja>`FaAa=jDMIEG5A:C=9fmJ ID9;78LFQbPn/LZeS4CA=ghICi>G40fZGB6IhLhNdeCal5WSBSZ?1ZkCWGM6?56b cA5EMXA4j88Gdde5m;FEKT5HnA^@N`LMVN4V4F8E0eIAN9BBK=c4]EfCQ_^l`RBD VPT]:oF8f]K>/9e>lFgQ`PgD042UhF3YHB/Q9cU6?9ZW3WNAA7WEe=bdRT_ehM@2 8W42X4GdgCL>dEDjBZI@MVC^AAE?IAhLWD>Z=P^6@KhEB87A1Z@3iCG/J8fXJ/DaFXV> T:H>cBFTS5L7=<4F5<>[WHU7801V0AC]a/?l5HXYBC25_lD?hKJ^53WIZ1LAh7oJ 1iNGl?3JW6n3cnm]R:=D9]b_P[5]X^3TL0LPmAaHPD3YSKUZL>ccmS_1BK =ii6H@VEU9M<9@j:KQ=fLRJJBR1@O>=GA>2SY9^fC8VR8kBLTV@lbh4O1CloWkM] 6:VA^TDC3b9hg_l0=K`nXNNePj;d1Qm8BLS5bU6adcQbjSgcJ=Ib];IU7LZ;aR0MGf5D113^TbRTMjAQ/3GN<5AMKd33_oARZFjU?jm6[>CaZAHB8b0d 3@mGoIF8CUH10>b5Pid@WD`OY1C4jQ0@S>FTZOL=ge;=WblJ3E^TlAdGXPI^G>:` Z[8QU86R3@RAcjP:59d=ADeGQlA:jEBYj5L;;E2VhM0BZU4R93e;5L04[>jXLKi[ O^i17^ec0Lh0?Qo;lglM]UTdSW7Qmh1n8K3jT:N`TQ>SS@/^[Qk54Z9AWBRLQVQFRXGJYibK`7Kd>m=TB3`d1?9fBgdahP1k5<9BT>;^V5:eHBDXREL`T@cW8Y]:VYmTeWc^N/;VJJ`G>g@5/ XA80klgI:CN4Q^:a;kXVDgRnKa7al_`n_gM_51b7gQnO/f]N7Rn6;?0^7QF/_Qb]C F798fBe4Uc?O@Ufb=L8UI9AAAdIVDP28L>8Yg_`<>O9]c5QodO9j_L8UGU2EB`m3 :R?eM;ZB;Q`gNQ^U]HHeZ3BkLDUAL8X]UQ>3AA_Z9R[W4Ak3`oZV]9AiQllZ2V:K I=9DFie5FUB:^e2:36:W:09WI50oSne3`=ahYS9An@TRP@1oJ1ocOWQlgck8>k0e >1;lQoiMZa;a65dWd]/Ba[RP6mA>DZUK:JXdBjW18R4;6mgZPeF:V?JDkX]_SKl< hk368C`3D`XXFVHB8Y1kGm>/ZCGO=FU9;^YUPP3V?>ZZLYFagA2RUZM]CQgR@7]Z 1/J1Oen?B`a2AYFWZOUTVEE]3YkiEblNX@h`lMV0j2CAHPUmT@4iP<>HK073Dh?1 6R]fFPjaZEM6UV:kaM[8KjMbE>CG>Z4RfDMK/HbY05EkTc/`1mYK]Lh4mKNb02NA G_l0:7ao?k]_f3Wk9O;bfjCSioXP9e34e=Cd?QMj3@K>KDNBlKC:A8Z=T]jR 24c[UKJAEQ]chG3Bl3Tf5N9n7E@COB26M`MX19eCRTRaOd@oY6VE4hj:LMGXKbjM jKL0EA?gAR759fAE3>A<<`i58JQJMZo5c6h58abaS/BXUQeXfJC3aEU7VIX;4J]E M=__9eA=_c__B;RM/XS^`T0VIA`Jj0aBo^a@3PRPAIA57B>/=eLhh4AA?LNOeoOnNOQ/X:@8MfSa=iOWlff4V5 f4/l[SoCeCE5QJm=1;mE9E8jFY9EF8VHlfTF?AI]m8K0WjVL>kCgLRKU=Lia7LB FF;7AhRNSW8@SYZgZQ[6djcZQ6G0c>EL=`@E?YmbLjY3j:hmj6TiB@FdUSib2NYE UQ5RMQcD/MFMDBUBIADAKT8>[g_ ]B`0On?ioY]SBC?fEQ]iK7X9[X`aN9LT=G@e;Yb=Cboo06LANdV>lBI=aKoZIC=l cP1?Z26T0P9U@lCQNG`OYS202HO^h;35:8WTT6XmJYd2hS5C7;7VcN/Re9YPH;Tm ^aPk_g/XlLWPXB:`dVH^9TGHDO<=5fUO?dFHijOKUcZZ0RSYTgE@P[?lkM47`<`8 T]WD^8>?X7BSS4>1F:OLe^B1VI;n0FcBAB8RRLXGiN8Qi3]FIB7`gEjBmF?ZZX5>EOMN=5S>2DF[9RZV4Ne181 G8e?a:O>?]g:7ekL]dK1A@m4EH1IM06[9>?/9TedmhS/ gLY2g?WE<[gnAcek5_:iJM82_`Yn:P99RJXVgKOcJ[AA5CZj=0bFVAXY`bG?O?a4 fF`0=`hi`bTIAeR_Qm3@dRYj=/IeW8d]TG?74TIQDEe7`2j:6^ZfdUIC8LcM87AD ;::ZIDaM^g101fZ9Qmhnf6BUdLWc4o3loT=^WYM331mS]1/Gf70>fahFD8heZ1MW e36M<5;i=f/=nfHClPM8aO3C7RIPinRN/B=W:DWD[b8U3[9Dnc>c3C>8;YY2/O:f>X:B82853aD>VVZd0 ;R6cO<:Q>`0l_U1ioWl=WL4S@2GATXd1`nL8BR2=>JjRM5^R25WC4A3>2?bbT7V8 MgOT@M[ZVWAdISC5^HjSeFa>Ygj@k]B:i>0[/^5`AnP73abGmgP3Z4ao@UJ1X;2Q 25H0d>NWXb5Z5]:7DJc3]/ZPMDZB>T;Q94`=7PX[:T:ADSDA^V2ZASVYJC[e?7VW b>HJU`Lm@_l0DJTUW1Q_[afL@7M;RG]ONDAimQCT5ohkNF^LAngaficagQWSkYB^ 6l@gS6/]?_dD:8T7SLdL==>c=6eg1dQ0;RXh56b_N2h41I6C4>0mED`=7:WYdH>S W[0EB8:]U5ZJ>c>f;^bPQZIdPdQbIda0K2GEbl;kLPHgY9^>TYR?eXo16WWa0Ba? DSe3[PdS0QD@c/`Eda

LRAn^8YgFbXDnU>=X5VV:[@GJS5 jh?K^SmU?^RUhZP1NHMPK274;^faK>4P7o43l@fbo=j^D0l2nOcKE9T`[YidU6SFI:YK9Z9_8AElX:_E4Gf`D:kC0_H^6G9c/KR5`<=JRXb[:go/o:IYnZYZ0 ODa<]JCIWST:GL/eRJSiP6HE0NmP>=n`ACg9e=73nbiLLg3a6gV6`nCLhIYm4nP6SAAe:VeAjiFbo`29ioWloM9/fhjBI[3b9kW3Uioal=Z7E=?ecdEjURgM6b_Y SEF8>]6>gmADb8Y9X]Dde4RJK4BJQPkNRPPC>ZM`^L`STk5JPnUiRBBZ9>GQjD3G7?JaK5naQBk?11N]i^ATZ=S7Cbf8700bL081;F0=Xa5bRLWNT^?fOWk^7Q/j>TZ8G>T8SmG cnGcON7?H4aOBN[>4`fYm/lXm[9Do3/4gDBFNBe55B=TC:UbZ[4o DQ>TVXMDA4BgBRbc?Bb[=c4ejnCQI:QFYdn]jIQd`@<;UA=@bJA7@[U_Y9TeVjZJ eQ1T^A@PZ0V5dRcH7af5]>_?A]5YR7JbSO9a7R 6MCFC;fRQanX?clgd_J7S]UE4fJn@@in0oalo`2W7IN8`lVZ1j8MDDUC]A9/hFKf/g8XK4:?RZVKhadPIeDRSeXgTe]A7Z@6i Oe1b5`<7/QOka7WL=QSELMQ:CXmE`PgXDQg/PS=]fbPD@mD1?^U0kJQfhi0^V74g MlN70BKF^Uhg2mC7fRG=:d@J>O9BRkY=h=7?HoPN=Lik[:=L^HLiA7_6cSR?A9F:1na48^07m1 aI;icQVmoV5n@l@iK31g@/WD7mVcA/AE]B?YJ6Vfm9@Lg6WBWa9T:ZXK[QojE]5]iBXUe9WCBjVSB06/RdD^?]nmO R74>F`k5?1b=j9]6[^hFDBF5DGCLPYT3_37NLSl0Wf>/E5ZHBUDJ^ZOUdeV2^5dPXEcji6LdC /aeB1X52mQ]gE/^LU`KRGCeDe7daIEeQoAmC6HaTVe?B2TIB3eZbPggETJ3PI5]^ XJIC9jNX@i5=A/HjB80YL56kI?E2iboMnOl0jQ/hA4WkD_fSmOihN>b<3dTl@8NP 8nTca3nJS:OK=TVdK4``7VFR/JM[fi78AL282XRVAKC88]QGA2k[R>ecXa:JjEEO ZAf8UA^4WU2<7:SJLXe1^PQ_2jSK>fAeDEkW:V@@FB>MHQb>6BUTc70Y1kQYAljW SUC=AE7C]E_8MbiQI>XYIJV7jTID3L1A?59=20T9/j@Re4P0RCMb8^TCZ;J`WG?j S30m]ROCKISQ298][CdXTEPG2:A@82b[YTLCYXMGncf5lhoBChMi]/M>`GC0Lo7` oQo3aio=]Q@`5=`o?3llM[S@V64]Be?C=7`UNE<`R86@DH]T4X^<>9k/VbQeUe3/ a5EAI@bjZRWVP/VA>ZgDG7Y96oAYo4SHR`F4gPYkPQ U/1QfZ3]EVUTcP0Um_R73gkK>H]5KOd>OaQ?3i mVJioEe?Zl_XS]?]:KOc?BOa5MaENCl:E:[6h;]Xa]7ZYRX4=67e3R^eED0`QT;` >GQJ`Ghk1ToAhY131>0[Ee=E6n??WP4gD4oK/5XQ=F@M/V[]`Vg>c:UZW8Z^?nIb ^LQ0HU?h_3Aod[D9mb5B=B=UaXMa=S^oDlKf=HR1`9fS:MgOg[fkFe 6GL>lMGMLPZ6^LN0f>:W_K?ISCDT3=HMEMDJ[jZFlU6B5FeFAW8YAj8KZM^3PhY9 2L3W0B99jP0:cXjYcWD4iEIg1S3QUdPjH?R_R7=CSJAFV39?f/NMTPbVFb3I4SMI DP=`>ZeD;gjACf4b3cC=[X20ZAgB3Yb5ZfDQ:L`e`^V4XYB9VEJVR8RQW4E8b[Ce <=g@EFAAC4^ZE=A@VX6ZE5/XWHnC_>O3`oQ/Z:XKYOanol0jKA?`@Af6_AO AamP7=FCE@9AdK=]hJ;5/IZgN:j6m[/f`5e27DKX711D3V8VA8E;;;9Z8^d37CC?KJhC53 DfYd3HR:XBUX^6[I``Rn[9`:6DB12B4kO_l0E5X887TNY: /VT<@l;ZQI@;eXCZN6Z20EUWH;Kajfi4Bkb2I5]EWM;/U_S39]B:3K?c0B3L0_ OR1Zg0]L<>]:YBF`eLiUi1@YQm1U@cY0dB]na6hFD7Wa4C73;cfVJ:HD;74X5:4X @HaG/0f>UC6kPgm@FiWd`d>1A;h3k8F/OI`aE7NTOliOa3IVj4jR9lgUo`33I>4P WckY5HS?F>8Le3XnTc@Rc9VVadQD2;SQ^>/PZNiP4Y1hUhF/D1k`@oB^1m4@F258 HZAmBCJDi9NSbRO[CHFdJhN>F172kI[XJ:2bXR:QcU9faDD_`E>0UYRkP_kbEO]Y ^T7TX_enRA1dB2DMTCA69Hg9ZmX;G0o0<_gg6W]cDSoM3XI5BRG:jjjU:PZj?CIb JammHMX`iAnR?Sbig3IdnF7NUOl0h]b39E i7B39gDdXQ4Z]jL@5ER>/9=58UeE@KXP:WM4eM@`QU0YlHKhOdoSgA[G4g5M/VT@G3AH1eTfccN

CT4bQ17@[b4XmlagF ViO>?Dfki^oR`;h00mTW:h3hFfN@Lc5?JXWUG56cK`jTbA8=F6CcXgSFb]S1OP0g 7R85kJPQc]M[_1R4/GKM?/4h1anccf1dQ@E>DedD8[6NSFlUEF8gEl=>dDj/g>:RG/TOYY:FGA4CGB3OAHM2G3_CXfA?gM8gMZAJ:Wo08UU He`iSgIN9@40/@N01L;K:cZc_7Z4NB52e0/?Xo9JJ8]FhWoFF72f_m@L_>m]]1G7 C4]]ULW^SloR6e8@`a`e[K6RXjQZfZWVXHZFLhF/?1Bhj@3ak FM>TWZWY[E9e:=UcRkZ==DD]aK41_nS8l;7cZL?/nUafTZ6OKgBe4YYDK9]dmgHU BM>6;KCA3LcWmaHC43g;QLVjiPGS/=5jNa7Ga4Jb_E4?YnCokA[mP^j]DBiPgBenh=m@05Q4C285SKfcD:4R@2g7m o`3CKL9U@?fHOOl0cf3KBPlDFN55h0LfYOQIU`n_kPlBM]kK?X94Lk3]/B=A` 5>=GcL30DW9Ae@cJLXeDMe6iI;8T2?H=A0jHeg4ZHK/a0=K[Pk]AgVLVkX6:PYIS7?TBj 8>XVVT:Qe2U:@;R8SbfFGYR=L[6L:UhR>bI9EI>Of?gn6bZ3U/j@eFcQ 9DUa9VC?L;P=Q3mh3/gm48LBiL_gkKML:QkPOOl0cf04OQWSI7M7bVZ5Kd[@mZNC Q4]HmF^E@D1TXg>KPN<7R>TL07Wk1^O9a:D9SO8hXamCS@E1gH@[b;5^=L>no5MI V[V4oEG2fiP7e3/Ln/hd889@I1]^@Yj`>MD=?9l[=b]/dEZRVD8d[aNXXa=^MCB: ZMf@22O;V]No>g7KH:GQdQo[]h9IacboSo?H?]J>a_BVYEEK3nPC=gjZ[Q9<:cLM `>jXX587j8_ad>9[g3D=c/0K?j4XO5F:U:@S:UYnV2AE?8]dUgKJZ5gCPnTcFA0@ Ag18Pm/a?O3fcO9b79_YUB6mRQjE@nZDK2COTkQfc4loUYW;mI1l]U4:YYUe=YaS JXX]IhZ=TfjK]E4aC4=QdNS/ CX;6:/9VWhFV9R?ZFL@VD=nWUf2R>ARaJR@aBUa0fL[E<70]dDCo]5WBPUhX7f;7`WHJRf5H<@ZIdbY9;R O[I2`9Z50jAoJi70aA0O413IAN6RUUaFD7]Glo7KE=jh8001?;co09kD1cA>:[o5 n7Z]iAm4IHR3NaIFOY2^H53^56BXSVg3P1C/P3Uf/mk1U/f?Q5`n5Z:oYeCfV1A>9n/dKFbRNo]O90AnX1fKmA`][I_mffMkLF]YoSo 03fYPdIR6UQK6dbeQJH]50`?0LPIYIBWZgFa@ JC9hZ11XcSeFBJ8BbokEE4aa4VQU6`8mWjaiGfVOQ<`g5HDoQ1Y[>DnT8MK8L3LN 7]LnbKm`kJ1RUQTI<3QR;C0PH041jg@hg4P1koVZV7o^5lm/Q3@I?NogkI5dj?l0 /oafPf5>HR 6dXeK>hEA>YM@=f>UgI1;f;R9ONh1L>>falGl9DTSZ:HXdR@ZABW>8cKO/P?8AkO S/jS/B/>IRLJALCGm=_GTPOCJ=fdZRXXh=Y6E/@X6^HMA@Yd nOl0Vo[]XM`lbSLWgKA3>SJUQ/BJZUXeN9L]JTUDYP2;2/TXTLS11]Y2=c1kCA8L hFk:Q`b28ISa3G2bZ6N0=?d6U>A6BWnZ01c^RPKc^Bj2UlVO/I`KiKM_;ZGhiK64 cBPOAKnfcZO7O4;52S6L8Q1^6IbVZA59 @E53WD^=n2ihgO2H_DD;OB@Fe@Wf^C8/80RJnOTX9b0GiFH;K:ZaTDZZ9e>OnKn^ bH>79>81mfcIaA=HZhT<:V9] L4`jnKM^`9R=^gi;8ol0mBO:3II?5g2MH`PSROBAl_?;==a]gIE?Uo8>@oe70O7I 4HV50;3o03JB5C`KY29gLECY@ZbBZnTWUmXGAkGn L3foL8B:>;N5;WmGa=Y=G_C8MRJKSgP4:LBNgc0RQ3FlSQik;AF9n6/i;]8n4a3Y V@M?a:3A1[;8:WLGB5Df?QblM]E7KlB21 `hOi0oU/6GPHI9M9G4UBYJ4==?E:X@5E`SB:lX:MXB>/6ZVRYHKN7T?;SfZPU4hC =>RmB2G`A;8ZjU=YZYT`nGB5?8^P8ic6KN7;k^I]RHdMERfaka:93@/ /9EM7>KZF>k6@[Lh0G?T3V?]6hGhK3nYZeZ6UnQ;CeGe<`YeY2@0Djo>ZfN^GKTB k`f/TVR3DXJjX6db1LW5D]lP1Vf3ll0WUg01ccnNeYJGb9ongho=]YETadLL?W[> [jeXaQ0`KEPiSQ>m`oD@1`^XhJPRVVT;KDE?I_fB40AbQOg;UI1G?ASHBDY0mB@I iJ[57:d@TQBa5N/T5TR9]e0DC@5?BL2C8g`6a/agDa=T:KMVXXm: hUDZRmMX@BcdGZ239`:I72kU`@DBT@k/bFHRZ:bJiBTbWAEBFC3^E1=fGZB8>0BKUmDEDF4A>fASkYf?inOihL>OoY] hk?b9;I0^8go09KMT]L@nS:MJ;QTXF31kCZaGT/2UUc[;9TB4SO?T Fl Ri@4Y8`PaW=QCEmB7EYU[=HVeBaI>iF>FNmF83UYQDlI7K9E <9eNX46h2KDMJPPKUHnUO>0m[ahV]]MF[G ZMSV8?3QTiO@l>83Z7ZIgR9oIUeMFm=YABTK>/:VMY=gDLi1bWMIkWAGA>LKZT?M 8h1V9O=T79KHZ[9E?l?e4knnQeFi9YHE1AK^0>Om6_>11^LPF?Wh2?8@i3H3[`RH 9Bb1AoaOiK<7J_M:f7`?hSiKAjCB69ScR8XkX1NFEGZ=5@cTTHf?`jXSbndH@4o: ean[T6`lM7PXKXCD8MaQ`_7]8PJGL^7RdFd8TcA@L/e3:VV664>85>HddeR39hOB2LHAdgN_9IDF1G5C8;2 @63@kDE`5?/kC;EQG8H3dHPQDE963FP^3>0LW04[XSfCkia h0NaQhL^OSElFl8j[a@a?PF2UO`l?3`cWYN4WW:[e9ne jYGBLXkTfkAOGNl;`_k?<]Q/?>M``TgZc?3^=LHHe36Y98]STT7RTMYY24F/B`jK aADCF2g03Nf7dQ02^/B5>S[CmBhJ=Tfd_0D@kFm8IefdE1`gEMYTN;^B=de`1gn_ TGG:0]B@ l36h1OCQX7bl[3o`0^cJe21j]K^ U7LJY6T8R[e95TdQeg:Iln@0hfmUCW]375@0b3dH>VkD695>iGSB g0ScV?2fD_2o2o/kF9Pg[AgSaRDBTZYPf5ZYKmRDQ73g:Ye?6ncTMXmV`Uh1hR?W ]FjNPJh9d?:5J/:RYa>;@2V1K=_Ae@54TB>6URImo`1>o0?Il^06lI2Db38;3him VR8U18W;mWinFePTJcW0j@l:nn1jYPMY@4T2CGN8[NER7LAhZ2V>oI7S/fGSLC4LLHLSV/ZC5j< 6odcYdZi1fXJ@YL;L_Yo;fK]0`_ZW8g@SL^VkS4`E4= ;8V06NgkGQVnd`LmY@J[ZLn9BCoh9:ah>HON/FACS7?F5;R8<;P?X /hmTE0^7joch3cig2g/6__f;FoS]/YT^KUkgb_cmNf[J[ZT?3cBK?2VZDe5Ee^9W /EYPYY4n@l4O[lOJnKIk2e=?b=DdXcNd9DVj/jCDl0mcg`l>>eAHEYEBo@`XXS S3fXEUDdjHE5j/iSQBLZKhck9K?c61@e^5a]fP^8lM[G1/Z_7Y2HW:D_D=>/4EJY K2/RjQEGRXZMCaPIS2EhCgLPN`G`n/JLcn41?XBd6X5F@Y4CSB`90[CCUA@;^V84 0jQWWK6ibGlOKhGi?i7mLDoc3]XP@Xi>G^NOU]JW=Fe2[dW81bK2fYdE4X>FB8P; ^l]PhG_Hg>eo6EYn/:W=Dll:V5]DgDU>FmaUd`1Vd]Oe[ac6nEk9_ Xk@c^?[]_dVjL:JYH7N?AfK>VXFVEP8A;NH[/FgcP?e25o;QaTJJSZf9FUFkUDd6 1n]b2l0T4LaS[mG]>G[OHk=^1PnNm]XXi`hFo7KfA?Cl>Gd_UKEB2ZBXE^Q;@C=_ Qe>RA=_BbRB`>fAb:03QXHi@klCg02Sc00mWR74Bckb]j/DjBL<1lVh9BA]g91V?Ke]Ua0nllB1fO3 `=iP1KPiJEfWS;4/UjUQE7:d38jEZM4^@Vm<`7/kgi6;mhSKfMU;Vo7ILi4`9=K0UQi>WeJS2o`2T8o^2Q6<0hn/Gif7T>cVPjPZ9iCM0ARU5bC1X ZgJRXoFT6bRA<[> nXoibOS/VZA;ADiL_YO9fKXDU72H6BbZQTBea EBg@a1]OZjZZhj?m>mI8cZJ1K/7EE>1DGK]Gj93X7IX8]b9WDRaB0cM?FgI_ eEH@4oNg?3BR6[8^S2Cgal?8O?jo]_]>AaNk0A3gBOQhK4kXcH=DmRACTg5eAE4e 9]6C`TY5eU4bh]G4^l38TZX3/A>hc=R2VQM5`:6Tib2CN2;2<3RM1ZD1dl6];DK6 ZX[DXmIam=DnI4=jZ]SXY78@Y`8@7>jZjVPZLZifSU^XhL;IbLRY B[bDYQDhWP8Lm6^IDl8?M2]O8ED4PL0ZTZVT@bPI3kc`g/aMS;ekQo0h6EQ7A^6l Ve8XNGdTV^7SgC0=4m[UgK9fRgh3JnNgS]5:^EMLnH1=mWgo05fo?:bZP2I@KL_i kLfh9AQjijEGQi0F`MVo<=PSd[9FTT fk2EMDloS:BSFJ;>BP5HGZHdPiEENKZZQ[0VAa^nPh<91D/TALG8M]4;XYZW>ZD< ]Po[Kmoo047afbDA<[V7JWbN:^>kC2E]BCF;m3gIh[LoPc:fK95UFcW>VZiKP/T: [I9<3WlfkQBRXh;Y>9TYbGg1b5`8?4m^ERoB< =l^gcm[1YF;9F=X6C[@IjNWXLjd1=akPCTJX28[>VQVmdaNkjM5f2IcXRED7b2R>]LV^WZYjY]>nHh KCdLVHlRf<@?fWl@o?WmVc>@n84i?43L^?Qhgf/9HU^na^[aLeJB;EDIlZBKE2K1 4P3eBa^G:G]4iP?PK]InAPf64AQAQK3dMCF9=9;^fTZkFRMjDBZAHDfZ;UdeGMPT V:^Vg1IE8RR^TA8E3I/`V0A;]Jj]aH`UX[Y?e1@eIMRYZSUmF@j2@Zi=AGRWLN7Ho3KI:6Ym?6B?o`2l6FDI8`CUZZKdX>Z95CZ/ l_N7DcG/5nI/fKk1DYmWBJcfZEe:nTQ>FdHF[WkJTja8b`aZI 1=AlnkBK=ZT2`PfC^L0lOn^b^Lin77mhK@:mCfeajJY7[nD>3F3G4MG4=Oh aAjWckko0<^gUc;hGf/9j]O4XZUP?QSDbQmjSd4e1J<18NbNH1kCP1;hn@T4N9@h kK^jXTCHkY?3HMeMg<6X8Xi8k/Tg`;ZO[G?^`7R5n9;LLfcP2W7ko;K>Z?Slo_K3 mFQ>S]D]Cb]NbLf`NCd?8^46/P_G:jQb:8T1A/9_F18LDa?ZY0YW54ELaK3OJfHO ?:5F[g3Q60[==k;V5=Ma7YeZhMYYYS4[Qf6^/9A;`hG80NmcfU^]IeFT:PI]j4Zm =EIMn:[i5B;D>VLBG2g[HSLW0;F7h_`hK@n7N>M4ECSiB^7LH/l2MKSUL97B@gJb ;1D5P@GeSY[RTZKBDgHb^VL3ITEOZ7anP>bSQQA:g BEa3AZR/7We=64_Y9;YlKVlSnj?R6d0aIHFo`1gRU4dJiF< /ZfPG9T6n8[aI8R6lX0XXTGOCQYTo`0@16e[i^6eaSjTWV?B8a=SfU3EG>89EDfL 9^8aEPRVWJ7RnjkifVHgfT]fkGhK@R]OeHej>E9YW`Y[9l:Yh7EO0[3mmj`P0L3_ /gK6e^0o71bhREo:4491HOYOWlo^fK]a4Dd`_lSg_VfL?_PXLHaDm99HT>nZc@Sk eTV83`4/nl/lPJP>NOL;l;QOCEif6caZo`08EVeAOmjFXCEEB9ogQ>ak>kX3cgX; N77`cVkHGfGLeUE2V<4;:=l;:iGdX1j@VAi2S_6M`d7<0koKQTl;1gPNFciK42[6 [NXQD`S[DD2>cYWG@M@i1A9^a;Zggl?H]oViFiK<[3`bo`0=_1`2gocnU]FfjN49 ZAPTDLDgJkYA=VhGo`2m5lJb?M:6DoG1c1gROejY;Nd6fhB633S54@Fa<8A92;41 G=RJk3;WM68>Fcga4XlN7/43`/FM2/Z]FXbWfj>5mMD Le_Nn:=iUc^OCV[?CA`D<7jk<2DOTC@j`R;Z1W7R7jAhLP;OQmfbVDi>Nf=CWalo OfZIIK1Td5DjR69RFoTGN=R4n4]hVEHBYGoo03Nb81hl13C4N01]HjL73H^;]8Z` 5MS8B9WP]@J:EdkNLN[g8R0=S>52:6/@A]KQHaoLfmjJeD41?]G64mKK^VXm;ZKg 3PA?K1=fXX=oXPO gN@GfLAjJVmXNFH?;iHKJ;V^VOSinmm7JWIl=FoBR[cd_a1jZTUJ[K:=6GYPiSaMbbFSB8iaR8^i01IfT[V0Pin E_[iKDb?[:XWO@e`oSe<=JYE@8=::18:?HLFjfAha<2P03k?a]`hK?GjImlE7j@n FbJ702OnSanKKIbl`CFanPL^:A5H/JOUQGGn4MfNbP[/[YYPcIo6fNm/MCQLnDK3U]KfY5mG5G:m8b4U5L9j hIV@YbFB1PY8@hZ[7DGSS08N_RBhI09fQi[QhG]8diGMGQDUA]1`][EcWUbYPY_d AW@^a@6`n_l0fmSo01BL?JfSc9NGl=/inkongck3BWI;2ACX[D8ESR6PiT3]:HgU [jL>aD8@bc6hRR3g/mSShP5cSf[R1ih7n3YlIX9^ea=I^6ZM?_ACD9GKXCimhHi2 i]l6o]1koRCbfGQJY[T>RE@k@:2Z/1C9C>MoeS7[9>>nI2YU^ke1cP1bMX0hSLN0 kF8JcZ/LFX`?PbZe<>XGXRRhVHc?fUVESl7IP/C>[fa4AkXKI[g71dn?ko3IK?OU loS]3dY7h@=jSZmKdgJT@=f^6:L[@_E mD4GUA13@K3D[af1e]`Gh0T//JoMYZF^0V3C?mNbe:eUDJMIeRIYQ[DR`:e1MK?; =FfVf@GMBCiRL4bTJ:2DmTUQ^8W 1;TFme@hF;`L<2n^YOiRN7cQ/V^8PROShO;3i>`;aBj=cS5gYEhXb3NYF4G3C4da RjRJ:aQgCYjVU4/A3MUbRC@2T78XV@ZXVf6MHM6^UZLj=B=LeUDB[jR Hl6kV>P8YVK[=5a8mbD^^=dg:fMnZVT@DD2:6F0kPik:I^/@PglYReRFMWFTk5Yn TB>ZVdgK:Gm3/>FXRZ=_7jomeATl?6/gdIJDQ9nOWY69TnXf[R7NTH:8:9IbG:M? M^E[giO5P8F4;kEZLL7jfL1OQW7nG?l0ShN6dXdG>2JI0?l0hOl0bk2gXOVZLJ_[ N@Vb<1ZTHiVQ8]g>M^PAT2k`F9VZRNlJi5ECb8::jac0Z6@2I4DaFTl@>TRc`mZb Y:4WJDJ>he^oO/ZPWDWNUeDM`TEH0CB>THkWCBL]e5Ah02JQ0B1`LPYk4:Tl3jL` l[]m7D?E=EA2ci49>DM7V`O^GjQAdRRhGN8Z7?HY>1;k9a1M?m IEUgTm6?TRa3BDEC0IZ=1EF^T12YA:HX?GPW3UKb o?gLN@S`fLG:/X9o?SnOin>aRXoY;ZhXH[D50`U8AlFcMB9gE;_glPHoFQ4Xei`E ACB4c=@b@TGChW8:A5BW>VX6T=KjDj4lYdVJGFYB=H;eb4:XF7I=dW2[A``gUCO2 >1cYjA`LMFJ:Z@T>g9jSSHmd;Ae@bVSZY/B 2YOC8iG<95TlZIg:Z9ed`d4QfjLZc1;3o4O6]g0hTb=hj0I>6J`cifKU4jZ[e 9H0FKVBEde2L1C4LQo6hU3KHfTdL0O`bOWln??K8jCHA4?cao?eKLlDkP1A4o`10 fDakBDC1ZACL6>^PRVLY1@4Z0XMTh7G1KXg ?<6>UAB/`n[E[>jMPfjDJMXMZf>b0A5LBZRVZ]YakD^L28T/@hj@WF^ViVXB :Cj3=MkQE/bPVfHe@fSfBLeY8]TBZ?Td@8@W94Q4k9T3<1@0UPk1LY@SHR8S/LjJ EHE;AEHlXA>;IT7CL0H=deDQdE;9[MQ=]:QXgX`Af8=B]ZOM/XUk5?eTD6BRAe53:0E==;DD4Y;[7K4e37/TDE5 3G0V@mPV8FUg68UO>9>ZIEX/NHeC8YE6MXT@@SVFC^RZYP0L2l1mZhg6`f20NA]1 ZhMD`aNhS>eTWafCEfPkZhab>FjR0RHQdc[f43UnIGQb/5cPcOZigY`Dhm_loWnF bcHUdToZ;hOAo?foG]7hHh[EGRaRg99;`l7C; EDRRIdTA8M4OK8LQ`Y=IHmeAQgRQGM9_JKQYR;S95@U@C93>6afa7;I/ZKAIP:Qg @X]UDECgEA4fLDdKRCJ4aRm3nSeAL:g`:[12THEnAC[ZMBZkNU6ZX2V3HXWMZZT0 Eb9[9PiGCG0QFQ4B0Dadk1VX:YZFAaoQjPZ^WF;:_f[WGSH0I1D5:S@?Hh^e5W2Z Rb1b7eU44a5::RRPSbfbPcBD?W0>7io=_]iLmd27]bk=_7QmngAm6m82K[K4f QJAHAd0bIcRRJT18T:/o:n55VZYIE05DmbcY9Z[9QWF?TCki=5HBY3JLAL@/@lL5W1bP@kU^CBB@DDDe?0R@R79U=eMD/3 Rm>eSBLBPiZe`2PE=419;TCYD@/K^[:RR:a1b0X6aJ`SNhIHf `Ld6akM^BWJQUZ`FSWC/fZjCM9PXP/g8OBcYYk`gBA8X2hXVeAA[[WKW@DDBDC Db?/RPTDB4]dab:I14Q[20kE;2GXfS@6>50E:=H/iB1QSVBYn7g4bBTJ0aRjBHRh :h/i593^4a5<>kED@BBC0Y;0TDX5:0L^c`/U5QQHQS1B;JV/C3bT/EmKLShQ^i7Dm@N1nZWLW:KfEQ] HORlg=<;BL@L^n8PV?3>7QlhKAkU8bJ:W3iGQlfcj6RjaFjA69[ZWiRWF:HeJR7[ />/j>?j4R[mXSQ:g/3o]n[J1KaEJSdEJi0GYULE2MngdQ>DSkWWl> @OIa`M33@oB]a4CZn_5hJBGZa]^[A6^WFcM5bV0R9P0>8Gn`ndE3_<5f 60U;W@aHA1fgCQTCYWa70A3KHkC51MYDZS JYJD/RiEC>Wj9^CWDmFBh44/QiI@l>F`7agZNR8Ll:nXS72@SJKEJ_e:WZ69a0Lb Cf?0jc@[LRFME`I55AABaU28:IA:VG^`?W;K<:YBUZUj;I7f:>8[YB/2UTC_fJUN ?HiA@4bMPcQVVl/gE>f1^/ZQb@>h?fBLMVNST9cnkkMU@B?YPYKk_Wf8caQRDBPX @6]IDFVc>kI4KIjDLfC;f=93fA055@9aCALB14eEA@8 ^ZRVXHP;787cS/?>SSFm7cTa>_L@/HIINVf;1V]0cU@EjlS7bhjj`^TCmlg0[>TJQL1RjE=eZ_28P[RTl?ZR2H07Ij`7j0F_oY_`/U8b^3C c5bU4j:a>KB/RB@gOL4jnLBMQ97?>aX2j>@Ab0LOHm`Cf^@35LAhiWJ8Ql/?0OU1 /Th8KC<9[nmh1lWJ@QF5LZm874YJVYn0S6HeDeeDg/4ZkDF7ZN>c3W8lC3o33RCQ T7WL1fXdHda0Bj5]0j]FDn4NVNTB9YZDhh1KRhS`8CDj`ijW4N79@2fiR<`_8h>a OBLa8?FN8[F0Te:PKRMZN/74AW;eA751@D@MP@hnkZi2n0NiLJ16cf1ZOA0XaAO6 95U8Z=ZMAM=TLCgYMg05fN/G9_`fbURB4YP<]dPXQ9]Rhdg9_0BjceOhAG JX=E=jSKIU=lk8O6L;U_U7Hl75Eh`j7m0=fmDaQ8m96UdV [H:IM[;841`d0=ACNR2?P1SI2F032LU[f]Ahc4ChKH[FZ>Wmh=1?M9L];Z5CoFFE la=k4N??VFeo[fi;`/VGA:lYZ?ZF/YXT>TU5>IaPNXGB4A3a8T3Z]MR>YU2hY]m< b:R`Rg>i>j4Zi05?Xk[o002EaRS5T`iAfF>V8OOhKF2Thg4ANJ[=1>ZjMeTYP2_MJVeU0>[eFa6n@7W0_7f;Wm_ W]H:GRjgK;dIecDlE8/dSYg:B2EJ;oZ2`G^;Xm^=Q]HNM_W0Lda>H1SD5H4LhSa> EJOE0ZRMF[5b@;L0f/n7kk3=JDXDl5?aC^E>M=^16d j/jkHAZaS5C0ECIP0_el;3c]/hI1IbU`mhWhk9;0LDco05O9nR?inkJ9Z6S/cKRGPO<5nHAI6f6SO1:/HI_Q/hCI_E9C:g@`gLTC/L QK08K]Ho^Lo6i;me`9P`V>8eR4^=1kkW`hi@bFhi[in`06B2 TTX]23XY=BIL^5eU`W7OZ^]c4PK]fa877QYilPNakFdFBU9i@;2TKonQ?ik KULP@N8nGiiKDUMa@WEE6Ag`HV50Se10j9Z?G>RAAAQ WZ:hV6ELZ2^0=aB>=]g2gaYabghjHG=gPiMVE2hZ]3XYHP=T/>= 9o^EC[Y;SBXMPhZ^lXPX:FC<843f^HIN?VCVJm>=lMjECS:B6=GLb;Q0SXH[MLjI 6KS/I[Gm`;0?2`G_b^eTL=LEI71ZMX_NjC@CZ5:CCFN4>i0FfmjoJ:@P5_T5@Pl3 44eclLgK=J8fUZlLHWA/W?>812?RgR[XRK5T;01kSa9bhO?/`M^dQCDkOb_?afZ4/kYdeOEncNDTkO;6Te4UG0a0;Y Ol=I3lIiF>0LN?]L;1]6^G/0BSjC8QQho>Rg8iN9 k0=oT:5ZmBZ:RFSYR6:dWgF^GEK>=I/DFZ21P^2g7hXCld>b;fSY]MfXLR7I4OU4oW/XgO]M8PJW P7b_;j]XU_9TR?SaI1?^Sh>EXPdY6@ F>ZkUd`CAJ=e23K<7/JXia4Bl@iR=n0IP3Jg9D3GJ5O6VD:[YPRH/Mdd_Ai`9/nX 9lnKOKFho9_m;S/f33N_oA>GRA[:U19;Z>CZSj<^OfaCG_joahR7fG3Qc14U8cQN 6UmhOcfegn?iRL?3`?l0bfRINCO:aM;93Alb/RW9=m?:TdD:UjX[T?aEhMX21OP= eBn03/gCZBBo_7>eU:AZ8ieh1ZAC:Pd421_JoS[GlAlCQhQUmna>J0a6O7S5G]Jd VX[6^4W072UW1LmTe23o0>>hO6SKbnOIZUQ]RLG4<:PE[RRCW<`BHZTm3g8O5[:: 09?dSfOK3`7RBocK>BdWCCF6i 14Dn74g0>cKR3=K2o55gAle5>ZoXhaYKO2P/FU7]db[Qb6lV8SHOW0;0D00UPfOa >6mKYEcCTSD5FD/lIdlk5dA1YCBj2XnY[]`b:Z?EMRDV]2e3^kUF2KPh8hJi@ADFA;ZO[FZ9>EnI[67PK]KFQ K2n^fV:EHCM?ei18/J/T2BFib40hLWJZ0`J]<^XVmB0i?ELo/0?N3afRTl8LFdl: X:U0a?Y3AQ1SAeQXmf9e]d>VKSnToOd`ig]lncV@YnAGN::49fA=iQ/RViIP@_J2 o3iGP6dSjCCQ/IHMMBPjSCc`[S<1eV7LRIIYNmWG0`ISL^N@m^ALh2aC`Va4[7Y5 cUM]X1`M;[7NVD_8?6YWU79]FSLoZBF/L3JZcLEBPVXP0WE7NLj@2@g@2U0Hb:hX =:S74ZR`1U7[/Dfi:>M1lJXRLakmIOl0T4/7ekNJD3S4fKCA1a2XBl^XZ]M6RWJM SRVVV@COY?]F:WaiGhL[LDRDi9Tl?_3IA9ngA43PH_l0_lm^Nl;l7l@L>^T;0E`k YP[PH`RSMk;a;eVN@[4kQ^WfWNZM8hM]47:P:::R2X9JFE<5;m0nUTal9ZVJR9/c WZ/CKT3aP2h4ek1L=l]a_fCOAD_HA0=/<<>LGfM>aDB[R;A:[J8CC13o0;7?=C>V WU88W=9SOiklA0AhgkFci6R/FTjSLbQjoXhEEFJKA42dVj04k2LA4OdSam/?;T?W `lNVi4@mWk`fb_8]eSIQ>7nkJ4KEU:[hMe@@U/nm;;/C97mAF?nbLW7al;l@nCfQK^J3aIEY]F?KhPD HQ_VLGJWXRj7IEEZfYQ`PhD? X:91TG0OY>4SRCP0QhQik8[?6YP?H@lO?bf[<9DD/`aka ;J]Z;Vgb:ED][?6Bc==a:MHOhS<[ZVV:5Ab2LUXBM=;_CX:PcK]_K8n B^GeDXf/78]8ZAM?5SPJ1j8^B67LUDU6hW]8i>J9;mT;lN GPkM`SaAbMEVh0FhQhO:fK?ZXVGGB:YQdY@5E8GYbE@dQO/0?HG4Ef[ Pl4?7iMn1^0l;Qg530k4G5O7:EZ^2oEY9EVfGEVY=3Oj@dVcMCDScY::Ue;jKTY2 7KN/T1@jRbNWUj6B`laF745SDSc4>TE735VhHT8UB;PQC9[:87D_N@4LgZi;OF?0 N5UXZRLHXnFGL[HUdV^AjjgQ`Wj9>00WHBC0R?j@k/8^ 5RZZZEE=ZH/A>NTii=5B9O619Ada^XL[U/1A^EaKalnAPhN6b;;2S 4aYQ16DL>8m=:=hD6FhZnRbh7mE54j>[jofndSa]T_bhN9beN/jQ?R;Ch;] 6B[7C9CBf@B:2@aah_?Jc8Xf_N`I`mnhJm@?A:0IO`fgDT45CicFlO?IWBlc<=ZQ Z]Hm9e0W_Da[MnhIP:ImdJT:T7[5Q_JhN7QcfV82ETW`d^JFY^FHZ[2AHfm^d3J9 mc?`=TD6hlKNEn=o=9W@f8[:GTWQ:oPcS:>S>e2ZDfL@B=XPT6Ce[`1=;c_g_b`d gd5B=KAlg6MKEY5?Hj>/>PQ0K/Z[I4bO]j`U:5cInb@?;U`fDK@;e9`VLN@20l`l mTEGKLBSJg;jGU]oomT01`2^07`01`0100400`0300@0000=00`040400@010040 02P0>`1:455eJF=[E6U]IJXPHFiT864002P0A`0/6E1XKgA_82dPBU15Ab1TIF=_ KG1bIG=cKg80:01C02"], "Graphics", ImageSize->{256, 142}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}], Cell[TextData[{ "Note a key feature of cellular simulations: ", StyleBox["The configuration of each site for each new generation must be \ computed simultaneously!", FontSlant->"Italic"] }], "Text"], Cell[TextData[{ "To help you with your exercise, we will begin with a few steps that \ illustrate the ", StyleBox["efficient use of lists.", FontSlant->"Italic"], " ", StyleBox["Mathematica", FontSlant->"Italic"], " stores data in the form of lists and lists of lists (also called \ \"arrays\" or \"matrices\".) " }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Initialize the Game Board (in-class)", "Section"], Cell[TextData[{ "You may initialize the game board in any way that you would like. Feel free \ to experiment. For the purposes of introduction, we'll initialize the game \ board randomly. The integer ", StyleBox["1", FontWeight->"Bold"], " will represent the presence of life; the integer ", StyleBox["0", FontWeight->"Bold"], " represents the absence of life." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"nGrid", " ", "=", " ", "5"}], ";"}], " ", RowBox[{"(*", " ", RowBox[{ "The", " ", "dimension", " ", "of", " ", "sites", " ", "along", " ", "each", " ", RowBox[{"side", "."}]}], " ", "*)"}]}]], "Input", CellLabel->"In[1]:="], Cell[BoxData[ RowBox[{ RowBox[{"life", "=", RowBox[{"RandomInteger", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"nGrid", ",", "nGrid"}], "}"}]}], "]"}]}], ";"}]], "Input", CellLabel->"In[2]:="], Cell[BoxData[ RowBox[{"life", " ", "//", " ", "MatrixForm"}]], "Input", CellLabel->"In[3]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", "life", "]"}]], "Input", CellChangeTimes->{{3.447089251203908*^9, 3.447089254024539*^9}}, CellLabel->"In[4]:="], Cell["\<\ Notice the \"white\" squares correspond to \"life\", and the {1, 1} site is \ on the lower left.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Counting Nearest Neighbors (in-class)", "Section"], Cell["\<\ How should we count the number of neighbors for each and every cell?\ \>", "Text"], Cell[TextData[{ "By using operators which act at once on entire lists, very efficient ", StyleBox["Mathematica", FontSlant->"Italic"], " programs can be written. Use the built-in command ", StyleBox["RotateRight[\[Ellipsis]]", FontWeight->"Bold"], " to define a new command, called ", StyleBox["neighbors[l_List]", FontWeight->"Bold"], ", that computes the number of nearest neighbors to every cell on the game \ board. Use ", StyleBox["doubly periodic", FontSlant->"Italic"], " boundary conditions. This means that the top boundary is adjacent to the \ bottom, and the right is adjacent to the left." }], "Text"], Cell[CellGroupData[{ Cell["Solution", "Subsubsection"], Cell[BoxData[ RowBox[{"?", "RotateRight"}]], "Input", CellLabel->"In[5]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"life", " ", "//", " ", "MatrixForm"}], ",", " ", RowBox[{ RowBox[{"RotateRight", "[", RowBox[{"life", ",", " ", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}]}], "]"}], " ", "//", " ", "MatrixForm"}]}], "}"}]], "Input", CellLabel->"In[6]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"life", " ", "//", " ", "MatrixForm"}], ",", " ", RowBox[{ RowBox[{"RotateRight", "[", RowBox[{"life", ",", " ", RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "0"}], "}"}]}], "]"}], " ", "//", " ", "MatrixForm"}]}], "}"}]], "Input", CellLabel->"In[7]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"life", " ", "//", " ", "MatrixForm"}], ",", " ", RowBox[{ RowBox[{"RotateRight", "[", RowBox[{"life", ",", " ", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], "]"}], " ", "//", " ", "MatrixForm"}]}], "}"}]], "Input", CellLabel->"In[8]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"life", " ", "//", " ", "MatrixForm"}], ",", " ", RowBox[{ RowBox[{"RotateRight", "[", RowBox[{"life", ",", " ", RowBox[{"{", RowBox[{"1", ",", "1"}], "}"}]}], "]"}], " ", "//", " ", "MatrixForm"}]}], "}"}]], "Input", CellLabel->"In[9]:="], Cell[TextData[{ "The following is the same as\n\t", StyleBox["Apply[Plus, Map[RotateRight[l, #]&, {...} ]\n", FontWeight->"Bold"], StyleBox["Note the compact \"easy-to-type\" syntax. Note, also, how \ difficult it will be for anyone to remember all of these syntax shorthands!", FontVariations->{"CompatibilityType"->0}] }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"neighbors", "[", "l_List", "]"}], " ", ":=", " ", RowBox[{"Plus", " ", "@@", " ", RowBox[{"(", RowBox[{ RowBox[{ RowBox[{"RotateRight", "[", RowBox[{"l", ",", " ", "#"}], "]"}], "&"}], " ", "/@", " ", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"1", ",", " ", "0"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}]}], "}"}], ",", " ", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", " ", RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "1"}], "}"}], ",", " ", RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", "0"}], "}"}], ",", " ", RowBox[{"{", RowBox[{ RowBox[{"-", "1"}], ",", RowBox[{"-", "1"}]}], "}"}]}], "}"}]}], ")"}]}]}]], "Input", CellLabel->"In[10]:="], Cell[BoxData[ RowBox[{"?", "neighbors"}]], "Input", CellLabel->"In[11]:="], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"life", " ", "//", " ", "MatrixForm"}], ",", " ", RowBox[{ RowBox[{"neighbors", "[", "life", "]"}], " ", "//", " ", "MatrixForm"}]}], "}"}]], "Input", CellLabel->"In[12]:="], Cell["Notice that our grid is a torus!", "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Making Life and Death Decisions", "Section"], Cell[TextData[{ "In this part, we apply the rules of ", StyleBox["Life", FontSlant->"Italic"], "." }], "Text"], Cell[TextData[{ "Define a command that takes two arguments. (For simplicity, make the name \ of your command be \"", StyleBox["lifeORdeath", FontWeight->"Bold"], "\".) ", "The command will be applied to every cell. The first argument will be ", StyleBox["1", FontWeight->"Bold"], " if life is presence at the cell; ", StyleBox["0", FontWeight->"Bold"], " otherwise. The second argument will be the count of the neighbors to the \ cell. The value of the command will be ", StyleBox["-1", FontWeight->"Bold"], " if the site dies, ", StyleBox["+1", FontWeight->"Bold"], " if there is a birth at the site; and ", StyleBox["0", FontWeight->"Bold"], " if neither a death or a birth occurs. " }], "Text"], Cell[TextData[{ "Finally, set the attributes of this newly-defined command to \"", StyleBox["Listable\"", FontWeight->"Bold"], ", by using the ", StyleBox["Attributes[\[Ellipsis]]", FontWeight->"Bold"], " command. Test your command." }], "Text", FontWeight->"Plain"], Cell[CellGroupData[{ Cell["Solution", "Subsubsection"], Cell[TextData[{ "When ", StyleBox["lifeORdeath", FontWeight->"Bold"], " = -1, the site dies. When ", StyleBox["lifeORdeath", FontWeight->"Bold"], " = +1, there is a birth." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"lifeORdeath", "[", RowBox[{"1", ",", " ", "a_"}], "]"}], " ", ":=", " ", RowBox[{ RowBox[{"-", "1"}], " ", "/;", " ", RowBox[{"(", RowBox[{ RowBox[{"a", " ", "\[GreaterEqual]", " ", "4"}], " ", "||", " ", RowBox[{"a", " ", "\[LessEqual]", " ", "1"}]}], ")"}]}]}]], "Input", CellLabel->"In[13]:="], Cell[BoxData[ RowBox[{ RowBox[{"lifeORdeath", "[", RowBox[{"0", ",", "a_"}], "]"}], " ", ":=", " ", RowBox[{"1", " ", "/;", " ", RowBox[{"a", " ", "\[Equal]", " ", "3"}]}]}]], "Input", CellLabel->"In[14]:="], Cell[BoxData[ RowBox[{ RowBox[{"lifeORdeath", "[", RowBox[{"_", ",", " ", "_"}], "]"}], " ", ":=", " ", "0"}]], "Input", CellLabel->"In[15]:="], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"Attributes", "[", "lifeORdeath", "]"}], " ", "=", " ", "Listable"}], ";"}]], "Input", CellLabel->"In[16]:="], Cell[BoxData[ RowBox[{"?", "Listable"}]], "Input", CellLabel->"In[17]:="], Cell[BoxData[ RowBox[{"?", "lifeORdeath"}]], "Input", CellLabel->"In[18]:="], Cell[BoxData[ RowBox[{"lifeORdeath", "[", RowBox[{"0", ",", "3"}], "]"}]], "Input", CellLabel->"In[19]:="], Cell[BoxData[ RowBox[{ RowBox[{"lifeORdeath", "[", RowBox[{"life", ",", RowBox[{"neighbors", "[", "life", "]"}]}], "]"}], " ", "//", " ", "MatrixForm"}]], "Input", CellLabel->"In[20]:="] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Each New Generation (in-class)", "Section"], Cell["\<\ Using your command, the game board evolves in time according to the formula \ below:\ \>", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"newLife", "[", "l_List", "]"}], " ", ":=", " ", RowBox[{"l", " ", "+", " ", RowBox[{"lifeORdeath", "[", RowBox[{"l", ",", " ", RowBox[{"neighbors", "[", "l", "]"}]}], "]"}]}]}]], "Input", CellLabel->"In[21]:="], Cell[TextData[{ "Since your command has the \"", StyleBox["Listable", FontWeight->"Bold"], "\" attribute, you can apply it to entire arrays!" }], "Text"], Cell[TextData[{ "Test your function on the game board called \"", StyleBox["life", FontWeight->"Bold"], "\"." }], "Text"], Cell[CellGroupData[{ Cell["Solution", "Subsubsection"], Cell[BoxData[ RowBox[{ RowBox[{"newLife", "[", "life", "]"}], " ", "//", " ", "MatrixForm"}]], "Input", CellLabel->"In[22]:="] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["A Bigger Simulation", "Section"], Cell[TextData[{ "Demonstrate the ", StyleBox["Game of Life", FontSlant->"Italic"], " on larger grid (", StyleBox["nGrid = 50", FontWeight->"Bold"], " for example) and (if you would like) with various initial conditions. \ Create an animation." }], "Text"], Cell[CellGroupData[{ Cell["Solution", "Subsubsection"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"nGrid", " ", "=", " ", "50"}], ";"}], " ", RowBox[{"(*", " ", RowBox[{ "The", " ", "dimension", " ", "of", " ", "sites", " ", "along", " ", "each", " ", RowBox[{"side", "."}]}], " ", "*)"}]}]], "Input", CellLabel->"In[23]:="], Cell[BoxData[ RowBox[{ RowBox[{"life", "=", RowBox[{"RandomInteger", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"nGrid", ",", "nGrid"}], "}"}]}], "]"}]}], ";"}]], "Input", CellLabel->"In[24]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", "life", "]"}]], "Input", CellChangeTimes->{3.4470892643507767`*^9}, CellLabel->"In[25]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", RowBox[{"newLife", "[", "life", "]"}], "]"}]], "Input", CellChangeTimes->{3.447089265691051*^9}, CellLabel->"In[26]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", RowBox[{"newLife", "[", RowBox[{"newLife", "[", "life", "]"}], "]"}], "]"}]], "Input", CellChangeTimes->{3.447089266693839*^9}, CellLabel->"In[27]:="], Cell[TextData[{ "If we make a list of graphic elements, we can view them as an animation. We \ need to compute a list of the evolution of the populations. We use the \ convenient built-in function \"", StyleBox["NestList[...]", FontWeight->"Bold"], "\"." }], "Text"], Cell[BoxData[ RowBox[{"?", "NestList"}]], "Input", CellLabel->"In[28]:="], Cell[BoxData[ RowBox[{"NestList", "[", RowBox[{"f", ",", " ", "x", ",", " ", "5"}], "]"}]], "Input", CellLabel->"In[29]:="], Cell[BoxData[ RowBox[{"ListAnimate", "[", RowBox[{"ArrayPlot", " ", "/@", " ", RowBox[{"NestList", "[", RowBox[{"newLife", ",", " ", "life", ",", " ", "50"}], "]"}]}], "]"}]], "Input", CellChangeTimes->{ 3.447089268576137*^9, {3.447089329621374*^9, 3.447089376788321*^9}}, CellLabel->"In[30]:="] }, Closed]], Cell[CellGroupData[{ Cell["Cheshire cat", "Subsubsection"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"nGrid", " ", "=", " ", "12"}], ";"}], " ", RowBox[{"(*", " ", RowBox[{ "One", " ", "extra", " ", "on", " ", "each", " ", "side", " ", "to", " ", "avoid", " ", "torus", " ", RowBox[{"grid", "!"}]}], " ", "*)"}]}]], "Input", CellLabel->"In[31]:="], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"life", " ", "=", " ", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", " ", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", " ", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], "}"}]}], ")"}], " ", "//", " ", "MatrixForm"}]], "Input", CellLabel->"In[32]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", "life", "]"}]], "Input", CellChangeTimes->{{3.4470892800647793`*^9, 3.447089286099798*^9}}, CellLabel->"In[33]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", RowBox[{"life", "\[LeftDoubleBracket]", RowBox[{"Range", "[", RowBox[{"12", ",", "1", ",", RowBox[{"-", "1"}]}], "]"}], "\[RightDoubleBracket]"}], "]"}]], "Input", CellChangeTimes->{3.447089287706094*^9}, CellLabel->"In[34]:="], Cell[BoxData[ RowBox[{ RowBox[{"life", " ", "=", " ", RowBox[{"life", "\[LeftDoubleBracket]", RowBox[{"Range", "[", RowBox[{"12", ",", "1", ",", RowBox[{"-", "1"}]}], "]"}], "\[RightDoubleBracket]"}]}], ";"}]], "Input", CellLabel->"In[35]:="], Cell[BoxData[ RowBox[{ RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"p", "[", "i", "]"}], " ", "=", " ", RowBox[{"ArrayPlot", "[", RowBox[{ RowBox[{"Nest", "[", RowBox[{"newLife", ",", "life", ",", " ", "i"}], "]"}], ",", " ", RowBox[{"DisplayFunction", "\[Rule]", " ", "Identity"}]}], "]"}]}], ",", " ", RowBox[{"{", RowBox[{"i", ",", "0", ",", "7"}], "}"}]}], "]"}], ";"}]], "Input", CellChangeTimes->{3.447089290904207*^9}, CellLabel->"In[36]:="], Cell[BoxData[ RowBox[{"Show", "[", RowBox[{ RowBox[{"GraphicsGrid", "[", RowBox[{"{", RowBox[{ RowBox[{"Table", "[", RowBox[{ RowBox[{"p", "[", "i", "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "3"}], "}"}]}], "]"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"p", "[", "i", "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "4", ",", "7"}], "}"}]}], "]"}]}], "}"}], "]"}], ",", RowBox[{"DisplayFunction", "\[Rule]", "$DisplayFunction"}]}], "]"}]], "Input", CellLabel->"In[37]:="] }, Closed]], Cell[CellGroupData[{ Cell["Rings around the torus", "Subsubsection"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"nGrid", " ", "=", " ", "50"}], ";"}], " ", RowBox[{"(*", " ", RowBox[{ "The", " ", "dimension", " ", "of", " ", "sites", " ", "along", " ", "each", " ", RowBox[{"side", "."}]}], " ", "*)"}]}]], "Input", CellLabel->"In[38]:="], Cell[BoxData[ RowBox[{ RowBox[{"life", " ", "=", " ", RowBox[{"Table", "[", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{"i", "\[Equal]", RowBox[{"nGrid", "/", "2"}]}], ",", " ", "1", ",", " ", "0"}], "]"}], ",", " ", RowBox[{"{", RowBox[{"i", ",", " ", "nGrid"}], "}"}], ",", " ", RowBox[{"{", "nGrid", "}"}]}], "]"}]}], ";"}]], "Input", CellLabel->"In[39]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", "life", "]"}]], "Input", CellChangeTimes->{3.447089296322247*^9}, CellLabel->"In[40]:="], Cell[BoxData[ RowBox[{"ListAnimate", "[", RowBox[{"ArrayPlot", " ", "/@", " ", RowBox[{"NestList", "[", RowBox[{"newLife", ",", " ", "life", ",", " ", "50"}], "]"}]}], "]"}]], "Input", CellChangeTimes->{ 3.4470892973518*^9, {3.447089410708186*^9, 3.447089416276411*^9}}, CellLabel->"In[41]:="] }, Closed]], Cell[CellGroupData[{ Cell["Big Spot", "Subsubsection"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"nGrid", " ", "=", " ", "50"}], ";"}], " ", RowBox[{"(*", " ", RowBox[{ "The", " ", "dimension", " ", "of", " ", "sites", " ", "along", " ", "each", " ", RowBox[{"side", "."}]}], " ", "*)"}]}]], "Input", CellLabel->"In[42]:="], Cell[BoxData[ RowBox[{ RowBox[{"life", " ", "=", " ", RowBox[{"Table", "[", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"i", "-", RowBox[{"nGrid", "/", "2"}]}], ")"}], "^", "2"}], " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"j", " ", "-", " ", RowBox[{"nGrid", "/", "2"}]}], ")"}], "^", "2"}]}], " ", "<", " ", RowBox[{ RowBox[{"(", RowBox[{"nGrid", "/", "3"}], ")"}], "^", "2"}]}], ",", " ", "1", ",", " ", "0"}], "]"}], ",", " ", RowBox[{"{", RowBox[{"i", ",", " ", "nGrid"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"j", ",", "nGrid"}], "}"}]}], "]"}]}], ";"}]], "Input", CellLabel->"In[43]:="], Cell[BoxData[ RowBox[{"ArrayPlot", "[", "life", "]"}]], "Input", CellChangeTimes->{3.447089299023596*^9}, CellLabel->"In[44]:="], Cell[BoxData[ RowBox[{"ListAnimate", "[", RowBox[{"ArrayPlot", " ", "/@", " ", RowBox[{"NestList", "[", RowBox[{"newLife", ",", " ", "life", ",", " ", "50"}], "]"}]}], "]"}]], "Input", CellChangeTimes->{ 3.447089300194611*^9, {3.4470894307553062`*^9, 3.4470894356643*^9}}, CellLabel->"In[45]:="] }, Closed]] }, Closed]] }, Open ]] }, WindowSize->{822, 945}, WindowMargins->{{161, Automatic}, {Automatic, 54}}, PrintingCopies->1, PrintingPageRange->{1, Automatic}, ShowSelection->True, CellLabelAutoDelete->False, FrontEndVersion->"6.0 for Mac OS X x86 (32-bit) (May 21, 2008)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[590, 23, 43, 0, 73, "Title"], Cell[636, 25, 36, 0, 47, "Subtitle"], Cell[675, 27, 294, 9, 87, "Subsubtitle"], Cell[CellGroupData[{ Cell[994, 40, 31, 0, 69, "Section"], Cell[1028, 42, 186, 5, 27, "Text"], Cell[1217, 49, 416, 10, 43, "Text"], Cell[1636, 61, 37243, 575, 362, "Graphics"], Cell[38882, 638, 708, 14, 75, "Text"], Cell[39593, 654, 394, 8, 75, "Text"], Cell[39990, 664, 158, 3, 27, "Text"], Cell[40151, 669, 35240, 544, 150, "Graphics"], Cell[75394, 1215, 202, 5, 32, "Text"], Cell[75599, 1222, 334, 10, 48, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[75970, 1237, 55, 0, 39, "Section"], Cell[76028, 1239, 382, 10, 43, "Text"], Cell[76413, 1251, 291, 9, 28, "Input"], Cell[76707, 1262, 273, 9, 28, "Input"], Cell[76983, 1273, 95, 2, 28, "Input"], Cell[77081, 1277, 154, 3, 28, "Input"], Cell[77238, 1282, 120, 3, 27, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[77395, 1290, 56, 0, 39, "Section"], Cell[77454, 1292, 92, 2, 27, "Text"], Cell[77549, 1296, 630, 16, 59, "Text"], Cell[CellGroupData[{ Cell[78204, 1316, 33, 0, 24, "Subsubsection"], Cell[78240, 1318, 77, 2, 28, "Input"], Cell[78320, 1322, 325, 10, 28, "Input"], Cell[78648, 1334, 349, 11, 28, "Input"], Cell[79000, 1347, 325, 10, 28, "Input"], Cell[79328, 1359, 325, 10, 28, "Input"], Cell[79656, 1371, 339, 7, 59, "Text"], Cell[79998, 1380, 1077, 33, 63, "Input"], Cell[81078, 1415, 76, 2, 28, "Input"], Cell[81157, 1419, 236, 7, 28, "Input"], Cell[81396, 1428, 48, 0, 27, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[81493, 1434, 50, 0, 39, "Section"], Cell[81546, 1436, 115, 5, 27, "Text"], Cell[81664, 1443, 723, 23, 59, "Text"], Cell[82390, 1468, 276, 9, 27, "Text"], Cell[CellGroupData[{ Cell[82691, 1481, 33, 0, 24, "Subsubsection"], Cell[82727, 1483, 193, 8, 27, "Text"], Cell[82923, 1493, 362, 10, 28, "Input"], Cell[83288, 1505, 222, 6, 28, "Input"], Cell[83513, 1513, 151, 4, 28, "Input"], Cell[83667, 1519, 160, 5, 28, "Input"], Cell[83830, 1526, 75, 2, 28, "Input"], Cell[83908, 1530, 78, 2, 28, "Input"], Cell[83989, 1534, 111, 3, 28, "Input"], Cell[84103, 1539, 202, 6, 28, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[84354, 1551, 49, 0, 39, "Section"], Cell[84406, 1553, 108, 3, 27, "Text"], Cell[84517, 1558, 264, 7, 28, "Input"], Cell[84784, 1567, 158, 5, 27, "Text"], Cell[84945, 1574, 126, 5, 27, "Text"], Cell[CellGroupData[{ Cell[85096, 1583, 33, 0, 24, "Subsubsection"], Cell[85132, 1585, 133, 4, 28, "Input"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[85314, 1595, 38, 0, 39, "Section"], Cell[85355, 1597, 264, 9, 27, "Text"], Cell[CellGroupData[{ Cell[85644, 1610, 33, 0, 24, "Subsubsection"], Cell[85680, 1612, 293, 9, 28, "Input"], Cell[85976, 1623, 274, 9, 28, "Input"], Cell[86253, 1634, 133, 3, 28, "Input"], Cell[86389, 1639, 165, 4, 28, "Input"], Cell[86557, 1645, 200, 5, 28, "Input"], Cell[86760, 1652, 271, 7, 43, "Text"], Cell[87034, 1661, 75, 2, 28, "Input"], Cell[87112, 1665, 128, 3, 28, "Input"], Cell[87243, 1670, 315, 8, 28, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[87595, 1683, 37, 0, 24, "Subsubsection"], Cell[87635, 1685, 313, 9, 28, "Input"], Cell[87951, 1696, 2712, 66, 216, "Input"], Cell[90666, 1764, 157, 3, 28, "Input"], Cell[90826, 1769, 288, 7, 28, "Input"], Cell[91117, 1778, 271, 8, 28, "Input"], Cell[91391, 1788, 523, 15, 28, "Input"], Cell[91917, 1805, 595, 19, 46, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[92549, 1829, 47, 0, 24, "Subsubsection"], Cell[92599, 1831, 293, 9, 28, "Input"], Cell[92895, 1842, 427, 13, 28, "Input"], Cell[93325, 1857, 131, 3, 28, "Input"], Cell[93459, 1862, 313, 8, 28, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[93809, 1875, 33, 0, 24, "Subsubsection"], Cell[93845, 1877, 293, 9, 28, "Input"], Cell[94141, 1888, 838, 26, 46, "Input"], Cell[94982, 1916, 131, 3, 28, "Input"], Cell[95116, 1921, 315, 8, 28, "Input"] }, Closed]] }, Closed]] }, Open ]] } ] *) (* End of internal cache information *)