@swf2es/render 0.0.0-stage → 0.1.1

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 (143) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +17 -2
  3. package/dist/commands.d.ts +67 -0
  4. package/dist/commands.d.ts.map +1 -0
  5. package/dist/commands.js +93 -0
  6. package/dist/commands.js.map +1 -0
  7. package/dist/filter-plan.d.ts +110 -0
  8. package/dist/filter-plan.d.ts.map +1 -0
  9. package/dist/filter-plan.js +480 -0
  10. package/dist/filter-plan.js.map +1 -0
  11. package/dist/filter-shaders.d.ts +63 -0
  12. package/dist/filter-shaders.d.ts.map +1 -0
  13. package/dist/filter-shaders.js +350 -0
  14. package/dist/filter-shaders.js.map +1 -0
  15. package/dist/filters.d.ts +107 -0
  16. package/dist/filters.d.ts.map +1 -0
  17. package/dist/filters.js +187 -0
  18. package/dist/filters.js.map +1 -0
  19. package/dist/geometry.d.ts +83 -0
  20. package/dist/geometry.d.ts.map +1 -0
  21. package/dist/geometry.js +93 -0
  22. package/dist/geometry.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +13 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/keeps.d.ts +17 -0
  28. package/dist/keeps.d.ts.map +1 -0
  29. package/dist/keeps.js +17 -0
  30. package/dist/keeps.js.map +1 -0
  31. package/dist/kernel-shaders.d.ts +74 -0
  32. package/dist/kernel-shaders.d.ts.map +1 -0
  33. package/dist/kernel-shaders.js +323 -0
  34. package/dist/kernel-shaders.js.map +1 -0
  35. package/dist/measure.d.ts +56 -0
  36. package/dist/measure.d.ts.map +1 -0
  37. package/dist/measure.js +287 -0
  38. package/dist/measure.js.map +1 -0
  39. package/dist/plan.d.ts +14 -0
  40. package/dist/plan.d.ts.map +1 -0
  41. package/dist/plan.js +247 -0
  42. package/dist/plan.js.map +1 -0
  43. package/dist/registry.d.ts +49 -0
  44. package/dist/registry.d.ts.map +1 -0
  45. package/dist/registry.js +87 -0
  46. package/dist/registry.js.map +1 -0
  47. package/dist/rows.d.ts +39 -0
  48. package/dist/rows.d.ts.map +1 -0
  49. package/dist/rows.js +60 -0
  50. package/dist/rows.js.map +1 -0
  51. package/dist/scene.d.ts +179 -0
  52. package/dist/scene.d.ts.map +1 -0
  53. package/dist/scene.js +265 -0
  54. package/dist/scene.js.map +1 -0
  55. package/dist/shelves.d.ts +23 -0
  56. package/dist/shelves.d.ts.map +1 -0
  57. package/dist/shelves.js +63 -0
  58. package/dist/shelves.js.map +1 -0
  59. package/dist/textures.d.ts +72 -0
  60. package/dist/textures.d.ts.map +1 -0
  61. package/dist/textures.js +160 -0
  62. package/dist/textures.js.map +1 -0
  63. package/dist/webgl/atlas.d.ts +63 -0
  64. package/dist/webgl/atlas.d.ts.map +1 -0
  65. package/dist/webgl/atlas.js +328 -0
  66. package/dist/webgl/atlas.js.map +1 -0
  67. package/dist/webgl/backend.d.ts +141 -0
  68. package/dist/webgl/backend.d.ts.map +1 -0
  69. package/dist/webgl/backend.js +659 -0
  70. package/dist/webgl/backend.js.map +1 -0
  71. package/dist/webgl/composite.d.ts +101 -0
  72. package/dist/webgl/composite.d.ts.map +1 -0
  73. package/dist/webgl/composite.js +293 -0
  74. package/dist/webgl/composite.js.map +1 -0
  75. package/dist/webgl/draws.d.ts +213 -0
  76. package/dist/webgl/draws.d.ts.map +1 -0
  77. package/dist/webgl/draws.js +714 -0
  78. package/dist/webgl/draws.js.map +1 -0
  79. package/dist/webgl/filters.d.ts +107 -0
  80. package/dist/webgl/filters.d.ts.map +1 -0
  81. package/dist/webgl/filters.js +351 -0
  82. package/dist/webgl/filters.js.map +1 -0
  83. package/dist/webgl/gpu-textures.d.ts +44 -0
  84. package/dist/webgl/gpu-textures.d.ts.map +1 -0
  85. package/dist/webgl/gpu-textures.js +178 -0
  86. package/dist/webgl/gpu-textures.js.map +1 -0
  87. package/dist/webgl/holds.d.ts +97 -0
  88. package/dist/webgl/holds.d.ts.map +1 -0
  89. package/dist/webgl/holds.js +453 -0
  90. package/dist/webgl/holds.js.map +1 -0
  91. package/dist/webgl/index.d.ts +2 -0
  92. package/dist/webgl/index.d.ts.map +1 -0
  93. package/dist/webgl/index.js +4 -0
  94. package/dist/webgl/index.js.map +1 -0
  95. package/dist/webgl/kernels.d.ts +64 -0
  96. package/dist/webgl/kernels.d.ts.map +1 -0
  97. package/dist/webgl/kernels.js +160 -0
  98. package/dist/webgl/kernels.js.map +1 -0
  99. package/dist/webgl/pool.d.ts +71 -0
  100. package/dist/webgl/pool.d.ts.map +1 -0
  101. package/dist/webgl/pool.js +192 -0
  102. package/dist/webgl/pool.js.map +1 -0
  103. package/dist/webgl/programs.d.ts +130 -0
  104. package/dist/webgl/programs.d.ts.map +1 -0
  105. package/dist/webgl/programs.js +582 -0
  106. package/dist/webgl/programs.js.map +1 -0
  107. package/dist/webgl/stage.d.ts +67 -0
  108. package/dist/webgl/stage.d.ts.map +1 -0
  109. package/dist/webgl/stage.js +173 -0
  110. package/dist/webgl/stage.js.map +1 -0
  111. package/dist/webgl/targets.d.ts +172 -0
  112. package/dist/webgl/targets.d.ts.map +1 -0
  113. package/dist/webgl/targets.js +323 -0
  114. package/dist/webgl/targets.js.map +1 -0
  115. package/package.json +35 -3
  116. package/src/commands.ts +98 -0
  117. package/src/filter-plan.ts +755 -0
  118. package/src/filter-shaders.ts +360 -0
  119. package/src/filters.ts +220 -0
  120. package/src/geometry.ts +143 -0
  121. package/src/index.ts +87 -0
  122. package/src/keeps.ts +21 -0
  123. package/src/kernel-shaders.ts +375 -0
  124. package/src/measure.ts +400 -0
  125. package/src/plan.ts +331 -0
  126. package/src/registry.ts +105 -0
  127. package/src/rows.ts +93 -0
  128. package/src/scene.ts +297 -0
  129. package/src/shelves.ts +70 -0
  130. package/src/textures.ts +198 -0
  131. package/src/webgl/atlas.ts +370 -0
  132. package/src/webgl/backend.ts +973 -0
  133. package/src/webgl/composite.ts +372 -0
  134. package/src/webgl/draws.ts +902 -0
  135. package/src/webgl/filters.ts +502 -0
  136. package/src/webgl/gpu-textures.ts +253 -0
  137. package/src/webgl/holds.ts +624 -0
  138. package/src/webgl/index.ts +3 -0
  139. package/src/webgl/kernels.ts +205 -0
  140. package/src/webgl/pool.ts +245 -0
  141. package/src/webgl/programs.ts +620 -0
  142. package/src/webgl/stage.ts +214 -0
  143. package/src/webgl/targets.ts +464 -0
@@ -0,0 +1,178 @@
1
+ import { ROW_FLOATS, ROWS_A_LINE } from "../rows.js";
2
+ import { MIRROR, REPEAT, SMOOTH } from "../scene.js";
3
+ import { OUTLINE_ROW, OUTLINE_UNIT, ROW_TEXELS, TEXTURE_UNIT } from "./programs.js";
4
+ /**
5
+ * The textures the programs read: the registry's, uploaded as they are
6
+ * added or change, and the samplers they are read through; the rows, a
7
+ * float texture uploaded once a frame; and advanced text's outlines.
8
+ */
9
+ export class GpuTextures {
10
+ gl;
11
+ state;
12
+ /** The textures uploaded, by the registry's ids, and their sizes; the samplers made, by their bits. */
13
+ textures = [];
14
+ sizes = [];
15
+ samplers = [];
16
+ rowsTexture;
17
+ rowLines = 0;
18
+ /** Advanced text's outlines (uploadOutlines), on OUTLINE_UNIT for the glyph program. */
19
+ outlines = null;
20
+ /** The outlines uploaded: of which epoch, how many segments, and the texture's rows. */
21
+ outlineEpoch = -1;
22
+ outlineCount = 0;
23
+ outlineRows = 0;
24
+ constructor(gl, state) {
25
+ this.gl = gl;
26
+ this.state = state;
27
+ }
28
+ /** The rows' texture made, and none other yet, as the context comes or comes back. */
29
+ setUp() {
30
+ const gl = this.gl;
31
+ this.outlines = null;
32
+ this.outlineEpoch = -1;
33
+ this.outlineCount = 0;
34
+ this.outlineRows = 0;
35
+ this.textures = [];
36
+ this.samplers = [];
37
+ this.rowsTexture = gl.createTexture();
38
+ this.state.bindTexture(0, this.rowsTexture);
39
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
40
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
41
+ this.rowLines = 0;
42
+ }
43
+ /** Whether texture `id` of the frame's is there, for a filter that reads it. */
44
+ hasTexture = (id) => id >= 0 && (this.textures[id] ?? null) !== null;
45
+ /**
46
+ * Advanced text's outlines (GeometryData.glyphs), `count` segments of four floats each
47
+ * in `data`, as the player's store holds them: uploaded whole for another
48
+ * `epoch` or a larger store, else the rows added since.
49
+ */
50
+ uploadOutlines(data, count, epoch) {
51
+ const gl = this.gl;
52
+ if (gl.isContextLost() || count === 0) {
53
+ return;
54
+ }
55
+ const rows = data.length / 4 / OUTLINE_ROW;
56
+ let from = epoch === this.outlineEpoch ? this.outlineCount : 0;
57
+ if (!this.outlines || rows !== this.outlineRows) {
58
+ if (this.outlines) {
59
+ this.state.dropTexture(this.outlines);
60
+ gl.deleteTexture(this.outlines);
61
+ }
62
+ this.outlines = gl.createTexture();
63
+ this.state.bindTexture(OUTLINE_UNIT, this.outlines);
64
+ this.state.activeTexture(OUTLINE_UNIT);
65
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.RGBA32F, OUTLINE_ROW, rows);
66
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
67
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
68
+ this.outlineRows = rows;
69
+ from = 0;
70
+ }
71
+ if (from < count) {
72
+ const first = Math.floor(from / OUTLINE_ROW);
73
+ const height = Math.ceil(count / OUTLINE_ROW) - first;
74
+ this.state.bindTexture(OUTLINE_UNIT, this.outlines);
75
+ this.state.activeTexture(OUTLINE_UNIT);
76
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, first, OUTLINE_ROW, height, gl.RGBA, gl.FLOAT, data, first * OUTLINE_ROW * 4);
77
+ }
78
+ this.outlineEpoch = epoch;
79
+ this.outlineCount = count;
80
+ }
81
+ /** The textures removed since the last frame deleted, and those added or changed uploaded, their pixels let go. */
82
+ uploadTextures(textures) {
83
+ const gl = this.gl;
84
+ for (const id of textures.removed) {
85
+ const texture = this.textures[id];
86
+ if (texture) {
87
+ this.state.dropTexture(texture);
88
+ gl.deleteTexture(texture);
89
+ this.textures[id] = null;
90
+ }
91
+ }
92
+ textures.removed.length = 0;
93
+ for (const id of textures.pending) {
94
+ const data = textures.get(id);
95
+ if (!data?.pixels) {
96
+ continue;
97
+ }
98
+ let texture = this.textures[id];
99
+ if (!texture) {
100
+ texture = gl.createTexture();
101
+ this.textures[id] = texture;
102
+ this.sizes[id * 2] = -1;
103
+ }
104
+ this.state.bindTexture(TEXTURE_UNIT, texture);
105
+ this.state.activeTexture(TEXTURE_UNIT);
106
+ // Floats, a kernel's image, make the texture again each time, as bytes may follow them.
107
+ if (data.pixels instanceof Float32Array) {
108
+ this.sizes[id * 2] = -1;
109
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, data.width, data.height, 0, gl.RGBA, gl.FLOAT, data.pixels);
110
+ data.pixels = null;
111
+ continue;
112
+ }
113
+ // Pixels of the same size go into the texture there is; another size makes it again.
114
+ if (this.sizes[id * 2] === data.width && this.sizes[id * 2 + 1] === data.height) {
115
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, data.width, data.height, gl.RGBA, gl.UNSIGNED_BYTE, data.pixels);
116
+ data.pixels = null;
117
+ continue;
118
+ }
119
+ this.sizes[id * 2] = data.width;
120
+ this.sizes[id * 2 + 1] = data.height;
121
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, data.width, data.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data.pixels);
122
+ data.pixels = null;
123
+ }
124
+ textures.pending.length = 0;
125
+ }
126
+ /** The sampler for `bits` (SMOOTH, and REPEAT or MIRROR), made as first asked for. */
127
+ sampler(bits) {
128
+ const known = this.samplers[bits];
129
+ if (known) {
130
+ return known;
131
+ }
132
+ const gl = this.gl;
133
+ const sampler = gl.createSampler();
134
+ const filter = bits & SMOOTH ? gl.LINEAR : gl.NEAREST;
135
+ const wrap = bits & REPEAT ? gl.REPEAT : bits & MIRROR ? gl.MIRRORED_REPEAT : gl.CLAMP_TO_EDGE;
136
+ gl.samplerParameteri(sampler, gl.TEXTURE_MIN_FILTER, filter);
137
+ gl.samplerParameteri(sampler, gl.TEXTURE_MAG_FILTER, filter);
138
+ gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_S, wrap);
139
+ gl.samplerParameteri(sampler, gl.TEXTURE_WRAP_T, wrap);
140
+ this.samplers[bits] = sampler;
141
+ return sampler;
142
+ }
143
+ /** The rows a frame wrote, uploaded in one call, the texture made taller first if they need it. */
144
+ uploadRows(rows) {
145
+ const gl = this.gl;
146
+ const lines = Math.max(1, Math.ceil(rows.count / ROWS_A_LINE));
147
+ const width = ROWS_A_LINE * ROW_TEXELS;
148
+ this.state.bindTexture(0, this.rowsTexture);
149
+ this.state.activeTexture(0);
150
+ if (lines > this.rowLines) {
151
+ this.rowLines = Math.max(lines, this.rowLines * 2);
152
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA32F, width, this.rowLines, 0, gl.RGBA, gl.FLOAT, null);
153
+ }
154
+ if (rows.count > 0) {
155
+ // Whole lines: the data holds ROW_FLOATS a row for as many rows as its lines hold.
156
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, lines, gl.RGBA, gl.FLOAT, rows.data.subarray(0, lines * ROWS_A_LINE * ROW_FLOATS));
157
+ }
158
+ }
159
+ /** The textures made on the context, deleted. */
160
+ destroy() {
161
+ const gl = this.gl;
162
+ gl.deleteTexture(this.rowsTexture);
163
+ if (this.outlines) {
164
+ gl.deleteTexture(this.outlines);
165
+ }
166
+ for (const texture of this.textures) {
167
+ if (texture) {
168
+ gl.deleteTexture(texture);
169
+ }
170
+ }
171
+ for (const sampler of this.samplers) {
172
+ if (sampler) {
173
+ gl.deleteSampler(sampler);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ //# sourceMappingURL=gpu-textures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gpu-textures.js","sourceRoot":"","sources":["../../src/webgl/gpu-textures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { GlState } from "@swf2es/context3d/device";
2
+ import { type Commands } from "../commands.js";
3
+ import type { Filters } from "../filters.js";
4
+ import type { SceneList } from "../scene.js";
5
+ import type { Compositor } from "./composite.js";
6
+ import type { Draws } from "./draws.js";
7
+ import type { FilterRunner } from "./filters.js";
8
+ import type { GpuTextures } from "./gpu-textures.js";
9
+ import { type Layer, type Open, type Target, type TargetPool } from "./targets.js";
10
+ /**
11
+ * The frame's held layers (HOLD_PUSH), drawn ahead of the stage a level at
12
+ * a time: their content side by side on pages, then their filters' passes
13
+ * in waves, each wave's targets on pages of their own; their outputs left
14
+ * on the pages for the frame's HELD composites.
15
+ */
16
+ export declare class HeldLayers {
17
+ private readonly gl;
18
+ private readonly state;
19
+ private readonly pool;
20
+ private readonly draws;
21
+ private readonly compositor;
22
+ private readonly gpu;
23
+ /** The filters' passes, the backend's. */
24
+ private filters;
25
+ /**
26
+ * The frame's held layers (HOLD_PUSH); the pages they took, null once
27
+ * given back; the last wave each is read in, and whether an output is on
28
+ * it, which keeps it for the frame.
29
+ */
30
+ private readonly holds;
31
+ private readonly pages;
32
+ private readonly pageUntil;
33
+ private readonly pageKept;
34
+ /** A page drawn into whole, a held layer's rectangle of one, and a held output composited. */
35
+ private readonly pageOpen;
36
+ private readonly holdOpen;
37
+ private readonly heldOpen;
38
+ private readonly shelves;
39
+ /** The masks pushed on the held layer whose content is drawn (drawHoldContent). */
40
+ private readonly masks;
41
+ /** The largest side a texture may have. */
42
+ private textureMost;
43
+ constructor(gl: WebGL2RenderingContext, state: GlState, pool: TargetPool, draws: Draws, compositor: Compositor, gpu: GpuTextures);
44
+ /**
45
+ * The filters' passes and the largest side a texture may have, as the
46
+ * context comes or comes back.
47
+ */
48
+ setUp(filters: FilterRunner<Layer>, textureMost: number): void;
49
+ /**
50
+ * The frame's held layers (HOLD_PUSH), drawn ahead of the stage side by
51
+ * side: their content on pages of their own, one bind, clear and resolve
52
+ * a page; then their filters' passes in waves, the k-th pass of every
53
+ * chain at once, each wave's targets on pages of its own, which no pass
54
+ * of it reads. Each layer's output is left on its page for HELD. A layer
55
+ * larger than a page is drawn alone, as a layer of its own.
56
+ */
57
+ drawHolds(commands: Commands, scene: SceneList, filters: Filters, target: Target): void;
58
+ /** Held layers `from` up to `to`, of one level, drawn side by side (drawHolds). */
59
+ private drawHoldLevel;
60
+ /**
61
+ * The width of a page for rectangles of `area` in all, the widest `widest`:
62
+ * about square, in LAYER_STEP's steps, at most PAGE_WIDTH.
63
+ */
64
+ private pageWidth;
65
+ /** A page of at least `width` by `height` taken for the frame: its index in `pages`. */
66
+ private takePage;
67
+ /**
68
+ * `layer` added to the frame's pages, read by no pass yet, kept for the
69
+ * frame where `kept`: its index in `pages`.
70
+ */
71
+ private addPage;
72
+ /** Slot `slot` of `hold` noted on its page: read until its last pass, or kept as its output. */
73
+ private notePage;
74
+ /** The held layers' rectangles and operations (HOLD_PUSH), which the commands begin with: how many. */
75
+ private gatherHolds;
76
+ /**
77
+ * Slot `slot` of `hold`'s targets: the rectangle of page `index` from (x,
78
+ * y) a target of `width` by `height` takes, as its own layer would; its
79
+ * record kept from frame to frame.
80
+ */
81
+ private slotOf;
82
+ /**
83
+ * Held layer `hold`'s draws, masks and held layers' composites into
84
+ * `open`, bound, its stencil starting clear.
85
+ */
86
+ private drawHoldContent;
87
+ /** Held output `held` composited onto `under`, bound, in blend mode `mode`, coloured by `row`. */
88
+ compositeHeld(held: number, under: Open, mode: number, row: number): void;
89
+ /**
90
+ * Held layer `hold`, too large for a page, drawn as a layer of its own and
91
+ * filtered there, its output left in a page of its own.
92
+ */
93
+ private drawHoldAlone;
94
+ /** The pages the frame took given back, as it ends. */
95
+ givePages(): void;
96
+ }
97
+ //# sourceMappingURL=holds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holds.d.ts","sourceRoot":"","sources":["../../src/webgl/holds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EACL,KAAK,QAAQ,EAOd,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAGL,KAAK,KAAK,EAEV,KAAK,IAAI,EAET,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AA8CtB;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,0CAA0C;IAC1C,OAAO,CAAC,OAAO,CAAuB;IACtC;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsE;IAC/F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsE;IAC/F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsE;IAC/F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAAQ;IAE3B,YACE,EAAE,EAAE,sBAAsB,EAC1B,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,WAAW,EAQjB;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAG7D;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAatF;IAED,mFAAmF;IACnF,OAAO,CAAC,aAAa;IA6NrB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAKjB,wFAAwF;IACxF,OAAO,CAAC,QAAQ;IAIhB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAQf,gGAAgG;IAChG,OAAO,CAAC,QAAQ;IAQhB,uGAAuG;IACvG,OAAO,CAAC,WAAW;IAqDnB;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAqCd;;;OAGG;IACH,OAAO,CAAC,eAAe;IAmCvB,kGAAkG;IAClG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAgBxE;IAED;;;OAGG;IACH,OAAO,CAAC,aAAa;IAyCrB,uDAAuD;IACvD,SAAS,IAAI,IAAI,CAUhB;CACF"}