0x0a1b…3676

All memos sent from and to 0x0a1b…3676.

function tokyoParams() { displayRed = true; displayGreen = true; displayBlue = true; bColor = 246; lengthScalar = 0.8; cityNum = 1; } function berlinParams() { displayRed = false; displayGreen = true; displayBlue = true; bColor = 15; lengthScalar = 0.5; cityNum = 2; } function londonParams() { displayRed = true; displayGreen = false; displayBlue = true; bColor = 246; lengthScalar = 0.5; cityNum = 3; } function nycParams() { displayRed = false; displayGreen = false; displayBlue = true; bColor = 246; lengthScalar = 0.7; cityNum = 4; } function cdmxParams() { displayRed = false; displayGreen = true; displayBlue = false; bColor = 51; lengthScalar = 0.7; cityNum = 5; } function laParams() { displayRed = true; displayGreen = true; displayBlue = true; bColor = 26; lengthScalar = 0.8; cityNum = 6; } function keyPressed() { if (key == "=" || key == "+") { for (let i = 0; i < shapes.length; i++) { for (let j = 0; j < shapes[i].length; j++) { shapes[i][j].upScale(); } } } else if (key == "-" || key == "_") { for (let i = 0; i < shapes.length; i++) { for (let j = 0; j < shapes[i].length; j++) { shapes[i][j].downScale(); } } } else if (key == "d" || key == "D") { viewDiagram = !viewDiagram; } else if (key == " ") { bColor -= 26; if (bColor <= 0) { bColor = 255; } } else if (key == "r" || key == "R") { displayRed = !displayRed; } else if (key == "g" || key == "G") { displayGreen = !displayGreen; } else if (key == "b" || key == "B") { displayBlue = !displayBlue; } else if (key == "1") { tokyoParams(); } else if (key == "2") { berlinParams(); } else if (key == "3") { londonParams(); } else if (key == "4") { nycParams(); } else if (key == "5") { cdmxParams(); } else if (key == "6") { laParams(); } else if (keyCode == UP_ARROW) { stillLifeDepthNeg += 26; stillLifeDepthPos += 26; } else if (keyCode == DOWN_ARROW) { stillLifeDepthNeg -= 26; stillLifeDepthPos -= 26; } else if (key == "s" || key == "S") { speedIndex++; speedIndex = speedIndex % speeds.length; speedScalar = speeds[speedIndex]; } else if (key == "0") { lengthScalar += 0.2; } else if (key == "9") { if (lengthScalar > 0.4) { lengthScalar -= 0.2; } } else if (key == "t" || key == "T") { rezIndex++; if (rezIndex >= rezs.length) { rezIndex = 0; } doIt(); } else if (key == "p" || key == "P") { saveCanvas( nf(walletCount, 3) + "-" + walletCount + "-" + frameCount + ".png", 0, 0, width, height ); } else if (key == "e" || key == "E") { allCenter(); } else if (key == "w" || key == "W") { allRandom(); } else if (key == "q" || key == "Q") { allGrid(); } else if (key == "x" || key == "X") { multiplyOn = !multiplyOn; } else if (key == "i" || key == "I") { infoOverlay = !infoOverlay; } } class RND { constructor(seed) { this.seed = seed; } rd() { this.seed ^= this.seed << 13; this.seed ^= this.seed >> 17; this.seed ^= this.seed << 5; return ((this.seed < 0 ? ~this.seed + 1 : this.seed) % 1000) / 1000; } rb(a, b) { return a + (b - a) * this.rd(); } } let all_wallets = [ "0x015Dba998332771212F9d6D3536eCFa95a1cF8e6", "0x0871E6872f0CdEb32eb013648a76575B4d2dBa80", "0x0D13A6950A3d2B982EcD6Eb130FAF20cFDacD928", "0x113d754Ff2e6Ca9Fd6aB51932493E4F9DabdF596", "0x113d754Ff2e6Ca9Fd6aB51932493E4F9DabdF596", "0x113d754Ff2e6Ca9Fd6aB51932493E4F9DabdF596", "0x113d754Ff2e6Ca9Fd6aB51932493E4F9DabdF596", "0x113d754Ff2e6Ca9Fd6aB51932493E4F9DabdF596", "0x113d754Ff2e6Ca9Fd6aB51932493E4F9DabdF596", "0x113d754Ff2e6Ca9Fd6aB51932493E4F9DabdF596", "0x146D745139d417B8b5A1190cC73b34D7D37A9bBa", "0x1F5743DF7C907a74C8cC28Fe0E27c575830AC6A6", "0x222f6Df5B750Eb55234DA53d370bB2e8F5a1651d", "0x231595E3673a10e846803194f4982E1CF3389161", "0x231595E3673a10e846803194f4982E1CF3389161", "0x23787626349Cc170bFC512E5b5E3D3F44e00D02D", "0x255EeFD8307B3878be1E620FBd6A0ffA193B1CC5", "0x2586319850DEfD14dBFa93fE588780FDEA0d4336", "0x269D89631ba588a6994bF5A0DccB2A86573781fC", "0x27Ae95688aEDef0a38AbEb9f5d4d494Fc7CeB4c8", "0x27Eb78C1Eade6fc040d25b94E7acf6BBe0689F0A", "0x2B85f187f13e8fc5DB2dEC5027889e9Dfd0bC348", "0x2E23433769DB1505230A97EF9a7327E0224e480F", "0x2E23433769DB1505230A97EF9a7327E0224e480F", "0x2E23433769DB1505230A97EF9a7327E0224e480F", "0x32c5299093a3F9D412EA0EB7a2B3D757810f795B", "0x3a9139477D5cf400F843407D0Be1ABf9e130FE5C", "0x415398D5d063677E210F7E66087898A1719D0FD3", "0x457ee5f723C7606c12a7264b52e285906F91eEA6", "0x457ee5f723C7606c12a7264b52e285906F91eEA6", "0x484585fe5B976C2AFAC0f2c912447059EF41bf78", "0x49C7B3cDA921DEe28B0493f60d4AfA57663ebEF2", "0x4c40Ce702C4A1A7A231f513A27748ed1Ec258bAF", "0x4d6703cE6cC2Af54114f878E2f2500506b67484B", "0x4dE89162f766eeb2B0ed7DEc561F91f87DD50dc9", "0x51e5152bcd6ebeA8Aa64578C8Ba51E9C6d0bf435", "0x51ec5e1b8B3C4C6baE49619e657F94C4AD577b45", "0x5772e36143277356fCB562a124613C99f3502aE7", "0x598A0aD5e6229dBca38186e9441D73e15Cad652a", "0x5a5617BA16Beba3d04ae3C6b1e9d522c1856763C", "0x5aA7652ff7A493bAa40F50121b6D3040Da02997F", "0x616eb98d0BbE7581bd78c6BE56Ea6D349Cb72229", "0x685e34c6A94F330fa494D708b652261140b55aBA", "0x6B69edF4667FFbdF0Aa7D52e99F9e7Fce8174AbA", "0x75256A46E98Eb0F9c4eefc197eb3DD88d559a771", "0x7614114828F5B2dA4C6A6366EeaE91912Cb376Bf", "0x76b1F80D532c7496a95e8b4714dF239e29922302", "0x778379CA63D4C7A1dc0B20555bD4fB077CB9748a", "0x77DA0BD38461d28eE1299dbA1343288Cbe113Ab3", "0x789a5b918B997B5A2FEc160ceaa12765f5Ff43Ec", "0x7925Edf88700d82Fe3779cc98F8B8b686b6Ac82a", "0x7bd5Bbda0a483A62dcA7d8Ba72D53fd278069c02", "0x7EaBFE610657218bB4FD5620ED699B14dE305412", "0x7EaBFE610657218bB4FD5620ED699B14dE305412", "0x7EaBFE610657218bB4FD5620ED699B14dE305412", "0x80222ae86eA5F27435D3cc8616a9dfE19e01b95A", "0x8553f6Ca1993e502285fFa2053442c7ae921E2ae", "0x8AcF08a19c2858a1C9aF39b0e52b0a253bEA3717", "0x8cd40E173cA339AB333086300e26EB8538aA9866", "0x8Dbbca57Ea56290Efa14D835bBfd34fAF1d89753", "0x909a9160d4cd76505cee7F90E862A39541949f7f", "0x911657c57B58567922a5712AeC5878502Dcd779b", "0x9257C525A955497Ff54450Ca7C0E4359A0b44909", "0x953BB3AA4671b859298D98F70890b510176aDD63", "0x99e73A69536f7365fD4f2F2e5391f5dAa484b99b", "0x99fc8AD516FBCC9bA3123D56e63A35d05AA9EFB8", "0x9E174789337b6650fdBb77883f77FD99c2aF2f10", "0xa0D62722c4B8624D8005883ECAaAd491f0C212DE", "0xa3f81f0a82F2aF7549Ca9Dd10FA5e1D64d2Ea949", "0xa5430730f12F1128bf10dfBa38c8e00bc4d90Eea", "0xa9C538EA7cEc8e2e2dD9E869a36Af086F657708b", "0xaa3c0FAa24E67eBe9B73Fe3efaf9D06F9Ba57622", "0xaef7cDf5C0cE911E3491213A71bfC96cb28D5148", "0xB96E81f80b3AEEf65CB6d0E280b15FD5DBE71937", "0xbBA493459a48798b73522772AD31f2fdD854B534", "0xbCE555FfE94290912240c9036C37F49DC5cC2cb8", "0xC665A60F22dDa926B920DEB8FFAC0EF9D8a17460", "0xCc9B2b1f639F477371A5d784a389965041d7a33e", "0xda3c325aB45b30AeB476B026FE6A777443cA04f3", "0xe0D209b7324d982BACb757F724EbE00a9792aC28", "0xe3f663418251186888935dC1C4979FA3A3dA1bAC", "0xe3f663418251186888935dC1C4979FA3A3dA1bAC", "0xE4C6c46645988bBafd8ef6B4d1b60D969cC857C3", "0xE5CA890A0eF2F128EB3267e4711c6bf3306Ec024", "0xE6d4eA6c516b487f36e3F782f7043D7216a9C5bB", "0xeE74258438bcd2882fe907C91a5371dc5dD5b0eE", "0xeeA6486288645A2F8aA45FB00fbF5ba6a829a208", "0xEEF66e0feaD02bD972b77bFcf421eCb3D4699169", "0xf3860788D1597cecF938424bAABe976FaC87dC26", ]; let all_sets = [ [111222, 222660, 345600, 446600, 555200, 666110], [111114, 223366, 333311, 444661, 555520, 612400], [111260, 222331, 333316, 444136, 551120, 661340], [111110, 222220, 333330, 444440, 555550, 666660], [111111, 222211, 331000, 444113, 551160, 610000], [111134, 222234, 333552, 444160, 552400, 612340], [111145, 222400, 333556, 444225, 555223, 661235], [111460, 223460, 335560, 444420, 555246, 666225], [112256, 225600, 340000, 444446, 555540, 666334], [123450, 222450, 350000, 444660, 555664, 666644], [111345, 235600, 356000, 444300, 551000, 613000], [111200, 222100, 335526, 444435, 555126, 661122], [140000, 222245, 333300, 445500, 551230, 663315], [111236, 221300, 335600, 416000, 555553, 662500], [112200, 222140, 336650, 444230, 556600, 666124], [111122, 245000, 346000, 445523, 555111, 666222], [115524, 224600, 334000, 441300, 553000, 666624], [111443, 235000, 335000, 415000, 556000, 661300], [113344, 222460, 333340, 445560, 555442, 662340], [112246, 222236, 333120, 441136, 513000, 661350], [111660, 222216, 335500, 444423, 555666, 666450], [113326, 221346, 333345, 442350, 555522, 661345], [111112, 222110, 331246, 441125, 551130, 666230], [111300, 222134, 333221, 444150, 551166, 666625], [113350, 222260, 335540, 446623, 556620, 666630], [113300, 221400, 333100, 443500, 551400, 666100], [111140, 223344, 336640, 445510, 551240, 666613], [111330, 222550, 333240, 444120, 555110, 666650], [112346, 222333, 333224, 444350, 552360, 666553], [111166, 222221, 333310, 444456, 555116, 666114], [120000, 224450, 333554, 460000, 555334, 623000], [114423, 222156, 314500, 444552, 555332, 666220], [124000, 221000, 333000, 444000, 552000, 666000], [111230, 224430, 332560, 445530, 552200, 612000], [111334, 224435, 334460, 444555, 553460, 666125], [112300, 223314, 333126, 441560, 555234, 661150], [111240, 224455, 333456, 444335, 552216, 666500], [111246, 222215, 335510, 444450, 555130, 661134], [111000, 222000, 336000, 441000, 555000, 661100], [112350, 222356, 333344, 446650, 555226, 661120], [111446, 222255, 333146, 444336, 555236, 666250], [111450, 221360, 333356, 446610, 551140, 666200], [111256, 223450, 335512, 444360, 555134, 666440], [124500, 222300, 331600, 426000, 526000, 666445], [114560, 222213, 331245, 444415, 555240, 666551], [111456, 222160, 333450, 441160, 551360, 665000], [111120, 223350, 333140, 441600, 555300, 661240], [123400, 222145, 334415, 444100, 552460, 666145], [111234, 223356, 336600, 441200, 551134, 666443], [111156, 222446, 333551, 444416, 555663, 663314], [111550, 221450, 333350, 446000, 512000, 662215], [111124, 222223, 333333, 444455, 555552, 666645], [111130, 221350, 331145, 443600, 555443, 612300], [114420, 222444, 333331, 444413, 556613, 662230], [114500, 222551, 336624, 446635, 556634, 666224], [113340, 221460, 333325, 442560, 551234, 661245], [111556, 222600, 333160, 445566, 513600, 666350], [111123, 224410, 333124, 444112, 555346, 666331], [111335, 223400, 333600, 444332, 555512, 666612], [111133, 222553, 333400, 445536, 555330, 663450], [111333, 223316, 333666, 444410, 556612, 661130], [114426, 223000, 334466, 446620, 551460, 666622], [123000, 240000, 335520, 456000, 510000, 620000], [111146, 222335, 333555, 441236, 555662, 613400], [113325, 222334, 333116, 444330, 552300, 663500], [110000, 230000, 360000, 440000, 560000, 661000], [111336, 222235, 331260, 444412, 555221, 666123], [123500, 224436, 345000, 441156, 555224, 666235], [114600, 224500, 331200, 444250, 554600, 663000], [111116, 222233, 333322, 444666, 555551, 666150], [112240, 222115, 331240, 444662, 555136, 661133], [113456, 222556, 333360, 444443, 551340, 666550], [111224, 222116, 333315, 444422, 555544, 666130], [100000, 200000, 300000, 400000, 500000, 600000], [111560, 223560, 336625, 444663, 552214, 661200], [111552, 222244, 333332, 444556, 555222, 666134], [113460, 222250, 336645, 444436, 555524, 661450], [111350, 222136, 333125, 444425, 555260, 662200], [113500, 224000, 333200, 444200, 555600, 662300], [134000, 224415, 331146, 444600, 555400, 662245], [111665, 222665, 333335, 444466, 555523, 666113], [113400, 222222, 333326, 444441, 555554, 666634], [111664, 234600, 334456, 442500, 555660, 666335], [111663, 221600, 333225, 441500, 555556, 666234], [115600, 222445, 333246, 442600, 551300, 663400], [112235, 222146, 333560, 442256, 552340, 666623], [111160, 222440, 333334, 444411, 512360, 662450], [111250, 222210, 334400, 444500, 555114, 660000], [112000, 220000, 330000, 450000, 555560, 666330], ];
var seed = parseInt(tokenData.hash.slice(0, 16), 16); let projectNumber = Math.floor(parseInt(tokenData.tokenId) / 1000000); let walletCount = parseInt(tokenData.tokenId) % 1000000; let vertX = [0.59375, 0.40625, 0.59375, 0.40625, 0.59375, 0.40625]; let vertY = [0.75, 0.75, 0.5, 0.5, 0.25, 0.25]; let horiX = [0.75, 0.5, 0.25, 0.75, 0.5, 0.25]; let horiY = [0.59375, 0.59375, 0.59375, 0.40625, 0.40625, 0.40625]; let vertical; let sixX, sixY; let multiplyOn = false; let mostShapeArr = [0, 0, 0, 0, 0, 0]; let shapesNames = ["Sun", "Shard", "Cargo", "Hive", "Pyramid", "Moon"]; p5.disableFriendlyErrors = true; let rezs = [150, 200, 300]; let rezIndex = 2; let lineThickness; let lineDepth; let lineLength; let lineSpacing; let depth = 255.0; let displayRed = true; let displayGreen = true; let displayBlue = true; let stillLifeDim = -1; let stillLifeDepthNeg = 0; let stillLifeDepthPos = 0; let depthScalar = 1.0; let speedScalar = 1.0; let speeds = [0.25, 0.5, 1.0, 2.0, 0.0]; let speedIndex = 2; let SEED = 0; let lengthScalar = 1.3; let combination = []; let angle = 0.0; let alphapix; let overlay; let cityNum; let cla, cny, cberlin, ccdmx, clondon, ctokyo; let s1, s2, s3, s4; let sc; let foregrounds = []; let bColor = 246; let shapes = []; let gl; let stillLifePO2 = 2; let ext; let pgl; let viewDiagram = false; let infoOverlay = false; let viewMatrix; let modelViewMatrix; let dispMapTexture; let CDMXSpin = 1; const vertCode = `precision highp float; uniform mat4 uViewMatrix; uniform mat4 uProjectionMatrix; uniform mat4 uModelViewMatrix; uniform mat4 uModelViewProjectionMatrix; uniform vec2 canvasSize; uniform float stillLifeDim; uniform float stillLifePO2; uniform float stillLifeDepthNeg; uniform float stillLifeDepthPos; uniform float depthScalar; uniform float lineThickness; uniform float lineDepth; uniform float lineLength; uniform vec3 color; uniform sampler2D displacementMap; attribute vec3 coordinates; float map(float value, float min1, float max1, float min2, float max2) { return min2 + (value - min1) * (max2 - min2) / (max1 - min1); } struct Line { vec3 start; vec3 end; }; Line getLineFromDisplacementMap(int x_origin, int y_origin) { Line l; vec2 imageCoords = vec2(x_origin, y_origin); imageCoords.x += .5; imageCoords.y += .5; vec2 samplePos = imageCoords.xy/stillLifePO2; vec4 dispMapColor = texture2D(displacementMap, samplePos); float maxEdge = max(canvasSize.x, canvasSize.y); float x = float(x_origin); float y = float(y_origin); float z = map(dot(dispMapColor.xyz, color), 0.0, 1.0, -stillLifeDepthNeg, stillLifeDepthPos); l.start.x = map(x, 0.0, stillLifeDim, -maxEdge / 2.0, maxEdge / 2.0); l.start.y = map(y, 0.0, stillLifeDim, -maxEdge / 2.0, maxEdge / 2.0); l.start.z = -z; l.end.x = map(x, 0.0, stillLifeDim, -maxEdge / 2.0, maxEdge / 2.0) - lineDepth; l.end.y = map(y, 0.0, stillLifeDim, -maxEdge / 2.0, maxEdge / 2.0) - lineDepth; l.end.z = -lineLength - z; return l; } void main() { bool lineStart = false; if (coordinates.y == 0.0) lineStart = true; if (coordinates.y == 1.0) lineStart = true; if (coordinates.y == 2.0) lineStart = false; if (coordinates.y == 3.0) lineStart = true; if (coordinates.y == 4.0) lineStart = false; if (coordinates.y == 5.0) lineStart = false; int imageCoordsY = int(floor(coordinates.x / stillLifeDim)); int imageCoordsX = int(floor(coordinates.x - float(imageCoordsY) * stillLifeDim)); Line l = getLineFromDisplacementMap(imageCoordsX, imageCoordsY); vec3 vertexPosition; if (lineStart) { vertexPosition = l.start; } else { vertexPosition = l.end; } vec4 finalPos = vec4(vertexPosition, 1.0); finalPos = uModelViewProjectionMatrix * finalPos; vec4 projLineStart = uModelViewProjectionMatrix * vec4(l.start, 1.0); vec4 projLineEnd = uModelViewProjectionMatrix * vec4(l.end, 1.0); vec2 lineDirection = projLineStart.xy - projLineEnd.xy; lineDirection = vec2(-lineDirection.y, lineDirection.x); float maxEdge = max(canvasSize.x, canvasSize.y); lineDirection /= canvasSize / maxEdge; vec2 displacement = normalize(lineDirection); displacement /= canvasSize; displacement *= lineThickness; if (coordinates.y == 0.0) finalPos.xy -= displacement; if (coordinates.y == 2.0) finalPos.xy -= displacement; if (coordinates.y == 5.0) finalPos.xy -= displacement; if (coordinates.y == 1.0) finalPos.xy += displacement; if (coordinates.y == 3.0) finalPos.xy += displacement; if (coordinates.y == 4.0) finalPos.xy += displacement; finalPos.z = 0.0; gl_Position = finalPos; } `; const fragCode = `precision highp float; uniform vec3 color; void main() { gl_FragColor = vec4(color, 1.0); } `; let triangle_buffer; let numTris; function setupGeometry() { let triangles = []; numTris = 0; for (let y = 0; y < rezs[rezIndex]; y += 1) { for (let x = 0; x < rezs[rezIndex]; x += 1) { triangles.push(x + y * stillLifeDim, 0, 0); triangles.push(x + y * stillLifeDim, 1, 0); triangles.push(x + y * stillLifeDim, 2, 0); triangles.push(x + y * stillLifeDim, 3, 0); triangles.push(x + y * stillLifeDim, 4, 0); triangles.push(x + y * stillLifeDim, 5, 0); numTris += 6; } } triangle_buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, triangle_buffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangles), gl.STATIC_DRAW); gl.bindBuffer(gl.ARRAY_BUFFER, null); } function setupShapes() { let sss = 0.3; shapes = []; let currSet = all_sets[walletCount]; mostShapeArr = [0, 0, 0, 0, 0, 0]; if (vertical) { sixX = vertX; sixY = vertY; } else { sixX = horiX; sixY = horiY; } let currShapesArr = []; for (let currCombo = 0; currCombo < currSet.length; currCombo++) { setupCombination(currSet[currCombo]); for (let i = 0; i < combination.length; i++) { currShapesArr.push( new VShape( -stillLifeDim * sixX[currCombo], -stillLifeDim * sixY[currCombo], stillLifeDim * sss, combination[i] ) ); } shapes.push(currShapesArr); currShapesArr = []; } theDetails(); } function theDetails() { let maxSide = max(width, height); if (maxSide < 400) { depthScalar = map(maxSide, 50, 400, 0.05, 0.3); } else { depthScalar = map(maxSide, 400, 3840, 0.3, 2.0); } stillLifeDepthNeg = 255.0 / 4; stillLifeDepthPos = 255.0 / 4; lengthScalar = 1.0; let cityDigit = mostShapeArr.indexOf(Math.max(...mostShapeArr)) + 1; if (cityDigit == 1) { tokyoParams(); } else if (cityDigit == 2) { berlinParams(); } else if (cityDigit == 3) { londonParams(); } else if (cityDigit == 4) { nycParams(); } else if (cityDigit == 5) { cdmxParams(); } else { laParams(); } } let shaderProgram; function setupShaders() { let vertShader = gl.createShader(gl.VERTEX_SHADER); gl.shaderSource(vertShader, vertCode); gl.compileShader(vertShader); const vertError = gl.getShaderInfoLog(vertShader); if (vertError.length > 0) { throw vertError; } let fragShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragShader, fragCode); gl.compileShader(fragShader); const fragError = gl.getShaderInfoLog(fragShader); if (fragError.length > 0) { throw fragError; } shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, vertShader); gl.attachShader(shaderProgram, fragShader); gl.linkProgram(shaderProgram); } function createDisplacementMapTexture() { dispMapTexture = gl.createTexture(); while (stillLifePO2 < stillLifeDim) { stillLifePO2 *= 2; } } function transferDisplacementMap() { let img = alphapix.get(); img.loadPixels(); let uvTexture = Array(stillLifePO2 * stillLifePO2 * 4).fill(255); const randomStuff = new Uint8Array(uvTexture); for (let x = 0; x < stillLifeDim; ++x) { for (let y = 0; y < stillLifeDim; ++y) { const index1 = 4 * (y * stillLifePO2 + x); const index2 = 4 * (y * stillLifeDim + x); randomStuff[index1 + 0] = img.pixels[index2 + 0]; randomStuff[index1 + 1] = img.pixels[index2 + 1]; randomStuff[index1 + 2] = img.pixels[index2 + 2]; } } gl.bindTexture(gl.TEXTURE_2D, dispMapTexture); gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, stillLifePO2, stillLifePO2, 0, gl.RGBA, gl.UNSIGNED_BYTE, randomStuff ); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE2); gl.bindTexture(gl.TEXTURE_2D, dispMapTexture); const displaceMapLocation = gl.getUniformLocation( shaderProgram, "displacementMap" ); gl.uniform1i(displaceMapLocation, 2); } function setMatrices() { const viewMatrix = this._renderer._curCamera.cameraMatrix; const projectionMatrix = this._renderer.uPMatrix; const modelViewMatrix = this._renderer.uMVMatrix; const modelViewProjectionMatrix = modelViewMatrix.copy(); modelViewProjectionMatrix.mult(projectionMatrix); gl.uniformMatrix4fv( gl.getUniformLocation(shaderProgram, "uViewMatrix"), false, viewMatrix.mat4 ); gl.uniformMatrix4fv( gl.getUniformLocation(shaderProgram, "uProjectionMatrix"), false, projectionMatrix.mat4 ); gl.uniformMatrix4fv( gl.getUniformLocation(shaderProgram, "uModelViewMatrix"), false, modelViewMatrix.mat4 ); gl.uniformMatrix4fv( gl.getUniformLocation(shaderProgram, "uModelViewProjectionMatrix"), false, modelViewProjectionMatrix.mat4 ); } function setUniforms() { gl.uniform2f( gl.getUniformLocation(shaderProgram, "canvasSize"), width, height ); gl.uniform1f( gl.getUniformLocation(shaderProgram, "stillLifeDim"), stillLifeDim ); gl.uniform1f( gl.getUniformLocation(shaderProgram, "stillLifePO2"), stillLifePO2 ); gl.uniform1f( gl.getUniformLocation(shaderProgram, "depthScalar"), depthScalar ); gl.uniform1f( gl.getUniformLocation(shaderProgram, "stillLifeDepthNeg"), stillLifeDepthNeg * depthScalar ); gl.uniform1f( gl.getUniformLocation(shaderProgram, "stillLifeDepthPos"), stillLifeDepthPos * depthScalar ); gl.uniform1f( gl.getUniformLocation(shaderProgram, "lineThickness"), lineThickness ); gl.uniform1f(gl.getUniformLocation(shaderProgram, "lineLength"), lineLength); gl.uniform1f(gl.getUniformLocation(shaderProgram, "lineDepth"), lineDepth); } function beginLinesShader() { gl.useProgram(shaderProgram); gl.bindBuffer(gl.ARRAY_BUFFER, triangle_buffer); transferDisplacementMap(); setUniforms(); const coord = gl.getAttribLocation(shaderProgram, "coordinates"); gl.vertexAttribPointer(coord, 3, gl.FLOAT, false, 0, 0); gl.enableVertexAttribArray(coord); gl.enable(gl.BLEND); gl.disable(gl.DEPTH_TEST); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.viewport(0, 0, canvas.width, canvas.height); } function endLinesShader() { gl.useProgram(null); } function drawLines() { beginLinesShader(); setMatrices(); gl.uniform3f(gl.getUniformLocation(shaderProgram, "color"), 1, 1, 0); if (displayRed) { gl.drawArrays(gl.TRIANGLES, 0, numTris); } translate(lineSpacing, 0.0, 0.1); setMatrices(); gl.uniform3f(gl.getUniformLocation(shaderProgram, "color"), 0, 1, 1); if (displayGreen) { gl.drawArrays(gl.TRIANGLES, 0, numTris); } translate(lineSpacing, 0.0, 0.1); setMatrices(); gl.uniform3f(gl.getUniformLocation(shaderProgram, "color"), 1, 0, 1); if (displayBlue) { gl.drawArrays(gl.TRIANGLES, 0, numTris); } endLinesShader(); } function setupTransform() { ortho(); scale(1.45); rotateY(0.33); rotateX(-0.33); } function setupCombination(code) { combination = []; let comb = str(code); for (let i = 0; i < comb.length; i++) { let char = comb[i]; if (char != "0") { mostShapeArr[char - 1] += 1; let c = int(comb[i]) - 1; combination.push(c); } } } function defineColors() { let aaa = 254; ctokyo = color(227, 143, 53, aaa); cberlin = color(53, 155, 227, aaa); clondon = color(231, 71, 71, aaa); cny = color(166, 79, 206, aaa); ccdmx = color(76, 205, 82, aaa); cla = color(238, 211, 30, aaa); foregrounds = [ctokyo, cberlin, clondon, cny, ccdmx, cla]; s1 = color(255, 226, 204); s2 = color(204, 255, 226); s3 = color(225, 204, 226); s4 = color(164, 204, 255); sc = [s1, s2, s3, s4]; } function changeAspectRatio() { if (vertical) { sixX = horiX; sixY = horiY; } else { sixX = vertX; sixY = vertY; } vertical = !vertical; for (let i = 0; i < shapes.length; i++) { for (let j = 0; j < shapes[i].length; j++) { shapes[i][j].changeXandY( -stillLifeDim * sixX[i], -stillLifeDim * sixY[i] ); } } } function allCenter() { for (let i = 0; i < shapes.length; i++) { for (let j = 0; j < shapes[i].length; j++) { shapes[i][j].changeXandY(-stillLifeDim * 0.5, -stillLifeDim * 0.5); shapes[i][j].changeScale(3.0); } } } function allRandom() { for (let i = 0; i < shapes.length; i++) { for (let j = 0; j < shapes[i].length; j++) { shapes[i][j].changeXandY( -stillLifeDim * r.rb(0, 1), -stillLifeDim * r.rb(0, 1) ); shapes[i][j].changeScale(1.5); } } } function allGrid() { for (let i = 0; i < shapes.length; i++) { for (let j = 0; j < shapes[i].length; j++) { shapes[i][j].changeXandY( -stillLifeDim * sixX[i], -stillLifeDim * sixY[i] ); shapes[i][j].changeScale(1.0); } } } function windowResized() { resizeCanvas(windowWidth, windowHeight); if (windowWidth > windowHeight && vertical) { changeAspectRatio(); } else if (windowHeight > windowWidth && !vertical) { changeAspectRatio(); } } function setup() { createCanvas(windowWidth, windowHeight, WEBGL); if (windowWidth > windowHeight) { vertical = false; } else if (windowHeight > windowWidth) { vertical = true; } r = new RND(seed); defineColors(); imageMode(CENTER); gl = document.getElementById("defaultCanvas0").getContext("webgl"); stillLifeDim = rezs[rezIndex]; alphapix = createGraphics(stillLifeDim, stillLifeDim, WEBGL); pgl = alphapix._renderer.GL; pgl.disable(gl.DEPTH_TEST); overlay = createGraphics(1200, 1200); setupShaders(); doIt(); } function doIt() { stillLifeDim = rezs[rezIndex]; alphapix.resizeCanvas(stillLifeDim, stillLifeDim); setupShapes(); setupGeometry(); createDisplacementMapTexture(); createStillLife(); } function createGround() { if (speedIndex != 4) { angle += 0.0005; } let ss = map(sin(angle), -1, 1, 0, 1); let c1 = lerpColor(sc[0], sc[1], ss); let c2 = lerpColor(sc[1], sc[2], ss); let c3 = lerpColor(sc[2], sc[3], ss); let c4 = lerpColor(sc[3], sc[1], ss); alphapix.background(255); alphapix.blendMode(BLEND); alphapix.beginShape(); alphapix.fill(c1); alphapix.vertex(-alphapix.width / 2, -alphapix.height / 2); alphapix.fill(c2); alphapix.vertex(alphapix.width / 2, -alphapix.height / 2); alphapix.fill(c3); alphapix.vertex(alphapix.width / 2, alphapix.height / 2); alphapix.fill(c4); alphapix.vertex(-alphapix.width / 2, alphapix.height / 2); alphapix.endShape(); } function createStillLife() { createGround(); if (multiplyOn) { alphapix.blendMode(MULTIPLY); } else { alphapix.blendMode(BLEND); } for (let i = 0; i < shapes.length; i++) { for (let j = 0; j < shapes[i].length; j++) { shapes[i][j].move(); shapes[i][j].display(alphapix); } } } function makeOverlay() { push(); switch (cityNum) { case 1: overlay.background(128, 255, 128); break; case 2: overlay.background(204, 204, 255); break; case 3: overlay.background(255, 255, 0); break; case 4: overlay.background(255, 0, 255); break; case 5: overlay.background(0, 255, 255); break; case 6: overlay.background(255, 191, 64); break; default: overlay.background(0); } const totalShapes = mostShapeArr.reduce((a, b) => a + b, 0); const mostUsed = Math.max(...mostShapeArr); const indices = mostShapeArr.reduce((result, element, index) => { if (element == mostUsed) { result.push(index); } return result; }, []); let totalLinesPx = 568 + 36 + indices.length * 44; let lineCoord = (1200 - totalLinesPx) / 2; fill(0, 0, 0); noStroke(); overlay.textAlign(CENTER, TOP); overlay.textFont("Arial", 36); overlay.text("Wallet:", 600, lineCoord); lineCoord += 44; overlay.text(all_wallets[walletCount], 600, lineCoord); lineCoord += 72; overlay.text("Sets:", 600, lineCoord); lineCoord += 44; overlay.text(all_sets[walletCount].join(" "), 600, lineCoord); lineCoord += 72; overlay.text(totalShapes.toString() + " Total Shapes: ", 600, lineCoord); for (let i = 0; i < mostShapeArr.length; i++) { lineCoord += 44; if (mostShapeArr[i] == 1) { overlay.text( mostShapeArr[i].toString() + " " + shapesNames[i], 600, lineCoord ); } else { overlay.text( mostShapeArr[i].toString() + " " + shapesNames[i] + "s", 600, lineCoord ); } } lineCoord += 72; overlay.text("Most Used Shape:", 600, lineCoord); if (indices.length > 1) { for (let iShape = 0; iShape < indices.length; iShape++) { lineCoord += 44; if (mostUsed > 1) { overlay.text( mostUsed.toString() + " " + shapesNames[indices[iShape]].toString() + "s", 600, lineCoord ); } else { overlay.text( mostUsed.toString() + " " + shapesNames[indices[iShape]].toString(), 600, lineCoord ); } } } else { lineCoord += 44; overlay.text( mostUsed.toString() + " " + shapesNames[indices[0]].toString() + "s", 600, lineCoord ); } pop(); } function draw() { let scaleFactor = max(width, height) / 1200.0; if (rezIndex == 2) { lineThickness = 1.66 * scaleFactor; lineLength = 3.0 * lengthScalar * scaleFactor; } else if (rezIndex == 0) { lineThickness = 3.33 * scaleFactor; lineLength = 8.0 * lengthScalar * scaleFactor; } else { lineThickness = 2.22 * scaleFactor; lineLength = 12.0 * lengthScalar * scaleFactor; } lineDepth = 2 * scaleFactor; lineSpacing = 2.22 * scaleFactor; createStillLife(); background(bColor); push(); setupTransform(); drawLines(); pop(); if (viewDiagram) { fill(255); noStroke(); rect(0, 0, -stillLifeDim / 2, -stillLifeDim / 2); image(alphapix, 0, 0); } if (infoOverlay) { push(); makeOverlay(); rectMode(CENTER); fill(255); noStroke(); rect(0, 0, max(width, height) / 3, max(width, height) / 3); image(overlay, 0, 0, max(width, height) / 3, max(width, height) / 3); pop(); } if (speedIndex != 4) { CDMXSpin++; } } class VShape { constructor(xin, yin, uin, win) { this.scale = 1.0; this.targetScale = 1.0; this.scaleStep = 0.2; this.dia = uin * 0.75; this.mdia = uin * 0.8; this.rdia = uin * 0.66; this.ddia = uin * 0.55; this.tdia = uin * 0.8; this.tdia2 = uin * 0.7; this.hu = uin * 0.5; this.qr1 = uin * 0.3; this.qr2 = uin * 0.2; this.sr = uin * 0.4; this.unit = stillLifeDim; this.x = xin; this.y = yin; this.rx = this.x + (this.unit - this.rdia) / 2; this.ry = this.y + (this.unit - this.rdia) / 2; this.cx = this.x + this.unit / 2; this.cy = this.y + this.unit / 2; this.cindex = win; this.sindex = win; this.movex = r.rb(0, TWO_PI); this.movey = r.rb(0, TWO_PI); this.hexx = uin * 0.2; this.hexy = uin * 0.346; this.moonAngle = r.rb(0, TWO_PI); this.moveyval = r.rb(0.0005, 0.002); this.movexval = r.rb(0.0005, 0.002); if (r.rb(1) > 0.5) { this.moveyval *= -1; } if (r.rb(1) > 0.5) { this.movexval *= -1; } } resetScale() { this.targetScale = 1.0; } upScale() { this.targetScale += this.scaleStep; } downScale() { this.targetScale -= this.scaleStep; this.targetScale = max(0.0, this.targetScale); } changeScale(newScale) { this.targetScale = newScale; } move() { this.movex += this.movexval * speedScalar; this.movey += this.moveyval * speedScalar; this.scale = (this.targetScale - this.scale) * 0.05 + this.scale; } changeXandY(xin, yin) { this.x = xin; this.y = yin; this.rx = this.x + (this.unit - this.rdia) / 2; this.ry = this.y + (this.unit - this.rdia) / 2; this.cx = this.x + this.unit / 2; this.cy = this.y + this.unit / 2; } display(pg) { if (this.sindex == 0) { this.sTokyo(pg); } else if (this.sindex == 1) { this.sBerlin(pg); } else if (this.sindex == 2) { this.sLondon(pg); } else if (this.sindex == 3) { this.sNYC(pg); } else if (this.sindex == 4) { this.sCDMX(pg); } else if (this.sindex == 5) { this.sLA(pg); } } sTokyo(pg) { pg.noStroke(); pg.push(); pg.translate(this.cx, this.cy); pg.scale(this.scale); pg.rotateY(this.movey); pg.rotateX(this.movex); pg.fill(foregrounds[this.cindex]); pg.ellipse(0, 0, this.dia, this.dia); pg.pop(); } sBerlin(pg) { pg.noStroke(); pg.fill(foregrounds[this.cindex]); pg.push(); pg.beginShape(); pg.translate(this.cx, this.cy); pg.scale(this.scale); pg.rotateX(this.movex); pg.rotateY(this.movey); pg.vertex(-this.qr1, -this.hu); pg.vertex(this.qr1, -this.qr2); pg.vertex(this.qr1, this.hu); pg.vertex(-this.qr1, this.qr2); pg.endShape(); pg.pop(); } sLondon(pg) { pg.push(); pg.translate(this.rx + this.rdia / 2, this.ry + this.rdia / 2); pg.scale(this.scale); pg.rotateY(this.movey); pg.rotateX(this.movex); pg.noStroke(); pg.fill(foregrounds[this.cindex]); pg.beginShape(); pg.vertex(-this.rdia / 2, -this.rdia / 2); pg.vertex(this.rdia / 2, -this.rdia / 2); pg.vertex(this.rdia / 2, this.rdia / 2); pg.vertex(-this.rdia / 2, this.rdia / 2); pg.endShape(); pg.pop(); } sNYC(pg) { pg.push(); pg.translate(this.rx + this.rdia / 2, this.ry + this.rdia / 2); pg.scale(this.scale); pg.rotateY(this.movey); pg.rotateX(this.movex); pg.noStroke(); pg.fill(foregrounds[this.cindex]); pg.beginShape(); pg.vertex(this.hexx, -this.hexy); pg.vertex(this.hexx * 2, 0); pg.vertex(this.hexx, this.hexy); pg.vertex(-this.hexx, this.hexy); pg.vertex(-this.hexx * 2, 0); pg.vertex(-this.hexx, -this.hexy); pg.endShape(); pg.pop(); } sCDMX(pg) { pg.push(); pg.translate(this.rx + this.rdia / 2, this.ry + this.rdia / 2.66); pg.scale(this.scale); pg.rotateY(this.movey); pg.rotateX(this.movex); pg.rotateZ(CDMXSpin / 1000.0); pg.noStroke(); pg.fill(foregrounds[this.cindex]); pg.beginShape(); pg.vertex(0, -this.tdia / 2); pg.vertex(this.tdia / 2, this.tdia2 / 2); pg.vertex(-this.tdia / 2, this.tdia2 / 2); pg.endShape(); pg.pop(); } sLA(pg) { pg.noStroke(); pg.fill(foregrounds[this.cindex]); pg.push(); pg.translate(this.cx, this.cy); pg.scale(this.scale); pg.rotate(this.moonAngle); pg.rotateX(this.movex); pg.rotateY(this.movey); pg.rotateZ(CDMXSpin / 1000.0); pg.arc(0, 0, this.mdia, this.mdia, 0.7, TWO_PI - 0.7, CHORD); pg.pop(); } }
89 Bright × Empty Rooms is a new series for collectors of a full set of 923 Empty Rooms. 923 Empty Rooms is an artwork about simulation and the history of visual representation and abstraction. Each room is a space to explore. See the key commands listed below. Each of the 89 Bright × Empty Rooms contains six complete rooms from 923 Empty Rooms, one for each city: Tokyo, Berlin, London, New York, Mexico City, and Los Angeles. 89 Bright × Empty Rooms is a further evolution of An Empty Room, commissioned by the Los Angeles County Museum of Art (LACMA) for the Coded: Art Enters the Computer Age, 1952–1982 exhibition.
let U;const L=function(t){const e=N(t.hash);globalThis.X31=new z([e(),e(),e(),e()]);const i=X31.X3e(M);let s,r;if(U=i.data,3==U.X4f){const t=X31.X58(0,1,2);0==t&&(s=X31.X58(8,10,12),r=s),s=X31.X58(10,12,14,16),r=X31.X58(6,8),2==t&&([s,r]=[r,s])}else{0==X31.X58(0,1)?(s=8,r=8):(s=10,r=6)}return{Direction:X31.X3e([[1,"↑"],[30,"↓"]]),Simmetry:X31.X58(0,.6,.9),Width:s,Depth:r,Palette:X31.X58(Object.keys(n)),ColorFN:X31.X58(Object.keys(F)),Tiles:i.name,VoxelWidth:3,VoxelHeight:3,Texture:X31.X58(["▓░▒","N.|","B;!","░╱║","*/.","#7;","+-,","W?|","Xo.","$<v","12x","A-B"])}}(tokenData);globalThis.NOISE=((t=0)=>{function e(e,i,s){return e=50*v(.3283079*e+.7091),i=50*v(.3283079*i+.1131),s=50*v(.3283079*s+.3291),2*v(1.36959861*t+e*i*s*(e+i+s))-1}return{noise3d:function(t,i,s){const r=Math.floor(t),n=Math.floor(i),h=Math.floor(s),o=v(t),a=v(i),A=v(s),l=o*o*(3-2*o),c=a*a*(3-2*a);return B(B(B(e(r+0,n+0,h+0),e(r+1,n+0,h+0),l),B(e(r+0,n+1,h+0),e(r+1,n+1,h+0),l),c),B(B(e(r+0,n+0,h+1),e(r+1,n+0,h+1),l),B(e(r+0,n+1,h+1),e(r+1,n+1,h+1),l),c),A*A*(3-2*A))}}})(X31.float()).noise3d;const Q=new URLSearchParams(location.search),k={scale:parseInt(Q.get("scale"))||0,fps:parseInt(Q.get("fps"))||0,canvasWidth:parseInt(Q.get("canvasWidth"))||0,canvasHeight:parseInt(Q.get("canvasHeight"))||0,noShading:parseInt(Q.get("noShading"))||0,noNoise:parseInt(Q.get("noNoise"))||0,noColor:parseInt(Q.get("noColor"))||0,X3d:parseInt(Q.get("X3d"))||0,voxelWidth:parseInt(Q.get("voxelWidth"))||0,voxelHeight:parseInt(Q.get("voxelHeight"))||0,texture:Q.get("texture")};L.VoxelWidth=k.voxelWidth||L.VoxelWidth,L.VoxelHeight=k.voxelHeight||L.VoxelHeight,null!==k.texture&&k.texture.length>=3&&(L.Texture=k.texture);const W=document.body.appendChild(document.createElement("canvas")),K=W.getContext("webgl2");if(!K)throw new Error("WebGL error, program halted.");document.body.style.backgroundColor="black",W.style.fontSmooth="none",W.style.fontSmooth="never",W.style["-webkitFontSmoothing"]="none",W.style.imageRendering="crisp-edges",W.style.imageRendering="pixelated";let V=!1,X=!0,Z=0,q=!1,J=!1,$=!1,tt=!k.noShading,et=!k.noNoise,it=!k.noColor,st=k.scale||0,rt=k.fps||20;const nt="Descent",ht=65536,ot=r(k.X3d),at=r(3276),At={base:r(X31.X58(2730,3276,3822)),accent:n[L.Palette].map(r),base_LUT:[],accent_LUT:[]};{const t=At.accent;X31.probability(.5)&&t.reverse();const e=X31.X55(0,t.length);for(let i=0;i<e;i++)t.push(t.shift())}const lt=F[L.ColorFN](X31),ct=new class{gl;program;uniforms;constructor(t,e){this.gl=t,this.program=e,this.uniforms=[],this.locations=[];const i=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let s=0;s<i;++s){const i=t.getActiveUniform(e,s),r=i.name,n=t.getUniformLocation(e,r);this.uniforms[r]=this.#t(i.type,n),this.locations[r]=n}const s=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES);for(let i=0;i<s;++i){const s=t.getActiveAttrib(e,i).name,r=t.getAttribLocation(e,s);this.locations[s]=r}}set(t,...e){this.uniforms[t]&&this.uniforms[t](...e)}#t(t,e){const i=this.gl;switch(t){case i.BOOL:case i.INT:case i.SAMPLER_2D:case i.SAMPLER_2D_RECT:case i.SAMPLER_CUBE:return function(t){return i.uniform1i(e,t),this};case i.FLOAT:return function(t){return i.uniform1f(e,t),this};case i.FLOAT_VEC2:return function(t,s){i.uniform2f(e,t,s)};case i.FLOAT_VEC3:return function(t,s,r){i.uniform3f(e,t,s,r)};case i.FLOAT_VEC4:return function(t,s,r,n){i.uniform4f(e,t,s,r,n)};case i.FLOAT_MAT3:return function(t){i.uniformMatrix3fv(e,!1,t.toFloat32Array())};case i.FLOAT_MAT4:return function(t){i.uniformMatrix4fv(e,!1,t.toFloat32Array())}}return function(){throw"Don’t know how to set type: "+t}}use(){this.gl.useProgram(this.program)}relink(){const t=this.gl,e=this.program;if(t.linkProgram(e),!0!==t.getProgramParameter(e,t.LINK_STATUS))throw t.getProgramInfoLog(e);return!0}}(K,function(t,e,i){const r=s(t,e,t.VERTEX_SHADER),n=s(t,i,t.FRAGMENT_SHADER),h=t.createProgram();if(t.attachShader(h,r),t.attachShader(h,n),t.linkProgram(h),!0!==t.getProgramParameter(h,t.LINK_STATUS))throw t.getProgramInfoLog(h);return h}(K,"#version 300 es\nprecision highp float;uniform vec2 X34;in float a_fontOffset,a_dither;in vec3 a_X3c;in vec2 a_position,a_uv;uniform float X36;uniform vec2 X37,X38;out vec4 X3c,X3d;out vec2 st;vec2 v;void main(){vec4 f=vec4(2./X34.s,-2./X34.t,-1,1);gl_Position=vec4(a_position.st*f.st+f.pq,0,1);X3c=vec4(a_X3c,1);float u=X38.s;v.s=mod(a_fontOffset,u);v.t=floor(a_fontOffset/u);st=(a_uv+v)/X38;}\n","#version 300 es\nprecision highp float;uniform sampler2D X35;uniform vec4 X33;in vec4 X3c;in vec2 st;out vec4 color;void main(){color=mix(X33,X3c,texture(X35,st).s);}\n")),dt={X3cs:new e(K,"a_X3c",3,393216),X61:new e(K,"a_fontOffset",1,393216),positions:new e(K,"a_position",2,393216),uvs:new e(K,"a_uv",2,393216)},gt=new y(0,0,Array),ft=K.createTexture();{K.bindTexture(K.TEXTURE_2D,ft),K.pixelStorei(K.UNPACK_ALIGNMENT,1);const t=0,e=K.LUMINANCE,i=H.X25*H.X21,s=H.X26*H.X22,r=0,n=K.LUMINANCE,h=K.UNSIGNED_BYTE,o=function(t,e){const i=function(t){return new Uint8Array(atob(t).split("").map((t=>t.charCodeAt(0))))}(t),s=new Uint8Array(e);for(let t=0;t<e;t++){const e=Math.floor(t%8),r=Math.floor(t/8);s[t]=b(i[r],e)}return s}(H.X24.join(""),i*s).map((t=>255*t));K.texImage2D(K.TEXTURE_2D,t,e,i,s,r,n,h,o),K.texParameteri(K.TEXTURE_2D,K.TEXTURE_WRAP_S,K.CLAMP_TO_EDGE),K.texParameteri(K.TEXTURE_2D,K.TEXTURE_WRAP_T,K.CLAMP_TO_EDGE),K.texParameteri(K.TEXTURE_2D,K.TEXTURE_MIN_FILTER,K.NEAREST),K.texParameteri(K.TEXTURE_2D,K.TEXTURE_MAG_FILTER,K.NEAREST)}function ut(t){t>0?st++:st=t<0?Math.max(1,st-1):0,X=!0}globalThis.addEventListener("keydown",(t=>{"i"==t.key?V=!V:"n"==t.key?et=!et:"f"==t.key?it=!it:"s"==t.key?tt=!tt:"t"==t.key?q=!0:"v"==t.key?J=!0:"p"==t.key?Z=1:"P"==t.key?Z=4:"0"==t.key?ut(0):"ArrowUp"==t.key?ut(1):"ArrowDown"==t.key?ut(-1):"c"==t.key?document.body.style.cursor="none"==document.body.style.cursor?"auto":"none":"f"==t.key?document.body.requestFullscreen&&document.body.requestFullscreen().catch((t=>console.warn(t))):"d"==t.key&&($=!$)}));{let t;globalThis.addEventListener("resize",(e=>{clearTimeout(t),W.style.visibility="hidden",W.width=0,W.height=0,t=setTimeout((t=>{X=!0,W.style.visibility="visible"}),100)}))}let pt=!0;const wt=new Worker(URL.createObjectURL(new Blob([""+N+T+z+O+G+y+C+j+R+"("+I.toString()+")()"])));wt.postMessage({op:"init",hash:(X31.float()+1).toString(16).substring(2),X14:U,X1f:L}),wt.onmessage=function(t){"X1e"==t.data.op&&(xt.writeData(t.data.data),pt=!0)};const mt=function(t,e,i){const s=Math.max(1,t),r=Math.max(1,e),n=Math.max(1,Math.floor(s/2)),h=new y(s+n,r+n);h.data.fill(0),h.X1(0,n,s,r,i[0]);for(let t=0;t<n;t++){for(let e=0;e<s;e++)h.set(h.width-e-t-1,t,i[1]);for(let e=0;e<r;e++)h.set(h.width-t-1,e+1+t,i[2])}return{width:s+n,height:r+n,w:s,h:r,sx:-n,sy:n,data:h.data}}(L.VoxelWidth,L.VoxelHeight,L.Texture),xt=new class{constructor(t){this.X12=0,this.X1e=[new C(0,0,0,Uint8Array),new C(0,0,0,Uint8Array)],this.box=t,this.ALIGN_TOP=Symbol(),this.ALIGN_BOTOM=Symbol()}writeData(t){this.X1e[(this.X12+1)%2].X6(t)}X11(){this.X12=(this.X12+1)%2}copy(){this.X1e[(this.X12+1)%2].X6(this.X1e[this.X12].data)}X13(){return this.X1e[this.X12]}getSize(){const t=this.X1e[this.X12];return{width:t.width,height:t.height,depth:t.depth}}resize(t,e,i){this.X1e.forEach((s=>s.resize(t,e,i)))}X65(t,e,i,s,r,n=!0){const o=this.X1e[this.X12],a=this.box,A=o.width*a.w-o.depth*a.sx,l=-(o.depth-1)*a.sx,c=(o.height-1)*a.h,d=Math.floor((t.width-A)/2)+l,g=r+c+i,f=o.width/o.height,u=o.width/o.depth;if(n){const i=.001*-e,r=3*Math.cos(.01*e),n=h(Math.cos(.02*e),-1,1,.5,2),A=h(Math.cos(.01*e),-1,1,.2,.6),l=A+.1;for(let e=0;e<o.height;e++){const h=((e+s)/o.height*2-1)/f;for(let c=0;c<o.depth;c++){const f=(c/o.depth*2-1)/u;for(let u=0;u<o.width;u++){if(1===o.get(u,e,c)){const p=u/o.width*2-1,w=(NOISE(p*n,h*n+i,f*n+r)+1)/2;if(w>A){const i=w<l;Y(t,u*a.w+c*a.sx+d,-e*a.h+c*a.sy+g,a.width,a.height,a.data,u,Math.floor(e+s),c,i)}}}}}}else for(let e=0;e<o.height;e++)for(let i=0;i<o.depth;i++)for(let r=0;r<o.width;r++)if(1===o.get(r,e,i)){Y(t,r*a.w+i*a.sx+d,-e*a.h+i*a.sy+g,a.width,a.height,a.data,r,Math.floor(e+s),i,!1)}}}(mt),Mt=new class{constructor(t=1e3){this.X5a=t,this.fps=0,this.X59=0,this.X68=0}tick(t){return t>=this.X68+this.X5a&&(this.fps=this.X59*this.X5a/(t-this.X68),this.X68=t,this.X59=0),this.X59++,this.fps}}(1e3);let yt=0,Et=-1e3,Dt=0;function _t(t,e){const i=String(t);return i.length>e?"..."+i.substring(i.length-e+3):i}requestAnimationFrame((function e(s){requestAnimationFrame(e);const r=s-Et,n=1e3/rt;if(r<n)return;if(Et=s-r%n,X){X=!1;const e=k.canvasWidth||innerWidth,i=k.canvasHeight||innerHeight;let s;W.width=e,W.height=i,s=0==st?e<1400?1:2:st;const r=0,n=0,o=0,a=0;let A,l;A=Math.floor((e-2*r)/((H.X21+o)*s)),l=Math.floor((i-2*n)/((H.X22+a)*s)),A=2*Math.floor(A/2),l=2*Math.floor(l/2),(A+2)*(l+2)>=ht&&(l=Math.floor(ht/(A+2))-2),A=Math.max(2,A),l=Math.max(2,l);const c=Math.floor((e-(A*H.X21*s+(A-1)*o))/2),d=Math.floor((i-(l*H.X22*s+(l-1)*a))/2),g=H.X21*s,f=H.X22*s,u=H.X21*s+o,p=H.X22*s+a;let w=0;for(let e=0;e<l;e++)for(let i=0;i<A;i++){const s=c+i*u,r=d+e*p;t(w++,dt.positions.data,dt.uvs.data,s,r,g,f)}dt.uvs.enable(ct.program),dt.uvs.bufferData(K.STATIC_DRAW),dt.uvs.X4a=!0,dt.positions.enable(ct.program),dt.positions.bufferData(K.STATIC_DRAW),dt.positions.X4a=!0,gt.resize(A,l,(()=>new S));const m=U.X4f,x=L.Width,M=L.Depth,y=m*M*mt.sy+mt.h,E=m*mt.h,D=l+y+2*E+1,_=Math.ceil(D/E),b=m*x,T=m*M,z=m*_;xt.resize(b,z,T),wt.postMessage({op:"resize",size:{w:x,h:_,d:M}});for(let t=0;t<T;t++){const e=At.base.map((e=>h(t,0,T-1,.05,e)));At.base_LUT[t]=e,At.accent_LUT[t]=[];for(let i=0;i<At.accent.length;i++){const s=At.accent[i];At.accent_LUT[t][i]=[s[0]+e[0],s[1]+e[1],s[2]+e[2]].map((t=>Math.min(t,1)))}}yt=0,pt=!0,Dt=0}const o=U.X4f*mt.h*2,a="↓"==L.Direction?1:-1;let A,l,c=-yt%o*a;if(1==a)A=-c/mt.h,l=-(xt.getSize().depth+1)*mt.sy+1;else{A=xt.getSize().height-c/mt.h-1;l=-(xt.getSize().depth*mt.sy+mt.h)-2*(U.X4f*mt.h)}let d=!0;0==Math.abs(c)?pt?(xt.X11(),wt.postMessage({op:"shiftY",dir:a,X56:2}),pt=!1,d=!1):(console.log("Couldn’t compute X67 in X69… skipping."),d=!0):d=!1;if(gt.data.forEach((t=>{t.index=_[" "],t.fg=[0,0,0],t.z=-1})),xt.X65(gt,Dt++,c,A,l,et),$)gt.data.forEach((t=>{-1!==t.z&&(t.fg=[h(t.x,0,xt.getSize().width-1,0,1),h(t.y,0,xt.getSize().height-1,0,1),h(t.z,0,xt.getSize().depth-1,0,1)])}));else{const t=At.accent.length,e=Math.floor(.66*At.accent_LUT.length);gt.data.forEach((i=>{if(-1!==i.z){const s=tt?i.z:e,r=tt?i.z:t-1;if(i.accent&&it){const e=lt(i,t);i.fg=At.accent_LUT[r][e]}else i.fg=At.base_LUT[s]}}))}if(V){const t=Math.round(Mt.tick(s)),e="~F~",i=15;let r="";r+=e+"\n",r+="fps".padEnd(i)+t+"←"+rt+"\n",r+="frame".padEnd(i)+yt+"\n",r+=e+"\n",r+="cols".padEnd(i)+gt.width+"\n",r+="rows".padEnd(i)+gt.height+"\n",r+="width".padEnd(i)+K.canvas.width+"\n",r+="height".padEnd(i)+K.canvas.height+"\n",r+="scale".padEnd(i)+st+"\n",r+="pixel".padEnd(i)+devicePixelRatio+"\n",r+=e+"\n",r+="hash".padEnd(i)+_t(tokenData.hash,14)+"\n",r+="tokenId".padEnd(i)+_t(tokenData.tokenId,14)+"\n",r+=e+"\n";for(const t in L)r+=t.padEnd(i)+_t(L[t],i)+"\n";r+=e+"\n",r+="i".padEnd(2).padStart(i)+"toggle info\n",r+=e+"\n",r+="t".padEnd(2).padStart(i)+"save TXT\n",r+="p".padEnd(2).padStart(i)+"save PNG∙1\n",r+="P".padEnd(2).padStart(i)+"save PNG∙4\n",r+=e+"\n",r+="↓↑".padEnd(3).padStart(i)+"change scale\n",r+="0".padEnd(2).padStart(i)+"reset scale\n",r+="s".padEnd(2).padStart(i)+"toggle shading\n",r+=e+"\n",r+="c".padEnd(2).padStart(i)+"hide cursor\n",r+="f".padEnd(2).padStart(i)+"fullscreen\n",r+=e+"\n";const n=2*i;r.trim().replaceAll(e,"".padEnd(n,"─")).split("\n").forEach(((t,e)=>{t.padEnd(n," ").split("").map((t=>D.indexOf(t))).forEach(((t,i)=>{const s=gt.get(i,e);null!==s&&(s.index=t,s.fg=at)}))}))}0==d&&yt++;gt.data.forEach(((t,e)=>{!function(t,e,i){let s=2*t*3;for(let t=0;t<6;t++)e[s++]=i}(e,dt.X61.data,t.index),function(t,e,i){let s=6*t*3;for(let t=0;t<6;t++)e[s++]=i[0],e[s++]=i[1],e[s++]=i[2]}(e,dt.X3cs.data,t.fg)})),dt.X61.X4a=!0,dt.X3cs.X4a=!0,K.bindTexture(K.TEXTURE_2D,null),K.bindFramebuffer(K.FRAMEBUFFER,null),K.viewport(0,0,K.canvas.width,K.canvas.height);K.activeTexture(K.TEXTURE0+0),K.bindTexture(K.TEXTURE_2D,ft),ct.use(),ct.set("X34",K.canvas.width,K.canvas.height),ct.set("X38",H.X25,H.X26),ct.set("X35",0),ct.set("X33",...ot,1),Object.keys(dt).forEach((t=>{dt[t].X4a&&(dt[t].enable(ct.program),dt[t].bufferData(K.DYNAMIC_DRAW),dt[t].X4a=!1)}));const g=gt.width*gt.height;if(K.clearColor(...ot,1),K.clear(K.COLOR_BUFFER_BIT),K.drawArrays(K.TRIANGLES,0,6*g),Z>0){const t=W.width*Z,e=W.height*Z,s=function(){if(!document.querySelector("#export_canvas")){const t=document.createElement("canvas");t.id="export_canvas",t.style.display="none",t.style.imageRendering="pixelated",document.body.appendChild(t)}return document.querySelector("#export_canvas")}();s.width=t,s.height=e;const r=s.getContext("2d");r.imageSmoothingEnabled=!1,r.drawImage(W,0,0,t,e);!function(t,e){e.toBlob((e=>i(e,t)))}(nt+"_"+Date.now()+"_×"+Z+".png",s),Z=0}if(q){let t="";gt.loop(((e,i,s,r,n)=>{t+=D[e.index]+(i==n-1?"\n":"")})),i(new Blob([t],{type:"text/plain;charset=utf-8"}),nt+"_"+Date.now()+"_scene.txt"),q=!1}if(J){const{width:t,height:e,depth:s}=xt.getSize();let r="";r+=t+" "+e+" "+s+"\n",xt.X13().loop(((t,e,i,s,n,h,o,a)=>{r+=t+(e==h-1?"\n":"")})),i(new Blob([r],{type:"text/plain;charset=utf-8"}),nt+"_"+Date.now()+"_X1e.txt"),J=!1}}))}();
!function(){"use strict";function t(t,e,i,s,r,n,h){let o=6*t*2,a=6*t*2;const A=s,l=r,c=s+n,d=r,g=s+n,f=r+h,u=s,p=r+h;e[o++]=A,e[o++]=l,e[o++]=c,e[o++]=d,e[o++]=u,e[o++]=p,e[o++]=u,e[o++]=p,e[o++]=c,e[o++]=d,e[o++]=g,e[o++]=f,null!==i&&(i[a++]=0,i[a++]=0,i[a++]=1,i[a++]=0,i[a++]=0,i[a++]=1,i[a++]=0,i[a++]=1,i[a++]=1,i[a++]=0,i[a++]=1,i[a++]=1)}class e{constructor(t,e,i,s){this.gl=t,this.attributeName=e,this.buffer=t.createBuffer(),this.X52=i,this.X53=s,this.data=new Float32Array(s*i)}enable(t){const e=this.gl,i=e.getAttribLocation(t,this.attributeName);e.bindBuffer(e.ARRAY_BUFFER,this.buffer),e.enableVertexAttribArray(i),e.vertexAttribPointer(i,this.X52,this.gl.FLOAT,!1,0,0)}bufferData(t=this.gl.DYNAMIC_DRAW){const e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,this.buffer),e.bufferData(e.ARRAY_BUFFER,this.data,t)}}const i=function(){const t=document.createElement("a");return document.body.appendChild(t),t.style.display="none",function(e,i){t.href=URL.createObjectURL(e),t.download=i,t.click()}}();function s(t,e,i){const s=t.createShader(i);if(t.shaderSource(s,e),t.compileShader(s),!0!==t.getShaderParameter(s,t.COMPILE_STATUS))throw t.getShaderInfoLog(s);return s}function r(t){return[(t>>8&15)/15,(t>>4&15)/15,(15&t)/15]}const n={None:[0],Molten:[1792],Electro:[7],"Console 1":[112],"Console 2":[112,240],F00:[3276,3840],"0F0":[3276,240],A00:[3276,2560],A0A:[3276,2570],C77:[3276,3191],AAF:[3276,2735],Gray:[1638,3276],"EGA 1":[2570,3935,2640,4085,2730,160,170,1535,2560,3925],"EGA 2":[2735,1455,1370,2565,3840,4010,4095],"EGA 3":[1280,2730,2730,2730,2730,1365,2560,2730,1365,170],"EGA 4":[1365,10,1375,160,1525,170,1535,2560,3925,2570,3935,2640,4085,2730,4095],"EGA 5":[10,1375,1450,1525,4085,4095,2730,3925,2570],"EGA 6":[4090,3930,3920,3845,2565,90,170,1365],"EGA 7":[1285,2570,3855,2730,4e3,4080,4095],"CGA 1":[1535,3935,4095],"CGA 2":[170,2570,2730],"4 Bit":[1365,1375,1525,1535,3925,3935,4085,2730,10,160,170,2560,2570,2720,4095]};function h(t,e,i,s,r){return s+(t-e)/(i-e)*(r-s)}const o={corner:[16,152,0],hexa:[16,186,16],l:[0,152,0],penta:[16,178,16],t:[0,184,0],terminal:[0,144,0]},a=[0,0,0],A=[0,0,0,0,0],l={bar_x:[0,1048544,1016800,1048544,0],cross:[0,15728622,15728622,15728622,0],hexa:[473536,15728622,15728622,15728622,473536],penta:[473536,15728622,15728622,15728622,0],t:[0,15728608,15728608,15728608,0],tetra:[473536,15694798,15694798,15694798,0]},c={l_chamfer:[0,36078,36078,36078,0],l_sharp:[0,507374,507374,507374,0],corner_chamfer:[469440,15694720,15692544,15622656,0],corner_sharp:[473536,15694784,15694784,15694784,0],bar_x:[0,1048544,1048544,1048544,0],bar_y:[0,15153614,15153614,15153614,0],bar_z:[473536,473536,473536,473536,473536],terminal_chamfer:[0,15142912,15153280,15142912,0],terminal_sharp:[0,15153600,15153600,15153600,0],thin_joint:[0,14798,4340174,14798,0]},d={thin_bar_y:[0,0,4329604,0,0],thin_corner:[4096,4096,7300,0,0],thin_hexa:[4096,4096,4357252,4096,4096],thin_l:[0,0,7300,0,0],thin_t:[0,0,4357120,0,0],thin_terminal:[0,0,4329472,0,0]},g={X4f:5,data:[{X20:A},{X20:c.corner_sharp},{X20:c.l_sharp},{X20:c.terminal_sharp},...Object.entries(l).map((t=>({X20:t[1]}))),...Object.entries(d).map((t=>({X20:t[1]})))]},f={X4f:5,data:[{X20:A},{X20:c.corner_sharp},{X20:c.l_sharp},{X20:c.terminal_sharp},{X20:c.bar_y,X18:5,X51:!0},...Object.entries(l).map((t=>({X20:t[1]}))),...Object.entries(d).map((t=>({X20:t[1]})))]},u={X4f:5,data:[{X20:A,X18:5},{X20:c.corner_chamfer},{X20:c.l_chamfer},{X20:c.terminal_chamfer},...Object.entries(l).map((t=>({X20:t[1]})))]},p={X4f:5,data:[{X20:A,X18:5},{X20:c.corner_chamfer,X18:10},{X20:c.l_chamfer},{X20:c.terminal_chamfer},...Object.entries(l).map((t=>({X20:t[1]})))]},w={X4f:5,data:[{X20:A,X18:5},{X20:c.bar_y,X18:10,X51:!0},{X20:c.corner_chamfer,X18:10},{X20:c.l_chamfer},{X20:c.terminal_chamfer},...Object.entries(l).map((t=>({X20:t[1]})))]},m={X4f:5,data:[{X20:A,X18:5},...Object.entries({bar_x:[405504,4096,397312,262144,405504],j1:[0,540672,684032,131072,405504],j2:[6336,64,276544,262144,405504],j3:[0,1056,271840,262144,405504],j4:[0,310272,295936,262144,405504],j5:[0,234636,164876,131072,405504],terminal:[405504,0,0,0,0]}).map((t=>({X20:t[1]})))]},x={X4f:3,data:[{X20:a,X18:30},...Object.entries(o).map((t=>({X20:t[1]})))]},M=[[8,{name:"T5AS",data:g}],[2,{name:"T5ASY",data:f}],[2,{name:"T5AC",data:u}],[2,{name:"T5ACC",data:p}],[1,{name:"T5ACY",data:w}],[.5,{name:"T5B",data:m}],[1,{name:"T3Y",data:{X4f:3,data:[{X20:a,X18:30},{X20:[0,146,0],X18:10,X51:!0},...Object.entries(o).map((t=>({X20:t[1]})))]}}],[1,{name:"T3",data:x}]];class y{constructor(t,e,i=Array){this.type=i,this.resize(t,e)}resize(t,e,i=0){this.width=Math.max(0,t)||0,this.height=Math.max(0,e)||0,this.data=new this.type(t*e),"function"==typeof i?this.fill(i):this.data.fill(i)}X1(t,e,i,s,r){for(let n=0;n<s;n++)for(let s=0;s<i;s++)this.set(t+s,e+n,r);return this}fill(t){let e=0;for(let i=0;i<this.height;i++)for(let s=0;s<this.width;s++)this.set(s,i,t(s,i,e++,this.width,this.height));return this}loop(t){let e=0;for(let i=0;i<this.height;i++)for(let s=0;s<this.width;s++)t(this.data[e],s,i,e++,this.width,this.height);return this}getMaxValue(){let t=0;return this.data.forEach((e=>t=Math.max(e,t))),t}X5b(t){if(t.width!=this.width||t.height!=this.height)return!1;for(let e=0;e<this.data.length;e++)if(this.data[e]!==t.data[e])return!1;return!0}X2(t,e){return t=(t+this.width)%this.width,e=(e+this.height)%this.height,this.data[t+e*this.width]}get(t,e){return t<0||e<0||t>=this.width||e>=this.height?null:this.data[t+e*this.width]}X3(t,e){const i=1-Math.abs(Math.abs(t)%2-1),s=1-Math.abs(Math.abs(e)%2-1),r=Math.round(i*(this.width-1)),n=Math.round(s*(this.height-1));return this.get(r,n)}sample(t,e){const i=t*this.width-.5,s=e*this.height-.5;let r=Math.floor(i),n=Math.floor(s),h=r+1,o=n+1;const a=i-r,A=s-n,l=E(this.get(r,n),this.get(h,n),a),c=E(this.get(r,o),this.get(h,o),a);return E(l,c,A)}X16(t=0,e=0,i=0){let s,r;1==i||2==i?(s=this.height,r=this.width):(s=this.width,r=this.height);const n=new y(s,r,this.type);for(let s=0;s<n.height;s++)for(let r=0;r<n.width;r++){let h,o;0==i?(h=r,o=s):1==i?(h=n.height-s-1,o=r):2==i?(h=n.width-r-1,o=n.height-s-1):3==i&&(h=s,o=n.width-r-1),h=t?n.width-1-h:h,o=e?n.height-1-o:o,n.set(h,o,this.get(r,s))}return n}getRect(t,e,i,s){const r=new Grid(i,s,this.type);for(let i=0;i<r.height;i++)for(let s=0;s<r.width;s++)r.set(s,i,this.get(s+t,i+e));return r}set(t,e,i){t<0||e<0||t>=this.width||e>=this.height||(this.data[t+e*this.width]=i)}X6(t){t.length==this.data.length&&t.forEach(((t,e)=>this.data[e]=t))}X5(t,e,i,s,r){for(let n=0;n<s;n++)for(let s=0;s<i;s++)this.set(t+s,e+n,r[s+i*n])}X4(t,e,i){this.X5(t,e,i.width,i.height,i.data)}toString(){let t="";for(let e=0;e<this.height;e++){for(let i=0;i<this.width;i++)t+=this.get(i,e);t+="\n"}return t}print(){console.log("%c"+this.toString(),"font-family: monospace;")}}function E(t,e,i){return t*(1-i)+e*i}const D=["◆☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼"," !\"#$%&'()*+,-./0123456789:;<=>?","@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_","`abcdefghijklmnopqrstuvwxyz{|}~╳","↖↗↘↙ñѪº¿╱╲½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐","└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀","αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■□"].join("").split(""),_={};D.forEach(((t,e)=>_[t]=e));const b=(t,e)=>(t>>e)%2;class T{INV_MAX=1/2**32;int(){}float(t=1){return this.int()*this.INV_MAX*t}probability(t){return this.float()<t}norm(t=1){return 2*(this.int()*this.$INV_MAX-.5)*t}X54(t,e){const i=this.X57(t,e);return this.float()<.5?i:-i}X57(t,e){return this.float()*(e-t)+t}X55(t,e){const i=(0|e)-(t|=0);return i?t+this.int()%i:t}X57Uint(t,e){const i=(e>>>0)-(t>>>=0);return i?t+this.int()%i:t}X58(){let t;return t=1==arguments.length&&Array.isArray(arguments[0])?arguments[0]:[...arguments],t[this.X55(0,t.length)]}X6a(t){for(let e=t.length-1;e>0;e--){const i=Math.floor(this.float()*(e+1));[t[e],t[i]]=[t[i],t[e]]}return t}X3eObj(t){const e=Object.keys(t).map((e=>[t[e].X18,e]));return this.X3e(e)}X3e(t){const e=t.map((t=>t[0])),i=t.map((t=>t[1])),s=[];for(let t=0;t<e.length;t++)s[t]=e[t]+(s[t-1]||0);const r=s[s.length-1]*this.float();for(let t=0;t<i.length;t++)if(s[t]>=r)return i[t]}}class z extends T{constructor(t){super(),this.buffer=new Uint32Array(4),this.seed(t)}copy(){return new z(this.buffer)}bytes(){return new Uint8Array(this.buffer.buffer)}int(){const t=this.buffer,e=(t[0]+t[1]>>>0)+t[3]>>>0;return t[3]=t[3]+1>>>0,t[0]=t[1]^t[1]>>>9,t[1]=t[2]+(t[2]<<3)>>>0,t[2]=(t[2]<<21|t[2]>>>11)+e>>>0,e}seed(t){return this.buffer.set(t),this}}function N(t){let e=2166136261;for(let i=0;i<t.length;i++)e=Math.imul(e^t.charCodeAt(i),16777619);return function(){return e+=e<<13,e^=e>>>7,e+=e<<3,e^=e>>>17,(e+=e<<5)>>>0}}class S{constructor(){this.x=0,this.y=0,this.z=0,this.index=0,this.accent=0,this.fg=[0,0,0]}}function v(t){return t-Math.floor(t)}function B(t,e,i){return(1-i)*t+i*e}class C{constructor(t,e,i,s=Array){this.type=s,this.resize(t,e,i)}resize(t,e,i,s=0){this.width=Math.max(0,t)||0,this.height=Math.max(0,e)||0,this.depth=Math.max(0,i)||0,this.data=new this.type(t*e*i),"function"==typeof s?this.fill(s):this.data.fill(s)}fillBox(t,e,i,s,r,n,h){for(let o=0;o<n;o++)for(let n=0;n<r;n++)for(let r=0;r<s;r++)this.set(t+r,e+n,i+o,h);return this}fill(t){let e=0;for(let i=0;i<this.depth;i++)for(let s=0;s<this.height;s++)for(let r=0;r<this.width;r++)this.set(r,s,i,t(r,s,i,e++,this.width,this.height,this.depth));return this}loop(t){let e=0;for(let i=0;i<this.depth;i++)for(let s=0;s<this.height;s++)for(let r=0;r<this.width;r++)t(this.data[e],r,s,i,e++,this.width,this.height,this.depth);return this}getMaxValue(){let t=0;return this.data.forEach((e=>t=Math.max(e,t))),t}X5b(t){if(t.width!=this.width||t.height!=this.height||t.depth!=this.depth)return!1;for(let e=0;e<this.data.length;e++)if(this.data[e]!==t.data[e])return!1;return!0}X2(t,e,i){return t=(t+this.width)%this.width,e=(e+this.height)%this.height,i=(i+this.depth)%this.depth,this.data[t+e*this.width+i*this.width*this.height]}get(t,e,i){return t<0||t>=this.width||e<0||e>=this.height||i<0||i>=this.depth?null:this.data[t+e*this.width+i*this.width*this.height]}X3f(t,e,i,s){const r=new C(this.width,this.height,this.depth);for(let n=0;n<r.depth;n++)for(let h=0;h<r.height;h++)for(let o=0;o<r.width;o++){let a=this.get(o-t,h-e,n-i);null===a&&(a="function"==typeof s?s(o,h,n):s),r.set(o,h,n,a)}return r}X17(t=0,e=0,i=0){const s=new C(this.width,this.height,this.depth,this.type);for(let r=0;r<this.depth;r++)for(let n=0;n<this.height;n++)for(let h=0;h<this.width;h++){const o=t?s.width-1-h:h,a=e?s.height-1-n:n,A=i?s.depth-1-r:r;s.set(o,a,A,this.get(h,n,r))}return s}X46(){const t=new C(this.width,this.depth,this.height,this.type);for(let e=0;e<this.depth;e++)for(let i=0;i<this.height;i++)for(let s=0;s<this.width;s++){const r=s,n=this.depth-e-1,h=i;t.set(r,n,h,this.get(s,i,e))}return t}X47(){const t=new C(this.depth,this.height,this.width,this.type);for(let e=0;e<this.depth;e++)for(let i=0;i<this.height;i++)for(let s=0;s<this.width;s++){const r=e,n=i,h=this.width-s-1;t.set(r,n,h,this.get(s,i,e))}return t}X48(){const t=new C(this.height,this.width,this.depth,this.type);for(let e=0;e<this.depth;e++)for(let i=0;i<this.height;i++)for(let s=0;s<this.width;s++){const r=this.height-i-1,n=s,h=e;t.set(r,n,h,this.get(s,i,e))}return t}set(t,e,i,s){return t<0||t>=this.width||e<0||e>=this.height||i<0||i>=this.depth?null:void(this.data[t+e*this.width+i*this.width*this.height]=s)}X6(t){t.length==this.data.length&&t.forEach(((t,e)=>this.data[e]=t))}X4(t,e,i,s){for(let r=0;r<s.depth;r++)for(let n=0;n<s.height;n++)for(let h=0;h<s.width;h++)this.set(t+h,e+n,i+r,s.get(h,n,r))}toString(){let t="";for(let e=0;e<this.depth;e++){for(let i=0;i<this.height;i++){for(let s=0;s<this.width;s++)t+=this.get(s,i,e);t+="\n"}t+="\n"}return t}print(){console.log("%c"+this.toString(),"font-family: monospace;")}}function Y(t,e,i,s,r,n,h,o,a,A){for(let l=0;l<r;l++)for(let r=0;r<s;r++){const c=n[r+s*l];if(0!=c){const s=t.get(e+r,i+l);null!=s&&(s.index=_[c],s.x=h,s.y=o,s.z=a,s.accent=A)}}}class R{constructor(t){this.X14=t,this.X67=new C(0,0,0)}resize(t=this.X67.width,e=this.X67.height,i=this.X67.depth){this.X67.resize(t,e,i),this.X67.fill(((t,e,i,s)=>new j(t,e,i)))}init(){this.X67.data.forEach((t=>{t.X4cd=!1,t.X42=Array(this.X14.length).fill().map(((t,e)=>e))}))}X4b(t=[0,0,0,0,0,0],e=0){let i=!1;return this.X67.data.filter((t=>{if(t.X45())return!1;const e=t.X19(this.X67);for(const t of e)if(t&&t.X45())return!0;return!1})).forEach((s=>{s.X19(this.X67).forEach(((i,r)=>{i?s.X42=s.X42.filter((t=>{const e=this.X14[t];return i.X42.some((t=>e.fit[r].indexOf(t)>=0))})):t[r]&&(s.X42=s.X42.filter((t=>this.X14[t].fit[r].indexOf(e)>=0)))})),0==s.X42.length&&(i=!0)})),i}X4c(t,e=0){let i=1/0;const s=[];if(this.X67.data.forEach((t=>{if(!t.X45()){const e=t.getEntropy();e==i?s.push(t):e<i&&(s.length=0,s.push(t),i=e)}})),s.length>0){const i=t.X58(s),r=[];for(const t of i.X42)r.push([this.X14[t].X18,t]);const n=t.X3e(r);if(i.X4c(n),t.probability(e)){const t=this.X67.get(this.X67.width-i.x-1,i.y,i.z);if(t!=i){const e=this.X14[n].X1a.fx;-1!=t.X42.indexOf(e)&&t.X4c(e)}}return!1}return!0}X4cSlot(t,e,i,s){this.X67.get(t,e,i).X4c(s)}}class j{constructor(t,e,i){this.x=t,this.y=e,this.z=i,this.X4cd=!1,this.X42=[]}X19(t){return[t.get(this.x+1,this.y,this.z),t.get(this.x-1,this.y,this.z),t.get(this.x,this.y+1,this.z),t.get(this.x,this.y-1,this.z),t.get(this.x,this.y,this.z+1),t.get(this.x,this.y,this.z-1)]}X4c(t){this.X4cd=!0,this.X42.length=0,this.X42.push(t)}X45(){return this.X4cd}getValue(){return this.X4cd?this.X42[0]:null}getEntropy(){return this.X42.length}}class G{constructor(t,e,i,s){this.X3b=new C(e,i,s,Array),this.X3b.X6(t.X20),this.X18=void 0!==t.X18?t.X18:1,this.fit=[[],[],[],[],[],[]],this.X1a={fx:null}}print(){this.X3b.forEach((t=>t.print()))}}function P(t,e){for(let i=0;i<t.length;i++)if(t[i].X3b.X5b(e.X3b))return i;return-1}function O(t,e,i,s,r,n){if(0===e.X18)return;(!0!==e.X51?n:["i"]).forEach((n=>{const h=new G(e,i,s,r);n.split("").forEach((t=>{"x"==t?h.X3b=h.X3b.X46():"y"==t?h.X3b=h.X3b.X47():"z"==t&&(h.X3b=h.X3b.X48())}));const o=-1!==n.indexOf("m");if(h.X3b=h.X3b.X17(o,!1,!1),-1==P(t,h)){t.push(h);const r=t.length-1,n=new G(e,i,s);n.X3b=h.X3b.X16(1,0,0);let o=P(t,n);-1==o&&(t.push(n),o=t.length-1),n.X1a.fx=r,h.X1a.fx=o}}))}const I=function(){class t{constructor(t,e,i,s){this.min_x=t,this.min_y=e,this.X1d=i,this.X1c=s,this.shuffle()}shuffle(){this.X1b=o.X55(2,16),this.w=o.X55(2,7),this.h=o.X55(2,7),this.x=o.X55(this.min_x,this.X1c),this.y=o.X55(this.min_y,this.X1c),this.x=Math.max(this.min_x,Math.min(this.X1d-this.w+1,this.x)),this.y=Math.max(this.min_x,Math.min(this.X1c-this.h+1,this.y))}move(t){t%this.X1b==0&&this.shuffle()}}const e=new C(0,0,0,Uint8Array),i=new y(0,0,Uint8Array),s=new y(0,0,Uint8Array);let r,n,h,o,a,A;const l=[];let c;this.onmessage=function(y){if("init"==y.data.op){const t=N(y.data.hash);o=new z([t(),t(),t(),t()]),n=y.data.X14;const e=function(t){const e=[];return t.data.forEach((i=>{const s=i.X20.map((e=>BigInt(e).toString(2).padStart(t.X4f*t.X4f,"0"))).join(""),r={X20:s.split("").map((t=>"0"==t?0:1)),X18:void 0===i.X18?1:i.X18,X51:i.X51};!function(t,e,i,s,r,n){if(0===e.X18)return;const h=!0!==e.X51?n:["i"];h.forEach((n=>{const h=new G(e,i,s,r);if(n.split("").forEach((t=>{"x"==t?h.X3b=h.X3b.X46():"y"==t?h.X3b=h.X3b.X47():"z"==t&&(h.X3b=h.X3b.X48())})),-1==D(t,h)){t.push(h);const n=t.length-1,o=new G(e,i,s,r);o.X3b=h.X3b.X17(!0,!1,!1);let a=D(t,o);-1==a&&(t.push(o),a=t.length-1),o.X1a.fx=n,h.X1a.fx=a}}))}(e,r,t.X4f,t.X4f,t.X4f,d)})),function(t){for(let e=0;e<t.length;e++)for(let i=0;i<t.length;i++){const s=t[i],r=t[e];x(s,r)&&(s.fit[g].push(e),r.fit[f].push(i)),M(s,r)&&(s.fit[u].push(e),r.fit[p].push(i)),E(s,r)&&(s.fit[w].push(e),r.fit[m].push(i))}}(e),e}(n);h=new R(e),c=o.X55(2,7),r=y.data.X1f.Simmetry}else if("resize"==y.data.op){const{w:r,h:o,d}=y.data.size;h.resize(r,o,d),h.X67.data.forEach((t=>t.X4c(0))),e.resize(r*n.X4f,o*n.X4f,d*n.X4f),i.resize(r,d,0),s.resize(r,d,0);const g=r/2,f=d/2;l.length=0;for(let e=0;e<c;e++)l.push(new t(-g,-f,r+g-1,d+f-1));A=!0,a=0}else if("shiftY"==y.data.op){const t=y.data.dir*y.data.X56,c=[];h.X67=h.X67.X3f(0,t,0,((t,e,i)=>{const s=new j(t,e,i);return c.push(s),s})),h.X67.loop(((t,e,i,s)=>{t.x=e,t.y=i,t.z=s})),i.X6(s.data),s.data.fill(0);for(const t of l)t.move(a),s.X1(t.x,t.y,t.w,t.h,1);A&&(A=!1,i.X6(s.data)),a++;let d=!0,g=!1,f=0;const u=t>0?t-1:h.X67.height+t;for(;d;){for(c.forEach((t=>{const e=1==i.get(t.x,t.z),r=1==s.get(t.x,t.z);t.y==u&&e||t.y!=u&&r?t.X4c(0):(t.X42=Array(h.X14.length).fill().map(((t,e)=>e)),t.X4cd=!1)}));!g&&(d=h.X4b([1,1,0,0,1,1],0),!d);)g=h.X4c(o,r);if(f++>100){console.warn("Max tries reached!"),c.forEach((t=>{t.X45()||t.X4c(0)}));break}}h.X67.loop(((t,i)=>{const s=t.getValue()||0,r=h.X14[s];e.X4(t.x*n.X4f,t.y*n.X4f,t.z*n.X4f,r.X3b)})),postMessage({op:"X1e",data:e.data})}};const d=["i","x","y","xx","xy","yx","yy","xxx","xxy","xyx","xyy","yxx","yyx","yyy","xxxy","xxyx","xxyy","xyxx","xyyy","yxxx","yyyx","xxxyx","xyxxx","xyyyx"];const g=0,f=1,u=2,p=3,w=4,m=5;function x(t,e){for(let i=0;i<t.X3b.depth;i++)for(let s=0;s<t.X3b.height;s++)if(t.X3b.get(t.X3b.width-1,s,i)!==e.X3b.get(0,s,i))return!1;return!0}function M(t,e){for(let i=0;i<t.X3b.depth;i++)for(let s=0;s<t.X3b.width;s++)if(t.X3b.get(s,t.X3b.height-1,i)!==e.X3b.get(s,0,i))return!1;return!0}function E(t,e){for(let i=0;i<t.X3b.height;i++)for(let s=0;s<t.X3b.width;s++)if(t.X3b.get(s,i,t.X3b.depth-1)!==e.X3b.get(s,i,0))return!1;return!0}function D(t,e){for(let i=0;i<t.length;i++)if(t[i].X3b.X5b(e.X3b))return i;return-1}};const H={X28:"Sat8",X21:8,X22:8,X24:["CDw8NggcCAD/AP/wHgj8CBRCfn8cHBwA/zzDwDMYhGsipdt/Pms+GOdmmaAzOPwcQYH/f39/f","zzDQr2eHiiEdyKl2z4+az48w0K9GwwIxBwUmeccHAgIGOdmmRs/DOZrCEJ+CAgcHAD/PMMODA","5nCAA8PAAAAAAA/wD/AAAGAwABQAgz/j4ADAwMAAAAAAAAB3AcM9tjAB4eDBAEACQAAB98PjP","bDgA/PwwwBgNmCH9/fwgz3jIADAwMf38D/xw+H3w+M9gmPz8MPzAGA2Y+HAdwHADYOD8eDB4Q","BH8kfwgBQAgz2GM/DAwMAAAAAAAAAAAAAAA+AD8AAAAAAAAAAAAMNjYIQxwYGAwAAAAAAEAAH","jY2PmM2GAwYEgwAAABgAB42fwswHAwGMAwMAAAAMAAMADY+GE4ABjA/PwA/ABgADAB/aAw7AA","YwDAwAAAAMAAAANj5mMwAMGBIMDAAMBgAMADYIY24AGAwAAAwADAMAAAAAAAAAAAAAAAAGAAA","APhgeHjB/PH8+PgAAMAAGHmMcMzM4AwZjY2MMDBgADDNzHjAwPD8DMGNjDAwMPxgYaxgYHDZg","Pxg+fgAABgAwDGcYDDB/YGMMY2AAAAwAGAxjGAYzMGNjDGMwDAwYPwwAPn4/HjA+Pgw+HgwMM","AAGDAAAAAAAAAAAAAAABgAAAAA+HD8+Hz8/PmM/eGMDY2M+YzZjYzMDA2NjDDAzA3dnY3tjYw","NjAwMDYwwwGwN/b2N7Yz8DYx8fe38MMA8Da3tje39jA2MDA2NjDDAbA2tzYwNjY2MzAwNjYww","zMwNjY2N+Yz8+Hz8DfmM/HmN/Y2M+AAAAAAAAAAAAAAAAAAAAAD8+Pz7/Y2NjY8N/HgMeDABj","Y2NjGGNjY2PDYAYGGB4AY2NjAxhjY2s2ZjAGDBgzAD9jPz4YYzZrHDwcBhgYAAADWxtgGGM2f","zYYBgYwGAAAAzMzYxhjHHdjGAMGYBgAAANuYz4YPhxjYxh/HkAeAAAAAAAAAAAAAAAAAAAAAA","D/DAADAGAAOAADDDAGDgAAAAwAAwBgAGwAAwAABgwAAAAYPjs+bj4MbjsOOGYMNzs+AGBnY3N","jPnNnDDA2DGtnYwB+YwNjfwxzYwwwHgxrY2MAY2djcwMMbmMMMDYMa2NjAH47Pm5+DGBjHjNm","HmtjPgAAAAAAAAA+AAAeAAAAAAAAAAAADAAAAAAAADgMB26BAAAAAAwAAAAAAAAMDAw7Qjtue","34+Y2NjY2N+DAwMACRncwcDDGNjazZjMAcMOAAYZ3MDPgxjNmsccxgMDAwAGDtuA2BsczZ3Nm","4MDAwMACQDYAM/OG4cImNgfjgMBwBCA2AAAAAAAAAAPgAAAAAAgR98AYBu3B4eDIABw8MMAAA","DYAJAO3YbMwBAAmNjAGwbBVBEIgDOGzMMIAQzMww2NglISBI73jYeDBAIG9sMG2wRRFAKZ/YA","AAYIEGzsHjY2IAJgBmPmPz8zBCDG9h5sG0ABfD5jxgAAHgJAY/sMAAAAAAAAAAAAAAABgPDAA","AAARKq7EBAQKAAAKCgAKCgQABFV7hAQECgAACgoACgoEABEqrsQEB8oAB8vKD8vKB8AEVXuEB","8QLz8QICggID8QH0SquxAQHygoHy8oLz8AHxARVe4QEBAoKBAoKCgAAAAQRKq7EBAQKCgQKCg","oAAAAEBFV7hAQECgoECgoKAAAABAQEAAQABAQKCgAKAAoACgQEBAAEAAQECgoACgAKAAoEBAQ","ABAAEPAo6Pjv/+j/7//w///w//8Q6AgIAAAIAAAAAAAQEAAQ8Cj46P/v6P/v/wAAEBAAEBAoA","CgAKCgAKAAAABAQABAQKAAoACgoACgAAAAQEAAQECgAKAAoKAAoACgAACgQAAAoEBAA/wAP8P","8oAAAoEAAAKBAQAP8AD/D/KP8AKPDwACj/EAD/AA/w//8A//gQEPj/EB/w/wAP8P8A/ygA8PA","oKP8AEP//D/AAABAoAAAQKCgQABD//w/wAAAQKAAAECgoEAAQ//8P8AAAECgAABAoKBAAEP//","D/AAADx/AH8AAAAYHBw4AAAAPgBmYwAGAAAAGDY2DG4AAGNuNgN/DH5mfn5jYxjdez5je2YDN","hgTZhvbf2M8mdtjYzNmAzYMM2YYfmM2ZrvbDmN7ZgM2BjNuGBg2NmZ2fmNjbjYDNn8eNhgYHH","c8ABg+YwAGAAAAAAMAAAAAAAAYAAAADAdwOBgMAB4AAHgbHgAAPwwcHGwYDG4zAAAYNzMAAAA","/cAdsGAA7MwAAGDMcHh4/DBwcDBg/AB4YABgzBh4SAAwHcAwYAG4AGBgbMz8eEj8AAAAMGww7","AAAAHgAAHh4AP39/DBsMAAAAABwAAAAAAAAAAAwOAAAAAAAYAAAAAA=="],X25:16,X26:14},F={X:t=>{const e=t.X55(1,3);return(t,i)=>Math.floor(t.x/e)%i},XYZ:t=>{const e=t.X55(1,5);return(t,i)=>Math.floor((t.x+t.y+t.z)/e)%i},Y:t=>{const e=t.X55(1,5);return(t,i)=>Math.floor(t.y/e)%i},Z:t=>{const e=t.X55(1,5);return(t,i)=>Math.floor(t.z/e)%i},Glitch:t=>(e,i)=>t.X55(0,i)};
**Descent** Custom software, Javascript, WebGL Variable dimensions, silent Mostly downwards, mostly gray. “Descent” is an attempt to represent depth using only characters from the code page 437 (CP437 for short, or “extended ASCII”). The viewer is taken on an infinite journey along a column made of characters; the characters lose their original meaning and become shapes, structure. **Keys** ``` i toggle info ↓↑ change scale n toggle noise/glitch s toggle shading f toggle colors p save 1× .png image P save 4× .png image t save 2d scene as .txt file v save voxel data as .txt file c hide cursor f enter fullscreen ``` Some visual settings can be set or changed through URL parameters; especially values for scale and fps will help adapt the project to different display sizes by adjusting character height and playback speed. **URL parameters** ``` scale pixel scaling fps frame rate cap canvasWidth force canvas width canvasHeight force canvas height noShading disable shading noNoise disable noise/glitch noColor disable color bgColor background color (0x000) voxelWidth voxel width voxelHeight voxel height texture custom texture (FTS) ```
A temporary arrangement of material is exactly as it sounds. Run a set of shapes through an algorithm and the same through human hands. Place them side by side, and in the space between paint, thread, pixel, and code we find that no iteration is final.
="start"?"end":"start"](d,y),r=s.rng(0,this.children.length-1),o={start:(l,h)=>0,middle:(l,h)=>l/2-h/2,end:(l,h)=>l-h,"start + random opposite":(l,h,d)=>t("end",d==r,l,h),"end + random opposite":(l,h,d)=>t("start",d==r,l,h),"start + first opposite":(l,h,d)=>t("end",d==0,l,h),"end + first opposite":(l,h,d)=>t("start",d==0,l,h),"start + last opposite":(l,h,d)=>t("end",d==this.children.length-1,l,h),"end + last opposite":(l,h,d)=>t("start",d==this.children.length-1,l,h),"start + half opposite":(l,h,d)=>t("end",d>=this.children.length/2,l,h),"end + half opposite":(l,h,d)=>t("start",d>=this.children.length/2,l,h),"start + alternate opposite":(l,h,d)=>t("end",d%2==0,l,h),"end + alternate opposite":(l,h,d)=>t("start",d%2==0,l,h)},u=o[this.item.align],m=o[this.item.justify],A=this.children.reduce((l,h)=>l+h.item.w,0),p=this.children.reduce((l,h)=>l+h.item.h,0);let w=e+m(this.item.w,A),E=i+m(this.item.h,p);for(const[l,h]of this.children.entries())this.item.side=="w"?h.layout(w,i+u(this.item.h,h.item.h,l),a-20-l):h.layout(e+u(this.item.w,h.item.w,l),E,a-20-l),w+=h.item.w,E+=h.item.h}}class D{constructor(e,i,a){this.x=0,this.y=0,this.z=0,this.w=e,this.h=i,this.isContainer=!1,this.rngs=null,this.margin=s.choice(Array.from({length:(a.shapegen.marginmax-.1)/.05+1},(t,r)=>.1+r*.05))*a.inch,this.colors=null,this.skip=!1,this.cutout=!1,this.reuse=!1,this.rotated=!1,this.offset=!1,this.type="normal"}_divisions(e,i,a,t,r){return Array.from({length:this[e]*a/i},(o,u)=>this[e]-i/a*u).filter(o=>o>=t).filter(o=>o<=r)}split(e,i,a){let t=new Array(i),r=0;for(let o=0;o<i;o++)t[o]=s.choice(this._divisions(e,a.inch,a.shapegen.factor,a.unit,this[e]-r-(i-o-1)*a.unit)),r+=t[o];if(e=="w")return t.map(o=>new D(o,this.h,a));if(e=="h")return t.map(o=>new D(this.w,o,a))}randomize(e){let i=s.choice(this._divisions("w",e.inch,e.shapegen.factor,Math.max(e.unit,this.w*e.shapegen.min),Math.max(e.unit*2,this.w*e.shapegen.max))),a=s.choice(this._divisions("h",e.inch,e.shapegen.factor,Math.max(e.unit,this.h*e.shapegen.min),Math.max(e.unit*2,this.h*e.shapegen.max)));const t=e.shapegen.aspectlimit;i>a*t&&(i=a*t),a>i*t&&(a=i*t),this.w=i||0,this.h=a||0;let r=s.rng(e.wonky.min,e.wonky.max);e.wonky.useGlobal&&(r=e.wonky.global),this.rngs={a:{x:+s.rng(0,r),y:+s.rng(0,r)},b:{x:-s.rng(0,r),y:+s.rng(0,r)},c:{x:-s.rng(0,r),y:-s.rng(0,r)},d:{x:+s.rng(0,r),y:-s.rng(0,r)},e:{x:+s.rng(0,r),y:+s.rng(0,r)},f:{x:-s.rng(0,r),y:+s.rng(0,r)},g:{x:-s.rng(0,r),y:-s.rng(0,r)},h:{x:+s.rng(0,r),y:-s.rng(0,r)},t:s.choice([15,30,45,60,75,90,105,120,135,150,165,195,210,225,240,255,270,285,300,315,330,345]),ox:0,oz:0},s.choice([!0,!1])?this.rngs.oz=s.rng(0,a*e.shapegen.offset_amt)*s.choice([1,-1]):this.rngs.ox=s.rng(0,i*e.shapegen.offset_amt)*s.choice([1,-1]),this.type=="canvasbg"?this.colors=s.choice(e.color.canvas_backgrounds):this.type=="container"?this.colors=s.choice(e.color.backgrounds):(this.colors=s.choice(e.color.options),e.color.options.splice(e.color.options.indexOf(this.colors),1),e.color.options.length==0&&(e.color.options=Array.from(e.color.refill))),this.shader=ne(s.choice(se),this.colors)}_createShape(e,i,a,t){const r=new THREE.BufferGeometry;return r.setIndex(i),r.setAttribute("position",new THREE.BufferAttribute(e,3)),r.setAttribute("uv",new THREE.BufferAttribute(a,2)),new THREE.Mesh(r,new THREE.ShaderMaterial({vertexShader:` varying vec2 v_uv; void main() { v_uv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `,fragmentShader:ce,uniforms:t}))}render(e){if(this.skip||this.w==0||this.h==0)return;const i=this.x,a=this.y,t=this.w,r=this.h,o=this.margin,u=e.canvasWidth,m=e.canvasHeight,A=-t/2+o,p=i+t>=u?t/2-o:t/2,w=-r/2+o,E=a+r>=m?r/2-o:r/2;let l=new Float32Array([A+this.rngs.a.x,0,w+this.rngs.a.y,p+this.rngs.b.x,0,w+this.rngs.b.y,p+this.rngs.c.x,0,E+this.rngs.c.y,A+this.rngs.d.x,0,E+this.rngs.d.y]),h=[0,2,1,0,3,2],d=new Float32Array([0,0,1,0,1,1,0,1]);const y={uSize:{value:new THREE.Vector2(p-A,E-w)},uResolution:{value:new THREE.Vector2(e.canvasWidth,e.canvasHeight)},uColor:{value:new THREE.Color(this.shader.color.main)},uColor2:{value:new THREE.Color(this.shader.color.grains)},uColor3:{value:new THREE.Color(this.shader.color.background)},uColorA:{value:new THREE.Color(this.shader.color.tennisone)},uColorB:{value:new THREE.Color(this.shader.color.tennistwo)},uType:{value:this.shader.type},uSeed:{value:this.shader.rng.seed},uVariety:{value:this.shader.rng.variety},uGrains:{value:this.shader.rng.grainy},uZoomX:{value:this.shader.rng.zoomx},uZoomY:{value:this.shader.rng.zoomy},uAlphaMin:{value:this.shader.rng.alphamin},uAlphaMax:{value:this.shader.rng.alphamax},uDir:{value:this.shader.rng.dir},isColor:{value:this.shader.isColor},isTexture:{value:this.shader.isTexture},isGrains:{value:this.shader.isGrains},isTennis:{value:this.shader.isTennis}};let f=this._createShape(l,h,d,y),x;if(this.cutout){const g=e.cutout.margin,Q=s.rng(-g/2,g/2),b=s.rng(-g/2,g/2);x=new Float32Array([A+g+Q+this.rngs.e.x,0,w+g+b+this.rngs.e.y,p-g+Q+this.rngs.f.x,0,w+g+b+this.rngs.f.y,p-g+Q+this.rngs.g.x,0,E-g+b+this.rngs.g.y,A+g+Q+this.rngs.h.x,0,E-g+b+this.rngs.h.y]);const j=[0,4,5,0,5,1,1,5,6,1,6,2,7,2,6,3,2,7,3,7,4,3,4,0],K=new Float32Array([...d,g/t,g/r,1-g/t,g/r,1-g/t,1-g/r,g/t,1-g/r]);f=this._createShape(new Float32Array([...l,...x]),j,K,y)}if(this.rotated&&(f.rotation.y=this.rngs.t*Math.PI/180),f.position.x=i+t/2,f.position.z=a+r/2,f.position.y=this.z,this.offset&&(f.position.x+=this.rngs.ox,f.position.z+=this.rngs.oz),this.type=="canvasbg"||this.type=="container"?(f.position.x-=e.canvasWidth/2,f.position.z-=e.canvasHeight/2,e.internal.scene.add(f)):e.internal.base.add(f),this.reuse){const g=this._createShape(x,h,d,y);let Q=s.rng(t*1,t*1.2)*s.choice([1,-1]),b=s.rng(t*1,t*1.2)*s.choice([1,-1]);(i+Q>e.canvasWidth||i-Q<0)&&(Q*=-1),(a+b>e.canvasHeight||a-b<0)&&(b*=-1),s.choice([!0,!1])?(g.position.x=Q,g.position.z=s.rng(0,r/8)*s.choice([1,-1])):(g.position.z=b,g.position.x=s.rng(0,t/8)*s.choice([1,-1])),f.add(g),e.temp.meshes.push([g.uuid,f.uuid])}e.temp.meshes.push([f.uuid])}}class de{constructor(e,i,a,t){this.x=0,this.y=0,this.z=0,this.w=e,this.h=i,this.ox=0,this.oy=0,this.isContainer=!0,this.side=a,this.align="start",this.justify="start",this.isRendered=!1,this.isContainedBg=!1,this.colors=null}randomize(e){this.align=s.choice(["start","middle","end"]),this.justify=s.choice(["start","middle","end"]),this.isRendered&&(this.align="middle",this.justify="middle"),e.align.useGlobal&&(this.align=e.align.global),e.justify.useGlobal&&(this.justify=e.justify.global),this.align=="force random"&&(this.align=s.choice(["start","middle","end"])),this.justify=="force random"&&(this.justify=s.choice(["start","middle","end"]))}render(e){if(!this.isRendered)return;const i=new D(this.w,this.h,e);let a=JSON.parse(JSON.stringify(e));this.isContainedBg&&(i.type="container",a.wonky.useGlobal=!0,a.wonky.global=e.wonky.bg),e.contained.rotated&&(i.rotated=!0),i.margin=0,i.randomize(a),this.colors=i.colors,i.z=this.z,i.x=this.x-e.contained.offsetContainer+this.ox,i.y=this.y-e.contained.offsetContainer+this.oy,i.w=this.w+e.contained.offsetContainer*2,i.h=this.h+e.contained.offsetContainer*2,i.render(e)}}let S,I,v;function ue(n){return J(this,null,function*(){console.log(n);const a=2048*n;let t={temp:{meshes:[]},internal:{base:new THREE.Object3D,rotationPivot:new THREE.Object3D,scene:S},sourceW:12,sourceH:16,canvasHeight:a,canvasWidth:Math.round(a*12/16),inch:a/16};return v=new THREE.WebGLRenderer({antialias:!0,preserveDrawingBuffer:!0}),v.setSize(t.canvasWidth,t.canvasHeight),I=new THREE.OrthographicCamera(-t.canvasWidth/2,t.canvasWidth/2,-t.canvasHeight/2,t.canvasHeight/2,1,2e3),I.position.set(0,-1e3,0),I.lookAt(0,0,0),S=new THREE.Scene,t.internal.scene=S,t.internal.base.position.x-=t.canvasWidth/2,t.internal.base.position.z-=t.canvasHeight/2,t.internal.rotationPivot.add(t.internal.base),S.add(t.internal.rotationPivot),yield le(),[t,v]})}function ge(n){let e=new L(new D(n.canvasWidth,n.canvasHeight,n));return(n.style=="contained"||n.style=="cutout")&&(e=new L(new D(n.canvasWidth-2*n.contained.offsetRender,n.canvasHeight-2*n.contained.offsetRender,n))),e}function Ae(n,e){let a=0,t=!0,r=[];for(;n.leafCount()<e.nshapes;){if(a+=1,a>99999){$("Could not fit all shapes",2e3);break}let o=s.rng(2,e.nshapes-n.leafCount()+1);o=Math.min(o,e.splitmax),e.subdivideOverride=="force both"&&(o=s.rng(2,e.nshapes-n.leafCount()),o=Math.max(o,2),o=Math.min(o,e.splitmax)),(e.subdivideOverride=="only width"||e.subdivideOverride=="only height")&&(o=e.nshapes-n.leafCount()+1);let u=s.choice(["w","h"]);e.subdivideOverride=="only width"&&(u="w"),e.subdivideOverride=="only height"&&(u="h"),e.subdivideOverride=="force both"&&r.length>0&&(r.includes("h")||(u="h"),r.includes("w")||(u="w")),e.subdivideOverride=="exclude only height"&&(r.includes("w")||(u="w")),e.subdivideOverride=="exclude only width"&&(r.includes("h")||(u="h")),r.push(u);const m=n.nodes().filter(w=>!w.item.isContainer&&w.item[u]>=e.unit*o);if(m.length==0)continue;const A=s.choice(m);A.item.split(u,o,e).forEach(w=>A.add(w)),A.item=new de(A.item.w,A.item.h,u,e),t&&((e.style=="contained"||e.style=="cutout")&&(A.item.isRendered=!0,A.item.isContainedBg=!0),t=!1)}if(e.shapegen.rotated){s.choice(n.shapes()).rotated=!0;for(const o of n.shapes())s.probability(e.shapegen.rotated_prob/100)&&(o.rotated=!0)}if(e.shapegen.offset){s.choice(n.shapes()).offset=!0;for(const o of n.shapes())s.probability(e.shapegen.offset_prob/100)&&(o.offset=!0)}if(e.shapegen.skip&&e.nshapes>4&&(s.choice(n.shapes()).skip=!0),e.style=="cutout"){s.choice(n.shapes()).cutout=!0;for(const o of n.shapes())s.probability(e.cutout.probability/100)&&(o.cutout=!0);for(const o of n.shapes())o.cutout==!0&&s.probability(e.cutout.reuse/100)&&(o.reuse=!0)}n.randomize(e),e.style=="contained"||e.style=="cutout"?n.layout(e.contained.offsetRender,e.contained.offsetRender):n.layout();for(const[o,u]of n.shapes().entries())u.z=-20-o*5}function me(n,e){const i=new D(e.canvasWidth,e.canvasHeight,e);let a=JSON.parse(JSON.stringify(e));if(a.wonky.useGlobal=!0,a.wonky.global=0,i.type="canvasbg",i.randomize(a),i.margin=0,i.z=0,i.x=-25,i.y=-25,i.w=e.canvasWidth+50,i.h=e.canvasHeight+50,i.render(e),e.shapegen.comp_rotated_prob){const t=s.choice([15,30,45,60,75,105,120,135,150,165,195,210,225,240,255,285,300,315,330,345]);e.internal.rotationPivot.rotation.y=t*Math.PI/180}else e.internal.rotationPivot.rotation.y=0*Math.PI/180;if(n.render(e),e.zoom.enable){let t={x:0,y:0},r=0;for(const o of n.shapes())o.skip||(t.x+=o.x+o.w/2,t.y+=o.y+o.h/2,r+=1);t.x/=r,t.y/=r,I.position.x=-e.canvasWidth/2+t.x,I.position.z=-e.canvasHeight/2+t.y,I.zoom=s.rng(e.zoom.min*10,e.zoom.max*10)/10,I.updateProjectionMatrix()}v.render(S,I)}const O={init:ue,subdivide:Ae,reset:ge,render:me};let c,T,B,W=!1;function M(){for(const[n,e]of c.temp.meshes){let i=c.internal.base.getObjectByProperty("uuid",n);if(i===void 0&&e!==void 0&&(i=c.internal.base.getObjectByProperty("uuid",e).getObjectByProperty("uuid",n)),i===void 0&&e===void 0){i=c.internal.scene.getObjectByProperty("uuid",n),i.geometry.dispose(),i.material.dispose(),c.internal.scene.remove(i);continue}i.geometry.dispose(),i.material.dispose(),c.internal.base.remove(i)}c.temp.meshes=[],B.renderLists.dispose(),_(),document.body.replaceChildren()}function k(n){return J(this,null,function*(){[c,B]=yield O.init(n),window.opts=c,document.body.appendChild(B.domElement),document.body.style.display="flex",document.body.style.alignItems="center",document.body.style.justifyContent="center";function e(){const i=window.innerWidth,a=window.innerHeight,t=window.innerHeight*c.sourceW/c.sourceH,r=window.innerWidth/c.sourceW*c.sourceH;a<i&&t<=i&&(B.domElement.style.height=`${a}px`,B.domElement.style.width=`${t}px`),a<i&&t>i&&(B.domElement.style.height=`${r}px`,B.domElement.style.width=`${i}px`),a>i&&r<=a&&(B.domElement.style.height=`${r}px`,B.domElement.style.width=`${i}px`),a>i&&r>a&&(B.domElement.style.height=`${a}px`,B.domElement.style.width=`${t}px`)}e(),window.addEventListener("resize",e,!0),fe()})}window.onload=k(1);function fe(){const n=tokenData.tokenId%100,e=ae[n];window.jsonName=e.n;function i(t){return t.map(r=>oe[re[r]])}const a=s.choice(e.pl);c=N(F({},c),{nshapes:e.m[0],style:e.m[2],unit:c.canvasHeight/c.sourceH*e.m[1],subdivideOverride:e.o[0],splitmax:e.o[1],zoom:{enable:s.probability(e.z[0]/100),min:e.z[1],max:e.z[2]},color:{options:Array.from(i(a[1])),refill:Array.from(i(a[1])),backgrounds:Array.from(i(a[0])),canvas_backgrounds:i(he)},wonky:{useGlobal:s.probability(20/100),global:s.rng(e.w[0],e.w[1]),min:e.w[0],max:e.w[1],bg:e.w[2]},shapegen:{min:e.s[0],max:e.s[1],aspectlimit:e.s[2],factor:e.s[3],skip:s.probability(e.p[2]/100),rotated:s.probability(e.p[0]/100),rotated_prob:e.p[1],comp_rotated_prob:!1,marginmax:e.s[4],offset:s.probability(e.s[5]/100),offset_prob:e.s[6],offset_amt:e.s[7]},align:{useGlobal:s.probability(12/100),global:s.choice(["start","middle","end"])},justify:{useGlobal:s.probability(12/100),global:s.choice(["start","middle","end"])},contained:{offsetRender:c.inch*s.rng(e.b[0]*4,e.b[1]*4)*.25,offsetContainer:c.inch/2,rotated:!1},cutout:{probability:e.c[0],margin:c.inch*s.rng(e.c[1]*8,e.c[2]*8)*.125,reuse:e.c[3]}}),c.contained.offsetRender==c.inch*.25&&(c.contained.offsetRender=0),c.contained.offsetRender==c.inch*.5&&(c.contained.offsetRender=.75),s.probability(12/100)&&(c.align.useGlobal=!0,c.justify.useGlobal=!0,c.align.global=s.choice(["start","middle","end"]),c.justify.global=c.align.global),e.o[2]!="no"&&(c.align.useGlobal=!0,c.align.global=e.o[2]),e.o[3]!="no"&&(c.justify.useGlobal=!0,c.justify.global=e.o[3]),T=O.reset(c),O.subdivide(T,c),we()}function we(){requestAnimationFrame(()=>{O.render(T,c),W&&ye()})}function ye(){const n=B.domElement;let e=document.createElement("a");e.setAttribute("download","render_bm.png");let a=n.toDataURL("image/png").replace(/^data:image\/png/,"data:application/octet-stream");e.setAttribute("href",a),e.click()}window.addEventListener("keyup",n=>{n.key=="1"&&(M(),W=!0,k(1)),n.key=="2"&&(M(),W=!0,k(2)),n.key=="3"&&(M(),W=!0,k(3))});
var P=Object.defineProperty,X=Object.defineProperties;var V=Object.getOwnPropertyDescriptors;var z=Object.getOwnPropertySymbols;var q=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable;var H=(n,e,i)=>e in n?P(n,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[e]=i,F=(n,e)=>{for(var i in e||(e={}))q.call(e,i)&&H(n,i,e[i]);if(z)for(var i of z(e))Z.call(e,i)&&H(n,i,e[i]);return n},N=(n,e)=>X(n,V(e));var J=(n,e,i)=>new Promise((a,t)=>{var r=m=>{try{u(i.next(m))}catch(A){t(A)}},o=m=>{try{u(i.throw(m))}catch(A){t(A)}},u=m=>m.done?a(m.value):Promise.resolve(m.value).then(r,o);u((i=i.apply(n,e)).next())});class U{constructor(e){this.useA=!1;let i=function(a){let t=parseInt(a.substr(0,8),16),r=parseInt(a.substr(8,8),16),o=parseInt(a.substr(16,8),16),u=parseInt(a.substr(24,8),16);return function(){t|=0,r|=0,o|=0,u|=0;let m=(t+r|0)+u|0;return u=u+1|0,t=r^r>>>9,r=o+(o<<3)|0,o=o<<21|o>>>11,o=o+m|0,(m>>>0)/4294967296}};this.prngA=new i(e.substr(2,32)),this.prngB=new i(e.substr(34,32));for(let a=0;a<1e6;a+=2)this.prngA(),this.prngB();this.hash=e.substr(2,64)}random(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}rng(e,i){return Math.floor(this.random()*(Math.floor(i)-Math.ceil(e)+1)+Math.ceil(e))}choice(e){return e[this.rng(0,e.length-1)]}probability(e){return!!e&&this.random()<=e}shuffle(e){let i=e.length,a,t;for(;i!==0;)t=Math.floor(this.random()*i),i-=1,a=e[i],e[i]=e[t],e[t]=a;return e}}let s=new U(tokenData.hash);function _(){s=new U(tokenData.hash)}function $(n,e=1e4){console.error(n),document.getElementById("error")&&(document.getElementById("error").innerText=`Error: ${n}`,setTimeout(()=>{document.getElementById("error").innerText=""},e))}var ee="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",G={},Y=String.fromCharCode;function ie(n,e){if(!G[n]){G[n]={};for(var i=0;i<n.length;i++)G[n][n.charAt(i)]=i}return G[n][e]}function te(n,e,i){var a=[],t=4,r=4,o=3,u="",m=[],A,p,w,E,l,h,d,y={val:i(0),position:e,index:1};for(A=0;A<3;A+=1)a[A]=A;function f(x,g=1){for(w=0,l=Math.pow(2,x),h=1;h!=l;)E=y.val&y.position,y.position>>=1,y.position==0&&(y.position=e,y.val=i(y.index++)),w|=(E>0?1:0)*h,h<<=1;g==1?d=Y(w):g==2&&(a[r++]=Y(w),d=r-1,t--)}switch(f(2,0),w){case 0:f(8);break;case 1:f(16);break;case 2:return""}for(a[3]=d,p=d,m.push(d);;){if(y.index>n)return"";switch(f(o),d=w){case 0:f(8,2);break;case 1:f(16,2);break;case 2:return m.join("")}if(t==0&&(t=Math.pow(2,o),o++),a[d])u=a[d];else if(d===r)u=p+p.charAt(0);else return null;m.push(u),a[r++]=p+u.charAt(0),t--,p=u,t==0&&(t=Math.pow(2,o),o++)}}function R(n){return te(n.length,32,function(e){return ie(ee,n.charAt(e))})}function ne(n,e){return{isColor:!0,isTexture:!0,isGrains:!0,isTennis:!0,type:C[n].type,color:{main:e[1],grains:e[2],background:e[0],tennisone:e[3],tennistwo:e[3]},rng:{seed:s.rng(1,1e5),variety:s.rng(1,1e3)/1e3,grainy:.2,zoomx:s.rng(C[n].zoomx.l*1e3,C[n].zoomx.u*1e3)/1e3,zoomy:s.rng(C[n].zoomy.l*1e3,C[n].zoomy.u*1e3)/1e3,alphamin:s.rng(C[n].alphamin.l*1e3,C[n].alphamin.u*1e3)/1e3,alphamax:s.rng(C[n].alphamax.l*1e3,C[n].alphamax.u*1e3)/1e3,dir:s.rng(0,4)},name:n}}const se=["map_streaks","cloudy","mod_legacy_streaks","cloudy_haze"],C={map_streaks:{type:0,zoomx:{l:.1,u:1.3},zoomy:{l:.1,u:.3},alphamin:{l:.8,u:1},alphamax:{l:.8,u:1}},cloudy:{type:1,zoomx:{l:.1,u:.5},zoomy:{l:.1,u:.6},alphamin:{l:.8,u:1},alphamax:{l:.8,u:1}},mod_legacy_streaks:{type:2,zoomx:{l:.1,u:.6},zoomy:{l:.1,u:1.4},alphamin:{l:.6,u:1},alphamax:{l:.7,u:1}},cloudy_haze:{type:3,zoomx:{l:.1,u:1.1},zoomy:{l:.1,u:.3},alphamin:{l:.6,u:1},alphamax:{l:.7,u:1}}},ae=JSON.parse(R("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=")),re=JSON.parse(R("NoIgRgNghgxg1gBgIwgDQgOYCcCmBPZNTXAgJiO3wQGYKSEAWOqgVmYIDZ2EB2dyAK45C6SnkHDyokhJpEwWAPYB3AHYjwStQimaV62ugX7G8rerZHzCLlZN872gBxmTATldqkCT6qQpHP11jL0M9LyZ0ZQALAEsAF2EAkBiEySJUxLl0GFwoAFsNXJwCnSIAB1jVRGTK6rL0OsQwptNGqsRLEFbbbo7eCv6XdvqPEbhvQer/KYndJqQWjqRIvumuhd6FhzWJ4d2kMZBcABMNU4bjnDOwi9WLrovei52L/Yuj08n0L+Sv3S+t2uKyIiiwUFUGCSoPBkPS6DBEKh2RAiLhbVRsORXTwOAgEBUGlx+MJumJBOUKPJhNW1MpOLxFJsRDpA3QrP2lBw6mSXPUuj5KMFq0FXUFvUFO0FnNw3IQRz532IOG5M2kKqCzFVYUVq0SUAgGn1ht0xpRZr1JUNXTNvVkyVkwQgQhRslWsi6sjtzuEO1k+1kRwkSuDDp9SCdQkW8nD7vDnvD3qjfvDAfDQZ9pB8jQEWHKEGhObzBcu5Vz+eELXLJdWABkALT2ogNwXJBtmtv11qd1q6BsXNsAcUbPu7zeHTYAukA")),oe=JSON.parse(R("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")),he=JSON.parse(R("NoJgrANCDsC6Q===")),le=()=>0,ce=R("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=");class L{constructor(e){this.item=e,this.children=[]}add(e){this.children.push(new L(e))}nodes(){return this.children.map(e=>e.nodes()).flat().concat([this])}shapes(){return this.nodes().filter(e=>!e.item.isContainer).map(e=>e.item)}leafCount(){return this.children.length==0?1:this.children.reduce((e,i)=>e+i.leafCount(),0)}randomize(e){this.item.randomize(e),this.children.forEach(i=>i.randomize(e))}render(e){this.item.render(e),this.children.forEach(i=>i.render(e))}layout(e=0,i=0,a=-10){if(this.item.x=e,this.item.y=i,this.item.z=a,!this.item.isContainer)return;const t=(l,h,d,y)=>h?o[l](d,y):o[l=
Watching a DVD logo bounce around a tv, our inclination is to predict where it will go. There is a well-defined process of particle and boundary that makes this possible. But what if the particle and boundary were the same? If there was no distinction, if a point could reflect against its own history, if a ray could change its conditions as it experiences them? If light could interact with itself and countless others simultaneously in a fractalized infinity, shaped by time, giving structure to time itself—where might it end up?
=0;t<this.height/n;t++){let s={};s.i=e,s.j=t,s.polys=[],this.grid[e].push(s),this.allCells.push(s)}}this.allPolys=[]}add(e,t=void 0){if(null==t?this.allPolys.push(e):this.allPolys.push({p1:e,p2:t}),e.length)return void e.map((e=>this.add(e)));if(e.shape&&!t){for(let t=0;t<e.shape.length-1+e.closed;t++){let s=e.shape[t],a=e.shape[(t+1)%e.shape.length];this.getLineCells(s,a).map(((e,t)=>{e.polys.push({p1:s,p2:a})}))}return}let s=e;this.getLineCells(s,t).map(((e,a)=>{e.polys.push({p1:s,p2:t})}))}rayIntersect(e,t){(t=t.copy()).setMag(W+H),t=p5.Vector.add(e,t);let[s,a,n]=this.getLineCells(e,t,1),r=2,o=!1,i=[];for(let a of s){for(let s of a.polys){let n=this.rayToLineSegmentIntersection(e,t,s.p1,s.p2);n&&n.point.x>=a.i*this.gap&&n.point.x<=(a.i+1)*this.gap&&n.point.y>=a.j*this.gap&&n.point.y<=(a.j+1)*this.gap&&i.push(n)}if(i.length&&(o=!0),o&&--r<=0)break}i.sort(((e,t)=>e.t-t.t));let l=i[0];if(null!=l)return(e.x-l.point.x)**2+(e.y-l.point.y)**2>10*S&&i[0]}getLineCells(e,t,s=this.gap,a=this.gap,n=this.width,r=this.height){let o=0;1==s&&(o=1,s=this.gap);let i=e.x/s-.5,l=e.y/a-.5,p=t.x/s-.5,h=t.y/a-.5;const u=e=>Math.floor(e+.5);let g=[],d=Math.abs(h-l)>Math.abs(p-i);d&&([i,l]=[l,i],[p,h]=[h,p]),i>p&&([i,p]=[p,i],[l,h]=[h,l]);const m=p-i,c=0===m?1:(h-l)/m,f=(e,t)=>{d?g.push({x:t,y:e}):g.push({x:e,y:t})},y=u(i),x=l+c*(y-i),P=y,b=Math.floor(x);f(P,b),f(P,b+1);let v=x+c;const S=u(p),k=Math.floor(h+c*(S-p));for(let e=P+1;e<=S-1;e++)f(e,Math.floor(v)),f(e,Math.floor(v)+1),v+=c;f(S,k),f(S,k+1),e.x>=t.x&&g.reverse(),(d&&e.x>t.x&&e.y<t.y||d&&e.x<t.x&&e.y>t.y)&&g.reverse();let w=[];for(let e=0;e<g.length;e++){let t=g[e];t.x=Math.floor(t.x),t.y=Math.floor(t.y),t.x>=0&&t.y>=0&&t.x<this.grid.length&&t.y<this.grid[0].length&&w.push(this.grid[t.x][t.y])}return o?[w,e.x>t.x,d]:w}rayToLineSegmentIntersection(e,t,s,a){let n=t.x-e.x,r=t.y-e.y,o=a.x-s.x,i=a.y-s.y,l=i*n-o*r,p=o*(e.y-s.y)-i*(e.x-s.x),h=n*(e.y-s.y)-r*(e.x-s.x);if(0==l)return void 0;let u=p/l,g=h/l,d=1e-8;return u>=d&&g>=d&&g<=1-d?{point:createVector(e.x+u*n,e.y+u*r),t:u,dir:p5.Vector.sub(a,s)}:void 0}}function setupRandom(){R=new Random,randomSeed(R.random_int(0,1e16)),noiseSeed(R.random_int(0,1e16)),rnd=(e,t)=>e instanceof Array?R.random_choice(e):void 0===e?R.random_dec():void 0===t?R.random_num(0,e):R.random_num(e,t),rtri=(e,t,s)=>{let a=R.random_dec();return a<.5?map(a,0,.5,e,t):map(a,.5,1,t,s)},weightedPick=(e,t)=>{let s;for(s=0;s<t.length;s++)t[s]+=t[s-1]||0;var a=rnd()*t[t.length-1];for(s=0;s<t.length&&!(t[s]>=a);s++);return e[s]}}class Random{constructor(){this.useA=!1;let e=function(e){let t=parseInt(e.substr(0,8),16),s=parseInt(e.substr(8,8),16),a=parseInt(e.substr(16,8),16),n=parseInt(e.substr(24,8),16);return function(){t|=0,s|=0,a|=0,n|=0;let e=(t+s|0)+n|0;return n=n+1|0,t=s^s>>>9,s=a+(a<<3)|0,a=a<<21|a>>>11,a=a+e|0,(e>>>0)/4294967296}};if(""==tokenData.hash){let e=()=>{let e="0123456789abcdef",t="0x";for(let s=0;s<64;s++)t+=e[Math.floor(16*Math.random())];return t};tokenData.hash=e()}this.prngA=new e(tokenData.hash.substr(2,32)),this.prngB=new e(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,t){return e+(t-e)*this.random_dec()}random_int(e,t){return Math.floor(this.random_num(e,t+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}function setupUseful(){setupRandom(),W=width,H=height,vec=createVector,rndvec=(e=0,t=W,s=0,a=H)=>vec(rnd(e,t),rnd(s,a))}function saveNamed(){save(`lightbreak-${parseInt(tokenData.tokenId)%1e6}.png`)}function distSq(e,t){return p5.Vector.sub(e,t).magSq()}p5.disableFriendlyErrors=!0;class Poly{constructor(e,t=0,s=0,a=1,n=0,r=!0,o=void 0,i=void 0){this.shape=e.map((e=>vec(t+e.x*a,s+e.y*a))),this.closed=r,this.c=o,this.sc=i}rayIntersect(e,t,s=1){let a=this.shape[this.shape.length-1],n=p5.Vector.add(a,t),r=[];if(e.map((e=>{for(let t=0;t<e.shape.length-1;t++){let s=e.shape[t],o=e.shape[(t+1)%e.shape.length],i=this.rayToLineSegmentIntersection(a,n,s,o);i&&r.push(i)}})),r.sort(((e,t)=>e.t-t.t)),r.length&&r[0].t>s)return r[0]}addPoint(e,t=!0){this.shape.push(e),t&&qt.add(this.shape[this.shape.length-2],this.shape[this.shape.length-1])}static rect(e,t,s,a){let n=1e-6,r=[vec(e-(s/=2),t-(a/=2)),vec(e+s,t-a),vec(e+s+n,t+a),vec(e-s-n,t+a)];return new Poly(r)}setColor(e=void 0,t=void 0){return this.c=e,this.sc=t,this}addToQT(){this.qt=new QT(new BB((this.bbl+this.bbr)/2,(this.bbb+this.bbt)/2,(this.bbr-this.bbl)/2,(this.bbb-this.bbt)/2),4),this.qt.show();for(let e=0;e<this.shape.length;e++){let t=(e+1+this.shape.length)%this.shape.length,s=this.shape[e],a=this.shape[t];this.qt.insert({x1:s.x,y1:s.y,x2:a.x,y2:a.y})}}reseed(e=5,t=!0){let s=[];for(let a=0;a<this.shape.length&&(t||a!=this.shape.length-1);a++){let t=(a+1)%this.shape.length,n=this.shape[a],r=this.shape[t],o=e/p5.Vector.dist(n,r);if(s.push(n),o<1)if(o>.5)s.push(p5.Vector.lerp(n,r,.5));else for(let e=o;e<1;e+=o)s.push(p5.Vector.lerp(n,r,e))}return this.shape=s,this}draw(e=!0,t=!1,s=!1){noFill(),this.sc&&stroke(this.sc),e&&(beginShape(),this.shape.map(((e,t)=>{s?curveVertex(e.x,e.y):vertex(e.x,e.y)})),this.closed?endShape(CLOSE):endShape())}}
if(i){if(s.shape.length<a.upToIdx){if(distSq(a.shape[s.shape.length]??a.shape[a.shape.length-1],i.point)>gp.distanceSqOK){if(a.shape.length<=s.shape.length)continue;s.distance=dist(s.shape[s.shape.length-1].x,s.shape[s.shape.length-1].y,a.shape[s.shape.length].x,a.shape[s.shape.length].y),a.distance=s.distance,s.upToIdx=s.shape.length,a.shape=a.shape.slice(0,s.shape.length);let e=dist(i.point.x,i.point.y,s.shape[s.shape.length-1].x,s.shape[s.shape.length-1].y),t=p5.Vector.lerp(s.shape[s.shape.length-1],i.point,s.distance/e);s.addPoint(t);continue}s.addPoint(i.point);let e=reflect(s,i,0);e&&(s.dir=e,s.upToIdx=s.shape.length,q.push([s,a]));continue}{0==e&&(a.distance+=r.speed),s.distance=a.distance,s.upToIdx=a.upToIdx;let t=dist(i.point.x,i.point.y,s.shape[s.shape.length-1].x,s.shape[s.shape.length-1].y);if(s.distance<t){let e=p5.Vector.lerp(s.shape[s.shape.length-1],i.point,s.distance/t);s.addPoint(e);continue}s.addPoint(i.point),s.distance=0,s.upToIdx=s.shape.length;continue}}s.upToIdx=a.upToIdx,s.distance=a.distance}return t}function reflect(e,t,s=0){let a=e.dir,n=allParams[e.paramIdx],r=t.dir,o=r.copy(),i=r.copy().rotate(PI/2),l=a.copy().reflect(i),p=a.copy();if(abs(abs(o.angleBetween(p))-PI/2)<1e-8)return;let h=s*(p5.Vector.cross(a,r).z<0?1:-1),u=-(p5.Vector.cross(a,l).z<0?-1:1);return 2==n.angle?a.rotate(-(PI/2+.01)*u).rotate(h):3==n.angle?a.rotate(-(2*PI/3+.01)*u).rotate(h):4==n.angle?a.rotate(-(PI-.02)*u).rotate(h):5!=n.angle?l.rotate(h):void 0}function mouseClicked(){saving||mouseX<gp.margin/2||mouseX>W-gp.margin/2||mouseY<gp.margin/2||mouseY>H-gp.margin/2||setupParams(void 0,{bboxVis:1,n:20,offset:rnd(TAU),x:mouseX,y:mouseY,angle:rnd([1])})}function parseBBox(e){let t=e.split(";").map((e=>e.split(",").map((e=>parseFloat(e))))),s=[];for(let e=0;e<t.length;e++){let a=[];for(let s=0;s<t[e].length;s+=2)a.push(vec(t[e][s],t[e][s+1]));s.push(a)}return polys=s.map((e=>new Poly(e,0,0,W,0,0,-1,gp.strokeColor))),polys.map((e=>e.vis=1)),polys}function touchMoved(){if(!saving){if(1==touches.length){let e=vec(mouseX,mouseY);mousePath.push(e)}return!1}}function keyPressed(){"p"==key&&saveNamed(),"s"==key&&saveMySVG(),"c"==key&&(decTime=null==decTime?0:!decTime,timeCounter=25),key>="1"&&key<="9"&&(gp.i=1e3*parseInt(key)),"-"==key?gp.i=max(gp.i-1e3,500):"="==key&&(gp.i+=1e3)," "==key&&(gp.animate=!gp.animate),keyCode==UP_ARROW?gp.speed*=2:keyCode==DOWN_ARROW?gp.speed=max(gp.speed/=2,1/16):keyCode==RIGHT_ARROW?gp.animate?gp.rateMultiplier*=1.25:allParams.map((e=>e.offset+=.1)):keyCode==LEFT_ARROW&&(gp.animate?gp.rateMultiplier*=.75:allParams.map((e=>e.offset-=.1))),"f"==key&&resizeToFit(),"m"==key&&(mousePath=[]),"n"==key&&(gp.mousePathLength=gp.mousePathLength>200?100:1/0),"b"==key&&(gp.backgroundColor=gp.backgroundColor?0:255,gp.strokeColor=gp.strokeColor?0:255)}function resizeToFit(){W=window.innerWidth,H=window.innerHeight;for(let e=0;e<allParams.length;e++){let t=allParams[e];t.x=map(t.x,gp.margin/2,width-gp.margin/2,gp.margin/2,W-gp.margin/2),t.y=map(t.y,gp.margin/2,height-gp.margin/2,gp.margin/2,H-gp.margin/2)}resizeCanvas(W,H)}saving=!1;let R,rnd,rint,choice,sn,rexp,rtri,wPick,vec,rndvec,W,H,timeCounter=0;function timeText(){timeCounter<=0||(timeCounter--,push(),textSize(24*S),textAlign(CENTER,CENTER),fill(255),stroke(0),strokeWeight(S),decTime?text("decimal time",W/2,H/2):text("standard time",W/2,H/2),pop())}function saveSVGElement(e,t){e.setAttribute("xmlns","http://www.w3.org/2000/svg");var s=e.outerHTML,a=new Blob(['<?xml version="1.0" standalone="no"?>\r\n',s],{type:"image/svg+xml;charset=utf-8"}),n=URL.createObjectURL(a),r=document.createElement("a");return r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),e}function createSVGCanvas(){ns="http://www.w3.org/2000/svg",svg=document.createElementNS(ns,"svg"),groups=[],svg.setAttribute("width",width+"px"),svg.setAttribute("height",height+"px"),svg.setAttribute("viewBox","0 0 "+W+" "+H),svg.setAttribute("style","background-color:white;");let e=document.createElementNS(ns,"rect");e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("width",W),e.setAttribute("height",H),e.setAttribute("fill","white");let t=document.createElementNS(ns,"g");t.appendChild(e),t.setAttribute("id","rays"),t.setAttribute("style",`stroke-linejoin:bevel; fill:none; stroke-width:${S}; stroke:black;`),svg.appendChild(t);let s=paramsToShapes();return""!=uBB&&parseBBox(uBB).map((e=>s.push(e.shape))),s.map((e=>{let s=e;if(!s||!s.length)return;let a=document.createElementNS(ns,"path"),n=`M ${s[0].x} ${s[0].y} `;for(let e=1;e<s.length;e++)n+=`L ${s[e].x} ${s[e].y} `;a.setAttribute("d",n),t.appendChild(a)})),svg}function saveMySVG(){let e=`lightbreak-${parseInt(tokenData.tokenId)%1e6}.svg`;saving=!0,saveSVGElement(createSVGCanvas(),e),saving=!1}function paramsToShapes(){let e=[];return allParams.map((t=>{if(2==t.n){let[s,a]=t.oldrays,n=[...s.shape.reverse(),...a.shape];e.push(n)}else e.push(...t.oldrays.map((e=>e.shape)))})),[...e,mousePoly.shape]}class GridQT{constructor(e,t,s,a,n){this.x=e,this.y=t,this.width=s,this.height=a,this.gap=n,this.grid=[],this.allCells=[];for(let e=0;e<this.width/n;e++){this.grid.push([]);for(let t
const uP=new URLSearchParams(window.location.search);let uS=uP.get("png")??"",uSS=uP.get("svg")??"",uSp=uP.get("speed")??"",uH=uP.get("hash")??"",uF=uP.get("full")??"",uI=uP.get("i")??"",uA=uP.get("animate")??"",uIn=uP.get("invert")??"",uC=uP.get("clock")??"",uAR=uP.get("aspect")??"",uM=uP.get("margin")??"",uRM=uP.get("spin")??"",uBB=uP.get("bboxes")??"",A_R=""!=uAR?parseFloat(uAR):1;console.log(A_R);let D_S=1e3,DIM=Math.min(window.innerWidth,window.innerHeight/A_R),S=DIM/D_S,pxDensity=2;function presetup(){canvas=createCanvas(1e3*S,1e3*S*A_R),pixelDensity(pxDensity),setupUseful(),noFill(),strokeWeight(S),strokeJoin(BEVEL),sGP()}tokenData.hash=""!=uH?uH:tokenData.hash;let gp={};function sGP(){gp.margin=""!=uM?float(uM)*W*S:100*S,gp.backgroundColor=""!=uIn?0:255,gp.strokeColor=""!=uIn?255:0,gp.mousePathLength=50,gp.i=""!=uI?int(uI):4e3,gp.distanceSqOK=100,gp.speed=""!=uSp?float(uSp):S,gp.smooth=rnd()<.1,gp.animate=""==uA,gp.n=[2],gp.angle=weightedPick([1,2,3,4],[20,5,3,1]),gp.backgroundAlpha=150,gp.numLines=weightedPick([3,4,5,6,7],[80,1,1,1,3]),gp.oddsExtraParams=rnd()<.75?.15:0,gp.hash=tokenData.hash,gp.rateMultiplier=""!=uRM?float(uRM):1,print("thank you p5.js and everyone behind it <3"),frameRate(30)}let decTime=""!=uC?0:void 0;function setup(){presetup();let e=e=>{let t,s,a,n;do{t=floor(rnd(e.shape.length)),s=rnd(),a=floor(rnd(e.shape.length)),n=rnd()}while(t==a);return new Poly([p5.Vector.lerp(e.shape[t],e.shape[(t+1)%e.shape.length],s),p5.Vector.lerp(e.shape[a],e.shape[(a+1)%e.shape.length],n)],0,0,1,0,0)};for(let t=0;t<gp.numLines;t++){let s=e(Poly.rect(W/2,H/2,W-gp.margin-10*S,H-gp.margin-10*S)),a=rtri(5,10,30);s.reseed(a*S,0);let n=vec(0,1);n.rotate(rnd(TAU));let r=s.shape;for(let e=0;e<1;e++)rnd()<gp.oddsExtraParams&&setupParams(void 0,{n:rnd([2,2,2,3,5,7]),offset:rnd(TAU),x:rnd(gp.margin/2+10*S,W-gp.margin/2-10*S),y:rnd(gp.margin/2+10*S,H-gp.margin/2-10*S)});for(let e of r)setupParams(void 0,{lineNum:t,n:rnd(gp.n),offset:n.heading(),x:e.x,y:e.y,rateMultiplier:10**t});for(let e=0;e<2;e++)rnd()<gp.oddsExtraParams&&setupParams(void 0,{n:rnd([2,2,2,3,5,7,12,24]),offset:rnd(TAU),x:rnd(gp.margin/2+10*S,W-gp.margin/2-10*S),y:rnd(gp.margin/2+10*S,H-gp.margin/2-10*S)})}mousePoly=Poly.rect(W/2,H/2,W,H)}let allParams=[];function setupParams(e,t={}){let s={};if(s.animate=gp.animate,s.x=t.x??W/2,s.y=t.y??H/2,s.colorAngle=t.colorAngle??0,s.rateMultiplier=t.rateMultiplier??gp.rateMultiplier??1,s.speed=gp.speed,s.smooth=t.smooth??gp.smooth,s.lineNum=t.lineNum??void 0,s.centers=[vec(t.x,t.y)]??[vec(s.x,s.y)],s.angle=t.angle??gp.angle,s.offset=t.offset??1234,s.sOffset=t.sOffset??t.offset,s.i=t.i??1/0,s.counter=0,s.selfreflect=t.selfreflect??1,s.n=t.n??gp.n,s.oldrays=t.rays,s.rays=[],0!=s.n)for(let t of s.centers)for(let a=0;a<TAU;a+=TAU/s.n){let n=new Poly([t.copy()],0,0,1,0,0);n.dir=vec(cos(a+s.offset),sin(a+s.offset)),n.paramIdx=e??allParams.length,n.distance=0,s.rays.push(n)}return void 0===e?allParams.push(s):allParams[e]=s,s}let mousePoly,thread,qt,q=[],rays=[],globalbboxes=[],mousePath=[];function mouseMoved(){mmAdd&&(mmAdd=0,mousePath.push(vec(mouseX,mouseY)))}let mmAdd=0;function draw(){for(""!=uF&&(resizeToFit(),uF="");mousePath.length>gp.mousePathLength;)mousePath.shift();mmAdd=1,blendMode(BLEND),background(gp.backgroundColor,gp.backgroundAlpha);let e=new Poly(mousePath,0,0,1,0,0);if(e.setColor(-1,color(gp.strokeColor,255)),e.vis=1,mousePoly=e,null==decTime){let e=millis()/1e3/60/60,t=e/60,s=t/24,a=s/7,n=[e,t,s];allParams.map(((e,t)=>{e.animate&&(null==e.lineNum||e.lineNum>3)?e.offset=e.sOffset+a*TAU:e.animate&&(e.offset=e.sOffset+n[e.lineNum]*TAU*gp.rateMultiplier)}))}else if(decTime){let e=(()=>{const e=new Date("1793-10-05T00:00:00Z"),t=new Date;return((t-e)/864e5%10+(3600*t.getHours()+60*t.getMinutes()+t.getSeconds()+t.getMilliseconds()/1e3)/86400)/10})();allParams.map(((t,s)=>{t.animate&&(null==t.lineNum||t.lineNum>3)?t.offset=e:t.animate&&(t.offset=PI/2+e*TAU*10**(3-t.lineNum-1))}))}else{let e=(()=>{const e=new Date,t=e.getDay(),s=0===t?6:t-1,a=e.getHours(),n=e.getMinutes(),r=e.getSeconds(),o=e.getMilliseconds();return[(6e4*n+1e3*r+o)/36e5,(a%12*3600+60*n+r+o/1e3)/43200,(24*s*60*60*1e3+60*a*60*1e3+60*n*1e3+1e3*r+o)/6048e5]})();allParams.map(((t,s)=>{t.animate&&(null==t.lineNum||t.lineNum>3)?t.offset=e[2]:t.animate&&(t.offset=PI/2+e[t.lineNum]*TAU)}))}let t=Poly.rect(W/2,H/2,W-gp.margin,H-gp.margin);t.vis=0,t.shape.push(t.shape[0].copy()),globalbboxes=[t,mousePoly],""!=uBB&&parseBBox(uBB).map((e=>globalbboxes.push(e))),allParams=allParams.map(((e,t)=>setupParams(t,e))),allParams.map((e=>e.counter=0)),qt=new GridQT(0,0,W,H,25*S);for(let e of globalbboxes)qt.add(e);tickRays(0).map((e=>{let t=allParams[e.paramIdx];t.smooth&&(e.shape.splice(0,0,e.shape[0].copy()),e.shape.splice(e.shape.length,0,e.shape[e.shape.length-1].copy())),e.draw(1,0,t.smooth),t.smooth&&(e.shape.splice(0,1),e.shape.splice(e.shape.length-1,1))})),globalbboxes.map((e=>{stroke(gp.strokeColor),e.closed=!1,e.vis&&e.draw()})),timeText(),""!=uS&&frameCount==int(uS)&&saveNamed(),""!=uSS&&frameCount==int(uSS)&&saveMySVG()}function tickRays(e){let t=allParams.map((e=>e.rays)).flat(),s=allParams.map((e=>e.oldrays)).flat(),a=t.map(((e,t)=>[e,s[t]]));allParams.map((e=>e.counter=0)),q=[...a];let n=0;for(;q.length&&n<gp.i;){let[s,a]=q.shift(),r=allParams[s.paramIdx];if(r.counter++,r.counter>r.i)continue;n++;let o=[...globalbboxes];r.selfreflect&&(o=[...o,...t]);let i=qt.rayIntersect(s.shape[s.shape.length-1],s.dir);
*Notes* is a generative collection that dives into the vivid online universe of perfume descriptions. Pulling from lists of fragrance “notes,” product description text, and personal perfume reviews from fragrantica, *Notes* remixes found language into a unique visual output– a collaged, imaginary fragrance. Given the inability to sample scents through our phones or computers, perfumes rely on detailed descriptions to best communicate what a product smells like and persuade potential customers online. *Notes* requests its audience to use their scent imagination. With a visual sensibility inspired by magazine perfume ads, glossy bottles, and colorful language, this collection combines bright, evocative visuals and text to deliver you a computer conjured scent of your dreams. ~ Considering the relationship between fragrance and France, it is delightful to release *Notes* and its 100 perfume editions in Paris <3
let sizeVibe;document.body.style.cursor="default";let projectNumber=Math.floor(parseInt(tokenData.tokenId)/1e6),mintNumber=parseInt(tokenData.tokenId)%1e6,hash=tokenData.hash,R=new Random;const descSizeOptions=[26,33,44,55,77,88,111,222],ratio=8.5/11,w=1e3,h=w/ratio;document.body.style.width="100vw",document.body.style.height="100vh";const WIDTH=document.body.clientWidth>document.body.clientHeight*ratio?document.body.clientHeight*ratio:document.body.clientWidth,HEIGHT=document.body.clientWidth>document.body.clientHeight*ratio?document.body.clientHeight:document.body.clientWidth/ratio,M=Math.min(WIDTH,HEIGHT)/Math.min(w,h),PADDING=100*M;let yPos=PADDING,numNotes=0,theme=R.random_choice(themes);document.body.style.backgroundColor="#FFFFFF",theme.push("#F6FFFF"),theme.push("#FFDAEF");let structures=reviewStructures.concat(descriptionStructures);const fonts=["cursive","serif","sans-serif"],fontStyles=["italic","none","none","none","none"],fontWeights=["bold","none","none","none","none"];let main,textAdded=!1;function scent(){main=document.createElement("main"),page=document.createElement("article"),main.style.cursor="context-menu",document.body.appendChild(main),main.style.background=R.random_choice(theme),console.log("welcome to your new signature scent <3"),console.log("by maya man xoxo"),chooseBackground(),main.style.overflow="hidden",main.style.width=WIDTH+"px",main.style.height=HEIGHT+"px",sizeVibe=M,main.style.position="absolute",main.style.top="50%",main.style.left="50%",main.style.transform="translate(-50%, -50%)",main.style.margin="auto";let e=0;for(;yPos<HEIGHT-PADDING&&e<10;)addText(),textAdded?numNotes++:e++}function chooseBackground(){const e=R.random_choice(theme);theme.splice(theme.indexOf(e),1);const t=R.random_choice(theme);if(theme.splice(theme.indexOf(t),1),chanceOf(.44))main.style.background="linear-gradient(to top, "+e+" 0%, "+t+" 100%)";else if(chanceOf(.26))main.style.background="radial-gradient("+e+" 0%, "+t+" 100%)";else if(chanceOf(.26)){const n=R.random_choice(theme);theme.splice(theme.indexOf(n),1),main.style.background="radial-gradient(circle, "+e+" 0%, "+t+" 50%, "+n+" 100%)"}else{const n=R.random_choice(theme);theme.splice(theme.indexOf(n),1),main.style.background="radial-gradient("+e+" 0%, "+t+" 50%, "+n+" 100%)"}}function addText(){textAdded=!1,chanceOf(.77)?addLine():addWaterfall()}function findLongestLine(e){let t=e[0];for(let n=0;n<e.length;n++)t.length<e[n].length&&(t=e[n]);return t}function addWaterfall(){let e=R.random_choice(descSizeOptions),t=generateDescription(),n=phraseSplitter(t);const o=n.length,i=R.random_choice(fonts),s=R.random_choice(fontStyles),l=R.random_choice(fontWeights),d=R.random_choice(theme);let c=document.createElement("span");main.appendChild(c),c.innerText=findLongestLine(n),c.style.fontFamily=i,c.style.fontStyle=s,c.style.fontWeight=l,c.style.whiteSpace="nowrap",c.style.lineHeight=e*sizeVibe*1.2+"px",c.style.fontSize=e*sizeVibe+"px";let a=c.getBoundingClientRect();a.height;if(c.remove(),yPos+o*(e*sizeVibe*1.2)<HEIGHT-PADDING&&a.width<=WIDTH-2*PADDING){textAdded=!0;let t="0 0 "+e/11+"px"+d+", 0 0 "+e/22+"px"+d;for(let o=0;o<n.length;o++){let c=n[o],a=document.createElement("span");main.appendChild(a),a.innerText=c,a.style.position="absolute",a.style.top=yPos+"px",a.style.fontSize=e*sizeVibe+"px",a.style.lineHeight=e*sizeVibe*1.2+"px",a.style.color=d,a.style.fontFamily=i,a.style.fontStyle=s,a.style.fontWeight=l,a.style.textShadow=t;let h=a.getBoundingClientRect(),m=h.width,r=h.height,y=WIDTH-m-PADDING;a.style.left=y<PADDING?PADDING+"px":R.random_num(PADDING,y)+"px",h=a.getBoundingClientRect(),m=h.width,r=h.height,o==n.length-1?yPos+=e*sizeVibe*1.47:yPos+=e*sizeVibe*1.2}}else textAdded=!1}function addLine(){let e,t,n=document.createElement("span");const o=[77,88,99,126,111,222,247,333];chanceOf(.7)?(e=R.random_choice(notes),notes.splice(notes.indexOf(e),1),t=R.random_choice(o)):(e=generateDescription(),t=R.random_choice(descSizeOptions)),n.innerText=e,n.style.fontSize=t*sizeVibe+"px",n.style.lineHeight=t*sizeVibe*1.2+"px",n.style.fontFamily=R.random_choice(fonts),n.style.fontStyle=R.random_choice(fontStyles),n.style.fontStyle=n.style.fontStyle,n.style.fontWeight=R.random_choice(fontWeights),n.style.visibility="hidden",main.appendChild(n);const i=R.random_choice(theme);n.style.color=i,n.style.position="absolute",n.style.top=yPos+"px";let s=n.getBoundingClientRect(),l=s.width,d=s.height;n.style.position="absolute",n.style.textShadow="0 0 "+t/11+"px"+i+", 0 0 "+t/22+"px"+i;let c=WIDTH-l-PADDING;n.style.left=c<PADDING?PADDING+"px":R.random_num(PADDING,c)+"px",l>WIDTH-2*PADDING||yPos+d>=HEIGHT-PADDING?n.remove():(textAdded=!0,n.style.visibility="visible",yPos+=d*R.random_num(1,2),main.appendChild(n))}scent();
const adj=["gentle","crisp","spiritual","sophisticated","fantastic","chic","sharp","joyful","synthetic","cute","potent","youthful","comfortable","complex","layered","forbidden","lush","bewitching","splurge-worthy","cutesy","heavenly","timeless","modern","dark","decadent","graceful","complex","heavy","warm","subtle","girly","pretty","photorealistic","delicious","dainty","creamy","delicate","soft","familiar","comforting","grandma-ish","simple","soapy","tumblr/myspace","fragrant","seductive","sultry","zesty","luscious","juicy","lavish","clean","green","lovely","gentle","classy","charming","sunny","sour","musky","sexy","strong","straightforward","pleasant","powdery","delectable","smooth","rich","senses-tingling","mouthwatering","pure","lavish","gourmand","light","floral","sparkly","captivating","luxurious","dark","intriguing","luscious","unique","mysterious","radiant","delicate","luminous","groundbreaking","powdery","sweet","fun","sugary","fresh","deep","feminine","flirty","cozy","classic","vibrant"],adj_an=["unisex","herbaceous","attractive","earthy","elegant","innocent","intoxicating","easy","enchanting","exquisite","erotic","ethereal","opulent","inoffensive","aquatic","effervescent","essential","enveloping","airy","addictive","innovative"],adj_mixed=adj.concat(adj_an),color=["black","pink","blue","green"],adverb=["wonderfully","charmingly","mouthwateringly","deliberately","classically","relatively","surprisingly","infinitely","perfectly","slightly","indulgently","easily","somewhat","artfully","especially"],noun=["charm","essence","complexity","exoticism","freedom","treasure","romance","perfection","pleasure","glamour","sensuality","versatility","beauty","femininity","elegance","piquancy","vulnerability","memories","surprise","freshness","nostalgia","happiness","indulgence","delight","delicacy","depth","brightness","sentiment"],nspc=[",","...","!","-"],season=["winter","spring","autumn","summer"],hour=["2","3","4","5","6","7","8"],thing=["summer in italy","first kiss","tube of chapstick","brand-new car","holiday in the sun","delicately beautiful insect","majestic castle","handful of caramel popcorn","summer music festival","butter cookie","bouquet of wildflowers","rainbow","bubble bath","dryer sheet","rose","rose-colored curtain","strawberry shortcake","milkshake","marshmallow","white rabbit"],punctuation=["!","!!","!!!","..."," :)"," <3"," <33","!! :)"],activity=["being a classy and sexy woman walking the streets","lighting your heart with nostalgic dreamy summer lanterns","unfolding a hand-me-down wool blanket","sitting on an antique loveseat near an invitingly large fireplace","getting punched in the nostrils by a cinnamon incense stick","sniffing your scarf after a fun night out","venturing to the far grassy hills","sitting with hello kitty figurines on my desk","getting out of a warm bubble bath","waking in expensive white bedding","entering a room where cookies have been baking all day","drinking warm milk in porcelain mugs on a cold winter night","enjoying a simple breakfast of a hot cup of foamed cappuccino","waking up in a charming Italian town","leaning against a great golden lion who is purring like a race car","closing your eyes and dreaming that your spirit is at peace","encountering scents drifting from a distant garden on the quiet breeze","waiting for the languor of evening shadows","rising up to meet the mysteries at hand for the evening","eating cotton candy in a dream","walking into a garden in full bloom","entering a stage set with paper lanterns and parasols","wearing a piece of contemporary art","gorging yourself silly while swinging your red ruby slippers back and forth","wearing something unapologetically luxurious","being in love","getting noticed when you walk into a room","petting a mischievous tiger cub","being tugged gently by summer winds","spending afternoons under parasols","drinking a cup of green tea in an upmarket equestrian store","enjoying a date night out","enjoying a rice krispie treat after school","finding yourself in the appreciation of life","introducing yourself to each colour of the sunset","holding a glowing white blossom right in your hand","falling head over heels","buying a plane ticket straight to a tropical island","lounging on satin sheets","being fed ice cream","licking whipped cream off of your fingers","watching the sun set over the ocean"];let reviewStructures=[["it’s not","adj_mixed","or","adj_mixed","but it’s a nice smell"],["smells like","adj","notes","on me"],["so ","adj_mixed","and","adj_mixed"],["adj_mixed","and","adj_mixed",",","probably a safe blind buy"],["smells pretty","adj_mixed"],["adj_mixed","and yet very","adj_mixed","scent"],["very","adj_mixed","scent"],["it’s a","adj",",","adverb","worn fragrance"],["lasts the entire day on me"],["it’s a","adj",",","adj_mixed",",","and even","adverb","adj_mixed","fragrance"],["I really love this","notes","and","notes","version"],["the","adj_mixed","design of the bottle takes on a","adj","color"],["this","adj_mixed","bottle is adorned with a","adj","color"],["accentuated by a","adj","notes","accord"],["embodies the","noun","of Parisian style"],["adverb","blends the","noun","of a","adj",",","adj_mixed","notes","with the","adj_mixed","noun","of a","adj",",","adj_mixed","notes","accord"],["a","adj","scent between","noun","and","noun"],["i still have my bottle from back then, it just smells like","noun",",","noun","girl era !!"],["adj_mixed","adj_mixed","and","adverb","adj_mixed","scent"],["there is nothing","adj_mixed","here"],["noun","in a bottle"],["it’s not very","adj_mixed","on me, but it’s there"],["this","adj_mixed","adj_mixed","adj_mixed","scent enveloped me"],["a","adj","somewhat","adj_mixed","notes"],["my favourite","adj_mixed","scent"],["first whiff in warm weather:","adj_mixed","noun"],["base notes after 1 hour:","notes",",","notes",",","notes"],["noun","in a bottle"],["enjoy wearing this on a","adj","day outside"],["a","adj","adj_mixed","adj_mixed","adj_mixed","adj_mixed","scent"],["3 words:","adj_mixed","adj_mixed","adj_mixed"],["it is","adj_mixed",",","but a bit","adj_mixed","..."],["scent itself is VERY","adj_mixed",",","borderline","adj_mixed"],["my absolute most complimented fragrance of all time"],["lasts about","hour","hours"],["my","season","staple for sure"],["very","adj_mixed"],["adj_mixed","everyday scent"],["a very","adj_mixed","","fragrance"],["mmm this smells so","adj_mixed","and","adj_mixed","and","adj_mixed"],["very","adj_mixed","to smell in the air"],["such a fun","season","scent"],["the bottle is","adj_mixed","and","adj_mixed"],["the opening is very","adj_mixed"],["quite a linear","notes","notes","and","notes","fragrance"],["it opens as this","notes","smell"],["straight up","notes"],["smells like","activity"],["still brings me back to","adj_mixed","times"],["one of the most","adj_mixed","perfumes"],["a little more","adj_mixed","than I was expecting"],["this wears beautifully in the heat and can hold its own in humidity"],["a perfect balance of","adj_mixed","and","adj_mixed"],["adverb","unisex"],["adj_mixed","smell of a","thing"],["this is distinctly","adj_mixed","noun","core"],["feels","adj_mixed","and","adj_mixed"],["notes","note stayed with me for a long time"],["kind of like a","thing"],["a","adj","whisper of a perfume"],["a pure delight"],["so so","adj_mixed","and","adj_mixed"],["what can I say other than wow mmhmmm yes"],["I cannot stop smelling this... such a","adj","memory"],["definitely a skin scent"],["strong projection and long lasting"],["one for the","adj_mixed","girls"],["adj_mixed","and","adj_mixed","hint of","notes"],["a masterpiece"],["adverb","adj_mixed"],["adverb","adj_mixed","fragrance"],["worth the money"],["adverb","adj_mixed","notes"],["I wear this on","adj_mixed","days"],["one spray is enough"],["when I am in a","adj","mood",",","I wear this"],["gives the allure of being","adj_mixed",",","adj_mixed",",","and","adj_mixed"],["leans more toward the","adj_mixed","side"],["you can totally feel the","notes"],["something a","adj","girl would wear"],["adj_mixed","as hell"],["on a woman like myself, this is","adj_mixed"],["men love this, women love this"],["true","noun","in a bottle"],["more","adj_mixed","overtones"],["adj_mixed","undertones"],["good longevity"],["something","adverb","adj_mixed","about this accord"],["right in-between","adj_mixed","and not"],["association:","adj_mixed","stranger you meet on a","season","holiday"],["way more","adj_mixed","than I imagined"],["if you want to get compliments (from girls) then this is an","adj_an","choice"],["THE BEST gourmand to wear in the","season"],["the bottle is even more","adj_mixed","in person"],["my new","adj_mixed","scent"],["this gives me strong","notes","vibes"],["opening is","adj_mixed","but after 2 minutes it is so","adj_mixed","on my skin"],["simply stunned by the","noun","of this fragrance"],["this would be a","adj","scent to wear around a","adj","crush"],["the bottle is quite","adj_mixed"],["adj_mixed","enough for","season"],["soooo","adj_mixed"],["noun","in a bottle"],["EVERYONE LOVES THIS"],["if I smelt this on a girl i’d collapse on the street"],["a","adj","fragrance for a girl growing into womanhood"],["this is what i'd wear if i was","activity"],["very","adj_mixed","scent trail"],["this is for","adj_mixed","girls"],["a few sprays are more than enough"],["bottle is","adj_mixed","and totally matches the vibe"],["it feels","adj_mixed","yet","adj_mixed"],["a","adj","thing","type of scent~ in a good way"],["I feel","adj_mixed","whenever I wear this"],["soooooooo","adj_mixed","so","adj_mixed","so","adj_mixed"],["feeling like a girl having a vanilla latte and a slightly sweet croissant at a French cafe"],["imagine a","thing","turning into","noun"],["men go crazy for this one"],["exudes a","adj","noun"],["mmm","adverb","adj_mixed"],["I was scared of the","notes","note","but it blends so well here"],["it resembles a","adj","and","adj","thing"],["the","noun","of this on initial spray is","adj_mixed"],["literally","season","in a bottle"],["the aroma surrounding you will be","adj_mixed"],["it definitely has a","adj","vibe"],["a","adj","and","adj_mixed","noun"],["a scent that wears","adj_mixed","and","adj_mixed"],["a","adj","twist of","notes"],["this scent will evoke","adj_mixed","memories"],["adverb","adj_mixed","notes","scent"],["a must try for","notes","lovers"],["like a","thing"],["mmm simply","adverb","adj_mixed"]],descriptionStructures=[["represents the","noun","of a woman’s character"],["the most","adj","notes","scent we’ve smelled yet"],["a","adj","experience for the senses that takes you far beyond a","adj","notes","essence"],["a","adj","and","adj_mixed","dive into","adj","noun"],["a","adj","noun"],["a","adj",",","adj_mixed","noun"],["radiates","adj_mixed",",","adj_mixed","noun"],["a","adj","experience for the senses"],["takes you far beyond a","adj","adj_mixed","essence"],["opens with an","adj_an","burst of","adj_mixed","notes","and","notes"],["slinks toward a","adj","notes","accord"],["a","adj","and","adj_mixed","vibe"],["a","adj","adj_mixed","swirl where a","adj","snake will embrace you with its","adj_mixed","trail"],["a","adj","encounter","with a","adj","stranger"],["adj","notes","frosting"],["at once","adj_mixed","and","adj_mixed"],["not an overly","adj_mixed","scent"],["a","adj","take on a","adj","fragrance"],["notes","balances this","adj_mixed","composition"],["the perfect fragrance for romance"],["we can’t get enough of the","adj_mixed","noun"],["more than a perfume,","it is a","adj","work of art"],["adj_mixed","and","adverb","adj_mixed"],["has a","adj","aura"],["hints of","adj_mixed","notes","up the","adj_mixed","factor"],["doesn’t apologize for its","adj","noun"],["celebrating","adj_mixed","noun"],["melts into the skin in the most","adj_mixed","way"],["truly","adj_mixed","and worth every penny"],["for the","adj_mixed","type of woman"],["an aromatic shimmer of","notes"],["will sail you through","adj_mixed","and","adj_mixed","nights"],["built around a","adj","notes"],["adds a touch of","adj_mixed","energy"],["sucks you in with a mouthwateringly","adj_mixed","accord"],["a","adj","and","adj","drydown"],["adj_mixed","enough to put","adj_mixed","thoughts in your mind"],["opens with a","tingly sparkle of","notes"],["it lingers for hours"],["supported by a","adj",",","adj_mixed","base of","notes"],["expresses the","noun","of the Parisian woman"],["adj_mixed","enough not to demand major commitment before spritzing"],["will carry you effortlessly into champagne hour"],["not an","adj_an","feel but more like","adj_mixed","exuberance"],["it never crosses the line into","adj_mixed","territory"],["conjures","adj_mixed","dreams"],["heavenly","notes","laced with","notes","and","notes"],["the","adj_mixed","notes","eases into a","adj",",","adj","notes"],["this is like a dessert you would eat in a dream"],["like the","adj_mixed","smell of","season"],["an icon of","adj_mixed","noun"],["the heart bursts forth in","notes","waves"],["captures the","adj_mixed","noun","of the","adj_mixed","fruit"],["adj_mixed","with the","adj_mixed","noun","of","season"],["we are honored to be one of the few select retailers on the planet to offer this","adj_mixed","noun"],["fits of giggles fueled by","notes"],["a polite suggestion of","notes"],["imagine","activity"],["like","activity"],["picture you are","activity"],["just like","activity"],["picture this:","activity"],["you will be","activity"],["the first impression is that of","activity"],["reminds us of","activity"],["the vibe:","activity"]];
const notes2=["Skunk Cabbage","Snake Plant","Spinach","Stems Greens","Strawberry Leaf","Sugandha Kokila","Sundew","Sweet Grass","Tansy","Tarragon","Tea","Thistle","Thyme","Tieguanyin Tea","Tobacco","Tomato Leaf","Trees","Tulsi","Vanilla Leaves","Vine","Violet Leaf","Water Lily Leaf","Wheat","White Meranti","Wild garlic leaf","Willow-Leaved","Wintergreen","Wormwood","Yarrow","Yunnan Red Tea","Allspice","Asafoetida","Bay Leaf","Bengal Pepper","Cacao Pod","Caraway","Cardamom","Carolina Reaper","Cassia","Chutney","Cinnamon","Cinnamon Leaf","Clove Leaf","Cloves","Coffee","Coffee CO2","Coffee Tincture","Coriander","Cumin","Turmeric","Curry","Curry Tree","Dill","Fennel","Fenugreek","Galanga","Ginger","Green Coffee","Guinea Pepper","Indian Spices","Japanese Pepper","Kaempferia Galanga","Kopi Luwak Coffee","Licorice","Mace","Mustard Seed","Nutmeg","Pepper","Peppertree","Pimento","Pimento Leaf","Pimento Seeds","Pink Pepper","Priprioca","Saffron","Safraleine","Sesame","Siam Cardamom","Sichuan Pepper","Star Anise","Sumac","Tamarind","Timur","Tonka Bean","Vanilla","Wan Sao Lhong","Wasabi","Water Pepper","Agave Nectar","Baked Apple","Baklava","Biscuit","Bonbon","Bread","Brioche","Brown Sugar","Bubbaloo","Bubble Gum","Burnt Sugar","Butter","Buttercream","Butterscotch","Cacao Butter","Cake","Calissons d'Aix","Candied Fruits","Candied Ginger","Candied Orange","Candies","Canelé","Caramel","Cassata Siciliana","Cereals","Cheesecake","Cherry Milk","Cherry Syrup","Chocolate Fudge","Chocolate Truffle","Churros","Coconut Pie","Coconut Powder","Condensed Milk","Cone Waffle","Confetti","Cookie","Cookie Dough","Cosmofruit","Cotton Candy","Cream","Creamsicle","Crème Brûlée","Croissant","Cupcake","Custard","Dark Chocolate","Dates","Donut","Dulce de Leche","Eggnog","Fougassette","French Pastries","Frosting","Gelatin","Gingerbread","Griotte Cherries","Halva","Hazelnut Cocoa Spread","Honey","Honeycomb","Horchata","Ice cream","Icing Pink","Jelly","Kulfi","Lemon Pie","Loukhoum","Macarons","Maple Syrup","Maraschino Cherry","Marmalade","Marron Glacé","Marshmallow","Marzipan","Meringues","Milk Cream","Milk Mousse","Milkshake","Molasses","Nougat","Nutella","Oatmilk","Palm Sugar","Pancake","Panettone","Panna Cotta","Pastiera Napoletana","Peach Cream","Pear Ice Cream","Popcorn","Praline","Profiterole","Pudding","Puff Pastry","Rainbow Sorbet","Red Fruits Sorbet","Rice Pudding","Rose Jam","Sacher Torte","Sorbet","Souffle","Sprinkles","Spun Sugar","Strawberry Syrup","Sugar","Sugar Syrup","Tartine","Tiramisu","Toast","Toffee","Tropézienne Tarte","Vanilla Caviar","Waffle","White Chocolate","White Chocolate Truffle","Whoopie Pie","Yogurt","Zefir","Akigalawood","Alder","Almond tree","Amaranth","Amburana Bark","Amburana Wood","Amyris","Apple Tree","Araucaria","Araucaria","Arbutus","Argan Tree","Aspen","Australian Blue Cypress","Bamboo","Baobab","Bark","Beech","Belambra Tree","Birch","Black Hemlock","Black Spruce","Blackwood","Blonde Woods","Brazilian Rosewood","Buddha Wood","Cambodian Oud","Canadian Balsam","Carob Tree","Cascarilla","Cashmir wood","Cedar","Chalood Bark","Cherry Tree","Chinese Oud","Clearwood","Cocobolo","Coffee Tree","Cork","Cypress","Cypriol Oil","Dark Patchouli","Ditax wood","Dreamwood","Driftwood","Dry Wood","Ebony Tree","Elm","Eucalyptus","Fig tree","Fir","Grass Tree","Guaiac Wood","Hiba","Hinoki Wood","Ho Wood","Indian Oud","Indian Woods","Ironwood","Kowhai","Laotian Oud","Larch","Lichen","Liquidambar","Mahogany","Malaysian Oud","Mango Tree","Manuka","Maple","Mesquite Wood","Muhuhu","Mysore Sandalwood","Neem","Nootka","Oak","Oakmoss","Olive Tree","Palisander Rosewood","Palo Santo","Palo Verde Tree","Pamplewood","Paperbark","Papyrus","Patchouli","Peach Tree","Pear Tree","Pine Tree","Pink Ipê Tree","Plum Tree","Ravenala","Ravensara","Red Willow","Redwood","Saman","Sandalwood","Satinwood","Sawdust","Sequoia","Siam","Siam Wood","Spruce","Sycamore","Takamaka","Tamboti Wood","Tatami","Teak Wood","Thailand Oud","Thanaka Wood","Thuja","Transparent Woods","Vetiver","Vietnamese Oud","White Oud","White Willow","Wood barrel","Yohimbe","Amberwood","Andiroba","Bakhoor","Balsamic Vinegar","Birch Tar","Coal Tar","Dragon Blood Resin","Elemi","Incense","Pine Tar","Resins","Rubber","Surf Wax","Tea Tree Oil","Akashic Acord","Aldron","Amber","Amber Xtreme","Bacon","BBQ","Beeswax","Carrot Seeds","Caviar","Cheese","Coral Reef","Exaltolide","Fur","Genet","Goat Hair","Goat's Milk","Hyraceum","Kephalis","Kyphi","Leather","Meat","Milk","Musk","Muskrat","Oysters","Saffiano Leather","Sea Shells","Skatole","Skin","Starfish","Suede","Sylkolide","Tolu Balsam","Truffle","Velvione","Absinthe","Advocaat","Amaretto","Applejack","Baileys Irish Cream","Batida","Beer","Bellini","Blue Margarita","Bourbon Whiskey","Cachaça","Caipirinha","Campari","Cappuccino","Champagne","Champagne Rosé","Cherry Liqueur","Chinotto","Coca-Cola","Cocktail Fruits","Cognac","Cognac","Cosmopolitan Cocktail","Cream Soda","Curaçao","Daiquiri","Eau de Vie","Espresso","Fruit Tea","Gin","Grenadine","Hi-Fi","Jasmine Tea","Kava Drink","Kir Royal","Lemon Soda","Lemonade","Limoncello","Liquor","Macchiato","Madeira","Mai Tai Cocktail","Margarita","Martini","Masala Chai","Mezcal","Midori","Mocha","Mojito","Moscow Mule","Mulled Wine","Orange Soda","Ouzo","Pina Colada","Pisco Sour Cocktail","Plum Wine","Port Wine","Prosecco","Punch","Raki","Red Wine","Rhum Agricole","Rice Water","Rum","Sake","Sangria","Sparkling Water","Sparkling Wine","Syrup","Tequila","Tokaji Wine","Tonic Water","Umeshu","Vermouth","Vinegar","Vodka","Whiskey","White Wine","Aquozone","Ash","Asphalt","Black Diamond","Black Leather","Blood","Boisiris","Bourgeonal","Brick","Brown Scotch Tape","Burnt Match","Calone","Calypsone","Candle Wax","Chalk","Cinnamaldehyde","Clarycet","Clay","CO2 Extracts","Coal","Cobblestone","Cocaine","Concrete","Copper","Coral Limestone","Coranol","Cork","Cosmone","Coumarin","Credit Cards","Crustaceans","Cyclopidene","Damascone","Dew Drop","Dirt","Dust","Earth Tincture","Egg","Ember","Fabric","Fire","Fish","Flint","Flour","Gasoline","Georgywood","Geosmin","Gold","Graphite","Guaiacol","Gunpowder","Hair Pomade","Hand Cream","Head Space Waterfall","Healingwood","Hedione","Helvetolide","Holy Water","Hot Iron","Ice","Indole","Industrial Glue","Ink","Instant Film","Jeans","Lacquered Wood","Lactones","Lava","Lilybelle","Linen","Lip Gloss","Lipstick","Little Doll Strawberry","Mascarpone Cheese","Molasses","Money","Motor Oil","Mountain Air","Mud","Paper","Paradisone","Parchment","Pearadise","Pearls","Peat","Pebbles","Pencil","Petroleum","Pink Crystal","Pink Himalayan Sea Salt","Plastic","Plastic Bag","Play-Doh","Poison","Pollen","Pomarose","Salicylic Acid","Salt","Sand","Satin","Sauna","Scent Trek","Sclarene","Sea Water","Serenolide","Shamama Attar","Silk","Silver","Siren","Slate","Smoke","Snow","Soap","Sodium Silicate","SP3 Carbon","Spiranol","Spray Paint","Steam","Stone","Sulphur","Suntan Lotion","Sweat","Talc","Tennis Ball","Toothpaste","Tulle","Varnish","Velvet","Vinyl","Vitamin C","Water","Wet Plaster","Wet Stone","White Leather","Wool"];let notes=notes1.concat(notes2);
const notes1=["Bergamot","Bitter Orange","Blood Orange","Calamansi","Candied Lemon","Chen Pi","Chinotto","Citron","Citrus Water","Citruses","Clementine","Finger Lime","Grapefruit","Grapefruit Leaf","Grapefruit Peel","Green Tangerine","Hassaku","Hatkora Lemon","Kaffir Lime","Kumquat","Lemon","Lemon Balm","Lemon Tree","Lemon Verbena","Lemon Zest","Lemongrass","Lime","Limetta","Litsea Cubeba","Mandarin Orange","Mandora","Orange","Palestinian Sweet Lime","Petitgrain","Pokan","Pomelo","Shiikuwasha","Tangelo","Tangerine","Tangerine Zest","Yuzu","Acai Berry","Acerola","Acorn","Almond","Apple","Apple Juice","Apple Pulp","Apple Sherbet","Apricot","Arctic Bramble","Argan","Artichoke","Banana","Barberry","Bearberry","Beetroot","Black Cherry","Black Currant","Black Sapote","Black Walnut","Blackberry","Blackthorn","Blueberry","Boysenberry","Brazil Nut","Breadnut","Buriti","Burning Cherry","Candlenut","Cantaloupe","Star Fruit","Carrot","Cashew","Cassowary Fruit","Cauliflower","Cepes","Chayote","Cherry","Chestnut","Chia Seed","Chickpeas","Chinese Magnolia","Cloudberry","Coco De Mer","Coconut","Coconut Water","Conifer","Corn","Corn Silk","Cranberry","Cucumber","Currant Leaf and Bud","Daikon Radish","Dark Plum Wu Mei","Dewberry","Dried Apple Crisp","Dried Apricot","Dried Fruits","Durian","Elderberry","Feijoa Fruit","Fig","Fig Leaf","Forest Fruits","Frosted Berries","Fruit Salad","Gariguette Strawberry","Genipapo","Goji Berries","Gooseberry","Grains","Grape Seed","Grapes","Green Anjou Pears","Green Grape","Green Pear","Green Plum","Greengage","Ground Cherry","Guarana","Guava","Hazelnut","Isabella Grape","Jabuticaba","Jackfruit","Japanese Loquat","Kiwi","Kumbaru","Lingonberry","Litchi","Loganberry","Longan Berries","Macadamia","Mahonia","Malt","Mango","Mangosteen","Maninka","Marian Plum","Medlar","Melon","Mirabelle","Mulberry","Mung Bean","Mushroom","Nashi Pear","Nectarine","Okra Seeds","Olive","Papaya","Passionfruit","Pea","Peach","Peanut","Pear","Pecan","Persimmon","Peruvian Pepper","Pineapple","Pinot Noir Grapes","Pistachio","Pitahaya","Pitanga","Plum","Pomegranate","Potato","Prickly Pear","Pumpkin","Quandong Desert Peach","Quince","Rambutan","Raspberry","Red Apple","Red Berries","Red Currant","Red Fruits","Red Fruits Smoothie","Red Mulberry","Rhubarb","Roasted Nuts","Sapodilla","Sarsaparilla","Sea Buckthorn","Seriguela","Shea Butter","Shea Nuts","Silverberry","Snowberry","Sour Cherry","Soursop","Soybean","Squash","Star Apple","Strawberry","Tayberry","Tomato","Tropical Fruits","Tucumã","Walnut","Walnut Milk","Water Fruit","Watermelon","Wattleseed","White Currant","White Grape","Wild Strawberry","Williams Pear","Winterberry","Wolfberry","Yellow Cherry","Yellow Fruits","Yuca Cassava","Yumberry","Acacia ","Acerola Blossom","Albizia","Almond Blossom","Alpinia","Alstroemeria","Althaea","Alumroot","Alyssum","Amarillys","Amazon Moonflower","Anemone","Angel's Trumpet","Apple Blossom","Apricot Blossom","Ashoka Flower","Astragalus","Azalea","Azteca Lily","Banana Flower","Banksia Australian","Begonia","Belladona","Bellflower","Bergamot Blossom","Bird cherry","Black Currant Blossom","Blackberry Blossom","Blue Lilies","Blue Poppy","Bottlebrush","Bread Flower","Buttercup","Cacao Blossom","Calla Lily","Camellia","Campion Flower","Cannonball Flower","Carambola Blossom","Cardamom Flower","Carnation","Celosia","Chai Hu","Chamomile","Champaca","Cherry Blossom","China Rose","Chinotto blossom","Chocolate Flower","Chrysanthemum","Cistus Incanus","Clematis","Clover","Coconut Blossom","Coffee Blossom","Cosmos Flower","Costus","Cotton Flower","Creamy Flowers","Crinum Lily","Cucumber Flower","Cyclamen","Dahlia","Daisy","Dandelion","Daphne","Daylily","Deadnettle","Delonix","Desert Rose","Dianthus","Dogwood Blossom","Dove Tree","Dried Rose","Edelweiss","Eglantine Rose","Elderflower","Encian","English Marigold","Evergreen","Field Scabious","Fig Blossom","Fire Lily","Flamingo Flower","Flax","Forget Me Not","Fragonia","Freesia","Fringed Pink","Fuchsia","Geranium","Gladiolus","Goldenrod","Gorse","Grapeflower","Green Tea Flower","Grevillea","Guava Blossom","Guayacan","Gustavia Flower","Hawthorn","Hazel Blossom","Heliotrope","Hellabore Flower","Hemlock","Hibiscus","Hoary Stock","Holly Flower","Hollyhock","Honeydew Blossom","Hortensia","Hoya Carnosa Wax Plant","Hyacinth","Hyssop","Impatiens","Inula","Iris","Iris Butter","Iris Pallida","Jacaranda","Jade Flower","Jasmine Orchid","Jujube Blossom","Kadam","Kangaroo Paw","Kanuka","Kiwi blossom","Laburnum","Lady of the Night Flower","Lady Slipper Orchid","Lamduan Flower","Lamprocapnos","Lantana","Larkspur","Laurel Blossom","Lavender","Leatherwood","Liatris","Lilac","Lily-of-the-Valley","Lime Blossom","Litchi Blossom","Lotus","Lydia Broom","Magnolia","Magnolia Brooklynensis","Magnolia Leaf","Mango Blossom","Mariposa Lily","Mayflower","Meadowsweet","Melilotus","Melissa Flower","Michelia","Mignonette","Mimosa","Mirabilis","Monarda","Morning Glory Flower","Moss Flox","Myrtle","Narcissus","Nectarine Blossom","Night Blooming Jasmine","Olive flower","Opium","Orange Cassia Tree","Orange Flower Water","Orange Flower Water","Orchard Blossom","Orchid","Orchid Black Diamond","Orchid Cactus","Orchid Pink Leopard","Osmanthus","Pansy","Papaya Blossom","Paramela","Passion Flower","Pataqueira","Peach Blossom","Pear Blossom","Pelargonium","Peony","Periwinkle","Petunia","Pineapple Blossom","Pink Flamingo Heliconia","Pink Lily","Pittosporum","Plum Blossom","Plumeria","Poinsettia","Pomegranate Blossom","Poppy","Primrose","Princess Tree","Prunella","Purple Coneflower","Rangoon Creeper","Raspberry Blossom","Redwood Flower","Rose","Rose Hip","Rose Japanese","Rose Mallow","Rosebay Willowherb","Rosebud","Roselle","Safflower","Sainfoins","Sand Lily","Sandalwood Flower","Santolina","Saucer Magnolia","Sea Daffodil","Silk Tree Blossom","Skeleton Flower","Smoketree","Snakeroot","Snow Lotus","Snowdrops","Sophora Toromiro Flower","Sour Cherry Blossom","Spanish Broom","Spiraea","Starflower","Strawberry Flower","Strelitzia","Strobilanthes Callosa","Sunflower","Sweet Pea","Taif Rose","Tamarisk","Tobacco Blossom","Transparent Flowers","Trillium","Tulip","Vanilla Bahiana","Viburnum","Violet","Violet Woodsorrel","Wallflower","Waratah","Water Flowers","Water Hyacinth","Water Lily","White Dahlia","White Ginger Lily","White Lace Flower","White Tea Blossom","Wildflowers","Wisteria","Wrightia","Yellow Bells","Yellow Flowers","Ylang-Ylang","Yuzu Flower","Zinnia","Arum Lily","Belanis","Black Locust","Boronia","Carissa","Datura","Frangipani","Gardenia","Grapefruit Blossom","Honeysuckle","Jasmine","Lemon Blossom","Lily","Mandarin Orange Blossom","Melati","Mock Orange","Moon Flower","Night Blooming Cereus","Orange Blossom","Stephanotis","Syringa","Tangerine Blossom","Tiare Flower","Tuberose","White Flowers","White Tobacco","Agave","Algae","Aloe Vera","Angelica","Angelica Root","Apple Mint","Arnica","Asparagus","Assam Tea","Avocado","Banana Leaf","Barley","Basil","Bay Essence","Beachheather","Betel Leaf","Black Currant Leaf","Blackberry Leaf","Borage","Borneol","Bran","Buckwheat","Buckwheat Tea","Bulrush","Burdock","Cactus","Calamus","Calycanthus","Cannabis","Carnation Leaves","Catnip","Cedar Leaves","Celery","Celery Seeds","Centella Asiatica","Cherry Leaf","Chicory","Chive","Cilantro","Citron Leaf","Clary Sage","Coca","Deer Tongue Grass","Dried Fallen Leaves","Earl Grey Tea","Fermented Tea","Fern","Flouve","Fresh Evergreen","Gajumaru Banyan","Garlic","Genmaicha","Ginkgo","Ginseng","Grape Leaves","Grass","Green Branches","Green Forest","Green Pepper","Green Sap","Gromwell","Hay","Henna","Hops","Horseweed","Immortelle","Ivy","Jambu","Juniper","Juniper Berries","Katrafay","Katsura Leaf","Lantana leaf","Lapsang Souchong Tea","Laurissilva Forest","Lesser Calamint","Lettuce","Lily-of-the-Valley Leaves","Limnophila Aromatica","Linaloe Berry","Longjing Tea","Lovage Root","Mandrake","Marigold","Marjoram","Matcha Tea","Mimosa Leaves","Mint","Mistletoe","Mugwort","Naswar","Nettle","Nut Grass","Oak Leaves","Oat","Olive Leaf","Oolong Tea","Orchid Leaf","Oregano","Palm Leaf","Palmarosa","Pandanus","Parsley","Peach Leaf","Pear Leaf","Pesto","Petrichor","Peyote","Physcool","Polygonum","Pu'er Tea","Purslane","Red Algae","Reed","Rice","Rooibos Red Tea","Roots","Rose Leaf","Rose Thorn","Rosemary","Roseroot","Rue","Rye","Sabah Snake Grass","Sage","Sansevieria","Sap","Satureja","Saw Palmetto","Seaweed","Shiso","Sideritis Mountain Tea"];
let diorAddict=["#8C031C","#F24B78","#D996CE","#F2A9A2","#F20505"],betseyJohnson=["#F2137B","#F2C4DE","#BF0B80","#D984BB","#F2A679"],forbiddenEuphoria=["#F2DCEC","#8C277B","#F1EBF2","#D2BAD9","#482E59"],missDior=["#F2A2C0","#F285B8","#FBCBD8","#D99789","#A66A65"],fairyDust=["#1E2759","#9184BC","#3F59A6","#91B7D9","#AEF2F2"],rose=["#BF1B68","#F2059F","#D94AA7","#8C5042","#D9A59A"],divine=["#F2D399","#8C5716","#D9A362","#592B02"],sparkle=["#030640","#496D8C","#F2BBA7","#594B48","#A69292"],bobby=["#F2BBCF","#F2D0E0","#A656A0","#F0F0F2","#D9C55F"],godIsAWoman=["#A65BA1","#A38FBF","#CABFD9","#D9D7D0","#AE8DC2"],dropDIssey=["#ADD4D9","#5A7362","#75A653","#A4BF88","#CAD9BA"],lostCherry=["#F2D5DB","#A60A33","#F2ACBF","#590725","#A66641"],flora=["#BF417C","#9CD3D9","#3CA692","#BF784E","#BF6060"],pulse=["#050A26","#0A1840","#455473","#80A2BF","#BBEDF2"],bombshell=["#BF0449","#F20574","#F288C2","#F25ECB","#D9C5C1"],chance=["#F2DFE6","#B0D9CD","#F2E7AE","#F2E0D0","#8C564A"],lolialempicka=["#030A8C","#021F59","#CEDEF2","#0476D9","#0487D9"],sweetTooth=["#D98D62","#A65B4B","#F2CDC4","#D9A7A3","#D92929"],ginza=["#8C0813","#BF0436","#59211C","#F2786D","#D9B1AD"],happy=["#D9AF8B","#F2EDE9","#F27830","#8C5B3F","#D95829"],petalsPlease=["#BF0A4C","#F2A7CA","#F2DCE8","#D9048E","#F252D8"],eilish=["#D9AD77","#BF7B54","#59220E","#261007","#A65E44"],goodFortune=["#B488F2","#E3DCF2","#C9BDF2","#120F26","#8C6151"],secret=["#E3ADDD","#9AC5E7","#F7F5F4","#C79BC8","#FF0000","#FFDDEF"],themes=[secret,goodFortune,eilish,petalsPlease,happy,ginza,sweetTooth,lolialempicka,chance,bombshell,pulse,flora,lostCherry,dropDIssey,godIsAWoman,bobby,sparkle,divine,diorAddict,betseyJohnson,forbiddenEuphoria,missDior,fairyDust,rose];
class Random{constructor(){this.useA=!1;let e=function(e){let n=parseInt(e.substring(0,8),16),t=parseInt(e.substring(8,16),16),r=parseInt(e.substring(16,24),16),a=parseInt(e.substring(24,32),16);return function(){n|=0,t|=0,r|=0,a|=0;let e=(n+t|0)+a|0;return a=a+1|0,n=t^t>>>9,t=r+(r<<3)|0,r=r<<21|r>>>11,r=r+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substring(2,34)),this.prngB=new e(tokenData.hash.substring(34,66));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,n){return e+(n-e)*this.random_dec()}random_int(e,n){return Math.floor(this.random_num(e,n+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}function chanceOf(e){return R.random_bool(e)}function genTokenData(e){let n={},t="0x";for(var r=0;r<64;r++)t+=Math.floor(16*Math.random()).toString(16);return n.hash=t,n.tokenId=(1e6*e+Math.floor(1e3*Math.random())).toString(),n}function randomChoice(e){return R.random_choice(e)}function phraseSplitter(e){let n=e.split(" "),t=[],r=0;for(;r<n.length;){let e=R.random_int(1,3),a=[];for(;a.length<e&&r<n.length;)a.push(n[r]),r++;let o="";for(let e=0;e<a.length;e++){let n=a[e];e<a.length-1?o+=n+" ":o+=n}t.push(o)}return t}function generateDescription(){let e="",n=randomChoice(structures);structures.splice(structures.indexOf(n),1);for(let t=0;t<n.length;t++){let r=!0,a="";switch(n[t]){case"noun":a=randomChoice(noun),noun.splice(noun.indexOf(a),1);break;case"thing":a=randomChoice(thing),thing.splice(thing.indexOf(a),1);break;case"adj":a=randomChoice(adj),adj.splice(adj.indexOf(a),1);break;case"adj_an":a=randomChoice(adj_an),adj_an.splice(adj_an.indexOf(a),1);break;case"adj_mixed":a=randomChoice(adj_mixed),adj_mixed.splice(adj_mixed.indexOf(a),1);break;case"adverb":a=randomChoice(adverb),adverb.splice(adverb.indexOf(a),1);break;case"notes":a=randomChoice(notes).toLowerCase();break;case"desc":a=randomChoice(desc);break;case"season":a=randomChoice(season);break;case"hour":a=randomChoice(hour);break;case"activity":a=randomChoice(activity),activity.splice(activity.indexOf(a),1);break;default:a=n[t]}e+=a,nspc&&nspc.indexOf(n[t+1])>=0&&(r=!1),t<n.length-1&&r&&(e+=" ")}if(chanceOf(.17)){const n=randomChoice(punctuation);e+=n,punctuation.splice(punctuation.indexOf(n),1)}return e}
*Notes* is a generative collection that dives into the vivid online universe of perfume descriptions. Pulling from lists of fragrance “notes,” product description text, and personal perfume reviews from [fragrantica](https://www.fragrantica.com/), *Notes* remixes found language into a unique visual output– a collaged, imaginary fragrance. Given the inability to sample scents through our phones or computers, perfumes rely on detailed descriptions to best communicate what a product smells like and persuade potential customers online. *Notes* requests its audience to use their scent imagination. With a visual sensibility inspired by magazine perfume ads, glossy bottles, and colorful language, this collection combines bright, evocative visuals and text to deliver you a computer conjured scent of your dreams. ~ Considering the relationship between fragrance and France, it is delightful to release *Notes* and its 100 perfume editions in Paris <3
let{abs:_,ceil:e,floor:$,sin:r,sqrt:i,max:c,min:n,cos:l}=Math;class Random{constructor(){this.useA=!1;let _=function(_){let e=parseInt(_.substr(0,8),16),$=parseInt(_.substr(8,8),16),r=parseInt(_.substr(16,8),16),i=parseInt(_.substr(24,8),16);return function(){r|=0;let _=((e|=0)+($|=0)|0)+(i|=0)|0;return i=i+1|0,e=$^$>>>9,$=r+(r<<3)|0,r=(r=r<<21|r>>>11)+_|0,(_>>>0)/4294967296}};this.prngA=new _(tokenData.hash.substr(2,32)),this.prngB=new _(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}g(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}}const R=new Random;colorPick=pick_color(colorSets=[{name:"Dg",cBg:[.0888,.0888,.0888,1],cF:[.8,.8,.8,1],cH:[[.8,.8,.8,1],[.7,.7,.7,1],[.6,.6,.6,1],[.5,.5,.5,1],[.4,.4,.4,1]],cR:.1,w:7},{name:"D0",cBg:[.0588,.0588,.0588,1],cF:[.6,.6,.6,1],cH:[[.8,.8,.8,1]],cR:.85,w:2},{name:"D0",cBg:[.1215,.1215,.1215,1],cF:[1,1,1,1],cH:[[.8,.8,.8,1]],cR:.85,w:2},{name:"D1",cBg:[.1215,.1215,.1608,1],cF:[1,1,1,1],cH:[[.8,.8,.8,1]],cR:.85,w:2},{name:"D2",cBg:[.1215,.1608,.1215,1],cF:[1,1,1,1],cH:[[.8352,.7843,.7098,1]],cR:.85,w:2},{name:"DX",cBg:[.149,.1569,.1804,1],cF:[.6745,.6627,.6392,1],cH:[[.0784,.0314,.0431,1]],cR:.85,w:2},{name:"C1",cBg:[.2667,.298,.3334,1],cF:[.85,.85,.85,1],cH:[[1,1,1,1],[.8,.8,.8,1],[.6,.6,.6,1]],cR:.25,w:4},{name:"Ci",cBg:[.85,.85,.85,1],cF:[.2667,.298,.3334,1],cH:[[.4,.4,.4,1],[.5,.5,.5,1],[.6,.6,.6,1]],cR:.25,w:3},{name:"L0",cBg:[.8353,.8039,.7372,1],cF:[.149,.1569,.1804,1],cH:[[.0588,.1412,.5686,1]],cR:.85,w:2},{name:"L1",cBg:[.8824,.8706,.8431,1],cF:[.149,.1569,.1804,1],cH:[[.2588,.051,.1569,1]],cR:.85,w:1.5},{name:"Salmon",cBg:[.9829,.4049,.3573,1],cF:[.455,.175,.346,1],cH:[[.355,.075,.246,1]],cR:.85,w:1},{name:"Rouge",cBg:[.2157,.0196,.0784,1],cF:[.5176,.251,.3334,1],cH:[[.9099,.8196,.8156,1]],cR:.85,w:.5},{name:"Ernok",cBg:[.8118,.1255,.1451,1],cF:[.0667,.098,.1529,1],cH:[[.8275,.7099,.345,1]],cR:.85,w:1.5},{name:"Royal Blue",cBg:[.0392,.0471,.0902,1],cF:[.9099,.8706,.651,1],cH:[[.7255,.6627,.3216,1]],cR:.85,w:1},{name:"Blue",cBg:[.2074,.6388,.877,1],cF:[.1,.1,.1,1],cH:[[.3334,.1451,.0392,1]],cR:.85,w:.75},{name:"Cold Blue",cBg:[.5294,.8902,.8784,1],cF:[.1176,.0471,.0196,1],cH:[[.9216,.9216,.8588,1]],cR:.85,w:1.25},{name:"Radium",cBg:[.9099,.5059,.3608,1],cF:[.2,.1922,.1961,1],cH:[[.9216,.9216,.8588,1]],cR:.85,w:1},{name:"Beast",cBg:[.3882,.4235,.4549,1],cF:[.7804,.5059,.6275,1],cH:[[.1882,.1922,.2039,1]],cR:.85,w:.5},{name:"Bracco di Ferro",cBg:[.1529,.1451,.1412,1],cF:[.9529,.8588,.2863,1],cH:[[.2588,.3255,.1765,1]],cR:.85,w:.8},{name:"Kuao",cBg:[.1334,.1412,.1804,1],cF:[.6784,.149,.1608,1],cH:[[.1373,.302,.3608,1]],cR:.85,w:1.2},{name:"Hard",cBg:[.1255,0,.902,1],cF:[.9,.9,.9,1],cH:[[.1,.1,.1,1]],cR:.85,w:.5},{name:"Bowie",cBg:[.9334,.898,.2667,1],cF:[0,0,0,1],cH:[[.098,.3725,.7137,1]],cR:.85,w:1},]);let width,height,xc=$(70*R.g())+60,yc=$(1.333*xc),cBg=colorPick.cBg,cF=colorPick.cF,cH=colorPick.cH,cR=colorPick.cR,ns=1e5*R.g(),nrx=5+10*R.g(),nry=5+10*R.g(),nScale=5,gS=R.g()/6+.05,pl=25,animationDuration=15,smudge=R.g()/5+.05,borderWidth=[.75,.75,1,1,1.5][$(5*R.g())],lineRep=$(6*R.g())+2,sketchRate=[10,15,25][$(3*R.g())],hSketchRate=sketchRate,doodleMap=[...Array(4)].map((_,ii) => $(R.g()*15)),grid=[],scl,cvs,ctx,gl,verShader,fragShader,bufferShader,vBuf,pShader,pBuffer,img,fBufs,fBufId=0,uC=0;function init(){for(let _ in document.body.style.background="#000000",(rr=document.createElement("canvas")).id="ref",document.body.append(rr),(gl=(cvs=document.getElementsByTagName("canvas")[0]).getContext("webgl2")).clearColor(0,0,0,1),vBuf=gBuffer(),pShader=cProgram(verShader,fragShader),pBuffer=cProgram(verShader,bufferShader),scl=1,""!=window.location.hash&&(scl=parseInt(window.location.hash.replace("#",""))),width=((ww=window.innerWidth)<.75*(wh=window.innerHeight)?ww:wh/4*3)*scl,height=(ww<.75*wh?ww/3*4:wh)*scl,cvs.width=width,cvs.height=height,noise.seed(1e4*R.g()),gGrid(),fBufs)gl.deleteFramebuffer(_.buf),gl.deleteTexture(_.texture);let e=gBase(width,height);img=gTexture(width,height,e),(fBufs=[]).push(cFBuffer(width,height,e)),fBufs.push(cFBuffer(width,height,null)),fBufId=0,run()}function run(){p=uPixels(),gl.deleteTexture(img),img=uTexture(width,height,p),uC+=1,rVisual(),rBuffer(),uC<grid.length*(pl+animationDuration)?setTimeout(()=>{document.title="Encore ("+$(uC/(grid.length*(pl+animationDuration))*100)+"%)",requestAnimationFrame(run)},16):(document.title="Encore",ref&&ref.remove())}function sProgram(_){gl.useProgram(_),_.vertexPosAttrib=gl.getAttribLocation(_,"pos"),gl.enableVertexAttribArray(_.vertexPosAttrib),gl.bindBuffer(gl.ARRAY_BUFFER,vBuf),gl.vertexAttribPointer(_.vertexPosAttrib,3,gl.FLOAT,!1,0,0)}function rVisual(){let _=fBufId,e=fBufId^=1;dirx=grid[$((uC-1)/(pl+animationDuration))].dx,diry=grid[$((uC-1)/(pl+animationDuration))].dy,sProgram(pShader),gl.bindFramebuffer(gl.FRAMEBUFFER,fBufs[e].buf),gl.viewport(0,0,width,height),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT),gl.activeTexture(gl.TEXTURE0+_),gl.bindTexture(gl.TEXTURE_2D,fBufs[_].tex),gl.activeTexture(gl.TEXTURE2),gl.bindTexture(gl.TEXTURE_2D,img),gl.uniform1i(gl.getUniformLocation(pShader,"buf"),_),gl.uniform1i(gl.getUniformLocation(pShader,"img"),2),gl.uniform1f(gl.getUniformLocation(pShader,"dirx"),dirx),gl.uniform1f(gl.getUniformLocation(pShader,"diry"),diry),gl.uniform1f(gl.getUniformLocation(pShader,"frame"),uC),bg=cBg,grid[$((uC-1)/(pl+animationDuration))].t>.5&&(t=grid[$((uC-1)/(pl+animationDuration))].t/20-.025,bg=[cBg[0]+t,cBg[1]+t,cBg[2]+t,1]),coll=grid[$((uC-1)/(pl+animationDuration))].c,gl.uniform4fv(gl.getUniformLocation(pShader,"cBg"),bg),gl.uniform4fv(gl.getUniformLocation(pShader,"cF"),coll),gl.drawArrays(gl.TRIANGLE_STRIP,0,4)}function rBuffer(){sProgram(pBuffer),gl.bindFramebuffer(gl.FRAMEBUFFER,null),gl.viewport(0,0,cvs.width,cvs.height),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT),gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,fBufs[fBufId].tex),gl.uniform1i(gl.getUniformLocation(pBuffer,"buffer"),0),gl.drawArrays(gl.TRIANGLE_STRIP,0,4)}function cProgram(_,e){let $=gl.createProgram(),r=cShader(decodeURIComponent("%23version 300 es%0A")+_,gl.VERTEX_SHADER),i=cShader(decodeURIComponent("%23version 300 es%0Aprecision highp float;")+e,gl.FRAGMENT_SHADER);return gl.attachShader($,r),gl.attachShader($,i),gl.linkProgram($),$}function cShader(_,e){let $=gl.createShader(e);return gl.shaderSource($,_),gl.compileShader($),$}function cFBuffer(_,e,$){let r=gl.createFramebuffer(),i=gTexture(_,e,$);return gl.bindFramebuffer(gl.FRAMEBUFFER,r),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,i,0),{buf:r,tex:i}}function gTexture(_,e,$){let r=gl.createTexture();return gl.bindTexture(gl.TEXTURE_2D,r),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,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),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,_,e,0,gl.RGBA,gl.UNSIGNED_BYTE,$),r}function uTexture(_,e,$){let r=gl.createTexture();return gl.bindTexture(gl.TEXTURE_2D,r),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,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),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,_,e,0,gl.RGBA,gl.UNSIGNED_BYTE,$),r}function gBuffer(_){let e=gl.createBuffer();return gl.bindBuffer(gl.ARRAY_BUFFER,e),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,1,0,-1,-1,0,1,1,0,1,-1,0]),gl.STATIC_DRAW),e}function uPixels(_,r){if(ref=document.getElementById("ref"),ctx.clearRect(0,0,width,height),ctx.beginPath(),ctx.rect(0,0,width,height),ctx.fillStyle="black",ctx.fill(),ctx.closePath(),x1=(g=grid[$(uC/(pl+animationDuration))]).x*width,y1=g.y*height,wi=g.w*width,he=g.h*height,(fR=c(0,(frameRotate=uC/(pl+animationDuration)*(pl+animationDuration)-$(uC/(pl+animationDuration))*(pl+animationDuration))-(pl-1)))>0&&(yRC=e(yc/animationDuration)),uC/(pl+animationDuration)*(pl+animationDuration)-$(uC/(pl+animationDuration))*(pl+animationDuration)>pl-1){if(x1=0,y1=0,wi=width,he=height,wii=width/xc,hee=height/yc,g.t>-1)for(let i=0;i<xc;i++)for(let n=0;n<yc;n++)n>=(fR-1)*yRC&&n<fR*yRC&&g.polys.map(_=>{inside([x1+(i+.5)*wii+noise.simplex2(x1/width/nrx,y1/height/nry)*sc(nScale),y1+(n+.5)*hee+noise.simplex2(x1/width/nrx,y1/height/nry)*sc(nScale)],_)&&dScrawl(x1+i*wii,y1+n*hee,wii,hee,doodleMap[$(g.t*doodleMap.length)],"#ff0000",lineRep)})}else g.polys.map(_=>{ctx.beginPath(),_.map(_=>{ctx.lineTo(_[0]*width,_[1]*height)}),ctx.fillStyle="#00ff00",ctx.fill(),ctx.closePath()});return ref}function gBase(_,e){(ref=document.getElementById("ref")).width=width,ref.height=height,ref.style.display="none",(ctx=ref.getContext("2d")).beginPath(),ctx.rect(0,0,width,height),ctx.fillStyle="rgb("+$(255*cBg[0])+","+$(255*cBg[1])+","+$(255*cBg[2])+")",ctx.fill(),ctx.closePath(),x1=0,y1=0,wi=width,he=height,wii=width/xc,hee=height/yc,type=doodleMap[$(R.g()*doodleMap.length)];for(let r=0;r<xc;r++)for(let i=0;i<yc;i++)dScrawl(x1+r*wii,y1+i*hee,wii,hee,type,"rgb("+$(255*cF[0])+","+$(255*cF[1])+","+$(255*cF[2])+")",lineRep);return ref}function sc(_){return width/1500*_}function dScrawl(_,e,$,r,i=0,c,n=1){for(let l=0;l<n;l++)ctx.beginPath(),noii=noise.simplex2(_/width/nrx,e/height/nry)*sc(nScale),bv=1-2*gS,0===i&&(sBase=[{x:_+$*gS,y:e+r*gS,d:0},{x:_+.497*$,y:e+.503*r,d:0},{x:_+$*(1-gS),y:e+r*(1-gS),d:0},]),1===i&&(sBase=[{x:_+$*(1-gS),y:e+r*gS,d:0},{x:_+$*(.502*bv+gS),y:e+r*(.496*bv+gS),d:0},{x:_+$*gS,y:e+r*(1-gS),d:0},]),2===i&&(sBase=[{x:_+$*(1-gS),y:e+r*gS,d:0},{x:_+$*(.495*bv+gS),y:e+r*(.498*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(1-gS),d:0},]),3===i&&(sBase=[{x:_+$*gS,y:e+r*gS,d:0},{x:_+$*(.488*bv+gS),y:e+r*(.511*bv+gS),d:0},{x:_+$*gS,y:e+r*(1-gS),d:0},]),4===i&&(sBase=[{x:_+$*(.197*bv+gS),y:e+r*gS,d:0},{x:_+$*(.498*bv+gS),y:e+r*(.802*bv+gS),d:0},{x:_+$*(.802*bv+gS),y:e+r*gS,d:0},]),5===i&&(sBase=[{x:_+$*(.2*bv+gS),y:e+r*(1-gS),d:0},{x:_+$*(.512*bv+gS),y:e+r*(.202*bv+gS),d:0},{x:_+$*(.804*bv+gS),y:e+r*(1-gS),d:0},]),6===i&&(sBase=[{x:_+$*(.301*bv+gS),y:e+r*gS,d:0},{x:_+$*(.301*bv+gS),y:e+r*(.41*bv+gS),d:0},{x:_+$*(.687*bv+gS),y:e+r*gS,d:1},{x:_+$*(.702*bv+gS),y:e+r*(.4*bv+gS),d:0},{x:_+$*gS,y:e+r*(.5*bv+gS),d:1},{x:_+$*(.5*bv+gS),y:e+r*(1-gS),d:0},{x:_+$*(1-gS),y:e+r*(.5*bv+gS),d:0}]),7===i&&(sBase=[{x:_+$*(.304*bv+gS),y:e+r*gS,d:0},{x:_+$*(.302*bv+gS),y:e+r*(.401*bv+gS),d:0},{x:_+$*(.698*bv+gS),y:e+r*gS,d:1},{x:_+$*(.698*bv+gS),y:e+r*(.397*bv+gS),d:0},{x:_+$*gS,y:e+r*(1-gS),d:1},{x:_+$*(.5*bv+gS),y:e+r*(.75*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(1-gS),d:0}]),8===i&&(sBase=[{x:_+$*(.351*bv+gS),y:e+r*gS,d:0},{x:_+$*(.351*bv+gS),y:e+r*(.502*bv+gS),d:0},{x:_+$*(.648*bv+gS),y:e+r*gS,d:1},{x:_+$*(.648*bv+gS),y:e+r*(.4*bv+gS),d:0},{x:_+$*(.294*bv+gS),y:e+r*(.65*bv+gS),d:1},{x:_+$*(.551*bv+gS),y:e+r*(.706*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(.448*bv+gS),d:0}]),9===i&&(sBase=[{x:_+$*(.502*bv+gS),y:e+r*gS,d:0},{x:_+$*(.503*bv+gS),y:e+r*(1-gS),d:0},{x:_+$*gS,y:e+r*(.351*bv+gS),d:1},{x:_+$*(1-gS),y:e+r*(.348*bv+gS),d:0},]),10===i&&(sBase=[{x:_+$*(.502*bv+gS),y:e+r*gS,d:0},{x:_+$*(.496*bv+gS),y:e+r*(.52*bv+gS),d:0},{x:_+$*(.497*bv+gS),y:e+r*(1-gS),d:0},]),11===i&&(sBase=[{x:_+$*gS,y:e+r*(.502*bv+gS),d:0},{x:_+$*(.499*bv+gS),y:e+r*(.498*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(.499*bv+gS),d:0},]),12===i&&(sBase=[{x:_+$*(.2*bv+gS),y:e+r*(.101*bv+gS),d:0},{x:_+$*(.512*bv+gS),y:e+r*(.397*bv+gS),d:0},{x:_+$*(.798*bv+gS),y:e+r*(.103*bv+gS),d:0},{x:_+$*(.22*bv+gS),y:e+r*(.902*bv+gS),d:1},{x:_+$*(.5*bv+gS),y:e+r*(.598*bv+gS),d:0},{x:_+$*(.799*bv+gS),y:e+r*(.904*bv+gS),d:0},]),13===i&&(sBase=[{x:_+$*(.502*bv+gS),y:e+r*gS,d:0},{x:_+$*(.496*bv+gS),y:e+r*(.52*bv+gS),d:0},{x:_+$*(.497*bv+gS),y:e+r*(1-gS),d:0},]),14===i&&(sBase=[{x:_+$*gS,y:e+r*(.502*bv+gS),d:0},{x:_+$*(.499*bv+gS),y:e+r*(.498*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(.499*bv+gS),d:0},]),sBase.map((_,e)=>{0===(d=_.d?_.d:0)?ctx.lineTo(_.x+noise.simplex3(_.x/width*100,_.y/height*100,l/4)*$/sketchRate-$/hSketchRate+noii,_.y+noise.simplex3(_.x/width*100,_.y/height*100,4*l)*r/sketchRate-r/hSketchRate+noii):ctx.moveTo(_.x+noise.simplex3(_.x/width*100,_.y/height*100,l/4)*$/sketchRate-$/hSketchRate+noii,_.y+noise.simplex3(_.x/width*100,_.y/height*100,4*l)*r/sketchRate-r/hSketchRate+noii)}),ctx.strokeStyle=c,ctx.lineWidth=sc(borderWidth),ctx.stroke(),ctx.closePath()}function inside(_,e){for(var $=_[0],r=_[1],i=!1,c=0,n=e.length-1;c<e.length;n=c++){var l=e[c][0]*width,a=e[c][1]*height,o=e[n][0]*width,u=e[n][1]*height;a>r!=u>r&&$<(o-l)*(r-a)/(u-a)+l&&(i=!i)}return i}function gGrid(){for(let _=0;_<$(7*R.g())+5;_++)len=$(8*R.g())+2,padding=0,div=1,R.g()>.9&&(padding=R.g()/5,div=2),grid.push({t:R.g(),s:R.g()/div,dx:2*R.g()-1,dy:2*R.g()-1,c:R.g()>cR?cH[$(R.g()*cH.length)]:cF,polys:[...Array(len)].map((_,e)=>(hh=1/(2*len+1),comp=R.g()>.6?.05*R.g()-.025:0,ccomp=R.g()>.85&&0===padding?.0125*R.g()-.00625:0,R.g()>.95)?[]:[[padding,e*hh*2+hh+comp-ccomp],[1-padding,e*hh*2+hh+comp+ccomp],[1-padding,e*hh*2+2*hh+comp+ccomp],[padding,e*hh*2+2*hh+comp-ccomp],])});for(let e=0;e<$(7*R.g())+5;e++)padding=0,div=1,R.g()>.9&&(padding=R.g()/5*.75,div=2),len=$(8*R.g())+2,grid.push({t:R.g(),s:R.g()/div,dx:2*R.g()-1,dy:2*R.g()-1,c:R.g()>cR?cH[$(R.g()*cH.length)]:cF,polys:[...Array(len)].map((_,e)=>(hh=1/(2*len+1),comp=R.g()>.6?.05*R.g()-.025:0,ccomp2=R.g()>.85&&0===padding?.0125*R.g()-.00625:0,R.g()>.95)?[]:[[e*hh*2+hh+comp-ccomp2,padding],[e*hh*2+2*hh+comp-ccomp2,padding],[e*hh*2+2*hh+comp+ccomp2,1-padding],[e*hh*2+hh+comp+ccomp2,1-padding],])});(grid=grid.sort((_,e)=>_.s-e.s))[grid.length-1].c=cF,grid.push({t:-1,s:0,dx:0,dy:0,c:cF,polys:[[[0,0],[.025,0],[.025,1],[0,1]],[[.975,0],[1,0],[1,1],[.975,1]],[[0,0],[1,0],[1,.025*.75],[0,.025*.75]],[[0,1-.025*.75],[1,1-.025*.75],[1,1],[0,1]],]})}function pick_color(_){let e,$=[];for(e=0;e<_.length;e++)$[e]=_[e].w+($[e-1]||0);let r=R.g()*$[$.length-1];for(e=0;e<$.length&&!($[e]>r);e++);return _[e]}verShader="in vec3 pos;out vec2 vUv;void main(){gl_Position=vec4(pos,1.);vUv=(pos.xy+1.)/2.;}",fragShader=`uniform sampler2D buf,img;uniform float dirx,diry,frame;uniform vec4 cBg,cF;in vec2 vUv;out vec4 col;vec3 random3(vec3 c) {float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));vec3 r;r.z = fract(512.0*j);j *= .125;r.x = fract(512.0*j);j *= .125;r.y = fract(512.0*j);return r-0.5;}const float F3 = 0.3333333;const float G3 = 0.1666667;float sim3(vec3 p) {vec3 s = floor(p + dot(p, vec3(F3)));vec3 x = p - s + dot(s, vec3(G3));vec3 e = step(vec3(0.0), x - x.yzx);vec3 i1 = e*(1.0 - e.zxy);vec3 i2 = 1.0 - e.zxy*(1.0 - e);vec3 x1 = x - i1 + G3;vec3 x2 = x - i2 + 2.0*G3;vec3 x3 = x - 1.0 + 3.0*G3;vec4 w, d;w.x = dot(x, x);w.y = dot(x1, x1);w.z = dot(x2, x2);w.w = dot(x3, x3);w = max(0.6 - w, 0.0);d.x = dot(random3(s), x);d.y = dot(random3(s + i1), x1);d.z = dot(random3(s + i2), x2);d.w = dot(random3(s + 1.0), x3);w *= w;w *= w;d *= w;return dot(d, vec4(52.0));}void main(){vec4 ref = texture(img,vUv);vec4 buffer = texture(buf,vUv);float rnd = sim3(vec3((vUv.x+frame/100.)*500.,(vUv.y-frame/100.)*500.,${ns}));col = buffer;vec4 bgColor = mix(buffer,cBg,.25+rnd/2.);vec4 textureBG = mix(cBg,vec4(vec3(cBg.rgb-vec3(sim3(vec3((vUv.x+frame/1000.)*500.,(vUv.y-frame/1000.)*500.,${ns}))/4.)),1.),sim3(vec3((vUv.x+frame/1000.)*50000.,(vUv.y-frame/1000.)/4.,${ns})));if(ref.g>.0) {col = mix(textureBG,buffer,sim3(vec3((vUv.x+frame/100.)*5.,(vUv.y-frame/100.)*5.,${ns}))/1.);if(rnd<${smudge}) {col = mix(texture(buf,vec2(vUv.x+.005*dirx,vUv.y+.005*diry)),textureBG,rnd/4.);}}if(ref.r>.0) {col = mix(cBg,cF,ref.r);}}`,bufferShader="uniform sampler2D buffer;in vec2 vUv;out vec4 col;void main(){col=texture(buffer,vec2(vUv.x,1.-vUv.y));}",window.onload=init,function(_){var e=_.noise={};function r(_,e,$){this.x=_,this.y=e,this.z=$}r.prototype.dot2=function(_,e){return this.x*_+this.y*e},r.prototype.dot3=function(_,e,$){return this.x*_+this.y*e+this.z*$};var c=[new r(1,1,0),new r(-1,1,0),new r(1,-1,0),new r(-1,-1,0),new r(1,0,1),new r(-1,0,1),new r(1,0,-1),new r(-1,0,-1),new r(0,1,1),new r(0,-1,1),new r(0,1,-1),new r(0,-1,-1)],n=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],l=Array(512),a=Array(512);e.seed=function(_){_>0&&_<1&&(_*=65536),(_=$(_))<256&&(_|=_<<8);for(var e,r=0;r<256;r++)e=1&r?n[r]^255&_:n[r]^_>>8&255,l[r]=l[r+256]=e,a[r]=a[r+256]=c[e%12]},e.seed(0);var o=.5*(i(3)-1),u=(3-i(3))/6,x=1/3,f=1/6;e.simplex2=function(_,e){var r,i,c,n,x,f=(_+e)*o,h=$(_+f),S=$(e+f),s=(h+S)*u,m=_-h+s,y=e-S+s;m>y?(n=1,x=0):(n=0,x=1);var v=m-n+u,E=y-x+u,T=m-1+2*u,B=y-1+2*u,w=a[(h&=255)+l[S&=255]],F=a[h+n+l[S+x]],U=a[h+1+l[S+1]],b=.5-m*m-y*y;b<0?r=0:(b*=b,r=b*b*w.dot2(m,y));var D=.5-v*v-E*E;D<0?i=0:(D*=D,i=D*D*F.dot2(v,E));var A=.5-T*T-B*B;return A<0?c=0:(A*=A,c=A*A*U.dot2(T,B)),70*(r+i+c)},e.simplex3=function(_,e,r){var i,c,n,o,u,h,S,s,m,y,v=(_+e+r)*x,E=$(_+v),T=$(e+v),B=$(r+v),w=(E+T+B)*f,F=_-E+w,U=e-T+w,b=r-B+w;F>=U?U>=b?(u=1,h=0,S=0,s=1,m=1,y=0):F>=b?(u=1,h=0,S=0,s=1,m=0,y=1):(u=0,h=0,S=1,s=1,m=0,y=1):U<b?(u=0,h=0,S=1,s=0,m=1,y=1):F<b?(u=0,h=1,S=0,s=0,m=1,y=1):(u=0,h=1,S=0,s=1,m=1,y=0);var D=F-u+f,A=U-h+f,P=b-S+f,H=F-s+2*f,C=U-m+2*f,X=b-y+2*f,I=F-1+3*f,G=U-1+3*f,L=b-1+3*f,k=a[(E&=255)+l[(T&=255)+l[B&=255]]],M=a[E+u+l[T+h+l[B+S]]],N=a[E+s+l[T+m+l[B+y]]],O=a[E+1+l[T+1+l[B+1]]],W=.6-F*F-U*U-b*b;W<0?i=0:(W*=W,i=W*W*k.dot3(F,U,b));var z=.6-D*D-A*A-P*P;z<0?c=0:(z*=z,c=z*z*M.dot3(D,A,P));var j=.6-H*H-C*C-X*X;j<0?n=0:(j*=j,n=j*j*N.dot3(H,C,X));var Y=.6-I*I-G*G-L*L;return Y<0?o=0:(Y*=Y,o=Y*Y*O.dot3(I,G,L)),32*(i+c+n+o)}}(this);
"Odysseys" is all about diving into a mix of cool digital vibes and a splash of old-school storybook magic. Imagine flipping through your favorite childhood adventure book, but with a twist—there's a bit of a pixel party going on. It's like these pieces are little puzzles, maps of epic tales that happened once upon a time, captured in a single frame. Think of it as a snapshot of a whole adventure from start to finish, with every corner holding a piece of the action. Each artwork is kind of like a treasure map or a game level that's already been played through. You can zoom into any part of the picture and spot different bits of the story—maybe a fierce battle here, a wild discovery there. It's like having a bird's-eye view of a whole world of tales, all squished into one vibrant, living scene. The cool thing about these pieces? They're a mix of old and new. You've got pixels and glitches that might remind you of video games, mashed up with these swirly waves that could totally belong in a Van Gogh painting. But let's not stop there. Imagine those waves carrying a bit of that serene, intricate beauty you find in Japanese byōbu panels or estampes—those stunning artworks that tell a story all on their own. It's this blend that's all about sparking that feeling of nostalgia, like a nod to the fun, colorful, and sometimes chaotic stories that filled our heads as kids. I'm not trying to spell out a specific message with the digital and organic bits clashing and mingling in my work. It's more about creating something that looks cool and feels a bit nostalgic, something that makes you think of adventures and stories in a new way. What I really hope is that when you check out these pieces, you'll start seeing your own stories in them. I've set the stage with these algorithms and designs, but it's up to you to fill in the blanks. Maybe you'll see a piece and think, "Hey, that looks like the secret forest from that game I loved," or "That totally reminds me of the pirate stories I used to dream about." Or maybe you'll catch a hint of that tranquil, detailed vibe you get from Japanese art, making the story even richer. That's the goal—making art that's not just mine but becomes a bit of yours too.
._width,this.canvas.height=this._height,this.canvas.classList.add("patterns"),this.ctx=this.canvas.getContext("2d"),this.ctx.fillStyle="#fff",this.ctx.fillRect(0,0,this._width,this._height),this.texture=new Qt(u.gl,{image:this.canvas,minFilter:u.gl.NEAREST,magFilter:u.gl.NEAREST,generateMipmaps:!1})}clear({clearColor:t="#000"}={}){this.ctx.fillStyle=t,this.ctx.fillRect(0,0,this._width,this._height)}draw(){}_refreshDebugMesh(){this._UNF.uOpacity.value=.1}resize(t,e){this._width=t,this._height=e,this.canvas.width=this._width,this.canvas.height=this._height,this.canvas.style.width=this._width+"px",this.canvas.style.height=this._height+"px",this.texture.needsUpdate=!0}}class lt{constructor(t,e,s,i){this.x=t,this.y=e,this.width=s,this.height=i,this._ls=[],this._data=y.gridData.divisions,this._isFinal=!1}divide(t=0,e=1){this._idxDivision=t,this._chanceDivision=e;const s=this.x,i=this.y;this._ls.push({xFrom:s,yFrom:i,xTo:s+this.width,yTo:i}),this._ls.push({xFrom:s,yFrom:i,xTo:s,yTo:i+this.height}),this._ls.push({xFrom:s+this.width,yFrom:i,xTo:s+this.width,yTo:i+this.height}),this._ls.push({xFrom:s,yFrom:i+this.height,xTo:s+this.width,yTo:i+this.height});const n=this._divide(this.x,this.y,this.width,this.height),a=u.rand();!n&&(!this._data.activateChanceFilling||a<this._data.chanceFilling)&&(this._isFinal=!0)}_divide(t,e,s,i){const n=u.rand(),a=u.rand();if(this._idxDivision>=this._data.maxDivisions||n>this._chanceDivision)return!1;const l=y.gridData.divisionsType;let h=y.gridData.margin;const c=s/2-h*.5,_=i/2-h*.5;this._cs=[],a>l.full&&a<l.full+l.vertical?(this._cs.push(new lt(t,e,c,i)),this._cs.push(new lt(t+c+h,e,c,i))):a>l.full+l.vertical&&a<l.full+l.vertical+l.horizontal&&(this._cs.push(new lt(t,e,s,_)),this._cs.push(new lt(t,e+_+h,s,_)));for(let v of this._cs)v.divide(this._idxDivision+1,this._chanceDivision*this._data.friction);return!0}seasonize(){if(!this._isFinal){for(let e of this._cs)e.seasonize();return}const t=u.rand();t<.25?this.se="w":t<.5?this.se="sp":t<.75?this.se="su":this.se="a"}draw=t=>{this._isFinal&&(t.save(),t.fillStyle=y.cbs[this.se],t.translate(this.x,this.y),t.fillRect(0,0,this.width,this.height),t.restore())};drawLines=t=>{if(!this._isFinal)return;const e=2,s=e>>1;t.save(),t.strokeStyle="#fff",t.lineWidth=e,t.translate(this.x,this.y),t.strokeRect(-s,-s,this.width+s,this.height+s),t.restore()};get finalCells(){if(this._isFinal)return[this];{let t=[];if(this._cs)for(let e of this._cs)t=t.concat(e.finalCells);return t}}get lines(){let t=[];if(t=t.concat(this._ls),this._cs)for(let e of this._cs)t=t.concat(e.lines);return t}}class aa extends vr{constructor(){super(),this._grids=[],this._gridLines=new vr}generate(){this._cells=[],this._fc=null;const t=y.gridData,e=t.margin,s=(this._width-e*(t.cols+1))/t.cols,i=(this._height-e*(t.lines+1))/t.lines;let n=e,a=e;for(let l=0;l<t.lines;l++){for(let h=0;h<t.cols;h++){const c=new lt(n,a,s,i);c.divide(0,t.divisions.chance),this._cells.push(c),n+=s+e}n=e,a+=i+e}this._fc=[],this._fl=[],this._fl.push({xFrom:e,yFrom:e,xTo:this._width-e,yTo:e}),this._fl.push({xFrom:e,yFrom:e,xTo:e,yTo:this._height-e}),this._fl.push({xFrom:this._width-e,yFrom:e,xTo:this._width-e,yTo:this._height-e}),this._fl.push({xFrom:e,yFrom:this._height-e,xTo:this._width-e,yTo:this._height-e});for(let l of this._cells)Array.prototype.push.apply(this._fc,l.finalCells),Array.prototype.push.apply(this._fl,l.lines)}seasonize(){for(let t of this.finalCells)t.seasonize()}render(){this.clear({clearColor:"#fff"});for(let t of this._grids)t.clear();this._gridLines.clear();for(let t of this._fc)t.draw(this.ctx);this.texture.needsUpdate=!0,this._gridLines.ctx.strokeStyle="#fff",this._gridLines.ctx.lineWidth=y.gridData.lineWidth,this._gridLines.ctx.beginPath();for(let t of this.finalLines)!t||u.rand()>y.gridData.divisions.chanceDrawLine||(this._gridLines.ctx.moveTo(t.xFrom,t.yFrom),this._gridLines.ctx.lineTo(t.xTo,t.yTo));this._gridLines.ctx.stroke(),this._gridLines.texture.needsUpdate=!0}get finalCells(){return this._fc}get finalLines(){return this._fl}get textureLines(){return this._gridLines.texture}}class la extends ne{constructor(t){t=t;const e=t.count,s=e<<1,i=e<<2;let n=0,a=0,l=0,h=0,c=0,_=0;const v=new Float32Array(i),f=new Float32Array(i*2);for(let k=0;k<i;k++){const te=k;for(let B=0;B<4;B++)v[n]=te,f[a+0]=c/(t.width-1),f[a+1]=_/(t.height-1),n+=1,a+=2;c+=1,c>t.width-1&&(c=0,_+=1)}n=0,a=0;let A=1,b=1;const C=new Float32Array(i*2),g=new Float32Array(i*2),p=new Float32Array(i*2);for(let k=0;k<s;k++)g[h+0]=-1*A,g[h+1]=-1*b,p[h+0]=0,p[h+1]=0,g[h+2]=-1*A,g[h+3]=1*b,p[h+2]=0,p[h+3]=1,g[h+4]=1*A,g[h+5]=-1*b,p[h+4]=1,p[h+5]=0,g[h+6]=1*A,g[h+7]=1*b,p[h+6]=1,p[h+7]=1,h+=8;a=0;const m=new Uint32Array(i*3);for(let k=0;k<e;k++)m[l+0]=a,m[l+1]=m[l+4]=a+1,m[l+2]=m[l+3]=a+2,m[l+5]=a+3,a+=4,l+=12;const P={uid:{data:v},uvDataTexture:{size:2,data:f},side:{size:2,data:g},uv:{size:2,data:p},index:{data:m},pos:{size:2,data:C}};super(u.gl,P)}}class zr extends wt{constructor({size:t=10,vs:e=null,fs:s=null,UNF:i={}}={}){i={...i,...{sizePlanes:{value:t},tdtm:{value:null}}};let a="",l="";super(u.gl,{UNF:i,vertex:a+e,fragment:l+s,transparent:!0,cullFace:u.gl.FRONT,depthWrite:!1})}init(t){this.UNF.tdtm.value=t.textureMain}}class ha extends yt{constructor(t,{material:e=new zr}={}){const s=new la(t);e.init(t),super(u.gl,{geometry:s,_pr:e})}}class ua{constructor(t,e){this.reset(t,e)}reset(t,e){this.width=t,this.height=e,this.count=this.width*this.height>>0,this.count4=this.count<<2;const s=new Float32Array(this.count4),i=u.gl;this.tm=new Qt(i,{image:s,width:this.width,height:this.height,type:i.FLOAT,generateMipmaps:!1,target:i.TEXTURE_2D,format:i.RGBA,internalFormat:i.renderer.isWebgl2?i.RGBA32F:i.RGBA,wrapS:i.CLAMP_TO_EDGE,wrapT:i.CLAMP_TO_EDGE,generateMipmaps:!1,minFilter:i.NEAREST,magFilter:i.NEAREST,flipY:!1});for(let n=0;n<this.count4;n+=4)this.tm.image[n+0]=u.prerand(),this.tm.image[n+1]=u.prerand(),this.tm.image[n+2]=0,this.tm.image[n+3]=0;this.tm.needsUpdate=!0}get textureMain(){return this.tm}}var ca=`#define M_PI 3.1415 #define HALF_PI 1.5707 _u _s2 tdtm;_u _s2 tPattern;_u _f ugenhash;_u _f ultMin;_u _f ultAdd;_u _f ultPower;_u _f ullMin;_u _f ullAdd;_u _f ullPower;_u _f urType;_u _v2 urNoise;_u _v2 uHr;_u _v2 uSr;_u _v2 uLr;_u _f ucadV;_u _f ucadSl;_u _f ucadV2;_u _f ucadSl2;_u _v2 uA;_u _f uAPower;_u _f uVisibleThreshold;_u _v2 uTextureSize;_u _f uTextureRatio;in _f uid;in _v2 uvDataTexture;in _v2 side;in _v2 uv;out _v2 vUv;out _v3 vColor;out _f iv;out _f ivs[4];out _f vUid;out _f vUidBase;out _f vModColor1;out _f vModColor2;out _f vAlpha; #i_ rgb2hsl #i_ noiseUtils #i_ snoise2d _f vh(_v3 p){p=fract(p*0.31+.1);p*=17.0;return fract(p.x*p.y*p.z*(p.x+p.y+p.z));}_f vn(in _v3 x){_v3 i=floor(x);_v3 f=fract(x);f=f*f*(3.0-2.0*f);return mix(mix(mix(vh(i+_v3(0,0,0)),vh(i+_v3(1,0,0)),f.x),mix(vh(i+_v3(0,1,0)),vh(i+_v3(1,1,0)),f.x),f.y),mix(mix(vh(i+_v3(0,0,1)),vh(i+_v3(1,0,1)),f.x),mix(vh(i+_v3(0,1,1)),vh(i+_v3(1,1,1)),f.x),f.y),f.z);}_f hash12(_v2 p){_v3 p3=fract(_v3(p.xyx)*.11);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}mat3 mfe(_v3 eu){mat3 m;_f a=cos(eu.x);_f b=sin(eu.x);_f c=cos(eu.y);_f d=sin(eu.y);_f e=cos(eu.z);_f f=sin(eu.z);_f ae=a*e;_f af=a*f;_f be=b*e;_f bf=b*f;m[0][0]=c*e;m[0][1]=-c*f;m[0][2]=d;m[1][0]=af+be*d;m[1][1]=ae-bf*d;m[1][2]=-b*c;m[2][0]=bf-ae*d;m[2][1]=be+af*d;m[2][2]=a*c;return m;}_f cBV(_v3 p1,_v3 p2,_f hueToCompare){_f dx=p2.x-p1.x;_f dy=p2.y-p1.y;_f a=atan(dy,dx);_f dist=sqrt(dx*dx+dy*dy);_f acc=dist/4.;_f x=p1.x;_f y=p1.y;for(_i i=0;i<4;i++){_v3 p=_t(tPattern,_v2(x,y)).rgb;_v3 hsl=rgb2hsl(p);_f hDiff=abs(hueToCompare-hsl.r);if(hDiff>uVisibleThreshold*.19){return 0.;}x+=cos(a)*acc;y+=sin(a)*acc;}return 1.;}_f mtp(_f v,_f miv,_f mav,_f po){_f vSign=sign(v);v=(v-miv)/(mav-miv);v=vSign>0. ? v : v-1.;v=pow(v*vSign,abs(po));v=vSign>0. ? v : 1.-v;return v*(mav-miv)+miv;}_f rBP(_f miv,_f mav,_f po){if(miv==mav){return miv;}_f value=hash12(_v2(uid,ugenhash))*(mav-miv)+miv;return mtp(value,miv,mav,po);} #i_ hsl2rgb _f grnd(){return hash12(_v2(uid,ugenhash));}_f _grinc=0.;_f grinc(){_grinc+=.1;return hash12(_v2(uid+_grinc,ugenhash+_grinc));}_vmvUv=uv;_f id=uid;_v4 dtm=_t(tdtm,uvDataTexture);_v4 dtm2=dtm.xyzw;dtm2.x=mod(dtm2.x,1.);dtm2.y=mod(dtm2.y,1.);dtm2.x=(dtm2.x*1.-.5)*2.;dtm2.y=(dtm2.y*1.-.5)*2.;_f rt=0.;_f canAdd=0.;_f rtType=urType;if(rtType==0.){rt=grinc()*M_PI*2.;canAdd=1.;}else if(rtType==1.){if(grinc()<.75){rt=grinc()*M_PI*2.;canAdd=1.;}else{if(grinc()<.5){rt=0.;}else{rt=M_PI*.5;}}}else if(rtType==2.){if(grinc()<.3){rt=grinc()*M_PI*2.;canAdd=1.;}else{if(grinc()<.5){rt=0.;}else{rt=M_PI*.5;}}}else if(rtType==3.){rt=vn(_v3((dtm.x+ugenhash*.001)*urNoise.x,(dtm.y+ugenhash*.001)*urNoise.y,0.))*M_PI*2.;}_f sgl=ullMin+rBP(0.,ullAdd,ullPower);_f sgt=ultMin+rBP(0.,ultAdd,ultPower);_f scl=1./uTextureSize.x*2.;_v3 posBase=_v3(0.);posBase.x+=side.x*sgl*scl;posBase.y+=side.y*sgt*scl;mat3 rtm=mfe(_v3(0.,0.,rt));_v3 p1=_v3(0.);p1.x=-1.*sgl*scl;p1*=rtm;p1.y*=uTextureRatio;p1+=(dtm2.xyz*.5+.5);_v3 p2=_v3(0.);p2.x=1.*sgl*scl;p2*=rtm;p2.y*=uTextureRatio;p2+=(dtm2.xyz*.5+.5);ivs[0]=cBV(p1,p2,65./360.);ivs[1]=cBV(p1,p2,130./360.);ivs[2]=cBV(p1,p2,195./360.);ivs[3]=cBV(p1,p2,260./360.);_f ivSum=ivs[0]+ivs[1]+ivs[2]+ivs[3];iv=ivSum>0. ? 1. : 0.;posBase.xyz*=rtm;posBase.y*=uTextureRatio;_v2 pUV=posBase.xy;pUV+=(dtm2.xy*.5+.5);_f hue=rBP(uHr.x,uHr.y,1.);_f saturation=rBP(uSr.x,uSr.y,1.);_f luminosity=rBP(uLr.x,uLr.y,1.);vAlpha=rBP(uA.x,uA.y,uAPower);vColor=_v3(hue,saturation,luminosity);posBase+=_v3(dtm2.x,dtm2.y,0.);_v4 pos=_v4(posBase,1.);vModColor1=vn(_v3((dtm2.x)*ucadSl,(dtm2.y)*ucadSl,0.))*ucadV;vModColor2=vn(_v3((dtm2.x)*ucadSl,(dtm2.y)*ucadSl,0.))*ucadV;_f percentModColor=snoise2d(_v2((dtm2.x)*ucadSl2,(dtm2.y)*ucadSl2));_f baseValue2=1.-ucadV2;vModColor1*=(baseValue2+percentModColor*ucadV2);vModColor2*=(baseValue2+percentModColor*ucadV2);gl_Position=pos;gl_Position.z=grnd();vUid=id;vUidBase=uid;}`,_a=`#ifndef PI #define PI 3.141592653589793 #endif _u _f uCountLines;_u _v3 uCs[4];_u _f ucadSat;_u _f ucadLum;_u bool uApplyAlpha;in _v3 vColor;in _f iv;in _f ivs[4];in _f vUid;in _f vModColor1;in _f vModColor2;in _f vAlpha; #i_ hsl2rgb _lay0)out vec4 o0;_v3 am(_v3 c,_v3 mod){_f hue=c.r+mod.r;_f sat=c.g+mod.g;_f lum=c.b+mod.b;c=hsl2rgb(hue,sat,lum);return c;}_vmif(vUid>uCountLines){discard;}_v3 mod=_v3(0.);mod.r=vColor.r;mod.g=vColor.g+vModColor1*ucadSat;mod.b=vColor.b+vModColor2*ucadLum;_v3 c0=am(uCs[0],mod);_v3 c1=am(uCs[1],mod);_v3 c2=am(uCs[2],mod);_v3 c3=am(uCs[3],mod);_f a=2.;a=1.;a*=vAlpha;if(uApplyAlpha==false){a=1.;a*=.88;}if(iv==0.){discard;}o0=vec4(c0,a)*ivs[0]+vec4(c1,a)*ivs[1]+vec4(c2,a)*ivs[2]+vec4(c3,a)*ivs[3];}`;function va(r){const t=r>>16&255,e=r>>8&255,s=r&255;return{r:t/255,g:e/255,b:s/255}}function da(r,t,e){var s=Math.max(r,t,e),i=Math.min(r,t,e),n,a,l=(s+i)/2;if(s==i)n=a=0;else{var h=s-i;switch(a=l>.5?h/(2-s-i):h/(s+i),s){case r:n=(t-e)/h+(t<e?6:0);break;case t:n=(e-r)/h+2;break;case e:n=(r-t)/h+4;break}n/=6}return[n,a,l]}function pa(r,t=!0){const e=va(r),s=da(e.r,e.g,e.b);return t?(s[0]*=360,s[1]*=100,s[2]*=100,`hsl( ${s[0]}, ${s[1]}%, ${s[2]}% )`):s}const dr=function(r){const t=pa(r,!1);return{h:t[0]*360,s:t[1]*100,l:t[2]*100}},fa=z(ca),ga=z(_a);class ba extends ft{constructor(t){super(1),this._u={ugenhash:{value:0},tPattern:{value:t},ultMin:{value:1},ultAdd:{value:0},ultPower:{value:1},ullMin:{value:10},ullAdd:{value:100},ullPower:{value:1},urType:{value:0},urNoise:{value:new L(0,0)},uCs:{value:[new V,new V,new V,new V]},uA:{value:new L},uAPower:{value:4},uApplyAlpha:{value:!0},uHr:{value:new L},uSr:{value:new L},uLr:{value:new L},ucadV:{value:0},ucadSat:{value:0},ucadLum:{value:0},ucadSl:{value:0},ucadV2:{value:0},ucadSl2:{value:0},uVisibleThreshold:{value:1},uCountLines:{value:2e5},uTextureSize:{value:u.resolutionNoDPR},uTextureRatio:{value:u.size.width/u.size.height}};const e=new zr({UNF:this._u,vs:fa,fs:ga}),s=new ua(1024,1024);this._lines=new ha(s,{material:e}),this.addChild(this._lines)}generate(){this._u.ugenhash.value=u.rand()*15e6+10}render(t=!0){const e=y.vegeData.lines;this._u.uCountLines.value=e.count,this._u.ultMin.value=e.thicknessM,this._u.ultAdd.value=e.thicknessA,this._u.ultPower.value=e.thicknessP,this._u.ullMin.value=e.lengthM,this._u.ullAdd.value=e.lengthA,this._u.ullPower.value=e.lengthP,this._u.urType.value=Math.min(e.rotationType,3),this._u.urNoise.value.set(e.rotationNoise.x,e.rotationNoise.y),this._u.uVisibleThreshold.value=e.visibleThreshold;const s=y.vegeData.colors;let i=s.color1,n=dr(i);for(let l=0;l<4;l++)i=s["color"+(l+1)],n=dr(i),this._u.uCs.value[l].set(n.h/360,n.s/100,n.l/100);this._u.uHr.value.set(s.hueRand.min,s.hueRand.max),this._u.uSr.value.set(s.saturationRand.min,s.saturationRand.max),this._u.uLr.value.set(s.luminosityRand.min,s.luminosityRand.max);const a=y.vegeData.colorAdjustement;this._u.ucadV.value=a.colorAdjustementValue,this._u.ucadSat.value=a.colorAdjustementSat,this._u.ucadLum.value=a.colorAdjustementLum,this._u.ucadSl.value=a.colorAdjustementScale,this._u.ucadV2.value=a.colorAdjustementValue2,this._u.ucadSl2.value=a.colorAdjustementScale2,this._u.uA.value.set(s.alpha.min,s.alpha.max),this._u.uAPower.value=s.alphaPower,this._u.uApplyAlpha.value=s.applyAlpha,t&&super.render()}}var ma="uniform _v2 uRes;uniform _f uBoost;in _v3 position;in _v2 uv;out _v2 vUv;out _v2 vnw;out _v2 vne;out _v2 vsw;out _v2 vse;out _v2 vbm;void texcoords(_v2 fc,_v2 res,out _v2 vnw,out _v2 vne,out _v2 vsw,out _v2 vse,out _v2 vbm){_v2 ivp=1.0/res.xy;vnw=(fc+_v2(-1.0,-1.0))*ivp;vne=(fc+_v2(1.0,-1.0))*ivp;vsw=(fc+_v2(-1.0,1.0))*ivp;vse=(fc+_v2(1.0,1.0))*ivp;vbm=_v2(fc*ivp);}_vmvUv=uv;_v2 resolution=uRes*uBoost;_v2 fragCoord=vUv*resolution;texcoords(fragCoord,resolution,vnw,vne,vsw,vse,vbm);gl_Position=vec4(position*2.,1.);}",xa=`#define TC {texcount} _u _s2 _ts[{texcount}];_u _v2 uRes;_u _f uBoost;in _v2 vnw;in _v2 vne;in _v2 vsw;in _v2 vse;in _v2 vbm;in _v2 vUv;_lay0)out _v4 oc0; #if TC > 1 _lay1)out _v4 oc1; #endif #if TC > 2 _lay2)out _v4 oc2; #endif #if TC > 3 _lay3)out _v4 oc3; #endif #ifndef FRM #define FRM (1.0/ 128.0) #endif #ifndef FRMU #define FRMU (1.0 / 8.0) #endif #ifndef FSM #define FSM 8.0 #endif _v4 fxaa(_s2 tex,_v2 fc,_v2 res,_v2 vnw,_v2 vne,_v2 vsw,_v2 vse,_v2 vbm){_v4 color;mediump _v2 ivp=_v2(1.0/res.x,1.0/res.y);_v3 rgbNW=_t(tex,vnw).xyz;_v3 rgbNE=_t(tex,vne).xyz;_v3 rgbSW=_t(tex,vsw).xyz;_v3 rgbSE=_t(tex,vse).xyz;_v4 tc=_t(tex,vbm);_v3 rgbM=tc.xyz;_v3 l=_v3(0.299,0.587,0.114);_f lNW=dot(rgbNW,l);_f lNE=dot(rgbNE,l);_f lSW=dot(rgbSW,l);_f lSE=dot(rgbSE,l);_f lM=dot(rgbM,l);_f lMin=min(lM,min(min(lNW,lNE),min(lSW,lSE)));_f lMax=max(lM,max(max(lNW,lNE),max(lSW,lSE)));mediump _v2 dir;dir.x=-((lNW+lNE)-(lSW+lSE));dir.y=((lNW+lSW)-(lNE+lSE));_f dr=max((lNW+lNE+lSW+lSE)*(0.25*FRMU),FRM);_f rc=1.0/(min(abs(dir.x),abs(dir.y))+dr);dir=min(_v2(FSM,FSM),max(_v2(-FSM,-FSM),dir*rc))*ivp;_v3 rgbA=0.5*(_t(tex,fc*ivp+dir*(1.0/3.0-0.5)).xyz+_t(tex,fc*ivp+dir*(2.0/3.0-0.5)).xyz);_v3 rgbB=rgbA*0.5+0.25*(_t(tex,fc*ivp+dir*-0.5).xyz+_t(tex,fc*ivp+dir*0.5).xyz);_f lB=dot(rgbB,l);if((lB<lMin)||(lB>lMax))color=_v4(rgbA,tc.a);else color=_v4(rgbB,tc.a);return color;}_vm_v2 r=uRes*uBoost;_v2 fc=vUv*r;oc0=fxaa(_ts[0],fc,r,vnw,vne,vsw,vse,vbm); #if TC > 1 oc1=fxaa(_ts[1],fc,r,vnw,vne,vsw,vse,vbm); #endif #if TC > 2 oc2=fxaa(_ts[2],fc,r,vnw,vne,vsw,vse,vbm); #endif #if TC > 3 oc3=fxaa(_ts[3],fc,r,vnw,vne,vsw,vse,vbm); #endif }`;const Ca=z(ma);class wa extends ft{constructor({textures:t=null,resolution:e=new L(u.size.width,u.size.height),boost:s=1}={}){super(t.length,!1),this._UNF={textures:{value:t},uRes:{value:u.resolution},uBoost:{value:s}};let i=z(xa);i=i.replaceAll("{texcount}",t.length),this.mesh=new yt(u.gl,{geometry:new At(u.gl,{width:1,height:1}),_pr:new wt(u.gl,{vertex:Ca,fragment:i,UNF:this._UNF,transparent:!0})}),this.addChild(this.mesh)}}var ya=`#i_ noiseUtils #i_ snoise3d #i_ pnoise2d #i_ pnoise3d #i_ blendmodes #i_ edge #i_ contrast #i_ khwr #i_ hueShift #i_ brightness #i_ saturation #i_ grain #iu_ _u _s2 tp;_u _s2 tl;_u _s2 tb;_u _s2 tbe;_u _s2 tn;_u _s2 tne;_u _s2 tne2;_u _s2 tve;_u _s2 tze;_u _v2 uRes;_u _f uSeed;in _v2 vUv;_lay0)out _v4 oc0;_v4 perm(_v4 x){return mod289(((x*34.0)+1.0)*x);}_f ns(_v3 p){_v3 a=floor(p);_v3 d=p-a;d=d*d*(3.0-2.0*d);_v4 b=a.xxyy+_v4(0.0,1.0,0.0,1.0);_v4 k1=perm(b.xyxy);_v4 k2=perm(k1.xyxy+b.zzww);_v4 c=k2+a.zzzz;_v4 k3=perm(c);_v4 k4=perm(c+1.0);_v4 o1=fract(k3*(1.0/41.0));_v4 o2=fract(k4*(1.0/41.0));_v4 o3=o2*d.z+o1*(1.0-d.z);_v2 o4=o3.yw*d.x+o3.xz*(1.0-d.x);return o4.y*d.y+o4.x*(1.0-d.y);}_f gtstns(_v2 o){_f st=1.-_v3(grain(vUv+_v2(0.,o.x),uRes*uGrainScale*.0025)).r;st=_smst(.8,.6,st);st=clamp(st,0.,1.);return st;}_v3 gtgrn(float gs){_f gp=ns(_v3(vUv*_v2(80.,4.),0.));_v3 cn=_v3(grain(vUv,uRes*gs+gp*uGrainPerturb+uSeed*.1));return cn;}_vm_v4 ptt=_t(tp,vUv);_v4 lines=_t(tl,vUv);_v4 noise=_t(tn,vUv);_v3 iNoise=_v3(1.-noise.rgb);_f noiseValue=(iNoise.r+iNoise.g+iNoise.b)/3.;_v3 noiseValueBoosted=_v4(bmx(-.43)*ctmx(1.45)*_v4(_v3(noiseValue),1.)).rgb;_v4 c=ptt;_v4 ptk1=khwr(tp,vUv,uP1,uRes);c.rgb=(1.-uP1a)*c.rgb+blmd(uP1b,c.rgb,ptk1.rgb,uP1a)*uP1a;c.rgb=(1.-uP2a)*c.rgb+blmd(uP2b,c.rgb,ptk1.rgb,uP2a)*uP2a;_v4 lk13=khwr(tl,vUv,uLs1,uRes);_v4 lk6=khwr(tl,vUv,uLs2,uRes);c.rgb=mix(c.rgb,_v3(uLinesColor),(lk13.r)*1.*uLinesAlpha);c.rgb=mix(c.rgb,_v3(uLinesColor),(lk6.r)*.575*uLinesAlpha);_f v=step(.1,lines.r);_f adjustment=max(.04,(1.-noiseValueBoosted.r));c=mix(c,_v4(uLinesColor,1.),v*0.109*uLinesAlpha*adjustment);_v4 kze=khwr(tze,vUv,3,uRes);c.rgb=mix(c.rgb,_v3(uZonesEdgesColor),kze.r*uZonesEdgesAlpha);_f edges=edge(tn,vUv,uRes);_f e=edges*1.;_v4 e4=1.-_v4(_v3(e),1.);c.rgb=blmd(12,c.rgb,e4.rgb,.087*(1.-e4.a));_v4 khe=khwr(tne,vUv,uEdgesKuwa+1,uRes);_v4 kheBlend=khwr(tne,vUv,uEk1,uRes);_v4 khe10=khwr(tne,vUv,uEdgesKuwa,uRes);_v4 khe3=khwr(tne2,vUv,3,uRes);_v4 khe4=khwr(tne2,vUv,uEk2+1,uRes);_v4 khe5=khwr(tne2,vUv,uEk2+2,uRes);_v4 khe1=khwr(tne,vUv,uEk3,uRes);c.rgb=mix(c.rgb,_v3(uEdgesColor),khe10.r*.34*uEdgesAlpha1);c.rgb=mix(c.rgb,_v3(uEdgesColor),khe.r*.42*uEdgesAlpha1);_f ae=kheBlend.r*.3*uEdgesAlpha2;_f ae3=(khe3.r+khe4.r*.5+khe5.r*.1)*uEdgesAlpha1b;_f ae2=khe1.r*uEdgesAlpha;c.rgb=blmd(uEdgesBlendMode,c.rgb,uEdgesColor3,ae2);c.rgb=blmd(uEdgesBlendMode2,c.rgb,uEdgesColor2,ae);c.rgb=blmd(uEdgesBlendMode3,c.rgb,uEdgesColorB,ae3);_v4 khse14=khwr(tbe,vUv,uSe1,uRes);_v4 khse=khwr(tbe,vUv,uSe2,uRes);c.rgb=mix(c.rgb,_v3(uSpecialEdgeColor),khse.r*uSpecialEdgeAlpha);_f ase14=khse14.r*uKuwaVoroAlpha;_f ase=khse.r*uKuwaVoroAlpha;c.rgb=blmd(uKuwaVoroBlend,c.rgb,uKuwaVoroColor,ase14);c.rgb=blmd(uKuwaVoroBlend,c.rgb,uKuwaVoroColor,ase);oc0=c;_v3 grn1=gtgrn(uGrainScale);_f stns=gtstns(grn1.rg);oc0.rgb=blmd(uNoiseBlendMode,oc0.rgb,grn1,uNoiseStr);oc0.rgb=blmd(uStainsBlendMode,oc0.rgb,_v3(stns),uStainsValue);}`,Aa=`#i_ edge #i_ contrast #i_ brightness _u _s2 tN;_u _f uEB;_u _f uEC;_u _v2 uRes;in _v2 vUv;_lay0)out _v4 outColor0;_v4 tbw(_s2 tex,_v2 co){_v4 c=texture(tex,co);c=bmx(uEB)*ctmx(uEC)*c;c.rgb=brn(c.rgb,uEB);_f bw=(c.r+c.g+c.b)/3.0;return _v4(_v3(bw),c.a);}_f edge2(in _s2 tex,in _v2 co,in _v2 rs){_f dx=1.0/rs.x;_f dy=1.0/rs.y;_v4 p[9];p[0]=_ttb_-1.0*dx,-1.0*dy));p[1]=_ttb_-1.0*dx,0.0*dy));p[2]=_ttb_-1.0*dx,1.0*dy));p[3]=_ttb_0.0*dx,-1.0*dy));p[4]=_ttb_0.0*dx,0.0*dy));p[5]=_ttb_0.0*dx,1.0*dy));p[6]=_ttb_1.0*dx,-1.0*dy));p[7]=_ttb_1.0*dx,0.0*dy));p[8]=_ttb_1.0*dx,1.0*dy));_f d=(edi(p[1],p[7])+edi(p[5],p[3])+edi(p[0],p[8])+edi(p[2],p[6]))/4.;return eth(0.25,.4,clamp(3.0*d,0.0,1.0));}void main(){_f es=edge2(tN,vUv,uRes);_f e=es*1.;_v4 e4=1.-_v4(_v3(e),1.);outColor0=_v4(1.-e4.rgb,(1.-e4.a));}`;const ka=z(Br),Sa=Aa.replace(/_ttb_/g,"tbw(tex, co + _v2(");let Ma=z(Sa);class jt extends ft{constructor(t){super(),this._u={tN:{value:t},uEB:{value:1},uEC:{value:1},uRes:{value:u.resolutionNoDPR}},this.mesh=new yt(u.gl,{geometry:new At(u.gl,{width:1,height:1}),_pr:new wt(u.gl,{vertex:ka,fragment:Ma,UNF:this._u,transparent:!0})}),this.addChild(this.mesh)}render(t,e){this._u.uEB.value=t,this._u.uEC.value=e,super.render()}}const Da=z(ya);class Ea extends ft{constructor(t={}){super(1),this._d=y.composerData,this._ne=new jt(t.tn),this._ne2=new jt(t.tn),this._se=new jt(t.tb),this._ze=new jt(t.tz);const{fs:e}=this._gufd(this._d,{fs:Da});this.init({textures:t,fs:e}),this._u.tne={value:this._ne.texture},this._u.tne2={value:this._ne2.texture},this._u.tbe={value:this._se.texture},this._u.tze={value:this._ze.texture},this.fxaaPass=new wa({textures:this._renderTarget.textures})}render(){const t=this._d;this._ne.render(1,t.edgesContrast),this._ne2.render(1,t.edgesContrast2),this._se.render(1,t.specialEdgeContrast),this._ze.render(1,t.zonesEdgeContrast),this._u.uSeed.value=u.seed,super.render(),this.fxaaPass.render()}get texture(){return this.fxaaPass.texture}get tne2(){return this._ne2.texture}}var Ba=`#i_ noiseUtils #i_ snoise3d #iu_ _u _f uSeed;_u _f uSR;in vec2 vUv;_lay0)out _v4 outColor0;_vm_v2 uvScaled=vUv*_v2(uSR,1.);_f borderWidth=uWidthImpact;_f xborder=_smst(0.,borderWidth,vUv.x)-(_smst(1.-borderWidth,1.,vUv.x));_f yborder=_smst(0.,borderWidth*uSR,vUv.y)-(_smst(1.-borderWidth*uSR,1.,vUv.y));_f border=xborder*yborder;border=1.-border;vec2 curlIQNoiseVal=(iqrep(_v3(uvScaled*uVoroUvMult,(uSeed+5.)*uVoroSeedMult))*2.-1.)*((uVoroStr+border*uVoroBorderImpact)*(1.-border));outColor0=_v4(curlIQNoiseVal,0.,1.);}`;z(Ba);u.rand;class za extends ft{constructor(){super(),this._grid=new aa(!0),this._vegeLayer=new ba(this._grid.texture),this._def=new oa({tGrid:this._grid.texture,tGridLines:this._grid.textureLines,tVeges:this._vegeLayer.textures},!1),this._cp=new Ea({tp:this._def.textures[0],tl:this._def.textures[1],tb:this._def.textures[2],tn:this._def.textures[3],tz:this._def.textures[4]}),this._orders=[{r:this._grid,data:y.gridData},{r:this._vegeLayer,data:y.vegeData},{r:this._def,data:y.deformerData},{r:this._cp,data:y.composerData}]}generate(){this._grid.generate(),this._grid.seasonize(),this._vegeLayer.generate()}render(t=!1){let e=!1;for(let s of this._orders){if(!s.data){e&&s.r?.render();continue}(t||s.data.isDirty||e)&&(s.r.render(),e=!0)}return super.render(),e}get t(){return this._cp.texture}get td(){return this._def.textures[3]}get tc(){return this._cp.tne2}}function Pa(r,t){return u.rand()*(t-r)+r}class Ta{generate(){u.rand(),y.composerData.grainPerturb=Pa(50,1e3);const t=[2,2,2,3,3,4];let e=t[u.rand()*t.length>>0];y.forceWrap&&(e=2);const s=y.deformerData,i=s.cnoise;s.noiseB.wrappingValues=e,e===4?i.cNoiseUVMult=4.046:i.cNoiseUVMult=3.046;const n=[0,2,4];e===5&&n.push(6);let l=6+n[u.rand()*n.length>>0];e===2?(l-=4,l=Math.max(l,4)):e===3&&(l-=2),s.noise.tierDivider=l}}console.log("@florianzumbrunn; Hash: ",tokenData.hash);d.shift();const W=navigator.userAgent;W.match(/Android/i)||W.match(/webOS/i)||W.match(/iPhone/i)||W.match(/iPod/i)||W.match(/BlackBerry/i)||W.match(/Windows Phone/i)?u.dpr=.4:W.match(/iPad/i)&&(u.dpr=.7);Jo.start(Ir,tokenData.hash);let La=d[d.length*u.rand()>>0];y.setPalette(La.data);new ea;const G=new Fi(u.size.width,u.size.height);G.initWebGL();u.sketch=G;const pe=new za,Va=new Ta;Va.generate();G.setBgColor(y.backgroundColor);G.renderWebGL({clear:!0});document.body.appendChild(u.gl.canvas);const Fa=()=>{G.artwork=pe.t,G.setBgColor(y.backgroundColor),G.renderWebGL({options:y.postprocessData,clear:!0})};u.seed=600+u.rand()*100;pe.generate();pe.render(y.hasBGChange);setTimeout(()=>{Fa(),u.gl.canvas.style.display="block"},10);
,eA:.75,eBM:15,spECon:1,spEClr:8031361,spEA:.424,kuwVC:8088670,kuwVB:9,znECon:50,znEClr:6528048,znEA:.772,eA1b:3,eBM3:18,eA1:.913,eA2:2.945,kuwVA:.359,eKuwa:8,eBM2:18,gScl:1.666,gPert:856.59,nStr:.384},qn=16513523,Kn={ppD:On,defD:Wn,vD:Gn,compD:jn,bgCol:qn},Xn={hue:-.1,sh:-.54,hg:-.05,k1:2,k1a:0,k1b:11,k2:3,k2a:0,k2b:2,shS:.7},Yn={div:{maxDiv:13,chFill:.08}},Zn={bord:{wImp:.02},nsB:{cPMix:14599335,aPMix:1.594},vro:{vroS:1.63,vroBI:7.97,vroC1:469010,vroC1A:3.478,vroC1M:.478,vroC2:5384459,vroC2B:18,vroC2M:.058,vroC3A:4.293,vroC3:14600392,vroC3B:14,vroC3M:.12},nC:{nCA:1.557,nCC:9018158},clrs:{cF:3975290,cR:1324391,cT:.0887,cF2:13944259,cR2:14947080,cT2:.1413,cF3:14170850,cR3:2578308,cT3:.0978},rCh:{rHue:.471,rSat:.377},gCh:{gHue:.449,gSat:.529},bCh:{bHue:.286},yCh:{yHue:.482,ySat:-.254,yBri:-.05},cCh:{cHue:.623,cSat:-.362},grCh:{grHue:.917,grSat:.29,grBri:.094}},Qn={clrs:{clr1:16184048,clr2:9473678,clr3:14634316,clr4:14471879},lns:{thkA:93.479}},Jn={kw:{ls1:4,ls2:6,ze:3,ek1:1,ek2:4,ek3:1,se1:4,se2:4},lnClr:16777215,lnA:.38,eClr:16119285,eClrB:13317195,eClr2:7623174,eCon:2.174,eCon2:3,eClr3:9197656,eA:.406,eBM:15,spECon:.457,spEClr:11382965,spEA:.851,kuwVC:15392732,kuwVB:18,znECon:38.22,znEA:.743,eA1b:.75,eBM3:18,eA1:.826,eBM2:2,gScl:1.8,gPert:938.287,nStr:.275},to=15723748,eo={ppD:Xn,gD:Yn,defD:Zn,vD:Qn,compD:Jn,bgCol:to},so={sat:1.2,sh:-.85,hg:.55,k1:14,k1a:0,k1b:2,k2:2,k2a:.098,k2b:3,shS:.6,shB:.789},ro={div:{maxDiv:13,chFill:.08}},io={bord:{wImp:.046},nsB:{cPMix:9294586,aPMix:1.746},vro:{vroS:2.391,vroBI:0,vroC1:7685406,vroC1A:1.957,vroC1M:.239,vroC2:10573108,vroC2B:18,vroC2A:4.094,vroC2M:.12,vroC3A:4.855,vroC3:6834458,vroC3B:22},nC:{nCA:1.92,nCC:3292210},clrs:{cF:13459252,cR:4607072,cT:.2228,cF2:14769954,cR2:12614985,cT2:.1848},yCh:{ySat:-.435}},no={clrs:{clr1:16775927,clr2:14079677,clr3:10722450,clr4:16775416},lns:{thkA:102.17}},oo={kw:{p1:3,p1a:.145,p1b:3,p2:2,p2a:0,p2b:0,ls1:10,ls2:6,ze:4,ek1:1,ek2:3,ek3:1,se1:14,se2:3},lnClr:16777215,eClr:14015714,eClrB:85905,eClr2:5415384,eCon:9.13,eCon2:4.202,eClr3:4614012,eA:.884,eBM:23,spECon:1,spEClr:19845,spEA:.993,kuwVC:13739405,kuwVB:18,znECon:22.283,znEClr:498171,znEA:.424,eA1b:1,eBM3:23,kuwVA:.946,gScl:1.666,gPert:98,nStr:.167},ao=15262159,lo={ppD:so,gD:ro,defD:io,vD:no,compD:oo,bgCol:ao},ho={sat:1.25,k1:2,k1a:.511,k1b:3,k2:2,k2a:.663,k2b:2,shS:.7,shB:1},uo={ns:{tDiv:8},nsB:{cPMix:4684601,aPMix:.5,wVal:4},vro:{vroS:.435,vroC1:4741189,vroC2:15571481,vroC2B:9,vroC2A:.489,vroC2M:.228,vroC3A:3.75,vSC:.85,vroC3:1732043,vroC3B:17},nC:{nCA:1.1,nCC:3741515,nCB:17},cns:{cNUVM:4.046},clrs:{cF:5867693,cR:5490616,cF2:7918733,cR2:16246813,cT2:.1811,cF3:606197,cR3:1316138,cT3:.2681}},co={clrs:{clr3:16166184,clr4:16374567},lns:{thkM:100,thkA:102.17}},_o={kw:{p1:2,p1a:0,p1b:0,p2:2,p2a:0,p2b:0,ls1:15,ls2:6,ze:12,ek1:17,ek2:2,ek3:1,se1:14,se2:3},lnClr:6537106,lnA:.859,eClr:11066588,eClrB:14937591,eClr2:13334199,eCon:9.13,eCon2:1.8,eClr3:12637885,eA:.554,spECon:1,spEClr:16503718,spEA:.663,kuwVC:11628086,kuwVB:9,znECon:33.152,znEClr:2705096,znEA:.837,eA1b:1.337,eBM3:18,eA1:.913,eA2:2.315,kuwVA:.935,eKuwa:12,eBM2:18,gPert:871.074,nStr:.362},vo=4478841,po={ppD:ho,defD:uo,vD:co,compD:_o,bgCol:vo},fo=1,go={hue:-.08,sh:-.01,k1:2,k1a:.087,k1b:3,k2:4,k2a:.087,k2b:18,shS:.7},bo={bord:{wImp:.02},nsB:{cPMix:4684601,aPMix:.638},vro:{vroC1:4741189,vroC2:12482821,vroC2B:9,vroC2A:.489,vroC2M:.228,vroC3A:4.094,vroC3:1792209,vroC3B:17,vroC3M:.18},nC:{nCA:1.5,nCC:4719363,nCB:17},clrs:{cF:11194345,cR:12049394,cF2:7061428,cR2:16729119,cF3:606197,cR3:342732,cF4:14339217,cR4:16316388,cT4:.0978,cF5:789773,cR5:4938557,cT5:.067}},mo={clrs:{clr3:16166184,clr4:16374567},lns:{thkM:100,thkA:102.17}},xo={kw:{p1:2,p1a:0,p1b:0,p2:2,p2a:0,p2b:0,ls1:13,ls2:10,ze:3,ek1:2,ek2:3,ek3:3,se1:12,se2:3},lnClr:16316138,eClr:8295884,eClrB:16249571,eClr2:16477198,eCon:12.245,eCon2:2.609,eClr3:13096703,eA:.739,spECon:1,spEClr:16503718,spEA:.971,kuwVC:12481817,kuwVB:9,znECon:24.457,znEClr:2640347,znEA:.761,eA1b:1.511,eBM3:18,eA1:.88,eA2:3,kuwVA:.891,eKuwa:3,eBM2:18,gScl:.8,gPert:375.461,nStr:.536,stVal:.134},Co=16118247,wo={f:fo,ppD:go,defD:bo,vD:mo,compD:xo,bgCol:Co},yo={sat:1.1,con:1,sh:-.5,k1:4,k1a:.12,k1b:3,k2:2,k2a:0,k2b:2,shS:.7,shB:1},Ao={nsB:{aPMix:1.224,wVal:4},vro:{vroBI:4.166,vroC1:12694319,vroC1A:4.365,vroC2:3214184,vroC2B:10,vroC2A:.1,vroC2M:.1},nC:{nCC:14554132},cns:{cNUVM:4.046},clrs:{cF:15788742,cR:15724013,cT:.0561},gCh:{gSat:.377},yCh:{yHue:.957,ySat:-.232,yBri:-.058},mCh:{mHue:.49,mSat:.29,mBri:-.1},cCh:{cHue:.047,cSat:-.123,cBri:-.123},grCh:{grHue:.069,grSat:.029}},ko={clrs:{clr3:15448845,clr4:12533254}},So={kw:{p1:5,p1a:.569,p1b:17,p2:2,p2a:.351,p2b:3,ls1:13,ls2:14,ze:8,ek1:11,ek2:3,ek3:1,se1:14,se2:4},lnClr:15265266,eClr:15460576,eClrB:4749783,eCon:1,eCon2:3,spEClr:2451672,spEA:.536,kuwVC:9922400,kuwVB:18,znEClr:15601166,eA1b:.728,eA1:2.032,kuwVA:.884,gScl:.6,gPert:734.356,nStr:.29,nBM:25,stVal:.156},Mo=16118500,Do={ppD:yo,defD:Ao,vD:ko,compD:So,bgCol:Mo},Eo={sh:-1,hg:.3,k1:14,k1a:.185,k1b:3,k2:2,k2a:.054,k2b:3,shS:.6,shB:.75},Bo={div:{maxDiv:13,chFill:.08}},zo={bord:{wImp:.046},nsB:{cPMix:15892841,aPMix:1.746},vro:{vroS:2.391,vroBI:0,vroC1:7685406,vroC1B:23,vroC1A:1.957,vroC1M:.239,vroC2:6890247,vroC2B:18,vroC2A:4.583,vroC2M:.12,vroC3A:4.855,vroC3:6834458,vroC3B:22},nC:{nCA:1.92,nCC:3292210},clrs:{cF:13459252,cR:4607072,cT:.2228,cF2:14769954,cR2:12614985,cT2:.1703},yCh:{yHue:.952,ySat:-1}},Po={clrs:{clr1:16775927,clr2:14079677,clr3:8815988,clr4:16775416},lns:{thkA:102.17}},To={kw:{p1:2,p1a:.21,p1b:3,p2:2,p2a:0,p2b:0,ls1:15,ls2:14,ze:3,ek1:1,ek2:2,ek3:6,se1:14,se2:4},lnClr:16777215,eClr:15787762,eClrB:3169841,eClr2:14198098,eCon:9.13,eCon2:4.202,eClr3:4605563,eA:.884,eBM:23,spECon:.917,spEClr:5392455,spEA:.58,kuwVC:13458968,kuwVB:18,znECon:27.351,znEClr:498171,znEA:.424,eA1b:1,eBM3:23,kuwVA:.946,gScl:1.8,gPert:218.239,nStr:.19},Lo=16186622,Vo={ppD:Eo,gD:Bo,defD:zo,vD:Po,compD:To,bgCol:Lo},Fo={k1:14,k1a:0,k1b:2,k2:10,k2a:.228,k2b:3,shS:.6,shB:.72},Ro={nsB:{cPMix:5408850,aPMix:1.1,wVal:4},vro:{vroS:3.918,vroBI:0,vroC1:349681,vroC1A:1.322,vroC2M:.036,vroC3A:4.094,vSC:.8,vroC3:12261536},cns:{cNUVM:4.046}},Uo={clrs:{clr3:14211804,clr4:4941384},lns:{rotT:2,thkM:76.8}},No={kw:{p1:2,p1a:0,p1b:0,p2:2,p2a:0,p2b:0,ls1:13,ls2:6,ze:3,ek1:1,ek2:3,ek3:1,se1:14,se2:3},eClr:13754313,eClrB:14081993,spEClr:6329406,kuwVC:2896172,eA1:.304,gScl:.905,gPert:345.03,nStr:.286},Io=15723239,$o={ppD:Fo,defD:Ro,vD:Uo,compD:No,bgCol:Io},Ho={postprocessData:"ppD",saturation:"sat",hue:"hue",contrast:"con",gridData:"gD",divisions:"div",friction:"fric",maxDivisions:"maxDiv",chanceFilling:"chFill",chanceDrawLine:"chDraw",lineWidth:"lw",deformerData:"defD",borders:"bord",widthImpact:"wImp",noise:"ns",tierDivider:"tDiv",noiseB:"nsB",colorPerturbMix:"cPMix",alphaPerturbMix:"aPMix",wrappingValues:"wVal",voro:"vro",voroStr:"vroS",voroBorderImpact:"vroBI",voroColor1:"vroC1",voroColor1Blend:"vroC1B",voroColor1Alpha:"vroC1A",voroColor1Mix:"vroC1M",voroColor2:"vroC2",voroColor2Blend:"vroC2B",voroColor2Alpha:"vroC2A",voroColor2Mix:"vroC2M",voroColor3:"vroC3",voroColor3Blend:"vroC3B",voroColor3Alpha:"vroC3A",voroColor3Mix:"vroC3M",voroUvMult:"vroUVM",voroSeedMult:"vroSM",voroMix2:"vroM2",noiseColor:"nC",noiseColorAlpha:"nCA",noiseColorColor:"nCC",noiseColorBlend:"nCB",cnoise:"cns",cNoiseUVMult:"cNUVM",cNoiseUVMultX:"cNUVMX",cNoiseMix:"cNMix",cNoiseAbs:"cNAbs",flow:"flw",noiseMaths:"nMths",noiseMaths2:"nMths2",noiseMax:"nMax",noiseMax2:"nMax2",colorImpact:"cImp",saturationImpact:"satImp",vegeData:"vD",colors:"clrs",color1:"clr1",color2:"clr2",color3:"clr3",color4:"clr4",lines:"lns",lengthM:"lenM",rotationType:"rotT",thicknessM:"thkM",thicknessA:"thkA",composerData:"compD",linesColor:"lnClr",linesAlpha:"lnA",edgesColor:"eClr",edgesColorB:"eClrB",edgesColor2:"eClr2",edgesContrast:"eCon",edgesContrast2:"eCon2",edgesColor3:"eClr3",edgesAlpha:"eA",edgesBlendMode:"eBM",specialEdgeContrast:"spECon",specialEdgeColor:"spEClr",specialEdgeAlpha:"spEA",kuwaVoroColor:"kuwVC",kuwaVoroBlend:"kuwVB",voroEdgesBlend:"vrEB",voroEdgesColor:"vrEC",voroEdgesAlpha:"vrEA",zonesEdgeContrast:"znECon",zonesEdgesColor:"znEClr",zonesEdgesAlpha:"znEA",edgesAlpha1b:"eA1b",edgesBlendMode3:"eBM3",edgesAlpha1:"eA1",edgesAlpha2:"eA2",kuwaVoroAlpha:"kuwVA",edgesKuwa:"eKuwa",edgesBlendMode2:"eBM2",backgroundColor:"bgCol",shadows:"sh",highlights:"hg",colorFrom:"cF",colorReplace:"cR",colorThreshold:"cT",colorFrom2:"cF2",colorReplace2:"cR2",colorThreshold2:"cT2",colorFrom3:"cF3",colorReplace3:"cR3",colorThreshold3:"cT3",colorFrom4:"cF4",colorReplace4:"cR4",colorThreshold4:"cT4",colorFrom5:"cF5",colorReplace5:"cR5",colorThreshold5:"cT5",redChannel:"rCh",redHue:"rHue",redSaturation:"rSat",redBrightness:"rBri",redThreshold:"rTh",greenChannel:"gCh",greenHue:"gHue",greenSaturation:"gSat",greenBrightness:"gBri",greenThreshold:"gTh",blueChannel:"bCh",blueHue:"bHue",blueSaturation:"bSat",blueBrightness:"bBri",blueThreshold:"bTh",yellowChannel:"yCh",yellowHue:"yHue",yellowSaturation:"ySat",yellowBrightness:"yBri",yellowThreshold:"yTh",magentaChannel:"mCh",magentaHue:"mHue",magentaSaturation:"mSat",magentaBrightness:"mBri",magentaThreshold:"mTh",cyanChannel:"cCh",cyanHue:"cHue",cyanSaturation:"cSat",cyanBrightness:"cBri",cyanThreshold:"cTh",grayChannel:"grCh",grayHue:"grHue",graySaturation:"grSat",grayBrightness:"grBri",grayThreshold:"grTh",grainScale:"gScl",grainPerturb:"gPert",noiseStr:"nStr",noiseBlendMode:"nBM",stainsValue:"stVal",stainsBlendMode:"stBM",sharpenSize:"shS",sharpenBlur:"shB",voroStrColor:"vSC"};function kr(r,t){const e={};for(const s in r){const i=Object.keys(t).find(n=>t[n]===s)||s;typeof r[s]=="object"&&r[s]!==null?e[i]=kr(r[s],t):e[i]=r[s]}return e}function D(r){return kr(r,Ho)}const d=[];d.push({value:d.length,data:{}});d.push({value:d.length,data:D(fn)});d.push({value:d.length,data:D(wo)});d.push({value:d.length,data:D(po)});d.push({value:d.length,data:D(Hn)});d.push({value:d.length,data:D(Kn)});d.push({value:d.length,data:D(Xi)});d.push({value:d.length,data:D(Vn)});d.push({value:d.length,data:D(yn)});d.push({value:d.length,data:D(en)});d.push({value:d.length,data:D(hn)});d.push({value:d.length,data:D(lo)});d.push({value:d.length,data:D(Bn)});d.push({value:d.length,data:D(eo)});d.push({value:d.length,data:D(Do)});d.push({value:d.length,data:D(Vo)});d.push({value:d.length,data:D($o)});class Oo extends x{constructor(){super(),this.ap("palette",0)}get current(){return d[this.params.palette.value].data}}class Wo{constructor(){this.och=new R,this.cbs={w:"hsl( 65, 50%, 50% )",sp:"hsl( 130, 50%, 50% )",su:"hsl( 195, 50%, 50% )",a:"hsl( 260, 50%, 50% )"},this.backgroundColor=15065039,this.postprocessData=new Ri,this._dataLayers=[],this.gridData=new Ni,this.gridData.och.add(this._dispatch),this._dataLayers.push(this.gridData),this.deformerData=new Ui,this.deformerData.och.add(this._dispatch),this._dataLayers.push(this.deformerData),this.vegeData=new Ii,this.vegeData.och.add(this._dispatch),this._dataLayers.push(this.vegeData),this.composerData=new Hi,this.composerData.och.add(this._dispatch),this._dataLayers.push(this.composerData),this.paletteData=new Oo}setPalette(t){this.gridData.applyPalette(t),this.vegeData.applyPalette(t),this.deformerData.applyPalette(t),this.composerData.applyPalette(t),this.postprocessData.applyPalette(t),t.backgroundColor!==void 0?this.backgroundColor=t.backgroundColor:this.backgroundColor=15065039,this.hasBGChange=!0}_dispatch=()=>{this.och.dispatch()}}const y=new Wo,Sr=new R;window.addEventListener("keydown",r=>{Sr.dispatch(r.key)});const Go={onDown:Sr};function _r(r){return`${global.id}-${r}`}function jo(r,t){const e=JSON.parse(localStorage.getItem(_r(r)))||[];e.includes(t)||(e.push(t),localStorage.setItem(_r(r),JSON.stringify(e)))}let ht=null;const Mr=new R,de=new R,Jt=new R;function Dr(){return tokenData.hash}function qo(r,t=null){ht=r,ht.init(t),ht.createPrerand()}function Ko(r=!0){ht.reset(),r&&(Mr.dispatch(),Jt.dispatch())}function Xo(r){ht.setHash(r),de.dispatch(),Jt.dispatch()}function Yo(){ht.generateNewHash(),de.dispatch(),Jt.dispatch()}function Zo(r){Go.onDown.add(t=>{switch(t){case"S":jo(r,Dr());break}})}const at={load:qo,reset:Ko,setHash:Xo,generateNewHash:Yo,getHash:Dr,activateKeyboard:Zo,onReset:Mr,ochHash:de,onResetOrChangeHash:Jt};class Qo{constructor(){this.ochHash=at.ochHash}start(t,e=null){console.log("Engine: start"),at.load(t,e)}resetHash(t=!0){at.reset(t)}generateNewHash(){at.generateNewHash()}setHash(t){at.setHash(t)}get hash(){return at.getHash()}}const Jo=new Qo;let I=null,Gt=null;function ta(r,{prefix:t="",postfix:e=""}={}){I||(I=document.createElement("canvas"),Gt=I.getContext("2d")),I.width=r.height,I.height=r.width,Gt.translate(I.width/2,I.height/2),Gt.rotate(Math.PI/2),Gt.drawImage(r,-r.width/2,-r.height/2);const s=document.createElement("a");s.setAttribute("download",(t?t+"_":"")+u.id+"-"+tokenData.hash+(e?"_"+e:"")+".jpg"),s.setAttribute("href",I.toDataURL("image/jpg",1)),s.click()}class ea{constructor(){this._isExporting=!1,this._hasToExportData=!1,this._countToExport=100,this.onCompleteExport=new R,this._init()}_init(){window.addEventListener("keydown",t=>{t.key==="s"&&ta(u.gl.canvas)})}}var Er="in vec2 vUv;_lay0)out vec4 outColor0;_vmoutColor0=vec4(vUv,0.,1.);}",Br="in vec2 uv;in vec3 position;out vec2 vUv;_vmvUv=uv;gl_Position=vec4(position*2.,1.0);}";const sa=z(Br);function ra({UNF:r={},vertex:t=sa,fragment:e=Er}={}){return new yt(u.gl,{geometry:new At(u.gl,{width:1,height:1}),_pr:new wt(u.gl,{vertex:t,fragment:e,UNF:r,transparent:!0})})}class ft extends Zt{constructor(t=1,e={}){super();const{width:s,height:i}=u.size;this._width=s,this._height=i,this._camera=new gr(this._gl,{fov:50,near:.1,far:1e3,aspect:s/i}),this._camera.position.set(0,0,5),this._camera.lookAt([0,0,0]),this._renderTarget=this._createRT(t,e),this._uinj=[],this._u={}}init({UNF:t=this._u,textures:e={},fs:s=Er}={}){Object.entries(e).forEach(([i,n])=>{n!==null&&(t[i]={value:n})}),this._u=Object.assign({uSeed:{value:0},uRes:{value:u.resolutionNoDPR},uSR:{value:u.size.width/u.size.height}},t),this.mesh=ra({UNF:this._u,fragment:s}),this.addChild(this.mesh)}_createRT(t,e){const s={width:this._width,height:this._height,minFilter:u.gl.LINEAR,magFilter:u.gl.NEAREST,wrapS:u.gl.CLAMP_TO_EDGE,wrapT:u.gl.CLAMP_TO_EDGE,color:t},i=Object.assign({},s,e);return new se(u.gl,i)}render(t=-1,e=1,s=!0){this._u&&this._uiu(this._u),this._render(this,this._renderTarget,s)}_setClear(t=-1,e=1){t>=0&&(t=t instanceof $?t:new $(t),u.gl.clearColor(t.r,t.g,t.b,e))}_render(t,e,s=!0){u.renderer.render({scene:t,camera:this._camera,target:e,clear:s})}_gufd(t,{vs:e=null,fs:s=null,UNFToFeed:i=this._u}={}){let n="";n=this._gufp(i,t.params,n);for(let a in t.dataLayers){let l=t.dataLayers[a];n=this._gufp(i,l.params,n)}return s=s.replace("#iu_",n),{vs:e,fs:s}}_gufp(t,e,s){for(let i in e){let n=e[i];if(n.isUniform){let a="u"+i.charAt(0).toUpperCase()+i.slice(1),l="float";typeof n.value=="boolean"&&(l="bool");let h=n.value;n.type==="color"?(h=new $(h),l="vec3"):typeof h=="object"&&("min"in h||"max"in h)?(h=new L(h.min,h.max),l="vec2"):n.type==="int"&&(l="int"),t[a]={value:h},s+=`uniform ${l} ${a}; `,this._uinj.push({name:a,type:l,from:e,nameParam:i})}}return s}_uiu(t){for(let e of this._uinj){const s=e.from[e.nameParam].value,i=e.type;i==="vec3"?t[e.name].value.set(new $(s)):i==="vec2"?t[e.name].value.set(s.min,s.max):t[e.name].value=s}}get texture(){return this._renderTarget.texture}get textures(){return this._renderTarget.textures}get camera(){return this._camera}}var ia=`#i_ noiseUtils #i_ snoise3d #i_ pnoise2d #i_ blendmodes #i_ hsl2rgb #i_ rgb2hsl #i_ hueShift #i_ brightness #i_ saturation #iu_ _f s3mod(_v3 v,_f nb){ #i_ snoise3dpart if(uNoiseMax2==true){p0=max(p0,_v3(0.));p1=max(p1,_v3(0.));p2=max(p2,_v3(0.));p3=max(p3,_v3(0.));}_v4 norm=tisq(_v4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;_f m0=floor(abs(dot(x0,x0))*uSubdiv)/uSubdiv;_f m1=floor(abs(dot(x1,x1))*uSubdiv)/uSubdiv;_f m2=floor(abs(dot(x2,x2))*uSubdiv)/uSubdiv;_f m3=floor(abs(dot(x3,x3))*uSubdiv)/uSubdiv;if(uSubdiv==0.){m0=dot(x0,x0);m1=dot(x1,x1);m2=dot(x2,x2);m3=dot(x3,x3);}_v4 m=_v4(0.);if(uNoiseMax==true){m=max(nb-_v4(m0,m1,m2,m3),0.);}else{m=nb-_v4(m0,m1,m2,m3);};m=cos(m);_f noise=42.*dot(m*m,_v4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));return noise;}_v3 s3v3m(_v3 x,_f nb){_f s=s3mod(_v3(x),nb);_f s1=s3mod(_v3(x.y-9.07,x.z+31.2,x.x+23.12),nb);_f s2=s3mod(_v3(x.z+74.2,x.x-130.2,x.y+99.4),nb);_v3 c=_v3(s,s1,s2);return c;}_v3 crlNMod(_v3 p,_f nb){const _f e=.1;_v3 dx=_v3(e,0.0,0.0);_v3 dy=_v3(0.0,e,0.0);_v3 dz=_v3(0.0,0.0,e);_v3 p_x0=s3v3m(p-dx,nb);_v3 p_x1=s3v3m(p+dx,nb);_v3 p_y0=s3v3m(p-dy,nb);_v3 p_y1=s3v3m(p+dy,nb);_v3 p_z0=s3v3m(p-dz,nb);_v3 p_z1=s3v3m(p+dz,nb);_f x=p_y1.z-p_y0.z-p_z1.y+p_z0.y;_f y=p_z1.x-p_z0.x-p_x1.z+p_x0.z;_f z=p_x1.y-p_x0.y-p_y1.x+p_y0.x;const _f divisor=1.0/(2.0*e);return normalize(_v3(x,y,z)*divisor);}_u _s2 tGridLines;_u _s2 tVeges[1];_u _f uSeed;_u _f uSR;_u _v2 uRes;in _v2 vUv;_v4 rgbfch(_v3 o,_v3 ch,_v3 hsl,_f th){_v4 color=_v4(o,0.);_v3 c1=o;_v3 c2=ch;if(distance(c1,c2)<=th){color.rgb=hueshift2(color.rgb,hsl.x);color.rgb=saturation2(color.rgb,hsl.y);color.rgb=brn(color.rgb,hsl.z);color.a=1.;}return color;}_lay0)out _v4 ocl0;_lay1)out _v4 ocl1;_lay2)out _v4 ocl2;_lay3)out _v4 ocl3;_lay4)out _v4 ocl4;_vm_v2 uvM=_v2(vUv.x,vUv.y);_v2 uvM2=uvM;_v2 uvScaled=uvM2*_v2(uSR,1.);_v2 vb=_v2(25./uRes.x)*_v2(uSR,1.);_f xb2=_smst(0.,vb.x,vUv.x)-(_smst(1.-vb.x,1.,vUv.x));_f yb2=_smst(0.,vb.y*uSR,vUv.y)-(_smst(1.-vb.y*uSR,1.,vUv.y));_f bdr2=1.-xb2*yb2;_f bdw=uWidthImpact;_f xb=_smst(0.,bdw,vUv.x)-(_smst(1.-bdw,1.,vUv.x));_f yb=_smst(0.,bdw*uSR,vUv.y)-(_smst(1.-bdw*uSR,1.,vUv.y));_f bdr=xb*yb;bdr*=1.-bdr2;bdr=1.-bdr;_f bordersImpact=bdr;_f ombdr=1.-bdr;_v2 viq=(iqrep(_v3(uvScaled*uVoroUvMult,(uSeed+5.)*uVoroSeedMult))*2.-1.);_f vbi=uVoroBorderImpact;_v2 crliqVal=viq*((uVoroStr+(bdr)*vbi)*ombdr);_v2 crliqvc=viq*((uVoroStrColor+(bdr)*vbi)*ombdr);_f voroValue2=(crliqvc.x+crliqvc.y)/2.;_f iqVal=(abs(snoise3d(vec3(uvScaled*uVoroUvMult,(uSeed+5.))))*2.-1.)*.1*uVoroStrColor*(1.-bdr);iqVal+=(iq(uvScaled*uVoroUvMult,1.1,.7,(uSeed+5.)*uVoroSeedMult)*2.-1.)*.05*uVoroStrColor*(1.-bdr);_f seed=uSeed;_v2 vcn=uvScaled*uCNoiseUVMult*_v2(uCNoiseUVMultX,1.)+(uSeed)*uCNoiseSeedMult;_f cnv1=cnoise(vcn);_f cnv2=cnoise(vcn+_v2(5.2,1.3));_f cnv=cnoise(_v2(cnv1,cnv2))*uCNoiseStr;if(uCNoiseAbs){cnv=abs(cnv);}_v2 ucr=uvScaled;ucr.x*=uCurlUVXMult;_v3 curlP=curlNoise(_v3(uvScaled*uCurlUVMult+uSeed*uCurlSeedMult,0.));_f nsb=uNoiseBase;_v2 uvcrl=ucr*uCurlUVMult;_v3 curl=_v3(0.);curl=crlNMod(_v3(uvcrl+seed*uCurlSeedMult,0.),nsb);_v3 curl2=crlNMod(_v3(uvcrl*_v2(1.,1.)+(seed+10.)*uCurlSeedMult,0.),nsb);ucr+=curlP.xy*uVoroMix2;_v3 curl3=crlNMod(_v3(ucr*uCurlUVMult*_v2(1.,1.)+(seed+20.)*uCurlSeedMult,0.),nsb);_v2 wuv=uvScaled;wuv=mix(wuv,crliqVal,uVoroMix);_v2 originWrapUV=wuv;_v3 vcl1=curl;_v3 vcl2=uWrappingValues>1 ? curl2 : curl;_v3 vcl3=uWrappingValues>2 ? curl3 : curl;_v3 vcl4=uWrappingValues>3 ? curlP : curl;_v3 vcl5=(curl2+curl3)/2.;_f tierDivider=uTierDivider;_f tier=1./tierDivider;_f wuvt=uWrapUVStr*tier;if(uUseWrapUV){wuv-=cnv*uCNoiseMix;wuv+=max(0.,vcl1.r)*max(vcl1.g,vcl1.b)*wuvt;wuv-=max(cnv,vcl1.g)*max(vcl1.r,vcl1.b)*wuvt;wuv-=max(cnv,vcl1.b)*max(vcl1.g,vcl1.r)*wuvt;wuv+=max(0.,vcl2.r)*max(vcl3.g,vcl1.b)*wuvt;wuv-=max(cnv,vcl3.g)*max(vcl3.r,vcl2.b)*wuvt;wuv+=max(0.,vcl2.b)*max(vcl2.g,vcl1.r)*wuvt;if(uWrappingValues>3){wuv+=max(0.,vcl4.r)*max(vcl4.g,vcl4.b)*wuvt;wuv-=max(0.,vcl4.g)*max(vcl3.b,vcl5.r)*wuvt;wuv-=max(0.,vcl4.b)*max(vcl4.b,vcl4.r)*wuvt;wuv-=max(0.,vcl2.g)*max(vcl4.g,vcl4.r)*wuvt;}if(uWrappingValues>4){wuv-=max(0.,vcl5.r)*max(vcl5.g,vcl5.b)*wuvt;wuv-=max(0.,vcl5.g)*max(vcl3.b,vcl5.r)*wuvt;wuv-=max(0.,vcl2.g)*max(vcl5.b,vcl4.r)*wuvt;wuv-=max(0.,vcl5.b)*max(vcl3.g,vcl5.r)*wuvt;wuv-=max(0.,vcl3.g)*max(vcl2.b,vcl5.g)*wuvt;}}_v2 wuvsave2=wuv;_v2 wuvsave=mod(wuv,1.);wuv=wuvsave2;wuv=mod(wuv,1.);wuvsave=wuv;_v2 stepped=step(_v2(.4),wuvsave);_f bw=(stepped.x+stepped.y)/2.;_f steppedBW=step(.5,bw);ocl2=_v4(_v3(steppedBW),1.);_f vuvuv=(wuvsave2.x+wuvsave2.y)/2.;ocl4=_v4(vuvuv);ocl4.a=1.;wuvsave=wuv;_f lpb=curlNoise(_v3(uvScaled*(uLinesPerturbUV)-.5*uLinesPerturbSeedMult,uLinesPerturbZ)).r;_f lpb2=curlNoise(_v3(uvScaled*(uLinesPerturbUV)-.5+10.*uLinesPerturbSeedMult,uLinesPerturbZ)).r;_v2 uvlpb=mix(originWrapUV,wuv,uWrapUVMix);uvlpb.x+=lpb*uLinesPerturbStr;uvlpb.y+=lpb2*uLinesPerturbStr;uvlpb=mix(uvM,uvlpb,(1.-bordersImpact));_v2 uv=uvM;uv=uvlpb;_v4 gridLines=_t(tGridLines,uvlpb);gridLines.r=step(.1,gridLines.r);_v4 vege0=_t(tVeges[0],uv);_v4 clr=vege0;clr.rgb=mix(clr.rgb,_v3(clr.rgb)*uColorPerturbMix,step(.25,((curl.x+curl.y+curl.z)/3.)*wuv.x)*uAlphaPerturbMix);_v4 noiseb=_v4(wuv,0.,1.);_f f=uThresholdSoft/2.0;_f a=uThreshold-f;_f b=uThreshold+f;_f l=(noiseb.x+noiseb.y+noiseb.z)/3.0;_f v=_smst(a,b,l);_f rci=(clr.r+clr.g+clr.b)/3.;_v3 hsl=rgb2hsl(clr.rgb);hsl.y+=.4;hsl.z-=.035;_v3 cb=hsl2rgb(hsl);const _v3 W=_v3(0.2125,0.7154,0.0721);_v3 _iensity=_v3(dot(clr.rgb,W));_v3 changed=mix(_iensity,clr.rgb,uSaturationImpact);cb.rgb=mix(_iensity,cb.rgb,1.05);clr.rgb=mix(clr.rgb,cb,steppedBW);changed=mix(_iensity,clr.rgb,uSaturationImpact);clr.rgb=mix(clr.rgb,changed,(1.-v)*rci);changed=mix(_iensity,clr.rgb,uSaturationImpact);clr.rgb=mix(clr.rgb,changed,1.-steppedBW);ocl0=clr;ocl1=_t(tGridLines,uvlpb);ocl3=noiseb;_v3 iNoise=_v3(1.-noiseb.rgb);_f nsv=(iNoise.r+iNoise.g)/2.;_v3 rgbbw=_v3((clr.r+clr.g+clr.b)/3.);_v3 cc=mix(clr.rgb,rgbbw*uNoiseColorColor,1.-nsv);ocl0.rgb=mix(clr.rgb,blmd(uNoiseColorBlend,clr.rgb,cc.rgb,uNoiseColorAlpha),(1.-nsv));ocl0.rgb=mix(ocl0.rgb,blmd(uVoroColor1Blend,ocl0.rgb,uVoroColor1,uVoroColor1Alpha*iqVal*(1.-nsv)),iqVal*uVoroColor1Mix*(1.-nsv));ocl0.rgb=mix(ocl0.rgb,blmd(uVoroColor2Blend,ocl0.rgb,uVoroColor2,uVoroColor2Alpha*voroValue2*nsv),voroValue2*uVoroColor2Mix*nsv);ocl0.rgb=mix(ocl0.rgb,blmd(uVoroColor3Blend,ocl0.rgb,uVoroColor3,uVoroColor3Alpha*(1.-iqVal)*(nsv)),(1.-iqVal)*uVoroColor3Mix*(nsv));_v3 crgb=rgbfch(ocl0.rgb,_v3(1.,0.,0.),_v3(uRedHue,uRedSaturation,uRedBrightness),uRedThreshold).rgb;crgb=rgbfch(crgb,_v3(0.,1.,0.),_v3(uGreenHue,uGreenSaturation,uGreenBrightness),uGreenThreshold).rgb;crgb=rgbfch(crgb,_v3(0.,0.,1.),_v3(uBlueHue,uBlueSaturation,uBlueBrightness),uBlueThreshold).rgb;crgb=rgbfch(crgb,_v3(1.,1.,0.),_v3(uYellowHue,uYellowSaturation,uYellowBrightness),uYellowThreshold).rgb;crgb=rgbfch(crgb,_v3(255.,128.,255.)/255.,_v3(uMagentaHue,uMagentaSaturation,uMagentaBrightness),uMagentaThreshold).rgb;crgb=rgbfch(crgb,_v3(0.,1.,1.),_v3(uCyanHue,uCyanSaturation,uCyanBrightness),uCyanThreshold).rgb;crgb=rgbfch(crgb,_v3(.5,.5,.5),_v3(uGrayHue,uGraySaturation,uGrayBrightness),uGrayThreshold).rgb;ocl0.rgb=crgb;_v3 px=ocl0.rgb;_v3 eps=_v3(uColorThreshold);_ia_px,uColorFrom-eps)_al_px,uColorFrom+eps))){ocl0.rgb=uColorReplace;}eps=_v3(uColorThreshold2);_ia_px,uColorFrom2-eps)_al_px,uColorFrom2+eps))){ocl0.rgb=uColorReplace2;}eps=_v3(uColorThreshold3);_ia_px,uColorFrom3-eps)_al_px,uColorFrom3+eps))){ocl0.rgb=uColorReplace3;}eps=_v3(uColorThreshold4);_ia_px,uColorFrom4-eps)_al_px,uColorFrom4+eps))){ocl0.rgb=uColorReplace4;}eps=_v3(uColorThreshold5);_ia_px,uColorFrom5-eps)_al_px,uColorFrom5+eps))){ocl0.rgb=uColorReplace5;}}`;let re=ia.replace(/_ia_/g,"if( all( _gte(");re=re.replace(/_al_/g," ) && all( _lte(");const na=z(re);class oa extends ft{constructor(t={}){super(5),this._data=y.deformerData;const{fs:e}=this._gufd(y.deformerData,{fs:na});this.init({textures:t,fs:e})}prepare(t){this._u.tGrid.value=t}render(){this._u.uSeed.value=u.seed>>0,super.render()}get texture(){return this.fxaaPass?this.fxaaPass.texture:super.texture}get textures(){return this.fxaaPass?this.fxaaPass.textures:super.textures}}class vr{constructor({width:t=u.size.width,height:e=u.size.height}={}){this._width=t,this._height=e,this._initEngine()}_initEngine(){this.canvas=document.createElement("canvas"),this.canvas.width=this
n+=.5;_f l=dot(n,normalize(uLp));at.rgb+=l*uLs*.5;fc=at;}`,zi="in vec2 position;in vec2 uv;out vec2 vUv;_vmgl_Position=vec4(position,0.,1.);vUv=uv;}";const qt=[];function oe(){u.screen.width=window.innerWidth,u.screen.height=window.innerHeight;for(const r of qt)r()}window.addEventListener("resize",oe,!1);window.addEventListener("orientationchange",oe,!1);oe();const Pi={add:r=>{qt.push(r)},remove:r=>{const t=qt.indexOf(r);t!==-1&&qt.splice(t,1)}};function Ti(r,t="center"){r.style.boxShadow="0 0 10px rgba(0,0,0,0.5)",r.style.position="absolute";function e(){let{width:s,height:i}=u.screen;if(s>i){r.style.transform="rotate(90deg) translateZ(0)";let n=u.size.height,a=u.size.width,l=n,h=a;if(u.screen.height<a){let c=l/h;h=i,l=i*c,l>s&&(c=h/l,l=s,h=s*c)}else{let c=h/l;l=s,h=s*c,h>i&&(c=l/h,h=i,l=i*c)}l=Math.min(l,n),h=Math.min(h,a),r.style.width=h+"px",r.style.height=l+"px"}else{r.style.transform="translateZ(0)";let n=r.width,a=r.height;if(u.screen.height<r.height){let l=n/a;a=i,n=i*l,n>s&&(l=a/n,n=s,a=s*l)}else{let l=a/n;n=s,a=s*l,a>i&&(l=n/a,a=i,n=i*l)}r.style.height=a+"px",r.style.width=n+"px"}}Pi.add(e),e()}const Li=z(Bi),Vi=z(zi);class Fi{constructor(t,e){this.width=t,this.height=e,this.op={brightness:0,contrast:1,saturation:1,saturationR:1,saturationG:1,saturationB:1,highlights:0,shadows:0,hue:0,sharpenBlur:0,sharpenSize:1,normalStr:10,lightPosX:-.3,lightPosY:.8,lightStr:.1,k1:14,k1a:.8,k1b:2,k2:2,k2a:.8,k2b:2},this.setBgColor(16777215),this.setClearAlpha(1),this.ha=!1,this._isFirstRender=!0}initWebGL(){this._initEngine(),this._scene=new Zt(this._gl),this._camera=new gr(this._gl,{fov:45,near:.1,far:1e3,aspect:this.width/this.height}),this._camera.position.set(0,0,5),this._camera.lookAt([0,0,0]),u.resolution=new L(u.size.width*u.dpr,u.size.height*u.dpr),u.resolutionNoDPR=new L(u.size.width,u.size.height),this._initArtwork(),this._pc=new hi(this._gl,{width:this.width,height:this.height,dpr:u.dpr||1}),this._renderPass=this._pc.addPass({fragment:Li,vertex:Vi,UNF:this._u})}_initArtwork(){this._u={uArtworkSize:{value:u.resolution},uBgColor:{value:new $},tArtwork:{value:new Qt(u.gl,{image:new Uint8Array([191,25,54,255,96,18,54,255,96,18,54,255,37,13,53,255]),width:2,height:2,magFilter:u.gl.NEAREST})},uBrt:{value:1},uCst:{value:1},uStr:{value:1},uHlgt:{value:1},uSh:{value:1},uHa:{value:0},uShb:{value:0},uShs:{value:1},uNs:{value:10},uLp:{value:new L(-.3,.8)},uLs:{value:.1},uRA:{value:0},uK1:{value:14},uK1a:{value:.8},uK1b:{value:2},uK2:{value:2},uK2a:{value:.8},uK2b:{value:2}}}_initEngine(){this._renderer=new Yr({width:this.width,height:this.height,dpr:u.dpr||1,antialias:!0,preserveDrawingBuffer:!0}),this._gl=this._renderer.gl,u.gl=this._gl,this._gl.canvas.style.zIndex=1e3,this._gl.canvas.style.display="none",this._gl.canvas.style.transform="translateZ(0)",this._gl.autoClear=!1,Ti(this._gl.canvas),u.renderer=this._renderer}clear(){this._gl.clearColor(this._bgColor.r,this._bgColor.g,this._bgColor.b,this._clearAlpha)}renderWebGL=({useCanvasArtwork:t=!0,options:e=this.op,skipComposer:s=!1,clear:i=!0,scene:n=null}={})=>{i&&this._gl.clearColor(this._bgColor.r,this._bgColor.g,this._bgColor.b,this._clearAlpha),this._u.uBgColor.value=this._bgColor,this._u.uBrt.value=e.brightness,this._u.uCst.value=e.contrast,this._u.uStr.value=e.saturation,this._u.uHlgt.value=e.highlights,this._u.uSh.value=e.shadows,this._u.uHa.value=e.hue,this._u.uShb.value=Math.max(.2,e.sharpenBlur),this._u.uShs.value=e.sharpenSize,this._u.uNs.value=e.normalStr-3.5,this._u.uLp.value.x=e.lightPosX,this._u.uLp.value.y=e.lightPosY,this._u.uLs.value=e.lightStr,this._u.uRA.value=this.ha?1:0,this._u.uK1.value=e.k1,this._u.uK1a.value=e.k1a,this._u.uK1b.value=e.k1b,this._u.uK2.value=e.k2,this._u.uK2a.value=e.k2a,this._u.uK2b.value=e.k2b,s?this._renderer.render({scene:n||this._scene,camera:this._camera}):(this._renderPass.enabled=!0,this._pc.targetOnly=!1,this._pc.render({scene:this._scene})),this._isFirstRender&&(this._isFirstRender=!1)};_serializePostprocess(){const t={};for(const e in this.op)t[e]=this.op[e];return t}saveDataToFile(t,e){const s=document.createElement("a"),i=new Blob([JSON.stringify(t)],{type:"text/plain"});s.href=URL.createObjectURL(i),s.download=`${e}-${Date.now()}.json`,s.click()}setBgColor(t){t instanceof $||(this._bgColor instanceof $?this._bgColor.set(t):this._bgColor=new $(t))}setClearAlpha(t){this._clearAlpha=t}get artwork(){return this._u.tArtwork.value}set artwork(t){this.ha=!0,this._u.tArtwork.value=t}get scene(){return this._scene}get renderer(){return this._renderer}get camera(){return this._camera}}class Ri{constructor(){this.reset(),this.och=new R}reset(){this.brightness=0,this.contrast=.98,this.saturation=1.3,this.highlights=.33,this.shadows=-.13,this.hue=0,this.sharpenBlur=1,this.sharpenSize=.8,this.normalStr=3,this.lightPosX=.75,this.lightPosY=-.57,this.lightStr=.3,this.mirrorVerticalActivated=!1,this.mirrorHorizontalActivated=!1,this.k1=14,this.k1a=.8,this.k1b=2,this.k2=2,this.k2a=.8,this.k2b=2}setParams(t){if(!t){this.reset();return}for(const e in t)this[e]=t[e]}applyPalette(t){const e=t.postprocessData,s=(i,n)=>i!==void 0?i:n;this.contrast=s(e.contrast,.98),this.saturation=s(e.saturation,1.3),this.highlights=s(e.highlights,.33),this.shadows=s(e.shadows,-.13),this.hue=s(e.hue,0),this.k1=s(e.k1,14),this.k1a=s(e.k1a,0),this.k1b=s(e.k1b,2),this.k2=s(e.k2,3),this.k2a=s(e.k2a,0),this.k2b=s(e.k2b,2),this.sharpenBlur=s(e.sharpenBlur,1),this.sharpenSize=s(e.sharpenSize,.8)}}class x{constructor(t=null,e=null){this._params={},this._dataLayers={},this.canDispatch=!0,this._isDirty=!1,this.och=e||new R}reset(){for(let t in this._params)this[t]=this._params[t].value}setParams(t){for(let e in t){const s=this._params[e];if(s)s.isLocked||(this[e]=s.setMethod?s.setMethod(t[e]):t[e]);else{const i=this._dataLayers[e];i&&i.setParams(t[e])}}}ap(t,e,{serializeMethod:s=null,setMethod:i=null,och:n=null,isUniform:a=!1,type:l=null,isLocked:h=!1}={}){this._params[t]={value:e,defaultValue:e,serializeMethod:s,setMethod:i,isUniform:a,type:l,isLocked:h},Object.defineProperty(this,t,{get:function(){return this._params[t].value},set:function(c){c!==this._params[t].value&&(this._params[t].value=c,this._isDirty=!0,this.och.dispatch(),n&&this.canDispatch&&n(c))}})}resetParam(t){this[t]=this._params[t].defaultValue}adl(t,e){this._dataLayers[t]=e,Object.defineProperty(this,t,{get:function(){return this._dataLayers[t]}})}_dispatch=()=>{this._isDirty=!0,this.och.dispatch()};get dataLayers(){return this._dataLayers}get params(){return this._params}get isDirty(){}}const o={ou:{isUniform:!0},oui:{isUniform:!0,type:"int"},ouc:{isUniform:!0,type:"color"}},F="noise",Tt=F+"B",T=F+"Color",Q="cNoise",kt="color",gt=kt+"Impact",M=kt+"s",ke="borders",Se="noise",Me="colorPerturbMix",De="alphaPerturbMix",w="voro",ae=w+"Color",le="Blend",he="Alpha",ue="Mix",mt=ae+"1",Ee=mt+le,Be=mt+he,ze=mt+ue,xt=ae+"2",Pe=xt+le,Te=xt+he,Le=xt+ue,Ct=ae+"3",Ve=Ct+le,Fe=Ct+he,Re=Ct+ue,ut=kt+"From",ct=kt+"Replace",_t=kt+"Threshold",Ue=ut+"2",Ne=ct+"2",Ie=_t+"2",$e=ut+"3",He=ct+"3",Oe=_t+"3",We=ut+"4",Ge=ct+"4",je=_t+"4",qe=ut+"5",Ke=ct+"5",Xe=_t+"5",St="red",Mt="green",Dt="blue",Et="yellow",Bt="magenta",zt="cyan",Pt="gray",j="Hue",q="Saturation",K="Brightness",X="Threshold",Y="Channel",J=St+Y,Ye=St+j,Ze=St+q,Qe=St+K,Je=St+X,tt=Mt+Y,ts=Mt+j,es=Mt+q,ss=Mt+K,rs=Mt+X,et=Dt+Y,is=Dt+j,ns=Dt+q,os=Dt+K,as=Dt+X,st=Et+Y,ls=Et+j,hs=Et+q,us=Et+K,cs=Et+X,rt=Bt+Y,_s=Bt+j,vs=Bt+q,ds=Bt+K,ps=Bt+X,it=zt+Y,fs=zt+j,gs=zt+q,bs=zt+K,ms=zt+X,nt=Pt+Y,xs=Pt+j,Cs=Pt+q,ws=Pt+K,ys=Pt+X,bt="linesPerturb";class Ui extends x{constructor(){super(),this.adl(ke,new x),this[ke].ap("widthImpact",.03,o.ou),this.adl(Se,new x);const t=this[Se];t.ap("curlUVMult",4.076,o.ou),t.ap("curlUVXMult",1,o.ou),t.ap("curlSeedMult",282.6,o.ou),t.ap("seedModification",0,o.ou),t.ap("useWrapUV",!0,o.ou),t.ap("wrapUVStr",6.087,o.ou),t.ap("wrapUVMix",1,o.ou),t.ap("tierDivider",6,o.ou),this.adl(Tt,new x);const e=this[Tt];e.ap(bt+"UV",5.8699,o.ou),e.ap(bt+"SeedMult",4.348,o.ou),e.ap(bt+"Str",.174,o.ou),e.ap(bt+"Z",1e3,o.ou),e.ap(bt+"Abs",!1,o.ou),e.ap(Me,3986943,o.ouc),e.ap(De,1,o.ou),e.ap("wrappingValues",3,o.oui),this.adl(w,new x);const s=this[w];s.ap(w+"UvMult",2.391,o.ou),s.ap(w+"Str",.1,o.ou),s.ap(w+"StrColor",1,o.ou),s.ap(w+"BorderImpact",4.13,o.ou),s.ap(w+"SeedMult",1,o.ou),s.ap(w+"Mix",1,o.ou),s.ap(w+"Mix2",.565,o.ou),s.ap(mt,5861461,o.ouc),s.ap(Ee,18,o.oui),s.ap(Be,5,o.ou),s.ap(ze,1,o.ou),s.ap(xt,12279832,o.ouc),s.ap(Pe,11,o.oui),s.ap(Te,5,o.ou),s.ap(Le,0,o.ou),s.ap(Ct,12279832,o.ouc),s.ap(Ve,11,o.oui),s.ap(Fe,.522,o.ou),s.ap(Re,.13,o.ou),this.adl("c"+F,new x);const i=this.cnoise;i.ap(Q+"UVMult",3.046,o.ou),i.ap(Q+"UVMultX",1,o.ou),i.ap(Q+"SeedMult",1.8479,o.ou),i.ap(Q+"Str",5.435,o.ou),i.ap(Q+"Mix",.533,o.ou),i.ap(Q+"Abs",!0,o.ou),this.adl(T,new x);const n=this.noiseColor;n.ap(T+"Blend",9,o.oui),n.ap(T+"Alpha",1.087,o.ou),n.ap(T+"Color",8781824,o.ouc),this.adl(gt,new x);const a=this[gt];a.ap("thresholdSoft",.174,o.ou),a.ap("threshold",-.5,o.ou),a.ap("saturationImpact",.12,o.ou),this.adl("flow",new x);const l=this.flow;l.ap(F+"Base",.598,o.ou),l.ap(F+"BaseModification",-.4,o.ou),l.ap(F+"Maths",8,o.oui),l.ap(F+"Maths2",8,o.oui),l.ap(F+"Max",!1,o.ou),l.ap(F+"Max2",!0,o.ou),l.ap("subdiv",0,o.ou),this.adl(M,new x);const h=this[M];h.ap(ut,5820638,o.ouc),h.ap(ct,16777215,o.ouc),h.ap(_t,0,o.ou),h.ap(Ue,5820638,o.ouc),h.ap(Ne,16711935,o.ouc),h.ap(Ie,0,o.ou),h.ap($e,5820638,o.ouc),h.ap(He,16711935,o.ouc),h.ap(Oe,0,o.ou),h.ap(We,5820638,o.ouc),h.ap(Ge,16711935,o.ouc),h.ap(je,0,o.ou),h.ap(qe,5820638,o.ouc),h.ap(Ke,16711935,o.ouc),h.ap(Xe,0,o.ou),this.adl(J,new x);const c=this[J];c.ap(Ye,0,o.ou),c.ap(Ze,0,o.ou),c.ap(Qe,0,o.ou),c.ap(Je,.5,o.ou),this.adl(tt,new x);const _=this[tt];_.ap(ts,0,o.ou),_.ap(es,0,o.ou),_.ap(ss,0,o.ou),_.ap(rs,.5,o.ou),this.adl(et,new x);const v=this[et];v.ap(is,0,o.ou),v.ap(ns,0,o.ou),v.ap(os,0,o.ou),v.ap(as,.5,o.ou),this.adl(st,new x);const f=this[st];f.ap(ls,0,o.ou),f.ap(hs,0,o.ou),f.ap(us,0,o.ou),f.ap(cs,.5,o.ou),this.adl(rt,new x(null,this.och));const A=this[rt];A.ap(_s,0,o.ou),A.ap(vs,0,o.ou),A.ap(ds,0,o.ou),A.ap(ps,.5,o.ou),this.adl(it,new x);const b=this[it];b.ap(fs,0,o.ou),b.ap(gs,0,o.ou),b.ap(bs,0,o.ou),b.ap(ms,.5,o.ou),this.adl(nt,new x);const C=this[nt];C.ap(xs,0,o.ou),C.ap(Cs,0,o.ou),C.ap(ws,0,o.ou),C.ap(ys,.5,o.ou)}applyPalette(t){this._ap(t,"borders","widthImpact"),this._ap(t,Tt,Me),this._ap(t,Tt,De),this._ap(t,T,T+"Blend"),this._ap(t,T,T+"Alpha"),this._ap(t,T,T+"Color"),this._ap(t,gt,"thresholdSoft"),this._ap(t,gt,"threshold"),this._ap(t,gt,"saturationImpact"),this._ap(t,w,mt),this._ap(t,w,Ee),this._ap(t,w,Be),this._ap(t,w,ze),this._ap(t,w,xt),this._ap(t,w,Pe),this._ap(t,w,Te),this._ap(t,w,Le),this._ap(t,w,Ct),this._ap(t,w,Ve),this._ap(t,w,Fe),this._ap(t,w,Re),this._ap(t,w,"voroStr"),this._ap(t,w,"voroStrColor"),this._ap(t,w,"voroBorderImpact"),this._ap(t,M,ut),this._ap(t,M,ct),this._ap(t,M,_t),this._ap(t,M,Ue),this._ap(t,M,Ne),this._ap(t,M,Ie),this._ap(t,M,$e),this._ap(t,M,He),this._ap(t,M,Oe),this._ap(t,M,We),this._ap(t,M,Ge),this._ap(t,M,je),this._ap(t,M,qe),this._ap(t,M,Ke),this._ap(t,M,Xe),this._ap(t,J,Ye),this._ap(t,J,Ze),this._ap(t,J,Qe),this._ap(t,J,Je),this._ap(t,tt,ts),this._ap(t,tt,es),this._ap(t,tt,ss),this._ap(t,tt,rs),this._ap(t,et,is),this._ap(t,et,ns),this._ap(t,et,os),this._ap(t,et,as),this._ap(t,st,ls),this._ap(t,st,hs),this._ap(t,st,us),this._ap(t,st,cs),this._ap(t,rt,_s),this._ap(t,rt,vs),this._ap(t,rt,ds),this._ap(t,rt,ps),this._ap(t,it,fs),this._ap(t,it,gs),this._ap(t,it,bs),this._ap(t,it,ms),this._ap(t,nt,xs),this._ap(t,nt,Cs),this._ap(t,nt,ws),this._ap(t,nt,ys)}_ap(t,e,s){const n=t.deformerData[e];n&&n.hasOwnProperty(s)?this[e][s]=n[s]||0:this[e].resetParam(s)}}const E="divisions",O=E+"Type",As="cols",ks="lines",Ss="margin",Ms="lineWidth",Ds="chance",Es="friction",Bs="maxDivisions",zs="activateChanceFilling",Ps="chanceFilling",Ts="chanceDrawLine",Ls="full",Vs="vertical",Fs="horizontal";class Ni extends x{constructor(){super(),this.ap(As,35),this.ap(ks,60),this.ap(Ss,100),this.ap(Ms,1.9),this.adl(E,new x(null,this.och)),this[E].ap(Ds,.83),this[E].ap(Es,.89),this[E].ap(Bs,14),this[E].ap(zs,!0),this[E].ap(Ps,.01),this[E].ap(Ts,.27),this.adl(O,new x(null,this.och)),this[O].ap(Ls,0),this[O].ap(Vs,.96),this[O].ap(Fs,.03)}applyPalette(t){this._ap(t,"",As),this._ap(t,"",ks),this._ap(t,"",Ss),this._ap(t,"",Ms),this._ap(t,E,Ds),this._ap(t,E,Es),this._ap(t,E,Bs),this._ap(t,E,zs),this._ap(t,E,Ps),this._ap(t,E,Ts),this._ap(t,O,Ls),this._ap(t,O,Vs),this._ap(t,O,Fs)}_apOrigin(t,e){t.gridData.hasOwnProperty(e)&&(this[e]=t.gridData[e])}_ap(t,e,s){if(!t)return;const i=t.gridData;if(!i)return;const n=e!==""?i[e]:i;if(!n)return;const a=e!==""?this[e]:this;n.hasOwnProperty(s)?a[s]=n[s]||0:a.resetParam(s)}}const Lt="lines",vt="color",ot=vt+"s",Vt=vt+"1",Ft=vt+"2",Rt=vt+"3",Ut=vt+"4",Nt="lengthM",It="thicknessM",$t="thicknessA",Ht="rotationType",U=vt+"Adjustement";function N(r,t){return r.hasOwnProperty(t)}class Ii extends x{constructor(t=null){super(t),this.adl(Lt,new x);const e=this[Lt];e.ap("count",1e6),e.ap(It,30),e.ap($t,102.169),e.ap("thicknessP",9),e.ap(Nt,16.3),e.ap("lengthA",0),e.ap("lengthP",35),e.ap(Ht,3),e.ap("rotationNoise",{x:6.765,y:3.442}),e.ap("visibleThreshold",.663),e.ap("dontUsePattern",!1),this.adl(ot,new x);const s=this[ot];s.ap(Vt,16777215),s.ap(Ft,14276548),s.ap(Rt,896749),s.ap(Ut,14727992),s.ap("alpha",{min:.86,max:.92}),s.ap("alphaPower",4),s.ap("applyAlpha",!0),s.ap("hueRand",{min:-.01,max:.02}),s.ap("saturationRand",{min:.415,max:.581}),s.ap("luminosityRand",{min:-.065,max:.129}),this.adl(U,new x);const i=this[U];i.ap(U+"Value",-.478),i.ap(U+"Sat",1),i.ap(U+"Lum",.946),i.ap(U+"Scale",750),i.ap(U+"Value2",.239),i.ap(U+"Scale2",369.565)}applyPalette(t){if(!t.vegeData)return;const e=t.vegeData.colors;e&&(N(e,Vt)&&(this[ot][Vt]=e[Vt]),N(e,Ft)&&(this[ot][Ft]=e[Ft]),N(e,Rt)&&(this[ot][Rt]=e[Rt]),N(e,Ut)&&(this[ot][Ut]=e[Ut]));const s=t.vegeData[Lt],i=this[Lt];s&&(N(s,Nt)&&(i[Nt]=s[Nt]),N(s,It)&&(i[It]=s[It]),N(s,$t)&&(i[$t]=s[$t]),N(s,Ht)&&(i[Ht]=s[Ht]))}}const xr="lines",dt="Color",Z="edges",pt="Alpha",Cr="Contrast",wr=Z+Cr,ce="Blend",$i=ce+"Mode",Kt=Z+pt,Xt=Z+$i,Rs=xr+dt,Us=xr+pt,Yt=Z+dt,Ns=Z+dt+"B",Is=Z+pt+"1",$s=Kt+"1b",Hs=Xt+"3",Os=Z+"Kuwa",Ws=Yt+"2",Gs=Kt+"2",js=Xt+"2",qs=Yt+"3",Ks=wr,Xs=wr+"2",Ys="specialEdgeContrast",Zs="specialEdgeColor",Qs="specialEdgeAlpha",_e="kuwaVoro",Js=_e+dt,tr=_e+pt,er=_e+ce,ve="voroEdges",sr=ve+ce,rr=ve+dt,ir=ve+pt,yr="zonesEdge",Ar=yr+"s",nr=yr+Cr,or=Ar+dt,ar=Ar+pt,lr="grainScale",hr="grainPerturb",Ot="noiseStr",ur="noiseBlendMode",Wt="stainsValue",cr="stainsBlendMode";class Hi extends x{constructor(){super(),this.ap(Rs,15261663,o.ouc),this.ap(Us,1,o.ou),this.adl("kw",new x),this.kw.ap("p1",2,o.oui),this.kw.ap("p1a",0,o.ou),this.kw.ap("p1b",0,o.oui),this.kw.ap("p2",2,o.oui),this.kw.ap("p2a",0,o.ou),this.kw.ap("p2b",0,o.oui),this.kw.ap("ls1",13,o.oui),this.kw.ap("ls2",6,o.oui),this.kw.ap("ze",3,o.oui),this.kw.ap("ek1",1,o.oui),this.kw.ap("ek2",3,o.oui),this.kw.ap("ek3",1,o.oui),this.kw.ap("se1",14,o.oui),this.kw.ap("se2",3,o.oui),this.ap(Yt,13230047,o.ouc),this.ap(Ns,13230047,o.ouc),this.ap(Is,1,o.ou),this.ap($s,.3,o.ou),this.ap(Hs,3,o.oui),this.ap(Os,10,o.oui),this.ap(Ws,16777215,o.ouc),this.ap(Gs,1,o.ou),this.ap(js,11,o.oui),this.ap(Ks,5.869,o.ou),this.ap(Xs,5.87,o.ou),this.ap(qs,16777215,o.ouc),this.ap(Kt,0,o.ou),this.ap(Xt,3,o.oui),this.ap(Ys,.511),this.ap(Zs,4088468,o.ouc),this.ap(Qs,1,o.ou),this.ap(Js,4088468,o.ouc),this.ap(tr,1,o.ou),this.ap(er,5,o.oui),this.ap(sr,2,o.oui),this.ap(rr,997703,o.ouc),this.ap(ir,0,o.ou),this.ap(nr,38.043),this.ap(or,16777215,o.ouc),this.ap(ar,.457,o.ou),this.ap(lr,10,o.ou),this.ap(hr,98,o.ou),this.ap(Ot,.12,o.ou),this.ap(ur,18,o.oui),this.ap(Wt,.1,o.ou),this.ap(cr,15,o.oui)}applyPalette(t){this.app(t,Rs),this.app(t,Us),this.app(t,Yt),this.app(t,Ns),this.app(t,Is),this.app(t,$s),this.app(t,Hs),this.app(t,Os),this.app(t,Ws),this.app(t,Gs),this.app(t,js),this.app(t,Ks),this.app(t,Xs),this.app(t,qs),this.app(t,Kt),this.app(t,Xt),this.app(t,Ys),this.app(t,Zs),this.app(t,Qs),this.app(t,Js),this.app(t,tr),this.app(t,er),this.app(t,sr),this.app(t,rr),this.app(t,ir),this.app(t,nr),this.app(t,or),this.app(t,ar),this.app(t,lr),this.app(t,hr),this.app(t,Ot),this.app(t,ur),this.app(t,Wt),this.app(t,cr),this[Ot]=Math.min(this[Ot],.2),this[Wt]=Math.min(this[Wt],.15),this._app(t,"kw","p1"),this._app(t,"kw","p1a"),this._app(t,"kw","p1b"),this._app(t,"kw","p2"),this._app(t,"kw","p2a"),this._app(t,"kw","p2b"),this._app(t,"kw","ls1"),this._app(t,"kw","ls2"),this._app(t,"kw","ze"),this._app(t,"kw","ek1"),this._app(t,"kw","ek2"),this._app(t,"kw","ek3"),this._app(t,"kw","se1"),this._app(t,"kw","se2")}app(t,e){t.composerData.hasOwnProperty(e)?this[e]=t.composerData[e]:this.resetParam(e)}_app(t,e,s){const n=t.composerData[e];n&&n.hasOwnProperty(s)?this[e][s]=n[s]||0:this[e].resetParam(s)}}const Oi={sat:1.1,sh:-.37,k1:6,k1a:1,k1b:11,k2:2,k2a:.239,k2b:2,shS:.6,shB:.8},Wi={div:{fric:.37,maxDiv:1,chFill:.45},lw:18.7},Gi={bord:{wImp:.046},nsB:{cPMix:3972567,aPMix:.734},vro:{vroS:2.391,vroBI:1.304,vroC1:2698554,vroC1B:25,vroC1A:.924,vroC1M:.239,vroC2:3227177,vroC2B:3,vroC2A:1.485,vroC2M:.031,vroC3A:2.826,vSC:2.609,vroC3:12017693},nC:{nCA:1.296,nCC:3292210},yCh:{ySat:.05}},ji={clrs:{clr1:16776183,clr2:2521814,clr3:5062693,clr4:15523285},lns:{lenM:100,rotT:1,thkA:102.17}},qi={kw:{p1:10,p1a:.373,p1b:3,p2:2,p2a:0,p2b:0,ls1:17,ls2:4,ze:6,ek1:3,ek2:15,ek3:2,se1:18,se2:3},lnClr:16777215,lnA:.815,eClr:16346678,eClrB:16777215,eClr2:11355686,eCon:2.174,eCon2:1,eClr3:551072,eA:.489,eBM:23,spECon:1,spEClr:2893605,spEA:.71,kuwVC:15195860,kuwVB:18,znECon:50,znEClr:16728607,znEA:.424,eA1b:.4,eBM3:18,eA1:.946,eA2:1.793,kuwVA:.696,gScl:8.079,gPert:761.528,nStr:.2,nBM:3,stVal:.25},Ki=15262418,Xi={ppD:Oi,gD:Wi,defD:Gi,vD:ji,compD:qi,bgCol:Ki},Yi={sat:1.1,k1:14,k1a:.261,k1b:3,k2:2,k2a:.261,k2b:18,shS:.6},Zi={div:{maxDiv:13,chFill:.08}},Qi={bord:{wImp:.046},ns:{tDiv:8},nsB:{cPMix:7772590,aPMix:.804,wVal:4},vro:{vroS:1.63,vroC1:9138272,vroC1A:2.772,vroC1M:.478,vroC2:2699611,vroC2B:5,vroC2A:2.065,vroC2M:.031},nC:{nCA:2.065,nCC:3296306},cns:{cNUVM:4.046}},Ji={clrs:{clr1:15780291,clr2:15328997,clr3:10521734,clr4:15787495},lns:{thkA:102.17}},tn={kw:{p1:9,p1a:0,p1b:17,p2:2,p2a:.286,p2b:3,ls1:17,ls2:6,ze:2,ek1:1,ek2:3,ek3:1,se1:14,se2:3},lnClr:16777215,lnA:.38,eClr:11522530,eClr2:2055918,eCon:3.261,eClr3:555936,eA:.522,eBM:23,spECon:5.326,spEClr:85807,kuwVC:12901285,kuwVB:18,gPert:609.687,nStr:.177},en={ppD:Yi,gD:Zi,defD:Qi,vD:Ji,compD:tn},sn={sat:1.1,sh:-.37,k1:11,k1a:.098,k1b:3,k2:2,k2a:.337,k2b:2,shS:.6,shB:.78},rn={div:{fric:.37,maxDiv:1,chFill:.87}},nn={bord:{wImp:.046},nsB:{cPMix:3972567,aPMix:.883},vro:{vroS:2.391,vroBI:0,vroC1:5318432,vroC1B:25,vroC1A:.543,vroC1M:.239,vroC2:9874305,vroC2B:5,vroC2A:3.387,vroC2M:.031,vroC3A:1.576},nC:{nCA:1.739,nCC:3292210},rCh:{rHue:.978},gCh:{gSat:.89},bCh:{bSat:.072,bBri:.138},yCh:{ySat:-.1},mCh:{mSat:1}},on={clrs:{clr1:16776183,clr2:14079445,clr3:10524806,clr4:16775416}},an={kw:{p1:2,p1a:.341,p1b:17,p2:2,p2a:.362,p2b:3,ls1:13,ls2:6,ze:2,ek1:1,ek2:3,ek3:1,se1:14,se2:3},lnClr:16777215,lnA:.467,eClr:13618884,eClrB:16777215,eClr2:4859509,eCon:4.13,eCon2:1,eClr3:551072,eA:.391,eBM:23,spECon:.435,spEClr:4277321,spEA:.967,kuwVC:12436648,kuwVB:18,znECon:10,znEClr:1737186,znEA:.685,kuwVA:0,gScl:1.2,gPert:671.306,nStr:.15,stVal:.14},ln=15460833,hn={ppD:sn,gD:rn,defD:nn,vD:on,compD:an,bgCol:ln},un={sh:-.22,k1:3,k1a:.587,k1b:3,k2:5,k2a:1,k2b:2,shS:.7,shB:1},cn={lw:10.4},_n={ns:{tDiv:10},nsB:{cPMix:4684601,aPMix:.85,wVal:4},vro:{vroC1:4426550,vroC2:84111,vroC2B:18,vroC2A:1.957,vroC2M:.337,vroC3A:3.442,vroC3:5804241,vroC3B:2,vroC3M:.239},nC:{nCA:1.1,nCC:3741515,nCB:17},cns:{cNUVM:4.046},clrs:{cR:9389895},yCh:{ySat:-.623}},vn={clrs:{clr2:1907724,clr3:16166184,clr4:16374567},lns:{thkM:154.35,thkA:102.17}},dn={kw:{p1:2,p1a:0,p1b:0,p2:2,p2a:0,p2b:0,ls1:10,ls2:3,ze:13,ek1:2,ek2:2,ek3:3,se1:5,se2:2},lnClr:14866849,lnA:.424,eClr:6653913,eClrB:15852732,eClr2:16217630,eCon:16.522,eCon2:1.376,eClr3:13096703,eA:.848,spECon:.514,spEClr:16503718,spEA:.732,kuwVC:14779662,kuwVB:9,znECon:50,znEClr:8160680,znEA:1,eA1b:1.543,eBM3:18,eA1:.554,eA2:2.511,eKuwa:3,eBM2:23,gScl:1.087,gPert:549.887,nStr:.264,stVal:.167},pn=16118247,fn={ppD:un,gD:cn,defD:_n,vD:vn,compD:dn,bgCol:pn},gn={hue:-6.28,k1:2,k1a:.685,k1b:2,k2:2,k2a:.12,k2b:3,shS:.6,shB:.88},bn={div:{fric:.37,maxDiv:1,chFill:.87}},mn={bord:{wImp:.046},nsB:{cPMix:16002092},vro:{vroS:2.174,vroBI:0,vroC1:5271883,vroC1M:.576,vroC2A:.6,vroC2M:.196,vroC3A:0,vSC:2.174,vroC3:0,vroC3B:0,vroC3M:0},nC:{nCA:2.935,nCC:4741192,nCB:2}},xn={clrs:{clr2:66560,clr3:15577919,clr4:13253178},lns:{thkA:102.17}},Cn={kw:{p1:8,p1a:.191,p1b:3,p2:2,p2a:.667,p2b:17,ls1:16,ls2:13,ze:4,ek1:3,ek2:5,ek3:2,se1:14,se2:4},lnClr:16769792,lnA:.207,eClr:14084061,eClrB:7679791,eClr2:5131854,eCon:3.261,eCon2:1.81,spECon:1,spEClr:16777215,spEA:0,kuwVC:14603892,kuwVB:2,znECon:10,znEClr:9765378,znEA:1,eA1b:1.674,eBM3:18,eA1:1.413,gScl:2,gPert:962.161,nStr:.221,stVal:.125},wn=15262417,yn={ppD:gn,gD:bn,defD:mn,vD:xn,compD:Cn,bgCol:wn},An={sat:1.1,k1:14,k1a:.087,k1b:18,k2:1,k2a:.239,k2b:3,shS:.7},kn={div:{maxDiv:13,chFill:.08}},Sn={bord:{wImp:.046},ns:{tDiv:4},nsB:{cPMix:4044244,aPMix:1.087},vro:{vroS:1.63,vroBI:0,vroC1:15370813,vroC1A:3.5,vroC1M:.478,vroC2:14341073,vroC2B:4,vroC2A:2.8,vroC2M:.076,vroC3A:.8,vSC:1.1,vroC3:11623703,vroC3B:1,vroC3M:.315},nC:{nCA:1.848,nCC:2642507},cImp:{satImp:.087},rCh:{rHue:.03}},Mn={clrs:{clr1:14504194,clr2:16777215,clr3:16777215,clr4:14444037},lns:{thkA:102.17}},Dn={kw:{p1:2,p1a:0,p1b:0,p2:2,p2a:.221,p2b:3,ls1:14,ls2:13,ze:3,ek1:1,ek2:3,ek3:1,se1:3,se2:3},lnClr:16777215,lnA:.38,eClr:14276049,eClrB:16777215,eClr2:15502110,eCon:3.261,eCon2:1,eClr3:9068609,eBM:23,spECon:1,spEClr:14670034,spEA:.391,kuwVC:12901285,kuwVB:18,znECon:10,znEClr:13586451,znEA:.859,eA1:1.402,gPert:807.522,nStr:.243,stVal:.275},En=14010813,Bn={ppD:An,gD:kn,defD:Sn,vD:Mn,compD:Dn,bgCol:En},zn={k1:7,k1a:.283,k1b:3,k2:2,k2a:0,k2b:2,shS:.6,shB:.8},Pn={ns:{tDiv:4},nsB:{wVal:3},vro:{vroS:3.918,vroBI:0,vSC:.8}},Tn={lns:{rotT:2}},Ln={kw:{p1:2,p1a:0,p1b:0,p2:2,p2a:0,p2b:0,ls1:17,ls2:2,ze:2,ek1:3,ek2:3,ek3:2,se1:7,se2:4},eClr:12901596,eClr2:14079956,eA:.775,spECon:.819,spEA:.634,eA1b:.206,eA2:.565,kuwVA:.971,gPert:980.74,nStr:.15,stVal:.18},Vn={ppD:zn,defD:Pn,vD:Tn,compD:Ln},Fn=1,Rn={k1:14,k1a:0,k1b:2,k2:3,k2a:0,k2b:2,shS:.6,shB:.761},Un={nsB:{cPMix:4684601,aPMix:.5},vro:{vroC1:2797077,vroC2:13606997,vroC2B:9,vroC2A:1.087,vroC2M:.228,vroC3A:1.196,vSC:.6,vroC3:7936986},nC:{nCA:1.1,nCC:5771646,nCB:17},clrs:{cF:9100888,cT:.0978,cF2:13552301,cR2:16777215,cT2:.125,cF3:5709679,cR3:16745984,cT3:.2772,cF4:13543046,cR4:16748288,cT4:.1413},gCh:{gSat:.543},yCh:{ySat:-.739}},Nn={clrs:{clr3:16166184,clr4:16374567},lns:{thkM:100,thkA:102.17}},In={kw:{p1:3,p1a:.188,p1b:3,p2:2,p2a:0,p2b:0,ls1:13,ls2:13,ze:3,ek1:1,ek2:3,ek3:4,se1:14,se2:3},lnClr:15917436,lnA:.761,eClr:6522588,eClrB:15851487,eClr2:6846363,eCon:6.522,eCon2:1.957,eClr3:13096703,eA:.75,spECon:1,spEClr:16291126,spEA:.761,kuwVC:11427334,kuwVB:9,znECon:50,znEClr:5202504,znEA:1,eA1b:3,eBM3:18,eA1:1.043,eA2:2.283,kuwVA:.848,eKuwa:12,eBM2:18,gScl:1.992,gPert:738.49,nStr:.177,stVal:.145},$n=16118247,Hn={f:Fn,ppD:Rn,defD:Un,vD:Nn,compD:In,bgCol:$n},On={hue:-.05,sh:-.52,k1:14,k1a:0,k1b:2,k2:2,k2a:.185,k2b:3,shS:.7,shB:1},Wn={nsB:{cPMix:3644188,aPMix:.964},vro:{vroC1:8289339,vroC2:12497828,vroC2B:18,vroC2A:2.065,vroC2M:.228,vroC3A:5,vroC3:11041498,vroC3M:.163},nC:{nCA:1,nCC:5771646,nCB:17},rCh:{rHue:.446,rSat:.891},gCh:{gSat:.391,gBri:-.217},yCh:{ySat:-.522,yBri:-.043},mCh:{mHue:.076,mSat:-.065}},Gn={clrs:{clr2:13403396,clr3:16166184,clr4:16374567},lns:{thkM:100,thkA:102.17}},jn={kw:{p1:3,p1a:.25,p1b:3,p2:13,p2a:.221,p2b:10,ls1:11,ls2:12,ze:3,ek1:1,ek2:3,ek3:1,se1:14,se2:3},lnClr:15917436,eClr:9282524,eClrB:11841948,eClr2:13258799,eCon:3.984,eCon2:1.593,eClr3:13096703
:this.gl.texImage2D(this.target,this.level,this.internalFormat,this.format,this.type,this.image),this.onUpdate&&this.onUpdate()):this.width?this.gl.texImage2D(this.target,this.level,this.internalFormat,this.width,this.height,0,this.format,this.type,null):this.gl.texImage2D(this.target,0,this.gl.RGBA,1,1,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,ri),this.store.image=this.image)}}class se{constructor(t,{width:e=t.canvas.width,height:s=t.canvas.height,target:i=t.FRAMEBUFFER,color:n=1,depth:a=!0,stencil:l=!1,depthTexture:h=!1,wrapS:c=t.CLAMP_TO_EDGE,wrapT:_=t.CLAMP_TO_EDGE,minFilter:v=t.LINEAR,magFilter:f=v,type:A=t.UNSIGNED_BYTE,format:b=t.RGBA,internalFormat:C=b,unpackAlignment:g,premultiplyAlpha:p}={}){this.gl=t,this.width=e,this.height=s,this.depth=a,this.buffer=this.gl.createFramebuffer(),this.target=i,this.gl.renderer.bindFramebuffer(this),this.textures=[];const m=[];for(let P=0;P<n;P++)this.textures.push(new Qt(t,{width:e,height:s,wrapS:c,wrapT:_,minFilter:v,magFilter:f,type:A,format:b,internalFormat:C,unpackAlignment:g,premultiplyAlpha:p,flipY:!1,generateMipmaps:!1})),this.textures[P].update(),this.gl.framebufferTexture2D(this.target,this.gl.COLOR_ATTACHMENT0+P,this.gl.TEXTURE_2D,this.textures[P].texture,0),m.push(this.gl.COLOR_ATTACHMENT0+P);m.length>1&&this.gl.renderer.drawBuffers(m),this.texture=this.textures[0],this.gl.renderer.bindFramebuffer({target:this.target})}setSize(t,e){if(!(this.width===t&&this.height===e)){this.width=t,this.height=e,this.gl.renderer.bindFramebuffer(this);for(let s=0;s<this.textures.length;s++)this.textures[s].width=t,this.textures[s].height=e,this.textures[s].needsUpdate=!0,this.textures[s].update(),this.gl.framebufferTexture2D(this.target,this.gl.COLOR_ATTACHMENT0+s,this.gl.TEXTURE_2D,this.textures[s].texture,0);this.gl.renderer.bindFramebuffer({target:this.target})}}}const Ce={black:"#000000",white:"#ffffff"};function we(r){r.length===4&&(r=r[0]+r[1]+r[1]+r[2]+r[2]+r[3]+r[3]);const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);return[parseInt(t[1],16)/255,parseInt(t[2],16)/255,parseInt(t[3],16)/255]}function ni(r){return r=parseInt(r),[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}function ye(r){return r===void 0?[0,0,0]:arguments.length===3?arguments:isNaN(r)?r[0]==="#"?we(r):Ce[r.toLowerCase()]?we(Ce[r.toLowerCase()]):[0,0,0]:ni(r)}class $ extends Array{constructor(t){return Array.isArray(t)?super(...t):super(...ye(...arguments))}get r(){return this[0]}get g(){return this[1]}get b(){return this[2]}set r(t){this[0]=t}set g(t){this[1]=t}set b(t){this[2]=t}set(t){return Array.isArray(t)?this.copy(t):this.copy(ye(...arguments))}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this}}function oi(r,t){return r[0]=t[0],r[1]=t[1],r}function ai(r,t,e){return r[0]=t,r[1]=e,r}class L extends Array{constructor(t=0,e=t){return super(t,e),this}get x(){return this[0]}get y(){return this[1]}set x(t){this[0]=t}set y(t){this[1]=t}set(t,e=t){return t.length?this.copy(t):(ai(this,t,e),this)}copy(t){return oi(this,t),this}}class At extends ne{constructor(t,{width:e=1,height:s=1,widthSegments:i=1,heightSegments:n=1,attributes:a={}}={}){const l=i,h=n,c=(l+1)*(h+1),_=l*h*6,v=new Float32Array(c*3),f=new Float32Array(c*3),A=new Float32Array(c*2),b=_>65536?new Uint32Array(_):new Uint16Array(_);At.buildPlane(v,f,A,b,e,s,0,l,h),Object.assign(a,{position:{size:3,data:v},normal:{size:3,data:f},uv:{size:2,data:A},index:{data:b}}),super(t,a)}static buildPlane(t,e,s,i,n,a,l,h,c,_=0,v=1,f=2,A=1,b=-1,C=0,g=0){const p=C,m=n/h,P=a/c;for(let k=0;k<=c;k++){let te=k*P-a/2;for(let B=0;B<=h;B++,C++){let Pr=B*m-n/2;if(t[C*3+_]=Pr*A,t[C*3+v]=te*b,t[C*3+f]=l/2,e[C*3+_]=0,e[C*3+v]=0,e[C*3+f]=l>=0?1:-1,s[C*2]=B/h,s[C*2+1]=1-k/c,k===c||B===h)continue;let Tr=p+B+k*(h+1),fe=p+B+(k+1)*(h+1),Lr=p+B+(k+1)*(h+1)+1,ge=p+B+k*(h+1)+1;i[g*6]=Tr,i[g*6+1]=fe,i[g*6+2]=ge,i[g*6+3]=fe,i[g*6+4]=Lr,i[g*6+5]=ge,g++}}}}class li extends ne{constructor(t,{attributes:e={}}={}){Object.assign(e,{position:{size:2,data:new Float32Array([-1,-1,3,-1,-1,3])},uv:{size:2,data:new Float32Array([0,0,2,0,0,2])}}),super(t,e)}}class hi{constructor(t,{width:e,height:s,dpr:i,wrapS:n=t.CLAMP_TO_EDGE,wrapT:a=t.CLAMP_TO_EDGE,minFilter:l=t.LINEAR,magFilter:h=t.LINEAR,geometry:c=new li(t),targetOnly:_=null}={}){this.gl=t,this.options={wrapS:n,wrapT:a,minFilter:l,magFilter:h},this.passes=[],this.geometry=c,this.uniform={value:null},this.targetOnly=_;const v=this.fbo={read:null,write:null,swap:()=>{let f=v.read;v.read=v.write,v.write=f}};this.resize({width:e,height:s,dpr:i})}addPass({vertex:t="",fragment:e="",UNF:s={},textureUniform:i="tMap",enabled:n=!0}={}){s[i]={value:this.fbo.read.texture};const a=new wt(this.gl,{vertex:t,fragment:e,UNF:s}),h={mesh:new yt(this.gl,{geometry:this.geometry,_pr:a}),_pr:a,UNF:s,enabled:n,textureUniform:i};return this.passes.push(h),h}resize({width:t,height:e,dpr:s}={}){s&&(this.dpr=s),t&&(this.width=t,this.height=e||t),s=this.dpr||this.gl.renderer.dpr,t=Math.floor((this.width||this.gl.renderer.width)*s),e=Math.floor((this.height||this.gl.renderer.height)*s),this.options.width=t,this.options.height=e,this.fbo.read=new se(this.gl,this.options),this.fbo.write=new se(this.gl,this.options)}render({scene:t,camera:e,texture:s,target:i=null,update:n=!0,sort:a=!0,frustumCull:l=!0,beforePostCallbacks:h}){const c=this.passes.filter(_=>_.enabled);s||(this.gl.renderer.render({scene:t,camera:e,target:c.length||!i&&this.targetOnly?this.fbo.write:i,update:n,sort:a,frustumCull:l}),this.fbo.swap(),h&&h.forEach(_=>_&&_())),c.forEach((_,v)=>{_.mesh._pr.UNF[_.textureUniform].value=!v&&s?s:this.fbo.read.texture,this.gl.renderer.render({scene:_.mesh,target:v===c.length-1&&(i||!this.targetOnly)?i:this.fbo.write,clear:!0}),this.fbo.swap()}),this.uniform.value=this.fbo.read.texture}}var ui="_m4 bmx(_f b){return _m4(1,0,0,0,0,1,0,0,0,0,1,0,b,b,b,1);}_v3 brn(_v3 c,_f v){return c+v;}",ci="_m4 ctmx(_f contrast){_f t=(1.0-contrast)/2.0;return _m4(contrast,0,0,0,0,contrast,0,0,0,0,contrast,0,t,t,t,1);}_v3 contrast(_v3 color,_f value){return 0.5+value*(color-0.5);}",_i="_v3 hueshift(_v3 color,_f hue){const _v3 k=_v3(0.57735,0.57735,0.57735);_f cosAngle=cos(hue);return _v3(color*cosAngle+cross(k,color)*sin(hue)+k*dot(k,color)*(1.0-cosAngle));}_v3 hueshift2(_v3 color,_f shift){_v3 P=_v3(0.55735)*dot(_v3(0.55735),color);_v3 U=color-P;_v3 V=cross(_v3(0.55735),U);color=U*cos(shift*6.2832)+V*sin(shift*6.2832)+P;return color;}",vi="_v3 saturation(_v3 rgb,_f adjustment){const _v3 W=_v3(0.2125,0.7154,0.0721);_v3 intensity=_v3(dot(rgb,W));return mix(intensity,rgb,adjustment);}_v3 saturation2(_v3 rgb,_f adjustment){const _v3 W=_v3(0.2125,0.7154,0.0721);_v3 intensity=_v3(dot(rgb,W));return mix(rgb,intensity,adjustment);}",di="_f blOv(_f b,_f bl){return b<0.5 ?(2.0*b*bl):(1.0-2.0*(1.0-b)*(1.0-bl));}_v3 blOv(_v3 b,_v3 bl){return _v3(blOv(b.r,bl.r),blOv(b.g,bl.g),blOv(b.b,bl.b));}_v3 blOv(_v3 b,_v3 bl,_f o){return(blOv(b,bl)*o+b*(1.0-o));}_f blCB(_f b,_f bl){return(bl==0.0)? bl : max((1.0-((1.0-b)/bl)),0.0);}_v3 blCB(_v3 b,_v3 bl){return _v3(blCB(b.r,bl.r),blCB(b.g,bl.g),blCB(b.b,bl.b));}_v3 blCB(_v3 b,_v3 bl,_f o){return(blCB(b,bl)*o+b*(1.0-o));}_f blCD(_f b,_f bl){return(bl==1.0)? bl : min(b/(1.0-bl),1.0);}_v3 blCD(_v3 b,_v3 bl){return _v3(blCD(b.r,bl.r),blCD(b.g,bl.g),blCD(b.b,bl.b));}_v3 blCD(_v3 b,_v3 bl,_f o){return(blCD(b,bl)*o+b*(1.0-o));}_f blVL(_f b,_f bl){return(bl<0.5)? blCB(b,(2.0*bl)): blCD(b,(2.0*(bl-0.5)));}_v3 blVL(_v3 b,_v3 bl){return _v3(blVL(b.r,bl.r),blVL(b.g,bl.g),blVL(b.b,bl.b));}_v3 blVL(_v3 b,_v3 bl,_f o){return(blVL(b,bl)*o+b*(1.0-o));}_f blAdd(_f b,_f bl){return min(b+bl,1.0);}_v3 blAdd(_v3 b,_v3 bl){return min(b+bl,_v3(1.0));}_v3 blAdd(_v3 b,_v3 bl,_f o){return(blAdd(b,bl)*o+b*(1.0-o));}_v3 blav(_v3 b,_v3 bl){return(b+bl)/2.0;}_v3 blav(_v3 b,_v3 bl,_f o){return(blav(b,bl)*o+b*(1.0-o));}_f blD(_f b,_f bl){return min(bl,b);}_v3 blD(_v3 b,_v3 bl){return _v3(blD(b.r,bl.r),blD(b.g,bl.g),blD(b.b,bl.b));}_v3 blD(_v3 b,_v3 bl,_f o){return(blD(b,bl)*o+b*(1.0-o));}_v3 blHL(_v3 b,_v3 bl){return blOv(bl,b);}_v3 blHL(_v3 b,_v3 bl,_f o){return(blHL(b,bl)*o+b*(1.0-o));}_f blHM(_f b,_f bl){return(blVL(b,bl)<0.5)? 0.0 : 1.0;}_v3 blHM(_v3 b,_v3 bl){return _v3(blHM(b.r,bl.r),blHM(b.g,bl.g),blHM(b.b,bl.b));}_v3 blHM(_v3 b,_v3 bl,_f o){return(blHM(b,bl)*o+b*(1.0-o));}_f blLi(_f b,_f bl){return max(bl,b);}_v3 blLi(_v3 b,_v3 bl){return _v3(blLi(b.r,bl.r),blLi(b.g,bl.g),blLi(b.b,bl.b));}_v3 blLi(_v3 b,_v3 bl,_f o){return(blLi(b,bl)*o+b*(1.0-o));}_f blLB(_f b,_f bl){return max(b+bl-1.0,0.0);}_v3 blLB(_v3 b,_v3 bl){return max(b+bl-_v3(1.0),_v3(0.0));}_v3 blLB(_v3 b,_v3 bl,_f o){return(blLB(b,bl)*o+b*(1.0-o));}_f blLD(_f b,_f bl){return min(b+bl,1.0);}_v3 blLD(_v3 b,_v3 bl){return min(b+bl,_v3(1.0));}_v3 blLD(_v3 b,_v3 bl,_f o){return(blLD(b,bl)*o+b*(1.0-o));}_f blll(_f b,_f bl){return bl<0.5 ? blLB(b,(2.0*bl)): blLD(b,(2.0*(bl-0.5)));}_v3 blll(_v3 b,_v3 bl){return _v3(blll(b.r,bl.r),blll(b.g,bl.g),blll(b.b,bl.b));}_v3 blll(_v3 b,_v3 bl,_f o){return(blll(b,bl)*o+b*(1.0-o));}_v3 blM(_v3 b,_v3 bl){return b*bl;}_v3 blM(_v3 b,_v3 bl,_f o){return(blM(b,bl)*o+b*(1.0-o));}_v3 blN(_v3 b,_v3 bl){return bl;}_v3 blN(_v3 b,_v3 bl,_f o){return(blN(b,bl)*o+b*(1.0-o));}_f blPL(_f b,_f bl){return(bl<0.5)? blD(b,(2.0*bl)): blLi(b,(2.0*(bl-0.5)));}_v3 blPL(_v3 b,_v3 bl){return _v3(blPL(b.r,bl.r),blPL(b.g,bl.g),blPL(b.b,bl.b));}_v3 blPL(_v3 b,_v3 bl,_f o){return(blPL(b,bl)*o+b*(1.0-o));}_f blSc(_f b,_f bl){return 1.0-((1.0-b)*(1.0-bl));}_v3 blSc(_v3 b,_v3 bl){return _v3(blSc(b.r,bl.r),blSc(b.g,bl.g),blSc(b.b,bl.b));}_v3 blSc(_v3 b,_v3 bl,_f o){return(blSc(b,bl)*o+b*(1.0-o));}_f blSL(_f b,_f bl){return(bl<0.5)?(2.0*b*bl+b*b*(1.0-2.0*bl)):(sqrt(b)*(2.0*bl-1.0)+2.0*b*(1.0-bl));}_v3 blSL(_v3 b,_v3 bl){return _v3(blSL(b.r,bl.r),blSL(b.g,bl.g),blSL(b.b,bl.b));}_v3 blSL(_v3 b,_v3 bl,_f o){return(blSL(b,bl)*o+b*(1.0-o));}_v3 blmd(_i mode,_v3 b,_v3 bl,_f o){if(mode==1){return blAdd(b,bl,o);}else if(mode==2){return blav(b,bl,o);}else if(mode==3){return blCB(b,bl,o);}else if(mode==4){return blCD(b,bl,o);}else if(mode==5){return blD(b,bl,o);}else if(mode==9){return blHL(b,bl,o);}else if(mode==10){return blHM(b,bl,o);}else if(mode==11){return blLi(b,bl,o);}else if(mode==12){return blLB(b,bl,o);}else if(mode==13){return blLD(b,bl,o);}else if(mode==14){return blll(b,bl,o);}else if(mode==15){return blM(b,bl,o);}else if(mode==17){return blN(b,bl,o);}else if(mode==18){return blOv(b,bl,o);}else if(mode==20){return blPL(b,bl,o);}else if(mode==22){return blSc(b,bl,o);}else if(mode==23){return blSL(b,bl,o);}else if(mode==25){return blVL(b,bl,o);}}",pi="_v4 sharpen(in _s2 tex,in _v2 coords,in _v2 renderSize){_f dx=1.0/renderSize.x;_f dy=1.0/renderSize.y;_v4 sum=_v4(0.0);sum+=-1.*_t(tex,coords+_v2(-1.0*dx,0.0*dy));sum+=-1.*_t(tex,coords+_v2(0.0*dx,-1.0*dy));sum+=5.*_t(tex,coords+_v2(0.0*dx,0.0*dy));sum+=-1.*_t(tex,coords+_v2(0.0*dx,1.0*dy));sum+=-1.*_t(tex,coords+_v2(1.0*dx,0.0*dy));return sum;}",fi="_v4 changeHSVForChannel(_v3 origin,_v3 channel,_v3 hsv,_f threshold){_v4 color=_v4(origin,0.);_v3 c1=rgb2hsv(origin);_v3 c2=rgb2hsv(channel);if(distance(c1,c2)<=threshold){color.rgb=hueshift2(color.rgb,hsv.x);color.rgb=saturation(color.rgb,hsv.y);color.rgb=brn(color.rgb,hsv.z);color.a=1.;}return color;}",gi="_f eth(in _f thr1,in _f thr2,in _f val){if(val<thr1){return 0.0;}if(val>thr2){return 1.0;}return val;}_f edi(in _v4 p1,in _v4 p2){return(abs(p1.r-p2.r)+abs(p1.g-p2.g)+abs(p1.b-p2.b))/3.0;}_f edge(in _s2 tex,in _v2 co,in _v2 rs){_f dx=1.0/rs.x;_f dy=1.0/rs.y;_v4 p[9];p[0]=_ee_-1.0*dx,-1.0*dy));p[1]=_ee_-1.0*dx,0.0*dy));p[2]=_ee_-1.0*dx,1.0*dy));p[3]=_ee_0.0*dx,-1.0*dy));p[4]=_ee_0.0*dx,0.0*dy));p[5]=_ee_0.0*dx,1.0*dy));p[6]=_ee_1.0*dx,-1.0*dy));p[7]=_ee_1.0*dx,0.0*dy));p[8]=_ee_1.0*dx,1.0*dy));_f delta=(edi(p[1],p[7])+edi(p[5],p[3])+edi(p[0],p[8])+edi(p[2],p[6]))/4.;return eth(0.25,.4,clamp(3.0*delta,0.0,1.0));}",bi="_v4 khwr(_s2 src,_v2 uv,_i rad,_v2 res){_f n=_f((rad+1)*(rad+1));_v3 m[4];_v3 s[4];for(_i k=0;k<4;++k){m[k]=_v3(0.);s[k]=_v3(0.);}for(_i j=-rad;j<=0;++j){for(_i i=-rad;i<=0;++i){_v3 c=_t(src,uv+_v2(i,j)/res).rgb;m[0]+=c;s[0]+=c*c;}}for(_i j=-rad;j<=0;++j){for(_i i=0;i<=rad;++i){_v3 c=_t(src,uv+_v2(i,j)/res).rgb;m[1]+=c;s[1]+=c*c;}}for(_i j=0;j<=rad;++j){for(_i i=0;i<=rad;++i){_v3 c=_t(src,uv+_v2(i,j)/res).rgb;m[2]+=c;s[2]+=c*c;}}for(_i j=0;j<=rad;++j){for(_i i=-rad;i<=0;++i){_v3 c=_t(src,uv+_v2(i,j)/res).rgb;m[3]+=c;s[3]+=c*c;}}_v4 color=_v4(0.);_f min=100.;for(_i k=0;k<4;++k){m[k]/=n;s[k]=abs(s[k]/n-m[k]*m[k]);_f nv=s[k].r+s[k].g+s[k].b;if(nv<min){min=nv;color=_v4(m[k],1.0);}}return color;}",mi="_f hue2rgb(_f f1,_f f2,_f hue){if(hue<0.0)hue+=1.0;else if(hue>1.0)hue-=1.0;_f res;if((6.0*hue)<1.0)res=f1+(f2-f1)*6.0*hue;else if((2.0*hue)<1.0)res=f2;else if((3.0*hue)<2.0)res=f1+(f2-f1)*((2.0/3.0)-hue)*6.0;else res=f1;return res;}_v3 hsl2rgb(_v3 hsl){_v3 rgb;if(hsl.y==0.0){rgb=_v3(hsl.z);}else{_f f2;if(hsl.z<0.5)f2=hsl.z*(1.0+hsl.y);else f2=hsl.z+hsl.y-hsl.y*hsl.z;_f f1=2.0*hsl.z-f2;rgb.r=hue2rgb(f1,f2,hsl.x+(1.0/3.0));rgb.g=hue2rgb(f1,f2,hsl.x);rgb.b=hue2rgb(f1,f2,hsl.x-(1.0/3.0));}return rgb;}_v3 hsl2rgb(_f h,_f s,_f l){return hsl2rgb(_v3(h,s,l));}",xi="vec3 rgb2hsl(vec3 c){float cMin=min(min(c.r,c.g),c.b),cMax=max(max(c.r,c.g),c.b),delta=cMax-cMin;vec3 hsl=vec3(0.,0.,(cMax+cMin)/2.);if(delta!=0.0){if(hsl.z<.5){hsl.y=delta/(cMax+cMin);}else{hsl.y=delta/(2.-cMax-cMin);}float deltaR=(((cMax-c.r)/6.)+(delta/2.))/delta,deltaG=(((cMax-c.g)/6.)+(delta/2.))/delta,deltaB=(((cMax-c.b)/6.)+(delta/2.))/delta;if(c.r==cMax){hsl.x=deltaB-deltaG;}else if(c.g==cMax){hsl.x=(1./3.)+deltaR-deltaB;}else{hsl.x=(2./3.)+deltaG-deltaR;}hsl.x=fract(hsl.x);}return hsl;}",Ci="const _v4 C=_v4(0.21,0.36,-0.57,0.02);_f snoise2d(_v2 v){_v2 i=floor(v+dot(v,C.yy));_v2 x0=v-i+dot(i,C.xx);_v2 i1;i1=(x0.x>x0.y)? _v2(1.0,0.0): _v2(0.0,1.0);_v4 x12=x0.xyxy+C.xxzz;x12.xy-=i1;i=mod(i,289.0);_v3 p=permute(permute(i.y+_v3(0.0,i1.y,1.0))+i.x+_v3(0.0,i1.x,1.0));_v3 m=max(0.5-_v3(dot(x0,x0),dot(x12.xy,x12.xy),dot(x12.zw,x12.zw)),0.0);m=m*m;m=m*m;_v3 x=2.0*fract(p*C.www)-1.0;_v3 h=abs(x)-0.5;_v3 ox=floor(x+0.5);_v3 a0=x-ox;m*=1.792-0.853*(a0*a0+h*h);_v3 g;g.x=a0.x*x0.x+h.x*x0.y;g.yz=a0.yz*x12.xz+h.yz*x12.yw;return 130.0*dot(m,g);}",wi=`const float PI=3.14;const float PI2=PI*2.;_f snoise3d(_v3 v){ #i_ snoise3dpart _v4 norm=tisq(_v4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;_v4 m=max(0.6-_v4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m*m;return 42.0*dot(m,_v4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}_v3 snoise_v3(_v3 x){_f s=snoise3d(_v3(x));_f s1=snoise3d(_v3(x.y-9.07,x.z+31.2,x.x+23.12));_f s2=snoise3d(_v3(x.z+74.2,x.x-130.2,x.y+99.4));_v3 c=_v3(s,s1,s2);return c;}_v3 curlNoise(_v3 p){const _f e=.1;_v3 dx=_v3(e,0.0,0.0);_v3 dy=_v3(0.0,e,0.0);_v3 dz=_v3(0.0,0.0,e);_v3 p_x0=snoise_v3(p-dx);_v3 p_x1=snoise_v3(p+dx);_v3 p_y0=snoise_v3(p-dy);_v3 p_y1=snoise_v3(p+dy);_v3 p_z0=snoise_v3(p-dz);_v3 p_z1=snoise_v3(p+dz);_f x=p_y1.z-p_y0.z-p_z1.y+p_z0.y;_f y=p_z1.x-p_z0.x-p_x1.z+p_x0.z;_f z=p_x1.y-p_x0.y-p_y1.x+p_y0.x;const _f divisor=1.0/(2.0*e);return normalize(_v3(x,y,z)*divisor);}_v2 nsin(_v2 val){return sin(val)*.5+.5;}_v3 nsin(_v3 val){return sin(val)*.5+.5;}_v3 hh3(_v2 p,_f s){_v3 q=_v3(dot(p,_v2(127.1,311.7)),dot(p,_v2(269.5+pow(s,1.3),183.3+s)),dot(p,_v2(419.2,371.9+s)));return nsin(q+s);}_f iq(in _v2 x,_f u,_f v,_f s){_v2 p=floor(x);_v2 f=nsin(x*PI2*u);_f k=1.0+(63.0*.01)*pow(1.0-v,4.0);_f va=0.0;_f wt=0.0;for(_i j=-2;j<=2;j++)for(_i i=-2;i<=2;i++){_v2 g=_v2(_f(i),_f(j));_v3 o=hh3(p+g,s)*_v3(u,u,1.0);_v2 r=g-f+o.xy;_f d=dot(r,r);_f ww=pow(1.0-_smst(0.0,1.414,sqrt(d)),k);va+=o.z*ww;wt+=ww;}return va/wt;}_v2 crliq(_v2 p,_f u,_f v,_f s){const _f e=.1;_v2 dx=_v2(e,0.0);_v2 dy=_v2(0.0,e);_v2 dz=_v2(e,0.);_f p_x0=iq(p-dx,u,v,s);_f p_x1=iq(p+dx,u,v,s);_f p_y0=iq(p-dy,u,v,s);_f p_y1=iq(p+dy,u,v,s);_f p_z0=iq(p-dz,u,v,s);_f p_z1=iq(p+dz,u,v,s);_f x=p_y1-p_y0-p_z1+p_z0;_f y=p_z1-p_z0-p_x1+p_x0;_f z=p_x1-p_x0-p_y1+p_y0;const _f divisor=1.0/(2.0*e);return normalize(_v2(x,y)*divisor);}_v2 iqrep(_v3 p){return crliq(p.xy,1.1,.7,p.z);}`,yi="_v2 fade(_v2 t){return t*t*t*(t*(t*6.0-15.0)+10.0);}_f cnoise(_v2 P){_v4 Pi=floor(P.xyxy)+_v4(0.0,0.0,1.0,1.0);_v4 Pf=fract(P.xyxy)-_v4(0.0,0.0,1.0,1.0);Pi=mod(Pi,289.0);_v4 ix=Pi.xzxz;_v4 iy=Pi.yyww;_v4 fx=Pf.xzxz;_v4 fy=Pf.yyww;_v4 i=permute(permute(ix)+iy);_v4 gx=2.0*fract(i*0.024)-1.0;_v4 gy=abs(gx)-0.5;_v4 tx=floor(gx+0.5);gx=gx-tx;_v2 g00=_v2(gx.x,gy.x);_v2 g10=_v2(gx.y,gy.y);_v2 g01=_v2(gx.z,gy.z);_v2 g11=_v2(gx.w,gy.w);_v4 norm=1.793-0.853*_v4(dot(g00,g00),dot(g01,g01),dot(g10,g10),dot(g11,g11));g00*=norm.x;g01*=norm.y;g10*=norm.z;g11*=norm.w;_f n00=dot(g00,_v2(fx.x,fy.x));_f n10=dot(g10,_v2(fx.y,fy.y));_f n01=dot(g01,_v2(fx.z,fy.z));_f n11=dot(g11,_v2(fx.w,fy.w));_v2 fade_xy=fade(Pf.xy);_v2 n_x=mix(_v2(n00,n01),_v2(n10,n11),fade_xy.x);_f n_xy=mix(n_x.x,n_x.y,fade_xy.y);return 2.3*n_xy;}_v2 curlNoiseC(_v2 p){const _f e=.1;_v2 dx=_v2(e,0.0);_v2 dy=_v2(0.0,e);_v2 dz=_v2(0.0,0.0);_f p_x0=cnoise(p-dx);_f p_x1=cnoise(p+dx);_f p_y0=cnoise(p-dy);_f p_y1=cnoise(p+dy);_f p_z0=cnoise(p-dz);_f p_z1=cnoise(p+dz);_f x=p_y1-p_y0-p_z1+p_z0;_f y=p_z1-p_z0-p_x1+p_x0;const _f divisor=1.0/(2.0*e);return normalize(_v2(x,y)*divisor);}",Ai="_f pnoise3D(_v3 P,_v3 rep){_v3 Pi0=mod(floor(P),rep);_v3 Pi1=mod(Pi0+_v3(1.0),rep);Pi0=mod289(Pi0);Pi1=mod289(Pi1);_v3 Pf0=fract(P);_v3 Pf1=Pf0-_v3(1.0);_v4 ix=_v4(Pi0.x,Pi1.x,Pi0.x,Pi1.x);_v4 iy=_v4(Pi0.yy,Pi1.yy);_v4 iz0=Pi0.zzzz;_v4 iz1=Pi1.zzzz;_v4 ixy=permute(permute(ix)+iy);_v4 ixy0=permute(ixy+iz0);_v4 ixy1=permute(ixy+iz1);_v4 gx0=ixy0*(1.0/7.0);_v4 gy0=fract(floor(gx0)*(1.0/7.0))-0.5;gx0=fract(gx0);_v4 gz0=_v4(0.5)-abs(gx0)-abs(gy0);_v4 sz0=step(gz0,_v4(0.0));gx0-=sz0*(step(0.0,gx0)-0.5);gy0-=sz0*(step(0.0,gy0)-0.5);_v4 gx1=ixy1*(1.0/7.0);_v4 gy1=fract(floor(gx1)*(1.0/7.0))-0.5;gx1=fract(gx1);_v4 gz1=_v4(0.5)-abs(gx1)-abs(gy1);_v4 sz1=step(gz1,_v4(0.0));gx1-=sz1*(step(0.0,gx1)-0.5);gy1-=sz1*(step(0.0,gy1)-0.5);_v3 g000=_v3(gx0.x,gy0.x,gz0.x);_v3 g100=_v3(gx0.y,gy0.y,gz0.y);_v3 g010=_v3(gx0.z,gy0.z,gz0.z);_v3 g110=_v3(gx0.w,gy0.w,gz0.w);_v3 g001=_v3(gx1.x,gy1.x,gz1.x);_v3 g101=_v3(gx1.y,gy1.y,gz1.y);_v3 g011=_v3(gx1.z,gy1.z,gz1.z);_v3 g111=_v3(gx1.w,gy1.w,gz1.w);_v4 norm0=tisq(_v4(dot(g000,g000),dot(g010,g010),dot(g100,g100),dot(g110,g110)));g000*=norm0.x;g010*=norm0.y;g100*=norm0.z;g110*=norm0.w;_v4 norm1=tisq(_v4(dot(g001,g001),dot(g011,g011),dot(g101,g101),dot(g111,g111)));g001*=norm1.x;g011*=norm1.y;g101*=norm1.z;g111*=norm1.w;_f n000=dot(g000,Pf0);_f n100=dot(g100,_v3(Pf1.x,Pf0.yz));_f n010=dot(g010,_v3(Pf0.x,Pf1.y,Pf0.z));_f n110=dot(g110,_v3(Pf1.xy,Pf0.z));_f n001=dot(g001,_v3(Pf0.xy,Pf1.z));_f n101=dot(g101,_v3(Pf1.x,Pf0.y,Pf1.z));_f n011=dot(g011,_v3(Pf0.x,Pf1.yz));_f n111=dot(g111,Pf1);_v3 fade_xyz=fade(Pf0);_v4 n_z=mix(_v4(n000,n100,n010,n110),_v4(n001,n101,n011,n111),fade_xyz.z);vec2 n_yz=mix(n_z.xy,n_z.zw,fade_xyz.y);_f n_xyz=mix(n_yz.x,n_yz.y,fade_xyz.x);return 2.2*n_xyz;}",ki="const _v2 C=_v2(1.0/6.0,1.0/3.0);const _v4 D=_v4(0.0,0.5,1.0,2.0);_v3 i=floor(v+dot(v,C.yyy));_v3 x0=v-i+dot(i,C.xxx);_v3 g=step(x0.yzx,x0.xyz);_v3 l=1.0-g;_v3 i1=min(g.xyz,l.zxy);_v3 i2=max(g.xyz,l.zxy);_v3 x1=x0-i1+C.xxx;_v3 x2=x0-i2+C.yyy;_v3 x3=x0-D.yyy;i=mod289(i);_v4 p=permute(permute(permute(i.z+_v4(0.0,i1.z,i2.z,1.0))+i.y+_v4(0.0,i1.y,i2.y,1.0))+i.x+_v4(0.0,i1.x,i2.x,1.0));_v3 ns=0.1428*D.wyz-D.xzx;_v4 j=p-49.0*floor(p*ns.z*ns.z);_v4 x_=floor(j*ns.z);_v4 y_=floor(j-7.0*x_);_v4 x=x_*ns.x+ns.yyyy;_v4 y=y_*ns.x+ns.yyyy;_v4 h=1.0-abs(x)-abs(y);_v4 b0=_v4(x.xy,y.xy);_v4 b1=_v4(x.zw,y.zw);_v4 s0=floor(b0)*2.0+1.0;_v4 s1=floor(b1)*2.0+1.0;_v4 sh=-step(h,_v4(0.));_v4 a0=b0.xzyw+s0.xzyw*sh.xxyy;_v4 a1=b1.xzyw+s1.xzyw*sh.zzww;_v3 p0=_v3(a0.xy,h.x);_v3 p1=_v3(a0.zw,h.y);_v3 p2=_v3(a1.xy,h.z);_v3 p3=_v3(a1.zw,h.w);",Si="vec2 mod289(vec2 x){return x-floor(x*(1.0/289.0))*289.0;}vec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}vec3 mod7(vec3 x){return x-floor(x*(1.0/7.0))*7.0;}vec3 permute(vec3 x){return mod289(((x*34.0)+10.0)*x);}vec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}vec4 tisq(vec4 r){return 1.792-0.853*r;}vec3 fade(vec3 t){return t*t*t*(t*(t*6.0-15.0)+10.0);}",Mi="_f grain(_v2 tc,_v2 r,_f f,_f m){_v2 mt=tc*r;_f offset=snoise3d(vec3(mt/m,f));_f n1=pnoise3D(vec3(mt,offset),vec3(1.0/tc*r,1.0));return n1/2.0+0.5;}_f grain(_v2 tc,_v2 r,_f f){return grain(tc,r,f,2.5);}_f grain(_v2 tc,_v2 r){return grain(tc,r,0.0);}";const Ae=/(#i_ .*)/gi,br={snoise3dpart:S(ki),brightness:S(ui),contrast:S(ci),hueShift:S(_i),saturation:S(vi),blendmodes:S(di),sharpen:S(pi),changeHSVForChannel:S(fi),edge:S(gi.replace(/_ee_/g,"_t(tex, co + _v2(")),khwr:S(bi),hsl2rgb:S(mi),rgb2hsl:xi,pnoise2d:S(yi),snoise2d:S(Ci),pnoise3d:S(Ai),noiseUtils:S(Si),grain:S(Mi)};br.snoise3d=S(mr(wi));function z(r){return r=mr(r),r=S(r),r=`#version 300 es precision highp float; `+r,r}function S(r){return r=r.replace(/_i/g,"int"),r=r.replace(/_f/g,"float"),r=r.replace(/_v2/g,"vec2"),r=r.replace(/_v3/g,"vec3"),r=r.replace(/_v4/g,"vec4"),r=r.replace(/_m2/g,"mat2"),r=r.replace(/_m3/g,"mat3"),r=r.replace(/_m4/g,"mat4"),r=r.replace(/_4/g,"mat4"),r=r.replace(/_s2/g,"sampler2D"),r=r.replace(/_t/g,"texture"),r=r.replace(/_u/g,"uniform"),r=r.replace(/_gte/g,"greaterThanEqual"),r=r.replace(/_lte/g,"lessThanEqual"),r=r.replace(/_smst/g,"smoothstep"),r=r.replace(/_lay/g,"layout(location = "),r=r.replace(/_vm/g,"void main() {"),r}function mr(r){const t=Di(r);for(const e of t){const s=Ei(e);let i=br[s];i=i.replace("#define GLSLIFY 1",""),r=r.replace(e,i)}return r}function Di(r){Ae.lastIndex=0;let t=null,e=0;const s=[];for(;(t=Ae.exec(r))&&e<100;)s.push(t[0]);return s}function Ei(r){return r.replace("#i_","").replace(/ /g,"")}var Bi=`_u _v2 uArtworkSize;_u _s2 tArtwork;_u _v3 uBgColor;_u _f uBrt;_u _f uCst;_u _f uStr;_u _f uHlgt;_u _f uSh;_u _f uHa;_u _f uShb;_u _f uShs;_u _f uNs;_u _v2 uLp;_u _f uLs;_u _f uRA;_u _i uK1;_u _f uK1a;_u _i uK1b;_u _i uK2;_u _f uK2a;_u _i uK2b;in _v2 vUv;out _v4 fc; #i_ contrast #i_ brightness #i_ blendmodes #i_ sharpen #i_ khwr _v2 stdNormalMap(_f h){return-_v2(dFdx(h),dFdy(h));}_f Lum(_v3 c){return 0.299*c.r+0.587*c.g+0.114*c.b;}_v3 ClipColor(_v3 c){_f l=Lum(c);_f n=min(min(c.r,c.g),c.b);_f x=max(max(c.r,c.g),c.b);if(n<0.0)c=max((c-l)*l/(l-n)+l,0.0);if(x>1.0)c=min((c-l)*(1.0-l)/(x-l)+l,1.0);return c;}_v3 SetLum(_v3 c,_f l){c+=l-Lum(c);return ClipColor(c);}_f Sat(_v3 c){_f n=min(min(c.r,c.g),c.b);_f x=max(max(c.r,c.g),c.b);return x-n;}_v3 SetSat(_v3 c,_f s){_f ci=min(min(c.r,c.g),c.b);_f ca=max(max(c.r,c.g),c.b);_v3 r=_v3(0.0);if(ca>ci){if(c.r==ci&&c.b==ca){r.r=0.0;r.g=((c.g-ci)*s)/(ca-ci);r.b=s;}else if(c.r==ci&&c.g==ca){r.r=0.0;r.b=((c.b-ci)*s)/(ca-ci);r.g=s;}else if(c.g==ci&&c.b==ca){r.g=0.0;r.r=((c.r-ci)*s)/(ca-ci);r.b=s;}else if(c.g==ci&&c.r==ca){r.g=0.0;r.b=((c.b-ci)*s)/(ca-ci);r.r=s;}else if(c.b==ci&&c.r==ca){r.b=0.0;r.g=((c.g-ci)*s)/(ca-ci);r.r=s;}else{r.b=0.0;r.r=((c.r-ci)*s)/(ca-ci);r.g=s;}}return r;}_v3 applyHue(_v3 col,_f h){_v3 k=_v3(0.57735,0.57735,0.57735);_f ca=cos(h);return col*ca+cross(k,col)*sin(h)+k*dot(k,col)*(1.0-ca);}_vm_v2 uv=vUv;_v4 at=_t(tArtwork,uv).rgba;at.rgb=mix(uBgColor,at.rgb,at.a);at.rgba=at.rgba*uRA+(1.0-uRA)*_v4(uBgColor,1.0);_v4 kw1=khwr(tArtwork,uv,uK1,uArtworkSize);_v4 kw2=khwr(tArtwork,uv,uK2,uArtworkSize);at.rgb=blmd(uK1b,at.rgb,kw1.rgb,uK1a);at.rgb=blmd(uK2b,at.rgb,kw2.rgb,uK2a);_v3 s=sharpen(tArtwork,uv,uArtworkSize*uShs).rgb;at.rgb=blmd(2,at.rgb,s.rgb,uShb*uRA);at=bmx(uBrt)*ctmx(uCst)*at;_f amt=mix(uHlgt,uSh,1.0-Lum(at.rgb))*at.a;if(amt<0.0)amt*=2.0;_v3 res=mix(at.rgb,_v3(1.0),amt);_v3 blend=mix(_v3(1.0),pow(at.rgb,_v3(1.0/0.7)),amt);res=max(1.0-((1.0-res)/blend),0.0);res=SetLum(SetSat(at.rgb,Sat(res)),Lum(res));res=applyHue(res,uHa);const _v3 W=_v3(0.2125,0.7154,0.0721);_v3 intensity=_v3(dot(res,W));res=mix(intensity,res,uStr);at.rgb=res;_f h=(at.r+at.g+at.b)/3.;_v2 n=stdNormalMap(h);n*=uNs;
const Vr=[];function pr(){requestAnimationFrame(pr);for(const r of Vr)r()}pr();class R{constructor(){this._entities=[]}add(t){this._entities.push(t)}remove(t){const e=this._entities.indexOf(t);e!==-1&&this._entities.splice(e,1)}dispatch(...t){for(const e of this._entities)e(...t)}}const u={screen:{width:0,height:0},size:{width:2160,height:3840},dpr:1,sketch:null,renderer:null,gl:null,onRender:new R,rand:Math.random};class ie{constructor(){this.useA=!1;let t=function(e){let s=parseInt(e.substr(0,8),16),i=parseInt(e.substr(8,8),16),n=parseInt(e.substr(16,8),16),a=parseInt(e.substr(24,8),16);return function(){s|=0,i|=0,n|=0,a|=0;let l=(s+i|0)+a|0;return a=a+1|0,s=i^i>>>9,i=n+(n<<3)|0,n=n<<21|n>>>11,n=n+l|0,(l>>>0)/4294967296}};this.prngA=new t(tokenData.hash.substr(2,32)),this.prngB=new t(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec=()=>(this.useA=!this.useA,this.useA?this.prngA():this.prngB());random_num=(t,e)=>t+(e-t)*this.random_dec();random_int=(t,e)=>Math.floor(this.random_num(t,e+1));random_bool=t=>this.random_dec()<t;random_choice=t=>t[this.random_int(0,t.length-1)]}function Fr(r=null){window.tokenData||(window.genTokenData=function(s){let i={},n="0x";for(var a=0;a<64;a++)n+=Math.floor(Math.random()*16).toString(16);return i.hash=n,i.tokenId=(s*1e6+Math.floor(Math.random()*1e3)).toString(),i},window.tokenData=genTokenData(123),r&&(tokenData.hash=r));const t=new ie(tokenData);u.rand=t.random_dec}function Rr(){const r=genTokenData(3122021);r.hash="0xs03122021m13021990z";const t=new ie(r);u.prerand=t.random_dec}function fr(){const r=new ie(tokenData);u.rand=r.random_dec}function Ur(r){tokenData.hash=r,fr()}function Nr(){tokenData=genTokenData(123)}const Ir={init:Fr,reset:fr,setHash:Ur,generateNewHash:Nr,createPrerand:Rr};function $r(r,t){return r[0]=t[0],r[1]=t[1],r[2]=t[2],r}function Hr(r,t,e,s){return r[0]=t,r[1]=e,r[2]=s,r}class V extends Array{constructor(t=0,e=t,s=t){return super(t,e,s),this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(t){this[0]=t}set y(t){this[1]=t}set z(t){this[2]=t}set(t,e=t,s=t){return t.length?this.copy(t):(Hr(this,t,e,s),this)}copy(t){return $r(this,t),this}}new V;let Or=1,Wr=1,be=!1;class ne{constructor(t,e={}){t.canvas||console.error("gl not passed as first argument to Geometry"),this.gl=t,this.attributes=e,this.id=Or++,this.VAOs={},this.drawRange={start:0,count:0},this.instancedCount=0,this.gl.renderer.bindVertexArray(null),this.gl.renderer.currentGeometry=null,this.glState=this.gl.renderer.state;for(let s in e)this.addAttribute(s,e[s])}addAttribute(t,e){this.attributes[t]=e,e.id=Wr++,e.size=e.size||1,e.type=e.type||(e.data.constructor===Float32Array?this.gl.FLOAT:e.data.constructor===Uint16Array?this.gl.UNSIGNED_SHORT:this.gl.UNSIGNED_INT),e.target=t==="index"?this.gl.ELEMENT_ARRAY_BUFFER:this.gl.ARRAY_BUFFER,e.normalized=e.normalized||!1,e.stride=e.stride||0,e.offset=e.offset||0,e.count=e.count||(e.stride?e.data.byteLength/e.stride:e.data.length/e.size),e.divisor=e.instanced||0,e.needsUpdate=!1,e.usage=e.usage||this.gl.STATIC_DRAW,e.buffer||this.updateAttribute(e),this.drawRange.count=Math.max(this.drawRange.count,e.count)}updateAttribute(t){const e=!t.buffer;e&&(t.buffer=this.gl.createBuffer()),this.glState.boundBuffer!==t.buffer&&(this.gl.bindBuffer(t.target,t.buffer),this.glState.boundBuffer=t.buffer),e?this.gl.bufferData(t.target,t.data,t.usage):this.gl.bufferSubData(t.target,0,t.data),t.needsUpdate=!1}setIndex(t){this.addAttribute("index",t)}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}setInstancedCount(t){this.instancedCount=t}createVAO(t){this.VAOs[t.attributeOrder]=this.gl.renderer.createVertexArray(),this.gl.renderer.bindVertexArray(this.VAOs[t.attributeOrder]),this.bindAttributes(t)}bindAttributes(t){t.attributeLocations.forEach((e,{name:s,type:i})=>{if(!this.attributes[s]){console.warn(`active attribute ${s} not being supplied`);return}const n=this.attributes[s];this.gl.bindBuffer(n.target,n.buffer),this.glState.boundBuffer=n.buffer;let a=1;i===35674&&(a=2),i===35675&&(a=3),i===35676&&(a=4);const l=n.size/a,h=a===1?0:a*a*4,c=a===1?0:a*4;for(let _=0;_<a;_++)this.gl.vertexAttribPointer(e+_,l,n.type,n.normalized,n.stride+h,n.offset+_*c),this.gl.enableVertexAttribArray(e+_),this.gl.renderer.vertexAttribDivisor(e+_,n.divisor)}),this.attributes.index&&this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,this.attributes.index.buffer)}draw({_pr:t,mode:e=this.gl.TRIANGLES}){this.gl.renderer.currentGeometry!==`${this.id}_${t.attributeOrder}`&&(this.VAOs[t.attributeOrder]||this.createVAO(t),this.gl.renderer.bindVertexArray(this.VAOs[t.attributeOrder]),this.gl.renderer.currentGeometry=`${this.id}_${t.attributeOrder}`),t.attributeLocations.forEach((i,{name:n})=>{const a=this.attributes[n];a.needsUpdate&&this.updateAttribute(a)});let s=2;this.attributes.index?.type===this.gl.UNSIGNED_INT&&(s=4),this.attributes.index?this.gl.drawElements(e,this.drawRange.count,this.attributes.index.type,this.attributes.index.offset+this.drawRange.start*s):this.gl.drawArrays(e,this.drawRange.start,this.drawRange.count)}getPosition(){const t=this.attributes.position;if(t.data)return t;if(!be)return be=!0}remove(){for(let t in this.VAOs)this.gl.renderer.deleteVertexArray(this.VAOs[t]),delete this.VAOs[t];for(let t in this.attributes)this.gl.deleteBuffer(this.attributes[t].buffer),delete this.attributes[t]}}let Gr=1;const me={};class wt{constructor(t,{vertex:e,fragment:s,UNF:i={},transparent:n=!1,cullFace:a=t.BACK,frontFace:l=t.CCW,depthTest:h=!0,depthWrite:c=!0,depthFunc:_=t.LESS}={}){t.canvas||console.error("gl not passed as first argument to Program"),this.gl=t,this.UNF=i,this.id=Gr++,e||console.warn("vertex shader not supplied"),s||console.warn("fragment shader not supplied"),this.transparent=n,this.cullFace=a,this.frontFace=l,this.depthTest=h,this.depthWrite=c,this.depthFunc=_,this.blendFunc={},this.blendEquation={},this.transparent&&!this.blendFunc.src&&(this.gl.renderer.premultipliedAlpha?this.setBlendFunc(this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA):this.setBlendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA));const v=t.createShader(t.VERTEX_SHADER);t.shaderSource(v,e),t.compileShader(v),t.getShaderInfoLog(v)!==""&&console.warn(`${t.getShaderInfoLog(v)} Vertex Shader ${xe(e)}`);const f=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(f,s),t.compileShader(f),t.getShaderInfoLog(f)!==""&&console.warn(`${t.getShaderInfoLog(f)} Fragment Shader ${xe(s)}`),this._pr=t.createProgram(),t.attachShader(this._pr,v),t.attachShader(this._pr,f),t.linkProgram(this._pr),!t.getProgramParameter(this._pr,t.LINK_STATUS))return console.warn(t.getProgramInfoLog(this._pr));t.deleteShader(v),t.deleteShader(f),this.uniformLocations=new Map;let A=t.getProgramParameter(this._pr,t.ACTIVE_UNIFORMS);for(let g=0;g<A;g++){let p=t.getActiveUniform(this._pr,g);this.uniformLocations.set(p,t.getUniformLocation(this._pr,p.name));const m=p.name.match(/(\w+)/g);p.uniformName=m[0],m.length===3?(p.isStructArray=!0,p.structIndex=Number(m[1]),p.structProperty=m[2]):m.length===2&&isNaN(Number(m[1]))&&(p.isStruct=!0,p.structProperty=m[1])}this.attributeLocations=new Map;const b=[],C=t.getProgramParameter(this._pr,t.ACTIVE_ATTRIBUTES);for(let g=0;g<C;g++){const p=t.getActiveAttrib(this._pr,g),m=t.getAttribLocation(this._pr,p.name);m!==-1&&(b[m]=p.name,this.attributeLocations.set(p,m))}this.attributeOrder=b.join("")}setBlendFunc(t,e,s,i){this.blendFunc.src=t,this.blendFunc.dst=e,this.blendFunc.srcAlpha=s,this.blendFunc.dstAlpha=i,t&&(this.transparent=!0)}setBlendEquation(t,e){this.blendEquation.modeRGB=t,this.blendEquation.modeAlpha=e}applyState(){this.depthTest?this.gl.renderer.enable(this.gl.DEPTH_TEST):this.gl.renderer.disable(this.gl.DEPTH_TEST),this.cullFace?this.gl.renderer.enable(this.gl.CULL_FACE):this.gl.renderer.disable(this.gl.CULL_FACE),this.blendFunc.src?this.gl.renderer.enable(this.gl.BLEND):this.gl.renderer.disable(this.gl.BLEND),this.cullFace&&this.gl.renderer.setCullFace(this.cullFace),this.gl.renderer.setFrontFace(this.frontFace),this.gl.renderer.setDepthMask(this.depthWrite),this.gl.renderer.setDepthFunc(this.depthFunc),this.blendFunc.src&&this.gl.renderer.setBlendFunc(this.blendFunc.src,this.blendFunc.dst,this.blendFunc.srcAlpha,this.blendFunc.dstAlpha),this.gl.renderer.setBlendEquation(this.blendEquation.modeRGB,this.blendEquation.modeAlpha)}use({flipFaces:t=!1}={}){let e=-1;this.gl.renderer.state.currentProgram===this.id||(this.gl.useProgram(this._pr),this.gl.renderer.state.currentProgram=this.id),this.uniformLocations.forEach((i,n)=>{let a=n.uniformName,l=this.UNF[a];if(l.value.texture)return e=e+1,l.value.update(e),ee(this.gl,n.type,i,e);if(l.value.length&&l.value[0].texture){const h=[];return l.value.forEach(c=>{e=e+1,c.update(e),h.push(e)}),ee(this.gl,n.type,i,h)}ee(this.gl,n.type,i,l.value)}),this.applyState(),t&&this.gl.renderer.setFrontFace(this.frontFace===this.gl.CCW?this.gl.CW:this.gl.CCW)}remove(){this.gl.deleteProgram(this._pr)}}function ee(r,t,e,s){s=s.length?jr(s):s;const i=r.renderer.state.uniformLocations.get(e);if(s.length)if(i===void 0||i.length!==s.length)r.renderer.state.uniformLocations.set(e,s.slice(0));else{if(qr(i,s))return;i.set?i.set(s):Kr(i,s),r.renderer.state.uniformLocations.set(e,i)}else{if(i===s)return;r.renderer.state.uniformLocations.set(e,s)}switch(t){case 5126:return s.length?r.uniform1fv(e,s):r.uniform1f(e,s);case 35664:return r.uniform2fv(e,s);case 35665:return r.uniform3fv(e,s);case 35666:return r.uniform4fv(e,s);case 35670:case 5124:case 35678:case 35680:return s.length?r.uniform1iv(e,s):r.uniform1i(e,s);case 35671:case 35667:return r.uniform2iv(e,s);case 35672:case 35668:return r.uniform3iv(e,s);case 35673:case 35669:return r.uniform4iv(e,s);case 35674:return r.uniformMatrix2fv(e,!1,s);case 35675:return r.uniformMatrix3fv(e,!1,s);case 35676:return r.uniformMatrix4fv(e,!1,s)}}function xe(r){let t=r.split(` `);for(let e=0;e<t.length;e++)t[e]=e+1+": "+t[e];return t.join(` `)}function jr(r){const t=r.length,e=r[0].length;if(e===void 0)return r;const s=t*e;let i=me[s];i||(me[s]=i=new Float32Array(s));for(let n=0;n<t;n++)i.set(r[n],n*e);return i}function qr(r,t){if(r.length!==t.length)return!1;for(let e=0,s=r.length;e<s;e++)if(r[e]!==t[e])return!1;return!0}function Kr(r,t){for(let e=0,s=r.length;e<s;e++)r[e]=t[e]}new V;let Xr=1;class Yr{constructor({canvas:t=document.createElement("canvas"),width:e=300,height:s=150,dpr:i=1,alpha:n=!1,depth:a=!0,stencil:l=!1,antialias:h=!1,premultipliedAlpha:c=!1,preserveDrawingBuffer:_=!1,powerPreference:v="default",autoClear:f=!0,webgl:A=2}={}){const b={alpha:n,depth:a,stencil:l,antialias:h,premultipliedAlpha:c,preserveDrawingBuffer:_,powerPreference:v};this.dpr=i,this.alpha=n,this.color=!0,this.depth=a,this.stencil=l,this.premultipliedAlpha=c,this.autoClear=f,this.id=Xr++,A===2&&(this.gl=t.getContext("webgl2",b)),this.isWebgl2=!!this.gl,this.gl||(this.gl=t.getContext("webgl",b)),this.gl||console.error("unable to create webgl context"),this.gl.renderer=this,this.setSize(e,s),this.state={},this.state.blendFunc={src:this.gl.ONE,dst:this.gl.ZERO},this.state.blendEquation={modeRGB:this.gl.FUNC_ADD},this.state.cullFace=null,this.state.frontFace=this.gl.CCW,this.state.depthMask=!0,this.state.depthFunc=this.gl.LESS,this.state.premultiplyAlpha=!1,this.state.flipY=!1,this.state.unpackAlignment=4,this.state.framebuffer=null,this.state.viewport={x:0,y:0,width:null,height:null},this.state.textureUnits=[],this.state.activeTextureUnit=0,this.state.boundBuffer=null,this.state.uniformLocations=new Map,this.state.currentProgram=null,this.extensions={},this.isWebgl2&&(this.getExtension("EXT_color_buffer_float"),this.getExtension("OES_texture_float_linear")),this.vertexAttribDivisor=this.getExtension("ANGLE_instanced_arrays","vertexAttribDivisor","vertexAttribDivisorANGLE"),this.drawArraysInstanced=this.getExtension("ANGLE_instanced_arrays","drawArraysInstanced","drawArraysInstancedANGLE"),this.drawElementsInstanced=this.getExtension("ANGLE_instanced_arrays","drawElementsInstanced","drawElementsInstancedANGLE"),this.createVertexArray=this.getExtension("OES_vertex_array_object","createVertexArray","createVertexArrayOES"),this.bindVertexArray=this.getExtension("OES_vertex_array_object","bindVertexArray","bindVertexArrayOES"),this.deleteVertexArray=this.getExtension("OES_vertex_array_object","deleteVertexArray","deleteVertexArrayOES"),this.drawBuffers=this.getExtension("WEBGL_draw_buffers","drawBuffers","drawBuffersWEBGL"),this.parameters={},this.parameters.maxTextureUnits=this.gl.getParameter(this.gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),this.parameters.maxAnisotropy=this.getExtension("EXT_texture_filter_anisotropic")?this.gl.getParameter(this.getExtension("EXT_texture_filter_anisotropic").MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}setSize(t,e){this.width=t,this.height=e,this.gl.canvas.width=t*this.dpr,this.gl.canvas.height=e*this.dpr,this.gl.canvas.style&&Object.assign(this.gl.canvas.style,{width:t+"px",height:e+"px"})}setViewport(t,e,s=0,i=0){this.state.viewport.width===t&&this.state.viewport.height===e||(this.state.viewport.width=t,this.state.viewport.height=e,this.state.viewport.x=s,this.state.viewport.y=i,this.gl.viewport(s,i,t,e))}setScissor(t,e,s=0,i=0){this.gl.scissor(s,i,t,e)}enable(t){this.state[t]!==!0&&(this.gl.enable(t),this.state[t]=!0)}disable(t){this.state[t]!==!1&&(this.gl.disable(t),this.state[t]=!1)}setBlendFunc(t,e,s,i){this.state.blendFunc.src===t&&this.state.blendFunc.dst===e&&this.state.blendFunc.srcAlpha===s&&this.state.blendFunc.dstAlpha===i||(this.state.blendFunc.src=t,this.state.blendFunc.dst=e,this.state.blendFunc.srcAlpha=s,this.state.blendFunc.dstAlpha=i,s!==void 0?this.gl.blendFuncSeparate(t,e,s,i):this.gl.blendFunc(t,e))}setBlendEquation(t,e){t=t||this.gl.FUNC_ADD,!(this.state.blendEquation.modeRGB===t&&this.state.blendEquation.modeAlpha===e)&&(this.state.blendEquation.modeRGB=t,this.state.blendEquation.modeAlpha=e,e!==void 0?this.gl.blendEquationSeparate(t,e):this.gl.blendEquation(t))}setCullFace(t){this.state.cullFace!==t&&(this.state.cullFace=t,this.gl.cullFace(t))}setFrontFace(t){this.state.frontFace!==t&&(this.state.frontFace=t,this.gl.frontFace(t))}setDepthMask(t){this.state.depthMask!==t&&(this.state.depthMask=t,this.gl.depthMask(t))}setDepthFunc(t){this.state.depthFunc!==t&&(this.state.depthFunc=t,this.gl.depthFunc(t))}activeTexture(t){this.state.activeTextureUnit!==t&&(this.state.activeTextureUnit=t,this.gl.activeTexture(this.gl.TEXTURE0+t))}bindFramebuffer({target:t=this.gl.FRAMEBUFFER,buffer:e=null}={}){this.state.framebuffer!==e&&(this.state.framebuffer=e,this.gl.bindFramebuffer(t,e))}getExtension(t,e,s){return e&&this.gl[e]?this.gl[e].bind(this.gl):(this.extensions[t]||(this.extensions[t]=this.gl.getExtension(t)),e?this.extensions[t]?this.extensions[t][s].bind(this.extensions[t]):null:this.extensions[t])}getRenderList({scene:t,camera:e,frustumCull:s,sort:i}){let n=[];return t.traverse(a=>{if(!a.visible)return!0;a.draw&&n.push(a)}),n}render({scene:t,camera:e,target:s=null,update:i=!0,sort:n=!0,frustumCull:a=!0,clear:l}){s===null?(this.bindFramebuffer(),this.setViewport(this.width*this.dpr,this.height*this.dpr)):(this.bindFramebuffer(s),this.setViewport(s.width,s.height)),(l||this.autoClear&&l!==!1)&&(this.depth&&(!s||s.depth)&&(this.enable(this.gl.DEPTH_TEST),this.setDepthMask(!0)),this.gl.clear((this.color?this.gl.COLOR_BUFFER_BIT:0)|(this.depth?this.gl.DEPTH_BUFFER_BIT:0)|(this.stencil?this.gl.STENCIL_BUFFER_BIT:0))),i&&t.updateMatrixWorld(),e&&e.updateMatrixWorld(),this.getRenderList({scene:t,camera:e,frustumCull:a,sort:n}).forEach(c=>{c.draw({camera:e})})}}class Zr extends Array{constructor(t=0,e=0,s=0,i=1){return super(t,e,s,i),this.och=()=>{},this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}get w(){return this[3]}set x(t){this[0]=t,this.och()}set y(t){this[1]=t,this.och()}set z(t){this[2]=t,this.och()}set w(t){this[3]=t,this.och()}}function Qr(r,t,e,s,i){let n=1/Math.tan(t/2),a=1/(s-i);return r[0]=n/e,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=n,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=(i+s)*a,r[11]=-1,r[12]=0,r[13]=0,r[14]=2*i*s*a,r[15]=0,r}class H extends Array{constructor(t=1,e=0,s=0,i=0,n=0,a=1,l=0,h=0,c=0,_=0,v=1,f=0,A=0,b=0,C=0,g=1){return super(t,e,s,i,n,a,l,h,c,_,v,f,A,b,C,g),this}get x(){return this[12]}get y(){return this[13]}get z(){return this[14]}get w(){return this[15]}set x(t){this[12]=t}set y(t){this[13]=t}set z(t){this[14]=t}set w(t){this[15]=t}multiply(t,e){return this}identity(){}copy(t){return this}fromPerspective({fov:t,aspect:e,near:s,far:i}={}){return Qr(this,t,e,s,i),this}setPosition(t){return this.x=t[0],this.y=t[1],this.z=t[2],this}compose(t,e,s){return this}getRotation(t){return this}getTranslation(t){return this}getScaling(t){return this}}new H;class Jr extends Array{constructor(t=0,e=t,s=t,i="YXZ"){return super(t,e,s),this.order=i,this.och=()=>{},this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(t){this[0]=t,this.och()}set y(t){this[1]=t,this.och()}set z(t){this[2]=t,this.och()}set(t,e=t,s=t){return t.length?this.copy(t):(this[0]=t,this[1]=e,this[2]=s,this.och(),this)}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this.och(),this}reorder(t){}fromRotationMatrix(t,e=this.order){}fromQuaternion(t,e=this.order){}fromArray(t,e=0){}toArray(t=[],e=0){}}class Zt{constructor(){this.parent=null,this.children=[],this.visible=!0,this.matrix=new H,this.WMX=new H,this.matrixAutoUpdate=!0,this.position=new V,this.quaternion=new Zr,this.scale=new V(1),this.rotation=new Jr,this.up=new V(0,1,0),this.rotation.och=()=>this.quaternion.fromEuler(this.rotation),this.quaternion.och=()=>this.rotation.fromQuaternion(this.quaternion)}setParent(t,e=!0){this.parent&&t!==this.parent&&this.parent.removeChild(this,!1),this.parent=t,e&&t&&t.addChild(this,!1)}addChild(t,e=!0){~this.children.indexOf(t)||this.children.push(t),e&&t.setParent(this,!1)}removeChild(t,e=!0){~this.children.indexOf(t)&&this.children.splice(this.children.indexOf(t),1),e&&t.setParent(null,!1)}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.WMXNeedsUpdate||t)&&(this.parent===null?this.WMX.copy(this.matrix):this.WMX.multiply(this.parent.WMX,this.matrix),this.WMXNeedsUpdate=!1,t=!0);for(let e=0,s=this.children.length;e<s;e++)this.children[e].updateMatrixWorld(t)}updateMatrix(){this.matrix.compose(this.quaternion,this.position,this.scale),this.WMXNeedsUpdate=!0}traverse(t){if(!t(this))for(let e=0,s=this.children.length;e<s;e++)this.children[e].traverse(t)}lookAt(t,e=!1){this.matrix.getRotation(this.quaternion),this.rotation.fromQuaternion(this.quaternion)}}const ti=new H;class gr extends Zt{constructor(t,{near:e=.1,far:s=100,fov:i=45,aspect:n=1,left:a,right:l,bottom:h,top:c,zoom:_=1}={}){super(),Object.assign(this,{near:e,far:s,fov:i,aspect:n,left:a,right:l,bottom:h,top:c,zoom:_}),this.projectionMatrix=new H,this.viewMatrix=new H,this.projectionViewMatrix=new H,this.worldPosition=new V,this.type="perspective",this.perspective()}perspective({near:t=this.near,far:e=this.far,fov:s=this.fov,aspect:i=this.aspect}={}){return Object.assign(this,{near:t,far:e,fov:s,aspect:i}),this.projectionMatrix.fromPerspective({fov:s*(Math.PI/180),aspect:i,near:t,far:e}),this.type="perspective",this}updateMatrixWorld(){return super.updateMatrixWorld(),this.WMX.getTranslation(this.worldPosition),this.projectionViewMatrix.multiply(this.projectionMatrix,this.viewMatrix),this}lookAt(t){return super.lookAt(t,!0),this}project(t){return t.applyMatrix4(this.viewMatrix),t.applyMatrix4(this.projectionMatrix),this}unproject(t){return t.applyMatrix4(ti.inverse(this.projectionMatrix)),t.applyMatrix4(this.WMX),this}}class ei extends Array{constructor(t=1,e=0,s=0,i=0,n=1,a=0,l=0,h=0,c=1){return super(t,e,s,i,n,a,l,h,c),this}set(t,e,s,i,n,a,l,h,c){return t.length?this.copy(t):this}translate(t,e=this){return this}rotate(t,e=this){return this}scale(t,e=this){return this}multiply(t,e){return this}identity(){return this}copy(t){return this}fromMatrix4(t){return this}fromQuaternion(t){return this}fromBasis(t,e,s){return this}inverse(t=this){return this}getNormalMatrix(t){return this}}let si=0;class yt extends Zt{constructor(t,{geometry:e,_pr:s,mode:i=t.TRIANGLES,frustumCulled:n=!0,renderOrder:a=0}={}){super(),t.canvas||console.error("gl not passed as first argument to Mesh"),this.gl=t,this.id=si++,this.geometry=e,this._pr=s,this.mode=i,this.frustumCulled=n,this.renderOrder=a,this.modelViewMatrix=new H,this.normalMatrix=new ei}draw({camera:t}={}){t&&(this._pr.UNF.modelMatrix||Object.assign(this._pr.UNF,{modelMatrix:{value:null},viewMatrix:{value:null},modelViewMatrix:{value:null},normalMatrix:{value:null},projectionMatrix:{value:null},cameraPosition:{value:null}}),this._pr.UNF.projectionMatrix.value=t.projectionMatrix,this._pr.UNF.cameraPosition.value=t.worldPosition,this._pr.UNF.viewMatrix.value=t.viewMatrix,this.modelViewMatrix.multiply(t.viewMatrix,this.WMX),this.normalMatrix.getNormalMatrix(this.modelViewMatrix),this._pr.UNF.modelMatrix.value=this.WMX,this._pr.UNF.modelViewMatrix.value=this.modelViewMatrix,this._pr.UNF.normalMatrix.value=this.normalMatrix),this._pr.use(),this.geometry.draw({mode:this.mode,_pr:this._pr})}}const ri=new Uint8Array(4);let ii=1;class Qt{constructor(t,{image:e,target:s=t.TEXTURE_2D,type:i=t.UNSIGNED_BYTE,format:n=t.RGBA,internalFormat:a=n,wrapS:l=t.CLAMP_TO_EDGE,wrapT:h=t.CLAMP_TO_EDGE,generateMipmaps:c=!0,minFilter:_=c?t.NEAREST_MIPMAP_LINEAR:t.LINEAR,magFilter:v=t.LINEAR,premultiplyAlpha:f=!1,unpackAlignment:A=4,flipY:b=s==t.TEXTURE_2D,anisotropy:C=0,level:g=0,width:p,height:m=p}={}){this.gl=t,this.id=ii++,this.image=e,this.target=s,this.type=i,this.format=n,this.internalFormat=a,this.minFilter=_,this.magFilter=v,this.wrapS=l,this.wrapT=h,this.generateMipmaps=c,this.premultiplyAlpha=f,this.unpackAlignment=A,this.flipY=b,this.anisotropy=Math.min(C,this.gl.renderer.parameters.maxAnisotropy),this.level=g,this.width=p,this.height=m,this.texture=this.gl.createTexture(),this.store={image:null},this.glState=this.gl.renderer.state,this.state={},this.state.minFilter=this.gl.NEAREST_MIPMAP_LINEAR,this.state.magFilter=this.gl.LINEAR,this.state.wrapS=this.gl.REPEAT,this.state.wrapT=this.gl.REPEAT,this.state.anisotropy=0}bind(){this.glState.textureUnits[this.glState.activeTextureUnit]!==this.id&&(this.gl.bindTexture(this.target,this.texture),this.glState.textureUnits[this.glState.activeTextureUnit]=this.id)}update(t=0){const e=!(this.image===this.store.image&&!this.needsUpdate);(e||this.glState.textureUnits[t]!==this.id)&&(this.gl.renderer.activeTexture(t),this.bind()),e&&(this.needsUpdate=!1,this.flipY!==this.glState.flipY&&(this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,this.flipY),this.glState.flipY=this.flipY),this.premultiplyAlpha!==this.glState.premultiplyAlpha&&(this.gl.pixelStorei(this.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,this.premultiplyAlpha),this.glState.premultiplyAlpha=this.premultiplyAlpha),this.unpackAlignment!==this.glState.unpackAlignment&&(this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,this.unpackAlignment),this.glState.unpackAlignment=this.unpackAlignment),this.minFilter!==this.state.minFilter&&(this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,this.minFilter),this.state.minFilter=this.minFilter),this.magFilter!==this.state.magFilter&&(this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,this.magFilter),this.state.magFilter=this.magFilter),this.wrapS!==this.state.wrapS&&(this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,this.wrapS),this.state.wrapS=this.wrapS),this.wrapT!==this.state.wrapT&&(this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,this.wrapT),this.state.wrapT=this.wrapT),this.image?(this.image.width&&(this.width=this.image.width,this.height=this.image.height),ArrayBuffer.isView(this.image)?this.gl.texImage2D(this.target,this.level,this.internalFormat,this.width,this.height,0,this.format,this.type,this.image)
Tangible Pixels: Symbolic Fruit We often think of digital art as this ethereal thing, code and pixels floating around with no grounding in the real world. But the more I work with this medium, the more I find a surprising tangibility in my pixels and in the act of coding itself.
Built on a foundation of thousands of physical renditions of common computer symbols, Encore embraces repetition -- in the physical creation of the foundational symbols, in the process of overwriting as each new layer is applied, and as a way to focus on the true unbiased state of each work. The outputs of Encore are meant to translate the physical process of making these marks into a fully digital form, embracing digital methods to replicate a physical process while maintaining a computer-art aesthetic.
let{abs:_,ceil:e,floor:$,sin:r,sqrt:i,max:c,min:n,cos:l}=Math;class Random{constructor(){this.useA=!1;let _=function(_){let e=parseInt(_.substr(0,8),16),$=parseInt(_.substr(8,8),16),r=parseInt(_.substr(16,8),16),i=parseInt(_.substr(24,8),16);return function(){r|=0;let _=((e|=0)+($|=0)|0)+(i|=0)|0;return i=i+1|0,e=$^$>>>9,$=r+(r<<3)|0,r=(r=r<<21|r>>>11)+_|0,(_>>>0)/4294967296}};this.prngA=new _(tokenData.hash.substr(2,32)),this.prngB=new _(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}g(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}}const R=new Random;colorPick=pick_color(colorSets=[{name:"Dg",cBg:[.0888,.0888,.0888,1],cF:[.8,.8,.8,1],cH:[[.8,.8,.8,1],[.7,.7,.7,1],[.6,.6,.6,1],[.5,.5,.5,1],[.4,.4,.4,1]],cR:.1,w:7},{name:"D0",cBg:[.0588,.0588,.0588,1],cF:[.6,.6,.6,1],cH:[[.8,.8,.8,1]],cR:.85,w:2},{name:"D0",cBg:[.1215,.1215,.1215,1],cF:[1,1,1,1],cH:[[.8,.8,.8,1]],cR:.85,w:2},{name:"D1",cBg:[.1215,.1215,.1608,1],cF:[1,1,1,1],cH:[[.8,.8,.8,1]],cR:.85,w:2},{name:"D2",cBg:[.1215,.1608,.1215,1],cF:[1,1,1,1],cH:[[.8352,.7843,.7098,1]],cR:.85,w:2},{name:"DX",cBg:[.149,.1569,.1804,1],cF:[.6745,.6627,.6392,1],cH:[[.0784,.0314,.0431,1]],cR:.85,w:2},{name:"C1",cBg:[.2667,.298,.3334,1],cF:[.85,.85,.85,1],cH:[[1,1,1,1],[.8,.8,.8,1],[.6,.6,.6,1]],cR:.25,w:4},{name:"Ci",cBg:[.85,.85,.85,1],cF:[.2667,.298,.3334,1],cH:[[.4,.4,.4,1],[.5,.5,.5,1],[.6,.6,.6,1]],cR:.25,w:3},{name:"L0",cBg:[.8353,.8039,.7372,1],cF:[.149,.1569,.1804,1],cH:[[.0588,.1412,.5686,1]],cR:.85,w:2},{name:"L1",cBg:[.8824,.8706,.8431,1],cF:[.149,.1569,.1804,1],cH:[[.2588,.051,.1569,1]],cR:.85,w:1.5},{name:"Salmon",cBg:[.9829,.4049,.3573,1],cF:[.455,.175,.346,1],cH:[[.355,.075,.246,1]],cR:.85,w:1},{name:"Rouge",cBg:[.2157,.0196,.0784,1],cF:[.5176,.251,.3334,1],cH:[[.9099,.8196,.8156,1]],cR:.85,w:.5},{name:"Ernok",cBg:[.8118,.1255,.1451,1],cF:[.0667,.098,.1529,1],cH:[[.8275,.7099,.345,1]],cR:.85,w:1.5},{name:"Royal Blue",cBg:[.0392,.0471,.0902,1],cF:[.9099,.8706,.651,1],cH:[[.7255,.6627,.3216,1]],cR:.85,w:1},{name:"Blue",cBg:[.2074,.6388,.877,1],cF:[.1,.1,.1,1],cH:[[.3334,.1451,.0392,1]],cR:.85,w:.75},{name:"Cold Blue",cBg:[.5294,.8902,.8784,1],cF:[.1176,.0471,.0196,1],cH:[[.9216,.9216,.8588,1]],cR:.85,w:1.25},{name:"Radium",cBg:[.9099,.5059,.3608,1],cF:[.2,.1922,.1961,1],cH:[[.9216,.9216,.8588,1]],cR:.85,w:1},{name:"Beast",cBg:[.3882,.4235,.4549,1],cF:[.7804,.5059,.6275,1],cH:[[.1882,.1922,.2039,1]],cR:.85,w:.5},{name:"Bracco di Ferro",cBg:[.1529,.1451,.1412,1],cF:[.9529,.8588,.2863,1],cH:[[.2588,.3255,.1765,1]],cR:.85,w:.8},{name:"Kuao",cBg:[.1334,.1412,.1804,1],cF:[.6784,.149,.1608,1],cH:[[.1373,.302,.3608,1]],cR:.85,w:1.2},{name:"Hard",cBg:[.1255,0,.902,1],cF:[.9,.9,.9,1],cH:[[.1,.1,.1,1]],cR:.85,w:.5},{name:"Bowie",cBg:[.9334,.898,.2667,1],cF:[0,0,0,1],cH:[[.098,.3725,.7137,1]],cR:.85,w:1},]);let width,height,xc=$(70*R.g())+60,yc=$(1.333*xc),cBg=colorPick.cBg,cF=colorPick.cF,cH=colorPick.cH,cR=colorPick.cR,ns=1e5*R.g(),nrx=5+10*R.g(),nry=5+10*R.g(),nScale=5,gS=R.g()/6+.05,pl=25,animationDuration=15,smudge=R.g()/5+.05,borderWidth=[.75,.75,1,1,1.5][$(5*R.g())],lineRep=$(6*R.g())+2,sketchRate=[10,15,25][$(3*R.g())],hSketchRate=sketchRate,doodleMap=[...Array(15)].map((_,e)=>e).sort(()=>.5-R.g()).slice(0,4),grid=[],scl,cvs,ctx,gl,verShader,fragShader,bufferShader,vBuf,pShader,pBuffer,img,fBufs,fBufId=0,uC=0;function init(){for(let _ in document.body.style.background="#000000",(rr=document.createElement("canvas")).id="ref",document.body.append(rr),(gl=(cvs=document.getElementsByTagName("canvas")[0]).getContext("webgl2")).clearColor(0,0,0,1),vBuf=gBuffer(),pShader=cProgram(verShader,fragShader),pBuffer=cProgram(verShader,bufferShader),scl=1,""!=window.location.hash&&(scl=parseInt(window.location.hash.replace("#",""))),width=((ww=window.innerWidth)<.75*(wh=window.innerHeight)?ww:wh/4*3)*scl,height=(ww<.75*wh?ww/3*4:wh)*scl,cvs.width=width,cvs.height=height,noise.seed(1e4*R.g()),gGrid(),fBufs)gl.deleteFramebuffer(_.buf),gl.deleteTexture(_.texture);let e=gBase(width,height);img=gTexture(width,height,e),(fBufs=[]).push(cFBuffer(width,height,e)),fBufs.push(cFBuffer(width,height,null)),fBufId=0,run()}function run(){p=uPixels(),gl.deleteTexture(img),img=uTexture(width,height,p),uC+=1,rVisual(),rBuffer(),uC<grid.length*(pl+animationDuration)?setTimeout(()=>{document.title="Encore ("+$(uC/(grid.length*(pl+animationDuration))*100)+"%)",requestAnimationFrame(run)},16):(document.title="Encore",ref&&ref.remove())}function sProgram(_){gl.useProgram(_),_.vertexPosAttrib=gl.getAttribLocation(_,"pos"),gl.enableVertexAttribArray(_.vertexPosAttrib),gl.bindBuffer(gl.ARRAY_BUFFER,vBuf),gl.vertexAttribPointer(_.vertexPosAttrib,3,gl.FLOAT,!1,0,0)}function rVisual(){let _=fBufId,e=fBufId^=1;dirx=grid[$((uC-1)/(pl+animationDuration))].dx,diry=grid[$((uC-1)/(pl+animationDuration))].dy,sProgram(pShader),gl.bindFramebuffer(gl.FRAMEBUFFER,fBufs[e].buf),gl.viewport(0,0,width,height),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT),gl.activeTexture(gl.TEXTURE0+_),gl.bindTexture(gl.TEXTURE_2D,fBufs[_].tex),gl.activeTexture(gl.TEXTURE2),gl.bindTexture(gl.TEXTURE_2D,img),gl.uniform1i(gl.getUniformLocation(pShader,"buf"),_),gl.uniform1i(gl.getUniformLocation(pShader,"img"),2),gl.uniform1f(gl.getUniformLocation(pShader,"dirx"),dirx),gl.uniform1f(gl.getUniformLocation(pShader,"diry"),diry),gl.uniform1f(gl.getUniformLocation(pShader,"frame"),uC),bg=cBg,grid[$((uC-1)/(pl+animationDuration))].t>.5&&(t=grid[$((uC-1)/(pl+animationDuration))].t/20-.025,bg=[cBg[0]+t,cBg[1]+t,cBg[2]+t,1]),coll=grid[$((uC-1)/(pl+animationDuration))].c,gl.uniform4fv(gl.getUniformLocation(pShader,"cBg"),bg),gl.uniform4fv(gl.getUniformLocation(pShader,"cF"),coll),gl.drawArrays(gl.TRIANGLE_STRIP,0,4)}function rBuffer(){sProgram(pBuffer),gl.bindFramebuffer(gl.FRAMEBUFFER,null),gl.viewport(0,0,cvs.width,cvs.height),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT),gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,fBufs[fBufId].tex),gl.uniform1i(gl.getUniformLocation(pBuffer,"buffer"),0),gl.drawArrays(gl.TRIANGLE_STRIP,0,4)}function cProgram(_,e){let $=gl.createProgram(),r=cShader(decodeURIComponent("%23version 300 es%0A")+_,gl.VERTEX_SHADER),i=cShader(decodeURIComponent("%23version 300 es%0Aprecision highp float;")+e,gl.FRAGMENT_SHADER);return gl.attachShader($,r),gl.attachShader($,i),gl.linkProgram($),$}function cShader(_,e){let $=gl.createShader(e);return gl.shaderSource($,_),gl.compileShader($),$}function cFBuffer(_,e,$){let r=gl.createFramebuffer(),i=gTexture(_,e,$);return gl.bindFramebuffer(gl.FRAMEBUFFER,r),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,i,0),{buf:r,tex:i}}function gTexture(_,e,$){let r=gl.createTexture();return gl.bindTexture(gl.TEXTURE_2D,r),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,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),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,_,e,0,gl.RGBA,gl.UNSIGNED_BYTE,$),r}function uTexture(_,e,$){let r=gl.createTexture();return gl.bindTexture(gl.TEXTURE_2D,r),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,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),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,_,e,0,gl.RGBA,gl.UNSIGNED_BYTE,$),r}function gBuffer(_){let e=gl.createBuffer();return gl.bindBuffer(gl.ARRAY_BUFFER,e),gl.bufferData(gl.ARRAY_BUFFER,new Float32Array([-1,1,0,-1,-1,0,1,1,0,1,-1,0]),gl.STATIC_DRAW),e}function uPixels(_,r){if(ref=document.getElementById("ref"),ctx.clearRect(0,0,width,height),ctx.beginPath(),ctx.rect(0,0,width,height),ctx.fillStyle="black",ctx.fill(),ctx.closePath(),x1=(g=grid[$(uC/(pl+animationDuration))]).x*width,y1=g.y*height,wi=g.w*width,he=g.h*height,(fR=c(0,(frameRotate=uC/(pl+animationDuration)*(pl+animationDuration)-$(uC/(pl+animationDuration))*(pl+animationDuration))-(pl-1)))>0&&(yRC=e(yc/animationDuration)),uC/(pl+animationDuration)*(pl+animationDuration)-$(uC/(pl+animationDuration))*(pl+animationDuration)>pl-1){if(x1=0,y1=0,wi=width,he=height,wii=width/xc,hee=height/yc,g.t>-1)for(let i=0;i<xc;i++)for(let n=0;n<yc;n++)n>=(fR-1)*yRC&&n<fR*yRC&&g.polys.map(_=>{inside([x1+(i+.5)*wii+noise.simplex2(x1/width/nrx,y1/height/nry)*sc(nScale),y1+(n+.5)*hee+noise.simplex2(x1/width/nrx,y1/height/nry)*sc(nScale)],_)&&dScrawl(x1+i*wii,y1+n*hee,wii,hee,doodleMap[$(g.t*doodleMap.length)],"#ff0000",lineRep)})}else g.polys.map(_=>{ctx.beginPath(),_.map(_=>{ctx.lineTo(_[0]*width,_[1]*height)}),ctx.fillStyle="#00ff00",ctx.fill(),ctx.closePath()});return ref}function gBase(_,e){(ref=document.getElementById("ref")).width=width,ref.height=height,ref.style.display="none",(ctx=ref.getContext("2d")).beginPath(),ctx.rect(0,0,width,height),ctx.fillStyle="rgb("+$(255*cBg[0])+","+$(255*cBg[1])+","+$(255*cBg[2])+")",ctx.fill(),ctx.closePath(),x1=0,y1=0,wi=width,he=height,wii=width/xc,hee=height/yc,type=doodleMap[$(R.g()*doodleMap.length)];for(let r=0;r<xc;r++)for(let i=0;i<yc;i++)dScrawl(x1+r*wii,y1+i*hee,wii,hee,type,"rgb("+$(255*cF[0])+","+$(255*cF[1])+","+$(255*cF[2])+")",lineRep);return ref}function sc(_){return width/1500*_}function dScrawl(_,e,$,r,i=0,c,n=1){for(let l=0;l<n;l++)ctx.beginPath(),noii=noise.simplex2(_/width/nrx,e/height/nry)*sc(nScale),bv=1-2*gS,0===i&&(sBase=[{x:_+$*gS,y:e+r*gS,d:0},{x:_+.497*$,y:e+.503*r,d:0},{x:_+$*(1-gS),y:e+r*(1-gS),d:0},]),1===i&&(sBase=[{x:_+$*(1-gS),y:e+r*gS,d:0},{x:_+$*(.502*bv+gS),y:e+r*(.496*bv+gS),d:0},{x:_+$*gS,y:e+r*(1-gS),d:0},]),2===i&&(sBase=[{x:_+$*(1-gS),y:e+r*gS,d:0},{x:_+$*(.495*bv+gS),y:e+r*(.498*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(1-gS),d:0},]),3===i&&(sBase=[{x:_+$*gS,y:e+r*gS,d:0},{x:_+$*(.488*bv+gS),y:e+r*(.511*bv+gS),d:0},{x:_+$*gS,y:e+r*(1-gS),d:0},]),4===i&&(sBase=[{x:_+$*(.197*bv+gS),y:e+r*gS,d:0},{x:_+$*(.498*bv+gS),y:e+r*(.802*bv+gS),d:0},{x:_+$*(.802*bv+gS),y:e+r*gS,d:0},]),5===i&&(sBase=[{x:_+$*(.2*bv+gS),y:e+r*(1-gS),d:0},{x:_+$*(.512*bv+gS),y:e+r*(.202*bv+gS),d:0},{x:_+$*(.804*bv+gS),y:e+r*(1-gS),d:0},]),6===i&&(sBase=[{x:_+$*(.301*bv+gS),y:e+r*gS,d:0},{x:_+$*(.301*bv+gS),y:e+r*(.41*bv+gS),d:0},{x:_+$*(.687*bv+gS),y:e+r*gS,d:1},{x:_+$*(.702*bv+gS),y:e+r*(.4*bv+gS),d:0},{x:_+$*gS,y:e+r*(.5*bv+gS),d:1},{x:_+$*(.5*bv+gS),y:e+r*(1-gS),d:0},{x:_+$*(1-gS),y:e+r*(.5*bv+gS),d:0}]),7===i&&(sBase=[{x:_+$*(.304*bv+gS),y:e+r*gS,d:0},{x:_+$*(.302*bv+gS),y:e+r*(.401*bv+gS),d:0},{x:_+$*(.698*bv+gS),y:e+r*gS,d:1},{x:_+$*(.698*bv+gS),y:e+r*(.397*bv+gS),d:0},{x:_+$*gS,y:e+r*(1-gS),d:1},{x:_+$*(.5*bv+gS),y:e+r*(.75*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(1-gS),d:0}]),8===i&&(sBase=[{x:_+$*(.351*bv+gS),y:e+r*gS,d:0},{x:_+$*(.351*bv+gS),y:e+r*(.502*bv+gS),d:0},{x:_+$*(.648*bv+gS),y:e+r*gS,d:1},{x:_+$*(.648*bv+gS),y:e+r*(.4*bv+gS),d:0},{x:_+$*(.294*bv+gS),y:e+r*(.65*bv+gS),d:1},{x:_+$*(.551*bv+gS),y:e+r*(.706*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(.448*bv+gS),d:0}]),9===i&&(sBase=[{x:_+$*(.502*bv+gS),y:e+r*gS,d:0},{x:_+$*(.503*bv+gS),y:e+r*(1-gS),d:0},{x:_+$*gS,y:e+r*(.351*bv+gS),d:1},{x:_+$*(1-gS),y:e+r*(.348*bv+gS),d:0},]),10===i&&(sBase=[{x:_+$*(.502*bv+gS),y:e+r*gS,d:0},{x:_+$*(.496*bv+gS),y:e+r*(.52*bv+gS),d:0},{x:_+$*(.497*bv+gS),y:e+r*(1-gS),d:0},]),11===i&&(sBase=[{x:_+$*gS,y:e+r*(.502*bv+gS),d:0},{x:_+$*(.499*bv+gS),y:e+r*(.498*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(.499*bv+gS),d:0},]),12===i&&(sBase=[{x:_+$*(.2*bv+gS),y:e+r*(.101*bv+gS),d:0},{x:_+$*(.512*bv+gS),y:e+r*(.397*bv+gS),d:0},{x:_+$*(.798*bv+gS),y:e+r*(.103*bv+gS),d:0},{x:_+$*(.22*bv+gS),y:e+r*(.902*bv+gS),d:1},{x:_+$*(.5*bv+gS),y:e+r*(.598*bv+gS),d:0},{x:_+$*(.799*bv+gS),y:e+r*(.904*bv+gS),d:0},]),13===i&&(sBase=[{x:_+$*(.502*bv+gS),y:e+r*gS,d:0},{x:_+$*(.496*bv+gS),y:e+r*(.52*bv+gS),d:0},{x:_+$*(.497*bv+gS),y:e+r*(1-gS),d:0},]),14===i&&(sBase=[{x:_+$*gS,y:e+r*(.502*bv+gS),d:0},{x:_+$*(.499*bv+gS),y:e+r*(.498*bv+gS),d:0},{x:_+$*(1-gS),y:e+r*(.499*bv+gS),d:0},]),sBase.map((_,e)=>{0===(d=_.d?_.d:0)?ctx.lineTo(_.x+noise.simplex3(_.x/width*100,_.y/height*100,l/4)*$/sketchRate-$/hSketchRate+noii,_.y+noise.simplex3(_.x/width*100,_.y/height*100,4*l)*r/sketchRate-r/hSketchRate+noii):ctx.moveTo(_.x+noise.simplex3(_.x/width*100,_.y/height*100,l/4)*$/sketchRate-$/hSketchRate+noii,_.y+noise.simplex3(_.x/width*100,_.y/height*100,4*l)*r/sketchRate-r/hSketchRate+noii)}),ctx.strokeStyle=c,ctx.lineWidth=sc(borderWidth),ctx.stroke(),ctx.closePath()}function inside(_,e){for(var $=_[0],r=_[1],i=!1,c=0,n=e.length-1;c<e.length;n=c++){var l=e[c][0]*width,a=e[c][1]*height,o=e[n][0]*width,u=e[n][1]*height;a>r!=u>r&&$<(o-l)*(r-a)/(u-a)+l&&(i=!i)}return i}function gGrid(){for(let _=0;_<$(7*R.g())+5;_++)len=$(8*R.g())+2,padding=0,div=1,R.g()>.9&&(padding=R.g()/5,div=2),grid.push({t:R.g(),s:R.g()/div,dx:2*R.g()-1,dy:2*R.g()-1,c:R.g()>cR?cH[$(R.g()*cH.length)]:cF,polys:[...Array(len)].map((_,e)=>(hh=1/(2*len+1),comp=R.g()>.6?.05*R.g()-.025:0,ccomp=R.g()>.85&&0===padding?.0125*R.g()-.00625:0,R.g()>.95)?[]:[[padding,e*hh*2+hh+comp-ccomp],[1-padding,e*hh*2+hh+comp+ccomp],[1-padding,e*hh*2+2*hh+comp+ccomp],[padding,e*hh*2+2*hh+comp-ccomp],])});for(let e=0;e<$(7*R.g())+5;e++)padding=0,div=1,R.g()>.9&&(padding=R.g()/5*.75,div=2),len=$(8*R.g())+2,grid.push({t:R.g(),s:R.g()/div,dx:2*R.g()-1,dy:2*R.g()-1,c:R.g()>cR?cH[$(R.g()*cH.length)]:cF,polys:[...Array(len)].map((_,e)=>(hh=1/(2*len+1),comp=R.g()>.6?.05*R.g()-.025:0,ccomp2=R.g()>.85&&0===padding?.0125*R.g()-.00625:0,R.g()>.95)?[]:[[e*hh*2+hh+comp-ccomp2,padding],[e*hh*2+2*hh+comp-ccomp2,padding],[e*hh*2+2*hh+comp+ccomp2,1-padding],[e*hh*2+hh+comp+ccomp2,1-padding],])});(grid=grid.sort((_,e)=>_.s-e.s))[grid.length-1].c=cF,grid.push({t:-1,s:0,dx:0,dy:0,c:cF,polys:[[[0,0],[.025,0],[.025,1],[0,1]],[[.975,0],[1,0],[1,1],[.975,1]],[[0,0],[1,0],[1,.025*.75],[0,.025*.75]],[[0,1-.025*.75],[1,1-.025*.75],[1,1],[0,1]],]})}function pick_color(_){let e,$=[];for(e=0;e<_.length;e++)$[e]=_[e].w+($[e-1]||0);let r=R.g()*$[$.length-1];for(e=0;e<$.length&&!($[e]>r);e++);return _[e]}verShader="in vec3 pos;out vec2 vUv;void main(){gl_Position=vec4(pos,1.);vUv=(pos.xy+1.)/2.;}",fragShader=`uniform sampler2D buf,img;uniform float dirx,diry,frame;uniform vec4 cBg,cF;in vec2 vUv;out vec4 col;vec3 random3(vec3 c) {float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));vec3 r;r.z = fract(512.0*j);j *= .125;r.x = fract(512.0*j);j *= .125;r.y = fract(512.0*j);return r-0.5;}const float F3 = 0.3333333;const float G3 = 0.1666667;float sim3(vec3 p) {vec3 s = floor(p + dot(p, vec3(F3)));vec3 x = p - s + dot(s, vec3(G3));vec3 e = step(vec3(0.0), x - x.yzx);vec3 i1 = e*(1.0 - e.zxy);vec3 i2 = 1.0 - e.zxy*(1.0 - e);vec3 x1 = x - i1 + G3;vec3 x2 = x - i2 + 2.0*G3;vec3 x3 = x - 1.0 + 3.0*G3;vec4 w, d;w.x = dot(x, x);w.y = dot(x1, x1);w.z = dot(x2, x2);w.w = dot(x3, x3);w = max(0.6 - w, 0.0);d.x = dot(random3(s), x);d.y = dot(random3(s + i1), x1);d.z = dot(random3(s + i2), x2);d.w = dot(random3(s + 1.0), x3);w *= w;w *= w;d *= w;return dot(d, vec4(52.0));}void main(){vec4 ref = texture(img,vUv);vec4 buffer = texture(buf,vUv);float rnd = sim3(vec3((vUv.x+frame/100.)*500.,(vUv.y-frame/100.)*500.,${ns}));col = buffer;vec4 bgColor = mix(buffer,cBg,.25+rnd/2.);vec4 textureBG = mix(cBg,vec4(vec3(cBg.rgb-vec3(sim3(vec3((vUv.x+frame/1000.)*500.,(vUv.y-frame/1000.)*500.,${ns}))/4.)),1.),sim3(vec3((vUv.x+frame/1000.)*50000.,(vUv.y-frame/1000.)/4.,${ns})));if(ref.g>.0) {col = mix(textureBG,buffer,sim3(vec3((vUv.x+frame/100.)*5.,(vUv.y-frame/100.)*5.,${ns}))/1.);if(rnd<${smudge}) {col = mix(texture(buf,vec2(vUv.x+.005*dirx,vUv.y+.005*diry)),textureBG,rnd/4.);}}if(ref.r>.0) {col = mix(cBg,cF,ref.r);}}`,bufferShader="uniform sampler2D buffer;in vec2 vUv;out vec4 col;void main(){col=texture(buffer,vec2(vUv.x,1.-vUv.y));}",window.onload=init,function(_){var e=_.noise={};function r(_,e,$){this.x=_,this.y=e,this.z=$}r.prototype.dot2=function(_,e){return this.x*_+this.y*e},r.prototype.dot3=function(_,e,$){return this.x*_+this.y*e+this.z*$};var c=[new r(1,1,0),new r(-1,1,0),new r(1,-1,0),new r(-1,-1,0),new r(1,0,1),new r(-1,0,1),new r(1,0,-1),new r(-1,0,-1),new r(0,1,1),new r(0,-1,1),new r(0,1,-1),new r(0,-1,-1)],n=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],l=Array(512),a=Array(512);e.seed=function(_){_>0&&_<1&&(_*=65536),(_=$(_))<256&&(_|=_<<8);for(var e,r=0;r<256;r++)e=1&r?n[r]^255&_:n[r]^_>>8&255,l[r]=l[r+256]=e,a[r]=a[r+256]=c[e%12]},e.seed(0);var o=.5*(i(3)-1),u=(3-i(3))/6,x=1/3,f=1/6;e.simplex2=function(_,e){var r,i,c,n,x,f=(_+e)*o,h=$(_+f),S=$(e+f),s=(h+S)*u,m=_-h+s,y=e-S+s;m>y?(n=1,x=0):(n=0,x=1);var v=m-n+u,E=y-x+u,T=m-1+2*u,B=y-1+2*u,w=a[(h&=255)+l[S&=255]],F=a[h+n+l[S+x]],U=a[h+1+l[S+1]],b=.5-m*m-y*y;b<0?r=0:(b*=b,r=b*b*w.dot2(m,y));var D=.5-v*v-E*E;D<0?i=0:(D*=D,i=D*D*F.dot2(v,E));var A=.5-T*T-B*B;return A<0?c=0:(A*=A,c=A*A*U.dot2(T,B)),70*(r+i+c)},e.simplex3=function(_,e,r){var i,c,n,o,u,h,S,s,m,y,v=(_+e+r)*x,E=$(_+v),T=$(e+v),B=$(r+v),w=(E+T+B)*f,F=_-E+w,U=e-T+w,b=r-B+w;F>=U?U>=b?(u=1,h=0,S=0,s=1,m=1,y=0):F>=b?(u=1,h=0,S=0,s=1,m=0,y=1):(u=0,h=0,S=1,s=1,m=0,y=1):U<b?(u=0,h=0,S=1,s=0,m=1,y=1):F<b?(u=0,h=1,S=0,s=0,m=1,y=1):(u=0,h=1,S=0,s=1,m=1,y=0);var D=F-u+f,A=U-h+f,P=b-S+f,H=F-s+2*f,C=U-m+2*f,X=b-y+2*f,I=F-1+3*f,G=U-1+3*f,L=b-1+3*f,k=a[(E&=255)+l[(T&=255)+l[B&=255]]],M=a[E+u+l[T+h+l[B+S]]],N=a[E+s+l[T+m+l[B+y]]],O=a[E+1+l[T+1+l[B+1]]],W=.6-F*F-U*U-b*b;W<0?i=0:(W*=W,i=W*W*k.dot3(F,U,b));var z=.6-D*D-A*A-P*P;z<0?c=0:(z*=z,c=z*z*M.dot3(D,A,P));var j=.6-H*H-C*C-X*X;j<0?n=0:(j*=j,n=j*j*N.dot3(H,C,X));var Y=.6-I*I-G*G-L*L;return Y<0?o=0:(Y*=Y,o=Y*Y*O.dot3(I,G,L)),32*(i+c+n+o)}}(this);
hreadingPattern?this.twillPattern(this.threading):"triWave"==M.var.threadingPattern?this.triWavePattern(this.threading):"vPattern"==M.var.threadingPattern?this.vPattern(this.threading):"rand"==M.var.threadingPattern&&this.randPattern(this.threading),"twill"==M.var.treadlingPattern?this.twillPattern(this.treadling):"triWave"==M.var.treadlingPattern?this.triWavePattern(this.treadling):"vPattern"==M.var.treadlingPattern?this.vPattern(this.treadling):"rand"==M.var.treadlingPattern&&this.randPattern(this.treadling)}resetPattern(e){const r=e.size.x,t=e.size.y;let a=[];for(let e=0;e<r;e++){let e=[];for(let r=0;r<t;r++)e.push(0);a.push(e)}e.pattern=a,e.mesh=[...a]}getColorGridS(e=M.var.colorWarpCount,r=M.var.colorWeftCount,t=M.var.colorPalette,a="eng"){this.colorWarp.palette=[],this.colorWarp.pattern=[],this.colorWarp.count=e,this.colorWeft.palette=[],this.colorWeft.pattern=[],this.colorWeft.count=r;let o=druckerSatinColors,l=[],i=e+r;l=this.pickSelectedColors(o,i),console.log("selectedColors",l);let n,s=0;for(let e=0;e<this.colorWarp.count;e++)n=l[s],this.colorWarp.palette.push(n.color),M.var.colorWarpNames.push(colorNames[n.name][a]),s++;for(let e=0;e<this.colorWeft.count;e++)n=l[s],this.colorWeft.palette.push(n.color),M.var.colorWeftNames.push(colorNames[n.name][a]),s++;M.var.colorWarp=this.colorWarp.palette,M.var.colorWeft=this.colorWeft.palette;let d=0;for(let e=0;e<this.colorWarp.length;e++)this.colorWarp.pattern.push(this.colorWarp.palette[d]),d++,d==this.colorWarp.palette.length&&(d=0);let c=0;for(let e=0;e<this.colorWeft.length;e++)this.colorWeft.pattern.push(this.colorWeft.palette[c]),c++,c==this.colorWeft.palette.length&&(c=0)}getGoodDisplayColors(){let e=0,r=!0;for(;r;)if(this.getdisplayColors(),r=this.checkDisplayColors(),e++,e>1e3){r=!1;break}}checkDisplayColors(){for(let e=0;e<colorCull.length;e++)if(colorCull[e].includes(getColorFromLang(displayColors.solidName))&&colorCull[e].includes(getColorFromLang(displayColors.groundName)))return!0;return!1}getdisplayColors(){if("Original"==M.var.displayMode)displayColors.treadling.active.cell=M.var.activeColor,displayColors.treadling.active.edge=M.var.activeColor,displayColors.treadling.inactive.cell=M.var.inactiveColor,displayColors.treadling.inactive.edge=M.var.activeColor,displayColors.tieUp.active.cell=M.var.activeColor,displayColors.tieUp.active.edge=M.var.activeColor,displayColors.tieUp.inactive.cell=M.var.inactiveColor,displayColors.tieUp.inactive.edge=M.var.activeColor,displayColors.threading.active.cell=M.var.activeColor,displayColors.threading.active.edge=M.var.activeColor,displayColors.threading.inactive.cell=M.var.inactiveColor,displayColors.threading.inactive.edge=M.var.activeColor,displayColors.background=M.var.backgroundColor,displayColors.solid=M.var.activeColor,displayColors.ground=M.var.inactiveColor;else if("Inverse"==M.var.displayMode){let e,r,t=16711935,a=16711680;1==this.colorWeft.palette.length&&this.colorWarp.palette.length>=2?(r=0,e=randChoice(Array.from({length:this.colorWeft.palette.length},(e,r)=>r)),t=this.colorWarp.palette[r],a=this.colorWeft.palette[e],displayColors.backgroundName=M.var.colorWarpNames[r],displayColors.solidName=M.var.colorWarpNames[r],displayColors.groundName=M.var.colorWeftNames[e]):(r=0,e=randChoice(Array.from({length:this.colorWarp.palette.length},(e,r)=>r)),t=this.colorWeft.palette[r],a=this.colorWarp.palette[e],displayColors.backgroundName=M.var.colorWeftNames[r],displayColors.solidName=M.var.colorWeftNames[r],displayColors.groundName=M.var.colorWarpNames[e]),displayColors.treadling.active.cell=a,displayColors.treadling.active.edge=!1,displayColors.treadling.inactive.cell=t,displayColors.treadling.inactive.edge=!1,displayColors.tieUp.active.cell=a,displayColors.tieUp.active.edge=!1,displayColors.tieUp.inactive.cell=t,displayColors.tieUp.inactive.edge=!1,displayColors.threading.active.cell=a,displayColors.threading.active.edge=!1,displayColors.threading.inactive.cell=t,displayColors.threading.inactive.edge=!1,displayColors.background=t,displayColors.solid=t,displayColors.ground=a}else if("Grid"==M.var.displayMode){let e,r,t=16711935,a=16711680;1==this.colorWeft.palette.length&&this.colorWarp.palette.length>=2?(r=randChoice(Array.from({length:this.colorWarp.palette.length},(e,r)=>r)),e=randChoice(Array.from({length:this.colorWeft.palette.length},(e,r)=>r)),t=this.colorWarp.palette[r],a=this.colorWeft.palette[e],displayColors.backgroundName=M.var.colorWarpNames[r],displayColors.solidName=M.var.colorWarpNames[r],displayColors.groundName=M.var.colorWeftNames[e]):(r=randChoice(Array.from({length:this.colorWeft.palette.length},(e,r)=>r)),e=randChoice(Array.from({length:this.colorWarp.palette.length},(e,r)=>r)),t=this.colorWeft.palette[r],a=this.colorWarp.palette[e],displayColors.backgroundName=M.var.colorWeftNames[r],displayColors.solidName=M.var.colorWeftNames[r],displayColors.groundName=M.var.colorWarpNames[e]),displayColors.treadling.active.cell=t,displayColors.treadling.active.edge=t,displayColors.treadling.inactive.cell=a,displayColors.treadling.inactive.edge=t,displayColors.tieUp.active.cell=t,displayColors.tieUp.active.edge=t,displayColors.tieUp.inactive.cell=a,displayColors.tieUp.inactive.edge=t,displayColors.threading.active.cell=t,displayColors.threading.active.edge=t,displayColors.threading.inactive.cell=a,displayColors.threading.inactive.edge=t,displayColors.background=t,displayColors.solid=t,displayColors.ground=a}else if("Weave Colors"==M.var.displayMode){let e,r,t=16711935,a=16711680;1==this.colorWeft.palette.length&&this.colorWarp.palette.length>=2?(r=randChoice(Array.from({length:this.colorWarp.palette.length},(e,r)=>r)),e=randChoice(Array.from({length:this.colorWeft.palette.length},(e,r)=>r)),t=this.colorWarp.palette[r],a=this.colorWeft.palette[e],displayColors.backgroundName=M.var.colorWarpNames[r],displayColors.solidName=M.var.colorWarpNames[r],displayColors.groundName=M.var.colorWeftNames[e]):(r=randChoice(Array.from({length:this.colorWeft.palette.length},(e,r)=>r)),e=randChoice(Array.from({length:this.colorWarp.palette.length},(e,r)=>r)),t=this.colorWeft.palette[r],a=this.colorWarp.palette[e],displayColors.backgroundName=M.var.colorWeftNames[r],displayColors.solidName=M.var.colorWeftNames[r],displayColors.groundName=M.var.colorWarpNames[e]);let o=this.colorWarp.palette,l=this.colorWeft.palette;displayColors.treadling.active.cell=l,displayColors.treadling.active.edge=!1,displayColors.treadling.inactive.cell=t,displayColors.treadling.inactive.edge=!1,displayColors.tieUp.active.cell=t,displayColors.tieUp.active.edge=!1,displayColors.tieUp.inactive.cell=a,displayColors.tieUp.inactive.edge=!1,displayColors.threading.active.cell=o,displayColors.threading.active.edge=!1,displayColors.threading.inactive.cell=t,displayColors.threading.inactive.edge=!1,displayColors.background=t,displayColors.solid=t,displayColors.ground=a}renderer.setClearColor(displayColors.background)}visualizeColorGrids(){let e=new THREE.PlaneGeometry(M.var.cellSize,M.var.cellSize);for(let r=0;r<this.colorWarp.length;r++){const t=new THREE.MeshBasicMaterial({color:this.colorWarp.pattern[r]});let a=new THREE.Mesh(e,t);a.position.fromArray(this.colorWarp.posOffset[0][r]),a.userData.myInfo={type:"cell",deleteFlag:this.colorWarp.name},this.colorWarp.mesh[r]=a,a.visible=M.var.colorWarpVisible,scene.add(a)}for(let r=0;r<this.colorWeft.length;r++){const t=new THREE.MeshBasicMaterial({color:this.colorWeft.pattern[r]});let a=new THREE.Mesh(e,t);a.position.fromArray(this.colorWeft.posOffset[r][0]),a.userData.myInfo={type:"cell",deleteFlag:this.colorWeft.name},this.colorWeft.mesh[r]=a,a.visible=M.var.colorWeftVisible,scene.add(a),r>this.colorWeft.length/this.colorWeft.offSet.y&&(a.visible=!1)}}pickSelectedColors(e,r){let t=[],a=[];for(let e=0;e<palettes[r].length;e++)M.var.colorSelectName==palettes[r][e].name&&(t.push(e),a.push(palettes[r][e].p));let o=rWeightedItems(t,a),l=palettes[r][o].name,i=palettes[r][o].arr,n=[];for(let t=0;t<r;t++)n.push({color:new THREE.Color(e[i[t]]),name:i[t]});return shuffleArray(n),M.var.colorGroupName=l,n}twillPattern(e=this.threading,r=M.var.twillSlope,t=M.var.twillOff,a){this.threading.pattern,this.treadling.pattern;if(e==this.threading){let e=M.var.threadingSlope,r=(M.var.threadingOffset,M.var.threadingTranslate),t=this.threading.size.x,a=this.threading.size.y+1,o=this.threading.pattern;for(let l=0;l<a-1;l++){let a=Math.floor((e*l+r)%t);o[a][l]=1}}else if(e==this.treadling){let e=M.var.treadlingSlope,r=(M.var.treadlingOffset,M.var.treadlingTranslate),t=this.treadling.size.y,a=this.treadling.size.x+1,o=this.treadling.pattern;for(let l=0;l<a-1;l++){let a=Math.floor((e*l+r)%t);o[l][a]=1}}}vPattern(e=this.threading){let r=this.threading.pattern,t=this.treadling.pattern;if(e==this.threading){let e=1,t=(M.var.threadingOffset,0);for(let a=0;a<M.var.NUM_THREADS;a++)r[t][a]=1,t+=e,t==M.var.NUM_SHAFTS-1&&(e*=-1),0==t&&a>0&&(e*=-1)}else if(e==this.treadling){let e=1,r=(M.var.treadlingOffset,0);for(let a=0;a<M.var.NUM_PICKS;a++)t[a][r]=1,r+=e, r==M.var.NUM_TREADLES-1&&(e*=-1),0==r&&a>0&&(e*=-1)}}triWavePattern(e=this.threading){this.threading.pattern,this.treadling.pattern;if(e==this.threading){let e=M.var.threadingSlope,r=(M.var.threadingOffset,M.var.threadingTranslate),t=this.threading.size.x,a=this.threading.size.y+1,o=this.threading.pattern;for(let l=0;l<a-1;l++){let a=Math.abs(Math.floor(triangleWave(l,e,t,r)));o[a][l]=1}}else if(e==this.treadling){let e=M.var.treadlingSlope,r=(M.var.treadlingOffset,M.var.treadlingTranslate),t=this.treadling.size.y,a=this.treadling.size.x+1,o=this.treadling.pattern;for(let l=0;l<a-1;l++){let a=Math.abs(Math.floor(triangleWave(l,e,t,r)));o[l][a]=1}}}randPattern(e=this.threading){let r=this.threading.pattern,t=this.treadling.pattern;if(e==this.threading){let e=Math.floor(rand()*M.var.NUM_SHAFTS),t=randChoice([-1,1]),a=0;a=e;for(let o=0;o<Math.floor(M.var.NUM_THREADS/2);o++){if(r[a][o]=1,a+=t,a>M.var.NUM_SHAFTS-1){let r=0;for(;0==r;)e=Math.floor(rand()*M.var.NUM_SHAFTS),e!=M.var.NUM_SHAFTS-1&&(r=1);t=randChoice([-1,1]),a=e}if(a<0){let r=0;for(;0==r;)e=Math.floor(rand()*M.var.NUM_SHAFTS),0!=e&&(r=1);t=randChoice([-1,1]),a=e}}for(let e=Math.floor(M.var.NUM_THREADS/2);e<M.var.NUM_THREADS;e++)for(let t=0;t<M.var.NUM_SHAFTS;t++)r[t][e]=r[t][e-Math.floor(M.var.NUM_THREADS/2)]}else if(e==this.treadling)for(let e=0;e<M.var.NUM_PICKS;e++)for(let a=0;a<M.var.NUM_TREADLES;a++)t[e][a]=r[a][e]}offsetPattern(e){const r=e.size.x,t=e.size.y;let a;a="treadling"==e.name||"colorWeft"==e.name||"drawdownWarp"==e.name||"drawdownWeft"==e.name?(M.var.verticalSpacing-1)/2:0;let o=[];for(let l=0;l<r;l++){let r=[];for(let o=0;o<t;o++){let t=[o*M.var.cellSize*e.offSet.x+e.position.x+(1-e.offSet.y)/2+a,-l*M.var.cellSize*e.offSet.y+e.position.y+(1-e.offSet.y)/2,0];r.push(t)}o.push(r)}e.posOffset=o}caTieUpGrid(){let e=0,r=!1;for(;(!r||e<1e3)&&(this.makeCA(this),r=this.checkSequentialRuns(5,this.tieUp.pattern,!1),!r);)e++;e>=1e3&&console.error("CA tie up count",e)}makeCA(){const e=()=>Array.from({length:14},()=>Math.round(rand()));let r=!0;for(;r;){let t=0;this.theRules=e(),myCa=new CA(this.theRules,M.var.NUM_SHAFTS,M.var.NUM_TREADLES,scene),myCa.randomSeed(1),myCa.restart();for(let e=0;e<12;e++)myCa.generate();this.tieUp.pattern=myCa.oldBoard;let a=0;for(let e=0;e<this.tieUp.pattern.length;e++)for(let r=0;r<this.tieUp.pattern[e].length;r++)1==this.tieUp.pattern[e][r]&&a++;t++,a>M.var.NUM_SHAFTS*M.var.NUM_SHAFTS*.2&&a<M.var.NUM_SHAFTS*M.var.NUM_SHAFTS*.8?r=!1:t>100&&(r=!1)}}visualizeGrid(e){let r=e.pattern,t=e.name,a=new THREE.PlaneGeometry(M.var.cellSize,M.var.cellSize);for(let o=0;o<r.length;o++)for(let l=0;l<r[o].length;l++){let i=fetchColors(t,r,o,l);const n=new THREE.MeshBasicMaterial({color:i.cell});let s=new THREE.Mesh(a,n);if(s.position.fromArray(e.posOffset[o][l]),s.userData.myInfo={myGrid:r,myCol:l,myRow:o,type:"cell",deleteFlag:t},scene.add(s),0!=i.edge){const a=new THREE.EdgesGeometry(s.geometry),n=new THREE.LineSegments(a,new THREE.LineBasicMaterial({color:i.edge}));n.position.fromArray(e.posOffset[o][l]),n.position.z=10,n.userData.myInfo={myGrid:r,myCol:l,myRow:o,type:"gridline",deleteFlag:t},scene.add(n),o>r.length/e.offSet.y&&(n.visible=!1)}o>r.length/e.offSet.y&&(s.visible=!1)}}computeDrawdown(e=this.threading.pattern,r=this.tieUp.pattern,t=this.treadling.pattern){let a=[],o=0;for(let l of t){let t=new Array(M.var.NUM_THREADS).fill(0),i=[];for(let e=0;e<l.length;e++)if(1===l[e])for(let t=0;t<r[e].length;t++)1===r[e][t]&&i.push(t);for(let r=0;r<M.var.NUM_THREADS;r++)for(let a of i)if(1===e[a][r]){t[r]=1;break}a.push(t);let n,s=0;if(o<=M.var.NUM_TREADLES){1==t[0]?(wPat+=" U ",wPat_print+=" U ",n=1):(wPat+=" O ",wPat_print+=" O ",n=0);for(let e=0;e<M.var.NUM_SHAFTS;e++)1==n&&1==t[e]||0==n&&0==t[e]||(1==n&&0==t[e]?(wPat=wPat+s+" O ",wPat_print=wPat_print+s+" O ",n=0,s=0):0==n&&1==t[e]&&(wPat=wPat+s+" U ",wPat_print=wPat_print+s+" U ",n=1,s=0)),s++;wPat=wPat+s+" REPEAT",wPat="<div>"+wPat+"</div>\n",wPat_print=wPat_print+s+" REPEAT\n"}o++}wPat+="REPEAT",wPat_print+="REPEAT",this.drawdownWarp.pattern=a,this.drawdownWeft.pattern=a;let l=this.checkSequentialRuns(10),i=100;l?this.drawdownCheckCount=0:this.drawdownCheckCount<i?(this.resetPattern(this.tieUp),this.caTieUpGrid(),this.computeDrawdown(),this.drawdownCheckCount++):console.warn(`reached Maximum drawdown check of ${i}`)}visualizeDrawdown(e=this.drawdownWarp){let r=e.pattern,t=(e.position.x,e.position.y,0),a=new THREE.PlaneBufferGeometry(M.var.cellSize,M.var.cellSize),o=.9999;a=new THREE.PlaneBufferGeometry(M.var.cellSize*this.drawdownWarp.offSet.x,M.var.cellSize*this.drawdownWarp.offSet.y);for(let e=0;e<r.length;e++)for(let l=0;l<M.var.NUM_THREADS;l++){let i,n;i=this.colorWarp.pattern[l],t=this.drawdownWarp.pattern[e][l];let s=Math.round(220*i.r),d=Math.round(220*i.g),c=Math.round(220*i.b);n=new THREE.Color(`rgb(${s}, ${d}, ${c})`);const h=new THREE.MeshBasicMaterial({color:i}),p=new THREE.Mesh(a,h);let g,v;if(p.position.fromArray(this.drawdownWarp.posOffset[e][l]),p.position.z=2*t,scene.add(p),M.var.drawEdges){const t=p.geometry.attributes.position.array;let a=t[1]+M.var.verticalSpacing;0!=e&&e!=Math.ceil((r.length-1)/M.var.verticalSpacing)||(a=.5);const i=new THREE.Vector3(t[0]*o,+a,t[2]).add(p.position),s=new THREE.Vector3(t[3]*o,+a,t[5]).add(p.position),d=new THREE.Vector3(t[6]*o,-a,t[8]).add(p.position),c=new THREE.Vector3(t[9]*o,-a,t[11]).add(p.position);1===r[e][l]&&(g=new THREE.Line((new THREE.BufferGeometry).setFromPoints([i,d]),new THREE.LineBasicMaterial({color:n})),v=new THREE.Line((new THREE.BufferGeometry).setFromPoints([c,s]),new THREE.LineBasicMaterial({color:n})),scene.add(g),scene.add(v))}e>r.length/this.drawdownWeft.offSet.y&&(p.visible=!1,M.var.drawEdges&&(g&&(g.visible=!1),v&&(v.visible=!1)))}a=new THREE.PlaneBufferGeometry(M.var.cellSize,M.var.cellSize);for(let e=0;e<r.length;e++)for(let o=0;o<M.var.NUM_THREADS;o++){let l,i;l=this.colorWeft.pattern[o],t=this.drawdownWeft.pattern[e][o];let n=Math.round(220*l.r),s=Math.round(220*l.g),d=Math.round(220*l.b);i=new THREE.Color(`rgb(${n}, ${s}, ${d})`);const c=new THREE.MeshBasicMaterial({color:l}),h=new THREE.Mesh(a,c);let p,g;if(h.position.fromArray(this.drawdownWeft.posOffset[o][e]),h.position.z=t,scene.add(h),M.var.drawEdges){const t=h.geometry.attributes.position.array,a=new THREE.Vector3(t[0],t[1],t[2]).add(h.position),l=new THREE.Vector3(t[3],t[4],t[5]).add(h.position),n=new THREE.Vector3(t[6],t[7],t[8]).add(h.position),s=new THREE.Vector3(t[9],t[10],t[11]).add(h.position);if(10===r[e][o]){}else p=new THREE.Line((new THREE.BufferGeometry).setFromPoints([a,l]),new THREE.LineBasicMaterial({color:i})),g=new THREE.Line((new THREE.BufferGeometry).setFromPoints([n,s]),new THREE.LineBasicMaterial({color:i})),scene.add(p),scene.add(g)}o>r.length/this.drawdownWeft.offSet.y&&(h.visible=!1,M.var.drawEdges&&(p&&(p.visible=!1),g&&(g.visible=!1)))}}removeDrawdown(){let e=[...scene.children];for(let r=0;r<e.length;r++){let t=e[r];void 0===t.userData.myInfo&&scene.remove(t)}}removeGrid(e=["none"]){Array.isArray(e)||(e=[e]);let r=[...scene.children];for(let t=0;t<r.length;t++){let a=r[t];try{e.includes(a.userData.myInfo.deleteFlag)&&scene.remove(a)}catch{}}console.log("removed grid")}addDrawdownText(){const e=document.createElement("div");e.id="drawdownText",e.innerHTML=wPat;const r=document.querySelector("canvas");r?r.insertAdjacentElement("afterend",e):console.error("Canvas not found. Make sure this function is called after the canvas has been added to the DOM.")}checkSequentialRuns(e=M.var.maxRun,r=this.drawdownWarp.pattern,t=!0){const a=r.length,o=r[0].length;for(let l=0;l<a;l++){let a=1;for(let i=1;i<o;i++)if(r[l][i]===r[l][i-1]){if(a++,a>=e)return t&&this.sequenceRepair(!1),!1}else a=1}for(let l=0;l<o;l++){let o=1;for(let i=1;i<a;i++)if(r[i][l]===r[i-1][l]){if(o++,o>=e)return t&&this.sequenceRepair(!1),!1}else o=1}return t&&this.sequenceRepair(!0),!0}sequenceRepair(e){e?(renderer.setClearColor(displayColors.background),M.var.passedLengthTest=!0):M.var.passedLengthTest=!1}}class CA{constructor(e,r,t,a){this.oldBoard=[],this.newBoard=[],this.on=[],this.genCount=0,this.gens=M.var.maxGen+1,this.seeds=[],this.COLS=t,this.ROWS=r,this.rule=e,this.scene=a,this.oldBoard=Array.from({length:this.ROWS},()=>Array(this.COLS).fill(0)),this.newBoard=Array.from({length:this.ROWS},()=>Array(this.COLS).fill(0)),this.seeds=Array.from({length:this.ROWS},()=>Array(this.COLS).fill(0))}reset(){this.oldBoard=Array.from({length:this.ROWS},()=>Array(this.COLS).fill(0)),this.genCount=0}restart(){this.genCount=0,this.oldBoard=Array.from({length:this.ROWS},()=>Array(this.COLS).fill(0)),this.newBoard=Array.from({length:this.ROWS},()=>Array(this.COLS).fill(0));for(let e=0;e<this.ROWS;e++)for(let r=0;r<this.COLS;r++)1==this.seeds[e][r]&&(this.oldBoard[e][r]=1);this.seeds=Array(this.ROWS).fill(Array(this.COLS).fill(0)),this.genCount++}randomSeed(e){this.on[this.genCount]=[];let r=Math.floor(this.ROWS/2),t=Math.floor(this.COLS/2);this.seeds[r][t]=1,this.seeds[r+2][t+2]=1,this.seeds[r-2][t-2]=1;let a=rand();if(a<=.33)for(let a=0;a<e;a++){let e=Math.round(.33*this.ROWS),a=Math.floor(rand()*(2*e+1))-e+r,o=Math.floor(rand()*(2*e+1))-e+t;a<0||o<0||a>this.ROWS-1||o>this.COLS-1||(this.seeds[a][o]=1)}this.genCount++}generate(){this.on[this.genCount]=[];for(let e=0;e<this.ROWS;e++)for(let r=0;r<this.COLS;r++){let t=0;const a=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]];for(let o=0;o<a.length;o++){const[l,i]=a[o],n=e+l,s=r+i;n>=0&&n<this.ROWS&&s>=0&&s<this.COLS&&1===this.oldBoard[n][s]&&t++}1==this.oldBoard[e][r]&&(0==t&&(this.newBoard[e][r]=this.rule[0]),1==t&&(this.newBoard[e][r]=this.rule[1]),2==t&&(this.newBoard[e][r]=this.rule[2]),3==t&&(this.newBoard[e][r]=this.rule[3]),4==t&&(this.newBoard[e][r]=this.rule[4]),5==t&&(this.newBoard[e][r]=this.rule[5]),6==t&&(this.newBoard[e][r]=this.rule[6])),0==this.oldBoard[e][r]&&(0==t&&(this.newBoard[e][r]=this.rule[7]),1==t&&(this.newBoard[e][r]=this.rule[8]),2==t&&(this.newBoard[e][r]=this.rule[9]),3==t&&(this.newBoard[e][r]=this.rule[10]),4==t&&(this.newBoard[e][r]=this.rule[11]),5==t&&(this.newBoard[e][r]=this.rule[12]),6==t&&(this.newBoard[e][r]=this.rule[13]))}let e=this.oldBoard;this.oldBoard=this.newBoard,this.newBoard=e,this.genCount++}}init(),render(),document.addEventListener("keypress",function(e){"s"===e.key||"S"==e.key?saveLargeCanvas("Enlace",2400):"t"!==e.key&&"T"!=e.key||(M.var.textVisible=!M.var.textVisible,toggleText())});
///////////////////////////////////////////// // Enlace ///////////////////////////////////////////// // Aranda\Lasch // Jesse Bassett // Chris Lasch // 2/5/2024 function getColorFromLang(e){for(let r in colorNames)if(colorNames[r].eng===e)return r}function init(){scene=new THREE.Scene,renderer=new THREE.WebGLRenderer({antialias:!1}),renderer.setPixelRatio(devicePixelRatio);let e=document.getElementById("container");renderer.setClearColor(displayColors.background),e.appendChild(renderer.domElement),renderer.domElement.style.zIndex="-1",camera=new THREE.OrthographicCamera(-M.var.zoom,M.var.zoom,M.var.zoom,-M.var.zoom,1,1e3),camera.position.set(0,0,35),camera.lookAt(0,0,0),raycaster=new THREE.Raycaster,mouse=new THREE.Vector2,weave=new weavedraft,updateCamera(),createTableSnippet(formatTextforTable(),displayColors.ground),console.log(weave),onWindowResize(),window.addEventListener("resize",onWindowResize,!1)}function animate(){requestAnimationFrame(animate),render()}function render(){renderer.render(scene,camera)}function onWindowResize(){updateCamera(),styleSquareDiv(),styleTextUpdate(),render()}function updateCamera(){let e=new THREE.Box3,r=e.getSize(new THREE.Vector3),t=e.getCenter(new THREE.Vector3);r=new THREE.Vector3(58,59,10),t=new THREE.Vector3(1.5,-9,5),DIM.x=DIM.y=Math.min(window.innerWidth,window.innerHeight),renderer.setSize(DIM.x,DIM.y);let a,o=DIM.x/DIM.y,l=r.x/r.y,i=1.4;l>o?(a=r.x/i,camera.right=a,camera.top=a/o,camera.bottom=-a/o):(a=r.y/i,camera.top=a,camera.bottom=-a,camera.left=-a*o,camera.right=a*o),camera.position.set(t.x,t.y,35),camera.lookAt(t),camera.updateProjectionMatrix()}function saveCanvas(e=M.seed){let r=e+".png",t=renderer.domElement.toDataURL(),a=document.createElement("a");a.href=t,a.download=r,a.target="_blank",document.body.appendChild(a),a.click(),document.body.removeChild(a),console.log("saved Canvas")}function saveLargeCanvas(e,r=2400){let t=document.createElement("canvas");t.width=r,t.height=r;let a=new THREE.WebGLRenderer({canvas:t,antialias:!1});a.setPixelRatio(devicePixelRatio),a.setPixelRatio(2),a.setSize(r,r),a.setClearColor(displayColors.background),a.render(scene,camera);let o=t.toDataURL("image/png"),l=document.createElement("a");l.href=o,l.download=e+".png",l.target="_blank",document.body.appendChild(l),l.click(),document.body.removeChild(l),a.dispose(),console.log("Saved large canvas")}function saveText(e=M.seed){var r=wPat_print,t=new Blob([r],{type:"text/plain"}),a=URL.createObjectURL(t),o=document.createElement("a");o.href=a,o.download=e+".txt",document.body.appendChild(o),o.click(),document.body.removeChild(o),console.log("Saved Image ")}function createText(){const e=document.querySelector("canvas"),r=e.parentElement;let t=document.getElementById("overlay");t||(t=document.createElement("div"),t.id="overlay",t.style.position="absolute",t.style.top=e.offsetTop+"px",t.style.left=e.offsetLeft+"px",t.style.width=e.offsetWidth+"px",t.style.height=e.offsetHeight+"px",r.appendChild(t));const a=document.createElement("div");a.id="table-wrapper";let o=["Pattern:","Colors:","Palette:","Bindings:","Spacing:","Instructions:"],l=0;const i=document.createElement("table");for(let e=0;e<3;e++){const e=document.createElement("tr");for(let r=0;r<2;r++){const r=document.createElement("td");r.textContent=`${o[l]} ${l}`,e.appendChild(r),l++}i.appendChild(e)}i.style.width="100%",i.style.height="100%",i.style.borderCollapse="collapse",a.appendChild(i),t.appendChild(a)}function formatJson(){delete M.var.warpColors,delete M.var.weftColors,delete M.var.theRules,delete M.var.activeColor,delete M.var.inactiveColor}function saveJson(e=M.seed){let r=e+".json",t=M;downloadFile(t,r),console.log("saved Json!")}function downloadFile(e,r){var t=r.split("."),a=t[t.length-1],o="json"==a?new Blob([JSON.stringify(e,null,2).replace(/\\n/g,"\n").replace(/\\"/g,'"')],{type:"application/json"}):new Blob([Papa.unparse(e)],{type:"text/plain"}),l=document.createElement("a");document.body.appendChild(l),l.download=r,l.href=window.URL.createObjectURL(o),l.click(),l.parentNode.removeChild(l)}function addGUI(){}function rand(e=0,r=1){return e+(r-e)*R.random_dec()}function rInt(e,r){return e<r?Math.floor(rand(e,r+1)):Math.floor(rand(r,e+1))}function randChoice(e){return e[rInt(0,e.length-1)]}function rWeightedItems(e,r){let t={select:rand(),index:null,sum:0,mode:null,tempMin:0,tempMax:0};for(let e=0;e<r.length;e++)t.sum+=r[e];for(let a=0;a<e.length;a++)t.tempMax=r[a]/t.sum+t.tempMin,t.tempMin<=t.select&&t.select<t.tempMax&&0!=r[a]&&(t.index=a),t.tempMin+=r[a]/t.sum;return e[t.index]}function genTokenData(e=0){let r={},t="0x";for(var a=0;a<64;a++)t+=Math.floor(16*seedRand()).toString(16);return r.hash=t,r.tokenId=(1e6*e+Math.floor(1e3*seedRand())).toString(),r}function sfc32(e,r,t,a){return function(){e>>>=0,r>>>=0,t>>>=0,a>>>=0;var o=e+r|0;return e=r^r>>>9,r=t+(t<<3)|0,t=t<<21|t>>>11,a=a+1|0,o=o+a|0,t=t+o|0,(o>>>0)/4294967296}}function cyrb128(e){let r=1779033703,t=3144134277,a=1013904242,o=2773480762;for(let l,i=0;i<e.length;i++)l=e.charCodeAt(i),r=t^Math.imul(r^l,597399067),t=a^Math.imul(t^l,2869860233),a=o^Math.imul(a^l,951274213),o=r^Math.imul(o^l,2716044179);return r=Math.imul(a^r>>>18,597399067),t=Math.imul(o^t>>>22,2869860233),a=Math.imul(r^a>>>17,951274213),o=Math.imul(t^o>>>19,2716044179),[(r^t^a^o)>>>0,(t^r)>>>0,(a^r)>>>0,(o^r)>>>0]}function triangleWave(e,r,t,a){if(t<=0)throw new Error("Height must be positive");const o=(e+a)*r,l=2*t-2,i=o%l;return t%2==0?i<t?i:i<l-t?t-1:i-l:i<t?i:l-i}function shuffleArray(e){for(let r=e.length-1;r>0;r--){const t=Math.floor(rand(0,r)),a=e[r];e[r]=e[t],e[t]=a}return e}function shuffleArrayRandom(e){for(let r=e.length-1;r>0;r--){const t=Math.floor(Math.random()*r),a=e[r];e[r]=e[t],e[t]=a}return e}function fetchColors(e,r,t,a){let o,l,i=M.var.displayMode;if("Original"==i)o=1===r[t][a]?M.var.activeColor:M.var.inactiveColor,l=M.var.activeColor;else if("Inverse"==i||"Grid"==i)1===r[t][a]?(o=displayColors[e].active.cell,l=displayColors[e].active.edge):(o=displayColors[e].inactive.cell,l=displayColors[e].inactive.edge);else if("Weave Colors"==i)if("tieUp"==e)1===r[t][a]?(o=displayColors[e].active.cell,l=displayColors[e].active.edge):(o=displayColors[e].inactive.cell,l=displayColors[e].inactive.edge);else{let i;"threading"==e?i=a%displayColors[e].active.cell.length:"treadling"==e&&(i=t%displayColors[e].active.cell.length);let n=displayColors[e].active.cell[i];1===r[t][a]?(o=n,l=n==displayColors.background&&displayColors.tieUp.inactive.cell):(o=displayColors[e].inactive.cell,l=displayColors[e].inactive.edge)}return{cell:o,edge:l}}function toggleText(){"block"==squareDiv.style.display?squareDiv.style.display="none":squareDiv.style.display="block"}function styleSquareDiv(){let e=DIM.x;M.var.textVisible?squareDiv.style.display="block":squareDiv.style.display="none",squareDiv.style.position="absolute",squareDiv.style.height=e+"px",squareDiv.style.width=e+"px",squareDiv.style.left="50%",squareDiv.style.top="50%",squareDiv.style.transform="translate(-50%, -50%)",styleInnerDiv()}function styleInnerDiv(){innerDiv.style.position="absolute",innerDiv.style.bottom="0",innerDiv.style.width="68.5%",innerDiv.style.height="14.8%",innerDiv.style.left="50%",innerDiv.style.transform="translateX(-50%)",innerDiv.style.zIndex="5"}function createTableSnippet(e=["","","","",""],r="black",t=innerDiv){let a=["Pattern: ","Warp Colors: ","Palette: ","Weft Colors: ","Spacing: ","Bindings: "];for(let r=0;r<e.length;r++)a[r]+=e[r];r instanceof THREE.Color&&(r=r.getHexString());let o=document.createElement("table"),l=document.createElement("tbody");o.appendChild(l),o.style.width="100%",o.style.tableLayout="fixed",o.style.zIndex="5";var i=[[a[0],a[1]],[a[2],a[3]],[a[4],a[5]]];i.forEach(function(e,t){let a=document.createElement("tr");e.forEach(function(e){let t=document.createElement("td");t.innerText=e,t.style.color="#"+r,t.style.whiteSpace="nowrap",a.appendChild(t),tabelCells.push(t)}),l.appendChild(a)}),t?t.appendChild(o):console.error("Parent element not found.")}function styleTextUpdate(){let e;e=DIM.x>1e3?"18px":DIM.x>600?"16px":DIM.x>450?"14px":"12px",tabelCells.forEach(function(r){r.style.fontSize=e,DIM.x<300?r.style.display="none":r.style.display="table-cell"})}function formatTextforTable(){M.var.colorWarpNames,M.var.colorWeftNames;let e="",r="",t=[];for(let r of M.var.colorWarpNames)e+=`${r}, `;e=e.slice(0,-1),e=e.slice(0,-1);for(let e of M.var.colorWeftNames)r+=`${e}, `;return r=r.slice(0,-1),r=r.slice(0,-1),t[0]=M.var.preset,t[1]=e,t[2]=M.var.colorSelectName,t[3]=r,t[4]=M.var.verticalSpacingType,t[5]=displayColors.backgroundName,t}let credits=shuffleArrayRandom(["Benjamin Aranda","Chris Lasch","Jesse Bassett","Joaquin Bonifaz"]);console.log("Enlace by ArandaLasch"),console.log(`${credits[0]}, ${credits[1]}, ${credits[2]}, ${credits[3]}`),console.log("In collaboration with Trame and Maison Louis Drucker "),console.log("");class Random{constructor(){this.useA=!1;let e=function(e){let r=parseInt(e.substr(0,8),16),t=parseInt(e.substr(8,8),16),a=parseInt(e.substr(16,8),16),o=parseInt(e.substr(24,8),16);return function(){r|=0,t|=0,a|=0,o|=0;let e=(r+t|0)+o|0;return o=o+1|0,r=t^t>>>9,t=a+(a<<3)|0,a=a<<21|a>>>11,a=a+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substr(2,32)),this.prngB=new e(tokenData.hash.substr(34,32));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_bool(e){return this.random_dec()<e}random_num(e,r){return e+(r-e)*this.random_dec()}random_int(e,r){return Math.floor(this.random_num(e,r+1))}}R=new Random;let gui,newDiv=document.createElement("div");newDiv.id="container",newDiv.style.display="inline-block",newDiv.style.margin="0",newDiv.style.width="100%",newDiv.style.height="100%",document.body.appendChild(newDiv),document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden";let renderer,camera,scene,raycaster,mouse,myCa,devicePixelRatio=window.devicePixelRatio||1,wPat="",wPat_print="",DIM={x:Math.min(window.innerWidth,window.innerHeight)};DIM.y=DIM.x;let tabelCells=[],squareDiv=document.createElement("div"),innerDiv=document.createElement("div");squareDiv.appendChild(innerDiv),newDiv.appendChild(squareDiv);let weave,displayColors={treadling:{active:{cell:16777215,edge:0},inactive:{cell:16777215,edge:0}},tieUp:{active:{cell:16777215,edge:0},inactive:{cell:16777215,edge:0}},threading:{active:{cell:16777215,edge:0},inactive:{cell:16777215,edge:0}},background:0,backgroundName:"White"},druckerSatinColors={oliveGreen:3686464,tenderGreen:5335383,appleGreen:10141309,emeraldGreen:1206126,purpleMaroon:4859707,carminRed:6041134,scarletRed:10625597,rubyRed:5975353,terracotta:8929589,pink:10966369,lightPink:12019057,black:2171945,grey:6909033,blueGrey:12566711,white:14870756,royalBlue:2243701,ultraMarine:1648699,lavenderBlue:3489100,lagoonBlue:30409,softBlue:5604238,waterGreen:10663343,chocolate:3880760,weatheredGold:6246469,beige:10060646,taupe:10390910,ivory:14339747,orange:13128752,peach:14527854,yellowTumeric:13080618,brightYellow:14660864},colorNames={oliveGreen:{eng:"Olive Green",fr:"Vert Olive"},tenderGreen:{eng:"Tender Green",fr:"Vert Tendre"},appleGreen:{eng:"Apple Green",fr:"Vert Pomme"},emeraldGreen:{eng:"Emerald Green",fr:"Vert Emeraude"},purpleMaroon:{eng:"Purple Maroon",fr:"Bordeaux Violet"},carminRed:{eng:"Carmin Red",fr:"Rouge Carmin"},scarletRed:{eng:"Scarlet Red",fr:"Rouge Ecarlate"},rubyRed:{eng:"Ruby Red",fr:"Rouge Rubis"},terracotta:{eng:"Terracotta",fr:"Terracotta"},pink:{eng:"Pink",fr:"Rose"},lightPink:{eng:"Light Pink",fr:"Rose Pastel"},black:{eng:"Black",fr:"Noir"},grey:{eng:"Grey",fr:"Gris"},blueGrey:{eng:"Blue Grey",fr:"Gris Bleute"},white:{eng:"White",fr:"Blanc"},royalBlue:{eng:"Royal Blue",fr:"Bleu Royal"},ultraMarine:{eng:"Ultra Marine",fr:"Bleu Outrener"},lavenderBlue:{eng:"Lavender Blue",fr:"Bleu Lavande"},lagoonBlue:{eng:"Lagoon Blue",fr:"Bleu Lagon"},softBlue:{eng:"Soft Blue",fr:"Bleu Doux"},waterGreen:{eng:"Water Green",fr:"Vert D'Eau"},chocolate:{eng:"Chocolate",fr:"Chocolat"},weatheredGold:{eng:"Weathered Gold",fr:"Or Patine"},beige:{eng:"Beige",fr:"Beige"},taupe:{eng:"Taupe",fr:"Taupe"},ivory:{eng:"Ivory",fr:"Ivoire"},orange:{eng:"Orange",fr:"Orange"},peach:{eng:"Peach",fr:"Peche"},yellowTumeric:{eng:"Yellow Tumeric",fr:"Jaune Curcuma"},brightYellow:{eng:"BrightYellow",fr:"Jaune Vif"}},colorCull=[["peach","brightYellow"],["rubyRed","purpleMaroon"],["tenderGreen","weatheredGold"],["royalBlue","lavenderBlue"],["oliveGreen","lavenderBlue"],["chocolate","oliveGreen"],["carminRed","rubyRed"]],palettes={2:[{name:"Light",p:1,arr:["white","scarletRed"]},{name:"Dark",p:1,arr:["black","purpleMaroon"]},{name:"Warm",p:1,arr:["yellowTumeric","lagoonBlue"]},{name:"Warm",p:1,arr:["scarletRed","softBlue"]},{name:"Warm",p:1,arr:["terracotta","beige"]},{name:"Cool",p:1,arr:["waterGreen","black"]},{name:"Cool",p:1,arr:["waterGreen","royalBlue"]},{name:"Cool",p:1,arr:["emeraldGreen","waterGreen"]},{name:"Mix",p:1,arr:["oliveGreen","taupe"]},{name:"Mix",p:1,arr:["white","black"]},{name:"Mix",p:1,arr:["softBlue","rubyRed"]},{name:"Cool",p:1,arr:["tenderGreen","white"]},{name:"Mix",p:1,arr:["black","ivory"]},{name:"Mix",p:1,arr:["ultraMarine","ivory"]},{name:"Dark",p:1,arr:["black","weatheredGold"]},{name:"Mix",p:1,arr:["oliveGreen","lightPink"]},{name:"Warm",p:1,arr:["orange","peach"]},{name:"Cool",p:1,arr:["lagoonBlue","orange"]},{name:"Cool",p:1,arr:["waterGreen","softBlue"]},{name:"Light",p:1,arr:["grey","ivory"]},{name:"Light",p:1,arr:["pink","ivory"]},{name:"Light",p:1,arr:["white","grey"]}],3:[{name:"Light",p:1,arr:["white","weatheredGold","grey"]},{name:"Dark",p:1,arr:["carminRed","lavenderBlue","emeraldGreen"]},{name:"Warm",p:1,arr:["brightYellow","waterGreen","black"]},{name:"Warm",p:1,arr:["ultraMarine","orange","tenderGreen"]},{name:"Cool",p:1,arr:["royalBlue","taupe","blueGrey"]},{name:"Mix",p:1,arr:["terracotta","appleGreen","black"]},{name:"Mix",p:1,arr:["taupe","pink","emeraldGreen"]},{name:"Mix",p:1,arr:["oliveGreen","ivory","grey"]},{name:"Mix",p:1,arr:["oliveGreen","lightPink","appleGreen"]},{name:"Warm",p:1,arr:["oliveGreen","yellowTumeric","beige"]}],4:[{name:"Light",p:1,arr:["white","softBlue","emeraldGreen","scarletRed"]},{name:"Light",p:1,arr:["lagoonBlue","royalBlue","orange","white"]},{name:"Light",p:1,arr:["terracotta","ultraMarine","lightPink","lagoonBlue"]},{name:"Dark",p:1,arr:["weatheredGold","rubyRed","ultraMarine","lagoonBlue"]},{name:"Warm",p:1,arr:["ivory","taupe","blueGrey","appleGreen"]},{name:"Warm",p:1,arr:["scarletRed","rubyRed","purpleMaroon","white"]},{name:"Cool",p:1,arr:["waterGreen","tenderGreen","lightPink","purpleMaroon"]},{name:"Cool",p:1,arr:["lagoonBlue","ivory","brightYellow","purpleMaroon"]},{name:"Mix",p:1,arr:["black","weatheredGold","grey","appleGreen"]},{name:"Mix",p:1,arr:["emeraldGreen","scarletRed","taupe","chocolate"]},{name:"Mix",p:1,arr:["oliveGreen","waterGreen","beige","scarletRed"]},{name:"Mix",p:1,arr:["grey","carminRed","rubyRed","peach"]},{name:"Cool",p:1,arr:["tenderGreen","ivory","weatheredGold","oliveGreen"]},{name:"Warm",p:1,arr:["rubyRed","terracotta","yellowTumeric","peach"]},{name:"Mix",p:1,arr:["tenderGreen","terracotta","ivory","taupe"]}],5:[{name:"Light",p:1,arr:["waterGreen","white","beige","terracotta","ultraMarine"]},{name:"Dark",p:1,arr:["chocolate","grey","blueGrey","ivory","weatheredGold"]},{name:"Warm",p:1,arr:["peach","orange","tenderGreen","scarletRed","waterGreen"]},{name:"Warm",p:1,arr:["terracotta","pink","scarletRed","ivory","grey"]},{name:"Red",p:1,arr:["grey","orange","beige","ultraMarine","weatheredGold"]},{name:"Cool",p:1,arr:["royalBlue","ultraMarine","lavenderBlue","softBlue","waterGreen"]},{name:"Mix",p:1,arr:["emeraldGreen","scarletRed","taupe","chocolate","oliveGreen"]},{name:"Mix",p:1,arr:["oliveGreen","waterGreen","beige","scarletRed","lightPink"]},{name:"Cool",p:1,arr:["tenderGreen","ivory","weatheredGold","oliveGreen","lavenderBlue"]},{name:"Warm",p:1,arr:["rubyRed","terracotta","yellowTumeric","peach","pink"]},{name:"Mix",p:1,arr:["tenderGreen","terracotta","ivory","taupe","weatheredGold"]}]},spacingTypes=["Standard","Tight","Close"],threadingPatternTypes=["twill","triWave","vPattern","rand"],treadlingPatternTypes=["twill","triWave","vPattern","rand"],colorPalettes=["random","analogous","fromArray","fromSelected"],presetTypes=["None","Duochrome","Figure","Linear","Field"],colorArrayNames=["Red","Yellow","Blue","Mix","Light","Dark"],colorSelectNames=["Warm","Cool","Mix","Light","Dark"],layouts=["Original","Tight"],displayModes=["Original","Inverse","Grid","Weave Colors"],M={var:{}};if(M.var={zoom:30,cellSize:1,activeColor:new THREE.Color(9803157),inactiveColor:new THREE.Color(15658734),backgroundColor:new THREE.Color(15658734),warpColors:[],weftColors:[],theRules:[0,0,0,0,0,0,0,0,1,0,0,0,0,0],maxGen:2,NUM_SHAFTS:8,NUM_THREADS:50,NUM_TREADLES:0,NUM_PICKS:0,startX:-27,startY:22,verticalSpacingType:rWeightedItems(spacingTypes,[1,2,0]),verticalSpacing:rWeightedItems([1.25,1,1],[1,2,0]),threadingPattern:rWeightedItems(threadingPatternTypes,[1,1,0,.1]),threadingSlope:rWeightedItems([.5,1,2],[1,1,1]),threadingOffset:1,threadingTranslate:0,threadingMirrorPattern:!1,threadingMirrorColor:!1,treadlingPattern:rWeightedItems(treadlingPatternTypes,[1,1,0,.1]),treadlingSlope:rWeightedItems([.5,1,2],[1,1,1]),treadlingOffset:1,treadlingTranslate:0,treadlingMirrorPattern:!1,treadlingMirrorColor:!1,colorSelectName:rWeightedItems(colorSelectNames,[1,1,1,1,1]),colorArrayName:rWeightedItems(colorArrayNames,[1,1,1,1,1,1]),colorPalette:rWeightedItems(colorPalettes,[0,0,0,1]),colorWeftCount:rWeightedItems([1,2,3],[1,1,1]),colorWarpCount:rWeightedItems([1,2,3],[1,1,1]),colorWarp:[],colorWeft:[],colorWarpNames:[],colorWeftNames:[],colorMaterial:rWeightedItems(["Satin","Glossy"],[1,0]),drawEdges:!1,passedLengthTest:!0,maxRun:8,preset:rWeightedItems(presetTypes,[0,30,15,20,35]),displayMode:rWeightedItems(displayModes,[0,35,55,10]),layout:rWeightedItems(layouts,[0,1]),threadingPosX:0,threadingPosY:0,tieUpPosX:0,tieUpPosY:0,treadlingPosX:0,treadlingPosY:0,colorWarpPosX:0,colorWarpPosY:0,colorWeftPosX:0,colorWeftPosY:0,drawdownPosX:0,drawdownPosY:0,colorWarpVisible:!0,colorWeftVisible:!1,textVisible:!1},M.var.NUM_TREADLES=M.var.NUM_SHAFTS,M.var.NUM_PICKS=M.var.NUM_THREADS,"Duochrome"==M.var.preset?(M.var.colorWeftCount=1,M.var.colorWarpCount=1):"Figure"==M.var.preset?(R.random_bool(-1)?(M.var.colorWeftCount=1,M.var.colorWarpCount=rWeightedItems([2,3],[1.25,1])):(M.var.colorWeftCount=rWeightedItems([2,3],[1,0]),M.var.colorWarpCount=1),M.var.threadingPattern=rWeightedItems(["twill","triWave"],[1,3]),M.var.threadingSlope=rWeightedItems([.5,1],[1.5,.8]),M.var.treadlingPattern=rWeightedItems(["twill","triWave"],[1,3]),M.var.treadlingSlope=rWeightedItems([.5,1],[1.5,.8])):"Linear"==M.var.preset?R.random_bool(-1)?(M.var.colorWeftCount=1,M.var.colorWarpCount=rWeightedItems([2,3],[1.25,1]),M.var.treadlingPattern=rWeightedItems(["twill","triWave"],[1,1]),M.var.treadlingSlope=rWeightedItems([1,2],[.5,1.5]),M.var.verticalSpacingType=rWeightedItems(spacingTypes,[1.1,.5,0])):(M.var.colorWeftCount=rWeightedItems([2,3],[1,1.5]),M.var.colorWarpCount=1,M.var.verticalSpacingType=rWeightedItems(spacingTypes,[1.2,.5,0]),M.var.threadingPattern=rWeightedItems(["twill","triWave"],[1,1]),M.var.threadingSlope=2,M.var.treadlingPattern=rWeightedItems(["twill","triWave"],[1,1]),M.var.treadlingSlope=rWeightedItems([1,2],[.5,1.5])):"Field"==M.var.preset&&(M.var.colorWarpCount=rWeightedItems([2,3],[1.25,1]),M.var.colorWeftCount=rWeightedItems([2,3],[1.25,1]),M.var.threadingPattern=rWeightedItems(["twill","triWave","rand"],[1,1,1]),M.var.threadingSlope=rWeightedItems([.5,1,2],[1,1,1]),M.var.treadlingPattern=rWeightedItems(["twill","triWave","rand"],[1,1,1]),M.var.treadlingSlope=rWeightedItems([.5,1,2],[1,1,1]),M.var.colorWarpCount+M.var.colorWeftCount==6&&M.var.colorWeftCount--),"Close"==M.var.verticalSpacingType?M.var.verticalSpacing=1:"Tight"==M.var.verticalSpacingType?M.var.verticalSpacing=1.25:"Standard"==M.var.verticalSpacingType&&(M.var.verticalSpacing=1.5),"Original"==M.var.layout)M.var.threadingPosX=0,M.var.threadingPosY=0,M.var.tieUpPosX=0,M.var.tieUpPosY=0,M.var.treadlingPosX=0,M.var.treadlingPosY=0,M.var.colorWarpPosX=0,M.var.colorWarpPosY=0,M.var.colorWeftPosX=0,M.var.colorWeftPosY=0,M.var.drawdownPosX=0,M.var.drawdownPosY=0,M.var.colorWarpVisible=!0,M.var.colorWeftVisible=!0;else if("Tight"==M.var.layout){let e=2,r=0;M.var.threadingPosX=0,M.var.threadingPosY=-e,M.var.tieUpPosX=-e,M.var.tieUpPosY=-e,M.var.treadlingPosX=-e+r,M.var.treadlingPosY=0,M.var.colorWarpPosX=0,M.var.colorWarpPosY=-e-1,M.var.colorWeftPosX=-e-2+r,M.var.colorWeftPosY=0,M.var.drawdownPosX=r,M.var.drawdownPosY=0,M.var.colorWarpVisible=!1,M.var.colorWeftVisible=!1}console.log("M",M);class squareGrid{constructor(e,r,t,a,o,l,i){this.name=e,this.position=new THREE.Vector2(r,t),this.size=new THREE.Vector2(a,o),this.length=a*o,this.pattern=[[]],this.mesh=[[]],this.posOffset=[[]],this.offSet={x:l,y:i}}}class weavedraft{constructor(){this.threading=new squareGrid("threading",M.var.startX+M.var.threadingPosX,M.var.startY+M.var.threadingPosY,M.var.NUM_SHAFTS,M.var.NUM_THREADS,1,1),this.tieUp=new squareGrid("tieUp",M.var.NUM_THREADS*M.var.cellSize+2+M.var.startX+M.var.tieUpPosX,M.var.startY+M.var.tieUpPosY,M.var.NUM_SHAFTS,M.var.NUM_TREADLES,1,1),this.treadling=new squareGrid("treadling",M.var.NUM_THREADS*M.var.cellSize+2+M.var.startX+M.var.treadlingPosX,-M.var.NUM_SHAFTS*M.var.cellSize-2+M.var.startY+M.var.treadlingPosY,M.var.NUM_PICKS,M.var.NUM_TREADLES,1,M.var.verticalSpacing),this.colorWarp=new squareGrid("colorWarp",M.var.startX+M.var.colorWarpPosX,M.var.startY+2+M.var.colorWarpPosY,1,M.var.NUM_THREADS,1,1),this.colorWeft=new squareGrid("colorWeft",M.var.NUM_THREADS+2+M.var.NUM_TREADLES+2+M.var.startX+M.var.colorWeftPosX,-M.var.NUM_SHAFTS*M.var.cellSize-2+M.var.startY+M.var.colorWeftPosY,M.var.NUM_PICKS,1,1,M.var.verticalSpacing),this.drawdownWarp=new squareGrid("drawdownWarp",M.var.startX+M.var.drawdownPosX,-M.var.NUM_SHAFTS*M.var.cellSize-2+M.var.startY+M.var.drawdownPosY,M.var.NUM_PICKS,M.var.NUM_PICKS,1,M.var.verticalSpacing),this.drawdownWeft=new squareGrid("drawdownWeft",M.var.startX+M.var.drawdownPosX,-M.var.NUM_SHAFTS*M.var.cellSize-2+M.var.startY+M.var.drawdownPosY,M.var.NUM_PICKS,M.var.NUM_PICKS,1,M.var.verticalSpacing),this.drawdownCheckCount=0,this.resetPattern(this.threading),this.resetPattern(this.tieUp),this.resetPattern(this.treadling),this.managePattern(),this.getColorGridS(),this.getGoodDisplayColors(),this.offsetPattern(this.threading),this.offsetPattern(this.tieUp),this.offsetPattern(this.treadling),this.offsetPattern(this.colorWarp),this.offsetPattern(this.colorWeft),this.offsetPattern(this.drawdownWarp),this.offsetPattern(this.drawdownWeft),this.theRules=M.var.theRules,this.caTieUpGrid(),this.visualizeGrid(this.threading),this.visualizeGrid(this.tieUp),this.visualizeGrid(this.treadling),this.visualizeColorGrids(),this.computeDrawdown(),this.visualizeDrawdown()}managePattern(){"twill"==M.var.t
Enlace merges digital art with traditional cane weaving to craft physical objects from generative outputs. Each generative token is a piece of digital art and a set of instructions which can be used by the collector to create a unique chair or a woven canvas by Maison Louis Drucker, the historic Parisian chair manufacturer. The term "Enlace" denotes linking or intertwining in English and an embrace in French, emphasizing the project's aim to unite algorithmic code with the timeless human craft of weaving. Visually expressed through the format of the weaving draft, Enlace reduces its visual language, offering minimal instructions for creating woven pieces. It encodes potential rather than final product, providing the necessary instructions for crafting a woven chair or canvas, blending contemporary technology with traditional craftsmanship. By Aranda\Lasch in collaboration with Trame and Maison Louis Drucker. 's' to save image 't' to display text
1-50 of 547