@debuffjp/core 0.7.1 → 0.9.0

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.
Files changed (47) hide show
  1. package/README.md +1 -1
  2. package/dist/game.d.ts +1 -1
  3. package/dist/game.d.ts.map +1 -1
  4. package/dist/game.js +4 -42
  5. package/dist/game.js.map +1 -1
  6. package/dist/hooks.d.ts +1 -1
  7. package/dist/hooks.d.ts.map +1 -1
  8. package/dist/index.d.ts +1 -4
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -3
  11. package/dist/index.js.map +1 -1
  12. package/dist/render/debuff-sans.d.ts +1 -1
  13. package/dist/render/debuff-sans.d.ts.map +1 -1
  14. package/dist/render/debuff-sans.js +1 -1
  15. package/dist/render/debuff-sans.js.map +1 -1
  16. package/dist/scene.d.ts +1 -1
  17. package/dist/scene.d.ts.map +1 -1
  18. package/dist/splash.d.ts +1 -1
  19. package/dist/splash.d.ts.map +1 -1
  20. package/dist/sprite.d.ts +1 -3
  21. package/dist/sprite.d.ts.map +1 -1
  22. package/dist/sprite.js.map +1 -1
  23. package/package.json +4 -1
  24. package/dist/render/backend.d.ts +0 -48
  25. package/dist/render/backend.d.ts.map +0 -1
  26. package/dist/render/backend.js +0 -2
  27. package/dist/render/backend.js.map +0 -1
  28. package/dist/render/bitmap-font.d.ts +0 -55
  29. package/dist/render/bitmap-font.d.ts.map +0 -1
  30. package/dist/render/bitmap-font.js +0 -103
  31. package/dist/render/bitmap-font.js.map +0 -1
  32. package/dist/render/canvas2d.d.ts +0 -30
  33. package/dist/render/canvas2d.d.ts.map +0 -1
  34. package/dist/render/canvas2d.js +0 -128
  35. package/dist/render/canvas2d.js.map +0 -1
  36. package/dist/render/color.d.ts +0 -7
  37. package/dist/render/color.d.ts.map +0 -1
  38. package/dist/render/color.js +0 -49
  39. package/dist/render/color.js.map +0 -1
  40. package/dist/render/draw.d.ts +0 -125
  41. package/dist/render/draw.d.ts.map +0 -1
  42. package/dist/render/draw.js +0 -426
  43. package/dist/render/draw.js.map +0 -1
  44. package/dist/render/webgl2.d.ts +0 -46
  45. package/dist/render/webgl2.d.ts.map +0 -1
  46. package/dist/render/webgl2.js +0 -312
  47. package/dist/render/webgl2.js.map +0 -1
@@ -1,426 +0,0 @@
1
- import { toRGBA } from "./color.js";
2
- import { debuffSans } from "./debuff-sans.js";
3
- const NO_OPTIONS = Object.freeze({});
4
- const WHITE = 0xffffffff;
5
- /**
6
- * Immediate-mode drawing in logical units, the same API on WebGL2 and Canvas 2D (ADR 0007).
7
- * Everything batches automatically; call order is draw order.
8
- */
9
- export class Draw {
10
- backend;
11
- smooth;
12
- /** Global alpha multiplier for subsequent draws. */
13
- alpha = 1;
14
- /** Quads (sprites, rects, glyph runs…) submitted this frame. Reset each frame; for diagnostics. */
15
- quads = 0;
16
- /** Preallocated transform stack: push/pop copy six numbers and never allocate. */
17
- stack = [];
18
- depth = 0;
19
- m = [1, 0, 0, 1, 0, 0];
20
- frames = new WeakMap();
21
- clips = [];
22
- tmp = [1, 0, 0, 1, 0, 0];
23
- textCache = new TextCache();
24
- circleTexture;
25
- backingW = 0;
26
- backingH = 0;
27
- /** @internal */
28
- constructor(backend,
29
- /** Default filtering for images (false for pixel art). */
30
- smooth) {
31
- this.backend = backend;
32
- this.smooth = smooth;
33
- }
34
- /** Which backend is active. */
35
- get kind() {
36
- return this.backend.kind;
37
- }
38
- /** Draw calls this frame: batched GPU calls on WebGL2, one per quad on Canvas 2D. */
39
- get drawCalls() {
40
- return this.backend.drawCalls ?? this.quads;
41
- }
42
- /** Raw `WebGL2RenderingContext` or `CanvasRenderingContext2D`. Mixing raw calls with `draw` calls requires care. */
43
- get raw() {
44
- return this.backend.raw;
45
- }
46
- // ---- transform stack -------------------------------------------------------------------
47
- push() {
48
- let slot = this.stack[this.depth];
49
- if (!slot) {
50
- slot = [1, 0, 0, 1, 0, 0];
51
- this.stack[this.depth] = slot;
52
- }
53
- copy(this.m, slot);
54
- this.depth++;
55
- }
56
- pop() {
57
- if (this.depth === 0)
58
- throw new Error("draw.pop() without a matching push()");
59
- this.depth--;
60
- copy(this.stack[this.depth], this.m);
61
- }
62
- translate(x, y) {
63
- const m = this.m;
64
- m[4] += m[0] * x + m[2] * y;
65
- m[5] += m[1] * x + m[3] * y;
66
- }
67
- scale(x, y = x) {
68
- const m = this.m;
69
- m[0] *= x;
70
- m[1] *= x;
71
- m[2] *= y;
72
- m[3] *= y;
73
- }
74
- rotate(radians) {
75
- const c = Math.cos(radians);
76
- const s = Math.sin(radians);
77
- const [a, b, cc, d] = this.m;
78
- this.m[0] = a * c + cc * s;
79
- this.m[1] = b * c + d * s;
80
- this.m[2] = cc * c - a * s;
81
- this.m[3] = d * c - b * s;
82
- }
83
- /**
84
- * Run `fn` with drawing restricted to a rectangle (in current units), then restore. Nested clips
85
- * intersect. Clips are axis-aligned on screen: under rotation the rectangle's screen bounds are used.
86
- */
87
- clip(x, y, w, h, fn) {
88
- const m = this.m;
89
- const s = this.renderScale;
90
- let x0 = Number.POSITIVE_INFINITY;
91
- let y0 = Number.POSITIVE_INFINITY;
92
- let x1 = Number.NEGATIVE_INFINITY;
93
- let y1 = Number.NEGATIVE_INFINITY;
94
- for (const [px, py] of [
95
- [x, y],
96
- [x + w, y],
97
- [x, y + h],
98
- [x + w, y + h],
99
- ]) {
100
- const sx = (m[0] * px + m[2] * py + m[4]) * s;
101
- const sy = (m[1] * px + m[3] * py + m[5]) * s;
102
- x0 = Math.min(x0, sx);
103
- y0 = Math.min(y0, sy);
104
- x1 = Math.max(x1, sx);
105
- y1 = Math.max(y1, sy);
106
- }
107
- let rect = {
108
- x: Math.round(x0),
109
- y: Math.round(y0),
110
- w: Math.max(0, Math.round(x1) - Math.round(x0)),
111
- h: Math.max(0, Math.round(y1) - Math.round(y0)),
112
- };
113
- const outer = this.clips.at(-1);
114
- if (outer)
115
- rect = intersect(rect, outer);
116
- this.clips.push(rect);
117
- this.backend.setClip(rect);
118
- try {
119
- fn();
120
- }
121
- finally {
122
- this.clips.pop();
123
- this.backend.setClip(this.clips.at(-1) ?? null);
124
- }
125
- }
126
- /** Run `fn` with the camera's view applied, then restore. */
127
- withCamera(camera, fn) {
128
- this.push();
129
- const [a, b, c, d, e, f] = camera.view();
130
- const m = this.m;
131
- const [ma, mb, mc, md, me, mf] = m;
132
- m[0] = ma * a + mc * b;
133
- m[1] = mb * a + md * b;
134
- m[2] = ma * c + mc * d;
135
- m[3] = mb * c + md * d;
136
- m[4] = ma * e + mc * f + me;
137
- m[5] = mb * e + md * f + mf;
138
- try {
139
- fn();
140
- }
141
- finally {
142
- this.pop();
143
- }
144
- }
145
- // ---- drawing ---------------------------------------------------------------------------
146
- blend(mode) {
147
- this.backend.setBlend(mode);
148
- }
149
- rect(x, y, w, h, color) {
150
- this.local(x, y, w, h);
151
- this.quads++;
152
- this.backend.quad(this.tmp, null, 0, 0, 1, 1, this.withAlpha(toRGBA(color), 1), 0, false);
153
- }
154
- /** Filled circle (antialiased). */
155
- circle(x, y, radius, color) {
156
- this.local(x - radius, y - radius, radius * 2, radius * 2);
157
- const tex = this.circle64();
158
- this.quads++;
159
- this.backend.quad(this.tmp, tex, 0, 0, 64, 64, this.withAlpha(toRGBA(color), 1), 0, true);
160
- }
161
- line(x1, y1, x2, y2, width, color) {
162
- const dx = x2 - x1;
163
- const dy = y2 - y1;
164
- const len = Math.hypot(dx, dy);
165
- if (len === 0)
166
- return;
167
- this.push();
168
- this.translate(x1, y1);
169
- this.rotate(Math.atan2(dy, dx));
170
- this.rect(0, -width / 2, len, width, color);
171
- this.pop();
172
- }
173
- /** Draw an image frame (or a whole image) at `x, y`, anchored by `origin`. Allocation-free hot path. */
174
- sprite(frame, x, y, o = NO_OPTIONS) {
175
- const f = "image" in frame ? frame : this.wholeImage(frame);
176
- const origin = o.origin;
177
- const ox = -(origin ? origin[0] : 0.5) * f.w;
178
- const oy = -(origin ? origin[1] : 0.5) * f.h;
179
- const sx = (o.scaleX ?? 1) * (o.flipX ? -1 : 1);
180
- const sy = (o.scaleY ?? 1) * (o.flipY ? -1 : 1);
181
- // tmp = M · T(x, y) · R(rotation) · S(sx, sy) · T(ox, oy) · S(w, h), expanded by hand.
182
- const m = this.m;
183
- let a = sx;
184
- let b = 0;
185
- let c = 0;
186
- let d = sy;
187
- const r = o.rotation;
188
- if (r) {
189
- const cos = Math.cos(r);
190
- const sin = Math.sin(r);
191
- a = cos * sx;
192
- b = sin * sx;
193
- c = -sin * sy;
194
- d = cos * sy;
195
- }
196
- const lx = a * ox + c * oy + x;
197
- const ly = b * ox + d * oy + y;
198
- const t = this.tmp;
199
- t[0] = (m[0] * a + m[2] * b) * f.w;
200
- t[1] = (m[1] * a + m[3] * b) * f.w;
201
- t[2] = (m[0] * c + m[2] * d) * f.h;
202
- t[3] = (m[1] * c + m[3] * d) * f.h;
203
- t[4] = m[0] * lx + m[2] * ly + m[4];
204
- t[5] = m[1] * lx + m[3] * ly + m[5];
205
- const smooth = o.smooth ?? this.smooth;
206
- if (!smooth && t[1] === 0 && t[2] === 0) {
207
- // Pixel art: put unrotated sprites on whole pixels. Nearest sampling at fractional positions
208
- // makes edges gain and lose a pixel from frame to frame, which reads as flicker.
209
- t[4] = Math.round(t[4]);
210
- t[5] = Math.round(t[5]);
211
- }
212
- const tint = o.tint === undefined ? WHITE : toRGBA(o.tint);
213
- const alpha = o.alpha ?? 1;
214
- const color = alpha === 1 && this.alpha === 1 ? tint : this.withAlpha(tint, alpha);
215
- this.quads++;
216
- this.backend.quad(t, f.image, f.x, f.y, f.w, f.h, color, o.flash ?? 0, smooth);
217
- }
218
- /** Text, rasterised once and cached as a texture (crisp at the current render scale). */
219
- text(text, x, y, o = {}) {
220
- if (!text)
221
- return;
222
- if (typeof o.font !== "string") {
223
- this.bitmapText(text, x, y, o.font ?? debuffSans(), o);
224
- return;
225
- }
226
- const entry = this.textCache.get(text, o.font, this.renderScale, (src) => this.backend.invalidate(src));
227
- const ax = o.align === "center" ? 0.5 : o.align === "right" ? 1 : 0;
228
- const ay = o.baseline === "middle" ? 0.5 : o.baseline === "bottom" ? 1 : 0;
229
- this.local(x - ax * entry.w, y - ay * entry.h, entry.w, entry.h);
230
- const color = this.withAlpha(toRGBA(o.color ?? "#ffffff"), o.alpha ?? 1);
231
- this.quads++;
232
- this.backend.quad(this.tmp, entry.canvas, 0, 0, entry.canvas.width, entry.canvas.height, color, 0, true);
233
- }
234
- /**
235
- * The logical box `text()` fills for this string and font, so layouts can align and centre without
236
- * guessing. Same cache as `text()`, so measuring then drawing rasterises once.
237
- */
238
- measure(text, font = debuffSans()) {
239
- if (!text)
240
- return { w: 0, h: 0 };
241
- if (typeof font !== "string")
242
- return font.measure(text);
243
- const entry = this.textCache.get(text, font, this.renderScale, (src) => this.backend.invalidate(src));
244
- return { w: entry.w, h: entry.h };
245
- }
246
- bitmapText(text, x, y, font, o) {
247
- const size = font.measure(text);
248
- const ay = o.baseline === "middle" ? 0.5 : o.baseline === "bottom" ? 1 : 0;
249
- const color = this.withAlpha(toRGBA(o.color ?? "#ffffff"), o.alpha ?? 1);
250
- // Whole-pixel origin: a glyph straddling a pixel boundary would blur or drop a column.
251
- let ly = Math.round(y - ay * size.h);
252
- for (const line of text.split("\n")) {
253
- const w = font.lineWidth(line);
254
- let lx = Math.round(x - (o.align === "center" ? Math.floor(w / 2) : o.align === "right" ? w : 0));
255
- for (const ch of line) {
256
- const g = font.glyph(ch);
257
- if (!g)
258
- continue;
259
- const f = g.frame;
260
- this.local(lx, ly, f.w, f.h);
261
- this.quads++;
262
- this.backend.quad(this.tmp, f.image, f.x, f.y, f.w, f.h, color, 0, false);
263
- lx += g.advance + font.spacing;
264
- }
265
- ly += font.lineHeight;
266
- }
267
- }
268
- /** Re-upload a source whose pixels changed (e.g. a canvas you draw into). */
269
- invalidate(src) {
270
- this.backend.invalidate(src);
271
- }
272
- // ---- frame lifecycle (called by Game) ----------------------------------------------------
273
- /** @internal */
274
- renderScale = 1;
275
- /** @internal */
276
- begin(clear, width, height, scale) {
277
- this.renderScale = scale;
278
- this.quads = 0;
279
- this.depth = 0;
280
- this.clips.length = 0;
281
- copy(IDENTITY, this.m);
282
- this.alpha = 1;
283
- this.backend.setBlend("normal");
284
- this.backend.begin(toRGBA(clear), width, height, scale);
285
- }
286
- /** @internal Reset transform and blend between scene and afterRender hooks. */
287
- reset() {
288
- this.depth = 0;
289
- if (this.clips.length) {
290
- this.clips.length = 0;
291
- this.backend.setClip(null);
292
- }
293
- copy(IDENTITY, this.m);
294
- this.alpha = 1;
295
- this.backend.setBlend("normal");
296
- }
297
- /** @internal */
298
- end() {
299
- this.backend.end();
300
- }
301
- /** @internal Release GPU resources and listeners. */
302
- dispose() {
303
- this.backend.dispose();
304
- }
305
- /** @internal */
306
- resize(w, h) {
307
- this.backingW = w;
308
- this.backingH = h;
309
- this.backend.resize(w, h);
310
- }
311
- /** @internal Switch to a backend that finished loading (the Canvas 2D fallback), at the current size. */
312
- setBackend(backend) {
313
- this.backend.dispose();
314
- this.backend = backend;
315
- if (this.backingW)
316
- backend.resize(this.backingW, this.backingH);
317
- }
318
- // ---- internals ---------------------------------------------------------------------------
319
- /** tmp = current matrix × (translate(x, y) · scale(w, h)): maps the unit square to the rect. */
320
- local(x, y, w, h) {
321
- const m = this.m;
322
- const t = this.tmp;
323
- t[0] = m[0] * w;
324
- t[1] = m[1] * w;
325
- t[2] = m[2] * h;
326
- t[3] = m[3] * h;
327
- t[4] = m[0] * x + m[2] * y + m[4];
328
- t[5] = m[1] * x + m[3] * y + m[5];
329
- }
330
- wholeImage(image) {
331
- let f = this.frames.get(image);
332
- if (!f) {
333
- f = wholeImage(image);
334
- this.frames.set(image, f);
335
- }
336
- return f;
337
- }
338
- withAlpha(rgba, alpha) {
339
- const a = Math.round((rgba & 0xff) * alpha * this.alpha);
340
- return ((rgba & 0xffffff00) | Math.max(0, Math.min(255, a))) >>> 0;
341
- }
342
- circle64() {
343
- if (!this.circleTexture) {
344
- const c = makeCanvas(64, 64);
345
- const ctx = c.getContext("2d");
346
- if (ctx) {
347
- ctx.fillStyle = "#fff";
348
- ctx.beginPath();
349
- ctx.arc(32, 32, 31.5, 0, Math.PI * 2);
350
- ctx.fill();
351
- }
352
- this.circleTexture = c;
353
- }
354
- return this.circleTexture;
355
- }
356
- }
357
- const IDENTITY = [1, 0, 0, 1, 0, 0];
358
- function intersect(a, b) {
359
- const x = Math.max(a.x, b.x);
360
- const y = Math.max(a.y, b.y);
361
- return { x, y, w: Math.max(0, Math.min(a.x + a.w, b.x + b.w) - x), h: Math.max(0, Math.min(a.y + a.h, b.y + b.h) - y) };
362
- }
363
- function copy(from, to) {
364
- to[0] = from[0];
365
- to[1] = from[1];
366
- to[2] = from[2];
367
- to[3] = from[3];
368
- to[4] = from[4];
369
- to[5] = from[5];
370
- }
371
- function wholeImage(image) {
372
- const w = "naturalWidth" in image ? image.naturalWidth : image.width;
373
- const h = "naturalHeight" in image ? image.naturalHeight : image.height;
374
- return { image, x: 0, y: 0, w, h };
375
- }
376
- function makeCanvas(w, h) {
377
- if (typeof OffscreenCanvas !== "undefined")
378
- return new OffscreenCanvas(w, h);
379
- const c = document.createElement("canvas");
380
- c.width = w;
381
- c.height = h;
382
- return c;
383
- }
384
- /** LRU cache of rasterised text (white; tinted at draw time). */
385
- class TextCache {
386
- entries = new Map();
387
- clock = 0;
388
- get(text, font, scale, evict) {
389
- const key = `${scale}|${font}|${text}`;
390
- const hit = this.entries.get(key);
391
- if (hit) {
392
- hit.used = ++this.clock;
393
- return hit;
394
- }
395
- const measureCtx = makeCanvas(1, 1).getContext("2d");
396
- if (!measureCtx)
397
- throw new Error("draw.text needs a 2D canvas for rasterising text");
398
- measureCtx.font = font;
399
- const metrics = measureCtx.measureText(text);
400
- const ascent = metrics.fontBoundingBoxAscent ?? metrics.actualBoundingBoxAscent;
401
- const descent = metrics.fontBoundingBoxDescent ?? metrics.actualBoundingBoxDescent;
402
- const w = Math.ceil(metrics.width) + 2;
403
- const h = Math.ceil(ascent + descent) + 2;
404
- const canvas = makeCanvas(Math.ceil(w * scale), Math.ceil(h * scale));
405
- const ctx = canvas.getContext("2d");
406
- if (ctx) {
407
- ctx.scale(scale, scale);
408
- ctx.font = font;
409
- ctx.fillStyle = "#fff";
410
- ctx.textBaseline = "alphabetic";
411
- ctx.fillText(text, 1, 1 + ascent);
412
- }
413
- const entry = { canvas, w, h, used: ++this.clock };
414
- this.entries.set(key, entry);
415
- if (this.entries.size > 256) {
416
- // Evict the least recently used quarter.
417
- const old = [...this.entries].sort((a, b) => a[1].used - b[1].used).slice(0, 64);
418
- for (const [k, e] of old) {
419
- this.entries.delete(k);
420
- evict(e.canvas);
421
- }
422
- }
423
- return entry;
424
- }
425
- }
426
- //# sourceMappingURL=draw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"draw.js","sourceRoot":"","sources":["../../src/render/draw.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import type { Backend, BlendMode, ClipRect, Matrix, RawContext, TextureSource } from "./backend.js";
2
- /** Instanced, multi-texture WebGL2 sprite batcher behind the `draw` API. */
3
- export declare class WebGL2Backend implements Backend {
4
- readonly kind: "webgl2";
5
- readonly raw: RawContext;
6
- private readonly gl;
7
- private readonly capacity;
8
- private readonly data;
9
- private readonly f32;
10
- private readonly u32;
11
- private instanceBuffer;
12
- private viewLoc;
13
- private readonly textures;
14
- private white;
15
- /** True between webglcontextlost and webglcontextrestored: drawing is skipped. */
16
- private lost;
17
- private readonly onLost;
18
- private readonly onRestored;
19
- private readonly units;
20
- private unitCount;
21
- private lastSrc;
22
- private last;
23
- private count;
24
- private blend;
25
- private submitted;
26
- /** Draw calls this frame, counting the batch still pending (read before `end()` flushes it). */
27
- get drawCalls(): number;
28
- constructor(gl: WebGL2RenderingContext);
29
- /** True while the GPU context is lost (e.g. a mobile tab was backgrounded or the driver reset). */
30
- get contextLost(): boolean;
31
- /** Create program, buffers and the white texture. Runs at start and after a context restore. */
32
- private setup;
33
- begin(clear: number, width: number, height: number): void;
34
- quad(m: Matrix, src: TextureSource | null, sx: number, sy: number, sw: number, sh: number, color: number, flash: number, smooth: boolean): void;
35
- setBlend(mode: BlendMode): void;
36
- setClip(rect: ClipRect | null): void;
37
- end(): void;
38
- resize(): void;
39
- invalidate(src: TextureSource): void;
40
- dispose(): void;
41
- private flush;
42
- private texture;
43
- private filter;
44
- private applyBlend;
45
- }
46
- //# sourceMappingURL=webgl2.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webgl2.d.ts","sourceRoot":"","sources":["../../src/render/webgl2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAyDpG,4EAA4E;AAC5E,qBAAa,aAAc,YAAW,OAAO;IAC3C,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2C;IAChE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA8B;IAElD,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,KAAK,CAAiB;IAC9B,kFAAkF;IAClF,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAIrB;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU,CASzB;IACF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,SAAS,CAAK;IAEtB,gGAAgG;IAChG,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,YAAY,EAAE,EAAE,sBAAsB,EAMrC;IAED,mGAAmG;IACnG,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,gGAAgG;IAChG,OAAO,CAAC,KAAK;IA4Cb,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQxD;IAED,IAAI,CACF,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,aAAa,GAAG,IAAI,EACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,GACd,IAAI,CAsCN;IAED,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAK9B;IAED,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAWnC;IAED,GAAG,IAAI,IAAI,CAGV;IAED,MAAM,IAAI,IAAI,CAEb;IAED,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAOnC;IAED,OAAO,IAAI,IAAI,CAKd;IAED,OAAO,CAAC,KAAK;IAuBb,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,UAAU;CAKnB"}