0x7f5a0a68…e37csent to0x5d8efdc2…99a2·#19,614,889·view on Etherscan
class Random{constructor(){this.useA=!1;let t=function(t){let e=parseInt(t.substr(0,8),16),r=parseInt(t.substr(8,8),16),n=parseInt(t.substr(16,8),16),o=parseInt(t.substr(24,8),16);return function(){e|=0,r|=0,n|=0,o|=0;let t=(e+r|0)+o|0;return o=o+1|0,e=r^r>>>9,r=n+(n<<3)|0,n=n<<21|n>>>11,n=n+t|0,(t>>>0)/4294967296}};this.prngA=new t(tokenData.hash.substr(2,32)),this.prngB=new t(tokenData.hash.substr(34,32));for(let t=0;t<1e6;t+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}}function b(t){return R()>t}function fr(t){return flr(R()*t)}function afr(t){return t[fr(t.length)]}function abs(t){return Math.abs(t)}function flr(t){return Math.floor(t)}function cae(t,e){canvas.addEventListener(t,e)}const urlParams=new URLSearchParams(window.location.search);let m0="true"==urlParams.get("live"),rnd=new Random,R=function(){return rnd.random_dec()},tt=function(){return R()>.5};var D_S=1e3;let cDiv=document.createElement("div");cDiv.style.width=window.innerWidth+"px",cDiv.style.height=window.innerHeight+"px";var DIM=Math.max(window.innerWidth,window.innerHeight);document.body.style.backgroundColor="#000000";var bVL=.1,M=DIM/D_S,wTick=0,frame=fr(5e3)+500,tick=frame;let tS=0,tS2=0,atk=0,arsdc=0,sfo=!1,palettes=[[[249,222,89],[232,166,40],[249,131,101],[195,49,36],[161,223,251]],[[255,109,105],[254,204,80],[11,231,251],[1,11,139],[30,5,33]],[[233,255,136],[254,10,183],[229,1,133],[17,16,16],[208,204,209]],[[179,231,220],[166,180,1],[239,246,123],[213,1,2],[108,1,2]],[[0,123,0],[36,224,184],[255,204,81],[255,139,118],[255,48,49]],[[169,67,0],[255,176,0],[255,223,0],[91,155,55],[21,61,2]],[[161,5,50],[255,111,169],[255,208,204],[0,183,204],[0,95,129]],[[95,165,90],[1,180,188],[246,213,31],[250,137,37],[250,84,87]],[[99,26,17],[187,96,47],[239,216,131],[203,130,20],[68,64,101]],[[48,4,61],[142,31,81],[229,64,89],[222,131,127],[253,179,106]],[[255,251,196],[182,190,246],[53,30,191],[16,1,93],[10,0,48]],[[140,7,20],[252,64,124],[27,78,136],[5,8,30],[250,240,228]],[[0,0,63],[1,0,142],[144,1,245],[254,0,234],[255,1,120]],[[8,44,68],[114,234,245],[254,230,226],[255,169,76],[254,44,137]],[[1,99,141],[171,206,204],[255,242,205],[255,0,76],[97,13,75]],[[34,125,172],[68,57,136],[159,0,82],[255,63,32],[255,190,0]],[[129,237,247],[0,164,192],[2,116,143],[247,1,16],[110,5,22]],[[255,254,1],[255,134,6],[232,59,54],[96,5,56],[70,10,64]],[[51,51,51],[204,204,204],[0,0,0],[48,48,48],[221,221,221]],[[215,0,95],[215,215,0],[38,38,38],[175,0,95],[0,255,255]],[[85,255,255],[255,85,255],[255,255,85],[170,0,0],[0,0,170]],[[170,0,170],[170,0,0],[255,255,85],[170,85,0],[0,170,0]],[[170,0,0],[170,0,0],[255,85,85],[255,255,85],[85,85,255]],[[255,85,85],[85,255,85],[255,255,85],[85,85,85],[85,255,255]],[[255,85,255],[85,255,255],[0,0,0],[255,0,255],[255,255,255]],[[0,170,0],[0,0,0],[170,0,0],[170,85,0],[0,85,0]],[[15,139,141],[168,32,26],[236,154,41],[218,210,216],[20,54,66]],[[116,2,17],[208,169,160],[143,58,96],[195,90,102],[36,0,4]],[[175,212,204],[133,186,106],[26,119,73],[11,46,47],[1,18,28]],[[0,18,68],[0,80,134],[49,143,181],[176,202,199],[247,214,191]],[[140,66,25],[243,149,88],[238,200,176],[241,236,231],[247,217,109]],[[191,135,9],[234,197,125],[185,187,222],[128,116,144],[82,56,87]],[[44,48,57],[107,54,56],[254,108,58],[254,219,209],[158,172,183]],[[91,91,91],[195,214,211],[217,201,167],[248,233,214],[244,163,142]]],pId=flr(R()*palettes.length),plt=palettes[pId];plt.push([0,0,0]);let fv=500,cPr=R()*fv+fv,clrs=["c0","c1","c2","c3","c4","c5"],clrsI=["c0","c1","c2","c3","c4","c5"],pA=[],gls=["2","4","6","8","10","12","16"],cOs="",cOsI="",rCA=[.1,.2,.25,.5],scA=[100,200,250],rC0=afr(rCA),rC1=afr(rCA);rC0=.4*R()+.05,rC1=.4*R()+.05;let sCH=afr(scA),sCV=afr(scA);sCH=fr(500)+50,sCV=fr(250)+50;let nrm=b(.1),sCH1=afr(scA),sCV1=afr(scA);sCH1=fr(100)+50,sCV1=fr(250)+50;let dT=fr(3),dT1=fr(3);1==dT1&&(sCV=fr(200)+50);let tch=new Float32Array(2);tch[0]=DIM/2,tch[1]=DIM/2;let startTick=0,tchPrg=0,viewState=0;m0&&(viewState=1);let maxTick=0,prgDur=150,winding=!1,unwinding=!1,x0=fr(2e3)-1e3,y0=fr(2e3)-1e3,x1=fr(2e3)-1e3,y1=fr(2e3)-1e3,x2=fr(2e3)-1e3,y2=fr(2e3)-1e3,x3=fr(2e3)-1e3,y3=fr(2e3)-1e3,v0=R(),b0=tt(),b1=tt(),b2=tt(),b3=tt(),b4=tt(),b5=tt(),b6=tt();const keys={Space:"sp"};let gp,k={sp:!1},clrsS=fr(15)+15;clrsS=10;for(let t=0;t<clrsS;t++)clrsI.push(afr(clrs));for(let t=0;t<clrsI.length;t++)pA.push(cPr),cPr+=fv;let sT=R();sT<.2?clrsI.sort():sT<.5?clrsI.reverse():sT<.8&&(clrsI=shuffle(clrsI));let pct,clrsC=clrsI.length,loopCap=200*(50+clrsC)*10;for(let t=0;t<clrsC;t++)pct=Math.floor(pA[t]/cPr*1e3)/1e3,cOs+=(t>0?"else if ":"if ")+"(idx < loopPoint * "+pct+") {\n",cOs+=" gloss = "+afr(gls)+".;\n",cOs+=" cIn = "+t+".;\n",cOs+="}\n",cOsI+=(t>0?"else if ":"if ")+"(cIn == "+t+".) {\n",cOsI+=" c = "+clrsI[t]+";\n",cOsI+="}\n";let oCB=R()>.9,oCBH=R(),c="",cR="";for(let t=0;t<6;t++)c+="vec3 c"+t+" = rgb2hsv(vec3("+plt[t][0]+"./255.,"+plt[t][1]+"./255.,"+plt[t][2]+"./255.));\n",cR+="vec3 c"+t+" = vec3("+plt[t][0]+"./255.,"+plt[t][1]+"./255.,"+plt[t][2]+"./255.);\n";const canvas=document.getElementsByTagName("canvas")[0];canvas.width=DIM,canvas.height=DIM,cDiv.style.position="absolute",cDiv.style.overflow="hidden",canvas.parentElement.appendChild(cDiv),canvas.style.left="50%",canvas.style.top="50%",canvas.style.position="relative",canvas.style.transform="translate(-50%,-50%)",cDiv.appendChild(canvas);const yCul=flr(abs(canvas.offsetTop-DIM/2)),xCul=flr(abs(canvas.offsetLeft-DIM/2));let cft,cD=!0,hl=/\bHeadlessChrome/.test(navigator.userAgent),lft=0;const gl=canvas.getContext("webgl"),positionsData=new Float32Array([1,1,-1,1,1,-1,-1,-1]),indices=new Uint16Array([0,1,2,1,2,3]),textureData=new Float32Array([1,1,0,1,1,0,0,0]);var texture=gl.createTexture();const targetTexture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,targetTexture),texBind();const targetTexture2=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,targetTexture2),texBind();const bT=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,bT),texBind();const cT=gl.createTexture();function texBind(){gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,DIM,DIM,0,gl.RGBA,gl.UNSIGNED_BYTE,null),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),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)}gl.bindTexture(gl.TEXTURE_2D,cT),texBind();const fb=gl.createFramebuffer();gl.bindFramebuffer(gl.FRAMEBUFFER,fb);const indexBuffer=gl.createBuffer();var attachmentPoint=gl.COLOR_ATTACHMENT0,level=0;gl.framebufferTexture2D(gl.FRAMEBUFFER,attachmentPoint,gl.TEXTURE_2D,targetTexture,level);var aDt={},bDt={},bDta={},cData={},fDt={};function compileShader(t,e){var r=gl.createShader(e);if(gl.shaderSource(r,t),gl.compileShader(r),!gl.getShaderParameter(r,gl.COMPILE_STATUS))throw"Shader compile failed with: "+gl.getShaderInfoLog(r);return r}function glAB(t,e){gl.activeTexture(t),gl.bindTexture(gl.TEXTURE_2D,e)}function glD(){gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer),gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW),gl.drawElements(gl.TRIANGLES,indices.length,gl.UNSIGNED_SHORT,0)}function drawArt(){gl.useProgram(aPg),gl.bindFramebuffer(gl.FRAMEBUFFER,fb),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,targetTexture,level),gl.bindBuffer(gl.ARRAY_BUFFER,buffer),gl.vertexAttribPointer(aDt.pAt,2,gl.FLOAT,!1,8,0),gl.enableVertexAttribArray(aDt.pAt),gl.uniform1f(aDt.tickSet,tick),gl.uniform2fv(aDt.tch,tch),gl.uniform1f(aDt.frame,frame),gl.uniform1f(aDt.tchPrg,tchPrg),gl.uniform1f(aDt.viewState,viewState),glAB(gl.TEXTURE0,texture),glD()}function blurArt(t,e){gl.useProgram(blPg),gl.bindFramebuffer(gl.FRAMEBUFFER,fb),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,e,level);var r=gl.FLOAT;gl.bindBuffer(gl.ARRAY_BUFFER,buffer),gl.vertexAttribPointer(bDt.pAt,2,r,!1,0,0),gl.enableVertexAttribArray(bDt.pAt),gl.bindBuffer(gl.ARRAY_BUFFER,texcoordBuffer),gl.vertexAttribPointer(bDt.tAt,2,r,!1,0,0),gl.enableVertexAttribArray(bDt.tAt),glAB(gl.TEXTURE0,t),glD()}function blendArt(t,e){gl.useProgram(bldPg),gl.bindFramebuffer(gl.FRAMEBUFFER,fb),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,e,level);var r=gl.FLOAT;gl.bindBuffer(gl.ARRAY_BUFFER,buffer),gl.vertexAttribPointer(bDta.pAt,2,r,!1,0,0),gl.enableVertexAttribArray(bDta.pAt),glAB(gl.TEXTURE0,t),gl.uniform1i(bDta.freshTexture,0),glAB(gl.TEXTURE1,cT),gl.uniform1i(bDta.cT,1),gl.bindBuffer(gl.ARRAY_BUFFER,texcoordBuffer),gl.vertexAttribPointer(bDta.tAt,2,r,!1,0,0),gl.enableVertexAttribArray(bDta.tAt),glD()}function compositeArt(t){gl.useProgram(compositeProgram),gl.bindFramebuffer(gl.FRAMEBUFFER,fb),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,cT,level);var e=gl.FLOAT;gl.bindBuffer(gl.ARRAY_BUFFER,buffer),gl.vertexAttribPointer(bDta.pAt,2,e,!1,0,0),gl.enableVertexAttribArray(bDta.pAt),gl.bindBuffer(gl.ARRAY_BUFFER,texcoordBuffer),gl.vertexAttribPointer(bDta.tAt,2,e,!1,0,0),gl.enableVertexAttribArray(bDta.tAt),glAB(gl.TEXTURE0,t),glD()}function renderFinal(t){gl.useProgram(fPg),gl.bindFramebuffer(gl.FRAMEBUFFER,fb),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,targetTexture,level);var e=gl.FLOAT;gl.bindBuffer(gl.ARRAY_BUFFER,buffer),gl.vertexAttribPointer(bDta.pAt,2,e,!1,0,0),gl.enableVertexAttribArray(bDta.pAt),gl.uniform1f(fDt.tickSet,tick),gl.bindBuffer(gl.ARRAY_BUFFER,texcoordBuffer),gl.vertexAttribPointer(bDta.tAt,2,e,!1,0,0),gl.enableVertexAttribArray(bDta.tAt),glAB(gl.TEXTURE0,t),glD()}function renderCircle(t){gl.useProgram(cPg),gl.bindFramebuffer(gl.FRAMEBUFFER,null);var e=gl.FLOAT;gl.bindBuffer(gl.ARRAY_BUFFER,buffer),gl.vertexAttribPointer(cData.pAt,2,e,!1,0,0),gl.enableVertexAttribArray(cData.pAt),gl.uniform1f(cData.tickSet,tick),gl.uniform2fv(cData.tch,tch),gl.uniform1f(cData.tchPrg,tchPrg),gl.bindBuffer(gl.ARRAY_BUFFER,texcoordBuffer),gl.vertexAttribPointer(cData.tAt,2,e,!1,0,0),gl.enableVertexAttribArray(cData.tAt),glAB(gl.TEXTURE0,t),glD()}let blurFSS="\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D u_texture;\nuniform float M;\n\nvoid main() {\n vec2 resultCoords = vec2(vTextureCoord.x, vTextureCoord.y);\n\n float a = texture2D(u_texture, resultCoords).a;\n vec3 tColor = texture2D(u_texture, resultCoords).rgb;\n\n for (int i = 0;i<5;i++) {\n float bV = float(i) * .075;\n vec2 d2 = vec2(.1 * float(i), .1 * float(i));\n vec2 d3 = vec2(.1 * float(i),-.1 * float(i));\n\n tColor += texture2D(u_texture, resultCoords + d2).rgb * bV;\n tColor += texture2D(u_texture, resultCoords - d2).rgb * bV;\n tColor += texture2D(u_texture, resultCoords + d3).rgb * bV;\n tColor += texture2D(u_texture, resultCoords - d3).rgb * bV;\n\n }\n gl_FragColor = vec4(tColor, a);\n}\n",blurFragmentShader=compileShader(blurFSS,gl.FRAGMENT_SHADER),blendFSS="\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D freshTexture;\nuniform sampler2D compTexture;\nvoid main() {\n vec3 blend0 = texture2D(freshTexture, vTextureCoord).rgb;\n vec3 blend1 = texture2D(compTexture, vTextureCoord).rgb;\n vec3 compBlend = mix(blend0,blend1,.95);\n gl_FragColor = vec4(compBlend ,1.);\n}\n",blendFragmentShader=compileShader(blendFSS,gl.FRAGMENT_SHADER),finalFSS=`\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D u_texture;\nuniform float tick;\n\nvoid main() {\n float fTick = tick;\n\n float M = float(${M});\n float DIM = float(${DIM});\n vec2 resultCoords = vec2(gl_FragCoord.x, gl_FragCoord.y)/M;\n vec2 resultCoords0 = vec2(gl_FragCoord.x, gl_FragCoord.y)/M;\n vec2 st = vec2(gl_FragCoord)/M;\n resultCoords /= 1000.;\n resultCoords0 /= 1000.;\n\n\n if (resultCoords.x < mod(resultCoords.x,.5) && ${b2}) {\n resultCoords.x = 1. - mod(resultCoords.x,.5); \n }\n\n gl_FragColor = texture2D(u_texture, vTextureCoord);\n\n vec4 color2 = texture2D(u_texture, vec2(vTextureCoord.x,vTextureCoord.y));\n gl_FragColor *= mod(resultCoords.x + resultCoords.y,10.2);\n\n if (${dT} == 0) {\n gl_FragColor /= ((mod(resultCoords.x - resultCoords.y,float(${rC0})) - mod(resultCoords.y - resultCoords.x,float(${rC0})))) + .08;\n gl_FragColor *= 2. * float(${rC0}); \n }\n else if(${dT} == 1) {\n gl_FragColor /= ((mod(-resultCoords.x - resultCoords.y, float(${rC0})) - mod(resultCoords.y + resultCoords.x, float(${rC0})))) + .08;\n gl_FragColor *= 5. * float(${rC0}); \n }\n float shadowDepth = 3.;\n float h = ((mod(-resultCoords.y,(${sCH}./1000.)) - mod(resultCoords.y,(${sCH}./1000.))) * shadowDepth);\n float v = ((mod(-resultCoords.x,(${sCV}./1000.)) - mod(resultCoords.x,(${sCV}./1000.))) * shadowDepth);\n\n float h1 = ((mod(-resultCoords.y,(${sCH1}./1000.)) - mod(resultCoords.y,(${sCH1}./1000.))) * shadowDepth);\n float v1 = ((mod(-resultCoords.x,(${sCV1}./1000.)) - mod(resultCoords.x,(${sCV1}./1000.))) * shadowDepth);\n\nfloat dk = 2.;\n\n if (${dT1} == 0) {\n gl_FragColor /= (h1 + .0001) * 1.;\n if (${dT} < 2) {\n gl_FragColor *= (${sCV}./1000.) * 2.;\n }\n else {\n gl_FragColor *= (${sCV}./1000.) * 2.;\n }\n }\n else if (${dT1} == 1) {\n gl_FragColor /= (v + .001);\n if (${dT} < 2) {\n gl_FragColor *= (${sCV}./1000.) * 1.;\n }\n else {\n gl_FragColor *= h1 / (${sCV}./1000.) * 1.;\n }\n}\nelse if (${dT1} == 2) { \n gl_FragColor /= (h) + .0001;\n if (${dT} == 2) {\n gl_FragColor /= (v + .0001);\n gl_FragColor *= (${sCH}./1000.) * 5.;\n }\n else {\n gl_FragColor *= (${sCH}./1000.) * 1.;\n }\n}\nif (${dT} == 2 && ${dT1} < 2) {\n if (${dT1} == 0) {\n float cd = distance(resultCoords,vec2(.5,.5));\n if (cd > .1) {\n gl_FragColor /= (mod(cd,((${sCH1}./1500.))) * 10.) + .01;\n }\n }\n else {\n }\n gl_FragColor *= 2.;\n}\n\n gl_FragColor *= 2.5;\n\n\n gl_FragColor *= fract(resultCoords.x * .001) + .001;\n gl_FragColor = (gl_FragColor + mix(gl_FragColor,color2,.5))/.8;\n \n gl_FragColor = (gl_FragColor + mix(gl_FragColor,color2,.5))/.6;\n gl_FragColor *= 20.;\n gl_FragColor /= 40.5;\n\n}\n`,fFS=compileShader(finalFSS,gl.FRAGMENT_SHADER),baseVertexString="\nattribute vec2 position;\nattribute vec2 texcoord;\nvarying highp vec2 vTextureCoord;\nvoid main() {\n gl_Position = vec4(position, 0., 1.);\n vTextureCoord = texcoord;\n}\n",baseVertShader=compileShader(baseVertexString,gl.VERTEX_SHADER),cFSS="\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D u_texture;\nvoid main() {\n vec2 resultCoords = vec2(vTextureCoord.x, vTextureCoord.y);\n gl_FragColor = texture2D(u_texture, resultCoords);\n}\n",coFS=compileShader(cFSS,gl.FRAGMENT_SHADER),cFS=`\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform sampler2D u_texture;\nuniform float tick;\nuniform vec2 tch[1]; \nuniform float tchPrg;\n\nfloat PI = 3.14159;\n\nvoid main() {\n ${cR}\n float fTick = tick;\n\n float M = float(${M});\n float DIM = float(${DIM});\n vec2 resultCoords = vec2(gl_FragCoord.x, gl_FragCoord.y)/M;\n vec2 resultCoords0 = vec2(gl_FragCoord.x, gl_FragCoord.y)/M;\n vec2 st = vec2(gl_FragCoord);\n resultCoords /= 1000.;\n resultCoords0 /= 1000.;\n\n float tp;\n float dur = 2000.;\n\n gl_FragColor = texture2D(u_texture, vTextureCoord);\n\n if (tchPrg > 0.) {\n vec2 toCenter = st - tch[0];\n\n float angle = PI / 2. - atan(toCenter.y, toCenter.x);\n if (angle < 0.0) {\n angle += 2. * PI;\n }\n if (angle < 0.0) {\n angle += 2.0 * PI;\n }\n float currentAngle = 2.0 * PI * tchPrg;\n float dist = distance(tch[0], st);\n float innerRadius = DIM * .04;\n float outerRadius = DIM * .06;\n float edgeSoftness = 0.001 * DIM;\n float alpha = 0.0;\n if (angle < currentAngle) {\n float innerSoft = smoothstep(innerRadius - edgeSoftness, innerRadius + edgeSoftness, dist);\n float outerSoft = smoothstep(outerRadius + edgeSoftness, outerRadius - edgeSoftness, dist);\n alpha = innerSoft * outerSoft;\n }\n if (alpha > 0.0) {\n vec3 colorBoost = texture2D(u_texture, vTextureCoord).rgb * 5.;\n gl_FragColor.rgb = mix(gl_FragColor.rgb, colorBoost, alpha);\n gl_FragColor.a = 1.0;\n gl_FragColor.rgb = max(gl_FragColor.rgb, .1) * .9;\n } else {\n gl_FragColor = texture2D(u_texture, vTextureCoord);\n }\n\n\n }\n}\n`,circleFragmentShader=compileShader(cFS,gl.FRAGMENT_SHADER),artFragmentString=`\nprecision highp float;\nvarying highp vec2 vTextureCoord;\nuniform float tick;\nuniform vec2 tch[1]; \nuniform float frame;\nuniform float tchPrg;\nuniform float viewState;\n\nfloat PI = 3.14159;\n\nvec3 hsv2rgb(vec3 c)\n{\n vec4 K = vec4(1, 2. / 3., 1. / 3., 3.);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6. - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0., 1.), c.y);\n}\nvec3 rgb2hsv(vec3 c)\n{\n vec4 K = vec4(0., -1. / 3., 2. / 3., -1.);\n vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\n vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\n\n float d = q.x - min(q.w, q.y);\n float e = 1.e-10;\n return vec3(abs(q.z + (q.w - q.y) / (6. * d + e)), d / (q.x + e), q.x);\n}\n\nvoid main()\n{\n ${c}\n float fTick = tick;\n if (viewState == 0.) {\n fTick = frame;\n }\n\n\n\n\n float w = float(${DIM});\n float M = float(${M});\n vec2 st0 = gl_FragCoord.xy / M;\n vec2 st = gl_FragCoord.xy / M;\n vec2 resultCoords = vec2(vTextureCoord.x, vTextureCoord.y);\n if (distance(tch[0]/M,st0) < (tchPrg * 1000.)) {\n fTick = tick;\n }\n\n\n vec2 cn = vec2(float(${x0}),float(${y0}));\n vec2 cn2 = vec2(float(${x1}),float(${y1}));\n vec2 cn3 = vec2(float(${x2}),float(${y2}));\n vec2 cn4 = vec2(float(${x3}),float(${y3}));\n\n \n vec2 cnC;\n vec2 cnD;\n float p;\n float rng;\n float cM;\n float cnP;\n \n float d = (distance(cn,st));\n float d2 = (distance(cn2,st));\n float d3 = (distance(cn3,st));\n float d4 = (distance(cn4,st));\n float d0 = (distance(cn,st0));\n \n float tp;\n float dur = 2000.;\n float phase = mod((fTick),dur);\n if (phase < (dur/2.)) {\n tp = phase / (dur/2.);\n }\n else {\n tp = (dur - phase) / (dur/2.);\n }\n\n tp = tp < 0.5 ? 2. * tp * tp : 1. - pow(-2. * tp + 2., 2.) / 2.;\n\n float a = ((st.x - st.y) - d) * 200.;\n float b = (abs(st.y - st.x) + d);\n a = (st.x + st.y) * 20.;\n b = (1000. - st.x) * 20.;\n bool evenYRange;\n bool evenXRange;\n float lC = 0.;\n float lCA = 50.;\n if (${dT1} == 0) {\n float sI = floor(((${sCH1}./2.) + st0.y)/${sCH1}.);\n evenYRange = mod(sI, 2.) == 0.;\n lC += lCA * sI;\n }\n else if (${dT1} == 1) {\n float sI = floor(((${sCV}./2.) + st0.x)/${sCV}.);\n evenXRange = mod(sI, 2.) == 0.;\n lC += lCA * sI;\n }\n else if (${dT1} == 2) {\n float sI = floor(((${sCH}./2.) + st0.y)/${sCH}.);\n evenYRange = mod(sI, 2.) == 0.;\n lC += lCA * sI;\n if (${dT} == 2) {\n sI = floor(((${sCV}./2.) + st0.x)/${sCV}.);\n evenXRange = mod(sI, 2.) == 0.;\n lC += lCA * sI;\n }\n }\n\n if (!evenXRange && !evenYRange && ${dT} < 2) {\n float xOffset = float(${rC0}) / 2.;\n float sI = floor((resultCoords.x + xOffset - resultCoords.y) / float(${rC0}));\n evenXRange = mod(sI, 2.) == 0.;\n evenYRange = mod(sI, 2.) == 0.;\n lC += lCA * sI;\n }\n if (${dT} == 2 && ${dT1} < 2) {\n if (${dT1} == 0) {\n float cd = distance(resultCoords,vec2(.5,.5));\n if (cd >= float(${sCH1})/1000.) {\n float ringWidth = float(${sCH1}) / 1500.;\n float ringIndex = floor(cd / ringWidth);\n evenXRange = mod(ringIndex, 2.) == 0.;\n evenYRange = evenXRange;\n lC += lCA * ringIndex;\n \n\n }\n }\n }\n float idx = d * 10.;\n if (evenXRange) {\n st.y += 100.;\n st.x -= 100.;\n idx = (st.x-(st.y * d)) * .05;\n } \n if (evenYRange) {\n st.x += 100.;\n st.y -= 100.;\n idx = (st.x+(st.y * d)) * .05;\n }\n float phase_a = mod(fTick, 2000.);\n float transitionDuration_b = 1000.;\n float transitionStart_c = floor(phase_a / 2000.) * 2000.;\n float factor_d = clamp((phase_a - transitionStart_c) / transitionDuration_b, 0., 1.);\n float idx1_e = fTick + (st.x + st.y) * 20.;\n float idx2_f = fTick + (st.x - st.y) * 20.;\n if (mod(floor(fTick / 2000.), 2.) == 0.) {\n idx *= mix(idx1_e, idx2_f, factor_d);\n } else {\n idx *= mix(idx2_f, idx1_e, factor_d);\n }\n\n idx /= 6000.;\n idx += (fTick * 100.);\n idx = floor(idx);\n\n vec3 c;\n float cIn;\n float idxO = 200.;\n\n float loopCap = 100. + ${clrsC}.;\n float loopPoint = loopCap * 5000.;\n idx = mod(abs(idx),loopPoint);\n\n float gloss = 0.;\n ${cOs}\n\n if (evenYRange || evenXRange) {\n cIn += lC * 10. + 10.;\n cIn = mod(cIn,${clrsC}.);\n }\n\n ${cOsI}\n gl_FragColor = vec4(hsv2rgb(vec3(c.x + (mod(d - (st.x/10.),100.)/2000.),c.y,c.z)),1.);\n gl_FragColor = vec4(hsv2rgb(vec3(c.x,c.y,c.z)),1.);\n gl_FragColor *= .8;\n\n}\n`;var artFragmentShader=compileShader(artFragmentString,gl.FRAGMENT_SHADER);function cpr(t){let e=gl.createProgram();return gl.attachShader(e,baseVertShader),gl.attachShader(e,t),gl.linkProgram(e),e}function gPP(t,e){if(!gl.getProgramParameter(t,gl.LINK_STATUS))throw new Error("Failed to link "+e+" program")}const aPg=cpr(artFragmentShader),blPg=cpr(blurFragmentShader),bldPg=cpr(blendFragmentShader),cPg=cpr(circleFragmentShader),compositeProgram=cpr(coFS),fPg=cpr(fFS);gPP(aPg,"art"),gPP(blPg,"blur"),gPP(bldPg,"blend"),gPP(compositeProgram,"composite"),gPP(fPg,"final");const buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buffer),gl.bufferData(gl.ARRAY_BUFFER,positionsData,gl.STATIC_DRAW);var texcoordBuffer=gl.createBuffer();function draw(){cft=Date.now(),cD&&(hl?(drawArt(),blendArt(targetTexture,bT),compositeArt(bT),renderFinal(cT),renderCircle(targetTexture),tick++):cft-lft<100&&(cD&&(gpC(),tCa=(cft-lft)/16,!m0&&winding?(tchPrg=easing(wTick/prgDur),tchPrg>=.999?(frame=tick,wTick=0,tchPrg=0,viewState=1-viewState,winding=!1):wTick+=tCa):!m0&&unwinding&&(tchPrg=easing(wTick/prgDur),tchPrg<=.001?(tchPrg=0,unwinding=!1):wTick-=tCa),drawArt(),blendArt(targetTexture,bT),compositeArt(bT),renderFinal(cT),renderCircle(targetTexture)),tick+=tCa)),lft=cft,requestAnimationFrame(draw)}function clamp(t,e,r){return t>r?r:t<e?e:t}function shuffle(t){let e,r=t.length;for(;0!=r;)e=flr(R()*r),r--,[t[r],t[e]]=[t[e],t[r]];return t}function average(t,e,r){if(r<=e)return 0;let n=0;for(let o=e;o<r;o++)n+=t[o];return n/(r-e)}function cae(t,e){canvas.addEventListener(t,e)}function d(t){t.preventDefault(),tch[0]=(t.touches?t.touches[0].clientX:t.clientX)+xCul,tch[1]=Math.abs((t.touches?t.touches[0].clientY:t.clientY)+yCul-DIM),winding=!0}function u(t){t.preventDefault(),winding&&(unwinding=!0,winding=!1)}function easing(t){return-(Math.cos(Math.PI*t)-1)/2}function gpC(){if(!m0&&gp)for(let t=0;t<gp.buttons.length;t++)gp.buttons[t].pressed&&!gp.buttonStates[t]?(gp.buttonStates[t]=!0,winding=!0):!gp.buttons[t].pressed&&gp.buttonStates[t]&&(unwinding=!0,winding=!1,gp.buttonStates[t]=!1)}gl.bindBuffer(gl.ARRAY_BUFFER,texcoordBuffer),gl.bufferData(gl.ARRAY_BUFFER,textureData,gl.STATIC_DRAW),aDt.pAt=gl.getAttribLocation(aPg,"position"),aDt.tickSet=gl.getUniformLocation(aPg,"tick"),aDt.frame=gl.getUniformLocation(aPg,"frame"),aDt.tchPrg=gl.getUniformLocation(aPg,"tchPrg"),aDt.tch=gl.getUniformLocation(aPg,"tch"),aDt.viewState=gl.getUniformLocation(aPg,"viewState"),bDt.pAt=gl.getAttribLocation(blPg,"position"),bDt.tAt=gl.getAttribLocation(blPg,"texcoord"),bDt.d=gl.getUniformLocation(blPg,"d"),bDta.pAt=gl.getAttribLocation(bldPg,"position"),bDta.tAt=gl.getAttribLocation(bldPg,"texcoord"),bDta.cT=gl.getUniformLocation(bldPg,"compTexture"),bDta.freshTexture=gl.getUniformLocation(bldPg,"freshTexture"),cData.pAt=gl.getAttribLocation(cPg,"position"),cData.tAt=gl.getAttribLocation(cPg,"texcoord"),cData.finalTexture=gl.getUniformLocation(cPg,"finalTexture"),cData.tickSet=gl.getUniformLocation(cPg,"tick"),cData.tch=gl.getUniformLocation(cPg,"tch"),cData.tchPrg=gl.getUniformLocation(cPg,"tchPrg"),fDt.pAt=gl.getAttribLocation(fPg,"position"),fDt.tAt=gl.getAttribLocation(fPg,"texcoord"),fDt.pAt=gl.getAttribLocation(fPg,"position"),fDt.tickSet=gl.getUniformLocation(fPg,"tick"),fDt.tch=gl.getUniformLocation(fPg,"tch"),fDt.tchPrg=gl.getUniformLocation(fPg,"tchPrg"),cae("touchstart",d),cae("mousedown",d),cae("touchend",u),cae("mouseup",u),document.addEventListener("keyup",(t=>{k[keys[t.code]]=!1,unwinding=!0,winding=!1})),document.addEventListener("keydown",(t=>{"Space"!==t.code||k.sp||(k.sp=!0,winding=!0);let e=!1;t.code in keys&&!k[keys[t.code]]&&(e=!0,k[keys[t.code]]=!0)})),window.addEventListener("gamepadconnected",(t=>{gp=t.gamepad,gp.buttonStates=[],gp.an=!1;for(let t=0;t<gp.buttons.length;t++)gp.buttonStates.push(!1)})),window.addEventListener("gamepaddisconnected",(t=>{gp==t.gamepad&&(gp=null)})),requestAnimationFrame(draw);