textmode.js 0.2.0-beta.1 → 0.2.0-beta.3

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.
@@ -1,9 +1,9 @@
1
- var X = Object.defineProperty;
2
- var j = (E, A, t) => A in E ? X(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
3
- var n = (E, A, t) => j(E, typeof A != "symbol" ? A + "" : A, t);
4
- class f extends Error {
1
+ var Z = Object.defineProperty;
2
+ var K = (E, A, t) => A in E ? Z(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
3
+ var o = (E, A, t) => K(E, typeof A != "symbol" ? A + "" : A, t);
4
+ class m extends Error {
5
5
  constructor(A, t = {}) {
6
- super(f.A(A, t)), this.name = "TextmodeError";
6
+ super(m.A(A, t)), this.name = "TextmodeError";
7
7
  }
8
8
  static A(A, t) {
9
9
  let e = A;
@@ -11,9 +11,9 @@ class f extends Error {
11
11
  e += `
12
12
 
13
13
  📋 Context:`;
14
- for (const [B, r] of Object.entries(t))
14
+ for (const [s, r] of Object.entries(t))
15
15
  e += `
16
- - ${B}: ${f.i(r)}`;
16
+ - ${s}: ${m.i(r)}`;
17
17
  }
18
18
  return e += `
19
19
 
@@ -25,208 +25,212 @@ class f extends Error {
25
25
  if (A === void 0) return "undefined";
26
26
  if (typeof A == "string") return `"${A}"`;
27
27
  if (typeof A == "number" || typeof A == "boolean") return A + "";
28
- if (Array.isArray(A)) return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) => f.i(t)).join(", ")}]` : `[${A.slice(0, 3).map((t) => f.i(t)).join(", ")}, ... +${A.length - 3} more]`;
28
+ if (Array.isArray(A)) return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) => m.i(t)).join(", ")}]` : `[${A.slice(0, 3).map((t) => m.i(t)).join(", ")}, ... +${A.length - 3} more]`;
29
29
  if (typeof A == "object") {
30
30
  const t = Object.keys(A);
31
- return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((e) => `${e}: ${f.i(A[e])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((e) => `${e}: ${f.i(A[e])}`).join(", ")}, ... +${t.length - 2} more }`;
31
+ return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((e) => `${e}: ${m.i(A[e])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((e) => `${e}: ${m.i(A[e])}`).join(", ")}, ... +${t.length - 2} more }`;
32
32
  }
33
33
  return A + "";
34
34
  }
35
35
  }
36
- var K = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(K || {});
37
- const y = class y {
36
+ var q = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(q || {});
37
+ const v = class v {
38
38
  constructor() {
39
- n(this, "h", { globalLevel: 3 });
39
+ o(this, "C", { globalLevel: 3 });
40
40
  }
41
- static C() {
42
- return y.o || (y.o = new y()), y.o;
41
+ static D() {
42
+ return v.o || (v.o = new v()), v.o;
43
43
  }
44
- D(A, t) {
45
- const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", B = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
46
- switch (this.h.globalLevel) {
44
+ l(A, t) {
45
+ const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", s = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
46
+ switch (this.C.globalLevel) {
47
47
  case 0:
48
48
  return !1;
49
49
  case 1:
50
- return console.group(e, B), console.warn(f.A(A, t)), console.groupEnd(), !1;
50
+ return console.group(e, s), console.warn(m.A(A, t)), console.groupEnd(), !1;
51
51
  case 2:
52
- return console.group(e, B), console.error(f.A(A, t)), console.groupEnd(), !1;
52
+ return console.group(e, s), console.error(m.A(A, t)), console.groupEnd(), !1;
53
53
  default:
54
- throw new f(A, t);
54
+ throw new m(A, t);
55
55
  }
56
56
  }
57
- l(A, t, e) {
58
- return !!A || (this.D(t, e), !1);
57
+ P(A, t, e) {
58
+ return !!A || (this.l(t, e), !1);
59
59
  }
60
- P(A) {
61
- this.h.globalLevel = A;
60
+ u(A) {
61
+ this.C.globalLevel = A;
62
62
  }
63
63
  };
64
- n(y, "o", null);
65
- let S = y;
66
- const T = S.C(), J = /* @__PURE__ */ new WeakMap();
67
- function _(E, A) {
68
- J.set(E, A);
64
+ o(v, "o", null);
65
+ let F = v;
66
+ const _ = F.D(), V = /* @__PURE__ */ new WeakMap();
67
+ function G(E, A) {
68
+ V.set(E, A);
69
69
  }
70
- function G(E) {
71
- return J.get(E);
70
+ function R(E) {
71
+ return V.get(E);
72
72
  }
73
- class H {
74
- constructor(A, t, e = t, B = 1, r = {}) {
75
- n(this, "I");
76
- n(this, "u");
77
- n(this, "h");
78
- n(this, "p", null);
79
- n(this, "m");
80
- n(this, "_");
81
- n(this, "v", []);
82
- n(this, "G");
83
- n(this, "$", null);
84
- n(this, "M", []);
85
- this.I = t, this.u = e, this.h = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...r }, this.m = A, this.G = Math.min(Math.max(1, B), 8);
86
- const i = A.getParameter(A.MAX_DRAW_BUFFERS), s = A.getParameter(A.MAX_COLOR_ATTACHMENTS);
87
- this.G = Math.min(this.G, i, s), this._ = A.createFramebuffer(), this.Y(), this.F(), this.M = Array(this.G).fill(null);
88
- }
89
- Y() {
90
- const A = this.m, t = this.h.filter === "linear" ? A.LINEAR : A.NEAREST, e = this.h.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE, B = this.h.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
91
- for (let r = 0; r < this.G; r++) {
73
+ class U {
74
+ constructor(A, t, e = t, s = 1, r = {}) {
75
+ o(this, "I");
76
+ o(this, "p");
77
+ o(this, "C");
78
+ o(this, "_", null);
79
+ o(this, "m");
80
+ o(this, "v");
81
+ o(this, "G", []);
82
+ o(this, "$");
83
+ o(this, "M", null);
84
+ o(this, "Y", []);
85
+ this.I = t, this.p = e, this.C = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...r }, this.m = A, this.$ = Math.min(Math.max(1, s), 8);
86
+ const i = A.getParameter(A.MAX_DRAW_BUFFERS), B = A.getParameter(A.MAX_COLOR_ATTACHMENTS);
87
+ this.$ = Math.min(this.$, i, B), this.v = A.createFramebuffer(), this.R(), this.S(), this.Y = Array(this.$).fill(null);
88
+ }
89
+ R() {
90
+ const A = this.m, t = this.C.filter === "linear" ? A.LINEAR : A.NEAREST, e = this.C.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE, s = this.C.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
91
+ for (let r = 0; r < this.$; r++) {
92
92
  const i = A.createTexture();
93
- A.bindTexture(A.TEXTURE_2D, i), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, e), A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.I, this.u, 0, A.RGBA, B, null), this.v.push(i);
93
+ A.bindTexture(A.TEXTURE_2D, i), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, e), A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.I, this.p, 0, A.RGBA, s, null), this.G.push(i);
94
94
  }
95
95
  A.bindTexture(A.TEXTURE_2D, null);
96
96
  }
97
- F() {
97
+ S() {
98
98
  const A = this.m;
99
- if (A.bindFramebuffer(A.FRAMEBUFFER, this._), this.G === 1) A.framebufferTexture2D(A.FRAMEBUFFER, A.COLOR_ATTACHMENT0, A.TEXTURE_2D, this.v[0], 0);
99
+ if (A.bindFramebuffer(A.FRAMEBUFFER, this.v), this.$ === 1) A.framebufferTexture2D(A.FRAMEBUFFER, A.COLOR_ATTACHMENT0, A.TEXTURE_2D, this.G[0], 0);
100
100
  else {
101
101
  const e = [];
102
- for (let B = 0; B < this.G; B++) {
103
- const r = A.COLOR_ATTACHMENT0 + B;
104
- A.framebufferTexture2D(A.FRAMEBUFFER, r, A.TEXTURE_2D, this.v[B], 0), e.push(r);
102
+ for (let s = 0; s < this.$; s++) {
103
+ const r = A.COLOR_ATTACHMENT0 + s;
104
+ A.framebufferTexture2D(A.FRAMEBUFFER, r, A.TEXTURE_2D, this.G[s], 0), e.push(r);
105
105
  }
106
106
  A.drawBuffers(e);
107
107
  }
108
108
  const t = A.checkFramebufferStatus(A.FRAMEBUFFER);
109
109
  t !== A.FRAMEBUFFER_COMPLETE && console.error("GLFramebuffer is not complete:", t), A.bindFramebuffer(A.FRAMEBUFFER, null);
110
110
  }
111
- R(A) {
111
+ F(A) {
112
112
  const t = this.m;
113
- t.bindTexture(t.TEXTURE_2D, this.v[0]), t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL, 1), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, A), t.bindTexture(t.TEXTURE_2D, null);
113
+ t.bindTexture(t.TEXTURE_2D, this.G[0]), t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL, 1), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, A), t.bindTexture(t.TEXTURE_2D, null);
114
114
  }
115
- S(A, t) {
116
- this.I = A, this.u = t, this.p = null, this.M = Array(this.G).fill(null);
117
- const e = this.m, B = this.h.type === "float" ? e.FLOAT : e.UNSIGNED_BYTE;
118
- for (const r of this.v) e.bindTexture(e.TEXTURE_2D, r), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, this.I, this.u, 0, e.RGBA, B, null);
115
+ O(A, t) {
116
+ this.I = A, this.p = t, this._ = null, this.Y = Array(this.$).fill(null);
117
+ const e = this.m, s = this.C.type === "float" ? e.FLOAT : e.UNSIGNED_BYTE;
118
+ for (const r of this.G) e.bindTexture(e.TEXTURE_2D, r), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, this.I, this.p, 0, e.RGBA, s, null);
119
119
  e.bindTexture(e.TEXTURE_2D, null);
120
120
  }
121
- O(A) {
121
+ U(A) {
122
122
  const t = this.m;
123
- if (A < 0 || A >= this.G) throw Error(`GLFramebuffer: attachment index ${A} out of range (count=${this.G})`);
124
- const e = this.M[A];
123
+ if (A < 0 || A >= this.$) throw Error(`GLFramebuffer: attachment index ${A} out of range (count=${this.$})`);
124
+ const e = this.Y[A];
125
125
  if (e) return e;
126
- const B = this.I, r = this.u, i = new Uint8Array(B * r * 4), s = t.getParameter(t.READ_FRAMEBUFFER_BINDING);
127
- t.bindFramebuffer(t.READ_FRAMEBUFFER, this._), t.readBuffer(t.COLOR_ATTACHMENT0 + A), t.readPixels(0, 0, B, r, t.RGBA, t.UNSIGNED_BYTE, i), t.bindFramebuffer(t.READ_FRAMEBUFFER, s);
128
- const Q = 4 * B, o = new Uint8Array(i.length);
129
- for (let g = 0; g < r; g++) {
130
- const a = (r - 1 - g) * Q, h = g * Q;
131
- o.set(i.subarray(a, a + Q), h);
126
+ const s = this.I, r = this.p, i = new Uint8Array(s * r * 4), B = t.getParameter(t.READ_FRAMEBUFFER_BINDING);
127
+ t.bindFramebuffer(t.READ_FRAMEBUFFER, this.v), t.readBuffer(t.COLOR_ATTACHMENT0 + A), t.readPixels(0, 0, s, r, t.RGBA, t.UNSIGNED_BYTE, i), t.bindFramebuffer(t.READ_FRAMEBUFFER, B);
128
+ const n = 4 * s, Q = new Uint8Array(i.length);
129
+ for (let h = 0; h < r; h++) {
130
+ const a = (r - 1 - h) * n, g = h * n;
131
+ Q.set(i.subarray(a, a + n), g);
132
132
  }
133
- return this.M[A] = o, o;
133
+ return this.Y[A] = Q, Q;
134
134
  }
135
135
  L() {
136
- for (let A = 0; A < this.G; A++) this.O(A);
136
+ for (let A = 0; A < this.$; A++) this.U(A);
137
137
  }
138
- U() {
138
+ k() {
139
139
  const A = this.m;
140
- this.$ = { framebuffer: A.getParameter(A.FRAMEBUFFER_BINDING), viewport: A.getParameter(A.VIEWPORT) }, A.bindFramebuffer(A.FRAMEBUFFER, this._), this.M = Array(this.G).fill(null);
141
- for (let t = 0; t < this.G; t++) A.clearBufferfv(A.COLOR, t, new Float32Array([0, 0, 0, 0]));
142
- A.viewport(0, 0, this.I, this.u), _(A, [0, 0, this.I, this.u]);
140
+ this.M = { framebuffer: A.getParameter(A.FRAMEBUFFER_BINDING), viewport: A.getParameter(A.VIEWPORT) }, A.bindFramebuffer(A.FRAMEBUFFER, this.v), this.Y = Array(this.$).fill(null);
141
+ for (let t = 0; t < this.$; t++) A.clearBufferfv(A.COLOR, t, new Float32Array([0, 0, 0, 0]));
142
+ A.viewport(0, 0, this.I, this.p), G(A, [0, 0, this.I, this.p]);
143
143
  }
144
- k() {
145
- if (!this.$) return;
144
+ H() {
145
+ if (!this.M) return;
146
146
  const A = this.m;
147
- A.bindFramebuffer(A.FRAMEBUFFER, this.$.framebuffer), A.viewport(...this.$.viewport), _(A, this.$.viewport), this.$ = null;
147
+ A.bindFramebuffer(A.FRAMEBUFFER, this.M.framebuffer), A.viewport(...this.M.viewport), G(A, this.M.viewport), this.M = null;
148
148
  }
149
149
  W() {
150
150
  const A = this.m;
151
- this._ && A.deleteFramebuffer(this._);
152
- for (const t of this.v) A.deleteTexture(t);
153
- this.v = [], this.M = [];
151
+ this.v && A.deleteFramebuffer(this.v);
152
+ for (const t of this.G) A.deleteTexture(t);
153
+ this.G = [], this.Y = [];
154
154
  }
155
155
  get width() {
156
156
  return this.I;
157
157
  }
158
158
  get height() {
159
- return this.u;
159
+ return this.p;
160
160
  }
161
161
  get pixels() {
162
- return this.p;
162
+ return this._;
163
163
  }
164
164
  get options() {
165
- return { ...this.h };
165
+ return { ...this.C };
166
166
  }
167
167
  get framebuffer() {
168
- return this._;
168
+ return this.v;
169
169
  }
170
170
  get texture() {
171
- return this.v[0];
171
+ return this.G[0];
172
172
  }
173
173
  get textures() {
174
- return [...this.v];
174
+ return [...this.G];
175
175
  }
176
176
  get attachmentCount() {
177
- return this.G;
177
+ return this.$;
178
178
  }
179
179
  getAttachmentPixels(A) {
180
- return this.M[A] ?? null;
180
+ return this.Y[A] ?? null;
181
181
  }
182
182
  }
183
- class Z {
183
+ class z {
184
184
  constructor(A, t, e) {
185
- n(this, "m");
186
- n(this, "H");
187
- n(this, "J", /* @__PURE__ */ new Map());
188
- n(this, "V", /* @__PURE__ */ new Map());
189
- n(this, "K", 0);
190
- n(this, "j");
191
- this.m = A, this.H = this.Z(t, e), this.j = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.N();
185
+ o(this, "m");
186
+ o(this, "J");
187
+ o(this, "V", /* @__PURE__ */ new Map());
188
+ o(this, "K", /* @__PURE__ */ new Map());
189
+ o(this, "Z", 0);
190
+ o(this, "j");
191
+ this.m = A, this.J = this.X(t, e), this.j = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.N();
192
192
  }
193
193
  N() {
194
- const A = this.m.getProgramParameter(this.H, this.m.ACTIVE_UNIFORMS);
194
+ const A = this.m.getProgramParameter(this.J, this.m.ACTIVE_UNIFORMS);
195
195
  for (let t = 0; t < A; t++) {
196
- const e = this.m.getActiveUniform(this.H, t);
196
+ const e = this.m.getActiveUniform(this.J, t);
197
197
  if (e) {
198
- const B = this.m.getUniformLocation(this.H, e.name);
199
- B && (this.J.set(e.name, B), this.V.set(e.name, e.type));
198
+ const s = this.m.getUniformLocation(this.J, e.name);
199
+ s && (this.V.set(e.name, s), this.K.set(e.name, e.type));
200
200
  }
201
201
  }
202
202
  }
203
- Z(A, t) {
204
- const e = this.X(this.m.VERTEX_SHADER, A), B = this.X(this.m.FRAGMENT_SHADER, t), r = this.m.createProgram();
205
- if (this.m.attachShader(r, e), this.m.attachShader(r, B), this.m.linkProgram(r), !this.m.getProgramParameter(r, this.m.LINK_STATUS)) {
203
+ X(A, t) {
204
+ const e = this.q(this.m.VERTEX_SHADER, A), s = this.q(this.m.FRAGMENT_SHADER, t), r = this.m.createProgram();
205
+ if (this.m.attachShader(r, e), this.m.attachShader(r, s), this.m.linkProgram(r), !this.m.getProgramParameter(r, this.m.LINK_STATUS)) {
206
206
  const i = this.m.getProgramInfoLog(r);
207
207
  throw Error("Shader program link error: " + i);
208
208
  }
209
- return this.m.deleteShader(e), this.m.deleteShader(B), r;
209
+ return this.m.deleteShader(e), this.m.deleteShader(s), r;
210
210
  }
211
- X(A, t) {
211
+ q(A, t) {
212
212
  const e = this.m.createShader(A);
213
213
  if (this.m.shaderSource(e, t), this.m.compileShader(e), !this.m.getShaderParameter(e, this.m.COMPILE_STATUS)) {
214
- const B = this.m.getShaderInfoLog(e);
215
- throw this.m.deleteShader(e), Error("Shader compilation error: " + B);
214
+ const s = this.m.getShaderInfoLog(e);
215
+ throw this.m.deleteShader(e), Error("Shader compilation error: " + s);
216
216
  }
217
217
  return e;
218
218
  }
219
- q() {
220
- this.m.useProgram(this.H), this.AA();
221
- }
222
219
  AA() {
223
- this.K = 0;
220
+ this.m.useProgram(this.J), this.tA();
221
+ }
222
+ tA() {
223
+ this.Z = 0;
224
224
  }
225
- tA(A) {
226
- for (const [t, e] of Object.entries(A)) this.eA(t, e);
225
+ eA(A) {
226
+ for (const [t, e] of Object.entries(A)) this.BA(t, e);
227
227
  }
228
- eA(A, t) {
229
- const e = this.J.get(A);
228
+ sA(A) {
229
+ return this.V.has(A);
230
+ }
231
+ BA(A, t) {
232
+ if (this.m.getParameter(this.m.CURRENT_PROGRAM) !== this.J) return void console.warn(`Attempting to set uniform '${A}' on shader that is not currently bound`);
233
+ const e = this.V.get(A);
230
234
  if (e) if (typeof t == "number") this.m.uniform1f(e, t);
231
235
  else if (typeof t == "boolean") this.m.uniform1i(e, t ? 1 : 0);
232
236
  else if (Array.isArray(t)) switch (t.length) {
@@ -243,182 +247,227 @@ class Z {
243
247
  console.warn(`Unsupported array length ${t.length} for uniform '${A}'`);
244
248
  }
245
249
  else if (t instanceof WebGLTexture) {
246
- const B = this.BA();
247
- this.m.uniform1i(e, B), this.m.activeTexture(this.m.TEXTURE0 + B), this.m.bindTexture(this.m.TEXTURE_2D, t);
248
- } else if (t instanceof H) {
249
- const B = this.BA();
250
- this.m.uniform1i(e, B), this.m.activeTexture(this.m.TEXTURE0 + B), this.m.bindTexture(this.m.TEXTURE_2D, t.texture);
250
+ const s = this.iA();
251
+ this.m.uniform1i(e, s), this.m.activeTexture(this.m.TEXTURE0 + s), this.m.bindTexture(this.m.TEXTURE_2D, t);
252
+ } else if (t instanceof U) {
253
+ const s = this.iA();
254
+ this.m.uniform1i(e, s), this.m.activeTexture(this.m.TEXTURE0 + s), this.m.bindTexture(this.m.TEXTURE_2D, t.texture);
251
255
  } else if (typeof t == "object" && "texture" in t) {
252
- const B = this.BA();
253
- this.m.uniform1i(e, B), this.m.activeTexture(this.m.TEXTURE0 + B), this.m.bindTexture(this.m.TEXTURE_2D, t.texture);
256
+ const s = this.iA();
257
+ this.m.uniform1i(e, s), this.m.activeTexture(this.m.TEXTURE0 + s), this.m.bindTexture(this.m.TEXTURE_2D, t.texture);
254
258
  } else console.warn(`Unsupported uniform type for '${A}':`, typeof t);
255
259
  }
256
- BA() {
257
- return this.K >= this.j && console.warn(`Exceeded maximum texture units (${this.j}). Texture may not render correctly.`), this.K++;
260
+ iA() {
261
+ return this.Z >= this.j && console.warn(`Exceeded maximum texture units (${this.j}). Texture may not render correctly.`), this.Z++;
258
262
  }
259
263
  get QA() {
260
- return this.H;
264
+ return this.J;
261
265
  }
262
266
  W() {
263
- this.m.deleteProgram(this.H);
267
+ this.m.deleteProgram(this.J);
264
268
  }
265
269
  }
266
- class q {
270
+ class AA {
267
271
  constructor() {
268
- n(this, "sA", 1);
269
- n(this, "EA", 0);
270
- n(this, "iA", [0, 0, 0]);
271
- n(this, "rA", [1, 1, 1, 1]);
272
- n(this, "nA", [0, 0, 0, 1]);
273
- n(this, "gA", !1);
274
- n(this, "oA", !1);
275
- n(this, "aA", !1);
276
- n(this, "hA", [0, 0]);
277
- n(this, "cA", []);
278
- }
279
- CA() {
280
- this.cA.push({ lineWeight: this.sA, rotation: this.EA, charRotation: [...this.hA], flipHorizontally: this.gA, flipVertically: this.oA, invert: this.aA, character: [...this.iA], charColor: [...this.rA], cellColor: [...this.nA] });
281
- }
282
- DA() {
283
- const A = this.cA.pop();
284
- A ? (this.sA = A.lineWeight, this.EA = A.rotation, this.hA = A.charRotation, this.gA = A.flipHorizontally, this.oA = A.flipVertically, this.aA = A.invert, this.iA = A.character, this.rA = A.charColor, this.nA = A.cellColor) : console.warn("pop() called without matching push()");
285
- }
286
- lA() {
287
- this.cA = [], this.EA = 0;
288
- }
289
- PA(A) {
290
- A.lineWeight = this.sA, A.rotation = this.EA, A.character[0] = this.iA[0], A.character[1] = this.iA[1], A.character[2] = this.iA[2], A.charColor[0] = this.rA[0], A.charColor[1] = this.rA[1], A.charColor[2] = this.rA[2], A.charColor[3] = this.rA[3], A.bgColor[0] = this.nA[0], A.bgColor[1] = this.nA[1], A.bgColor[2] = this.nA[2], A.bgColor[3] = this.nA[3], A.flipHorizontally = this.gA, A.flipVertically = this.oA, A.invert = this.aA, A.charRotation[0] = this.hA[0], A.charRotation[1] = this.hA[1];
272
+ o(this, "rA", 1);
273
+ o(this, "EA", 0);
274
+ o(this, "nA", 0);
275
+ o(this, "oA", 0);
276
+ o(this, "gA", [0, 0, 0]);
277
+ o(this, "aA", [1, 1, 1, 1]);
278
+ o(this, "hA", [0, 0, 0, 1]);
279
+ o(this, "cA", !1);
280
+ o(this, "CA", !1);
281
+ o(this, "DA", !1);
282
+ o(this, "lA", [0, 0]);
283
+ o(this, "PA", [0, 0, 0, 1]);
284
+ o(this, "uA", []);
285
+ }
286
+ IA() {
287
+ this.uA.push({ lineWeight: this.rA, rotationX: this.EA, rotationY: this.nA, rotationZ: this.oA, charRotation: [...this.lA], flipHorizontally: this.cA, flipVertically: this.CA, invert: this.DA, character: [...this.gA], charColor: [...this.aA], cellColor: [...this.hA] });
288
+ }
289
+ wA() {
290
+ const A = this.uA.pop();
291
+ A ? (this.rA = A.lineWeight, this.EA = A.rotationX, this.nA = A.rotationY, this.oA = A.rotationZ, this.lA = A.charRotation, this.cA = A.flipHorizontally, this.CA = A.flipVertically, this.DA = A.invert, this.gA = A.character, this.aA = A.charColor, this.hA = A.cellColor) : console.warn("pop() called without matching push()");
292
+ }
293
+ fA() {
294
+ this.uA = [], this.EA = 0, this.nA = 0, this.oA = 0;
295
+ }
296
+ dA(A) {
297
+ A.lineWeight = this.rA, A.rotationX = this.EA, A.rotationY = this.nA, A.rotationZ = this.oA, A.character[0] = this.gA[0], A.character[1] = this.gA[1], A.character[2] = this.gA[2], A.charColor[0] = this.aA[0], A.charColor[1] = this.aA[1], A.charColor[2] = this.aA[2], A.charColor[3] = this.aA[3], A.bgColor[0] = this.hA[0], A.bgColor[1] = this.hA[1], A.bgColor[2] = this.hA[2], A.bgColor[3] = this.hA[3], A.flipHorizontally = this.cA, A.flipVertically = this.CA, A.invert = this.DA, A.charRotation[0] = this.lA[0], A.charRotation[1] = this.lA[1];
291
298
  }
292
299
  get lineWeight() {
293
- return this.sA;
294
- }
295
- get rotation() {
296
- return this.EA;
297
- }
298
- get character() {
299
- return this.iA;
300
- }
301
- get charColor() {
302
300
  return this.rA;
303
301
  }
304
- get bgColor() {
305
- return this.nA;
306
- }
307
- get flipHorizontally() {
308
- return this.gA;
302
+ get canvasBackgroundColor() {
303
+ return this.PA;
309
304
  }
310
- get flipVertically() {
311
- return this.oA;
305
+ pA(A) {
306
+ this.rA = Math.abs(A);
312
307
  }
313
- get invert() {
314
- return this.aA;
308
+ _A(A) {
309
+ this.EA = A;
315
310
  }
316
- get charRotation() {
317
- return this.hA;
311
+ mA(A) {
312
+ this.nA = A;
318
313
  }
319
- IA(A) {
320
- this.sA = Math.abs(A);
314
+ vA(A) {
315
+ this.oA = A;
321
316
  }
322
- uA(A) {
323
- this.EA = A;
317
+ xA(A) {
318
+ this.gA = A;
324
319
  }
325
- wA(A) {
326
- this.iA = A;
320
+ yA(A, t, e, s = 255) {
321
+ this.aA = [A / 255, t / 255, e / 255, s / 255];
327
322
  }
328
- fA(A, t, e, B = 255) {
329
- this.rA = [A / 255, t / 255, e / 255, B / 255];
323
+ bA(A, t, e, s = 255) {
324
+ this.hA = [A / 255, t / 255, e / 255, s / 255];
330
325
  }
331
- dA(A, t, e, B = 255) {
332
- this.nA = [A / 255, t / 255, e / 255, B / 255];
326
+ GA(A) {
327
+ this.cA = A;
333
328
  }
334
- pA(A) {
335
- this.gA = A;
329
+ $A(A) {
330
+ this.CA = A;
336
331
  }
337
- mA(A) {
338
- this.oA = A;
332
+ MA(A) {
333
+ this.DA = A;
339
334
  }
340
- _A(A) {
341
- this.aA = A;
335
+ YA(A) {
336
+ const t = 255 * A / 360, e = Math.floor(t) / 255, s = Math.round(t - Math.floor(t));
337
+ this.lA = [e, s];
342
338
  }
343
- vA(A) {
344
- const t = 255 * A / 360, e = Math.floor(t) / 255, B = Math.round(t - Math.floor(t));
345
- this.hA = [e, B];
339
+ zA(A, t, e, s) {
340
+ this.PA = [A / 255, t / 255, e / 255, s / 255];
346
341
  }
347
342
  }
348
- var D = ((E) => (E.RECTANGLE = "rectangle", E.LINE = "line", E.ELLIPSE = "ellipse", E.ARC = "arc", E.TRIANGLE = "triangle", E.BEZIER_CURVE = "bezier_curve", E.CUSTOM = "custom", E))(D || {});
349
- class AA {
343
+ var O = `#version 300 es
344
+ in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float u_aspectRatio;uniform vec2 u_viewportSize;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 rotateX(float a){float s=sin(a),c=cos(a);return mat3(1,0,0,0,c,-s,0,s,c);}mat3 rotateY(float a){float s=sin(a),c=cos(a);return mat3(c,0,s,0,1,0,-s,0,c);}mat3 rotateZ(float a){float s=sin(a),c=cos(a);return mat3(c,-s,0,s,c,0,0,0,1);}vec2 evaluateBezier(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return u2*u*p0+3.*u2*t*p1+3.*u*t2*p2+t2*t*p3;}vec2 evaluateBezierDerivative(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return-3.*u2*p0+3.*u2*p1-6.*u*t*p1+6.*u*t*p2-3.*t2*p2+3.*t2*p3;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 worldPosition;bool isBezier=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool isArc=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(isBezier){float t=a_position.x;vec2 curvePoint=evaluateBezier(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 tangent=evaluateBezierDerivative(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float tLen=length(tangent);tangent=tLen>0.?tangent/tLen:vec2(1,0);worldPosition=curvePoint+vec2(-tangent.y,tangent.x)*a_position.y*a_instanceSize.y;}else if(isArc){float s=a_instanceArcAngles.x,e=a_instanceArcAngles.y;s=mod(s,6.28318530718);if(s<0.)s+=6.28318530718;e=mod(e,6.28318530718);if(e<0.)e+=6.28318530718;float d=s-e;if(d<=0.)d+=6.28318530718;float angle=s-a_position.x*d;vec2 local=vec2(cos(angle),sin(angle))*a_position.y;worldPosition=local*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{worldPosition=a_position*a_instanceSize+a_instancePosition;}vec2 ndc=(worldPosition/u_viewportSize)*2.-1.;ndc.y=-ndc.y;if(length(a_instanceGlobalRotation)>0.){vec3 pos3D=vec3(ndc-a_instanceRotationCenter,0);pos3D.x*=u_aspectRatio;if(a_instanceGlobalRotation.x!=0.)pos3D=rotateX(-a_instanceGlobalRotation.x)*pos3D;if(a_instanceGlobalRotation.y!=0.)pos3D=rotateY(-a_instanceGlobalRotation.y)*pos3D;if(a_instanceGlobalRotation.z!=0.)pos3D=rotateZ(-a_instanceGlobalRotation.z)*pos3D;pos3D.x/=u_aspectRatio;ndc=pos3D.xy+a_instanceRotationCenter;}gl_Position=vec4(ndc,0,1);}`, D = ((E) => (E.RECTANGLE = "rectangle", E.LINE = "line", E.ELLIPSE = "ellipse", E.ARC = "arc", E.TRIANGLE = "triangle", E.BEZIER_CURVE = "bezier_curve", E.CUSTOM = "custom", E))(D || {});
345
+ class tA {
350
346
  constructor(A) {
351
- n(this, "m");
352
- n(this, "xA", /* @__PURE__ */ new Map());
347
+ o(this, "m");
348
+ o(this, "RA", /* @__PURE__ */ new Map());
353
349
  this.m = A;
354
350
  }
355
- yA(A, t, e, B) {
351
+ TA(A, t, e, s) {
356
352
  const r = this.m;
357
- let i = this.xA.get(A);
358
- i || (i = /* @__PURE__ */ new Map(), this.xA.set(A, i));
359
- let s = i.get(t) || null;
360
- if (!s) {
361
- s = r.createVertexArray(), i.set(t, s), r.bindVertexArray(s), r.bindBuffer(r.ARRAY_BUFFER, B);
362
- const Q = r.getAttribLocation(A, "a_position");
363
- Q !== -1 && (r.enableVertexAttribArray(Q), r.vertexAttribPointer(Q, e.attributes.position.size, r.FLOAT, !1, e.stride, e.attributes.position.offset), r.vertexAttribDivisor(Q, 0));
364
- const o = r.getAttribLocation(A, "a_texCoord");
365
- o !== -1 && (r.enableVertexAttribArray(o), r.vertexAttribPointer(o, e.attributes.texCoord.size, r.FLOAT, !1, e.stride, e.attributes.texCoord.offset), r.vertexAttribDivisor(o, 0));
353
+ let i = this.RA.get(A);
354
+ i || (i = /* @__PURE__ */ new Map(), this.RA.set(A, i));
355
+ let B = i.get(t) || null;
356
+ if (!B) {
357
+ B = r.createVertexArray(), i.set(t, B), r.bindVertexArray(B), r.bindBuffer(r.ARRAY_BUFFER, s);
358
+ const n = r.getAttribLocation(A, "a_position");
359
+ n !== -1 && (r.enableVertexAttribArray(n), r.vertexAttribPointer(n, e.attributes.position.size, r.FLOAT, !1, e.stride, e.attributes.position.offset), r.vertexAttribDivisor(n, 0));
360
+ const Q = r.getAttribLocation(A, "a_texCoord");
361
+ Q !== -1 && (r.enableVertexAttribArray(Q), r.vertexAttribPointer(Q, e.attributes.texCoord.size, r.FLOAT, !1, e.stride, e.attributes.texCoord.offset), r.vertexAttribDivisor(Q, 0));
366
362
  }
367
- r.bindVertexArray(s);
363
+ r.bindVertexArray(B);
368
364
  }
369
- bA() {
365
+ SA() {
370
366
  this.m.bindVertexArray(null);
371
367
  }
372
368
  W() {
373
369
  const A = this.m;
374
- for (const [, t] of this.xA) for (const [, e] of t) e && A.deleteVertexArray(e);
375
- this.xA.clear();
370
+ for (const [, t] of this.RA) for (const [, e] of t) e && A.deleteVertexArray(e);
371
+ this.RA.clear();
376
372
  }
377
373
  }
378
- class tA {
374
+ class eA {
379
375
  constructor(A) {
380
- n(this, "GA");
381
- n(this, "m");
382
- this.m = A, this.GA = new AA(A);
383
- }
384
- $A(A, t, e) {
385
- const { shader: B } = A, r = G(this.m) || this.m.getParameter(this.m.VIEWPORT);
386
- B.tA({ u_aspectRatio: r[2] / r[3], u_viewportSize: [r[2], r[3]] });
387
- const i = (o) => {
388
- if (!o || !o.MA()) return;
389
- const g = o.unitGeometry, a = o.unitBuffer;
376
+ o(this, "FA");
377
+ o(this, "m");
378
+ o(this, "OA", null);
379
+ o(this, "UA", null);
380
+ o(this, "LA", null);
381
+ this.m = A, this.FA = new tA(A);
382
+ }
383
+ kA(A, t, e) {
384
+ const { shader: s } = A, r = R(this.m) || this.m.getParameter(this.m.VIEWPORT), i = { u_aspectRatio: r[2] / r[3], u_viewportSize: [r[2], r[3]] }, B = {};
385
+ for (const [a, g] of Object.entries(i)) s.sA(a) && (B[a] = g);
386
+ Object.keys(B).length > 0 && s.eA(B);
387
+ const n = (a) => {
388
+ if (!a || !a.HA()) return;
389
+ const g = a.unitGeometry, l = a.unitBuffer;
390
390
  try {
391
- this.GA.yA(B.QA, o.type + "", g, a), o.batch.YA(B), o.batch.TA(g.primitiveType, g.vertexCount);
391
+ this.FA.TA(s.QA, a.type + "", g, l), a.batch.WA(s), a.batch.JA(g.primitiveType, g.vertexCount);
392
392
  } finally {
393
- o.batch.zA(B), this.GA.bA(), o.FA();
393
+ a.batch.VA(s), this.FA.SA(), a.KA();
394
394
  }
395
395
  };
396
- let s = null, Q = null;
397
- for (const o of t) {
398
- s !== null && o.type !== s && (i(Q), s = null, Q = null);
399
- let g = Q;
400
- g && o.type === s || (g = e.get(o.type) || null, Q = g, s = o.type), g && g.RA(o.params, o.state);
396
+ let Q = null, h = null;
397
+ for (const a of t) {
398
+ if (a.type === D.CUSTOM) {
399
+ h && (n(h), Q = null, h = null), this.ZA(A, a.params, a.state, e.get(D.RECTANGLE) || null);
400
+ continue;
401
+ }
402
+ Q !== null && a.type !== Q && (n(h), Q = null, h = null);
403
+ let g = h;
404
+ g && a.type === Q || (g = e.get(a.type) || null, h = g, Q = a.type), g && g.jA(a.params, a.state);
405
+ }
406
+ n(h);
407
+ }
408
+ ZA(A, t, e, s) {
409
+ if (!s) return;
410
+ const { x: r, y: i, width: B, height: n, shader: Q, uniforms: h } = t, a = this.m;
411
+ Q.AA(), s.KA();
412
+ const g = this.XA(Math.max(1, Math.floor(B)), Math.max(1, Math.floor(n)));
413
+ g.k(), Q.AA(), h && Object.keys(h).length && Q.eA(h);
414
+ {
415
+ const u = R(a) || a.getParameter(a.VIEWPORT);
416
+ Q.sA("u_aspectRatio") && Q.BA("u_aspectRatio", u[2] / u[3]), Q.sA("u_viewportSize") && Q.BA("u_viewportSize", [u[2], u[3]]);
417
+ }
418
+ const l = { ...e, rotationX: 0, rotationY: 0, rotationZ: 0 };
419
+ if (s.jA({ x: 0, y: 0, width: g.width, height: g.height }, l), s.HA()) {
420
+ const u = s.unitGeometry, M = s.unitBuffer;
421
+ try {
422
+ this.FA.TA(Q.QA, s.type + "", u, M), s.batch.WA(Q), s.batch.JA(u.primitiveType, u.vertexCount);
423
+ } finally {
424
+ s.batch.VA(Q), this.FA.SA(), s.KA();
425
+ }
426
+ }
427
+ g.H();
428
+ const c = this.NA();
429
+ c.AA(), c.eA({ u_src0: g.textures[0], u_src1: g.textures[1], u_src2: g.textures[2], u_src3: g.textures[3], u_src4: g.textures[4], u_srcSize: [g.width, g.height] });
430
+ const C = R(a) || a.getParameter(a.VIEWPORT);
431
+ c.sA("u_aspectRatio") && c.BA("u_aspectRatio", C[2] / C[3]), c.sA("u_viewportSize") && c.BA("u_viewportSize", [C[2], C[3]]);
432
+ const d = Math.floor(r), I = Math.floor(i), w = Math.max(1, Math.floor(B)), p = Math.max(1, Math.floor(n));
433
+ if (s.jA({ x: d, y: I, width: w, height: p }, e), s.HA()) {
434
+ const u = s.unitGeometry, M = s.unitBuffer;
435
+ try {
436
+ this.FA.TA(c.QA, s.type + "", u, M), s.batch.WA(c), s.batch.JA(u.primitiveType, u.vertexCount);
437
+ } finally {
438
+ s.batch.VA(c), this.FA.SA(), s.KA();
439
+ }
401
440
  }
402
- i(Q);
441
+ A.shader.AA();
442
+ }
443
+ NA() {
444
+ return this.OA || (this.OA = new z(this.m, O, `#version 300 es
445
+ precision highp float;in vec2 v_uv;uniform sampler2D u_src0;uniform sampler2D u_src1;uniform sampler2D u_src2;uniform sampler2D u_src3;uniform sampler2D u_src4;uniform vec2 u_srcSize;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 uvTex=v_uv*u_srcSize;vec2 uvQ=(floor(uvTex)+0.5f)/u_srcSize;o_character=texture(u_src0,uvQ);o_primaryColor=texture(u_src1,uvQ);o_secondaryColor=texture(u_src2,uvQ);o_rotation=texture(u_src3,uvQ);o_transform=texture(u_src4,uvQ);}`)), this.OA;
446
+ }
447
+ XA(A, t) {
448
+ return this.UA && this.LA && this.LA.w === A && this.LA.h === t || (this.UA && this.UA.W(), this.UA = new U(this.m, A, t, 5), this.LA = { w: A, h: t }), this.UA;
403
449
  }
404
450
  }
405
- class eA {
451
+ class sA {
406
452
  constructor() {
407
- n(this, "SA", []);
408
- n(this, "OA", 1);
409
- n(this, "LA", 0);
410
- }
411
- UA(A) {
412
- if (this.LA >= this.SA.length) {
413
- const e = { id: this.OA++, type: A, params: {}, state: { lineWeight: 1, rotation: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
414
- this.SA.push(e);
453
+ o(this, "qA", []);
454
+ o(this, "At", 1);
455
+ o(this, "tt", 0);
456
+ }
457
+ et(A) {
458
+ if (this.tt >= this.qA.length) {
459
+ const e = { id: this.At++, type: A, params: {}, state: { lineWeight: 1, rotationX: 0, rotationY: 0, rotationZ: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
460
+ this.qA.push(e);
415
461
  }
416
- const t = this.SA[this.LA];
417
- switch (t.id = this.OA++, t.type = A, A) {
462
+ const t = this.qA[this.tt];
463
+ switch (t.id = this.At++, t.type = A, A) {
418
464
  case D.RECTANGLE:
419
465
  case D.ELLIPSE:
420
466
  t.params && "width" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0 });
421
467
  break;
468
+ case D.CUSTOM:
469
+ t.params && "shader" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0, shader: void 0, uniforms: {} });
470
+ break;
422
471
  case D.ARC:
423
472
  t.params && "start" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0, start: 0, stop: 0 });
424
473
  break;
@@ -434,1240 +483,1279 @@ class eA {
434
483
  default:
435
484
  t.params || (t.params = {});
436
485
  }
437
- return this.LA++, t;
486
+ return this.tt++, t;
438
487
  }
439
- kA(A, t, e, B, r) {
440
- const i = this.UA(D.RECTANGLE);
441
- return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = B, r.PA(i.state), i.id;
488
+ Bt(A, t, e, s, r) {
489
+ const i = this.et(D.RECTANGLE);
490
+ return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = s, r.dA(i.state), i.id;
442
491
  }
443
- WA(A, t, e, B, r, i) {
444
- const s = this.UA(D.LINE);
445
- return s.params.x1 = A, s.params.y1 = t, s.params.x2 = e, s.params.y2 = B, s.params.thickness = r, i.PA(s.state), s.id;
492
+ st(A, t, e, s, r, i, B) {
493
+ const n = this.et(D.CUSTOM);
494
+ return n.params.x = A, n.params.y = t, n.params.width = e, n.params.height = s, n.params.shader = r, n.params.uniforms = i, B.dA(n.state), n.id;
446
495
  }
447
- HA(A, t, e, B, r) {
448
- const i = this.UA(D.ELLIPSE);
449
- return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = B, r.PA(i.state), i.id;
496
+ it(A, t, e, s, r, i) {
497
+ const B = this.et(D.LINE);
498
+ return B.params.x1 = A, B.params.y1 = t, B.params.x2 = e, B.params.y2 = s, B.params.thickness = r, i.dA(B.state), B.id;
450
499
  }
451
- JA(A, t, e, B, r, i, s) {
452
- const Q = this.UA(D.ARC);
453
- return Q.params.x = A, Q.params.y = t, Q.params.width = e, Q.params.height = B, Q.params.start = r, Q.params.stop = i, s.PA(Q.state), Q.id;
500
+ Qt(A, t, e, s, r) {
501
+ const i = this.et(D.ELLIPSE);
502
+ return i.params.x = A, i.params.y = t, i.params.width = e, i.params.height = s, r.dA(i.state), i.id;
454
503
  }
455
- VA(A, t, e, B, r, i, s) {
456
- const Q = this.UA(D.TRIANGLE);
457
- return Q.params.x1 = A, Q.params.y1 = t, Q.params.x2 = e, Q.params.y2 = B, Q.params.x3 = r, Q.params.y3 = i, s.PA(Q.state), Q.id;
504
+ rt(A, t, e, s, r, i, B) {
505
+ const n = this.et(D.ARC);
506
+ return n.params.x = A, n.params.y = t, n.params.width = e, n.params.height = s, n.params.start = r, n.params.stop = i, B.dA(n.state), n.id;
458
507
  }
459
- KA(A, t, e, B, r, i, s, Q, o, g) {
460
- const a = this.UA(D.BEZIER_CURVE);
461
- return a.params.x1 = A, a.params.y1 = t, a.params.cp1x = e, a.params.cp1y = B, a.params.cp2x = r, a.params.cp2y = i, a.params.x2 = s, a.params.y2 = Q, a.params.thickness = o, g.PA(a.state), a.id;
508
+ Et(A, t, e, s, r, i, B) {
509
+ const n = this.et(D.TRIANGLE);
510
+ return n.params.x1 = A, n.params.y1 = t, n.params.x2 = e, n.params.y2 = s, n.params.x3 = r, n.params.y3 = i, B.dA(n.state), n.id;
511
+ }
512
+ nt(A, t, e, s, r, i, B, n, Q, h) {
513
+ const a = this.et(D.BEZIER_CURVE);
514
+ return a.params.x1 = A, a.params.y1 = t, a.params.cp1x = e, a.params.cp1y = s, a.params.cp2x = r, a.params.cp2y = i, a.params.x2 = B, a.params.y2 = n, a.params.thickness = Q, h.dA(a.state), a.id;
462
515
  }
463
516
  get length() {
464
- return this.LA;
517
+ return this.tt;
465
518
  }
466
519
  get isEmpty() {
467
- return this.LA === 0;
520
+ return this.tt === 0;
468
521
  }
469
- jA() {
470
- this.LA = 0;
522
+ ot() {
523
+ this.tt = 0;
471
524
  }
472
525
  [Symbol.iterator]() {
473
526
  let A = 0;
474
- const t = this.LA, e = this.SA;
527
+ const t = this.tt, e = this.qA;
475
528
  return { next: () => A < t ? { value: e[A++], done: !1 } : { value: void 0, done: !0 } };
476
529
  }
477
530
  }
478
531
  const x = class x {
479
- static ZA(A, t, e = 0) {
480
- var i, s, Q, o, g, a, h, l, c, C;
481
- const B = t || new Float32Array(x.FLOATS_PER_INSTANCE);
532
+ static gt(A, t, e = 0) {
533
+ var i, B, n, Q, h, a, g, l, c, C;
534
+ const s = t || new Float32Array(x.FLOATS_PER_INSTANCE);
482
535
  let r = e;
483
- return B[r++] = A.position[0], B[r++] = A.position[1], B[r++] = A.size[0], B[r++] = A.size[1], B[r++] = A.character[0], B[r++] = A.character[1], B[r++] = A.character[2], B[r++] = A.primaryColor[0], B[r++] = A.primaryColor[1], B[r++] = A.primaryColor[2], B[r++] = A.primaryColor[3], B[r++] = A.secondaryColor[0], B[r++] = A.secondaryColor[1], B[r++] = A.secondaryColor[2], B[r++] = A.secondaryColor[3], B[r++] = A.rotation[0], B[r++] = A.rotation[1], B[r++] = A.transform[0], B[r++] = A.transform[1], B[r++] = A.transform[2], B[r++] = A.globalRotation, B[r++] = A.rotationCenter[0], B[r++] = A.rotationCenter[1], B[r++] = ((i = A.arcAngles) == null ? void 0 : i[0]) || 0, B[r++] = ((s = A.arcAngles) == null ? void 0 : s[1]) || 0, B[r++] = ((Q = A.bezierControlPoint1) == null ? void 0 : Q[0]) || 0, B[r++] = ((o = A.bezierControlPoint1) == null ? void 0 : o[1]) || 0, B[r++] = ((g = A.bezierControlPoint2) == null ? void 0 : g[0]) || 0, B[r++] = ((a = A.bezierControlPoint2) == null ? void 0 : a[1]) || 0, B[r++] = ((h = A.bezierStartPoint) == null ? void 0 : h[0]) || 0, B[r++] = ((l = A.bezierStartPoint) == null ? void 0 : l[1]) || 0, B[r++] = ((c = A.bezierEndPoint) == null ? void 0 : c[0]) || 0, B[r++] = ((C = A.bezierEndPoint) == null ? void 0 : C[1]) || 0, B;
536
+ return s[r++] = A.position[0], s[r++] = A.position[1], s[r++] = A.size[0], s[r++] = A.size[1], s[r++] = A.character[0], s[r++] = A.character[1], s[r++] = A.character[2], s[r++] = A.primaryColor[0], s[r++] = A.primaryColor[1], s[r++] = A.primaryColor[2], s[r++] = A.primaryColor[3], s[r++] = A.secondaryColor[0], s[r++] = A.secondaryColor[1], s[r++] = A.secondaryColor[2], s[r++] = A.secondaryColor[3], s[r++] = A.rotation[0], s[r++] = A.rotation[1], s[r++] = A.transform[0], s[r++] = A.transform[1], s[r++] = A.transform[2], s[r++] = A.globalRotationX, s[r++] = A.globalRotationY, s[r++] = A.globalRotationZ, s[r++] = A.rotationCenter[0], s[r++] = A.rotationCenter[1], s[r++] = ((i = A.arcAngles) == null ? void 0 : i[0]) || 0, s[r++] = ((B = A.arcAngles) == null ? void 0 : B[1]) || 0, s[r++] = ((n = A.bezierControlPoint1) == null ? void 0 : n[0]) || 0, s[r++] = ((Q = A.bezierControlPoint1) == null ? void 0 : Q[1]) || 0, s[r++] = ((h = A.bezierControlPoint2) == null ? void 0 : h[0]) || 0, s[r++] = ((a = A.bezierControlPoint2) == null ? void 0 : a[1]) || 0, s[r++] = ((g = A.bezierStartPoint) == null ? void 0 : g[0]) || 0, s[r++] = ((l = A.bezierStartPoint) == null ? void 0 : l[1]) || 0, s[r++] = ((c = A.bezierEndPoint) == null ? void 0 : c[0]) || 0, s[r++] = ((C = A.bezierEndPoint) == null ? void 0 : C[1]) || 0, s;
484
537
  }
485
- static NA(A) {
538
+ static ht(A) {
486
539
  const t = A.length * x.FLOATS_PER_INSTANCE, e = new Float32Array(t);
487
- for (let B = 0; B < A.length; B++) {
488
- const r = B * x.FLOATS_PER_INSTANCE;
489
- x.ZA(A[B], e, r);
540
+ for (let s = 0; s < A.length; s++) {
541
+ const r = s * x.FLOATS_PER_INSTANCE;
542
+ x.gt(A[s], e, r);
490
543
  }
491
544
  return e;
492
545
  }
493
546
  };
494
- n(x, "BYTES_PER_INSTANCE", 132), n(x, "FLOATS_PER_INSTANCE", 33);
495
- let v = x;
547
+ o(x, "BYTES_PER_INSTANCE", 140), o(x, "FLOATS_PER_INSTANCE", 35);
548
+ let b = x;
496
549
  const P = class P {
497
550
  };
498
- n(P, "STRIDE", v.BYTES_PER_INSTANCE), n(P, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 1, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 84, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 92, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 124, divisor: 1 } });
499
- let M = P;
500
- class BA {
551
+ o(P, "STRIDE", b.BYTES_PER_INSTANCE), o(P, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 92, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 124, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: P.STRIDE, offset: 132, divisor: 1 } });
552
+ let Y = P;
553
+ class rA {
501
554
  constructor(A, t = 1e3, e = 1.5) {
502
- n(this, "m");
503
- n(this, "XA", []);
504
- n(this, "qA");
505
- n(this, "At");
506
- n(this, "tt", null);
507
- n(this, "et", !0);
508
- n(this, "Bt", 0);
509
- n(this, "Qt", /* @__PURE__ */ new Map());
510
- n(this, "st", null);
511
- this.m = A, this.qA = t, this.At = e, this.Et();
512
- }
513
- RA(A) {
514
- const t = this.XA.length;
515
- return this.XA.push(A), this.et = !0, t;
555
+ o(this, "m");
556
+ o(this, "ct", []);
557
+ o(this, "Ct");
558
+ o(this, "Dt");
559
+ o(this, "lt", null);
560
+ o(this, "Pt", !0);
561
+ o(this, "ut", 0);
562
+ o(this, "It", /* @__PURE__ */ new Map());
563
+ o(this, "wt", null);
564
+ this.m = A, this.Ct = t, this.Dt = e, this.ft();
565
+ }
566
+ jA(A) {
567
+ const t = this.ct.length;
568
+ return this.ct.push(A), this.Pt = !0, t;
516
569
  }
517
570
  get count() {
518
- return this.XA.length;
571
+ return this.ct.length;
519
572
  }
520
573
  get isEmpty() {
521
- return this.XA.length === 0;
574
+ return this.ct.length === 0;
522
575
  }
523
576
  clear() {
524
- this.XA.length = 0, this.et = !0;
577
+ this.ct.length = 0, this.Pt = !0;
525
578
  }
526
- it(A) {
527
- if (A <= this.qA) return;
528
- const t = Math.ceil(A * this.At);
529
- this.qA = t, this.Et(), console.log(`InstanceBatch: Grew buffer capacity to ${t} instances`);
579
+ dt(A) {
580
+ if (A <= this.Ct) return;
581
+ const t = Math.ceil(A * this.Dt);
582
+ this.Ct = t, this.ft();
530
583
  }
531
- Et() {
584
+ ft() {
532
585
  const A = this.m;
533
- if (this.tt && A.deleteBuffer(this.tt), this.tt = A.createBuffer(), !this.tt) throw Error("Failed to create instance buffer");
534
- const t = this.qA * v.BYTES_PER_INSTANCE;
535
- A.bindBuffer(A.ARRAY_BUFFER, this.tt), A.bufferData(A.ARRAY_BUFFER, t, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.et = !0, this.Bt = 0;
536
- }
537
- rt() {
538
- if (!this.et || this.XA.length === 0) return;
539
- const A = this.m, t = this.XA.length;
540
- this.it(t), (!this.st || this.st.length < t * v.FLOATS_PER_INSTANCE) && (this.st = new Float32Array(t * v.FLOATS_PER_INSTANCE));
541
- const e = v.NA(this.XA);
542
- A.bindBuffer(A.ARRAY_BUFFER, this.tt), t <= this.Bt ? A.bufferSubData(A.ARRAY_BUFFER, 0, e) : A.bufferData(A.ARRAY_BUFFER, e, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.et = !1, this.Bt = t;
543
- }
544
- nt(A) {
545
- let t = this.Qt.get(A);
586
+ this.lt && A.deleteBuffer(this.lt), this.lt = A.createBuffer();
587
+ const t = this.Ct * b.BYTES_PER_INSTANCE;
588
+ A.bindBuffer(A.ARRAY_BUFFER, this.lt), A.bufferData(A.ARRAY_BUFFER, t, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Pt = !0, this.ut = 0;
589
+ }
590
+ _t() {
591
+ if (!this.Pt || this.ct.length === 0) return;
592
+ const A = this.m, t = this.ct.length;
593
+ this.dt(t), (!this.wt || this.wt.length < t * b.FLOATS_PER_INSTANCE) && (this.wt = new Float32Array(t * b.FLOATS_PER_INSTANCE));
594
+ const e = b.ht(this.ct);
595
+ A.bindBuffer(A.ARRAY_BUFFER, this.lt), t <= this.ut ? A.bufferSubData(A.ARRAY_BUFFER, 0, e) : A.bufferData(A.ARRAY_BUFFER, e, A.DYNAMIC_DRAW), A.bindBuffer(A.ARRAY_BUFFER, null), this.Pt = !1, this.ut = t;
596
+ }
597
+ vt(A) {
598
+ let t = this.It.get(A);
546
599
  if (!t) {
547
600
  t = /* @__PURE__ */ new Map();
548
601
  const e = this.m;
549
- for (const B in M.ATTRIBUTES) {
550
- const r = e.getAttribLocation(A, B);
551
- r !== -1 && t.set(B, r);
602
+ for (const s in Y.ATTRIBUTES) {
603
+ const r = e.getAttribLocation(A, s);
604
+ r !== -1 && t.set(s, r);
552
605
  }
553
- this.Qt.set(A, t);
606
+ this.It.set(A, t);
554
607
  }
555
608
  return t;
556
609
  }
557
- YA(A) {
558
- if (!this.tt || this.XA.length === 0) return;
610
+ WA(A) {
611
+ if (!this.lt || this.ct.length === 0) return;
559
612
  const t = this.m, e = A.QA;
560
- if (!e) return void console.warn("InstanceBatch: Cannot bind attributes - invalid shader program");
561
- this.rt();
562
- const B = this.nt(e);
563
- t.bindBuffer(t.ARRAY_BUFFER, this.tt);
564
- for (const [r, i] of B) {
565
- const s = M.ATTRIBUTES[r];
566
- s && (t.enableVertexAttribArray(i), t.vertexAttribPointer(i, s.size, s.type, s.normalized, s.stride, s.offset), t.vertexAttribDivisor(i, s.divisor));
613
+ this._t();
614
+ const s = this.vt(e);
615
+ t.bindBuffer(t.ARRAY_BUFFER, this.lt);
616
+ for (const [r, i] of s) {
617
+ const B = Y.ATTRIBUTES[r];
618
+ B && (t.enableVertexAttribArray(i), t.vertexAttribPointer(i, B.size, B.type, B.normalized, B.stride, B.offset), t.vertexAttribDivisor(i, B.divisor));
567
619
  }
568
620
  }
569
- zA(A) {
570
- const t = this.m, e = this.nt(A.QA);
571
- for (const [, B] of e) t.disableVertexAttribArray(B), t.vertexAttribDivisor(B, 0);
621
+ VA(A) {
622
+ const t = this.m, e = this.vt(A.QA);
623
+ for (const [, s] of e) t.disableVertexAttribArray(s), t.vertexAttribDivisor(s, 0);
572
624
  }
573
- TA(A, t) {
574
- this.XA.length !== 0 && this.m.drawArraysInstanced(A, 0, t, this.XA.length);
625
+ JA(A, t) {
626
+ this.ct.length !== 0 && this.m.drawArraysInstanced(A, 0, t, this.ct.length);
575
627
  }
576
628
  W() {
577
629
  const A = this.m;
578
- this.tt && (A.deleteBuffer(this.tt), this.tt = null), this.XA.length = 0, this.Qt.clear(), this.st = null;
630
+ this.lt && (A.deleteBuffer(this.lt), this.lt = null), this.ct.length = 0, this.It.clear(), this.wt = null;
579
631
  }
580
632
  }
581
- class b {
582
- constructor(A, t, e, B) {
583
- n(this, "m");
584
- n(this, "gt");
585
- n(this, "ot");
586
- n(this, "ht");
587
- n(this, "ct", null);
588
- this.m = A, this.gt = t, this.ot = e, this.ht = B;
633
+ class T {
634
+ constructor(A, t, e, s) {
635
+ o(this, "m");
636
+ o(this, "xt");
637
+ o(this, "yt");
638
+ o(this, "bt");
639
+ o(this, "Gt", null);
640
+ this.m = A, this.xt = t, this.yt = e, this.bt = s;
589
641
  const r = this.m.createBuffer();
590
642
  if (!r) throw Error("Failed to create unit geometry buffer");
591
- this.m.bindBuffer(this.m.ARRAY_BUFFER, r), this.m.bufferData(this.m.ARRAY_BUFFER, this.ht.vertices, this.m.STATIC_DRAW), this.m.bindBuffer(this.m.ARRAY_BUFFER, null), this.ct = r;
643
+ this.m.bindBuffer(this.m.ARRAY_BUFFER, r), this.m.bufferData(this.m.ARRAY_BUFFER, this.bt.vertices, this.m.STATIC_DRAW), this.m.bindBuffer(this.m.ARRAY_BUFFER, null), this.Gt = r;
592
644
  }
593
645
  get type() {
594
- return this.ot;
646
+ return this.yt;
595
647
  }
596
648
  get unitGeometry() {
597
- return this.ht;
649
+ return this.bt;
598
650
  }
599
651
  get unitBuffer() {
600
- return this.ct;
652
+ return this.Gt;
601
653
  }
602
654
  get batch() {
603
- return this.gt;
655
+ return this.xt;
604
656
  }
605
- FA() {
606
- this.gt.clear();
657
+ KA() {
658
+ this.xt.clear();
607
659
  }
608
- MA() {
609
- return !this.gt.isEmpty;
660
+ HA() {
661
+ return !this.xt.isEmpty;
610
662
  }
611
663
  W() {
612
- this.gt.W(), this.ct && (this.m.deleteBuffer(this.ct), this.ct = null);
664
+ this.xt.W(), this.Gt && (this.m.deleteBuffer(this.Gt), this.Gt = null);
613
665
  }
614
- Ct(A, t, e, B, r) {
615
- const i = this.Dt(A, t, e, B, r.rotation || 0);
616
- return { position: [A, t], size: [e, B], character: r.character || [0, 0, 0], primaryColor: r.charColor || [1, 1, 1, 1], secondaryColor: r.bgColor || [0, 0, 0, 1], rotation: r.charRotation || [0, 0], transform: [r.invert ? 1 : 0, r.flipHorizontally ? 1 : 0, r.flipVertically ? 1 : 0], globalRotation: i.radians, rotationCenter: [i.centerX, i.centerY] };
666
+ $t(A, t, e, s, r) {
667
+ const i = this.Mt(A, t, e, s, r.rotationX || 0, r.rotationY || 0, r.rotationZ || 0);
668
+ return { position: [A, t], size: [e, s], character: r.character || [0, 0, 0], primaryColor: r.charColor || [1, 1, 1, 1], secondaryColor: r.bgColor || [0, 0, 0, 1], rotation: r.charRotation || [0, 0], transform: [r.invert ? 1 : 0, r.flipHorizontally ? 1 : 0, r.flipVertically ? 1 : 0], globalRotationX: i.radiansX, globalRotationY: i.radiansY, globalRotationZ: i.radiansZ, rotationCenter: [i.centerX, i.centerY] };
617
669
  }
618
- lt(A, t) {
619
- const e = G(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height];
670
+ Yt(A, t) {
671
+ const e = R(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height];
620
672
  return { nx: A / e[2] * 2 - 1, ny: 1 - t / e[3] * 2 };
621
673
  }
622
- Pt(A, t, e) {
623
- const B = this.lt(t, e);
624
- A.rotationCenter = [B.nx, B.ny];
674
+ zt(A, t, e) {
675
+ const s = this.Yt(t, e);
676
+ A.rotationCenter = [s.nx, s.ny];
625
677
  }
626
- Dt(A, t, e, B, r) {
627
- const i = G(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height], s = i[2], Q = i[3];
628
- return { centerX: (A + e / 2) / s * 2 - 1, centerY: 1 - (t + B / 2) / Q * 2, radians: -r * Math.PI / 180, aspectRatio: s / Q };
678
+ Mt(A, t, e, s, r, i, B) {
679
+ const n = R(this.m) || [0, 0, this.m.canvas.width, this.m.canvas.height], Q = n[2], h = n[3];
680
+ return { centerX: (A + e / 2) / Q * 2 - 1, centerY: 1 - (t + s / 2) / h * 2, radiansX: -r * Math.PI / 180, radiansY: -i * Math.PI / 180, radiansZ: -B * Math.PI / 180, aspectRatio: Q / h };
629
681
  }
630
682
  }
631
- const rA = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
632
- class iA extends b {
683
+ const iA = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
684
+ class BA extends T {
633
685
  constructor(A, t) {
634
- super(A, t, D.RECTANGLE, rA);
686
+ super(A, t, D.RECTANGLE, iA);
635
687
  }
636
- RA(A, t) {
637
- const e = this.Ct(A.x, A.y, A.width, A.height, t);
638
- return this.gt.RA(e);
688
+ jA(A, t) {
689
+ const e = this.$t(A.x, A.y, A.width, A.height, t);
690
+ return this.xt.jA(e);
639
691
  }
640
692
  }
641
- const sA = { vertices: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
642
- class EA extends b {
693
+ const EA = { vertices: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
694
+ class nA extends T {
643
695
  constructor(A, t) {
644
- super(A, t, D.LINE, sA);
696
+ super(A, t, D.LINE, EA);
645
697
  }
646
- RA(A, t) {
647
- const e = A.x2 - A.x1, B = A.y2 - A.y1, r = Math.hypot(e, B), i = Math.atan2(B, e), s = A.thickness || t.lineWeight || 1, Q = A.x1 + e / 2, o = A.y1 + B / 2, g = Q - r / 2, a = o, h = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotation: (t.rotation || 0) + 180 * i / Math.PI, lineWeight: s }, l = this.Ct(g, a, r, s, h);
648
- return this.Pt(l, Q, o), this.gt.RA(l);
698
+ jA(A, t) {
699
+ const e = A.x2 - A.x1, s = A.y2 - A.y1, r = Math.hypot(e, s), i = Math.atan2(s, e), B = A.thickness || t.lineWeight || 1, n = A.x1 + e / 2, Q = A.y1 + s / 2, h = n - r / 2, a = Q, g = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotationX: t.rotationX || 0, rotationY: t.rotationY || 0, rotationZ: (t.rotationZ || 0) + 180 * i / Math.PI, lineWeight: B }, l = this.$t(h, a, r, B, g);
700
+ return this.zt(l, n, Q), this.xt.jA(l);
649
701
  }
650
702
  }
651
- const QA = { vertices: function(E = 32) {
703
+ const oA = { vertices: function(E = 32) {
652
704
  const A = [], t = 2 * Math.PI / E;
653
705
  for (let e = 0; e < E; e++) {
654
- const B = e * t, r = (e + 1) % E * t, i = Math.cos(B), s = Math.sin(B), Q = 0.5 * (i + 1), o = 0.5 * (s + 1), g = Math.cos(r), a = Math.sin(r), h = 0.5 * (g + 1), l = 0.5 * (a + 1);
655
- A.push(0, 0, 0.5, 0.5, i, s, Q, o, g, a, h, l);
706
+ const s = e * t, r = (e + 1) % E * t, i = Math.cos(s), B = Math.sin(s), n = 0.5 * (i + 1), Q = 0.5 * (B + 1), h = Math.cos(r), a = Math.sin(r), g = 0.5 * (h + 1), l = 0.5 * (a + 1);
707
+ A.push(0, 0, 0.5, 0.5, i, B, n, Q, h, a, g, l);
656
708
  }
657
709
  return new Float32Array(A);
658
710
  }(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
659
- class nA extends b {
711
+ class QA extends T {
660
712
  constructor(A, t) {
661
- super(A, t, D.ELLIPSE, QA);
713
+ super(A, t, D.ELLIPSE, oA);
662
714
  }
663
- RA(A, t) {
664
- const e = this.Ct(A.x, A.y, A.width, A.height, t);
665
- return this.Pt(e, A.x, A.y), this.gt.RA(e);
715
+ jA(A, t) {
716
+ const e = this.$t(A.x, A.y, A.width, A.height, t);
717
+ return this.zt(e, A.x, A.y), this.xt.jA(e);
666
718
  }
667
719
  }
668
- let oA = { vertices: function(E) {
720
+ let aA = { vertices: function(E) {
669
721
  const A = [];
670
722
  for (let t = 0; t < E; t++) {
671
- const e = t / E, B = (t + 1) / E;
672
- A.push(e, 0, e, 0, e, 1, e, 1, B, 1, B, 1);
723
+ const e = t / E, s = (t + 1) / E;
724
+ A.push(e, 0, e, 0, e, 1, e, 1, s, 1, s, 1);
673
725
  }
674
726
  return new Float32Array(A);
675
727
  }(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
676
- class gA extends b {
728
+ class gA extends T {
677
729
  constructor(A, t) {
678
- super(A, t, D.ARC, oA);
730
+ super(A, t, D.ARC, aA);
679
731
  }
680
- RA(A, t) {
681
- const e = A.x - A.width / 2, B = A.y - A.height / 2, r = A.start * Math.PI / 180, i = A.stop * Math.PI / 180, s = this.Ct(e, B, A.width, A.height, t);
682
- return this.Pt(s, A.x, A.y), s.arcAngles = [r, i], this.gt.RA(s);
732
+ jA(A, t) {
733
+ const e = A.x - A.width / 2, s = A.y - A.height / 2, r = A.start * Math.PI / 180, i = A.stop * Math.PI / 180, B = this.$t(e, s, A.width, A.height, t);
734
+ return this.zt(B, A.x, A.y), B.arcAngles = [r, i], this.xt.jA(B);
683
735
  }
684
736
  }
685
- const aA = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), vertexCount: 3, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
686
- class hA extends b {
737
+ const hA = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), vertexCount: 3, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
738
+ class cA extends T {
687
739
  constructor(A, t) {
688
- super(A, t, D.TRIANGLE, aA);
740
+ super(A, t, D.TRIANGLE, hA);
689
741
  }
690
- RA(A, t) {
691
- const e = Math.min(A.x1, A.x2, A.x3), B = Math.max(A.x1, A.x2, A.x3), r = Math.min(A.y1, A.y2, A.y3), i = B - e, s = Math.max(A.y1, A.y2, A.y3) - r, Q = this.Ct(e, r, i, s, t), o = e + 0.5 * i, g = r + s * (1 / 3);
692
- return this.Pt(Q, o, g), this.gt.RA(Q);
742
+ jA(A, t) {
743
+ const e = Math.min(A.x1, A.x2, A.x3), s = Math.max(A.x1, A.x2, A.x3), r = Math.min(A.y1, A.y2, A.y3), i = s - e, B = Math.max(A.y1, A.y2, A.y3) - r, n = this.$t(e, r, i, B, t), Q = e + 0.5 * i, h = r + B * (1 / 3);
744
+ return this.zt(n, Q, h), this.xt.jA(n);
693
745
  }
694
746
  }
695
- function L(E, A, t, e, B) {
696
- const r = 1 - E, i = r * r, s = E * E;
697
- return i * r * A + 3 * i * E * t + 3 * r * s * e + s * E * B;
747
+ function k(E, A, t, e, s) {
748
+ const r = 1 - E, i = r * r, B = E * E;
749
+ return i * r * A + 3 * i * E * t + 3 * r * B * e + B * E * s;
698
750
  }
699
- const cA = { vertices: function(E = 16) {
751
+ const lA = { vertices: function(E = 16) {
700
752
  const A = [];
701
753
  for (let t = 0; t < E; t++) {
702
- const e = t / E, B = (t + 1) / E;
703
- A.push(e, -0.5, e, 0), A.push(B, -0.5, B, 0), A.push(e, 0.5, e, 1), A.push(e, 0.5, e, 1), A.push(B, -0.5, B, 0), A.push(B, 0.5, B, 1);
754
+ const e = t / E, s = (t + 1) / E;
755
+ A.push(e, -0.5, e, 0), A.push(s, -0.5, s, 0), A.push(e, 0.5, e, 1), A.push(e, 0.5, e, 1), A.push(s, -0.5, s, 0), A.push(s, 0.5, s, 1);
704
756
  }
705
757
  return new Float32Array(A);
706
758
  }(16), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
707
- class lA extends b {
759
+ class CA extends T {
708
760
  constructor(A, t) {
709
- super(A, t, D.BEZIER_CURVE, cA);
761
+ super(A, t, D.BEZIER_CURVE, lA);
710
762
  }
711
- RA(A, t) {
712
- const e = t.lineWeight || 1, B = L(0.5, A.x1, A.cp1x, A.cp2x, A.x2), r = L(0.5, A.y1, A.cp1y, A.cp2y, A.y2), i = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotation: t.rotation || 0, lineWeight: e }, s = this.Ct(0, 0, 1, e, i);
713
- return this.Pt(s, B, r), s.bezierStartPoint = [A.x1, A.y1], s.bezierControlPoint1 = [A.cp1x, A.cp1y], s.bezierControlPoint2 = [A.cp2x, A.cp2y], s.bezierEndPoint = [A.x2, A.y2], this.gt.RA(s);
763
+ jA(A, t) {
764
+ const e = t.lineWeight || 1, s = k(0.5, A.x1, A.cp1x, A.cp2x, A.x2), r = k(0.5, A.y1, A.cp1y, A.cp2y, A.y2), i = { character: t.character, charColor: t.charColor, bgColor: t.bgColor, charRotation: t.charRotation, flipHorizontally: t.flipHorizontally, flipVertically: t.flipVertically, invert: t.invert, rotationX: t.rotationX || 0, rotationY: t.rotationY || 0, rotationZ: t.rotationZ || 0, lineWeight: e }, B = this.$t(0, 0, 1, e, i);
765
+ return this.zt(B, s, r), B.bezierStartPoint = [A.x1, A.y1], B.bezierControlPoint1 = [A.cp1x, A.cp1y], B.bezierControlPoint2 = [A.cp2x, A.cp2y], B.bezierEndPoint = [A.x2, A.y2], this.xt.jA(B);
714
766
  }
715
767
  }
716
- class CA {
768
+ class DA {
717
769
  constructor(A) {
718
- n(this, "m");
719
- n(this, "It", null);
720
- n(this, "ut", null);
721
- n(this, "wt", null);
722
- n(this, "ft", /* @__PURE__ */ new Map());
723
- n(this, "dt");
724
- n(this, "_t");
725
- n(this, "vt");
726
- this.m = A, this.vt = new q(), this.dt = new tA(A), this._t = new eA(), this.ut = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.ut), A.bufferData(A.ARRAY_BUFFER, new Float32Array([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, -1, 1, 0, 1, 1, 1, 1, -1, 1, 0, 1]), A.STATIC_DRAW), this.wt = A.createBuffer(), this.m.enable(this.m.BLEND), this.m.blendEquation(this.m.FUNC_ADD), this.m.blendFunc(this.m.ONE, this.m.ONE_MINUS_SRC_ALPHA), _(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
727
- }
728
- xt(A) {
729
- let t = this.ft.get(A);
770
+ o(this, "m");
771
+ o(this, "Rt", null);
772
+ o(this, "Tt", null);
773
+ o(this, "St", {});
774
+ o(this, "Ft", null);
775
+ o(this, "Ot", /* @__PURE__ */ new Map());
776
+ o(this, "Ut");
777
+ o(this, "Lt");
778
+ o(this, "kt");
779
+ this.m = A, this.kt = new AA(), this.Ut = new eA(A), this.Lt = new sA(), this.Ft = A.createBuffer(), G(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
780
+ }
781
+ Ht(A) {
782
+ let t = this.Ot.get(A);
730
783
  if (t) return t;
731
- const e = new BA(this.m);
732
- return t = (0, { [D.RECTANGLE]: () => new iA(this.m, e), [D.LINE]: () => new EA(this.m, e), [D.ELLIPSE]: () => new nA(this.m, e), [D.ARC]: () => new gA(this.m, e), [D.TRIANGLE]: () => new hA(this.m, e), [D.BEZIER_CURVE]: () => new lA(this.m, e) }[A])(), this.ft.set(A, t), t;
784
+ const e = new rA(this.m);
785
+ return t = (0, { [D.RECTANGLE]: () => new BA(this.m, e), [D.LINE]: () => new nA(this.m, e), [D.ELLIPSE]: () => new QA(this.m, e), [D.ARC]: () => new gA(this.m, e), [D.TRIANGLE]: () => new cA(this.m, e), [D.BEZIER_CURVE]: () => new CA(this.m, e) }[A])(), this.Ot.set(A, t), t;
733
786
  }
734
- yt(A) {
735
- this.It !== A && (this.It = A, A.q());
787
+ Wt(A) {
788
+ this.Rt !== A && (this.Rt = A, A.AA());
736
789
  }
737
- bt(A, t) {
738
- return new Z(this.m, A, t);
790
+ Jt(A, t) {
791
+ return new z(this.m, A, t);
739
792
  }
740
- Gt(A, t, e, B) {
793
+ Vt(A) {
794
+ this.Tt = A, A && (this.St = {});
795
+ }
796
+ Kt(A, t) {
797
+ this.St[A] = t;
798
+ }
799
+ Zt(A) {
800
+ Object.assign(this.St, A);
801
+ }
802
+ jt(A) {
803
+ return new z(this.m, O, A);
804
+ }
805
+ Xt(A, t, e, s) {
741
806
  var C;
742
- const r = this.m, i = r.canvas.width, s = r.canvas.height, Q = A / i * 2 - 1, o = (A + e) / i * 2 - 1, g = 1 - t / s * 2, a = 1 - (t + B) / s * 2, h = new Float32Array([Q, a, o, a, Q, g, o, a, o, g, Q, g]);
743
- r.bindBuffer(r.ARRAY_BUFFER, this.wt), r.bufferData(r.ARRAY_BUFFER, h, r.DYNAMIC_DRAW);
744
- const l = ((C = this.It) == null ? void 0 : C.QA) || r.getParameter(r.CURRENT_PROGRAM), c = l ? r.getAttribLocation(l, "a_position") : -1;
807
+ const r = this.m, i = r.canvas.width, B = r.canvas.height, n = A / i * 2 - 1, Q = (A + e) / i * 2 - 1, h = 1 - t / B * 2, a = 1 - (t + s) / B * 2, g = new Float32Array([n, a, Q, a, n, h, Q, a, Q, h, n, h]);
808
+ r.bindBuffer(r.ARRAY_BUFFER, this.Ft), r.bufferData(r.ARRAY_BUFFER, g, r.DYNAMIC_DRAW);
809
+ const l = ((C = this.Rt) == null ? void 0 : C.QA) || r.getParameter(r.CURRENT_PROGRAM), c = l ? r.getAttribLocation(l, "a_position") : -1;
745
810
  c !== -1 && (r.enableVertexAttribArray(c), r.vertexAttribPointer(c, 2, r.FLOAT, !1, 8, 0)), r.drawArrays(r.TRIANGLES, 0, 6), c !== -1 && r.disableVertexAttribArray(c);
746
811
  }
747
- $t(A, t, e, B) {
748
- this._t.kA(A, t, e, B, this.vt);
812
+ Nt(A, t, e, s) {
813
+ this.Tt ? (this.Lt.st(A, t, e, s, this.Tt, { ...this.St }, this.kt), this.Tt = null, this.St = {}) : this.Lt.Bt(A, t, e, s, this.kt);
749
814
  }
750
- Mt(A, t, e, B) {
751
- this._t.WA(A, t, e, B, this.vt.lineWeight, this.vt);
815
+ qt(A, t, e, s) {
816
+ this.Lt.it(A, t, e, s, this.kt.lineWeight, this.kt);
752
817
  }
753
- Yt(A, t, e, B) {
754
- this._t.HA(A, t, e, B, this.vt);
818
+ Ae(A, t, e, s) {
819
+ this.Lt.Qt(A, t, e, s, this.kt);
755
820
  }
756
- Tt(A, t, e, B, r, i) {
757
- this._t.VA(A, t, e, B, r, i, this.vt);
821
+ te(A, t, e, s, r, i) {
822
+ this.Lt.Et(A, t, e, s, r, i, this.kt);
758
823
  }
759
- zt(A, t, e, B, r, i, s, Q) {
760
- const o = this.vt.lineWeight;
761
- this._t.KA(A, t, e, B, r, i, s, Q, o, this.vt);
824
+ ee(A, t, e, s, r, i, B, n) {
825
+ const Q = this.kt.lineWeight;
826
+ this.Lt.nt(A, t, e, s, r, i, B, n, Q, this.kt);
762
827
  }
763
- Ft(A, t, e = 1, B = {}) {
764
- return new H(this.m, A, t, e, B);
828
+ Be(A, t, e = 1, s = {}) {
829
+ return new U(this.m, A, t, e, s);
765
830
  }
766
- Rt(A, t, e, B, r, i) {
767
- this._t.JA(A, t, e, B, r, i, this.vt);
831
+ se(A, t, e, s, r, i) {
832
+ this.Lt.rt(A, t, e, s, r, i, this.kt);
768
833
  }
769
- St(A, t = A, e = A, B = 255) {
770
- this.jA(A / 255, t / 255, e / 255, B / 255);
834
+ ie(A, t = A, e = A, s = 255) {
835
+ this.state.zA(A, t, e, s), this.ot(A / 255, t / 255, e / 255, s / 255);
771
836
  }
772
- jA(A = 0, t = 0, e = 0, B = 0) {
773
- this.m.clearColor(A, t, e, B), this.m.clear(this.m.COLOR_BUFFER_BIT);
837
+ ot(A = 0, t = 0, e = 0, s = 0) {
838
+ this.m.clearColor(A, t, e, s), this.m.clear(this.m.COLOR_BUFFER_BIT);
774
839
  }
775
- Ot() {
776
- this.m.viewport(0, 0, this.m.canvas.width, this.m.canvas.height), _(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
840
+ Qe() {
841
+ this.m.viewport(0, 0, this.m.canvas.width, this.m.canvas.height), G(this.m, [0, 0, this.m.canvas.width, this.m.canvas.height]);
777
842
  }
778
843
  get context() {
779
844
  return this.m;
780
845
  }
781
846
  get state() {
782
- return this.vt;
847
+ return this.kt;
783
848
  }
784
- Lt(A) {
785
- const t = G(this.m) ?? this.m.getParameter(this.m.VIEWPORT), e = { shader: A, gl: this.m, viewport: t }, B = /* @__PURE__ */ new Set();
786
- for (const r of this._t) B.add(r.type);
787
- for (const r of B) this.xt(r);
788
- this.dt.$A(e, this._t, this.ft), this._t.jA();
849
+ re(A) {
850
+ const t = A, e = R(this.m) ?? this.m.getParameter(this.m.VIEWPORT), s = { shader: t, gl: this.m, viewport: e };
851
+ this.Wt(t);
852
+ const r = /* @__PURE__ */ new Set();
853
+ for (const i of this.Lt) i.type === D.CUSTOM ? r.add(D.RECTANGLE) : r.add(i.type);
854
+ for (const i of r) i !== D.CUSTOM && this.Ht(i);
855
+ this.Ut.kA(s, this.Lt, this.Ot), this.Lt.ot();
789
856
  }
790
857
  W() {
791
- this.m.deleteBuffer(this.ut), this.m.deleteBuffer(this.wt), this._t.jA();
792
- for (const A of this.ft.values()) A.W();
858
+ this.m.deleteBuffer(this.Ft), this.Lt.ot();
859
+ for (const A of this.Ot.values()) A.W();
793
860
  }
794
861
  }
795
- const u = { readShort: (E, A) => (u.t.uint16[0] = E[A] << 8 | E[A + 1], u.t.int16[0]), readUshort: (E, A) => E[A] << 8 | E[A + 1], readUshorts(E, A, t) {
862
+ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int16[0]), readUshort: (E, A) => E[A] << 8 | E[A + 1], readUshorts(E, A, t) {
796
863
  const e = [];
797
- for (let B = 0; B < t; B++) e.push(u.readUshort(E, A + 2 * B));
864
+ for (let s = 0; s < t; s++) e.push(f.readUshort(E, A + 2 * s));
798
865
  return e;
799
866
  }, readUint(E, A) {
800
- const t = u.t.uint8;
801
- return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3], u.t.uint32[0];
867
+ const t = f.t.uint8;
868
+ return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3], f.t.uint32[0];
802
869
  }, readASCII(E, A, t) {
803
870
  let e = "";
804
- for (let B = 0; B < t; B++) e += String.fromCharCode(E[A + B]);
871
+ for (let s = 0; s < t; s++) e += String.fromCharCode(E[A + s]);
805
872
  return e;
806
873
  }, t: (() => {
807
874
  const E = new ArrayBuffer(8);
808
875
  return { uint8: new Uint8Array(E), int16: new Int16Array(E), uint16: new Uint16Array(E), uint32: new Uint32Array(E) };
809
- })() }, DA = { parseTab(E, A, t) {
876
+ })() }, uA = { parseTab(E, A, t) {
810
877
  const e = { tables: [], ids: {}, off: A };
811
878
  E = new Uint8Array(E.buffer, A, t), A = 0;
812
- const B = u, r = B.readUshort, i = r(E, A += 2);
879
+ const s = f, r = s.readUshort, i = r(E, A += 2);
813
880
  A += 2;
814
- const s = [];
815
- for (let Q = 0; Q < i; Q++) {
816
- const o = r(E, A), g = r(E, A += 2);
881
+ const B = [];
882
+ for (let n = 0; n < i; n++) {
883
+ const Q = r(E, A), h = r(E, A += 2);
817
884
  A += 2;
818
- const a = B.readUint(E, A);
885
+ const a = s.readUint(E, A);
819
886
  A += 4;
820
- const h = `p${o}e${g}`;
821
- let l = s.indexOf(a);
887
+ const g = `p${Q}e${h}`;
888
+ let l = B.indexOf(a);
822
889
  if (l === -1) {
823
890
  let c;
824
- l = e.tables.length, s.push(a);
891
+ l = e.tables.length, B.push(a);
825
892
  const C = r(E, a);
826
893
  c = C === 4 ? this.parse4(E, a) : C === 12 ? this.parse12(E, a) : { format: C }, e.tables.push(c);
827
894
  }
828
- e.ids[h] != null && console.warn("Multiple tables for one platform+encoding: " + h), e.ids[h] = l;
895
+ e.ids[g] != null && console.warn("Multiple tables for one platform+encoding: " + g), e.ids[g] = l;
829
896
  }
830
897
  return e;
831
898
  }, parse4(E, A) {
832
- const t = u, e = t.readUshort, B = t.readUshorts, r = A, i = e(E, A += 2);
899
+ const t = f, e = t.readUshort, s = t.readUshorts, r = A, i = e(E, A += 2);
833
900
  A += 2;
834
- const s = e(E, A += 2) >>> 1, Q = { format: 4, searchRange: e(E, A += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
835
- A += 2, Q.entrySelector = e(E, A), A += 2, Q.rangeShift = e(E, A), A += 2, Q.endCount = B(E, A, s), A += 2 * s, A += 2, Q.startCount = B(E, A, s), A += 2 * s;
836
- for (let o = 0; o < s; o++) Q.idDelta.push(t.readShort(E, A)), A += 2;
837
- return Q.idRangeOffset = B(E, A, s), A += 2 * s, Q.glyphIdArray = B(E, A, r + i - A >> 1), Q;
901
+ const B = e(E, A += 2) >>> 1, n = { format: 4, searchRange: e(E, A += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
902
+ A += 2, n.entrySelector = e(E, A), A += 2, n.rangeShift = e(E, A), A += 2, n.endCount = s(E, A, B), A += 2 * B, A += 2, n.startCount = s(E, A, B), A += 2 * B;
903
+ for (let Q = 0; Q < B; Q++) n.idDelta.push(t.readShort(E, A)), A += 2;
904
+ return n.idRangeOffset = s(E, A, B), A += 2 * B, n.glyphIdArray = s(E, A, r + i - A >> 1), n;
838
905
  }, parse12(E, A) {
839
- const t = u.readUint;
906
+ const t = f.readUint;
840
907
  t(E, A += 4), t(E, A += 4);
841
908
  const e = t(E, A += 4);
842
909
  A += 4;
843
- const B = new Uint32Array(3 * e);
844
- for (let r = 0; r < 3 * e; r += 3) B[r] = t(E, A + (r << 2)), B[r + 1] = t(E, A + (r << 2) + 4), B[r + 2] = t(E, A + (r << 2) + 8);
845
- return { format: 12, groups: B };
910
+ const s = new Uint32Array(3 * e);
911
+ for (let r = 0; r < 3 * e; r += 3) s[r] = t(E, A + (r << 2)), s[r + 1] = t(E, A + (r << 2) + 4), s[r + 2] = t(E, A + (r << 2) + 8);
912
+ return { format: 12, groups: s };
846
913
  } }, PA = { parseTab(E, A, t) {
847
- const e = u;
914
+ const e = f;
848
915
  A += 18;
849
- const B = e.readUshort(E, A);
916
+ const s = e.readUshort(E, A);
850
917
  A += 2, A += 16;
851
918
  const r = e.readShort(E, A);
852
919
  A += 2;
853
920
  const i = e.readShort(E, A);
854
921
  A += 2;
855
- const s = e.readShort(E, A);
922
+ const B = e.readShort(E, A);
856
923
  A += 2;
857
- const Q = e.readShort(E, A);
858
- return A += 2, A += 6, { unitsPerEm: B, xMin: r, yMin: i, xMax: s, yMax: Q, indexToLocFormat: e.readShort(E, A) };
859
- } }, uA = { parseTab(E, A, t) {
860
- const e = u;
924
+ const n = e.readShort(E, A);
925
+ return A += 2, A += 6, { unitsPerEm: s, xMin: r, yMin: i, xMax: B, yMax: n, indexToLocFormat: e.readShort(E, A) };
926
+ } }, IA = { parseTab(E, A, t) {
927
+ const e = f;
861
928
  A += 4;
862
- const B = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], r = {};
863
- for (let i = 0; i < B.length; i++) {
864
- const s = B[i], Q = s === "advanceWidthMax" || s === "numberOfHMetrics" ? e.readUshort : e.readShort;
865
- r[s] = Q(E, A + 2 * i);
929
+ const s = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], r = {};
930
+ for (let i = 0; i < s.length; i++) {
931
+ const B = s[i], n = B === "advanceWidthMax" || B === "numberOfHMetrics" ? e.readUshort : e.readShort;
932
+ r[B] = n(E, A + 2 * i);
866
933
  }
867
934
  return r;
868
- } }, IA = { parseTab(E, A, t, e) {
869
- const B = u, r = [], i = [], s = e.maxp.numGlyphs, Q = e.hhea.numberOfHMetrics;
870
- let o = 0, g = 0, a = 0;
871
- for (; a < Q; ) o = B.readUshort(E, A + (a << 2)), g = B.readShort(E, A + (a << 2) + 2), r.push(o), i.push(g), a++;
872
- for (; a < s; ) r.push(o), i.push(g), a++;
935
+ } }, fA = { parseTab(E, A, t, e) {
936
+ const s = f, r = [], i = [], B = e.maxp.numGlyphs, n = e.hhea.numberOfHMetrics;
937
+ let Q = 0, h = 0, a = 0;
938
+ for (; a < n; ) Q = s.readUshort(E, A + (a << 2)), h = s.readShort(E, A + (a << 2) + 2), r.push(Q), i.push(h), a++;
939
+ for (; a < B; ) r.push(Q), i.push(h), a++;
873
940
  return { aWidth: r, lsBearing: i };
874
- } }, z = { cmap: DA, head: PA, hhea: uA, maxp: { parseTab(E, A, t) {
875
- const e = u;
941
+ } }, N = { cmap: uA, head: PA, hhea: IA, maxp: { parseTab(E, A, t) {
942
+ const e = f;
876
943
  return e.readUint(E, A), A += 4, { numGlyphs: e.readUshort(E, A) };
877
- } }, hmtx: IA, loca: { parseTab(E, A, t, e) {
878
- const B = u, r = [], i = e.head.indexToLocFormat, s = e.maxp.numGlyphs + 1;
879
- if (i === 0) for (let Q = 0; Q < s; Q++) r.push(B.readUshort(E, A + (Q << 1)) << 1);
880
- else if (i === 1) for (let Q = 0; Q < s; Q++) r.push(B.readUint(E, A + (Q << 2)));
944
+ } }, hmtx: fA, loca: { parseTab(E, A, t, e) {
945
+ const s = f, r = [], i = e.head.indexToLocFormat, B = e.maxp.numGlyphs + 1;
946
+ if (i === 0) for (let n = 0; n < B; n++) r.push(s.readUshort(E, A + (n << 1)) << 1);
947
+ else if (i === 1) for (let n = 0; n < B; n++) r.push(s.readUint(E, A + (n << 2)));
881
948
  return r;
882
949
  } }, glyf: { parseTab(E, A, t, e) {
883
- const B = [], r = e.maxp.numGlyphs;
884
- for (let i = 0; i < r; i++) B.push(null);
885
- return B;
886
- }, Ut(E, A) {
887
- const t = u, e = E.kt, B = E.loca;
888
- if (B[A] === B[A + 1]) return null;
889
- const r = p.findTable(e, "glyf", E.Wt);
950
+ const s = [], r = e.maxp.numGlyphs;
951
+ for (let i = 0; i < r; i++) s.push(null);
952
+ return s;
953
+ }, Ee(E, A) {
954
+ const t = f, e = E.ne, s = E.loca;
955
+ if (s[A] === s[A + 1]) return null;
956
+ const r = y.findTable(e, "glyf", E.oe);
890
957
  if (!r) return null;
891
- let i = r[0] + B[A];
892
- const s = {};
893
- if (s.noc = t.readShort(e, i), i += 2, s.xMin = t.readShort(e, i), i += 2, s.yMin = t.readShort(e, i), i += 2, s.xMax = t.readShort(e, i), i += 2, s.yMax = t.readShort(e, i), i += 2, s.xMin >= s.xMax || s.yMin >= s.yMax) return null;
894
- if (s.noc > 0) {
895
- s.endPts = [];
896
- for (let h = 0; h < s.noc; h++) s.endPts.push(t.readUshort(e, i)), i += 2;
897
- const Q = t.readUshort(e, i);
898
- if (i += 2, e.length - i < Q) return null;
899
- i += Q;
900
- const o = s.endPts[s.noc - 1] + 1;
901
- s.flags = [];
902
- for (let h = 0; h < o; h++) {
958
+ let i = r[0] + s[A];
959
+ const B = {};
960
+ if (B.noc = t.readShort(e, i), i += 2, B.xMin = t.readShort(e, i), i += 2, B.yMin = t.readShort(e, i), i += 2, B.xMax = t.readShort(e, i), i += 2, B.yMax = t.readShort(e, i), i += 2, B.xMin >= B.xMax || B.yMin >= B.yMax) return null;
961
+ if (B.noc > 0) {
962
+ B.endPts = [];
963
+ for (let g = 0; g < B.noc; g++) B.endPts.push(t.readUshort(e, i)), i += 2;
964
+ const n = t.readUshort(e, i);
965
+ if (i += 2, e.length - i < n) return null;
966
+ i += n;
967
+ const Q = B.endPts[B.noc - 1] + 1;
968
+ B.flags = [];
969
+ for (let g = 0; g < Q; g++) {
903
970
  const l = e[i];
904
- if (i++, s.flags.push(l), 8 & l) {
971
+ if (i++, B.flags.push(l), 8 & l) {
905
972
  const c = e[i];
906
973
  i++;
907
- for (let C = 0; C < c; C++) s.flags.push(l), h++;
974
+ for (let C = 0; C < c; C++) B.flags.push(l), g++;
908
975
  }
909
976
  }
910
- s.xs = [];
911
- for (let h = 0; h < o; h++) {
912
- const l = s.flags[h], c = !!(16 & l);
913
- 2 & l ? (s.xs.push(c ? e[i] : -e[i]), i++) : c ? s.xs.push(0) : (s.xs.push(t.readShort(e, i)), i += 2);
977
+ B.xs = [];
978
+ for (let g = 0; g < Q; g++) {
979
+ const l = B.flags[g], c = !!(16 & l);
980
+ 2 & l ? (B.xs.push(c ? e[i] : -e[i]), i++) : c ? B.xs.push(0) : (B.xs.push(t.readShort(e, i)), i += 2);
914
981
  }
915
- s.ys = [];
916
- for (let h = 0; h < o; h++) {
917
- const l = s.flags[h], c = !!(32 & l);
918
- 4 & l ? (s.ys.push(c ? e[i] : -e[i]), i++) : c ? s.ys.push(0) : (s.ys.push(t.readShort(e, i)), i += 2);
982
+ B.ys = [];
983
+ for (let g = 0; g < Q; g++) {
984
+ const l = B.flags[g], c = !!(32 & l);
985
+ 4 & l ? (B.ys.push(c ? e[i] : -e[i]), i++) : c ? B.ys.push(0) : (B.ys.push(t.readShort(e, i)), i += 2);
919
986
  }
920
- let g = 0, a = 0;
921
- for (let h = 0; h < o; h++) g += s.xs[h], a += s.ys[h], s.xs[h] = g, s.ys[h] = a;
922
- } else s.parts = [], s.endPts = [], s.flags = [], s.xs = [], s.ys = [];
923
- return s;
924
- } } }, p = { parse: (E) => [((A, t, e, B) => {
925
- const r = z, i = { kt: A, Ht: t, Wt: e };
926
- for (const s in r) {
927
- const Q = s, o = p.findTable(A, Q, e);
928
- if (o) {
929
- const [g, a] = o;
930
- let h = B[g];
931
- h == null && (h = r[Q].parseTab(A, g, a, i), B[g] = h), i[Q] = h;
987
+ let h = 0, a = 0;
988
+ for (let g = 0; g < Q; g++) h += B.xs[g], a += B.ys[g], B.xs[g] = h, B.ys[g] = a;
989
+ } else B.parts = [], B.endPts = [], B.flags = [], B.xs = [], B.ys = [];
990
+ return B;
991
+ } } }, y = { parse: (E) => [((A, t, e, s) => {
992
+ const r = N, i = { ne: A, ge: t, oe: e };
993
+ for (const B in r) {
994
+ const n = B, Q = y.findTable(A, n, e);
995
+ if (Q) {
996
+ const [h, a] = Q;
997
+ let g = s[h];
998
+ g == null && (g = r[n].parseTab(A, h, a, i), s[h] = g), i[n] = g;
932
999
  }
933
1000
  }
934
1001
  return i;
935
1002
  })(new Uint8Array(E), 0, 0, {})], findTable(E, A, t) {
936
- const e = u, B = e.readUshort(E, t + 4);
1003
+ const e = f, s = e.readUshort(E, t + 4);
937
1004
  let r = t + 12;
938
- for (let i = 0; i < B; i++) {
939
- const s = e.readASCII(E, r, 4);
1005
+ for (let i = 0; i < s; i++) {
1006
+ const B = e.readASCII(E, r, 4);
940
1007
  e.readUint(E, r + 4);
941
- const Q = e.readUint(E, r + 8), o = e.readUint(E, r + 12);
942
- if (s === A) return [Q, o];
1008
+ const n = e.readUint(E, r + 8), Q = e.readUint(E, r + 12);
1009
+ if (B === A) return [n, Q];
943
1010
  r += 16;
944
1011
  }
945
1012
  return null;
946
- }, T: z, B: u };
947
- class F {
1013
+ }, T: N, B: f };
1014
+ class S {
948
1015
  constructor() {
949
- n(this, "Jt", /* @__PURE__ */ new Map());
950
- n(this, "Vt", /* @__PURE__ */ new Map());
951
- }
952
- Kt(A, t) {
953
- const e = `${this.jt(A)}_${t}`;
954
- if (this.Jt.has(e)) return this.Jt.get(e);
955
- const B = A.cmap;
956
- if (!B || !B.tables) return this.Jt.set(e, 0), 0;
1016
+ o(this, "ae", /* @__PURE__ */ new Map());
1017
+ o(this, "he", /* @__PURE__ */ new Map());
1018
+ }
1019
+ ce(A, t) {
1020
+ const e = `${this.Ce(A)}_${t}`;
1021
+ if (this.ae.has(e)) return this.ae.get(e);
1022
+ const s = A.cmap;
1023
+ if (!s || !s.tables) return this.ae.set(e, 0), 0;
957
1024
  let r = 0;
958
- for (const i of B.tables) if (i.format === 4 ? r = this.Zt(t, i) : i.format === 12 && (r = this.Nt(t, i)), r > 0) break;
959
- return this.Jt.set(e, r), r;
1025
+ for (const i of s.tables) if (i.format === 4 ? r = this.De(t, i) : i.format === 12 && (r = this.le(t, i)), r > 0) break;
1026
+ return this.ae.set(e, r), r;
960
1027
  }
961
- Xt(A, t) {
1028
+ Pe(A, t) {
962
1029
  const e = t.codePointAt(0);
963
- return e === void 0 ? 0 : this.Kt(A, e);
1030
+ return e === void 0 ? 0 : this.ce(A, e);
964
1031
  }
965
- qt(A, t) {
1032
+ ue(A, t) {
966
1033
  const e = A.hmtx;
967
1034
  return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
968
1035
  }
969
- Ae(A, t) {
970
- const e = t / A.head.unitsPerEm, B = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
971
- return { ascender: B, descender: r, lineGap: i, lineHeight: B - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
1036
+ Ie(A, t) {
1037
+ const e = t / A.head.unitsPerEm, s = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
1038
+ return { ascender: s, descender: r, lineGap: i, lineHeight: s - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
972
1039
  }
973
- te() {
974
- this.Jt.clear(), this.Vt.clear();
1040
+ we() {
1041
+ this.ae.clear(), this.he.clear();
975
1042
  }
976
- jt(A) {
977
- return `${A.Wt}_${A.kt.length}`;
1043
+ Ce(A) {
1044
+ return `${A.oe}_${A.ne.length}`;
978
1045
  }
979
- Zt(A, t) {
1046
+ De(A, t) {
980
1047
  const e = t.endCount.length;
981
- let B = -1;
1048
+ let s = -1;
982
1049
  for (let r = 0; r < e; r++) if (A <= t.endCount[r]) {
983
- B = r;
1050
+ s = r;
984
1051
  break;
985
1052
  }
986
- if (B === -1 || A < t.startCount[B]) return 0;
987
- if (t.idRangeOffset[B] === 0) return A + t.idDelta[B] & 65535;
1053
+ if (s === -1 || A < t.startCount[s]) return 0;
1054
+ if (t.idRangeOffset[s] === 0) return A + t.idDelta[s] & 65535;
988
1055
  {
989
- const r = t.idRangeOffset[B] / 2 + (A - t.startCount[B]) - (e - B);
1056
+ const r = t.idRangeOffset[s] / 2 + (A - t.startCount[s]) - (e - s);
990
1057
  if (r >= 0 && r < t.glyphIdArray.length) {
991
1058
  const i = t.glyphIdArray[r];
992
- return i === 0 ? 0 : i + t.idDelta[B] & 65535;
1059
+ return i === 0 ? 0 : i + t.idDelta[s] & 65535;
993
1060
  }
994
1061
  }
995
1062
  return 0;
996
1063
  }
997
- Nt(A, t) {
1064
+ le(A, t) {
998
1065
  const e = t.groups.length / 3;
999
- for (let B = 0; B < e; B++) {
1000
- const r = t.groups[3 * B], i = t.groups[3 * B + 1], s = t.groups[3 * B + 2];
1001
- if (A >= r && A <= i) return s + (A - r);
1066
+ for (let s = 0; s < e; s++) {
1067
+ const r = t.groups[3 * s], i = t.groups[3 * s + 1], B = t.groups[3 * s + 2];
1068
+ if (A >= r && A <= i) return B + (A - r);
1002
1069
  }
1003
1070
  return 0;
1004
1071
  }
1005
1072
  }
1006
- class fA {
1073
+ class dA {
1007
1074
  constructor(A) {
1008
- n(this, "ee");
1009
- this.ee = A;
1075
+ o(this, "fe");
1076
+ this.fe = A;
1010
1077
  }
1011
- Be(A) {
1078
+ de(A) {
1012
1079
  var e;
1013
1080
  const t = [];
1014
- return (e = A.cmap) != null && e.tables ? (A.cmap.tables.forEach((B) => {
1015
- if (B.format === 4) {
1016
- const r = this.Qe(B);
1081
+ return (e = A.cmap) != null && e.tables ? (A.cmap.tables.forEach((s) => {
1082
+ if (s.format === 4) {
1083
+ const r = this.pe(s);
1017
1084
  t.push(...r);
1018
- } else if (B.format === 12) {
1019
- const r = this.se(B);
1085
+ } else if (s.format === 12) {
1086
+ const r = this._e(s);
1020
1087
  t.push(...r);
1021
1088
  }
1022
1089
  }), [...new Set(t)]) : [];
1023
1090
  }
1024
- Ee(A, t) {
1025
- return this.ee.Xt(A, t) > 0;
1091
+ me(A, t) {
1092
+ return this.fe.Pe(A, t) > 0;
1026
1093
  }
1027
- ie(A, t) {
1028
- for (const e of t) if (!this.Ee(A, e)) return !1;
1094
+ ve(A, t) {
1095
+ for (const e of t) if (!this.me(A, e)) return !1;
1029
1096
  return !0;
1030
1097
  }
1031
- re(A, t) {
1032
- return t.filter((e) => this.Ee(A, e));
1098
+ xe(A, t) {
1099
+ return t.filter((e) => this.me(A, e));
1033
1100
  }
1034
- ne(A) {
1035
- return A.filter((t) => this.ge(t));
1101
+ ye(A) {
1102
+ return A.filter((t) => this.be(t));
1036
1103
  }
1037
- Qe(A) {
1104
+ pe(A) {
1038
1105
  const t = [];
1039
1106
  if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
1040
1107
  for (let e = 0; e < A.startCount.length; e++) {
1041
- const B = A.startCount[e], r = A.endCount[e];
1042
- if (B !== 65535 || r !== 65535) {
1043
- for (let i = B; i <= r; i++)
1044
- if (this.oe(A, i, e) > 0) try {
1045
- const s = String.fromCodePoint(i);
1046
- t.push(s);
1108
+ const s = A.startCount[e], r = A.endCount[e];
1109
+ if (s !== 65535 || r !== 65535) {
1110
+ for (let i = s; i <= r; i++)
1111
+ if (this.Ge(A, i, e) > 0) try {
1112
+ const B = String.fromCodePoint(i);
1113
+ t.push(B);
1047
1114
  } catch {
1048
1115
  }
1049
1116
  }
1050
1117
  }
1051
1118
  return t;
1052
1119
  }
1053
- se(A) {
1120
+ _e(A) {
1054
1121
  const t = [];
1055
1122
  if (!A.groups) return t;
1056
1123
  for (let e = 0; e < A.groups.length; e += 3) {
1057
- const B = A.groups[e], r = A.groups[e + 1], i = A.groups[e + 2];
1058
- for (let s = B; s <= r; s++)
1059
- if (i + (s - B) > 0) try {
1060
- const Q = String.fromCodePoint(s);
1061
- t.push(Q);
1124
+ const s = A.groups[e], r = A.groups[e + 1], i = A.groups[e + 2];
1125
+ for (let B = s; B <= r; B++)
1126
+ if (i + (B - s) > 0) try {
1127
+ const n = String.fromCodePoint(B);
1128
+ t.push(n);
1062
1129
  } catch {
1063
1130
  }
1064
1131
  }
1065
1132
  return t;
1066
1133
  }
1067
- oe(A, t, e) {
1134
+ Ge(A, t, e) {
1068
1135
  if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
1069
1136
  {
1070
- const B = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
1071
- if (B >= 0 && A.glyphIdArray && B < A.glyphIdArray.length) {
1072
- const r = A.glyphIdArray[B];
1137
+ const s = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
1138
+ if (s >= 0 && A.glyphIdArray && s < A.glyphIdArray.length) {
1139
+ const r = A.glyphIdArray[s];
1073
1140
  if (r !== 0) return r + A.idDelta[e] & 65535;
1074
1141
  }
1075
1142
  }
1076
1143
  return 0;
1077
1144
  }
1078
- ge(A) {
1145
+ be(A) {
1079
1146
  const t = A.codePointAt(0) || 0;
1080
1147
  return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
1081
1148
  }
1082
1149
  }
1083
- class dA {
1150
+ class wA {
1084
1151
  constructor() {
1085
- n(this, "ae");
1086
- const A = new F();
1087
- this.ae = new fA(A);
1152
+ o(this, "$e");
1153
+ const A = new S();
1154
+ this.$e = new dA(A);
1088
1155
  }
1089
1156
  extractCharacters(A) {
1090
- return this.ae.Be(A);
1157
+ return this.$e.de(A);
1091
1158
  }
1092
1159
  filterProblematicCharacters(A) {
1093
- return this.ae.ne(A);
1160
+ return this.$e.ye(A);
1094
1161
  }
1095
1162
  characterExists(A, t) {
1096
- return this.ae.Ee(A, t);
1163
+ return this.$e.me(A, t);
1097
1164
  }
1098
1165
  allCharactersExist(A, t) {
1099
- return this.ae.ie(A, t);
1166
+ return this.$e.ve(A, t);
1100
1167
  }
1101
1168
  }
1102
- class wA {
1169
+ class mA {
1103
1170
  constructor(A) {
1104
- n(this, "he");
1105
- n(this, "ce");
1106
- n(this, "Ce");
1107
- n(this, "De");
1108
- this.Ce = A, this.De = new F(), this.he = document.createElement("canvas"), this.ce = this.he.getContext("2d", { willReadFrequently: !0, alpha: !1 });
1109
- }
1110
- createTextureAtlas(A, t, e, B) {
1111
- const r = A.length, i = Math.ceil(Math.sqrt(r)), s = Math.ceil(r / i), Q = t.width * i, o = t.height * s, g = typeof B == "object" ? B : null;
1112
- this.le(Q, o), this.Pe(A, t, i, e, g);
1113
- const a = this.Ce.Ft(Q, o, 1, { filter: "nearest" });
1114
- return a.R(this.he), { framebuffer: a, columns: i, rows: s };
1115
- }
1116
- le(A, t) {
1117
- this.he.width = A, this.he.height = t, this.he.style.width = A + "px", this.he.style.height = A + "px", this.ce.imageSmoothingEnabled = !1, this.he.style.imageRendering = "pixelated", this.ce.fillStyle = "black", this.ce.fillRect(0, 0, A, t), this.ce.textBaseline = "top", this.ce.textAlign = "left", this.ce.fillStyle = "white";
1118
- }
1119
- Pe(A, t, e, B, r) {
1120
- const i = B / r.head.unitsPerEm;
1121
- for (let s = 0; s < A.length; s++) {
1122
- const Q = s % e, o = Math.floor(s / e), g = A[s].character, a = this.Ie(r, g);
1171
+ o(this, "Me");
1172
+ o(this, "Ye");
1173
+ o(this, "ze");
1174
+ o(this, "Re");
1175
+ this.ze = A, this.Re = new S(), this.Me = document.createElement("canvas"), this.Ye = this.Me.getContext("2d", { willReadFrequently: !0, alpha: !1 });
1176
+ }
1177
+ createTextureAtlas(A, t, e, s) {
1178
+ const r = A.length, i = Math.ceil(Math.sqrt(r)), B = Math.ceil(r / i), n = t.width * i, Q = t.height * B, h = typeof s == "object" ? s : null;
1179
+ this.Te(n, Q), this.Se(A, t, i, e, h);
1180
+ const a = this.ze.Be(n, Q, 1, { filter: "nearest" });
1181
+ return a.F(this.Me), { framebuffer: a, columns: i, rows: B };
1182
+ }
1183
+ Te(A, t) {
1184
+ this.Me.width = A, this.Me.height = t, this.Me.style.width = A + "px", this.Me.style.height = A + "px", this.Ye.imageSmoothingEnabled = !1, this.Me.style.imageRendering = "pixelated", this.Ye.fillStyle = "black", this.Ye.fillRect(0, 0, A, t), this.Ye.textBaseline = "top", this.Ye.textAlign = "left", this.Ye.fillStyle = "white";
1185
+ }
1186
+ Se(A, t, e, s, r) {
1187
+ const i = s / r.head.unitsPerEm;
1188
+ for (let B = 0; B < A.length; B++) {
1189
+ const n = B % e, Q = Math.floor(B / e), h = A[B].character, a = this.Fe(r, h);
1123
1190
  if (!a) continue;
1124
- const h = g.codePointAt(0) || 0, l = this.De.Kt(r, h), c = this.ue(r, l) * i, C = Q * t.width, d = o * t.height, I = C + 0.5 * t.width, w = d + 0.5 * t.height, m = Math.round(I - 0.5 * t.width), R = Math.round(w - 0.5 * B), $ = m + 0.5 * (t.width - c), V = R + r.hhea.ascender * i;
1125
- this.we(a, $, V, i);
1191
+ const g = h.codePointAt(0) || 0, l = this.Re.ce(r, g), c = this.Oe(r, l) * i, C = n * t.width, d = Q * t.height, I = C + 0.5 * t.width, w = d + 0.5 * t.height, p = Math.round(I - 0.5 * t.width), u = Math.round(w - 0.5 * s), M = p + 0.5 * (t.width - c), j = u + r.hhea.ascender * i;
1192
+ this.Ue(a, M, j, i);
1126
1193
  }
1127
1194
  }
1128
- Ie(A, t) {
1129
- const e = t.codePointAt(0) || 0, B = this.De.Kt(A, e);
1130
- if (B === 0) return null;
1131
- if (A.glyf && A.glyf[B] !== null) return A.glyf[B];
1132
- if (p && p.T && p.T.glyf) {
1133
- const r = p.T.glyf.Ut(A, B);
1134
- return A.glyf && r && (A.glyf[B] = r), r;
1195
+ Fe(A, t) {
1196
+ const e = t.codePointAt(0) || 0, s = this.Re.ce(A, e);
1197
+ if (s === 0) return null;
1198
+ if (A.glyf && A.glyf[s] !== null) return A.glyf[s];
1199
+ if (y && y.T && y.T.glyf) {
1200
+ const r = y.T.glyf.Ee(A, s);
1201
+ return A.glyf && r && (A.glyf[s] = r), r;
1135
1202
  }
1136
1203
  return null;
1137
1204
  }
1138
- ue(A, t) {
1205
+ Oe(A, t) {
1139
1206
  const e = A.hmtx;
1140
1207
  return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
1141
1208
  }
1142
- we(A, t, e, B) {
1209
+ Ue(A, t, e, s) {
1143
1210
  if (!A || !A.xs || A.noc === 0) return;
1144
- const { xs: r, ys: i, endPts: s, flags: Q } = A;
1145
- if (!(r && i && s && Q)) return;
1146
- this.ce.beginPath();
1147
- let o = 0;
1148
- for (let g = 0; g < s.length; g++) {
1149
- const a = s[g];
1150
- if (!(a < o)) {
1151
- if (a >= o) {
1152
- const h = t + r[o] * B, l = e - i[o] * B;
1153
- this.ce.moveTo(h, l);
1154
- let c = o + 1;
1211
+ const { xs: r, ys: i, endPts: B, flags: n } = A;
1212
+ if (!(r && i && B && n)) return;
1213
+ this.Ye.beginPath();
1214
+ let Q = 0;
1215
+ for (let h = 0; h < B.length; h++) {
1216
+ const a = B[h];
1217
+ if (!(a < Q)) {
1218
+ if (a >= Q) {
1219
+ const g = t + r[Q] * s, l = e - i[Q] * s;
1220
+ this.Ye.moveTo(g, l);
1221
+ let c = Q + 1;
1155
1222
  for (; c <= a; )
1156
- if (1 & Q[c]) {
1157
- const C = t + r[c] * B, d = e - i[c] * B;
1158
- this.ce.lineTo(C, d), c++;
1223
+ if (1 & n[c]) {
1224
+ const C = t + r[c] * s, d = e - i[c] * s;
1225
+ this.Ye.lineTo(C, d), c++;
1159
1226
  } else {
1160
- const C = t + r[c] * B, d = e - i[c] * B;
1161
- let I = c + 1 > a ? o : c + 1;
1162
- if (1 & Q[I]) {
1163
- const w = t + r[I] * B, m = e - i[I] * B;
1164
- this.ce.quadraticCurveTo(C, d, w, m), c = I + 1;
1227
+ const C = t + r[c] * s, d = e - i[c] * s;
1228
+ let I = c + 1 > a ? Q : c + 1;
1229
+ if (1 & n[I]) {
1230
+ const w = t + r[I] * s, p = e - i[I] * s;
1231
+ this.Ye.quadraticCurveTo(C, d, w, p), c = I + 1;
1165
1232
  } else {
1166
- const w = (C + (t + r[I] * B)) / 2, m = (d + (e - i[I] * B)) / 2;
1167
- this.ce.quadraticCurveTo(C, d, w, m), c = I;
1233
+ const w = (C + (t + r[I] * s)) / 2, p = (d + (e - i[I] * s)) / 2;
1234
+ this.Ye.quadraticCurveTo(C, d, w, p), c = I;
1168
1235
  }
1169
1236
  }
1170
- this.ce.closePath();
1237
+ this.Ye.closePath();
1171
1238
  }
1172
- o = a + 1;
1239
+ Q = a + 1;
1173
1240
  }
1174
1241
  }
1175
- this.ce.fill();
1242
+ this.Ye.fill();
1176
1243
  }
1177
1244
  }
1178
- class mA {
1245
+ class pA {
1179
1246
  constructor() {
1180
- n(this, "ee");
1181
- this.ee = new F();
1247
+ o(this, "fe");
1248
+ this.fe = new S();
1182
1249
  }
1183
1250
  calculateMaxGlyphDimensions(A, t, e) {
1184
- let B = 0;
1185
- const r = this.ee.Ae(e, t), i = r.lineHeight;
1186
- for (const s of A) {
1187
- const Q = this.ee.Xt(e, s);
1188
- if (Q === 0) continue;
1189
- const o = this.ee.qt(e, Q) * r.scale;
1190
- B = Math.max(B, o);
1251
+ let s = 0;
1252
+ const r = this.fe.Ie(e, t), i = r.lineHeight;
1253
+ for (const B of A) {
1254
+ const n = this.fe.Pe(e, B);
1255
+ if (n === 0) continue;
1256
+ const Q = this.fe.ue(e, n) * r.scale;
1257
+ s = Math.max(s, Q);
1191
1258
  }
1192
- return { width: Math.ceil(B), height: Math.ceil(i) };
1259
+ return { width: Math.ceil(s), height: Math.ceil(i) };
1193
1260
  }
1194
1261
  getCharacterAdvanceWidth(A, t, e) {
1195
- const B = this.ee.Ae(e, t), r = this.ee.Xt(e, A);
1196
- return this.ee.qt(e, r) * B.scale;
1262
+ const s = this.fe.Ie(e, t), r = this.fe.Pe(e, A);
1263
+ return this.fe.ue(e, r) * s.scale;
1197
1264
  }
1198
1265
  getFontMetrics(A, t) {
1199
- return this.ee.Ae(t, A);
1266
+ return this.fe.Ie(t, A);
1200
1267
  }
1201
- te() {
1202
- this.ee.te();
1268
+ we() {
1269
+ this.fe.we();
1203
1270
  }
1204
1271
  }
1205
- class pA {
1272
+ class yA {
1206
1273
  constructor() {
1207
- n(this, "De");
1208
- this.De = new F();
1274
+ o(this, "Re");
1275
+ this.Re = new S();
1209
1276
  }
1210
1277
  createCharacterObjects(A, t) {
1211
- return A.map((e, B) => {
1212
- const r = e.codePointAt(0) || 0, i = this.fe(B);
1213
- let s = 0;
1278
+ return A.map((e, s) => {
1279
+ const r = e.codePointAt(0) || 0, i = this.Le(s);
1280
+ let B = 0;
1214
1281
  if (t.hmtx && t.hmtx.aWidth) {
1215
- const Q = this.De.Kt(t, r);
1216
- Q > 0 && t.hmtx.aWidth[Q] !== void 0 && (s = t.hmtx.aWidth[Q]);
1282
+ const n = this.Re.ce(t, r);
1283
+ n > 0 && t.hmtx.aWidth[n] !== void 0 && (B = t.hmtx.aWidth[n]);
1217
1284
  }
1218
- return { character: e, unicode: r, color: i, advanceWidth: s };
1285
+ return { character: e, unicode: r, color: i, advanceWidth: B };
1219
1286
  });
1220
1287
  }
1221
- fe(A) {
1288
+ Le(A) {
1222
1289
  return [A % 256 / 255, Math.floor(A / 256) % 256 / 255, Math.floor(A / 65536) % 256 / 255];
1223
1290
  }
1224
- de(A, t) {
1225
- if (!T.l(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
1226
- const e = t.find((B) => B.character === A);
1291
+ ke(A, t) {
1292
+ if (!_.P(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
1293
+ const e = t.find((s) => s.character === A);
1227
1294
  return e ? e.color : [0, 0, 0];
1228
1295
  }
1229
- pe(A, t) {
1230
- return T.l(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? Array.from(A).map((e) => this.de(e, t) || [0, 0, 0]) : [[0, 0, 0]];
1296
+ He(A, t) {
1297
+ return _.P(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? Array.from(A).map((e) => this.ke(e, t) || [0, 0, 0]) : [[0, 0, 0]];
1231
1298
  }
1232
1299
  }
1233
1300
  class xA {
1234
1301
  constructor(A, t = 16) {
1235
- n(this, "me");
1236
- n(this, "_e", []);
1237
- n(this, "ve");
1238
- n(this, "xe", 16);
1239
- n(this, "ye", 0);
1240
- n(this, "be", 0);
1241
- n(this, "Ge", { width: 0, height: 0 });
1242
- n(this, "$e");
1243
- n(this, "Me");
1244
- n(this, "Ye");
1245
- n(this, "Te");
1246
- n(this, "ze");
1247
- this.xe = t, this.Me = new dA(), this.Ye = new wA(A), this.Te = new mA(), this.ze = new pA();
1248
- }
1249
- async Fe(A) {
1302
+ o(this, "We");
1303
+ o(this, "Je", []);
1304
+ o(this, "Ve");
1305
+ o(this, "Ke", 16);
1306
+ o(this, "Ze", 0);
1307
+ o(this, "je", 0);
1308
+ o(this, "Xe", { width: 0, height: 0 });
1309
+ o(this, "Ne");
1310
+ o(this, "qe");
1311
+ o(this, "AB");
1312
+ o(this, "tB");
1313
+ o(this, "eB");
1314
+ this.Ke = t, this.qe = new wA(), this.AB = new mA(A), this.tB = new pA(), this.eB = new yA();
1315
+ }
1316
+ async BB(A) {
1250
1317
  let t;
1251
1318
  if (A) {
1252
1319
  const e = await fetch(A);
1253
- if (!e.ok) throw new f(`Failed to load font file: ${e.status} ${e.statusText}`);
1320
+ if (!e.ok) throw new m(`Failed to load font file: ${e.status} ${e.statusText}`);
1254
1321
  t = await e.arrayBuffer();
1255
1322
  } else
1256
1323
  t = await (await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAABAAAgAQAAIAEAACABAAAAAQAAIAEAAAABAAAAAQAAIAEAAGABAAAAAQAAAAEAAAABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAEABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAACAAQAAIAEAAAABAAAAAQAAAAEAACABAABAAQAAQAEAAEABAABAAQAAIAEAACABAAAAAQAAAAEAAAABAABAAQAAAAEAACABAAAAAQAAAAEAAIABAAAgAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAYAEAAAABAAAAAQAAQAEAACABAAAAAQAAAAEAAAABAAAgAQAAIAEAACABAAAgAQAAIAEAAAABAABAAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAAAAAIAAAADAAAAFAADAAEAAASaAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAABwAAABIAAAAegAAALwAAADuAAAA9wAAARQAAAExAAABWgAAAW0AAAF7AAABhAAAAY0AAAGvAAAB0gAAAecAAAIOAAACNQAAAk8AAAJsAAACjgAAAqYAAALOAAAC5gAAAvQAAAMHAAADLgAAAzwAAANjAAADhQAAA6UAAAPCAAAD4AAAA/0AAAQaAAAEPAAABEwAAARrAAAEfgAABJEAAASpAAAE0AAABNsAAAT4AAAFFQAABS0AAAVDAAAFZQAABYcAAAWuAAAFvAAABc8AAAXnAAAGBAAABisAAAZDAAAGZQAABnMAAAaVAAAGowAABsUAAAbOAAAG3gAABvYAAAcMAAAHKQAABz8AAAdaAAAHbQAAB4oAAAedAAAHqwAAB8MAAAfgAAAH7gAACAsAAAgjAAAIOwAACFEAAAhsAAAIfAAACJkAAAi2AAAIzgAACOYAAAkDAAAJKgAACUIAAAlfAAAJfAAACYUAAAmiAAAJugAACdcAAAngAAAKBwAACi4AAApgAAAKeQAACokAAAq4AAAKwQAACs8AAArYAAAK8QAACw4AAAshAAALSAAAC1gAAAt1AAALjQAAC5sAAAu0AAALzQAAC9YAAAvhAAAL6gAAC/4AAAwRAAAMJAAADDQAAAxHAAAMUgAADGoAAAyCAAAMlwAADKUAAAy/AAAM0gAADN0AAAz8AAANDwAADSkAAA0yAAANTAAADVUAAA1jAAANfAAADYcAAA2VAAANqQAADcIAAA3mAAAN7wAADg4AAA4XAAAOQQAADloAAA5qAAAOcwAADoYAAA6PAAAOogAADrIAAA7FAAAPCwAADxsAAA8uAAAPRwAAD1AAAA+HAAAPoAAAD6kAAA/CAAAP3wAAD/wAABAZAAAQNgAAEE4AABBfAAAQlQAAEJ4AABCxAAAQugAAEOEAABEnAAARUwAAEWYAABF+AAARlgAAEbgAABJrAAASfgAAEpEAABKpAAASwQAAEswAABLcAAATCAAAExMAABMrAAATQwAAE1sAABNzAAATmgAAE8YAABPeAAAT5wAAE/AAABQSAAAUKgAAFEIAABRaAAAUYwAAFGwAABSOAAAUngAAFLsAABTYAAAU/wAAFSEAABVNAAAVZQAAFX0AABWVAAAVngAAFacAABXTAAAWBAAAFg0AABYvAAAWOgAAFkUAABZxAAAWhAAAFpIAABagAAAWrgAAFrwAABbVAAAW7QAAFxkAABd0AAAXzwAAF/wAABgUAAAYJQAAGC4AABhBAAAYXgAAGHEAABiYAAAYvAAAGOAAABkYAAAZPwAAGWYAABmNAAAZtAAAGdYAABn9AAAaEAAAGi0AAIBgACAAoAEAAADAAcAAAEBAQEBAQEBAYABAAAA/wAAAAEAAAD/AAQAAAD+AAAA/4AAAP8AAAAAAgEAAoADgAQAAAMABwAAAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8ABAAAAP6AAAABgAAA/oAAAAACAIAAgAQAA4AAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAABAAAAAIAAAP+AAAAAgAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAA/4AAAACAAQAAAACAAAADgAAA/4AAAACAAAD/gAAA/4AAAP8AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAABAAAAAIAAAP+A/wAAAAEAAAMAgACABAAEAAAbAB8AIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAABAAAAAIAAAP+AAAD/AAAA/4AAAP8AAAABAAAA/wAAAP+AAAAAgAAAAQD/gAAAAIAAAACAAAAAgAAABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAABQCAAIAEAAOAAAUAHQAjACkALwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAA/4AAAP+AAgABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
1257
1324
  `)).arrayBuffer();
1258
- await this.Re(t), this.me = p.parse(t)[0], await this.Se();
1325
+ await this.sB(t), this.We = y.parse(t)[0], await this.iB();
1259
1326
  }
1260
- Oe(A) {
1261
- if (A === void 0) return this.xe;
1262
- this.xe = A, this.Ge = this.Te.calculateMaxGlyphDimensions(this._e.map((e) => e.character), this.xe, this.me);
1263
- const t = this.Ye.createTextureAtlas(this._e, this.Ge, this.xe, this.me);
1264
- this.ve = t.framebuffer, this.ye = t.columns, this.be = t.rows;
1327
+ QB(A) {
1328
+ if (A === void 0) return this.Ke;
1329
+ this.Ke = A, this.Xe = this.tB.calculateMaxGlyphDimensions(this.Je.map((e) => e.character), this.Ke, this.We);
1330
+ const t = this.AB.createTextureAtlas(this.Je, this.Xe, this.Ke, this.We);
1331
+ this.Ve = t.framebuffer, this.Ze = t.columns, this.je = t.rows;
1265
1332
  }
1266
- async Le(A) {
1333
+ async rB(A) {
1267
1334
  try {
1268
1335
  const t = await fetch(A);
1269
- if (!t.ok) throw new f(`Failed to load font file: ${t.status} ${t.statusText}`);
1336
+ if (!t.ok) throw new m(`Failed to load font file: ${t.status} ${t.statusText}`);
1270
1337
  const e = await t.arrayBuffer();
1271
- await this.Re(e);
1272
- const B = p.parse(e);
1273
- if (!B || B.length === 0) throw Error("Failed to parse font file");
1274
- this.me = B[0], await this.Se();
1338
+ await this.sB(e);
1339
+ const s = y.parse(e);
1340
+ if (!s || s.length === 0) throw Error("Failed to parse font file");
1341
+ this.We = s[0], await this.iB();
1275
1342
  } catch (t) {
1276
- throw new f("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
1343
+ throw new m("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
1277
1344
  }
1278
1345
  }
1279
- async Re(A) {
1346
+ async sB(A) {
1280
1347
  const t = Date.now();
1281
- this.$e = new FontFace("CustomFont_" + t, A), await this.$e.load(), document.fonts.add(this.$e);
1348
+ this.Ne = new FontFace("CustomFont_" + t, A), await this.Ne.load(), document.fonts.add(this.Ne);
1282
1349
  }
1283
- async Se() {
1284
- const A = this.Me.extractCharacters(this.me), t = this.Me.filterProblematicCharacters(A);
1285
- this._e = this.ze.createCharacterObjects(t, this.me), this.Ge = this.Te.calculateMaxGlyphDimensions(t, this.xe, this.me);
1286
- const e = this.Ye.createTextureAtlas(this._e, this.Ge, this.xe, this.me);
1287
- this.ve = e.framebuffer, this.ye = e.columns, this.be = e.rows;
1350
+ async iB() {
1351
+ const A = this.qe.extractCharacters(this.We), t = this.qe.filterProblematicCharacters(A);
1352
+ this.Je = this.eB.createCharacterObjects(t, this.We), this.Xe = this.tB.calculateMaxGlyphDimensions(t, this.Ke, this.We);
1353
+ const e = this.AB.createTextureAtlas(this.Je, this.Xe, this.Ke, this.We);
1354
+ this.Ve = e.framebuffer, this.Ze = e.columns, this.je = e.rows;
1288
1355
  }
1289
- de(A) {
1290
- return this.ze.de(A, this._e);
1356
+ ke(A) {
1357
+ return this.eB.ke(A, this.Je);
1291
1358
  }
1292
- pe(A) {
1293
- return this.ze.pe(A, this._e);
1359
+ He(A) {
1360
+ return this.eB.He(A, this.Je);
1294
1361
  }
1295
1362
  W() {
1296
- this.ve.W(), document.fonts.delete(this.$e);
1363
+ this.Ve.W(), document.fonts.delete(this.Ne);
1297
1364
  }
1298
1365
  get fontFramebuffer() {
1299
- return this.ve;
1366
+ return this.Ve;
1300
1367
  }
1301
1368
  get characters() {
1302
- return this._e;
1369
+ return this.Je;
1303
1370
  }
1304
1371
  get textureColumns() {
1305
- return this.ye;
1372
+ return this.Ze;
1306
1373
  }
1307
1374
  get textureRows() {
1308
- return this.be;
1375
+ return this.je;
1309
1376
  }
1310
1377
  get maxGlyphDimensions() {
1311
- return this.Ge;
1378
+ return this.Xe;
1312
1379
  }
1313
1380
  get fontSize() {
1314
- return this.xe;
1381
+ return this.Ke;
1315
1382
  }
1316
1383
  get font() {
1317
- return this.me;
1384
+ return this.We;
1318
1385
  }
1319
1386
  }
1320
- class yA {
1387
+ class vA {
1321
1388
  constructor(A, t, e) {
1322
- n(this, "Ue");
1323
- n(this, "ke");
1324
- n(this, "I");
1325
- n(this, "u");
1326
- n(this, "We");
1327
- n(this, "He");
1328
- n(this, "Je");
1329
- n(this, "Ve");
1330
- n(this, "Ke");
1331
- this.Je = A, this.Ve = t, this.Ke = e, this.lA();
1332
- }
1333
- lA() {
1334
- this.Ue = Math.floor(this.Je.width / this.Ve), this.ke = Math.floor(this.Je.height / this.Ke), this.I = this.Ue * this.Ve, this.u = this.ke * this.Ke, this.We = Math.floor((this.Je.width - this.I) / 2), this.He = Math.floor((this.Je.height - this.u) / 2);
1335
- }
1336
- je(A, t) {
1337
- this.Ve = A, this.Ke = t, this.lA();
1389
+ o(this, "EB");
1390
+ o(this, "nB");
1391
+ o(this, "I");
1392
+ o(this, "p");
1393
+ o(this, "oB");
1394
+ o(this, "gB");
1395
+ o(this, "aB");
1396
+ o(this, "hB");
1397
+ o(this, "cB");
1398
+ this.aB = A, this.hB = t, this.cB = e, this.fA();
1399
+ }
1400
+ fA() {
1401
+ this.EB = Math.floor(this.aB.width / this.hB), this.nB = Math.floor(this.aB.height / this.cB), this.I = this.EB * this.hB, this.p = this.nB * this.cB, this.oB = Math.floor((this.aB.width - this.I) / 2), this.gB = Math.floor((this.aB.height - this.p) / 2);
1402
+ }
1403
+ CB(A, t) {
1404
+ this.hB = A, this.cB = t, this.fA();
1338
1405
  }
1339
1406
  get cellWidth() {
1340
- return this.Ve;
1407
+ return this.hB;
1341
1408
  }
1342
1409
  get cellHeight() {
1343
- return this.Ke;
1410
+ return this.cB;
1344
1411
  }
1345
1412
  get cols() {
1346
- return this.Ue;
1413
+ return this.EB;
1347
1414
  }
1348
1415
  get rows() {
1349
- return this.ke;
1416
+ return this.nB;
1350
1417
  }
1351
1418
  get width() {
1352
1419
  return this.I;
1353
1420
  }
1354
1421
  get height() {
1355
- return this.u;
1422
+ return this.p;
1356
1423
  }
1357
1424
  get offsetX() {
1358
- return this.We;
1425
+ return this.oB;
1359
1426
  }
1360
1427
  get offsetY() {
1361
- return this.He;
1428
+ return this.gB;
1362
1429
  }
1363
1430
  }
1364
- class vA {
1431
+ class bA {
1365
1432
  constructor(A = {}) {
1366
- n(this, "Je");
1367
- n(this, "Ze");
1368
- n(this, "Ne");
1369
- A.canvas ? (this.Je = A.canvas, this.Ne = !1) : (this.Je = this.Xe(A.width, A.height), this.Ne = !0), this.Je.style.imageRendering = "pixelated";
1433
+ o(this, "aB");
1434
+ o(this, "DB");
1435
+ o(this, "lB");
1436
+ A.canvas ? (this.aB = A.canvas, this.lB = !1) : (this.aB = this.PB(A.width, A.height), this.lB = !0), this.aB.style.imageRendering = "pixelated";
1370
1437
  }
1371
- Xe(A, t) {
1438
+ PB(A, t) {
1372
1439
  const e = document.createElement("canvas");
1373
1440
  return e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", e.width = A || 800, e.height = t || 600, document.body.appendChild(e), e;
1374
1441
  }
1375
- S(A, t) {
1376
- this.Je.width = A ?? this.Je.width, this.Je.height = t ?? this.Je.height;
1442
+ O(A, t) {
1443
+ this.aB.width = A ?? this.aB.width, this.aB.height = t ?? this.aB.height;
1377
1444
  }
1378
- qe() {
1379
- const A = this.Je.getContext("webgl2", { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
1380
- if (!A) throw new f("`textmode.js` requires WebGL2 support.");
1445
+ uB() {
1446
+ const A = this.aB.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
1447
+ if (!A) throw new m("`textmode.js` requires WebGL2 support.");
1381
1448
  return A;
1382
1449
  }
1383
1450
  W() {
1384
- this.Ze && this.Ze.disconnect();
1385
- const A = this.Je.getContext("webgl") || this.Je.getContext("webgl2");
1451
+ this.DB && this.DB.disconnect();
1452
+ const A = this.aB.getContext("webgl") || this.aB.getContext("webgl2");
1386
1453
  if (A) {
1387
1454
  const t = A.getExtension("WEBGL_lose_context");
1388
1455
  t && t.loseContext();
1389
1456
  }
1390
- this.Ne && this.Je.parentNode && this.Je.parentNode.removeChild(this.Je);
1457
+ this.lB && this.aB.parentNode && this.aB.parentNode.removeChild(this.aB);
1391
1458
  }
1392
1459
  get canvas() {
1393
- return this.Je;
1460
+ return this.aB;
1394
1461
  }
1395
1462
  get width() {
1396
- return this.Je.width;
1463
+ return this.aB.width;
1397
1464
  }
1398
1465
  get height() {
1399
- return this.Je.height;
1466
+ return this.aB.height;
1400
1467
  }
1401
1468
  }
1402
- class bA {
1469
+ class RA {
1403
1470
  constructor(A = 60) {
1404
- n(this, "AB");
1405
- n(this, "tB");
1406
- n(this, "eB", null);
1407
- n(this, "BB", 0);
1408
- n(this, "QB", !0);
1409
- n(this, "sB", 0);
1410
- n(this, "EB", 0);
1411
- n(this, "iB", []);
1412
- n(this, "rB", 10);
1413
- n(this, "nB", 0);
1414
- this.AB = A, this.tB = 1e3 / A;
1471
+ o(this, "IB");
1472
+ o(this, "wB");
1473
+ o(this, "fB", null);
1474
+ o(this, "dB", 0);
1475
+ o(this, "pB", !0);
1476
+ o(this, "_B", 0);
1477
+ o(this, "mB", 0);
1478
+ o(this, "vB", []);
1479
+ o(this, "xB", 10);
1480
+ o(this, "yB", 0);
1481
+ this.IB = A, this.wB = 1e3 / A;
1415
1482
  }
1416
1483
  start(A) {
1417
- if (!this.QB) return;
1418
- this.BB = performance.now();
1484
+ if (!this.pB) return;
1485
+ this.dB = performance.now();
1419
1486
  const t = (e) => {
1420
- if (!this.QB) return void (this.eB = null);
1421
- const B = e - this.BB;
1422
- B >= this.tB && (A(), this.BB = e - B % this.tB), this.QB && (this.eB = requestAnimationFrame(t));
1487
+ if (!this.pB) return void (this.fB = null);
1488
+ const s = e - this.dB;
1489
+ s >= this.wB && (A(), this.dB = e - s % this.wB), this.pB && (this.fB = requestAnimationFrame(t));
1423
1490
  };
1424
- this.eB = requestAnimationFrame(t);
1491
+ this.fB = requestAnimationFrame(t);
1425
1492
  }
1426
1493
  stop() {
1427
- this.eB && (cancelAnimationFrame(this.eB), this.eB = null);
1494
+ this.fB && (cancelAnimationFrame(this.fB), this.fB = null);
1428
1495
  }
1429
1496
  pause() {
1430
- this.QB && (this.QB = !1, this.stop());
1497
+ this.pB && (this.pB = !1, this.stop());
1431
1498
  }
1432
1499
  resume(A) {
1433
- this.QB || (this.QB = !0, this.start(A));
1500
+ this.pB || (this.pB = !0, this.start(A));
1434
1501
  }
1435
1502
  frameRate(A, t) {
1436
- if (A === void 0) return this.sB;
1437
- this.AB = A, this.tB = 1e3 / A, this.QB && t && (this.stop(), this.start(t));
1503
+ if (A === void 0) return this._B;
1504
+ this.IB = A, this.wB = 1e3 / A, this.pB && t && (this.stop(), this.start(t));
1438
1505
  }
1439
1506
  measureFrameRate() {
1440
1507
  const A = performance.now();
1441
- if (this.EB > 0) {
1442
- const t = A - this.EB;
1443
- this.iB.push(t), this.iB.length > this.rB && this.iB.shift();
1444
- const e = this.iB.reduce((B, r) => B + r, 0) / this.iB.length;
1445
- this.sB = 1e3 / e;
1508
+ if (this.mB > 0) {
1509
+ const t = A - this.mB;
1510
+ this.vB.push(t), this.vB.length > this.xB && this.vB.shift();
1511
+ const e = this.vB.reduce((s, r) => s + r, 0) / this.vB.length;
1512
+ this._B = 1e3 / e;
1446
1513
  }
1447
- this.EB = A;
1514
+ this.mB = A;
1448
1515
  }
1449
1516
  get isLooping() {
1450
- return this.QB;
1517
+ return this.pB;
1451
1518
  }
1452
1519
  get frameRateLimit() {
1453
- return this.AB;
1520
+ return this.IB;
1454
1521
  }
1455
1522
  get currentFrameRate() {
1456
- return this.sB;
1523
+ return this._B;
1457
1524
  }
1458
1525
  get frameCount() {
1459
- return this.nB;
1526
+ return this.yB;
1460
1527
  }
1461
1528
  set frameCount(A) {
1462
- this.nB = A;
1529
+ this.yB = A;
1463
1530
  }
1464
1531
  incrementFrame() {
1465
- this.nB++;
1532
+ this.yB++;
1466
1533
  }
1467
1534
  resetFrameCount() {
1468
- this.nB = 0;
1535
+ this.yB = 0;
1469
1536
  }
1470
1537
  }
1471
- const RA = (E) => class extends E {
1472
- rotate(A) {
1473
- this.Ce.state.uA(A);
1538
+ const TA = (E) => class extends E {
1539
+ rotate(A = 0, t = 0, e = 0) {
1540
+ this.ze.state._A(A), this.ze.state.mA(t), this.ze.state.vA(e);
1541
+ }
1542
+ rotateX(A) {
1543
+ this.ze.state._A(A);
1544
+ }
1545
+ rotateY(A) {
1546
+ this.ze.state.mA(A);
1547
+ }
1548
+ rotateZ(A) {
1549
+ this.ze.state.vA(A);
1474
1550
  }
1475
1551
  push() {
1476
- this.Ce.state.CA();
1552
+ this.ze.state.IA();
1477
1553
  }
1478
1554
  pop() {
1479
- this.Ce.state.DA();
1555
+ this.ze.state.wA();
1480
1556
  }
1481
- rect(A, t, e = 1, B = 1) {
1482
- this.Ce.$t(A, t, e, B);
1557
+ rect(A, t, e = 1, s = 1) {
1558
+ this.ze.Nt(A, t, e, s);
1483
1559
  }
1484
- line(A, t, e, B) {
1485
- this.Ce.Mt(A, t, e, B);
1560
+ line(A, t, e, s) {
1561
+ this.ze.qt(A, t, e, s);
1486
1562
  }
1487
1563
  lineWeight(A) {
1488
- this.Ce.state.IA(A);
1564
+ this.ze.state.pA(A);
1489
1565
  }
1490
- background(A, t = A, e = A, B = 255) {
1491
- this.Ce.St(A, t, e, B);
1566
+ background(A, t = A, e = A, s = 255) {
1567
+ this.ze.ie(A, t, e, s);
1492
1568
  }
1493
1569
  char(A) {
1494
- this.Ce.state.wA(this.me.de(A));
1570
+ this.ze.state.xA(this.We.ke(A));
1495
1571
  }
1496
- charColor(A, t, e, B) {
1497
- this.Ce.state.fA(A, t, e, B);
1572
+ charColor(A, t, e) {
1573
+ this.ze.state.yA(A, t, e);
1498
1574
  }
1499
- cellColor(A, t, e, B) {
1500
- this.Ce.state.dA(A, t, e, B);
1575
+ cellColor(A, t, e) {
1576
+ this.ze.state.bA(A, t, e);
1501
1577
  }
1502
1578
  flipHorizontally(A) {
1503
- this.Ce.state.pA(A);
1579
+ this.ze.state.GA(A);
1504
1580
  }
1505
1581
  flipVertically(A) {
1506
- this.Ce.state.mA(A);
1582
+ this.ze.state.$A(A);
1507
1583
  }
1508
1584
  charRotation(A) {
1509
- this.Ce.state.vA(A);
1585
+ this.ze.state.YA(A);
1510
1586
  }
1511
1587
  invert(A) {
1512
- this.Ce.state._A(A);
1588
+ this.ze.state.MA(A);
1513
1589
  }
1514
1590
  clear() {
1515
- this.Ce.jA();
1591
+ this.ze.ie(0, 0, 0, 0);
1592
+ }
1593
+ ellipse(A, t, e, s) {
1594
+ this.ze.Ae(A, t, e / 2, s / 2);
1516
1595
  }
1517
- ellipse(A, t, e, B) {
1518
- this.Ce.Yt(A, t, e / 2, B / 2);
1596
+ triangle(A, t, e, s, r, i) {
1597
+ this.ze.te(A, t, e, s, r, i);
1519
1598
  }
1520
- triangle(A, t, e, B, r, i) {
1521
- this.Ce.Tt(A, t, e, B, r, i);
1599
+ bezierCurve(A, t, e, s, r, i, B, n) {
1600
+ this.ze.ee(A, t, e, s, r, i, B, n);
1522
1601
  }
1523
- bezierCurve(A, t, e, B, r, i, s, Q) {
1524
- this.Ce.zt(A, t, e, B, r, i, s, Q);
1602
+ arc(A, t, e, s, r, i) {
1603
+ this.ze.se(A, t, e, s, r, i);
1525
1604
  }
1526
- arc(A, t, e, B, r, i) {
1527
- this.Ce.Rt(A, t, e, B, r, i);
1605
+ shader(A) {
1606
+ this.ze.Vt(A);
1607
+ }
1608
+ setUniform(A, t) {
1609
+ this.ze.Kt(A, t);
1610
+ }
1611
+ setUniforms(A) {
1612
+ this.ze.Zt(A);
1613
+ }
1614
+ createFilterShader(A) {
1615
+ return this.ze.jt(A);
1528
1616
  }
1529
1617
  };
1530
- class U {
1531
- gB(A) {
1532
- const t = A.O(0), e = A.O(1), B = A.O(2), r = A.O(3);
1533
- return { characterPixels: t, primaryColorPixels: e, secondaryColorPixels: B, transformPixels: A.O(4), rotationPixels: r };
1618
+ class L {
1619
+ bB(A) {
1620
+ const t = A.U(0), e = A.U(1), s = A.U(2), r = A.U(3);
1621
+ return { characterPixels: t, primaryColorPixels: e, secondaryColorPixels: s, transformPixels: A.U(4), rotationPixels: r };
1534
1622
  }
1535
- oB(A, t) {
1623
+ GB(A, t) {
1536
1624
  return A[t] + (A[t + 1] << 8);
1537
1625
  }
1538
- aB(A, t) {
1626
+ $B(A, t) {
1539
1627
  return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
1540
1628
  }
1541
1629
  }
1542
- class Y {
1543
- hB(A, t) {
1630
+ class W {
1631
+ MB(A, t) {
1544
1632
  return new Blob([A], { type: t });
1545
1633
  }
1546
- cB(A, t, e) {
1634
+ YB(A, t, e) {
1547
1635
  try {
1548
- const B = this.hB(A, e), r = URL.createObjectURL(B), i = document.createElement("a");
1636
+ const s = this.MB(A, e), r = URL.createObjectURL(s), i = document.createElement("a");
1549
1637
  i.href = r, i.download = t, i.style.display = "none", i.rel = "noopener", document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r);
1550
- } catch (B) {
1551
- throw console.error("Failed to download file:", B), Error("File download failed: " + (B instanceof Error ? B.message : "Unknown error"));
1638
+ } catch (s) {
1639
+ throw console.error("Failed to download file:", s), Error("File download failed: " + (s instanceof Error ? s.message : "Unknown error"));
1552
1640
  }
1553
1641
  }
1554
- CB() {
1642
+ zB() {
1555
1643
  return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
1556
1644
  }
1557
- DB() {
1645
+ RB() {
1558
1646
  const A = /* @__PURE__ */ new Date();
1559
1647
  return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
1560
1648
  }
1561
- lB(A) {
1649
+ TB(A) {
1562
1650
  return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
1563
1651
  }
1564
- PB() {
1565
- return "'textmode-export'-" + this.CB();
1652
+ SB() {
1653
+ return "textmode-export-" + this.zB();
1566
1654
  }
1567
1655
  }
1568
- class TA extends U {
1569
- IB(A, t, e) {
1570
- const B = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, s = t[e], Q = t[e + 1];
1571
- return { isInverted: B, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (s + Q / 255) / 255 * 100) / 100 };
1656
+ class MA extends L {
1657
+ FB(A, t, e) {
1658
+ const s = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, B = t[e], n = t[e + 1];
1659
+ return { isInverted: s, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (B + n / 255) / 255 * 100) / 100 };
1572
1660
  }
1573
- uB(A, t, e) {
1661
+ OB(A, t, e) {
1574
1662
  return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
1575
1663
  }
1576
- wB(A, t) {
1664
+ UB(A, t) {
1577
1665
  const e = [];
1578
- let B = 0;
1666
+ let s = 0;
1579
1667
  for (let r = 0; r < t.rows; r++) for (let i = 0; i < t.cols; i++) {
1580
- const s = 4 * B, Q = this.oB(A.characterPixels, s);
1581
- let o = this.aB(A.primaryColorPixels, s), g = this.aB(A.secondaryColorPixels, s);
1582
- const a = this.IB(A.transformPixels, A.rotationPixels, s);
1668
+ const B = 4 * s, n = this.GB(A.characterPixels, B);
1669
+ let Q = this.$B(A.primaryColorPixels, B), h = this.$B(A.secondaryColorPixels, B);
1670
+ const a = this.FB(A.transformPixels, A.rotationPixels, B);
1583
1671
  if (a.isInverted) {
1584
- const l = o;
1585
- o = g, g = l;
1672
+ const l = Q;
1673
+ Q = h, h = l;
1586
1674
  }
1587
- const h = this.uB(i, r, t);
1588
- e.push({ charIndex: Q, primaryColor: o, secondaryColor: g, transform: a, position: h }), B++;
1675
+ const g = this.OB(i, r, t);
1676
+ e.push({ charIndex: n, primaryColor: Q, secondaryColor: h, transform: a, position: g }), s++;
1589
1677
  }
1590
1678
  return e;
1591
1679
  }
1592
1680
  }
1593
1681
  class _A {
1594
- fB(A, t) {
1682
+ LB(A, t) {
1595
1683
  const e = A.cmap;
1596
- for (const B of e.tables) if (B.format === 4) {
1597
- const r = B;
1684
+ for (const s of e.tables) if (s.format === 4) {
1685
+ const r = s;
1598
1686
  for (let i = 0; i < r.startCount.length; i++) if (t >= r.startCount[i] && t <= r.endCount[i]) {
1599
1687
  if (r.idRangeOffset[i] === 0) return t + r.idDelta[i] & 65535;
1600
1688
  {
1601
- const s = r.idRangeOffset[i] / 2 + (t - r.startCount[i]) - (r.startCount.length - i);
1602
- if (s >= 0 && s < r.glyphIdArray.length) {
1603
- const Q = r.glyphIdArray[s];
1604
- if (Q !== 0) return Q + r.idDelta[i] & 65535;
1689
+ const B = r.idRangeOffset[i] / 2 + (t - r.startCount[i]) - (r.startCount.length - i);
1690
+ if (B >= 0 && B < r.glyphIdArray.length) {
1691
+ const n = r.glyphIdArray[B];
1692
+ if (n !== 0) return n + r.idDelta[i] & 65535;
1605
1693
  }
1606
1694
  }
1607
1695
  }
1608
- } else if (B.format === 12) {
1609
- const r = B;
1696
+ } else if (s.format === 12) {
1697
+ const r = s;
1610
1698
  for (let i = 0; i < r.groups.length; i += 3) {
1611
- const s = r.groups[i], Q = r.groups[i + 1], o = r.groups[i + 2];
1612
- if (t >= s && t <= Q) return o + (t - s);
1699
+ const B = r.groups[i], n = r.groups[i + 1], Q = r.groups[i + 2];
1700
+ if (t >= B && t <= n) return Q + (t - B);
1613
1701
  }
1614
1702
  }
1615
1703
  return 0;
1616
1704
  }
1617
- dB(A, t, e, B, r) {
1705
+ kB(A, t, e, s, r) {
1618
1706
  const i = r / A.head.unitsPerEm;
1619
- return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: B + -t.yMax * i, x2: e + t.xMax * i, y2: B + -t.yMin * i }), toSVG: () => this.pB(t, e, B, i) };
1707
+ return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.HB(t, e, s, i) };
1620
1708
  }
1621
- pB(A, t, e, B) {
1709
+ HB(A, t, e, s) {
1622
1710
  if (!A || !A.xs) return "";
1623
- const { xs: r, ys: i, endPts: s, flags: Q } = A;
1624
- if (!(r && i && s && Q)) return "";
1625
- let o = "", g = 0;
1626
- for (let a = 0; a < s.length; a++) {
1627
- const h = s[a];
1628
- if (!(h < g)) {
1629
- if (h >= g) {
1630
- const l = t + r[g] * B, c = e - i[g] * B;
1631
- o += `M${l.toFixed(2)},${c.toFixed(2)}`;
1632
- let C = g + 1;
1633
- for (; C <= h; )
1634
- if (1 & Q[C]) {
1635
- const d = t + r[C] * B, I = e - i[C] * B;
1636
- o += `L${d.toFixed(2)},${I.toFixed(2)}`, C++;
1711
+ const { xs: r, ys: i, endPts: B, flags: n } = A;
1712
+ if (!(r && i && B && n)) return "";
1713
+ let Q = "", h = 0;
1714
+ for (let a = 0; a < B.length; a++) {
1715
+ const g = B[a];
1716
+ if (!(g < h)) {
1717
+ if (g >= h) {
1718
+ const l = t + r[h] * s, c = e - i[h] * s;
1719
+ Q += `M${l.toFixed(2)},${c.toFixed(2)}`;
1720
+ let C = h + 1;
1721
+ for (; C <= g; )
1722
+ if (1 & n[C]) {
1723
+ const d = t + r[C] * s, I = e - i[C] * s;
1724
+ Q += `L${d.toFixed(2)},${I.toFixed(2)}`, C++;
1637
1725
  } else {
1638
- const d = t + r[C] * B, I = e - i[C] * B;
1639
- let w = C + 1 > h ? g : C + 1;
1640
- if (1 & Q[w]) {
1641
- const m = t + r[w] * B, R = e - i[w] * B;
1642
- o += `Q${d.toFixed(2)},${I.toFixed(2)} ${m.toFixed(2)},${R.toFixed(2)}`, C = w + 1;
1726
+ const d = t + r[C] * s, I = e - i[C] * s;
1727
+ let w = C + 1 > g ? h : C + 1;
1728
+ if (1 & n[w]) {
1729
+ const p = t + r[w] * s, u = e - i[w] * s;
1730
+ Q += `Q${d.toFixed(2)},${I.toFixed(2)} ${p.toFixed(2)},${u.toFixed(2)}`, C = w + 1;
1643
1731
  } else {
1644
- const m = (d + (t + r[w] * B)) / 2, R = (I + (e - i[w] * B)) / 2;
1645
- o += `Q${d.toFixed(2)},${I.toFixed(2)} ${m.toFixed(2)},${R.toFixed(2)}`, C = w;
1732
+ const p = (d + (t + r[w] * s)) / 2, u = (I + (e - i[w] * s)) / 2;
1733
+ Q += `Q${d.toFixed(2)},${I.toFixed(2)} ${p.toFixed(2)},${u.toFixed(2)}`, C = w;
1646
1734
  }
1647
1735
  }
1648
- o += "Z";
1736
+ Q += "Z";
1649
1737
  }
1650
- g = h + 1;
1738
+ h = g + 1;
1651
1739
  }
1652
1740
  }
1653
- return o;
1741
+ return Q;
1654
1742
  }
1655
- mB(A, t, e, B, r) {
1656
- const i = A.codePointAt(0) || 0, s = this.fB(t, i);
1657
- let Q = null;
1658
- return t.glyf && t.glyf[s] !== null ? Q = t.glyf[s] : (Q = p.T.glyf.Ut(t, s), t.glyf[s] = Q), this.dB(t, Q, e, B, r);
1743
+ WB(A, t, e, s, r) {
1744
+ const i = A.codePointAt(0) || 0, B = this.LB(t, i);
1745
+ let n = null;
1746
+ return t.glyf && t.glyf[B] !== null ? n = t.glyf[B] : (n = y.T.glyf.Ee(t, B), t.glyf[B] = n), this.kB(t, n, e, s, r);
1659
1747
  }
1660
- _B(A, t, e, B, r, i, s, Q) {
1661
- const o = e + (r - Q * (s / t.head.unitsPerEm)) / 2, g = B + (i + 0.7 * s) / 2;
1662
- return this.mB(A, t, o, g, s).toSVG() || null;
1748
+ JB(A, t, e, s, r, i, B, n) {
1749
+ const Q = e + (r - n * (B / t.head.unitsPerEm)) / 2, h = s + (i + 0.7 * B) / 2;
1750
+ return this.WB(A, t, Q, h, B).toSVG() || null;
1663
1751
  }
1664
1752
  }
1665
1753
  class GA {
1666
1754
  constructor() {
1667
- n(this, "vB");
1668
- this.vB = new _A();
1755
+ o(this, "VB");
1756
+ this.VB = new _A();
1669
1757
  }
1670
- xB(A) {
1758
+ KB(A) {
1671
1759
  return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1672
1760
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
1673
1761
  <svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
@@ -1675,173 +1763,173 @@ class GA {
1675
1763
  <title>textmode art generated via textmode.js</title>
1676
1764
  <desc>textmode art visualization generated by textmode.js library</desc>`;
1677
1765
  }
1678
- yB() {
1766
+ ZB() {
1679
1767
  return `
1680
1768
  </g>
1681
1769
  </svg>`;
1682
1770
  }
1683
- bB(A, t) {
1771
+ jB(A, t) {
1684
1772
  if (!t.includeBackgroundRectangles) return "";
1685
- const e = t.backgroundColor, B = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
1773
+ const e = t.backgroundColor, s = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
1686
1774
  return `
1687
- <rect width="${A.width}" height="${A.height}" fill="${B}" />`;
1775
+ <rect width="${A.width}" height="${A.height}" fill="${s}" />`;
1688
1776
  }
1689
- GB(A) {
1777
+ XB(A) {
1690
1778
  return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
1691
1779
  }
1692
- $B(A, t) {
1693
- const { transform: e, position: B } = A, r = B.cellX + t.cellWidth / 2, i = B.cellY + t.cellHeight / 2, s = [];
1780
+ NB(A, t) {
1781
+ const { transform: e, position: s } = A, r = s.cellX + t.cellWidth / 2, i = s.cellY + t.cellHeight / 2, B = [];
1694
1782
  if (e.flipHorizontal || e.flipVertical) {
1695
- const Q = e.flipHorizontal ? -1 : 1, o = e.flipVertical ? -1 : 1;
1696
- s.push(`translate(${r} ${i})`), s.push(`scale(${Q} ${o})`), s.push(`translate(${-r} ${-i})`);
1783
+ const n = e.flipHorizontal ? -1 : 1, Q = e.flipVertical ? -1 : 1;
1784
+ B.push(`translate(${r} ${i})`), B.push(`scale(${n} ${Q})`), B.push(`translate(${-r} ${-i})`);
1697
1785
  }
1698
- return e.rotation && s.push(`rotate(${e.rotation} ${r} ${i})`), s.length ? ` transform="${s.join(" ")}"` : "";
1786
+ return e.rotation && B.push(`rotate(${e.rotation} ${r} ${i})`), B.length ? ` transform="${B.join(" ")}"` : "";
1699
1787
  }
1700
- MB(A, t, e) {
1788
+ qB(A, t, e) {
1701
1789
  if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
1702
- const { position: B } = A, r = this.GB(A.secondaryColor);
1790
+ const { position: s } = A, r = this.XB(A.secondaryColor);
1703
1791
  return e.drawMode === "stroke" ? `
1704
- <rect x="${B.cellX}" y="${B.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
1705
- <rect x="${B.cellX}" y="${B.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
1792
+ <rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
1793
+ <rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
1706
1794
  }
1707
- mB(A, t, e, B) {
1795
+ WB(A, t, e, s) {
1708
1796
  const r = e.characters[A.charIndex];
1709
1797
  if (!r) return "";
1710
- const i = this.vB._B(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
1798
+ const i = this.VB.JB(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
1711
1799
  if (!i) return "";
1712
- const s = this.GB(A.primaryColor);
1713
- return B.drawMode === "stroke" ? `
1714
- <path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${s}" stroke-width="${B.strokeWidth}" fill="none" />` : `
1715
- <path d="${i}" fill="${s}" />`;
1800
+ const B = this.XB(A.primaryColor);
1801
+ return s.drawMode === "stroke" ? `
1802
+ <path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${B}" stroke-width="${s.strokeWidth}" fill="none" />` : `
1803
+ <path d="${i}" fill="${B}" />`;
1716
1804
  }
1717
- YB(A, t, e, B) {
1805
+ As(A, t, e, s) {
1718
1806
  let r = "";
1719
- r += this.MB(A, t, B);
1720
- const i = this.$B(A, t), s = this.mB(A, t, e, B);
1721
- return s && (i ? (r += `
1722
- <g${i}>`, r += s, r += `
1723
- </g>`) : r += s), r;
1724
- }
1725
- TB(A, t, e, B) {
1726
- let r = this.xB(t);
1727
- r += this.bB(t, B), r += `
1807
+ r += this.qB(A, t, s);
1808
+ const i = this.NB(A, t), B = this.WB(A, t, e, s);
1809
+ return B && (i ? (r += `
1810
+ <g${i}>`, r += B, r += `
1811
+ </g>`) : r += B), r;
1812
+ }
1813
+ ts(A, t, e, s) {
1814
+ let r = this.KB(t);
1815
+ r += this.jB(t, s), r += `
1728
1816
  <g id="ascii-cells">`;
1729
- for (const i of A) r += this.YB(i, t, e, B);
1730
- return r += this.yB(), r;
1817
+ for (const i of A) r += this.As(i, t, e, s);
1818
+ return r += this.ZB(), r;
1731
1819
  }
1732
- zB(A) {
1820
+ es(A) {
1733
1821
  return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
1734
1822
  `).replace(/[ \t]+$/gm, "");
1735
1823
  }
1736
1824
  }
1737
- class MA extends Y {
1738
- FB(A) {
1739
- return this.hB(A, "image/svg+xml;charset=utf-8");
1825
+ class YA extends W {
1826
+ Bs(A) {
1827
+ return this.MB(A, "image/svg+xml;charset=utf-8");
1740
1828
  }
1741
- RB(A, t) {
1742
- this.cB(A, this.lB(t) + ".svg", "image/svg+xml;charset=utf-8");
1829
+ ss(A, t) {
1830
+ this.YB(A, this.TB(t) + ".svg", "image/svg+xml;charset=utf-8");
1743
1831
  }
1744
- SB(A, t) {
1745
- this.RB(A, t || this.PB());
1832
+ Qs(A, t) {
1833
+ this.ss(A, t || this.SB());
1746
1834
  }
1747
1835
  }
1748
- class W {
1836
+ class H {
1749
1837
  constructor() {
1750
- n(this, "OB");
1751
- n(this, "LB");
1752
- n(this, "UB");
1753
- this.OB = new TA(), this.LB = new GA(), this.UB = new MA();
1838
+ o(this, "rs");
1839
+ o(this, "Es");
1840
+ o(this, "ns");
1841
+ this.rs = new MA(), this.Es = new GA(), this.ns = new YA();
1754
1842
  }
1755
- kB(A) {
1756
- return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.UB.PB() };
1843
+ gs(A) {
1844
+ return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0], filename: A.filename || this.ns.SB() };
1757
1845
  }
1758
- WB(A, t = {}) {
1759
- const e = this.OB.wB(this.OB.gB(A.pipeline), A.grid), B = this.LB.TB(e, A.grid, A.font, this.kB(t));
1760
- return this.LB.zB(B);
1846
+ hs(A, t = {}) {
1847
+ const e = this.rs.UB(this.rs.bB(A.pipeline), A.grid), s = this.Es.ts(e, A.grid, A.font, this.gs(t));
1848
+ return this.Es.es(s);
1761
1849
  }
1762
- SB(A, t = {}) {
1763
- this.UB.SB(this.WB(A, t), t.filename);
1850
+ Qs(A, t = {}) {
1851
+ this.ns.Qs(this.hs(A, t), t.filename);
1764
1852
  }
1765
1853
  }
1766
- class FA extends U {
1767
- HB(A, t, e, B = " ") {
1768
- var s;
1854
+ class SA extends L {
1855
+ cs(A, t, e, s = " ") {
1856
+ var B;
1769
1857
  const r = [];
1770
1858
  let i = 0;
1771
- for (let Q = 0; Q < t.rows; Q++) {
1772
- const o = [];
1773
- for (let g = 0; g < t.cols; g++) {
1774
- const a = 4 * i, h = this.oB(A.characterPixels, a), l = ((s = e.characters[h]) == null ? void 0 : s.character) || B;
1775
- o.push(l), i++;
1859
+ for (let n = 0; n < t.rows; n++) {
1860
+ const Q = [];
1861
+ for (let h = 0; h < t.cols; h++) {
1862
+ const a = 4 * i, g = this.GB(A.characterPixels, a), l = ((B = e.characters[g]) == null ? void 0 : B.character) || s;
1863
+ Q.push(l), i++;
1776
1864
  }
1777
- r.push(o);
1865
+ r.push(Q);
1778
1866
  }
1779
1867
  return r;
1780
1868
  }
1781
1869
  }
1782
- class SA {
1783
- JB(A, t) {
1870
+ class FA {
1871
+ Cs(A, t) {
1784
1872
  const e = [];
1785
1873
  for (const r of A) {
1786
1874
  let i = r.join("");
1787
1875
  t.preserveTrailingSpaces || (i = i.replace(/\s+$/, "")), e.push(i);
1788
1876
  }
1789
- const B = t.lineEnding === "crlf" ? `\r
1877
+ const s = t.lineEnding === "crlf" ? `\r
1790
1878
  ` : `
1791
1879
  `;
1792
- return e.join(B);
1880
+ return e.join(s);
1793
1881
  }
1794
1882
  }
1795
- class UA extends Y {
1796
- VB(A, t) {
1797
- const e = this.KB(t);
1798
- this.cB(A, e, "text/plain;charset=utf-8");
1883
+ class zA extends W {
1884
+ Ds(A, t) {
1885
+ const e = this.ls(t);
1886
+ this.YB(A, e, "text/plain;charset=utf-8");
1799
1887
  }
1800
- KB(A) {
1801
- let t = this.lB(A);
1802
- return t === ".txt" || t.length <= 4 ? this.PB() : t;
1888
+ ls(A) {
1889
+ let t = this.TB(A);
1890
+ return t === ".txt" || t.length <= 4 ? this.SB() : t;
1803
1891
  }
1804
1892
  }
1805
- class N {
1893
+ class J {
1806
1894
  constructor() {
1807
- n(this, "OB");
1808
- n(this, "LB");
1809
- n(this, "UB");
1810
- this.OB = new FA(), this.LB = new SA(), this.UB = new UA();
1895
+ o(this, "rs");
1896
+ o(this, "Es");
1897
+ o(this, "ns");
1898
+ this.rs = new SA(), this.Es = new FA(), this.ns = new zA();
1811
1899
  }
1812
- kB(A) {
1813
- return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.UB.PB() };
1900
+ gs(A) {
1901
+ return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " ", filename: A.filename || this.ns.SB() };
1814
1902
  }
1815
- jB(A, t = {}) {
1816
- const e = this.kB(t), B = this.OB.HB(this.OB.gB(A.pipeline), A.grid, A.font, e.emptyCharacter);
1817
- return this.LB.JB(B, e);
1903
+ Ps(A, t = {}) {
1904
+ const e = this.gs(t), s = this.rs.cs(this.rs.bB(A.pipeline), A.grid, A.font, e.emptyCharacter);
1905
+ return this.Es.Cs(s, e);
1818
1906
  }
1819
- VB(A, t = {}) {
1820
- this.UB.VB(this.jB(A, t), t.filename);
1907
+ Ds(A, t = {}) {
1908
+ this.ns.Ds(this.Ps(A, t), t.filename);
1821
1909
  }
1822
1910
  }
1823
- class YA extends U {
1824
- ZB(A, t = 1, e = "transparent") {
1825
- const B = A.canvas;
1826
- if (t === 1 && e === "transparent") return B;
1827
- const r = document.createElement("canvas"), i = r.getContext("2d"), s = Math.round(B.width * t), Q = Math.round(B.height * t);
1828
- return r.width = s, r.height = Q, e !== "transparent" && (i.fillStyle = e, i.fillRect(0, 0, s, Q)), i.imageSmoothingEnabled = !1, i.drawImage(B, 0, 0, B.width, B.height, 0, 0, s, Q), r;
1911
+ class UA extends L {
1912
+ us(A, t = 1, e = "transparent") {
1913
+ const s = A.canvas;
1914
+ if (t === 1 && e === "transparent") return s;
1915
+ const r = document.createElement("canvas"), i = r.getContext("2d"), B = Math.round(s.width * t), n = Math.round(s.height * t);
1916
+ return r.width = B, r.height = n, e !== "transparent" && (i.fillStyle = e, i.fillRect(0, 0, B, n)), i.imageSmoothingEnabled = !1, i.drawImage(s, 0, 0, s.width, s.height, 0, 0, B, n), r;
1829
1917
  }
1830
1918
  }
1831
1919
  class OA {
1832
- NB(A, t) {
1833
- const e = this.XB(t.format);
1920
+ Is(A, t) {
1921
+ const e = this.ws(t.format);
1834
1922
  return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
1835
1923
  }
1836
- async qB(A, t) {
1837
- return new Promise((e, B) => {
1838
- const r = this.XB(t.format), i = (s) => {
1839
- s ? e(s) : B(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
1924
+ async fs(A, t) {
1925
+ return new Promise((e, s) => {
1926
+ const r = this.ws(t.format), i = (B) => {
1927
+ B ? e(B) : s(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
1840
1928
  };
1841
1929
  t.format === "png" ? A.toBlob(i, r) : A.toBlob(i, r, t.quality);
1842
1930
  });
1843
1931
  }
1844
- XB(A) {
1932
+ ws(A) {
1845
1933
  switch (A) {
1846
1934
  case "png":
1847
1935
  return "image/png";
@@ -1854,208 +1942,210 @@ class OA {
1854
1942
  }
1855
1943
  }
1856
1944
  }
1857
- const LA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, k = { png: ".png", jpg: ".jpg", webp: ".webp" };
1858
- class zA extends Y {
1859
- AQ(A, t, e) {
1860
- this.tQ(A, this.lB(t) + k[e]);
1945
+ const LA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, X = { png: ".png", jpg: ".jpg", webp: ".webp" };
1946
+ class WA extends W {
1947
+ ds(A, t, e) {
1948
+ this.ps(A, this.TB(t) + X[e]);
1861
1949
  }
1862
- tQ(A, t) {
1950
+ ps(A, t) {
1863
1951
  const e = URL.createObjectURL(A);
1864
1952
  try {
1865
- const B = document.createElement("a");
1866
- B.href = e, B.download = t, B.style.display = "none", B.rel = "noopener", document.body.appendChild(B), B.click(), document.body.removeChild(B);
1953
+ const s = document.createElement("a");
1954
+ s.href = e, s.download = t, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s);
1867
1955
  } finally {
1868
1956
  URL.revokeObjectURL(e);
1869
1957
  }
1870
1958
  }
1871
- eQ(A) {
1872
- return A in LA && A in k;
1959
+ _s(A) {
1960
+ return A in LA && A in X;
1873
1961
  }
1874
1962
  }
1875
- class WA {
1963
+ class $A {
1876
1964
  constructor() {
1877
- n(this, "OB");
1878
- n(this, "LB");
1879
- n(this, "UB");
1880
- this.OB = new YA(), this.LB = new OA(), this.UB = new zA();
1965
+ o(this, "rs");
1966
+ o(this, "Es");
1967
+ o(this, "ns");
1968
+ this.rs = new UA(), this.Es = new OA(), this.ns = new WA();
1881
1969
  }
1882
- kB(A) {
1883
- return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.UB.PB() };
1970
+ gs(A) {
1971
+ return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent", filename: A.filename || this.ns.SB() };
1884
1972
  }
1885
- BQ(A) {
1886
- if (!this.UB.eQ(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
1973
+ vs(A) {
1974
+ if (!this.ns._s(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
1887
1975
  if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
1888
1976
  if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
1889
1977
  A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
1890
1978
  }
1891
- async qB(A, t) {
1892
- if (t.scale === 1 && t.backgroundColor === "transparent") return await this.LB.qB(A.canvas, t);
1893
- const e = this.OB.ZB(A, t.scale, t.backgroundColor);
1894
- return await this.LB.qB(e, t);
1979
+ async fs(A, t) {
1980
+ if (t.scale === 1 && t.backgroundColor === "transparent") return await this.Es.fs(A.canvas, t);
1981
+ const e = this.rs.us(A, t.scale, t.backgroundColor);
1982
+ return await this.Es.fs(e, t);
1895
1983
  }
1896
- async AQ(A, t = {}) {
1897
- const e = this.kB(t);
1898
- this.BQ(e);
1899
- const B = await this.qB(A, e);
1900
- this.UB.AQ(B, e.filename, e.format);
1984
+ async ds(A, t = {}) {
1985
+ const e = this.gs(t);
1986
+ this.vs(e);
1987
+ const s = await this.fs(A, e);
1988
+ this.ns.ds(s, e.filename, e.format);
1901
1989
  }
1902
1990
  }
1903
- const NA = (E) => class extends E {
1904
- QQ() {
1905
- this.Ce.Lt(this.sQ);
1991
+ const kA = (E) => class extends E {
1992
+ bs() {
1993
+ this.ze.re(this.Gs);
1906
1994
  }
1907
1995
  toString(A = {}) {
1908
- return this.QQ(), new N().jB({ pipeline: this.EQ, grid: this.iQ, font: this.me }, A);
1996
+ return this.bs(), new J().Ps({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
1909
1997
  }
1910
1998
  saveStrings(A = {}) {
1911
- this.QQ(), new N().VB({ pipeline: this.EQ, grid: this.iQ, font: this.me }, A);
1999
+ this.bs(), new J().Ds({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
1912
2000
  }
1913
2001
  toSVG(A = {}) {
1914
- return this.QQ(), new W().WB(this, A);
2002
+ return this.bs(), new H().hs({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
1915
2003
  }
1916
2004
  saveSVG(A = {}) {
1917
- this.QQ(), new W().SB(this, A);
2005
+ this.bs(), new H().Qs({ pipeline: this.$s, grid: this.Ms, font: this.We }, A);
1918
2006
  }
1919
2007
  async saveCanvas(A = {}) {
1920
- await new WA().AQ(this.Je, A);
2008
+ await new $A().ds(this.aB, A);
1921
2009
  }
1922
- }, kA = (E) => class extends E {
2010
+ }, NA = (E) => class extends E {
1923
2011
  async loadFont(A) {
1924
- return this.me.Le(A).then(() => {
1925
- const t = this.me.maxGlyphDimensions;
1926
- this.iQ.je(t.width, t.height), this.Ce.Ot();
2012
+ return this.We.rB(A).then(() => {
2013
+ const t = this.We.maxGlyphDimensions;
2014
+ this.Ms.CB(t.width, t.height), this.$s.O(this.Ms.cols, this.Ms.rows), this.ze.Qe();
1927
2015
  });
1928
2016
  }
1929
2017
  fontSize(A) {
1930
- if (!T.l(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.me.fontSize === A) return;
1931
- this.me.Oe(A);
1932
- const t = this.me.maxGlyphDimensions;
1933
- this.iQ.je(t.width, t.height), this.Ce.Ot();
2018
+ if (!_.P(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.We.fontSize === A) return;
2019
+ this.We.QB(A);
2020
+ const t = this.We.maxGlyphDimensions;
2021
+ this.Ms.CB(t.width, t.height), this.$s.O(this.Ms.cols, this.Ms.rows), this.ze.Qe();
1934
2022
  }
1935
- }, JA = (E) => class extends E {
2023
+ }, HA = (E) => class extends E {
1936
2024
  get frameCount() {
1937
- return this.rQ.frameCount;
2025
+ return this.Ys.frameCount;
1938
2026
  }
1939
2027
  set frameCount(A) {
1940
- this.rQ.frameCount = A;
2028
+ this.Ys.frameCount = A;
1941
2029
  }
1942
2030
  frameRate(A) {
1943
- return A === void 0 ? this.rQ.currentFrameRate : this.rQ.frameRate(A, () => this.nQ());
2031
+ return A === void 0 ? this.Ys.currentFrameRate : this.Ys.frameRate(A, () => this.zs());
1944
2032
  }
1945
2033
  noLoop() {
1946
- this.rQ.pause();
2034
+ this.Ys.pause();
1947
2035
  }
1948
2036
  loop() {
1949
- this.rQ.resume(() => this.nQ());
2037
+ this.Ys.resume(() => this.zs());
1950
2038
  }
1951
2039
  redraw(A = 1) {
1952
- if (T.l(typeof A == "number" && A > 0 && Number.isInteger(A), "Redraw count must be a positive integer.", { method: "redraw", providedValue: A })) for (let t = 0; t < A; t++) this.nQ();
2040
+ if (_.P(typeof A == "number" && A > 0 && Number.isInteger(A), "Redraw count must be a positive integer.", { method: "redraw", providedValue: A })) for (let t = 0; t < A; t++) this.zs();
1953
2041
  }
1954
2042
  isLooping() {
1955
- return this.rQ.isLooping;
2043
+ return this.Ys.isLooping;
1956
2044
  }
1957
2045
  };
1958
- class HA {
2046
+ class JA {
1959
2047
  constructor() {
1960
- n(this, "Ce");
1961
- n(this, "me");
1962
- n(this, "Je");
1963
- n(this, "iQ");
1964
- n(this, "rQ");
1965
- n(this, "sQ");
1966
- n(this, "EQ");
1967
- n(this, "gQ");
2048
+ o(this, "ze");
2049
+ o(this, "We");
2050
+ o(this, "aB");
2051
+ o(this, "Ms");
2052
+ o(this, "Ys");
2053
+ o(this, "Gs");
2054
+ o(this, "$s");
2055
+ o(this, "Rs");
1968
2056
  }
1969
- nQ() {
2057
+ zs() {
1970
2058
  }
1971
2059
  }
1972
- class $A extends function(t, ...e) {
1973
- return e.reduce((B, r) => r(B), t);
1974
- }(HA, RA, NA, kA, JA) {
2060
+ class XA extends function(t, ...e) {
2061
+ return e.reduce((s, r) => r(s), t);
2062
+ }(JA, TA, kA, NA, HA) {
1975
2063
  constructor(t = {}) {
1976
2064
  super();
1977
- n(this, "oQ", !1);
1978
- n(this, "aQ", () => {
2065
+ o(this, "Ts", !1);
2066
+ o(this, "Ss", () => {
1979
2067
  });
1980
- n(this, "hQ", () => {
2068
+ o(this, "Fs", () => {
1981
2069
  });
1982
- n(this, "cQ");
1983
- this.Je = new vA(t), this.Ce = new CA(this.Je.qe()), this.me = new xA(this.Ce, t.fontSize ?? 16), this.rQ = new bA(t.frameRate ?? 60), this.sQ = this.Ce.bt(`#version 300 es
1984
- in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in float a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float u_aspectRatio;uniform vec2 u_viewportSize;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}vec2 evaluateBezier(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float oneMinusT=1.0-t;float oneMinusT2=oneMinusT*oneMinusT;float oneMinusT3=oneMinusT2*oneMinusT;float t2=t*t;float t3=t2*t;return oneMinusT3*p0+3.0*oneMinusT2*t*p1+3.0*oneMinusT*t2*p2+t3*p3;}vec2 evaluateBezierDerivative(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float oneMinusT=1.0-t;float oneMinusT2=oneMinusT*oneMinusT;float t2=t*t;return-3.0*oneMinusT2*p0+3.0*oneMinusT2*p1-6.0*oneMinusT*t*p1+6.0*oneMinusT*t*p2-3.0*t2*p2+3.0*t2*p3;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 worldPosition;bool isBezierCurve=length(a_instanceBezierCP1)>0.0||length(a_instanceBezierCP2)>0.0||length(a_instanceBezierStart)>0.0||length(a_instanceBezierEnd)>0.0;bool isArc=a_instanceArcAngles.x!=0.0||a_instanceArcAngles.y!=0.0;if(isBezierCurve){float t=a_position.x;float thicknessOffset=a_position.y;vec2 curvePoint=evaluateBezier(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 tangent=evaluateBezierDerivative(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float tangentLength=length(tangent);if(tangentLength>0.0){tangent=tangent/tangentLength;}else{tangent=vec2(1.0,0.0);}vec2 normal=vec2(-tangent.y,tangent.x);float thickness=a_instanceSize.y;vec2 thicknessVector=normal*thicknessOffset*thickness;worldPosition=curvePoint+thicknessVector;}else if(isArc){float startA=a_instanceArcAngles.x;float stopA=a_instanceArcAngles.y;float TWO_PI=6.28318530718;startA=mod(startA,TWO_PI);if(startA<0.0)startA+=TWO_PI;stopA=mod(stopA,TWO_PI);if(stopA<0.0)stopA+=TWO_PI;float cwDelta=startA-stopA;if(cwDelta<=0.0)cwDelta+=TWO_PI;float angle=startA-a_position.x*cwDelta;float r=a_position.y;vec2 local=vec2(cos(angle),sin(angle))*r;vec2 scaledPosition=local*a_instanceSize*0.5+vec2(a_instanceSize.x*0.5,a_instanceSize.y*0.5);worldPosition=scaledPosition+a_instancePosition;}else{vec2 scaledPosition=a_position*a_instanceSize;worldPosition=scaledPosition+a_instancePosition;}vec2 ndc=(worldPosition/u_viewportSize)*2.0-1.0;ndc.y=-ndc.y;if(a_instanceGlobalRotation!=0.0){ndc-=a_instanceRotationCenter;ndc.x*=u_aspectRatio;ndc=rotate2D(-a_instanceGlobalRotation)*ndc;ndc.x/=u_aspectRatio;ndc+=a_instanceRotationCenter;}gl_Position=vec4(ndc,0.0,1.0);}`, `#version 300 es
1985
- precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.gQ = this.Ce.bt("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=(gl_FragCoord.xy-u_gridOffsetPixels)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=-(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}");
2070
+ o(this, "Os");
2071
+ this.aB = new bA(t), this.ze = new DA(this.aB.uB()), this.We = new xA(this.ze, t.fontSize ?? 16), this.Ys = new RA(t.frameRate ?? 60), this.Gs = this.ze.Jt(O, `#version 300 es
2072
+ precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.Rs = this.ze.Jt("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=(gl_FragCoord.xy-u_gridOffsetPixels)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=-(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}");
1986
2073
  }
1987
2074
  static async create(t = {}) {
1988
2075
  const e = new this(t);
1989
- await e.me.Fe(t.fontSource);
1990
- const B = e.me.maxGlyphDimensions;
1991
- return e.iQ = new yA(e.Je.canvas, B.width, B.height), e.EQ = e.Ce.Ft(e.iQ.cols, e.iQ.rows, 5), e.CQ(), e.rQ.start(() => e.nQ()), e;
2076
+ await e.We.BB(t.fontSource);
2077
+ const s = e.We.maxGlyphDimensions;
2078
+ return e.Ms = new vA(e.aB.canvas, s.width, s.height), e.$s = e.ze.Be(e.Ms.cols, e.Ms.rows, 5), e.Us(), e.Ys.start(() => e.zs()), e;
1992
2079
  }
1993
- CQ() {
1994
- this.cQ = () => {
1995
- this.hQ();
1996
- }, window.addEventListener("resize", this.cQ);
2080
+ Us() {
2081
+ this.Os = () => {
2082
+ this.Fs();
2083
+ }, window.addEventListener("resize", this.Os);
1997
2084
  }
1998
- nQ() {
1999
- this.rQ.measureFrameRate(), this.rQ.incrementFrame(), this.oQ || (this.EQ.U(), this.Ce.yt(this.sQ), this.aQ(), this.Ce.Lt(this.sQ), this.EQ.k(), this.Ce.St(0), this.Ce.yt(this.gQ), this.gQ.tA({ u_characterTexture: this.me.fontFramebuffer, u_charsetDimensions: [this.me.textureColumns, this.me.textureRows], u_asciiCharacterTexture: this.EQ.textures[0], u_primaryColorTexture: this.EQ.textures[1], u_secondaryColorTexture: this.EQ.textures[2], u_transformTexture: this.EQ.textures[4], u_rotationTexture: this.EQ.textures[3], u_gridCellDimensions: [this.iQ.cols, this.iQ.rows], u_gridPixelDimensions: [this.iQ.width, this.iQ.height], u_gridOffsetPixels: [this.iQ.offsetX, this.iQ.offsetY], u_aspectRatio: this.iQ.width / this.iQ.height }), this.Ce.Gt(this.iQ.offsetX, this.iQ.offsetY, this.iQ.width, this.iQ.height));
2085
+ zs() {
2086
+ if (this.Ys.measureFrameRate(), this.Ys.incrementFrame(), this.Ts) return;
2087
+ this.$s.k(), this.ze.Wt(this.Gs), this.Ss(), this.ze.re(this.Gs), this.$s.H();
2088
+ const t = this.ze.state.canvasBackgroundColor;
2089
+ this.ze.ot(t[0], t[1], t[2], t[3]), this.ze.Wt(this.Rs), this.Rs.eA({ u_characterTexture: this.We.fontFramebuffer, u_charsetDimensions: [this.We.textureColumns, this.We.textureRows], u_asciiCharacterTexture: this.$s.textures[0], u_primaryColorTexture: this.$s.textures[1], u_secondaryColorTexture: this.$s.textures[2], u_transformTexture: this.$s.textures[4], u_rotationTexture: this.$s.textures[3], u_gridCellDimensions: [this.Ms.cols, this.Ms.rows], u_gridPixelDimensions: [this.Ms.width, this.Ms.height], u_gridOffsetPixels: [this.Ms.offsetX, this.Ms.offsetY], u_aspectRatio: this.Ms.width / this.Ms.height }), this.ze.Xt(this.Ms.offsetX, this.Ms.offsetY, this.Ms.width, this.Ms.height);
2000
2090
  }
2001
2091
  draw(t) {
2002
- this.aQ = t;
2092
+ this.Ss = t;
2003
2093
  }
2004
2094
  windowResized(t) {
2005
- this.hQ = t;
2095
+ this.Fs = t;
2006
2096
  }
2007
2097
  resizeCanvas(t, e) {
2008
- this.Je.S(t, e), this.iQ.lA(), this.EQ.S(this.iQ.cols, this.iQ.rows), this.Ce.Ot(), this.nQ();
2098
+ this.aB.O(t, e), this.Ms.fA(), this.$s.O(this.Ms.cols, this.Ms.rows), this.ze.Qe(), this.zs();
2009
2099
  }
2010
2100
  destroy() {
2011
- this.oQ || (this.rQ.stop(), window.removeEventListener("resize", this.cQ), this.me.W(), this.Ce.W(), this.oQ = !0);
2101
+ this.Ts || (this.Ys.stop(), window.removeEventListener("resize", this.Os), this.We.W(), this.ze.W(), this.Ts = !0);
2012
2102
  }
2013
2103
  get grid() {
2014
- return this.iQ;
2104
+ return this.Ms;
2015
2105
  }
2016
2106
  get font() {
2017
- return this.me;
2107
+ return this.We;
2018
2108
  }
2019
2109
  get width() {
2020
- return this.Je.width;
2110
+ return this.aB.width;
2021
2111
  }
2022
2112
  get height() {
2023
- return this.Je.height;
2113
+ return this.aB.height;
2024
2114
  }
2025
2115
  get canvas() {
2026
- return this.Je.canvas;
2116
+ return this.aB.canvas;
2027
2117
  }
2028
2118
  get isDisposed() {
2029
- return this.oQ;
2119
+ return this.Ts;
2030
2120
  }
2031
2121
  get drawFramebuffer() {
2032
- return this.EQ;
2122
+ return this.$s;
2033
2123
  }
2034
2124
  }
2035
- class O {
2125
+ class $ {
2036
2126
  constructor() {
2037
- throw new f("Textmode is a static class and cannot be instantiated.");
2127
+ throw new m("Textmode is a static class and cannot be instantiated.");
2038
2128
  }
2039
2129
  static async create(A) {
2040
- return $A.create(A);
2130
+ return XA.create(A);
2041
2131
  }
2042
2132
  static setErrorLevel(A) {
2043
- T.P(A);
2133
+ _.u(A);
2044
2134
  }
2045
2135
  static get version() {
2046
- return "0.2.0-beta.1";
2136
+ return "0.2.0-beta.3";
2047
2137
  }
2048
2138
  }
2049
- const XA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), jA = O.create, KA = O.setErrorLevel, ZA = O.version;
2139
+ const jA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), ZA = $.create, KA = $.setErrorLevel, qA = $.version;
2050
2140
  export {
2051
- vA as TextmodeCanvas,
2052
- K as TextmodeErrorLevel,
2141
+ bA as TextmodeCanvas,
2142
+ q as TextmodeErrorLevel,
2053
2143
  xA as TextmodeFont,
2054
- yA as TextmodeGrid,
2055
- $A as Textmodifier,
2056
- jA as create,
2057
- XA as export,
2144
+ vA as TextmodeGrid,
2145
+ XA as Textmodifier,
2146
+ ZA as create,
2147
+ jA as export,
2058
2148
  KA as setErrorLevel,
2059
- O as textmode,
2060
- ZA as version
2149
+ $ as textmode,
2150
+ qA as version
2061
2151
  };