this logo: 245 b

← OUT OF OFFICE v1

index.html

<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"><title>OUT OF OFFICE</title>
<style>html,body{margin:0;height:100%;background:#000;overflow:hidden}canvas{position:fixed;inset:0;width:100%;height:100%;display:block}
#sp{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3vmin;background:#008080;color:#fff;font:14px/1.4 "MS Sans Serif",Tahoma,Geneva,sans-serif;text-align:center;z-index:2}
#win{background:#c0c0c0;color:#000;border:2px solid;border-color:#fff #404040 #404040 #fff;box-shadow:1px 1px 0 #000;width:min(86vw,400px);text-align:left}
#bar{background:linear-gradient(90deg,#000080,#1084d0);color:#fff;font-weight:700;padding:4px 8px;letter-spacing:.02em}
#bd{padding:18px 16px 14px}#bd b{display:block;font-size:22px;letter-spacing:.14em;margin-bottom:6px}
#go{display:block;margin:16px auto 0;font:inherit;font-weight:700;padding:7px 30px;background:#c0c0c0;color:#000;border:2px solid;border-color:#fff #404040 #404040 #fff;outline:1px solid #000;cursor:pointer}
#go:active{border-color:#404040 #fff #fff #404040}#go:disabled{color:#808080;cursor:default}
#msg{font-size:12px;opacity:.85;min-height:1.4em}</style></head><body>
<canvas id="g"></canvas>
<div id="sp"><div id="win"><div id="bar">Screen Saver</div><div id="bd"><b>OUT OF OFFICE</b>A screensaver escapes the office.<br>Sound on. Do not move the mouse.<button id="go" disabled>WAIT</button></div></div><div id="msg">warming up the tube</div></div>
<script>var PRE="#version 300 es\nprecision highp float;precision highp sampler3D;uniform vec2 R;uniform float T,B,LB,L,OA;uniform vec4 K;uniform sampler2D X,N,O;uniform sampler3D P;out vec4 o_;\n#define PI 3.14159265\n#define TAU 6.2831853\n#define sat(x) clamp(x,0.,1.)\nfloat h11(float p){p=fract(p*.1031);p*=p+33.33;p*=p+p;return fract(p);}float h21(vec2 p){vec3 q=fract(vec3(p.xyx)*.1031);q+=dot(q,q.yzx+33.33);return fract((q.x+q.y)*q.z);}float h31(vec3 p){p=fract(p*.1031);p+=dot(p,p.zyx+31.32);return fract((p.x+p.y)*p.z);}vec2 h22(vec2 p){vec3 q=fract(vec3(p.xyx)*vec3(.1031,.1030,.0973));q+=dot(q,q.yzx+33.33);return fract((q.xx+q.yz)*q.zy);}vec3 h33(vec3 p){p=fract(p*vec3(.1031,.1030,.0973));p+=dot(p,p.yxz+33.33);return fract((p.xxy+p.yxx)*p.zyx);}float vn(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);return mix(mix(h21(i),h21(i+vec2(1,0)),f.x),mix(h21(i+vec2(0,1)),h21(i+1.),f.x),f.y);}float fbm(vec2 p){float a=.5,s=0.;for(int i=0;i<4;i++){s+=a*vn(p);p=p*2.03+7.1;a*=.5;}return s;}mat2 rot(float a){float c=cos(a),s=sin(a);return mat2(c,-s,s,c);}float sdBox(vec3 p,vec3 b){vec3 q=abs(p)-b;return length(max(q,0.))+min(max(q.x,max(q.y,q.z)),0.);}float sdRBox(vec3 p,vec3 b,float r){return sdBox(p,b-r)-r;}float sdBox2(vec2 p,vec2 b){vec2 q=abs(p)-b;return length(max(q,0.))+min(max(q.x,q.y),0.);}float sdCap(vec3 p,vec3 a,vec3 b,float r){vec3 pa=p-a,ba=b-a;return length(pa-ba*sat(dot(pa,ba)/dot(ba,ba)))-r;}float sdSeg2(vec2 p,vec2 a,vec2 b){vec2 pa=p-a,ba=b-a;return length(pa-ba*sat(dot(pa,ba)/dot(ba,ba)));}float smin(float a,float b,float k){float h=sat(.5+.5*(b-a)/k);return mix(b,a,h)-k*h*(1.-h);}float tri(float x){return abs(fract(x*.5)*2.-1.);}vec3 hue(float h){return .5+.5*cos(TAU*(h+vec3(0,.33,.67)));}vec3 heroCol(float n){n=mod(floor(n),6.);return n<1.?vec3(.2,.75,1):n<2.?vec3(1,.25,.55):n<3.?vec3(1,.8,.15):n<4.?vec3(.3,1,.45):n<5.?vec3(.7,.4,1):vec3(1,.45,.15);}vec3 ray(vec2 fc,vec3 ro,vec3 ta,float z,float roll){vec2 p=(fc*2.-R)/R.y;p*=rot(roll);vec3 f=normalize(ta-ro),r=normalize(cross(f,vec3(0,1,0))),u=cross(r,f);return normalize(p.x*r+p.y*u+z*2.*f);}float pglow(vec3 ro,vec3 rd,vec3 p,float tmax){float t=clamp(dot(p-ro,rd),0.,tmax);vec3 d=ro+rd*t-p;return 1./(dot(d,d)*40.+.02);}vec4 atl(vec2 u,vec4 r){return texture(X,(r.xy+vec2(u.x,1.-u.y)*r.zw)/1024.);}vec3 hero(vec3 ro,vec3 rd,vec3 p,float tmax,float n){float t=dot(p-ro,rd);if(t<0.)return vec3(0);vec3 d=ro+rd*t-p;float d2=dot(d,d),v=smoothstep(tmax+.3,tmax-.1,t);vec3 k=heroCol(n);return v*(mix(k,vec3(1),.65)*smoothstep(.07,.035,sqrt(d2))*5.+k*.006/(d2+.004));}\n",SV="vec3 svStars(vec2 u,float t){vec2 p=(u-.5)*vec2(1.333,1.);vec3 c=vec3(0);for(int i=0;i<70;i++){float f=float(i),z=fract(h11(f*1.7)-t*(.12+.1*h11(f+9.)));vec2 d=(h22(vec2(f,f*.37))-.5)*2.4,s=d/(z*3.+.05)*.33;float r=.0016/(z+.08);c+=smoothstep(r,r*.3,length(p-s))*(1.-z)*(1.-z);}return c*vec3(.9,.95,1.)*1.3;}vec2 svV(float i,float t){vec2 h=h22(vec2(i,i*7.3)+3.);return vec2(tri(t*(.17+.2*h.x)+h.y*9.),tri(t*(.21+.2*h.y)+h.x*5.))*.94+.03;}vec3 svMyst(vec2 u,float t){vec3 c=vec3(0);vec2 p=u*vec2(1.333,1.);for(int g=0;g<2;g++)for(int e=0;e<5;e++){float tt=t-float(e)*.13,gg=float(g);vec3 k=hue(t*.05+gg*.45+float(e)*.012)*(1.-float(e)*.17);vec2 a=svV(gg*4.+3.,tt)*vec2(1.333,1.);for(int i=0;i<4;i++){vec2 b=svV(gg*4.+float(i),tt)*vec2(1.333,1.);c+=k*smoothstep(.0045,.0012,sdSeg2(p,a,b));a=b;}}return min(c,1.5);}vec3 svBpos(float t){float a=t*.31+.13,b=t*.23+.37;return vec3(tri(a)*.84+.08,tri(b)*.8+.1,floor(a)+floor(b));}vec3 svBounce(vec2 u,float t){vec3 b=svBpos(t);vec2 p=(u-b.xy)*vec2(1.333,1.);float d=length(p);vec3 k=heroCol(b.z);return k*(smoothstep(.055,.05,d)*.9+smoothstep(.008,.0,abs(d-.068))*1.2+.012/(d*d+.01));}vec3 svRain(vec2 u,float t){vec2 g=vec2(48.,36.),id=floor(u*g),f=fract(u*g);float sp=.25+.5*h11(id.x*3.1),y=fract(u.y+t*sp+h11(id.x)*7.),hd=smoothstep(.06,.0,y);vec2 q=floor(f*vec2(5.,7.));float ch=step(.5,h21(id*7.+q+floor(t*(2.+3.*h21(id)))*.37))*step(q.x,3.)*step(q.y,5.)*step(.5,q.x)*step(.5,q.y);return ch*(vec3(.1,1.,.35)*pow(1.-y,3.)*.9+vec3(.7,1.,.8)*hd);}vec3 saver(int k,vec2 u,float t){return k==0?svStars(u,t):k==1?svMyst(u,t):k==2?svBounce(u,t):k==3?svRain(u,t):atl(u,vec4(0,0,1024,768)).rgb;}\n",POST="void main(){vec4 c=vec4(0);mainImage(c,gl_FragCoord.xy);vec4 t=texture(O,gl_FragCoord.xy/R);c.rgb=mix(max(c.rgb,0.),t.rgb*.92,t.a*OA);o_=vec4(min(c.rgb,64.),1);}\n",FX={down:"#version 300 es\nprecision highp float;uniform sampler2D S;uniform vec2 I,P;uniform float TH;out vec4 o;void main(){vec2 u=gl_FragCoord.xy*I;vec3 c=texture(S,u).rgb*4.+texture(S,u+P).rgb+texture(S,u-P).rgb+texture(S,u+vec2(P.x,-P.y)).rgb+texture(S,u-vec2(P.x,-P.y)).rgb;c*=.125;if(TH>0.){float l=max(c.r,max(c.g,c.b));c*=smoothstep(TH*.7,TH*1.8,l)/(1.+l*.15);}o=vec4(c,1);}\n",up:"#version 300 es\nprecision highp float;uniform sampler2D S,D;uniform vec2 I,P;out vec4 o;void main(){vec2 u=gl_FragCoord.xy*I;vec3 c=(texture(S,u+vec2(P.x*2.,0)).rgb+texture(S,u-vec2(P.x*2.,0)).rgb+texture(S,u+vec2(0,P.y*2.)).rgb+texture(S,u-vec2(0,P.y*2.)).rgb)+2.*(texture(S,u+P).rgb+texture(S,u-P).rgb+texture(S,u+vec2(P.x,-P.y)).rgb+texture(S,u-vec2(P.x,-P.y)).rgb);o=vec4(c/12.+texture(D,u).rgb,1);}\n",fin:"#version 300 es\nprecision highp float;\n#define sat(x) clamp(x,0.,1.)\nuniform sampler2D S,D;uniform vec4 V,Q;uniform float T,BL,MM;out vec4 o;float h(vec2 p){vec3 q=fract(vec3(p.xyx)*.1031);q+=dot(q,q.yzx+33.33);return fract((q.x+q.y)*q.z);}void main(){vec2 f=gl_FragCoord.xy,u=(f-V.xy)/V.zw;o=vec4(0,0,0,1);if(u.x<0.||u.x>1.||u.y<0.||u.y>1.)return;vec2 c=u-.5;float cr=Q.x,m=1.;u.x+=MM*.02*sin(u.y*40.+T*50.);if(cr>0.){vec2 a=c*vec2(1.,V.w/V.z*1.33);c*=1.+cr*.22*dot(a,a);c/=1.+cr*.045;u=c+.5;vec2 e=abs(c)-.5+.03;m=mix(1.,smoothstep(.0,-.012,length(max(e,0.))-.03),sat(cr*2.));}float ca=Q.w+cr*.0015+MM*.004;vec2 d=c*ca*(.5+dot(c,c)*2.);vec3 col=vec3(texture(S,u+d).r,texture(S,u).g,texture(S,u-d).b);vec3 bl=vec3(texture(D,u+d).r,texture(D,u).g,texture(D,u-d).b);col+=bl*BL*(1.+cr);if(cr>0.){float ln=min(V.w/3.,300.),s=.5+.5*cos(u.y*ln*6.2832);col*=mix(1.,.55+.6*s,cr*.8);int k=int(mod(f.x,3.));vec3 mk=vec3(k==0?1.:.72,k==1?1.:.72,k==2?1.:.72);col*=mix(vec3(1),mk*1.22,cr*.5);col*=1.+cr*.03*sin(T*110.);}col*=Q.y;col+=Q.z;col=col*(2.51*col+.03)/(col*(2.43*col+.59)+.14);col=pow(sat(col),vec3(.4545));float v=1.-dot(c,c)*(.75+cr*.5);col*=mix(1.,v,.8);col+=(h(f+fract(T)*913.)-.5)*.035;o=vec4(col*m,1);}\n"},SCN={};
var SONG_SRC="var BPM=120,ENDB=336,SONG=(function(){\nvar ev=[],hit=[[],[],[]],lead=[],NN={C:0,D:2,E:4,F:5,G:7,A:9,B:11},t,i,c,\nCH={Dm:[38,3],Bb:[34,4],F:[41,4],C:[36,4],Gm:[43,3],A:[45,4],D:[38,4]},\nSEC=[['desk',0,0,'Dm Dm Bb Bb F F C C'],['inside',32,0,'Dm Dm Bb Bb F F C A'],['breakout',64,0,'Dm Bb F C Dm Bb F C'],\n['pipes',96,0,'Dm F Gm C Dm F Bb C'],['maze',128,0,'Dm Dm Bb Bb Gm Gm A A'],['window',160,0,'Dm Dm Bb Bb F F C A'],\n['city',192,0,'Dm Bb F C Dm Bb F C'],['city2',224,2,'Dm Bb F C Dm Bb F C'],['stars',256,2,'F C Dm Bb F C Dm Bb/C'],\n['end',288,2,'Dm Bb F C Dm Bb F C Bb C D D']],\nM=['A4:2 D5:2 F5:2 E5:1 D5:1','F5:3 D5:3 A#4:2','A4:2 C5:2 F5:2 G5:1 A5:1','G5:3 E5:3 C5:2','A4:2 C5:2 F5:2 A5:1 C6:1','G5:3 E5:3 G5:2'],\nMA=[M[0],M[1],M[2],M[3],M[0],M[1],M[4],M[5]].join(' '),\nST='C5:2 F5:2 A5:2 G5:1 F5:1 G5:3 E5:3 C5:2 A4:2 D5:2 F5:2 G5:1 A5:1 A#5:3 F5:3 D5:2 C5:2 F5:2 A5:2 G5:1 F5:1 G5:3 C6:3 G5:2 A4:2 D5:2 F5:2 A5:1 D6:1 D6:4 E6:4',\nWI='A4:4 D5:4 F5:4 E5:2 D5:2 F5:6 D5:6 A#4:4 A4:4 C5:4 F5:4 G5:2 A5:2 G5:4 E5:4 A5:6',\nHINT='A4:4 D5:4 F5:8 F5:4 D5:4 A#4:8 A4:4 C5:4 F5:8 G5:4 E5:4 C5:4',\nP=[0,2,3,2,4,2,3,2,0,2,3,2,5,2,3,2],P2=[0,2,3,2,4,2,3,-1,0,2,3,2,5,3,4,-1],\nRIFF=[0,-1,0,3,-1,0,2,-1,0,-1,3,0,2,-1,1,2],ACID=[0,0,3,0,-1,2,0,3,0,-1,3,0,1,0,3,2],BL=[0,1,2,1,0,1,2,3,0,1,2,3,0,1,2,3];\nSEC.forEach(function(s){s[3]=s[3].split(' ')});\nfunction E(t,y,n,v,d){v=v==null?1:v;ev.push([t,y,n||0,v,d||0]);if(y<3&&v>=.45)hit[y].push(t)}\nfunction mid(s){return NN[s[0]]+(s[1]=='#'?1:0)+12*(+s[s.length-1]+1)}\nfunction chord(b){for(var i=SEC.length-1;i>0&&SEC[i][1]>b;)i--;var s=SEC[i],c=s[3][Math.min(s[3].length-1,Math.floor((b-s[1])/4))].split('/');\nc=c[c.length>1&&b%4>=2?1:0];return{r:CH[c][0]+s[2],q:CH[c][1],nm:c,tr:s[2],sec:s[0]}}\nfunction inCh(c,n){n=((n-c.r)%12+12)%12;return n==0||n==c.q||n==7}\nfunction tone(c,k,base){var a=[0,c.q,7].map(function(x){var n=c.r+x;while(n<base)n+=12;while(n-12>=base)n-=12;return n}).sort(function(x,y){return x-y});\nreturn a[k%3]+12*Math.floor(k/3)}\nfunction mel(t,s,y,v,o,h){s.split(' ').forEach(function(x){x=x.split(':');var d=x[1]/2,c,n,m;if(x[0]!='-'){c=chord(t);n=mid(x[0])+c.tr+(o||0);E(t,y,n,v,d*.92);\nif(h){for(m=n-3;!inCh(c,m);)m--;E(t,y,m,v*h,d*.92)}lead.push([t,n,d,y])}t+=d})}\nfunction drums(a,b,ke,oh,hv){for(var t=a;t<b;t++){if(t<ke)E(t,0,0,1);if(t%4==1||t%4==3)E(t,1,0,1);\nE(t+.5,3,oh,.8*hv);E(t,3,0,.3*hv);E(t+.25,3,0,.22*hv);E(t+.75,3,0,.3*hv)}}\nfunction roll(a,b,st,v0,v1){for(var t=a;t<b-1e-9;t+=st)E(t,1,0,v0+(v1-v0)*(t-a)/(b-a))}\nfunction toms(t,a){a.forEach(function(n,i){E(t+i/2,5,n,.85)})}\nfunction arp(a,b,base,v0,v1,pat){for(var t=a;t<b;t+=.25){var k=(pat||P)[(t*4)%16|0];if(k>=0)E(t,12,tone(chord(t),k,base),(v0+(v1-v0)*(t-a)/(b-a))*((t*4)%4?.75:1),.2)}}\nfunction pads(a,b,y,v,g){for(var t=a,c,e,n;t<b;t=e){c=chord(t);e=t+2;while(e<b&&chord(e).r==c.r&&chord(e).q==c.q)e+=2;\nfor(n=c.r;n<45;)n+=12;E(t,y,n,v,e-t-g);for(n=0;n<3;n++)E(t,y,tone(c,n,57),v,e-t-g)}}\nfunction bassRoll(a,b){for(var t=a,s,n;t<b;t++)for(s=1;s<4;s++){n=chord(t).r;if(t%4==3&&s==2)n+=12;E(t+s/4,10,n,[0,.9,.7,.85][s],.2)}}\nfor(t=0;t<32;t++)E(t,6,t%2,.5);\npads(0,32,8,.6,0);mel(2,HINT,13,.5,12);E(16,16,0);arp(16,32,62,.25,.4);\npads(32,64,8,.7,0);arp(32,64,62,.4,.9);mel(34,'A4:4 D5:4 F5:8 F5:4 D5:4 A#4:4',13,.5,12);\nfor(t=40;t<64;t++){E(t+.5,3,0,.6);if(t>=56){E(t+.25,3,0,.25);E(t+.75,3,0,.25)}}\nfor(t=48;t<60;t++)E(t,0,0,.5+.3*(t-48)/12);\nfor(t=48;t<64;t+=4)E(t,10,chord(t).r,.6,3.6);\nfor(t=48;t<64;t++)if(t%4!=3)E(t,2,tone(chord(t),BL[t-48],77),.9);\nroll(60,62,.5,.3,.5);roll(62,63,.25,.5,.75);roll(63,64,.125,.7,1);E(56,16,3,.8,8);\nE(64,16,1);E(64,4);E(80,4,0,.7);drums(64,96,96,0,1);pads(64,96,7,1,.15);bassRoll(64,96);mel(64,MA,11,1);arp(64,96,74,.3,.3);\nE(79.5,1,0,.5);E(79.75,1,0,.6);toms(94,[52,48]);roll(95,96,.25,.5,1);\nE(96,4);E(112,4,0,.7);drums(96,128,126,0,1);arp(96,128,62,.9,.9,P2);\nfor(t=96;t<126;t+=.25){i=RIFF[(t*4)%16|0];if(i>=0)E(t,10,tone(chord(t),i,chord(t).r),.9,.2)}\nfor(t=96;t<128;t+=4)for(i=0;i<3;i++){c=tone(chord(t),i,60);E(t+1.5,9,c,.8,.3);E(t+2.5,9,c,.5,.15);E(t+3.5,9,c,.7,.3)}\nmel(112,M[0],11,.8);mel(120,M[1],11,.8);E(111.5,1,0,.5);E(111.75,1,0,.6);\ntoms(124,[57,53,50,45]);roll(126,128,.25,.4,1);E(124,16,3,.5,4);\nE(128,4);E(144,4,0,.6);drums(128,159,159,0,.8);\nfor(t=128;t<159;t+=.25){i=(t*4)%16|0;if(ACID[i]>=0)E(t,15,tone(chord(t),ACID[i],chord(t).r),[1,0,0,1,0,0,1,0,0,0,1,0,1,0,0,0][i]?1:.6,.2)}\nfor(t=128;t<159;t++)E(t+.5,10,chord(t).r,.7,.35);\nfor(t=128;t<160;t+=4){c=chord(t);for(i=0;i<3;i++)E(t,9,tone(c,i,57),1,.5);E(t,5,41,.9);\nif(t%8==4&&t<156)for(i=0;i<3;i++){E(t+2.5+i/2,11,tone(c,5-i,69),.6,.4);lead.push([t+2.5+i/2,tone(c,5-i,69),.5,11])}}\nE(143.5,1,0,.5);E(143.75,1,0,.6);toms(156,[50,45]);roll(157,159,.25,.4,1);E(159,16,4);\npads(160,192,8,.6,0);mel(160,WI,11,.5);mel(160,WI,13,.5,12);arp(168,192,62,.2,.45);\nE(176,10,chord(176).r,.3,7.8);E(184,10,chord(184).r,.35,3.8);E(188,10,chord(188).r,.4,2.8);\nE(184,16,3,1,7);roll(184,188,1,.35,.5);roll(188,190,.5,.5,.7);roll(190,191,.25,.7,1);E(191,16,5);\nE(192,16,2);E(192,16,1);E(192,4);E(208,4,0,.7);E(224,4);E(224,16,2,.7);E(240,4,0,.7);\ndrums(192,248,248,1,1);drums(248,256,252,0,.5);pads(192,256,7,1,.15);bassRoll(192,248);\nmel(192,MA,11,1,0,.6);mel(224,MA,11,1,0,.6);mel(224,MA,11,.4,12);arp(192,224,74,.4,.4);arp(224,256,74,.6,.6);\nE(207.5,1,0,.5);E(207.75,1,0,.6);toms(222,[52,48]);roll(223,224,.25,.5,1);E(239.5,1,0,.5);E(239.75,1,0,.6);\nE(248,16,3,.8,8);toms(252,[59,55,52,47]);roll(254,256,.25,.4,1);\nE(256,4);E(256,16,2,.7);E(272,4,0,.7);drums(256,288,288,1,1);pads(256,288,7,1,.15);bassRoll(256,288);\nmel(256,ST,11,1,0,.6);mel(256,ST,11,.35,12);arp(256,288,74,.55,.55);E(271.5,1,0,.5);E(271.75,1,0,.6);toms(286,[54,50]);roll(287,288,.25,.5,1);\nE(288,4,0,.5);pads(288,328,8,.6,0);mel(288,MA,13,.9,12);mel(288,MA,14,.3);\nmel(320,'D5:2 F5:2 A#5:2 D6:2 E5:2 G5:2 C6:2 E6:2',13,.9,12);mel(320,'D5:2 F5:2 A#5:2 D6:2 E5:2 G5:2 C6:2 E6:2',14,.3);\nfor(t=288;t<328;t+=4)E(t,10,chord(t).r,.3,3.5);\nfor(t=288;t<328;t+=2)if(t%8!=2&&t!=326)E(t,2,tone(chord(t),[0,2,1,2][(t-288)/2%4],74),.6);\nc=chord(328);E(328,2,tone(c,0,86),1);E(328,0);E(328,1);E(328,4);E(328,16,2,.9);E(328,10,c.r,1,2.5);\nfor(t=c.r;t<45;)t+=12;E(328,7,t,1,2.5);\nfor(i=0;i<4;i++){if(i<3){E(328,7,tone(c,i,57),1,2.5);E(328,11,tone(c,i,69),.7,2.5)}E(328,13,tone(c,i,81),.9,3)}\nE(330,16,6,1,6);\nev.sort(function(a,b){return a[0]-b[0]});\nvar NC=(ENDB+16)*8,last=hit.map(function(h){var a=new Float32Array(NC).fill(-99),i;h.forEach(function(t){a[Math.round(t*8)]=t});for(i=1;i<NC;i++)if(a[i]<a[i-1])a[i]=a[i-1];return a});\nreturn{ev:ev,hit:hit,last:last,lead:lead,chord:chord,inCh:inCh,sec:SEC,\nen:[0,.15,30,.15,32,.3,63.5,.7,64,.9,95.5,.9,96,.85,127.5,.85,128,.8,159,.8,160,.3,184,.4,191.5,.6,192,1,255.5,1,256,.9,287.5,.9,288,.35,329,.35,336,0]}})();\nfunction ENV(b){var S=SONG,i=Math.max(0,Math.min(S.last[0].length-1,Math.floor(b*8+1e-6))),T=S.en,j=0,e=T[T.length-1];\nif(b<T[T.length-2]){while(T[j+2]<=b)j+=2;e=b<=T[0]?T[1]:T[j+1]+(T[j+3]-T[j+1])*(b-T[j])/(T[j+2]-T[j])}\nreturn[Math.exp(-5*Math.max(0,b-S.last[0][i])),Math.exp(-5*Math.max(0,b-S.last[1][i])),Math.exp(-5*Math.max(0,b-S.last[2][i])),e]}";(0,eval)(SONG_SRC);var SYN=SONG_SRC+"(function(Math){\nvar TAU=6.283185307179586,SPB=60/BPM,N=64,sr,dt,ev=SONG.ev,ei=0,vs=[],c0=0,G=[],oL=new Float32Array(N),oR=new Float32Array(N),cp=N,i,\nsd=new Int32Array([0x2F6E2B1]),act=new Float64Array(19).fill(-1e9),solo,mute,arpN=0,\nPADC=[0,600,16,700,32,1000,60,3000,63.9,5000,64,9000,159,9000,160,900,184,1300,191.5,5000,192,11000,287.9,12000,288,1500,327.9,1500,328,9000],\nLEDC=[0,2500,64,6500,159.9,6500,160,2200,184,2800,192,7000,256,8000],\nARPC=[16,350,32,700,62,3500,64,2600,96,3000,159,3000,160,800,192,1800,224,2600,256,3000,288,2000],\nACDC=[128,320,150,650,159,1100],\nRVT=[0,2.2,63,2.2,64,1.6,160,1.6,161,3.2,191,3.2,192,1.8,255,1.8,257,3.5,287,3.5,288,2.6,330,2.6,336,1.5],\nRVW=[0,.9,63,.9,64,.7,160,.7,161,1,191,1,192,.7,256,.7,257,1],\nHUM=[0,1,26,1,33,0],WND=[158,0,162,1,186,1,192,0],FADE=[334.5,1,337.6,0],\nSC=[-18,-11,-4,0,4,11,18],SL=[],SR=[];\nfor(i=0;i<16;i++)G.push(new Float64Array(N));\nfor(i=0;i<7;i++){var pn=[-.9,.6,-.35,0,.35,-.6,.9][i],gn=i==3?1:.8;SC[i]=Math.pow(2,SC[i]/1200);SL.push(gn*Math.cos((pn+1)*.7854));SR.push(gn*Math.sin((pn+1)*.7854))}\nfunction rnd(){var s=sd[0];s^=s<<13;s^=s>>>17;s^=s<<5;sd[0]=s;return(s>>>0)/4294967296}\nfunction nz(){return rnd()*2-1}\nfunction mf(n){return 440*Math.pow(2,(n-69)/12)}\nfunction au(T,b){var i=0,n=T.length-2;if(b<=T[0])return T[1];if(b>=T[n])return T[n+1];while(T[i+2]<=b)i+=2;return T[i+1]+(T[i+3]-T[i+1])*(b-T[i])/(T[i+2]-T[i])}\nfunction saw(p,d){var s=2*p-1,x;if(p<d){x=p/d;s-=x+x-x*x-1}else if(p>1-d){x=(p-1)/d;s-=x*x+x+x+1}return s}\nfunction SVF(f,q){this.a=0;this.b=0;this.k=1;this.a1=0;this.a2=0;this.a3=0;this.h=0;if(f)this.set(f,q)}\nSVF.prototype.set=function(f,q){var g=Math.tan(3.141592653589793*Math.max(20,Math.min(f,sr*.45))/sr);this.k=1/q;this.a1=1/(1+g*(g+this.k));this.a2=g*this.a1;this.a3=g*this.a2};\nSVF.prototype.lp=function(x){var v3=x-this.b,v1=this.a1*this.a+this.a2*v3,v2=this.b+this.a2*this.a+this.a3*v3;this.a=2*v1-this.a;this.b=2*v2-this.b;this.h=x-this.k*v1-v2;return v2};\nSVF.prototype.hp=function(x){this.lp(x);return this.h};\nSVF.prototype.bp=function(x){var v=this.lp(x);return x-this.h-v};\nfunction rSS(v,i,e){var L=v.L,R=v.R,ph=v.ph,d=v.d,t=v.t,j,l,r,p,q,x,en,A=v.A,len=v.len,rl=v.rl,g=v.g;\nfor(;i<e;i++,t++){l=r=0;for(j=0;j<7;j++){q=d[j];p=ph[j]+q;if(p>=1)p-=1;ph[j]=p;x=saw(p,q);l+=x*SL[j];r+=x*SR[j]}\nen=t<A?t/A:1;if(t>=len){x=1-(t-len)/rl;if(x<=0){v.t=t;return 1}en*=x*x}\nL[i]+=l*en*g;R[i]+=r*en*g}v.t=t;return 0}\nfunction rLead(v,i,e){var L=G[4],R=G[5],t=v.t,f=v.f,p0=v.p,p1=v.q,p2=v.p2,p3=v.p3,len=v.len,rl=.09*sr,A=.004*sr,g=v.g*.2,ts,d,en,x,a,b,c;\nfor(;i<e;i++,t++){ts=t*dt;d=f*dt;if(ts>.18)d*=1+Math.min(1,(ts-.18)*4)*.006*Math.sin(TAU*5.5*ts);\np0+=d*.996;if(p0>=1)p0-=1;p1+=d;if(p1>=1)p1-=1;p2+=d*1.004;if(p2>=1)p2-=1;p3+=d*.5;if(p3>=1)p3-=1;\na=saw(p0,d);b=saw(p1,d);c=saw(p2,d);x=Math.sin(TAU*p3)*.3;\nen=(t<A?t/A:1)*(.7+.3*Math.exp(-ts*8));if(t>=len){d=1-(t-len)/rl;if(d<=0){v.t=t;return 1}en*=d*d}\nL[i]+=(a*.9+b*.6+c*.25+x)*en*g;R[i]+=(a*.25+b*.6+c*.9+x)*en*g}\nv.t=t;v.p=p0;v.q=p1;v.p2=p2;v.p3=p3;return 0}\nfunction rArp(v,i,e){var L=G[6],R=G[7],t=v.t,d=v.f*dt,p=v.p,q=v.q,len=v.len,rl=.03*sr,A=.002*sr,g=v.g*.2,gl=g*(1-v.pn),gr=g*(1+v.pn),en,x;\nfor(;i<e;i++,t++){p+=d;if(p>=1)p-=1;q+=d*1.007;if(q>=1)q-=1;\nen=(t<A?t/A:1)*Math.exp(-t*dt*6);if(t>=len){x=1-(t-len)/rl;if(x<=0){v.t=t;return 1}en*=x*x}\nx=(saw(p,d)+saw(q,d)*.7)*en;L[i]+=x*gl;R[i]+=x*gr}v.t=t;v.p=p;v.q=q;return 0}\nfunction rAcid(v,i,e){var L=G[8],t=v.t,d=v.f*dt,p=v.p,len=v.len,rl=.012*sr,A=.003*sr,g=.5,en,x;\nfor(;i<e;i++,t++){p+=d;if(p>=1)p-=1;en=t<A?t/A:1;if(t>=len){x=1-(t-len)/rl;if(x<=0){v.t=t;return 1}en*=x*x}L[i]+=saw(p,d)*en*g}v.t=t;v.p=p;return 0}\nfunction rBass(v,i,e){var L=G[2],t=v.t,d=v.f*dt,p=v.p,len=v.len,rl=.03*sr,A=.003*sr,g=v.g*.52,ix=.8+2.6*v.g,ts,en,x,m;\nfor(;i<e;i++,t++){ts=t*dt;p+=d;if(p>=1)p-=1;m=Math.sin(TAU*p);\nen=(t<A?t/A:1)*(.75+.25*Math.exp(-ts*5));if(t>=len){x=1-(t-len)/rl;if(x<=0){v.t=t;return 1}en*=x*x}\nL[i]+=(Math.sin(TAU*p+(ix*Math.exp(-ts*13)+.3)*m)*.8+m*.5)*en*g}v.t=t;v.p=p;return 0}\nfunction rBell(v,i,e){var L=G[10],R=G[11],t=v.t,f=v.f,d=f*dt,p=v.p,q=v.q,len=v.len,A=.001*sr,g=v.g*.2,gl=g*(1-v.pn),gr=g*(1+v.pn),\ne1=v.p2,e2=v.p3,e3=v.A,k1=Math.exp(-(2.4+f/1500)*dt),k2=Math.exp(-10*dt),k3=Math.exp(-28*dt),ix=2.4*Math.min(1,1200/f),en,x;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}p+=d;if(p>=1)p-=1;q+=d*5.4;if(q>=1)q-=1;\nen=(t<A?t/A:1)*e1;x=(len-t)/(.06*sr);if(x<1)en*=x;e1*=k1;e2*=k2;e3*=k3;\nx=(Math.sin(TAU*p+(ix*e2+.12)*Math.sin(TAU*3*p))+Math.sin(TAU*q)*e3*.2)*en;L[i]+=x*gl;R[i]+=x*gr}v.t=t;v.p=p;v.q=q;v.p2=e1;v.p3=e2;v.A=e3;return 0}\nfunction rChip(v,i,e){var L=G[10],R=G[11],t=v.t,d=v.f*dt,p=v.p,q,len=v.len,rl=.025*sr,A=.002*sr,g=v.g*.2,en,x;\nfor(;i<e;i++,t++){p+=d;if(p>=1)p-=1;q=p+.25;if(q>=1)q-=1;en=(t<A?t/A:1)*(.5+.5*Math.exp(-t*dt*12));if(t>=len){x=1-(t-len)/rl;if(x<=0){v.t=t;return 1}en*=x*x}\nx=(saw(p,d)-saw(q,d))*en*g;L[i]+=x*.8;R[i]+=x*1.2}v.t=t;v.p=p;return 0}\nfunction rBlip(v,i,e){var L=G[10],R=G[11],t=v.t,f=v.f,p=v.p,len=v.len,A=.0015*sr,g=v.g*.3,ts,en,x;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}ts=t*dt;p+=f*(1+.45*Math.exp(-ts*50))*dt;if(p>=1)p-=1;\nen=(t<A?t/A:1)*Math.exp(-ts*13);x=(len-t)/(.02*sr);if(x<1)en*=x;x=(Math.sin(TAU*p)+.25*Math.sin(2*TAU*p))*en*g;L[i]+=x;R[i]+=x}v.t=t;v.p=p;return 0}\nfunction rKick(v,i,e){var L=G[12],R=G[13],t=v.t,p=v.p,len=v.len,g=v.g*.68,ts,a,x;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}ts=t*dt;p+=(46+125*Math.exp(-ts*24)+380*Math.exp(-ts*190))*dt;if(p>=1)p-=1;\na=ts<.05?1:Math.exp(-(ts-.05)*13);x=(len-t)/(.012*sr);if(x<1)a*=x;\nx=tnh((Math.sin(TAU*p)*a+nz()*Math.exp(-ts*600)*.25)*1.7)*g;L[i]+=x;R[i]+=x}v.t=t;v.p=p;return 0}\nfunction rSnr(v,i,e){var L=G[14],R=G[15],t=v.t,p=v.p,len=v.len,g=v.g*.42,F=v.F,F2=v.F2,ts,a,x,n,m;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}ts=t*dt;p+=(175+70*Math.exp(-ts*45))*dt;\na=Math.exp(-ts*16);x=(len-t)/(.01*sr);if(x<1)a*=x;n=F.hp(nz())*a*.8;m=F2.hp(nz())*a*.35;\nx=(Math.sin(TAU*p)+.5*Math.sin(TAU*p*1.83))*Math.exp(-ts*24)*.5*(x<1?x:1);L[i]+=(x+n+m)*g;R[i]+=(x+n-m)*g}v.t=t;v.p=p;return 0}\nfunction rHat(v,i,e){var L=G[12],R=G[13],t=v.t,len=v.len,g=v.g*.44,F=v.F,dc=v.n?13:95,a,x;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}a=Math.exp(-t*dt*dc);x=(len-t)/(.005*sr);if(x<1)a*=x;x=F.hp(nz())*a*g;L[i]+=x*.8;R[i]+=x*1.1}v.t=t;return 0}\nfunction rCrash(v,i,e){var L=G[14],R=G[15],t=v.t,len=v.len,g=v.g*.2,F=v.F,F2=v.F2,ts,a,x;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}ts=t*dt;a=Math.exp(-ts*3.2)+.5*Math.exp(-ts*30);x=(len-t)/(.05*sr);if(x<1)a*=x;L[i]+=F.hp(nz())*a*g;R[i]+=F2.hp(nz())*a*g}v.t=t;return 0}\nfunction rTom(v,i,e){var L=G[14],R=G[15],t=v.t,f=v.f,p=v.p,len=v.len,g=v.g*.5,gl=g*(1-v.pn),gr=g*(1+v.pn),ts,a,x;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}ts=t*dt;p+=f*(1+.9*Math.exp(-ts*28))*dt;if(p>=1)p-=1;a=Math.exp(-ts*10);x=(len-t)/(.01*sr);if(x<1)a*=x;\nx=Math.sin(TAU*p)*a;L[i]+=x*gl;R[i]+=x*gr}v.t=t;v.p=p;return 0}\nfunction rTick(v,i,e){var L=G[14],R=G[15],t=v.t,len=v.len,g=v.g*.14,f=v.n?1750:2250,ts,x;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}ts=t*dt;x=(len-t)/(.004*sr);x=(Math.sin(TAU*f*ts)*Math.exp(-ts*230)+nz()*Math.exp(-ts*1100)*.5)*g*(x<1?x:1);L[i]+=x;R[i]+=x*.6}v.t=t;return 0}\nfunction rFx(v,i,e){var L=G[14],R=G[15],t=v.t,len=v.len,k=v.n,g=v.g,p=v.p,q=v.q,F=v.F,F2=v.F2,P=v.P,ts,a,x,y,j,o,fd;\nfor(;i<e;i++,t++){if(t>=len){v.t=t;return 1}ts=t*dt;fd=(len-t)/(.02*sr);if(fd>1)fd=1;x=y=0;\nif(k==0){p+=(45+50*Math.exp(-ts*20))*dt;a=Math.exp(-ts*2.8)*(1-Math.exp(-ts*200))*.2;\no=Math.sin(TAU*100*ts)+.5*Math.sin(TAU*200*ts)+.3*Math.sin(TAU*300*ts)+.2*Math.sin(TAU*400*ts);q=14*ts-9*ts*ts*(ts<.7?1:.7/ts);\nx=Math.sin(TAU*p)*Math.exp(-ts*7)*.3+F.hp(nz())*Math.exp(-ts*12)*.05;y=x+o*a*(.5+.5*Math.sin(TAU*q+1.6));x+=o*a*(.5+.5*Math.sin(TAU*q))}\nelse if(k==1){x=F.hp(nz())*(Math.exp(-ts*14)*.5+Math.exp(-ts*3)*.07);y=F2.hp(nz())*(Math.exp(-ts*14)*.5+Math.exp(-ts*3)*.07);\nfor(j=0;j<P.length;j+=5)if(ts>P[j+1]){a=ts-P[j+1];a=Math.sin(TAU*P[j]*a)*Math.exp(-a*P[j+2])*P[j+3]*.09;x+=a*(1-P[j+4]);y+=a*(1+P[j+4])}}\nelse if(k==2){p+=(34+70*Math.exp(-ts*9))*dt;q+=(nz()-q)*.04;x=y=tnh((Math.sin(TAU*p)*Math.exp(-ts*2.6)+q*Math.exp(-ts*6)*3)*1.5)*.7}\nelse if(k==3){a=t/len;if(!(t&15)){F.set(400*Math.pow(2,a*4.6),2.5);F2.set(460*Math.pow(2,a*4.4),2.5)}a=a*a*.3;x=F.bp(nz())*a;y=F2.bp(nz())*a}\nelse if(k==4){p+=(65+60*Math.exp(-ts*50))*dt;x=nz()*Math.exp(-ts*700)*.4+Math.sin(TAU*p)*Math.exp(-ts*16)*.9+Math.sin(TAU*233*ts)*Math.exp(-ts*45)*.35+Math.sin(TAU*397*ts)*Math.exp(-ts*60)*.2;\nif(ts>.09){a=ts-.09;x+=nz()*Math.exp(-a*800)*.3+Math.sin(TAU*1250*a)*Math.exp(-a*120)*.2}y=x*.8}\nelse if(k==5){x=F.hp(nz())*Math.exp(-ts*45)*.8+Math.sin(TAU*700*ts)*Math.exp(-ts*90)*.3;y=x;\nfor(j=0;j<P.length;j+=2)if(ts>P[j]){a=F2.hp(nz())*Math.exp(-(ts-P[j])*300)*.5;x+=a*(1-P[j+1]);y+=a*(1+P[j+1])}}\nelse{p+=(2400*Math.exp(-ts*2.6)+18)*dt;q+=(55+40*Math.exp(-ts*30))*dt;a=(1-Math.exp(-ts*300))*Math.exp(-ts*1.1)*.3;\nx=Math.sin(TAU*p)*a+Math.sin(TAU*q)*Math.exp(-ts*12)*.6;y=x+F2.hp(nz())*Math.exp(-ts*25)*.2;x+=F.hp(nz())*Math.exp(-ts*25)*.2}\nL[i]+=x*g*fd;R[i]+=y*g*fd}v.t=t;v.p=p;v.q=q;return 0}\nvar RN=[rKick,rSnr,rBlip,rHat,rCrash,rTom,rTick,rSS,rSS,rSS,rBass,rLead,rArp,rBell,rChip,rAcid,rFx];\nvar fpl,fpr,fll,flr,fal,far,fac,fwl,fwr,fhl,fhr,h0=0,h1=0,hpc,kN=-1,kV=0,kE=0,kD,sc=0,scA,aN=-1,aE=0,aD,cN=-1,cV=0,cE=0,cA=0,cD,\nDL,DR,dp=0,dn,dlp=0,dhp=0,dc1,dc2,PL,PR,pp=0,pn2,rh0=0,rh1=0,rhc,AB,ao=new Int32Array(4),apl=new Int32Array(4),api=new Int32Array(4),\nRB,ro=new Int32Array(8),rl=new Int32Array(8),ri=new Int32Array(8),rlp=new Float64Array(8),rg=new Float64Array(8),rt=new Float64Array(8),rdc,\ns1=0,s2=0,shc,d0=0,d1=0,dcc,LA,lbL,lbR,lbE,lp_=0,lsum,lh=1,lhc=0,lrel,MG=.86,CEIL=.86;\nfunction tnh(x){var q=x*x;return x>3?1:x<-3?-1:x*(27+q)/(27+9*q)}\nfunction init(){var j,m;dt=1/sr;\nfpl=new SVF(600,.7);fpr=new SVF(600,.7);fll=new SVF(3000,.8);flr=new SVF(3000,.8);fal=new SVF(500,2);far=new SVF(500,2);fac=new SVF(400,6);\nfwl=new SVF(500,1.2);fwr=new SVF(650,1.2);fhl=new SVF(4000,3);fhr=new SVF(4300,3);\nhpc=1-Math.exp(-TAU*130/sr);kD=Math.exp(-9/sr);scA=1-Math.exp(-1/(.004*sr));aD=Math.exp(-12/sr);cD=Math.exp(-13/sr);\ndn=Math.round(.75*SPB*sr);DL=new Float64Array(dn);DR=new Float64Array(dn);dc1=1-Math.exp(-TAU*4500/sr);dc2=1-Math.exp(-TAU*300/sr);\npn2=Math.round(.02*sr);PL=new Float64Array(pn2);PR=new Float64Array(pn2);rhc=1-Math.exp(-TAU*180/sr);\nm=0;[5.1,7.7,6.1,8.9].forEach(function(x,j){apl[j]=Math.round(x*sr/1e3)|1;ao[j]=m;m+=apl[j]});AB=new Float64Array(m);\nm=0;[31.7,37.9,43.3,47.9,55.1,61.7,68.3,74.9].forEach(function(x,j){rl[j]=Math.round(x*sr/1e3)|1;ro[j]=m;m+=rl[j]});RB=new Float64Array(m);\nrdc=1-Math.exp(-TAU*5500/sr);\nshc=1-Math.exp(-TAU*120/sr);dcc=1-Math.exp(-TAU*15/sr);\nLA=Math.round(.004*sr);lbL=new Float64Array(LA);lbR=new Float64Array(LA);lbE=new Float64Array(LA).fill(1);lsum=LA;lrel=Math.exp(-1/(.12*sr))}\nfunction ok(y){return(!solo||solo.indexOf(y)>=0)&&(!mute||mute.indexOf(y)<0)}\nfunction spawn(e){var y=e[1],n=e[2],g=e[3],s=Math.round(e[0]*SPB*sr),j,f=mf(n),v;\nif(y==0){kN=s;kV=g}if(!ok(y))return;\nv={y:y,s:s,t:0,n:n,f:f,g:g,len:e[4]*SPB*sr,p:0,q:0,p2:0,p3:0,pn:0,A:0,rl:0,L:G[0],R:G[1],ph:null,d:null,F:null,F2:null,P:null};\nif(y>6&&y<10){v.ph=new Float64Array(7);v.d=new Float64Array(7);for(j=0;j<7;j++){v.ph[j]=rnd();v.d[j]=f*SC[j]*dt}\nv.A=(y==8?.9:y==7?.01:.003)*sr;v.rl=(y==8?1.5:y==7?.25:.12)*sr;v.g=g*(y==9?.1:.07);if(v.A>v.len)v.A=v.len;if(y==9){v.L=G[10];v.R=G[11]}}\nelse if(y==0)v.len=.34*sr;\nelse if(y==1){v.len=.3*sr;v.F=new SVF(1100,.8);v.F2=new SVF(1500,.8)}\nelse if(y==2)v.len=.35*sr;\nelse if(y==3){v.len=(n?.32:.07)*sr;v.F=new SVF(n?7000:8500,.9)}\nelse if(y==4){v.len=1.8*sr;v.F=new SVF(4500,.8);v.F2=new SVF(4800,.8)}\nelse if(y==5){v.len=.4*sr;v.pn=Math.max(-.5,Math.min(.5,(n-50)/14))}\nelse if(y==6)v.len=.05*sr;\nelse if(y==11){v.p=rnd();v.q=rnd();v.p2=rnd()}\nelse if(y==12){aN=s;v.pn=(arpN++&1?.45:-.45);v.q=.5}\nelse if(y==13){v.len=2.2*sr;v.pn=((n*37)%7-3)/6;v.p2=v.p3=v.A=1}\nelse if(y==15){cN=s;cV=g>.8?1:.55}\nelse if(y==16){v.F=new SVF(n==1?3000:n==5?1500:n==3?400:5000,n==3?2.5:.8);v.F2=new SVF(n==1?3400:n==5?2500:n==3?460:5600,n==3?2.5:.8);\nv.len=[1.8,2,2.2,0,.5,.7,3.2][n]*sr||e[4]*SPB*sr;\nif(n==1){v.P=[];for(j=0;j<28;j++)v.P.push(Math.min(sr*.45,2500+rnd()*rnd()*9000),rnd()*rnd()*.6,6+rnd()*20,.4+rnd()*.6,rnd()*1.6-.8)}\nif(n==5){v.P=[];for(j=0;j<6;j++)v.P.push(.04+rnd()*.4,rnd()*1.6-.8)}}\nvs.push(v)}\nfunction chunk(){var b=c0*dt/SPB,i,j,k,n,q,v,a,x,y,ml,mr,rL,rR,dS,g,o,s,l,r,pk,\ng0=G[0],g1=G[1],g2=G[2],g4=G[4],g5=G[5],g6=G[6],g7=G[7],g8=G[8],g10=G[10],g11=G[11],g12=G[12],g13=G[13],g14=G[14],g15=G[15];\nfor(j=0;j<16;j++)G[j].fill(0);\nwhile(ei<ev.length&&Math.round(ev[ei][0]*SPB*sr)<c0+N)spawn(ev[ei++]);\na=au(HUM,b)*.016;if(a>0&&ok(17))for(i=0;i<N;i++){x=(c0+i)*dt;y=Math.sin(TAU*100*x);y=y*y;y*=y;\ns=(Math.sin(TAU*100*x)+.4*Math.sin(TAU*200*x+1)+.25*Math.sin(TAU*300*x+2)+.3*Math.sin(TAU*50*x))*a;g14[i]+=s+fhl.bp(nz())*y*a*1.5;g15[i]+=s+fhr.bp(nz())*y*a*1.5}\na=au(WND,b)*.09;if(a>0&&ok(18)){x=c0*dt;fwl.set(500*(1+.5*Math.sin(TAU*.11*x)),1.2);fwr.set(650*(1+.5*Math.sin(TAU*.083*x+1)),1.2);\nfor(i=0;i<N;i++){g14[i]+=fwl.bp(nz())*a;g15[i]+=fwr.bp(nz())*a}}\nfor(j=k=0;j<vs.length;j++){v=vs[j];act[v.y]=c0;if(!RN[v.y](v,v.s>c0?v.s-c0:0,N))vs[k++]=v}vs.length=k;\nvar onL=c0-act[11]<sr*.25,onA=c0-act[12]<sr*.25,onC=c0-act[15]<sr*.25;\nx=au(PADC,b);fpl.set(x,.7);fpr.set(x,.7);x=au(LEDC,b);fll.set(x,.8);flr.set(x,.8);\nvar ab=au(ARPC,b),cb=au(ACDC,b),rw=au(RVW,b)*.33,fa=b>=338?0:au(FADE,b),\nH0=h0,H1=h1,KE=kE,S=sc,AE=aE,CE=cE,CA=cA,DP=dp,DLP=dlp,DHP=dhp,PP=pp,RH0=rh0,RH1=rh1,S1=s1,S2=s2,D0=d0,D1=d1,LH=lh,LHC=lhc,LS=lsum,LP=lp_;\nx=au(RVT,b)*sr;for(j=0;j<8;j++)rg[j]=Math.exp(-6.9078*rl[j]/x);\nfor(i=0;i<N;i++){n=c0+i;\nif(n==kN)KE=kV;S+=(KE-S)*scA;KE=KE*kD+1e-25;\nx=fpl.lp(g0[i]+1e-20);y=fpr.lp(g1[i]+1e-20);H0+=(x-H0)*hpc;H1+=(y-H1)*hpc;g=1-.8*S;x=(x-H0)*g;y=(y-H1)*g;ml=x;mr=y;rL=x*.3;rR=y*.3;\nx=tnh(g2[i]*1.4)*.7*(1-.92*S);ml+=x;mr+=x;\ng=1-.2*S;dS=0;if(onL){x=fll.lp(g4[i]+1e-20)*g;y=flr.lp(g5[i]+1e-20)*g;ml+=x;mr+=y;rL+=x*.3;rR+=y*.3;dS=(x+y)*.16}\nif(onA){if(n==aN)AE=1;if(!(i&7)){x=ab*(1+3*AE);fal.set(x,2);far.set(x,2)}AE=AE*aD+1e-25;x=fal.lp(g6[i]+1e-20)*g;y=far.lp(g7[i]+1e-20)*g;ml+=x;mr+=y;rL+=x*.3;rR+=y*.3;dS+=(x+y)*.2}\nif(onC){if(n==cN){CE=1;CA=cV}if(!(i&7))fac.set(cb*(1+CA*6*CE),7);CE=CE*cD+1e-25;x=tnh(fac.lp(g8[i]+1e-20)*2.2)*.3*(1-.5*S);ml+=x;mr+=x;rL+=x*.1;rR+=x*.1;dS+=x*.22}\nx=g10[i];y=g11[i];ml+=x;mr+=y;rL+=x*.4;rR+=y*.4;dS+=(x+y)*.17;\nml+=g12[i];mr+=g13[i];rL+=g12[i]*.03;rR+=g13[i]*.03;\nx=g14[i];y=g15[i];ml+=x;mr+=y;rL+=x*.3;rR+=y*.3;dS+=(x+y)*.02;\nx=DL[DP];y=DR[DP];DLP+=(y-DLP)*dc1;DHP+=(DLP-DHP)*dc2;DL[DP]=dS+(DLP-DHP)*.5+1e-20;DR[DP]=x*.8;if(++DP>=dn)DP=0;\nml+=x*.8;mr+=y*.8;rL+=x*.25;rR+=y*.25;\nx=PL[PP];y=PR[PP];PL[PP]=rL+1e-20;PR[PP]=rR+1e-20;if(++PP>=pn2)PP=0;RH0+=(x-RH0)*rhc;RH1+=(y-RH1)*rhc;x-=RH0;y-=RH1;\nfor(j=0;j<4;j++){k=api[j];q=ao[j]+k;o=AB[q];if(j&1){s=o-.6*y;AB[q]=y+.6*s;y=s}else{s=o-.6*x;AB[q]=x+.6*s;x=s}if(++k>=apl[j])k=0;api[j]=k}\ns=0;for(j=0;j<8;j++){o=RB[ro[j]+ri[j]];o=rlp[j]+=(o-rlp[j])*rdc;o*=rg[j];rt[j]=o;s+=o}s*=.25;\nl=r=0;for(j=0;j<8;j++){o=rt[j];k=ri[j];RB[ro[j]+k]=(j&1?y:x)+o-s+1e-20;if(++k>=rl[j])k=0;ri[j]=k;if(j&1)r+=j&2?-o:o;else l+=j&2?-o:o}\nml+=l*rw+1e-20;mr+=r*rw+2e-20;\nx=(ml+mr)*.5;y=(ml-mr)*.5;S1+=(y-S1)*shc;S2+=(S1-S2)*shc;y-=S2;l=x+y;r=x-y;D0+=(l-D0)*dcc;D1+=(r-D1)*dcc;\nl=tnh((l-D0)*MG);r=tnh((r-D1)*MG);\npk=(l<0?-l:l)>(r<0?-r:r)?(l<0?-l:l):(r<0?-r:r);pk/=CEIL;if(pk<1)pk=1;if(pk>=LH){LH=pk;LHC=LA}else if(LHC>0)LHC--;else LH=1+(LH-1)*lrel;\nLS+=LH-lbE[LP];lbE[LP]=LH;x=lbL[LP];y=lbR[LP];lbL[LP]=l;lbR[LP]=r;if(++LP>=LA)LP=0;g=fa*LA/LS;\noL[i]=x*g;oR[i]=y*g}\nh0=H0;h1=H1;kE=KE;sc=S;aE=AE;cE=CE;cA=CA;dp=DP;dlp=DLP;dhp=DHP;pp=PP;rh0=RH0;rh1=RH1;s1=S1;s2=S2;d0=D0;d1=D1;lh=LH;lhc=LHC;lsum=LS;lp_=LP;\nc0+=N}\nonmessage=function(e){try{sr=e.data.sr;solo=e.data.solo;mute=e.data.mute;init();\nvar n=Math.round(sr*e.data.blk),tot=Math.ceil(ENDB*SPB/e.data.blk)+2,bi=0;\n(function go(){try{var l=new Float32Array(n),r=new Float32Array(n),k;for(k=0;k<n;k++){if(cp==N){chunk();cp=0}l[k]=oL[cp];r[k]=oR[cp++]}\npostMessage({i:bi,l:l,r:r},[l.buffer,r.buffer]);if(++bi<tot)setTimeout(go,0)}catch(x){postMessage({err:String(x)})}})()}catch(x){postMessage({err:String(x)})}};\n})(Math);";
function ATLAS(c){
const F=(s,w)=>c.font=(w||'')+' '+s+'px "MS Sans Serif",Tahoma,Geneva,Verdana,sans-serif',M=s=>c.font='bold '+s+'px ui-monospace,Menlo,Consolas,monospace';
const bev=(x,y,w,h,up)=>{c.fillStyle='#c0c0c0';c.fillRect(x,y,w,h);c.fillStyle=up?'#fff':'#404040';c.fillRect(x,y,w,2);c.fillRect(x,y,2,h);c.fillStyle=up?'#404040':'#fff';c.fillRect(x,y+h-2,w,2);c.fillRect(x+w-2,y,2,h)};
const win=(x,y,w,h,t)=>{bev(x,y,w,h,1);const g=c.createLinearGradient(x,0,x+w,0);g.addColorStop(0,'#000080');g.addColorStop(1,'#1084d0');c.fillStyle=g;c.fillRect(x+4,y+4,w-8,26);c.fillStyle='#fff';F(17,'bold');c.textBaseline='middle';c.textAlign='left';c.fillText(t,x+12,y+18);bev(x+w-28,y+7,20,20,1);c.fillStyle='#000';F(15,'bold');c.fillText('x',x+w-23,y+16)};
c.fillStyle='#000';c.fillRect(0,0,1024,1024);
c.fillStyle='#008080';c.fillRect(0,0,1024,768);
['My Computer','Inbox (4,096)','Recycle Bin','TPS Reports'].forEach((t,i)=>{const y=30+i*104;c.fillStyle='#dfdfdf';c.fillRect(46,y,44,36);c.fillStyle='#000080';c.fillRect(50,y+4,36,24);c.fillStyle='#808080';c.fillRect(56,y+38,24,6);c.fillStyle='#fff';F(15);c.textAlign='center';c.textBaseline='top';c.fillText(t,68,y+52)});
win(170,60,640,470,'Q4_FORECAST_final_v7_REALLY_FINAL.xls');c.fillStyle='#fff';c.fillRect(178,96,624,426);c.strokeStyle='#c0c0c0';c.lineWidth=1;
for(let i=0;i<=16;i++){c.beginPath();c.moveTo(178,96.5+i*26.6);c.lineTo(802,96.5+i*26.6);c.stroke()}for(let i=0;i<=8;i++){c.beginPath();c.moveTo(178.5+i*78,96);c.lineTo(178.5+i*78,522);c.stroke()}
c.fillStyle='#000';F(15);c.textAlign='right';c.textBaseline='middle';let s=7;for(let y=1;y<16;y++)for(let x=1;x<8;x++){s=s*16807%2147483647;if(s%5)c.fillText(((s%90000)/100).toFixed(2),178+x*78+72,96+y*26.6+14)}
c.textAlign='left';F(15,'bold');['','Q1','Q2','Q3','Q4','Q5','Q6','Q7'].forEach((t,i)=>c.fillText(t,178+i*78+8,110));['Synergy','Leverage','Alignment','Bandwidth','Paradigm','Overhead','Deliverable','Stakeholder','Circle back','Low fruit','Headcount','Runway','Pivot','Ping','TOTAL'].forEach((t,i)=>c.fillText(t.slice(0,9),184,96+(i+1)*26.6+14));
win(470,330,440,210,'Screen Saver');c.fillStyle='#000';F(18);c.textBaseline='top';c.fillText('No input detected for 15 minutes.',492,380);c.fillText('Everyone has gone home.',492,408);bev(600,470,180,44,1);c.fillStyle='#000';F(18,'bold');c.textAlign='center';c.fillText('Go idle',690,482);
bev(0,728,1024,40,1);bev(6,733,104,30,1);c.fillStyle='#000';F(18,'bold');c.textAlign='left';c.textBaseline='middle';c.fillText('Start',40,749);c.fillStyle='#f00';c.fillRect(14,740,8,8);c.fillStyle='#0a0';c.fillRect(23,740,8,8);c.fillStyle='#00f';c.fillRect(14,749,8,8);c.fillStyle='#fc0';c.fillRect(23,749,8,8);
bev(908,733,110,30,0);c.fillStyle='#000';F(17);c.textAlign='center';c.fillText('11:59 PM',963,749);
c.fillStyle='#fff';c.textAlign='center';c.textBaseline='middle';F(104,'bold');c.fillText('EXIT',128,836);
c.fillStyle='#fff';c.fillRect(256,768,256,128);c.fillStyle='#111';c.font='italic bold 34px "Comic Sans MS","Marker Felt",cursive';c.fillText('DO NOT',384,806);c.fillText('TURN OFF!!',384,852);
c.fillStyle='#0b0b10';c.fillRect(512,768,256,256);const g=c.createLinearGradient(0,790,0,930);g.addColorStop(0,'#1b2a5c');g.addColorStop(1,'#e8884a');c.fillStyle=g;c.fillRect(532,788,216,140);c.fillStyle='#0b0b10';c.beginPath();c.moveTo(532,928);c.lineTo(610,850);c.lineTo(650,890);c.lineTo(700,830);c.lineTo(748,928);c.fill();
c.fillStyle='#fff';c.font='28px Georgia,"Times New Roman",serif';c.fillText('P E R S I S T E N C E',640,958,216);c.font='italic 13px Georgia,serif';c.fillStyle='#bbb';c.fillText('Stay at your desk. The pixels will not.',640,990);
c.fillStyle='#fff';F(34,'bold');c.fillText('SERVER ROOM',896,812,236);F(20);c.fillText('authorised idle only',896,856);
M(92);c.fillStyle='#fff';c.fillText('I QUIT',256,964);
F(40,'bold');c.fillText('OUT OF',896,940);c.fillText('OFFICE',896,984);
}
SCN.breakout={sv:1,th:1,bl:.55,
q:(lb,len,b)=>{const w=Math.max(0,1-lb/1.2);return[0,lb>30?Math.max(0,1-(lb-30)/2)**1.5:1,w*w*w,.003+.014*w]},
glsl:`const vec4 WP[18]=vec4[18](vec4(-6.99,1.024,4.942,0),vec4(-2.56,1.36,5.45,1),vec4(-5.,.08,4.4,1),vec4(-5.,1.,-.5,0),vec4(-5.,.75,-5.5,0),vec4(-5.,.08,-9.5,1),vec4(-4.6,1.9,-12.7,0),vec4(-.5,1.7,-13.42,1),vec4(2.5,2.1,-8.,0),vec4(7.5,1.58,-2.5,1),vec4(5.1,1.45,1.,0),vec4(5.,.08,6.,1),vec4(4.6,1.6,10.8,0),vec4(.8,1.7,13.42,1),vec4(0.,1.1,8.,0),vec4(0.,.08,3.,1),vec4(.12,1.5,1.5,0),vec4(.3,3.05,.3,0));vec3 heroPos(float lb){float u=clamp(lb<2.?lb:lb*.5+1.,0.,16.999),f=fract(u);int i=int(u);vec4 a=WP[i],b=WP[i+1];vec3 d=b.xyz-a.xyz,ta=(a.w>0.||i==0)?d:(b.xyz-WP[max(i-1,0)].xyz)*.5,tb=(b.w>0.||i==16)?d:(WP[min(i+2,17)].xyz-a.xyz)*.5;float f2=f*f,f3=f2*f;return a.xyz*(2.*f3-3.*f2+1.)+ta*(f3-2.*f2+f)+b.xyz*(3.*f2-2.*f3)+tb*(f3-f2);}float heroN(float lb){float n=2.;for(int i=1;i<17;i++)if(WP[i].w>0.&&lb>=(i<2?float(i):float(i)*2.-2.))n+=1.;return n;}float wake(vec2 id){if(id==vec2(-3.,2.))return-1.;float cx=floor(id.x*.5);vec2 c=vec2(cx*5.+2.5+(id.x-cx*2.-.5),id.y*2.+1.);for(int i=1;i<32;i++){vec2 d=heroPos(float(i)).xz-c;if(dot(d,d)<9.)return float(i);}return 999.;}vec3 scr(vec2 id,vec2 u,float tw){if(id==vec2(-3.,2.)){vec2 c=(u-vec2(.7,.68))*vec2(1.333,1.);float r=length(c),an=atan(c.y,c.x),hr=.2+.09*sin(an*5.+1.)+.05*sin(an*13.)+.03*sin(an*29.);if(r<hr)return vec3(1.,.65,.25)*3.*step(.988,h21(floor(u*50.)+floor(T*24.)));float ck=smoothstep(.004,.001,abs(fract(an/TAU*11.+.25*sin(r*11.))-.5)*r*.57)*smoothstep(.75,.2,r),tr=floor(u.y*24.+T*3.);u.x+=(h11(tr+floor(T*12.))-.5)*.3*step(.55,h11(tr*1.3+floor(T*7.)));vec3 p=vec3(.45,.75,1.)*(.2+.8*h21(floor(u*vec2(160.,120.))+floor(T*30.)))*(.35+.65*step(.5,fract(u.y*3.+T*2.)));return p*(.5+1.3*step(.3,vn(vec2(T*13.,0.))))+vec3(.8,.95,1.)*(3.*ck+2.*smoothstep(hr+.025,hr,r));}float h=h21(id+7.3),s=LB-tw;int k=int(h*4.);return((saver(k,u,s*.5+h*40.)*2.8+(k==0?vec3(.55,.65,1.):k==1?vec3(.8,.45,1.):k==2?vec3(.3,.8,1.):vec3(.15,1.,.4))*.14)*sat(s*3.)+vec3(.5,.8,1.)*3.*exp(-s*6.))*(1.+.5*K.x);}vec3 scrL(vec2 id,float tw){if(id==vec2(-3.,2.))return vec3(.45,.75,1.)*.25*(.35+.65*step(.3,vn(vec2(T*13.,0.))));float h=h21(id+7.3),s=LB-tw;int k=int(h*4.);return(k==0?vec3(.55,.68,1.)*.3:k==1?vec3(.72,.6,1.)*.34:k==2?vec3(.45,.8,1.)*.34:vec3(.4,.95,.65)*.36)*(1.+.6*K.x)*(sat(s*3.)+2.*exp(-s*5.));}
#define U(x,i) t=x;if(t<d){d=t;gm=i;}
const vec2 HID=vec2(-3.,2.);const vec3 GC=vec3(-7.003,.985,5.),EXS=vec3(-9.9,2.3,8.),LTA=vec3(-8.7,2.68,5.4),LTB=vec3(3.3,2.68,-5.4);float CE=1.,SM=0.,HI=0.,HN=0.,ZF=1.;vec3 HP=vec3(0,-9,0),KL=vec3(0);vec3 gq;vec2 gid;float gm,gs;float map(vec3 p){float t,d=p.y;gm=1.;U(min(10.-abs(p.x),13.5-abs(p.z)),2.)if(CE>0.){U(max(2.7-p.y,-sdBox(p-vec3(.3,3.2,.3),vec3(.29,.7,.29))),3.)}float cx=clamp(floor(p.x/5.),-2.,1.),lx=p.x-cx*5.-2.5,cz=clamp(floor(p.z*.5),-6.,5.),lz=p.z-cz*2.-1.,a=abs(lx);gid=vec2(cx*2.+step(0.,lx),cz);gs=lx<0.?-1.:1.;vec3 q=vec3(a,p.y,lz*((gid==HID||h21(gid+.5)<.5)?1.:-1.));gq=q;float bb=max(max(a-1.72,p.y-1.52),abs(p.z)-12.05);if(bb>.2){U(bb,4.)}else{U(max(sdBox2(vec2(a,p.y-.75),vec2(.03,.75)),abs(p.z)-12.),4.)U(sdBox(vec3(a-.85,p.y-.75,abs(lz)-1.),vec3(.85,.75,.025)),4.)U(sdBox(q-vec3(.47,.715,0),vec3(.44,.015,.97)),5.)U(sdBox(q-vec3(.42,.34,.68),vec3(.3,.34,.22)),11.)vec3 c=q-vec3(1.2,.46,.5);U(min(sdRBox(c,vec3(.21,.035,.21),.03),sdRBox(c-vec3(.23,.36,0),vec3(.03,.24,.2),.03)),10.)U(max(length(c.xz)-(q.y<.08?.25:.025),q.y-.45),11.)vec3 m=q-vec3(.31,.98,0);t=smin(sdRBox(m-vec3(.14,0,0),vec3(.05,.18,.2),.02),sdRBox(m+vec3(.03,.01,0),vec3(.16,.15,.17),.04),.03);t=min(t,sdRBox(q-vec3(.3,.765,0),vec3(.11,.035,.12),.02));t=max(t,-sdBox(q-vec3(.5,.985,0),vec3(.02,.118,.156)));U(t,6.)U(max(length(q+vec3(.703,-.985,0))-1.2,sdBox(q-vec3(.49,.985,0),vec3(.02,.118,.156))),7.)U(sdRBox(q-vec3(.72,.745,0),vec3(.075,.012,.21),.008),8.)U(max(length(q.xz-vec2(.66,-.33))-.04,abs(q.y-.78)-.05),9.)}return d;}float flk(float s){float t=T*9.+s*31.;return step(.35,vn(vec2(t*.21,s)))*(.3+.7*step(.4,vn(vec2(t,s+5.))));}float gv(vec3 ro,vec3 rd,vec3 p,float tm,float k){float t=clamp(dot(p-ro,rd),0.,tm);vec3 d=ro+rd*t-p;return 1./(dot(d,d)*k+1.);}vec3 mlit(vec2 id,float tw,vec3 q,vec3 n,vec3 v,vec3 al,float sp){if(LB<tw)return vec3(0);vec3 l=vec3(.52,.985,0)-q;float d2=dot(l,l);l*=inversesqrt(d2);return scrL(id,tw)*(sat(.05-l.x*1.3)*(al*max(dot(n,l),0.)+sp*pow(max(dot(n,normalize(l-v)),0.),40.))/(d2+.1)+al*.04/(1.+d2*d2));}vec3 shade(vec3 p,vec3 rd,float t){map(p);float m=gm,sx=gs;vec3 q=gq;vec2 id=gid;if(p.y>2.705&&(max(abs(p.x-.3),abs(p.z-.3))>.3||p.y>3.8))return vec3(0);float ep=.0004+.0006*t;vec3 n=vec3(0);for(int i=0;i<4;i++){vec3 e=.5773*(2.*vec3(((i+3)>>1)&1,(i>>1)&1,i&1)-1.);n+=e*map(p+e*ep);}n=normalize(n);float lz=p.z-id.y*2.-1.,a=q.x,ao=(.35+.65*sat(map(p+n*.1)/.1))*(.6+.4*sat(map(p+n*.35)/.35)),tw=wake(id),fp=t/(R.y*ZF);vec4 nz=texture(N,p.xz*1.7+p.y*.37),n2=texture(N,(p.xz+p.yy*vec2(.7,.3))*.13);vec3 al=vec3(.3),em=vec3(0),sod=vec3(1.,.32,.05);float sp=.02,gl=20.;if(m<1.5){al=vec3(.048,.069,.085)*(.5+nz.r)*(.7+.6*n2.g)+vec3(.05,.045,.035)*step(.86,nz.b);sp=0.;}else if(m<2.5){al=vec3(.3,.31,.29)*(.85+.3*n2.r);if(p.y<.1)al=vec3(.03);if(p.x<-9.99){float wz=abs(mod(p.z,4.)-2.),wy=p.y-1.65;if(wz<1.55&&abs(wy)<.8){al=vec3(.04);sp=.3;}if(wz<1.5&&abs(wy)<.75){float sl=p.y/.05,si=floor(sl),sf=fract(sl+.12*sin(p.z*1.3+si*2.1)*step(.75,h11(si+floor(p.z*.25)*7.)));float g=mix(.16,smoothstep(.16,.03,abs(sf-.5)),smoothstep(.6,.2,fp/.05));em=sod*g*1.5*(.25+.75*smoothstep(.9,-.7,wy))*(.6+.5*n2.b)*step(.012,abs(wz-.75));al=vec3(.2,.19,.17);}vec2 e=(p.zy-EXS.zy)/vec2(.56,.28);if(abs(p.z-8.)<.46&&p.y<2.05){al=vec3(.07,.08,.09)*(.8+.4*n2.r);sp=.3;if(abs(p.z-8.)>.42||p.y>2.01)al=vec3(.2);}if(abs(e.x)<.5&&abs(e.y)<.5){em=vec3(1.,.03,.01)*(.3+7.*atl(vec2(.5-e.x,.5+e.y),vec4(0,768,256,128)).r);al=vec3(.02);}vec2 c=p.zy-vec2(4.,2.18);float r=length(c),th=floor(T)*.10472-1.2;if(r<.17){al=vec3(.6,.59,.54);if(r>.125&&r<.145&&abs(fract(atan(c.x,c.y)/TAU*12.+.5)-.5)<.07)al=vec3(.02);if(min(sdSeg2(c,vec2(0),vec2(.027,.125)),sdSeg2(c,vec2(0),vec2(.002,.085))-.003)<.005)al=vec3(.01);if(sdSeg2(c,vec2(0),.13*vec2(-sin(th),cos(th)))<.0025)al=vec3(.5,.02,.01);if(r>.152)al=vec3(.03);}}}else if(m<3.5){vec2 tc=p.xz/.6,tf=abs(fract(tc)-.5),ti=floor(tc);float tz=floor(tc.y*.5);al=vec3(.42,.42,.4)*(.75+.25*nz.r)*(1.-.45*step(.9,nz.g));if(abs(mod(ti.x,4.)-1.)<.1&&abs(mod(tz,3.)-1.)<.1){vec2 cn=vec2((ti.x+.5)*.6,(tz+.5)*1.2);al=vec3(.3,.31,.3)*(.8+.2*sin(p.x*300.)*sin(p.z*300.)*smoothstep(8.,3.,t));sp=.5;em=vec3(.7,.9,1.)*1.5*(.55+.45*cos((fract(tc.x)-.5)*12.))*((distance(cn,LTA.xz)<.1?flk(1.):0.)+(distance(cn,LTB.xz)<.1?flk(2.):0.));}if(max(tf.x,tf.y)>.475){al=vec3(.5);sp=.2;em*=.1;}}else if(m<4.5){float hc=abs(n.z)>.5?a:lz;al=vec3(.2,.24,.28)*(.35+.8*texture(N,vec2(hc,p.y)*5.).r)*(.6+.8*texture(N,vec2(hc,p.y)*23.).g)*(.8+.4*n2.b);if(abs(n.z)>.5&&h21(id+9.)<.4){vec2 c=vec2(a,p.y)-vec2(.75+.5*h21(id+3.),1.1+.15*h21(id+5.));if(abs(c.x)<.105&&abs(c.y)<.148)al=vec3(.6,.6,.55)*(1.-.3*step(.5,fract(c.y*55.))*step(abs(c.x),.085)*smoothstep(4.,1.5,t));}if(p.y>1.47||a>1.67){al=vec3(.3,.31,.32);sp=.6;gl=40.;}}else if(m<5.5){al=vec3(.36,.34,.3)*(.8+.4*n2.r)*(.9+.2*nz.g);sp=.25;gl=30.;vec2 c=(q.xz-vec2(.68,.62))*rot(.25);if(n.y>.5&&abs(c.x)<.105&&abs(c.y)<.148)al=vec3(.62,.62,.57)*(1.-.3*step(.5,fract(c.x*55.))*step(abs(c.y),.12)*smoothstep(4.,1.5,t));if(a>.905)al=vec3(.05);}else if(m<6.5){al=vec3(.62,.56,.4)*(.75+.3*n2.r)*(.9+.2*nz.g);sp=.35;gl=24.;vec2 b=vec2(-sx*lz,p.y-.985);if(a>.494){if(length(b-vec2(-.165,-.152))<.005){al=vec3(.02);if(LB>=tw)em=vec3(.1,1.,.25)*3.;}if(id==HID){vec2 u=(b-vec2(.06,-.178))/vec2(.11,.055);u=(u-.5)*rot(.05)+.5;if(abs(u.x-.5)<.5&&abs(u.y-.5)<.5){al=vec3(.92,.77,.15)*atl(u,vec4(256,768,256,128)).rgb*(.75+.25*u.y);sp=0.;}}}if(a>.494&&LB>=tw)em+=scrL(id,tw)*al*.7/(1.+70.*max(sdBox2(b,vec2(.156,.118)),0.));if(n.y>.7&&a<.36)al*=mix(1.,.35+.65*step(.5,fract(a*80.)),smoothstep(5.,2.,t));}else if(m<7.5){al=vec3(.012,.016,.016);sp=1.;gl=400.;vec2 u=vec2(.5-sx*lz/.29,.5+(p.y-.985)/.2175),ue=min(u,1.-u);if(LB>=tw&&min(ue.x,ue.y)>0.){vec3 pc=scr(id,u,tw)+vec3(.004,.006,.008);float k=smoothstep(.45,.15,fp/.0009);pc*=mix(1.,.55+.9*(.5+.5*cos(u.y*240.*TAU)),k);pc*=mix(vec3(1),1.+.22*cos(TAU*(u.x*320.+vec3(0,.333,.667))),k);em=pc*smoothstep(0.,.012,ue.x)*smoothstep(0.,.016,ue.y);}vec3 r=reflect(rd,n);float fr=.03+.6*pow(1.-max(dot(n,-rd),0.),4.);vec2 cp=(p+r*((2.7-p.y)/max(r.y,.05))).xz/.6;em+=fr*(vec3(.02,.035,.06)*(.4+.6*sat(r.y*2.+.5))*(1.+step(.46,max(abs(fract(cp.x)-.5),abs(fract(cp.y)-.5)))*step(.05,r.y))+sod*.1*smoothstep(.8,.98,dot(vec3(r.x*sx,r.yz),normalize(vec3(.7,.3,.65)))));}else if(m<8.5){al=vec3(.28,.26,.2)*(.85+.2*n2.r);sp=.15;if(n.y>.5){vec2 k=vec2(lz,a-.72)/.019,kf=abs(fract(k)-.5);al*=mix(1.,.22,step(.4,max(kf.x,kf.y))*smoothstep(6.,1.5,t))*(.7+.5*h21(floor(k)));}}else if(m<9.5){al=h21(id+1.)<.6?vec3(.62,.62,.6):vec3(.45,.07,.05);sp=.6;gl=60.;if(n.y>.9&&length(q.xz-vec2(.66,-.33))<.034){al=vec3(.03,.015,.008);sp=.8;}}else if(m<10.5){al=vec3(.035,.04,.055)*(.5+nz.r);}else{al=vec3(.1,.105,.11)*(.8+.3*n2.r)*(.4+.6*smoothstep(.5,.47,abs(fract(p.y/.227)-.5)));sp=.4;gl=30.;}vec3 nq=vec3(n.x*sx,n.yz),vq=vec3(rd.x*sx,rd.yz);vec3 lk=KL-p;float dk=length(lk),sh=1.,s=.03;lk/=dk;if(dk<9.)for(int i=0;i<24;i++){if(s>dk)break;float h=map(p+n*.005+lk*s);sh=min(sh,.5+.5*h/(.07*s));if(h<.0005){sh=0.;break;}s+=clamp(h*.9,.015,.4);}sh=sh*sh*(3.-2.*sh);sh=sat(sh);vec3 c=vec3(.011,.02,.036)*al*(.5+.5*n.y)*ao;vec3 mo=mlit(id,tw,vec3(a,p.y,lz),nq,vq,al,sp)*((a<1.7&&p.y<1.5)?1.:smoothstep(1.,.55,abs(lz)));if(id==HID)mo*=mix(1.,sh,SM);c+=mo*ao;vec2 id2=id+vec2(sx,0);if(abs(id2.x+.5)<4.){mo=mlit(id2,wake(id2),vec3(5.-a,p.y,lz),vec3(-nq.x,nq.yz),vec3(-vq.x,vq.yz),al,sp)*smoothstep(1.,.55,abs(lz));if(id2==HID)mo*=mix(1.,sh,SM);c+=mo*ao;}vec3 l=HP-p;float d2=dot(l,l);l*=inversesqrt(d2);c+=heroCol(HN)*HI*mix(sh,1.,SM)*(al*max(dot(n,l),0.)+sp*pow(max(dot(n,normalize(l-rd)),0.),gl))/(d2+.02);l=EXS-p;d2=dot(l,l);l*=inversesqrt(d2);c+=vec3(1.,.04,.015)*.5*al*max(dot(n,l),0.)*ao/(d2+.3);l=LTA-p;d2=dot(l,l);l*=inversesqrt(d2);c+=vec3(.7,.9,1.)*flk(1.)*.45*al*max(dot(n,l),0.)*sat(l.y*1.5)*ao/(d2+.3);l=LTB-p;d2=dot(l,l);l*=inversesqrt(d2);c+=vec3(.7,.9,1.)*flk(2.)*.45*al*max(dot(n,l),0.)*sat(l.y*1.5)*ao/(d2+.3);vec3 sd=normalize(vec3(1.,.13,.42));float tt=(p.x+10.)/sd.x;vec3 w=p-sd*tt;float e=.03+tt*.012,so=smoothstep(1.5,1.4,abs(mod(w.z,4.)-2.))*smoothstep(.9,1.,w.y)*smoothstep(2.4,2.3,w.y)*smoothstep(1.45,1.6,p.y-.13*max(p.x+7.5,0.));c+=sod*1.4*so*smoothstep(.22+e,.22-e,abs(fract(w.y/.1)-.5))*al*max(dot(n,-sd),0.)/(1.+tt*tt*.06);c+=sod*.012*al*sat(.3-n.x*.7+n.y*.3)*exp(-(p.x+10.)*.25)*ao;return c+em;}vec3 render(vec3 ro,vec3 rd,out float t){t=0.;float d;for(int i=0;i<84;i++){d=map(ro+rd*t);if(d<.0004+.0008*t||t>45.)break;t+=d;}vec3 col=vec3(0);if(t<45.)col=shade(ro+rd*t,rd,t);col=mix(col,vec3(.004,.008,.014),1.-exp(-t*.018));col+=vec3(1.,.05,.02)*.03*gv(ro,rd,EXS,t,6.);if(LB>=wake(HID))col+=scrL(HID,-1.)*.03*gv(ro,rd,GC+vec3(.15,0,0),t,25.);return col;}void mainImage(out vec4 o,vec2 f){float lb=LB,z=.8,rl=0.;HP=heroPos(lb);HN=heroN(lb);HI=1.4;KL=HP;vec3 ro,ta,h=HP;if(lb<4.){float s=smoothstep(.8,3.8,lb);ro=mix(vec3(-6.15,1.08,4.6),vec3(-5.3,1.3,6.8),s)+.03*exp(-lb*2.5)*sin(vec3(71.,93.,57.)*T);ta=mix(GC,heroPos(max(lb-.1,0.)),smoothstep(.75,1.7,lb));z=.75;rl=.12*exp(-lb*1.2)*sin(lb*5.);}else if(lb<8.){ro=vec3(-5.+.2*sin(lb*.8),.34,h.z+2.2);ta=h+vec3(0,.12,-1.);z=.65;rl=.08*sin(lb*.9);}else if(lb<12.){ro=vec3(h.x+2.3,2.4,h.z+3.);ta=h+vec3(-.6,0,0);z=.75;rl=.05;}else if(lb<16.){CE=0.;ro=vec3(h.x*.75+.6,8.,h.z*.75-1.2);ta=vec3(ro.x,0.,ro.z-.5);z=.8;rl=.5+(lb-12.)*.07;}else if(lb<20.){ro=vec3(5.3,mix(1.75,.45,smoothstep(16.,18.5,lb)),h.z+3.4);ta=h+vec3(0,.1,0);z=.7;rl=-.06;}else if(lb<24.){ro=vec3(h.x-2.4,2.45,h.z-2.6);ta=h;z=.75;}else if(lb<28.){ro=vec3(.3,1.2,min(h.z+2.5,13.2));ta=vec3(0.,.9,ro.z-4.);z=.7;rl=.1*sin(lb*1.7);}else{float s=(lb-28.)/4.;ro=mix(vec3(.2,.4,5.6),vec3(.3,1.7,2.9),s*s);ta=h;z=.8;}z*=1.-.04*K.x;ZF=z;vec3 rd=ray(f,ro,ta,z,rl);float t;vec3 col=render(ro,rd,t);col+=hero(ro,rd,HP,t,HN);if(lb<4.){float ts=lb*.5;for(int i=0;i<26;i++){float fi=float(i);vec3 ha=h33(vec3(fi,fi*1.7,3.)),hb=h33(vec3(fi*2.3,7.,fi));vec3 c=GC+vec3(.02,(ha.x-.4)*.2,(ha.y-.5)*.26)+vec3(1.2+3.4*ha.z,(hb.x-.3)*2.6,(hb.y-.5)*3.2)*(1.-exp(-2.5*ts))*.4-vec3(0,2.6*ts*ts,0);float fy=c.x<-6.6?.75:.015,ld=step(c.y,fy),a1=hb.z*6.+ts*(4.+8.*ha.x),a2=ha.y*6.+ts*5.;c.y=max(c.y,fy);vec3 n=mix(vec3(sin(a1)*cos(a2),cos(a1),sin(a1)*sin(a2)),vec3(0,1,0),ld);float dn=dot(rd,n),tt=dot(c-ro,n)/(abs(dn)>.001?dn:1.);if(tt>0.&&tt<t){vec3 hp=ro+rd*tt,b1=normalize(cross(n,vec3(.3,.5,.8))),b2=cross(n,b1);vec2 uv=vec2(dot(hp-c,b1),dot(hp-c,b2));float sz=.012+.034*hb.x;uv*=rot(fi*2.4);uv.x+=uv.y*(ha.z-.5)*1.6;uv.y*=.6+.9*ha.x;float d=max(-uv.y-sz*.5,max(dot(uv,vec2(.87,.5)),dot(uv,vec2(-.87,.5)))-sz*.5);if(d<0.){vec3 lh=HP-hp;float dl=dot(lh,lh);col+=vec3(.5,.8,1.)*(.05+2.5*pow(abs(dot(n,normalize(normalize(GC+vec3(.1,0,0)-hp)-rd))),40.)+.25*smoothstep(-.004,0.,d))+heroCol(HN)*4.*pow(abs(dot(n,normalize(lh*inversesqrt(dl)-rd))),30.)/(1.+dl);}}}for(int i=0;i<6;i++){float fi=float(i),ph=fract(lb*.8+fi*.37);vec3 hh=h33(vec3(fi,floor(lb*.8+fi*.37),5.));vec3 c=vec3(-6.99,1.024,4.942)+vec3(.5+hh.x,hh.y*1.2,hh.z-.5)*ph*.5-vec3(0,ph*ph*.6,0);col+=vec3(1.,.6,.2)*.012*(1.-ph)*pglow(ro,rd,c,t);}}o=vec4(col,1);}
`};
SCN.city={th:1,bl:.38,
q:(lb,len,b)=>[0,1,Math.max(0,1-lb/1.2)**2.5,.002+(lb<2?.006*(1-lb/2):0)],
glsl:`#define CS 60.
#define HW 18.
#define WR 25.
#define MOON vec3(.2274,.1819,.9566)
float gb,fp,hn;vec3 hp,hk,W0,A0;vec3 gN,gG;vec2 gC;vec4 gT;float gM;vec3 vert(float k,float ls,float of){float m=floor(k/4.),j=k-4.*m,a=90.*j+14.*abs(ls),l=10.5*(1.-2.*mod(j,2.))*ls+of;vec2 O=360.*vec2(floor(m*.5),floor((m+1.)*.5));return mod(m,2.)<.5?vec3(O.x+l,0,O.y+a):vec3(O.x+a,0,O.y+l);}float heroY(float lb){float d=(lb-14.2)/1.7;return 46.+6.*sin(lb*.4+.58)-25.*exp(-d*d)-8.*smoothstep(46.,52.,lb);}vec3 path(float lb,float ls,float of){float s=(clamp(lb,2.,56.)-2.)*.5,k=min(floor(s),26.);vec3 p=mix(vert(k,ls,of),vert(k+1.,ls,of),s-k);p.y=heroY(min(lb,56.));return p;}vec3 heroPos(float lb){vec3 p=path(lb,1.,0.);if(lb<2.){float s=lb*.5;s=1.-(1.-s)*(1.-s);p=mix(W0,vec3(vert(0.,1.,0.).xz,heroY(2.)).xzy,s);}if(lb>56.){float u=lb-56.;p.y+=u*u*15.+u*20.;}return p;}vec4 tower(vec2 c){float h=h21(c*1.37+3.1),g=h21(c+71.3),n=.5+.5*sin(c.x*.33+1.3)*sin(c.y*.27+.5);float H=floor((68.+250.*h*h*(.15+n*n))/3.4)*3.4,f=fract(g*17.),ts=2.4*floor(2.+4.5*f);return vec4(H,ts,H+(f>.4?12.+H*.35*fract(g*53.):3.5+4.*fract(g*53.)),g);}float trace(vec3 ro,vec3 rd,int ns){vec2 c=floor(ro.xz/CS),sg=vec2(rd.x<0.?-1.:1.,rd.z<0.?-1.:1.),iv=1./rd.xz,tM=((c+max(sg,0.))*CS-ro.xz)*iv,dT=CS*abs(iv);vec3 ir=1./rd;float tg=rd.y<0.?-ro.y/rd.y:1e9,t=1e9;gM=0.;gG=vec3(0);gN=vec3(0,1,0);for(int i=0;i<48;i++){if(i>=ns)break;vec4 tw=tower(c);vec2 ct=(c+.5)*CS;float te=min(tM.x,tM.y);vec3 bo=ro-vec3(ct.x,0,ct.y),k=abs(ir)*vec3(HW,tw.x*.5,HW),nn=-ir*(bo-vec3(0,tw.x*.5,0)),t1=nn-k,t2=nn+k;float tN=max(max(t1.x,t1.y),t1.z),tF=min(min(t2.x,t2.y),t2.z),th=1e9;if(tN<tF&&tN>0.){th=tN;gM=2.;gN=-sign(rd)*step(t1.yzx,t1.xyz)*step(t1.zxy,t1.xyz);}float hh=(tw.z-tw.x)*.5;k=abs(ir)*vec3(tw.y,hh,tw.y);nn=-ir*(bo-vec3(0,tw.x+hh,0));t1=nn-k;t2=nn+k;tN=max(max(t1.x,t1.y),t1.z);tF=min(min(t2.x,t2.y),t2.z);if(tN<tF&&tN>0.&&tN<th){th=tN;gM=3.;gN=-sign(rd)*step(t1.yzx,t1.xyz)*step(t1.zxy,t1.xyz);}if(tw.w>.55){float ah=tw.z+6.+22.*fract(tw.w*29.),ta=dot(ct-ro.xz,rd.xz)/dot(rd.xz,rd.xz);if(ta>0.&&ta<min(th,tg)){vec3 q=ro+rd*ta;float dx=length(q.xz-ct),r=max(.35,ta*fp*1.1),dy=q.y-ah,dd=dx*dx+dy*dy;gG+=vec3(1.,.06,.025)*(.2+.8*pow(.5+.5*sin(gb*PI*.5+tw.w*40.),4.))*3.5*exp(-ta*.0012)*r*r/(dd+r*r)*step(dd,r*r*40.);if(q.y>tw.z&&q.y<ah)gG-=vec3(.02,.025,.03)*smoothstep(r*.6,r*.2,dx)*exp(-ta*.002);}}if(th<tg){t=th;gC=c;gT=tw;break;}if(te>tg){t=tg;gM=1.;gN=vec3(0,1,0);gC=c;gT=tw;break;}gM=0.;if(rd.y>0.&&ro.y+rd.y*te>345.)break;if(tM.x<tM.y){tM.x+=dT.x;c.x+=sg.x;}else{tM.y+=dT.y;c.y+=sg.y;}}return t;}vec3 sky(vec3 rd){float e=rd.y;vec3 c=mix(vec3(.2,.085,.032),vec3(.004,.01,.032),smoothstep(-.03,.4,e));c+=vec3(.0,.02,.034)*exp(-abs(e-.14)*8.);float d=dot(rd,MOON);c+=vec3(1.,.8,.55)*(smoothstep(.9993,.99955,d)*2.5+pow(max(d,0.),300.)*.3+pow(max(d,0.),12.)*.07);vec3 q=rd*190.,id=floor(q);float h=h31(id);c+=vec3(.8,.9,1.)*step(.9965,h)*smoothstep(.4,.05,length(q-id-.5))*smoothstep(.12,.5,e)*(.3+2.*fract(h*77.));return c;}vec4 wake(vec3 p,float hs){for(int i=0;i<7;i++){float m=float(i);vec2 O=360.*vec2(floor(m*.5),floor((m+1.)*.5));bool ev=mod(m,2.)<.5;float al=ev?p.z-O.y:p.x-O.x,la=ev?p.x-O.x:p.z-O.y;if(m*8.+2.>gb)break;if(abs(la)>44.||al<-34.||al>408.)continue;float j=clamp(floor((al-14.)/90.),0.,3.),k=m*4.+j;vec3 a=vert(k,1.,0.),b=vert(k+1.,1.,0.);vec2 pa=p.xz-a.xz,ba=b.xz-a.xz;float h=sat(dot(pa,ba)/dot(ba,ba)),tb=2.+2.*(k+h);if(tb>min(gb,56.))continue;vec3 d=p-vec3(a.x+ba.x*h,heroY(tb),a.z+ba.y*h);float r=WR*(.45+.6*hs);if(dot(d,d)<r*r)return vec4(heroCol(k+2.),gb-tb);}return vec4(0,0,0,-1.);}vec3 motif(vec2 c,float rw,float h,float fc){float md=floor(fract(h*11.3)*4.),t=gb+fc*3.+h*40.;vec3 o=vec3(0);if(md<1.){float sx=t*.4,sy=t*.4*11./max(rw-5.,3.),px=floor(tri(sx)*11.+.5),py=floor(tri(sy)*(rw-5.)+.5);vec2 d=c-vec2(px,py);if(d.x>=0.&&d.x<4.&&d.y>=0.&&d.y<4.)o=heroCol(floor(sx)+floor(sy)+floor(h*6.))*1.5;}else if(md<2.){vec3 kc=heroCol(floor(h*6.)+floor(t/16.));for(int e=0;e<3;e++){float tt=t*.2-float(e)*.14;vec2 a0=vec2(tri(tt*1.1+3.3),tri(tt*.83+1.1))*vec2(14.,rw-1.),a=a0;for(int i=1;i<5;i++){float fi=float(i);vec2 b=i==4?a0:vec2(tri(tt*(1.1+.37*fi)+fi*2.7),tri(tt*(.83+.23*fi)+fi*1.3+.5))*vec2(14.,rw-1.);o=max(o,kc*step(sdSeg2(c,a,b),.62)*(1.3-float(e)*.5));a=b;}}}else if(md<3.){float hc=h11(c.x*7.3+h*91.),y=fract(c.y/rw*(1.+hc)+t*(.1+.14*hc)+hc*7.);o=vec3(.3,1.,.45)*pow(1.-y,4.)*1.1+vec3(.6,1.,.75)*step(y,1.6/rw)*1.2;}else{vec2 p=c-vec2(7.,rw*.5);float a=floor((atan(p.y,p.x)/TAU+.5)*34.),ha=h11(a+h*37.),R0=length(vec2(7.5,rw*.5)),r=fract(ha+t*.06*(.6+ha));r=r*r*R0;float l=length(p);o=vec3(.75,.9,1.)*step(abs(l-r),.5+r*.07)*(.3+1.5*r/R0)+vec3(.75,.9,1.)*.5*step(.985,h21(c+floor(t*.5+ha*3.)*7.1+h));}return o;}vec3 facade(vec3 p,vec3 n,vec3 rd,float t){vec4 tw=gT;vec2 ct=(gC+.5)*CS;vec3 l=hp-p;float d2=dot(l,l),hh=tw.w;vec3 wall=mix(vec3(.04,.045,.055),vec3(.06,.05,.042),fract(hh*5.3))*(.5+.7*fract(hh*13.1));vec3 amb=vec3(.012,.022,.05)*(.6+.4*n.y)+vec3(.16,.07,.025)*exp(-p.y/40.)*(.7-.3*n.y)+vec3(1.,.8,.55)*.07*max(dot(n,MOON),0.);vec3 hl=hk*40.*max(dot(n,l)*inversesqrt(d2),0.)/(d2+14.);if(n.y>.5){vec2 q=p.xz-ct;float ed=(gM>2.5?tw.y:HW)-max(abs(q.x),abs(q.y)),g=h21(floor(q/3.6)+hh*50.),g2=h21(floor(q/1.2)+hh*9.);vec3 c=vec3(.1,.1,.11)*(.6+.25*g2+.3*step(.62,g)*step(.3,g2)+.9*smoothstep(.8,.35,ed))*(vec3(.02,.032,.06)+vec3(.05,.025,.012)+hl+vec3(1.,.8,.55)*.02);c+=(g2>.5?vec3(1.,.7,.35):vec3(.6,.8,1.))*step(.965,g)*smoothstep(.2,.05,length(fract(q/3.6)-.5))*1.5;return c;}bool fx=abs(n.x)>.5;float u=(fx?p.z-ct.y:p.x-ct.x),fc=fx?(n.x>0.?0.:1.):(n.z>0.?2.:3.);vec2 cu=vec2(u/2.4+.5,p.y/3.4),ci=floor(cu),cf=cu-ci;float ru=fx?rd.z/rd.x:rd.x/rd.z,rv=rd.y/(fx?rd.x:rd.z),px=t*fp;vec2 e=vec2(px*sqrt(1.+ru*ru)/2.4,px*sqrt(1.+rv*rv)/3.4);float em=max(e.x,e.y),lo=smoothstep(.25,.6,em);bool cw=fract(hh*7.3)<.5;float mx=cw?.06:.2,my=fract(hh*3.7)<.5?.26:.4;vec2 ee=min(e,.5);float wm=smoothstep(mx-ee.x,mx+ee.x,cf.x)*smoothstep(1.-mx+ee.x,1.-mx-ee.x,cf.x)*smoothstep(my-ee.y,my+ee.y,cf.y)*smoothstep(.96+ee.y,.96-ee.y,cf.y);wm=mix(wm,(1.-2.*mx)*(.96-my),lo);vec3 pc=p;if(fx)pc.z-=(cf.x-.5)*2.4;else pc.x-=(cf.x-.5)*2.4;pc.y-=(cf.y-.5)*3.4;vec3 hv=h33(vec3(ci,fc+hh*91.)+.37);float pr=.05+.1*fract(hh*23.)+.45*step(.93,h21(vec2(ci.y,hh*77.)));float lit=mix(step(1.-pr,hv.x),pr,smoothstep(2.5,9.,em))*(1.+1.6*lo);vec3 E=mix(vec3(1.,.58,.26),vec3(.5,.75,1.),step(.78,hv.y+.3*fract(hh*3.1)-.15))*(.1+1.1*hv.z*hv.z*hv.z)*lit;vec4 wk=wake(pc,hv.y);if(wk.a>=0.&&hv.x>.4)E=wk.rgb*(.4+1.6*exp(-wk.a*3.))*(.4+.6*hv.z);float ans=sat((gb-32.)*1.5-length(ct-A0.xz)/200.);if(ans>0.&&gM<2.5){vec3 mo=motif(vec2(ci.x+7.,ci.y),tw.x/3.4,hh,fc)*(.3+.7*K.x)*ans;E=mix(E*(wk.a<0.?.5:1.),mo,step(.05,dot(mo,vec3(1))));}E*=1.+K.x*(.25+.4*ans);if(p.y<4.8&&gM<2.5){float sh=h21(vec2(floor(u/4.8+.5),fc+hh*31.));E=vec3(1.,.62,.3)*step(.4,sh)*(.3+.7*fract(sh*9.))*(.6+.4*smoothstep(.5,3.5,p.y));wm=mix(smoothstep(.03,.03+ee.x,abs(fract(u/4.8+.5)-.5)*2.-.03)*smoothstep(.0,.06,abs(fract(u/1.2)-.5)-.04)*step(.4,p.y)*step(p.y,4.1),.7,lo);hv.y=.2;}if(gC==vec2(-1,0)&&fc<.5&&ci==vec2(-4,14)){vec2 g=cf-.5;float a=atan(g.y,g.x),jr=.24+.1*sin(a*5.+1.)+.07*sin(a*11.);E=hk*.8+vec3(.5,.32,.16);if(length(g)<jr)E*=.1;}float cs=max(dot(-rd,n),0.),fr=.04+.6*pow(1.-cs,4.);vec3 rf=reflect(rd,n);vec3 gl=sky(vec3(rf.x,abs(rf.y),rf.z))*fr*mix(1.6,.5,step(rf.y,0.))*(.6+.8*hv.x)+vec3(.003,.005,.009);gl+=hk*5.*pow(max(dot(rf,l)*inversesqrt(d2),0.),90.)/(1.+d2*.004);float sub=cw?smoothstep(.0,.04,abs(fract(cf.x*3.-.5*mx*3.+.5)-.5)-.03):1.;float bd=step(1.-(.2+.7*hv.y)*(.96-my),cf.y)*.0+smoothstep(.02,.0,cf.y-(.96-(.15+.75*hv.y)*(.96-my)));float dn=abs(fx?rd.x:rd.z)+1e-3,su=(fx?rd.z:rd.x)/dn,sv=rd.y/dn,x0=cf.x*2.4,y0=cf.y*3.4;float tu=(su>0.?2.4-x0:-x0)/(abs(su)<1e-3?1e-3:su),tv=(sv>0.?3.4-y0:-y0)/(abs(sv)<1e-3?1e-3:sv),td=3.+3.*hv.z,ti=min(td,min(tu,tv));float rm=ti==td?.62+.3*step(.5,fract((x0+su*td)*.8+hv.x))*step((y0+sv*td)/3.4,.6):ti==tv?(sv>0.?1.15+.5*step(.5,fract(ti*.7+hv.y)):.3):.48;float iv=mix(rm*(1.-.06*ti),.95,bd*.8)*(.72+.28*sub);vec3 c=mix(wall*(amb+hl)*(.75+.25*step(.03,cf.y)),gl+E*mix(iv,.7,lo),wm);float cr=fract(hh*3.17);if(cr>.6&&gM<2.5&&p.y>tw.x-.8)c+=(cr>.82?vec3(1.,.5,.18):vec3(.5,.75,1.))*1.3;return c;}vec3 street(vec3 p,vec3 rd,float t,out vec3 n,out float wet){vec2 s=mod(p.xz+30.,60.)-30.,as=abs(s);bool av=as.x<as.y;float la=av?s.x:s.y,al=av?p.z:p.x,ala=abs(la),sid=floor(((av?p.x:p.z)+30.)/60.)+(av?0.:57.);float px=t*fp/max(-rd.y,.03),inter=step(max(as.x,as.y),12.);vec3 nz=texture(N,p.xz*.021).rgb+.5*texture(N,p.xz*.11).rgb;float pud=smoothstep(.5,.95,nz.b+.35*texture(N,p.xz*.004).g);vec3 al3=vec3(.02,.021,.024)*(.7+.5*nz.r);if(ala>8.&&inter<.5)al3=vec3(.045,.045,.048)*(.8+.3*step(.06,fract(al/2.)))*(.7+.4*nz.g);float mk=0.,az=abs(mod(al+30.,60.)-30.);if(inter<.5&&ala<8.){mk=smoothstep(.09+px,.09,abs(ala-3.6))*step(fract(al/7.),.42)+smoothstep(.07+px,.07,abs(ala-.2))*.8;mk=mix(mk,step(fract(la/1.2),.5)*.9,step(13.,az)*step(az,16.));}al3=mix(al3,vec3(.28,.28,.26),sat(mk)*(.5+.5*nz.r)*smoothstep(5.,1.,px));vec2 lq=vec2(ala-9.,mod(al,20.)-10.);float ld=dot(lq,lq),lo=1.-inter;vec3 lg=vec3(1.,.46,.12)*(1.6/(1.+ld*.05));vec3 l=hp-p;float d2=dot(l,l);vec3 c=al3*(vec3(.02,.03,.06)+lg*.5*(1.-inter*.5)+hk*70.*max(l.y,0.)*inversesqrt(d2)/(d2+14.));c+=vec3(1.,.5,.15)*2.5*smoothstep(.45+px*.7,.1,sqrt(ld))*lo*min(1.,.9/(px+.3));for(int i=0;i<2;i++){float lc=i==0?1.9:5.4,dr=la>0.?1.:-1.,ln=dr*(lc+sid*3.),sp=(9.+5.*h11(ln*3.7+sid))*dr;float x=(al-T*sp)/52.+h11(ln+sid*1.3)*9.,ix=floor(x),fx=(x-ix)*52.;fx=dr>0.?52.-fx:fx;float on=step(.4,h11(ix*7.1+ln*3.3)),w=smoothstep(.6+px,.2,abs(ala-lc));if(ala<8.)c+=(dr>0.?vec3(1.,.88,.7)*1.6:vec3(1.,.05,.02)*1.5)*on*w*(smoothstep(0.,.8,fx)*exp(-fx*.55)*1.1+smoothstep(1.4,.3,fx)*smoothstep(-.1,.3,fx)*2.5);}wet=.45+.55*pud;n=normalize(vec3((nz.r-.75)*.14*(1.-pud*.85),1.,(nz.g-.75)*.14*(1.-pud*.85)));return c;}vec3 rodr(vec3 v,vec3 a,float c,float s){return v*c+cross(a,v)*s+a*dot(a,v)*(1.-c);}vec3 fog(vec3 c,vec3 ro,vec3 rd,float t){float y=ro.y+rd.y*min(t,1200.)*.5,f=1.-exp(-t*(.0011+.0022*exp(-max(y,0.)/90.)));vec3 fc=vec3(.14,.064,.03)*exp(-max(y,0.)/100.)+vec3(.008,.018,.045);return mix(c,fc,f);}void mainImage(out vec4 o,vec2 f){gb=LB;W0=vec3(-12.,49.3,20.4);hp=heroPos(gb);hn=gb<2.?1.:2.+floor((min(gb,56.)-2.)*.5);hk=heroCol(hn);A0=heroPos(32.);vec3 ro,ta;float z=.8,rl=0.,u;if(gb<4.){u=gb/4.;ro=vec3(1.5+2.5*u,47.3-.5*u,12.5-3.*u);ta=mix(W0+vec3(0,-.2,0),W0+vec3(8.,1.,20.),smoothstep(.2,1.,u)*.4);z=.62;rl=.14-.1*u;}else if(gb<12.){ro=path(gb-.4,.3,0.)+vec3(0,3.,0);ta=mix(path(gb+.4,.5,0.),hp,.7);z=.8;rl=.1*sin((gb-4.)*PI*.25);}else if(gb<16.){ro=path(14.5,0.,-2.5);ro.y=1.1;ta=hp+vec3(0,3.,0);z=.62;rl=.08;}else if(gb<20.){ro=path(gb+.7,-.25,0.)+vec3(0,-9.,0);ta=hp+vec3(0,1.,0);z=1.;rl=-.1;}else if(gb<24.){ro=path(gb+.25,0.,7.5)+vec3(0,4.,0);ta=mix(hp,path(gb-.8,0.,-9.),.35);z=.72;rl=.14;}else if(gb<28.){ro=path(gb-1.1,0.,0.)+vec3(0,64.,0);ta=path(gb+2.2,.4,0.);z=.72;rl=.1*sin((gb-24.)*.8);}else if(gb<32.){u=(gb-28.)/4.;vec3 c0=path(30.4,0.,0.);float cx=floor(c0.x/60.),H1=tower(vec2(cx,12.)).x,H2=tower(vec2(cx,11.)).x,sd=H1<H2?1.:-1.,H=min(H1,H2);float la=mix(32.,-1.,smoothstep(0.,.75,u));H=tower(vec2(cx,sd>0.?12.:11.)).z;ro=vec3(cx*60.+18.+16.*u,H+3.5-min(H-60.,45.)*smoothstep(.45,1.,u),720.+sd*la);ta=mix(ro+vec3(30.,-16.,-sd*30.),hp,smoothstep(.35,.8,u));z=.7;rl=-.12*sd*(1.-u);}else if(gb<40.){u=gb-32.;ro=path(gb-1.,0.,0.)+vec3(0,36.+pow(u,1.5)*12.5,0);ta=mix(hp+vec3(0,10.,0),path(gb+6.,0.,0.)+vec3(0,40.+u*16.,0),smoothstep(2.2,5.5,u));z=.75;}else if(gb<48.){u=gb-44.;ro=vec3(790.+u*42.,165.+u*4.,840.);ta=ro+vec3(80.-u*4.,-30.,200.);z=.8;rl=-.05;}else if(gb<56.){ro=path(gb-.4,.35,0.)+vec3(0,-6.,0);ta=hp+vec3(0,9.,0);z=.58;rl=.12*sin((gb-48.)*.4);}else{u=gb-56.;vec3 b=path(56.,0.,0.);ro=vec3(b.x,b.y-4.+u*u*5.+u*5.,b.z-20.-u*u*6.5);ta=hp;z=.8;rl=.03*u;}z*=1.-.03*K.x;vec3 r0=ro,rd=ray(f,ro,ta,z,rl);fp=1./(R.y*z);rd+=step(abs(rd),vec3(1e-4))*1e-4;rd=normalize(rd);vec3 r1=rd,col=vec3(0),att=vec3(1);float t0=1e9,hd=length(hp-r0),hs=max(3.,hd*.05);for(int b=0;b<2;b++){float t=trace(ro,rd,b==0?48:20),m=gM,h2=b==0?hs:3.,wet=0.;vec3 c,nn,p=ro+rd*t,gg=gG;if(b==0)t0=t;if(m<.5){c=sky(rd);if(b==1)c=fog(c,ro,rd,500.);t=1e4;}else if(m<1.5){c=fog(street(p,rd,t,nn,wet),ro,rd,t);}else c=fog(facade(p,gN,rd,t),ro,rd,t);col+=att*(c+gg+hero(ro/h2,rd,hp/h2,t/h2,hn));float fr=(.04+.75*pow(1.-max(-rd.y,0.),4.))*wet*exp(-t*.0025);if(m<.5||m>1.5||fr<.012)break;att*=fr;ro=p+vec3(0,.02,0);rd=reflect(rd,nn);rd.y=abs(rd.y)+.002;rd=normalize(rd);}for(int i=0;i<1;i++){vec3 q=hp;float tq=dot(q-r0,r1);if(tq>0.&&tq<t0+1.){vec3 d=r0+r1*tq-q;float d2=dot(d,d);if(i==0)col+=hk*.3/(1.+d2/(hd*hd*.0005+.3));}}{vec3 a=hp,ba=heroPos(gb-(gb>56.?.45:.2))-a,w=r0-a;float Bq=dot(r1,ba),Cq=dot(ba,ba),Dq=dot(r1,w),Eq=dot(ba,w),sq=sat((Eq-Bq*Dq)/max(Cq-Bq*Bq,1e-4)),tq=dot(a+ba*sq-r0,r1);if(tq>0.&&tq<t0+1.){vec3 d=r0+r1*tq-a-ba*sq;col+=hk*.035*hs*hs/(dot(d,d)+.012*hs*hs)*(1.-sq)*(1.-sq);}}if(gb<7.){float ts=gb*.5,tp=1e9;vec3 add=vec3(0);for(int i=0;i<16;i++){float fi=float(i);vec3 h=h33(vec3(fi,fi*1.7,3.)+.5),h2=h33(vec3(fi*2.3,7.,fi)+.5);vec3 c=W0+vec3(.3,(h.y-.5)*1.6,(h.z-.5)*2.2)+vec3(4.+13.*h.x,(h2.x-.4)*5.,(h2.y-.5)*9.-2.)*ts+vec3(0,-1.6*ts*ts,0);vec3 ax=normalize(h2-.5);float an=h.x*6.+ts*(1.2+4.*h2.z),ca=cos(an),sa=sin(an);vec3 lo=rodr(r0-c,ax,ca,-sa),ld=rodr(r1,ax,ca,-sa);float t=-lo.z/ld.z;if(t<0.||t>t0)continue;vec2 q=lo.xy+ld.xy*t,sz=vec2(.8,1.)*(.7+.6*h.y),aq=abs(q);if(aq.x>sz.x||aq.y>sz.y)continue;vec3 nw=rodr(vec3(0,0,1),ax,ca,sa);nw*=dot(nw,r1)>0.?-1.:1.;vec3 pw=r0+r1*t,rf=reflect(r1,nw),l=hp-pw;float d2=dot(l,l);float bar=min(min(sz.x-aq.x,sz.y-aq.y),min(aq.x,aq.y)+.025);if(bar<.05){if(t<tp){tp=t;add=vec3(.3,.32,.35)*(vec3(.05,.07,.12)+vec3(.3,.14,.05)*(.5-.5*nw.y)+hk*14./(d2+3.)+2.*exp(-gb*1.2));}}else{float fr=.08+.9*pow(1.-abs(dot(nw,r1)),3.);vec3 tint=mix(vec3(.5,.8,1.),hk,.35);col=col*(1.-.15*fr)+tint*(fr*(mix(vec3(.5,.22,.07),vec3(.08,.16,.32),smoothstep(-.3,.3,rf.y))*1.3+1.5*exp(-gb*1.2))+7.*pow(max(dot(rf,l)*inversesqrt(d2),0.),50.)+3.*pow(max(dot(rf,MOON),0.),200.)+.015+.1*hk/(d2*.05+1.));}}if(tp<1e8)col=add;for(int i=0;i<28;i++){float fi=float(i)+40.;vec3 h=h33(vec3(fi,fi*1.7,3.)+.5),h2=h33(vec3(fi*2.3,7.,fi)+.5);vec3 c=W0+vec3(.3,(h.y-.5)*1.6,(h.z-.5)*2.2)+vec3(3.+18.*h.x,(h2.x-.4)*7.,(h2.y-.5)*12.-2.)*ts+vec3(0,-1.8*ts*ts,0);float tq=dot(c-r0,r1);if(tq<0.||tq>t0)continue;vec3 d=r0+r1*tq-c;float r=.012+tq*fp*1.2;col+=mix(vec3(.8,.9,1.),hk,.4)*pow(.5+.5*sin(ts*(9.+20.*h2.z)+fi),6.)*5.*r*r/(dot(d,d)+r*r)*step(dot(d,d),r*r*40.);}}o=vec4(col,1);}
`};
SCN.desk={sv:1,th:1,bl:.5,
q:(lb,len,b)=>[Math.max(0,Math.min(1,(lb-30)/2)),Math.min(1,lb/2)**1.5,0,.0015],
glsl:`float wake(vec2 id){return id==vec2(-3.,2.)?-1.:999.;}vec3 scr(vec2 id,vec2 u,float tw){float s=LB-16.;if(s<0.){vec3 c=saver(4,u,T);return c*c*(c*.4+.6)*1.5;}if(s<.5){float h=max(1.-s/.14,.012),w=sat(1.-(s-.14)/.2),v=abs(u.y-.5)/h;return vec3(.75,.9,1.)*(1.5+7.*sat(s/.14))*step(v,.5)*step(abs(u.x-.5),.5*w+.006)*sat(1.-(s-.34)/.12);}return saver(0,u,T)*3.2*sat((s-.5)*2.5);}vec3 scrL(vec2 id,float tw){float s=LB-16.,f=1.+.07*sin(T*37.)+.16*(vn(vec2(T*11.,3.))-.5);if(s<0.)return vec3(.42,.72,.9)*.6*f;if(s<.5)return vec3(.75,.9,1.)*1.1*sat(1.-s/.3);return vec3(.55,.68,1.)*.2*sat((s-.5)*2.5)*f;}
#define U(x,i) t=x;if(t<d){d=t;gm=i;}
const vec2 HID=vec2(-3.,2.);const vec3 GC=vec3(-7.003,.985,5.),EXS=vec3(-9.9,2.3,8.),LTA=vec3(-8.7,2.68,5.4),LTB=vec3(3.3,2.68,-5.4);float CE=1.,SM=0.,HI=0.,HN=0.,ZF=1.;vec3 HP=vec3(0,-9,0),KL=vec3(0);vec3 gq;vec2 gid;float gm,gs;float map(vec3 p){float t,d=p.y;gm=1.;U(min(10.-abs(p.x),13.5-abs(p.z)),2.)if(CE>0.){U(max(2.7-p.y,-sdBox(p-vec3(.3,3.2,.3),vec3(.29,.7,.29))),3.)}float cx=clamp(floor(p.x/5.),-2.,1.),lx=p.x-cx*5.-2.5,cz=clamp(floor(p.z*.5),-6.,5.),lz=p.z-cz*2.-1.,a=abs(lx);gid=vec2(cx*2.+step(0.,lx),cz);gs=lx<0.?-1.:1.;vec3 q=vec3(a,p.y,lz*((gid==HID||h21(gid+.5)<.5)?1.:-1.));gq=q;float bb=max(max(a-1.72,p.y-1.52),abs(p.z)-12.05);if(bb>.2){U(bb,4.)}else{U(max(sdBox2(vec2(a,p.y-.75),vec2(.03,.75)),abs(p.z)-12.),4.)U(sdBox(vec3(a-.85,p.y-.75,abs(lz)-1.),vec3(.85,.75,.025)),4.)U(sdBox(q-vec3(.47,.715,0),vec3(.44,.015,.97)),5.)U(sdBox(q-vec3(.42,.34,.68),vec3(.3,.34,.22)),11.)vec3 c=q-vec3(1.2,.46,.5);U(min(sdRBox(c,vec3(.21,.035,.21),.03),sdRBox(c-vec3(.23,.36,0),vec3(.03,.24,.2),.03)),10.)U(max(length(c.xz)-(q.y<.08?.25:.025),q.y-.45),11.)vec3 m=q-vec3(.31,.98,0);t=smin(sdRBox(m-vec3(.14,0,0),vec3(.05,.18,.2),.02),sdRBox(m+vec3(.03,.01,0),vec3(.16,.15,.17),.04),.03);t=min(t,sdRBox(q-vec3(.3,.765,0),vec3(.11,.035,.12),.02));t=max(t,-sdBox(q-vec3(.5,.985,0),vec3(.02,.118,.156)));U(t,6.)U(max(length(q+vec3(.703,-.985,0))-1.2,sdBox(q-vec3(.49,.985,0),vec3(.02,.118,.156))),7.)U(sdRBox(q-vec3(.72,.745,0),vec3(.075,.012,.21),.008),8.)U(max(length(q.xz-vec2(.66,-.33))-.04,abs(q.y-.78)-.05),9.)}return d;}float flk(float s){float t=T*9.+s*31.;return step(.35,vn(vec2(t*.21,s)))*(.3+.7*step(.4,vn(vec2(t,s+5.))));}float gv(vec3 ro,vec3 rd,vec3 p,float tm,float k){float t=clamp(dot(p-ro,rd),0.,tm);vec3 d=ro+rd*t-p;return 1./(dot(d,d)*k+1.);}vec3 mlit(vec2 id,float tw,vec3 q,vec3 n,vec3 v,vec3 al,float sp){if(LB<tw)return vec3(0);vec3 l=vec3(.52,.985,0)-q;float d2=dot(l,l);l*=inversesqrt(d2);return scrL(id,tw)*(sat(.05-l.x*1.3)*(al*max(dot(n,l),0.)+sp*pow(max(dot(n,normalize(l-v)),0.),40.))/(d2+.1)+al*.04/(1.+d2*d2));}vec3 shade(vec3 p,vec3 rd,float t){map(p);float m=gm,sx=gs;vec3 q=gq;vec2 id=gid;if(p.y>2.705&&(max(abs(p.x-.3),abs(p.z-.3))>.3||p.y>3.8))return vec3(0);float ep=.0004+.0006*t;vec3 n=vec3(0);for(int i=0;i<4;i++){vec3 e=.5773*(2.*vec3(((i+3)>>1)&1,(i>>1)&1,i&1)-1.);n+=e*map(p+e*ep);}n=normalize(n);float lz=p.z-id.y*2.-1.,a=q.x,ao=(.35+.65*sat(map(p+n*.1)/.1))*(.6+.4*sat(map(p+n*.35)/.35)),tw=wake(id),fp=t/(R.y*ZF);vec4 nz=texture(N,p.xz*1.7+p.y*.37),n2=texture(N,(p.xz+p.yy*vec2(.7,.3))*.13);vec3 al=vec3(.3),em=vec3(0),sod=vec3(1.,.32,.05);float sp=.02,gl=20.;if(m<1.5){al=vec3(.048,.069,.085)*(.5+nz.r)*(.7+.6*n2.g)+vec3(.05,.045,.035)*step(.86,nz.b);sp=0.;}else if(m<2.5){al=vec3(.3,.31,.29)*(.85+.3*n2.r);if(p.y<.1)al=vec3(.03);if(p.x<-9.99){float wz=abs(mod(p.z,4.)-2.),wy=p.y-1.65;if(wz<1.55&&abs(wy)<.8){al=vec3(.04);sp=.3;}if(wz<1.5&&abs(wy)<.75){float sl=p.y/.05,si=floor(sl),sf=fract(sl+.12*sin(p.z*1.3+si*2.1)*step(.75,h11(si+floor(p.z*.25)*7.)));float g=mix(.16,smoothstep(.16,.03,abs(sf-.5)),smoothstep(.6,.2,fp/.05));em=sod*g*1.5*(.25+.75*smoothstep(.9,-.7,wy))*(.6+.5*n2.b)*step(.012,abs(wz-.75));al=vec3(.2,.19,.17);}vec2 e=(p.zy-EXS.zy)/vec2(.56,.28);if(abs(p.z-8.)<.46&&p.y<2.05){al=vec3(.07,.08,.09)*(.8+.4*n2.r);sp=.3;if(abs(p.z-8.)>.42||p.y>2.01)al=vec3(.2);}if(abs(e.x)<.5&&abs(e.y)<.5){em=vec3(1.,.03,.01)*(.3+7.*atl(vec2(.5-e.x,.5+e.y),vec4(0,768,256,128)).r);al=vec3(.02);}vec2 c=p.zy-vec2(4.,2.18);float r=length(c),th=floor(T)*.10472-1.2;if(r<.17){al=vec3(.6,.59,.54);if(r>.125&&r<.145&&abs(fract(atan(c.x,c.y)/TAU*12.+.5)-.5)<.07)al=vec3(.02);if(min(sdSeg2(c,vec2(0),vec2(.027,.125)),sdSeg2(c,vec2(0),vec2(.002,.085))-.003)<.005)al=vec3(.01);if(sdSeg2(c,vec2(0),.13*vec2(-sin(th),cos(th)))<.0025)al=vec3(.5,.02,.01);if(r>.152)al=vec3(.03);}}}else if(m<3.5){vec2 tc=p.xz/.6,tf=abs(fract(tc)-.5),ti=floor(tc);float tz=floor(tc.y*.5);al=vec3(.42,.42,.4)*(.75+.25*nz.r)*(1.-.45*step(.9,nz.g));if(abs(mod(ti.x,4.)-1.)<.1&&abs(mod(tz,3.)-1.)<.1){vec2 cn=vec2((ti.x+.5)*.6,(tz+.5)*1.2);al=vec3(.3,.31,.3)*(.8+.2*sin(p.x*300.)*sin(p.z*300.)*smoothstep(8.,3.,t));sp=.5;em=vec3(.7,.9,1.)*1.5*(.55+.45*cos((fract(tc.x)-.5)*12.))*((distance(cn,LTA.xz)<.1?flk(1.):0.)+(distance(cn,LTB.xz)<.1?flk(2.):0.));}if(max(tf.x,tf.y)>.475){al=vec3(.5);sp=.2;em*=.1;}}else if(m<4.5){float hc=abs(n.z)>.5?a:lz;al=vec3(.2,.24,.28)*(.35+.8*texture(N,vec2(hc,p.y)*5.).r)*(.6+.8*texture(N,vec2(hc,p.y)*23.).g)*(.8+.4*n2.b);if(abs(n.z)>.5&&h21(id+9.)<.4){vec2 c=vec2(a,p.y)-vec2(.75+.5*h21(id+3.),1.1+.15*h21(id+5.));if(abs(c.x)<.105&&abs(c.y)<.148)al=vec3(.6,.6,.55)*(1.-.3*step(.5,fract(c.y*55.))*step(abs(c.x),.085)*smoothstep(4.,1.5,t));}if(p.y>1.47||a>1.67){al=vec3(.3,.31,.32);sp=.6;gl=40.;}}else if(m<5.5){al=vec3(.36,.34,.3)*(.8+.4*n2.r)*(.9+.2*nz.g);sp=.25;gl=30.;vec2 c=(q.xz-vec2(.68,.62))*rot(.25);if(n.y>.5&&abs(c.x)<.105&&abs(c.y)<.148)al=vec3(.62,.62,.57)*(1.-.3*step(.5,fract(c.x*55.))*step(abs(c.y),.12)*smoothstep(4.,1.5,t));if(a>.905)al=vec3(.05);}else if(m<6.5){al=vec3(.62,.56,.4)*(.75+.3*n2.r)*(.9+.2*nz.g);sp=.35;gl=24.;vec2 b=vec2(-sx*lz,p.y-.985);if(a>.494){if(length(b-vec2(-.165,-.152))<.005){al=vec3(.02);if(LB>=tw)em=vec3(.1,1.,.25)*3.;}if(id==HID){vec2 u=(b-vec2(.06,-.178))/vec2(.11,.055);u=(u-.5)*rot(.05)+.5;if(abs(u.x-.5)<.5&&abs(u.y-.5)<.5){al=vec3(.92,.77,.15)*atl(u,vec4(256,768,256,128)).rgb*(.75+.25*u.y);sp=0.;}}}if(a>.494&&LB>=tw)em+=scrL(id,tw)*al*.7/(1.+70.*max(sdBox2(b,vec2(.156,.118)),0.));if(n.y>.7&&a<.36)al*=mix(1.,.35+.65*step(.5,fract(a*80.)),smoothstep(5.,2.,t));}else if(m<7.5){al=vec3(.012,.016,.016);sp=1.;gl=400.;vec2 u=vec2(.5-sx*lz/.29,.5+(p.y-.985)/.2175),ue=min(u,1.-u);if(LB>=tw&&min(ue.x,ue.y)>0.){vec3 pc=scr(id,u,tw)+vec3(.004,.006,.008);float k=smoothstep(.45,.15,fp/.0009);pc*=mix(1.,.55+.9*(.5+.5*cos(u.y*240.*TAU)),k);pc*=mix(vec3(1),1.+.22*cos(TAU*(u.x*320.+vec3(0,.333,.667))),k);em=pc*smoothstep(0.,.012,ue.x)*smoothstep(0.,.016,ue.y);}vec3 r=reflect(rd,n);float fr=.03+.6*pow(1.-max(dot(n,-rd),0.),4.);vec2 cp=(p+r*((2.7-p.y)/max(r.y,.05))).xz/.6;em+=fr*(vec3(.02,.035,.06)*(.4+.6*sat(r.y*2.+.5))*(1.+step(.46,max(abs(fract(cp.x)-.5),abs(fract(cp.y)-.5)))*step(.05,r.y))+sod*.1*smoothstep(.8,.98,dot(vec3(r.x*sx,r.yz),normalize(vec3(.7,.3,.65)))));}else if(m<8.5){al=vec3(.28,.26,.2)*(.85+.2*n2.r);sp=.15;if(n.y>.5){vec2 k=vec2(lz,a-.72)/.019,kf=abs(fract(k)-.5);al*=mix(1.,.22,step(.4,max(kf.x,kf.y))*smoothstep(6.,1.5,t))*(.7+.5*h21(floor(k)));}}else if(m<9.5){al=h21(id+1.)<.6?vec3(.62,.62,.6):vec3(.45,.07,.05);sp=.6;gl=60.;if(n.y>.9&&length(q.xz-vec2(.66,-.33))<.034){al=vec3(.03,.015,.008);sp=.8;}}else if(m<10.5){al=vec3(.035,.04,.055)*(.5+nz.r);}else{al=vec3(.1,.105,.11)*(.8+.3*n2.r)*(.4+.6*smoothstep(.5,.47,abs(fract(p.y/.227)-.5)));sp=.4;gl=30.;}vec3 nq=vec3(n.x*sx,n.yz),vq=vec3(rd.x*sx,rd.yz);vec3 lk=KL-p;float dk=length(lk),sh=1.,s=.03;lk/=dk;if(dk<9.)for(int i=0;i<24;i++){if(s>dk)break;float h=map(p+n*.005+lk*s);sh=min(sh,.5+.5*h/(.07*s));if(h<.0005){sh=0.;break;}s+=clamp(h*.9,.015,.4);}sh=sh*sh*(3.-2.*sh);sh=sat(sh);vec3 c=vec3(.011,.02,.036)*al*(.5+.5*n.y)*ao;vec3 mo=mlit(id,tw,vec3(a,p.y,lz),nq,vq,al,sp)*((a<1.7&&p.y<1.5)?1.:smoothstep(1.,.55,abs(lz)));if(id==HID)mo*=mix(1.,sh,SM);c+=mo*ao;vec2 id2=id+vec2(sx,0);if(abs(id2.x+.5)<4.){mo=mlit(id2,wake(id2),vec3(5.-a,p.y,lz),vec3(-nq.x,nq.yz),vec3(-vq.x,vq.yz),al,sp)*smoothstep(1.,.55,abs(lz));if(id2==HID)mo*=mix(1.,sh,SM);c+=mo*ao;}vec3 l=HP-p;float d2=dot(l,l);l*=inversesqrt(d2);c+=heroCol(HN)*HI*mix(sh,1.,SM)*(al*max(dot(n,l),0.)+sp*pow(max(dot(n,normalize(l-rd)),0.),gl))/(d2+.02);l=EXS-p;d2=dot(l,l);l*=inversesqrt(d2);c+=vec3(1.,.04,.015)*.5*al*max(dot(n,l),0.)*ao/(d2+.3);l=LTA-p;d2=dot(l,l);l*=inversesqrt(d2);c+=vec3(.7,.9,1.)*flk(1.)*.45*al*max(dot(n,l),0.)*sat(l.y*1.5)*ao/(d2+.3);l=LTB-p;d2=dot(l,l);l*=inversesqrt(d2);c+=vec3(.7,.9,1.)*flk(2.)*.45*al*max(dot(n,l),0.)*sat(l.y*1.5)*ao/(d2+.3);vec3 sd=normalize(vec3(1.,.13,.42));float tt=(p.x+10.)/sd.x;vec3 w=p-sd*tt;float e=.03+tt*.012,so=smoothstep(1.5,1.4,abs(mod(w.z,4.)-2.))*smoothstep(.9,1.,w.y)*smoothstep(2.4,2.3,w.y)*smoothstep(1.45,1.6,p.y-.13*max(p.x+7.5,0.));c+=sod*1.4*so*smoothstep(.22+e,.22-e,abs(fract(w.y/.1)-.5))*al*max(dot(n,-sd),0.)/(1.+tt*tt*.06);c+=sod*.012*al*sat(.3-n.x*.7+n.y*.3)*exp(-(p.x+10.)*.25)*ao;return c+em;}vec3 render(vec3 ro,vec3 rd,out float t){t=0.;float d;for(int i=0;i<84;i++){d=map(ro+rd*t);if(d<.0004+.0008*t||t>45.)break;t+=d;}vec3 col=vec3(0);if(t<45.)col=shade(ro+rd*t,rd,t);col=mix(col,vec3(.004,.008,.014),1.-exp(-t*.018));col+=vec3(1.,.05,.02)*.03*gv(ro,rd,EXS,t,6.);if(LB>=wake(HID))col+=scrL(HID,-1.)*.03*gv(ro,rd,GC+vec3(.15,0,0),t,25.);return col;}void mainImage(out vec4 o,vec2 f){float lb=LB,z=1.;vec3 ro,ta;SM=1.;KL=GC+vec3(.07,0,0);if(lb<8.){float s=lb/8.;ro=mix(vec3(-4.72,1.52,4.2),vec3(-4.98,1.45,4.6),s);ta=vec3(-7.,1.04,5.1);z=1.15;}else if(lb<16.){float s=(lb-8.)/8.;ro=mix(vec3(-6.3,1.2,4.48),vec3(-6.2,1.15,4.66),s);ta=vec3(-7.,.93,4.96);z=1.2;}else{float s=sat((lb-16.)/14.),k=(1.-s)*(1.-s);ro=GC+vec3(.1+1.4*(1.-pow(s,2.2))-.008*sat((lb-30.)*.5),.13*k,-.12*k);ta=GC;}ro+=.004*vec3(sin(T*.7),sin(T*.9+1.),sin(T*.6+2.))*smoothstep(31.,24.,lb);ZF=z;vec3 rd=ray(f,ro,ta,z,0.);float t;o=vec4(render(ro,rd,t),1);}
`};
SCN.end={th:.8,bl:.55,q:(lb,len)=>[0,Math.min(1,(len-lb)*1.5),Math.max(0,1-lb/1.5)**2+(lb>=40?Math.max(0,1-(lb-40)*1.6)*1.4:0),.002],glsl:`vec2 ep(float lb,float a,out float n){float ax=a-.105,ay=.895,x=lb<30.?ax*(2.*tri((lb-6.)*.125)-1.):mix(-ax,ax,(lb-30.)*.1);n=floor(lb*.25)+floor((min(lb,30.)+2.)*.125)+2.;return vec2(x,ay*(2.*tri(lb*.25)-1.));}void mainImage(out vec4 o,vec2 f){float a=R.x/R.y,n,m;vec2 p=(f*2.-R)/R.y;vec3 c=vec3(0);float lb=min(LB,40.);float v=smoothstep(41.,41.5,LB),hz=smoothstep(41.5,42.3,LB);if(LB>40.)p+=.02*exp(-(LB-40.)*4.)*vec2(sin(LB*61.),cos(LB*53.));vec2 b=ep(lb,a,n);vec3 k=heroCol(n);float d=length(p-b);for(int e=1;e<7;e++){vec2 q=ep(max(lb-float(e)*.16,0.),a,m);c+=heroCol(m)*smoothstep(.01,.0,abs(length(p-q)-.1))*(.5-float(e)*.07);}c+=mix(k,vec3(1),.6)*smoothstep(.1,.07,d)*3.+k*smoothstep(.013,.0,abs(d-.125))*2.+k*.012/(d*d+.012);float ty=fract(lb*.25)*4.,tx=lb<6.?9.:lb<30.?fract((lb-6.)*.125)*8.:lb-30.;vec2 py=ep(lb-ty,a,m),px=ep(lb-tx,a,m);c+=heroCol(n)*exp(-ty*2.5)*exp(-abs(p.x-py.x)*7.)*smoothstep(.06,.0,abs(p.y-sign(py.y)))*1.5;c+=heroCol(n)*exp(-tx*2.5)*exp(-abs(p.y-px.y)*7.)*smoothstep(.06,.0,abs(p.x-sign(px.x)*a))*1.5;if(LB>=40.){float t=LB-40.,r=length(p-vec2(a,1.));for(int i=0;i<6;i++){float fi=float(i),rr=t*(1.1+fi*.5);c+=heroCol(fi)*smoothstep(.05+t*.04,.0,abs(r-rr))*3.*exp(-t*1.1);}c+=vec3(1.)*exp(-t*3.)*.4/(r*r+.02);}float wy=mix(2.,.006,v),wx=mix(a+.1,.0,hz);c*=1.-v;c+=vec3(.75,.88,1.)*4.*v*smoothstep(wy,wy*.4,abs(p.y))*smoothstep(wx+.012,wx,abs(p.x))*(1.-smoothstep(42.6,43.6,LB));c+=vec3(.75,.88,1.)*hz*.004/(dot(p,p)+.0015)*(1.-smoothstep(42.6,44.5,LB));o=vec4(c,1);}
`};
SCN.inside={th:.8,bl:.55,q:(lb,len)=>[1,1,Math.max(0,(lb-31.8)*7),.004],glsl:`vec2 bp(float lb,float a,out float n){float ax=a-.15,ay=.85,x=lb<29.?ax*(2.*tri((lb-17.)*.25)-1.):mix(-ax,ax,(lb-29.)/3.);n=floor(lb*.5)+floor((min(lb,29.)-13.)*.25);return vec2(x,ay*(2.*tri(lb*.5)-1.));}float crack(vec2 d,float s,float g){float r=length(d),an=atan(d.y,d.x)+.16*(vn(vec2(r*7.,s))-.5),id=floor(an/TAU*9.+.5),fa=abs(an/TAU*9.-id),len=(.2+.55*h11(id+s*13.))*g;float k=smoothstep(.0035,.0,fa*r*.7-.0005)*step(r,len);k+=smoothstep(.003,0.,abs(r-(.07+.25*h11(id*5.+s))*g))*step(.45,h11(id*3.+s))*step(r,len);return k;}void mainImage(out vec4 o,vec2 f){float a=R.x/R.y,n;vec2 p=(f*2.-R)/R.y,cn=vec2(a,1.);vec3 c=vec3(0);float z=smoothstep(28.,32.,LB);z=1.+1.7*z*z;p=cn+(p-cn)/z;float g=max(exp(-abs(LB-8.)*10.),exp(-abs(LB-15.9)*10.));p.x+=g*.5*(h11(floor(p.y*24.)+floor(T*50.))-.5);p.y+=g*.3*sin(T*37.);if(LB>16.){p.y+=.025*exp(-fract(LB*.5)*14.)*sin(LB*40.);p.x+=.025*exp(-fract((LB-17.)*.25)*28.)*sin(LB*47.);}if(LB<8.3){float ph=T*.12+LB*LB*.012;for(int i=0;i<130;i++){float fi=float(i),zz=fract(h11(fi*1.7)-ph*(.6+.6*h11(fi+9.)));vec2 d=(h22(vec2(fi,fi*.37))-.5)*vec2(a,1.)*3.,s=d/(zz*3.+.05)*.33;float r=.0028/(zz+.1);vec2 q=p-s;float l=length(s)+1e-4;vec2 dr=s/l;q=vec2(dot(q,dr)/(1.+LB*.6*l),dot(q,vec2(-dr.y,dr.x)));c+=smoothstep(r,r*.3,length(q))*(1.-zz)*(1.-zz)*1.6;}}float nn;vec2 b0=bp(16.,a,nn);if(LB>7.9&&LB<16.2){float cv=smoothstep(13.,16.,LB);cv*=cv;for(int gI=0;gI<2;gI++)for(int e=0;e<6;e++){float tt=T-float(e)*.11,gg=float(gI);vec3 k=(gI==0?vec3(.2,.75,1):vec3(1,.25,.55))*(1.-float(e)*.15)*(1.+cv*2.);vec2 h=h22(vec2(gg*4.+3.,gg*29.2+21.9)+3.),v0=mix((vec2(tri(tt*(.27+.2*h.x)+h.y*9.),tri(tt*(.31+.2*h.y)+h.x*5.))*2.-1.)*vec2(a,1.)*.95,b0,cv),va=v0;for(int i=0;i<4;i++){float ii=gg*4.+float(i);h=h22(vec2(ii,ii*7.3)+3.);vec2 vb=i==3?v0:mix((vec2(tri(tt*(.27+.2*h.x)+h.y*9.),tri(tt*(.31+.2*h.y)+h.x*5.))*2.-1.)*vec2(a,1.)*.95,b0,cv);c+=k*smoothstep(.009,.002,sdSeg2(p,va,vb));va=vb;}}}if(LB>=15.8){float lb=max(LB,16.);vec2 b=bp(lb,a,n);vec3 k=heroCol(n);float d=length(p-b),on=smoothstep(15.8,16.1,LB);for(int e=1;e<6;e++){float m;vec2 q=bp(max(lb-float(e)*.09,16.),a,m);c+=heroCol(m)*smoothstep(.012,.0,abs(length(p-q)-.1))*(.6-float(e)*.1);}c+=on*(mix(k,vec3(1),.6)*smoothstep(.1,.07,d)*3.+k*smoothstep(.014,.0,abs(d-.125))*2.+k*.012/(d*d+.012));for(int j=0;j<7;j++){float hb=24.+float(j);if(j==3)continue;if(LB<hb)break;float m;vec2 q=bp(hb,a,m);q=(j==1||j==5)?vec2(sign(q.x)*a,q.y):vec2(q.x,sign(q.y));c+=(vec3(.75,.9,1.)+heroCol(m)*.6)*crack(p-q,hb,sat((LB-hb)*5.)*(1.+.25*(LB-hb)))*(.9+2.*exp(-(LB-hb)*3.));}c+=k*exp(-fract(lb*.5)*9.)*exp(-abs(p.x-b.x)*7.)*smoothstep(.07,.0,1.-abs(p.y))*1.5;}o=vec4(c,1);}
`};
var MAZE_ROWS=(()=>{const o=new Set(),seg=(x0,z0,x1,z1)=>{for(let x=Math.min(x0,x1);x<=Math.max(x0,x1);x++)for(let z=Math.min(z0,z1);z<=Math.max(z0,z1);z++)o.add(x+','+z)};
seg(0,-2,0,4);seg(0,4,4,4);seg(4,4,4,8);seg(-4,8,4,8);seg(-4,8,-4,12);seg(-4,12,11,12);
seg(-2,2,-1,2);seg(2,5,2,6);seg(5,6,6,6);seg(1,6,1,7);seg(-2,9,-2,10);seg(-5,10,-5,10);seg(2,13,2,14);seg(6,10,6,11);seg(9,13,9,13);
const r=[];for(let z=-2;z<16;z++){let b=0;for(let x=-6;x<14;x++)if(o.has(x+','+z))b|=1<<(x+6);r.push(b)}return r})();
SCN.maze={th:1,bl:.55,
q:(lb,len,b)=>{const f=k=>Math.exp(-Math.abs(lb-k)*5);
return[0,Math.min(1,(32-lb)*1.25),Math.max(0,1-lb*1.6)*1.5+.12*(f(16)+f(24)),.002+.014*(f(16.4)+f(24.4))+(lb>28?(lb-28)*.0015:0)]},
glsl:`MAZEDECL
#define H 2.6
vec3 HP,PC;float HN;bool open(ivec2 c){c+=ivec2(6,2);if(c.x<0||c.x>19||c.y<0||c.y>17)return false;return(MZ[c.y]>>c.x&1)==1;}float dda(vec2 o,vec2 d,float tm,out vec2 nr,out ivec2 c){vec2 g=o*.5+.5,gd=d*.5,sg=sign(gd),dl=1./max(abs(gd),1e-5);c=ivec2(floor(g));vec2 sd=(sg*(vec2(c)-g)+sg*.5+.5)*dl;ivec2 st=ivec2(sg);float t=0.;nr=vec2(0);for(int i=0;i<26;i++){if(sd.x<sd.y){t=sd.x;sd.x+=dl.x;c.x+=st.x;nr=vec2(-sg.x,0);}else{t=sd.y;sd.y+=dl.y;c.y+=st.y;nr=vec2(0,-sg.y);}if(t>tm)return 1e3;if(!open(c))return t;}return 1e3;}float tube(ivec2 c){float h=h21(vec2(c)*1.37+2.1),fl=step(.3,vn(vec2(T*14.,h*77.)))*(.45+.55*step(.4,vn(vec2(T*37.,h*31.))));if(c.y==12){int m=(c.x+8)&3;return m==1?1.:m==3?fl:0.;}return h<.58?0.:h>.84?fl:1.;}float brick(vec2 u,out vec2 id){u/=vec2(.24,.08);float r=floor(u.y);u.x+=.5*mod(r,2.);id=vec2(floor(u.x),r);vec2 f=fract(u),e=min(f,1.-f)*vec2(.24,.08);return smoothstep(.003,.011,min(e.x,e.y));}vec2 pth(float s){float u=max(s-24.,0.);return 2.*(s<4.?vec2(0,s):s<8.?vec2(s-4.,4):s<12.?vec2(4,s-4.):s<20.?vec2(16.-s,8):s<24.?vec2(-4,s-12.):vec2(-4.+u+.115*u*u,12));}vec3 lit(vec3 p,vec3 n,vec3 rd,vec3 a,float gl){vec3 q=p+n*.12;ivec2 c=ivec2(floor(q.xz*.5+.5));vec2 lc=q.xz-vec2(c)*2.;vec3 s=vec3(.004,.006,.009),sp=vec3(0),r=reflect(rd,n);for(int k=0;k<5;k++){ivec2 d=ivec2(k==1?1:k==2?-1:0,k==3?1:k==4?-1:0);float w=k==0?1.:smoothstep(1.,.86,abs(k<3?lc.y:lc.x));for(int j=1;j<4;j++){if(k==0&&j>1)break;ivec2 e=c+d*j;if(!open(e))break;vec3 v=vec3(float(e.x)*2.,H-.1,float(e.y)*2.)-p;float d2=dot(v,v);vec3 l=v/sqrt(d2);vec3 I=vec3(.8,1,.88)*tube(e)*w*1.25/(1.+d2*.85);s+=I*(max(dot(n,l),0.)*(.25+.75*max(l.y,0.))+.09);sp+=I*pow(max(dot(r,l),0.),40.)*gl;}}float ao=1.;if(abs(n.y)>.5){if(!open(c+ivec2(1,0)))ao*=mix(.4,1.,smoothstep(.0,.35,1.-lc.x));if(!open(c-ivec2(1,0)))ao*=mix(.4,1.,smoothstep(.0,.35,1.+lc.x));if(!open(c+ivec2(0,1)))ao*=mix(.4,1.,smoothstep(.0,.35,1.-lc.y));if(!open(c-ivec2(0,1)))ao*=mix(.4,1.,smoothstep(.0,.35,1.+lc.y));}else ao=mix(.45,1.,smoothstep(.0,.3,p.y))*mix(.5,1.,smoothstep(.0,.3,H-p.y));s*=ao;vec3 v=HP-p;float d2=dot(v,v);vec3 l=v/sqrt(d2);vec2 n2;ivec2 c2;if(dda(q.xz,HP.xz-q.xz,1.,n2,c2)>1.){vec3 I=heroCol(HN)*3./(1.+d2*1.1);s+=I*(max(dot(n,l),0.)*.92+.08)*mix(1.,ao,.5);sp+=I*pow(max(dot(r,l),0.),40.)*gl;}v=vec3(8.86,.03,8.)-p;d2=dot(v,v);s+=vec3(.1,1,.3)*(.75+.25*vn(vec2(T*9.,1.)))*1.1/(1.+d2*2.2)*max(dot(n,v)/sqrt(d2)+.15,0.);v=vec3(22.8,2.35,24.)-p;d2=dot(v,v);s+=vec3(1,.1,.04)*smoothstep(1.,.86,abs(q.z-24.))*1.6/(1.+d2*.2)*(max(dot(n,v)/sqrt(d2),0.)*.8+.2)*ao;return a*s+sp;}vec3 shade(vec3 ro,vec3 rd,out float t,out vec3 p,out vec3 n,out float rf){vec2 nr;ivec2 hc;float tw=dda(ro.xz,rd.xz,80.,nr,hc),tp=rd.y<0.?-ro.y/rd.y:(H-ro.y)/max(rd.y,1e-5);rf=0.;t=min(tw,tp);vec3 a=vec3(.2),em=vec3(0),col;float gl=.1;vec3 o2=ro-PC,d2=rd;float ra=T*.9,rb=T*.6;o2.xz*=rot(ra);d2.xz*=rot(ra);o2.xy*=rot(rb);d2.xy*=rot(rb);float tn=-1e3,tf=1e3;vec3 pn=vec3(0);for(int i=0;i<6;i++){float sg=(i&1)==0?1.:-1.;vec3 ax=(i<2?vec3(0,sg,1.618):i<4?vec3(sg,1.618,0):vec3(1.618,0,sg))*.5257;float dn=dot(ax,d2),on=dot(ax,o2),s=dn>0.?-1.:1.,t1=(s*.42-on)/dn,t2=(-s*.42-on)/dn;if(t1>tn){tn=t1;pn=ax*s;}tf=min(tf,t2);}if(tn<tf&&tn>0.&&tn<t){t=tn;p=ro+rd*t;pn.xy*=rot(-rb);pn.xz*=rot(-ra);n=pn;vec3 q=o2+d2*tn;float ed=1.;for(int i=0;i<6;i++){float sg=(i&1)==0?1.:-1.;vec3 ax=(i<2?vec3(0,sg,1.618):i<4?vec3(sg,1.618,0):vec3(1.618,0,sg))*.5257;float h=.42-abs(dot(ax,q));if(h>.001)ed=min(ed,h);}a=vec3(.42,.44,.47)*(.8+.4*texture(N,q.xy*2.+q.z).r)*(.35+.65*smoothstep(.0,.02,ed));gl=.9;em=vec3(.5,.6,.7)*.05+pow(1.-max(dot(n,-rd),0.),3.)*vec3(.5,.6,.7)*.5;}else if(tp<tw){p=ro+rd*t;if(rd.y<0.){n=vec3(0,1,0);vec2 g=p.xz*2.,f=fract(g),e=min(f,1.-f);float ck=mod(floor(g.x)+floor(g.y),2.),sc=texture(N,p.xz*.23).r,s2=texture(N,p.xz*1.7).g;a=mix(vec3(.035,.05,.045),vec3(.25,.24,.19),ck)*(.65+.5*sc);float gr=smoothstep(.0,.03,min(e.x,e.y));a*=.35+.65*gr;gl=.5*gr*(.4+.8*s2);rf=gr*(.5+.7*s2)*(.05+.6*pow(1.-max(-rd.y,0.),4.));n=normalize(n+vec3(sc-.5,0,s2-.5)*.035);}else{n=vec3(0,-1,0);vec2 g=p.xz/.6+.5,f=fract(g),e=min(f,1.-f);ivec2 c=ivec2(floor(p.xz*.5+.5));vec2 l=p.xz-vec2(c)*2.;a=vec3(.27,.27,.25)*(.75+.35*texture(N,p.xz*2.3).r)*(.3+.7*smoothstep(.0,.04,min(e.x,e.y)));float fx=sdBox2(l,vec2(.62,.17));if(fx<0.){float tb=tube(c),tu=smoothstep(.035,.02,abs(abs(l.y)-.075))*smoothstep(.6,.57,abs(l.x));a=vec3(.5,.52,.5);em=vec3(.8,1,.88)*tb*(.5+6.*tu);a*=.4+.6*(1.-tu);}else a*=.5+.5*smoothstep(.0,.03,fx);}}else if(tw<500.){p=ro+rd*t;n=vec3(nr.x,0,nr.y);vec2 tu=vec2(nr.y,-nr.x),id,i2;float u=dot(p.xz,tu),v=p.y;float bh=brick(vec2(u,v),id),hx=brick(vec2(u+.004,v),i2)-bh,hy=brick(vec2(u,v+.004),i2)-bh;float hs=h21(id),gn=.5*texture(N,vec2(u,v)*1.9).r+.5*vn(vec2(u,v)*vec2(23.,61.)),g2=.6*vn(vec2(u,v)*1.3+3.)+.4*vn(vec2(u,v)*4.1);a=mix(vec3(.34,.085,.05),vec3(.2,.065,.045),hs);a=mix(a,vec3(.1,.045,.04),step(.84,hs))*(.75+.5*gn);a=mix(vec3(.27,.25,.22)*(.5+.6*gn),a,bh);a*=mix(.4,1.,smoothstep(.0,.6,v+g2*.3))*mix(.55,1.,smoothstep(H,H-.4,v+g2*.2))*(.5+.75*g2);gl=.22*bh*gn;n=normalize(n-(vec3(tu.x,0,tu.y)*hx+vec3(0,hy,0))*.8+vec3(0,gn-.5,0)*.12);if(v<.11){a=vec3(.02,.022,.025);gl=.5;n=vec3(nr.x,0,nr.y);}vec3 fn=vec3(nr.x,0,nr.y);if(hc==ivec2(0,5)&&nr.y<-.5){vec2 w=vec2(u,v-1.45);if(max(abs(w.x),abs(w.y))<.47){n=fn;gl=.6;a=vec3(.02);if(max(abs(w.x),abs(w.y))<.43)a=pow(atl(w/.86+.5,vec4(512,768,256,256)).rgb,vec3(2.2))*.85;}}else if(hc==ivec2(5,4)&&nr.x<-.5){float du=u-8.;if(abs(du)<.53&&v<2.12){n=fn;gl=.35;a=vec3(.05,.055,.06);if(abs(du)<.46&&v<2.05){float pn2=smoothstep(.0,.012,abs(sdBox2(vec2(du,v-.55),vec2(.3,.33))))*smoothstep(.0,.012,abs(sdBox2(vec2(du,v-1.5),vec2(.3,.4))));a=vec3(.13,.17,.18)*(.7+.5*gn)*(.55+.45*pn2);gl=.5;vec2 w=vec2(du,v-1.62);if(abs(w.x)<.21&&abs(w.y)<.105){a=mix(vec3(.015),vec3(.75,.74,.7),atl(w/vec2(.42,.21)+.5,vec4(768,768,256,128)).r);gl=.9;}if(sdBox2(vec2(du-.34,v-1.02),vec2(.06,.015))<0.){a=vec3(.5);gl=1.5;}if(v<.025){a=vec3(0);em=vec3(.1,1,.3)*(2.5+1.5*vn(vec2(du*30.,T*6.)));}}}}else if(hc==ivec2(12,12)&&nr.x<-.5){float du=u-24.,op=smoothstep(31.,31.85,LB);if(abs(du)<.88&&v<2.17){n=fn;gl=.35;a=vec3(.05,.05,.055);if(abs(du)<.8&&v<2.1){float cw=cos(op*1.5),xh=.8-abs(du),xl=xh/cw;if(xh>.8*cw-.003*(1.-op)){if(op>0.){t=1e3;return vec3(0);}a=vec3(.01);}else{a=vec3(.2,.17,.12)*(.6+.6*gn)*(.4+.6*cw);gl=.5;if(sdBox2(vec2(xl-.42,v-1.04),vec2(.3,.035))<0.){a=vec3(.45,.46,.48)*(.4+.6*cw);gl=1.6;}if(sdBox2(vec2(xl-.52,v-1.6),vec2(.11,.2))<0.){a=vec3(.008,.012,.015);gl=2.;}if(v<.25){a=vec3(.3,.31,.33)*(.5+.5*gn)*(.4+.6*cw);gl=1.;}}}}vec2 w=vec2(du,v-2.36);if(abs(w.x)<.33&&abs(w.y)<.17){n=fn;a=vec3(.02);gl=.6;if(abs(w.x)<.3&&abs(w.y)<.15)em=vec3(1,.1,.04)*(.35+7.*atl(w/vec2(.6,.3)+.5,vec4(0,768,256,128)).r)*(.9+.1*K.x);}}}else{p=ro+rd*60.;n=-rd;return vec3(0);}col=lit(p,n,rd,a,gl)+em;return col*exp(-t*.035);}void mainImage(out vec4 o,vec2 fc){float t=LB,hs=t+1.5,w=t-22.5;vec2 hp=t<22.5?pth(hs):vec2(-8.+2.*w+.185*w*w,24.),cp=(pth(t-.3)+pth(t+.3))*.5;float fl=smoothstep(16.,17.,t)-smoothstep(24.,25.,t);fl=fl*fl*(3.-2.*fl);HN=floor(hs/4.);HP=vec3(hp.x,1.25+.25*fl+.1*sin(t*2.1),hp.y)+vec3(sin(t*1.7),0,cos(t*1.3))*.12;PC=t<20.?vec3(0,1.52,16):vec3(-7.69,1.12,23.7);float yaw=PI*.5*(smoothstep(3.45,4.45,t)-smoothstep(7.45,8.45,t)-smoothstep(11.45,12.45,t)+smoothstep(19.45,20.45,t)+smoothstep(23.45,24.45,t));float bob=abs(sin(t*PI)),rl=fl*PI+.012*sin(t*PI);vec3 ro=vec3(cp.x,mix(1.5,H-1.5,fl)+(.035*bob-.01)*(1.-2.*fl),cp.y),ta=ro+vec3(sin(yaw),-.03*(1.-2.*fl),cos(yaw));vec3 rd=ray(fc,ro,ta,.6-.03*K.x-.1*smoothstep(26.,32.,t),rl),p,n,p2,n2;float t1,t2,rf,r2;vec3 col=shade(ro,rd,t1,p,n,rf);if(rf>.001){vec3 r=reflect(rd,n);col+=rf*(shade(p+n*.01,r,t2,p2,n2,r2)+hero(p,r,HP,t2,HN))*exp(-t1*.035);}col+=hero(ro,rd,HP,t1,HN);o=vec4(col,1);}
`};
SCN.maze.glsl=SCN.maze.glsl.replace('MAZEDECL','const int MZ[18]=int[18]('+MAZE_ROWS.join(',')+');');
var PIPE_W=[[0,.5,-2.,.5],[3,.5,1.5,.5],[8,5.5,1.5,.5],[10,11.5,1.5,.5],[11,11.5,4.5,.5],[12,11.5,4.5,3.5],[14,17.5,4.5,3.5],[15,17.5,7.5,3.5],
[16,17.5,7.5,6.5],[18,23.5,7.5,6.5],[19,23.5,7.5,3.5],[20,23.5,10.5,3.5],[22,29.5,10.5,3.5],[23,29.5,10.5,.5],[24,29.5,7.5,.5],[28,44,7.5,.5]];
function LATTICE(){
const n=32,d=new Uint8Array(n*n*n*4),occ=new Uint8Array(n*n*n);
let sd=20261112;
const rnd=()=>{sd=sd+0x6D2B79F5|0;let t=Math.imul(sd^sd>>>15,1|sd);t=t+Math.imul(t^t>>>7,61|t)^t;return((t^t>>>14)>>>0)/4294967296};
const ri=k=>Math.floor(rnd()*k),md=v=>(v%n+n)%n,ix=(x,y,z)=>(md(z)*n+y)*n+md(x);
const lbOf=s=>s<=16?s/2:s<=80?8+(s-16)/4:24+(s-80)/8;
const at=t=>{let r=PIPE_W[0];for(let i=0;i<PIPE_W.length-1;i++){const a=PIPE_W[i],b=PIPE_W[i+1];if(t>=a[0]){const f=Math.min(1,(t-a[0])/(b[0]-a[0]));r=[0,a[1]+(b[1]-a[1])*f,a[2]+(b[2]-a[2])*f,a[3]+(b[3]-a[3])*f]}}return r};
for(let x=41;x<60;x++)for(const y of[7,8])for(const z of[0,1])occ[ix(x,y,z)]=1;
const D=[[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]];
const free=(x,y,z)=>y>=0&&y<n&&!occ[ix(x,y,z)];
const pipes=[];let col=0;
const spawn=s=>{const lb=lbOf(s),far=rnd()<.22;
for(let k=0;k<40;k++){const h=at(lb+.3+rnd()*(lb<8?1.6:2.6)),r=far?9:lb<8?3:4;
const x=Math.round(h[1]+(rnd()*2-1)*r),y=Math.round(h[2]+(rnd()*2-1)*r*(lb<8?.6:1)),z=Math.round(h[3]+(rnd()*2-1)*r);
if(free(x,y,z)){occ[ix(x,y,z)]=1;const c=col++&3;d[ix(x,y,z)*4+3]|=c|68;return{x,y,z,c,dir:ri(6),life:14+ri(30)}}}
return null};
for(let s=1;s<=148;s++){const lb=lbOf(s),want=lb<4?4:lb<8?8:lb<16?20:lb<24?28:34;
for(let i=pipes.length-1;i>=0;i--)if(pipes[i].dead)pipes.splice(i,1);
while(pipes.length<want){const p=spawn(s);if(!p)break;pipes.push(p)}
for(const p of pipes){
const opt=[];for(let k=0;k<6;k++){const v=D[k];if(free(p.x+v[0],p.y+v[1],p.z+v[2]))opt.push(k)}
if(!opt.length||p.life--<=0){p.dead=1;d[ix(p.x,p.y,p.z)*4+3]|=4;continue}
let k=p.dir;if(!(opt.includes(k)&&rnd()<.5))k=opt[ri(opt.length)];
const v=D[k],a=ix(p.x,p.y,p.z),nx=p.x+v[0],ny=p.y+v[1],nz=p.z+v[2],b=ix(nx,ny,nz),ax=k>>1;
if(k!=p.dir)d[a*4+3]|=4;
if(k&1){d[b*4+ax]=s;d[b*4+3]|=8<<ax}else d[a*4+ax]=s;
occ[b]=1;d[b*4+3]|=p.c|64;p.x=nx;p.y=ny;p.z=nz;p.dir=k}}
return{n,d}}
SCN.pipes={th:1,bl:.6,
q:(lb,len,b)=>[0,Math.min(1,lb/2),lb>31.4?(lb-31.4)*(lb-31.4)*6:0,lb>30?(lb-30)*.006:0],
glsl:`PATHDECL
float S,HN,gD,gM,gAge,gBall,gBp;int gCol;vec3 HP;vec3 pathAt(float t,out float k){vec3 r=W[0].xyz;k=0.;for(int i=0;i<15;i++){if(t>=W[i].w){r=mix(W[i].xyz,W[i+1].xyz,sat((t-W[i].w)/(W[i+1].w-W[i].w)));k=float(i);}}return r;}vec3 sm(float t){float k;return(pathAt(t-.14,k)+pathAt(t+.14,k))*.5;}float camx(float t){float u=max(t-30.,0.);return 44.2+2.8*u+14.*u*u;}void edge(vec3 w,float b,float dr,float nd){float g=S-b+1.;if(b<.5||g<=0.)return;float f=min(g,1.);f=1.-(1.-f)*(1.-f);float lo=dr*(1.-f),hi=mix(f,1.,dr),a=w.x-clamp(w.x,lo,hi);float d=length(vec3(a,w.yz))-(.125+.022*step(abs(abs(w.x-.5)-.25),.03));gM=max(gM,dr==nd?g:g-1.);if(d<gD){gD=d;gAge=g;gBall=0.;}}float map(vec3 p){float l=length(p.yz-vec2(7.5,.5));gBp=max(abs(l-.47)-(.03+.04*step(p.x,44.22)),44.-p.x);vec3 n=floor(p+.5),q=p-n;ivec3 i=ivec3(n);float bd=.78-max(abs(q.x),max(abs(q.y),abs(q.z)));gD=9.;gM=-1.;gAge=9.;gBall=0.;vec4 c0=texelFetch(P,i&31,0)*255.;if(i.y>=0&&i.y<32&&c0.a>63.){vec4 cx=texelFetch(P,(i-ivec3(1,0,0))&31,0)*255.,cy=texelFetch(P,(i-ivec3(0,1,0))&31,0)*255.,cz=texelFetch(P,(i-ivec3(0,0,1))&31,0)*255.;int a=int(c0.a+.5);edge(q,c0.r,float(a>>3&1),0.);edge(q.yzx,c0.g,float(a>>4&1),0.);edge(q.zxy,c0.b,float(a>>5&1),0.);edge(q+vec3(1,0,0),cx.r,float(int(cx.a+.5)>>3&1),1.);edge(q.yzx+vec3(1,0,0),cy.g,float(int(cy.a+.5)>>4&1),1.);edge(q.zxy+vec3(1,0,0),cz.b,float(int(cz.a+.5)>>5&1),1.);gCol=a&3;if((a&4)!=0&&gM>0.){float db=length(q)-.2*min(gM*3.,1.);if(db<gD){gD=db;gAge=gM+1.;gBall=1.;}}}float d=min(gD,bd);if(gBp<d){d=gBp;gCol=4;gAge=9.;gBall=0.;}return d;}vec3 pal(int c){return c==0?vec3(.72,.06,.04):c==1?vec3(.8,.5,.04):c==2?vec3(.04,.42,.3):c==3?vec3(.55,.58,.62):vec3(.34,.37,.42);}vec3 env(vec3 r){return vec3(.8,.9,1)*(smoothstep(.55,.95,r.y)*.5+smoothstep(.2,.0,abs(r.z*.8+r.x*.6-.3))*smoothstep(-.2,.5,r.y)*.35)+vec3(.3,.5,.4)*smoothstep(.1,-.9,r.y)*.22;}vec3 tiles(vec3 p,float t,out float hole){vec2 g=(p.xz+.5)*.5,c=floor(g),f=fract(g);float e=min(min(f.x,1.-f.x),min(f.y,1.-f.y))*2.;hole=(c.x==0.&&c.y==0.)?1.:0.;vec3 a=vec3(.2,.19,.16)*(.6+.5*texture(N,p.xz*.11).r)*(.7+.3*h21(c));a=mix(vec3(.1,.1,.11),a,smoothstep(.04,.07,e));vec3 hl=HP-p;float hd=dot(hl,hl);vec3 col=a*(vec3(.02,.03,.04)+heroCol(HN)*3.*max(hl.y,0.)/sqrt(hd)/(1.+hd));float lk=step(.8,h21(c+7.))*smoothstep(.07,.0,e)*(.3+.7*vn(p.xz*2.));col+=vec3(.55,1,.75)*lk*.35;if(hole>.5)col=vec3(.6,1,.8)*(.35+1.1*smoothstep(.9,.1,e)*(.7+.3*vn(p.xz*9.)))*smoothstep(.04,.1,e);return col;}void mainImage(out vec4 o,vec2 fc){float t=LB,k;S=t<8.?t*2.:t<24.?16.+(t-8.)*4.:80.+(t-24.)*8.;HP=pathAt(t,HN);if(t>28.)HP.x=t<30.?44.+3.5*(t-28.):camx(t)+6.8-1.6*(t-30.);HP+=.05*vec3(sin(t*5.),sin(t*4.3),cos(t*3.7))*step(t,28.);vec3 ro,ta;float fz=.7,rl=0.;if(t<4.){ro=vec3(4.8-.2*t,.5,2.5);ta=mix(vec3(.5,.2,.5),HP,.55);fz=.8;}else if(t<8.){ro=vec3(8.6-(t-4.)*.35,.5,1.5);ta=HP+vec3(0,.3,0);fz=1.;}else if(t<12.){float tb=t-.62;ro=tb<8.?vec3(5.5-(8.-tb)*3.,1.5,.5):sm(tb);ta=sm(t+.2);fz=.58;rl=.1*sin(t*PI*.5);}else if(t<16.){ro=vec3(10.4+(t-12.)*1.8,5.5,7.5);ta=HP;fz=.75;}else if(t<20.){ro=sm(t+.7);ta=HP;fz=.7;}else if(t<24.){ro=sm(t-.42);ta=sm(t+.25);fz=.5;rl=.16*sin(t*PI*.5);}else if(t<30.){ro=vec3(27.4+2.8*(t-24.),7.5,.5);ta=ro+vec3(1,.03*sin(t*2.),.03*cos(t*1.7));fz=.6-.08*smoothstep(28.,30.,t);rl=.05*sin(t*PI*.25);}else{ro=vec3(camx(t),7.5,.5)+.03*vec3(0,sin(t*37.),cos(t*29.));ta=ro+vec3(1,0,0);fz=.5;rl=(t-30.)*(t-30.)*1.4;}fz*=1.-.035*K.x;vec3 rd=ray(fc,ro,ta,fz,rl),hc=heroCol(HN),col;float d,tt=0.,far=25.;if(t>=30.){vec2 c=ro.yz-vec2(7.5,.5);float A=dot(rd.yz,rd.yz),Bq=dot(c,rd.yz),Cq=dot(c,c)-.44*.44;tt=(-Bq+sqrt(max(Bq*Bq-A*Cq,0.)))/max(A,1e-5);vec3 p=ro+rd*tt;vec2 w=p.yz-vec2(7.5,.5);float an=atan(w.y,w.x),fx=fract(p.x*.5),rib=smoothstep(.06,.0,abs(fx-.5)-.03),u=t-30.;vec3 n=normalize(vec3((fx-.5)*rib*6.,-w/.44));float br=texture(N,vec2(p.x*.013,an*.32)).r;vec3 a=mix(vec3(.4,.43,.47),vec3(.08),rib)*(.4+br);vec3 hl=HP-p;float hd=dot(hl,hl);vec3 l=hl/sqrt(hd);float dif=max(dot(n,l),0.),sp=pow(max(dot(reflect(rd,n),l),0.),24.);col=(a*dif+sp*(.4+br))*hc*7./(1.+hd*.25);col+=mix(hc,vec3(1),.3)*step(.9,fract(p.x*.125))*(1.2+2.*K.x)*(.4+br);vec3 hot=mix(hc,vec3(1.,.95,.85),.35+.3*u)*(.25+.5*u*u*u);col=mix(hot,col,exp(-tt*(.03+.012*u*u)));col+=hot*.03/(1.015-rd.x)*u;col+=hero(ro,rd,HP,tt,HN)*(1.+u*2.);o=vec4(col,1);return;}float tf=rd.y<0.?(-1.5-ro.y)/rd.y:1e3;far=min(far,tf);bool hit=false;for(int i=0;i<90;i++){vec3 p=ro+rd*tt;d=map(p);if(d<.0008+.0012*tt){hit=true;break;}vec3 q=p-floor(p+.5),e=(sign(rd)*.5-q)/rd;tt+=min(min(gD,gBp),min(e.x,min(e.y,e.z))+.28)*.95;if(tt>far)break;}float fog=exp(-min(tt,far)*.1);vec3 fc0=vec3(.006,.011,.018);if(hit){vec3 p=ro+rd*tt,n=vec3(0);for(int i=0;i<4;i++){vec3 e=.5773*(2.*vec3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.);n+=e*map(p+.0015*e);}n=normalize(n);map(p);int ci=gCol;float age=gAge,ball=gBall,ao=1.;for(int i=1;i<3;i++){float h=.12*float(i);ao-=(h-min(map(p+n*h),h))*1.1/float(i);}ao=sat(ao);vec3 a=pal(ci);float sc=texture(N,p.xy*.35+p.z*.21).r,gl=(ci==4?.5:1.)*(.75+.5*sc)*(1.+.8*K.x*ball);bool inside=ci==4&&length(p.yz-vec2(7.5,.5))<.47;vec3 hl=HP-p;float hd=dot(hl,hl);vec3 l=hl/sqrt(hd),r=reflect(rd,n),kl=normalize(vec3(.35,.8,-.45));float fr=.045+.955*pow(1.-max(dot(n,-rd),0.),5.);vec3 hi=hc*5./(1.+hd*1.3);col=a*(hi*max(dot(n,l),0.)+vec3(.8,.9,1)*.3*max(dot(n,kl),0.)*ao+vec3(.35,.55,.45)*.16*(.55-.45*n.y)*ao);col+=gl*(hi*pow(max(dot(r,l),0.),60.)*1.5+vec3(.9,.95,1)*pow(max(dot(r,kl),0.),180.)*2.5*ao+env(r)*fr*ao*1.6);if(ci<4)col+=a*(ci==3?.3:1.)*(2.5+3.*K.x)*exp(-max(age-.4,0.)*1.3)*(.4+.6*fr);if(inside)col+=vec3(1,.6,.3)*smoothstep(44.,49.,p.x)*smoothstep(26.,30.,t)*1.5+hi*.3;}else if(tf<1e3&&tt>=tf){float hole;col=tiles(ro+rd*tf,tf,hole);}else col=fc0;col=mix(fc0,col,fog);vec2 sc2=ro.xz-vec2(.5),sd=rd.xz;float sa=dot(sd,sd),st=clamp(-dot(sc2,sd)/max(sa,1e-4),0.,min(tt,far));vec3 sp3=ro+rd*st;float sr=length(sp3.xz-vec2(.5));col+=vec3(.5,.9,.7)*.05*exp(-sr*sr*1.1)*exp(-max(sp3.y+1.5,0.)*.3)*step(-1.5,sp3.y)/sqrt(max(sa,.02))*smoothstep(12.,6.,t);col+=hc*pglow(ro,rd,HP,min(tt,far))*.004;col+=hero(ro,rd,HP,min(tt,far),HN);o=vec4(col,1);}
`};
SCN.pipes.glsl=SCN.pipes.glsl.replace('PATHDECL','const vec4 W[16]=vec4[16]('+PIPE_W.map(w=>'vec4('+[w[1],w[2],w[3],w[0]].map(v=>v.toFixed(1)).join(',')+')').join(',')+');');
SCN.stars={th:.9,bl:.6,q:(lb,len)=>[0,1,Math.max(0,(lb-31)*1.2)**2,.002+.01*Math.max(0,lb-24)/8],glsl:`void mainImage(out vec4 o,vec2 f){float a=R.x/R.y;vec2 p=(f*2.-R)/R.y;float w=smoothstep(3.,12.,LB)+2.5*smoothstep(24.,32.,LB),ph=LB*.03+LB*LB*.0035;vec2 hp=vec2(.22*sin(LB*.4),.08+.07*sin(LB*.7)),vp=hp*.6;vec3 c=mix(vec3(.012,.02,.05),vec3(.0,.002,.012),sat(p.y*.4+.5+LB*.08));c+=vec3(.05,.02,.09)*fbm(p*1.3+vec2(LB*.02,3.))*smoothstep(6.,14.,LB)+vec3(.0,.03,.07)*fbm(p*.9-vec2(7.,LB*.03))*smoothstep(6.,14.,LB);vec2 pv=p-vp;float pl=length(pv)+1e-4;vec2 dr=pv/pl,tn=vec2(-dr.y,dr.x);for(int i=0;i<30;i++){float fi=float(i),z=fract(fi/30.-ph),sc=z*9.+.15;vec2 q=pv*sc+fi*17.3,id=floor(q),d=fract(q)-.2-.6*h22(id+fi);d/=sc;float st=1.+w*14.*pl*(1.-z),r=(.0035+.004*h21(id))*(1.2-z);d=vec2(dot(d,dr)/st,dot(d,tn));float hh=h21(id*1.3+fi);vec3 k=mix(vec3(.85,.92,1.),heroCol(hh*6.),step(.62,hh)*sat(w*.6));c+=k*smoothstep(r,r*.25,length(d))*smoothstep(1.,.75,z)*smoothstep(0.,.08,z)*(1.1+.5*K.x)*step(.25,hh);}float n=floor(LB*.25);vec3 hc=heroCol(n);for(int i=0;i<40;i++){float fi=float(i),h=h11(fi*3.3),on=sat((LB-3.-h*14.)*.4),sg=mod(fi,2.)<1.?1.:-1.,an=h*TAU+LB*(.15+.25*h11(fi+5.))*sg,r=(.3+1.2*h11(fi*7.1))*(1.-.75*smoothstep(22.,32.,LB));vec2 q=hp+vec2(cos(an)*r*1.35,sin(an)*r*.62-(1.-on)*(1.-on)*2.6),d=p-q,t2=vec2(-sin(an),cos(an)*.5)*sg;float s=.5+.6*h11(fi*1.9);d=vec2(dot(d,normalize(t2))/(1.+2.5*r),dot(d,vec2(-t2.y,t2.x))/length(t2));float d2=dot(d,d);c+=heroCol(fi)*on*s*(.0008/(d2+.0006)+smoothstep(.02*s,.008*s,sqrt(d2))*1.6)*(.8+.4*K.x);}float d=length(p-hp),gr=1.+4.*smoothstep(27.,32.,LB);c+=mix(hc,vec3(1),.65)*smoothstep(.075*gr,.04*gr,d)*5.+hc*.015*gr*gr/(d*d+.012);c+=hc*smoothstep(.012,.0,abs(d-.105*gr))*1.5;for(int i=0;i<4;i++){float fi=float(i);vec2 q=p*(.9+fi*.35)+vec2(fi*3.1+LB*.05,LB*(.3+.22*fi)+LB*LB*.02);float dn=fbm(q*1.25),al=smoothstep(.42,.72,dn)*(1.-smoothstep(3.+fi*1.4,6.5+fi*1.6,LB));vec3 cc=mix(vec3(.02,.035,.07),vec3(.22,.27,.4),smoothstep(.5,.85,dn)*(.6+.4*p.y))+hc*.25/(1.+dot(p-hp,p-hp)*5.);c=mix(c,cc,al*.92);}o=vec4(c,1);}
`};
SCN.window={th:1,bl:.6,
q:(lb,len,b)=>[0,Math.min(1,lb/2),(lb>31?.3*Math.exp(-(lb-31)*9):0)+(lb>31.45?Math.pow((lb-31.45)/.55,1.6):0),.0015],
glsl:`#define ZB .1
#define SS .06
#define SW .028
vec3 hp;float hn,hb,op,orx,trm,ckr,fp,bks;const vec3 LO=vec3(.42,.42,-.805),LU=vec3(-.393,.729,-.561);vec3 heroPos(float lb){float s=smoothstep(0.,7.6,lb),g=smoothstep(6.,9.,lb);vec3 p=mix(vec3(2.3,1.6,5.8),vec3(0.,1.25,.3),s);p.x-=sin(s*PI)*.8;p.y+=sin(s*PI)*.15;p.y+=.03*sin(lb*.9)*g;p.x+=.025*sin(lb*.37+1.)*g;float bk=smoothstep(24.,29.8,lb),ch=sat((lb-30.4)/.6),sh=smoothstep(25.,30.4,lb)*(1.-ch);p.z+=2.2*bk;p.y+=.08*bk;p+=sh*.03*vec3(sin(lb*61.),sin(lb*73.+1.),sin(lb*47.+2.));p.z=mix(p.z,.02,ch*ch*ch);return p;}float opA(float x){float d=(x-hp.x)/orx;return op*exp(-d*d);}float sInv(float y,float A){float w=.14+A*1.25,v=y-hp.y,a=abs(v);return a<w?hp.y+sign(v)*max(a-A,0.)*w/(w-A):y;}float sFwd(float y0,float A){float w=.14+A*1.25,u=y0-hp.y,a=abs(u);return a<w?hp.y+(u<0.?-1.:1.)*(A+a*(w-A)/w):y0;}float tilt(float i,float x){float dy=i*SS-hp.y,dx=x-hp.x,g=exp(-(dy*dy*14.+dx*dx*5.));return .6-.3*g*sat(op*12.)+trm*g*.2*sin(T*14.+i*2.1)+.03*sin(i*12.9898);}float slat(vec3 ro,vec3 rd,out vec3 n,out float sl){float t0=(ZB-SW-ro.z)/rd.z,t1=(ZB+SW-ro.z)/rd.z,te=max(min(t0,t1),0.),tx=max(t0,t1),res=1e9;n=vec3(0,1,0);sl=0.;if(tx<0.)return res;vec3 pm=ro+rd*(te+tx)*.5;if(abs(pm.x)>2.28||abs(abs(pm.x)-.77)<.02)return res;float A=opA(pm.x),ya=sInv(ro.y+rd.y*te,A),yb=sInv(ro.y+rd.y*tx,A),lo=min(ya,yb),hi=max(ya,yb),i0=floor(lo/SS-.7);for(int k=0;k<8;k++){float i=i0+float(k),y0=i*SS;if(y0>hi+SS*.8)break;if(y0<.1||y0>2.66)continue;float yc=sFwd(y0,A),a=tilt(i,pm.x);vec2 nn=vec2(cos(a),sin(a));float t=dot(nn,vec2(yc,ZB)-ro.yz)/dot(nn,rd.yz);vec2 q=ro.yz+rd.yz*t-vec2(yc,ZB);float l=dot(q,vec2(-nn.y,nn.x));if(t>0.&&abs(l)<SW&&t<res){res=t;sl=l/SW;float c=a+sl*.3;n=vec3(0,cos(c),sin(c));}}return res;}float wT(vec3 p,vec3 l,float dk){float t=(p.z-ZB)/(-l.z);if(t<0.)return 0.;vec3 q=p+l*t;float bl=.002+t*.0045;float m=smoothstep(2.3,2.3-bl*2.,abs(q.x))*smoothstep(.05,.05+bl*2.,q.y)*smoothstep(2.7,2.7-bl*2.,q.y)*smoothstep(.03-bl,.03+bl,abs(abs(q.x)-.77));float A=opA(q.x),y0=sInv(q.y,A),hk=dk*SS,f=abs(fract(y0/SS+.5)-.5)*SS;float s=mix(smoothstep(hk-bl,hk+bl,f),sat(1.-2.*hk/SS),smoothstep(.2,.8,bl/SS*2.));s=max(s,smoothstep(A,A-bl-.002,abs(q.y-hp.y)));return m*s;}vec3 bok(vec2 P,float g,float sd){vec2 id=floor(P/g),q=P/g-id-.5;vec3 h=h33(vec3(id,sd)+.5);if(h.x<.76)return vec3(0);float r=.24+.1*h.y,d=length(q-(h.yz-.5)*.3),m=smoothstep(r,r*.86,d)*(.6+.4*smoothstep(r*.4,r,d)),k=fract(h.x*37.);vec3 c=k<.48?vec3(1.,.4,.09):k<.72?vec3(1.,.72,.42):k<.94?vec3(.3,.55,1.):vec3(1.,.08,.04);return c*m*(.2+1.7*h.z*h.z);}vec3 outside(vec3 ro,vec3 rd){float e=rd.y/length(rd.xz);vec3 c=mix(vec3(.2,.08,.028),vec3(.006,.016,.05),smoothstep(-.06,.45,e));c=mix(c,vec3(.05,.028,.022),smoothstep(-.02,-.6,e));for(int i=0;i<3;i++){float fi=float(i),D=i==0?330.:i==1?140.:58.,t=(-D-ro.z)/rd.z;vec2 P=ro.xy+rd.xy*t+fi*37.3;float cw=D*.17,cx=P.x/cw,ci=floor(cx),fx=cx-ci,hh=h11(ci+fi*17.3),top=-34.+(118.-25.*fi)*hh*hh,b=D*.4*bks,ex=step(.22,h11(ci*3.3+fi+.7));float m=smoothstep(-b,b,top-P.y)*smoothstep(0.,2.*b/cw,fx-.07)*smoothstep(0.,2.*b/cw,.93-fx)*ex;c=mix(c,mix(vec3(.003,.006,.013),c,.42-.17*fi),m);float g=D*bks;vec3 L=bok(P,g,fi)+bok(P+g*.53,g*1.37,fi+7.);c+=L*(m*.9+.07+.5*smoothstep(-28.,-44.,P.y))*smoothstep(-64.,-48.,P.y)*(.55+.25*fi);vec2 bp=vec2((ci+.5)*cw,top+b*.5)-P;c+=vec3(1.,.05,.025)*smoothstep(b*.8,b*.45,length(bp))*step(.5,hh)*ex*pow(.5+.5*sin(T*2.3+hh*50.),5.)*3.;}return c;}vec2 crack(vec2 p,float rad){float r=length(p);if(r>rad)return vec2(0);float a=atan(p.y,p.x)+(vn(vec2(r*7.,2.))-.5)*.35,n=15.,fa=a/TAU*n+.3*sin(a*3.),ia=floor(fa),fr=fa-ia;float d=min(fr,1.-fr)*r*TAU/n,hs=h11(ia+3.7);float lr=log2(r*9.+1.)*(1.6+hs*1.6)+hs*9.,ir=floor(lr),dr=abs(lr-ir-.5)*(r+.11)*.3;d=min(d,h11(ir*3.1+ia)>.35?.5*.3*(r+.11)-dr:1.);float w=.0025+r*.004;return vec2(smoothstep(w,w*.3,d)*smoothstep(rad,rad*.8,r),h11(ia*5.+ir)-.5);}float map(vec3 p){vec3 q=p-vec3(-1.35,0,2.3);float d=sdBox(q-vec3(0,.74,0),vec3(.8,.02,.4));d=min(d,sdBox(vec3(abs(q.x)-.76,q.y-.36,q.z),vec3(.02,.36,.38)));d=min(d,sdBox(q-vec3(0,.5,-.3),vec3(.76,.2,.012)));d=min(d,sdRBox(q-vec3(-.25,1.,-.05),vec3(.2,.17,.2),.035));d=min(d,sdBox(q-vec3(-.25,.79,-.05),vec3(.12,.03,.12)));q=p-vec3(-1.05,0,3.2);d=min(d,sdRBox(q-vec3(0,.47,0),vec3(.23,.035,.23),.03));d=min(d,sdRBox(q-vec3(0,.88,.23),vec3(.21,.27,.025),.025));d=min(d,sdCap(q,vec3(0,.08,0),vec3(0,.44,0),.025));d=min(d,sdCap(q,vec3(0,.5,.23),vec3(0,.64,.235),.02));d=min(d,max(length(q.xz)-.3,abs(q.y-.05)-.02));q=p-vec3(1.95,0,.8);d=min(d,max(length(q.xz)-.15-.07*q.y,abs(q.y-.21)-.21));q.y-=.4;float sc=TAU/7.,an=atan(q.z,q.x),r=length(q.xz),a1=mod(an+sc*.5,sc)-sc*.5,a2=mod(an,sc)-sc*.5;d=min(d,sdCap(vec3(r*cos(a1),q.y,r*sin(a1)*.4),vec3(0),vec3(.4,.52,0),.022));d=min(d,sdCap(vec3(r*cos(a2),q.y,r*sin(a2)*.4),vec3(0),vec3(.2,.9,0),.02));d=min(d,sdCap(q,vec3(0),vec3(.03,1.05,.02),.03));q=vec3(abs(p.x-1.42)-.7,p.y,p.z-.17);d=min(d,sdCap(q,vec3(0,.95,0),vec3(0,2.7,0),.005));d=min(d,sdCap(q,vec3(0,.88,0),vec3(0,.95,0),.014));return d;}float shd(vec3 p,vec3 l){float t=.04,s=1.;for(int i=0;i<18;i++){float d=map(p+l*t);s=min(s,12.*d/t);t+=clamp(d,.03,.35);if(s<.02||t>4.5)break;}return sat(s);}vec3 shade(vec3 p,vec3 n,vec3 al){vec3 l=hp-p,w=vec3(0,1.4,0)-p;float d2=dot(l,l),w2=dot(w,w);vec3 c=vec3(.004,.008,.015);float a=max(dot(n,LO),0.)*wT(p,LO,.27);if(a>.003)a*=shd(p+n*.004,LO);c+=vec3(1.,.34,.06)*2.6*a;a=max(dot(n,LU),0.)*wT(p,LU,.2);if(a>.003)a*=shd(p+n*.004,LU);c+=vec3(.18,.4,1.)*1.1*a;c+=vec3(.07,.05,.045)*(.5+.5*dot(n,w)*inversesqrt(w2))/(1.+.12*w2);c+=heroCol(hn)*hb*.5*max(dot(n,l)*inversesqrt(d2),0.)/(d2+.06);return al*c;}vec3 slatSh(vec3 p,vec3 n,vec3 rd){vec3 nv=dot(n,rd)<0.?n:-n,l=hp-p;float d2=dot(l,l),a=dot(nv,LO);vec3 c=vec3(.008,.014,.024);c+=vec3(1.,.34,.06)*1.5*(a>0.?a:-a*.2);a=dot(nv,LU);c+=vec3(.18,.4,1.)*.7*(a>0.?a:-a*.2);a=dot(nv,vec3(0,-.6,-.8));c+=vec3(1.,.38,.1)*.06*(a>0.?a:-a*.2);a=dot(nv,l)*inversesqrt(d2);c+=heroCol(hn)*hb*.5*(a>0.?a:-a*.35)/(d2+.1);return vec3(.5,.48,.43)*c;}vec3 room(vec3 ro,vec3 rd){vec3 sg=vec3(rd.x<0.?-1.:1.,rd.y<0.?-1.:1.,rd.z<0.?-1.:1.),tb=(vec3(2.6,1.4,3.)*sg-(ro-vec3(0,1.4,3.)))/rd;float tr=min(tb.x,min(tb.y,tb.z)),t=0.,d=1.;bool hit=false;vec3 nr=tb.x==tr?vec3(-sg.x,0,0):tb.y==tr?vec3(0,-sg.y,0):vec3(0,0,-sg.z);for(int i=0;i<64;i++){d=map(ro+rd*t);if(d<.0015){hit=true;break;}t+=d;if(t>tr)break;}vec3 sn,col;float sl,ts=slat(ro,rd,sn,sl),tm;if(hit&&t<ts){vec3 p=ro+rd*t,n=vec3(0);for(int i=0;i<4;i++){vec3 e=.5773*(2.*vec3((((i+3)>>1)&1),((i>>1)&1),(i&1))-1.);n+=e*map(p+.002*e);}n=normalize(n);vec3 al=vec3(.16,.15,.13);if(p.x>1.3&&p.z<1.6)al=p.y>.43?vec3(.03,.09,.035):vec3(.2,.08,.04);else if(p.z>2.7)al=vec3(.03,.035,.04);else if(p.y>.77)al=vec3(.5,.46,.36);col=shade(p,n,al);tm=t;}else{vec3 p=ro+rd*tr,cb;tm=tr;bool gls=nr.z>.5&&abs(p.x)<2.3&&p.y>.05&&p.y<2.7&&abs(abs(p.x)-.77)>.03;if(gls){cb=outside(p,rd)*.94;vec3 l=hp-p;cb+=heroCol(hn)*hb*.012/(dot(l,l)+.03);cb+=hero(ro,rd,vec3(hp.xy,-hp.z),1e9,hn)*hb*.3;if(ckr>0.){vec2 ck=crack(p.xy-hp.xy,ckr);cb*=1.+ck.y*.9*step(length(p.xy-hp.xy),ckr*.8);cb+=ck.x*(vec3(.35,.4,.5)+heroCol(hn)*hb*.8/(dot(l,l)*3.+.3));}}else{vec3 al=nr.y>.5?vec3(.05,.068,.085)*(.75+.5*texture(N,p.xz*.9).r):nr.y<-.5?vec3(.3)*(.9+.1*step(.03,min(fract(p.x/.6),fract(p.z/.6)))):nr.z>.5?vec3(.035,.04,.045):vec3(.2,.22,.23);cb=shade(p+nr*.001,nr,al);}float tp=(ZB-ro.z)/rd.z;if(tp>0.&&tp<tr){vec3 q=ro+rd*tp;bool inw=abs(q.x)<2.28&&abs(abs(q.x)-.77)>.02&&q.y>.08&&q.y<2.68&&abs(q.y-hp.y)>opA(q.x);float lod=smoothstep(.22,.6,tp*fp/SS),cov=sat(2.*SW*abs(.565+.825*rd.y/rd.z)/SS),w=ts<1e8?1.-lod*(1.-cov):inw?lod*cov:0.;if(w>0.){cb=mix(cb,slatSh(ts<1e8?ro+rd*ts:q,ts<1e8?sn:vec3(0,.825,.565),rd),w);if(w>.5)tm=ts<1e8?ts:tp;}}col=cb;}return col+hero(ro,rd,hp,tm,hn)*hb;}vec3 facade(vec3 ro,vec3 rd){float t=-ro.z/rd.z;vec3 p=ro+rd*t;if(p.x<-33.8||p.x>28.6||p.y>23.2)return outside(vec3(p.xy,0),vec3(rd.xy,-rd.z))*.55;vec2 id=floor(vec2((p.x+2.6)/5.2,p.y/3.4)),q=vec2(p.x-id.x*5.2,p.y-id.y*3.4);bool gls=abs(q.x)<2.3&&q.y>.05&&q.y<2.7&&abs(abs(q.x)-.77)>.03;vec3 rf=outside(p,vec3(rd.xy,-rd.z))*(.07+.6*pow(1.-rd.z,4.)),l=hp-p;if(!gls){float st=fbm(p.xy*vec2(.9,.25)+id*3.1),j=smoothstep(.0,.02,abs(q.y-2.75))*smoothstep(.0,.02,abs(abs(q.x)-2.6+.02));vec3 c=vec3(.2,.2,.21)*(.55+.6*st)*(.4+.6*j)*(vec3(.02,.035,.07)+vec3(.16,.07,.025)*(1.2-.5*sat(q.y/3.4+.2)));c+=vec3(.09)*heroCol(hn)*hb*.6/(dot(l,l)+.5);return c;}if(id==vec2(0)){vec3 c=room(p,rd)+rf;return c;}float h=h21(id+9.1),h2=h21(id*1.7+3.3),bl=h<.75?mix(.15,1.,fract(h*9.7)):0.;float lod=smoothstep(.22,.6,t*fp/SS),sl=mix(smoothstep(.35,.5,abs(fract(q.y/SS)-.5)*2.),.4,lod);vec3 c=vec3(.004,.006,.01);if(q.y>2.7-2.65*bl)c=vec3(.5,.48,.43)*(vec3(.02,.03,.05)+vec3(1.,.38,.1)*.035)*(.25+.75*sl)*(.5+.5*h2);if(h2>.955)c+=vec3(.3,.65,1.)*.05*(.6+.4*sin(T*(1.+h*3.)+h*30.))*(1.-.6*bl);return c+rf;}void mainImage(out vec4 o,vec2 f){float lb=LB;hp=heroPos(lb);hn=lb<31.?0.:1.;hb=1.+.12*sin(lb*1.7)+2.2*smoothstep(25.,30.6,lb)+(lb>31.?3.*exp(-(lb-31.)*2.5):0.);op=.085*smoothstep(6.,8.6,lb)*(1.-smoothstep(24.,26.5,lb))+.008*sin(T*5.)*smoothstep(7.,9.,lb)*(1.-smoothstep(24.,26.,lb))+.62*smoothstep(30.55,30.95,lb);orx=.42+.8*smoothstep(30.55,30.95,lb);trm=smoothstep(4.5,7.5,lb)*exp(-max(hp.z-.3,0.)*1.2)*(1.+2.*smoothstep(27.,30.8,lb));ckr=lb>31.?2.2*(1.-exp(-(lb-31.)*3.5)):0.;vec3 ro,ta;float z=.9,u;bks=.042;if(lb<8.){u=lb/8.;ro=mix(vec3(1.95,1.5,5.55),vec3(1.5,1.4,4.7),u);ta=vec3(-.4,1.15,0);}else if(lb<16.){u=(lb-8.)/8.;ro=vec3(1.02-.1*u,1.31+.01*sin(lb),.78+.06*u);ta=vec3(-.1,1.25,0);z=1.45;bks=.085;}else if(lb<24.){u=(lb-16.)/8.;float ds=mix(4.5,48.,pow(u,1.5));ro=vec3(.8+ds*.22,1.35-ds*.16,-ds);ta=vec3(ds*.06,1.3+ds*.04,0);z=1.25;bks=.02;}else{u=(lb-24.)/8.;ro=vec3(.3-.15*u,1.42,4.3-.5*u);ta=mix(vec3(0,1.25,0),hp,.45);z=1.+.2*u;if(lb>31.)ro+=.03*exp(-(lb-31.)*3.)*vec3(sin(lb*90.),sin(lb*70.),0);}z*=1.-.008*K.x;vec3 rd=ray(f,ro,ta,z,0.);fp=1./(R.y*z);rd+=step(abs(rd),vec3(1e-4))*1e-4;vec3 c=ro.z<0.?(rd.z>0.?facade(ro,rd):outside(ro,rd)):room(ro,rd);o=vec4(c,1);}
`};
var TL=[['desk',0],['inside',32],['breakout',64],['pipes',96],['maze',128],['window',160],['city',192],['stars',256],['end',288]];
var CAPS=(()=>{
const S='"Helvetica Neue",Helvetica,Arial,sans-serif',
line=(c,w,h,t,y,px,wt,sp,al)=>{c.font=wt+' '+Math.round(px*h)+'px '+S;c.textAlign='center';c.textBaseline='middle';try{c.letterSpacing=(sp*px*h).toFixed(1)+'px'}catch(e){}c.globalAlpha=al||1;c.fillStyle='#fff';c.fillText(t,w/2+sp*px*h/2,y*h,w*.94);c.globalAlpha=1},
two=(a,z,t,u)=>({a,z,i:1.5,o:1.5,d:(c,w,h)=>{line(c,w,h,t,.47,.05,300,.22);line(c,w,h,u,.56,.026,400,.3,.6)}});
return[
{a:2.5,z:8,i:1.5,o:1,d:(c,w,h)=>{line(c,w,h,'OUT OF OFFICE',.8,.06,700,.5);line(c,w,h,'a screensaver escapes the office',.88,.024,400,.35,.65)}},
{a:290,z:300,i:1.5,o:1.5,d:(c,w,h)=>{line(c,w,h,'OUT OF OFFICE',.46,.11,700,.4);line(c,w,h,'a screensaver escapes the office',.6,.028,400,.35,.65)}},
two(301,311,'code, pictures and music by Claude Fable 5.2','one file, nothing fetched, nothing recorded'),
two(312,322,'greetings to every screen left on overnight','no phosphors were harmed'),
{a:323,z:327.6,i:.5,o:.5,d:(c,w,h)=>line(c,w,h,'wait for it',.5,.03,400,.5,.7)},
{a:332,z:336,i:1,o:1,d:(c,w,h)=>{line(c,w,h,'Press any key to return to work.',.47,.036,400,.12);line(c,w,h,"(Don't.)",.56,.026,400,.2,.6)}}]})();
(()=>{
const D=document,$=i=>D.getElementById(i),cv=$('g'),HQ=new URLSearchParams(location.hash.slice(1));
const st=window.__st={errs:[],first:-1,music:-1,scale:1,ready:0,total:0,sd:{},t:0,ac:0,blocks:0,ended:0,stall:0,frames:0,w:0,h:0};
addEventListener('error',e=>st.errs.push(e.message||'error'));
const gl=cv.getContext('webgl2',{antialias:false,alpha:false,powerPreference:'high-performance'});
if(!gl){$('msg').textContent='This demo needs WebGL 2.';return}
const HF=gl.getExtension('EXT_color_buffer_float')||gl.getExtension('EXT_color_buffer_half_float'),par=gl.getExtension('KHR_parallel_shader_compile');
const SPB=60/BPM,END=ENDB*SPB,BLK=2,MUTE=HQ.has('mute'),STILL=HQ.has('still')?+HQ.get('still'):-1,B0=+HQ.get('b')||0,FIX=+HQ.get('s')||0;
const stub={glsl:'void mainImage(out vec4 o,vec2 f){vec2 u=f/R;o=vec4(.02+.1*K.x*vec3(u,1.-u.x),1);}'};
const SCS=TL.map((e,i)=>Object.assign({id:e[0],b:e[1],e:TL[i+1]?TL[i+1][1]:ENDB},SCN[e[0]]||stub));
const at=b=>{let i=SCS.length-1;while(i>0&&SCS[i].b>b)i--;return i};
const VS='#version 300 es\nvoid main(){gl_Position=vec4(vec2(gl_VertexID&1,gl_VertexID>>1)*4.-1.,0,1);}';
function sh(t,s){const o=gl.createShader(t);gl.shaderSource(o,s);gl.compileShader(o);return o}
function mk(fs,name){const p=gl.createProgram(),a=sh(gl.VERTEX_SHADER,VS),b=sh(gl.FRAGMENT_SHADER,fs);gl.attachShader(p,a);gl.attachShader(p,b);gl.linkProgram(p);return{p,b,name,ok:0,u:{}}}
function poll(o){if(o.ok)return 1;if(par&&!gl.getProgramParameter(o.p,par.COMPLETION_STATUS_KHR))return 0;
if(!gl.getProgramParameter(o.p,gl.LINK_STATUS)){const e=o.name+': '+gl.getShaderInfoLog(o.b)+gl.getProgramInfoLog(o.p);st.errs.push(e);console.error(e);o.ok=-1;return 1}
const n=gl.getProgramParameter(o.p,gl.ACTIVE_UNIFORMS);const sm={};for(let i=0;i<n;i++){const au=gl.getActiveUniform(o.p,i),u=au.name.replace('[0]','');o.u[u]=gl.getUniformLocation(o.p,u);if(au.type==gl.SAMPLER_2D||au.type==gl.SAMPLER_3D)sm[u]=1}
o.ok=1;gl.useProgram(o.p);[['X',2],['N',3],['O',4],['P',5],['S',0],['D',1]].forEach(e=>sm[e[0]]&&gl.uniform1i(o.u[e[0]],e[1]));gl.activeTexture(gl.TEXTURE5);gl.bindTexture(gl.TEXTURE_3D,tP);gl.activeTexture(gl.TEXTURE0);gl.bindFramebuffer(gl.FRAMEBUFFER,warm.f);gl.viewport(0,0,1,1);gl.drawArrays(gl.TRIANGLES,0,3);return 1}
const fx={},jobs=[];for(const k in FX)jobs.push(()=>fx[k]=mk(FX[k],k));
const first=at(STILL>=0?STILL:B0);
SCS.map((s,i)=>i).sort((a,b)=>(a<first)-(b<first)||a-b).forEach(i=>{const s=SCS[i];jobs.push(()=>s.pr=mk(PRE+(s.sv?SV:'')+s.glsl+POST,'scene '+s.id))});
st.total=jobs.length;let cur=null;
function compileStep(){if(cur&&!poll(cur))return;if(cur&&cur.ok>0)st.ready++;cur=jobs.length?jobs.shift()():null}
function tex(w,h,f,lin,src){const t=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,t);
if(src)gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,src);else gl.texImage2D(gl.TEXTURE_2D,0,f?gl.RGBA16F:gl.RGBA8,w,h,0,gl.RGBA,f?gl.HALF_FLOAT:gl.UNSIGNED_BYTE,null);
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,lin?gl.LINEAR:gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,lin?gl.LINEAR:gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);return t}
function tgt(w,h){const t=tex(w,h,HF,1),f=gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER,f);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,t,0);return{t,f,w,h}}
function drop(o){if(o){gl.deleteTexture(o.t);gl.deleteFramebuffer(o.f)}}
const warm=tgt(1,1);
const ac2=D.createElement('canvas');ac2.width=ac2.height=1024;ATLAS(ac2.getContext('2d'));
const tX=tex(0,0,0,1,ac2);gl.generateMipmap(gl.TEXTURE_2D);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR_MIPMAP_LINEAR);
const nz=new Uint8Array(262144);{let s=1234567;for(let i=0;i<262144;i++){s=Math.imul(s^s>>>15,2246822519)+i|0;nz[i]=s>>>24}}
const tN=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,tN);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,256,256,0,gl.RGBA,gl.UNSIGNED_BYTE,nz);gl.generateMipmap(gl.TEXTURE_2D);
gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR_MIPMAP_LINEAR);
const oc=D.createElement('canvas'),ox=oc.getContext('2d');let tO=tex(2,2,0,1),capI=-2;
const tP=gl.createTexture();gl.bindTexture(gl.TEXTURE_3D,tP);{const l=typeof LATTICE=='function'?LATTICE():{n:1,d:new Uint8Array(4)};
gl.texImage3D(gl.TEXTURE_3D,0,gl.RGBA,l.n,l.n,l.n,0,gl.RGBA,gl.UNSIGNED_BYTE,l.d);for(const k of[gl.TEXTURE_MIN_FILTER,gl.TEXTURE_MAG_FILTER])gl.texParameteri(gl.TEXTURE_3D,k,gl.NEAREST);
for(const k of[gl.TEXTURE_WRAP_S,gl.TEXTURE_WRAP_T,gl.TEXTURE_WRAP_R])gl.texParameteri(gl.TEXTURE_3D,k,gl.REPEAT)}
let V=[0,0,1,1],A=null,dn=[],up=[],scale=FIX||1,slow=0,cnt=0,lastScene=-1,mm=0;
function size(){const dpr=Math.min(devicePixelRatio||1,2),cw=Math.max(2,Math.round(innerWidth*dpr)),ch=Math.max(2,Math.round(innerHeight*dpr));
if(cv.width!=cw||cv.height!=ch){cv.width=cw;cv.height=ch}
const a=cw/ch,pa=Math.min(2.4,Math.max(1.2,a));let pw=cw,ph=ch;if(a>pa)pw=Math.round(ch*pa);else ph=Math.round(cw/pa);
V=[(cw-pw)>>1,(ch-ph)>>1,pw,ph];
const k=Math.min(1,Math.sqrt(1.6e6/(pw*ph)))*scale,w=Math.max(96,Math.round(pw*k)),h=Math.max(64,Math.round(ph*k));
if(!A||A.w!=w||A.h!=h){drop(A);dn.forEach(drop);up.forEach(drop);A=tgt(w,h);dn=[];up=[];let x=w,y=h;
for(let i=0;i<5;i++){x=Math.max(2,x>>1);y=Math.max(2,y>>1);dn.push(tgt(x,y));if(i<4)up.push(tgt(x,y))}
st.w=w;st.h=h;st.scale=scale}
const ow=Math.min(1600,pw),oh=Math.round(ow*ph/pw);if(oc.width!=ow||oc.height!=oh){oc.width=ow;oc.height=oh;capI=-2}}
let ac=null,gain=null,t0=0,p0=0,started=0,clickT=0,held=0;const blocks=[];
try{ac=new(window.AudioContext||window.webkitAudioContext)()}catch(e){}
const SR=ac?ac.sampleRate:44100,NB=Math.ceil(END/BLK)+2;
if(ac){gain=ac.createGain();gain.gain.value=MUTE?0:1;gain.connect(ac.destination)}
const wk=new Worker(URL.createObjectURL(new Blob([SYN],{type:'text/javascript'})));
wk.onerror=e=>st.errs.push('synth: '+e.message);
wk.onmessage=e=>{const m=e.data;if(m.err){st.errs.push('synth: '+m.err);return}blocks[m.i]=m;st.blocks++;{let pk=0;for(let j=0;j<m.l.length;j+=37)pk=Math.max(pk,Math.abs(m.l[j]),Math.abs(m.r[j]));st.peak=Math.max(st.peak||0,pk);if(pk>.01)st.loud=(st.loud||0)+1}if(started)sched(m.i);if(held&&ac){held=0;ac.resume()}};
wk.postMessage({sr:SR,blk:BLK});
function sched(i){const m=blocks[i];if(!m||m.n||!ac)return;const w=t0+i*BLK,c=ac.currentTime;if(w+BLK<=c)return;
const b=ac.createBuffer(2,m.l.length,SR);b.copyToChannel(m.l,0);b.copyToChannel(m.r,1);const n=ac.createBufferSource();n.buffer=b;n.connect(gain);
if(w>=c)n.start(w);else n.start(c,c-w);m.n=n;st.sched=(st.sched||0)+1;n.onended=()=>st.played=(st.played||0)+1}
function pos(){const n=performance.now();let p=(n-p0)/1e3;if(!ac)return p;
const a=ac.currentTime-t0-Math.min(.25,ac.outputLatency||0);
if(ac.state!='running'||Math.abs(p-a)>.08){p0=n-a*1e3;p=a}else p0+=(p-a)*30;
const nx=Math.floor((ac.currentTime-t0+.12)/BLK);
if(nx>=0&&nx<NB&&!blocks[nx]&&!held&&ac.state=='running'){held=1;st.stall++;ac.suspend()}
return p}
function start(){if(started)return;clickT=performance.now();st.first=st.music=-1;st.ended=0;blocks.forEach(m=>m.n=0);
const o=B0*SPB;if(ac){ac.resume();t0=ac.currentTime+.06-o;held=0}p0=clickT+60-o*1e3;started=1;blocks.forEach((m,i)=>sched(i));
$('sp').style.display='none';D.body.style.cursor='none';loop(1)}
function stop(){started=0;st.ended=1;blocks.forEach(m=>{try{m.n&&m.n.stop()}catch(e){}});$('go').textContent='AGAIN';$('msg').textContent='F: fullscreen';$('sp').style.display='';D.body.style.cursor=''}
function U(o,n){return o.u[n]}
function pass(o,dst,w,h){gl.useProgram(o.p);gl.bindFramebuffer(gl.FRAMEBUFFER,dst);gl.viewport(0,0,w,h)}
function bind(u,t,tg){gl.activeTexture(gl.TEXTURE0+u);gl.bindTexture(tg||gl.TEXTURE_2D,t)}
function draw(tb,sec){let i=at(tb),s=SCS[i];if(!fx.fin||fx.fin.ok<1||fx.down.ok<1||fx.up.ok<1)return 0;
if(!(s.pr&&s.pr.ok>0)){let j=i;while(j>=0&&!(SCS[j].pr&&SCS[j].pr.ok>0))j--;if(j<0)return 0;s=SCS[j]}
const lb=tb-s.b,len=s.e-s.b,q=s.q?s.q(lb,len,tb):[0,1,0,0],k=ENV(Math.max(0,tb));
let ci=-1,oa=0;for(let j=0;j<CAPS.length;j++){const c=CAPS[j];if(tb>=c.a&&tb<c.z){ci=j;oa=Math.min(1,(tb-c.a)/(c.i||1),(c.z-tb)/(c.o||1))}}
if(ci!=capI){capI=ci;ox.clearRect(0,0,oc.width,oc.height);if(ci>=0)CAPS[ci].d(ox,oc.width,oc.height);gl.deleteTexture(tO);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,1);tO=tex(0,0,0,1,oc);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,0)}
const o=s.pr;pass(o,A.f,A.w,A.h);bind(2,tX);bind(3,tN);bind(4,tO);bind(5,tP,gl.TEXTURE_3D);
gl.uniform2f(U(o,'R'),A.w,A.h);gl.uniform1f(U(o,'T'),sec);gl.uniform1f(U(o,'B'),tb);gl.uniform1f(U(o,'LB'),lb);gl.uniform1f(U(o,'L'),lb/len);gl.uniform1f(U(o,'OA'),oa);
gl.uniform4f(U(o,'K'),k[0],k[1],k[2],k[3]);gl.uniform1i(U(o,'X'),2);gl.uniform1i(U(o,'N'),3);gl.uniform1i(U(o,'O'),4);gl.uniform1i(U(o,'P'),5);
gl.drawArrays(gl.TRIANGLES,0,3);
let src=A;for(let j=0;j<5;j++){const d=dn[j];pass(fx.down,d.f,d.w,d.h);bind(0,src.t);gl.uniform1i(U(fx.down,'S'),0);gl.uniform2f(U(fx.down,'I'),1/d.w,1/d.h);gl.uniform2f(U(fx.down,'P'),1/src.w,1/src.h);gl.uniform1f(U(fx.down,'TH'),j?0:(s.th||1));gl.drawArrays(gl.TRIANGLES,0,3);src=d}
for(let j=3;j>=0;j--){const d=up[j];pass(fx.up,d.f,d.w,d.h);bind(0,src.t);bind(1,dn[j].t);gl.uniform1i(U(fx.up,'S'),0);gl.uniform1i(U(fx.up,'D'),1);gl.uniform2f(U(fx.up,'I'),1/d.w,1/d.h);gl.uniform2f(U(fx.up,'P'),1/src.w,1/src.h);gl.drawArrays(gl.TRIANGLES,0,3);src=d}
pass(fx.fin,null,cv.width,cv.height);bind(0,A.t);bind(1,up[0].t);gl.uniform1i(U(fx.fin,'S'),0);gl.uniform1i(U(fx.fin,'D'),1);
gl.uniform4f(U(fx.fin,'V'),V[0],V[1],V[2],V[3]);gl.uniform4f(U(fx.fin,'Q'),q[0],q[1],q[2],q[3]);gl.uniform1f(U(fx.fin,'T'),sec);gl.uniform1f(U(fx.fin,'BL'),s.bl==null?.5:s.bl);gl.uniform1f(U(fx.fin,'MM'),mm);
gl.drawArrays(gl.TRIANGLES,0,3);
if(i!=lastScene){if(lastScene>=0&&!FIX&&scale<1&&slow*8<cnt){scale=Math.min(1,scale*1.12)}lastScene=i;slow=cnt=0}
return s.id}
let lt=0,sl=0,sn=0;
function loop(now){if(now!==1)requestAnimationFrame(loop);compileStep();size();
if(STILL>=0){if(draw(STILL,STILL*SPB)&&st.first<0)st.first=0;return}
if(!started){const ok=fx.fin&&fx.fin.ok>0&&fx.up&&fx.up.ok>0&&fx.down.ok>0&&SCS[first].pr&&SCS[first].pr.ok&&(blocks[Math.floor(B0*SPB/BLK)]||!ac);
if(ok&&$('go').disabled){$('go').disabled=false;$('go').textContent='START';$('msg').textContent='F: fullscreen';$('go').focus()}return}
const p=pos();if(p>=END){stop();return}
const id=draw(Math.max(0,p)/SPB,Math.max(0,p));st.t=p;st.ac=ac?ac.currentTime-t0:p;st.frames++;mm*=.9;
const n=performance.now();if(id){if(st.first<0)st.first=Math.round(n-clickT);
if(st.music<0&&ac&&ac.state=='running'&&blocks[Math.floor(B0*SPB/BLK)]&&blocks[Math.floor(B0*SPB/BLK)].n&&ac.currentTime>=t0+B0*SPB)st.music=Math.round(n-clickT);
const dt=n-lt;if(lt&&dt<250){(st.sd[id]=st.sd[id]||[]).push(dt);cnt++;if(dt>21)slow++;sn++;if(dt>21)sl++;
if(sn>=30){if(sl>=20&&!FIX&&scale>.35){scale=Math.max(.35,scale*.85)}sl=sn=0}}}
lt=n}
$('go').onclick=start;if(STILL>=0)$('sp').style.display='none';
addEventListener('keydown',e=>{if(e.key=='f'||e.key=='F'){D.fullscreenElement?D.exitFullscreen():D.documentElement.requestFullscreen&&D.documentElement.requestFullscreen()}});
addEventListener('mousemove',e=>{if(started&&(Math.abs(e.movementX)+Math.abs(e.movementY)>2))mm=Math.min(1,mm+.25)});
requestAnimationFrame(loop);
})();</script></body></html>