Created
          May 2, 2019 02:13 
        
      - 
      
- 
        Save ironcladlou/c7dcb145c1997b2d2b863d887475161f to your computer and use it in GitHub Desktop. 
    Chicks
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | pico-8 cartridge // http://www.pico-8.com | |
| version 18 | |
| __lua__ | |
| -- global | |
| debug={ | |
| enabled=true, | |
| show={ | |
| data=false, | |
| timers=true, | |
| }, | |
| data={}, | |
| } | |
| function debug:print(s) | |
| if(not self.enabled) return | |
| print(s) | |
| end | |
| function debug:report(key, data) | |
| if(not self.enabled) return | |
| self.data[key]=data | |
| end | |
| function debug:draw_data() | |
| if(not self.enabled) return | |
| if(not self.show.data) return | |
| for key, data in pairs(self.data) do | |
| print(key..": "..data) | |
| end | |
| end | |
| world={ | |
| objects={}, | |
| object_count=0, | |
| } | |
| function world:create(obj) | |
| self.object_count+=1 | |
| obj.id="obj"..self.object_count | |
| self.objects[obj.id]=obj | |
| debug:report("world.object_count", self.object_count) | |
| return obj | |
| end | |
| function world:destroy(obj) | |
| self.objects[obj.id]=nil | |
| debug:report("world.object_count", self.object_count) | |
| end | |
| animations={ | |
| chick_idle_e={i=0,len=2,jitter=10}, | |
| chick_idle_w={i=0,len=2,jiter=10,flip_x=true}, | |
| kid_idle_e={i=16,len=2,jitter=10}, | |
| kid_idle_w={i=16,len=2,jitter=10,flip_x=true}, | |
| adult_idle_e={i=32,len=2,jitter=7}, | |
| adult_idle_w={i=32,len=2,jitter=7,flip_x=true}, | |
| egg_idle_e={i=48,len=2,jitter=3}, | |
| egg_idle_w={i=48,len=2,jitter=3}, | |
| } | |
| chicken={} | |
| function chicken:new() | |
| self.__index = self | |
| return setmetatable({ | |
| position={}, | |
| motion={ | |
| vel=vector:new(1, 0), | |
| acc=vector:new(0, 0), | |
| }, | |
| sprite={}, | |
| anim={}, | |
| lifecycle={ | |
| name="adult", | |
| duration=3, | |
| }, | |
| }, self) | |
| end | |
| function age(o) | |
| local lifecycle=o.lifecycle | |
| local name=lifecycle.name | |
| local t=lifecycle.timer | |
| if not t then | |
| t=timer:new(lifecycle.duration) | |
| lifecycle.timer=t | |
| end | |
| t:update() | |
| if(not t.done) return | |
| local current=lifecycle.name | |
| if current=="adult" then | |
| o.lifecycle={ | |
| name="kid", | |
| duration=3, | |
| } | |
| elseif current=="kid" then | |
| o.lifecycle={ | |
| name="chick", | |
| duration=3, | |
| } | |
| elseif current=="chick" then | |
| o.lifecycle={ | |
| name="egg", | |
| duration=3, | |
| } | |
| elseif current=="egg" then | |
| -- todo | |
| end | |
| end | |
| function meander(o) | |
| local motion=o.motion | |
| local anim=o.anim | |
| local lifecycle=o.lifecycle | |
| local heading=motion.vel:heading() | |
| local motion_class="idle" | |
| if motion.acc.x != 0 or motion.acc.y != 0 then | |
| motion_class="walk" | |
| end | |
| local key=lifecycle.name.."_"..motion_class.."_"..heading | |
| local meta=animations[key] | |
| debug:report("meander:key."..o.id, key) | |
| debug:report("meander:meta.i."..o.id, meta.i) | |
| if anim.id!=key then | |
| o.anim=animation:new(key, meta) | |
| end | |
| end | |
| function animate(o) | |
| o.anim:update() | |
| o.sprite.i=o.anim.sprite.i | |
| o.sprite.flip_x=o.anim.sprite.flip_x | |
| o.sprite.flip_y=o.anim.sprite.flip_y | |
| end | |
| function render(o) | |
| local sprite=o.sprite | |
| local position=o.position | |
| spr(sprite.i, position.x, | |
| position.y, 1, 1, sprite.flip_x) | |
| end | |
| animation={} | |
| function animation:new(id, meta) | |
| self.__index=self | |
| return setmetatable({ | |
| id=id, | |
| meta=meta, | |
| i=0, | |
| offset=0, | |
| sprite={}, | |
| }, self) | |
| end | |
| function animation:update() | |
| self.i+=1 | |
| local spd=0 | |
| if self.meta.jitter then | |
| spd=flr(rnd(self.meta.jitter)+1) | |
| else | |
| spd=self.meta.spd | |
| end | |
| if(self.i%(30/spd)==0) then | |
| self.offset+=1 | |
| self.i=0 | |
| end | |
| if(self.offset>=self.meta.len) self.offset=0 | |
| self.sprite.i=self.meta.i+self.offset | |
| self.sprite.flip_x=self.meta.flip_x | |
| self.sprite.flip_y=self.meta.flip_y | |
| end | |
| -->8 | |
| -- init | |
| function _init() | |
| for i=1,5 do | |
| local c=chicken:new() | |
| c.position=rnd_position(119, 119) | |
| world:create(c) | |
| end | |
| end | |
| -->8 | |
| -- update | |
| function _update() | |
| local chikn={} | |
| for id, o in pairs(world.objects) do | |
| if(o.lifecycle) add(chikn, o) | |
| end | |
| foreach(chikn, age) | |
| foreach(chikn, meander) | |
| end | |
| -->8 | |
| -- draw | |
| function _draw() | |
| cls() | |
| cursor(0, 0) | |
| color(7) | |
| map(0,0, 0,0) | |
| local animated={} | |
| local renderable={} | |
| local chikn={} | |
| for id, o in pairs(world.objects) do | |
| if(o.lifecycle) add(chikn, o) | |
| if(o.anim) add(animated, o) | |
| if(o.sprite) add(renderable, o) | |
| end | |
| debug:report("draw.chikn", #chikn) | |
| debug:report("draw.animated", #animated) | |
| debug:report("draw.renderable", #renderable) | |
| foreach(animated, animate) | |
| foreach(renderable, render) | |
| if(debug.enabled) foreach(chikn, print_timer) | |
| if(debug.enabled) foreach(chikn, print_lifecycle) | |
| if(debug.enabled) foreach(chick, print_anim) | |
| debug:draw_data() | |
| end | |
| function print_timer(o) | |
| local t=o.lifecycle.timer | |
| if(not t) return | |
| print(t.seconds, o.position.x-2, o.position.y-2, 3) | |
| reset_cursor() | |
| end | |
| function print_lifecycle(o) | |
| print(o.lifecycle.name, o.position.x+5, o.position.y-2, 3) | |
| reset_cursor() | |
| end | |
| function print_anim(o) | |
| print(o.anim.id, o.position.x-2, o.position.y-2, 7) | |
| reset_cursor() | |
| end | |
| function reset_cursor() | |
| cursor(0, 0) | |
| color(7) | |
| end | |
| -->8 | |
| -- utils | |
| compass={ | |
| e="e",ne="ne",n="n",nw="nw", | |
| w="w",sw="sw",s="s",se="se", | |
| } | |
| vector={} | |
| function vector:new(x, y) | |
| self.__index=self | |
| return setmetatable({ | |
| x=x, | |
| y=y, | |
| }, self) | |
| end | |
| function vector:string() | |
| return "x="..self.x..",y="..self.y | |
| end | |
| function vector:heading() | |
| local v=self | |
| if(v.x==1 and v.y==0) return compass.e | |
| if(v.x==1 and v.y==-1) return compass.ne | |
| if(v.x==0 and v.y==-1) return compass.n | |
| if(v.x==-1 and v.y==-1) return compass.nw | |
| if(v.x==-1 and v.y==0) return compass.w | |
| if(v.x==-1 and v.y==1) return compass.sw | |
| if(v.x==0 and v.y==1) return compass.s | |
| if(v.x==1 and v.y==1) return compass.se | |
| end | |
| function rnd_position(max_x, max_y) | |
| return { | |
| x=flr(rnd(max_x)), | |
| y=flr(rnd(max_y)), | |
| } | |
| end | |
| timer={} | |
| function timer:new(seconds) | |
| self.__index = self | |
| return setmetatable({ | |
| seconds=seconds, | |
| done=false, | |
| }, self) | |
| end | |
| function timer:update() | |
| if(self.done) return | |
| if(not self.i) self.i=0 | |
| self.i+=1 | |
| if self.i % 30 == 0 then | |
| self.seconds -= 1 | |
| if self.seconds <= 0 then | |
| self.seconds=0 | |
| self.done=true | |
| end | |
| end | |
| end | |
| __gfx__ | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3bbbbbbbbbbbbbb | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0000a00000000a000000a0000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 00aac9000000aa0000aac90000aac90000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbb3bbb | |
| 000aa0000006aca0000aa000000aa00000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0006d0000006d9000006d000000d600000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0000088000000000000008800000000000000880000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0000870000700000000087000000088000008700000008800000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 07007c900070000007007c900700870007007c90070087000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 07777800007700000777780007777c900777780007777c900000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0077700000777780007770000077780000777000007778000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbb3bbbb | |
| 006d0000006d8c78006d0000006d000000d60000006d00000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 0006d0000006d9080600d000000600000d00600000d600000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbb | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00088800000000000008880000000000000888000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 70007c800007000070007c807008880070007c807008880000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 77777799007600087777779977777c807777779977777c8000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 07776780077677780777678007777799077767800777779900000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00667700007777c80066770000666780006677000066678000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00940000009489800094000000940000004900000094000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00094000000949000900400000090000040090000049000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00067000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00677700006777000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 06777770067777700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 06777770677777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 06777770677777770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 00d77d000dd777d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| 000dd000000ddd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | |
| __map__ | |
| 1e1e1e1e0e1e1e1e1f1e1e1e1e1e1e1e0f1e1e1e0e1e1e1e1f1e1e1e1e1e1e0f1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e | |
| 1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e0e1e1e0f1e1e1e1e1e1e0f1e1e1e1e1e1e0f0f1e1e1e0f1e1e1e1e1e1e1e1e1e0e0f1e1e1e0f | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e0e1e1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e0f1e1e1e | |
| 1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e | |
| 1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e | |
| 0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e | |
| 1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e0f1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1f1e1e1e1e0f1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e0f1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e | |
| 0e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e | |
| 1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e | |
| 0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e | |
| 1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e0f1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e | |
| 1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e0e0f | |
| 1f1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1f1e1e1e0f1e1e1e1e1e1e1e1f1e1e1e1e1f1e1e0f1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e0e1e1e1e1f1e1e1e1e1f1e1e | |
| 1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f | |
| 1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e0e1e1e1e1e1e | |
| 1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e | |
| 0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e1e1e0e1e0e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e1e1e1e0e1e1e1e1f1e1e1e1e1e0e1e1e | |
| 1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e | |
| 1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1f0f1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e0e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e1e1e1e1e1e | |
| 1e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e1e1e1e0e1e1e0e1e1e1e1e1e1e1e1e0e1e1e0e1e1e1e1e1e0e1e1e1e1e1e0e1e1e0e1e1e1e1e1e0e1e1e0e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e1e1e1e1e1e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e0e1e1e1e1e1e0e1e0e1e1e0e1e1e0e1e1e1e1e | |
| 1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1e1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1e1e1e1f1e1e1f1e1e1f1e1e1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1e1e1e1f1e1e1f1e1e1f1e1e1f1e1e1f1e1e1e1e1e1f1e1e1e1e1f1e1e1f1e1e1f1e1e | |
| 0f1e1e1e1e1e1e1f1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1f1f1e1e1e1e1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e0f1e1e1e1e0f1e1e1e1e1e0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment