textmode.js 0.1.8-beta.2 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +1144 -953
- package/dist/textmode.esm.min.js +1108 -917
- package/dist/textmode.umd.js +19 -19
- package/dist/textmode.umd.min.js +17 -17
- package/dist/types/Textmode.d.ts +21 -31
- package/dist/types/export/image/types.d.ts +1 -1
- package/dist/types/export/svg/SVGPathGenerator.d.ts +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/textmode/Canvas.d.ts +3 -3
- package/dist/types/textmode/ConversionPipeline.d.ts +7 -2
- package/dist/types/textmode/Textmodifier.d.ts +29 -20
- package/dist/types/textmode/converters/Converter.d.ts +4 -4
- package/dist/types/textmode/converters/FeatureConverter.d.ts +3 -3
- package/dist/types/textmode/font/CharacterColorMapper.d.ts +4 -9
- package/dist/types/textmode/font/CharacterExtractor.d.ts +15 -25
- package/dist/types/textmode/font/MetricsCalculator.d.ts +34 -9
- package/dist/types/textmode/font/TextmodeFont.d.ts +3 -2
- package/dist/types/textmode/font/TextureAtlas.d.ts +29 -13
- package/dist/types/textmode/font/index.d.ts +3 -1
- package/dist/types/textmode/font/types.d.ts +2 -136
- package/dist/types/textmode/font/typr/Typr.d.ts +18 -0
- package/dist/types/textmode/font/typr/types.d.ts +254 -0
- package/dist/types/textmode/font/utils/CmapParser.d.ts +47 -0
- package/dist/types/textmode/font/utils/FontConstants.d.ts +60 -0
- package/dist/types/textmode/font/utils/FontTableReader.d.ts +56 -0
- package/dist/types/textmode/font/utils/index.d.ts +9 -0
- package/dist/types/textmode/mixins/ConversionMixin.d.ts +3 -4
- package/dist/types/textmode/mixins/ExportMixin.d.ts +2 -14
- package/dist/types/textmode/mixins/RenderingMixin.d.ts +1 -0
- package/package.json +1 -1
package/dist/textmode.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var Q = (E, A, t) =>
|
|
1
|
+
var AA = Object.defineProperty;
|
|
2
|
+
var tA = (E, A, t) => A in E ? AA(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
|
|
3
|
+
var Q = (E, A, t) => tA(E, typeof A != "symbol" ? A + "" : A, t);
|
|
4
4
|
class I extends Error {
|
|
5
5
|
constructor(A, t = {}) {
|
|
6
6
|
super(I.A(A, t)), this.name = "TextmodeError";
|
|
@@ -11,9 +11,9 @@ class I extends Error {
|
|
|
11
11
|
e += `
|
|
12
12
|
|
|
13
13
|
📋 Context:`;
|
|
14
|
-
for (const [
|
|
14
|
+
for (const [s, r] of Object.entries(t))
|
|
15
15
|
e += `
|
|
16
|
-
- ${
|
|
16
|
+
- ${s}: ${I.i(r)}`;
|
|
17
17
|
}
|
|
18
18
|
return e += `
|
|
19
19
|
|
|
@@ -33,45 +33,45 @@ class I extends Error {
|
|
|
33
33
|
return A + "";
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
var
|
|
37
|
-
const
|
|
36
|
+
var eA = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(eA || {});
|
|
37
|
+
const v = class v {
|
|
38
38
|
constructor() {
|
|
39
39
|
Q(this, "h", { globalLevel: 3 });
|
|
40
40
|
}
|
|
41
|
-
static
|
|
42
|
-
return
|
|
41
|
+
static l() {
|
|
42
|
+
return v.o || (v.o = new v()), v.o;
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.",
|
|
44
|
+
D(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
46
|
switch (this.h.globalLevel) {
|
|
47
47
|
case 0:
|
|
48
48
|
return !1;
|
|
49
49
|
case 1:
|
|
50
|
-
return console.group(e,
|
|
50
|
+
return console.group(e, s), console.warn(I.A(A, t)), console.groupEnd(), !1;
|
|
51
51
|
case 2:
|
|
52
|
-
return console.group(e,
|
|
52
|
+
return console.group(e, s), console.error(I.A(A, t)), console.groupEnd(), !1;
|
|
53
53
|
default:
|
|
54
54
|
throw new I(A, t);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
C(A, t, e) {
|
|
58
|
-
return !!A || (this.
|
|
58
|
+
return !!A || (this.D(t, e), !1);
|
|
59
59
|
}
|
|
60
60
|
u(A) {
|
|
61
61
|
this.h.globalLevel = A;
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
-
Q(
|
|
65
|
-
let
|
|
66
|
-
const
|
|
64
|
+
Q(v, "o", null);
|
|
65
|
+
let Y = v;
|
|
66
|
+
const u = Y.l(), X = /* @__PURE__ */ new WeakMap();
|
|
67
67
|
function F(E, A) {
|
|
68
|
-
|
|
68
|
+
X.set(E, A);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
71
|
-
return
|
|
70
|
+
function J(E) {
|
|
71
|
+
return X.get(E);
|
|
72
72
|
}
|
|
73
73
|
class K {
|
|
74
|
-
constructor(A, t, e = t,
|
|
74
|
+
constructor(A, t, e = t, s = {}) {
|
|
75
75
|
Q(this, "P");
|
|
76
76
|
Q(this, "I");
|
|
77
77
|
Q(this, "m");
|
|
@@ -80,9 +80,9 @@ class K {
|
|
|
80
80
|
Q(this, "h");
|
|
81
81
|
Q(this, "v", null);
|
|
82
82
|
Q(this, "M", null);
|
|
83
|
-
this.P = A, this.p = t, this._ = e, this.h = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...
|
|
83
|
+
this.P = A, this.p = t, this._ = e, this.h = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...s }, this.m = this.G(), this.I = A.createFramebuffer(), this.F();
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
$(A) {
|
|
86
86
|
const { P: t } = this, e = t.getParameter(t.FRAMEBUFFER_BINDING);
|
|
87
87
|
t.bindFramebuffer(t.FRAMEBUFFER, this.I);
|
|
88
88
|
try {
|
|
@@ -94,10 +94,10 @@ class K {
|
|
|
94
94
|
G() {
|
|
95
95
|
const { P: A } = this, t = A.createTexture();
|
|
96
96
|
A.bindTexture(A.TEXTURE_2D, t);
|
|
97
|
-
const e = this.h.filter === "linear" ? A.LINEAR : A.NEAREST,
|
|
98
|
-
return A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S,
|
|
97
|
+
const e = this.h.filter === "linear" ? A.LINEAR : A.NEAREST, s = this.h.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE;
|
|
98
|
+
return A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, s), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, s), this.Y(), t;
|
|
99
99
|
}
|
|
100
|
-
|
|
100
|
+
Y() {
|
|
101
101
|
const { P: A } = this, t = this.h.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
|
|
102
102
|
A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.p, this._, 0, A.RGBA, t, null);
|
|
103
103
|
}
|
|
@@ -110,12 +110,12 @@ class K {
|
|
|
110
110
|
t.bindTexture(t.TEXTURE_2D, this.m), 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);
|
|
111
111
|
}
|
|
112
112
|
updatePixels(A, t, e) {
|
|
113
|
-
const { P:
|
|
114
|
-
|
|
113
|
+
const { P: s } = this;
|
|
114
|
+
s.bindTexture(s.TEXTURE_2D, this.m), s.texImage2D(s.TEXTURE_2D, 0, s.RGBA, t, e, 0, s.RGBA, s.UNSIGNED_BYTE, A), s.bindTexture(s.TEXTURE_2D, null);
|
|
115
115
|
}
|
|
116
116
|
resize(A, t) {
|
|
117
117
|
const { P: e } = this;
|
|
118
|
-
this.p = A, this._ = t, this.M = null, e.bindTexture(e.TEXTURE_2D, this.m), this
|
|
118
|
+
this.p = A, this._ = t, this.M = null, e.bindTexture(e.TEXTURE_2D, this.m), this.Y(), e.bindTexture(e.TEXTURE_2D, null);
|
|
119
119
|
}
|
|
120
120
|
begin() {
|
|
121
121
|
const { P: A } = this;
|
|
@@ -128,25 +128,25 @@ class K {
|
|
|
128
128
|
}
|
|
129
129
|
loadPixels() {
|
|
130
130
|
const { P: A } = this;
|
|
131
|
-
this.M || (this.M = new Uint8Array(this.p * this._ * 4)), this
|
|
131
|
+
this.M || (this.M = new Uint8Array(this.p * this._ * 4)), this.$(() => {
|
|
132
132
|
A.readPixels(0, 0, this.p, this._, A.RGBA, A.UNSIGNED_BYTE, this.M);
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
|
-
get(A, t, e,
|
|
136
|
-
const { P:
|
|
135
|
+
get(A, t, e, s) {
|
|
136
|
+
const { P: r } = this;
|
|
137
137
|
if (A === void 0 && t === void 0) {
|
|
138
|
-
const
|
|
139
|
-
return this
|
|
138
|
+
const i = new Uint8Array(this.p * this._ * 4);
|
|
139
|
+
return this.$(() => (r.readPixels(0, 0, this.p, this._, r.RGBA, r.UNSIGNED_BYTE, i), i));
|
|
140
140
|
}
|
|
141
|
-
if (e === void 0 &&
|
|
141
|
+
if (e === void 0 && s === void 0) {
|
|
142
142
|
(A < 0 || t < 0 || A >= this.p || t >= this._) && (console.warn("The x and y values passed to Framebuffer.get are outside of its range and will be clamped."), A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)));
|
|
143
|
-
const
|
|
144
|
-
return this
|
|
143
|
+
const i = new Uint8Array(4);
|
|
144
|
+
return this.$(() => (r.readPixels(A, t, 1, 1, r.RGBA, r.UNSIGNED_BYTE, i), [i[0], i[1], i[2], i[3]]));
|
|
145
145
|
}
|
|
146
146
|
{
|
|
147
|
-
A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)), e = Math.max(1, Math.min(e, this.p - A)),
|
|
148
|
-
const
|
|
149
|
-
return this
|
|
147
|
+
A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)), e = Math.max(1, Math.min(e, this.p - A)), s = Math.max(1, Math.min(s, this._ - t));
|
|
148
|
+
const i = new Uint8Array(e * s * 4);
|
|
149
|
+
return this.$(() => (r.readPixels(A, t, e, s, r.RGBA, r.UNSIGNED_BYTE, i), i));
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
S() {
|
|
@@ -168,7 +168,7 @@ class K {
|
|
|
168
168
|
return this.M;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
class
|
|
171
|
+
class x {
|
|
172
172
|
constructor(A, t, e) {
|
|
173
173
|
Q(this, "P");
|
|
174
174
|
Q(this, "O");
|
|
@@ -176,31 +176,31 @@ class w {
|
|
|
176
176
|
Q(this, "k", /* @__PURE__ */ new Map());
|
|
177
177
|
Q(this, "V", 0);
|
|
178
178
|
Q(this, "R");
|
|
179
|
-
this.P = A, this.O = this.H(t, e), this.R = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.
|
|
179
|
+
this.P = A, this.O = this.H(t, e), this.R = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.L();
|
|
180
180
|
}
|
|
181
|
-
|
|
181
|
+
L() {
|
|
182
182
|
const A = this.P.getProgramParameter(this.O, this.P.ACTIVE_UNIFORMS);
|
|
183
183
|
for (let t = 0; t < A; t++) {
|
|
184
184
|
const e = this.P.getActiveUniform(this.O, t);
|
|
185
185
|
if (e) {
|
|
186
|
-
const
|
|
187
|
-
|
|
186
|
+
const s = this.P.getUniformLocation(this.O, e.name);
|
|
187
|
+
s && (this.U.set(e.name, s), this.k.set(e.name, e.type));
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
H(A, t) {
|
|
192
|
-
const e = this.
|
|
193
|
-
if (this.P.attachShader(
|
|
194
|
-
const
|
|
195
|
-
throw Error("Shader program link error: " +
|
|
192
|
+
const e = this.J(this.P.VERTEX_SHADER, A), s = this.J(this.P.FRAGMENT_SHADER, t), r = this.P.createProgram();
|
|
193
|
+
if (this.P.attachShader(r, e), this.P.attachShader(r, s), this.P.linkProgram(r), !this.P.getProgramParameter(r, this.P.LINK_STATUS)) {
|
|
194
|
+
const i = this.P.getProgramInfoLog(r);
|
|
195
|
+
throw Error("Shader program link error: " + i);
|
|
196
196
|
}
|
|
197
|
-
return this.P.deleteShader(e), this.P.deleteShader(
|
|
197
|
+
return this.P.deleteShader(e), this.P.deleteShader(s), r;
|
|
198
198
|
}
|
|
199
|
-
|
|
199
|
+
J(A, t) {
|
|
200
200
|
const e = this.P.createShader(A);
|
|
201
201
|
if (this.P.shaderSource(e, t), this.P.compileShader(e), !this.P.getShaderParameter(e, this.P.COMPILE_STATUS)) {
|
|
202
|
-
const
|
|
203
|
-
throw this.P.deleteShader(e), Error("Shader compilation error: " +
|
|
202
|
+
const s = this.P.getShaderInfoLog(e);
|
|
203
|
+
throw this.P.deleteShader(e), Error("Shader compilation error: " + s);
|
|
204
204
|
}
|
|
205
205
|
return e;
|
|
206
206
|
}
|
|
@@ -226,14 +226,14 @@ class w {
|
|
|
226
226
|
console.warn(`Unsupported array length ${t.length} for uniform '${A}'`);
|
|
227
227
|
}
|
|
228
228
|
else if (t instanceof WebGLTexture) {
|
|
229
|
-
const
|
|
230
|
-
this.P.uniform1i(e,
|
|
229
|
+
const s = this.N();
|
|
230
|
+
this.P.uniform1i(e, s), this.P.activeTexture(this.P.TEXTURE0 + s), this.P.bindTexture(this.P.TEXTURE_2D, t);
|
|
231
231
|
} else if (t instanceof K) {
|
|
232
|
-
const
|
|
233
|
-
this.P.uniform1i(e,
|
|
232
|
+
const s = this.N();
|
|
233
|
+
this.P.uniform1i(e, s), this.P.activeTexture(this.P.TEXTURE0 + s), this.P.bindTexture(this.P.TEXTURE_2D, t.texture);
|
|
234
234
|
} else console.warn(`Unsupported uniform type for '${A}':`, typeof t);
|
|
235
235
|
}
|
|
236
|
-
|
|
236
|
+
N() {
|
|
237
237
|
return this.V >= this.R && console.warn(`Exceeded maximum texture units (${this.R}). Texture may not render correctly.`), this.V++;
|
|
238
238
|
}
|
|
239
239
|
j(A) {
|
|
@@ -250,18 +250,18 @@ class w {
|
|
|
250
250
|
this.V = 0;
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
-
class
|
|
253
|
+
class Z {
|
|
254
254
|
constructor(A) {
|
|
255
255
|
Q(this, "P");
|
|
256
|
-
Q(this, "
|
|
256
|
+
Q(this, "Z", null);
|
|
257
257
|
Q(this, "X", 16);
|
|
258
258
|
Q(this, "q", /* @__PURE__ */ new Map());
|
|
259
259
|
this.P = A;
|
|
260
260
|
}
|
|
261
261
|
AA() {
|
|
262
|
-
if (this.
|
|
262
|
+
if (this.Z) return;
|
|
263
263
|
const A = this.P;
|
|
264
|
-
this.
|
|
264
|
+
this.Z = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.Z);
|
|
265
265
|
}
|
|
266
266
|
tA() {
|
|
267
267
|
const A = this.P, t = A.getParameter(A.CURRENT_PROGRAM);
|
|
@@ -272,55 +272,55 @@ class X {
|
|
|
272
272
|
const e = this.P;
|
|
273
273
|
e.disableVertexAttribArray(A), e.disableVertexAttribArray(t);
|
|
274
274
|
}
|
|
275
|
-
|
|
276
|
-
const e = this.P,
|
|
277
|
-
return { nx: A /
|
|
275
|
+
sA(A, t) {
|
|
276
|
+
const e = this.P, s = J(e) || [0, 0, e.canvas.width, e.canvas.height];
|
|
277
|
+
return { nx: A / s[2] * 2 - 1, ny: 1 - t / s[3] * 2 };
|
|
278
278
|
}
|
|
279
|
-
|
|
280
|
-
const
|
|
281
|
-
this.AA(),
|
|
282
|
-
const
|
|
283
|
-
|
|
279
|
+
rA(A, t, e, s) {
|
|
280
|
+
const r = this.P;
|
|
281
|
+
this.AA(), r.bindBuffer(r.ARRAY_BUFFER, this.Z);
|
|
282
|
+
const i = new Float32Array([A, s, 0, 0, e, s, 1, 0, A, t, 0, 1, A, t, 0, 1, e, s, 1, 0, e, t, 1, 1]);
|
|
283
|
+
r.bufferData(r.ARRAY_BUFFER, i, r.DYNAMIC_DRAW);
|
|
284
284
|
}
|
|
285
285
|
S() {
|
|
286
|
-
this.
|
|
286
|
+
this.Z && this.P.deleteBuffer(this.Z);
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
|
-
class
|
|
289
|
+
class sA extends Z {
|
|
290
290
|
constructor(A) {
|
|
291
291
|
super(A);
|
|
292
292
|
}
|
|
293
|
-
|
|
294
|
-
const
|
|
295
|
-
this.
|
|
296
|
-
const
|
|
297
|
-
this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(
|
|
293
|
+
BA(A, t, e, s) {
|
|
294
|
+
const r = this.sA(A, t), i = this.sA(A + e, t + s);
|
|
295
|
+
this.rA(r.nx, r.ny, i.nx, i.ny);
|
|
296
|
+
const B = this.tA();
|
|
297
|
+
this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(B.positionLoc, B.texLoc);
|
|
298
298
|
}
|
|
299
|
-
|
|
300
|
-
this.
|
|
299
|
+
iA(A, t, e, s, r) {
|
|
300
|
+
this.BA(A, t, e, r), this.BA(A + e - r, t, r, s), this.BA(A, t + s - r, e, r), this.BA(A, t, r, s);
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
class
|
|
303
|
+
class rA extends Z {
|
|
304
304
|
constructor(A) {
|
|
305
305
|
super(A);
|
|
306
306
|
}
|
|
307
|
-
|
|
308
|
-
const
|
|
307
|
+
QA(A, t, e, s, r) {
|
|
308
|
+
const i = e - A, B = s - t, o = Math.hypot(i, B);
|
|
309
309
|
if (o === 0) {
|
|
310
|
-
const
|
|
311
|
-
this.
|
|
310
|
+
const g = r / 2, a = this.sA(A - g, t - g), h = this.sA(A + g, t + g);
|
|
311
|
+
this.rA(a.nx, a.ny, h.nx, h.ny);
|
|
312
312
|
} else {
|
|
313
|
-
const
|
|
314
|
-
this.AA(),
|
|
315
|
-
const
|
|
316
|
-
|
|
313
|
+
const g = -B / o, a = i / o, h = r / 2, D = A + g * h, c = t + a * h, l = A - g * h, d = t - a * h, C = e + g * h, P = s + a * h, p = e - g * h, m = s - a * h, y = this.sA(D, c), b = this.sA(l, d), _ = this.sA(C, P), V = this.sA(p, m), G = this.P;
|
|
314
|
+
this.AA(), G.bindBuffer(G.ARRAY_BUFFER, this.Z);
|
|
315
|
+
const q = new Float32Array([y.nx, y.ny, 0, 0, b.nx, b.ny, 0, 1, _.nx, _.ny, 1, 0, b.nx, b.ny, 0, 1, V.nx, V.ny, 1, 1, _.nx, _.ny, 1, 0]);
|
|
316
|
+
G.bufferData(G.ARRAY_BUFFER, q, G.DYNAMIC_DRAW);
|
|
317
317
|
}
|
|
318
|
-
const
|
|
319
|
-
this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(
|
|
318
|
+
const n = this.tA();
|
|
319
|
+
this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(n.positionLoc, n.texLoc);
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
322
|
var R = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;uniform float u_rotation;uniform vec2 u_center;uniform float u_aspectRatio;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){v_uv=a_texCoord;vec2 pos=a_position;pos-=u_center;pos.x*=u_aspectRatio;pos=rotate2D(-u_rotation)*pos;pos.x/=u_aspectRatio;pos+=u_center;gl_Position=vec4(pos,0.0,1.0);}";
|
|
323
|
-
class
|
|
323
|
+
class iA {
|
|
324
324
|
constructor(A) {
|
|
325
325
|
Q(this, "P");
|
|
326
326
|
Q(this, "EA");
|
|
@@ -329,107 +329,107 @@ class rA {
|
|
|
329
329
|
Q(this, "nA");
|
|
330
330
|
Q(this, "aA");
|
|
331
331
|
Q(this, "hA", [1, 1, 1, 1]);
|
|
332
|
-
Q(this, "
|
|
333
|
-
Q(this, "
|
|
334
|
-
Q(this, "
|
|
335
|
-
Q(this, "
|
|
332
|
+
Q(this, "lA", !0);
|
|
333
|
+
Q(this, "cA", [0, 0, 0, 1]);
|
|
334
|
+
Q(this, "DA", 1);
|
|
335
|
+
Q(this, "CA", !0);
|
|
336
336
|
Q(this, "uA", 0);
|
|
337
337
|
Q(this, "PA", []);
|
|
338
|
-
this.P = A, this.EA = new
|
|
338
|
+
this.P = A, this.EA = new x(this.P, R, "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}"), this.gA = new x(this.P, R, "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}"), this.nA = new sA(this.P), this.aA = new rA(this.P), this.P.enable(this.P.BLEND), this.P.blendEquation(this.P.FUNC_ADD), this.P.blendFunc(this.P.ONE, this.P.ONE_MINUS_SRC_ALPHA), F(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
|
|
339
339
|
}
|
|
340
340
|
IA(A) {
|
|
341
341
|
this.oA !== A && (this.oA = A, A.K());
|
|
342
342
|
}
|
|
343
|
-
wA(A, t, e,
|
|
344
|
-
if (this.
|
|
345
|
-
const
|
|
346
|
-
this.hA = [
|
|
347
|
-
} else if (e !== void 0 &&
|
|
343
|
+
wA(A, t, e, s) {
|
|
344
|
+
if (this.lA = !0, t === void 0 && e === void 0 && s === void 0) {
|
|
345
|
+
const r = A / 255;
|
|
346
|
+
this.hA = [r, r, r, 1];
|
|
347
|
+
} else if (e !== void 0 && s === void 0) this.hA = [A / 255, t / 255, e / 255, 1];
|
|
348
348
|
else {
|
|
349
|
-
if (e === void 0 ||
|
|
350
|
-
this.hA = [A / 255, t / 255, e / 255,
|
|
349
|
+
if (e === void 0 || s === void 0) throw Error("Invalid fill parameters. Use fill(gray), fill(r,g,b), or fill(r,g,b,a)");
|
|
350
|
+
this.hA = [A / 255, t / 255, e / 255, s / 255];
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
|
-
fA(A, t, e,
|
|
354
|
-
if (this.
|
|
355
|
-
const
|
|
356
|
-
this.
|
|
357
|
-
} else if (e !== void 0 &&
|
|
353
|
+
fA(A, t, e, s) {
|
|
354
|
+
if (this.CA = !0, t === void 0 && e === void 0 && s === void 0) {
|
|
355
|
+
const r = A / 255;
|
|
356
|
+
this.cA = [r, r, r, 1];
|
|
357
|
+
} else if (e !== void 0 && s === void 0) this.cA = [A / 255, t / 255, e / 255, 1];
|
|
358
358
|
else {
|
|
359
|
-
if (e === void 0 ||
|
|
360
|
-
this.
|
|
359
|
+
if (e === void 0 || s === void 0) throw Error("Invalid stroke parameters. Use stroke(gray), stroke(r,g,b), or stroke(r,g,b,a)");
|
|
360
|
+
this.cA = [A / 255, t / 255, e / 255, s / 255];
|
|
361
361
|
}
|
|
362
362
|
}
|
|
363
363
|
dA(A) {
|
|
364
364
|
if (A < 0) throw Error("Stroke weight must be non-negative");
|
|
365
|
-
this.
|
|
365
|
+
this.DA = A;
|
|
366
366
|
}
|
|
367
367
|
mA() {
|
|
368
|
-
this.
|
|
368
|
+
this.CA = !1;
|
|
369
369
|
}
|
|
370
370
|
pA() {
|
|
371
|
-
this.
|
|
371
|
+
this.lA = !1;
|
|
372
372
|
}
|
|
373
373
|
_A(A) {
|
|
374
374
|
this.uA = A;
|
|
375
375
|
}
|
|
376
376
|
vA() {
|
|
377
|
-
this.PA.push({ fillColor: [...this.hA], fillMode: this.
|
|
377
|
+
this.PA.push({ fillColor: [...this.hA], fillMode: this.lA, strokeColor: [...this.cA], strokeWeight: this.DA, strokeMode: this.CA, rotation: this.uA });
|
|
378
378
|
}
|
|
379
379
|
bA() {
|
|
380
380
|
const A = this.PA.pop();
|
|
381
|
-
A ? (this.hA = A.fillColor, this.
|
|
381
|
+
A ? (this.hA = A.fillColor, this.lA = A.fillMode, this.cA = A.strokeColor, this.DA = A.strokeWeight, this.CA = A.strokeMode, this.uA = A.rotation) : console.warn("pop() called without matching push()");
|
|
382
382
|
}
|
|
383
383
|
xA() {
|
|
384
384
|
this.oA = null, this.PA = [], this.uA = 0;
|
|
385
385
|
}
|
|
386
386
|
yA(A, t) {
|
|
387
|
-
return new
|
|
387
|
+
return new x(this.P, A, t);
|
|
388
388
|
}
|
|
389
389
|
MA(A) {
|
|
390
|
-
return new
|
|
390
|
+
return new x(this.P, R, A);
|
|
391
391
|
}
|
|
392
392
|
GA(A, t) {
|
|
393
393
|
this.oA.setUniform(A, t);
|
|
394
394
|
}
|
|
395
|
-
FA(A, t, e,
|
|
395
|
+
FA(A, t, e, s) {
|
|
396
396
|
if (this.oA !== null) {
|
|
397
|
-
const { centerX: a, centerY: h, radians:
|
|
398
|
-
return this.GA("u_rotation",
|
|
397
|
+
const { centerX: a, centerY: h, radians: D, aspectRatio: c } = this.$A(A, t, e, s);
|
|
398
|
+
return this.GA("u_rotation", D), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", c), this.nA.BA(A, t, e, s), void (this.oA = null);
|
|
399
399
|
}
|
|
400
|
-
const
|
|
401
|
-
let
|
|
402
|
-
const
|
|
403
|
-
|
|
400
|
+
const r = this.gA;
|
|
401
|
+
let i = 0, B = 0, o = 0, n = 1;
|
|
402
|
+
const g = this.$A(A, t, e, s);
|
|
403
|
+
i = g.centerX, B = g.centerY, o = g.radians, n = g.aspectRatio, this.lA && (this.IA(r), this.GA("u_color", this.hA), this.GA("u_rotation", o), this.GA("u_center", [i, B]), this.GA("u_aspectRatio", n), this.nA.BA(A, t, e, s)), this.CA && this.DA > 0 && (this.IA(r), this.GA("u_color", this.cA), this.GA("u_rotation", o), this.GA("u_center", [i, B]), this.GA("u_aspectRatio", n), this.nA.iA(A, t, e, s, this.DA)), this.oA = null;
|
|
404
404
|
}
|
|
405
|
-
|
|
405
|
+
YA(A, t, e, s) {
|
|
406
406
|
if (this.oA !== null) {
|
|
407
|
-
const
|
|
408
|
-
this.GA("u_rotation",
|
|
409
|
-
const
|
|
410
|
-
return this.aA.
|
|
407
|
+
const l = (A + e) / 2, d = (t + s) / 2, C = Math.abs(e - A) || 1, P = Math.abs(s - t) || 1, { centerX: p, centerY: m, radians: y, aspectRatio: b } = this.$A(l - C / 2, d - P / 2, C, P);
|
|
408
|
+
this.GA("u_rotation", y), this.GA("u_center", [p, m]), this.GA("u_aspectRatio", b);
|
|
409
|
+
const _ = this.DA > 0 ? this.DA : 1;
|
|
410
|
+
return this.aA.QA(A, t, e, s, _), void (this.oA = null);
|
|
411
411
|
}
|
|
412
|
-
if (!this.
|
|
413
|
-
const
|
|
414
|
-
let a = 0, h = 0,
|
|
415
|
-
if (
|
|
416
|
-
const
|
|
417
|
-
a =
|
|
412
|
+
if (!this.CA || this.DA <= 0) return;
|
|
413
|
+
const r = this.gA, i = (A + e) / 2, B = (t + s) / 2, o = Math.abs(e - A) || 1, n = Math.abs(s - t) || 1, g = this.uA !== 0;
|
|
414
|
+
let a = 0, h = 0, D = 0, c = 1;
|
|
415
|
+
if (g) {
|
|
416
|
+
const l = this.$A(i - o / 2, B - n / 2, o, n);
|
|
417
|
+
a = l.centerX, h = l.centerY, D = l.radians, c = l.aspectRatio;
|
|
418
418
|
}
|
|
419
|
-
this.IA(
|
|
419
|
+
this.IA(r), this.GA("u_color", this.cA), g && (this.GA("u_rotation", D), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", c)), this.aA.QA(A, t, e, s, this.DA);
|
|
420
420
|
}
|
|
421
|
-
|
|
422
|
-
const
|
|
423
|
-
return { centerX: (A + e / 2) /
|
|
421
|
+
$A(A, t, e, s) {
|
|
422
|
+
const r = J(this.P) || [0, 0, this.P.canvas.width, this.P.canvas.height], i = r[2], B = r[3], o = i / B;
|
|
423
|
+
return { centerX: (A + e / 2) / i * 2 - 1, centerY: 1 - (t + s / 2) / B * 2, radians: this.uA * Math.PI / 180, aspectRatio: o };
|
|
424
424
|
}
|
|
425
425
|
TA(A, t, e = {}) {
|
|
426
426
|
return new K(this.P, A, t, e);
|
|
427
427
|
}
|
|
428
|
-
SA(A, t = A, e = A,
|
|
429
|
-
this.OA(A / 255, t / 255, e / 255,
|
|
428
|
+
SA(A, t = A, e = A, s = 255) {
|
|
429
|
+
this.OA(A / 255, t / 255, e / 255, s / 255);
|
|
430
430
|
}
|
|
431
|
-
OA(A = 0, t = 0, e = 0,
|
|
432
|
-
this.P.clearColor(A, t, e,
|
|
431
|
+
OA(A = 0, t = 0, e = 0, s = 0) {
|
|
432
|
+
this.P.clearColor(A, t, e, s), this.P.clear(this.P.COLOR_BUFFER_BIT);
|
|
433
433
|
}
|
|
434
434
|
UA() {
|
|
435
435
|
this.P.viewport(0, 0, this.P.canvas.width, this.P.canvas.height), F(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
|
|
@@ -440,312 +440,484 @@ class rA {
|
|
|
440
440
|
S() {
|
|
441
441
|
this.EA.S(), this.gA.S(), this.nA.S(), this.aA.S();
|
|
442
442
|
}
|
|
443
|
-
kA(A, t, e,
|
|
444
|
-
const
|
|
443
|
+
kA(A, t, e, s, r) {
|
|
444
|
+
const i = this.P, B = s ?? A.width, o = r ?? A.height;
|
|
445
445
|
this.IA(this.EA), this.GA("u_texture", A.texture);
|
|
446
|
-
const
|
|
447
|
-
this.GA("u_rotation",
|
|
446
|
+
const n = this.$A(t, e, B, o);
|
|
447
|
+
this.GA("u_rotation", n.radians), this.GA("u_center", [n.centerX, n.centerY]), this.GA("u_aspectRatio", n.aspectRatio), this.nA.BA(t, e, B, o), i.bindTexture(i.TEXTURE_2D, null), this.oA = null;
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
var s = l.T, i = { cmap: s.cmap, head: s.head, hhea: s.hhea, maxp: s.maxp, hmtx: s.hmtx, loca: s.loca, glyf: s.glyf }, o = { _data: t, _index: e, _offset: r };
|
|
454
|
-
for (var g in i) {
|
|
455
|
-
var n = l.findTable(t, g, r);
|
|
456
|
-
if (n) {
|
|
457
|
-
var a = n[0], h = B[a];
|
|
458
|
-
h == null && (h = i[g].parseTab(t, a, n[1], o)), o[g] = B[a] = h;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
return o;
|
|
462
|
-
}(new Uint8Array(E), 0, 0, {});
|
|
463
|
-
return [A];
|
|
464
|
-
}, l.findTable = function(E, A, t) {
|
|
465
|
-
for (var e = l.B, r = e.readUshort(E, t + 4), B = t + 12, s = 0; s < r; s++) {
|
|
466
|
-
var i = e.readASCII(E, B, 4);
|
|
467
|
-
e.readUint(E, B + 4);
|
|
468
|
-
var o = e.readUint(E, B + 8), g = e.readUint(E, B + 12);
|
|
469
|
-
if (i == A) return [o, g];
|
|
470
|
-
B += 16;
|
|
471
|
-
}
|
|
472
|
-
return null;
|
|
473
|
-
}, l.T = {}, l.B = { readShort: function(E, A) {
|
|
474
|
-
return l.B.t.uint16[0] = E[A] << 8 | E[A + 1], l.B.t.int16[0];
|
|
475
|
-
}, readUshort: function(E, A) {
|
|
476
|
-
return E[A] << 8 | E[A + 1];
|
|
477
|
-
}, readUshorts: function(E, A, t) {
|
|
478
|
-
for (var e = [], r = 0; r < t; r++) e.push(l.B.readUshort(E, A + 2 * r));
|
|
450
|
+
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) {
|
|
451
|
+
const e = [];
|
|
452
|
+
for (let s = 0; s < t; s++) e.push(f.readUshort(E, A + 2 * s));
|
|
479
453
|
return e;
|
|
480
|
-
}, readUint
|
|
481
|
-
|
|
482
|
-
return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3],
|
|
483
|
-
}, readASCII
|
|
484
|
-
|
|
454
|
+
}, readUint(E, A) {
|
|
455
|
+
const t = f.t.uint8;
|
|
456
|
+
return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3], f.t.uint32[0];
|
|
457
|
+
}, readASCII(E, A, t) {
|
|
458
|
+
let e = "";
|
|
459
|
+
for (let s = 0; s < t; s++) e += String.fromCharCode(E[A + s]);
|
|
485
460
|
return e;
|
|
486
|
-
}, t: (
|
|
487
|
-
|
|
461
|
+
}, t: (() => {
|
|
462
|
+
const E = new ArrayBuffer(8);
|
|
463
|
+
return { uint8: new Uint8Array(E), int16: new Int16Array(E), uint16: new Uint16Array(E), uint32: new Uint32Array(E) };
|
|
464
|
+
})() }, BA = { parseTab(E, A, t) {
|
|
465
|
+
const e = { tables: [], ids: {}, off: A };
|
|
488
466
|
E = new Uint8Array(E.buffer, A, t), A = 0;
|
|
489
|
-
|
|
490
|
-
B(E, A);
|
|
491
|
-
var i = B(E, A += 2);
|
|
467
|
+
const s = f, r = s.readUshort, i = r(E, A += 2);
|
|
492
468
|
A += 2;
|
|
493
|
-
|
|
494
|
-
|
|
469
|
+
const B = [];
|
|
470
|
+
for (let o = 0; o < i; o++) {
|
|
471
|
+
const n = r(E, A), g = r(E, A += 2);
|
|
495
472
|
A += 2;
|
|
496
|
-
|
|
473
|
+
const a = s.readUint(E, A);
|
|
497
474
|
A += 4;
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
475
|
+
const h = `p${n}e${g}`;
|
|
476
|
+
let D = B.indexOf(a);
|
|
477
|
+
if (D === -1) {
|
|
478
|
+
let c;
|
|
479
|
+
D = e.tables.length, B.push(a);
|
|
480
|
+
const l = r(E, a);
|
|
481
|
+
c = l === 4 ? this.parse4(E, a) : l === 12 ? this.parse12(E, a) : { format: l }, e.tables.push(c);
|
|
505
482
|
}
|
|
506
|
-
e.ids[
|
|
483
|
+
e.ids[h] != null && console.warn("Multiple tables for one platform+encoding: " + h), e.ids[h] = D;
|
|
507
484
|
}
|
|
508
485
|
return e;
|
|
509
|
-
}, parse4
|
|
510
|
-
|
|
511
|
-
r(E, A += 2);
|
|
512
|
-
var o = r(E, A += 2);
|
|
486
|
+
}, parse4(E, A) {
|
|
487
|
+
const t = f, e = t.readUshort, s = t.readUshorts, r = A, i = e(E, A += 2);
|
|
513
488
|
A += 2;
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
for (
|
|
517
|
-
return
|
|
518
|
-
}, parse12
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
489
|
+
const B = e(E, A += 2) >>> 1, o = { format: 4, searchRange: e(E, A += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
|
|
490
|
+
A += 2, o.entrySelector = e(E, A), A += 2, o.rangeShift = e(E, A), A += 2, o.endCount = s(E, A, B), A += 2 * B, A += 2, o.startCount = s(E, A, B), A += 2 * B;
|
|
491
|
+
for (let n = 0; n < B; n++) o.idDelta.push(t.readShort(E, A)), A += 2;
|
|
492
|
+
return o.idRangeOffset = s(E, A, B), A += 2 * B, o.glyphIdArray = s(E, A, r + i - A >> 1), o;
|
|
493
|
+
}, parse12(E, A) {
|
|
494
|
+
const t = f.readUint;
|
|
495
|
+
t(E, A += 4), t(E, A += 4);
|
|
496
|
+
const e = t(E, A += 4);
|
|
522
497
|
A += 4;
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
498
|
+
const s = new Uint32Array(3 * e);
|
|
499
|
+
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);
|
|
500
|
+
return { format: 12, groups: s };
|
|
501
|
+
} }, EA = { parseTab(E, A, t) {
|
|
502
|
+
const e = f;
|
|
503
|
+
A += 18;
|
|
504
|
+
const s = e.readUshort(E, A);
|
|
505
|
+
A += 2, A += 16;
|
|
506
|
+
const r = e.readShort(E, A);
|
|
507
|
+
A += 2;
|
|
508
|
+
const i = e.readShort(E, A);
|
|
509
|
+
A += 2;
|
|
510
|
+
const B = e.readShort(E, A);
|
|
511
|
+
A += 2;
|
|
512
|
+
const o = e.readShort(E, A);
|
|
513
|
+
return A += 2, A += 6, { unitsPerEm: s, xMin: r, yMin: i, xMax: B, yMax: o, indexToLocFormat: e.readShort(E, A) };
|
|
514
|
+
} }, QA = { parseTab(E, A, t) {
|
|
515
|
+
const e = f;
|
|
530
516
|
A += 4;
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
517
|
+
const s = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], r = {};
|
|
518
|
+
for (let i = 0; i < s.length; i++) {
|
|
519
|
+
const B = s[i], o = B === "advanceWidthMax" || B === "numberOfHMetrics" ? e.readUshort : e.readShort;
|
|
520
|
+
r[B] = o(E, A + 2 * i);
|
|
534
521
|
}
|
|
535
522
|
return r;
|
|
536
|
-
} },
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
return
|
|
543
|
-
} },
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
523
|
+
} }, oA = { parseTab(E, A, t, e) {
|
|
524
|
+
if (!e) throw Error("Font object required for hmtx parsing");
|
|
525
|
+
const s = f, r = [], i = [], B = e.maxp.numGlyphs, o = e.hhea.numberOfHMetrics;
|
|
526
|
+
let n = 0, g = 0, a = 0;
|
|
527
|
+
for (; a < o; ) n = s.readUshort(E, A + (a << 2)), g = s.readShort(E, A + (a << 2) + 2), r.push(n), i.push(g), a++;
|
|
528
|
+
for (; a < B; ) r.push(n), i.push(g), a++;
|
|
529
|
+
return { aWidth: r, lsBearing: i };
|
|
530
|
+
} }, H = { cmap: BA, head: EA, hhea: QA, maxp: { parseTab(E, A, t) {
|
|
531
|
+
const e = f;
|
|
532
|
+
return e.readUint(E, A), A += 4, { numGlyphs: e.readUshort(E, A) };
|
|
533
|
+
} }, hmtx: oA, loca: { parseTab(E, A, t, e) {
|
|
534
|
+
if (!e) throw Error("Font object required for loca parsing");
|
|
535
|
+
const s = f, r = [], i = e.head.indexToLocFormat, B = e.maxp.numGlyphs + 1;
|
|
536
|
+
if (i === 0) for (let o = 0; o < B; o++) r.push(s.readUshort(E, A + (o << 1)) << 1);
|
|
537
|
+
else if (i === 1) for (let o = 0; o < B; o++) r.push(s.readUint(E, A + (o << 2)));
|
|
550
538
|
return r;
|
|
551
|
-
},
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
539
|
+
} }, glyf: { parseTab(E, A, t, e) {
|
|
540
|
+
if (!e) throw Error("Font object required for glyf parsing");
|
|
541
|
+
const s = [], r = e.maxp.numGlyphs;
|
|
542
|
+
for (let i = 0; i < r; i++) s.push(null);
|
|
543
|
+
return s;
|
|
544
|
+
}, VA(E, A) {
|
|
545
|
+
const t = f, e = E.RA, s = E.loca;
|
|
546
|
+
if (s[A] === s[A + 1]) return null;
|
|
547
|
+
const r = w.findTable(e, "glyf", E.HA);
|
|
548
|
+
if (!r) return null;
|
|
549
|
+
let i = r[0] + s[A];
|
|
550
|
+
const B = {};
|
|
551
|
+
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;
|
|
552
|
+
if (B.noc > 0) {
|
|
553
|
+
B.endPts = [];
|
|
554
|
+
for (let h = 0; h < B.noc; h++) B.endPts.push(t.readUshort(e, i)), i += 2;
|
|
555
|
+
const o = t.readUshort(e, i);
|
|
556
|
+
if (i += 2, e.length - i < o) return null;
|
|
557
|
+
i += o;
|
|
558
|
+
const n = B.endPts[B.noc - 1] + 1;
|
|
559
|
+
B.flags = [];
|
|
560
|
+
for (let h = 0; h < n; h++) {
|
|
561
|
+
const D = e[i];
|
|
562
|
+
if (i++, B.flags.push(D), 8 & D) {
|
|
563
|
+
const c = e[i];
|
|
564
|
+
i++;
|
|
565
|
+
for (let l = 0; l < c; l++) B.flags.push(D), h++;
|
|
569
566
|
}
|
|
570
567
|
}
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
568
|
+
B.xs = [];
|
|
569
|
+
for (let h = 0; h < n; h++) {
|
|
570
|
+
const D = B.flags[h], c = !!(16 & D);
|
|
571
|
+
2 & D ? (B.xs.push(c ? e[i] : -e[i]), i++) : c ? B.xs.push(0) : (B.xs.push(t.readShort(e, i)), i += 2);
|
|
574
572
|
}
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
573
|
+
B.ys = [];
|
|
574
|
+
for (let h = 0; h < n; h++) {
|
|
575
|
+
const D = B.flags[h], c = !!(32 & D);
|
|
576
|
+
4 & D ? (B.ys.push(c ? e[i] : -e[i]), i++) : c ? B.ys.push(0) : (B.ys.push(t.readShort(e, i)), i += 2);
|
|
577
|
+
}
|
|
578
|
+
let g = 0, a = 0;
|
|
579
|
+
for (let h = 0; h < n; h++) g += B.xs[h], a += B.ys[h], B.xs[h] = g, B.ys[h] = a;
|
|
580
|
+
} else B.parts = [], B.endPts = [], B.flags = [], B.xs = [], B.ys = [];
|
|
581
|
+
return B;
|
|
582
|
+
} } }, w = { parse: (E) => [((A, t, e, s) => {
|
|
583
|
+
const r = H, i = { RA: A, zA: t, HA: e };
|
|
584
|
+
for (const B in r) {
|
|
585
|
+
const o = B, n = w.findTable(A, o, e);
|
|
586
|
+
if (n) {
|
|
587
|
+
const [g, a] = n;
|
|
588
|
+
let h = s[g];
|
|
589
|
+
h == null && (h = r[o].parseTab(A, g, a, i), s[g] = h), i[o] = h;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
return i;
|
|
593
|
+
})(new Uint8Array(E), 0, 0, {})], findTable(E, A, t) {
|
|
594
|
+
const e = f, s = e.readUshort(E, t + 4);
|
|
595
|
+
let r = t + 12;
|
|
596
|
+
for (let i = 0; i < s; i++) {
|
|
597
|
+
const B = e.readASCII(E, r, 4);
|
|
598
|
+
e.readUint(E, r + 4);
|
|
599
|
+
const o = e.readUint(E, r + 8), n = e.readUint(E, r + 12);
|
|
600
|
+
if (B === A) return [o, n];
|
|
601
|
+
r += 16;
|
|
602
|
+
}
|
|
603
|
+
return null;
|
|
604
|
+
}, T: H, B: f };
|
|
605
|
+
class U {
|
|
606
|
+
constructor() {
|
|
607
|
+
Q(this, "LA", /* @__PURE__ */ new Map());
|
|
608
|
+
Q(this, "JA", /* @__PURE__ */ new Map());
|
|
609
|
+
}
|
|
610
|
+
KA(A) {
|
|
611
|
+
const t = this.WA(A);
|
|
612
|
+
if (this.JA.has(t)) return this.JA.get(t);
|
|
613
|
+
const e = A.cmap;
|
|
614
|
+
if (!e || !e.tables) return this.JA.set(t, null), null;
|
|
615
|
+
const s = ["p3e1", "p3e10", "p0e3", "p0e4"];
|
|
616
|
+
for (const i of s) if (e.ids[i] !== void 0) {
|
|
617
|
+
const B = e.tables[e.ids[i]];
|
|
618
|
+
return this.JA.set(t, B), B;
|
|
619
|
+
}
|
|
620
|
+
const r = e.tables[0] || null;
|
|
621
|
+
return this.JA.set(t, r), r;
|
|
622
|
+
}
|
|
623
|
+
jA(A, t) {
|
|
624
|
+
const e = `${this.WA(A)}_${t}`;
|
|
625
|
+
if (this.LA.has(e)) return this.LA.get(e);
|
|
626
|
+
const s = this.KA(A);
|
|
627
|
+
if (!s) return this.LA.set(e, 0), 0;
|
|
628
|
+
let r = 0;
|
|
629
|
+
return s.format === 4 ? r = this.NA(t, s) : s.format === 12 && (r = this.ZA(t, s)), this.LA.set(e, r), r;
|
|
630
|
+
}
|
|
631
|
+
XA(A, t) {
|
|
632
|
+
const e = t.codePointAt(0);
|
|
633
|
+
return e === void 0 ? 0 : this.jA(A, e);
|
|
634
|
+
}
|
|
635
|
+
qA(A, t) {
|
|
636
|
+
const e = A.hmtx;
|
|
637
|
+
return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
638
|
+
}
|
|
639
|
+
At(A, t) {
|
|
640
|
+
const e = t / A.head.unitsPerEm, s = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
|
|
641
|
+
return { ascender: s, descender: r, lineGap: i, lineHeight: s - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
|
|
642
|
+
}
|
|
643
|
+
tt() {
|
|
644
|
+
this.LA.clear(), this.JA.clear();
|
|
645
|
+
}
|
|
646
|
+
WA(A) {
|
|
647
|
+
return `${A.HA}_${A.RA.length}`;
|
|
648
|
+
}
|
|
649
|
+
NA(A, t) {
|
|
650
|
+
const e = t.endCount.length;
|
|
651
|
+
let s = -1;
|
|
652
|
+
for (let r = 0; r < e; r++) if (A <= t.endCount[r]) {
|
|
653
|
+
s = r;
|
|
654
|
+
break;
|
|
655
|
+
}
|
|
656
|
+
if (s === -1 || A < t.startCount[s]) return 0;
|
|
657
|
+
if (t.idRangeOffset[s] === 0) return A + t.idDelta[s] & 65535;
|
|
658
|
+
{
|
|
659
|
+
const r = t.idRangeOffset[s] / 2 + (A - t.startCount[s]) - (e - s);
|
|
660
|
+
if (r >= 0 && r < t.glyphIdArray.length) {
|
|
661
|
+
const i = t.glyphIdArray[r];
|
|
662
|
+
return i === 0 ? 0 : i + t.idDelta[s] & 65535;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
return 0;
|
|
666
|
+
}
|
|
667
|
+
ZA(A, t) {
|
|
668
|
+
const e = t.groups.length / 3;
|
|
669
|
+
for (let s = 0; s < e; s++) {
|
|
670
|
+
const r = t.groups[3 * s], i = t.groups[3 * s + 1], B = t.groups[3 * s + 2];
|
|
671
|
+
if (A >= r && A <= i) return B + (A - r);
|
|
672
|
+
}
|
|
673
|
+
return 0;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
class nA {
|
|
677
|
+
constructor(A) {
|
|
678
|
+
Q(this, "et");
|
|
679
|
+
this.et = A;
|
|
680
|
+
}
|
|
681
|
+
st(A) {
|
|
584
682
|
var e;
|
|
585
683
|
const t = [];
|
|
586
|
-
return (e = A == null ? void 0 : A.cmap) != null && e.tables ? (A.cmap.tables.forEach((
|
|
587
|
-
if (
|
|
588
|
-
const
|
|
589
|
-
t.push(...
|
|
590
|
-
} else if (
|
|
591
|
-
const
|
|
592
|
-
t.push(...
|
|
684
|
+
return (e = A == null ? void 0 : A.cmap) != null && e.tables ? (A.cmap.tables.forEach((s) => {
|
|
685
|
+
if (s.format === 4) {
|
|
686
|
+
const r = this.rt(s);
|
|
687
|
+
t.push(...r);
|
|
688
|
+
} else if (s.format === 12) {
|
|
689
|
+
const r = this.Bt(s);
|
|
690
|
+
t.push(...r);
|
|
593
691
|
}
|
|
594
692
|
}), [...new Set(t)]) : [];
|
|
595
693
|
}
|
|
596
|
-
|
|
694
|
+
it(A, t) {
|
|
695
|
+
return this.et.XA(A, t) > 0;
|
|
696
|
+
}
|
|
697
|
+
Qt(A, t) {
|
|
698
|
+
for (const e of t) if (!this.it(A, e)) return !1;
|
|
699
|
+
return !0;
|
|
700
|
+
}
|
|
701
|
+
Et(A, t) {
|
|
702
|
+
return t.filter((e) => this.it(A, e));
|
|
703
|
+
}
|
|
704
|
+
gt(A) {
|
|
705
|
+
return A.filter((t) => this.ot(t));
|
|
706
|
+
}
|
|
707
|
+
rt(A) {
|
|
597
708
|
const t = [];
|
|
598
709
|
if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
|
|
599
710
|
for (let e = 0; e < A.startCount.length; e++) {
|
|
600
|
-
const
|
|
601
|
-
if (
|
|
602
|
-
for (let
|
|
603
|
-
if (this.
|
|
604
|
-
const
|
|
605
|
-
t.push(
|
|
711
|
+
const s = A.startCount[e], r = A.endCount[e];
|
|
712
|
+
if (s !== 65535 || r !== 65535) {
|
|
713
|
+
for (let i = s; i <= r; i++)
|
|
714
|
+
if (this.nt(A, i, e) > 0) try {
|
|
715
|
+
const B = String.fromCodePoint(i);
|
|
716
|
+
t.push(B);
|
|
717
|
+
} catch {
|
|
606
718
|
}
|
|
607
719
|
}
|
|
608
720
|
}
|
|
609
721
|
return t;
|
|
610
722
|
}
|
|
611
|
-
|
|
723
|
+
Bt(A) {
|
|
612
724
|
const t = [];
|
|
613
725
|
if (!A.groups) return t;
|
|
614
726
|
for (let e = 0; e < A.groups.length; e += 3) {
|
|
615
|
-
const
|
|
616
|
-
for (let
|
|
617
|
-
if (
|
|
618
|
-
const o = String.fromCodePoint(
|
|
727
|
+
const s = A.groups[e], r = A.groups[e + 1], i = A.groups[e + 2];
|
|
728
|
+
for (let B = s; B <= r; B++)
|
|
729
|
+
if (i + (B - s) > 0) try {
|
|
730
|
+
const o = String.fromCodePoint(B);
|
|
619
731
|
t.push(o);
|
|
732
|
+
} catch {
|
|
620
733
|
}
|
|
621
734
|
}
|
|
622
735
|
return t;
|
|
623
736
|
}
|
|
624
|
-
|
|
737
|
+
nt(A, t, e) {
|
|
625
738
|
if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
|
|
626
739
|
{
|
|
627
|
-
const
|
|
628
|
-
if (
|
|
629
|
-
const
|
|
630
|
-
if (
|
|
740
|
+
const s = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
|
|
741
|
+
if (s >= 0 && A.glyphIdArray && s < A.glyphIdArray.length) {
|
|
742
|
+
const r = A.glyphIdArray[s];
|
|
743
|
+
if (r !== 0) return r + A.idDelta[e] & 65535;
|
|
631
744
|
}
|
|
632
745
|
}
|
|
633
746
|
return 0;
|
|
634
747
|
}
|
|
635
|
-
|
|
636
|
-
return A.filter((t) => this.JA(t));
|
|
637
|
-
}
|
|
638
|
-
JA(A) {
|
|
748
|
+
ot(A) {
|
|
639
749
|
const t = A.codePointAt(0) || 0;
|
|
640
750
|
return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
|
|
641
751
|
}
|
|
642
752
|
}
|
|
643
|
-
class
|
|
753
|
+
class gA {
|
|
754
|
+
constructor() {
|
|
755
|
+
Q(this, "ht");
|
|
756
|
+
const A = new U();
|
|
757
|
+
this.ht = new nA(A);
|
|
758
|
+
}
|
|
759
|
+
extractCharacters(A) {
|
|
760
|
+
return this.ht.st(A);
|
|
761
|
+
}
|
|
762
|
+
filterProblematicCharacters(A) {
|
|
763
|
+
return this.ht.gt(A);
|
|
764
|
+
}
|
|
765
|
+
characterExists(A, t) {
|
|
766
|
+
return this.ht.it(A, t);
|
|
767
|
+
}
|
|
768
|
+
allCharactersExist(A, t) {
|
|
769
|
+
return this.ht.Qt(A, t);
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
class hA {
|
|
644
773
|
constructor(A) {
|
|
645
|
-
Q(this, "
|
|
646
|
-
Q(this, "
|
|
647
|
-
Q(this, "
|
|
648
|
-
this
|
|
774
|
+
Q(this, "lt");
|
|
775
|
+
Q(this, "ct");
|
|
776
|
+
Q(this, "Dt");
|
|
777
|
+
Q(this, "Ct");
|
|
778
|
+
this.Dt = A, this.Ct = new U(), this.lt = document.createElement("canvas"), this.ct = this.lt.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
649
779
|
}
|
|
650
|
-
createTextureAtlas(A, t, e,
|
|
651
|
-
const
|
|
652
|
-
this.
|
|
653
|
-
const
|
|
654
|
-
return
|
|
780
|
+
createTextureAtlas(A, t, e, s) {
|
|
781
|
+
const r = A.length, i = Math.ceil(Math.sqrt(r)), B = Math.ceil(r / i), o = t.width * i, n = t.height * B, g = typeof s == "object" ? s : null;
|
|
782
|
+
this.ut(o, n), this.Pt(A, t, i, e, g);
|
|
783
|
+
const a = this.Dt.TA(o, n, { filter: "nearest" });
|
|
784
|
+
return a.update(this.lt), { framebuffer: a, columns: i, rows: B };
|
|
655
785
|
}
|
|
656
|
-
|
|
657
|
-
this.
|
|
786
|
+
ut(A, t) {
|
|
787
|
+
this.lt.width = A, this.lt.height = t, this.lt.style.width = A + "px", this.lt.style.height = A + "px", this.ct.imageSmoothingEnabled = !1, this.lt.style.imageRendering = "pixelated", this.ct.fillStyle = "black", this.ct.fillRect(0, 0, A, t), this.ct.textBaseline = "top", this.ct.textAlign = "left", this.ct.fillStyle = "white";
|
|
658
788
|
}
|
|
659
|
-
|
|
789
|
+
Pt(A, t, e, s, r) {
|
|
790
|
+
const i = s / r.head.unitsPerEm;
|
|
660
791
|
for (let B = 0; B < A.length; B++) {
|
|
661
|
-
const
|
|
662
|
-
|
|
792
|
+
const o = B % e, n = Math.floor(B / e), g = A[B].character, a = this.It(r, g);
|
|
793
|
+
if (!a) continue;
|
|
794
|
+
const h = g.codePointAt(0) || 0, D = this.Ct.jA(r, h), c = this.wt(r, D) * i, l = o * t.width, d = n * t.height, C = l + 0.5 * t.width, P = d + 0.5 * t.height, p = Math.round(C - 0.5 * t.width), m = Math.round(P - 0.5 * s), y = p + 0.5 * (t.width - c), b = m + r.hhea.ascender * i;
|
|
795
|
+
this.ft(a, y, b, i);
|
|
663
796
|
}
|
|
664
797
|
}
|
|
665
|
-
|
|
666
|
-
const
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
798
|
+
It(A, t) {
|
|
799
|
+
const e = t.codePointAt(0) || 0, s = this.Ct.jA(A, e);
|
|
800
|
+
if (s === 0) return null;
|
|
801
|
+
if (A.glyf && A.glyf[s] !== null) return A.glyf[s];
|
|
802
|
+
if (w && w.T && w.T.glyf && w.T.glyf.VA) {
|
|
803
|
+
const r = w.T.glyf.VA(A, s);
|
|
804
|
+
return A.glyf && r && (A.glyf[s] = r), r;
|
|
670
805
|
}
|
|
671
|
-
|
|
806
|
+
return null;
|
|
807
|
+
}
|
|
808
|
+
wt(A, t) {
|
|
809
|
+
const e = A.hmtx;
|
|
810
|
+
return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
811
|
+
}
|
|
812
|
+
ft(A, t, e, s) {
|
|
813
|
+
if (!A || !A.xs || A.noc === 0) return;
|
|
814
|
+
const { xs: r, ys: i, endPts: B, flags: o } = A;
|
|
815
|
+
if (!(r && i && B && o)) return;
|
|
816
|
+
this.ct.beginPath();
|
|
817
|
+
let n = 0;
|
|
818
|
+
for (let g = 0; g < B.length; g++) {
|
|
819
|
+
const a = B[g];
|
|
820
|
+
if (!(a < n)) {
|
|
821
|
+
if (a >= n) {
|
|
822
|
+
const h = t + r[n] * s, D = e - i[n] * s;
|
|
823
|
+
this.ct.moveTo(h, D);
|
|
824
|
+
let c = n + 1;
|
|
825
|
+
for (; c <= a; )
|
|
826
|
+
if (1 & o[c]) {
|
|
827
|
+
const l = t + r[c] * s, d = e - i[c] * s;
|
|
828
|
+
this.ct.lineTo(l, d), c++;
|
|
829
|
+
} else {
|
|
830
|
+
const l = t + r[c] * s, d = e - i[c] * s;
|
|
831
|
+
let C = c + 1 > a ? n : c + 1;
|
|
832
|
+
if (1 & o[C]) {
|
|
833
|
+
const P = t + r[C] * s, p = e - i[C] * s;
|
|
834
|
+
this.ct.quadraticCurveTo(l, d, P, p), c = C + 1;
|
|
835
|
+
} else {
|
|
836
|
+
const P = (l + (t + r[C] * s)) / 2, p = (d + (e - i[C] * s)) / 2;
|
|
837
|
+
this.ct.quadraticCurveTo(l, d, P, p), c = C;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
this.ct.closePath();
|
|
841
|
+
}
|
|
842
|
+
n = a + 1;
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
this.ct.fill();
|
|
672
846
|
}
|
|
673
847
|
}
|
|
674
|
-
class
|
|
848
|
+
class aA {
|
|
675
849
|
constructor() {
|
|
676
|
-
Q(this, "
|
|
677
|
-
|
|
678
|
-
this.XA = document.createElement("canvas"), this.qA = this.XA.getContext("2d");
|
|
850
|
+
Q(this, "et");
|
|
851
|
+
this.et = new U();
|
|
679
852
|
}
|
|
680
853
|
calculateMaxGlyphDimensions(A, t, e) {
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
for (const
|
|
684
|
-
const
|
|
685
|
-
|
|
854
|
+
let s = 0;
|
|
855
|
+
const r = this.et.At(e, t), i = r.lineHeight;
|
|
856
|
+
for (const B of A) {
|
|
857
|
+
const o = this.et.XA(e, B);
|
|
858
|
+
if (o === 0) continue;
|
|
859
|
+
const n = this.et.qA(e, o) * r.scale;
|
|
860
|
+
s = Math.max(s, n);
|
|
686
861
|
}
|
|
687
|
-
return { width:
|
|
862
|
+
return { width: Math.ceil(s), height: Math.ceil(i) };
|
|
863
|
+
}
|
|
864
|
+
getCharacterAdvanceWidth(A, t, e) {
|
|
865
|
+
const s = this.et.At(e, t), r = this.et.XA(e, A);
|
|
866
|
+
return this.et.qA(e, r) * s.scale;
|
|
867
|
+
}
|
|
868
|
+
getFontMetrics(A, t) {
|
|
869
|
+
return this.et.At(t, A);
|
|
870
|
+
}
|
|
871
|
+
tt() {
|
|
872
|
+
this.et.tt();
|
|
688
873
|
}
|
|
689
874
|
}
|
|
690
|
-
class
|
|
875
|
+
class lA {
|
|
876
|
+
constructor() {
|
|
877
|
+
Q(this, "Ct");
|
|
878
|
+
this.Ct = new U();
|
|
879
|
+
}
|
|
691
880
|
createCharacterObjects(A, t) {
|
|
692
|
-
return A.map((e,
|
|
693
|
-
const
|
|
694
|
-
let
|
|
881
|
+
return A.map((e, s) => {
|
|
882
|
+
const r = e.codePointAt(0) || 0, i = this.dt(s);
|
|
883
|
+
let B = 0;
|
|
695
884
|
if (t.hmtx && t.hmtx.aWidth) {
|
|
696
|
-
const o = this.
|
|
697
|
-
o > 0 && t.hmtx.aWidth[o] !== void 0 && (
|
|
885
|
+
const o = this.Ct.jA(t, r);
|
|
886
|
+
o > 0 && t.hmtx.aWidth[o] !== void 0 && (B = t.hmtx.aWidth[o]);
|
|
698
887
|
}
|
|
699
|
-
return { character: e, unicode:
|
|
888
|
+
return { character: e, unicode: r, color: i, advanceWidth: B };
|
|
700
889
|
});
|
|
701
890
|
}
|
|
702
|
-
|
|
703
|
-
const e = A.cmap;
|
|
704
|
-
if (!e || !e.tables) return 0;
|
|
705
|
-
for (const r of e.tables) if (r.format === 4) {
|
|
706
|
-
for (let B = 0; B < r.startCount.length; B++) if (t >= r.startCount[B] && t <= r.endCount[B]) {
|
|
707
|
-
if (r.idRangeOffset[B] === 0) return t + r.idDelta[B] & 65535;
|
|
708
|
-
{
|
|
709
|
-
const s = r.idRangeOffset[B] / 2 + (t - r.startCount[B]) - (r.startCount.length - B);
|
|
710
|
-
if (s >= 0 && s < r.glyphIdArray.length) {
|
|
711
|
-
const i = r.glyphIdArray[s];
|
|
712
|
-
if (i !== 0) return i + r.idDelta[B] & 65535;
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
return 0;
|
|
718
|
-
}
|
|
719
|
-
At(A) {
|
|
891
|
+
dt(A) {
|
|
720
892
|
return [A % 256, Math.floor(A / 256) % 256, Math.floor(A / 65536) % 256];
|
|
721
893
|
}
|
|
722
894
|
getCharacterColor(A, t) {
|
|
723
|
-
if (!
|
|
724
|
-
const e = t.find((
|
|
895
|
+
if (!u.C(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
|
|
896
|
+
const e = t.find((s) => s.character === A);
|
|
725
897
|
return e ? e.color : [0, 0, 0];
|
|
726
898
|
}
|
|
727
899
|
getCharacterColors(A, t) {
|
|
728
|
-
return
|
|
900
|
+
return u.C(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? A.split("").map((e) => this.getCharacterColor(e, t) || [0, 0, 0]) : [[0, 0, 0]];
|
|
729
901
|
}
|
|
730
902
|
}
|
|
731
|
-
class
|
|
903
|
+
class cA {
|
|
732
904
|
constructor(A, t = 16) {
|
|
733
|
-
Q(this, "
|
|
734
|
-
Q(this, "
|
|
735
|
-
Q(this, "
|
|
736
|
-
Q(this, "
|
|
737
|
-
Q(this, "
|
|
738
|
-
Q(this, "
|
|
739
|
-
Q(this, "
|
|
740
|
-
Q(this, "
|
|
741
|
-
Q(this, "
|
|
742
|
-
Q(this, "
|
|
743
|
-
Q(this, "
|
|
744
|
-
Q(this, "
|
|
745
|
-
Q(this, "
|
|
746
|
-
this.
|
|
905
|
+
Q(this, "_t");
|
|
906
|
+
Q(this, "vt", []);
|
|
907
|
+
Q(this, "bt");
|
|
908
|
+
Q(this, "xt", 16);
|
|
909
|
+
Q(this, "yt", 0);
|
|
910
|
+
Q(this, "Mt", 0);
|
|
911
|
+
Q(this, "Gt", { width: 0, height: 0 });
|
|
912
|
+
Q(this, "Ft");
|
|
913
|
+
Q(this, "$t", "UrsaFont");
|
|
914
|
+
Q(this, "Yt");
|
|
915
|
+
Q(this, "Tt");
|
|
916
|
+
Q(this, "St");
|
|
917
|
+
Q(this, "Ot");
|
|
918
|
+
this.xt = t, this.Yt = new gA(), this.Tt = new hA(A), this.St = new aA(), this.Ot = new lA();
|
|
747
919
|
}
|
|
748
|
-
async
|
|
920
|
+
async Ut(A) {
|
|
749
921
|
let t;
|
|
750
922
|
if (A) {
|
|
751
923
|
const e = await fetch(A);
|
|
@@ -754,121 +926,121 @@ class QA {
|
|
|
754
926
|
} else
|
|
755
927
|
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
|
|
756
928
|
`)).arrayBuffer();
|
|
757
|
-
await this.
|
|
929
|
+
await this.kt(t), this._t = w.parse(t)[0], await this.Vt();
|
|
758
930
|
}
|
|
759
|
-
|
|
760
|
-
if (A === void 0) return this.
|
|
761
|
-
this.
|
|
762
|
-
const t = this.
|
|
763
|
-
this.
|
|
931
|
+
Rt(A) {
|
|
932
|
+
if (A === void 0) return this.xt;
|
|
933
|
+
this.xt = A, this.Gt = this.St.calculateMaxGlyphDimensions(this.vt.map((e) => e.character), this.xt, this._t);
|
|
934
|
+
const t = this.Tt.createTextureAtlas(this.vt, this.Gt, this.xt, this._t);
|
|
935
|
+
this.bt = t.framebuffer, this.yt = t.columns, this.Mt = t.rows;
|
|
764
936
|
}
|
|
765
|
-
async
|
|
937
|
+
async Ht(A) {
|
|
766
938
|
try {
|
|
767
939
|
const t = await fetch(A);
|
|
768
940
|
if (!t.ok) throw new I(`Failed to load font file: ${t.status} ${t.statusText}`);
|
|
769
941
|
const e = await t.arrayBuffer();
|
|
770
|
-
await this.
|
|
771
|
-
const
|
|
772
|
-
if (!
|
|
773
|
-
this.
|
|
942
|
+
await this.kt(e);
|
|
943
|
+
const s = w.parse(e);
|
|
944
|
+
if (!s || s.length === 0) throw Error("Failed to parse font file");
|
|
945
|
+
this._t = s[0], await this.Vt();
|
|
774
946
|
} catch (t) {
|
|
775
947
|
throw new I("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
|
|
776
948
|
}
|
|
777
949
|
}
|
|
778
|
-
async
|
|
950
|
+
async kt(A) {
|
|
779
951
|
const t = Date.now();
|
|
780
|
-
this
|
|
952
|
+
this.$t = this.$t === "UrsaFont" ? "UrsaFont" : "CustomFont_" + t, this.Ft = new FontFace(this.$t, A), await this.Ft.load(), document.fonts.add(this.Ft);
|
|
781
953
|
}
|
|
782
|
-
async
|
|
783
|
-
const A = this.
|
|
784
|
-
this.
|
|
785
|
-
const e = this.
|
|
786
|
-
this.
|
|
954
|
+
async Vt() {
|
|
955
|
+
const A = this.Yt.extractCharacters(this._t), t = this.Yt.filterProblematicCharacters(A);
|
|
956
|
+
this.vt = this.Ot.createCharacterObjects(t, this._t), this.Gt = this.St.calculateMaxGlyphDimensions(t, this.xt, this._t);
|
|
957
|
+
const e = this.Tt.createTextureAtlas(this.vt, this.Gt, this.xt, this._t);
|
|
958
|
+
this.bt = e.framebuffer, this.yt = e.columns, this.Mt = e.rows;
|
|
787
959
|
}
|
|
788
960
|
getCharacterColor(A) {
|
|
789
|
-
return this.
|
|
961
|
+
return this.Ot.getCharacterColor(A, this.vt);
|
|
790
962
|
}
|
|
791
963
|
getCharacterColors(A) {
|
|
792
|
-
return this.
|
|
964
|
+
return this.Ot.getCharacterColors(A, this.vt);
|
|
793
965
|
}
|
|
794
966
|
hasAllCharacters(A) {
|
|
795
967
|
if (typeof A != "string" || A.length === 0) return !1;
|
|
796
|
-
const t = new Set(this.
|
|
968
|
+
const t = new Set(this.vt.map((e) => e.character));
|
|
797
969
|
for (const e of A) if (!t.has(e)) return !1;
|
|
798
970
|
return !0;
|
|
799
971
|
}
|
|
800
972
|
S() {
|
|
801
|
-
this.
|
|
973
|
+
this.bt.S(), document.fonts.delete(this.Ft);
|
|
802
974
|
}
|
|
803
975
|
get fontFramebuffer() {
|
|
804
|
-
return this.
|
|
976
|
+
return this.bt;
|
|
805
977
|
}
|
|
806
978
|
get characters() {
|
|
807
|
-
return this.
|
|
979
|
+
return this.vt;
|
|
808
980
|
}
|
|
809
981
|
get textureColumns() {
|
|
810
|
-
return this.
|
|
982
|
+
return this.yt;
|
|
811
983
|
}
|
|
812
984
|
get textureRows() {
|
|
813
|
-
return this.
|
|
985
|
+
return this.Mt;
|
|
814
986
|
}
|
|
815
987
|
get maxGlyphDimensions() {
|
|
816
|
-
return this.
|
|
988
|
+
return this.Gt;
|
|
817
989
|
}
|
|
818
990
|
get fontSize() {
|
|
819
|
-
return this.
|
|
991
|
+
return this.xt;
|
|
820
992
|
}
|
|
821
993
|
get font() {
|
|
822
|
-
return this.
|
|
994
|
+
return this._t;
|
|
823
995
|
}
|
|
824
996
|
}
|
|
825
|
-
class
|
|
997
|
+
class DA {
|
|
826
998
|
constructor(A, t, e) {
|
|
827
|
-
Q(this, "
|
|
828
|
-
Q(this, "
|
|
999
|
+
Q(this, "zt");
|
|
1000
|
+
Q(this, "Lt");
|
|
829
1001
|
Q(this, "p");
|
|
830
1002
|
Q(this, "_");
|
|
831
|
-
Q(this, "
|
|
832
|
-
Q(this, "
|
|
833
|
-
Q(this, "
|
|
834
|
-
Q(this, "
|
|
835
|
-
Q(this, "
|
|
836
|
-
Q(this, "
|
|
837
|
-
this.
|
|
1003
|
+
Q(this, "Jt");
|
|
1004
|
+
Q(this, "Kt");
|
|
1005
|
+
Q(this, "Wt", !1);
|
|
1006
|
+
Q(this, "jt");
|
|
1007
|
+
Q(this, "Nt");
|
|
1008
|
+
Q(this, "Zt");
|
|
1009
|
+
this.jt = A, this.Nt = t, this.Zt = e, this.xA();
|
|
838
1010
|
}
|
|
839
1011
|
xA() {
|
|
840
|
-
this.
|
|
1012
|
+
this.Wt || (this.zt = Math.floor(this.jt.width / this.Nt), this.Lt = Math.floor(this.jt.height / this.Zt)), this.Xt();
|
|
841
1013
|
}
|
|
842
|
-
|
|
843
|
-
this.p = this.
|
|
1014
|
+
Xt() {
|
|
1015
|
+
this.p = this.zt * this.Nt, this._ = this.Lt * this.Zt, this.Jt = Math.floor((this.jt.width - this.p) / 2), this.Kt = Math.floor((this.jt.height - this._) / 2);
|
|
844
1016
|
}
|
|
845
|
-
|
|
846
|
-
this.
|
|
1017
|
+
qt(A, t) {
|
|
1018
|
+
this.Nt = A, this.Zt = t, this.xA();
|
|
847
1019
|
}
|
|
848
|
-
|
|
849
|
-
this.
|
|
1020
|
+
Ae(A, t) {
|
|
1021
|
+
this.Wt = !0, this.zt = A, this.Lt = t, this.Xt();
|
|
850
1022
|
}
|
|
851
|
-
|
|
852
|
-
this.
|
|
1023
|
+
te() {
|
|
1024
|
+
this.Wt = !1, this.xA();
|
|
853
1025
|
}
|
|
854
|
-
|
|
855
|
-
this.
|
|
1026
|
+
ee() {
|
|
1027
|
+
this.Wt ? this.Xt() : this.xA();
|
|
856
1028
|
}
|
|
857
|
-
|
|
858
|
-
if (A === void 0) return this.
|
|
859
|
-
this.
|
|
1029
|
+
se(A) {
|
|
1030
|
+
if (A === void 0) return this.Wt;
|
|
1031
|
+
this.Wt = A;
|
|
860
1032
|
}
|
|
861
1033
|
get cellWidth() {
|
|
862
|
-
return this.
|
|
1034
|
+
return this.Nt;
|
|
863
1035
|
}
|
|
864
1036
|
get cellHeight() {
|
|
865
|
-
return this.
|
|
1037
|
+
return this.Zt;
|
|
866
1038
|
}
|
|
867
1039
|
get cols() {
|
|
868
|
-
return this.
|
|
1040
|
+
return this.zt;
|
|
869
1041
|
}
|
|
870
1042
|
get rows() {
|
|
871
|
-
return this.
|
|
1043
|
+
return this.Lt;
|
|
872
1044
|
}
|
|
873
1045
|
get width() {
|
|
874
1046
|
return this.p;
|
|
@@ -877,112 +1049,112 @@ class oA {
|
|
|
877
1049
|
return this._;
|
|
878
1050
|
}
|
|
879
1051
|
get offsetX() {
|
|
880
|
-
return this.
|
|
1052
|
+
return this.Jt;
|
|
881
1053
|
}
|
|
882
1054
|
get offsetY() {
|
|
883
|
-
return this.
|
|
1055
|
+
return this.Kt;
|
|
884
1056
|
}
|
|
885
1057
|
}
|
|
886
|
-
class
|
|
1058
|
+
class CA {
|
|
887
1059
|
constructor(A, t = !1, e = {}) {
|
|
888
|
-
Q(this, "
|
|
889
|
-
Q(this, "
|
|
890
|
-
Q(this, "
|
|
891
|
-
Q(this, "
|
|
1060
|
+
Q(this, "jt");
|
|
1061
|
+
Q(this, "re");
|
|
1062
|
+
Q(this, "Be");
|
|
1063
|
+
Q(this, "ie");
|
|
892
1064
|
Q(this, "onTransformChange");
|
|
893
|
-
this.
|
|
1065
|
+
this.re = A, this.Be = t, this.jt = this.Qe(e.width, e.height), t && this.setupTransformObserver();
|
|
894
1066
|
}
|
|
895
|
-
|
|
896
|
-
var
|
|
1067
|
+
Qe(A, t) {
|
|
1068
|
+
var s;
|
|
897
1069
|
const e = document.createElement("canvas");
|
|
898
|
-
if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.
|
|
1070
|
+
if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.Be) e.width = A || 800, e.height = t || 600, document.body.appendChild(e);
|
|
899
1071
|
else {
|
|
900
|
-
const
|
|
901
|
-
let
|
|
902
|
-
if (this.
|
|
903
|
-
const
|
|
904
|
-
(
|
|
1072
|
+
const r = this.re.getBoundingClientRect();
|
|
1073
|
+
let i = Math.round(r.width), B = Math.round(r.height);
|
|
1074
|
+
if (this.re instanceof HTMLVideoElement) {
|
|
1075
|
+
const g = this.re;
|
|
1076
|
+
(i === 0 || B === 0) && g.videoWidth > 0 && g.videoHeight > 0 && (i = g.videoWidth, B = g.videoHeight);
|
|
905
1077
|
}
|
|
906
|
-
e.width =
|
|
907
|
-
const o = window.getComputedStyle(this.
|
|
908
|
-
let
|
|
909
|
-
isNaN(
|
|
1078
|
+
e.width = i, e.height = B, e.style.position = "absolute", e.style.pointerEvents = "none";
|
|
1079
|
+
const o = window.getComputedStyle(this.re);
|
|
1080
|
+
let n = parseInt(o.zIndex || "0", 10);
|
|
1081
|
+
isNaN(n) && (n = 0), e.style.zIndex = "" + (n + 1), this.Ee(e), (s = this.re.parentNode) == null || s.insertBefore(e, this.re.nextSibling);
|
|
910
1082
|
}
|
|
911
1083
|
return e;
|
|
912
1084
|
}
|
|
913
|
-
|
|
914
|
-
const t = this.
|
|
915
|
-
let e = this.
|
|
1085
|
+
Ee(A) {
|
|
1086
|
+
const t = this.re.getBoundingClientRect();
|
|
1087
|
+
let e = this.re.offsetParent;
|
|
916
1088
|
if (e && e !== document.body) {
|
|
917
|
-
const
|
|
918
|
-
A.style.top = t.top -
|
|
1089
|
+
const s = e.getBoundingClientRect();
|
|
1090
|
+
A.style.top = t.top - s.top + "px", A.style.left = t.left - s.left + "px";
|
|
919
1091
|
} else A.style.top = t.top + window.scrollY + "px", A.style.left = t.left + window.scrollX + "px";
|
|
920
1092
|
}
|
|
921
|
-
|
|
922
|
-
if (this.
|
|
1093
|
+
ee(A, t) {
|
|
1094
|
+
if (this.Be) this.jt.width = A ?? this.jt.width, this.jt.height = t ?? this.jt.height;
|
|
923
1095
|
else {
|
|
924
|
-
const e = this.
|
|
925
|
-
let
|
|
926
|
-
if (this.
|
|
927
|
-
const
|
|
928
|
-
(
|
|
1096
|
+
const e = this.re.getBoundingClientRect();
|
|
1097
|
+
let s = Math.round(e.width), r = Math.round(e.height);
|
|
1098
|
+
if (this.re instanceof HTMLVideoElement) {
|
|
1099
|
+
const i = this.re;
|
|
1100
|
+
(s === 0 || r === 0) && i.videoWidth > 0 && i.videoHeight > 0 && (s = i.videoWidth, r = i.videoHeight);
|
|
929
1101
|
}
|
|
930
|
-
this.
|
|
1102
|
+
this.jt.width = s, this.jt.height = r, this.Ee(this.jt);
|
|
931
1103
|
}
|
|
932
1104
|
}
|
|
933
|
-
|
|
934
|
-
const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.
|
|
1105
|
+
ge() {
|
|
1106
|
+
const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.jt.getContext("webgl2", A) || this.jt.getContext("webgl", A);
|
|
935
1107
|
if (!t) throw new I("WebGL context could not be created. Ensure your browser supports WebGL.");
|
|
936
1108
|
return t;
|
|
937
1109
|
}
|
|
938
1110
|
setupTransformObserver() {
|
|
939
|
-
this.
|
|
1111
|
+
this.ie = new ResizeObserver((A) => {
|
|
940
1112
|
for (const t of A) {
|
|
941
1113
|
const e = t.contentRect;
|
|
942
|
-
!this.onTransformChange || Math.round(e.width) === this.
|
|
1114
|
+
!this.onTransformChange || Math.round(e.width) === this.jt.width && Math.round(e.height) === this.jt.height || this.onTransformChange();
|
|
943
1115
|
}
|
|
944
|
-
}), this.
|
|
1116
|
+
}), this.ie.observe(this.jt);
|
|
945
1117
|
}
|
|
946
1118
|
S() {
|
|
947
|
-
this.
|
|
948
|
-
const A = this.
|
|
1119
|
+
this.ie && this.ie.disconnect();
|
|
1120
|
+
const A = this.jt.getContext("webgl") || this.jt.getContext("webgl2");
|
|
949
1121
|
if (A) {
|
|
950
1122
|
const t = A.getExtension("WEBGL_lose_context");
|
|
951
1123
|
t && t.loseContext();
|
|
952
1124
|
}
|
|
953
|
-
this.
|
|
1125
|
+
this.jt.parentNode && this.jt.parentNode.removeChild(this.jt);
|
|
954
1126
|
}
|
|
955
1127
|
get canvas() {
|
|
956
|
-
return this.
|
|
1128
|
+
return this.jt;
|
|
957
1129
|
}
|
|
958
1130
|
get width() {
|
|
959
|
-
return this.
|
|
1131
|
+
return this.jt.width;
|
|
960
1132
|
}
|
|
961
1133
|
get height() {
|
|
962
|
-
return this.
|
|
1134
|
+
return this.jt.height;
|
|
963
1135
|
}
|
|
964
1136
|
}
|
|
965
|
-
class
|
|
966
|
-
constructor(A, t, e,
|
|
967
|
-
Q(this, "
|
|
968
|
-
Q(this, "
|
|
969
|
-
Q(this, "
|
|
970
|
-
Q(this, "
|
|
971
|
-
Q(this, "
|
|
972
|
-
Q(this, "
|
|
973
|
-
Q(this, "
|
|
974
|
-
Q(this, "
|
|
1137
|
+
class M {
|
|
1138
|
+
constructor(A, t, e, s = {}) {
|
|
1139
|
+
Q(this, "Dt");
|
|
1140
|
+
Q(this, "oe");
|
|
1141
|
+
Q(this, "ne");
|
|
1142
|
+
Q(this, "ae");
|
|
1143
|
+
Q(this, "he");
|
|
1144
|
+
Q(this, "le");
|
|
1145
|
+
Q(this, "ce");
|
|
1146
|
+
Q(this, "De");
|
|
975
1147
|
Q(this, "h");
|
|
976
|
-
this.
|
|
977
|
-
const
|
|
978
|
-
this.
|
|
1148
|
+
this.Dt = A, this.oe = t, this.ne = e, this.h = s;
|
|
1149
|
+
const r = this.ne.cols, i = this.ne.rows;
|
|
1150
|
+
this.ae = this.Dt.TA(r, i), this.he = this.Dt.TA(r, i), this.le = this.Dt.TA(r, i), this.ce = this.Dt.TA(r, i), this.De = this.Dt.TA(r, i);
|
|
979
1151
|
}
|
|
980
|
-
|
|
981
|
-
const A = this.
|
|
982
|
-
this.
|
|
1152
|
+
ee() {
|
|
1153
|
+
const A = this.ne.cols, t = this.ne.rows;
|
|
1154
|
+
this.ae.resize(A, t), this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t);
|
|
983
1155
|
}
|
|
984
1156
|
enabled(A) {
|
|
985
|
-
this.h.enabled = A;
|
|
1157
|
+
u.C(typeof A == "boolean" || typeof A == "number" && Number.isInteger(A), "Enabled must be a boolean value or an integer (0 for false, any other number for true).", { method: "enabled", providedValue: A }) && (this.h.enabled = !!A);
|
|
986
1158
|
}
|
|
987
1159
|
enable() {
|
|
988
1160
|
this.enabled(!0);
|
|
@@ -991,51 +1163,51 @@ class T {
|
|
|
991
1163
|
this.enabled(!1);
|
|
992
1164
|
}
|
|
993
1165
|
S() {
|
|
994
|
-
this.
|
|
1166
|
+
this.ae.S(), this.he.S(), this.le.S(), this.ce.S(), this.De.S();
|
|
995
1167
|
}
|
|
996
1168
|
get characterFramebuffer() {
|
|
997
|
-
return this.
|
|
1169
|
+
return this.ae;
|
|
998
1170
|
}
|
|
999
1171
|
get primaryColorFramebuffer() {
|
|
1000
|
-
return this.
|
|
1172
|
+
return this.he;
|
|
1001
1173
|
}
|
|
1002
1174
|
get secondaryColorFramebuffer() {
|
|
1003
|
-
return this.
|
|
1175
|
+
return this.le;
|
|
1004
1176
|
}
|
|
1005
1177
|
get rotationFramebuffer() {
|
|
1006
|
-
return this.
|
|
1178
|
+
return this.ce;
|
|
1007
1179
|
}
|
|
1008
1180
|
get transformFramebuffer() {
|
|
1009
|
-
return this.
|
|
1181
|
+
return this.De;
|
|
1010
1182
|
}
|
|
1011
1183
|
get options() {
|
|
1012
1184
|
return this.h;
|
|
1013
1185
|
}
|
|
1014
1186
|
}
|
|
1015
|
-
class
|
|
1187
|
+
class uA {
|
|
1016
1188
|
constructor(A, t) {
|
|
1017
1189
|
Q(this, "I");
|
|
1018
|
-
Q(this, "
|
|
1019
|
-
Q(this, "
|
|
1020
|
-
this.
|
|
1021
|
-
const e = Math.max(this.
|
|
1022
|
-
this.I = this.
|
|
1190
|
+
Q(this, "Dt");
|
|
1191
|
+
Q(this, "Ce");
|
|
1192
|
+
this.Dt = A, this.Ce = t;
|
|
1193
|
+
const e = Math.max(this.Ce.length, 1);
|
|
1194
|
+
this.I = this.Dt.TA(e, 1), this.ue();
|
|
1023
1195
|
}
|
|
1024
|
-
|
|
1025
|
-
const A = this.
|
|
1196
|
+
ue() {
|
|
1197
|
+
const A = this.Ce.length;
|
|
1026
1198
|
this.I.width !== A && this.I.resize(A, 1);
|
|
1027
1199
|
const t = new Uint8Array(1 * A * 4);
|
|
1028
1200
|
for (let e = 0; e < A; e++) {
|
|
1029
|
-
const
|
|
1030
|
-
t[
|
|
1201
|
+
const s = this.Ce[e], r = 4 * e;
|
|
1202
|
+
t[r] = s[0], t[r + 1] = s[1], t[r + 2] = s[2], t[r + 3] = 255;
|
|
1031
1203
|
}
|
|
1032
1204
|
this.I.updatePixels(t, A, 1);
|
|
1033
1205
|
}
|
|
1034
1206
|
setColors(A) {
|
|
1035
|
-
this.
|
|
1207
|
+
this.Ce = A, this.ue();
|
|
1036
1208
|
}
|
|
1037
1209
|
get colors() {
|
|
1038
|
-
return this.
|
|
1210
|
+
return this.Ce;
|
|
1039
1211
|
}
|
|
1040
1212
|
get framebuffer() {
|
|
1041
1213
|
return this.I;
|
|
@@ -1044,64 +1216,64 @@ class nA {
|
|
|
1044
1216
|
return this.I.texture;
|
|
1045
1217
|
}
|
|
1046
1218
|
}
|
|
1047
|
-
class
|
|
1048
|
-
constructor(t, e,
|
|
1049
|
-
super(t, e,
|
|
1050
|
-
Q(this, "
|
|
1051
|
-
this.
|
|
1219
|
+
class O extends M {
|
|
1220
|
+
constructor(t, e, s, r = {}) {
|
|
1221
|
+
super(t, e, s, r);
|
|
1222
|
+
Q(this, "Pe");
|
|
1223
|
+
this.Pe = new uA(this.Dt, this.oe.getCharacterColors(" .:-=+*%@#"));
|
|
1052
1224
|
}
|
|
1053
1225
|
characters(t) {
|
|
1054
|
-
|
|
1226
|
+
u.C(this.oe.hasAllCharacters(t), "One or more characters do not exist in the current font.", { method: "characters", providedValue: t }) && (this.h.characters = t, this.Pe.setColors(this.oe.getCharacterColors(t)));
|
|
1055
1227
|
}
|
|
1056
|
-
characterColor(t, e,
|
|
1057
|
-
const
|
|
1058
|
-
|
|
1228
|
+
characterColor(t, e, s, r = 255) {
|
|
1229
|
+
const i = this.Ie(t, "characterColor", e, s, r);
|
|
1230
|
+
i && (this.h.characterColor = i);
|
|
1059
1231
|
}
|
|
1060
1232
|
characterColorMode(t) {
|
|
1061
|
-
this.
|
|
1233
|
+
this.we(t, "characterColorMode");
|
|
1062
1234
|
}
|
|
1063
|
-
cellColor(t, e,
|
|
1064
|
-
const
|
|
1065
|
-
|
|
1235
|
+
cellColor(t, e, s, r = 255) {
|
|
1236
|
+
const i = this.Ie(t, "cellColor", e, s, r);
|
|
1237
|
+
i && (this.h.cellColor = i);
|
|
1066
1238
|
}
|
|
1067
1239
|
cellColorMode(t) {
|
|
1068
|
-
this.
|
|
1240
|
+
this.we(t, "cellColorMode");
|
|
1069
1241
|
}
|
|
1070
1242
|
invert(t) {
|
|
1071
|
-
this.
|
|
1243
|
+
this.fe(t, "invert", "Invert");
|
|
1072
1244
|
}
|
|
1073
1245
|
rotation(t) {
|
|
1074
|
-
if (!
|
|
1246
|
+
if (!u.C(typeof t == "number", "Rotation angle must be a number.", { method: "rotation", providedValue: t })) return;
|
|
1075
1247
|
(t %= 360) < 0 && (t += 360);
|
|
1076
|
-
const e = 255 * t / 360,
|
|
1077
|
-
this.h.rotation = [
|
|
1248
|
+
const e = 255 * t / 360, s = Math.floor(e) / 255, r = Math.round(e - s);
|
|
1249
|
+
this.h.rotation = [s, r, 0, 1];
|
|
1078
1250
|
}
|
|
1079
1251
|
flipHorizontally(t) {
|
|
1080
|
-
this.
|
|
1252
|
+
this.fe(t, "flipHorizontally", "Flip horizontally");
|
|
1081
1253
|
}
|
|
1082
1254
|
flipVertically(t) {
|
|
1083
|
-
this.
|
|
1255
|
+
this.fe(t, "flipVertically", "Flip vertically");
|
|
1084
1256
|
}
|
|
1085
|
-
|
|
1086
|
-
let
|
|
1257
|
+
Ie(t, e, s, r, i = 255) {
|
|
1258
|
+
let B, o, n, g;
|
|
1087
1259
|
if (typeof t == "string") {
|
|
1088
|
-
const a = this.
|
|
1089
|
-
if (!a) return
|
|
1090
|
-
[
|
|
1091
|
-
} else if (
|
|
1092
|
-
return [
|
|
1260
|
+
const a = this.de(t);
|
|
1261
|
+
if (!a) return u.C(!1, "Invalid hex color format. Use '#FF0000', '#F00', 'FF0000', or 'F00'.", { method: e, providedValue: t }), null;
|
|
1262
|
+
[B, o, n, g] = a;
|
|
1263
|
+
} else if (B = t, o = s !== void 0 ? s : t, n = r !== void 0 ? r : t, g = i, !u.C([B, o, n, g].every((a) => a >= 0 && a <= 255), e.charAt(0).toUpperCase() + e.slice(1) + " color values must be between 0 and 255", { method: e, providedValues: { r: B, g: o, b: n, a: g } })) return null;
|
|
1264
|
+
return [B / 255, o / 255, n / 255, g / 255];
|
|
1093
1265
|
}
|
|
1094
|
-
|
|
1095
|
-
|
|
1266
|
+
we(t, e) {
|
|
1267
|
+
u.C(["sampled", "fixed"].includes(t), "Invalid color mode. Must be 'sampled' or 'fixed'.", { method: e, providedValue: t }) && (this.h[e] = t);
|
|
1096
1268
|
}
|
|
1097
|
-
|
|
1098
|
-
|
|
1269
|
+
fe(t, e, s) {
|
|
1270
|
+
u.C(typeof t == "boolean" || typeof t == "number" && Number.isInteger(t), s + " must be a boolean value or an integer (0 for false, any other number for true).", { method: e, providedValue: t }) && (this.h[e] = !!t);
|
|
1099
1271
|
}
|
|
1100
|
-
|
|
1272
|
+
de(t) {
|
|
1101
1273
|
return t = t.replace(/^#/, ""), /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(t) ? (t.length === 3 && (t = t.split("").map((e) => e + e).join("")), [parseInt(t.slice(0, 2), 16), parseInt(t.slice(2, 4), 16), parseInt(t.slice(4, 6), 16), 255]) : null;
|
|
1102
1274
|
}
|
|
1103
1275
|
}
|
|
1104
|
-
const
|
|
1276
|
+
const T = `attribute vec2 a_position;\r
|
|
1105
1277
|
attribute vec2 a_texCoord;\r
|
|
1106
1278
|
varying vec2 v_uv;\r
|
|
1107
1279
|
\r
|
|
@@ -1139,291 +1311,304 @@ void main() {\r
|
|
|
1139
1311
|
\r
|
|
1140
1312
|
gl_Position = vec4(pos, 0.0, 1.0);\r
|
|
1141
1313
|
}\r
|
|
1142
|
-
`,
|
|
1143
|
-
class
|
|
1144
|
-
constructor(t, e,
|
|
1145
|
-
super(t, e,
|
|
1146
|
-
Q(this, "
|
|
1147
|
-
Q(this, "
|
|
1148
|
-
Q(this, "
|
|
1149
|
-
Q(this, "
|
|
1150
|
-
Q(this, "
|
|
1151
|
-
Q(this, "
|
|
1152
|
-
this.
|
|
1153
|
-
}
|
|
1154
|
-
|
|
1155
|
-
const e = this.
|
|
1156
|
-
this.
|
|
1157
|
-
}
|
|
1158
|
-
|
|
1159
|
-
super
|
|
1314
|
+
`, PA = { enabled: !0, characters: " .:-=+*%@#", characterColor: [1, 1, 1, 1], characterColorMode: "sampled", cellColor: [0, 0, 0, 1], cellColorMode: "fixed", invert: !1, rotation: [0, 0, 0, 255], flipHorizontally: !1, flipVertically: !1, brightnessRange: [0, 255] };
|
|
1315
|
+
class S extends O {
|
|
1316
|
+
constructor(t, e, s) {
|
|
1317
|
+
super(t, e, s, { ...PA });
|
|
1318
|
+
Q(this, "me");
|
|
1319
|
+
Q(this, "pe");
|
|
1320
|
+
Q(this, "_e");
|
|
1321
|
+
Q(this, "ve");
|
|
1322
|
+
Q(this, "be");
|
|
1323
|
+
Q(this, "xe");
|
|
1324
|
+
this.me = new x(t.context, T, "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}"), this.pe = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}"), this.ve = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}"), this.be = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotationColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotationColor;}else{gl_FragColor=vec4(0.0);}}"), this._e = new x(t.context, T, "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}"), this.xe = this.Dt.TA(this.ne.cols, this.ne.rows);
|
|
1325
|
+
}
|
|
1326
|
+
ye(t) {
|
|
1327
|
+
const e = this.ne.cols, s = this.ne.rows;
|
|
1328
|
+
this.xe.begin(), this.Dt.OA(), this.Dt.IA(this.me), this.Dt.GA("u_sketchTexture", t), this.Dt.GA("u_gridCellDimensions", [e, s]), this.Dt.GA("u_brightnessRange", this.h.brightnessRange), this.Dt.FA(0, 0, e, s), this.xe.end(), this.he.begin(), this.Dt.OA(), this.Dt.IA(this.pe), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_fillColor", this.h.characterColor), this.Dt.GA("u_useFixedColor", this.h.characterColorMode === "fixed"), this.Dt.FA(0, 0, e, s), this.he.end(), this.le.begin(), this.Dt.OA(), this.Dt.IA(this.pe), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_fillColor", this.h.cellColor), this.Dt.GA("u_useFixedColor", this.h.cellColorMode === "fixed"), this.Dt.FA(0, 0, e, s), this.le.end(), this.De.begin(), this.Dt.OA(), this.Dt.IA(this.ve), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_invert", this.h.invert), this.Dt.GA("u_flipHorizontally", this.h.flipHorizontally), this.Dt.GA("u_flipVertically", this.h.flipVertically), this.Dt.FA(0, 0, e, s), this.De.end(), this.ce.begin(), this.Dt.OA(), this.Dt.IA(this.be), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_rotationColor", this.h.rotation), this.Dt.FA(0, 0, e, s), this.ce.end(), this.ae.begin(), this.Dt.OA(), this.Dt.IA(this._e), this.Dt.GA("u_colorSampleFramebuffer", this.xe), this.Dt.GA("u_charPaletteTexture", this.Pe.texture), this.Dt.GA("u_charPaletteSize", [this.Pe.colors.length, 1]), this.Dt.GA("u_brightnessRange", this.h.brightnessRange), this.Dt.FA(0, 0, e, s), this.ae.end();
|
|
1329
|
+
}
|
|
1330
|
+
ee() {
|
|
1331
|
+
super.ee(), this.xe.resize(this.ne.cols, this.ne.rows);
|
|
1160
1332
|
}
|
|
1161
1333
|
brightnessRange(t) {
|
|
1162
|
-
|
|
1334
|
+
u.C(Array.isArray(t) && t.length === 2 && t.every((e) => typeof e == "number" && e >= 0 && e <= 255), "Brightness range must be an array of two numbers between 0 and 255.", { method: "brightnessRange", providedValue: t }) && (this.h.brightnessRange = t);
|
|
1163
1335
|
}
|
|
1164
1336
|
}
|
|
1165
|
-
const
|
|
1166
|
-
class
|
|
1337
|
+
const OA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter: S, TextmodeConverter: M, TextmodeFeatureConverter: O }, Symbol.toStringTag, { value: "Module" }));
|
|
1338
|
+
class dA {
|
|
1167
1339
|
constructor(A, t, e) {
|
|
1168
|
-
Q(this, "
|
|
1169
|
-
Q(this, "
|
|
1170
|
-
Q(this, "zt");
|
|
1171
|
-
Q(this, "oe");
|
|
1340
|
+
Q(this, "Dt");
|
|
1341
|
+
Q(this, "_t");
|
|
1172
1342
|
Q(this, "ne");
|
|
1343
|
+
Q(this, "Me");
|
|
1344
|
+
Q(this, "Ge");
|
|
1345
|
+
Q(this, "Fe");
|
|
1346
|
+
Q(this, "$e");
|
|
1347
|
+
Q(this, "Ye");
|
|
1173
1348
|
Q(this, "ae");
|
|
1174
1349
|
Q(this, "he");
|
|
1350
|
+
Q(this, "le");
|
|
1351
|
+
Q(this, "ce");
|
|
1175
1352
|
Q(this, "De");
|
|
1176
|
-
|
|
1177
|
-
Q(this, "Lt");
|
|
1178
|
-
Q(this, "Kt");
|
|
1179
|
-
Q(this, "Wt");
|
|
1180
|
-
Q(this, "jt");
|
|
1181
|
-
this.WA = A, this.et = t, this.zt = e, this.De = this.WA.yA(R, "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 sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;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_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);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}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);}"), this.ne = new W(A, t, e), this.ae = new T(A, t, e), this.oe = [this.ne, this.ae], this.Jt = this.WA.TA(e.cols, e.rows), this.Lt = this.WA.TA(e.cols, e.rows), this.Kt = this.WA.TA(e.cols, e.rows), this.Wt = this.WA.TA(e.cols, e.rows), this.jt = this.WA.TA(e.cols, e.rows), this.he = this.WA.TA(this.zt.width, this.zt.height);
|
|
1353
|
+
this.Dt = A, this._t = t, this.ne = e, this.Ye = this.Dt.yA(R, "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 sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;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_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);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}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);}"), this.Ge = new S(A, t, e), this.Fe = new M(A, t, e), this.Me = [this.Ge, this.Fe], this.ae = this.Dt.TA(e.cols, e.rows), this.he = this.Dt.TA(e.cols, e.rows), this.le = this.Dt.TA(e.cols, e.rows), this.ce = this.Dt.TA(e.cols, e.rows), this.De = this.Dt.TA(e.cols, e.rows), this.$e = this.Dt.TA(this.ne.width, this.ne.height);
|
|
1182
1354
|
}
|
|
1183
|
-
|
|
1184
|
-
for (const e of this.
|
|
1185
|
-
const t = (e,
|
|
1186
|
-
e.begin(), this.
|
|
1187
|
-
for (const
|
|
1355
|
+
Te(A) {
|
|
1356
|
+
for (const e of this.Me) e.options.enabled && e instanceof O && e.ye(A);
|
|
1357
|
+
const t = (e, s) => {
|
|
1358
|
+
e.begin(), this.Dt.OA();
|
|
1359
|
+
for (const r of this.Me) r.options.enabled && this.Dt.kA(s(r), 0, 0);
|
|
1188
1360
|
e.end();
|
|
1189
1361
|
};
|
|
1190
|
-
t(this.
|
|
1362
|
+
t(this.ae, (e) => e.characterFramebuffer), t(this.he, (e) => e.primaryColorFramebuffer), t(this.le, (e) => e.secondaryColorFramebuffer), t(this.ce, (e) => e.rotationFramebuffer), t(this.De, (e) => e.transformFramebuffer), this.$e.begin(), this.Dt.OA(), this.Dt.IA(this.Ye), this.Dt.GA("u_characterTexture", this._t.fontFramebuffer), this.Dt.GA("u_charsetDimensions", [this._t.textureColumns, this._t.textureRows]), this.Dt.GA("u_asciiCharacterTexture", this.ae.texture), this.Dt.GA("u_primaryColorTexture", this.he.texture), this.Dt.GA("u_secondaryColorTexture", this.le.texture), this.Dt.GA("u_transformTexture", this.De.texture), this.Dt.GA("u_rotationTexture", this.ce.texture), this.Dt.GA("u_captureTexture", A.texture), this.Dt.GA("u_backgroundMode", !1), this.Dt.GA("u_captureDimensions", [A.width, A.height]), this.Dt.GA("u_gridCellDimensions", [this.ne.cols, this.ne.rows]), this.Dt.GA("u_gridPixelDimensions", [this.ne.width, this.ne.height]), this.Dt.FA(0, 0, this.$e.width, this.$e.height), this.$e.end();
|
|
1191
1363
|
}
|
|
1192
1364
|
add(A) {
|
|
1193
|
-
if (!
|
|
1365
|
+
if (!u.C(A === "brightness" || A === "custom", 'Converter type must be either "brightness" or "custom".', { method: "add", providedValue: A })) return;
|
|
1194
1366
|
let t;
|
|
1195
|
-
return t = A === "brightness" ? new
|
|
1367
|
+
return t = A === "brightness" ? new S(this.Dt, this._t, this.ne) : new M(this.Dt, this._t, this.ne), this.Me.push(t), t;
|
|
1196
1368
|
}
|
|
1197
1369
|
remove(A) {
|
|
1198
|
-
if (!
|
|
1199
|
-
const t = this.
|
|
1200
|
-
|
|
1201
|
-
}
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1370
|
+
if (!u.C(A instanceof M, "Parameter must be a TextmodeConverter instance.", { method: "remove", providedValue: A })) return;
|
|
1371
|
+
const t = this.Me.indexOf(A);
|
|
1372
|
+
u.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.Me.length }) && this.Me.splice(t, 1);
|
|
1373
|
+
}
|
|
1374
|
+
swap(A, t) {
|
|
1375
|
+
const e = (B, o) => {
|
|
1376
|
+
if (typeof B == "number") return u.C(Number.isInteger(B) && B >= 0 && B < this.Me.length, o + " index must be a valid integer within the converter array bounds.", { method: "swap", providedValue: B, convertersCount: this.Me.length }) ? B : null;
|
|
1377
|
+
if (B instanceof M) {
|
|
1378
|
+
const n = this.Me.indexOf(B);
|
|
1379
|
+
return u.C(n !== -1, o + " converter instance not found in pipeline.", { method: "swap", providedValue: B, convertersCount: this.Me.length }) ? n : null;
|
|
1380
|
+
}
|
|
1381
|
+
return u.C(!1, o + " parameter must be either an integer index or a TextmodeConverter instance.", { method: "swap", providedValue: B }), null;
|
|
1382
|
+
}, s = e(A, "First"), r = e(t, "Second");
|
|
1383
|
+
if (s === null || r === null || !u.C(s !== r, "Cannot swap a converter with itself.", { method: "swap", firstIndex: s, secondIndex: r })) return;
|
|
1384
|
+
const i = this.Me[s];
|
|
1385
|
+
this.Me[s] = this.Me[r], this.Me[r] = i;
|
|
1386
|
+
}
|
|
1387
|
+
ee() {
|
|
1388
|
+
this.$e.resize(this.ne.width, this.ne.height);
|
|
1389
|
+
const A = this.ne.cols, t = this.ne.rows;
|
|
1390
|
+
this.ae.resize(A, t), this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t);
|
|
1391
|
+
for (const e of this.Me) e.ee();
|
|
1207
1392
|
}
|
|
1208
1393
|
hasEnabledConverters() {
|
|
1209
|
-
return this.
|
|
1394
|
+
return this.Me.some((A) => A.options.enabled);
|
|
1210
1395
|
}
|
|
1211
1396
|
disable() {
|
|
1212
|
-
for (const A of this.
|
|
1397
|
+
for (const A of this.Me) A.disable();
|
|
1213
1398
|
}
|
|
1214
1399
|
enable() {
|
|
1215
|
-
for (const A of this.
|
|
1400
|
+
for (const A of this.Me) A.enable();
|
|
1216
1401
|
}
|
|
1217
1402
|
S() {
|
|
1218
|
-
for (const A of this.
|
|
1219
|
-
this.
|
|
1403
|
+
for (const A of this.Me) A.S();
|
|
1404
|
+
this.ae.S(), this.he.S(), this.le.S(), this.ce.S(), this.De.S(), this.$e.S(), this.Ye.S();
|
|
1220
1405
|
}
|
|
1221
1406
|
get texture() {
|
|
1222
|
-
return this
|
|
1407
|
+
return this.$e;
|
|
1223
1408
|
}
|
|
1224
1409
|
get characterFramebuffer() {
|
|
1225
|
-
return this.
|
|
1410
|
+
return this.ae;
|
|
1226
1411
|
}
|
|
1227
1412
|
get primaryColorFramebuffer() {
|
|
1228
|
-
return this.
|
|
1413
|
+
return this.he;
|
|
1229
1414
|
}
|
|
1230
1415
|
get secondaryColorFramebuffer() {
|
|
1231
|
-
return this.
|
|
1416
|
+
return this.le;
|
|
1232
1417
|
}
|
|
1233
1418
|
get rotationFramebuffer() {
|
|
1234
|
-
return this.
|
|
1419
|
+
return this.ce;
|
|
1235
1420
|
}
|
|
1236
1421
|
get transformFramebuffer() {
|
|
1237
|
-
return this.
|
|
1422
|
+
return this.De;
|
|
1238
1423
|
}
|
|
1239
1424
|
get brightness() {
|
|
1240
|
-
return this.
|
|
1425
|
+
return this.Ge;
|
|
1241
1426
|
}
|
|
1242
1427
|
get custom() {
|
|
1243
|
-
return this.
|
|
1428
|
+
return this.Fe;
|
|
1244
1429
|
}
|
|
1245
1430
|
}
|
|
1246
|
-
const
|
|
1247
|
-
fill(A, t, e,
|
|
1248
|
-
this.
|
|
1431
|
+
const IA = (E) => class extends E {
|
|
1432
|
+
fill(A, t, e, s) {
|
|
1433
|
+
this.Dt.wA(A, t, e, s);
|
|
1249
1434
|
}
|
|
1250
|
-
stroke(A, t, e,
|
|
1251
|
-
this.
|
|
1435
|
+
stroke(A, t, e, s) {
|
|
1436
|
+
this.Dt.fA(A, t, e, s);
|
|
1252
1437
|
}
|
|
1253
1438
|
strokeWeight(A) {
|
|
1254
|
-
this.
|
|
1439
|
+
this.Dt.dA(A);
|
|
1255
1440
|
}
|
|
1256
1441
|
noStroke() {
|
|
1257
|
-
this.
|
|
1442
|
+
this.Dt.mA();
|
|
1258
1443
|
}
|
|
1259
1444
|
noFill() {
|
|
1260
|
-
this.
|
|
1445
|
+
this.Dt.pA();
|
|
1261
1446
|
}
|
|
1262
1447
|
rotate(A) {
|
|
1263
|
-
this.
|
|
1448
|
+
this.Dt._A(A);
|
|
1264
1449
|
}
|
|
1265
1450
|
push() {
|
|
1266
|
-
this.
|
|
1451
|
+
this.Dt.vA();
|
|
1267
1452
|
}
|
|
1268
1453
|
pop() {
|
|
1269
|
-
this.
|
|
1454
|
+
this.Dt.bA();
|
|
1270
1455
|
}
|
|
1271
|
-
rect(A, t, e = 1,
|
|
1272
|
-
this.
|
|
1456
|
+
rect(A, t, e = 1, s = 1) {
|
|
1457
|
+
this.Dt.FA(A, t, e, s);
|
|
1273
1458
|
}
|
|
1274
|
-
line(A, t, e,
|
|
1275
|
-
this.
|
|
1459
|
+
line(A, t, e, s) {
|
|
1460
|
+
this.Dt.YA(A, t, e, s);
|
|
1276
1461
|
}
|
|
1277
|
-
background(A, t = A, e = A,
|
|
1278
|
-
this.
|
|
1462
|
+
background(A, t = A, e = A, s = 255) {
|
|
1463
|
+
this.Dt.SA(A, t, e, s);
|
|
1279
1464
|
}
|
|
1280
1465
|
createShader(A, t) {
|
|
1281
|
-
return this.
|
|
1466
|
+
return this.Dt.yA(A, t);
|
|
1282
1467
|
}
|
|
1283
1468
|
createFilterShader(A) {
|
|
1284
|
-
return this.
|
|
1469
|
+
return this.Dt.MA(A);
|
|
1285
1470
|
}
|
|
1286
1471
|
shader(A) {
|
|
1287
|
-
this.
|
|
1472
|
+
this.Dt.IA(A);
|
|
1288
1473
|
}
|
|
1289
1474
|
setUniform(A, t) {
|
|
1290
|
-
this.
|
|
1475
|
+
this.Dt.GA(A, t);
|
|
1291
1476
|
}
|
|
1292
1477
|
};
|
|
1293
|
-
class
|
|
1294
|
-
|
|
1295
|
-
const t = A.characterFramebuffer, e = A.primaryColorFramebuffer,
|
|
1296
|
-
return t == null || t.loadPixels(), e == null || e.loadPixels(),
|
|
1478
|
+
class L {
|
|
1479
|
+
Se(A) {
|
|
1480
|
+
const t = A.characterFramebuffer, e = A.primaryColorFramebuffer, s = A.secondaryColorFramebuffer, r = A.transformFramebuffer, i = A.rotationFramebuffer;
|
|
1481
|
+
return t == null || t.loadPixels(), e == null || e.loadPixels(), s == null || s.loadPixels(), r == null || r.loadPixels(), i == null || i.loadPixels(), { characterPixels: (t == null ? void 0 : t.pixels) || new Uint8Array(0), primaryColorPixels: (e == null ? void 0 : e.pixels) || new Uint8Array(0), secondaryColorPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0), transformPixels: (r == null ? void 0 : r.pixels) || new Uint8Array(0), rotationPixels: (i == null ? void 0 : i.pixels) || new Uint8Array(0) };
|
|
1297
1482
|
}
|
|
1298
|
-
|
|
1483
|
+
Oe(A, t) {
|
|
1299
1484
|
return A[t] + (A[t + 1] << 8);
|
|
1300
1485
|
}
|
|
1301
|
-
|
|
1486
|
+
Ue(A, t) {
|
|
1302
1487
|
return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
|
|
1303
1488
|
}
|
|
1304
1489
|
}
|
|
1305
|
-
class
|
|
1306
|
-
|
|
1490
|
+
class k {
|
|
1491
|
+
ke(A, t) {
|
|
1307
1492
|
return new Blob([A], { type: t });
|
|
1308
1493
|
}
|
|
1309
|
-
|
|
1494
|
+
Ve(A, t, e) {
|
|
1310
1495
|
try {
|
|
1311
|
-
const
|
|
1312
|
-
|
|
1313
|
-
} catch (
|
|
1314
|
-
throw console.error("Failed to download file:",
|
|
1496
|
+
const s = this.ke(A, e), r = URL.createObjectURL(s), i = document.createElement("a");
|
|
1497
|
+
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);
|
|
1498
|
+
} catch (s) {
|
|
1499
|
+
throw console.error("Failed to download file:", s), Error("File download failed: " + (s instanceof Error ? s.message : "Unknown error"));
|
|
1315
1500
|
}
|
|
1316
1501
|
}
|
|
1317
|
-
|
|
1502
|
+
Re() {
|
|
1318
1503
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1319
1504
|
}
|
|
1320
|
-
|
|
1505
|
+
He() {
|
|
1321
1506
|
const A = /* @__PURE__ */ new Date();
|
|
1322
1507
|
return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1323
1508
|
}
|
|
1324
|
-
|
|
1509
|
+
ze(A) {
|
|
1325
1510
|
return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1326
1511
|
}
|
|
1327
|
-
|
|
1328
|
-
return "'textmode-export'-" + this.
|
|
1512
|
+
Le() {
|
|
1513
|
+
return "'textmode-export'-" + this.Re();
|
|
1329
1514
|
}
|
|
1330
1515
|
}
|
|
1331
|
-
class
|
|
1332
|
-
|
|
1333
|
-
const
|
|
1334
|
-
return { isInverted:
|
|
1516
|
+
class fA extends L {
|
|
1517
|
+
Je(A, t, e) {
|
|
1518
|
+
const s = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, B = t[e], o = t[e + 1];
|
|
1519
|
+
return { isInverted: s, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (B + o / 255) / 255 * 100) / 100 };
|
|
1335
1520
|
}
|
|
1336
|
-
|
|
1521
|
+
Ke(A, t, e) {
|
|
1337
1522
|
return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
|
|
1338
1523
|
}
|
|
1339
|
-
|
|
1524
|
+
We(A, t) {
|
|
1340
1525
|
const e = [];
|
|
1341
|
-
let
|
|
1342
|
-
for (let
|
|
1343
|
-
const
|
|
1344
|
-
let
|
|
1345
|
-
const a = this.
|
|
1526
|
+
let s = 0;
|
|
1527
|
+
for (let r = 0; r < t.rows; r++) for (let i = 0; i < t.cols; i++) {
|
|
1528
|
+
const B = 4 * s, o = this.Oe(A.characterPixels, B);
|
|
1529
|
+
let n = this.Ue(A.primaryColorPixels, B), g = this.Ue(A.secondaryColorPixels, B);
|
|
1530
|
+
const a = this.Je(A.transformPixels, A.rotationPixels, B);
|
|
1346
1531
|
if (a.isInverted) {
|
|
1347
|
-
const
|
|
1348
|
-
|
|
1532
|
+
const D = n;
|
|
1533
|
+
n = g, g = D;
|
|
1349
1534
|
}
|
|
1350
|
-
const h = this.
|
|
1351
|
-
e.push({ charIndex: o, primaryColor:
|
|
1535
|
+
const h = this.Ke(i, r, t);
|
|
1536
|
+
e.push({ charIndex: o, primaryColor: n, secondaryColor: g, transform: a, position: h }), s++;
|
|
1352
1537
|
}
|
|
1353
1538
|
return e;
|
|
1354
1539
|
}
|
|
1355
1540
|
}
|
|
1356
|
-
class
|
|
1357
|
-
|
|
1541
|
+
class wA {
|
|
1542
|
+
je(A, t) {
|
|
1358
1543
|
const e = A.cmap;
|
|
1359
|
-
for (const
|
|
1360
|
-
for (let
|
|
1361
|
-
if (
|
|
1544
|
+
for (const s of e.tables) if (s.format === 4) {
|
|
1545
|
+
for (let r = 0; r < s.startCount.length; r++) if (t >= s.startCount[r] && t <= s.endCount[r]) {
|
|
1546
|
+
if (s.idRangeOffset[r] === 0) return t + s.idDelta[r] & 65535;
|
|
1362
1547
|
{
|
|
1363
|
-
const
|
|
1364
|
-
if (
|
|
1365
|
-
const
|
|
1366
|
-
if (
|
|
1548
|
+
const i = s.idRangeOffset[r] / 2 + (t - s.startCount[r]) - (s.startCount.length - r);
|
|
1549
|
+
if (i >= 0 && i < s.glyphIdArray.length) {
|
|
1550
|
+
const B = s.glyphIdArray[i];
|
|
1551
|
+
if (B !== 0) return B + s.idDelta[r] & 65535;
|
|
1367
1552
|
}
|
|
1368
1553
|
}
|
|
1369
1554
|
}
|
|
1370
1555
|
}
|
|
1371
1556
|
return 0;
|
|
1372
1557
|
}
|
|
1373
|
-
|
|
1374
|
-
const
|
|
1375
|
-
return { getBoundingBox: () => ({ x1: e + t.xMin *
|
|
1558
|
+
Ne(A, t, e, s, r) {
|
|
1559
|
+
const i = r / A.head.unitsPerEm;
|
|
1560
|
+
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.Ze(t, e, s, i) };
|
|
1376
1561
|
}
|
|
1377
|
-
|
|
1562
|
+
Ze(A, t, e, s) {
|
|
1378
1563
|
if (!A || !A.xs) return "";
|
|
1379
|
-
const { xs:
|
|
1380
|
-
if (!(
|
|
1381
|
-
let
|
|
1382
|
-
for (let a = 0; a <
|
|
1383
|
-
const h =
|
|
1384
|
-
if (!(h <
|
|
1385
|
-
if (h >=
|
|
1386
|
-
const
|
|
1387
|
-
|
|
1388
|
-
let
|
|
1389
|
-
for (;
|
|
1390
|
-
if (1 & o[
|
|
1391
|
-
const
|
|
1392
|
-
|
|
1564
|
+
const { xs: r, ys: i, endPts: B, flags: o } = A;
|
|
1565
|
+
if (!(r && i && B && o)) return "";
|
|
1566
|
+
let n = "", g = 0;
|
|
1567
|
+
for (let a = 0; a < B.length; a++) {
|
|
1568
|
+
const h = B[a];
|
|
1569
|
+
if (!(h < g)) {
|
|
1570
|
+
if (h >= g) {
|
|
1571
|
+
const D = t + r[g] * s, c = e - i[g] * s;
|
|
1572
|
+
n += `M${D.toFixed(2)},${c.toFixed(2)}`;
|
|
1573
|
+
let l = g + 1;
|
|
1574
|
+
for (; l <= h; )
|
|
1575
|
+
if (1 & o[l]) {
|
|
1576
|
+
const d = t + r[l] * s, C = e - i[l] * s;
|
|
1577
|
+
n += `L${d.toFixed(2)},${C.toFixed(2)}`, l++;
|
|
1393
1578
|
} else {
|
|
1394
|
-
const
|
|
1395
|
-
let
|
|
1396
|
-
if (1 & o[
|
|
1397
|
-
const
|
|
1398
|
-
|
|
1579
|
+
const d = t + r[l] * s, C = e - i[l] * s;
|
|
1580
|
+
let P = l + 1 > h ? g : l + 1;
|
|
1581
|
+
if (1 & o[P]) {
|
|
1582
|
+
const p = t + r[P] * s, m = e - i[P] * s;
|
|
1583
|
+
n += `Q${d.toFixed(2)},${C.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P + 1;
|
|
1399
1584
|
} else {
|
|
1400
|
-
const
|
|
1401
|
-
|
|
1585
|
+
const p = (d + (t + r[P] * s)) / 2, m = (C + (e - i[P] * s)) / 2;
|
|
1586
|
+
n += `Q${d.toFixed(2)},${C.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P;
|
|
1402
1587
|
}
|
|
1403
1588
|
}
|
|
1404
|
-
|
|
1589
|
+
n += "Z";
|
|
1405
1590
|
}
|
|
1406
|
-
|
|
1591
|
+
g = h + 1;
|
|
1407
1592
|
}
|
|
1408
1593
|
}
|
|
1409
|
-
return
|
|
1594
|
+
return n;
|
|
1410
1595
|
}
|
|
1411
|
-
|
|
1412
|
-
const
|
|
1596
|
+
Xe(A, t, e, s, r) {
|
|
1597
|
+
const i = A.codePointAt(0) || 0, B = this.je(t, i);
|
|
1413
1598
|
let o = null;
|
|
1414
|
-
return t.glyf && t.glyf[
|
|
1599
|
+
return t.glyf && t.glyf[B] !== null ? o = t.glyf[B] : w && w.T && w.T.glyf && w.T.glyf.VA && (o = w.T.glyf.VA(t, B), t.glyf && o && (t.glyf[B] = o)), this.Ne(t, o, e, s, r);
|
|
1415
1600
|
}
|
|
1416
|
-
|
|
1417
|
-
const
|
|
1418
|
-
return this.
|
|
1601
|
+
qe(A, t, e, s, r, i, B, o) {
|
|
1602
|
+
const n = e + (r - o * (B / t.head.unitsPerEm)) / 2, g = s + (i + 0.7 * B) / 2;
|
|
1603
|
+
return this.Xe(A, t, n, g, B).toSVG() || null;
|
|
1419
1604
|
}
|
|
1420
1605
|
}
|
|
1421
|
-
class
|
|
1606
|
+
class pA {
|
|
1422
1607
|
constructor() {
|
|
1423
|
-
Q(this, "
|
|
1424
|
-
this.
|
|
1608
|
+
Q(this, "As");
|
|
1609
|
+
this.As = new wA();
|
|
1425
1610
|
}
|
|
1426
|
-
|
|
1611
|
+
ts(A) {
|
|
1427
1612
|
return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
1428
1613
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
1429
1614
|
<svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
|
|
@@ -1431,175 +1616,175 @@ class DA {
|
|
|
1431
1616
|
<title>textmode art generated via textmode.js</title>
|
|
1432
1617
|
<desc>textmode art visualization generated by textmode.js library</desc>`;
|
|
1433
1618
|
}
|
|
1434
|
-
|
|
1619
|
+
es() {
|
|
1435
1620
|
return `
|
|
1436
1621
|
</g>
|
|
1437
1622
|
</svg>`;
|
|
1438
1623
|
}
|
|
1439
|
-
|
|
1624
|
+
ss(A, t) {
|
|
1440
1625
|
if (!t.includeBackgroundRectangles) return "";
|
|
1441
|
-
const e = t.backgroundColor,
|
|
1626
|
+
const e = t.backgroundColor, s = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
|
|
1442
1627
|
return `
|
|
1443
|
-
<rect width="${A.width}" height="${A.height}" fill="${
|
|
1628
|
+
<rect width="${A.width}" height="${A.height}" fill="${s}" />`;
|
|
1444
1629
|
}
|
|
1445
|
-
|
|
1630
|
+
rs(A) {
|
|
1446
1631
|
return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
|
|
1447
1632
|
}
|
|
1448
|
-
|
|
1449
|
-
const { transform: e, position:
|
|
1633
|
+
Bs(A, t) {
|
|
1634
|
+
const { transform: e, position: s } = A, r = s.cellX + t.cellWidth / 2, i = s.cellY + t.cellHeight / 2, B = [];
|
|
1450
1635
|
if (e.flipHorizontal || e.flipVertical) {
|
|
1451
|
-
const o = e.flipHorizontal ? -1 : 1,
|
|
1452
|
-
|
|
1636
|
+
const o = e.flipHorizontal ? -1 : 1, n = e.flipVertical ? -1 : 1;
|
|
1637
|
+
B.push(`translate(${r} ${i})`), B.push(`scale(${o} ${n})`), B.push(`translate(${-r} ${-i})`);
|
|
1453
1638
|
}
|
|
1454
|
-
return e.rotation &&
|
|
1639
|
+
return e.rotation && B.push(`rotate(${e.rotation} ${r} ${i})`), B.length ? ` transform="${B.join(" ")}"` : "";
|
|
1455
1640
|
}
|
|
1456
|
-
|
|
1641
|
+
Qs(A, t, e) {
|
|
1457
1642
|
if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
|
|
1458
|
-
const { position:
|
|
1643
|
+
const { position: s } = A, r = this.rs(A.secondaryColor);
|
|
1459
1644
|
return e.drawMode === "stroke" ? `
|
|
1460
|
-
<rect x="${
|
|
1461
|
-
<rect x="${
|
|
1462
|
-
}
|
|
1463
|
-
|
|
1464
|
-
const
|
|
1465
|
-
if (!
|
|
1466
|
-
const
|
|
1467
|
-
if (!
|
|
1468
|
-
const
|
|
1469
|
-
return
|
|
1470
|
-
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${
|
|
1471
|
-
<path d="${
|
|
1472
|
-
}
|
|
1473
|
-
|
|
1474
|
-
let
|
|
1475
|
-
|
|
1476
|
-
const
|
|
1477
|
-
return
|
|
1478
|
-
<g${
|
|
1479
|
-
</g>`) :
|
|
1480
|
-
}
|
|
1481
|
-
|
|
1482
|
-
let
|
|
1483
|
-
|
|
1645
|
+
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
|
|
1646
|
+
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
|
|
1647
|
+
}
|
|
1648
|
+
Xe(A, t, e, s) {
|
|
1649
|
+
const r = e.characters[A.charIndex];
|
|
1650
|
+
if (!r) return "";
|
|
1651
|
+
const i = this.As.qe(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
|
|
1652
|
+
if (!i) return "";
|
|
1653
|
+
const B = this.rs(A.primaryColor);
|
|
1654
|
+
return s.drawMode === "stroke" ? `
|
|
1655
|
+
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${B}" stroke-width="${s.strokeWidth}" fill="none" />` : `
|
|
1656
|
+
<path d="${i}" fill="${B}" />`;
|
|
1657
|
+
}
|
|
1658
|
+
Es(A, t, e, s) {
|
|
1659
|
+
let r = "";
|
|
1660
|
+
r += this.Qs(A, t, s);
|
|
1661
|
+
const i = this.Bs(A, t), B = this.Xe(A, t, e, s);
|
|
1662
|
+
return B && (i ? (r += `
|
|
1663
|
+
<g${i}>`, r += B, r += `
|
|
1664
|
+
</g>`) : r += B), r;
|
|
1665
|
+
}
|
|
1666
|
+
gs(A, t, e, s) {
|
|
1667
|
+
let r = this.ts(t);
|
|
1668
|
+
r += this.ss(t, s), r += `
|
|
1484
1669
|
<g id="ascii-cells">`;
|
|
1485
|
-
for (const
|
|
1486
|
-
return
|
|
1670
|
+
for (const i of A) r += this.Es(i, t, e, s);
|
|
1671
|
+
return r += this.es(), r;
|
|
1487
1672
|
}
|
|
1488
|
-
|
|
1673
|
+
ns(A) {
|
|
1489
1674
|
return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
|
|
1490
1675
|
`).replace(/[ \t]+$/gm, "");
|
|
1491
1676
|
}
|
|
1492
1677
|
}
|
|
1493
|
-
class
|
|
1494
|
-
|
|
1495
|
-
return this.
|
|
1678
|
+
class mA extends k {
|
|
1679
|
+
hs(A) {
|
|
1680
|
+
return this.ke(A, "image/svg+xml;charset=utf-8");
|
|
1496
1681
|
}
|
|
1497
|
-
|
|
1498
|
-
this.
|
|
1682
|
+
ls(A, t) {
|
|
1683
|
+
this.Ve(A, this.ze(t) + ".svg", "image/svg+xml;charset=utf-8");
|
|
1499
1684
|
}
|
|
1500
|
-
|
|
1501
|
-
this.
|
|
1685
|
+
cs(A, t) {
|
|
1686
|
+
this.ls(A, t || this.Le());
|
|
1502
1687
|
}
|
|
1503
1688
|
}
|
|
1504
|
-
class
|
|
1689
|
+
class $ {
|
|
1505
1690
|
constructor() {
|
|
1506
|
-
Q(this, "
|
|
1507
|
-
Q(this, "
|
|
1508
|
-
Q(this, "
|
|
1509
|
-
this.
|
|
1691
|
+
Q(this, "Ds");
|
|
1692
|
+
Q(this, "Cs");
|
|
1693
|
+
Q(this, "us");
|
|
1694
|
+
this.Ds = new fA(), this.Cs = new pA(), this.us = new mA();
|
|
1510
1695
|
}
|
|
1511
|
-
|
|
1696
|
+
Ps(A) {
|
|
1512
1697
|
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0] };
|
|
1513
1698
|
}
|
|
1514
|
-
|
|
1515
|
-
const e = this.
|
|
1516
|
-
return this.
|
|
1699
|
+
Is(A, t = {}) {
|
|
1700
|
+
const e = this.Ps(t), s = this.Ds.Se(A.pipeline), r = this.Ds.We(s, A.grid), i = this.Cs.gs(r, A.grid, A.font, e);
|
|
1701
|
+
return this.Cs.ns(i);
|
|
1517
1702
|
}
|
|
1518
|
-
|
|
1519
|
-
const e = this.
|
|
1520
|
-
this.
|
|
1703
|
+
cs(A, t = {}) {
|
|
1704
|
+
const e = this.Is(A, t), s = t.filename || this.us.Le();
|
|
1705
|
+
this.us.cs(e, s);
|
|
1521
1706
|
}
|
|
1522
1707
|
}
|
|
1523
|
-
class
|
|
1524
|
-
|
|
1525
|
-
var
|
|
1526
|
-
const
|
|
1527
|
-
let
|
|
1708
|
+
class xA extends L {
|
|
1709
|
+
ws(A, t, e, s = " ") {
|
|
1710
|
+
var B;
|
|
1711
|
+
const r = [];
|
|
1712
|
+
let i = 0;
|
|
1528
1713
|
for (let o = 0; o < t.rows; o++) {
|
|
1529
|
-
const
|
|
1530
|
-
for (let
|
|
1531
|
-
const a = 4 *
|
|
1532
|
-
|
|
1714
|
+
const n = [];
|
|
1715
|
+
for (let g = 0; g < t.cols; g++) {
|
|
1716
|
+
const a = 4 * i, h = this.Oe(A.characterPixels, a), D = ((B = e.characters[h]) == null ? void 0 : B.character) || s;
|
|
1717
|
+
n.push(D), i++;
|
|
1533
1718
|
}
|
|
1534
|
-
|
|
1719
|
+
r.push(n);
|
|
1535
1720
|
}
|
|
1536
|
-
return
|
|
1721
|
+
return r;
|
|
1537
1722
|
}
|
|
1538
1723
|
}
|
|
1539
|
-
class
|
|
1540
|
-
|
|
1724
|
+
class bA {
|
|
1725
|
+
fs(A, t) {
|
|
1541
1726
|
const e = [];
|
|
1542
|
-
for (const
|
|
1543
|
-
let
|
|
1544
|
-
t.preserveTrailingSpaces || (
|
|
1727
|
+
for (const r of A) {
|
|
1728
|
+
let i = r.join("");
|
|
1729
|
+
t.preserveTrailingSpaces || (i = i.replace(/\s+$/, "")), e.push(i);
|
|
1545
1730
|
}
|
|
1546
|
-
const
|
|
1731
|
+
const s = t.lineEnding === "crlf" ? `\r
|
|
1547
1732
|
` : `
|
|
1548
1733
|
`;
|
|
1549
|
-
return e.join(
|
|
1734
|
+
return e.join(s);
|
|
1550
1735
|
}
|
|
1551
1736
|
}
|
|
1552
|
-
class
|
|
1553
|
-
|
|
1554
|
-
const e = this.
|
|
1555
|
-
this.
|
|
1737
|
+
class vA extends k {
|
|
1738
|
+
ds(A, t) {
|
|
1739
|
+
const e = this.ps(t);
|
|
1740
|
+
this.Ve(A, e, "text/plain;charset=utf-8");
|
|
1556
1741
|
}
|
|
1557
|
-
|
|
1558
|
-
let t = this.
|
|
1559
|
-
return t === ".txt" || t.length <= 4 ? this.
|
|
1742
|
+
ps(A) {
|
|
1743
|
+
let t = this.ze(A);
|
|
1744
|
+
return t === ".txt" || t.length <= 4 ? this.Le() : t;
|
|
1560
1745
|
}
|
|
1561
1746
|
}
|
|
1562
|
-
class
|
|
1747
|
+
class N {
|
|
1563
1748
|
constructor() {
|
|
1564
|
-
Q(this, "
|
|
1565
|
-
Q(this, "
|
|
1566
|
-
Q(this, "
|
|
1567
|
-
this.
|
|
1749
|
+
Q(this, "Ds");
|
|
1750
|
+
Q(this, "Cs");
|
|
1751
|
+
Q(this, "us");
|
|
1752
|
+
this.Ds = new xA(), this.Cs = new bA(), this.us = new vA();
|
|
1568
1753
|
}
|
|
1569
|
-
|
|
1754
|
+
Ps(A) {
|
|
1570
1755
|
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " " };
|
|
1571
1756
|
}
|
|
1572
|
-
|
|
1573
|
-
const e = this.
|
|
1574
|
-
return this.
|
|
1757
|
+
_s(A, t = {}) {
|
|
1758
|
+
const e = this.Ps(t), s = this.Ds.Se(A.pipeline), r = this.Ds.ws(s, A.grid, A.font, e.emptyCharacter);
|
|
1759
|
+
return this.Cs.fs(r, e);
|
|
1575
1760
|
}
|
|
1576
|
-
|
|
1577
|
-
const e = this.
|
|
1578
|
-
this.
|
|
1761
|
+
ds(A, t = {}) {
|
|
1762
|
+
const e = this._s(A, t), s = t.filename || this.us.Le();
|
|
1763
|
+
this.us.ds(e, s);
|
|
1579
1764
|
}
|
|
1580
1765
|
}
|
|
1581
|
-
class
|
|
1582
|
-
|
|
1583
|
-
const
|
|
1584
|
-
if (t === 1 && e === "transparent") return
|
|
1585
|
-
const
|
|
1586
|
-
return
|
|
1766
|
+
class yA extends L {
|
|
1767
|
+
vs(A, t = 1, e = "transparent") {
|
|
1768
|
+
const s = A.canvas;
|
|
1769
|
+
if (t === 1 && e === "transparent") return s;
|
|
1770
|
+
const r = document.createElement("canvas"), i = r.getContext("2d"), B = Math.round(s.width * t), o = Math.round(s.height * t);
|
|
1771
|
+
return r.width = B, r.height = o, e !== "transparent" && (i.fillStyle = e, i.fillRect(0, 0, B, o)), i.imageSmoothingEnabled = !1, i.drawImage(s, 0, 0, s.width, s.height, 0, 0, B, o), r;
|
|
1587
1772
|
}
|
|
1588
1773
|
}
|
|
1589
|
-
class
|
|
1590
|
-
|
|
1591
|
-
const e = this.
|
|
1774
|
+
class _A {
|
|
1775
|
+
bs(A, t) {
|
|
1776
|
+
const e = this.Ms(t.format);
|
|
1592
1777
|
return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
|
|
1593
1778
|
}
|
|
1594
|
-
async
|
|
1595
|
-
return new Promise((e,
|
|
1596
|
-
const
|
|
1597
|
-
|
|
1779
|
+
async Gs(A, t) {
|
|
1780
|
+
return new Promise((e, s) => {
|
|
1781
|
+
const r = this.Ms(t.format), i = (B) => {
|
|
1782
|
+
B ? e(B) : s(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
|
|
1598
1783
|
};
|
|
1599
|
-
t.format === "png" ? A.toBlob(
|
|
1784
|
+
t.format === "png" ? A.toBlob(i, r) : A.toBlob(i, r, t.quality);
|
|
1600
1785
|
});
|
|
1601
1786
|
}
|
|
1602
|
-
|
|
1787
|
+
Ms(A) {
|
|
1603
1788
|
switch (A) {
|
|
1604
1789
|
case "png":
|
|
1605
1790
|
return "image/png";
|
|
@@ -1612,263 +1797,269 @@ class wA {
|
|
|
1612
1797
|
}
|
|
1613
1798
|
}
|
|
1614
1799
|
}
|
|
1615
|
-
const
|
|
1616
|
-
class
|
|
1617
|
-
|
|
1618
|
-
this
|
|
1800
|
+
const MA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, W = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
1801
|
+
class GA extends k {
|
|
1802
|
+
Fs(A, t, e) {
|
|
1803
|
+
this.$s(A, this.ze(t) + W[e]);
|
|
1619
1804
|
}
|
|
1620
|
-
|
|
1805
|
+
$s(A, t) {
|
|
1621
1806
|
const e = URL.createObjectURL(A);
|
|
1622
1807
|
try {
|
|
1623
|
-
const
|
|
1624
|
-
|
|
1808
|
+
const s = document.createElement("a");
|
|
1809
|
+
s.href = e, s.download = t, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s);
|
|
1625
1810
|
} finally {
|
|
1626
1811
|
URL.revokeObjectURL(e);
|
|
1627
1812
|
}
|
|
1628
1813
|
}
|
|
1629
|
-
|
|
1630
|
-
return A in
|
|
1814
|
+
Ys(A) {
|
|
1815
|
+
return A in MA && A in W;
|
|
1631
1816
|
}
|
|
1632
1817
|
}
|
|
1633
|
-
class
|
|
1818
|
+
class TA {
|
|
1634
1819
|
constructor() {
|
|
1635
|
-
Q(this, "
|
|
1636
|
-
Q(this, "
|
|
1637
|
-
Q(this, "
|
|
1638
|
-
this.
|
|
1820
|
+
Q(this, "Ds");
|
|
1821
|
+
Q(this, "Cs");
|
|
1822
|
+
Q(this, "us");
|
|
1823
|
+
this.Ds = new yA(), this.Cs = new _A(), this.us = new GA();
|
|
1639
1824
|
}
|
|
1640
|
-
|
|
1825
|
+
Ps(A) {
|
|
1641
1826
|
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent" };
|
|
1642
1827
|
}
|
|
1643
|
-
|
|
1644
|
-
if (console.log("Validating image export options:", A), !this.
|
|
1828
|
+
Ts(A) {
|
|
1829
|
+
if (console.log("Validating image export options:", A), !this.us.Ys(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
|
|
1645
1830
|
if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
1646
1831
|
if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
1647
1832
|
A.scale > 10 && console.warn("Large scale factors may result in very large files and slow performance"), A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
|
|
1648
1833
|
}
|
|
1649
|
-
|
|
1650
|
-
const e = this.
|
|
1651
|
-
if (this.
|
|
1652
|
-
const
|
|
1653
|
-
return this.
|
|
1834
|
+
Ss(A, t = {}) {
|
|
1835
|
+
const e = this.Ps(t);
|
|
1836
|
+
if (this.Ts(e), e.scale === 1 && e.backgroundColor === "transparent") return this.Cs.bs(A.canvas, e);
|
|
1837
|
+
const s = this.Ds.vs(A, e.scale, e.backgroundColor);
|
|
1838
|
+
return this.Cs.bs(s, e);
|
|
1654
1839
|
}
|
|
1655
|
-
async
|
|
1656
|
-
const e = this.
|
|
1657
|
-
if (this.
|
|
1658
|
-
const
|
|
1659
|
-
return await this.
|
|
1840
|
+
async Gs(A, t = {}) {
|
|
1841
|
+
const e = this.Ps(t);
|
|
1842
|
+
if (this.Ts(e), e.scale === 1 && e.backgroundColor === "transparent") return await this.Cs.Gs(A.canvas, e);
|
|
1843
|
+
const s = this.Ds.vs(A, e.scale, e.backgroundColor);
|
|
1844
|
+
return await this.Cs.Gs(s, e);
|
|
1660
1845
|
}
|
|
1661
|
-
async
|
|
1662
|
-
const e = await this.
|
|
1663
|
-
this.
|
|
1846
|
+
async Fs(A, t = {}) {
|
|
1847
|
+
const e = await this.Gs(A, t), s = t.format ?? "png", r = t.filename || this.us.Le();
|
|
1848
|
+
this.us.Fs(e, r, s);
|
|
1664
1849
|
}
|
|
1665
1850
|
}
|
|
1666
|
-
const
|
|
1851
|
+
const RA = (E) => class extends E {
|
|
1667
1852
|
toString(A = {}) {
|
|
1668
|
-
return new
|
|
1853
|
+
return new N()._s({ pipeline: this.Os, grid: this.ne, font: this._t }, A);
|
|
1669
1854
|
}
|
|
1670
1855
|
saveStrings(A = {}) {
|
|
1671
|
-
new
|
|
1856
|
+
new N().ds({ pipeline: this.Os, grid: this.ne, font: this._t }, A);
|
|
1672
1857
|
}
|
|
1673
1858
|
toSVG(A = {}) {
|
|
1674
|
-
return new
|
|
1859
|
+
return new $().Is(this, A);
|
|
1675
1860
|
}
|
|
1676
1861
|
saveSVG(A = {}) {
|
|
1677
|
-
new
|
|
1862
|
+
new $().cs(this, A);
|
|
1678
1863
|
}
|
|
1679
1864
|
async saveCanvas(A, t = "png", e = {}) {
|
|
1680
|
-
await new
|
|
1865
|
+
await new TA().Fs(this.jt, { ...e, filename: A, format: t });
|
|
1681
1866
|
}
|
|
1682
|
-
},
|
|
1867
|
+
}, FA = (E) => class extends E {
|
|
1683
1868
|
async loadFont(A) {
|
|
1684
|
-
return this.
|
|
1685
|
-
const t = this.
|
|
1686
|
-
this.
|
|
1869
|
+
return this._t.Ht(A).then(() => {
|
|
1870
|
+
const t = this._t.maxGlyphDimensions;
|
|
1871
|
+
this.ne.qt(t.width, t.height), this.Os.ee();
|
|
1687
1872
|
});
|
|
1688
1873
|
}
|
|
1689
1874
|
fontSize(A) {
|
|
1690
|
-
if (!
|
|
1691
|
-
this.
|
|
1692
|
-
const t = this.
|
|
1693
|
-
this.
|
|
1875
|
+
if (!u.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this._t.fontSize === A) return;
|
|
1876
|
+
this._t.Rt(A);
|
|
1877
|
+
const t = this._t.maxGlyphDimensions;
|
|
1878
|
+
this.ne.qt(t.width, t.height), this.Os.ee(), this.Dt.UA();
|
|
1694
1879
|
}
|
|
1695
|
-
},
|
|
1880
|
+
}, UA = (E) => class extends E {
|
|
1696
1881
|
addConverter(A) {
|
|
1697
|
-
return this.
|
|
1882
|
+
return this.Os.add(A);
|
|
1698
1883
|
}
|
|
1699
1884
|
removeConverter(A) {
|
|
1700
|
-
this.
|
|
1885
|
+
this.Os.remove(A);
|
|
1701
1886
|
}
|
|
1702
1887
|
};
|
|
1703
|
-
class
|
|
1888
|
+
class YA {
|
|
1704
1889
|
constructor() {
|
|
1705
|
-
Q(this, "
|
|
1706
|
-
Q(this, "
|
|
1707
|
-
Q(this, "
|
|
1708
|
-
Q(this, "
|
|
1709
|
-
Q(this, "
|
|
1890
|
+
Q(this, "Dt");
|
|
1891
|
+
Q(this, "_t");
|
|
1892
|
+
Q(this, "Os");
|
|
1893
|
+
Q(this, "jt");
|
|
1894
|
+
Q(this, "ne");
|
|
1710
1895
|
}
|
|
1711
1896
|
}
|
|
1712
|
-
class
|
|
1713
|
-
return e.reduce((
|
|
1714
|
-
}(
|
|
1897
|
+
class z extends function(t, ...e) {
|
|
1898
|
+
return e.reduce((s, r) => r(s), t);
|
|
1899
|
+
}(YA, IA, RA, FA, UA) {
|
|
1715
1900
|
constructor(t = null, e = {}) {
|
|
1716
1901
|
super();
|
|
1717
|
-
Q(this, "
|
|
1718
|
-
Q(this, "
|
|
1719
|
-
Q(this, "
|
|
1720
|
-
Q(this, "
|
|
1721
|
-
Q(this, "
|
|
1722
|
-
Q(this, "
|
|
1723
|
-
Q(this, "
|
|
1724
|
-
Q(this, "
|
|
1725
|
-
Q(this, "
|
|
1726
|
-
Q(this, "
|
|
1727
|
-
Q(this, "
|
|
1728
|
-
Q(this, "
|
|
1729
|
-
Q(this, "
|
|
1730
|
-
Q(this, "
|
|
1731
|
-
Q(this, "
|
|
1732
|
-
Q(this, "
|
|
1733
|
-
Q(this, "
|
|
1902
|
+
Q(this, "re");
|
|
1903
|
+
Q(this, "Us");
|
|
1904
|
+
Q(this, "ie");
|
|
1905
|
+
Q(this, "ks");
|
|
1906
|
+
Q(this, "Vs");
|
|
1907
|
+
Q(this, "Rs", null);
|
|
1908
|
+
Q(this, "Hs", 0);
|
|
1909
|
+
Q(this, "zs");
|
|
1910
|
+
Q(this, "Ls", !0);
|
|
1911
|
+
Q(this, "Js", 0);
|
|
1912
|
+
Q(this, "Ks", 0);
|
|
1913
|
+
Q(this, "Ws", 0);
|
|
1914
|
+
Q(this, "js", []);
|
|
1915
|
+
Q(this, "Ns", 10);
|
|
1916
|
+
Q(this, "Zs", !1);
|
|
1917
|
+
Q(this, "Xs", !1);
|
|
1918
|
+
Q(this, "qs", () => {
|
|
1734
1919
|
});
|
|
1735
|
-
Q(this, "
|
|
1920
|
+
Q(this, "Ar", () => {
|
|
1736
1921
|
});
|
|
1737
|
-
Q(this, "
|
|
1738
|
-
this.
|
|
1922
|
+
Q(this, "tr");
|
|
1923
|
+
this.re = t, this.Xs = t === null, this.ks = e.renderMode ?? "auto", this.Vs = e.frameRate ?? 60, this.zs = 1e3 / this.Vs;
|
|
1739
1924
|
}
|
|
1740
1925
|
static async create(t = null, e = {}) {
|
|
1741
|
-
const
|
|
1742
|
-
let
|
|
1743
|
-
|
|
1744
|
-
const o =
|
|
1745
|
-
return
|
|
1746
|
-
}
|
|
1747
|
-
|
|
1748
|
-
this.
|
|
1749
|
-
this.
|
|
1750
|
-
}, window.addEventListener("resize", this.
|
|
1751
|
-
this.
|
|
1752
|
-
}), this.
|
|
1926
|
+
const s = new this(t, e), r = s.Xs ? e : void 0;
|
|
1927
|
+
let i, B;
|
|
1928
|
+
s.jt = new CA(s.re, s.Xs, r), s.Dt = new iA(s.jt.ge()), s.Xs ? (i = e.width || 800, B = e.height || 600) : (i = s.jt.width || 800, B = s.jt.height || 600), s.Us = s.Dt.TA(i, B), s._t = new cA(s.Dt, e.fontSize ?? 16), await s._t.Ut(e.fontSource);
|
|
1929
|
+
const o = s._t.maxGlyphDimensions;
|
|
1930
|
+
return s.ne = new DA(s.jt.canvas, o.width, o.height), s.Os = new dA(s.Dt, s._t, s.ne), s.er(), s.sr(), s;
|
|
1931
|
+
}
|
|
1932
|
+
er() {
|
|
1933
|
+
this.tr = () => {
|
|
1934
|
+
this.Xs ? this.Ar() : this.rr();
|
|
1935
|
+
}, window.addEventListener("resize", this.tr), window.ResizeObserver && this.re && !this.Xs && (this.ie = new ResizeObserver(() => {
|
|
1936
|
+
this.rr();
|
|
1937
|
+
}), this.ie.observe(this.re));
|
|
1753
1938
|
}
|
|
1754
1939
|
render() {
|
|
1755
|
-
this.
|
|
1940
|
+
this.Br(), this.Ws++, this.Zs ? console.warn("Cannot render: Required resources have been disposed") : (this.Xs ? (this.Us.begin(), this.qs(), this.Us.end()) : this.Us.update(this.re), this.Os.hasEnabledConverters() ? (this.Os.Te(this.Us), this.Dt.SA(0), this.Dt.kA(this.Os.texture, this.ne.offsetX, this.ne.offsetY, this.Os.texture.width, this.Os.texture.height)) : (this.Dt.OA(), this.Dt.kA(this.Us, this.ne.offsetX, this.ne.offsetY, this.Us.width, this.Us.height)));
|
|
1756
1941
|
}
|
|
1757
|
-
|
|
1758
|
-
this.
|
|
1942
|
+
rr() {
|
|
1943
|
+
this.jt.ee(), this.Us.resize(this.jt.width, this.jt.height), this.ne.ee(), this.Os.ee(), this.Dt.UA(), this.ks !== "manual" && this.render();
|
|
1759
1944
|
}
|
|
1760
|
-
|
|
1761
|
-
if (this.
|
|
1762
|
-
this.
|
|
1945
|
+
sr() {
|
|
1946
|
+
if (this.ks !== "auto" || !this.Ls) return;
|
|
1947
|
+
this.Hs = performance.now();
|
|
1763
1948
|
const t = (e) => {
|
|
1764
|
-
if (!this.
|
|
1765
|
-
const
|
|
1766
|
-
|
|
1949
|
+
if (!this.Ls) return void (this.Rs = null);
|
|
1950
|
+
const s = e - this.Hs;
|
|
1951
|
+
s >= this.zs && (this.render(), this.Hs = e - s % this.zs), this.Ls && (this.Rs = requestAnimationFrame(t));
|
|
1767
1952
|
};
|
|
1768
|
-
this.
|
|
1953
|
+
this.Rs = requestAnimationFrame(t);
|
|
1769
1954
|
}
|
|
1770
|
-
|
|
1955
|
+
Br() {
|
|
1771
1956
|
const t = performance.now();
|
|
1772
|
-
if (this.
|
|
1773
|
-
const e = t - this.
|
|
1774
|
-
this.
|
|
1775
|
-
const
|
|
1776
|
-
this.
|
|
1957
|
+
if (this.Ks > 0) {
|
|
1958
|
+
const e = t - this.Ks;
|
|
1959
|
+
this.js.push(e), this.js.length > this.Ns && this.js.shift();
|
|
1960
|
+
const s = this.js.reduce((r, i) => r + i, 0) / this.js.length;
|
|
1961
|
+
this.Js = 1e3 / s;
|
|
1777
1962
|
}
|
|
1778
|
-
this.
|
|
1963
|
+
this.Ks = t;
|
|
1779
1964
|
}
|
|
1780
|
-
|
|
1781
|
-
this.
|
|
1965
|
+
ir() {
|
|
1966
|
+
this.Rs && (cancelAnimationFrame(this.Rs), this.Rs = null);
|
|
1782
1967
|
}
|
|
1783
1968
|
renderMode(t) {
|
|
1784
|
-
this.
|
|
1969
|
+
this.ks !== t && (this.ir(), this.ks = t, t === "auto" && this.Ls && this.sr());
|
|
1785
1970
|
}
|
|
1786
1971
|
frameRate(t) {
|
|
1787
|
-
if (t === void 0) return this.
|
|
1788
|
-
this.
|
|
1972
|
+
if (t === void 0) return this.Js;
|
|
1973
|
+
this.Vs = t, this.zs = 1e3 / t, this.ks === "auto" && this.Ls && (this.ir(), this.sr());
|
|
1789
1974
|
}
|
|
1790
1975
|
noLoop() {
|
|
1791
|
-
this.
|
|
1976
|
+
this.Ls && (this.Ls = !1, this.Rs && (cancelAnimationFrame(this.Rs), this.Rs = null));
|
|
1792
1977
|
}
|
|
1793
1978
|
loop() {
|
|
1794
|
-
this.
|
|
1979
|
+
this.Ls || (this.Ls = !0, this.ks === "auto" && this.sr());
|
|
1795
1980
|
}
|
|
1796
1981
|
redraw(t = 1) {
|
|
1797
|
-
if (
|
|
1982
|
+
if (u.C(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.render();
|
|
1798
1983
|
}
|
|
1799
1984
|
isLooping() {
|
|
1800
|
-
return this.
|
|
1985
|
+
return this.ks === "auto" && this.Ls;
|
|
1801
1986
|
}
|
|
1802
1987
|
draw(t) {
|
|
1803
|
-
this.
|
|
1988
|
+
this.qs = t;
|
|
1804
1989
|
}
|
|
1805
1990
|
windowResized(t) {
|
|
1806
|
-
this.
|
|
1991
|
+
this.Ar = t;
|
|
1807
1992
|
}
|
|
1808
1993
|
resizeCanvas(t, e) {
|
|
1809
|
-
this.
|
|
1994
|
+
this.Xs && (this.jt.ee(t, e), this.Us.resize(this.jt.width, this.jt.height), this.ne.ee(), this.Os.ee(), this.Dt.UA(), this.ks !== "manual" && this.render());
|
|
1810
1995
|
}
|
|
1811
1996
|
destroy() {
|
|
1812
|
-
this.
|
|
1997
|
+
this.Zs || (this.ir(), window.removeEventListener("resize", this.tr), this.ie && this.ie.disconnect(), this.Os.S(), this._t.S(), this.Us.S(), this.Dt.S(), this.Zs = !0);
|
|
1813
1998
|
}
|
|
1814
1999
|
get grid() {
|
|
1815
|
-
return this.
|
|
2000
|
+
return this.ne;
|
|
1816
2001
|
}
|
|
1817
2002
|
get font() {
|
|
1818
|
-
return this.
|
|
2003
|
+
return this._t;
|
|
1819
2004
|
}
|
|
1820
2005
|
get mode() {
|
|
1821
|
-
return this.
|
|
2006
|
+
return this.ks;
|
|
1822
2007
|
}
|
|
1823
2008
|
get pipeline() {
|
|
1824
|
-
return this.
|
|
2009
|
+
return this.Os;
|
|
1825
2010
|
}
|
|
1826
2011
|
get frameCount() {
|
|
1827
|
-
return this.
|
|
2012
|
+
return this.Ws;
|
|
1828
2013
|
}
|
|
1829
2014
|
set frameCount(t) {
|
|
1830
|
-
this.
|
|
2015
|
+
this.Ws = t;
|
|
1831
2016
|
}
|
|
1832
2017
|
get width() {
|
|
1833
|
-
return this.
|
|
2018
|
+
return this.jt.width;
|
|
1834
2019
|
}
|
|
1835
2020
|
get height() {
|
|
1836
|
-
return this.
|
|
2021
|
+
return this.jt.height;
|
|
1837
2022
|
}
|
|
1838
2023
|
get canvas() {
|
|
1839
|
-
return this.
|
|
2024
|
+
return this.jt;
|
|
1840
2025
|
}
|
|
1841
2026
|
get isDisposed() {
|
|
1842
|
-
return this.
|
|
2027
|
+
return this.Zs;
|
|
1843
2028
|
}
|
|
1844
2029
|
}
|
|
1845
|
-
class
|
|
2030
|
+
class j {
|
|
2031
|
+
constructor() {
|
|
2032
|
+
throw new I("Textmode is a static class and cannot be instantiated.");
|
|
2033
|
+
}
|
|
1846
2034
|
static async create(A, t = {}) {
|
|
1847
|
-
if (A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement)
|
|
2035
|
+
if (!(A == null || A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement || typeof A == "object")) throw new I("First parameter must be HTMLCanvasElement, HTMLVideoElement, or options object.");
|
|
2036
|
+
if (typeof t != "object") throw new I("Second parameter must be an options object.");
|
|
2037
|
+
if (A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement) return z.create(A, t);
|
|
1848
2038
|
{
|
|
1849
2039
|
const e = A || {};
|
|
1850
|
-
return
|
|
2040
|
+
return z.create(null, e);
|
|
1851
2041
|
}
|
|
1852
2042
|
}
|
|
1853
2043
|
static setErrorLevel(A) {
|
|
1854
|
-
|
|
2044
|
+
u.u(A);
|
|
1855
2045
|
}
|
|
1856
2046
|
static get version() {
|
|
1857
|
-
return "0.1.8
|
|
2047
|
+
return "0.1.8";
|
|
1858
2048
|
}
|
|
1859
2049
|
}
|
|
1860
|
-
const
|
|
2050
|
+
const LA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), kA = j.create, jA = j.setErrorLevel, VA = j.version;
|
|
1861
2051
|
export {
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
2052
|
+
CA as TextmodeCanvas,
|
|
2053
|
+
dA as TextmodeConversionPipeline,
|
|
2054
|
+
eA as TextmodeErrorLevel,
|
|
2055
|
+
cA as TextmodeFont,
|
|
2056
|
+
DA as TextmodeGrid,
|
|
2057
|
+
z as Textmodifier,
|
|
2058
|
+
OA as converters,
|
|
2059
|
+
kA as create,
|
|
2060
|
+
j as default,
|
|
2061
|
+
LA as export,
|
|
2062
|
+
jA as setErrorLevel,
|
|
2063
|
+
j as textmode,
|
|
2064
|
+
VA as version
|
|
1874
2065
|
};
|