pico-8 cartridge // http://www.pico-8.com version 15 __lua__ --yule log (happy holidays!) --by trasevol_dog plt={ 0, --0 1, 11, 9, 4, --4 2, 1, 0, 0, --8 0, 8, 9, 10,--12 10, 7, 7, 7, 7 } ptrns={ 0, 0b1000100010001000, 0b1010100010101000, 0b1111000011110000, 0b1010101010101010, 0b1000101000101010, 0b1100110000110011, 0b1010010110100101, 0b1010000010100000, 0b1010101001010101 } ptrn=8 function _init() cls() str="l o a d i n g . . ." print(str,64-#str*2-2,61,7) flip() init_log() init_circle_draw() cls() flip() for c=0,15 do --pal(c,plt[flr(c*#plt/16)+1],1) pal(c,plt[c+1],1) end t=0 balls={} sparks={} for i=0,31 do create_ball(56+rnd(16),108) foreach(balls,update_ball) end for i=0,7 do create_spark(56+rnd(16),100) -- foreach(sparks,update_spark) end slog=0 message=true palt(15,true) palt(0,false) _draw() flip() extcmd("rec") end function _update() t+=0.01 if t>=2 and t<2.01 then extcmd("rec") end if t>=20 and t<20.01 then extcmd("video") end if stat(1)>=1 then cls(2) while true do flip() end end if t%0.03<0.01 then slog+=sgn(flr(rnd(2))-0.5) slog=mid(slog,0,2) end --for i=0,1 do local y=108 if rnd(1.3)>1 then create_ball(40+rnd(48),y-8) end create_ball(40+rnd(48),y-8) create_ball(48+rnd(32),y) --end if rnd(24)<1 then create_spark(48+rnd(32),y-8) end foreach(balls,update_ball) foreach(sparks,update_spark) if btnp(2) then ptrn=(ptrn-2)%#ptrns+1 end if btnp(3) then ptrn=ptrn%#ptrns+1 end if btnp(4) then message=not message end end function _draw() -- cls() fillp(ptrns[ptrn]) local c=8*16+7 rectfill(0,0,127,127,c) fillp() local si=flr(1.5+0.7*cos(t*8)+0.7*sin(t*11)) spr(si*5*16+1,8,90,14,5) -- spr(slog*5*16+1,8,90,14,5) if message then local x=64+8*cos(t*2) str="!! ★ happy ★ !!" print(str,x-#str*2-2,13,0) print(str,x-#str*2-2,12,1) local x=64+8*cos(t*2+0.1) str="!!! ♥ holidays ♥ !!!" print(str,x-#str*2-2,21,0) print(str,x-#str*2-2,20,1) end foreach(sparks,draw_spark) foreach(balls,draw_ball) -- circle(63,110,3.2) if btn(4,1) then print(stat(1),0,0,15) end end function update_ball(s) s.r=lerp(s.r,s.mr,0.1) s.y-=1 s.mr-=0.09 s.t-=0.01 if s.mr<=1 or s.y<=s.r then del(balls,s) end end function update_spark(s) s.t+=0.01 local n=#s.tail if n>3 then del(s.tail,s.tail[1]) end s.y-=s.vy s.x=s.ox+s.mc*cos(s.ma*s.t+s.ka) add(s.tail,{x=s.x,y=s.y}) if n>0 and s.tail[1].y<0 then del(sparks,s) end end function draw_ball(s) local x=s.x+s.mc*cos(s.t*s.ma+s.ka) circle(x,s.y,s.r) end function draw_spark(s) local n=#s.tail if n==0 then return end local lx,ly=s.x,s.y for i=n,1,-1 do local p=s.tail[i] line(lx,ly,p.x,p.y,min(10+i,15)) lx,ly=p.x,p.y end end function create_ball(x,y) local s={ x=x, y=y, r=0, mr=5+rnd(5), t=1+rnd(1), ka=rnd(1), ma=2+rnd(4), mc=2+rnd(6) } add(balls,s) end function create_spark(x,y) local s={ x=x, y=y, ox=x, vy=2+rnd(3), tail={}, t=0, ka=rnd(1), ma=2+rnd(2), mc=4+rnd(8) } add(sparks,s) end function circle(x,y,r) x,y,r=flr(x),flr(y),flr(r+.5) local y1,y2=y-r,y+r local dr=127/r for i=-r,r do local rx=max(flr(circle_data[flr(i*dr)]/dr+0.5),1) hline(x-rx,x+rx,y+i) end end function init_circle_draw() cls() circfill(127,127,127,1) circle_data={} for y=-128,-1 do for x=0,127 do if pget(128+y,x)==1 then circle_data[y]=127-x break end end end for y=0,127 do circle_data[y]=circle_data[-y-1] end end function init_log() local str="trasevol_dog" print(str,64-#str*2,112,1) for y=88,127 do for x=0,127 do local c=sget(x,y) if pget(x,y)==1 then if c==2 then sset(x,y,1) sset(x,y+1,4) c=1 elseif c==4 then sset(x,y,1) sset(x,y+1,4) c=2 end end if c>0 and rnd(16)<1 then if c==2 then sset(x,y,1) elseif c==4 then sset(x,y,2) end end end end for i=0,2 do for y=88,127 do for x=0,127 do local c=sget(x,y) local nc if c>0 then if c==1 then nc=2 elseif c==2 then nc=1 elseif c==4 then nc=0 end local d=dist((x-64)/2,(y-96)*1.5)-2+i*0.5+rnd(2) local k=flr(8.5-d/4+1) if k==2 then k=3 elseif k<2 then k=min(2-(k-3),7) end nc=mid(nc+k,0,8) else nc=15 end sset(x,(y-88)+i*40,nc) end end end end function lerp(a,b,i) return (1-i)*a+i*b end function sqr(a) return a*a end function sqrdist(xa,ya,xb,yb) if xb then xa=xb-xa ya=yb-ya end return sqr(xa)+sqr(ya) end function dist(xa,ya,xb,yb) return sqrt(sqrdist(xa,ya,xb,yb)) end -->8 -- drawing basics function hline(x1,x2,y) -- local a1=bor(0x6000,y*64+flr(x1/8)*4) -- local a2=bor(0x6000,y*64+flr(x2/8)*4) -- -- local dx1=x1%8 -- local dx2=x2%8 -- -- if x2-x1<=8 then -- return -- end -- -- if dx1>0 then -- hlineleft(a1,dx1) -- a1+=4 -- end -- -- if dx2>0 then ---- hlineright(a2,8-dx2) -- end local a1=bor(0x6000,y*64+flr(x1/2)) -- local a2=bor(0x6000,y*64+flr(x2/2)) if x1%2==1 then hlineodd(a1) a1+=1 x1+=1 end local dx=x2-x1 local rem=dx%8 local i=(dx-rem)/2 local a2=a1+i if rem>0 then hlineright[rem](a2) --ohlineright(a2,rem) end -- print(a2) --hlineright(a2,rem) for a=a1,a2-1,4 do hlinemain(a) end end function hlineodd(a) local v=peek(a) if v<0xf0 then v+=0x10 end poke(a,v) end function hlineleft(a,ofs) ofs=7 local v=peek4(a) v=rotr(v,(7)*4) for i=ofs,7 do if band(v,0x.000f)<0x.000f then v+=0x.0001 end v=rotl(v,4) end v=rotl(v,(9-ofs)*4) poke4(a,v) end function hlinemain(a) local v=peek4(a) --[[ for i=0,7 do if band(v,0xf)<0xf then v+=1 end v=rotl(v,4) --v=shl(v,4) end --]] if band(v,0xf)<0xf then v+=0x1 end if band(v,0xf0)<0xf0 then v+=0x10 end if band(v,0xf00)<0xf00 then v+=0x100 end if band(v,0xf000)~=0xf000 then v+=0x1000 end if band(v,0x.f)<0x.f then v+=0x.1 end if band(v,0x.0f)<0x.0f then v+=0x.01 end if band(v,0x.00f)<0x.00f then v+=0x.001 end if band(v,0x.000f)<0x.000f then v+=0x.0001 end poke4(a,v) end function ohlineright(a,ofs) local v=peek4(a) v=rotr(v,(ofs-1)*4) for i=1,ofs do if band(v,0x.000f)<0x.000f then v+=0x.0001 end v=rotl(v,4) end v=rotr(v,4) poke4(a,v) end hlineright={} hlineright[1]=function(a) local v=peek4(a) -- v=rotr(v,(ofs-1)*4) if band(v,0x.000f)<0x.000f then v+=0x.0001 end -- v=rotr(v,4) poke4(a,v) end hlineright[2]=function(a) local v=peek4(a) -- v=rotr(v,4) if band(v,0x.00f)<0x.00f then v+=0x.001 end if band(v,0x.000f)<0x.000f then v+=0x.0001 end -- v=rotr(v,4) poke4(a,v) end hlineright[3]=function(a) local v=peek4(a) -- v=rotr(v,8) if band(v,0x.0f)<0x.0f then v+=0x.01 end if band(v,0x.00f)<0x.00f then v+=0x.001 end if band(v,0x.000f)<0x.000f then v+=0x.0001 end -- v=rotr(v,4) poke4(a,v) end hlineright[4]=function(a) local v=peek4(a) -- v=rotr(v,12) if band(v,0x.f)<0x.f then v+=0x.1 end if band(v,0x.0f)<0x.0f then v+=0x.01 end if band(v,0x.00f)<0x.00f then v+=0x.001 end if band(v,0x.000f)<0x.000f then v+=0x.0001 end -- v=rotr(v,4) poke4(a,v) end hlineright[5]=function(a) local v=peek4(a) -- v=rotr(v,16) if band(v,0xf)<0xf then v+=0x1 end if band(v,0x.f)<0x.f then v+=0x.1 end if band(v,0x.0f)<0x.0f then v+=0x.01 end if band(v,0x.00f)<0x.00f then v+=0x.001 end if band(v,0x.000f)<0x.000f then v+=0x.0001 end -- v=rotr(v,4) poke4(a,v) end hlineright[6]=function(a) local v=peek4(a) -- v=rotr(v,20) if band(v,0xf0)<0xf0 then v+=0x10 end if band(v,0xf)<0xf then v+=0x1 end if band(v,0x.f)<0x.f then v+=0x.1 end if band(v,0x.0f)<0x.0f then v+=0x.01 end if band(v,0x.00f)<0x.00f then v+=0x.001 end if band(v,0x.000f)<0x.000f then v+=0x.0001 end -- v=rotr(v,4) poke4(a,v) end hlineright[7]=function(a) local v=peek4(a) -- v=rotr(v,24) if band(v,0xf00)<0xf00 then v+=0x100 end if band(v,0xf0)<0xf0 then v+=0x10 end if band(v,0xf)<0xf then v+=0x1 end if band(v,0x.f)<0x.f then v+=0x.1 end if band(v,0x.0f)<0x.0f then v+=0x.01 end if band(v,0x.00f)<0x.00f then v+=0x.001 end if band(v,0x.000f)<0x.000f then v+=0x.0001 end -- v=rotr(v,4) poke4(a,v) end __gfx__ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000002222222222222444444444442222244444440000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000244444444422444222222444444444422222444444444444444444444444444444000000000000000000000000000000000000000000000 00000000000000002422442444444224444444444444444444444224442222222222222222444444444444444442222222222222222222200000000000000000 00000000000000024444444222244444222222222244444444444444444444444444444444222244222222222224444444444444444444444400000000000000 00000000000000244222224444422244444444444422222222222222222222222222244444444444444444444444222444444444444444444420000000000000 00000000000000244444442224444444444444444444444444444444444444444444422222222222222242244444444422222222222222222442000000000000 00000000000000242224444442222222222222222222222222222222222222222444444444444444444444442222222244444444444444444442000000000000 00000000000002444442244444444444444444444444444444444444444444444442222222222222222222444444444444444444444444444444200000000000 00000000000002444444442222244444444444444442222222444444444444444444444444444444444444442222222222222222222222222244200000000000 00000000000024422222224444444422222222222444444444444444444444222222222222222222222222224444444444444444444444444424200000000000 00000000000024444444444444444444444444444222222222222222222244444444444444444444444444444224442222224444444444444444200000000000 00000000000024422222222222222222244444444444444444444444444444222222224444444444444444444442244444442222222222222244200000000000 00000000000024444444444444444444422222222222222222244444444444444444444222222222222222222444444444444444444444444444420000000000 00000000000024222244444444444444444444444444444444422222222222222222244444444444444444444222222222222222222222222222420000000000 00000000000024444444444442222222222222222222224444444444444444444444442222222222222222444444444444444444444444444444420000000000 00000000000244222222222224444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444420000000000 00000000000244444444444444444422222222224444444222222222222222222222222222222222222222222222222222222222222222222224420000000000 00000000000242222222222222222244444444444222222444444444444444444444444444444444444444444444444444444444444444444444420000000000 00000000000244444444444444444442222222224444444444444444444422222222222222222222222222444444444444444444444444444442420000000000 00000000000244444444444422222244444444442222244222222244444444444444444444444444444444222222222222222222222222222224442000000000 00000000000244222222222444444444444444444444444444444422222222224444444444442222222244444444444444444444444444444444442000000000 00000000000244444444444222222222222222222222222244444444444444442222222222444444444422222222222244444444444444422444242000000000 00000000002442222222244444444444444444444444444422222222222244444444444444444444444444444444444422222222222422244222442000000000 00000000002444444444422222222224444444422222244444444444444444444444444444222222222222222222244444444444444444444444442000000000 00000000002444444444444444444442222222444444422222222222222444422222222222444444444444444444444444444444442222222244442000000000 00000000002442222222444444444444444444444444444444444444444444444444444444444444444442222222222222222222224444444442242000000000 00000000002444444444222222222222222444444444444444444444422222222222222224442222222224444444444444444444444444444424442000000000 00000000002444222244444444444444444422222222222222222222244444444444444444444444444444444444444444444222222222222444442000000000 00000000002444444422222224444444444444444444444444444444444442222222222222222244422222222222222222222444444444444444242000000000 00000000000244444444444442222222222224444444444444444222222224444444444444444444444444444444444444444444442222222222442000000000 00000000000242222222222444444444444442222222244444444444444444444444444444444222222222222222222222444422244444444444442000000000 00000000000244444444444444442222224444444444444222222222222222222222222222222444444444444444444444442244444444422222442000000000 00000000000244222222222222224444444422222222222444444444444444444444444444444442222222222222444444444442222222244444442000000000 00000000000244444444444444444444444444444444444422444444222222222222222222222224444444444444444442222224444444444444420000000000 00000000000024444444222222222244222222222222222244444444444444444444444444444444222222222222222444444444444444444444420000000000 00000000000024442222444444444444444444444444444444422222222224444444444444444444444444444444444222222222222222222222420000000000 00000000000024244444422222222222444444444442222222444444444442222222222222222224444444444444444444444444444444444444420000000000 __label__ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000001000100000000010000000010101bb0b1101110101000000001000000000100010000000000000000000000000000000000 0000000000000000000000000000010001000000001110000000101011b0b0101010101000000011100000000100010000000000000000000000000000000000 000000000000000000000000000001000100000011111110000011101bb0b1101110111000001111111000000100010000000000000000000000000000000000 0000000000000000000000000000000000000000011111000000101010b01000100000b000000111110000000000000000000000000000000000000000000000 0000000000000000000000000000010001000000010001000000101010101000100011b000000100010000000100010000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000a000800000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000a008000000000000000000000000000000000000000000000000000000 0000000000000000000000001000100010000000110110000001010011010001110110a1bb0b0100110000001101100000001000100010000000000000000000 0000000000000000000000001000100010000000111110000001010101010000100101a1b90b0b0b1b0000001111100000001000100010000000000000000000 0000000000000000000000001000100010000000111110000001110101010000b001010ab981bb09990000001111100000001000100010000000000000000000 0000000000000000000000000000000000000000011100000001010101010000b001010a1b011b0bb98800000bb1000000000000000000000000000000000000 0000000000000000000000001000100010000000001000000001010110011b0bbb01110ba90bbb899990800001b1000000001000100010000000000000000000 000000000000000000000000000000000000000000000000000100000000010111000001ab0b110b998808000010000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000080a98080000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000099a8800000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000088889880000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000008000000000000000000000000080000088800000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000800890000000000000000000000000800080000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000090989000000000000000000000008080008000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000899a0800000000000000000000080000000800000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000099a89880000000000000800000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000909898980000000000808080000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000008880989890000000000000800000800000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008898908000000000808080000080000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000080809800000000000080800000008000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000800080988080000080008000000000800000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000008000008898908000008000000000008000000080800080000000000000000000000000000000000000000 00000000000000000000000000000000000000000000800088989880800080800000008080000000008090808000000000000000000000000000000000000000 00000000000000000000000000000000000000000000080809888a9800000808000000080000000008098a880800000000000000000000000000000000000000 0000000000000000000000000000000000000000000000009880a9a88000008000000000008080000099a9999080000000000000000000000000000000000000 00000000000000000000000000000000000000000000000808899a99000000000000000808088800089a9a9a8908000000000000000000000000000000000000 0000000000000000000000000000000000000000000000008099aa988080000000000000808090000898aa989890800000000000000000000000000000000000 000000000000000000000000000000000000000000000000080aa78888890800000000080808890009898a898988000000000000000000000000000000000000 000000000000000000000000000000000000000000000000009998a9989898000080009080808800089898989890800000000000000000000000000000000000 0000000000000000000000000000000000000000000000000088098a8989980008090889880888000a9909898988000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000080809999909080809880889888800088989899a890000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000809898988080889890809990800000009899a9a80000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000888898908080a89088808890008000009999a880000000000000000000000000000000000000 000000000000000000000000000000000000000000000008000009099a9809898988880808080000000009880800000000000000000000000000000000000000 00000000000000000000000000000000000000000000800080000098aaa99898a088808080800080000080008000000000000000000000000000000000000000 000000000000000000000000000000000000000000080008000808aa9aa7aa888808098808080008000008080800000000000000000000000000000000000000 00000000000000000000000000000000000000000000800080008a7a77777aa88088989898908000000080808080000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000089aa7777777980889898a9a888000000008080800000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000080aa7777777a9088989899a9908000000000008000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000989a777777777988908899a99890000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000098aa777777777aa8988008a898900000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000088a9a77777777aa990800008a88080800000800000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008899aa7777777779908080808890808000008080000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000008898a9777777777aa8809899989898a8000000808000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000009899aa7777777a7aa09998a9a999a89800000080800000000000000000000000000000000000000000 0000000000000000000000000000000000000000000008899aaa777797a77a9a98899a9aaa898980000808080000000000000000000000000000000000000000 000000000000000000000000000000000000000080808098aaaa7777a977a9aa98889a7aa99899a0808080000000000000000000000000000000000000000000 00000000000000000000000000000000000000080808000aaaaaaaa79aaa799a89899aaa9a999a9a080808000000000000000000000000000000000000000000 0000000000000000000000000000000000000080808080889aa9aaa09a9087a998a9a9aa7aaaa9aa989080800000000000000000000000000000000000000000 0000000000000000000000000000000000000008080809888a9aaa880908079a8aaaaa77a7a7a7a7aa898a880000000000000000000000000000000000000000 000000000000000000000000000000000000008080809888809990988880887899aaaa777aaa77777aa9a9a08000000000000000000000000000000000000000 000000000000000000000000000000000000000808098808080008898a0809079aaaa7a7aaa77777a7aa9a990000000000000000000000000000000000000000 0000000000000000000000000000000000000000808890808080808898a88087aaaa777aaa777777777aa9988000000000000000000000000000000000000000 000000000000000000000000000000000000000008080809888988898989088977a777aaaaa777777777a9898000000000000000000000000000000000000000 0000000000000000000000000000000000000000000080008898a8989880809097aa7aaa7aaa7777777aa9988000000000000000000000000000000000000000 0000000000000000000000000000000000000000000800000a899a89890980098797a7aaaaa7777777a7aa980000000000000000000000000000000000000000 000000000000000000000000000000000000000080800090889aa888aaa89090997aa77a7a777777777a79908000000000000000000000000000000000000000 000000000000000000000000000000000000000800000889098a9a8aaaaa98880a8aaaa7a7a77777777789800000000000000000000000000000000000000000 0000000000000000000000000000000000000000008080889899a999aaaaa98098a9a9aa77777777777aa0800000000000000000000000000000000000000000 000000000000000000000000000000000000000808088809888aaa9aa7aaa7a98aaa9aaaa7a777a7777799800000000000000000000000000000000000000000 0000000000000000000000000000000000000080808098808888a9a9aa7aaa7a98aaa9aaaaaa7a7a777aa8800000000000000000000000000000000000000000 00000000000000000000000000000000000008080808898808088aaa9a9a97a7a90aaaaaaaaa9aa7777a88000000000000000000000000000000000000000000 0000000000000000000000000000000000008080808098988088997aa97aaa7aaa88a8aa79a9a977777900000000000000000000000000000000000000000000 000000000000000000000000000000000000080889080989898a99a777a7a7a7aa8889999a8a9aaa779800000000000000000000000000000000000000000000 0000000000000000000000000000000000008098989880a999aaa9a7777a7a7aa9908099a9a9aaaaaa9000000000000000000000000000000000000000000000 0000000000000000000000000000000000000889898909899aaaaaa77777a7779a88098a99899aaa9aa800000000000000000000000000000000000000000000 00000000000000000000000000000000000008989898a9a9a9aaaa7777777a78a980809898897aa9a99800000000000000000000000000000000000000000000 0000000000000000000000000000000000000889899aaaaaaa9aa7a77777aaa999080808088aa7aa998000000000000000000000000000000000000000000000 000000000000000000000000000000000000009999a97aa97aa9aa7a7777aaa99000800000987779988000000000000000000000000000000000000000000000 00000000000000000000000000000000000000099a9a999aa7aaa7a77777aa9980080800089a77aa990000000000000000000000000000000000000000000000 000000000000000000000000000000000000008099a898a9aaaa77aa7a77a8988008988088aa7a79800000000000000000000000000000000000000000000000 00000000000000000000000000000000000000008909099a9777aaa7aaaa9a08000989888aa7a7aa880000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000808080aaa7777aaa7aaaa89000809898aaaa7aa9a08000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000808089aa79aa7aaaa9a9900098809aaa7a7aa9aa90000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000080009aa9a9aaa899a998908898907aaa7aaaaaa98000000000000000000000000000000000000000000000 000000000000000000044222222220104211100000000009099999aa8999998909898aaaa7aaa7aa9a0000000000000000000000000000000000000000000000 0000000000000000049944244442142211100010000100009aaaaa998888999998898aaa9aa7a99a900000000000000000000000000000000000000000000000 00000000000000004944442444442112222211000011000008aaaaaa98880999989999aaa7aaaa98899000111111011111111222222222400000000000000000 000000000000000499994442222222221111000000100008088aaaaa9888889998898899aa77aa88999880000001222222242442444444999900000000000000 0000000000000049944442444442112222220000110000009999aaaa9a8889988800089089a77988088800111111010221222442444442999940000000000000 000000000000004999499222244222222221000011100000088999a999888aa88800000008aaaa98889900011111111211111212222222244994000000000000 00000000000000244449444442212111111000000000000088999988998899999900000000099800000000110000011122222244442449999994000000000000 00000000000004949994424444444222222220001110100000008808998899999900000000000888888000111112222222222424444444499999400000000000 00000000000004999999942222242222222211101010000008000008998999980880000000000000000011110001111111112222212424444449400000000000 00000000000049944442244444442411111110000111110100000000000989900000000000000008080000001111222222224444449449949949400000000000 00000000000049999999944444444222122222211000000000000000088988000000000000000000000000110002220111124444244949999999400000000000 00000000000049944444444242222222242222222111001011110000000080000000000000000000000000012221122224442212242444444449400000000000 00000000000049949999999494444444421111111110100000011111110000000000101000000000000000111222222224444444999999999999920000000000 00000000000049424499999992494244444442222222221101100000000000000000010000111210201112222112221222224442444424444444940000000000 00000000000049999999499492444242222221211111112112222212101121111112110010000111110011222244444444442499999999999494940000000000 00000000000499444444444449999494444444444424422122222222222222221221121122221222211224224444444444949999999994999994920000000000 00000000000249999449999949999944441422224444442122111111111111101111111111111121221122222212222124444444444442444429420000000000 00000000000241242244444444444499999994949222212244222222444142222242442244424444444442449444999994999999999999999494420000000000 00000000000244444999999999949994444244424944444444444424444422222222222222222222222224494999999999999994999994994242420000000000 00000000000244444444999944242499999999994444499442222244224444444444444444444294444999444442444444444244444222122224422000000000 00000000000024222221214499999949949999994999999994999444244424449494444449994444444499994999999999999999999444444444441000000000 00000000000122224444444214224244244444442224222422299229222429294224244444942299922442244444444499999942244442422222120000000000 00000000001221111212242444444449949999994299292929242992299429292929299999992929292929999949999941222222222412122211221000000000 00000000001222222122222222222224449944944244229922292229229429292924299999442424242424444422449442444444442222222122221000000000 00000000001122222222222242244442222222444144292429249924294922242424244244492929242929299444444444444222221111111110220000000000 00000000000010110101222222222224224444444144141414141249212992992249222922142114114911122221122111210111112222210010010000000000 00000000000111111121111111111111112244442444444244422444444224122422444244424442442244444244424222222222221212111101110000000000 00000000000010000011111212222222222211112110110212222212242444444444444444444424441424222222222222222101000000000111100000000000 00000000000001011000000001111221222222222222222222412242222121121111212211112222211111111111111111010011111111110000000000000000 00000000000000000100011110000000000011112222222222222111111112222212212222222222212222112201111111010111110000000000000000000000 00000000000000000000000000111011111110000100112121222212022222212222222221112101010100000000000000111100000000000000000000000000 00000000000000000000000000000000001111111111111000000000000001000110000000001111111111111111110001010000000000000000000000000000 00000000000000000000000000000000010100000000000110111111011111011111111111111110000000000000011000000000000000000000000000000000 00000000000000000000000000000000000000000000000000100101000000000000000000000001000100000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000