-- title: Definitely not an Impostor -- name: impostor -- author: Teletype Games -- desc: Life of a programmer in the Vector -- site: https://git.teletype.hu/games/impostor -- license: MIT License -- version: 0.1 -- script: lua a={}b={}c={}d={}e={}f={}g={}h={}i={}j={}k={}l={}m={}n={}o={}function o.initial_data()return{screen={width=240,height=136},colors={black=2,light_grey=13,dark_grey=14,red=0,light_blue=7,blue=9,white=12,item=12,meter_bg=12},timing={splash_duration=120}}end function o.reset()local Nb=o.initial_data()o.screen=Nb.screen o.colors=Nb.colors o.timing=Nb.timing end local D=7 local E=2 local F=3 local G=0xDE function o.save()mset(G,E,D)mset(o.timing.splash_duration,F,D)end function o.load()if mget(E,D)==G then o.timing.splash_duration=mget(F,D)else o.reset()end end o.load()local function H(Nb,Ob)if not Ob then return Nb end for Pb,Qb in pairs(Ob)do Nb[Pb]=Qb end return Nb end function d.get_default_ddr()local Nb=12 local Ob=30 local Pb=(4*Nb)+(3*Ob)local Qb=(o.screen.width-Pb)/2 return{bar_fill=0,max_fill=100,fill_per_hit=10,miss_penalty=5,bar_x=20,bar_y=10,bar_width=200,bar_height=12,arrow_size=Nb,arrow_spawn_timer=0,arrow_spawn_interval=45,arrow_fall_speed=1.5,arrows={},target_y=115,target_arrows={{dir="left",x=Qb},{dir="down",x=Qb+Nb+Ob},{dir="up",x=Qb+(Nb+Ob)*2},{dir="right",x=Qb+(Nb+Ob)*3}},hit_threshold=8,button_pressed_timers={},button_press_duration=8,input_cooldowns={left=0,down=0,up=0,right=0},input_cooldown_duration=10,frame_counter=0,current_song=nil,pattern_index=1,use_pattern=false,return_window=nil}end function d.get_default_button_mash()return{bar_fill=0,max_fill=100,fill_per_press=8,base_degradation=0.15,degradation_multiplier=0.006,button_pressed_timer=0,button_press_duration=8,return_window=nil,bar_x=20,bar_y=10,bar_width=200,bar_height=12,button_x=20,button_y=110,button_size=12,focus_center_x=nil,focus_center_y=nil,focus_initial_radius=0}end function d.get_default_rhythm()return{line_position=0,line_speed=0.015,line_direction=1,target_center=0.5,target_width=0.3,initial_target_width=0.3,min_target_width=0.08,target_shrink_rate=0.9,score=0,max_score=10,button_pressed_timer=0,button_press_duration=10,return_window=nil,bar_x=20,bar_y=10,bar_width=200,bar_height=12,button_x=210,button_y=110,button_size=10,press_cooldown=0,press_cooldown_duration=15,focus_center_x=nil,focus_center_y=nil,focus_initial_radius=0}end function d.configure_ddr(Nb)return H(d.get_default_ddr(),Nb)end function d.configure_button_mash(Nb)return H(d.get_default_button_mash(),Nb)end function d.configure_rhythm(Nb)return H(d.get_default_rhythm(),Nb)end local I=1000 local J=500 local K=100 local L=0.02 local M=0.16 local N=600 local O=1800 local P=20 c.COLOR_ISM=o.colors.red c.COLOR_WPM=o.colors.blue c.COLOR_BM=o.colors.black c.COLOR_BG=o.colors.meter_bg function c.set_timer_duration(Nb)O=Nb end function c.set_timer_decay(Nb)P=Nb end function c.get_initial()return{ism=J,wpm=J,bm=J,combo=0,combo_timer=0,hidden=false,timer_progress=0,}end function c.hide()if p and p.meters then p.meters.hidden=true end end function c.show()if p and p.meters then p.meters.hidden=false end end function c.get_max()return I end function c.get_combo_multiplier()if not p or not p.meters then return 1 end local Nb=p.meters.combo if Nb==0 then return 1 end return 1+math.min(M,L*(2^(Nb-1)))end function c.update()if not p or not p.game_in_progress or not p.meters then return end local Nb=p.meters local Ob=string.find(a.get_current_id(),"^minigame_")~=nil if not Ob then if Nb.combo>0 then Nb.combo_timer=Nb.combo_timer+1 if Nb.combo_timer>=N then Nb.combo=0 Nb.combo_timer=0 end end Nb.timer_progress=Nb.timer_progress+(1/O)if Nb.timer_progress>=1 then Nb.timer_progress=Nb.timer_progress-1 Nb.ism=math.max(0,Nb.ism-P)Nb.wpm=math.max(0,Nb.wpm-P)Nb.bm=math.max(0,Nb.bm-P)end end end function c.add(Nb,Ob)if not p or not p.meters then return end local Pb=p.meters if Pb[Nb]~=nil then Pb[Nb]=math.min(I,Pb[Nb]+Ob)end end function c.get_timer_decay_percentage()return math.floor(P/I*100)end function c.on_minigame_complete()local Nb=p.meters local Ob=math.floor(K*c.get_combo_multiplier())c.add("wpm",Ob)c.add("ism",Ob)c.add("bm",Ob)Nb.combo=Nb.combo+1 Nb.combo_timer=0 end local Q=6 local R=0 local S=0xCA p={}function p.initial_data()return{current_menu_item=1,splash_timer=o.timing.splash_duration,popup={show=false,content={}},game_in_progress=false,stat_screen_active=false,minigame_ddr=d.get_default_ddr(),minigame_button_mash=d.get_default_button_mash(),minigame_rhythm=d.get_default_rhythm(),meters=c.get_initial(),game={current_screen="home",current_situation=nil,}}end function p.reset()local Nb=p.initial_data()for Ob in pairs(p)do if type(p[Ob])~="function"then p[Ob]=nil end end for Ob,Pb in pairs(Nb)do p[Ob]=Pb end end function p.new_game()p.reset()p.game_in_progress=true q.refresh_menu_items()g.get_by_id(p.game.current_screen).init()end function p.save_game()if not p.game_in_progress then return end mset(S,R,Q)end function p.load_game()if mget(R,Q)~=S then p.new_game()return end p.reset()p.game_in_progress=true q.refresh_menu_items()g.get_by_id(p.game.current_screen).init()end function b.safeindex(Nb,Ob)return((Ob-1+#Nb)%#Nb)+1 end function b.go_to_screen_by_id(Nb)local Ob=g.get_by_id(Nb)if Ob then p.game.current_screen=Nb Ob.init()else r.show({"Error: Screen '"..Nb.."' not found!"})end end function b.contains(Nb,Ob)for Pb=1,#Nb do if Nb[Pb]==Ob then return true end end return false end function j.text(Nb,Ob,Pb,Qb,Rb,Sb)local Tb=o.colors.black if Qb==Tb then Tb=o.colors.light_grey end Sb=Sb or 1 print(Nb,Ob+1,Pb+1,Tb,Rb,Sb)print(Nb,Ob,Pb,Qb,Rb,Sb)end function j.text_center(Nb,Ob,Pb,Qb,Rb,Sb)Sb=Sb or 1 local Tb=print(Nb,0,-6,0,Rb,Sb)local Ub=Ob-(Tb/2)j.text(Nb,Ub,Pb,Qb,Rb,Sb)end local T=0 local U=1 local V=2 local W=3 local X=4 local Y=5 local Z=7 local ab=48 local bb=51 local cb=50 function k.up()return btnp(T)end function k.down()return btnp(U)end function k.left()return btnp(V)end function k.right()return btnp(W)end function k.select()return btnp(X)or keyp(ab)end function k.menu_confirm()return btnp(X)or keyp(cb)end function k.player_interact()return btnp(Y)or keyp(cb)end function k.menu_back()return btnp(Z)or keyp(bb)end function k.toggle_popup()return keyp(cb)end local db=5 local eb=false local fb=false local gb=false local hb=0 local ib=0 local jb=0 local kb=db local lb=nil local mb=0 local nb=0 local function ob(Nb,Ob)local Pb=math.max(Nb,o.screen.width-Nb)local Qb=math.max(Ob,o.screen.height-Ob)return math.sqrt(Pb*Pb+Qb*Qb)end function n.start(Nb,Ob,Pb)Pb=Pb or{}eb=true fb=false gb=false hb=Nb ib=Ob jb=Pb.initial_radius or 0 kb=Pb.speed or db lb=Pb.on_complete end function n.close(Nb,Ob,Pb)Pb=Pb or{}eb=true fb=true gb=false hb=Nb ib=Ob jb=ob(Nb,Ob)kb=Pb.speed or db lb=Pb.on_complete end function n.start_driven(Nb,Ob,Pb)Pb=Pb or{}eb=true fb=false gb=true hb=Nb ib=Ob mb=Pb.initial_radius or 0 nb=ob(Nb,Ob)jb=mb lb=nil end function n.set_percentage(Nb)if not gb then return end jb=mb+Nb*(nb-mb)end function n.is_active()return eb end function n.stop()eb=false fb=false gb=false jb=0 lb=nil end function n.update()if not eb then return end if gb then return end if fb then jb=jb-kb if jb<=0 then local Nb=lb n.stop()if Nb then Nb()end end else jb=jb+kb if jb>=ob(hb,ib)then local Nb=lb n.stop()if Nb then Nb()end end end end function n.draw()if not eb then return end local Nb=hb local Ob=ib local Pb=jb local Qb=o.screen.width local Rb=o.screen.height local Sb=o.colors.black if fb and Pb<=0 then rect(0,0,Qb,Rb,Sb)return end local Tb=math.max(0,math.floor(Ob-Pb))local Ub=math.min(Rb-1,math.ceil(Ob+Pb))if Tb>0 then rect(0,0,Qb,Tb,Sb)end if Ub0 then rect(0,Vb,Yb,1,Sb)end if Zb",Pb-8,Tb,o.colors.light_blue)end j.text(Sb.label,Pb,Tb,o.colors.light_blue)end end function i.update_menu(Nb,Ob)if k.up()then m.sfx_beep()Ob=Ob-1 if Ob<1 then Ob=#Nb end elseif k.down()then m.sfx_beep()Ob=Ob+1 if Ob>#Nb then Ob=1 end end return Ob end function i.word_wrap(Nb,Ob)if Nb==nil then return{""}end local Pb={}for Qb in(Nb.."\n"):gmatch("(.-)\n")do local Rb=""local Sb=0 for Tb in Qb:gmatch("%S+")do Sb=Sb+1 if#Rb==0 then Rb=Tb elseif#Rb+#Tb+1<=Ob then Rb=Rb.." "..Tb else table.insert(Pb,Rb)Rb=Tb end end if Sb>0 then table.insert(Pb,Rb)else table.insert(Pb,"")end end if#Pb==0 then return{""}end return Pb end function i.create_numeric_stepper(Nb,Ob,Pb,Qb,Rb,Sb,Tb)return{label=Nb,get=Ob,set=Pb,min=Qb,max=Rb,step=Sb,format=Tb or"%.1f",type="numeric_stepper"}end function i.create_action_item(Nb,Ob)return{label=Nb,action=Ob,type="action_item"}end function i.draw_decision_selector(Nb,Ob)local Pb=16 local Qb=o.screen.height-Pb rect(0,Qb,o.screen.width,Pb,o.colors.dark_grey)if#Nb>0 then local Rb=Nb[Ob]local Sb=Rb.label local Tb=#Sb*4 local Ub=Qb+4 local Vb=(o.screen.width-Tb)/2 j.text("<",2,Ub,o.colors.light_blue)j.text(Sb,Vb,Ub,o.colors.item)j.text(">",o.screen.width-6,Ub,o.colors.light_blue)end end function i.draw_timer()if not p or not p.game_in_progress or not p.meters then return end if p.meters.hidden and not p.stat_screen_active then return end local Nb=p.meters local Ob=10 local Pb=20 local Qb=5 local Rb=3 local Sb=Nb.timer_progress local Tb if Sb<=0.25 then Tb=o.colors.white elseif Sb<=0.5 then Tb=o.colors.light_blue elseif Sb<=0.75 then Tb=o.colors.blue elseif Sb<=1 then Tb=o.colors.red end local Ub=o.colors.dark_grey local Vb=-math.pi*0.5 local Wb=Sb*2*math.pi local Xb=Qb*Qb local Yb=Rb*Rb for cc=-Qb,Qb do for dc=-Qb,Qb do local ec=dc*dc+cc*cc if ec<=Xb and ec>Yb then local fc=math.atan(cc,dc)local gc=fc-Vb if gc<0 then gc=gc+2*math.pi end if gc<=Wb then pix(Ob+dc,Pb+cc,Tb)else pix(Ob+dc,Pb+cc,Ub)end end end end local Zb=Vb+Wb local ac=math.floor(Ob+math.cos(Zb)*(Rb-1)+0.5)local bc=math.floor(Pb+math.sin(Zb)*(Rb-1)+0.5)line(Ob,Pb,ac,bc,o.colors.white)end function i.draw_meters()if not p or not p.game_in_progress or not p.meters then return end if p.meters.hidden then return end local Nb=p.meters local Ob=c.get_max()local Pb=44 local Qb=2 local Rb=182 local Sb=228 local Tb=5 local Ub=11 local Vb=math.floor((Tb-Qb)/2)local Wb={{key="wpm",label="WPM",color=c.COLOR_WPM,row=0},{key="ism",label="ISM",color=c.COLOR_ISM,row=1},{key="bm",label="BM",color=c.COLOR_BM,row=2},}for Xb,Yb in ipairs(Wb)do local Zb=Ub+Yb.row*Tb local ac=Zb+Vb local bc=math.max(0,math.floor((Nb[Yb.key]/Ob)*Pb))rect(Rb,ac,Pb,Qb,c.COLOR_BG)if bc>0 then rect(Rb,ac,bc,Qb,Yb.color)end print(Yb.label,Sb,Zb,Yb.color,false,1,true)end end function i.update_decision_selector(Nb,Ob)if k.left()then m.sfx_beep()Ob=b.safeindex(Nb,Ob-1)elseif k.right()then m.sfx_beep()Ob=b.safeindex(Nb,Ob+1)end return Ob end function m.music_stop()music()end function m.music_play_mainmenu()end function m.music_play_wakingup()end function m.music_play_room_morning()end function m.music_play_room_street_1()end function m.music_play_room_street_2()end function m.music_play_room_()end function m.music_play_room_work()end function m.sfx_select()sfx(17,'C-7',30)end function m.sfx_deselect()sfx(18,'C-7',30)end function m.sfx_beep()sfx(19,'C-6',30)end function m.sfx_success()sfx(16,'C-7',60)end function m.sfx_bloop()sfx(21,'C-3',60)end s={test_song={name="Test Song",bpm=120,fps=60,end_frame=570,pattern={{frame=30,dir="left"},{frame=60,dir="down"},{frame=90,dir="up"},{frame=120,dir="right"},{frame=135,dir="left"},{frame=150,dir="right"},{frame=165,dir="left"},{frame=180,dir="right"},{frame=210,dir="left"},{frame=210,dir="right"},{frame=240,dir="up"},{frame=240,dir="down"},{frame=270,dir="left"},{frame=300,dir="right"},{frame=330,dir="left"},{frame=345,dir="down"},{frame=360,dir="up"},{frame=375,dir="right"},{frame=390,dir="left"},{frame=405,dir="down"},{frame=420,dir="up"},{frame=435,dir="right"},{frame=465,dir="up"},{frame=465,dir="down"},{frame=495,dir="left"},{frame=495,dir="right"},{frame=525,dir="up"},{frame=540,dir="down"},{frame=555,dir="left"},{frame=570,dir="right"}}},test_song_2={name="Test Song 2",bpm=120,fps=60,end_frame=570,pattern={{frame=30,dir="left"},{frame=60,dir="down"},{frame=90,dir="up"},{frame=120,dir="right"},{frame=135,dir="left"},{frame=150,dir="right"},{frame=165,dir="left"},{frame=180,dir="right"},{frame=210,dir="left"},{frame=210,dir="right"},{frame=240,dir="up"},{frame=240,dir="down"},{frame=270,dir="left"},{frame=300,dir="right"},{frame=330,dir="left"},{frame=345,dir="down"},{frame=360,dir="up"},{frame=375,dir="right"},{frame=390,dir="left"},{frame=405,dir="down"},{frame=420,dir="up"},{frame=435,dir="right"},{frame=465,dir="up"},{frame=465,dir="down"},{frame=495,dir="left"},{frame=495,dir="right"},{frame=525,dir="up"},{frame=540,dir="down"},{frame=555,dir="left"},{frame=570,dir="right"}}},random={name="Random Mode",bpm=0,fps=60,end_frame=nil,pattern={}}}function t(Nb,Ob,Pb)Pb=Pb or 60 local Qb=60/Ob local Rb=Qb*Pb return math.floor(Nb*Rb)end function u(Nb,Ob,Pb)Pb=Pb or 60 local Qb={}for Rb,Sb in ipairs(Nb)do local Tb=Sb[1]local Ub=Sb[2]table.insert(Qb,{frame=t(Tb,Ob,Pb),dir=Ub})end return Qb end local pb={}local qb={}function l.register(Nb)if not Nb or not Nb.id then trace("Error: Invalid sprite object registered (missing id)!")return end if pb[Nb.id]then trace("Warning: Overwriting sprite with id: "..Nb.id)end pb[Nb.id]=Nb end function l.show(Nb,Ob,Pb,Qb,Rb,Sb,Tb,Ub)if not pb[Nb]then trace("Error: Attempted to show non-registered sprite with id: "..Nb)return end qb[Nb]={id=Nb,x=Ob,y=Pb,colorkey=Qb,scale=Rb,flip_x=Sb,flip_y=Tb,rot=Ub,}end function l.hide(Nb)qb[Nb]=nil end function l.draw()for Nb,Ob in pairs(qb)do local Pb=pb[Nb]if not Pb then trace("Error: Sprite id "..Nb.." in _active_sprites is not registered.")qb[Nb]=nil end local Qb=Ob.colorkey or Pb.colorkey or 0 local Rb=Ob.scale or Pb.scale or 1 local Sb=Ob.flip_x or Pb.flip_x or 0 local Tb=Ob.flip_y or Pb.flip_y or 0 local Ub=Ob.rot or Pb.rot or 0 if Pb.sprites then for Vb=1,#Pb.sprites do local Wb=Pb.sprites[Vb]spr(Wb.s,Ob.x+(Wb.x_offset or 0),Ob.y+(Wb.y_offset or 0),Wb.colorkey or Qb,Wb.scale or Rb,Wb.flip_x or Sb,Wb.flip_y or Tb,Wb.rot or Ub)end else spr(Pb.s,Ob.x,Ob.y,Qb,Rb,Sb,Tb,Ub)end end end l.register({id="norman",sprites={{s=0,x_offset=0,y_offset=0},{s=1,x_offset=0,y_offset=-8},{s=2,x_offset=-4,y_offset=4},{s=3,x_offset=4,y_offset=4,flip_x=1},{s=4,x_offset=-2,y_offset=8},{s=5,x_offset=2,y_offset=8,flip_x=1}}})local rb={}function f.register(Nb)if not Nb or not Nb.id then r.show({"Error: Invalid situation object registered (missing id)!"})return end if not Nb.handle then Nb.handle=function()end end if not Nb.update then Nb.update=function()end end if rb[Nb.id]then trace("Warning: Overwriting situation with id: "..Nb.id)end rb[Nb.id]=Nb end function f.get_by_id(Nb)return rb[Nb]end function f.get_all(Nb)if Nb then local Ob={}for Pb,Qb in pairs(rb)do if Qb.screen_id==Nb then table.insert(Ob,Qb)end end return Ob end return rb end function f.apply(Nb,Ob)local Pb=f.get_by_id(Nb)local Qb=g.get_by_id(Ob)if not Pb then trace("Error: No situation found with id: "..Nb)return nil end if b.contains(Qb.situations,Nb)then Pb.handle()return Nb else trace("Info: Situation "..Nb.." cannot be applied to current screen (id: "..Ob..").")return nil end end f.register({id="drink_coffee",handle=function()m.sfx_select()l.show("norman",100,100)end,})local sb={}function e.register(Nb)if not Nb or not Nb.id then r.show({"Error: Invalid decision object registered (missing id)!"})return end if not Nb.label then r.show({"Error: Invalid decision object registered (missing label)!"})return end if not Nb.condition then Nb.condition=function()return true end end if not Nb.handle then Nb.handle=function()end end if sb[Nb.id]then trace("Warning: Overwriting decision with id: "..Nb.id)end sb[Nb.id]=Nb end function e.get_by_id(Nb)return sb[Nb]end function e.get_all()return sb end function e.get_for_screen(Nb)if not Nb or not Nb.decisions then return{}end local Ob={}for Pb,Qb in ipairs(Nb.decisions)do local Rb=e.get_by_id(Qb)if Rb then table.insert(Ob,Rb)end end return Ob end function e.filter_available(Nb)local Ob={}for Pb,Qb in ipairs(Nb)do if Qb and Qb.condition()then table.insert(Ob,Qb)end end return Ob end e.register({id="have_a_coffee",label="Have a Coffee",handle=function()local Nb=f.apply("drink_coffee",p.game.current_screen)p.game.current_situation=Nb end,})e.register({id="go_to_home",label="Go to Home",handle=function()b.go_to_screen_by_id("home")end,})e.register({id="go_to_toilet",label="Go to Toilet",handle=function()b.go_to_screen_by_id("toilet")end,})e.register({id="go_to_walking_to_office",label="Walking to office",handle=function()b.go_to_screen_by_id("walking_to_office")end,})e.register({id="go_to_office",label="Go to Office",handle=function()b.go_to_screen_by_id("office")end,})e.register({id="go_to_walking_to_home",label="Walking to home",handle=function()b.go_to_screen_by_id("walking_to_home")end,})e.register({id="play_button_mash",label="Play Button Mash",handle=function()c.hide()v.start("game",{focus_center_x=o.screen.width/2,focus_center_y=o.screen.height/2,focus_initial_radius=0,})end,})e.register({id="play_rhythm",label="Play Rhythm Game",handle=function()c.hide()w.start("game",{focus_center_x=o.screen.width/2,focus_center_y=o.screen.height/2,focus_initial_radius=0,})end,})e.register({id="play_ddr",label="Play DDR (Random)",handle=function()c.hide()x.start("game",nil)end,})local tb={}function h.get_maps_array()local Nb={}for Ob,Pb in pairs(tb)do table.insert(Nb,Pb)end return Nb end function h.register(Nb)if tb[Nb.id]then trace("Warning: Overwriting map with id: "..Nb.id)end tb[Nb.id]=Nb end function h.get_by_id(Nb)return tb[Nb]end function h.draw(Nb)local Ob=h.get_by_id(Nb)if not Ob then return end map(Ob.from_x,Ob.from_y,Ob.width,Ob.height,Ob.to_x,Ob.to_y)end h.register({id="bedroom",from_x=0,from_y=0,width=30,height=17,to_x=0,to_y=0,})local ub={}function g.register(Nb)if ub[Nb.id]then trace("Warning: Overwriting screen with id: "..Nb.id)end if not Nb.situations then Nb.situations={}end if not Nb.init then Nb.init=function()end end if not Nb.update then Nb.update=function()end end if not Nb.draw then Nb.draw=function()end end ub[Nb.id]=Nb end function g.get_by_id(Nb)return ub[Nb]end function g.get_all()return ub end g.register({id="home",name="Home",decisions={"go_to_toilet","go_to_walking_to_office",},background="bedroom",})g.register({id="toilet",name="Toilet",decisions={"go_to_home",},background="bedroom",init=function()p.stat_screen_active=true c.hide()local Nb=o.screen.width*0.75 local Ob=o.screen.height*0.75 n.start_driven(Nb,Ob)n.set_percentage(0.15)end,update=function()if not p.stat_screen_active then return end if k.select()or k.player_interact()then n.stop()p.stat_screen_active=false c.show()end end,draw=function()if not p.stat_screen_active then return end local Nb=o.screen.width local Ob=Nb/2 local Pb=math.floor(Nb*0.75)local Qb=math.floor((Nb-Pb)/2)local Rb=4 j.text_center("day 1",Ob,10,o.colors.white)local Sb="reflecting on my past and present\n...\nboth eventually flushed."local Tb=i.word_wrap(Sb,38)local Ub=24 for ec,fc in ipairs(Tb)do j.text_center(fc,Ob,Ub,o.colors.light_grey)Ub=Ub+8 end local Vb=p.meters local Wb=c.get_max()local Xb=c.get_timer_decay_percentage()local Yb=string.format("-%d%%",Xb)local Zb=c.get_combo_multiplier()local ac=math.floor((Zb-1)*100)local bc=string.format("+%d%%",ac)local cc=Ub+10 local dc={{key="wpm",label="Work Productivity Meter"},{key="ism",label="Impostor Syndrome Meter"},{key="bm",label="Burnout Meter"},}for ec,fc in ipairs(dc)do local gc=cc+(ec-1)*20 j.text_center(fc.label,Ob,gc,o.colors.white)local hc=gc+8 local ic=math.max(0,math.floor((Vb[fc.key]/Wb)*Pb))rect(Qb,hc,Pb,Rb,c.COLOR_BG)if ic>0 then rect(Qb,hc,ic,Rb,o.colors.blue)end local jc=print(Yb,0,-6,0,false,1)j.text(Yb,Qb-jc-4,hc,o.colors.light_blue)j.text(bc,Qb+Pb+4,hc,o.colors.light_blue)end end,})g.register({id="walking_to_office",name="Walking to office",background_color=o.colors.dark_grey,decisions={"go_to_home","go_to_office",}})g.register({id="office",name="Office",background_color=o.colors.dark_grey,decisions={"play_button_mash","play_rhythm","play_ddr","go_to_walking_to_home","have_a_coffee",},situations={"drink_coffee",},})g.register({id="walking_to_home",name="Walking to home",background_color=o.colors.dark_grey,decisions={"go_to_home","go_to_office",}})local vb={}function a.register(Nb,Ob)vb[Nb]=Ob end function a.get(Nb)return vb[Nb]end function a.set_current(Nb)p.current_window=Nb end function a.get_current_id()return p.current_window end function a.get_current_handler()local Nb=a.get(p.current_window)if Nb and Nb.update and Nb.draw then return function()Nb.update()Nb.draw()end else return function()trace("Error: No handler for window: "..tostring(p.current_window))end end end y={}a.register("splash",y)z={}a.register("intro",z)q={}a.register("menu",q)A={}a.register("game",A)r={}a.register("popup",r)B={}a.register("configuration",B)C={}a.register("audiotest",C)v={}a.register("minigame_button_mash",v)w={}a.register("minigame_rhythm",w)x={}a.register("minigame_ddr",x)function y.draw()local Nb="Definitely not an Impostor"local Ob=(o.screen.height-6)/2 j.text_center(Nb,o.screen.width/2,Ob,o.colors.white)end function y.update()p.splash_timer=p.splash_timer-1 if p.splash_timer<=0 or k.menu_confirm()then a.set_current("intro")end end z.y=o.screen.height z.speed=0.5 z.text=[[ Norman Reds’ everyday life seems ordinary: work, meetings, coffee, and endless notifications. But beneath him, or around him — something is constantly building, and it soon becomes clear that there is more going on than meets the eye. ]]function z.draw()local Nb=(o.screen.width-132)/2 j.text(z.text,Nb,z.y,o.colors.light_blue)end function z.update()z.y=z.y-z.speed local Nb=1 for Ob in string.gmatch(z.text,"\n")do Nb=Nb+1 end if z.y<-Nb*8 then a.set_current("menu")end if k.menu_confirm()then a.set_current("menu")end end local wb={}function q.draw()i.draw_top_bar("Main Menu")i.draw_menu(wb,p.current_menu_item,108,70)end function q.update()p.current_menu_item=i.update_menu(wb,p.current_menu_item)if k.menu_confirm()then local Nb=wb[p.current_menu_item]if Nb and Nb.decision then m.sfx_select()Nb.decision()end end end function q.new_game()p.new_game()A.set_state("game")end function q.load_game()p.load_game()A.set_state("game")end function q.save_game()p.save_game()end function q.resume_game()A.set_state("game")end function q.exit()exit()end function q.configuration()B.init()A.set_state("configuration")end function q.audio_test()C.init()A.set_state("audiotest")end function q.refresh_menu_items()wb={}if p.game_in_progress then table.insert(wb,{label="Resume Game",decision=q.resume_game})table.insert(wb,{label="Save Game",decision=q.save_game})end table.insert(wb,{label="New Game",decision=q.new_game})table.insert(wb,{label="Load Game",decision=q.load_game})table.insert(wb,{label="Configuration",decision=q.configuration})table.insert(wb,{label="Audio Test",decision=q.audio_test})table.insert(wb,{label="Exit",decision=q.exit})p.current_menu_item=1 end B={controls={},selected_control=1,}function B.init()B.controls={i.create_action_item("Save",function()o.save()end),i.create_action_item("Restore Defaults",function()o.reset()end),}end function B.draw()i.draw_top_bar("Configuration")local Nb=10 local Ob=40 local Pb=o.screen.width-10 local Qb=4 for Rb,Sb in ipairs(B.controls)do local Tb=Ob+(Rb-1)*12 local Ub=o.colors.light_blue if Sb.type=="numeric_stepper"then local Vb=Sb.get()local Wb=Sb.label local Xb=string.format(Sb.format,Vb)local Yb=Pb-(#Xb*Qb)if Rb==B.selected_control then Ub=o.colors.item j.text("<",Nb-8,Tb,Ub)j.text(Wb,Nb,Tb,Ub)j.text(Xb,Yb,Tb,Ub)j.text(">",Pb+4,Tb,Ub)else j.text(Wb,Nb,Tb,Ub)j.text(Xb,Yb,Tb,Ub)end elseif Sb.type=="action_item"then local Vb=Sb.label if Rb==B.selected_control then Ub=o.colors.item j.text("<",Nb-8,Tb,Ub)j.text(Vb,Nb,Tb,Ub)j.text(">",Nb+8+(#Vb*Qb)+4,Tb,Ub)else j.text(Vb,Nb,Tb,Ub)end end end j.text("Press B to go back",Nb,120,o.colors.light_grey)end function B.update()if k.menu_back()then A.set_state("menu")return end if k.up()then B.selected_control=B.selected_control-1 if B.selected_control<1 then B.selected_control=#B.controls end elseif k.down()then B.selected_control=B.selected_control+1 if B.selected_control>#B.controls then B.selected_control=1 end end local Nb=B.controls[B.selected_control]if Nb then if Nb.type=="numeric_stepper"then local Ob=Nb.get()if k.left()then local Pb=math.max(Nb.min,Ob-Nb.step)Nb.set(Pb)elseif k.right()then local Pb=math.min(Nb.max,Ob+Nb.step)Nb.set(Pb)end elseif Nb.type=="action_item"then if k.menu_confirm()then Nb.action()end end end end C={index_menu=1,index_func=1,list_func={},menuitems={},last_pressed=false}function C.generate_menuitems(Nb,Ob)return{{label="Play music/sound: "..(Nb[Ob]or"?"),decision=function()local Pb=m[Nb[Ob]]if Pb then Pb()else trace("Invalid Audio function: "..Nb[Ob])end end},{label="Stop playing music",decision=function()m.music_stop()end},{label="Back",decision=function()C.back()end},}end function C.generate_listfunc()local Nb={}for Ob,Pb in pairs(m)do if type(Pb)=="function"then Nb[#Nb+1]=Ob end end table.sort(Nb)return Nb end function C.back()m.sfx_deselect()A.set_state("menu")end function C.init()C.last_pressed=false C.index_menu=1 C.index_func=1 C.list_func=C.generate_listfunc()C.menuitems=C.generate_menuitems(C.list_func,C.index_func)end function C.draw()i.draw_top_bar("Audio test")i.draw_menu(C.menuitems,C.index_menu,20,50)end function C.update()if k.up()then C.index_menu=b.safeindex(C.menuitems,C.index_menu-1)elseif k.down()then C.index_menu=b.safeindex(C.menuitems,C.index_menu+1)elseif k.left()then C.index_func=b.safeindex(C.list_func,C.index_func-1)C.menuitems=C.generate_menuitems(C.list_func,C.index_func)elseif k.right()then C.index_func=b.safeindex(C.list_func,C.index_func+1)C.menuitems=C.generate_menuitems(C.list_func,C.index_func)elseif k.menu_confirm()then C.menuitems[C.index_menu].decision()elseif k.menu_back()then C.back()end end local xb=40 local yb=40 local zb=160 local Ab=80 local Bb=xb+10 local Cb=yb+10 local Db=8 function r.show(Nb)p.popup.show=true p.popup.content=Nb or{}A.set_state("popup")end function r.hide()p.popup.show=false p.popup.content={}A.set_state("game")end function r.update()if p.popup.show then if k.menu_confirm()or k.menu_back()then r.hide()end end end function r.draw()if p.popup.show then rect(xb,yb,zb,Ab,o.colors.black)rectb(xb,yb,zb,Ab,o.colors.light_blue)local Nb=Cb for Ob,Pb in ipairs(p.popup.content)do j.text(Pb,Bb,Nb,o.colors.light_grey)Nb=Nb+Db end j.text("[A] Close",Bb,yb+Ab-Db-2,o.colors.light_blue)end end function v.init(Nb)p.minigame_button_mash=d.configure_button_mash(Nb)end function v.start(Nb,Ob)v.init(Ob)local Pb=p.minigame_button_mash Pb.return_window=Nb or"game"if Pb.focus_center_x then n.start_driven(Pb.focus_center_x,Pb.focus_center_y,{initial_radius=Pb.focus_initial_radius})end a.set_current("minigame_button_mash")end function v.update()local Nb=p.minigame_button_mash if k.select()then Nb.bar_fill=Nb.bar_fill+Nb.fill_per_press Nb.button_pressed_timer=Nb.button_press_duration if Nb.bar_fill>Nb.max_fill then Nb.bar_fill=Nb.max_fill end end if Nb.bar_fill>=Nb.max_fill then c.on_minigame_complete()c.show()if Nb.focus_center_x then n.stop()end a.set_current(Nb.return_window)return end local Ob=Nb.base_degradation+(Nb.bar_fill*Nb.degradation_multiplier)Nb.bar_fill=Nb.bar_fill-Ob if Nb.bar_fill<0 then Nb.bar_fill=0 end if Nb.button_pressed_timer>0 then Nb.button_pressed_timer=Nb.button_pressed_timer-1 end if Nb.focus_center_x then n.set_percentage(Nb.bar_fill/Nb.max_fill)end end function v.draw()local Nb=p.minigame_button_mash if Nb.return_window=="game"then A.draw()end if not Nb.focus_center_x then rect(0,0,o.screen.width,o.screen.height,o.colors.black)end rect(Nb.bar_x-2,Nb.bar_y-2,Nb.bar_width+4,Nb.bar_height+4,o.colors.light_grey)rectb(Nb.bar_x-2,Nb.bar_y-2,Nb.bar_width+4,Nb.bar_height+4,o.colors.dark_grey)local Ob=(Nb.bar_fill/Nb.max_fill)*Nb.bar_width if Ob>0 then local Rb=o.colors.light_blue if Nb.bar_fill>66 then Rb=o.colors.item elseif Nb.bar_fill>33 then Rb=o.colors.blue end rect(Nb.bar_x,Nb.bar_y,Ob,Nb.bar_height,Rb)end local Pb=o.colors.light_grey if Nb.button_pressed_timer>0 then Pb=o.colors.light_blue end circb(Nb.button_x,Nb.button_y,Nb.button_size,Pb)if Nb.button_pressed_timer>0 then circ(Nb.button_x,Nb.button_y,Nb.button_size-2,Pb)end j.text_center(" Z",Nb.button_x-2,Nb.button_y-3,o.colors.light_grey)j.text_center("MASH Z!",o.screen.width/2,Nb.bar_y+Nb.bar_height+10,o.colors.light_grey)local Qb=math.floor((Nb.bar_fill/Nb.max_fill)*100)j.text_center(Qb.."%",Nb.bar_x+Nb.bar_width/2,Nb.bar_y+2,o.colors.black)end function w.init(Nb)p.minigame_rhythm=d.configure_rhythm(Nb)end function w.start(Nb,Ob)w.init(Ob)local Pb=p.minigame_rhythm Pb.return_window=Nb or"game"if Pb.focus_center_x then n.start_driven(Pb.focus_center_x,Pb.focus_center_y,{initial_radius=Pb.focus_initial_radius})end a.set_current("minigame_rhythm")end function w.update()local Nb=p.minigame_rhythm Nb.line_position=Nb.line_position+(Nb.line_speed*Nb.line_direction)if Nb.line_position>1 then Nb.line_position=1 Nb.line_direction=-1 elseif Nb.line_position<0 then Nb.line_position=0 Nb.line_direction=1 end if Nb.press_cooldown>0 then Nb.press_cooldown=Nb.press_cooldown-1 end if k.select()and Nb.press_cooldown==0 then Nb.button_pressed_timer=Nb.button_press_duration Nb.press_cooldown=Nb.press_cooldown_duration local Ob=Nb.target_center-(Nb.target_width/2)local Pb=Nb.target_center+(Nb.target_width/2)if Nb.line_position>=Ob and Nb.line_position<=Pb then Nb.score=Nb.score+1 else Nb.score=Nb.score-1 if Nb.score<0 then Nb.score=0 end end Nb.target_width=Nb.initial_target_width*(Nb.target_shrink_rate^Nb.score)if Nb.target_width=Nb.max_score then c.on_minigame_complete()c.show()if Nb.focus_center_x then n.stop()end a.set_current(Nb.return_window)return end if Nb.button_pressed_timer>0 then Nb.button_pressed_timer=Nb.button_pressed_timer-1 end if Nb.focus_center_x then n.set_percentage(1-Nb.score/Nb.max_score)end end function w.draw()local Nb=p.minigame_rhythm if Nb.return_window=="game"then A.draw()end if not Nb.focus_center_x then rect(0,0,o.screen.width,o.screen.height,o.colors.black)end rect(Nb.bar_x-2,Nb.bar_y-2,Nb.bar_width+4,Nb.bar_height+4,o.colors.light_grey)rectb(Nb.bar_x-2,Nb.bar_y-2,Nb.bar_width+4,Nb.bar_height+4,o.colors.dark_grey)rect(Nb.bar_x,Nb.bar_y,Nb.bar_width,Nb.bar_height,o.colors.dark_grey)local Ob=Nb.target_center-(Nb.target_width/2)local Pb=Nb.bar_x+(Ob*Nb.bar_width)local Qb=Nb.target_width*Nb.bar_width rect(Pb,Nb.bar_y,Qb,Nb.bar_height,o.colors.light_blue)local Rb=Nb.bar_x+(Nb.line_position*Nb.bar_width)rect(Rb-1,Nb.bar_y,2,Nb.bar_height,o.colors.item)local Sb="SCORE: "..Nb.score.." / "..Nb.max_score j.text_center(Sb,o.screen.width/2,Nb.bar_y+Nb.bar_height+8,o.colors.light_grey)j.text_center("Press Z when line is in green!",o.screen.width/2,Nb.bar_y+Nb.bar_height+20,o.colors.light_grey)local Tb=o.colors.light_grey if Nb.button_pressed_timer>0 then Tb=o.colors.light_blue end circb(Nb.button_x,Nb.button_y,Nb.button_size,Tb)if Nb.button_pressed_timer>0 then circ(Nb.button_x,Nb.button_y,Nb.button_size-2,Tb)end j.text_center("Z",Nb.button_x-2,Nb.button_y-3,Tb)end function x.init(Nb)p.minigame_ddr=d.configure_ddr(Nb)end function x.start(Nb,Ob,Pb)x.init(Pb)p.minigame_ddr.return_window=Nb or"game"p.minigame_ddr.debug_song_key=Ob if Ob and s and s[Ob]then p.minigame_ddr.current_song=s[Ob]p.minigame_ddr.use_pattern=true p.minigame_ddr.pattern_index=1 p.minigame_ddr.debug_status="Pattern loaded: "..Ob else p.minigame_ddr.use_pattern=false if Ob then p.minigame_ddr.debug_status="Song not found: "..tostring(Ob)else p.minigame_ddr.debug_status="Random mode"end end a.set_current("minigame_ddr")end local function Eb()local Nb=p.minigame_ddr local Ob=Nb.target_arrows[math.random(1,4)]table.insert(Nb.arrows,{dir=Ob.dir,x=Ob.x,y=Nb.bar_y+Nb.bar_height+10})end local function Fb(Nb)local Ob=p.minigame_ddr for Pb,Qb in ipairs(Ob.target_arrows)do if Qb.dir==Nb then table.insert(Ob.arrows,{dir=Nb,x=Qb.x,y=Ob.bar_y+Ob.bar_height+10})break end end end local function Gb(Nb)local Ob=p.minigame_ddr local Pb=math.abs(Nb.y-Ob.target_y)return Pb<=Ob.hit_threshold end local function Hb(Nb)local Ob=p.minigame_ddr return Nb.y>Ob.target_y+Ob.hit_threshold end local function Ib(Nb,Ob,Pb,Qb)local Rb=12 local Sb=Rb/2 if Pb=="left"then tri(Nb+Sb,Ob,Nb,Ob+Sb,Nb+Sb,Ob+Rb,Qb)rect(Nb+Sb,Ob+Sb-2,Sb,4,Qb)elseif Pb=="right"then tri(Nb+Sb,Ob,Nb+Rb,Ob+Sb,Nb+Sb,Ob+Rb,Qb)rect(Nb,Ob+Sb-2,Sb,4,Qb)elseif Pb=="up"then tri(Nb,Ob+Sb,Nb+Sb,Ob,Nb+Rb,Ob+Sb,Qb)rect(Nb+Sb-2,Ob+Sb,4,Sb,Qb)elseif Pb=="down"then tri(Nb,Ob+Sb,Nb+Sb,Ob+Rb,Nb+Rb,Ob+Sb,Qb)rect(Nb+Sb-2,Ob,4,Sb,Qb)end end function x.update()local Nb=p.minigame_ddr if Nb.bar_fill>=Nb.max_fill then c.on_minigame_complete()c.show()a.set_current(Nb.return_window)return end Nb.frame_counter=Nb.frame_counter+1 if Nb.use_pattern and Nb.current_song and Nb.current_song.end_frame then if Nb.frame_counter>Nb.current_song.end_frame and#Nb.arrows==0 then c.on_minigame_complete()c.show()a.set_current(Nb.return_window)return end end if Nb.use_pattern and Nb.current_song and Nb.current_song.pattern then local Qb=Nb.current_song.pattern while Nb.pattern_index<=#Qb do local Rb=Qb[Nb.pattern_index]if Nb.frame_counter>=Rb.frame then Fb(Rb.dir)Nb.pattern_index=Nb.pattern_index+1 else break end end else Nb.arrow_spawn_timer=Nb.arrow_spawn_timer+1 if Nb.arrow_spawn_timer>=Nb.arrow_spawn_interval then Eb()Nb.arrow_spawn_timer=0 end end local Ob={}for Qb,Rb in ipairs(Nb.arrows)do Rb.y=Rb.y+Nb.arrow_fall_speed if Hb(Rb)then table.insert(Ob,Qb)Nb.bar_fill=Nb.bar_fill-Nb.miss_penalty if Nb.bar_fill<0 then Nb.bar_fill=0 end end end for Qb=#Ob,1,-1 do table.remove(Nb.arrows,Ob[Qb])end for Qb,Rb in pairs(Nb.input_cooldowns)do if Nb.input_cooldowns[Qb]>0 then Nb.input_cooldowns[Qb]=Nb.input_cooldowns[Qb]-1 end end for Qb,Rb in pairs(Nb.button_pressed_timers)do if Nb.button_pressed_timers[Qb]>0 then Nb.button_pressed_timers[Qb]=Nb.button_pressed_timers[Qb]-1 end end local Pb={left=k.left(),down=k.down(),up=k.up(),right=k.right()}for Qb,Rb in pairs(Pb)do if Rb and Nb.input_cooldowns[Qb]==0 then Nb.input_cooldowns[Qb]=Nb.input_cooldown_duration Nb.button_pressed_timers[Qb]=Nb.button_press_duration local Sb=false for Tb,Ub in ipairs(Nb.arrows)do if Ub.dir==Qb and Gb(Ub)then Nb.bar_fill=Nb.bar_fill+Nb.fill_per_hit if Nb.bar_fill>Nb.max_fill then Nb.bar_fill=Nb.max_fill end table.remove(Nb.arrows,Tb)Sb=true break end end if not Sb then Nb.bar_fill=Nb.bar_fill-2 if Nb.bar_fill<0 then Nb.bar_fill=0 end end end end end function x.draw()local Nb=p.minigame_ddr if not Nb then cls(0)print("DDR ERROR: Context not initialized",10,10,12)print("Press Z to return",10,20,12)if k.select()then a.set_current("game")end return end if Nb.return_window=="game"then A.draw()end rect(0,0,o.screen.width,o.screen.height,o.colors.black)rect(Nb.bar_x-2,Nb.bar_y-2,Nb.bar_width+4,Nb.bar_height+4,o.colors.light_grey)rectb(Nb.bar_x-2,Nb.bar_y-2,Nb.bar_width+4,Nb.bar_height+4,o.colors.dark_grey)local Ob=(Nb.bar_fill/Nb.max_fill)*Nb.bar_width if Ob>0 then local Rb=o.colors.light_blue if Nb.bar_fill>66 then Rb=o.colors.item elseif Nb.bar_fill>33 then Rb=o.colors.blue end rect(Nb.bar_x,Nb.bar_y,Ob,Nb.bar_height,Rb)end local Pb=math.floor((Nb.bar_fill/Nb.max_fill)*100)j.text_center(Pb.."%",Nb.bar_x+Nb.bar_width/2,Nb.bar_y+2,o.colors.black)if Nb.target_arrows then for Rb,Sb in ipairs(Nb.target_arrows)do local Tb=Nb.button_pressed_timers[Sb.dir]and Nb.button_pressed_timers[Sb.dir]>0 local Ub=Tb and o.colors.light_blue or o.colors.light_grey Ib(Sb.x,Nb.target_y,Sb.dir,Ub)end end if Nb.arrows then for Rb,Sb in ipairs(Nb.arrows)do Ib(Sb.x,Sb.y,Sb.dir,o.colors.blue)end end j.text_center("Hit the arrows!",o.screen.width/2,Nb.bar_y+Nb.bar_height+10,o.colors.light_grey)local Qb=60 if Nb.debug_status then j.text_center(Nb.debug_status,o.screen.width/2,Qb,o.colors.item)Qb=Qb+10 end if Nb.use_pattern then j.text_center("PATTERN MODE - Frame:"..Nb.frame_counter,o.screen.width/2,Qb,o.colors.light_blue)if Nb.current_song and Nb.current_song.pattern then j.text_center("Pattern Len:"..#Nb.current_song.pattern.." Index:"..Nb.pattern_index,o.screen.width/2,Qb+10,o.colors.light_blue)end else j.text_center("RANDOM MODE",o.screen.width/2,Qb,o.colors.blue)end end local Jb={}local Kb=1 function A.draw()local Nb=g.get_by_id(p.game.current_screen)if Nb.background then h.draw(Nb.background)elseif Nb.background_color then rect(0,0,o.screen.width,o.screen.height,Nb.background_color)end i.draw_top_bar(Nb.name)if not p.stat_screen_active and#Jb>0 then i.draw_decision_selector(Jb,Kb)end l.draw()n.draw()Nb.draw()end function A.update()n.update()if k.menu_back()then a.set_current("menu")q.refresh_menu_items()return end local Nb=g.get_by_id(p.game.current_screen)Nb.update()if p.game.current_situation then local Qb=f.get_by_id(p.game.current_situation)if Qb and Qb.update then Qb.update()end end if p.stat_screen_active then return end local Ob=e.get_for_screen(Nb)Jb=e.filter_available(Ob)if#Jb==0 then return end if Kb>#Jb then Kb=1 end local Pb=i.update_decision_selector(Jb,Kb)if Pb~=Kb then Kb=Pb end if k.select()then local Qb=Jb[Kb]if Qb and Qb.handle then m.sfx_select()Qb.handle()end end end function A.set_state(Nb)a.set_current(Nb)end local Lb=false local function Mb()if Lb then return end p.reset()a.set_current("splash")q.refresh_menu_items()Lb=true end function TIC()Mb()cls(o.colors.black)local Nb=a.get_current_handler()if Nb then Nb()end c.update()if p.game_in_progress then i.draw_meters()i.draw_timer()end end -- -- 000:0404005f574fc2c3c71d2b53fff1e8ab52367e2553ffa30000875129adff83769c00e436fa77a8ff004dc3c3c7ffccaa -- -- -- 000:00000000c666666006606060c636366006606060c606366006666660c0000000 -- 001:0000000006666666060600600666666606000600066666660633633300000000 -- 002:0000000066666666006000066666666660060006666666666333363300000000 -- 004:1111111111111111111111111111111111111111111111111111111111111111 -- 005:1111111111111111111111111111111111111111111111111111111100000000 -- 006:0222222200010010033055010130150603305501013015060330550100000000 -- 007:2222222001022220601022206001022060201020602201006022201000000000 -- 008:0000000003330333033303330333000003330111033301110333011103330111 -- 009:0000000033333333333333330000000011100111111001111110011111100111 -- 010:0000000033303330333033300000333011103330111033301110333011103330 -- 011:111111111111111111111100111110a511110a51111015a51101515111000000 -- 012:111111111111111101111111101111115a01111115a011115151011100000111 -- 013:1000000004444444044444440444444404444444044444440444444404444444 -- 014:0000000144444240444424204444424044442420444442404444242044444240 -- 015:0000000004244444024444440424400002444444042424240242424200000000 -- 016:000000004444442044444240c004442044444240e424242042424240c0000000 -- 017:0000000002424240042424200244444004244440024404400424044002440440 -- 018:0000000002424240042424200444424004444420044042400440442004404240 -- 019:0222222200010012055016020150660205501602015066020550160200000000 -- 020:2222222022221000222203302222013022220330222201302222033000000000 -- 021:0333011103330111033301110333011103330111033300000333011103330111 -- 022:1110011111100111111001111110011111100111000000001110011111100111 -- 023:1110333011103330111033301110333011103330000033301110333011103330 -- 024:1111111011111110111111101111111011111110111111101111111011111110 -- 025:0444444404444444044444440444444404444444044044440440444404404444 -- 026:4444242044444240444424204444424044442420444442404444242044444240 -- 027:3333111133331111333311113333111111113333111133331111333311113333 -- 028:0424044002440440042404400244444004244440024242400424242000000000 -- 029:0440442004404240044044200444424004444420024242400424242000000000 -- 030:0000000006666660036060600360666006606060036660600360666003606060 -- 031:0222222200010010033033030130130103303303013013010330330300000000 -- 032:22222220c10012203033022030130220303302203013022030330220c0000000 -- 033:0333011103330111033301110333011103330111033301110333011100000000 -- 034:1110011111100111111001111110011111100111111001111110011100000000 -- 035:1110333011103330111033301110333011103330111033301110333000000000 -- 036:0440444404404444044044440444444404444444044444440444444404444444 -- 037:0000000002222222022000220201110202011102020111020220002202222222 -- 038:0000000022222220220002202011102020111020201110202200022022222220 -- 039:0000000002222222022222220222222202222222022222220222222202222222 -- 040:0000000022222220222222202222222022222220222222202222222022222220 -- 041:0000000002222222022200000220111102201121020112000201120402012200 -- 042:0000000022222220000002201111102021211020000210203430102000430020 -- 043:0666606003606060036066600366606003606060066060600360606003666660 -- 044:0222222202222222022222220222222202222222000000000001111100011111 -- 045:2222222022222220222222202222222022222220000000001111100011111000 -- 046:1111111111111111111111111000000002222222022222220222222202222222 -- 047:1111111111111111111111110000000022222222222222222222222222222222 -- 048:111111111111111111111111c000100022220444e222044422220444e2220444 -- 049:1111111111111111111111111100001100222201022222200222222002222220 -- 050:1111111011111110111111101111111011111110111111101111111011110000 -- 051:1111111111111111111111111111111111111111111111111111111100011111 -- 052:0444444404444444044444440444444404444444044444440444444410000000 -- 053:4444242044444240444424204444424044442420444442404444242000000001 -- 054:0222222202222222022000220201110202011102020111020220002202222222 -- 055:2222222022222220220002202011102020111020201110202200022022222220 -- 056:0222222202222222022222220222222202222222022222220222222200000000 -- 057:2222222022222220222222202222222022222220222222202222222000000000 -- 058:0201122202012222020112220201222202201222022022220222000002222222 -- 059:2204302022204020202200202000002020222020222220200000022022222220 -- 060:5555555555555555555555556666111155555555555555555555555566616666 -- 061:5555555555555555555555556666666655551555555515555555655566666611 -- 062:0222222202222222022222220222222202222222022222220222222202222222 -- 063:2222222222222222222222222222222222222222222222222222222222222222 -- 064:22220444e222044422220444e222044422220444e222044422220444e2220444 -- 065:0222222002222220020000206022220002222220022222200200002000111100 -- 066:5000000004444444044044440440444404404444044044440444444460000000 -- 067:0000000544444240444424204444424044442420444442404444242000000001 -- 068:0000000001111111011111110111111101111111011111110111111100000000 -- 069:0000000011111110111111101111111011111110111111101111111000000000 -- 070:5555555555555555555555551111666655555555555555555555555511666111 -- 071:000000000222220002222090022209900220999002099d900099199009919790 -- 072:0000000022222220222222202222222022220000222011002212000021222220 -- 073:5555555555555555555555556611166655555551555555515555555166666111 -- 074:0000000001111111000000001111666655555555555555555555555511666111 -- 075:0000000011111111000000006611166655555551555555515555555166666111 -- 076:0000000011111111000000001111666655555555555555555555555511666111 -- 077:0000000011111110000000006611166655555551555555515555555166666111 -- 078:1111111111111111111100001110919111101010110191011019191000919190 -- 079:1111111111111111000000009191919000000010111110901111101000000090 -- 080:09191990c991990209199020c999020209902020c902020200202020c0000000 -- 081:0000000002020200202020200200022020002220000222202022222002222220 -- 082:5555555555555055555501056666010155550105555501055555010566610106 -- 083:5555555555555555000000000222222202222222022222220222222202222222 -- 084:5555555555555555000000002222222022222220222222202222222022222220 -- 085:5555000055500220550202206022022002220220022202200222022002220220 -- 086:1000000110333301103333011033330110333301103333011033330110333301 -- 087:3010101033331111333311113333111111113333111133331111333311113333 -- 088:3333101033331090333310103333109011113010111010901110201011101090 -- 089:2222222022222220222222202222222022222220222222202222222022222220 -- 090:5555550055555022555502226611022255550222555502225555501266666100 -- 091:0005010522200105222201052222010622220105222201052210505500066111 -- 092:5000000002222222022222220222222202222222022222220222222202222222 -- 093:0222022002220220022202200222022002220220022202200222022002220220 -- 094:1033330110333301103333011033330110333301103333011033330110000001 -- 095:3333101033331090333310103333109011113010111130901111301011113000 -- 096:00000000c111111100000000c106666601051555c105155501056555c0066611 -- 097:0000000011111110000000006666101055555010555550105555501066616000 -- 098:5555555555555550555555056666116655550055555500555555655566666611 -- 099:0555555500555555050555550661111105500555115005550055555500616666 -- 100:0222222202222222022222220000000000000000501055555010555560006666 -- 101:2222222022222220222222200000000000000000555501055555010566660001 -- 102:0222022002220220022202200222022002220220022202200222022012220220 -- 103:1000000103333330033333300333333003333330033333300333333010000001 -- 104:5500000050222222022222220222222202222222022222220222222202222222 -- 105:0222222222222222222222222222222222222222222222222222222222222222 -- 106:1222000012201110120111101011111001111110011111100111111001111110 -- 107:0000000001111111011111110111111101111111011111115000000066000066 -- 108:0000000011111111111111111111111111111111111111110000000066666611 -- 109:1111111011111110111111101111111011111110111111100000000566000066 -- 110:1111111111111111111111111111010011101044111010441110104400000010 -- 111:1111111111111111111111110011111144011111440111114401111110000000 -- 112:11111111111111111111111111111111111111111111111111110111c0004000 -- 113:3333104433331044333310003333111111113333111133331111333311113333 -- 114:4403111144031111000311113333111111110000111044441104444411014444 -- 115:3304440133044401330444013304440100104033440103334440333344103333 -- 116:3330111133020000330124243330111111110111111130111111301111113300 -- 117:1103111100401111242011111240111111203333124033331120333300013333 -- 118:1111111100000000033333330333333303333333033333330000000011111111 -- 119:1111111100000000333333303333333033333330333333300000000011111111 -- 120:1a12222222a222222212222222a222222212222222a222222212222222222222 -- 121:1a8b888822888b8b228b888822b8bb8b22888b88228b88882288b88b228b8b88 -- 122:8b8b8888b8b88b8bb88b888888b8bb8b8b888b8888bb88888b88b88bb88b8b88 -- 123:8b8b888800000000055555550555555500000000055555550555555500000000 -- 124:8b8b888800000000555555555555555500000000555555555555555500000000 -- 125:8b8b888800000000555555505555555000000000555555505555555000000000 -- 126:0000000007777777070000000703333307033333070333330703333307033333 -- 127:0000000077777777000000003333333033333330333333303333333033333330 -- 128:000000007777777700000000e222222222222222e222222222222222e2222222 -- 129:0000000077777770000000702222207022222070222220702222207022222070 -- 130:3000000300ffff000ddddff00dddddf00dddddf00dddddf000dddd0000000000 -- 131:0555555505555555055555550555555500000000050b88880508b88b000b8b88 -- 132:555555555555555555555555555555550000000088bb88888b88b88bb88b8b88 -- 133:555555505555555055555550555555500000000088bb80508b88b050b88b8000 -- 134:0703333307033333070333330703333307033333070333330703333307033333 -- 135:3333333033333330333333303333333033333330333333303333333033333330 -- 136:2222207022222070222220702222207022222070222220702222207022222070 -- 137:4444444444444444444444444444444444444444444444444444444444444444 -- 138:4442222244422222444222224442222244422222444222224442222244422222 -- 139:0000000000bbbb0008888bb0088888b0088888b0088888b00088880030000003 -- 140:0000000007777777076666770767776707677776076777760767777607766667 -- 141:0000000077777770777777707777777077777770777777777677777777777777 -- 142:0000000066666666666666666666666600000000777777777777777777777777 -- 143:0000000066666070666660706666607000000070777777707777777077777770 -- 144:1a80088be2800b8822800888e280088b22800b88e220022221a001a2ea100a12 -- 145:88888888b88b8b888b8888b8888b888888888b8b12222222a1a1a1a21a1a1a12 -- 146:0776777707767777077677770776777707677777076777770777777700000000 -- 147:7677666676777776767777677677767767776777677666667777777700000000 -- 148:7766667777777677777767767776777677677776766666767777777700000000 -- 149:7667777067767770777767706666677077776770777767707777777000000000 -- 150:2220022222200222222002222220022222200222222002222220022222200222 -- 151:1a12222222a222222212222222a222222212222222222222a1a1a1a21a1a1a12 -- 152:2222222222222222222222222222222222222222444444444444444444444444 -- 153:222002222220022222200222222002222220022212200222a000000200000000 -- 154:222222222222222222222222222222222222222212222222a1a1a1a21a1a1a12 -- 155:11111000111100331110a033110a903310a9a0330a9a903309a9a0330a9a9033 -- 156:0000000033333333333333333333333333333333333333333333333333333333 -- 157:000000000a9a9a9a09a9a9a90a9a9a9a09a9a9a90a9a9a9a09a9a9a90a9a9a9a -- 158:001111119a001111a9a904449a9a9004a9a9a9a09a9a9a9aa9a9a9a99a9a9a9a -- 159:111111111111111111111111111111111111111100111111090111110a900111 -- 160:1111111111111111444444444444444444444444444444441111111111111111 -- 161:09a9a0330a9a903309a9a0330000000003333333033333330333333303333333 -- 162:3333333333333333333333330000000033333333333333333000000301111110 -- 163:3333333333333333333333330000000033333333333333333333333333333333 -- 164:09a9a9a90a9a9a9a09a9a9a90000000003333333033333330333333303333333 -- 165:a9a9a9a99a9a9a9aa9a9a9a90000000033333333333333333333333333333333 -- 166:09a9a0110a9a9a0109a9a9a00000000033333333333333333000000301111110 -- 167:1111111111111111111111110011111133001111333301113333300133333330 -- 168:0333333003333301033333010333330103333301000000011111111111111111 -- 169:1100001110555501055005500506605005066050055005501055550111000011 -- 170:0333333310333333103333331033333310333333100000001111111111111111 -- 171:0333333303333333033333330333333303333333000000001111111111111111 -- 172:3333333033333301333333013333330133333301000000011111111111111111 -- 173:0333333010333330103333301033333010333330100000001111111111111111 -- 174:111111111111111111111111111111111111111112222222a1a1a1a21a1a1a12 -- 175:1111111111111111111111111111111111111111444444444444444444444444 -- 176:00000000c111111001101010c131311001101010c101311001111110c0000000 -- 177:0000000001111111010100100111111101000100011111110133133300000000 -- 178:0000000011111111001000011111111110010001111111111333313300000000 -- 179:11111111111111111111111111111111111100001110b161110b100010810101 -- 180:1111111111111111111111111111111101111111b01111110001111101011111 -- 181:111111111000111000880110080880100b08801008b080100b80801010b80010 -- 182:081b01010081b00011001b1b11110000111111111111110111111080111108b0 -- 183:01011111000111111b0111110011111111111111111111111111111111111111 -- 184:1111111111111100111110081111108011111010111110811111101811111101 -- 185:110b80100110801080110000b80111108b80111008b801100b1b011080b18010 -- 186:11108b801108b801008b80111100011111111111111111101111100111110818 -- 187:1111111111111111111111111111111111111111000111118001111108011111 -- 188:0000000004444444040010040440404404404004044040440440400404444444 -- 189:0000000044444444044001000440440404400404044044040040040444444444 -- 190:0000000044444444404040044040404044004004444040444000404444444444 -- 191:0000000044444444400410444044044440040004404444044004001444444444 -- 192:0000000044444440444444404444444044444440444444404444444044444440 -- 193:0000000002222222020000000200000002000000020000000200000002000000 -- 194:0000000022222222000000000000000000000000000000000000000000000000 -- 195:0000000022222220000000100000001000000010000000100000001000000010 -- 196:3333999933339999333399993000000002222222000000000444444404111111 -- 197:3333999933339999333399990000000922222203000000004440d6d011201110 -- 198:3333999933339999333399993333999999993333999933339999333399993333 -- 199:0000000001111110031010100310111001101010031110100310111003101010 -- 200:1111110811111101111111101111111011111111111111111111111111111111 -- 201:180b8010810180101810b0108180101008180010108100101108101011108010 -- 202:111081801110180811018081110810b8101801801080b8011008101100100111 -- 203:8b011111b8011111801111110111111111111111111111111111111111111111 -- 204:0440000404404444044040040440440404440014044444440444444404444444 -- 205:4001404404404004000040400440404404404044444444444444444444400000 -- 206:4040041000404404404004004040444440400400444444444404444400044444 -- 207:4444000044440222044402220444022214440222444402224444000044444444 -- 208:00000040e222204022222040e222204022222040e22220400000004044444440 -- 209:0200000002000000020000000200000002000000020000000200000002000000 -- 210:0000001000000010000000100000001000000010000000100000001000000010 -- 211:0444444404111111044444440411111104444444000000000111111100000000 -- 212:4440222011201110444024201120444044402420000000001111111000000000 -- 213:0111101003101010031011100311101003101010011010100310101003111110 -- 214:1000000000606000060606060000000010565656106565651106565611100000 -- 215:0000000100606060060606000000000055555501555555015555501100000111 -- 216:0444444404444044044404040440440004404404044044440444444400000000 -- 217:4404444440444444044444404444440444444440444444444444444400000000 -- 218:4404444440444004044404404444044400004440444444444444444400000000 -- 219:4444440044444402404444000044441044044444444444104444444400000000 -- 220:0000444022204440000044401101444000444440440144404444444000000000 -- 221:0200000002000000020000000200000002000000020000000211111100000000 -- 222:0000000000000000000000000000000000000000000000001111111100000000 -- 223:000000000000000000000000000000000000000000000000111dd11100000000 -- 224:00000010c000001000000010c000001000000010c000001011111110c0000000 -- 225:3333333333333333333333333333333313131313313131311313131331313131 -- 226:0203333302033333020333330203333302031313020131310203131300013131 -- 227:3333302033333020333330203333302013131020313130201313102031313000 -- 228:0000000011111111111111111111111111111111111111111111111100000000 -- 229:3000000004444444044044440440444404404444044044440444444430000000 -- 230:0000000344444240444424204444424044442420444442404444242000000001 -- 231:333333303333330033333090333309901310999031099d901099199009919790 -- 232:3333333333333333333333333333333313130000313011001313000331313131 -- 233:0000000002222222022222220222200202220440022204440220444402204414 -- 234:0000000022222220100001202100002002222220400222204440022044444020 -- 235:3333333333333033333301033333010313130103313101011313010331310101 -- 236:0204414402200441022220040222222002222222022222220222200002220111 -- 237:1444402044140220444402204144022000402220220222200222222010222220 -- 238:3333330033333022333302223333022213130222313102221313101231313100 -- 239:0003010322200103222201032222010322220103222201012210101300013131 -- 240:02220111c222001102220000c222033302220333c222200002222222c2222222 -- 241:1002222001202220002022203002222031222220022222202222222022222220 -- 242:3333333333333330333333033333113313130013313100311313131331313131 -- 243:0333333300333333030333330331133303100313113001310013131300313131 -- 244:022222200222220002222090022209900220999002099d900099199009919790 -- 245:2222222022222220222222202222222022220000222011002212000021222220 -- 246:0000000001111111000000000103333301031313010131310103131300013131 -- 247:0000000011111110000000003333301013131010313130101313101031313000 -- -- -- 002:00000000000000000000444400044444000444440044ffff004fffff004f3333 -- 003:0000000000000000441600004242600044241000ff426000fff4100033f26000 -- 004:00000333000035550003655500365555003555ff00356fff00365f3f00355fff -- 005:33000000553000005563000055563000ff553000fff53000f3f63000fff53000 -- 016:0000000000000000000000000000003000000353000035350003535100353535 -- 017:0000000000000000000000003000000053300000151300005151300015151300 -- 018:004f99ff000fffff0000ff3300000fff00003666000355550035652503163555 -- 019:99f41000fff26000ff600000f600000063300000555330005555530055535530 -- 020:00356f6f003655f60365511f3653122f3531222f363221220532232203322322 -- 021:f6f530006f563000f1156300f2215300f2226300221233002232130022121300 -- 032:0033535100353533003351ff00351f3f0003ff3f0003ffff00003ff3000323ff -- 033:5555530033555300ff155300f3f15300f3ff3000ffff30003ff30000ff323000 -- 034:036135250316355503613525031633110333331103f333330333333300033333 -- 035:55565530555355305556553013335530133333303333ff303333333033330000 -- 036:00322322003223330033331a003ff31a003ff3a1003333a100003a1a00003a1a -- 037:223213003332130011133300111f300011133000111300001113000011130000 -- 048:00323123003231430032314300313339000f3333000033300000333000033330 -- 049:324303003443030034430300933313003333f000033300000333000003333000 -- 050:0003333000033330000333300003333000053530003311300031113000333330 -- 051:3333000033330000333300003333000035350000311330003111300033333000 -- 052:000031a1000031a100003a1a00003a1a00003333000003f3000003f300000330 -- 053:111300001113000011130000111300003333000003f3000003f3000003300000 -- -- -- 000:ffffffffff0010201020102010201020102010201020102000ffffffffff40404040404087f3f3f3f397a7b7c7d7a7e7f70818a7b7c7d7a7b7c7d7a70b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 001:ffffffffff0040404040404040404040404040404040404000ffffffffff40404040404087f3f3f3f328a7384858a76878f388a7384858a7384858a70b40403b4b4040404040404040404040404040404040404040404040400b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 002:ffffffffff00406070408090a040b0c0d0e0f001f001112100ffffffffff984098409840a8f3f3f3f3b8a7a7a7a7a7c8d8e8f8a7a7a7a7a7a7a7a7a70b405b6b7b4040404040404040404040404040d0e0f001f001f00111210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 003:ffffffffff004031414051617140814091a1b1b1b1b1c1d100ffffffffff984098409840a8f3f3f3f3091919191919293949591919191919191919190b8b9babbb4040cbdbebfb0c401c2c2c2c3c4091a14c5c6c6c6c6cc1d10b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 004:ffffffffffe140f1024012223240814042a15262728292a2e1ffffffffff984098409840a8f3f3f3f369f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f37c8c9cacbc7282ccdcecfc0d401d3030302d4042a13d4d7282728292a27c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 005:ffffffffffb240c2d240e2f203132333435363738393a3b3b2ffffffffff984098409840a8f3f3f3f369f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f35d406d7d40e3958d9dadbdcd40ddedfded0e404353839383938393a3b35d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 006:ffffffffffe1c3d3c3d3e3f30414c3d32434445410201020e1ffffffffff404040404040798989898999a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a97c1e1e1e1e44542e1e1e1e3e1e444e4e4e541e243444544454445444547c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 007:ffffffffffb264748494a4b4c4d46494649464940040e4f4b2ffffffffff4040404040404040404040404040404040404040404040404040404040405d1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 008:ffffffffffe1c30515d325d33545c3d355d3c3d365b17585e1ffffffffff4040404040404098989898404040404040404040404040404040404040407c1e7e8e1e1e1e9eae1ebe1e1e1e1e1e1e1e1e72821ebe1e72821ebe1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 009:ffffffffffb264e395a5b594e39564c5d5946494e5b1b1f5b2ffffffffff4040404040404040404040404040404040404040404040404040404040405d1e05151ebe1ecedeeefe1e1e1e1e1e1e1e1ee395eefe1ee395eefe1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 010:ffffffffffe1c306162636d34656c395d5d3c3d376b1b1b1e1ffffffffff404040404040409898989840b9c9c9d9e9f90a0a0a0a4040400a0a0a0a407c1ee395eefe1e0f1f2f3f1e1e1e1e1e1e1e1ee3952f3f1ee3952f3f1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 011:ffffffffffb264946494649464948696a694649410201020b2ffffffffff4040404040404040404040401a2a3a4a5a6a7a40404040404040404040405d1ee3952f3f1e4f5f1ebe1e1e1e1e1e1e1e1ee3951ebe1ee3951ebe1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 012:ffffffffffe1c37282d3c3d3c3d3b6c6d6d3c3d300e6f607e1ffffffffff4040404040404098989898408a9aaabaca9ada40404040404040404040407c1e4f5f1ebe1e0515eefe1e1e1e1e1e1e1e1ee395eefe1ee395eefe1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 013:ffffffffffb264e395946494649464946494649465172737b2ffffffffffeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea5d1e0515eefe1e6f7f2f3f1e1e1e1e1e1e1e1e6f7f2f3f1e6f7f2f3f1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 014:ffffffffffe1c34454d3c3d3c3d3c3d3c3d3c3d3e5b14757e1fffffffffff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f37c1e6f7f2f3f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 015:ffffffffffb2649464946494649464946494649476b1b1b1b2fffffffffff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f35d1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e5d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- 016:ffffffffff0010201020766777001020102010201020102000fffffffffff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f30b1b2b1b2b7667776777761b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b1b2b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- -- -- 000:060006400600064006000640060006400600060006000600060006000600060006000600060006000600060006000600060006000600060006000600300000000900 -- 016:05000500050005400540054005700570057005400540054005700570057005c005c005c005c005c005c005c005c005c005c005c005c005c005c005c0470000000000 -- 017:040004000400040004000400046004600460046004600460146024c034c054c064c084c0a4c0b4c0c4c0c4c0d4c0d4c0e4c0f4c0f4c0f4c0f4c0f4c0400000000000 -- 018:04c004c004c004c004c004c0046004600460046004600460240034005400640084009400a400b400c400d400d400e400e400e400f400f400f400f400300000000000 -- 019:0400040004000400040004d014d014d024d034d054d074d094d0b4d0c4d0e4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0f4d0400000000000 -- 020:090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900500000000000 -- 021:01000100010001000100f10001100110011001100110f11001200120012001200120f1201130113011302130213021302130313041308130a130d130380000000000 -- 032:010001100100011001000110010001100100010001000100010001000100010001000100010001000100010001000100010001000100010001000100301000000800 -- 033:000000010002000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d40000000004 -- 044:0600f6000620f6000600f6000610f600f600f6000600f600f600f600f6000600060006000600060006000600060006000600060006000600060006004600000f0f00 -- 045:0000f0000020f0000000f0000010f000f000f0000000f000f000f000f0000000000000000000000000000000000000000000000000000000000000004600000f0f00 -- 057:000000010002000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d40000000004 -- 058:41004110410041104100411041004110c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100c100100000080800 -- 059:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000 -- 060:220022002200820082008200820082008200820082008200820082008200820082008200820082008200820082008200820082008200820082008200100000000000 -- 061:9f009f00bf00df00df00ef00ef00ef00ef00ef00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00400000000000 -- 062:00000100010001000100510081008100910091009100a100a100a100a100a100b100b100b100b100c100c100c100d100d100d100e100e100e100f100484000000000 -- 063:00b000100000000000000000100060009000b000c000d000d000e000e000e000f000f000f000f000f000f000f000f000f000f000f000f000f000f000405000000000 -- -- -- 000:bcceefceedddddc84333121268abaa99 -- 001:6789bdd96adc83248dd6334adda7578b -- 002:0123456789abcdef0123456789abcdef -- 003:224578acdeeeeddcba95434567653100 -- 004:00000000ffffffff00000000ffffffff -- 005:0123456789abcdeffedcba9876543210 -- 006:0123456789abcdef0123456789abcdef -- 007:76543210123456789abcdefedcba9878 -- 008:0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f -- 009:fff000fff000fff000fff000fff000ff --