From 239a87ecf25801206ab35600614cf54345f24ed9 Mon Sep 17 00:00:00 2001 From: Peter McCormick Date: Mon, 12 Mar 2018 16:47:19 -0400 Subject: [PATCH 1/3] Lab completed screenshot .png file included. --- .idea/misc.xml | 2 +- .idea/workspace.xml | 340 +++++++++--------- .../com/zipcodeconway/ConwayGameOfLife.java | 70 +++- .../Screen Shot 2018-03-12 at 4.42.28 PM.png | Bin 0 -> 69807 bytes .../java/com/zipcodeconway/SimpleWindow.java | 4 +- 5 files changed, 242 insertions(+), 174 deletions(-) create mode 100644 src/main/java/com/zipcodeconway/Screen Shot 2018-03-12 at 4.42.28 PM.png diff --git a/.idea/misc.xml b/.idea/misc.xml index 05e1d17..5ba6911 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -7,5 +7,5 @@ - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index ce6df6f..4c4d683 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,13 @@ - + + + + + + + - + - - + + @@ -27,48 +33,26 @@ - - - - - - - - - + + + - - - - - JAVA - com.zipcodeconway.ConwayGameOfLife - - com.zipcodeconway.ConwayGameOfLife - - - - - - - Constructors - Methods - - All - private - + + + + - + - - + + @@ -76,11 +60,11 @@ - + - - + + @@ -126,8 +110,8 @@ @@ -138,11 +122,18 @@ true DEFINITION_ORDER - - @@ -260,7 +252,7 @@ - + - - - + + + + + + + + + + @@ -473,19 +476,19 @@ - - - - - + + + + + - - - - - + + + + + @@ -503,31 +506,35 @@ - - - - + - + - + - - - - + + + + + + + + + + @@ -536,39 +543,39 @@ - - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - + - - + + @@ -584,30 +591,42 @@ - + - - + + + + + + + + + + + + - + - - + + - + - - + + + + @@ -629,67 +648,52 @@ - + + + + + - - + + - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - + + + - + - - + + + + + + + diff --git a/src/main/java/com/zipcodeconway/ConwayGameOfLife.java b/src/main/java/com/zipcodeconway/ConwayGameOfLife.java index 0d3b15b..29c66bf 100644 --- a/src/main/java/com/zipcodeconway/ConwayGameOfLife.java +++ b/src/main/java/com/zipcodeconway/ConwayGameOfLife.java @@ -2,10 +2,22 @@ public class ConwayGameOfLife { + private int[][] currentGen; + private int[][] nextGen; + private SimpleWindow displayWindow; + public ConwayGameOfLife(Integer dimension) { + + this.currentGen = createRandomStart(dimension); + this.nextGen = new int [dimension][dimension]; + this.displayWindow = new SimpleWindow(dimension); } public ConwayGameOfLife(Integer dimension, int[][] startmatrix) { + + this.currentGen = startmatrix; + this.nextGen = new int [dimension][dimension]; + this.displayWindow = new SimpleWindow(dimension); } public static void main(String[] args) { @@ -17,16 +29,40 @@ public static void main(String[] args) { // Which cells are alive or dead in generation 0. // allocates and returns the starting matrix of size 'dimension' private int[][] createRandomStart(Integer dimension) { - return new int[1][1]; + int[][] randStart = new int[dimension][dimension]; + for (int i = 0; i < randStart.length; i++) { + for (int j = 0; j < randStart.length; j++) { + randStart[i][j] = (int)Math.round(Math.random()); + } + } return randStart; } public int[][] simulate(Integer maxGenerations) { - return new int[1][1]; + int generations = 0; + while (generations <= maxGenerations) { + this.displayWindow.display(currentGen, generations); + for (int i = 0; i < currentGen.length; i++) { + for (int j = 0; j < currentGen.length; j++) { + nextGen[i][j] = isAlive(i, j, currentGen); + } + } + this.displayWindow.sleep(125); + copyAndZeroOut(nextGen, currentGen); + generations++; + } + return currentGen; } // copy the values of 'next' matrix to 'current' matrix, // and then zero out the contents of 'next' matrix public void copyAndZeroOut(int [][] next, int[][] current) { + + for (int i = 0; i < current.length; i++) { + for (int j = 0; j < current.length; j++) { + current[i][j] = next[i][j]; + next[i][j] = 0; + } + } } // Calculate if an individual cell should be alive in the next generation. @@ -38,6 +74,34 @@ public void copyAndZeroOut(int [][] next, int[][] current) { Any dead cell with exactly three live neighbours cells will come to life. */ private int isAlive(int row, int col, int[][] world) { - return 0; + + + int north = col - 1; + int south = col + 1; + int east = row + 1; + int west = row -1; + + if (north < 0) { + north = world[row].length-1; + } + if (south == world[row].length) { + south = 0; + } + if (east == world[col].length) { + east = 0; + } + if (west < 0) { + west = world[col].length - 1; + } + + int numberOfLivingNeighbors = world[row][north] + world[row][south] + world[east][col] + world[west][col] + + world[east][north] + world[east][south] + world[west][north] + world[west][south]; + + if (numberOfLivingNeighbors > 2 && numberOfLivingNeighbors <= 3) + return 1; + else if (numberOfLivingNeighbors < 2 || numberOfLivingNeighbors > 3) + return 0; + else return world[row][col]; + } } diff --git a/src/main/java/com/zipcodeconway/Screen Shot 2018-03-12 at 4.42.28 PM.png b/src/main/java/com/zipcodeconway/Screen Shot 2018-03-12 at 4.42.28 PM.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba4e8fba0f94dbc307243098e7dd92dbe794c13 GIT binary patch literal 69807 zcmZsB2UrtIvnYaxq7)US3Mf^igpTy46lo$zFVdw1q)SN<5m4zMAT2>U(t9T=(o5(i zlt?e3lMqM`;SE zs$kiP^N6YSwj~EUsq*+E6>Zv$5``?$6=su|J>oc(;4wWUrNsY{hj9CC;XcCZaUUF zpF`J9kx9uyY>>{YQV(tJGH?x;88?>Azh*YPZ*!yYiMq%w&Olp8$Q1$a4_rrQUbdgAXN+hq*fXV8bs*gQc8~Og0S`>_spKGftz?NqB<`xonYQa8VNenU>aL7GEY>Pg3=8*3Up{C1s^ z;{p=RDw*ZIrk>Z9$Q>$us@?Y*?^)l| z{>*lHXLm@KDE{N>$Q65P=6>N_{LX8i&B?#$zPEo3-DGwC-SV9wAX5BnrQ@{+V=+O| zcuTVz=_<1t?XIuhm)8q+7~tS~R&DIXe8^ckfvtb`D@E#g`S(N!$1&x31=#YGmN4&e#^+5`r9O^O>x9{Xtf4Nh%{!n~PIT5D*nk9=O zO@+1T%HEIqvA?X}Ss$>YxhPdtUs1A+s!-n)|3&Wgc>X2_H`7ODy95XBJAKOUKip1_ z5LE6@@OB`pp(#-ZYsB3zN{rT&^QPE(+>$8W>wH_Sq?q?xd`6zVLBIqDjmF9d|10v0 zD2A`sM;$k1>#i+CPvsVk4s6oYk%2y**pe7_Gkv+~6y0neW_mmIU4gxwJFW4j7cXDT zfXl92j89k5mQmo}(|gGd{{k)r(R8kO(L$o&Khl<24;J1Cff-DCZw@B8ddk- z+%kR7tx9ey`}O@Zl^Lx^PajcW^%$2F5;Yxe2z~H)z0X50{!#p+_Q%W*6d#H{?EdQc zrFiROzFN)wz~o#__veZw@9Q9SX}(FmDHBg{#rb6p#jC})b3f;D8$C4s_6(8dtGe}V zOuPVG!!jGQqZP;L({Y_M?C_{6@XspwXX-DPo>U>_H4p;AZ~{tC$1 z&w=IzxZIKyk}%6i&v4AZOISz-*Gtr8)!(YSR{yX*&dpCmBvK~4tJg`;`L5l(LkN3; zQh(@e&xs@hyoMDUMkTne0V<{6YJ`7#LbD5()yaODEts7m>nBU+>t*G(@UdmwPZ|Xo z-(@bBLAXgc`)+Njq$Kk7%cU*K zER%8(+me)&$bKn1P}hyFV4fXZi1BQgDx2L2Z;lAeJ>xuFnIFbGC-MzciYQzf)* z2IL1G4xo%53j~x3mg*Vv@dzT42GdGjD+dkCV8MT$XT{~IS zIo+GKYq5s!h5w32HIDD6!%{*EiPl7uD<@Z$-{xK6AXOl9rhr`g`A#+bX}Ec~8ncAqO^UKB~)89epK1aK@VeYFt9g>?J#IVyKG<72KBVYLKQCDA4$qfg{Yn8QKBfl z9(P{#{dr1N$~zw~5q(>I>PgrGW?*d@KomPBCM!^U&XhMF41T4&Y0u zO+8LR^;iwwgzNPG86&Yy`N?&@fm9sdnhD%}vNfIxUOKh-W%64`nEo`ZN%CfIbN_E48EpVz`vBEqLy=YhaI@NL2|2#Dd~NAdrU1xfPuK(i zco^E|`tuuNa&WSs6j`3$ux=OO)0JBPxqhsk4aGS%St)G=vm<;bzldZ_xspO5wGFha zIqc-!D=f_AFDJq@q6+$nyyvJUy?=An0;Ed~nHm;q_@)zj6Hq0jgTZ(A+;0jqAkFDnhm3&* z;-^+E*czJ~p~$|DW1Pp2g^S?hJ^H;g#b?3K4xjDYPQuDA{Bk<$SKc^3a~{Z>(ZI6% zu){()1I0$_5BPUoy2Lx3C*f>RY5yqS#`Z7hTvWlPW2k zD}51v^uR89_DKH>QEZ z1GAIdJYaPccXvuCIS|5MjXx$UP9E1}y`|NXocELQ&Y~$L2L%Okn@ri2-+(cTzlrVy3zI>!^_Bl>b0hs4+#ka&!5i~ zt>@eaBqUd$E=H!lrn)+^_MSjtTL(`&N8vZX*O$;FB=T=$FPlI|U)y_cfbJeXvTqbP z|AvsgZ2##7aNheH#Me!M(^U7_JvC2n$9s~(62c;!ir4PlyC?7M;3WI}vHHL0m%kJ^ zU-|mJmIVL;0s@2s#DzV*odKdUGBN-WF@Ttu&?SVBPoRgd?HeHvAFh8U`M>i#cJ#6L zc6sgV;^}ek&%CyFo_@XxoSc6M{ny_=d^)~y`EN=dKL0N3a)E$9BLGoh5x{@VeTgdn zr&sow%Ns{`)5k7AM-QJ%8j7MKA|mpCBm6%@|4s5gP|f}as>FYy{>RY2sPce6OZbl^ z{j*+)FN=<=KNk8mzUcXIjf!9U-B+KGb(3-?D! zNR&ym9;+C=xw4Z@_15x53RXYB`95n{mDbxT@-)%G2gQ_>pFVtg_n_thSKbHN&cd2# z4lddnb;~PkPt=W!9;1aP~63NI2V+HYqaI(JCu&|LT z3+ZiF&>~Ox)D&cD%5PSdpwHo(-90kI(3#<)#YMxO2GBr}n@Nlys2IGf#@)zHbpnHqh)e(qorYj8!*k&&8RvKE*;U6q1PrFU`G_{MnL&0t zzDk!vjVj7|Zl^)gs%4>Dk6bsD_7&*oBgD^>F!s{wH3N$>>%v+M{H*z$fKJR-jnhJd zRb#$Y87$Rg&PC8IQ)*&^;m6dRUAvA~OLr4BwjNm6ES2V-wa30SE#ukAlbGb?wv>cX zaeI|>tGv8hT69Y7cxP`)*;Wzp?eUMd9?~C6I9bJADkt16uNQeGfh1nIAAbHws(;*Y z=W9_zBk2BJdWnYWI^r!owN7$%DZjFKp%bQU`ra>27A;9D39eI}nzz*aEat*4-a81z zE-AYRtHfMThWQn+0bKE4TpGJ@k)dJ5J3mNN(JEjOXV45%0_`@Bn zZE-#fqb2Lcg)+=ko8qA^pp)7V^jvX2!Wk7}v}<(0h&H`=e%_g^mraz z$oi*J`hcYI)YG2plGK*&61(n7LYi-K5AUS6KSjCa-qr&8d~peCo5W4FuwwFoxr;#- zyxq3S5htd~3!mAiRddY84-%-2S;d(J`oH4KM<*i;L^tn&ExTur4pLdDPwx} zv9G0_{=0TP^Hnz7Y`&mdd`tGD$t|;alMlCC0>5=|Gg~oQ^N5y5bn7r7jva`at`)3) z)iYDm7vn{?)k{L32xSDNI`D(4ifR{IjV%YQIo?E7!3BqL9{Fi?Ekc>!t%V?7`-m5P z*T)UCAH}*W{LB@IG@HmkMM`wkQyro;#-!7m`i>n2Z)h}{H%tNg?te_QG%=6P-@9LN zQDwzB)M-Z(>x>dg`ovPLXjaNPZg5K>%nyNlm!G}k^-9ZR`x+?Ygvzb_ZG*W9FAKV! zs@CsBEh19rYjU}PpKUln6JfU7`Ebq&^pj35a?>#4W?@P_6~b+^^X!&L-X( zPWLLy%L-TQhJw>rZCLvyr}pJ!C`)b-P!0<%eq+dK0n}7Q%7q`OrlJz?T{HGICufQs zh+bzYhyE>Zm(+)b8Lc0K@xZ4lncukytB+IJDUF~FqKR6|S2RD^DGBBPtGgOzVCHxc zxzFx3uCF#q_C15p=8EsD`)s3ujW14q}F&ig=XkmV1rqg}SQj<41bHCh{<)6a$g!Rq4=elutt9^eML2Uv*ebp zZpwD|8&>Y;t6~Gx_T~L8KxJfoHLtDpB+m58&rG$i&PQCM&^E7IQ?Cw0@-K>MM7jGP zdPJ{5JhWr_U$>8;ZfgsP)Sckqc98@F4xlbmC!~N+6a;CY;$uMF_GaCK#xWyY+*l_e zMW`s7g2zeB@)C@<_21C*qD!j3J<;qow!gV}M^vbj?_o5DUDW%ez{=8}-?eDycR$8u zd_!E-!sdM?$W6>6_z;4c-+tYyW}0$%P|5wu`|B%t_waXG!j$wh4c$`j6{o&`dKtg< zo|5p}tbi|^QKG+%pvmPf~-R9oNaIg?EJ>qn)ElMrgqQ%#D z=wai1Ek-K5NPimXbLOWizq;9A!C@ij^k#yC0q#vx32fKZw{U-60C)4+{W<7e?_`@Y z`5gM*eCBgC7}q%!5z6q>&NS29f)&vA(K?f|(1J+U;~!kN682Zg25Wa!EQ9>7>i~2? z$JC0$OZydbdMm+q!0SH3AFhx7WNPR$p9wXNTDt1)$ELyNJi=s3yzy*~oOkI-=Sv20 zW`!O2!$%XH8Lm)vP#xjXpi(qr>gs4*bN7SSqdf>)B^O%|8ut38b+AW9tVYw`i1B?2 zkj}T~D-6~=aQYWo*S37bh1I$5?n!zC?NNp!=#o>V8q#ox^^VDr)Ms>V_C#N*%H$$7 zV6yDiQy_gtWX~$E{%diYWJqP?5^vb6c_b0C-YN<=YkMLIx}!5Xdhku$Olk`cusB&f%SNr} zYYJk-c+)Ldv%bLV`G|`uP8M@}iqCxtd_TXwq+E0OFG;p~3b)%QY^)DsO#tIKa|`=? z?GMag#M5y|S*_tSZ=F$lH*c@!rI|E0T6mR`Nb3D$qkRWOz%#C_Zn0{u4uH~qcBvxS z&fhM|m^U{;L|iE}CuTXNCi(dFg6>{e*xOs*=r}gK00V ztZrKC*dd8`gLA>@{ti^AuQd+GZI#%qWnJXQG^{a=A}%3*kXMBy-8sqc9^r+ajBw6m zZZUMmN#4)BMk_t>^UB3_9$7I^5rb~sFZbws^e6109bs&U3C?sC zX;G(+X-s*FWT{EtXRq*@p0Zts6JfbNVL3(Z284Hu4pW*r0(U=<_6nsk3F(cuBvg!5J#q-1w)xg(F^kdR9T$#EVoC+(!==Fi7k#-bb4yc+|7Gk?HX>r- zC?Yzow+%@!xCnuhrb_^?r^^Q>fwwh7MNf80J?>hzI>q)PCXbHVpH#-K*A?xWQU)_#}3W8gmwXi-=z6HR% zMN7bfUuT#Y0zpKB#7=)%iB+NF$6(7hnJrrdN2P6B&^ik$EzUbUR&#BSgBreMC%&VJ zYIi;Z9Yq%e^zB10@&rxmH6eT2XrL&#Wk({guOurpjGzS3U<+IdQg*V@ zY4V{Nc7jFb4T@}aw|4PiZP9vOWs2pi>wn7zd=-bDpUvAaRK%|LeAfI&1H!&g`U;uX z^-ku{ov-$cVJBG~@cfy5O7glD_;|5y&08=DsOI*^c{g3Y-M+bwojx_d_# zgIJ(E!x&>|<@wGJaY(tb!zDNP$0>i! zq}2EmPpztdjgizxX`6NV#?zLyg65@KMBZ3%Wa(VtDdh>@OWA}eQP}?-=i|S%G zu1s9hR}dPoIS$$i9M9bDY*A=zT_0y}Rgr><>b6K_J}dJ4e1ALkAfx_haBQt6q;;ip z0c{XeSC4BslkN>wz{Gy{wCmR&rHT6q@A!n&X(6D>4}*JBdwM_C#(8Q}WdAv-?lH>9 znyA&2edI&rMFev1)q^TI#ZK>tLad2{dRR|DdjQ0{? z_=+8sTkDSoKQug*fC#K7j*YpJw@APbC zqr+`vx^H(+m4*JmIwH+QL(_^ zq75yWQI1{>4t$w=^^ox=ePpnHY+znR_nY-mHfr<;k0ckui?^>*F|AM1@*fcO5|wGs4`S^i7xCkw6o zeWdKJ>Y0nsaH2Cj#bh@Zrr14pD{S#ESc14P9`OZt7qn;@c&0bRgzZ~UYErMb@WAG_l{|sUJSZLq3X{n5E7TMNt zNCw(^ttu2!BR#4^2^W|jc{%M-|ot4#3SoV9dQ&pZ@q|KgvuFTWo zRwpwcxka=o$FlmgAg&AJ-8W6Nd4!D-pD2Pdb7f z&y9lu5QD3xgMkl4z6@rJmoYDO@Ih01ocH+^irS@tlT-FY4&hWF1(=H-lehb^BcnUx zkj9%;_q9lSz3ru@jbQ>S!4rhTJy8AzRBj9{B#!#f?aXh4Fy_MWLtH)x4bch;Z-zYJ5K$ z1HKcKGEZ2^T+Q(0Q`dAT%nCUSJZi(R(snItLFdn!u>&T9*j>LY%d<$hlC>0!}gX zF^BcP*62B@)pZ8JS9OJ34WbIP+tLkmAqOF|UfAqO?(G+dSLR%d|Q_CxMTyLicR73W;;M0)guOHF;D2@LJ=>`Va+ zCp}xfUXi3wxWj-rCcAXh%E4F3SM`yyRu{+4^$#f8tSaO^pfq24t(%W=;%fqu(3)wl zje%CWS0`S`D`qD%A?dJFmr>aMSM7M6Ie&`u0_5uK;CPvNgVB^}Cxlz7c05EwMSue7l5TwIh%%oK&~v6uE8b%c2tdE`Tdb^Y#!l6MV7h2?V9!@CzRe~> zzW(pu3dBN}@(`iruIaqN=bd|E^?R|`qKUmfdwhdEPX}1X#LXHOY&8h)#=7y#WHqj{ z<70dRYa7#+!i@^KIR8gR!%AoOW(O~pwct(}&STCw0TJ@;&wG-oYPw=d^5#{fA@RLj zxGqPx(-utzg`@nkYb*K*D8uW zQ~)6~;zAf_C?1zmv9Nec3b-8)5I)Zcap@Wo>pY#k#Bz>Sh_M^)^e5bO$S6d|k_Efs z(4=l9M{>5?nX9{U4MhO9XpKudgt$tcdZ8su9NBOUpmiQ_NrMUpO9c&)KPJ-#bL|rj zFnx&jxU~2VH{{L84$oP_Q8r5Hz8{p5Jx;_YRAyH}qYom!P2*EJ58g665^4pN1f(k+ zd}D9E=x2@GbDHu?U0KAk&xT^1IE40+@%!g-ACPZ;WmqBLJ|1W5)B{pL6m&JY9$NW zC3d)Ya4Ng6W^Z|KX(Tg@Ab5o2;*0<*`>a^=|S z^Ce1Ac~puG_(G8CBB;SzL19VO>GC;vbsY;fO-j#$UOVfhSZ&Tb-Me&HpKB{lgKpuT z5IH&IY@v}dlIsR8lz;2R9j+0~K_}hx-K9cD#W%BEH7kZV>E1#;E$V^@tyqsY9f?g& zBIAy|OsM`l0**_m;`yky6Ge5!gSlhJsa1-6xBh&LuBXTk**EQrM$rm|-6m@i8B0G> zN*yo0E#wF9Yi|eFou9Xd%Gg|VoN=bhJN6$e9Or0<&Ja&R$h7k+4kF)WpkD}>^s~bU zKkHwp1>>YdBr-1}g=;rAtqy!-g7+GeVr(vi&wgdD$9Pi&aDVPtvDr+)Oa zZpBt3duJI#T^v?;EA>VI+X&~)%(~#U3OH0q`n*J|lebjw^mj@P`~#c;+t1-~(PSBb z$C3L!#uD@rnz-ET!|jeIM`z-IWCO$J z;o#XoioaG`H`8pA20ZG1`_wV)CuKiRu5=4xSgq-+?P3xN^>Pz9{)5%}C!P~dD0eN%jC}Mj^VV?1 zrUrd>YkBJ+>k}KTIow5R^(dO6>L_f+&6EWVR6s#6~r{SaeCl2#=uHmwaNyz*lA zq<29JybtqO|HOZ`q@C-}RzHXfC#(6-_U;}pRp>&5QuedJU(bsh9M{1;{c_f@c=tRG zz`h0M{ruSiG0AhNw7DbQ)d^mjZpJKS>M|k|mHj}2?UW8Tie@*fUR7z{b%TDM+vTkl z!k2uN_n3Jmj7J5mzJpW8KGY!0$vGgMJ@X=K^&w3gdS{jJ5VuW_bK4?o&dOPFNmo?7 zoDY<1b<+g)tRZtOkAsJULorfuY-f*)4+8ok9}u-_zcRqEz@>CL=FF{&sxkzOo%ZdT z1kfnm1!spZB4*hSli@OINX7Q@yNG(w(o?lN}ebub_CfW*0(+(F6q!-GnF zP}gzy_Z>1(eX~6r59K7!_1=OIzXyq$i&xWqc4m(%2mvgkz}0A+jJO8!d!We?RdizP zn}6KI4byn#X*D_pBhS2Px2ozp;rlXL{s?O#1FDJLCcLAg@-I}LI@!mkTElSD8Uqsx=(+gTo|5|} zVTIL&KJV*p0_t@C-1X}gb5IQzVSY8sVSH;*fQ}L#g}-wXBQf7|ZNO&xi@Y3jice`4 zRWOa7nSL|hTkc?q@ma*aeLkTR6ME22)ki(!iX3D~Yf#0c z+(bR5mM*w5>m*}ABd%^6e1;B$>gcRcb~dSky=Tw7-G&kf(Ti5d;9m=Vu@xNJioqVc z9yOOyY|=Pw(yv_U82q=;WJB7}y%DQTBjx=hSU)h}{KalZ?=ZeY?}WYO7+S|H-3ap;KT3q#Vf>`#Vh(whu!EMo+4}C+#NG)S0twFWDJ)rkqeGJ#I3@mZTO+r zp;Js|mEEar|E7E<=r@B7eoze2dK}r2gQf;|#YH!d8HM~sH(U1#(@dF}&=ee|OLikg zyB&VK74-zw9d%#of~nMT41OOiGTO1-xUm0o82 z0*x|{7X!-De_lB|7V=p;{?Rm;YACEwzqMaOC-0xuMog-VRIWv$!7`W}D|B=EjL&N6 z((&)wHQ(LV;P9A4;7MYwB2H>n%kz|09zzjGj3B1`lH2i>!A#P0E4ni$Ai-yZqk@F> zyMe?ze3N@YQ}GrsMPJvY9{Zy;to5zE-@}39W;EoL9x<~$y?2VFq&Kx_);IU1i^#2F ze+zMx9^RH&pBHc-MoN?43e)cs+HZg6K?jKR5g890UPDs4Idgoqv~E^RQv~`Lmk%lS zWC?iA!S)6&$c_7w3QFr>;7>16Tc~!Io1{HQ_Fe7XlN6Qg9V;-ntvBu~zP}7uSc-g@zD-pJ99i2D z7bARV9VD2xFQ!82E{?L(!N1zwh=97Xl8(-5m=gbZd=v8Y-HBq@v&+co^7`yYdCH@-B{^dFT9zOF|0l5t7puG)|Q+_78AxW1MxB{PFtQ@v6g6heSy71z=AxWj9p62 zkJsO5T)altwPttkRE9%0rg$)^UBBy7bj==1l24={=TK{TBzb&&*xA0JcN- z921B+E?>~1LDjg@TA(z@q(9@1o5RqN#+tNJ2BV_7QkEg2)*~jBI!FP&B+WfmjETPv z2A7ARoyaP8D@LS+(X{8LIvb{liFkU{u_EDWrx_y;hd~->@nKrWE)R-GdnP7%NK|xR zMh0EnIZ8rER6xzLU|_`BAh7?>VM}wdTLiZq#>`qv#kN za6De&L|+37-0L9LG3hQ+#V0GE#S*Iz$D8dD+AC;z+gu(dU$Y9Q9EP+myz_y-eo-G*Xb1P z=00Z5CZ1JEkzkjOkrXx>_91gl%p2}d-3U^xTl_tDS-M+i10t}jOiVsO?#QU2>W^PV zxa{=1{hcB&mI$lB@55k1;fok#W4}}*@lmo;?a8kJy2Kw`izCKiE$l4@4b~?^Iv0b8 zq%F_XA69WdZDbn5!UO5D4#`Vc|MPt5UMlgq@o8gk-%I=PRPE(tXF%^62TW#F{5ZjI zHESBquIAA$w!iJO#(L7_>=TzbfK30gV-vbGkLa23!zkkW>ZtOf%v=4Nb-wuJw4HsQ z#T{;0Gw+oK@Bl)c4Z|19boZA7y*+mA5n?`ZJBD5=v0!cd+hf!2 zJAvEq#@?t(!r6x=ac6j9IeNcdKeHx6XD`?kEDwMAY7uu68z9AmzP}JeK{zs;l14;t zfC^6B$T7{+F5`eSd@n!6G}sgTKIXu#iKr9ULkxtS=YeM}6w)w~JfhuWPK41GWVj4T0;Hu@+FMpdm1Esp0Lw|A7;@-CbHwi#4!ZS6zn39skwp#$K#HWF|)M+7ur;J z99%>d5P#A|@8ol+xjUO(P7z7 z2C{@L0pEdVZpQU2EhOFdw--fTo`Yw_4{T1#-{`QLALxuUta-E!Ox1h#c;2?~9Ki<9 zQLKJJNAIKcix#}Q3na(Okg8(T6K*vrxRwEl?TEda0{uR190Wk@z|X1;1(N>B#VL@2j#?|T zxNI(fw;bcAA%aDBTb5cku?zn7mdD|+DB9q=7m6}#zq31!DSQbhM<^o4sY6yR(vg9fQ#%8U;8zaKTI50Q|PnqLupztS1c@eI_#XHimx%^x5 zsZv`aqDsOL>|bk)54oeVLK53NZU+#)>-&MheCdsz6G{WA;9m>g7H@hOSNkoJm@qy; z4vQ_7A!^tZ8y+{hpbgkSB7FK-?)tyEX6magd#(G5wWYg4@$#GsX_nlz4GZQDwTMOn z^}Wa|Um=GCE%Ubj?MiMtytJRVLI>7MMh5OBQ>=q5 z6hVeZJf585YYL1Ies~F??^~kRNwPRV#@s(k;uh+s4U*dgEVKnf&M7_6Am%}AcJkJz zOFq)Tt|@8I;6Cc^Eyqt4g4-`Xq8qdLHDFCk0Ut~NpEHMH&yx)3lIW}h^WE9@_NK9H zj`JN|-s3VR5?dAnrJf(>PtKy(DC*^Qd?s?BGY2=Zff;kU_4A7XT_0PL8Hwh){&wfP*MIA^9thP~EI=vf&4h^f-O|-)C7av71}CIVhAY~epW8%V znoxxFgj3f~ST8)(udytnE&J~4gDW+Je9_Rmx#YaCD4hIb+A(SExX-(+U_e{I;r^KsI=f4fSPh@BYo?r z@4k6eFdU?*FR6~hxym7MiTtPw0=$~hXppE&UP3Zx_;B%M2BeVU~AG>tAc8>_> zi%A@PMUWP~h8ZV;t|DjeN%5cg@ltx(GB%AB`VjE4mJDcse$CGU=32*I7Im5at@?Ns zZ9mosGT#3*ZCUsvy&2lJ+nd&3F{hX8(T+b~&81jvL=rOwwcB1YIS-Gzs%wONopMbN zSU8guchz+o80Bl%gUI>#Y*{ovzBtL`=o3=X?SB)fr(FV2A00(Onji9TDLC_3D_pB2V@#!{FoZ&t*0Bf)=zLGPM+Ha35g<`W5Y3 zNtH9TiI|~S40RCne68@ZkWliq_(q#CZRi=hn9GZ@3M~sd z`mSF&Dz~$BK2eACuDOfe*~J*LyRBZdf*;tNhqZr95~SG5)YgcUP8*YySN*2~KuRYE zwHUk)tSe;Qs}3t)K%T|9W5(wk5UH;3_;>=|sU1&Tl|IppZ4Sgtx;dN~x`OExjmT-0 z+Nui%P#e)|X=K;PKlcu%*%81@F*>-CU%pt=&`Vl@@F{$sdDqQN(i zu-1i4U^NEI9b|qv(vA&EzB$&q?oZL)*u8(suhBo(09Uu6rz(3#a`mBx@_rl<>Dl|D zaY7N*k$8>;ufY050htQu#{8%Z)WWt!<;9l?k8Rp=j}Y(PRzN~0BpEEg+t?ULQ*5(h`-zJGNUGyiAV`Di=3BSk}iXSyuJto@2$l5Bi{ANdW6=mo7Lff{Iy$RXT8bI-ulZ^pX zyprY#XvyQp4Z3KSfhH}~WIR#V1HTxs7N<0K+BtCDCa~@9$tSio6B8R@rBPi#$g!FC zxwadUR&l~znSr>rakPu-kaNF>eN$_BGS;R){aHBxbx|}HOE>EeT3k@vSy%aV)bQ(p%Np;@)#djUDjN<*Pa;>K0q$o=MRGn z62Nuy7nCmlR5L){I7Lu*y!PA*T|ha$j!F!mHy?By9BMUI6jV6IczjQibIfF3as0QQ z0kfG&)k1xOV!VnePfjTfTKiZ4;C;ik&Wc|h7G17Q|B0-m6$Ovgs8vrRWXY22lKS>vo)F6mk8;~8)$ zpQ)t9Xv5!Y)tnj6^-dXLnq;R6Dor3})lXY6a*xQ-^CDhj6D@#OtZoTYbC`-Z>c%uN zX+tge#~LXm-(+O2*IgFiYwT}3=QoD7b)(V_>4l)(46I;QvBl9!J zfU7(vSgVCkKc%Gn+AGJlcMZGaEJCCEZDw=gT0v742^Uo3j&r*WDO%+d-#jDaFJ_W! z%fSIy>tLU|!7Au3w;S^qAAIl2s%8({>Yb^uDzV>*OD?;eWF^F;ouKD@FW>SC?6pG zM0M8Q+Zi3pLxK1=+40|XTQiit1WaY<&|pryE@}CH_5ZOFe?L&%*lfY?wTf;IlKt)Z z|Fh;xIg0A#h@2%!bS4be(JO=511{|2_T;NXmqEordoG@A9a7w@9sy*N5hQv!Q?d zpz(;~rg8Xxxmo5NnVhUw3A1Wk3=*IX3I8zj&&$kzQt5>#r@fAr5AKg4343>g=`#&1 zZ`ze5=&eh=w#RPiXE%>$b9W!CXZ$KF*WK~G+znZs?{NT8C_pYIYU%znnM?NiQ?lOQ z7m*Enn4a)(O*W`&1#!zq*KUfz-<#Cxq4M(lji{^zw-BJkv5F;=Jy=N67yFP%H3DLIjDa7?AATrEfg{+`Oz%X z;tJ)}E0n(P-?G_=Y_h4qb8dV{A|Y4kueo=PH2eND9{T46mU7~m<{XlLuhef0eJLEf zzgY>=xubIZs;u^4Nu z1C4sH7U$vjhjR@jT3hkD<*?IsDN5%+Ify={zj0KjeO zw58$2q8n^^mMWiCWM81)*sbb{+RunW2Ex3qzrqg@?{f&TOVWbkS%M}4u8i71#mjcz zrPdhPPEp58_u%)8K@ssFeC%hCW^@)GBMwyu85J4^M|D!K0`B4zh!wX^ zb;p)0=#3eEJEw=DU|;e6uprbLyb*h9n13bb$G!CkmrHNEzyYWpK3sarxp&Sk@fzRA zJ%w)_-%mz&__XlA*vWi=GeceSa`1=3F(I_K_PwH)J^i6fXqAkvMMv+aoHZ(>3!XUI zDzjs5&VHEV7RJX^lpd%B19(i}4)-<~9TIv>X*}l#uZNV8<=9-kR{A@N#Q`!}boINb zjYgtC?30@eN9}+E@&(#9q?rOZMgu#`6_eanVDVD6^L5F)tru;vZc7>d?RK;gdt8I7 zHU)*e!*{-l?E7af63=*z^NB7$OBx6yTYw|ewGoDE0e6{(kUf2nrD!(X+9p7rFe~EQ z@wzzs`&!51zNmtl5yN9TL-7lV`{xyj$&CqBPVjzBI`6Qg{TMU{#D)UbP4e zcP+jvC{$Z|H!^;f`9mu6%8L=VxkuvDA4S7go8-kk#L~)xI2qrfXo3Z_cavyvdeBp7 zA-f?&<;!_8BDc&*YQKl{RDVu&d(z#vC*yy;&u4JE0g`sD(n_B;me)k*u9?}maGD$|?&?*wmoxvKBDoibVgZ4G>?vAS_OKf?2)^;% z!d?MIqpr~bMHs)1*K$KJje;dh|7?9#g$BF8*@yK$gD4OySzReH z58EPaOJb1f|F=;^WS?)*x#3geK_ZaBgxezOPs8TwcPj>;PQ@;)4Msk588UPWcpHrR z1d@{vX2)l6HR7C8FR?|;JBZ0=t!jKmJ|7v&@R}V|96{ZCAry|e`0&p0O5ctoOvLRJ zV2x>5erDC^vpv%f8NyH?cr%A#s(APsuN|Qerhz{c?Q?eAuj!`U?|U_2PmRjZ!GgLB zMGdxNbF#%xbp5YK52ejL5)jxeL=RWiuK8^0S2xPCTSvRRujBW(075_vE{5;q0gRn2vviFne|!e%nLXIgdC zP^~IgTa|G@mrBQnXt;gv7x73NB}+~(s$_zq5p?&P%QAq!t5m19V{4*?IAjh4#yzU%{EEb*&=;Q>RSr` ze{1V0`%5sql&;yPpa)JylNcYDXJ=05x{b|E7068gD(Reu>JhHz8<=5I!0iF+i>YGO z+p~yqY1Fa_KWP`-q~`Ip4|qOV=72OMztPV}j66TYVB5P~r&ImVcX|3xN%hvQ__Bg> zPE9ygV75GXf-e3r`(8O(w>QA^I$9BAOrOc^BL?>8UlHY<-29z;RBN?sT*gX$n$={EMP3DI zsQnsss;loPDteL2QzrQ>4i(Gf!%I&LSLh${$K5^pGL7dMX-G*!&13FkLhbvYbf@N? zrPeCnh@1a=Cdrb~2X1Y{3GbXb#FB<^t!-b1DTH5FQ*eAh^a#KVj$}(lCeUdRQwejA zd}q1XXmg7?zbh?N9aN~zws;x2I13V5EEYklHfT>G*m5$!j*9nP;!>6Ah{#=_bJ>tx z`p^ocvHheukK~5j3}**r1z=|Oh3`Bje4Sk)PL^KhogGquN^~+XOk*A1@0I8d_-&(_ z&j)#@t? zp+O>b90m=iBu8s51nKiJ?n=RyotvsUBVW*icye}NG+UP0KW(;6-rU66IdA_@-@&nb znWlSnK8$A~344g;Lyxj$joW7~HKun$b-5}=vaH~iB5f(se`!UcfxUqPquuYqA#Hl| zS@b0LTv(y_-hDE-oN+hc!m8wx8bJue1;SGMComqQsTR!Zm6^iHao<>%G1dN0yK*hm z3|?5qp3r1Gb*VSs;w4>5Xg#fBKCNZ?f9^3`|Apwq*z{m!67{3r!(~V7q zo}d;$2}MaTooae&Ce>@)EL96e-QI)uqStuhh2Y9s00RLp7L4BtnH6Wu`Q+|7K+pYD z%Ls6;+(`%J*cAnFZBV-gf2oaeQRaWP@WSqknku{jWT+^Wae;2kUJZ~|FS;6qvXdFX zUw&P(?Pqlvh0PX#@;4fywS2(x? zK*5-WmbkOxe4j7QrCYT>MV)w^P@1B?hw)CxFBt8S_F88h-PC=3nl|BTA(ix=b9@x>YK(%NFGsP&T^C^VI zfp1Fd7bo5c$Oz^{oY(_Xek@Bq|BtvYFvon3Db)v`>(dZVvYO=6hG!c)E$6r)b_nsHRd+-FK6Yb)_ zg%=VJ#E8hTEkU^o!{ErYPiHE*fm(rAE!a#(*lVo$4jER> zGrm<%|NPl<$|viNQvU!-ojxQn7+E- z_6?Nx=km;`f#JS$OsS)N>m&t^@A8hrF06#Bp(W1Bd&z=Vho3Ez&3zu6*cqg`AgrIt z#pshxl6suHpxAa(Q*rx#_PqkMll=+aRo^*|UX@_-Ay#+wUyD<)N5q4(KlvK(GncK` zZZUaFrT$Mdpm-M*+tbdkuAj>8p8mnJyjHu$(VMEtu{k1i0W|jAL{B{IEUL~R=NBG% zB$5E*oJu41Om7d{)v!6NgLel}o|ts`0$sq^w1Jhu2}$rR-Dub@rdyj^knSL^uV?-k zRn^5BT=vrIObY@wz5%McDSB;l9}Vmih{~OaFYHBpZ2Ia13hnXSTrdOdYOwQ0!;!j^ zBn^^@O1Q{`VCA`~4#d@eV$5h^J+q%w&~yf<+nd1fQvk0JnQvq!Dl9io&WkwIJiJSz z*r}26&#o~D`+_TDp|31$ZW-#k&>{QO(h2>$X@od8hnrA8fR{8>rK^&evX3_Zej?6- zmhoxeF1(%|^Z|?w)MBBACmQcH@a{5K)m-VD+b`KKBw-h>&qsA$4xs!suT`H0MtuBg z`FUS0!!+i7__sCHu$#ih1daY0_riIB7k(Dwy1GtfSePNMWIH>R_4`a=C;q%N1WN0! zGwGUuI2^#rh__{i7faNv#j4rsQ0KU)BVFgAT~|Zw6R_1MIn1wD!_aORw^Rn^`Sm zu~dGU<2YmfymYTBkoGsj!x$J97VmwyB{D`0XxJFHJZ$rodsV=$TatW`M*I?x57BAT zhYl5XKWn!m81{s}s{74!^qm654?t}PqKGJ^TA%`G?=_NOMte5I_S z{bE5mPFWjZ%{>vZ{qHTH>D+t-@cRUSe+M4Dsa#-Qn@j@`W5COc!iAxEnvw(cVB+UD zL!Z!tMTHTgM0PG_T9&0Vdt2zKGmO91xxu`S6Fl)L`(7m2M;jgrW~eqsz(EmW24t;C zj}skWzjQ?}@XsPhGBg32^r{tFcn3(oCHD?*K1s{CD;yl$XXdn|z%&&Y2#b>j`S2fd zo!6YTnj zN#Jj=Bw7G=2g*s0@d&7f2sodM`E~yq(o<7bu;}tJWxvpYJ>ah*(}%2ogO!8k))@Dn z6Ea1CRoEWZKi&tFHb6l`#zd+C4qOUIrCOA#Z+79|`(r?4Dg~|-Pv~L|5PlW*>TJOY9|6wuiCnzrT=Q7kL$a`mRLSORaPFK_RXqw?J)Ko)OI4)_ z9y&3n6PSD^+-f<3(LX*Nnb^dJ1`H?G_XSm*XXPE~%VrCHDb#u~7)y3CtFV%_C0SqP zWchQtY$>=k|JN)y1^|+5jW8NJtLF{#VGjd;&{%daQ+kZr8Cs&)e&XGPGK3Na?=bQE& z20_+-_4#^`rrS>BS0R!n>@1%pn8e+`S9{Y!X&D_%km2DMWZJ2T6%I@}79W0YOPVbd z5&3l?2U6?-J?bW?Ar%K2Qd^t0Sn$8qf+NUq<_jjnMZBIwE2%{9mpw~i3^+4JhpX3z zdHC+UGCOiHPfF!$En^Y?A7w?#z`SV3ef>xLH7By0k};#R1@W6t`Uu)wyvTx)+>Mv| z%ga7s^szzt@!A4Q$R}2I^(XmF)Ol~V(*A_ZS3oH4#wJQ_A4+fb_kJI#G%#Zbd)!-UYwl0eansM#+yarbS`4*c zSh?BI`x9v%1}RS&1Lqd;{}+`iX=2&m{35{+)_L?V;~d$#ObZ z)r*??sI&jiMD!mOG1Z6lICir<^)@2Dwk4@KbLK_>sh!W;r}S6cwJQi)mQssHJRA$V zQS$_>XFNQ&?T?y5mz+RSmMGIAWO@*2d@FOrns4s(BPhc#SCe-@5mS^r=O_jX8&^v(!iK#S(N2zVeC&p zO{4JfD~~@9LNORf;zTZn2BBzyk~5o%ivD$C-GQprsn^6L887Ywxpr1uhTz}SbVJ21 zC%R5;XAJAn8Y^T0GeG=OW1;gF=#^9yrr3Gfn(!K}Soqf>vFHRiM1^KtNK06#2 z1rlcOT^hlE;d=^9328>(e{?sxOY9*Vj9;wpGD(e1Zmfp?J}(RS3O#7pj@6xX^Y59i z`hciZpS*sH0We;>CQ2%;vudN|TB236yfVlSzL5Q%v?mxHx-Smsji~{wD7~+0&bMwh zZCBCgY;%$i=*OzV$GUPIO5au zBicIM`{i5k&lw@xx;-oy^*ruJO0<)+_q?kHb3Rmp7xi??)!QPGfV`aW>wdsC;Cm;2l1x?70IykU%PGOyckcCj|c|PH<7KpOH84fb|S1PWm*R zPV$zbCsdV+$%Bq~AKXskmG9_m)R6UB*Bs~tsZtx~UKhdDwKsQ<-`zQ-UhP}wT2N8t zDog&6FO>o;l1_qsnW@<_-CK2XrmldfV)GsRbCLb2Ju|(UU`IqN7@A&eQbBvP|F91K zb&rvK?_pe*$rTWq_4_7ic=`7%au+NDL3*?J)bY+Byo%`7GkrH#deVXg1{yJY{w8kv2tZgME@N{)X|Rj+w&&IPayBTr50p?@AZ)L{n@|*c`)f3RbX6V zs0m~Rze;vMzujC;tJ=6U2M42(1ZJyuK|bw4huN_;wM;$&&#I!$vzk-}Yi~smLdssQ z6VuAa4I=n-r`D@29A6`CKk?K!alLE08|C}Ji&&h@eQh+f-s&w~Q-QUOYCMl~K+BK` zj57ucUt%;G^YE^JrfRcNh1bv~f98y-F@rTBcrfQ$l^)K;mWP=yT_F|7r0GWh~2M8oVOm?;@FnL{C{CDCtw5T#Tl)1h}$2i36A(B z+Vm!3;i5=jkbUdAG}U-Nz14MG?~+aI&5s|q^Seo!U#m93<`JHF&#QenH=`+^>9NxI zt-AW_MEl~(7NMednxzXdc^NVw}L)A|L7e+H( zZ>6wSl$o@xuh6VvhYf%*9UAg6HDw^!QEw=Dpc7zW`lH z)Fd0Gy2bawYU>i`q#c>gA9m5usDiN}%eA8;PUBi5$J4dJt^nS0C5aZD=4v-?e@wJv z(&WMA)wiz#WvKB4V9py9LdILGSV_?cr+q{I0$9mG1k|x<2nI_^dYBn+X95eLc8G^!kYspN+ znlymRKl{0?%HNHRcC=8&yh-WSA@{WwinCWs=UCF9lPdJ`$DGMsZUe^erG@)1)zAL; z#Jm)G#6LH7#@Sy))Yl_11qeX5gEUd}? zLp1Nqb>I1*mqN#TT{4;Psyi^;M!aV!awI%oV)c6Y`LxRWB9TEOb0nP!n z@!&YSvJZD_Rc9h|OjxcbRMiFqm~MI>%Xo%^#Mv%3b-(;E?&rsNCeXj!rCGlub~ZZ8 zlby~9)CJ&^UUUM`ZRPDrW)AVRmZCQQyCUfCPYkfk|FbQ&gJX;(ib=1H`ZA>28KVD`RN1u|2vGIo8Lk z@RRR5(?7Pd%3albY`?}7vp(GdZxwvpE~vEgbyP%>-9bU3#mvC~;)TWM)X44&oa`S^ z_b6>3AcGjVb4$>Raz+$Yi@FCx!KS`N$7Nn`t-5T)4H$*jy;DkkvtqJ!*Bj;~0mFYQIa zHMiz;n{PC3lSAi(rpb;c?5&<>$)-9HZt&tGCq;-1(*||CQ=@eEL%TVnFCQvSeiL>% zX3xY(muBDFB@rjBL0WE^)7r%3d4oGPexV3gaJcy8v#ZZ_T(8W0t56L=%Ylpu)^`_Cn7p+G;e( z`H9pt*-<21DS}Mz{H-90A8wqd;V$kV5Ho#3ffC_dcx18ENzWfT^qP^VNs+rezUpD- z$~{;c8S=r8i9VjsV&C!Ucm|hTF|XSJljs0iBF9$mlg)#vEir$%(k-8<4xJKC?Dz$a zW09(YZzcKNY6=maJT5@IpX%*){2wXa56sC@G&CGo{Ue&EwnY6OAnLLMCvL)xg;2z8 zcRxGNhBVhXuaK91#}L5!2fJSOivP3*M{!%oM@|_!j}ymDe8lcaFByk-wlZ5@i<#r3 zcZfdd`Z;EDN@TX^)iWM3C@IAXk*b0f$I2W7vSUWC_tD*VPI$TZu|oaZb4eHb$SP83 z8}qRfM>-5syeiEgZ;C%W9B=Cq-x*&RJkd+#nj(kht6Aw08AFFj1{K<>P0 zU5v|^Eb;NTE;8geD|6L&Uhmm+*0Vb_Sl{K>-W z&({~w>S^b}FZn79jxVLPEL@`6ZVXC-c46{a)y2Lcy4AB$qrKwc2N z00nynuV4FmAl=Cs0>ueHy&smZt30^2R!W5zw6-AkX_g)W$95D`6B8g&Y_t?<4zNr4 zg&pGGfL+j9z`d6XM~m^pA?mWWdeuA63NyHX$VZRpNr*war8^KvOL~{Q3y;06I=ckC zt0Pm)YUMd~V(Y;Qc#jxr-tA7CQB^Z=y4A_^#Y3zRIDy*~tk9~lLkfkr z&{MTl-dZNJ^RvWRnG*FAmMg7`FYGs|O#z1oX00g>0x1DNeoXK1_yukCkpE=3gJv7E zza5p*BRf8VkS;cD7$ZdJQE$LJn2YV6K;H}VeMb3*mZ=eN%lpmsv`5aKOjU;1vEIFp ziF}i-KbJd=`@Mg3GB5Rha3JzR;M8^v(`ql>ua_HE{1-|5d^CHtZj)MhTp9yq<(?P> z(gc8fqLDxJ3)=Ffr5;2>P!?k8EtS$+d{02EDx%glr-dQ-$IWStij;mO9O9UD96kx- zOa|PV3|&+;Y$J2}B+-1TK5m?@)bnV1q40j~Tl~ zFOrxx9O{qSq}BvS)&C-icQW^*RW_+jWumC!hkEzx z1Cag@$W>=G?+s|ZZfy%M_4XVjkR<3KN(~24|6*R_6Q#G36%Ertg0vryrr0=i_O4D+ zO(ihhNcW}2Y3a!7!103t<{$@HCm79FX+q$%V+E+@A0O~9k_fj^7WCevR%s{M7e%Z- z8wWrxLm-#hFcTZls(Z60{bToEz&tQvp;B6p+@IFotuuyVf}J4@!7#hX`DAO zUEUv*lzwZT!1ZqDl>(65tox;m`36JaZVIbW&0l==UnH@o+EaaElUjFi(kwPD@R=w8 zxd4Hjdp!4L1KNLjM>l)4BH6i}az&{LC_~%NmVkVx3gJkQGJ;gu_Zmo*DJvPC+`2GU zIC)Jizt?!c`$rcuMtj!yf}UplG1V5NXCqV8DI+;VS(aD8&NR14lXTBO)%Mxy-p6w- z(`#ku^~H1vRC6#zntw7~f>HpBv$+#L>uDzt6QEx>>G-u!zi*ur=_k@+G8(;es6D}6 zhP+;u5YXRCqEnN#B_}tf+~ayOz9O!AQYmXWxb<4y0|55&eRV&^m{}yjux?anE{ZeG zX4fB>4xbD4`s8Vg6=xFKmipiNUIPd(4JCH3A}a7eefgg$+3(y|dcXIE)4n>-K+}qe z!zJp6R`FHsqi*t^=NpgAvDAK0+ML=4)Hk9Iogm zEs=f7jMLTN^}aDZkNW3gFuF_)GPfIim1WuVsxv#ii^t7Hr&4G>@h-l1UcLIgs=|GY zZq>tZe2v+f1bj-=r_`cbxb9}R*YXMW6&ic3z4M^=<5Y9=C;~q4a`xB22h13|8j|ci`9rd%pBIn$ zWVstHFgzNK(jLv||Elai&yF0@#3V&^YLD=XiB|6w9~yqEid>CD_clDYiLG&hIk*i- zKAx+)H9PXY2tgrAl`hM8Y6A0BcJ!zfr*~1QW+I-78V0|#^!4fmf6pq*$3y|xfU4eP z>oi7>ka1%G@oqr%elkO*P3x%2r+G=vpGMfR$m>5!)(&4qTPw{6t(8CWS`U#X14mzX zvAOFl>e7(nx0Ls?Uj^?JsO-p(j`AL*eA33IG7MWQquH{(@5HP;Oiq2ga~4Z6#P~~m z4mb)+XNn=j7N&LxN;Kz6)}cunWgjQ1e=8;TmQrph<-bKKR}nNcH0$fq!nnu3zsoqD zatX7);VN2om(oLr(VO~G_0fp$={+HeeF@!Jdfl92(}tmv2lR4e$)Bx5lw)_N_;yF1 zeu0{^bW073xZQVsVPARBwtWc)+(t5O^8#y+8O2;*B?ShmXqRH}F0Jm&e7ZE)? zd$ofYU2U?QF&8k_8E69{HU`hYf-lU)a=L>es&OpxOQ2lH?P?a#o=}5^4SWi7D)3S_ z8#A|zvL-DEJZ+iCU{=m}MY@~dai_&JclJXVup@u>fmyq;jyygoJ4LNkTMO>v#p^?JgIYSH_h;*<&fA;Xp`^MxXt>&L>wreM+vbeOZuubS+}M+5;Yt zFzTk^Jb4G@56hhkCKDY3AIv?p%c<5r6evxei}qr@=@~4<<|cAP;IMMfR5FK0IH5bC z@n~rmW>E+rOnKkEHWafM`8ZCgpl7}Q%!1R!_4^`IxmJP8`hJh$BRkLJ3myp+UuMon z>^`~5U%cp{Sr}O2dN>n8l~-t{re!*`E+W}-ti8ZNI_F)-2ez{^gBj)>^BOlB-Bc4A zugdfPFHiE}Y4vmK&x7c}HLR=Gb14l%Cm>+B6^ z?fD0{1UDOHXi0Ba(;7Yc?o{B-i)&V-QNeMZ9mDk60zEoms#iR#zR8LV?(r*?ObK@> znw!z?2wx;8l&%tmW_eA-Jgf-ou|*Tat~C|iKJ)Um`S^KbrjHU&Ei}T`jOGy*GW)WY zR2*i9g3#+1Ii2VH=_TFEMZ!wVoSi!6{H1k|`jy&~4SeR4fev}g^3T_sIewlls9wz^oP^CW z<#n(<)QDdV=?K4_y|&}iN;$q$qg#Qml{HkgDw5r|kL>ftUZ+uN-o;!F(QY^T<7OUW zwnfr)IbC~DG0kA`1!i5u{%d;Cs&`aPq5JB%#Q1&ACnk`tuBJe`ddg_dyMB;JM_6kq z_!e{dz`(alH?~xDOI5d2_20>>4teSc^l&KnLLy2hKjtoF@sV?(*CF9DhsF|t`!;i+&FHohPn>kY^om;!$yior2knv|lKynT%z;c5xDMH>@=p^>2(?kHf;{m`Fq33WUZlrri*d zk8N{2BEV0b%xLeB$t=uL(Astpeam$qxbdn^fOB9bdH^ZnC|u@}DiL#BGE>|?fVgw{ z$jcMbDbkeH22KE z^DH7gQe$l(J}T9RrPSy13^6%;+@7tU-aGqNeP7-$R`%45{gh$SL&nqi2bi~gXk>jv znDaw;ZqHJ#W87lp7Av>3a?8N~llaQxCFJX*t8LJsqAWOaU&NHK)_gQ+{ZfVCfXX}* zG!Ow?qd(k=v~YE%0Q{y0zEyjV5~a0=ll@_wXr*JGoOZ?91wt)pG!>qcu2_-gOo+%q zdYmX!NYi;aM{=2AzWW zom`mv@u<03olg1uq~p6CjQ1_PWbtwVJsi##VyK0-1WHf_^U@`SMGtcr_cmUCY$dGx z=Q+{JJqAC75(+dd3S}wE61b6}$O0z|nT&n)si!9VxyL?2P3$X%*onuI!*sd`%4e6E zp#r!Z{h=iqZ#wtsH+o)DciwC7vkojl+mo*u!`g|w*2EID&gmGX>@Ul5UD==$qSu#5 z^VP(>l{re9T-H87v}ST(xk#a%*go+6X6%^7-h`W{{$KLIn&g(-kY34I&(%fV_GNed zJ2sI|rKbDXvOQN@Fp&>Bm6%RxxOu9zVYp9g4raPfez1L<1@Ye!=BZ(=FLSs8-)k1H z;Vl*;`?Q7Og=9>)piZ&tgHr-0hLLBtj#?p;IecHM4aNB;=v!AyL!Ss+KvU(etP1QsUne zWPx+ERcm1^5s3 z01udAZYrYk4%s%ik!LzrY~iYIrJRoHEaTgr^GDlTH1)*(8EkKYU%X+*IcNI%2m_hgyOI+nmQa)%y7EHDh4 zNI^aH40inTKa0{XEY>7mrb13Vag^eXr-smz129uGY#a3Cjr%P&dePi#^`1^u8hU{) z(AXST2=G-6-pB39K|Ojt2`D+*3ZWa;#s3_}izBczoLpfvpDcyPBG$ApjZ?Z=D*daP zODCzbiF*On1~0>Tv=J1Y*SYXGCK9XASlqE!vA zwT~cx7d@~Y91L-j4{J$ugxINlI0u-gHe;p3$t$R1(lkHB4zSY}mmTTiUJaone~UKq zu3ZkMJWhn1;c-SPUll^7$&okAnM8Nud9}L4?gedgai`rYgTn!7h`ny!;Hg7}e2-wJ z1`r1=Q-l^c1qLdg$O1`-Rv92uXuh()mj1Mh&orJH<;%o!1Un|h;iVHOq~`cjr0xFn z8WIQ>cz@en!262z9*qR83z2W9VPJ?el-;W#s}FnEisrqcEfVx3ZatM>Vjh-#BbYL= zCBiKc{;yV8V+)t#f!)Ghl+KiaT*DANXCY~b!^-dG>ZHY*x;2QCP%<#evipsNy20tW z1h|nFA1$)MINt*PFtLG0l&BN4-7V8G6rCS2q653ecxqBcGY7Mt@yuD{(XAZnl&&gh zTi(3KG5EC!L`jRS$It1&+8M|Z^xB6s-Cv{^y^L_a1Z!V5bhxSd#=-3Yq0~TB&5<%R z*p>^KR06OWr5BN;bj4_CvgGdaq6rC8e{A!G0}eY`0t3K?WeDLb$I{LfmyvobLV?p+ zEnlSUgRDagsQ-@3B9tNM#Rf+&=Pfgx62!~%uzZ5QNf!jclR9o>Rm>{hDS1q)q%2XW z)m|s?vN{2Z>(1Pw`E)P%Gvli7EIH`qiCEszfZs^Jni|ptfu9K;6Ufv#z%A~_Jf43( zjFQ}ve$S*3ayw?guMGAb(hBSW6_3JG1GN?Ds5x5D8i+Y|U}Z5D3!m8eq{rs9f^TR; zkCvY+x9}FZThiT9=Kr1Tij?7!atGN3NjBxud% zseU1F1d1{0g;CWS7t*;`ecSQ~_;~#W8a;`WsIm%yrov+MKv15hTv;UVaG^6M0Sli2 zQBa7NYLJGq;|XGqQR^uXY;fJGxjj44F>6hd-2Knl8`D~a1?IQ>pCd3RF^|u7-i#N) z@oc*v<{9`PL-3U#zkIfno49ihIEy2W*uL}aq$8XOi91RTLQ9rYum&9lB0t!>K&Vr5 z1`L{L>1zDzs|uJgMcc)~L7-vgK1`dCm!R`r=qVI)6oF78Bq{(N=-HT=Mo7ub1_8za zPTcMxYXrq^x4|B8;^z;vZrgWOGV+eLEp+(XbKsYm`Bxd&$jSO@e)9S!L9k{k3X^QE zlqSF1cV|Bs>#%5e#Bi$EjOU-5HBcZ`D~wt|C@*oWw8+L|<{jg*K-5&D2RBRgwkCz2 z-h1|jG`Td+knM>>{=pMFa8N`OaTM^}lOpmn!(M!DtZ5^fjAhI_JXwK9U{G|(6;AWjhD_F-(ycQZ`E*bJE))uiaGbf?b4^pm?12LZC<+@$tKs8H zTlJLShd`KiU=M9YHK`@KFFGpa<1@whgY6(D(-D69y=pWFou}0x?5PPpYXSt~`Y6_Y zOCbN%1#)?q?!I)|h|G%!SSEKIrhQhk_U?nDo#Bi1^>LsAP{Rl%2Xz+%v#8Mq6iE|B zC~Zysqml_o9^{YQ;Zr7hQzB|+o#9n63fjf43MUs0io*{F3uc#FsPF5%-6Lv>11hRV z=+mCh1HJIm_2~joOm3x#%m7IM8zx{!?Y%7KrQPqmCR03V%{rOsDYWHv*E)J*$AUP% z+VUAY<*W9`)pRn(sD)3Mb8vimMqZfg3|pq=O8qB9B5v>lg5x>gb@cL)y=nm6h%=pia2mI3XM^-qnH;)o%UlCmTQi-nC^YxPuw% z5M@3}_k-CqnDa0SoDwBHIMb@r00b6JFAhaX1XN{Hl{7iQWq+KJzZL19IE8EEP}C@$ zLPeUZqn0^%mpl~c%%v?ZOhQkI9$=tdTGbq-I}bvT(mncF>eA$04R@72wefR7Jk~@7 z`3I69sp5u?Zwzr|*_(RdA~~35bq#DN29b_Mxadhigy(ICWBe6DB#dTc!O-0lQUY9b zDgwCR3k0XN)k@%cz=XdhHXsme_yhu~{G)N%(ag$6i?eooWxqhc>vVcF8IcWOoIW~K zs^r(#pez*&A4F2A!jFM4p+mUgV;$Xn;j<@iUS=#on`VrbJBoXPI89Xq#5@+0DS_*d zi$uXZ*zvuBV1pNkMqFbZM*4${WAn1L72y^#Pg>@zxv2IY1M0f& z>WsP4|J?n%Rh?BbM2uBPQK->ZlFpqFMZ&BGGMT0p_-RD>*4PKv474zFKC`jq1l zIXuecZcM=4-1%0T_X1y-FuD7o7=-Wk-S!bwe4oM~2BHDFIiXwV{vXKQsey`A#QOp> z;Ll@0jUmO6gSi@%8zDUapVH&3PiC_sEe}q8YZHEza5HaYP2lxhG_+(48Y_bN-ogi~ zq4Fize&#l+D!74-P+g9X|D=?C+TS*JVp24q8alfA?t!C1chtY_MIdxGL)PB64d=rU z4-VKkN7?+5ZI;&p-?e7*gDQY9%yT_sPF(BK-d_fB3O2n%Ttk{H+GJ?e?RS zDnLt*P+=as(QQfvh=OIqzw;XfSdsMazAMRLyV$ZPY7rxXPEba#jBbU&U@N&)SsSS zFyDW_8?1?gVuXf;oAAd_;SJ*T#MmcoXTW*fx<89bdEpu5QW07vqa)afz>=OLPgtRN z2mp;SK=!;E0H=NCS)<&g8ndr9MV>C8M4KE&^L70K;g%`y?G64Q6CieiSVI3|+;9~|2C%Z2URV&wl{jD#AL8w&7St!%kAMb z8|U6*HFN||%t5GMvf(BGKK%f0wEQeD=MxlI)!IY(jSbb1VzA80j3@tL@)Ye0>fv}E z4K*%*Z$Pnux2f%2W?`BFFnqK2QO}@X8~RRw#iZ{G-#CBDf%nT~%!dDs)DwO1GDozh z7>Gr!Na-9i8?pZ{&|DE%<|SLEwgPw$;Fjg~zn@Ho)*P4=QqMEKz{|wDYy&mc-zc34 z0c-nG4mE!QYsAFk{lB~cMD3Y0ur?!x#A-qUxO?~#HD3OWttG&s`e<#hA^s4+wtKPV z{w7eMAUk$m(bR}&l+nY(!78US>BiryhXJL0h6$picq}u8CU4@@0I&a{`ewvi zrjWZBn&t6kbf5%}vs7blPu9$X>}PW$=TBKM6|z!CJUr`$pvY5JE+2&rq=e6Ej+~!z z*CgU|ph1}5igE`|&jot9mrX}Gk;GKyrHX3~1AoEV$%#w~VNqQ}P*`$Y(E3|{Adoq?jdoSMDxdZCy#nS;_+ zr8#?DLK>O!&BHsAFOvffh=&wbiZ6yRFID-g6)*RSt`h1-g8~FgtA87~?QYlriu(;u zewl%QPMEyA;f{fl9!8d2Kgvql2lfV;RMOD6m1lbOu_eFgPT+VQHyv+{0lXg9O6NcE z{sF?p!tL^s|HF)BO~KAuTx;leue>?p5({i#F)VCYUTZ0X(8AqJ4$Q0@ zS?d`k(%mFR-L+$TRwDY|DC- zlFxPTYk}Vaplh7{2bau$M_@S|0Qs=UO$aX69;7QU#SDoswmRLQ==x1_JsvPnbQ^2&ck1Iz0jreo6!&&%wJ1p?yS4!xh96y6l-m#^LCB9djd{b96gpAFP)=Ra6GagIbuy0 zlQ%I*0QVLfGIOChG)PHM>a^~CtYrhFd$Kff({V+EPTdlEeM+=5*Wb30scNG3*l#Q< zV$HkpRexpfGV=m-7gz9cOZD&I)HD(xuXAw|f>|!}Y90uY1T|x*%ED_c%e@*+IrFvG zZxtlO`sTmGIox&FKn?HZh6jrFG@|`t_D#eRlb9M0NJAgDP-W$3ywJtZy*im3T<2}R zfS4%btHf&DsoG`vJBCa1rst~+?2dD z15jqS0!9EpT#fD9Bjcn%Y-{jB`V+ z02zi0guI=|ZwRFp)?}w+fNhLH8_Ghy-SD5!u*Fb2D!+N&z$J-VsG;S|N(UuO34*5< z6azyd5Z}B%W7Z5lJ^yx6w4It^KqLxD_9T^{70@XGLHueSq($UhkQl$4W5CC>XqvM` z&voYR1fs4^^+U;sW|?s}1rRv2%U!Ob1`bnVFba+KsQ*7tG^_8(PPKw(g^wj5Vl+SK zeP&>cnHviVpt=6oa(Kn7SZ&x4k-6Tp zDoM2Y<_<$_o)dzCIgc7DL*KAha@Q1;w5gzKFfN>tw2dX-nlF-bMjfffc zkS|$@yw7$*2H7@^ zjyo)<48C`hW=$GRpuOLV;fVTCPv@U^eb|h88b}MH*bbER96clLd+})o!c18(6OGF1 zCx~8E*R9e+($E~pg}%$^d1ixB$!*HjbHaQdVwsoDEVkxTEywBz#2-TVQ>&RSTV0tv zPjx*4)~L=;|NC|FQ+PebOS90N-ZNnI=;1`rfG(POWJ&chFT!ZlYDgHwx$=Rc-+ZM_ ziCTzzyGT061jz$k$UB$3H1{ zYxcn#PUI+PGoiUji}{FeXQHe~b?=idQ{7>oFje~2H-5y`(W_w2Jpw5oor7|ZA?J|x zO)*r*GiD4y4*y?Ii2rQ`M+dL}Cidp#htEnmgA05b)oO~g#G8w1S~UwT92N_c*EFk% z?|Oe7S8G~Gd(@+wT&*JG<1)zbHTJRkWM{&|u98wlFdpuJ6d_)o)vZnaR=6ly;E?xC z;=7oFJcaRc3Xe27#j~CIqYSuz7-Qb(Y|~=9l&RZo8D2i3&=m_VeV#5Kc4Y;ls|`q< zw6BBF5lU}tX7#Na&b%>sYv|%g=J+C~U`3K2&e>?yoMcDdjHJII(5)9;QntsV-Sw%6 zeb!u#ds`tsabj5mywN9+vd6ktFisyvqx`Q|oCywlnS|2hTy!u$xT>Wz7ln zDsqk%h5Ho!^EJU3J@?!CXP;MMWu1Pys^602cKvzFN56?hEyyw}lo=y#UAobB-3}Xg z+JYr%^A5+(ci0tRSiQh4Wc2CFOBTW4l7d`VtW(*dh<)=^=XFkVxsIuw({XpXG4L`Y zRs_YU!eyi1`#;*d(x@h{ZXFU35d_p$1`$w1t)KxJ6a*4PK?W;YCPfVt6hUjKXn`OJ z0mTVq5Cv2wQM3$#BML%dt$>0ID&R<{Oo0etNC+Xrd-t2Pt6lfc{d0%!yNjP$D<|)M z_u2d8oPD0>+21HO1Qse3oU(=pDSN(~uPY0X;!nH>v(Nz1oC%Pb0QvtFAPOh+;o|4Y zwb^PLvFCtSr<&YGrJO&&7w4WEnW!A32*oER81Lf9xlNylpRJ!0$ZVBes=>Z0o@V$TGLBDm+7?^@#)2c0R?7uQQ=($g#QQrLXC8_E_#5tNALu^YUY` z!}lqKvac!4o8QjSAv+JJNe@s9Tm(s zqThEN(W~BWS(fS&H==U?&5-2&U4pIFc9Y;IIuBf?3xy~37f&oKSEV>#dz%5}`e3Ki z{l0t3m4C=H*MN;zf?JniQn$t(p7oyEGUQ8c z4(XW?nJP>l_bO+!f7w^E*-E7eQ1!}|IYW|+^O08eRnp>4)y3qujSKIoPKPPiM-3Q) z*2ke;?fm|R%iDQCa4_pBO}pItes0nA%GN^3$s)iOtuooi#lvFyZZWQvdbJ2D@SM*Ra<$GCly# zb{gd;CQ-dV8{{ll+ckPAZGr86H~c#gsHCi6d&R#^BW?pewtENvmKxLnHk^A#LY}H{HrV!Xo;MztH=&aIDeL!{buYn?Bh_* z7;8CEkU%E$@S(fyINgyz;pA@I7?eZA#Xq>We}(@}%QV>;Kz1P&d) z52_#On9t?ke|Rk7C+SBC9F?f9^=_wnMG4C(ds~zwc23{Qip%-h3Y6}A<-L@E!k*P~ zG?g;Iu7;R}k*v#YxJc*)n|!qNek{wtvTXv^<^i2zc}@B`R0EamM_=PWp-T>hLIL2u z%K9~;jwJm@qCaxT*Mn{hi=_Eya^Y^3(Bi2iJASWpj?-Vyrf2HEV@I8n1Hu%rM;W%G z?9Y|^dCbom+~Y=zO@3ktl(+Jp^1?_ym1Je>s{<9iVLObQf-|RiW|- zHELkdpkJt{mT=(O0O)_USa`wqA1c^qq5h~&>AsVuidu9q{#q|pd@|C-Wa36aIE$vi1fUN3kXg5T?Bo`}M73Mhb+((M19f`~k4k>bbN(ySjc_ z0)jhfxMJ1moa;gp6;n5OOmO+x3;g*^D&ML(<~;>q<@KH+qkp;`F0>=JmD$)?-De)J=Az|Mq>!QsXu3 za|??Cxy!rbYZqNyC%?EThRj;GKHaHYb-MUs=qFUX8nt9jyY>85|;el?D>t#kd^BUyu=E>qMXH=)JoeX_f4Nx$yb6>Koq*t*D7Q(sbQA=vW z_UTrFe0RPGEcvYrG|;aK7lDXRxFh4nA1$(P8`3wRw&**eFB+NNU%sqjrTj&A05tnR zpzh>hfQ40WkNy+z?FO%zV1!yyzAL+KH3*o?ED7htOKn1=&e%!-ppiqT?#UK{E#2y1 zOR`HU`l2%~|Mzz}n`ju+JscovOz~UYg-;kiH-F`pI0wej(?(*AjH69}E&@>Jh*(#S zI{aptCj9Gor8^ysGUBtpX@$yE>sav$x`~R{h|*Kz9&x()$MV~yUFLZ;?M)m`R>!eF z`4rk0h-x&R=g#Q->-Tz@?hCxPq5F=>OJqVHhgJ|1x_(K}LsG1LWeGI`g+#pbKF=uwyWudOnYJ zi8&8Gxg3bC?WFRv&oH7;v54FV&=-B7`G~;v*p1aWG3O8vWO#_rb zEstGz@r8layatQRd4D|^VB%ZQLQjLQ-$Qt2+fepRo2gVmWP$_1EAr@@Z$Tk^sC{ zwcwTm#z)X;ALvlAh@J#OFasFJHG6c%(q9yhq$E8EP2+FuaGMx7wij!XTN!;XG}w`; z^w|~;wTVkSV=<*8@ufPXRxWij~t5~cN*Dl$UW|8;)6tNC;Ya%=iGjAtFz3}iBxYT{P-#}S% z@P=^07Ek}S<>Qn0mUmH3%VIeCKhu<%z0TvB6(vhPQgIV%wtk|tTeV$cUm@)ypr*gf z#EqYOrs+5KWbOsMWa=3>mSk24jiHD#2V}LFL(2If6n*T-&z89ql9qPION|dvUD4Z55CyBKVwfE1w-9MIXnVe( zsL$zreQ_Q>``009gWr{fJMkdAL)$xG40Cp6-4*ABu-hxc!A4J8?z2SK`_38*WFybV zp=NhIYc)7tP{mO0V2D?srVEb{sXuF@ArqKh*oKEgCowMH@R4JV#Txf(H9-Ls`gj&t4Ta zIe_4;7hLLKA0OTKyZip)D(II{v>8p8S9zV$DlljLuZq%?fI7?pkg0Z}+-LG^lZ`Yo zM9mhM@svroM!0l79yx=WUaOZ%(n~}`Cad=V&mBC+IPnS(y8&N$$VP5%KEB@ob``7O z)|rmxi?IdVc<3B_Bg>Wk7S0oN&L;N1X^4+gtvUu9Y&9pj&&{u$OG6y)X~>f`pD0W7?EmpJCz7$fqgq{qXv}p9$D@N5ROHq-lgNS& zck&kpXvLkC4O!Xr-pU#nmWDx?rq-*o9~YQ<7&gz65PtNocb&w&&uN?t6F0Ywe}q-z z5co8t@z&UufF1C|dZ&LxM|{HwT2BkNH44DnM$eE_<(OY=)yJ?Xz`?nAK4SWOrVKRmF$+P`te_ zo{GY({!w1Z0GVXW{sWhkZkem-!D33qbmaK&Y2^}aMoZeK7885Q;OkiMj@FjDOWXox zVRaghCibh9COe`>ys&@=N^ka3ZtoSN$SY7_2JL4{@lNdgmF}{6Ggb8r0?7~X7p8PW zB@|fbN4kAW#x}&&`NIS#fp_q!!A==WHN~};2Gw5a_$^9+N42yw!&HlEc)M$+WMHhn z%O0MWh;^8(f}IQV>!7#?{!;LZJPcSkTpzRCrzaAVTnQy0RqzhU@I~TEy3Xui(>FSo zEh?;Mp{L9ediz3;n8C-CF^C#eulZ3v>-A^|Tv?hz2ADbBGbJXwLN!&3hpQO*G!#!& zen}^l)p0SpWWcsA1n<-m)8}r-T4*--674lLtK-$4K{No>m7PC3mg`$USDrhQHdYQmbZ%H$!O!aS-EsAB+0sFAM;TNBp&$519hzoGO^fm*PdU&6_qVyMP0*RjmO?y)K)Qchj+=9HUf6C8} z2FB15miZE}k*gAd)DB&DQD!EY{`ws#Z#LXpw9Ri=Jc}`8e!=FpK1Z@j0DxOyl0DS# ziFa_j%li(bhEtz;&#KpcwW&}eURg(pVr%Ke$Lv2%kF~;KV^&$|>G;BF+7x-Xek+`_t1DXJp3Q9hqV9Y|z zcN9>MSos1Pocb&$s{88b1qB${+hXL0RkD1UUqBGOx*wO#C2CAQWDb0F+hg<`XXsj(ZT@&(%YAUC&UOP4C!EB z3o_}8Cy0bCBxwsG8OTJ098!(A(LgHfS%cJeG9GSWOmP{04NqINPoit%5i?Ih8ubJvh?q?z6T4Wk>iiGqJS4qZ(rv(gg-$%YLGRhIKkZ|E~ zM1z6!;iYdrYA~c*--I#{N2H6}LsJ&=$yCv^WG*6L9h;O$CmUJF*Hc-@)J+0QO8Jn7 zh;I^V#ltM=a3hy0s16OXG?O!M4T)rU02yORCpcUhax)X*b65=VP@YsgF6v}Zgwho>$@l~^x(-heO5ss&7}7ub zXh^>Si7F~*#ITOh{KAk}ZY=3kWuu5B#Y#`bbRo5p$$I4cBCcc&Rmf#cpZoOjRV4$t z!jMv{L8)BCWzebz4Uo`@s0h(b16tI(o*1h5hJY)c>THopTI=uOxl^JR2J-&n9tP5r z_sb^<-~WrYL;_Ci%VbPFZ)~YVo-TKwO+7Q%OP%=0sud4`Bgc{2hJmeYCL(-eKt;wQ zX@W>R<8vF7v7!dy-%F;V_ literal 0 HcmV?d00001 diff --git a/src/main/java/com/zipcodeconway/SimpleWindow.java b/src/main/java/com/zipcodeconway/SimpleWindow.java index f315e00..1851103 100644 --- a/src/main/java/com/zipcodeconway/SimpleWindow.java +++ b/src/main/java/com/zipcodeconway/SimpleWindow.java @@ -39,11 +39,11 @@ public void display(int[][] array, Integer n) { for (int j = 0; j < array[0].length; j++) { g.drawRect(i * BOX_DIM, j * BOX_DIM, 10, 10); if (array[i][j] == 0) { - g.setColor(Color.WHITE); + g.setColor(Color.CYAN); g.fillRect(i * BOX_DIM, j * BOX_DIM, 10, 10); } if (array[i][j] == 1) { - g.setColor(Color.BLACK); + g.setColor(Color.YELLOW); g.fillRect(i * BOX_DIM, j * BOX_DIM, 10, 10); } } From 63639f9e55772ceac3e2ec6e35c19995d2b90d5c Mon Sep 17 00:00:00 2001 From: Peter McCormick Date: Mon, 12 Mar 2018 17:46:05 -0400 Subject: [PATCH 2/3] Split up isAlive --- .idea/workspace.xml | 82 +++++++------------ .../com/zipcodeconway/ConwayGameOfLife.java | 22 +++-- .../java/com/zipcodeconway/SimpleWindow.java | 4 +- 3 files changed, 47 insertions(+), 61 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4c4d683..d58fa22 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,8 +2,6 @@ - - @@ -21,8 +19,8 @@ - - + + @@ -30,41 +28,21 @@ - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + @@ -130,8 +108,8 @@ - @@ -485,9 +463,9 @@ - - - + + + @@ -506,7 +484,7 @@ @@ -523,9 +501,6 @@ - - - @@ -541,9 +516,12 @@ + + + - @@ -551,13 +529,13 @@ - + - + @@ -652,6 +630,11 @@ + + + + + @@ -665,8 +648,8 @@ - - + + @@ -675,25 +658,20 @@ - - + + - - + + - - - - - diff --git a/src/main/java/com/zipcodeconway/ConwayGameOfLife.java b/src/main/java/com/zipcodeconway/ConwayGameOfLife.java index 29c66bf..52de7a8 100644 --- a/src/main/java/com/zipcodeconway/ConwayGameOfLife.java +++ b/src/main/java/com/zipcodeconway/ConwayGameOfLife.java @@ -39,9 +39,13 @@ private int[][] createRandomStart(Integer dimension) { public int[][] simulate(Integer maxGenerations) { int generations = 0; + while (generations <= maxGenerations) { + this.displayWindow.display(currentGen, generations); + for (int i = 0; i < currentGen.length; i++) { + for (int j = 0; j < currentGen.length; j++) { nextGen[i][j] = isAlive(i, j, currentGen); } @@ -74,7 +78,17 @@ public void copyAndZeroOut(int [][] next, int[][] current) { Any dead cell with exactly three live neighbours cells will come to life. */ private int isAlive(int row, int col, int[][] world) { + int numberOfLivingNeighbors = numberOfNeighborsAlive(row, col, world); + + if (numberOfLivingNeighbors > 2 && numberOfLivingNeighbors <= 3) + return 1; + else if (numberOfLivingNeighbors < 2 || numberOfLivingNeighbors > 3) + return 0; + else return world[row][col]; + + } + public int numberOfNeighborsAlive(int row, int col, int[][] world) { int north = col - 1; int south = col + 1; @@ -94,14 +108,8 @@ private int isAlive(int row, int col, int[][] world) { west = world[col].length - 1; } - int numberOfLivingNeighbors = world[row][north] + world[row][south] + world[east][col] + world[west][col] + return world[row][north] + world[row][south] + world[east][col] + world[west][col] + world[east][north] + world[east][south] + world[west][north] + world[west][south]; - if (numberOfLivingNeighbors > 2 && numberOfLivingNeighbors <= 3) - return 1; - else if (numberOfLivingNeighbors < 2 || numberOfLivingNeighbors > 3) - return 0; - else return world[row][col]; - } } diff --git a/src/main/java/com/zipcodeconway/SimpleWindow.java b/src/main/java/com/zipcodeconway/SimpleWindow.java index 1851103..e036fc5 100644 --- a/src/main/java/com/zipcodeconway/SimpleWindow.java +++ b/src/main/java/com/zipcodeconway/SimpleWindow.java @@ -39,11 +39,11 @@ public void display(int[][] array, Integer n) { for (int j = 0; j < array[0].length; j++) { g.drawRect(i * BOX_DIM, j * BOX_DIM, 10, 10); if (array[i][j] == 0) { - g.setColor(Color.CYAN); + g.setColor(Color.GREEN); g.fillRect(i * BOX_DIM, j * BOX_DIM, 10, 10); } if (array[i][j] == 1) { - g.setColor(Color.YELLOW); + g.setColor(Color.BLACK); g.fillRect(i * BOX_DIM, j * BOX_DIM, 10, 10); } } From 0b9c50145b706e23ec84050706d154308fc90662 Mon Sep 17 00:00:00 2001 From: Peter McCormick Date: Fri, 16 Mar 2018 15:16:56 -0400 Subject: [PATCH 3/3] Testing pwd usn --- .idea/workspace.xml | 130 ++++++++++++++---- .../com/zipcodeconway/ConwayGameOfLife.java | 5 +- 2 files changed, 107 insertions(+), 28 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index d58fa22..eab56a7 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,7 +4,6 @@ -