@deephaven/chart 0.104.1-virtual-webgl.3 → 0.104.1-virtual-webgl.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/virtual-webgl.d.ts +2 -0
- package/dist/virtual-webgl.d.ts.map +1 -0
- package/dist/virtual-webgl.js +915 -0
- package/dist/virtual-webgl.js.map +1 -0
- package/package.json +12 -13
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACpD,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Used to show many WebGL plots on the same page
|
|
2
2
|
// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page
|
|
3
|
-
import
|
|
3
|
+
import { initializeVirtualWebGL } from "./virtual-webgl.js";
|
|
4
|
+
initializeVirtualWebGL();
|
|
4
5
|
export { default as Chart } from "./LazyChart.js";
|
|
5
6
|
export { default as ChartModelFactory } from "./ChartModelFactory.js";
|
|
6
7
|
export { default as ChartModel } from "./ChartModel.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot","isFigureChartModel"],"sources":["../src/index.ts"],"sourcesContent":["// Used to show many WebGL plots on the same page\n// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page\nimport 'virtual-webgl
|
|
1
|
+
{"version":3,"file":"index.js","names":["initializeVirtualWebGL","default","Chart","ChartModelFactory","ChartModel","ChartUtils","FigureChartModel","MockChartModel","Plot","isFigureChartModel"],"sources":["../src/index.ts"],"sourcesContent":["// Used to show many WebGL plots on the same page\n// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page\nimport { initializeVirtualWebGL } from './virtual-webgl';\n\ninitializeVirtualWebGL();\n\nexport { default as Chart } from './LazyChart';\nexport { default as ChartModelFactory } from './ChartModelFactory';\nexport { default as ChartModel } from './ChartModel';\nexport { default as ChartUtils } from './ChartUtils';\nexport * from './ChartUtils';\nexport * from './DownsamplingError';\nexport { default as FigureChartModel } from './FigureChartModel';\nexport { default as MockChartModel } from './MockChartModel';\nexport { default as Plot } from './plotly/LazyPlot';\nexport * from './ChartTheme';\nexport * from './ChartThemeProvider';\nexport { default as isFigureChartModel } from './isFigureChartModel';\nexport * from './useChartTheme';\n"],"mappings":"AAAA;AACA;AAAA,SACSA,sBAAsB;AAE/BA,sBAAsB,CAAC,CAAC;AAAC,SAEhBC,OAAO,IAAIC,KAAK;AAAA,SAChBD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,UAAU;AAAA;AAAA;AAAA,SAGrBJ,OAAO,IAAIK,gBAAgB;AAAA,SAC3BL,OAAO,IAAIM,cAAc;AAAA,SACzBN,OAAO,IAAIO,IAAI;AAAA;AAAA;AAAA,SAGfP,OAAO,IAAIQ,kBAAkB;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-webgl.d.ts","sourceRoot":"","sources":["../src/virtual-webgl.ts"],"names":[],"mappings":"AAqCA,wBAAgB,sBAAsB,SAylCrC"}
|
|
@@ -0,0 +1,915 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
// Copied from https://github.com/greggman/virtual-webgl
|
|
4
|
+
// Used to show many WebGL plots on the same page
|
|
5
|
+
// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page
|
|
6
|
+
/*
|
|
7
|
+
* Copyright 2018, Gregg Tavares.
|
|
8
|
+
* All rights reserved.
|
|
9
|
+
*
|
|
10
|
+
* Redistribution and use in source and binary forms, with or without
|
|
11
|
+
* modification, are permitted provided that the following conditions are
|
|
12
|
+
* met:
|
|
13
|
+
*
|
|
14
|
+
* * Redistributions of source code must retain the above copyright
|
|
15
|
+
* notice, this list of conditions and the following disclaimer.
|
|
16
|
+
*
|
|
17
|
+
* * Redistributions in binary form must reproduce the above
|
|
18
|
+
* copyright notice, this list of conditions and the following disclaimer
|
|
19
|
+
* in the documentation and/or other materials provided with the
|
|
20
|
+
* distribution.
|
|
21
|
+
*
|
|
22
|
+
* * Neither the name of Gregg Tavares. nor the names of his
|
|
23
|
+
* contributors may be used to endorse or promote products derived from
|
|
24
|
+
* this software without specific prior written permission.
|
|
25
|
+
*
|
|
26
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
27
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
28
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
29
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
30
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
31
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
32
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
33
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
34
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
35
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
36
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
37
|
+
*/
|
|
38
|
+
export function initializeVirtualWebGL() {
|
|
39
|
+
var settings = {
|
|
40
|
+
disableWebGL2: false,
|
|
41
|
+
compositorCreator() {}
|
|
42
|
+
};
|
|
43
|
+
var canvasToVirtualContextMap = new Map();
|
|
44
|
+
var extensionInfo = {
|
|
45
|
+
webgl_draw_buffers: {
|
|
46
|
+
wrapperFnMakerFn: makeWEBGL_draw_buffersWrapper,
|
|
47
|
+
saveRestoreMakerFn: makeWEBGL_drawBuffersSaveRestoreHelper
|
|
48
|
+
},
|
|
49
|
+
oes_vertex_array_object: {
|
|
50
|
+
wrapperFnMakerFn: makeOES_vertex_array_objectWrapper
|
|
51
|
+
},
|
|
52
|
+
angle_instanced_arrays: {
|
|
53
|
+
wrapperFnMakerFn: makeANGLE_instanced_arraysWrapper
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
var extensionSaveRestoreHelpersArray = [];
|
|
57
|
+
var extensionSaveRestoreHelpers = {};
|
|
58
|
+
var currentVirtualContext = null;
|
|
59
|
+
var someContextsNeedRendering;
|
|
60
|
+
var sharedWebGLContext = document.createElement('canvas').getContext('webgl');
|
|
61
|
+
var sharedVAOExtension = sharedWebGLContext.getExtension('OES_vertex_array_object');
|
|
62
|
+
var sharedInstanceExtension = sharedWebGLContext.getExtension('ANGLE_instanced_arrays');
|
|
63
|
+
var numAttributes = sharedWebGLContext.getParameter(sharedWebGLContext.MAX_VERTEX_ATTRIBS);
|
|
64
|
+
var numTextureUnits = sharedWebGLContext.getParameter(sharedWebGLContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS);
|
|
65
|
+
var numDrawBuffers;
|
|
66
|
+
var baseState = makeDefaultState(300, 150);
|
|
67
|
+
var vs = "\n attribute vec4 position;\n varying vec2 v_texcoord;\n void main() {\n gl_Position = position;\n v_texcoord = position.xy * .5 + .5;\n }\n ";
|
|
68
|
+
var fs = "\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n }\n ";
|
|
69
|
+
var fs2 = "\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n gl_FragColor.rgb *= gl_FragColor.a;\n }\n ";
|
|
70
|
+
var premultplyAlphaTrueProgram = createProgram(sharedWebGLContext, [vs, fs]);
|
|
71
|
+
var premultplyAlphaFalseProgram = createProgram(sharedWebGLContext, [vs, fs2]);
|
|
72
|
+
if (sharedVAOExtension) {
|
|
73
|
+
var vao = sharedVAOExtension.createVertexArrayOES();
|
|
74
|
+
sharedVAOExtension.bindVertexArrayOES(vao);
|
|
75
|
+
baseState.vertexArray = vao;
|
|
76
|
+
}
|
|
77
|
+
{
|
|
78
|
+
var gl = sharedWebGLContext;
|
|
79
|
+
var positionLoc = 0; // hard coded in createProgram
|
|
80
|
+
|
|
81
|
+
var buffer = gl.createBuffer();
|
|
82
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
83
|
+
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]), gl.STATIC_DRAW);
|
|
84
|
+
gl.enableVertexAttribArray(positionLoc);
|
|
85
|
+
gl.vertexAttribPointer(positionLoc, 2, gl.FLOAT, false, 0, 0);
|
|
86
|
+
}
|
|
87
|
+
saveAllState(baseState);
|
|
88
|
+
HTMLCanvasElement.prototype.getContext = function (origFn) {
|
|
89
|
+
return function (type, contextAttributes) {
|
|
90
|
+
if (type === 'webgl' || type === 'experimental-webgl') {
|
|
91
|
+
return createOrGetVirtualWebGLContext(this, type, contextAttributes);
|
|
92
|
+
} else if (type === 'webgl2' && settings.disableWebGL2) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return origFn.call(this, type, contextAttributes);
|
|
96
|
+
};
|
|
97
|
+
}(HTMLCanvasElement.prototype.getContext);
|
|
98
|
+
function valueOrDefault(value, defaultValue) {
|
|
99
|
+
return value === undefined ? defaultValue : value;
|
|
100
|
+
}
|
|
101
|
+
function errorDisposedContext(fnName) {
|
|
102
|
+
return function () {
|
|
103
|
+
throw new Error("tried to call ".concat(fnName, " on disposed context"));
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
class DefaultCompositor {
|
|
107
|
+
constructor(canvas) {
|
|
108
|
+
this._ctx = canvas.getContext('2d');
|
|
109
|
+
}
|
|
110
|
+
composite(gl, texture, canvas, contextAttributes) {
|
|
111
|
+
// note: not entirely sure what to do here. We need this canvas to be at least as large
|
|
112
|
+
// as the canvas we're drawing to. Resizing a canvas is slow so I think just making
|
|
113
|
+
// sure we never get smaller than the largest canvas. At the moment though I'm too lazy
|
|
114
|
+
// to make it smaller.
|
|
115
|
+
var ctx = this._ctx;
|
|
116
|
+
var width = canvas.width;
|
|
117
|
+
var height = canvas.height;
|
|
118
|
+
var maxWidth = Math.max(gl.canvas.width, width);
|
|
119
|
+
var maxHeight = Math.max(gl.canvas.height, height);
|
|
120
|
+
if (gl.canvas.width !== maxWidth || gl.canvas.height !== maxHeight) {
|
|
121
|
+
gl.canvas.width = maxWidth;
|
|
122
|
+
gl.canvas.height = maxHeight;
|
|
123
|
+
}
|
|
124
|
+
gl.viewport(0, 0, width, height);
|
|
125
|
+
gl.useProgram(contextAttributes.premultipliedAlpha ? premultplyAlphaTrueProgram : premultplyAlphaFalseProgram);
|
|
126
|
+
|
|
127
|
+
// draw the drawingbuffer's texture to the offscreen canvas
|
|
128
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
129
|
+
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
|
130
|
+
|
|
131
|
+
// copy it to target canvas
|
|
132
|
+
ctx.globalCompositeOperation = 'copy';
|
|
133
|
+
ctx.drawImage(gl.canvas, 0, maxHeight - height, width, height,
|
|
134
|
+
// src rect
|
|
135
|
+
0, 0, width, height); // dest rect
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
dispose() {}
|
|
139
|
+
}
|
|
140
|
+
class VirtualWebGLContext {
|
|
141
|
+
constructor(canvas) {
|
|
142
|
+
var contextAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
143
|
+
var compositor = arguments.length > 2 ? arguments[2] : undefined;
|
|
144
|
+
var disposeHelper = arguments.length > 3 ? arguments[3] : undefined;
|
|
145
|
+
var gl = sharedWebGLContext;
|
|
146
|
+
this.canvas = canvas;
|
|
147
|
+
// Should use Symbols or someting to hide these variables from the outside.
|
|
148
|
+
|
|
149
|
+
this._compositor = compositor;
|
|
150
|
+
this._disposeHelper = disposeHelper;
|
|
151
|
+
this._extensions = {};
|
|
152
|
+
// based on context attributes and canvas.width, canvas.height
|
|
153
|
+
// create a texture and framebuffer
|
|
154
|
+
this._drawingbufferTexture = gl.createTexture();
|
|
155
|
+
this._drawingbufferFramebuffer = gl.createFramebuffer();
|
|
156
|
+
this._contextAttributes = {
|
|
157
|
+
alpha: valueOrDefault(contextAttributes.alpha, true),
|
|
158
|
+
antialias: false,
|
|
159
|
+
depth: valueOrDefault(contextAttributes.depth, true),
|
|
160
|
+
failIfMajorPerformanceCaveat: false,
|
|
161
|
+
premultipliedAlpha: valueOrDefault(contextAttributes.premultipliedAlpha, true),
|
|
162
|
+
stencil: valueOrDefault(contextAttributes.stencil, false)
|
|
163
|
+
};
|
|
164
|
+
this._preserveDrawingbuffer = valueOrDefault(contextAttributes.preserveDrawingBuffer, false);
|
|
165
|
+
var oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);
|
|
166
|
+
var oldFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
|
|
167
|
+
gl.bindTexture(gl.TEXTURE_2D, this._drawingbufferTexture);
|
|
168
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
169
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
170
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
171
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
172
|
+
// this._drawingbufferTexture.id = canvas.id;
|
|
173
|
+
// this._drawingbufferFramebuffer.id = canvas.id;
|
|
174
|
+
|
|
175
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, this._drawingbufferFramebuffer);
|
|
176
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._drawingbufferTexture, 0);
|
|
177
|
+
if (this._contextAttributes.depth) {
|
|
178
|
+
var oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);
|
|
179
|
+
this._depthRenderbuffer = gl.createRenderbuffer();
|
|
180
|
+
gl.bindRenderbuffer(gl.RENDERBUFFER, this._depthRenderbuffer);
|
|
181
|
+
var attachmentPoint = this._contextAttributes.stencil ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT;
|
|
182
|
+
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachmentPoint, gl.RENDERBUFFER, this._depthRenderbuffer);
|
|
183
|
+
gl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);
|
|
184
|
+
}
|
|
185
|
+
gl.bindTexture(gl.TEXTURE_2D, oldTexture);
|
|
186
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, oldFramebuffer);
|
|
187
|
+
|
|
188
|
+
// remember all WebGL state (default bindings, default texture units,
|
|
189
|
+
// default attributes and/or vertex shade object, default program,
|
|
190
|
+
// default blend, stencil, zbuffer, culling, viewport etc... state
|
|
191
|
+
this._state = makeDefaultState(canvas.width, canvas.height);
|
|
192
|
+
this._state.framebuffer = this._drawingbufferFramebuffer;
|
|
193
|
+
if (sharedVAOExtension) {
|
|
194
|
+
this._state.vertexArray = sharedVAOExtension.createVertexArrayOES();
|
|
195
|
+
this._defaultVertexArray = this._state.vertexArray;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
dispose() {
|
|
199
|
+
this._disposeHelper();
|
|
200
|
+
var gl = sharedWebGLContext;
|
|
201
|
+
gl.deleteFramebuffer(this._drawingbufferFramebuffer);
|
|
202
|
+
gl.deleteTexture(this._drawingbufferTexture);
|
|
203
|
+
if (this._depthRenderbuffer) {
|
|
204
|
+
gl.deleteRenderbuffer(this._depthRenderbuffer);
|
|
205
|
+
}
|
|
206
|
+
if (this._compositor.dispose) {
|
|
207
|
+
this._compositor.dispose();
|
|
208
|
+
}
|
|
209
|
+
for (var [key, value] of Object.entries(this)) {
|
|
210
|
+
if (typeof value === 'function') {
|
|
211
|
+
this[key] = errorDisposedContext(key);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
for (var [_key, _value] of Object.entries(VirtualWebGLContext.prototype)) {
|
|
215
|
+
if (typeof _value === 'function') {
|
|
216
|
+
this[_key] = errorDisposedContext(_key);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
get drawingBufferWidth() {
|
|
221
|
+
return this.canvas.width;
|
|
222
|
+
}
|
|
223
|
+
get drawingBufferHeight() {
|
|
224
|
+
return this.canvas.height;
|
|
225
|
+
}
|
|
226
|
+
composite(gl) {
|
|
227
|
+
this._compositor.composite(gl, this._drawingbufferTexture, this.canvas, this._contextAttributes);
|
|
228
|
+
if (!this._preserveDrawingbuffer) {
|
|
229
|
+
this._needClear = true;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function makeDefaultState(width, height) {
|
|
234
|
+
var gl = WebGLRenderingContext;
|
|
235
|
+
var state = {
|
|
236
|
+
arrayBuffer: null,
|
|
237
|
+
renderbuffer: null,
|
|
238
|
+
framebuffer: null,
|
|
239
|
+
blend: false,
|
|
240
|
+
cullFace: false,
|
|
241
|
+
depthTest: false,
|
|
242
|
+
dither: false,
|
|
243
|
+
polygonOffsetFill: false,
|
|
244
|
+
sampleAlphaToCoverage: false,
|
|
245
|
+
sampleCoverage: false,
|
|
246
|
+
scissorTest: false,
|
|
247
|
+
stencilTest: false,
|
|
248
|
+
activeTexture: gl.TEXTURE0,
|
|
249
|
+
packAlignment: 4,
|
|
250
|
+
unpackAlignment: 4,
|
|
251
|
+
unpackColorspaceConversion: gl.BROWSER_DEFAULT_WEBGL,
|
|
252
|
+
unpackFlipY: 0,
|
|
253
|
+
unpackPremultiplyAlpha: 0,
|
|
254
|
+
currentProgram: null,
|
|
255
|
+
viewport: [0, 0, width, height],
|
|
256
|
+
scissor: [0, 0, 0, 0],
|
|
257
|
+
blendSrcRgb: gl.ONE,
|
|
258
|
+
blendDstRgb: gl.ZERO,
|
|
259
|
+
blendSrcAlpha: gl.ONE,
|
|
260
|
+
blendDstAlpha: gl.ZERO,
|
|
261
|
+
blendEquationRgb: gl.FUNC_ADD,
|
|
262
|
+
blendEquationAlpha: gl.FUNC_ADD,
|
|
263
|
+
blendColor: [0, 0, 0, 0],
|
|
264
|
+
colorClearValue: [0, 0, 0, 0],
|
|
265
|
+
colorMask: [true, true, true, true],
|
|
266
|
+
cullFaceMode: gl.BACK,
|
|
267
|
+
depthClearValue: 1,
|
|
268
|
+
depthFunc: gl.LESS,
|
|
269
|
+
depthRange: [0, 1],
|
|
270
|
+
depthMask: true,
|
|
271
|
+
frontFace: gl.CCW,
|
|
272
|
+
generateMipmapHint: gl.DONT_CARE,
|
|
273
|
+
lineWidth: 1,
|
|
274
|
+
polygonOffsetFactor: 0,
|
|
275
|
+
polygonOffsetUnits: 0,
|
|
276
|
+
sampleCoverageValue: 1,
|
|
277
|
+
sampleCoverageUnits: false,
|
|
278
|
+
stencilBackFail: gl.KEEP,
|
|
279
|
+
stencilBackFunc: gl.ALWAYS,
|
|
280
|
+
stencilBackPassDepthFail: gl.KEEP,
|
|
281
|
+
stencilBackPassDepthPass: gl.KEEP,
|
|
282
|
+
stencilBackRef: 0,
|
|
283
|
+
stencilBackValueMask: 0xffffffff,
|
|
284
|
+
stencilBackWriteMask: 0xffffffff,
|
|
285
|
+
stencilClearValue: 0,
|
|
286
|
+
stencilFail: gl.KEEP,
|
|
287
|
+
stencilFunc: gl.ALWAYS,
|
|
288
|
+
stencilPassDepthFail: gl.KEEP,
|
|
289
|
+
stencilPassDepthPass: gl.KEEP,
|
|
290
|
+
stencilRef: 0,
|
|
291
|
+
stencilValueMask: 0xffffffff,
|
|
292
|
+
stencilWriteMask: 0xffffffff,
|
|
293
|
+
textureUnits: []
|
|
294
|
+
};
|
|
295
|
+
if (sharedVAOExtension) {
|
|
296
|
+
state.vertexArray = null;
|
|
297
|
+
} else {
|
|
298
|
+
state.elementArrayBuffer = null;
|
|
299
|
+
state.attributes = [];
|
|
300
|
+
for (var i = 0; i < numAttributes; ++i) {
|
|
301
|
+
var attrib = {
|
|
302
|
+
buffer: null,
|
|
303
|
+
enabled: false,
|
|
304
|
+
size: 4,
|
|
305
|
+
stride: 0,
|
|
306
|
+
type: gl.FLOAT,
|
|
307
|
+
normalized: false,
|
|
308
|
+
value: [0, 0, 0, 1]
|
|
309
|
+
};
|
|
310
|
+
if (sharedInstanceExtension) {
|
|
311
|
+
attrib.divisor = 0;
|
|
312
|
+
}
|
|
313
|
+
state.attributes.push(attrib);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
for (var _i = 0; _i < numTextureUnits; ++_i) {
|
|
317
|
+
state.textureUnits.push({
|
|
318
|
+
texture2D: null,
|
|
319
|
+
textureCubemap: null
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
return state;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// copy all WebGL constants and functions to the prototype of
|
|
326
|
+
// VirtualWebGLContext
|
|
327
|
+
for (var key in WebGLRenderingContext.prototype) {
|
|
328
|
+
var propDesc = Object.getOwnPropertyDescriptor(WebGLRenderingContext.prototype, key);
|
|
329
|
+
if (propDesc.get) {
|
|
330
|
+
// it's a getter/setter ?
|
|
331
|
+
var virtualPropDesc = Object.getOwnPropertyDescriptor(VirtualWebGLContext.prototype, key);
|
|
332
|
+
if (!virtualPropDesc) {
|
|
333
|
+
console.warn("WebGLRenderingContext.".concat(key, " is not supported"));
|
|
334
|
+
}
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
switch (key) {
|
|
338
|
+
default:
|
|
339
|
+
{
|
|
340
|
+
var value = WebGLRenderingContext.prototype[key];
|
|
341
|
+
var newValue = value;
|
|
342
|
+
switch (key) {
|
|
343
|
+
case 'getContextAttributes':
|
|
344
|
+
newValue = virtualGetContextAttributes;
|
|
345
|
+
break;
|
|
346
|
+
case 'getExtension':
|
|
347
|
+
newValue = createGetExtensionWrapper(value);
|
|
348
|
+
break;
|
|
349
|
+
case 'bindFramebuffer':
|
|
350
|
+
newValue = virtualBindFramebuffer;
|
|
351
|
+
break;
|
|
352
|
+
case 'getParameter':
|
|
353
|
+
newValue = virtualGetParameter;
|
|
354
|
+
break;
|
|
355
|
+
case 'readPixels':
|
|
356
|
+
newValue = virtualReadPixels;
|
|
357
|
+
break;
|
|
358
|
+
case 'clear':
|
|
359
|
+
case 'drawArrays':
|
|
360
|
+
case 'drawElements':
|
|
361
|
+
newValue = createDrawWrapper(value);
|
|
362
|
+
break;
|
|
363
|
+
default:
|
|
364
|
+
if (typeof value === 'function') {
|
|
365
|
+
newValue = createWrapper(value);
|
|
366
|
+
}
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
VirtualWebGLContext.prototype[key] = newValue;
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
function createGetExtensionWrapper(origFn) {
|
|
375
|
+
return function (extensionName) {
|
|
376
|
+
extensionName = extensionName.toLowerCase();
|
|
377
|
+
// just like the real context each extension needs a virtual class because each use
|
|
378
|
+
// of the extension might be modified (as in people adding properties to it)
|
|
379
|
+
var existingExt = this._extensions[extensionName];
|
|
380
|
+
if (existingExt) {
|
|
381
|
+
return existingExt;
|
|
382
|
+
}
|
|
383
|
+
var ext = origFn.call(sharedWebGLContext, extensionName);
|
|
384
|
+
var wrapperInfo = extensionInfo[extensionName] || {};
|
|
385
|
+
var wrapperFnMakerFn = wrapperInfo.wrapperFnMakerFn || (() => {
|
|
386
|
+
console.log('trying to get extension:', extensionName);
|
|
387
|
+
});
|
|
388
|
+
var saveRestoreHelper = extensionSaveRestoreHelpers[extensionName];
|
|
389
|
+
if (!saveRestoreHelper) {
|
|
390
|
+
var saveRestoreMakerFn = wrapperInfo.saveRestoreMakerFn;
|
|
391
|
+
if (saveRestoreMakerFn) {
|
|
392
|
+
var saveRestore = saveRestoreMakerFn(ext);
|
|
393
|
+
extensionSaveRestoreHelpers[extensionName] = saveRestore;
|
|
394
|
+
extensionSaveRestoreHelpersArray.push(saveRestore);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
var wrapper = {
|
|
398
|
+
_context: this
|
|
399
|
+
};
|
|
400
|
+
for (var _key2 in ext) {
|
|
401
|
+
var _value2 = ext[_key2];
|
|
402
|
+
if (typeof _value2 === 'function') {
|
|
403
|
+
_value2 = wrapperFnMakerFn(ext, _value2, extensionName);
|
|
404
|
+
}
|
|
405
|
+
wrapper[_key2] = _value2;
|
|
406
|
+
}
|
|
407
|
+
this._extensions[extensionName] = wrapper;
|
|
408
|
+
return wrapper;
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
function isFramebufferBindingNull(vctx) {
|
|
412
|
+
return vctx._state.framebuffer === vctx._drawingbufferFramebuffer;
|
|
413
|
+
}
|
|
414
|
+
function makeOES_vertex_array_objectWrapper(ext, origFn, name) {
|
|
415
|
+
switch (name) {
|
|
416
|
+
case 'bindVertexArrayOES':
|
|
417
|
+
return virutalbindVertexArrayOES;
|
|
418
|
+
}
|
|
419
|
+
return function () {
|
|
420
|
+
makeCurrentContext(this._context);
|
|
421
|
+
resizeCanvasIfChanged(this._context);
|
|
422
|
+
for (var _len = arguments.length, args = new Array(_len), _key3 = 0; _key3 < _len; _key3++) {
|
|
423
|
+
args[_key3] = arguments[_key3];
|
|
424
|
+
}
|
|
425
|
+
return origFn.call(ext, ...args);
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
function virutalbindVertexArrayOES(vao) {
|
|
429
|
+
makeCurrentContext(this._context);
|
|
430
|
+
resizeCanvasIfChanged(this._context);
|
|
431
|
+
if (!vao) {
|
|
432
|
+
vao = this._context._defaultVertexArray;
|
|
433
|
+
}
|
|
434
|
+
sharedVAOExtension.bindVertexArrayOES(vao);
|
|
435
|
+
}
|
|
436
|
+
function makeANGLE_instanced_arraysWrapper(ext, origFn, name) {
|
|
437
|
+
switch (name) {
|
|
438
|
+
case 'drawArraysInstancedANGLE':
|
|
439
|
+
case 'drawElementsInstancedANGLE':
|
|
440
|
+
return createExtDrawWrapper(ext, origFn);
|
|
441
|
+
break;
|
|
442
|
+
}
|
|
443
|
+
return function () {
|
|
444
|
+
makeCurrentContext(this._context);
|
|
445
|
+
resizeCanvasIfChanged(this._context);
|
|
446
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key4 = 0; _key4 < _len2; _key4++) {
|
|
447
|
+
args[_key4] = arguments[_key4];
|
|
448
|
+
}
|
|
449
|
+
return origFn.call(ext, ...args);
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
function createExtDrawWrapper(ext, origFn) {
|
|
453
|
+
return function () {
|
|
454
|
+
// a rendering function was called so we need to copy are drawingBuffer
|
|
455
|
+
// to the canvas for this context after the current event.
|
|
456
|
+
beforeDraw(this._context);
|
|
457
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key5 = 0; _key5 < _len3; _key5++) {
|
|
458
|
+
args[_key5] = arguments[_key5];
|
|
459
|
+
}
|
|
460
|
+
var result = origFn.call(exts, ...args);
|
|
461
|
+
afterDraw(this._context);
|
|
462
|
+
return result;
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
function makeWEBGL_draw_buffersWrapper(ext, origFn, name) {
|
|
466
|
+
var gl = sharedWebGLContext;
|
|
467
|
+
var backBuffer = [gl.COLOR_ATTACHMENT0];
|
|
468
|
+
return function (drawingBuffers) {
|
|
469
|
+
makeCurrentContext(this._context);
|
|
470
|
+
resizeCanvasIfChanged(this._context);
|
|
471
|
+
// if the virtual context is bound to canvas then fake it
|
|
472
|
+
if (isFramebufferBindingNull(this._context)) {
|
|
473
|
+
// this really isn't checking everything
|
|
474
|
+
// for example if the user passed in array.length != 1
|
|
475
|
+
// then we are supposed to generate an error
|
|
476
|
+
if (drawingBuffers[0] === gl.BACK) {
|
|
477
|
+
drawingBuffers = backBuffer;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
origFn.call(ext, drawingBuffers);
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
function makeWEBGL_drawBuffersSaveRestoreHelper(ext) {
|
|
484
|
+
var gl = sharedWebGLContext;
|
|
485
|
+
var maxDrawBuffers = gl.getParameter(ext.MAX_DRAW_BUFFERS_WEBGL);
|
|
486
|
+
var defaultBackDrawBuffers = [gl.BACK];
|
|
487
|
+
var defaultFBDrawBuffers = [gl.COLOR_ATTACHMENT0];
|
|
488
|
+
for (var i = 1; i < maxDrawBuffers; ++i) {
|
|
489
|
+
defaultFBDrawBuffers.push(gl.NONE);
|
|
490
|
+
}
|
|
491
|
+
function initDrawBufferState(state) {
|
|
492
|
+
state.drawBuffers = state.framebuffer ? defaultFBDrawBuffers.slice() : defaultBackDrawBuffers.slice();
|
|
493
|
+
}
|
|
494
|
+
function save(state) {
|
|
495
|
+
if (!state.drawBuffers) {
|
|
496
|
+
initDrawBufferState(state);
|
|
497
|
+
}
|
|
498
|
+
// remember state.framebuffer is only null for the offscreen canvas
|
|
499
|
+
var drawBuffers = state.drawBuffers;
|
|
500
|
+
for (var _i2 = 0; _i2 < drawBuffers.length; ++_i2) {
|
|
501
|
+
drawBuffers[_i2] = gl.getParameter(ext.DRAW_BUFFER0_WEBGL + _i2);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
function restore(state) {
|
|
505
|
+
if (!state.drawBuffers) {
|
|
506
|
+
initDrawBufferState(state);
|
|
507
|
+
}
|
|
508
|
+
ext.drawBuffersWEBGL(state.drawBuffers);
|
|
509
|
+
}
|
|
510
|
+
return {
|
|
511
|
+
save,
|
|
512
|
+
restore
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
function virtualGetContextAttributes() {
|
|
516
|
+
return this._contextAttributes;
|
|
517
|
+
}
|
|
518
|
+
function virtualReadPixels() {
|
|
519
|
+
makeCurrentContext(this);
|
|
520
|
+
resizeCanvasIfChanged(this);
|
|
521
|
+
clearIfNeeded(this);
|
|
522
|
+
var gl = sharedWebGLContext;
|
|
523
|
+
return gl.readPixels(...arguments);
|
|
524
|
+
}
|
|
525
|
+
function virtualGetParameter(pname) {
|
|
526
|
+
makeCurrentContext(this);
|
|
527
|
+
resizeCanvasIfChanged(this);
|
|
528
|
+
var gl = sharedWebGLContext;
|
|
529
|
+
var value = gl.getParameter(pname);
|
|
530
|
+
switch (pname) {
|
|
531
|
+
case gl.FRAMEBUFFER_BINDING:
|
|
532
|
+
if (value === this._drawingbufferFramebuffer) {
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
break;
|
|
536
|
+
case 0x8825:
|
|
537
|
+
// DRAW_BUFFER0_WEBGL
|
|
538
|
+
if (isFramebufferBindingNull(this)) {
|
|
539
|
+
if (value === gl.COLOR_ATTACHMENT0) {
|
|
540
|
+
return gl.BACK;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
break;
|
|
544
|
+
case 0x85b5:
|
|
545
|
+
// VERTEX_ARRAY_BINDING_OES
|
|
546
|
+
if (value === this._defaultVertexArray) {
|
|
547
|
+
return null;
|
|
548
|
+
}
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
return value;
|
|
552
|
+
}
|
|
553
|
+
function virtualBindFramebuffer(bindpoint, framebuffer) {
|
|
554
|
+
makeCurrentContext(this);
|
|
555
|
+
resizeCanvasIfChanged(this);
|
|
556
|
+
var gl = sharedWebGLContext;
|
|
557
|
+
if (bindpoint === WebGLRenderingContext.FRAMEBUFFER) {
|
|
558
|
+
if (framebuffer === null) {
|
|
559
|
+
// bind our drawingBuffer
|
|
560
|
+
framebuffer = this._drawingbufferFramebuffer;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
gl.bindFramebuffer(bindpoint, framebuffer);
|
|
564
|
+
this._state.framebuffer = framebuffer;
|
|
565
|
+
}
|
|
566
|
+
function createWrapper(origFn) {
|
|
567
|
+
// lots of optimization could happen here depending on specific functions
|
|
568
|
+
return function () {
|
|
569
|
+
makeCurrentContext(this);
|
|
570
|
+
resizeCanvasIfChanged(this);
|
|
571
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key6 = 0; _key6 < _len4; _key6++) {
|
|
572
|
+
args[_key6] = arguments[_key6];
|
|
573
|
+
}
|
|
574
|
+
return origFn.call(sharedWebGLContext, ...args);
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
function clearIfNeeded(vctx) {
|
|
578
|
+
if (vctx._needClear) {
|
|
579
|
+
vctx._needClear = false;
|
|
580
|
+
var _gl = sharedWebGLContext;
|
|
581
|
+
_gl.bindFramebuffer(_gl.FRAMEBUFFER, vctx._drawingbufferFramebuffer);
|
|
582
|
+
_gl.disable(_gl.SCISSOR_TEST);
|
|
583
|
+
_gl.clear(_gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT | _gl.STENCIL_BUFFER_BIT);
|
|
584
|
+
enableDisable(_gl, _gl.SCISSOR_TEST, vctx._state.scissorTest);
|
|
585
|
+
_gl.bindFramebuffer(_gl.FRAMEBUFFER, vctx._state.framebuffer);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
function beforeDraw(vctx) {
|
|
589
|
+
makeCurrentContext(vctx);
|
|
590
|
+
resizeCanvasIfChanged(vctx);
|
|
591
|
+
clearIfNeeded(vctx);
|
|
592
|
+
}
|
|
593
|
+
function afterDraw(vctx) {
|
|
594
|
+
if (isFramebufferBindingNull(vctx)) {
|
|
595
|
+
vctx._needComposite = true;
|
|
596
|
+
if (!someContextsNeedRendering) {
|
|
597
|
+
someContextsNeedRendering = true;
|
|
598
|
+
setTimeout(renderAllDirtyVirtualCanvases, 0);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
function createDrawWrapper(origFn) {
|
|
603
|
+
return function () {
|
|
604
|
+
// a rendering function was called so we need to copy are drawingBuffer
|
|
605
|
+
// to the canvas for this context after the current event.
|
|
606
|
+
beforeDraw(this);
|
|
607
|
+
for (var _len5 = arguments.length, args = new Array(_len5), _key7 = 0; _key7 < _len5; _key7++) {
|
|
608
|
+
args[_key7] = arguments[_key7];
|
|
609
|
+
}
|
|
610
|
+
var result = origFn.call(sharedWebGLContext, ...args);
|
|
611
|
+
afterDraw(this);
|
|
612
|
+
return result;
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
function makeCurrentContext(vctx) {
|
|
616
|
+
if (currentVirtualContext === vctx) {
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
// save all current WebGL state on the previous current virtual context
|
|
621
|
+
if (currentVirtualContext) {
|
|
622
|
+
saveAllState(currentVirtualContext._state, currentVirtualContext);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// restore all state for the new context
|
|
626
|
+
restoreAllState(vctx._state, vctx);
|
|
627
|
+
|
|
628
|
+
// check if the current state is supposed to be rendering to the canvas.
|
|
629
|
+
// if so bind vctx._drawingbuffer
|
|
630
|
+
|
|
631
|
+
currentVirtualContext = vctx;
|
|
632
|
+
}
|
|
633
|
+
function resizeCanvasIfChanged(vctx) {
|
|
634
|
+
var width = vctx.canvas.width;
|
|
635
|
+
var height = vctx.canvas.height;
|
|
636
|
+
if (width !== vctx._width || height !== vctx._height) {
|
|
637
|
+
vctx._width = width;
|
|
638
|
+
vctx._height = height;
|
|
639
|
+
var _gl2 = sharedWebGLContext;
|
|
640
|
+
var oldTexture = _gl2.getParameter(_gl2.TEXTURE_BINDING_2D);
|
|
641
|
+
var format = vctx._contextAttributes.alpha ? _gl2.RGBA : _gl2.RGB;
|
|
642
|
+
_gl2.bindTexture(_gl2.TEXTURE_2D, vctx._drawingbufferTexture);
|
|
643
|
+
_gl2.texImage2D(_gl2.TEXTURE_2D, 0, format, width, height, 0, format, _gl2.UNSIGNED_BYTE, null);
|
|
644
|
+
_gl2.bindTexture(_gl2.TEXTURE_2D, oldTexture);
|
|
645
|
+
if (vctx._depthRenderbuffer) {
|
|
646
|
+
var oldRenderbuffer = _gl2.getParameter(_gl2.RENDERBUFFER_BINDING);
|
|
647
|
+
var internalFormat = vctx._contextAttributes.stencil ? _gl2.DEPTH_STENCIL : _gl2.DEPTH_COMPONENT16;
|
|
648
|
+
_gl2.bindRenderbuffer(_gl2.RENDERBUFFER, vctx._depthRenderbuffer);
|
|
649
|
+
_gl2.renderbufferStorage(_gl2.RENDERBUFFER, internalFormat, width, height);
|
|
650
|
+
_gl2.bindRenderbuffer(_gl2.RENDERBUFFER, oldRenderbuffer);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
function createOrGetVirtualWebGLContext(canvas, type, contextAttributes) {
|
|
655
|
+
// check if this canvas already has a context
|
|
656
|
+
var existingVirtualCtx = canvasToVirtualContextMap.get(canvas);
|
|
657
|
+
if (existingVirtualCtx) {
|
|
658
|
+
return existingVirtualCtx;
|
|
659
|
+
}
|
|
660
|
+
var compositor = settings.compositorCreator(canvas, type, contextAttributes) || new DefaultCompositor(canvas, type, contextAttributes);
|
|
661
|
+
var newVirtualCtx = new VirtualWebGLContext(canvas, contextAttributes, compositor, () => {
|
|
662
|
+
canvasToVirtualContextMap.delete(canvas);
|
|
663
|
+
});
|
|
664
|
+
canvasToVirtualContextMap.set(canvas, newVirtualCtx);
|
|
665
|
+
return newVirtualCtx;
|
|
666
|
+
}
|
|
667
|
+
function createProgram(gl, shaderSources) {
|
|
668
|
+
var program = gl.createProgram();
|
|
669
|
+
[gl.VERTEX_SHADER, gl.FRAGMENT_SHADER].forEach((type, ndx) => {
|
|
670
|
+
var shader = gl.createShader(type);
|
|
671
|
+
gl.shaderSource(shader, shaderSources[ndx]);
|
|
672
|
+
gl.compileShader(shader);
|
|
673
|
+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
674
|
+
console.error(gl.getShaderInfoLog(shader)); // eslint-disable-line
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
gl.attachShader(program, shader);
|
|
678
|
+
});
|
|
679
|
+
gl.bindAttribLocation(program, 0, 'position');
|
|
680
|
+
gl.linkProgram(program);
|
|
681
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
682
|
+
console.error(gl.getProgramInfoLog(program)); // eslint-disable-line
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
return program;
|
|
686
|
+
}
|
|
687
|
+
function saveAllState(state, vctx) {
|
|
688
|
+
// save all WebGL state (current bindings, current texture units,
|
|
689
|
+
// current attributes and/or vertex shade object, current program,
|
|
690
|
+
// current blend, stencil, zbuffer, culling, viewport etc... state
|
|
691
|
+
var gl = sharedWebGLContext;
|
|
692
|
+
state.activeTexture = gl.getParameter(gl.ACTIVE_TEXTURE);
|
|
693
|
+
|
|
694
|
+
// save texture units
|
|
695
|
+
for (var i = 0; i < numTextureUnits; ++i) {
|
|
696
|
+
gl.activeTexture(gl.TEXTURE0 + i);
|
|
697
|
+
var unit = state.textureUnits[i];
|
|
698
|
+
unit.texture2D = gl.getParameter(gl.TEXTURE_BINDING_2D);
|
|
699
|
+
unit.textureCubemap = gl.getParameter(gl.TEXTURE_BINDING_CUBE_MAP);
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
// bindings
|
|
703
|
+
state.arrayBuffer = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
|
|
704
|
+
state.renderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);
|
|
705
|
+
state.framebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
|
|
706
|
+
|
|
707
|
+
// save attributes
|
|
708
|
+
if (sharedVAOExtension) {
|
|
709
|
+
state.vertexArray = gl.getParameter(sharedVAOExtension.VERTEX_ARRAY_BINDING_OES);
|
|
710
|
+
} else {
|
|
711
|
+
for (var _i3 = 0; _i3 < numAttributes; ++_i3) {
|
|
712
|
+
var attrib = state.attributes[_i3];
|
|
713
|
+
attrib.buffer = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
|
|
714
|
+
attrib.enabled = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_ENABLED);
|
|
715
|
+
attrib.size = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_SIZE);
|
|
716
|
+
attrib.stride = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_STRIDE);
|
|
717
|
+
attrib.type = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_TYPE);
|
|
718
|
+
attrib.normalized = gl.getVertexAttrib(_i3, gl.VERTEX_ATTRIB_ARRAY_NORMALIZED);
|
|
719
|
+
attrib.value = gl.getVertexAttrib(_i3, gl.CURRENT_VERTEX_ATTRIB);
|
|
720
|
+
attrib.offset = gl.getVertexAttribOffset(_i3, gl.VERTEX_ATTRIB_ARRAY_POINTER);
|
|
721
|
+
if (sharedInstanceExtension) {
|
|
722
|
+
attrib.divisor = gl.getVertexAttrib(_i3, sharedInstanceExtension.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE);
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
state.elementArrayBuffer = gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING);
|
|
726
|
+
}
|
|
727
|
+
state.blend = gl.getParameter(gl.BLEND);
|
|
728
|
+
state.cullFace = gl.getParameter(gl.CULL_FACE);
|
|
729
|
+
state.depthTest = gl.getParameter(gl.DEPTH_TEST);
|
|
730
|
+
state.dither = gl.getParameter(gl.DITHER);
|
|
731
|
+
state.polygonOffsetFill = gl.getParameter(gl.POLYGON_OFFSET_FILL);
|
|
732
|
+
state.sampleAlphaToCoverage = gl.getParameter(gl.SAMPLE_ALPHA_TO_COVERAGE);
|
|
733
|
+
state.sampleCoverage = gl.getParameter(gl.SAMPLE_COVERAGE);
|
|
734
|
+
state.scissorTest = gl.getParameter(gl.SCISSOR_TEST);
|
|
735
|
+
state.stencilTest = gl.getParameter(gl.STENCIL_TEST);
|
|
736
|
+
state.packAlignment = gl.getParameter(gl.PACK_ALIGNMENT);
|
|
737
|
+
state.unpackAlignment = gl.getParameter(gl.UNPACK_ALIGNMENT);
|
|
738
|
+
state.unpackColorspaceConversion = gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL);
|
|
739
|
+
state.unpackFlipY = gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);
|
|
740
|
+
state.unpackPremultiplyAlpha = gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL);
|
|
741
|
+
state.currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
742
|
+
state.viewport = gl.getParameter(gl.VIEWPORT);
|
|
743
|
+
state.scissor = gl.getParameter(gl.SCISSOR_BOX);
|
|
744
|
+
state.blendSrcRgb = gl.getParameter(gl.BLEND_SRC_RGB);
|
|
745
|
+
state.blendDstRgb = gl.getParameter(gl.BLEND_DST_RGB);
|
|
746
|
+
state.blendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA);
|
|
747
|
+
state.blendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA);
|
|
748
|
+
state.blendEquationRgb = gl.getParameter(gl.BLEND_EQUATION_RGB);
|
|
749
|
+
state.blendEquationAlpha = gl.getParameter(gl.BLEND_EQUATION_ALPHA);
|
|
750
|
+
state.blendColor = gl.getParameter(gl.BLEND_COLOR);
|
|
751
|
+
state.colorClearValue = gl.getParameter(gl.COLOR_CLEAR_VALUE);
|
|
752
|
+
state.colorMask = gl.getParameter(gl.COLOR_WRITEMASK);
|
|
753
|
+
state.cullFaceMode = gl.getParameter(gl.CULL_FACE_MODE);
|
|
754
|
+
state.depthClearValue = gl.getParameter(gl.DEPTH_CLEAR_VALUE);
|
|
755
|
+
state.depthFunc = gl.getParameter(gl.DEPTH_FUNC);
|
|
756
|
+
state.depthRange = gl.getParameter(gl.DEPTH_RANGE);
|
|
757
|
+
state.depthMask = gl.getParameter(gl.DEPTH_WRITEMASK);
|
|
758
|
+
state.frontFace = gl.getParameter(gl.FRONT_FACE);
|
|
759
|
+
state.generateMipmapHint = gl.getParameter(gl.GENERATE_MIPMAP_HINT);
|
|
760
|
+
state.lineWidth = gl.getParameter(gl.LINE_WIDTH);
|
|
761
|
+
state.polygonOffsetFactor = gl.getParameter(gl.POLYGON_OFFSET_FACTOR);
|
|
762
|
+
state.polygonOffsetUnits = gl.getParameter(gl.POLYGON_OFFSET_UNITS);
|
|
763
|
+
state.sampleCoverageValue = gl.getParameter(gl.SAMPLE_COVERAGE_VALUE);
|
|
764
|
+
state.sampleCoverageUnits = gl.getParameter(gl.SAMPLE_COVERAGE_INVERT);
|
|
765
|
+
state.stencilBackFail = gl.getParameter(gl.STENCIL_BACK_FAIL);
|
|
766
|
+
state.stencilBackFunc = gl.getParameter(gl.STENCIL_BACK_FUNC);
|
|
767
|
+
state.stencilBackPassDepthFail = gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_FAIL);
|
|
768
|
+
state.stencilBackPassDepthPass = gl.getParameter(gl.STENCIL_BACK_PASS_DEPTH_PASS);
|
|
769
|
+
state.stencilBackRef = gl.getParameter(gl.STENCIL_BACK_REF);
|
|
770
|
+
state.stencilBackValueMask = gl.getParameter(gl.STENCIL_BACK_VALUE_MASK);
|
|
771
|
+
state.stencilBackWriteMask = gl.getParameter(gl.STENCIL_BACK_WRITEMASK);
|
|
772
|
+
state.stencilClearValue = gl.getParameter(gl.STENCIL_CLEAR_VALUE);
|
|
773
|
+
state.stencilFail = gl.getParameter(gl.STENCIL_FAIL);
|
|
774
|
+
state.stencilFunc = gl.getParameter(gl.STENCIL_FUNC);
|
|
775
|
+
state.stencilPassDepthFail = gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL);
|
|
776
|
+
state.stencilPassDepthPass = gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS);
|
|
777
|
+
state.stencilRef = gl.getParameter(gl.STENCIL_REF);
|
|
778
|
+
state.stencilValueMask = gl.getParameter(gl.STENCIL_VALUE_MASK);
|
|
779
|
+
state.stencilWriteMask = gl.getParameter(gl.STENCIL_WRITEMASK);
|
|
780
|
+
for (var fns of extensionSaveRestoreHelpersArray) {
|
|
781
|
+
fns.save(state, vctx);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
function restoreAllState(state, vctx) {
|
|
785
|
+
// restore all WebGL state (current bindings, current texture units,
|
|
786
|
+
// current attributes and/or vertex shade object, current program,
|
|
787
|
+
// current blend, stencil, zbuffer, culling, viewport etc... state
|
|
788
|
+
// save all WebGL state (current bindings, current texture units,
|
|
789
|
+
// current attributes and/or vertex shade object, current program,
|
|
790
|
+
// current blend, stencil, zbuffer, culling, viewport etc... state
|
|
791
|
+
var gl = sharedWebGLContext;
|
|
792
|
+
|
|
793
|
+
// restore texture units
|
|
794
|
+
for (var i = 0; i < numTextureUnits; ++i) {
|
|
795
|
+
gl.activeTexture(gl.TEXTURE0 + i);
|
|
796
|
+
var unit = state.textureUnits[i];
|
|
797
|
+
gl.bindTexture(gl.TEXTURE_2D, unit.texture2D);
|
|
798
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, unit.textureCubemap);
|
|
799
|
+
}
|
|
800
|
+
gl.activeTexture(state.activeTexture);
|
|
801
|
+
|
|
802
|
+
// restore attributes
|
|
803
|
+
if (sharedVAOExtension) {
|
|
804
|
+
sharedVAOExtension.bindVertexArrayOES(state.vertexArray);
|
|
805
|
+
} else {
|
|
806
|
+
for (var _i4 = 0; _i4 < numAttributes; ++_i4) {
|
|
807
|
+
var attrib = state.attributes[_i4];
|
|
808
|
+
if (attrib.enabled) {
|
|
809
|
+
gl.enableVertexAttribArray(_i4);
|
|
810
|
+
} else {
|
|
811
|
+
gl.disableVertexAttribArray(_i4);
|
|
812
|
+
}
|
|
813
|
+
gl.vertexAttrib4fv(_i4, attrib.value);
|
|
814
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, attrib.buffer);
|
|
815
|
+
gl.vertexAttribPointer(_i4, attrib.size, attrib.type, attrib.normalized, attrib.stride, attrib.offset);
|
|
816
|
+
if (sharedInstanceExtension) {
|
|
817
|
+
sharedInstanceExtension.vertexAttribDivisorANGLE(_i4, attrib.divisor);
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, state.elementArrayBuffer);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
// bindings'
|
|
824
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, state.arrayBuffer);
|
|
825
|
+
gl.bindRenderbuffer(gl.RENDERBUFFER, state.renderbuffer);
|
|
826
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, state.framebuffer);
|
|
827
|
+
enableDisable(gl, gl.BLEND, state.blend);
|
|
828
|
+
enableDisable(gl, gl.CULL_FACE, state.cullFace);
|
|
829
|
+
enableDisable(gl, gl.DEPTH_TEST, state.depthTest);
|
|
830
|
+
enableDisable(gl, gl.DITHER, state.dither);
|
|
831
|
+
enableDisable(gl, gl.POLYGON_OFFSET_FILL, state.polygonOffsetFill);
|
|
832
|
+
enableDisable(gl, gl.SAMPLE_ALPHA_TO_COVERAGE, state.sampleAlphaToCoverage);
|
|
833
|
+
enableDisable(gl, gl.SAMPLE_COVERAGE, state.sampleCoverage);
|
|
834
|
+
enableDisable(gl, gl.SCISSOR_TEST, state.scissorTest);
|
|
835
|
+
enableDisable(gl, gl.STENCIL_TEST, state.stencilTest);
|
|
836
|
+
gl.pixelStorei(gl.PACK_ALIGNMENT, state.packAlignment);
|
|
837
|
+
gl.pixelStorei(gl.UNPACK_ALIGNMENT, state.unpackAlignment);
|
|
838
|
+
gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, state.unpackColorspaceConversion);
|
|
839
|
+
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, state.unpackFlipY);
|
|
840
|
+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, state.unpackPremultiplyAlpha);
|
|
841
|
+
gl.useProgram(state.currentProgram);
|
|
842
|
+
gl.viewport(...state.viewport);
|
|
843
|
+
gl.scissor(...state.scissor);
|
|
844
|
+
gl.blendFuncSeparate(state.blendSrcRgb, state.blendDstRgb, state.blendSrcAlpha, state.blendDstAlpha);
|
|
845
|
+
gl.blendEquationSeparate(state.blendEquationRgb, state.blendEquationAlpha);
|
|
846
|
+
gl.blendColor(...state.blendColor);
|
|
847
|
+
gl.clearColor(...state.colorClearValue);
|
|
848
|
+
gl.colorMask(...state.colorMask);
|
|
849
|
+
gl.cullFace(state.cullFaceMode);
|
|
850
|
+
gl.clearDepth(state.depthClearValue);
|
|
851
|
+
gl.depthFunc(state.depthFunc);
|
|
852
|
+
gl.depthRange(...state.depthRange);
|
|
853
|
+
gl.depthMask(state.depthMask);
|
|
854
|
+
gl.frontFace(state.frontFace);
|
|
855
|
+
gl.hint(gl.GENERATE_MIPMAP_HINT, state.generateMipmapHint);
|
|
856
|
+
gl.lineWidth(state.lineWidth);
|
|
857
|
+
gl.polygonOffset(state.polygonOffsetFactor, state.polygonOffsetUnits);
|
|
858
|
+
gl.sampleCoverage(state.sampleCoverageValue, state.sampleCoverageUnits);
|
|
859
|
+
gl.stencilFuncSeparate(gl.BACK, state.stencilBackFunc, state.stencilBackRef, state.stencilBackValueMask);
|
|
860
|
+
gl.stencilFuncSeparate(gl.FRONT, state.stencilFunc, state.stencilRef, state.stencilValueMask);
|
|
861
|
+
gl.stencilOpSeparate(gl.BACK, state.stencilBackFail, state.stencilBackPassDepthFail, state.stencilBackPassDepthPass);
|
|
862
|
+
gl.stencilOpSeparate(gl.FRONT, state.stencilFail, state.stencilPassDepthFail, state.stencilPassDepthPass);
|
|
863
|
+
gl.stencilMaskSeparate(gl.BACK, state.stencilBackWriteMask);
|
|
864
|
+
gl.stencilMaskSeparate(gl.FRONT, state.stencilWriteMask);
|
|
865
|
+
gl.clearStencil(state.stencilClearValue);
|
|
866
|
+
for (var fns of extensionSaveRestoreHelpersArray) {
|
|
867
|
+
fns.restore(state, vctx);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
function enableDisable(gl, feature, enable) {
|
|
871
|
+
if (enable) {
|
|
872
|
+
gl.enable(feature);
|
|
873
|
+
} else {
|
|
874
|
+
gl.disable(feature);
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
function renderAllDirtyVirtualCanvases() {
|
|
878
|
+
if (!someContextsNeedRendering) {
|
|
879
|
+
return;
|
|
880
|
+
}
|
|
881
|
+
someContextsNeedRendering = false;
|
|
882
|
+
|
|
883
|
+
// save all current WebGL state on the previous current virtual context
|
|
884
|
+
if (currentVirtualContext) {
|
|
885
|
+
saveAllState(currentVirtualContext._state, currentVirtualContext);
|
|
886
|
+
currentVirtualContext = null;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
// set the state back to the one for drawing the canvas
|
|
890
|
+
restoreAllState(baseState);
|
|
891
|
+
for (var vctx of canvasToVirtualContextMap.values()) {
|
|
892
|
+
if (!vctx._needComposite) {
|
|
893
|
+
continue;
|
|
894
|
+
}
|
|
895
|
+
vctx._needComposite = false;
|
|
896
|
+
vctx.composite(sharedWebGLContext);
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
window.requestAnimationFrame = function (origFn) {
|
|
900
|
+
return function (callback) {
|
|
901
|
+
return origFn.call(window, time => {
|
|
902
|
+
var result = callback(time);
|
|
903
|
+
renderAllDirtyVirtualCanvases();
|
|
904
|
+
return result;
|
|
905
|
+
});
|
|
906
|
+
};
|
|
907
|
+
}(window.requestAnimationFrame);
|
|
908
|
+
function setup(options) {
|
|
909
|
+
Object.assign(settings, options);
|
|
910
|
+
}
|
|
911
|
+
window.virtualWebGL = {
|
|
912
|
+
setup
|
|
913
|
+
};
|
|
914
|
+
}
|
|
915
|
+
//# sourceMappingURL=virtual-webgl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-webgl.js","names":["initializeVirtualWebGL","settings","disableWebGL2","compositorCreator","canvasToVirtualContextMap","Map","extensionInfo","webgl_draw_buffers","wrapperFnMakerFn","makeWEBGL_draw_buffersWrapper","saveRestoreMakerFn","makeWEBGL_drawBuffersSaveRestoreHelper","oes_vertex_array_object","makeOES_vertex_array_objectWrapper","angle_instanced_arrays","makeANGLE_instanced_arraysWrapper","extensionSaveRestoreHelpersArray","extensionSaveRestoreHelpers","currentVirtualContext","someContextsNeedRendering","sharedWebGLContext","document","createElement","getContext","sharedVAOExtension","getExtension","sharedInstanceExtension","numAttributes","getParameter","MAX_VERTEX_ATTRIBS","numTextureUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","numDrawBuffers","baseState","makeDefaultState","vs","fs","fs2","premultplyAlphaTrueProgram","createProgram","premultplyAlphaFalseProgram","vao","createVertexArrayOES","bindVertexArrayOES","vertexArray","gl","positionLoc","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","enableVertexAttribArray","vertexAttribPointer","FLOAT","saveAllState","HTMLCanvasElement","prototype","origFn","type","contextAttributes","createOrGetVirtualWebGLContext","call","valueOrDefault","value","defaultValue","undefined","errorDisposedContext","fnName","Error","concat","DefaultCompositor","constructor","canvas","_ctx","composite","texture","ctx","width","height","maxWidth","Math","max","maxHeight","viewport","useProgram","premultipliedAlpha","bindTexture","TEXTURE_2D","drawArrays","TRIANGLES","globalCompositeOperation","drawImage","dispose","VirtualWebGLContext","arguments","length","compositor","disposeHelper","_compositor","_disposeHelper","_extensions","_drawingbufferTexture","createTexture","_drawingbufferFramebuffer","createFramebuffer","_contextAttributes","alpha","antialias","depth","failIfMajorPerformanceCaveat","stencil","_preserveDrawingbuffer","preserveDrawingBuffer","oldTexture","TEXTURE_BINDING_2D","oldFramebuffer","FRAMEBUFFER_BINDING","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_MAG_FILTER","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","oldRenderbuffer","RENDERBUFFER_BINDING","_depthRenderbuffer","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","attachmentPoint","DEPTH_STENCIL_ATTACHMENT","DEPTH_ATTACHMENT","framebufferRenderbuffer","_state","framebuffer","_defaultVertexArray","deleteFramebuffer","deleteTexture","deleteRenderbuffer","key","Object","entries","drawingBufferWidth","drawingBufferHeight","_needClear","WebGLRenderingContext","state","arrayBuffer","renderbuffer","blend","cullFace","depthTest","dither","polygonOffsetFill","sampleAlphaToCoverage","sampleCoverage","scissorTest","stencilTest","activeTexture","TEXTURE0","packAlignment","unpackAlignment","unpackColorspaceConversion","BROWSER_DEFAULT_WEBGL","unpackFlipY","unpackPremultiplyAlpha","currentProgram","scissor","blendSrcRgb","ONE","blendDstRgb","ZERO","blendSrcAlpha","blendDstAlpha","blendEquationRgb","FUNC_ADD","blendEquationAlpha","blendColor","colorClearValue","colorMask","cullFaceMode","BACK","depthClearValue","depthFunc","LESS","depthRange","depthMask","frontFace","CCW","generateMipmapHint","DONT_CARE","lineWidth","polygonOffsetFactor","polygonOffsetUnits","sampleCoverageValue","sampleCoverageUnits","stencilBackFail","KEEP","stencilBackFunc","ALWAYS","stencilBackPassDepthFail","stencilBackPassDepthPass","stencilBackRef","stencilBackValueMask","stencilBackWriteMask","stencilClearValue","stencilFail","stencilFunc","stencilPassDepthFail","stencilPassDepthPass","stencilRef","stencilValueMask","stencilWriteMask","textureUnits","elementArrayBuffer","attributes","i","attrib","enabled","size","stride","normalized","divisor","push","texture2D","textureCubemap","propDesc","getOwnPropertyDescriptor","get","virtualPropDesc","console","warn","newValue","virtualGetContextAttributes","createGetExtensionWrapper","virtualBindFramebuffer","virtualGetParameter","virtualReadPixels","createDrawWrapper","createWrapper","extensionName","toLowerCase","existingExt","ext","wrapperInfo","log","saveRestoreHelper","saveRestore","wrapper","_context","isFramebufferBindingNull","vctx","name","virutalbindVertexArrayOES","makeCurrentContext","resizeCanvasIfChanged","_len","args","Array","_key3","createExtDrawWrapper","_len2","_key4","beforeDraw","_len3","_key5","result","exts","afterDraw","backBuffer","drawingBuffers","maxDrawBuffers","MAX_DRAW_BUFFERS_WEBGL","defaultBackDrawBuffers","defaultFBDrawBuffers","NONE","initDrawBufferState","drawBuffers","slice","save","DRAW_BUFFER0_WEBGL","restore","drawBuffersWEBGL","clearIfNeeded","readPixels","pname","bindpoint","_len4","_key6","disable","SCISSOR_TEST","clear","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","enableDisable","_needComposite","setTimeout","renderAllDirtyVirtualCanvases","_len5","_key7","restoreAllState","_width","_height","format","RGBA","RGB","texImage2D","UNSIGNED_BYTE","internalFormat","DEPTH_STENCIL","DEPTH_COMPONENT16","renderbufferStorage","existingVirtualCtx","newVirtualCtx","delete","set","shaderSources","program","VERTEX_SHADER","FRAGMENT_SHADER","forEach","ndx","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","error","getShaderInfoLog","attachShader","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","ACTIVE_TEXTURE","unit","TEXTURE_BINDING_CUBE_MAP","ARRAY_BUFFER_BINDING","VERTEX_ARRAY_BINDING_OES","getVertexAttrib","VERTEX_ATTRIB_ARRAY_BUFFER_BINDING","VERTEX_ATTRIB_ARRAY_ENABLED","VERTEX_ATTRIB_ARRAY_SIZE","VERTEX_ATTRIB_ARRAY_STRIDE","VERTEX_ATTRIB_ARRAY_TYPE","VERTEX_ATTRIB_ARRAY_NORMALIZED","CURRENT_VERTEX_ATTRIB","offset","getVertexAttribOffset","VERTEX_ATTRIB_ARRAY_POINTER","VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE","ELEMENT_ARRAY_BUFFER_BINDING","BLEND","CULL_FACE","DEPTH_TEST","DITHER","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","SAMPLE_COVERAGE","STENCIL_TEST","PACK_ALIGNMENT","UNPACK_ALIGNMENT","UNPACK_COLORSPACE_CONVERSION_WEBGL","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","CURRENT_PROGRAM","VIEWPORT","SCISSOR_BOX","BLEND_SRC_RGB","BLEND_DST_RGB","BLEND_SRC_ALPHA","BLEND_DST_ALPHA","BLEND_EQUATION_RGB","BLEND_EQUATION_ALPHA","BLEND_COLOR","COLOR_CLEAR_VALUE","COLOR_WRITEMASK","CULL_FACE_MODE","DEPTH_CLEAR_VALUE","DEPTH_FUNC","DEPTH_RANGE","DEPTH_WRITEMASK","FRONT_FACE","GENERATE_MIPMAP_HINT","LINE_WIDTH","POLYGON_OFFSET_FACTOR","POLYGON_OFFSET_UNITS","SAMPLE_COVERAGE_VALUE","SAMPLE_COVERAGE_INVERT","STENCIL_BACK_FAIL","STENCIL_BACK_FUNC","STENCIL_BACK_PASS_DEPTH_FAIL","STENCIL_BACK_PASS_DEPTH_PASS","STENCIL_BACK_REF","STENCIL_BACK_VALUE_MASK","STENCIL_BACK_WRITEMASK","STENCIL_CLEAR_VALUE","STENCIL_FAIL","STENCIL_FUNC","STENCIL_PASS_DEPTH_FAIL","STENCIL_PASS_DEPTH_PASS","STENCIL_REF","STENCIL_VALUE_MASK","STENCIL_WRITEMASK","fns","TEXTURE_CUBE_MAP","disableVertexAttribArray","vertexAttrib4fv","vertexAttribDivisorANGLE","ELEMENT_ARRAY_BUFFER","pixelStorei","blendFuncSeparate","blendEquationSeparate","clearColor","clearDepth","hint","polygonOffset","stencilFuncSeparate","FRONT","stencilOpSeparate","stencilMaskSeparate","clearStencil","feature","enable","values","window","requestAnimationFrame","callback","time","setup","options","assign","virtualWebGL"],"sources":["../src/virtual-webgl.ts"],"sourcesContent":["/* eslint-disable */\n// @ts-nocheck\n// Copied from https://github.com/greggman/virtual-webgl\n// Used to show many WebGL plots on the same page\n// https://github.com/plotly/plotly.js/?tab=readme-ov-file#need-to-have-several-webgl-graphs-on-a-page\n/*\n * Copyright 2018, Gregg Tavares.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *\n * * Neither the name of Gregg Tavares. nor the names of his\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nexport function initializeVirtualWebGL() {\n const settings = {\n disableWebGL2: false,\n compositorCreator() {},\n };\n const canvasToVirtualContextMap = new Map();\n const extensionInfo = {\n webgl_draw_buffers: {\n wrapperFnMakerFn: makeWEBGL_draw_buffersWrapper,\n saveRestoreMakerFn: makeWEBGL_drawBuffersSaveRestoreHelper,\n },\n oes_vertex_array_object: {\n wrapperFnMakerFn: makeOES_vertex_array_objectWrapper,\n },\n angle_instanced_arrays: {\n wrapperFnMakerFn: makeANGLE_instanced_arraysWrapper,\n },\n };\n const extensionSaveRestoreHelpersArray = [];\n const extensionSaveRestoreHelpers = {};\n\n let currentVirtualContext = null;\n let someContextsNeedRendering;\n\n const sharedWebGLContext = document\n .createElement('canvas')\n .getContext('webgl');\n const sharedVAOExtension = sharedWebGLContext.getExtension(\n 'OES_vertex_array_object'\n );\n const sharedInstanceExtension = sharedWebGLContext.getExtension(\n 'ANGLE_instanced_arrays'\n );\n const numAttributes = sharedWebGLContext.getParameter(\n sharedWebGLContext.MAX_VERTEX_ATTRIBS\n );\n const numTextureUnits = sharedWebGLContext.getParameter(\n sharedWebGLContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS\n );\n let numDrawBuffers;\n const baseState = makeDefaultState(300, 150);\n\n const vs = `\n attribute vec4 position;\n varying vec2 v_texcoord;\n void main() {\n gl_Position = position;\n v_texcoord = position.xy * .5 + .5;\n }\n `;\n\n const fs = `\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n }\n `;\n\n const fs2 = `\n precision mediump float;\n varying vec2 v_texcoord;\n uniform sampler2D u_tex;\n void main() {\n gl_FragColor = texture2D(u_tex, v_texcoord);\n gl_FragColor.rgb *= gl_FragColor.a;\n }\n `;\n\n const premultplyAlphaTrueProgram = createProgram(sharedWebGLContext, [\n vs,\n fs,\n ]);\n const premultplyAlphaFalseProgram = createProgram(sharedWebGLContext, [\n vs,\n fs2,\n ]);\n\n if (sharedVAOExtension) {\n const vao = sharedVAOExtension.createVertexArrayOES();\n sharedVAOExtension.bindVertexArrayOES(vao);\n baseState.vertexArray = vao;\n }\n\n {\n const gl = sharedWebGLContext;\n const positionLoc = 0; // hard coded in createProgram\n\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]),\n gl.STATIC_DRAW\n );\n\n gl.enableVertexAttribArray(positionLoc);\n gl.vertexAttribPointer(positionLoc, 2, gl.FLOAT, false, 0, 0);\n }\n\n saveAllState(baseState);\n\n HTMLCanvasElement.prototype.getContext = (function (origFn) {\n return function (type, contextAttributes) {\n if (type === 'webgl' || type === 'experimental-webgl') {\n return createOrGetVirtualWebGLContext(this, type, contextAttributes);\n } else if (type === 'webgl2' && settings.disableWebGL2) {\n return null;\n }\n return origFn.call(this, type, contextAttributes);\n };\n })(HTMLCanvasElement.prototype.getContext);\n\n function valueOrDefault(value, defaultValue) {\n return value === undefined ? defaultValue : value;\n }\n\n function errorDisposedContext(fnName) {\n return function () {\n throw new Error(`tried to call ${fnName} on disposed context`);\n };\n }\n\n class DefaultCompositor {\n constructor(canvas) {\n this._ctx = canvas.getContext('2d');\n }\n composite(gl, texture, canvas, contextAttributes) {\n // note: not entirely sure what to do here. We need this canvas to be at least as large\n // as the canvas we're drawing to. Resizing a canvas is slow so I think just making\n // sure we never get smaller than the largest canvas. At the moment though I'm too lazy\n // to make it smaller.\n const ctx = this._ctx;\n const width = canvas.width;\n const height = canvas.height;\n const maxWidth = Math.max(gl.canvas.width, width);\n const maxHeight = Math.max(gl.canvas.height, height);\n if (gl.canvas.width !== maxWidth || gl.canvas.height !== maxHeight) {\n gl.canvas.width = maxWidth;\n gl.canvas.height = maxHeight;\n }\n\n gl.viewport(0, 0, width, height);\n\n gl.useProgram(\n contextAttributes.premultipliedAlpha\n ? premultplyAlphaTrueProgram\n : premultplyAlphaFalseProgram\n );\n\n // draw the drawingbuffer's texture to the offscreen canvas\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // copy it to target canvas\n ctx.globalCompositeOperation = 'copy';\n ctx.drawImage(\n gl.canvas,\n 0,\n maxHeight - height,\n width,\n height, // src rect\n 0,\n 0,\n width,\n height\n ); // dest rect\n }\n dispose() {}\n }\n\n class VirtualWebGLContext {\n constructor(canvas, contextAttributes = {}, compositor, disposeHelper) {\n const gl = sharedWebGLContext;\n this.canvas = canvas;\n // Should use Symbols or someting to hide these variables from the outside.\n\n this._compositor = compositor;\n this._disposeHelper = disposeHelper;\n this._extensions = {};\n // based on context attributes and canvas.width, canvas.height\n // create a texture and framebuffer\n this._drawingbufferTexture = gl.createTexture();\n this._drawingbufferFramebuffer = gl.createFramebuffer();\n this._contextAttributes = {\n alpha: valueOrDefault(contextAttributes.alpha, true),\n antialias: false,\n depth: valueOrDefault(contextAttributes.depth, true),\n failIfMajorPerformanceCaveat: false,\n premultipliedAlpha: valueOrDefault(\n contextAttributes.premultipliedAlpha,\n true\n ),\n stencil: valueOrDefault(contextAttributes.stencil, false),\n };\n this._preserveDrawingbuffer = valueOrDefault(\n contextAttributes.preserveDrawingBuffer,\n false\n );\n\n const oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n const oldFramebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);\n\n gl.bindTexture(gl.TEXTURE_2D, this._drawingbufferTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n // this._drawingbufferTexture.id = canvas.id;\n // this._drawingbufferFramebuffer.id = canvas.id;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, this._drawingbufferFramebuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n this._drawingbufferTexture,\n 0\n );\n\n if (this._contextAttributes.depth) {\n const oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n this._depthRenderbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, this._depthRenderbuffer);\n const attachmentPoint = this._contextAttributes.stencil\n ? gl.DEPTH_STENCIL_ATTACHMENT\n : gl.DEPTH_ATTACHMENT;\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n attachmentPoint,\n gl.RENDERBUFFER,\n this._depthRenderbuffer\n );\n gl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);\n }\n\n gl.bindTexture(gl.TEXTURE_2D, oldTexture);\n gl.bindFramebuffer(gl.FRAMEBUFFER, oldFramebuffer);\n\n // remember all WebGL state (default bindings, default texture units,\n // default attributes and/or vertex shade object, default program,\n // default blend, stencil, zbuffer, culling, viewport etc... state\n this._state = makeDefaultState(canvas.width, canvas.height);\n this._state.framebuffer = this._drawingbufferFramebuffer;\n\n if (sharedVAOExtension) {\n this._state.vertexArray = sharedVAOExtension.createVertexArrayOES();\n this._defaultVertexArray = this._state.vertexArray;\n }\n }\n dispose() {\n this._disposeHelper();\n const gl = sharedWebGLContext;\n gl.deleteFramebuffer(this._drawingbufferFramebuffer);\n gl.deleteTexture(this._drawingbufferTexture);\n if (this._depthRenderbuffer) {\n gl.deleteRenderbuffer(this._depthRenderbuffer);\n }\n if (this._compositor.dispose) {\n this._compositor.dispose();\n }\n for (const [key, value] of Object.entries(this)) {\n if (typeof value === 'function') {\n this[key] = errorDisposedContext(key);\n }\n }\n for (const [key, value] of Object.entries(\n VirtualWebGLContext.prototype\n )) {\n if (typeof value === 'function') {\n this[key] = errorDisposedContext(key);\n }\n }\n }\n get drawingBufferWidth() {\n return this.canvas.width;\n }\n get drawingBufferHeight() {\n return this.canvas.height;\n }\n composite(gl) {\n this._compositor.composite(\n gl,\n this._drawingbufferTexture,\n this.canvas,\n this._contextAttributes\n );\n if (!this._preserveDrawingbuffer) {\n this._needClear = true;\n }\n }\n }\n\n function makeDefaultState(width, height) {\n const gl = WebGLRenderingContext;\n const state = {\n arrayBuffer: null,\n renderbuffer: null,\n framebuffer: null,\n\n blend: false,\n cullFace: false,\n depthTest: false,\n dither: false,\n polygonOffsetFill: false,\n sampleAlphaToCoverage: false,\n sampleCoverage: false,\n scissorTest: false,\n stencilTest: false,\n\n activeTexture: gl.TEXTURE0,\n\n packAlignment: 4,\n unpackAlignment: 4,\n unpackColorspaceConversion: gl.BROWSER_DEFAULT_WEBGL,\n unpackFlipY: 0,\n unpackPremultiplyAlpha: 0,\n\n currentProgram: null,\n viewport: [0, 0, width, height],\n scissor: [0, 0, 0, 0],\n blendSrcRgb: gl.ONE,\n blendDstRgb: gl.ZERO,\n blendSrcAlpha: gl.ONE,\n blendDstAlpha: gl.ZERO,\n blendEquationRgb: gl.FUNC_ADD,\n blendEquationAlpha: gl.FUNC_ADD,\n blendColor: [0, 0, 0, 0],\n colorClearValue: [0, 0, 0, 0],\n colorMask: [true, true, true, true],\n cullFaceMode: gl.BACK,\n depthClearValue: 1,\n depthFunc: gl.LESS,\n depthRange: [0, 1],\n depthMask: true,\n frontFace: gl.CCW,\n generateMipmapHint: gl.DONT_CARE,\n lineWidth: 1,\n polygonOffsetFactor: 0,\n polygonOffsetUnits: 0,\n sampleCoverageValue: 1,\n sampleCoverageUnits: false,\n stencilBackFail: gl.KEEP,\n stencilBackFunc: gl.ALWAYS,\n stencilBackPassDepthFail: gl.KEEP,\n stencilBackPassDepthPass: gl.KEEP,\n stencilBackRef: 0,\n stencilBackValueMask: 0xffffffff,\n stencilBackWriteMask: 0xffffffff,\n stencilClearValue: 0,\n stencilFail: gl.KEEP,\n stencilFunc: gl.ALWAYS,\n stencilPassDepthFail: gl.KEEP,\n stencilPassDepthPass: gl.KEEP,\n stencilRef: 0,\n stencilValueMask: 0xffffffff,\n stencilWriteMask: 0xffffffff,\n\n textureUnits: [],\n };\n\n if (sharedVAOExtension) {\n state.vertexArray = null;\n } else {\n state.elementArrayBuffer = null;\n state.attributes = [];\n for (let i = 0; i < numAttributes; ++i) {\n const attrib = {\n buffer: null,\n enabled: false,\n size: 4,\n stride: 0,\n type: gl.FLOAT,\n normalized: false,\n value: [0, 0, 0, 1],\n };\n if (sharedInstanceExtension) {\n attrib.divisor = 0;\n }\n state.attributes.push(attrib);\n }\n }\n\n for (let i = 0; i < numTextureUnits; ++i) {\n state.textureUnits.push({\n texture2D: null,\n textureCubemap: null,\n });\n }\n\n return state;\n }\n\n // copy all WebGL constants and functions to the prototype of\n // VirtualWebGLContext\n for (let key in WebGLRenderingContext.prototype) {\n const propDesc = Object.getOwnPropertyDescriptor(\n WebGLRenderingContext.prototype,\n key\n );\n if (propDesc.get) {\n // it's a getter/setter ?\n const virtualPropDesc = Object.getOwnPropertyDescriptor(\n VirtualWebGLContext.prototype,\n key\n );\n if (!virtualPropDesc) {\n console.warn(`WebGLRenderingContext.${key} is not supported`);\n }\n continue;\n }\n switch (key) {\n default: {\n const value = WebGLRenderingContext.prototype[key];\n let newValue = value;\n switch (key) {\n case 'getContextAttributes':\n newValue = virtualGetContextAttributes;\n break;\n case 'getExtension':\n newValue = createGetExtensionWrapper(value);\n break;\n case 'bindFramebuffer':\n newValue = virtualBindFramebuffer;\n break;\n case 'getParameter':\n newValue = virtualGetParameter;\n break;\n case 'readPixels':\n newValue = virtualReadPixels;\n break;\n case 'clear':\n case 'drawArrays':\n case 'drawElements':\n newValue = createDrawWrapper(value);\n break;\n default:\n if (typeof value === 'function') {\n newValue = createWrapper(value);\n }\n break;\n }\n VirtualWebGLContext.prototype[key] = newValue;\n break;\n }\n }\n }\n\n function createGetExtensionWrapper(origFn) {\n return function (extensionName) {\n extensionName = extensionName.toLowerCase();\n // just like the real context each extension needs a virtual class because each use\n // of the extension might be modified (as in people adding properties to it)\n const existingExt = this._extensions[extensionName];\n if (existingExt) {\n return existingExt;\n }\n\n const ext = origFn.call(sharedWebGLContext, extensionName);\n const wrapperInfo = extensionInfo[extensionName] || {};\n const wrapperFnMakerFn =\n wrapperInfo.wrapperFnMakerFn ||\n (() => {\n console.log('trying to get extension:', extensionName);\n });\n const saveRestoreHelper = extensionSaveRestoreHelpers[extensionName];\n if (!saveRestoreHelper) {\n const saveRestoreMakerFn = wrapperInfo.saveRestoreMakerFn;\n if (saveRestoreMakerFn) {\n const saveRestore = saveRestoreMakerFn(ext);\n extensionSaveRestoreHelpers[extensionName] = saveRestore;\n extensionSaveRestoreHelpersArray.push(saveRestore);\n }\n }\n\n const wrapper = {\n _context: this,\n };\n for (let key in ext) {\n let value = ext[key];\n if (typeof value === 'function') {\n value = wrapperFnMakerFn(ext, value, extensionName);\n }\n wrapper[key] = value;\n }\n\n this._extensions[extensionName] = wrapper;\n\n return wrapper;\n };\n }\n\n function isFramebufferBindingNull(vctx) {\n return vctx._state.framebuffer === vctx._drawingbufferFramebuffer;\n }\n\n function makeOES_vertex_array_objectWrapper(ext, origFn, name) {\n switch (name) {\n case 'bindVertexArrayOES':\n return virutalbindVertexArrayOES;\n }\n\n return function (...args) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n return origFn.call(ext, ...args);\n };\n }\n\n function virutalbindVertexArrayOES(vao) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n if (!vao) {\n vao = this._context._defaultVertexArray;\n }\n sharedVAOExtension.bindVertexArrayOES(vao);\n }\n\n function makeANGLE_instanced_arraysWrapper(ext, origFn, name) {\n switch (name) {\n case 'drawArraysInstancedANGLE':\n case 'drawElementsInstancedANGLE':\n return createExtDrawWrapper(ext, origFn);\n break;\n }\n\n return function (...args) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n return origFn.call(ext, ...args);\n };\n }\n\n function createExtDrawWrapper(ext, origFn) {\n return function (...args) {\n // a rendering function was called so we need to copy are drawingBuffer\n // to the canvas for this context after the current event.\n beforeDraw(this._context);\n const result = origFn.call(exts, ...args);\n afterDraw(this._context);\n return result;\n };\n }\n\n function makeWEBGL_draw_buffersWrapper(ext, origFn, name) {\n const gl = sharedWebGLContext;\n const backBuffer = [gl.COLOR_ATTACHMENT0];\n\n return function (drawingBuffers) {\n makeCurrentContext(this._context);\n resizeCanvasIfChanged(this._context);\n // if the virtual context is bound to canvas then fake it\n if (isFramebufferBindingNull(this._context)) {\n // this really isn't checking everything\n // for example if the user passed in array.length != 1\n // then we are supposed to generate an error\n if (drawingBuffers[0] === gl.BACK) {\n drawingBuffers = backBuffer;\n }\n }\n origFn.call(ext, drawingBuffers);\n };\n }\n\n function makeWEBGL_drawBuffersSaveRestoreHelper(ext) {\n const gl = sharedWebGLContext;\n const maxDrawBuffers = gl.getParameter(ext.MAX_DRAW_BUFFERS_WEBGL);\n const defaultBackDrawBuffers = [gl.BACK];\n const defaultFBDrawBuffers = [gl.COLOR_ATTACHMENT0];\n for (let i = 1; i < maxDrawBuffers; ++i) {\n defaultFBDrawBuffers.push(gl.NONE);\n }\n\n function initDrawBufferState(state) {\n state.drawBuffers = state.framebuffer\n ? defaultFBDrawBuffers.slice()\n : defaultBackDrawBuffers.slice();\n }\n\n function save(state) {\n if (!state.drawBuffers) {\n initDrawBufferState(state);\n }\n // remember state.framebuffer is only null for the offscreen canvas\n const drawBuffers = state.drawBuffers;\n for (let i = 0; i < drawBuffers.length; ++i) {\n drawBuffers[i] = gl.getParameter(ext.DRAW_BUFFER0_WEBGL + i);\n }\n }\n\n function restore(state) {\n if (!state.drawBuffers) {\n initDrawBufferState(state);\n }\n ext.drawBuffersWEBGL(state.drawBuffers);\n }\n\n return {\n save,\n restore,\n };\n }\n\n function virtualGetContextAttributes() {\n return this._contextAttributes;\n }\n\n function virtualReadPixels(...args) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n clearIfNeeded(this);\n const gl = sharedWebGLContext;\n return gl.readPixels(...args);\n }\n\n function virtualGetParameter(pname) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n const gl = sharedWebGLContext;\n const value = gl.getParameter(pname);\n switch (pname) {\n case gl.FRAMEBUFFER_BINDING:\n if (value === this._drawingbufferFramebuffer) {\n return null;\n }\n break;\n case 0x8825: // DRAW_BUFFER0_WEBGL\n if (isFramebufferBindingNull(this)) {\n if (value === gl.COLOR_ATTACHMENT0) {\n return gl.BACK;\n }\n }\n break;\n case 0x85b5: // VERTEX_ARRAY_BINDING_OES\n if (value === this._defaultVertexArray) {\n return null;\n }\n break;\n }\n return value;\n }\n\n function virtualBindFramebuffer(bindpoint, framebuffer) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n const gl = sharedWebGLContext;\n if (bindpoint === WebGLRenderingContext.FRAMEBUFFER) {\n if (framebuffer === null) {\n // bind our drawingBuffer\n framebuffer = this._drawingbufferFramebuffer;\n }\n }\n\n gl.bindFramebuffer(bindpoint, framebuffer);\n this._state.framebuffer = framebuffer;\n }\n\n function createWrapper(origFn) {\n // lots of optimization could happen here depending on specific functions\n return function (...args) {\n makeCurrentContext(this);\n resizeCanvasIfChanged(this);\n return origFn.call(sharedWebGLContext, ...args);\n };\n }\n\n function clearIfNeeded(vctx) {\n if (vctx._needClear) {\n vctx._needClear = false;\n const gl = sharedWebGLContext;\n gl.bindFramebuffer(gl.FRAMEBUFFER, vctx._drawingbufferFramebuffer);\n gl.disable(gl.SCISSOR_TEST);\n gl.clear(\n gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT\n );\n enableDisable(gl, gl.SCISSOR_TEST, vctx._state.scissorTest);\n gl.bindFramebuffer(gl.FRAMEBUFFER, vctx._state.framebuffer);\n }\n }\n\n function beforeDraw(vctx) {\n makeCurrentContext(vctx);\n resizeCanvasIfChanged(vctx);\n clearIfNeeded(vctx);\n }\n\n function afterDraw(vctx) {\n if (isFramebufferBindingNull(vctx)) {\n vctx._needComposite = true;\n if (!someContextsNeedRendering) {\n someContextsNeedRendering = true;\n setTimeout(renderAllDirtyVirtualCanvases, 0);\n }\n }\n }\n\n function createDrawWrapper(origFn) {\n return function (...args) {\n // a rendering function was called so we need to copy are drawingBuffer\n // to the canvas for this context after the current event.\n beforeDraw(this);\n const result = origFn.call(sharedWebGLContext, ...args);\n afterDraw(this);\n return result;\n };\n }\n\n function makeCurrentContext(vctx) {\n if (currentVirtualContext === vctx) {\n return;\n }\n\n // save all current WebGL state on the previous current virtual context\n if (currentVirtualContext) {\n saveAllState(currentVirtualContext._state, currentVirtualContext);\n }\n\n // restore all state for the new context\n restoreAllState(vctx._state, vctx);\n\n // check if the current state is supposed to be rendering to the canvas.\n // if so bind vctx._drawingbuffer\n\n currentVirtualContext = vctx;\n }\n\n function resizeCanvasIfChanged(vctx) {\n const width = vctx.canvas.width;\n const height = vctx.canvas.height;\n\n if (width !== vctx._width || height !== vctx._height) {\n vctx._width = width;\n vctx._height = height;\n const gl = sharedWebGLContext;\n const oldTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);\n const format = vctx._contextAttributes.alpha ? gl.RGBA : gl.RGB;\n gl.bindTexture(gl.TEXTURE_2D, vctx._drawingbufferTexture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n format,\n width,\n height,\n 0,\n format,\n gl.UNSIGNED_BYTE,\n null\n );\n gl.bindTexture(gl.TEXTURE_2D, oldTexture);\n\n if (vctx._depthRenderbuffer) {\n const oldRenderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n const internalFormat = vctx._contextAttributes.stencil\n ? gl.DEPTH_STENCIL\n : gl.DEPTH_COMPONENT16;\n gl.bindRenderbuffer(gl.RENDERBUFFER, vctx._depthRenderbuffer);\n gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height);\n gl.bindRenderbuffer(gl.RENDERBUFFER, oldRenderbuffer);\n }\n }\n }\n\n function createOrGetVirtualWebGLContext(canvas, type, contextAttributes) {\n // check if this canvas already has a context\n const existingVirtualCtx = canvasToVirtualContextMap.get(canvas);\n if (existingVirtualCtx) {\n return existingVirtualCtx;\n }\n\n const compositor =\n settings.compositorCreator(canvas, type, contextAttributes) ||\n new DefaultCompositor(canvas, type, contextAttributes);\n const newVirtualCtx = new VirtualWebGLContext(\n canvas,\n contextAttributes,\n compositor,\n () => {\n canvasToVirtualContextMap.delete(canvas);\n }\n );\n canvasToVirtualContextMap.set(canvas, newVirtualCtx);\n\n return newVirtualCtx;\n }\n\n function createProgram(gl, shaderSources) {\n const program = gl.createProgram();\n [gl.VERTEX_SHADER, gl.FRAGMENT_SHADER].forEach((type, ndx) => {\n const shader = gl.createShader(type);\n gl.shaderSource(shader, shaderSources[ndx]);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error(gl.getShaderInfoLog(shader)); // eslint-disable-line\n }\n gl.attachShader(program, shader);\n });\n gl.bindAttribLocation(program, 0, 'position');\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.error(gl.getProgramInfoLog(program)); // eslint-disable-line\n }\n\n return program;\n }\n\n function saveAllState(state, vctx) {\n // save all WebGL state (current bindings, current texture units,\n // current attributes and/or vertex shade object, current program,\n // current blend, stencil, zbuffer, culling, viewport etc... state\n const gl = sharedWebGLContext;\n\n state.activeTexture = gl.getParameter(gl.ACTIVE_TEXTURE);\n\n // save texture units\n for (let i = 0; i < numTextureUnits; ++i) {\n gl.activeTexture(gl.TEXTURE0 + i);\n const unit = state.textureUnits[i];\n unit.texture2D = gl.getParameter(gl.TEXTURE_BINDING_2D);\n unit.textureCubemap = gl.getParameter(gl.TEXTURE_BINDING_CUBE_MAP);\n }\n\n // bindings\n state.arrayBuffer = gl.getParameter(gl.ARRAY_BUFFER_BINDING);\n state.renderbuffer = gl.getParameter(gl.RENDERBUFFER_BINDING);\n state.framebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);\n\n // save attributes\n if (sharedVAOExtension) {\n state.vertexArray = gl.getParameter(\n sharedVAOExtension.VERTEX_ARRAY_BINDING_OES\n );\n } else {\n for (let i = 0; i < numAttributes; ++i) {\n const attrib = state.attributes[i];\n attrib.buffer = gl.getVertexAttrib(\n i,\n gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\n );\n attrib.enabled = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_ENABLED);\n attrib.size = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_SIZE);\n attrib.stride = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_STRIDE);\n attrib.type = gl.getVertexAttrib(i, gl.VERTEX_ATTRIB_ARRAY_TYPE);\n attrib.normalized = gl.getVertexAttrib(\n i,\n gl.VERTEX_ATTRIB_ARRAY_NORMALIZED\n );\n attrib.value = gl.getVertexAttrib(i, gl.CURRENT_VERTEX_ATTRIB);\n attrib.offset = gl.getVertexAttribOffset(\n i,\n gl.VERTEX_ATTRIB_ARRAY_POINTER\n );\n if (sharedInstanceExtension) {\n attrib.divisor = gl.getVertexAttrib(\n i,\n sharedInstanceExtension.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE\n );\n }\n }\n state.elementArrayBuffer = gl.getParameter(\n gl.ELEMENT_ARRAY_BUFFER_BINDING\n );\n }\n\n state.blend = gl.getParameter(gl.BLEND);\n state.cullFace = gl.getParameter(gl.CULL_FACE);\n state.depthTest = gl.getParameter(gl.DEPTH_TEST);\n state.dither = gl.getParameter(gl.DITHER);\n state.polygonOffsetFill = gl.getParameter(gl.POLYGON_OFFSET_FILL);\n state.sampleAlphaToCoverage = gl.getParameter(gl.SAMPLE_ALPHA_TO_COVERAGE);\n state.sampleCoverage = gl.getParameter(gl.SAMPLE_COVERAGE);\n state.scissorTest = gl.getParameter(gl.SCISSOR_TEST);\n state.stencilTest = gl.getParameter(gl.STENCIL_TEST);\n\n state.packAlignment = gl.getParameter(gl.PACK_ALIGNMENT);\n state.unpackAlignment = gl.getParameter(gl.UNPACK_ALIGNMENT);\n state.unpackColorspaceConversion = gl.getParameter(\n gl.UNPACK_COLORSPACE_CONVERSION_WEBGL\n );\n state.unpackFlipY = gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);\n state.unpackPremultiplyAlpha = gl.getParameter(\n gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL\n );\n\n state.currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);\n state.viewport = gl.getParameter(gl.VIEWPORT);\n state.scissor = gl.getParameter(gl.SCISSOR_BOX);\n state.blendSrcRgb = gl.getParameter(gl.BLEND_SRC_RGB);\n state.blendDstRgb = gl.getParameter(gl.BLEND_DST_RGB);\n state.blendSrcAlpha = gl.getParameter(gl.BLEND_SRC_ALPHA);\n state.blendDstAlpha = gl.getParameter(gl.BLEND_DST_ALPHA);\n state.blendEquationRgb = gl.getParameter(gl.BLEND_EQUATION_RGB);\n state.blendEquationAlpha = gl.getParameter(gl.BLEND_EQUATION_ALPHA);\n state.blendColor = gl.getParameter(gl.BLEND_COLOR);\n state.colorClearValue = gl.getParameter(gl.COLOR_CLEAR_VALUE);\n state.colorMask = gl.getParameter(gl.COLOR_WRITEMASK);\n state.cullFaceMode = gl.getParameter(gl.CULL_FACE_MODE);\n state.depthClearValue = gl.getParameter(gl.DEPTH_CLEAR_VALUE);\n state.depthFunc = gl.getParameter(gl.DEPTH_FUNC);\n state.depthRange = gl.getParameter(gl.DEPTH_RANGE);\n state.depthMask = gl.getParameter(gl.DEPTH_WRITEMASK);\n state.frontFace = gl.getParameter(gl.FRONT_FACE);\n state.generateMipmapHint = gl.getParameter(gl.GENERATE_MIPMAP_HINT);\n state.lineWidth = gl.getParameter(gl.LINE_WIDTH);\n state.polygonOffsetFactor = gl.getParameter(gl.POLYGON_OFFSET_FACTOR);\n state.polygonOffsetUnits = gl.getParameter(gl.POLYGON_OFFSET_UNITS);\n state.sampleCoverageValue = gl.getParameter(gl.SAMPLE_COVERAGE_VALUE);\n state.sampleCoverageUnits = gl.getParameter(gl.SAMPLE_COVERAGE_INVERT);\n state.stencilBackFail = gl.getParameter(gl.STENCIL_BACK_FAIL);\n state.stencilBackFunc = gl.getParameter(gl.STENCIL_BACK_FUNC);\n state.stencilBackPassDepthFail = gl.getParameter(\n gl.STENCIL_BACK_PASS_DEPTH_FAIL\n );\n state.stencilBackPassDepthPass = gl.getParameter(\n gl.STENCIL_BACK_PASS_DEPTH_PASS\n );\n state.stencilBackRef = gl.getParameter(gl.STENCIL_BACK_REF);\n state.stencilBackValueMask = gl.getParameter(gl.STENCIL_BACK_VALUE_MASK);\n state.stencilBackWriteMask = gl.getParameter(gl.STENCIL_BACK_WRITEMASK);\n state.stencilClearValue = gl.getParameter(gl.STENCIL_CLEAR_VALUE);\n state.stencilFail = gl.getParameter(gl.STENCIL_FAIL);\n state.stencilFunc = gl.getParameter(gl.STENCIL_FUNC);\n state.stencilPassDepthFail = gl.getParameter(gl.STENCIL_PASS_DEPTH_FAIL);\n state.stencilPassDepthPass = gl.getParameter(gl.STENCIL_PASS_DEPTH_PASS);\n state.stencilRef = gl.getParameter(gl.STENCIL_REF);\n state.stencilValueMask = gl.getParameter(gl.STENCIL_VALUE_MASK);\n state.stencilWriteMask = gl.getParameter(gl.STENCIL_WRITEMASK);\n\n for (const fns of extensionSaveRestoreHelpersArray) {\n fns.save(state, vctx);\n }\n }\n\n function restoreAllState(state, vctx) {\n // restore all WebGL state (current bindings, current texture units,\n // current attributes and/or vertex shade object, current program,\n // current blend, stencil, zbuffer, culling, viewport etc... state\n // save all WebGL state (current bindings, current texture units,\n // current attributes and/or vertex shade object, current program,\n // current blend, stencil, zbuffer, culling, viewport etc... state\n const gl = sharedWebGLContext;\n\n // restore texture units\n for (let i = 0; i < numTextureUnits; ++i) {\n gl.activeTexture(gl.TEXTURE0 + i);\n const unit = state.textureUnits[i];\n gl.bindTexture(gl.TEXTURE_2D, unit.texture2D);\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, unit.textureCubemap);\n }\n gl.activeTexture(state.activeTexture);\n\n // restore attributes\n if (sharedVAOExtension) {\n sharedVAOExtension.bindVertexArrayOES(state.vertexArray);\n } else {\n for (let i = 0; i < numAttributes; ++i) {\n const attrib = state.attributes[i];\n if (attrib.enabled) {\n gl.enableVertexAttribArray(i);\n } else {\n gl.disableVertexAttribArray(i);\n }\n gl.vertexAttrib4fv(i, attrib.value);\n gl.bindBuffer(gl.ARRAY_BUFFER, attrib.buffer);\n gl.vertexAttribPointer(\n i,\n attrib.size,\n attrib.type,\n attrib.normalized,\n attrib.stride,\n attrib.offset\n );\n if (sharedInstanceExtension) {\n sharedInstanceExtension.vertexAttribDivisorANGLE(i, attrib.divisor);\n }\n }\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, state.elementArrayBuffer);\n }\n\n // bindings'\n gl.bindBuffer(gl.ARRAY_BUFFER, state.arrayBuffer);\n gl.bindRenderbuffer(gl.RENDERBUFFER, state.renderbuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, state.framebuffer);\n\n enableDisable(gl, gl.BLEND, state.blend);\n enableDisable(gl, gl.CULL_FACE, state.cullFace);\n enableDisable(gl, gl.DEPTH_TEST, state.depthTest);\n enableDisable(gl, gl.DITHER, state.dither);\n enableDisable(gl, gl.POLYGON_OFFSET_FILL, state.polygonOffsetFill);\n enableDisable(gl, gl.SAMPLE_ALPHA_TO_COVERAGE, state.sampleAlphaToCoverage);\n enableDisable(gl, gl.SAMPLE_COVERAGE, state.sampleCoverage);\n enableDisable(gl, gl.SCISSOR_TEST, state.scissorTest);\n enableDisable(gl, gl.STENCIL_TEST, state.stencilTest);\n\n gl.pixelStorei(gl.PACK_ALIGNMENT, state.packAlignment);\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, state.unpackAlignment);\n gl.pixelStorei(\n gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,\n state.unpackColorspaceConversion\n );\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, state.unpackFlipY);\n gl.pixelStorei(\n gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,\n state.unpackPremultiplyAlpha\n );\n\n gl.useProgram(state.currentProgram);\n\n gl.viewport(...state.viewport);\n gl.scissor(...state.scissor);\n gl.blendFuncSeparate(\n state.blendSrcRgb,\n state.blendDstRgb,\n state.blendSrcAlpha,\n state.blendDstAlpha\n );\n gl.blendEquationSeparate(state.blendEquationRgb, state.blendEquationAlpha);\n gl.blendColor(...state.blendColor);\n gl.clearColor(...state.colorClearValue);\n gl.colorMask(...state.colorMask);\n gl.cullFace(state.cullFaceMode);\n gl.clearDepth(state.depthClearValue);\n gl.depthFunc(state.depthFunc);\n gl.depthRange(...state.depthRange);\n gl.depthMask(state.depthMask);\n gl.frontFace(state.frontFace);\n gl.hint(gl.GENERATE_MIPMAP_HINT, state.generateMipmapHint);\n gl.lineWidth(state.lineWidth);\n gl.polygonOffset(state.polygonOffsetFactor, state.polygonOffsetUnits);\n gl.sampleCoverage(state.sampleCoverageValue, state.sampleCoverageUnits);\n gl.stencilFuncSeparate(\n gl.BACK,\n state.stencilBackFunc,\n state.stencilBackRef,\n state.stencilBackValueMask\n );\n gl.stencilFuncSeparate(\n gl.FRONT,\n state.stencilFunc,\n state.stencilRef,\n state.stencilValueMask\n );\n gl.stencilOpSeparate(\n gl.BACK,\n state.stencilBackFail,\n state.stencilBackPassDepthFail,\n state.stencilBackPassDepthPass\n );\n gl.stencilOpSeparate(\n gl.FRONT,\n state.stencilFail,\n state.stencilPassDepthFail,\n state.stencilPassDepthPass\n );\n gl.stencilMaskSeparate(gl.BACK, state.stencilBackWriteMask);\n gl.stencilMaskSeparate(gl.FRONT, state.stencilWriteMask);\n gl.clearStencil(state.stencilClearValue);\n\n for (const fns of extensionSaveRestoreHelpersArray) {\n fns.restore(state, vctx);\n }\n }\n\n function enableDisable(gl, feature, enable) {\n if (enable) {\n gl.enable(feature);\n } else {\n gl.disable(feature);\n }\n }\n\n function renderAllDirtyVirtualCanvases() {\n if (!someContextsNeedRendering) {\n return;\n }\n someContextsNeedRendering = false;\n\n // save all current WebGL state on the previous current virtual context\n if (currentVirtualContext) {\n saveAllState(currentVirtualContext._state, currentVirtualContext);\n currentVirtualContext = null;\n }\n\n // set the state back to the one for drawing the canvas\n restoreAllState(baseState);\n\n for (const vctx of canvasToVirtualContextMap.values()) {\n if (!vctx._needComposite) {\n continue;\n }\n\n vctx._needComposite = false;\n vctx.composite(sharedWebGLContext);\n }\n }\n\n window.requestAnimationFrame = (function (origFn) {\n return function (callback) {\n return origFn.call(window, time => {\n const result = callback(time);\n renderAllDirtyVirtualCanvases();\n return result;\n });\n };\n })(window.requestAnimationFrame);\n\n function setup(options) {\n Object.assign(settings, options);\n }\n\n window.virtualWebGL = {\n setup,\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,sBAAsBA,CAAA,EAAG;EACvC,IAAMC,QAAQ,GAAG;IACfC,aAAa,EAAE,KAAK;IACpBC,iBAAiBA,CAAA,EAAG,CAAC;EACvB,CAAC;EACD,IAAMC,yBAAyB,GAAG,IAAIC,GAAG,CAAC,CAAC;EAC3C,IAAMC,aAAa,GAAG;IACpBC,kBAAkB,EAAE;MAClBC,gBAAgB,EAAEC,6BAA6B;MAC/CC,kBAAkB,EAAEC;IACtB,CAAC;IACDC,uBAAuB,EAAE;MACvBJ,gBAAgB,EAAEK;IACpB,CAAC;IACDC,sBAAsB,EAAE;MACtBN,gBAAgB,EAAEO;IACpB;EACF,CAAC;EACD,IAAMC,gCAAgC,GAAG,EAAE;EAC3C,IAAMC,2BAA2B,GAAG,CAAC,CAAC;EAEtC,IAAIC,qBAAqB,GAAG,IAAI;EAChC,IAAIC,yBAAyB;EAE7B,IAAMC,kBAAkB,GAAGC,QAAQ,CAChCC,aAAa,CAAC,QAAQ,CAAC,CACvBC,UAAU,CAAC,OAAO,CAAC;EACtB,IAAMC,kBAAkB,GAAGJ,kBAAkB,CAACK,YAAY,CACxD,yBACF,CAAC;EACD,IAAMC,uBAAuB,GAAGN,kBAAkB,CAACK,YAAY,CAC7D,wBACF,CAAC;EACD,IAAME,aAAa,GAAGP,kBAAkB,CAACQ,YAAY,CACnDR,kBAAkB,CAACS,kBACrB,CAAC;EACD,IAAMC,eAAe,GAAGV,kBAAkB,CAACQ,YAAY,CACrDR,kBAAkB,CAACW,gCACrB,CAAC;EACD,IAAIC,cAAc;EAClB,IAAMC,SAAS,GAAGC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;EAE5C,IAAMC,EAAE,6JAOP;EAED,IAAMC,EAAE,qKAOP;EAED,IAAMC,GAAG,8MAQR;EAED,IAAMC,0BAA0B,GAAGC,aAAa,CAACnB,kBAAkB,EAAE,CACnEe,EAAE,EACFC,EAAE,CACH,CAAC;EACF,IAAMI,2BAA2B,GAAGD,aAAa,CAACnB,kBAAkB,EAAE,CACpEe,EAAE,EACFE,GAAG,CACJ,CAAC;EAEF,IAAIb,kBAAkB,EAAE;IACtB,IAAMiB,GAAG,GAAGjB,kBAAkB,CAACkB,oBAAoB,CAAC,CAAC;IACrDlB,kBAAkB,CAACmB,kBAAkB,CAACF,GAAG,CAAC;IAC1CR,SAAS,CAACW,WAAW,GAAGH,GAAG;EAC7B;EAEA;IACE,IAAMI,EAAE,GAAGzB,kBAAkB;IAC7B,IAAM0B,WAAW,GAAG,CAAC,CAAC,CAAC;;IAEvB,IAAMC,MAAM,GAAGF,EAAE,CAACG,YAAY,CAAC,CAAC;IAChCH,EAAE,CAACI,UAAU,CAACJ,EAAE,CAACK,YAAY,EAAEH,MAAM,CAAC;IACtCF,EAAE,CAACM,UAAU,CACXN,EAAE,CAACK,YAAY,EACf,IAAIE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAC5DP,EAAE,CAACQ,WACL,CAAC;IAEDR,EAAE,CAACS,uBAAuB,CAACR,WAAW,CAAC;IACvCD,EAAE,CAACU,mBAAmB,CAACT,WAAW,EAAE,CAAC,EAAED,EAAE,CAACW,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;EAC/D;EAEAC,YAAY,CAACxB,SAAS,CAAC;EAEvByB,iBAAiB,CAACC,SAAS,CAACpC,UAAU,GAAI,UAAUqC,MAAM,EAAE;IAC1D,OAAO,UAAUC,IAAI,EAAEC,iBAAiB,EAAE;MACxC,IAAID,IAAI,KAAK,OAAO,IAAIA,IAAI,KAAK,oBAAoB,EAAE;QACrD,OAAOE,8BAA8B,CAAC,IAAI,EAAEF,IAAI,EAAEC,iBAAiB,CAAC;MACtE,CAAC,MAAM,IAAID,IAAI,KAAK,QAAQ,IAAI5D,QAAQ,CAACC,aAAa,EAAE;QACtD,OAAO,IAAI;MACb;MACA,OAAO0D,MAAM,CAACI,IAAI,CAAC,IAAI,EAAEH,IAAI,EAAEC,iBAAiB,CAAC;IACnD,CAAC;EACH,CAAC,CAAEJ,iBAAiB,CAACC,SAAS,CAACpC,UAAU,CAAC;EAE1C,SAAS0C,cAAcA,CAACC,KAAK,EAAEC,YAAY,EAAE;IAC3C,OAAOD,KAAK,KAAKE,SAAS,GAAGD,YAAY,GAAGD,KAAK;EACnD;EAEA,SAASG,oBAAoBA,CAACC,MAAM,EAAE;IACpC,OAAO,YAAY;MACjB,MAAM,IAAIC,KAAK,kBAAAC,MAAA,CAAkBF,MAAM,yBAAsB,CAAC;IAChE,CAAC;EACH;EAEA,MAAMG,iBAAiB,CAAC;IACtBC,WAAWA,CAACC,MAAM,EAAE;MAClB,IAAI,CAACC,IAAI,GAAGD,MAAM,CAACpD,UAAU,CAAC,IAAI,CAAC;IACrC;IACAsD,SAASA,CAAChC,EAAE,EAAEiC,OAAO,EAAEH,MAAM,EAAEb,iBAAiB,EAAE;MAChD;MACA;MACA;MACA;MACA,IAAMiB,GAAG,GAAG,IAAI,CAACH,IAAI;MACrB,IAAMI,KAAK,GAAGL,MAAM,CAACK,KAAK;MAC1B,IAAMC,MAAM,GAAGN,MAAM,CAACM,MAAM;MAC5B,IAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACvC,EAAE,CAAC8B,MAAM,CAACK,KAAK,EAAEA,KAAK,CAAC;MACjD,IAAMK,SAAS,GAAGF,IAAI,CAACC,GAAG,CAACvC,EAAE,CAAC8B,MAAM,CAACM,MAAM,EAAEA,MAAM,CAAC;MACpD,IAAIpC,EAAE,CAAC8B,MAAM,CAACK,KAAK,KAAKE,QAAQ,IAAIrC,EAAE,CAAC8B,MAAM,CAACM,MAAM,KAAKI,SAAS,EAAE;QAClExC,EAAE,CAAC8B,MAAM,CAACK,KAAK,GAAGE,QAAQ;QAC1BrC,EAAE,CAAC8B,MAAM,CAACM,MAAM,GAAGI,SAAS;MAC9B;MAEAxC,EAAE,CAACyC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAEN,KAAK,EAAEC,MAAM,CAAC;MAEhCpC,EAAE,CAAC0C,UAAU,CACXzB,iBAAiB,CAAC0B,kBAAkB,GAChClD,0BAA0B,GAC1BE,2BACN,CAAC;;MAED;MACAK,EAAE,CAAC4C,WAAW,CAAC5C,EAAE,CAAC6C,UAAU,EAAEZ,OAAO,CAAC;MACtCjC,EAAE,CAAC8C,UAAU,CAAC9C,EAAE,CAAC+C,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;;MAEjC;MACAb,GAAG,CAACc,wBAAwB,GAAG,MAAM;MACrCd,GAAG,CAACe,SAAS,CACXjD,EAAE,CAAC8B,MAAM,EACT,CAAC,EACDU,SAAS,GAAGJ,MAAM,EAClBD,KAAK,EACLC,MAAM;MAAE;MACR,CAAC,EACD,CAAC,EACDD,KAAK,EACLC,MACF,CAAC,CAAC,CAAC;IACL;;IACAc,OAAOA,CAAA,EAAG,CAAC;EACb;EAEA,MAAMC,mBAAmB,CAAC;IACxBtB,WAAWA,CAACC,MAAM,EAAqD;MAAA,IAAnDb,iBAAiB,GAAAmC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAA7B,SAAA,GAAA6B,SAAA,MAAG,CAAC,CAAC;MAAA,IAAEE,UAAU,GAAAF,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA7B,SAAA;MAAA,IAAEgC,aAAa,GAAAH,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAA7B,SAAA;MACnE,IAAMvB,EAAE,GAAGzB,kBAAkB;MAC7B,IAAI,CAACuD,MAAM,GAAGA,MAAM;MACpB;;MAEA,IAAI,CAAC0B,WAAW,GAAGF,UAAU;MAC7B,IAAI,CAACG,cAAc,GAAGF,aAAa;MACnC,IAAI,CAACG,WAAW,GAAG,CAAC,CAAC;MACrB;MACA;MACA,IAAI,CAACC,qBAAqB,GAAG3D,EAAE,CAAC4D,aAAa,CAAC,CAAC;MAC/C,IAAI,CAACC,yBAAyB,GAAG7D,EAAE,CAAC8D,iBAAiB,CAAC,CAAC;MACvD,IAAI,CAACC,kBAAkB,GAAG;QACxBC,KAAK,EAAE5C,cAAc,CAACH,iBAAiB,CAAC+C,KAAK,EAAE,IAAI,CAAC;QACpDC,SAAS,EAAE,KAAK;QAChBC,KAAK,EAAE9C,cAAc,CAACH,iBAAiB,CAACiD,KAAK,EAAE,IAAI,CAAC;QACpDC,4BAA4B,EAAE,KAAK;QACnCxB,kBAAkB,EAAEvB,cAAc,CAChCH,iBAAiB,CAAC0B,kBAAkB,EACpC,IACF,CAAC;QACDyB,OAAO,EAAEhD,cAAc,CAACH,iBAAiB,CAACmD,OAAO,EAAE,KAAK;MAC1D,CAAC;MACD,IAAI,CAACC,sBAAsB,GAAGjD,cAAc,CAC1CH,iBAAiB,CAACqD,qBAAqB,EACvC,KACF,CAAC;MAED,IAAMC,UAAU,GAAGvE,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACwE,kBAAkB,CAAC;MACzD,IAAMC,cAAc,GAAGzE,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC0E,mBAAmB,CAAC;MAE9D1E,EAAE,CAAC4C,WAAW,CAAC5C,EAAE,CAAC6C,UAAU,EAAE,IAAI,CAACc,qBAAqB,CAAC;MACzD3D,EAAE,CAAC2E,aAAa,CAAC3E,EAAE,CAAC6C,UAAU,EAAE7C,EAAE,CAAC4E,cAAc,EAAE5E,EAAE,CAAC6E,aAAa,CAAC;MACpE7E,EAAE,CAAC2E,aAAa,CAAC3E,EAAE,CAAC6C,UAAU,EAAE7C,EAAE,CAAC8E,cAAc,EAAE9E,EAAE,CAAC6E,aAAa,CAAC;MACpE7E,EAAE,CAAC2E,aAAa,CAAC3E,EAAE,CAAC6C,UAAU,EAAE7C,EAAE,CAAC+E,kBAAkB,EAAE/E,EAAE,CAACgF,MAAM,CAAC;MACjEhF,EAAE,CAAC2E,aAAa,CAAC3E,EAAE,CAAC6C,UAAU,EAAE7C,EAAE,CAACiF,kBAAkB,EAAEjF,EAAE,CAACgF,MAAM,CAAC;MACjE;MACA;;MAEAhF,EAAE,CAACkF,eAAe,CAAClF,EAAE,CAACmF,WAAW,EAAE,IAAI,CAACtB,yBAAyB,CAAC;MAClE7D,EAAE,CAACoF,oBAAoB,CACrBpF,EAAE,CAACmF,WAAW,EACdnF,EAAE,CAACqF,iBAAiB,EACpBrF,EAAE,CAAC6C,UAAU,EACb,IAAI,CAACc,qBAAqB,EAC1B,CACF,CAAC;MAED,IAAI,IAAI,CAACI,kBAAkB,CAACG,KAAK,EAAE;QACjC,IAAMoB,eAAe,GAAGtF,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACuF,oBAAoB,CAAC;QAChE,IAAI,CAACC,kBAAkB,GAAGxF,EAAE,CAACyF,kBAAkB,CAAC,CAAC;QACjDzF,EAAE,CAAC0F,gBAAgB,CAAC1F,EAAE,CAAC2F,YAAY,EAAE,IAAI,CAACH,kBAAkB,CAAC;QAC7D,IAAMI,eAAe,GAAG,IAAI,CAAC7B,kBAAkB,CAACK,OAAO,GACnDpE,EAAE,CAAC6F,wBAAwB,GAC3B7F,EAAE,CAAC8F,gBAAgB;QACvB9F,EAAE,CAAC+F,uBAAuB,CACxB/F,EAAE,CAACmF,WAAW,EACdS,eAAe,EACf5F,EAAE,CAAC2F,YAAY,EACf,IAAI,CAACH,kBACP,CAAC;QACDxF,EAAE,CAAC0F,gBAAgB,CAAC1F,EAAE,CAAC2F,YAAY,EAAEL,eAAe,CAAC;MACvD;MAEAtF,EAAE,CAAC4C,WAAW,CAAC5C,EAAE,CAAC6C,UAAU,EAAE0B,UAAU,CAAC;MACzCvE,EAAE,CAACkF,eAAe,CAAClF,EAAE,CAACmF,WAAW,EAAEV,cAAc,CAAC;;MAElD;MACA;MACA;MACA,IAAI,CAACuB,MAAM,GAAG3G,gBAAgB,CAACyC,MAAM,CAACK,KAAK,EAAEL,MAAM,CAACM,MAAM,CAAC;MAC3D,IAAI,CAAC4D,MAAM,CAACC,WAAW,GAAG,IAAI,CAACpC,yBAAyB;MAExD,IAAIlF,kBAAkB,EAAE;QACtB,IAAI,CAACqH,MAAM,CAACjG,WAAW,GAAGpB,kBAAkB,CAACkB,oBAAoB,CAAC,CAAC;QACnE,IAAI,CAACqG,mBAAmB,GAAG,IAAI,CAACF,MAAM,CAACjG,WAAW;MACpD;IACF;IACAmD,OAAOA,CAAA,EAAG;MACR,IAAI,CAACO,cAAc,CAAC,CAAC;MACrB,IAAMzD,EAAE,GAAGzB,kBAAkB;MAC7ByB,EAAE,CAACmG,iBAAiB,CAAC,IAAI,CAACtC,yBAAyB,CAAC;MACpD7D,EAAE,CAACoG,aAAa,CAAC,IAAI,CAACzC,qBAAqB,CAAC;MAC5C,IAAI,IAAI,CAAC6B,kBAAkB,EAAE;QAC3BxF,EAAE,CAACqG,kBAAkB,CAAC,IAAI,CAACb,kBAAkB,CAAC;MAChD;MACA,IAAI,IAAI,CAAChC,WAAW,CAACN,OAAO,EAAE;QAC5B,IAAI,CAACM,WAAW,CAACN,OAAO,CAAC,CAAC;MAC5B;MACA,KAAK,IAAM,CAACoD,GAAG,EAAEjF,KAAK,CAAC,IAAIkF,MAAM,CAACC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC/C,IAAI,OAAOnF,KAAK,KAAK,UAAU,EAAE;UAC/B,IAAI,CAACiF,GAAG,CAAC,GAAG9E,oBAAoB,CAAC8E,GAAG,CAAC;QACvC;MACF;MACA,KAAK,IAAM,CAACA,IAAG,EAAEjF,MAAK,CAAC,IAAIkF,MAAM,CAACC,OAAO,CACvCrD,mBAAmB,CAACrC,SACtB,CAAC,EAAE;QACD,IAAI,OAAOO,MAAK,KAAK,UAAU,EAAE;UAC/B,IAAI,CAACiF,IAAG,CAAC,GAAG9E,oBAAoB,CAAC8E,IAAG,CAAC;QACvC;MACF;IACF;IACA,IAAIG,kBAAkBA,CAAA,EAAG;MACvB,OAAO,IAAI,CAAC3E,MAAM,CAACK,KAAK;IAC1B;IACA,IAAIuE,mBAAmBA,CAAA,EAAG;MACxB,OAAO,IAAI,CAAC5E,MAAM,CAACM,MAAM;IAC3B;IACAJ,SAASA,CAAChC,EAAE,EAAE;MACZ,IAAI,CAACwD,WAAW,CAACxB,SAAS,CACxBhC,EAAE,EACF,IAAI,CAAC2D,qBAAqB,EAC1B,IAAI,CAAC7B,MAAM,EACX,IAAI,CAACiC,kBACP,CAAC;MACD,IAAI,CAAC,IAAI,CAACM,sBAAsB,EAAE;QAChC,IAAI,CAACsC,UAAU,GAAG,IAAI;MACxB;IACF;EACF;EAEA,SAAStH,gBAAgBA,CAAC8C,KAAK,EAAEC,MAAM,EAAE;IACvC,IAAMpC,EAAE,GAAG4G,qBAAqB;IAChC,IAAMC,KAAK,GAAG;MACZC,WAAW,EAAE,IAAI;MACjBC,YAAY,EAAE,IAAI;MAClBd,WAAW,EAAE,IAAI;MAEjBe,KAAK,EAAE,KAAK;MACZC,QAAQ,EAAE,KAAK;MACfC,SAAS,EAAE,KAAK;MAChBC,MAAM,EAAE,KAAK;MACbC,iBAAiB,EAAE,KAAK;MACxBC,qBAAqB,EAAE,KAAK;MAC5BC,cAAc,EAAE,KAAK;MACrBC,WAAW,EAAE,KAAK;MAClBC,WAAW,EAAE,KAAK;MAElBC,aAAa,EAAEzH,EAAE,CAAC0H,QAAQ;MAE1BC,aAAa,EAAE,CAAC;MAChBC,eAAe,EAAE,CAAC;MAClBC,0BAA0B,EAAE7H,EAAE,CAAC8H,qBAAqB;MACpDC,WAAW,EAAE,CAAC;MACdC,sBAAsB,EAAE,CAAC;MAEzBC,cAAc,EAAE,IAAI;MACpBxF,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEN,KAAK,EAAEC,MAAM,CAAC;MAC/B8F,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACrBC,WAAW,EAAEnI,EAAE,CAACoI,GAAG;MACnBC,WAAW,EAAErI,EAAE,CAACsI,IAAI;MACpBC,aAAa,EAAEvI,EAAE,CAACoI,GAAG;MACrBI,aAAa,EAAExI,EAAE,CAACsI,IAAI;MACtBG,gBAAgB,EAAEzI,EAAE,CAAC0I,QAAQ;MAC7BC,kBAAkB,EAAE3I,EAAE,CAAC0I,QAAQ;MAC/BE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACxBC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAC7BC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACnCC,YAAY,EAAE/I,EAAE,CAACgJ,IAAI;MACrBC,eAAe,EAAE,CAAC;MAClBC,SAAS,EAAElJ,EAAE,CAACmJ,IAAI;MAClBC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;MAClBC,SAAS,EAAE,IAAI;MACfC,SAAS,EAAEtJ,EAAE,CAACuJ,GAAG;MACjBC,kBAAkB,EAAExJ,EAAE,CAACyJ,SAAS;MAChCC,SAAS,EAAE,CAAC;MACZC,mBAAmB,EAAE,CAAC;MACtBC,kBAAkB,EAAE,CAAC;MACrBC,mBAAmB,EAAE,CAAC;MACtBC,mBAAmB,EAAE,KAAK;MAC1BC,eAAe,EAAE/J,EAAE,CAACgK,IAAI;MACxBC,eAAe,EAAEjK,EAAE,CAACkK,MAAM;MAC1BC,wBAAwB,EAAEnK,EAAE,CAACgK,IAAI;MACjCI,wBAAwB,EAAEpK,EAAE,CAACgK,IAAI;MACjCK,cAAc,EAAE,CAAC;MACjBC,oBAAoB,EAAE,UAAU;MAChCC,oBAAoB,EAAE,UAAU;MAChCC,iBAAiB,EAAE,CAAC;MACpBC,WAAW,EAAEzK,EAAE,CAACgK,IAAI;MACpBU,WAAW,EAAE1K,EAAE,CAACkK,MAAM;MACtBS,oBAAoB,EAAE3K,EAAE,CAACgK,IAAI;MAC7BY,oBAAoB,EAAE5K,EAAE,CAACgK,IAAI;MAC7Ba,UAAU,EAAE,CAAC;MACbC,gBAAgB,EAAE,UAAU;MAC5BC,gBAAgB,EAAE,UAAU;MAE5BC,YAAY,EAAE;IAChB,CAAC;IAED,IAAIrM,kBAAkB,EAAE;MACtBkI,KAAK,CAAC9G,WAAW,GAAG,IAAI;IAC1B,CAAC,MAAM;MACL8G,KAAK,CAACoE,kBAAkB,GAAG,IAAI;MAC/BpE,KAAK,CAACqE,UAAU,GAAG,EAAE;MACrB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGrM,aAAa,EAAE,EAAEqM,CAAC,EAAE;QACtC,IAAMC,MAAM,GAAG;UACblL,MAAM,EAAE,IAAI;UACZmL,OAAO,EAAE,KAAK;UACdC,IAAI,EAAE,CAAC;UACPC,MAAM,EAAE,CAAC;UACTvK,IAAI,EAAEhB,EAAE,CAACW,KAAK;UACd6K,UAAU,EAAE,KAAK;UACjBnK,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,CAAC;QACD,IAAIxC,uBAAuB,EAAE;UAC3BuM,MAAM,CAACK,OAAO,GAAG,CAAC;QACpB;QACA5E,KAAK,CAACqE,UAAU,CAACQ,IAAI,CAACN,MAAM,CAAC;MAC/B;IACF;IAEA,KAAK,IAAID,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGlM,eAAe,EAAE,EAAEkM,EAAC,EAAE;MACxCtE,KAAK,CAACmE,YAAY,CAACU,IAAI,CAAC;QACtBC,SAAS,EAAE,IAAI;QACfC,cAAc,EAAE;MAClB,CAAC,CAAC;IACJ;IAEA,OAAO/E,KAAK;EACd;;EAEA;EACA;EACA,KAAK,IAAIP,GAAG,IAAIM,qBAAqB,CAAC9F,SAAS,EAAE;IAC/C,IAAM+K,QAAQ,GAAGtF,MAAM,CAACuF,wBAAwB,CAC9ClF,qBAAqB,CAAC9F,SAAS,EAC/BwF,GACF,CAAC;IACD,IAAIuF,QAAQ,CAACE,GAAG,EAAE;MAChB;MACA,IAAMC,eAAe,GAAGzF,MAAM,CAACuF,wBAAwB,CACrD3I,mBAAmB,CAACrC,SAAS,EAC7BwF,GACF,CAAC;MACD,IAAI,CAAC0F,eAAe,EAAE;QACpBC,OAAO,CAACC,IAAI,0BAAAvK,MAAA,CAA0B2E,GAAG,sBAAmB,CAAC;MAC/D;MACA;IACF;IACA,QAAQA,GAAG;MACT;QAAS;UACP,IAAMjF,KAAK,GAAGuF,qBAAqB,CAAC9F,SAAS,CAACwF,GAAG,CAAC;UAClD,IAAI6F,QAAQ,GAAG9K,KAAK;UACpB,QAAQiF,GAAG;YACT,KAAK,sBAAsB;cACzB6F,QAAQ,GAAGC,2BAA2B;cACtC;YACF,KAAK,cAAc;cACjBD,QAAQ,GAAGE,yBAAyB,CAAChL,KAAK,CAAC;cAC3C;YACF,KAAK,iBAAiB;cACpB8K,QAAQ,GAAGG,sBAAsB;cACjC;YACF,KAAK,cAAc;cACjBH,QAAQ,GAAGI,mBAAmB;cAC9B;YACF,KAAK,YAAY;cACfJ,QAAQ,GAAGK,iBAAiB;cAC5B;YACF,KAAK,OAAO;YACZ,KAAK,YAAY;YACjB,KAAK,cAAc;cACjBL,QAAQ,GAAGM,iBAAiB,CAACpL,KAAK,CAAC;cACnC;YACF;cACE,IAAI,OAAOA,KAAK,KAAK,UAAU,EAAE;gBAC/B8K,QAAQ,GAAGO,aAAa,CAACrL,KAAK,CAAC;cACjC;cACA;UACJ;UACA8B,mBAAmB,CAACrC,SAAS,CAACwF,GAAG,CAAC,GAAG6F,QAAQ;UAC7C;QACF;IACF;EACF;EAEA,SAASE,yBAAyBA,CAACtL,MAAM,EAAE;IACzC,OAAO,UAAU4L,aAAa,EAAE;MAC9BA,aAAa,GAAGA,aAAa,CAACC,WAAW,CAAC,CAAC;MAC3C;MACA;MACA,IAAMC,WAAW,GAAG,IAAI,CAACnJ,WAAW,CAACiJ,aAAa,CAAC;MACnD,IAAIE,WAAW,EAAE;QACf,OAAOA,WAAW;MACpB;MAEA,IAAMC,GAAG,GAAG/L,MAAM,CAACI,IAAI,CAAC5C,kBAAkB,EAAEoO,aAAa,CAAC;MAC1D,IAAMI,WAAW,GAAGtP,aAAa,CAACkP,aAAa,CAAC,IAAI,CAAC,CAAC;MACtD,IAAMhP,gBAAgB,GACpBoP,WAAW,CAACpP,gBAAgB,KAC3B,MAAM;QACLsO,OAAO,CAACe,GAAG,CAAC,0BAA0B,EAAEL,aAAa,CAAC;MACxD,CAAC,CAAC;MACJ,IAAMM,iBAAiB,GAAG7O,2BAA2B,CAACuO,aAAa,CAAC;MACpE,IAAI,CAACM,iBAAiB,EAAE;QACtB,IAAMpP,kBAAkB,GAAGkP,WAAW,CAAClP,kBAAkB;QACzD,IAAIA,kBAAkB,EAAE;UACtB,IAAMqP,WAAW,GAAGrP,kBAAkB,CAACiP,GAAG,CAAC;UAC3C1O,2BAA2B,CAACuO,aAAa,CAAC,GAAGO,WAAW;UACxD/O,gCAAgC,CAACuN,IAAI,CAACwB,WAAW,CAAC;QACpD;MACF;MAEA,IAAMC,OAAO,GAAG;QACdC,QAAQ,EAAE;MACZ,CAAC;MACD,KAAK,IAAI9G,KAAG,IAAIwG,GAAG,EAAE;QACnB,IAAIzL,OAAK,GAAGyL,GAAG,CAACxG,KAAG,CAAC;QACpB,IAAI,OAAOjF,OAAK,KAAK,UAAU,EAAE;UAC/BA,OAAK,GAAG1D,gBAAgB,CAACmP,GAAG,EAAEzL,OAAK,EAAEsL,aAAa,CAAC;QACrD;QACAQ,OAAO,CAAC7G,KAAG,CAAC,GAAGjF,OAAK;MACtB;MAEA,IAAI,CAACqC,WAAW,CAACiJ,aAAa,CAAC,GAAGQ,OAAO;MAEzC,OAAOA,OAAO;IAChB,CAAC;EACH;EAEA,SAASE,wBAAwBA,CAACC,IAAI,EAAE;IACtC,OAAOA,IAAI,CAACtH,MAAM,CAACC,WAAW,KAAKqH,IAAI,CAACzJ,yBAAyB;EACnE;EAEA,SAAS7F,kCAAkCA,CAAC8O,GAAG,EAAE/L,MAAM,EAAEwM,IAAI,EAAE;IAC7D,QAAQA,IAAI;MACV,KAAK,oBAAoB;QACvB,OAAOC,yBAAyB;IACpC;IAEA,OAAO,YAAmB;MACxBC,kBAAkB,CAAC,IAAI,CAACL,QAAQ,CAAC;MACjCM,qBAAqB,CAAC,IAAI,CAACN,QAAQ,CAAC;MAAC,SAAAO,IAAA,GAAAvK,SAAA,CAAAC,MAAA,EAFnBuK,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,KAAA,MAAAA,KAAA,GAAAH,IAAA,EAAAG,KAAA;QAAJF,IAAI,CAAAE,KAAA,IAAA1K,SAAA,CAAA0K,KAAA;MAAA;MAGtB,OAAO/M,MAAM,CAACI,IAAI,CAAC2L,GAAG,EAAE,GAAGc,IAAI,CAAC;IAClC,CAAC;EACH;EAEA,SAASJ,yBAAyBA,CAAC5N,GAAG,EAAE;IACtC6N,kBAAkB,CAAC,IAAI,CAACL,QAAQ,CAAC;IACjCM,qBAAqB,CAAC,IAAI,CAACN,QAAQ,CAAC;IACpC,IAAI,CAACxN,GAAG,EAAE;MACRA,GAAG,GAAG,IAAI,CAACwN,QAAQ,CAAClH,mBAAmB;IACzC;IACAvH,kBAAkB,CAACmB,kBAAkB,CAACF,GAAG,CAAC;EAC5C;EAEA,SAAS1B,iCAAiCA,CAAC4O,GAAG,EAAE/L,MAAM,EAAEwM,IAAI,EAAE;IAC5D,QAAQA,IAAI;MACV,KAAK,0BAA0B;MAC/B,KAAK,4BAA4B;QAC/B,OAAOQ,oBAAoB,CAACjB,GAAG,EAAE/L,MAAM,CAAC;QACxC;IACJ;IAEA,OAAO,YAAmB;MACxB0M,kBAAkB,CAAC,IAAI,CAACL,QAAQ,CAAC;MACjCM,qBAAqB,CAAC,IAAI,CAACN,QAAQ,CAAC;MAAC,SAAAY,KAAA,GAAA5K,SAAA,CAAAC,MAAA,EAFnBuK,IAAI,OAAAC,KAAA,CAAAG,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJL,IAAI,CAAAK,KAAA,IAAA7K,SAAA,CAAA6K,KAAA;MAAA;MAGtB,OAAOlN,MAAM,CAACI,IAAI,CAAC2L,GAAG,EAAE,GAAGc,IAAI,CAAC;IAClC,CAAC;EACH;EAEA,SAASG,oBAAoBA,CAACjB,GAAG,EAAE/L,MAAM,EAAE;IACzC,OAAO,YAAmB;MACxB;MACA;MACAmN,UAAU,CAAC,IAAI,CAACd,QAAQ,CAAC;MAAC,SAAAe,KAAA,GAAA/K,SAAA,CAAAC,MAAA,EAHRuK,IAAI,OAAAC,KAAA,CAAAM,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJR,IAAI,CAAAQ,KAAA,IAAAhL,SAAA,CAAAgL,KAAA;MAAA;MAItB,IAAMC,MAAM,GAAGtN,MAAM,CAACI,IAAI,CAACmN,IAAI,EAAE,GAAGV,IAAI,CAAC;MACzCW,SAAS,CAAC,IAAI,CAACnB,QAAQ,CAAC;MACxB,OAAOiB,MAAM;IACf,CAAC;EACH;EAEA,SAASzQ,6BAA6BA,CAACkP,GAAG,EAAE/L,MAAM,EAAEwM,IAAI,EAAE;IACxD,IAAMvN,EAAE,GAAGzB,kBAAkB;IAC7B,IAAMiQ,UAAU,GAAG,CAACxO,EAAE,CAACqF,iBAAiB,CAAC;IAEzC,OAAO,UAAUoJ,cAAc,EAAE;MAC/BhB,kBAAkB,CAAC,IAAI,CAACL,QAAQ,CAAC;MACjCM,qBAAqB,CAAC,IAAI,CAACN,QAAQ,CAAC;MACpC;MACA,IAAIC,wBAAwB,CAAC,IAAI,CAACD,QAAQ,CAAC,EAAE;QAC3C;QACA;QACA;QACA,IAAIqB,cAAc,CAAC,CAAC,CAAC,KAAKzO,EAAE,CAACgJ,IAAI,EAAE;UACjCyF,cAAc,GAAGD,UAAU;QAC7B;MACF;MACAzN,MAAM,CAACI,IAAI,CAAC2L,GAAG,EAAE2B,cAAc,CAAC;IAClC,CAAC;EACH;EAEA,SAAS3Q,sCAAsCA,CAACgP,GAAG,EAAE;IACnD,IAAM9M,EAAE,GAAGzB,kBAAkB;IAC7B,IAAMmQ,cAAc,GAAG1O,EAAE,CAACjB,YAAY,CAAC+N,GAAG,CAAC6B,sBAAsB,CAAC;IAClE,IAAMC,sBAAsB,GAAG,CAAC5O,EAAE,CAACgJ,IAAI,CAAC;IACxC,IAAM6F,oBAAoB,GAAG,CAAC7O,EAAE,CAACqF,iBAAiB,CAAC;IACnD,KAAK,IAAI8F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuD,cAAc,EAAE,EAAEvD,CAAC,EAAE;MACvC0D,oBAAoB,CAACnD,IAAI,CAAC1L,EAAE,CAAC8O,IAAI,CAAC;IACpC;IAEA,SAASC,mBAAmBA,CAAClI,KAAK,EAAE;MAClCA,KAAK,CAACmI,WAAW,GAAGnI,KAAK,CAACZ,WAAW,GACjC4I,oBAAoB,CAACI,KAAK,CAAC,CAAC,GAC5BL,sBAAsB,CAACK,KAAK,CAAC,CAAC;IACpC;IAEA,SAASC,IAAIA,CAACrI,KAAK,EAAE;MACnB,IAAI,CAACA,KAAK,CAACmI,WAAW,EAAE;QACtBD,mBAAmB,CAAClI,KAAK,CAAC;MAC5B;MACA;MACA,IAAMmI,WAAW,GAAGnI,KAAK,CAACmI,WAAW;MACrC,KAAK,IAAI7D,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAG6D,WAAW,CAAC3L,MAAM,EAAE,EAAE8H,GAAC,EAAE;QAC3C6D,WAAW,CAAC7D,GAAC,CAAC,GAAGnL,EAAE,CAACjB,YAAY,CAAC+N,GAAG,CAACqC,kBAAkB,GAAGhE,GAAC,CAAC;MAC9D;IACF;IAEA,SAASiE,OAAOA,CAACvI,KAAK,EAAE;MACtB,IAAI,CAACA,KAAK,CAACmI,WAAW,EAAE;QACtBD,mBAAmB,CAAClI,KAAK,CAAC;MAC5B;MACAiG,GAAG,CAACuC,gBAAgB,CAACxI,KAAK,CAACmI,WAAW,CAAC;IACzC;IAEA,OAAO;MACLE,IAAI;MACJE;IACF,CAAC;EACH;EAEA,SAAShD,2BAA2BA,CAAA,EAAG;IACrC,OAAO,IAAI,CAACrI,kBAAkB;EAChC;EAEA,SAASyI,iBAAiBA,CAAA,EAAU;IAClCiB,kBAAkB,CAAC,IAAI,CAAC;IACxBC,qBAAqB,CAAC,IAAI,CAAC;IAC3B4B,aAAa,CAAC,IAAI,CAAC;IACnB,IAAMtP,EAAE,GAAGzB,kBAAkB;IAC7B,OAAOyB,EAAE,CAACuP,UAAU,CAAC,GAAAnM,SAAO,CAAC;EAC/B;EAEA,SAASmJ,mBAAmBA,CAACiD,KAAK,EAAE;IAClC/B,kBAAkB,CAAC,IAAI,CAAC;IACxBC,qBAAqB,CAAC,IAAI,CAAC;IAC3B,IAAM1N,EAAE,GAAGzB,kBAAkB;IAC7B,IAAM8C,KAAK,GAAGrB,EAAE,CAACjB,YAAY,CAACyQ,KAAK,CAAC;IACpC,QAAQA,KAAK;MACX,KAAKxP,EAAE,CAAC0E,mBAAmB;QACzB,IAAIrD,KAAK,KAAK,IAAI,CAACwC,yBAAyB,EAAE;UAC5C,OAAO,IAAI;QACb;QACA;MACF,KAAK,MAAM;QAAE;QACX,IAAIwJ,wBAAwB,CAAC,IAAI,CAAC,EAAE;UAClC,IAAIhM,KAAK,KAAKrB,EAAE,CAACqF,iBAAiB,EAAE;YAClC,OAAOrF,EAAE,CAACgJ,IAAI;UAChB;QACF;QACA;MACF,KAAK,MAAM;QAAE;QACX,IAAI3H,KAAK,KAAK,IAAI,CAAC6E,mBAAmB,EAAE;UACtC,OAAO,IAAI;QACb;QACA;IACJ;IACA,OAAO7E,KAAK;EACd;EAEA,SAASiL,sBAAsBA,CAACmD,SAAS,EAAExJ,WAAW,EAAE;IACtDwH,kBAAkB,CAAC,IAAI,CAAC;IACxBC,qBAAqB,CAAC,IAAI,CAAC;IAC3B,IAAM1N,EAAE,GAAGzB,kBAAkB;IAC7B,IAAIkR,SAAS,KAAK7I,qBAAqB,CAACzB,WAAW,EAAE;MACnD,IAAIc,WAAW,KAAK,IAAI,EAAE;QACxB;QACAA,WAAW,GAAG,IAAI,CAACpC,yBAAyB;MAC9C;IACF;IAEA7D,EAAE,CAACkF,eAAe,CAACuK,SAAS,EAAExJ,WAAW,CAAC;IAC1C,IAAI,CAACD,MAAM,CAACC,WAAW,GAAGA,WAAW;EACvC;EAEA,SAASyG,aAAaA,CAAC3L,MAAM,EAAE;IAC7B;IACA,OAAO,YAAmB;MACxB0M,kBAAkB,CAAC,IAAI,CAAC;MACxBC,qBAAqB,CAAC,IAAI,CAAC;MAAC,SAAAgC,KAAA,GAAAtM,SAAA,CAAAC,MAAA,EAFVuK,IAAI,OAAAC,KAAA,CAAA6B,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJ/B,IAAI,CAAA+B,KAAA,IAAAvM,SAAA,CAAAuM,KAAA;MAAA;MAGtB,OAAO5O,MAAM,CAACI,IAAI,CAAC5C,kBAAkB,EAAE,GAAGqP,IAAI,CAAC;IACjD,CAAC;EACH;EAEA,SAAS0B,aAAaA,CAAChC,IAAI,EAAE;IAC3B,IAAIA,IAAI,CAAC3G,UAAU,EAAE;MACnB2G,IAAI,CAAC3G,UAAU,GAAG,KAAK;MACvB,IAAM3G,GAAE,GAAGzB,kBAAkB;MAC7ByB,GAAE,CAACkF,eAAe,CAAClF,GAAE,CAACmF,WAAW,EAAEmI,IAAI,CAACzJ,yBAAyB,CAAC;MAClE7D,GAAE,CAAC4P,OAAO,CAAC5P,GAAE,CAAC6P,YAAY,CAAC;MAC3B7P,GAAE,CAAC8P,KAAK,CACN9P,GAAE,CAAC+P,gBAAgB,GAAG/P,GAAE,CAACgQ,gBAAgB,GAAGhQ,GAAE,CAACiQ,kBACjD,CAAC;MACDC,aAAa,CAAClQ,GAAE,EAAEA,GAAE,CAAC6P,YAAY,EAAEvC,IAAI,CAACtH,MAAM,CAACuB,WAAW,CAAC;MAC3DvH,GAAE,CAACkF,eAAe,CAAClF,GAAE,CAACmF,WAAW,EAAEmI,IAAI,CAACtH,MAAM,CAACC,WAAW,CAAC;IAC7D;EACF;EAEA,SAASiI,UAAUA,CAACZ,IAAI,EAAE;IACxBG,kBAAkB,CAACH,IAAI,CAAC;IACxBI,qBAAqB,CAACJ,IAAI,CAAC;IAC3BgC,aAAa,CAAChC,IAAI,CAAC;EACrB;EAEA,SAASiB,SAASA,CAACjB,IAAI,EAAE;IACvB,IAAID,wBAAwB,CAACC,IAAI,CAAC,EAAE;MAClCA,IAAI,CAAC6C,cAAc,GAAG,IAAI;MAC1B,IAAI,CAAC7R,yBAAyB,EAAE;QAC9BA,yBAAyB,GAAG,IAAI;QAChC8R,UAAU,CAACC,6BAA6B,EAAE,CAAC,CAAC;MAC9C;IACF;EACF;EAEA,SAAS5D,iBAAiBA,CAAC1L,MAAM,EAAE;IACjC,OAAO,YAAmB;MACxB;MACA;MACAmN,UAAU,CAAC,IAAI,CAAC;MAAC,SAAAoC,KAAA,GAAAlN,SAAA,CAAAC,MAAA,EAHCuK,IAAI,OAAAC,KAAA,CAAAyC,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJ3C,IAAI,CAAA2C,KAAA,IAAAnN,SAAA,CAAAmN,KAAA;MAAA;MAItB,IAAMlC,MAAM,GAAGtN,MAAM,CAACI,IAAI,CAAC5C,kBAAkB,EAAE,GAAGqP,IAAI,CAAC;MACvDW,SAAS,CAAC,IAAI,CAAC;MACf,OAAOF,MAAM;IACf,CAAC;EACH;EAEA,SAASZ,kBAAkBA,CAACH,IAAI,EAAE;IAChC,IAAIjP,qBAAqB,KAAKiP,IAAI,EAAE;MAClC;IACF;;IAEA;IACA,IAAIjP,qBAAqB,EAAE;MACzBuC,YAAY,CAACvC,qBAAqB,CAAC2H,MAAM,EAAE3H,qBAAqB,CAAC;IACnE;;IAEA;IACAmS,eAAe,CAAClD,IAAI,CAACtH,MAAM,EAAEsH,IAAI,CAAC;;IAElC;IACA;;IAEAjP,qBAAqB,GAAGiP,IAAI;EAC9B;EAEA,SAASI,qBAAqBA,CAACJ,IAAI,EAAE;IACnC,IAAMnL,KAAK,GAAGmL,IAAI,CAACxL,MAAM,CAACK,KAAK;IAC/B,IAAMC,MAAM,GAAGkL,IAAI,CAACxL,MAAM,CAACM,MAAM;IAEjC,IAAID,KAAK,KAAKmL,IAAI,CAACmD,MAAM,IAAIrO,MAAM,KAAKkL,IAAI,CAACoD,OAAO,EAAE;MACpDpD,IAAI,CAACmD,MAAM,GAAGtO,KAAK;MACnBmL,IAAI,CAACoD,OAAO,GAAGtO,MAAM;MACrB,IAAMpC,IAAE,GAAGzB,kBAAkB;MAC7B,IAAMgG,UAAU,GAAGvE,IAAE,CAACjB,YAAY,CAACiB,IAAE,CAACwE,kBAAkB,CAAC;MACzD,IAAMmM,MAAM,GAAGrD,IAAI,CAACvJ,kBAAkB,CAACC,KAAK,GAAGhE,IAAE,CAAC4Q,IAAI,GAAG5Q,IAAE,CAAC6Q,GAAG;MAC/D7Q,IAAE,CAAC4C,WAAW,CAAC5C,IAAE,CAAC6C,UAAU,EAAEyK,IAAI,CAAC3J,qBAAqB,CAAC;MACzD3D,IAAE,CAAC8Q,UAAU,CACX9Q,IAAE,CAAC6C,UAAU,EACb,CAAC,EACD8N,MAAM,EACNxO,KAAK,EACLC,MAAM,EACN,CAAC,EACDuO,MAAM,EACN3Q,IAAE,CAAC+Q,aAAa,EAChB,IACF,CAAC;MACD/Q,IAAE,CAAC4C,WAAW,CAAC5C,IAAE,CAAC6C,UAAU,EAAE0B,UAAU,CAAC;MAEzC,IAAI+I,IAAI,CAAC9H,kBAAkB,EAAE;QAC3B,IAAMF,eAAe,GAAGtF,IAAE,CAACjB,YAAY,CAACiB,IAAE,CAACuF,oBAAoB,CAAC;QAChE,IAAMyL,cAAc,GAAG1D,IAAI,CAACvJ,kBAAkB,CAACK,OAAO,GAClDpE,IAAE,CAACiR,aAAa,GAChBjR,IAAE,CAACkR,iBAAiB;QACxBlR,IAAE,CAAC0F,gBAAgB,CAAC1F,IAAE,CAAC2F,YAAY,EAAE2H,IAAI,CAAC9H,kBAAkB,CAAC;QAC7DxF,IAAE,CAACmR,mBAAmB,CAACnR,IAAE,CAAC2F,YAAY,EAAEqL,cAAc,EAAE7O,KAAK,EAAEC,MAAM,CAAC;QACtEpC,IAAE,CAAC0F,gBAAgB,CAAC1F,IAAE,CAAC2F,YAAY,EAAEL,eAAe,CAAC;MACvD;IACF;EACF;EAEA,SAASpE,8BAA8BA,CAACY,MAAM,EAAEd,IAAI,EAAEC,iBAAiB,EAAE;IACvE;IACA,IAAMmQ,kBAAkB,GAAG7T,yBAAyB,CAACwO,GAAG,CAACjK,MAAM,CAAC;IAChE,IAAIsP,kBAAkB,EAAE;MACtB,OAAOA,kBAAkB;IAC3B;IAEA,IAAM9N,UAAU,GACdlG,QAAQ,CAACE,iBAAiB,CAACwE,MAAM,EAAEd,IAAI,EAAEC,iBAAiB,CAAC,IAC3D,IAAIW,iBAAiB,CAACE,MAAM,EAAEd,IAAI,EAAEC,iBAAiB,CAAC;IACxD,IAAMoQ,aAAa,GAAG,IAAIlO,mBAAmB,CAC3CrB,MAAM,EACNb,iBAAiB,EACjBqC,UAAU,EACV,MAAM;MACJ/F,yBAAyB,CAAC+T,MAAM,CAACxP,MAAM,CAAC;IAC1C,CACF,CAAC;IACDvE,yBAAyB,CAACgU,GAAG,CAACzP,MAAM,EAAEuP,aAAa,CAAC;IAEpD,OAAOA,aAAa;EACtB;EAEA,SAAS3R,aAAaA,CAACM,EAAE,EAAEwR,aAAa,EAAE;IACxC,IAAMC,OAAO,GAAGzR,EAAE,CAACN,aAAa,CAAC,CAAC;IAClC,CAACM,EAAE,CAAC0R,aAAa,EAAE1R,EAAE,CAAC2R,eAAe,CAAC,CAACC,OAAO,CAAC,CAAC5Q,IAAI,EAAE6Q,GAAG,KAAK;MAC5D,IAAMC,MAAM,GAAG9R,EAAE,CAAC+R,YAAY,CAAC/Q,IAAI,CAAC;MACpChB,EAAE,CAACgS,YAAY,CAACF,MAAM,EAAEN,aAAa,CAACK,GAAG,CAAC,CAAC;MAC3C7R,EAAE,CAACiS,aAAa,CAACH,MAAM,CAAC;MACxB,IAAI,CAAC9R,EAAE,CAACkS,kBAAkB,CAACJ,MAAM,EAAE9R,EAAE,CAACmS,cAAc,CAAC,EAAE;QACrDlG,OAAO,CAACmG,KAAK,CAACpS,EAAE,CAACqS,gBAAgB,CAACP,MAAM,CAAC,CAAC,CAAC,CAAC;MAC9C;;MACA9R,EAAE,CAACsS,YAAY,CAACb,OAAO,EAAEK,MAAM,CAAC;IAClC,CAAC,CAAC;IACF9R,EAAE,CAACuS,kBAAkB,CAACd,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC;IAC7CzR,EAAE,CAACwS,WAAW,CAACf,OAAO,CAAC;IACvB,IAAI,CAACzR,EAAE,CAACyS,mBAAmB,CAAChB,OAAO,EAAEzR,EAAE,CAAC0S,WAAW,CAAC,EAAE;MACpDzG,OAAO,CAACmG,KAAK,CAACpS,EAAE,CAAC2S,iBAAiB,CAAClB,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD;;IAEA,OAAOA,OAAO;EAChB;EAEA,SAAS7Q,YAAYA,CAACiG,KAAK,EAAEyG,IAAI,EAAE;IACjC;IACA;IACA;IACA,IAAMtN,EAAE,GAAGzB,kBAAkB;IAE7BsI,KAAK,CAACY,aAAa,GAAGzH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC4S,cAAc,CAAC;;IAExD;IACA,KAAK,IAAIzH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlM,eAAe,EAAE,EAAEkM,CAAC,EAAE;MACxCnL,EAAE,CAACyH,aAAa,CAACzH,EAAE,CAAC0H,QAAQ,GAAGyD,CAAC,CAAC;MACjC,IAAM0H,IAAI,GAAGhM,KAAK,CAACmE,YAAY,CAACG,CAAC,CAAC;MAClC0H,IAAI,CAAClH,SAAS,GAAG3L,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACwE,kBAAkB,CAAC;MACvDqO,IAAI,CAACjH,cAAc,GAAG5L,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC8S,wBAAwB,CAAC;IACpE;;IAEA;IACAjM,KAAK,CAACC,WAAW,GAAG9G,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC+S,oBAAoB,CAAC;IAC5DlM,KAAK,CAACE,YAAY,GAAG/G,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACuF,oBAAoB,CAAC;IAC7DsB,KAAK,CAACZ,WAAW,GAAGjG,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC0E,mBAAmB,CAAC;;IAE3D;IACA,IAAI/F,kBAAkB,EAAE;MACtBkI,KAAK,CAAC9G,WAAW,GAAGC,EAAE,CAACjB,YAAY,CACjCJ,kBAAkB,CAACqU,wBACrB,CAAC;IACH,CAAC,MAAM;MACL,KAAK,IAAI7H,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGrM,aAAa,EAAE,EAAEqM,GAAC,EAAE;QACtC,IAAMC,MAAM,GAAGvE,KAAK,CAACqE,UAAU,CAACC,GAAC,CAAC;QAClCC,MAAM,CAAClL,MAAM,GAAGF,EAAE,CAACiT,eAAe,CAChC9H,GAAC,EACDnL,EAAE,CAACkT,kCACL,CAAC;QACD9H,MAAM,CAACC,OAAO,GAAGrL,EAAE,CAACiT,eAAe,CAAC9H,GAAC,EAAEnL,EAAE,CAACmT,2BAA2B,CAAC;QACtE/H,MAAM,CAACE,IAAI,GAAGtL,EAAE,CAACiT,eAAe,CAAC9H,GAAC,EAAEnL,EAAE,CAACoT,wBAAwB,CAAC;QAChEhI,MAAM,CAACG,MAAM,GAAGvL,EAAE,CAACiT,eAAe,CAAC9H,GAAC,EAAEnL,EAAE,CAACqT,0BAA0B,CAAC;QACpEjI,MAAM,CAACpK,IAAI,GAAGhB,EAAE,CAACiT,eAAe,CAAC9H,GAAC,EAAEnL,EAAE,CAACsT,wBAAwB,CAAC;QAChElI,MAAM,CAACI,UAAU,GAAGxL,EAAE,CAACiT,eAAe,CACpC9H,GAAC,EACDnL,EAAE,CAACuT,8BACL,CAAC;QACDnI,MAAM,CAAC/J,KAAK,GAAGrB,EAAE,CAACiT,eAAe,CAAC9H,GAAC,EAAEnL,EAAE,CAACwT,qBAAqB,CAAC;QAC9DpI,MAAM,CAACqI,MAAM,GAAGzT,EAAE,CAAC0T,qBAAqB,CACtCvI,GAAC,EACDnL,EAAE,CAAC2T,2BACL,CAAC;QACD,IAAI9U,uBAAuB,EAAE;UAC3BuM,MAAM,CAACK,OAAO,GAAGzL,EAAE,CAACiT,eAAe,CACjC9H,GAAC,EACDtM,uBAAuB,CAAC+U,iCAC1B,CAAC;QACH;MACF;MACA/M,KAAK,CAACoE,kBAAkB,GAAGjL,EAAE,CAACjB,YAAY,CACxCiB,EAAE,CAAC6T,4BACL,CAAC;IACH;IAEAhN,KAAK,CAACG,KAAK,GAAGhH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC8T,KAAK,CAAC;IACvCjN,KAAK,CAACI,QAAQ,GAAGjH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC+T,SAAS,CAAC;IAC9ClN,KAAK,CAACK,SAAS,GAAGlH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACgU,UAAU,CAAC;IAChDnN,KAAK,CAACM,MAAM,GAAGnH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACiU,MAAM,CAAC;IACzCpN,KAAK,CAACO,iBAAiB,GAAGpH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACkU,mBAAmB,CAAC;IACjErN,KAAK,CAACQ,qBAAqB,GAAGrH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACmU,wBAAwB,CAAC;IAC1EtN,KAAK,CAACS,cAAc,GAAGtH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACoU,eAAe,CAAC;IAC1DvN,KAAK,CAACU,WAAW,GAAGvH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC6P,YAAY,CAAC;IACpDhJ,KAAK,CAACW,WAAW,GAAGxH,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACqU,YAAY,CAAC;IAEpDxN,KAAK,CAACc,aAAa,GAAG3H,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACsU,cAAc,CAAC;IACxDzN,KAAK,CAACe,eAAe,GAAG5H,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACuU,gBAAgB,CAAC;IAC5D1N,KAAK,CAACgB,0BAA0B,GAAG7H,EAAE,CAACjB,YAAY,CAChDiB,EAAE,CAACwU,kCACL,CAAC;IACD3N,KAAK,CAACkB,WAAW,GAAG/H,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACyU,mBAAmB,CAAC;IAC3D5N,KAAK,CAACmB,sBAAsB,GAAGhI,EAAE,CAACjB,YAAY,CAC5CiB,EAAE,CAAC0U,8BACL,CAAC;IAED7N,KAAK,CAACoB,cAAc,GAAGjI,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC2U,eAAe,CAAC;IAC1D9N,KAAK,CAACpE,QAAQ,GAAGzC,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC4U,QAAQ,CAAC;IAC7C/N,KAAK,CAACqB,OAAO,GAAGlI,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC6U,WAAW,CAAC;IAC/ChO,KAAK,CAACsB,WAAW,GAAGnI,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC8U,aAAa,CAAC;IACrDjO,KAAK,CAACwB,WAAW,GAAGrI,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC+U,aAAa,CAAC;IACrDlO,KAAK,CAAC0B,aAAa,GAAGvI,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACgV,eAAe,CAAC;IACzDnO,KAAK,CAAC2B,aAAa,GAAGxI,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACiV,eAAe,CAAC;IACzDpO,KAAK,CAAC4B,gBAAgB,GAAGzI,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACkV,kBAAkB,CAAC;IAC/DrO,KAAK,CAAC8B,kBAAkB,GAAG3I,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACmV,oBAAoB,CAAC;IACnEtO,KAAK,CAAC+B,UAAU,GAAG5I,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACoV,WAAW,CAAC;IAClDvO,KAAK,CAACgC,eAAe,GAAG7I,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACqV,iBAAiB,CAAC;IAC7DxO,KAAK,CAACiC,SAAS,GAAG9I,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACsV,eAAe,CAAC;IACrDzO,KAAK,CAACkC,YAAY,GAAG/I,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACuV,cAAc,CAAC;IACvD1O,KAAK,CAACoC,eAAe,GAAGjJ,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACwV,iBAAiB,CAAC;IAC7D3O,KAAK,CAACqC,SAAS,GAAGlJ,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACyV,UAAU,CAAC;IAChD5O,KAAK,CAACuC,UAAU,GAAGpJ,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC0V,WAAW,CAAC;IAClD7O,KAAK,CAACwC,SAAS,GAAGrJ,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC2V,eAAe,CAAC;IACrD9O,KAAK,CAACyC,SAAS,GAAGtJ,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC4V,UAAU,CAAC;IAChD/O,KAAK,CAAC2C,kBAAkB,GAAGxJ,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC6V,oBAAoB,CAAC;IACnEhP,KAAK,CAAC6C,SAAS,GAAG1J,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC8V,UAAU,CAAC;IAChDjP,KAAK,CAAC8C,mBAAmB,GAAG3J,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC+V,qBAAqB,CAAC;IACrElP,KAAK,CAAC+C,kBAAkB,GAAG5J,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACgW,oBAAoB,CAAC;IACnEnP,KAAK,CAACgD,mBAAmB,GAAG7J,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACiW,qBAAqB,CAAC;IACrEpP,KAAK,CAACiD,mBAAmB,GAAG9J,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACkW,sBAAsB,CAAC;IACtErP,KAAK,CAACkD,eAAe,GAAG/J,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACmW,iBAAiB,CAAC;IAC7DtP,KAAK,CAACoD,eAAe,GAAGjK,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACoW,iBAAiB,CAAC;IAC7DvP,KAAK,CAACsD,wBAAwB,GAAGnK,EAAE,CAACjB,YAAY,CAC9CiB,EAAE,CAACqW,4BACL,CAAC;IACDxP,KAAK,CAACuD,wBAAwB,GAAGpK,EAAE,CAACjB,YAAY,CAC9CiB,EAAE,CAACsW,4BACL,CAAC;IACDzP,KAAK,CAACwD,cAAc,GAAGrK,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACuW,gBAAgB,CAAC;IAC3D1P,KAAK,CAACyD,oBAAoB,GAAGtK,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACwW,uBAAuB,CAAC;IACxE3P,KAAK,CAAC0D,oBAAoB,GAAGvK,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACyW,sBAAsB,CAAC;IACvE5P,KAAK,CAAC2D,iBAAiB,GAAGxK,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC0W,mBAAmB,CAAC;IACjE7P,KAAK,CAAC4D,WAAW,GAAGzK,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC2W,YAAY,CAAC;IACpD9P,KAAK,CAAC6D,WAAW,GAAG1K,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC4W,YAAY,CAAC;IACpD/P,KAAK,CAAC8D,oBAAoB,GAAG3K,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC6W,uBAAuB,CAAC;IACxEhQ,KAAK,CAAC+D,oBAAoB,GAAG5K,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC8W,uBAAuB,CAAC;IACxEjQ,KAAK,CAACgE,UAAU,GAAG7K,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAAC+W,WAAW,CAAC;IAClDlQ,KAAK,CAACiE,gBAAgB,GAAG9K,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACgX,kBAAkB,CAAC;IAC/DnQ,KAAK,CAACkE,gBAAgB,GAAG/K,EAAE,CAACjB,YAAY,CAACiB,EAAE,CAACiX,iBAAiB,CAAC;IAE9D,KAAK,IAAMC,GAAG,IAAI/Y,gCAAgC,EAAE;MAClD+Y,GAAG,CAAChI,IAAI,CAACrI,KAAK,EAAEyG,IAAI,CAAC;IACvB;EACF;EAEA,SAASkD,eAAeA,CAAC3J,KAAK,EAAEyG,IAAI,EAAE;IACpC;IACA;IACA;IACA;IACA;IACA;IACA,IAAMtN,EAAE,GAAGzB,kBAAkB;;IAE7B;IACA,KAAK,IAAI4M,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGlM,eAAe,EAAE,EAAEkM,CAAC,EAAE;MACxCnL,EAAE,CAACyH,aAAa,CAACzH,EAAE,CAAC0H,QAAQ,GAAGyD,CAAC,CAAC;MACjC,IAAM0H,IAAI,GAAGhM,KAAK,CAACmE,YAAY,CAACG,CAAC,CAAC;MAClCnL,EAAE,CAAC4C,WAAW,CAAC5C,EAAE,CAAC6C,UAAU,EAAEgQ,IAAI,CAAClH,SAAS,CAAC;MAC7C3L,EAAE,CAAC4C,WAAW,CAAC5C,EAAE,CAACmX,gBAAgB,EAAEtE,IAAI,CAACjH,cAAc,CAAC;IAC1D;IACA5L,EAAE,CAACyH,aAAa,CAACZ,KAAK,CAACY,aAAa,CAAC;;IAErC;IACA,IAAI9I,kBAAkB,EAAE;MACtBA,kBAAkB,CAACmB,kBAAkB,CAAC+G,KAAK,CAAC9G,WAAW,CAAC;IAC1D,CAAC,MAAM;MACL,KAAK,IAAIoL,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGrM,aAAa,EAAE,EAAEqM,GAAC,EAAE;QACtC,IAAMC,MAAM,GAAGvE,KAAK,CAACqE,UAAU,CAACC,GAAC,CAAC;QAClC,IAAIC,MAAM,CAACC,OAAO,EAAE;UAClBrL,EAAE,CAACS,uBAAuB,CAAC0K,GAAC,CAAC;QAC/B,CAAC,MAAM;UACLnL,EAAE,CAACoX,wBAAwB,CAACjM,GAAC,CAAC;QAChC;QACAnL,EAAE,CAACqX,eAAe,CAAClM,GAAC,EAAEC,MAAM,CAAC/J,KAAK,CAAC;QACnCrB,EAAE,CAACI,UAAU,CAACJ,EAAE,CAACK,YAAY,EAAE+K,MAAM,CAAClL,MAAM,CAAC;QAC7CF,EAAE,CAACU,mBAAmB,CACpByK,GAAC,EACDC,MAAM,CAACE,IAAI,EACXF,MAAM,CAACpK,IAAI,EACXoK,MAAM,CAACI,UAAU,EACjBJ,MAAM,CAACG,MAAM,EACbH,MAAM,CAACqI,MACT,CAAC;QACD,IAAI5U,uBAAuB,EAAE;UAC3BA,uBAAuB,CAACyY,wBAAwB,CAACnM,GAAC,EAAEC,MAAM,CAACK,OAAO,CAAC;QACrE;MACF;MACAzL,EAAE,CAACI,UAAU,CAACJ,EAAE,CAACuX,oBAAoB,EAAE1Q,KAAK,CAACoE,kBAAkB,CAAC;IAClE;;IAEA;IACAjL,EAAE,CAACI,UAAU,CAACJ,EAAE,CAACK,YAAY,EAAEwG,KAAK,CAACC,WAAW,CAAC;IACjD9G,EAAE,CAAC0F,gBAAgB,CAAC1F,EAAE,CAAC2F,YAAY,EAAEkB,KAAK,CAACE,YAAY,CAAC;IACxD/G,EAAE,CAACkF,eAAe,CAAClF,EAAE,CAACmF,WAAW,EAAE0B,KAAK,CAACZ,WAAW,CAAC;IAErDiK,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAAC8T,KAAK,EAAEjN,KAAK,CAACG,KAAK,CAAC;IACxCkJ,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAAC+T,SAAS,EAAElN,KAAK,CAACI,QAAQ,CAAC;IAC/CiJ,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAACgU,UAAU,EAAEnN,KAAK,CAACK,SAAS,CAAC;IACjDgJ,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAACiU,MAAM,EAAEpN,KAAK,CAACM,MAAM,CAAC;IAC1C+I,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAACkU,mBAAmB,EAAErN,KAAK,CAACO,iBAAiB,CAAC;IAClE8I,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAACmU,wBAAwB,EAAEtN,KAAK,CAACQ,qBAAqB,CAAC;IAC3E6I,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAACoU,eAAe,EAAEvN,KAAK,CAACS,cAAc,CAAC;IAC3D4I,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAAC6P,YAAY,EAAEhJ,KAAK,CAACU,WAAW,CAAC;IACrD2I,aAAa,CAAClQ,EAAE,EAAEA,EAAE,CAACqU,YAAY,EAAExN,KAAK,CAACW,WAAW,CAAC;IAErDxH,EAAE,CAACwX,WAAW,CAACxX,EAAE,CAACsU,cAAc,EAAEzN,KAAK,CAACc,aAAa,CAAC;IACtD3H,EAAE,CAACwX,WAAW,CAACxX,EAAE,CAACuU,gBAAgB,EAAE1N,KAAK,CAACe,eAAe,CAAC;IAC1D5H,EAAE,CAACwX,WAAW,CACZxX,EAAE,CAACwU,kCAAkC,EACrC3N,KAAK,CAACgB,0BACR,CAAC;IACD7H,EAAE,CAACwX,WAAW,CAACxX,EAAE,CAACyU,mBAAmB,EAAE5N,KAAK,CAACkB,WAAW,CAAC;IACzD/H,EAAE,CAACwX,WAAW,CACZxX,EAAE,CAAC0U,8BAA8B,EACjC7N,KAAK,CAACmB,sBACR,CAAC;IAEDhI,EAAE,CAAC0C,UAAU,CAACmE,KAAK,CAACoB,cAAc,CAAC;IAEnCjI,EAAE,CAACyC,QAAQ,CAAC,GAAGoE,KAAK,CAACpE,QAAQ,CAAC;IAC9BzC,EAAE,CAACkI,OAAO,CAAC,GAAGrB,KAAK,CAACqB,OAAO,CAAC;IAC5BlI,EAAE,CAACyX,iBAAiB,CAClB5Q,KAAK,CAACsB,WAAW,EACjBtB,KAAK,CAACwB,WAAW,EACjBxB,KAAK,CAAC0B,aAAa,EACnB1B,KAAK,CAAC2B,aACR,CAAC;IACDxI,EAAE,CAAC0X,qBAAqB,CAAC7Q,KAAK,CAAC4B,gBAAgB,EAAE5B,KAAK,CAAC8B,kBAAkB,CAAC;IAC1E3I,EAAE,CAAC4I,UAAU,CAAC,GAAG/B,KAAK,CAAC+B,UAAU,CAAC;IAClC5I,EAAE,CAAC2X,UAAU,CAAC,GAAG9Q,KAAK,CAACgC,eAAe,CAAC;IACvC7I,EAAE,CAAC8I,SAAS,CAAC,GAAGjC,KAAK,CAACiC,SAAS,CAAC;IAChC9I,EAAE,CAACiH,QAAQ,CAACJ,KAAK,CAACkC,YAAY,CAAC;IAC/B/I,EAAE,CAAC4X,UAAU,CAAC/Q,KAAK,CAACoC,eAAe,CAAC;IACpCjJ,EAAE,CAACkJ,SAAS,CAACrC,KAAK,CAACqC,SAAS,CAAC;IAC7BlJ,EAAE,CAACoJ,UAAU,CAAC,GAAGvC,KAAK,CAACuC,UAAU,CAAC;IAClCpJ,EAAE,CAACqJ,SAAS,CAACxC,KAAK,CAACwC,SAAS,CAAC;IAC7BrJ,EAAE,CAACsJ,SAAS,CAACzC,KAAK,CAACyC,SAAS,CAAC;IAC7BtJ,EAAE,CAAC6X,IAAI,CAAC7X,EAAE,CAAC6V,oBAAoB,EAAEhP,KAAK,CAAC2C,kBAAkB,CAAC;IAC1DxJ,EAAE,CAAC0J,SAAS,CAAC7C,KAAK,CAAC6C,SAAS,CAAC;IAC7B1J,EAAE,CAAC8X,aAAa,CAACjR,KAAK,CAAC8C,mBAAmB,EAAE9C,KAAK,CAAC+C,kBAAkB,CAAC;IACrE5J,EAAE,CAACsH,cAAc,CAACT,KAAK,CAACgD,mBAAmB,EAAEhD,KAAK,CAACiD,mBAAmB,CAAC;IACvE9J,EAAE,CAAC+X,mBAAmB,CACpB/X,EAAE,CAACgJ,IAAI,EACPnC,KAAK,CAACoD,eAAe,EACrBpD,KAAK,CAACwD,cAAc,EACpBxD,KAAK,CAACyD,oBACR,CAAC;IACDtK,EAAE,CAAC+X,mBAAmB,CACpB/X,EAAE,CAACgY,KAAK,EACRnR,KAAK,CAAC6D,WAAW,EACjB7D,KAAK,CAACgE,UAAU,EAChBhE,KAAK,CAACiE,gBACR,CAAC;IACD9K,EAAE,CAACiY,iBAAiB,CAClBjY,EAAE,CAACgJ,IAAI,EACPnC,KAAK,CAACkD,eAAe,EACrBlD,KAAK,CAACsD,wBAAwB,EAC9BtD,KAAK,CAACuD,wBACR,CAAC;IACDpK,EAAE,CAACiY,iBAAiB,CAClBjY,EAAE,CAACgY,KAAK,EACRnR,KAAK,CAAC4D,WAAW,EACjB5D,KAAK,CAAC8D,oBAAoB,EAC1B9D,KAAK,CAAC+D,oBACR,CAAC;IACD5K,EAAE,CAACkY,mBAAmB,CAAClY,EAAE,CAACgJ,IAAI,EAAEnC,KAAK,CAAC0D,oBAAoB,CAAC;IAC3DvK,EAAE,CAACkY,mBAAmB,CAAClY,EAAE,CAACgY,KAAK,EAAEnR,KAAK,CAACkE,gBAAgB,CAAC;IACxD/K,EAAE,CAACmY,YAAY,CAACtR,KAAK,CAAC2D,iBAAiB,CAAC;IAExC,KAAK,IAAM0M,GAAG,IAAI/Y,gCAAgC,EAAE;MAClD+Y,GAAG,CAAC9H,OAAO,CAACvI,KAAK,EAAEyG,IAAI,CAAC;IAC1B;EACF;EAEA,SAAS4C,aAAaA,CAAClQ,EAAE,EAAEoY,OAAO,EAAEC,MAAM,EAAE;IAC1C,IAAIA,MAAM,EAAE;MACVrY,EAAE,CAACqY,MAAM,CAACD,OAAO,CAAC;IACpB,CAAC,MAAM;MACLpY,EAAE,CAAC4P,OAAO,CAACwI,OAAO,CAAC;IACrB;EACF;EAEA,SAAS/H,6BAA6BA,CAAA,EAAG;IACvC,IAAI,CAAC/R,yBAAyB,EAAE;MAC9B;IACF;IACAA,yBAAyB,GAAG,KAAK;;IAEjC;IACA,IAAID,qBAAqB,EAAE;MACzBuC,YAAY,CAACvC,qBAAqB,CAAC2H,MAAM,EAAE3H,qBAAqB,CAAC;MACjEA,qBAAqB,GAAG,IAAI;IAC9B;;IAEA;IACAmS,eAAe,CAACpR,SAAS,CAAC;IAE1B,KAAK,IAAMkO,IAAI,IAAI/P,yBAAyB,CAAC+a,MAAM,CAAC,CAAC,EAAE;MACrD,IAAI,CAAChL,IAAI,CAAC6C,cAAc,EAAE;QACxB;MACF;MAEA7C,IAAI,CAAC6C,cAAc,GAAG,KAAK;MAC3B7C,IAAI,CAACtL,SAAS,CAACzD,kBAAkB,CAAC;IACpC;EACF;EAEAga,MAAM,CAACC,qBAAqB,GAAI,UAAUzX,MAAM,EAAE;IAChD,OAAO,UAAU0X,QAAQ,EAAE;MACzB,OAAO1X,MAAM,CAACI,IAAI,CAACoX,MAAM,EAAEG,IAAI,IAAI;QACjC,IAAMrK,MAAM,GAAGoK,QAAQ,CAACC,IAAI,CAAC;QAC7BrI,6BAA6B,CAAC,CAAC;QAC/B,OAAOhC,MAAM;MACf,CAAC,CAAC;IACJ,CAAC;EACH,CAAC,CAAEkK,MAAM,CAACC,qBAAqB,CAAC;EAEhC,SAASG,KAAKA,CAACC,OAAO,EAAE;IACtBrS,MAAM,CAACsS,MAAM,CAACzb,QAAQ,EAAEwb,OAAO,CAAC;EAClC;EAEAL,MAAM,CAACO,YAAY,GAAG;IACpBH;EACF,CAAC;AACH"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/chart",
|
|
3
|
-
"version": "0.104.1-virtual-webgl.
|
|
3
|
+
"version": "0.104.1-virtual-webgl.11+f78f9a09",
|
|
4
4
|
"description": "Deephaven Chart",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@deephaven/components": "^0.104.1-virtual-webgl.
|
|
31
|
-
"@deephaven/icons": "^0.104.1-virtual-webgl.
|
|
30
|
+
"@deephaven/components": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
31
|
+
"@deephaven/icons": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
32
32
|
"@deephaven/jsapi-types": "^1.0.0-dev0.37.2",
|
|
33
|
-
"@deephaven/jsapi-utils": "^0.104.1-virtual-webgl.
|
|
34
|
-
"@deephaven/log": "^0.104.1-virtual-webgl.
|
|
35
|
-
"@deephaven/react-hooks": "^0.104.1-virtual-webgl.
|
|
36
|
-
"@deephaven/utils": "^0.104.1-virtual-webgl.
|
|
33
|
+
"@deephaven/jsapi-utils": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
34
|
+
"@deephaven/log": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
35
|
+
"@deephaven/react-hooks": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
36
|
+
"@deephaven/utils": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
37
37
|
"buffer": "^6.0.3",
|
|
38
38
|
"fast-deep-equal": "^3.1.3",
|
|
39
39
|
"lodash.debounce": "^4.0.8",
|
|
@@ -42,16 +42,15 @@
|
|
|
42
42
|
"memoizee": "^0.4.15",
|
|
43
43
|
"plotly.js": "^2.29.1",
|
|
44
44
|
"prop-types": "^15.7.2",
|
|
45
|
-
"react-plotly.js": "^2.6.0"
|
|
46
|
-
"virtual-webgl": "^1.0.6"
|
|
45
|
+
"react-plotly.js": "^2.6.0"
|
|
47
46
|
},
|
|
48
47
|
"peerDependencies": {
|
|
49
48
|
"react": ">=16.8.0"
|
|
50
49
|
},
|
|
51
50
|
"devDependencies": {
|
|
52
|
-
"@deephaven/jsapi-shim": "^0.104.1-virtual-webgl.
|
|
53
|
-
"@deephaven/mocks": "^0.104.1-virtual-webgl.
|
|
54
|
-
"@deephaven/test-utils": "^0.104.1-virtual-webgl.
|
|
51
|
+
"@deephaven/jsapi-shim": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
52
|
+
"@deephaven/mocks": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
53
|
+
"@deephaven/test-utils": "^0.104.1-virtual-webgl.11+f78f9a09",
|
|
55
54
|
"@types/plotly.js": "^2.12.11"
|
|
56
55
|
},
|
|
57
56
|
"files": [
|
|
@@ -63,5 +62,5 @@
|
|
|
63
62
|
"publishConfig": {
|
|
64
63
|
"access": "public"
|
|
65
64
|
},
|
|
66
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "f78f9a09606b4d01383dffe9b1a674c3146d7159"
|
|
67
66
|
}
|