@gjsify/string_decoder 0.4.0 → 0.4.4

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/package.json CHANGED
@@ -1,41 +1,44 @@
1
1
  {
2
- "name": "@gjsify/string_decoder",
3
- "version": "0.4.0",
4
- "description": "Node.js string_decoder module for Gjs",
5
- "type": "module",
6
- "module": "lib/esm/index.js",
7
- "types": "lib/types/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./lib/types/index.d.ts",
11
- "default": "./lib/esm/index.js"
2
+ "name": "@gjsify/string_decoder",
3
+ "version": "0.4.4",
4
+ "description": "Node.js string_decoder module for Gjs",
5
+ "type": "module",
6
+ "module": "lib/esm/index.js",
7
+ "types": "lib/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/types/index.d.ts",
11
+ "default": "./lib/esm/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "lib"
16
+ ],
17
+ "scripts": {
18
+ "clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
19
+ "check": "tsc --noEmit",
20
+ "build": "gjsify run build:gjsify && gjsify run build:types",
21
+ "build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
22
+ "build:types": "tsc",
23
+ "build:test": "gjsify run build:test:gjs && gjsify run build:test:node",
24
+ "build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
25
+ "build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
26
+ "test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:node && gjsify run test:gjs",
27
+ "test:gjs": "gjsify run test.gjs.mjs",
28
+ "test:node": "node test.node.mjs"
29
+ },
30
+ "keywords": [
31
+ "gjs",
32
+ "node",
33
+ "string_decoder"
34
+ ],
35
+ "devDependencies": {
36
+ "@gjsify/cli": "^0.4.4",
37
+ "@gjsify/unit": "^0.4.4",
38
+ "@types/node": "^25.6.2",
39
+ "typescript": "^6.0.3"
40
+ },
41
+ "dependencies": {
42
+ "@gjsify/utils": "^0.4.4"
12
43
  }
13
- },
14
- "scripts": {
15
- "clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
16
- "check": "tsc --noEmit",
17
- "build": "yarn build:gjsify && yarn build:types",
18
- "build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
19
- "build:types": "tsc",
20
- "build:test": "yarn build:test:gjs && yarn build:test:node",
21
- "build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
22
- "build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
23
- "test": "yarn build:gjsify && yarn build:test && yarn test:node && yarn test:gjs",
24
- "test:gjs": "gjsify run test.gjs.mjs",
25
- "test:node": "node test.node.mjs"
26
- },
27
- "keywords": [
28
- "gjs",
29
- "node",
30
- "string_decoder"
31
- ],
32
- "devDependencies": {
33
- "@gjsify/cli": "^0.4.0",
34
- "@gjsify/unit": "^0.4.0",
35
- "@types/node": "^25.6.2",
36
- "typescript": "^6.0.3"
37
- },
38
- "dependencies": {
39
- "@gjsify/utils": "^0.4.0"
40
- }
41
- }
44
+ }
package/src/index.spec.ts DELETED
@@ -1,433 +0,0 @@
1
- import { describe, it, expect } from '@gjsify/unit';
2
- import { StringDecoder } from 'node:string_decoder';
3
- import { Buffer } from 'node:buffer';
4
-
5
- // Ported from refs/node/test/parallel/test-string-decoder.js
6
- // and test-string-decoder-end.js
7
- // Original: MIT license, Node.js contributors
8
-
9
- // @types/node doesn't expose `StringDecoder.encoding`, even though Node.js sets
10
- // it at runtime. Augment the type locally so the specs can assert on it.
11
- declare module 'node:string_decoder' {
12
- interface StringDecoder {
13
- readonly encoding: string;
14
- }
15
- }
16
-
17
- type Encoding = ConstructorParameters<typeof StringDecoder>[0];
18
-
19
- // Helper: test that decoding input with given encoding produces expected output.
20
- // Tests all possible write sequences (byte-at-a-time, all-at-once, and various splits).
21
- function testDecode(encoding: Encoding, input: Buffer, expected: string): boolean {
22
- // Write all at once
23
- let decoder = new StringDecoder(encoding);
24
- let result = decoder.write(input) + decoder.end();
25
- if (result !== expected) return false;
26
-
27
- // Write one byte at a time
28
- decoder = new StringDecoder(encoding);
29
- result = '';
30
- for (let i = 0; i < input.length; i++) {
31
- result += decoder.write(input.subarray(i, i + 1));
32
- }
33
- result += decoder.end();
34
- if (result !== expected) return false;
35
-
36
- return true;
37
- }
38
-
39
- // Helper: test end() behavior — write incomplete, end(), write next, end()
40
- function testEnd(encoding: Encoding, incomplete: Buffer, next: Buffer, expected: string): boolean {
41
- const decoder = new StringDecoder(encoding);
42
- let res = '';
43
- res += decoder.write(incomplete);
44
- res += decoder.end();
45
- res += decoder.write(next);
46
- res += decoder.end();
47
- return res === expected;
48
- }
49
-
50
- export default async () => {
51
- // ==================== constructor ====================
52
-
53
- await describe('StringDecoder: constructor', async () => {
54
- await it('should create a utf8 decoder by default', async () => {
55
- const decoder = new StringDecoder();
56
- expect(decoder.encoding).toBe('utf8');
57
- });
58
-
59
- await it('should accept encoding parameter', async () => {
60
- const decoder = new StringDecoder('utf-8');
61
- expect(decoder.encoding).toBe('utf8');
62
- });
63
-
64
- await it('should accept latin1 encoding', async () => {
65
- const decoder = new StringDecoder('latin1');
66
- expect(decoder.encoding).toBe('latin1');
67
- });
68
-
69
- await it('should accept hex encoding', async () => {
70
- const decoder = new StringDecoder('hex');
71
- expect(decoder.encoding).toBe('hex');
72
- });
73
-
74
- await it('should accept base64 encoding', async () => {
75
- const decoder = new StringDecoder('base64');
76
- expect(decoder.encoding).toBe('base64');
77
- });
78
-
79
- await it('should accept utf16le encoding', async () => {
80
- const decoder = new StringDecoder('utf16le');
81
- expect(decoder.encoding).toBe('utf16le');
82
- });
83
-
84
- await it('should accept ucs2 encoding (alias for utf16le)', async () => {
85
- const decoder = new StringDecoder('ucs2');
86
- expect(decoder.encoding).toBe('utf16le');
87
- });
88
- });
89
-
90
- // ==================== UTF-8 basic ====================
91
-
92
- await describe('StringDecoder: utf8 basic', async () => {
93
- await it('should decode ASCII ($)', async () => {
94
- expect(testDecode('utf-8', Buffer.from('$', 'utf-8'), '$')).toBeTruthy();
95
- });
96
-
97
- await it('should decode 2-byte char (¢)', async () => {
98
- expect(testDecode('utf-8', Buffer.from('¢', 'utf-8'), '¢')).toBeTruthy();
99
- });
100
-
101
- await it('should decode 3-byte char (€)', async () => {
102
- expect(testDecode('utf-8', Buffer.from('€', 'utf-8'), '€')).toBeTruthy();
103
- });
104
-
105
- await it('should decode 4-byte char (𤭢)', async () => {
106
- expect(testDecode('utf-8', Buffer.from('𤭢', 'utf-8'), '𤭢')).toBeTruthy();
107
- });
108
-
109
- await it('should decode mixed ascii and non-ascii', async () => {
110
- // U+02E4 -> CB A4, U+0064 -> 64, U+12E4 -> E1 8B A4, U+0030 -> 30, U+3045 -> E3 81 85
111
- const buf = Buffer.from([0xCB, 0xA4, 0x64, 0xE1, 0x8B, 0xA4, 0x30, 0xE3, 0x81, 0x85]);
112
- expect(testDecode('utf-8', buf, '\u02e4\u0064\u12e4\u0030\u3045')).toBeTruthy();
113
- });
114
-
115
- await it('should decode complete ASCII buffer', async () => {
116
- const decoder = new StringDecoder('utf8');
117
- expect(decoder.write(new Uint8Array([72, 101, 108, 108, 111]))).toBe('Hello');
118
- });
119
-
120
- await it('should handle multi-byte characters split across writes', async () => {
121
- const decoder = new StringDecoder('utf8');
122
- const result1 = decoder.write(new Uint8Array([0xE2]));
123
- const result2 = decoder.write(new Uint8Array([0x82, 0xAC]));
124
- expect(result1 + result2).toBe('€');
125
- });
126
-
127
- await it('should handle empty buffer', async () => {
128
- const decoder = new StringDecoder('utf8');
129
- expect(decoder.write(new Uint8Array(0))).toBe('');
130
- });
131
- });
132
-
133
- // ==================== UTF-8 invalid sequences ====================
134
-
135
- await describe('StringDecoder: utf8 invalid sequences', async () => {
136
- await it('should handle C9B5A941 → \\u0275\\ufffdA', async () => {
137
- expect(testDecode('utf-8', Buffer.from('C9B5A941', 'hex'), '\u0275\ufffdA')).toBeTruthy();
138
- });
139
-
140
- await it('should handle lone E2 → \\ufffd', async () => {
141
- expect(testDecode('utf-8', Buffer.from('E2', 'hex'), '\ufffd')).toBeTruthy();
142
- });
143
-
144
- await it('should handle E241 → \\ufffdA', async () => {
145
- expect(testDecode('utf-8', Buffer.from('E241', 'hex'), '\ufffdA')).toBeTruthy();
146
- });
147
-
148
- await it('should handle CCCCB8 → \\ufffd\\u0338', async () => {
149
- expect(testDecode('utf-8', Buffer.from('CCCCB8', 'hex'), '\ufffd\u0338')).toBeTruthy();
150
- });
151
-
152
- await it('should handle F0B841 → \\ufffdA', async () => {
153
- expect(testDecode('utf-8', Buffer.from('F0B841', 'hex'), '\ufffdA')).toBeTruthy();
154
- });
155
-
156
- await it('should handle F1CCB8 → \\ufffd\\u0338', async () => {
157
- expect(testDecode('utf-8', Buffer.from('F1CCB8', 'hex'), '\ufffd\u0338')).toBeTruthy();
158
- });
159
-
160
- await it('should handle F0FB00 → \\ufffd\\ufffd\\0', async () => {
161
- expect(testDecode('utf-8', Buffer.from('F0FB00', 'hex'), '\ufffd\ufffd\0')).toBeTruthy();
162
- });
163
-
164
- await it('should handle CCE2B8B8 → \\ufffd\\u2e38', async () => {
165
- expect(testDecode('utf-8', Buffer.from('CCE2B8B8', 'hex'), '\ufffd\u2e38')).toBeTruthy();
166
- });
167
-
168
- await it('should handle E2B8CCB8 → \\ufffd\\u0338', async () => {
169
- expect(testDecode('utf-8', Buffer.from('E2B8CCB8', 'hex'), '\ufffd\u0338')).toBeTruthy();
170
- });
171
-
172
- await it('should handle E2FBCC01 → \\ufffd\\ufffd\\ufffd\\u0001', async () => {
173
- expect(testDecode('utf-8', Buffer.from('E2FBCC01', 'hex'), '\ufffd\ufffd\ufffd\u0001')).toBeTruthy();
174
- });
175
-
176
- await it('should handle CCB8CDB9 → \\u0338\\u0379', async () => {
177
- expect(testDecode('utf-8', Buffer.from('CCB8CDB9', 'hex'), '\u0338\u0379')).toBeTruthy();
178
- });
179
-
180
- await it('should handle CESU-8 of U+1D40D as 6 replacement chars', async () => {
181
- expect(testDecode('utf-8', Buffer.from('EDA0B5EDB08D', 'hex'),
182
- '\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd')).toBeTruthy();
183
- });
184
- });
185
-
186
- // ==================== UTF-8 streaming edge cases ====================
187
-
188
- await describe('StringDecoder: utf8 streaming', async () => {
189
- await it('should buffer incomplete E1 and output replacement on end()', async () => {
190
- const decoder = new StringDecoder('utf8');
191
- expect(decoder.write(Buffer.from('E1', 'hex'))).toBe('');
192
- expect(decoder.end()).toBe('\ufffd');
193
- });
194
-
195
- await it('should handle E18B incomplete → replacement on end()', async () => {
196
- const decoder = new StringDecoder('utf8');
197
- expect(decoder.write(Buffer.from('E18B', 'hex'))).toBe('');
198
- expect(decoder.end()).toBe('\ufffd');
199
- });
200
-
201
- await it('should pass through replacement char directly', async () => {
202
- const decoder = new StringDecoder('utf8');
203
- expect(decoder.write(Buffer.from('\ufffd'))).toBe('\ufffd');
204
- expect(decoder.end()).toBe('');
205
- });
206
-
207
- await it('should pass through multiple replacement chars', async () => {
208
- const decoder = new StringDecoder('utf8');
209
- expect(decoder.write(Buffer.from('\ufffd\ufffd\ufffd'))).toBe('\ufffd\ufffd\ufffd');
210
- expect(decoder.end()).toBe('');
211
- });
212
-
213
- await it('should handle EFBFBDE2 → replacement + incomplete', async () => {
214
- const decoder = new StringDecoder('utf8');
215
- expect(decoder.write(Buffer.from('EFBFBDE2', 'hex'))).toBe('\ufffd');
216
- expect(decoder.end()).toBe('\ufffd');
217
- });
218
-
219
- await it('should handle F1 then 41F2 sequence', async () => {
220
- const decoder = new StringDecoder('utf8');
221
- expect(decoder.write(Buffer.from('F1', 'hex'))).toBe('');
222
- expect(decoder.write(Buffer.from('41F2', 'hex'))).toBe('\ufffdA');
223
- expect(decoder.end()).toBe('\ufffd');
224
- });
225
- });
226
-
227
- // ==================== UTF-16LE ====================
228
-
229
- await describe('StringDecoder: utf16le', async () => {
230
- await it('should decode UCS-2 text', async () => {
231
- expect(testDecode('ucs2', Buffer.from('ababc', 'ucs2'), 'ababc')).toBeTruthy();
232
- });
233
-
234
- await it('should decode UTF-16LE surrogate pair (thumbs up)', async () => {
235
- expect(testDecode('utf16le', Buffer.from('3DD84DDC', 'hex'), '\ud83d\udc4d')).toBeTruthy();
236
- });
237
-
238
- await it('should handle surrogate pair split across 3 writes', async () => {
239
- const decoder = new StringDecoder('utf16le');
240
- expect(decoder.write(Buffer.from('3DD8', 'hex'))).toBe('');
241
- expect(decoder.write(Buffer.from('4D', 'hex'))).toBe('');
242
- expect(decoder.write(Buffer.from('DC', 'hex'))).toBe('\ud83d\udc4d');
243
- expect(decoder.end()).toBe('');
244
- });
245
-
246
- await it('should output high surrogate on end() when incomplete', async () => {
247
- const decoder = new StringDecoder('utf16le');
248
- expect(decoder.write(Buffer.from('3DD8', 'hex'))).toBe('');
249
- expect(decoder.end()).toBe('\ud83d');
250
- });
251
-
252
- await it('should output high surrogate on end() with 3 bytes', async () => {
253
- const decoder = new StringDecoder('utf16le');
254
- expect(decoder.write(Buffer.from('3DD8', 'hex'))).toBe('');
255
- expect(decoder.write(Buffer.from('4D', 'hex'))).toBe('');
256
- expect(decoder.end()).toBe('\ud83d');
257
- });
258
-
259
- await it('should handle 3-byte buffer as char + leftover', async () => {
260
- const decoder = new StringDecoder('utf16le');
261
- expect(decoder.write(Buffer.from('3DD84D', 'hex'))).toBe('\ud83d');
262
- expect(decoder.end()).toBe('');
263
- });
264
- });
265
-
266
- // ==================== latin1 ====================
267
-
268
- await describe('StringDecoder: latin1', async () => {
269
- await it('should decode latin1 buffer', async () => {
270
- const decoder = new StringDecoder('latin1');
271
- expect(decoder.write(new Uint8Array([72, 101, 108, 108, 111]))).toBe('Hello');
272
- });
273
-
274
- await it('should handle high bytes (é)', async () => {
275
- const decoder = new StringDecoder('latin1');
276
- expect(decoder.write(new Uint8Array([0xE9]))).toBe('\u00e9');
277
- });
278
- });
279
-
280
- // ==================== hex ====================
281
-
282
- await describe('StringDecoder: hex', async () => {
283
- await it('should decode buffer as hex', async () => {
284
- const decoder = new StringDecoder('hex');
285
- expect(decoder.write(new Uint8Array([0xff, 0x00, 0x0a]))).toBe('ff000a');
286
- });
287
- });
288
-
289
- // ==================== ascii ====================
290
-
291
- await describe('StringDecoder: ascii', async () => {
292
- await it('should decode ASCII buffer', async () => {
293
- const decoder = new StringDecoder('ascii');
294
- expect(decoder.write(new Uint8Array([72, 101, 108, 108, 111]))).toBe('Hello');
295
- });
296
- });
297
-
298
- // ==================== base64 ====================
299
-
300
- await describe('StringDecoder: base64', async () => {
301
- await it('should encode single byte on end()', async () => {
302
- const decoder = new StringDecoder('base64');
303
- expect(decoder.write(Buffer.of(0x61))).toBe('');
304
- expect(decoder.end()).toBe('YQ==');
305
- });
306
-
307
- await it('should encode two bytes on end()', async () => {
308
- const decoder = new StringDecoder('base64');
309
- expect(decoder.write(Buffer.of(0x61, 0x61))).toBe('');
310
- expect(decoder.end()).toBe('YWE=');
311
- });
312
-
313
- await it('should encode three bytes immediately', async () => {
314
- const decoder = new StringDecoder('base64');
315
- expect(decoder.write(Buffer.of(0x61, 0x61, 0x61))).toBe('YWFh');
316
- expect(decoder.end()).toBe('');
317
- });
318
-
319
- await it('should handle 3+1 byte split', async () => {
320
- const decoder = new StringDecoder('base64');
321
- expect(decoder.write(Buffer.of(0x61, 0x61, 0x61))).toBe('YWFh');
322
- expect(decoder.write(Buffer.of(0x61))).toBe('');
323
- expect(decoder.end()).toBe('YQ==');
324
- });
325
- });
326
-
327
- // ==================== end() behavior ====================
328
-
329
- await describe('StringDecoder: end()', async () => {
330
- await it('should accept buffer in end()', async () => {
331
- const decoder = new StringDecoder('utf8');
332
- expect(decoder.end(new Uint8Array([72, 105]))).toBe('Hi');
333
- });
334
-
335
- await it('should return empty string with no pending data', async () => {
336
- const decoder = new StringDecoder('utf8');
337
- expect(decoder.end()).toBe('');
338
- });
339
-
340
- // UTF-8 end tests
341
- await it('utf8: E2 then 61 → \\ufffd a', async () => {
342
- expect(testEnd('utf8', Buffer.of(0xE2), Buffer.of(0x61), '\uFFFDa')).toBeTruthy();
343
- });
344
-
345
- await it('utf8: E2 then 82 → \\ufffd\\ufffd', async () => {
346
- expect(testEnd('utf8', Buffer.of(0xE2), Buffer.of(0x82), '\uFFFD\uFFFD')).toBeTruthy();
347
- });
348
-
349
- await it('utf8: E2 then E2 → \\ufffd\\ufffd', async () => {
350
- expect(testEnd('utf8', Buffer.of(0xE2), Buffer.of(0xE2), '\uFFFD\uFFFD')).toBeTruthy();
351
- });
352
-
353
- await it('utf8: E2,82 then 61 → \\ufffd a', async () => {
354
- expect(testEnd('utf8', Buffer.of(0xE2, 0x82), Buffer.of(0x61), '\uFFFDa')).toBeTruthy();
355
- });
356
-
357
- await it('utf8: E2,82,AC then 61 → €a', async () => {
358
- expect(testEnd('utf8', Buffer.of(0xE2, 0x82, 0xAC), Buffer.of(0x61), '€a')).toBeTruthy();
359
- });
360
-
361
- // UTF-16LE end tests
362
- await it('utf16le: 3D then 61,00 → a', async () => {
363
- expect(testEnd('utf16le', Buffer.of(0x3D), Buffer.of(0x61, 0x00), 'a')).toBeTruthy();
364
- });
365
-
366
- await it('utf16le: 3D,D8 then empty → \\uD83D', async () => {
367
- expect(testEnd('utf16le', Buffer.of(0x3D, 0xD8), Buffer.of(), '\uD83D')).toBeTruthy();
368
- });
369
-
370
- await it('utf16le: 3D,D8 then 61,00 → \\uD83D a', async () => {
371
- expect(testEnd('utf16le', Buffer.of(0x3D, 0xD8), Buffer.of(0x61, 0x00), '\uD83Da')).toBeTruthy();
372
- });
373
-
374
- await it('utf16le: 3D,D8 then 4D,DC → \\uD83D\\uDC4D', async () => {
375
- expect(testEnd('utf16le', Buffer.of(0x3D, 0xD8), Buffer.of(0x4D, 0xDC), '\uD83D\uDC4D')).toBeTruthy();
376
- });
377
-
378
- await it('utf16le: 3D,D8,4D,DC then 61,00 → 👍a', async () => {
379
- expect(testEnd('utf16le', Buffer.of(0x3D, 0xD8, 0x4D, 0xDC), Buffer.of(0x61, 0x00), '👍a')).toBeTruthy();
380
- });
381
-
382
- // Base64 end tests
383
- await it('base64: 61 then empty → YQ==', async () => {
384
- expect(testEnd('base64', Buffer.of(0x61), Buffer.of(), 'YQ==')).toBeTruthy();
385
- });
386
-
387
- await it('base64: 61 then 61 → YQ==YQ==', async () => {
388
- expect(testEnd('base64', Buffer.of(0x61), Buffer.of(0x61), 'YQ==YQ==')).toBeTruthy();
389
- });
390
-
391
- await it('base64: 61,61 then empty → YWE=', async () => {
392
- expect(testEnd('base64', Buffer.of(0x61, 0x61), Buffer.of(), 'YWE=')).toBeTruthy();
393
- });
394
-
395
- await it('base64: 61,61,61 then empty → YWFh', async () => {
396
- expect(testEnd('base64', Buffer.of(0x61, 0x61, 0x61), Buffer.of(), 'YWFh')).toBeTruthy();
397
- });
398
-
399
- await it('base64: 61,61,61 then 61 → YWFhYQ==', async () => {
400
- expect(testEnd('base64', Buffer.of(0x61, 0x61, 0x61), Buffer.of(0x61), 'YWFhYQ==')).toBeTruthy();
401
- });
402
- });
403
-
404
- // ==================== byte-at-a-time fuzz ====================
405
-
406
- await describe('StringDecoder: byte-at-a-time consistency', async () => {
407
- const encodings = ['hex', 'utf8', 'utf16le', 'latin1', 'ascii'];
408
- const testStrings = ['Hello', 'asdf'];
409
-
410
- for (const encoding of encodings) {
411
- for (const str of testStrings) {
412
- await it(`${encoding}: byte-at-a-time matches toString for "${str}"`, async () => {
413
- const buf = Buffer.from(str);
414
- const expected = buf.toString(encoding as BufferEncoding);
415
-
416
- // Write one byte at a time
417
- const decoder = new StringDecoder(encoding as BufferEncoding);
418
- let result = '';
419
- for (let i = 0; i < buf.length; i++) {
420
- result += decoder.write(buf.subarray(i, i + 1));
421
- }
422
- result += decoder.end();
423
- expect(result).toBe(expected);
424
-
425
- // Write all at once
426
- const decoder2 = new StringDecoder(encoding as BufferEncoding);
427
- const result2 = decoder2.write(buf) + decoder2.end();
428
- expect(result2).toBe(expected);
429
- });
430
- }
431
- }
432
- });
433
- };
package/src/index.ts DELETED
@@ -1,501 +0,0 @@
1
- // Reference: Node.js lib/string_decoder.js
2
- // Reimplemented for GJS — handles incremental decoding of multi-byte character sequences
3
- // Uses function constructor (not ES6 class) for compatibility with legacy CJS patterns
4
- // that call StringDecoder.call(this, enc) (e.g., iconv-lite).
5
-
6
- import { normalizeEncoding, checkEncoding, base64Encode as bytesToBase64 } from '@gjsify/utils';
7
-
8
- function normalizeAndValidateEncoding(enc?: string): string {
9
- if (enc) checkEncoding(enc);
10
- return normalizeEncoding(enc);
11
- }
12
-
13
- /**
14
- * Decode a complete (non-streaming) chunk of UTF-8 bytes into a string,
15
- * using the W3C "maximal subpart" replacement algorithm (Unicode 3.9 D93b).
16
- *
17
- * This avoids relying on TextDecoder which may produce incorrect replacement
18
- * counts on older SpiderMonkey versions (e.g., GJS 1.80 / SpiderMonkey 115).
19
- *
20
- * Valid UTF-8 byte ranges per position:
21
- * 1-byte: 00-7F
22
- * 2-byte: C2-DF, 80-BF
23
- * 3-byte: E0 A0-BF 80-BF | E1-EC 80-BF 80-BF | ED 80-9F 80-BF | EE-EF 80-BF 80-BF
24
- * 4-byte: F0 90-BF 80-BF 80-BF | F1-F3 80-BF 80-BF 80-BF | F4 80-8F 80-BF 80-BF
25
- */
26
- function utf8DecodeMaximalSubpart(bytes: Uint8Array, start: number, end: number): string {
27
- let result = '';
28
- let i = start;
29
-
30
- while (i < end) {
31
- const b0 = bytes[i];
32
-
33
- // 1-byte (ASCII): 00-7F
34
- if (b0 <= 0x7F) {
35
- result += String.fromCharCode(b0);
36
- i++;
37
- continue;
38
- }
39
-
40
- // 2-byte: C2-DF, 80-BF
41
- if (b0 >= 0xC2 && b0 <= 0xDF) {
42
- if (i + 1 < end && bytes[i + 1] >= 0x80 && bytes[i + 1] <= 0xBF) {
43
- result += String.fromCharCode(((b0 & 0x1F) << 6) | (bytes[i + 1] & 0x3F));
44
- i += 2;
45
- } else {
46
- // Maximal subpart: just b0
47
- result += '\ufffd';
48
- i++;
49
- }
50
- continue;
51
- }
52
-
53
- // 3-byte sequences
54
- if (b0 >= 0xE0 && b0 <= 0xEF) {
55
- // Determine valid range for second byte
56
- let lo2: number, hi2: number;
57
- if (b0 === 0xE0) { lo2 = 0xA0; hi2 = 0xBF; }
58
- else if (b0 === 0xED) { lo2 = 0x80; hi2 = 0x9F; }
59
- else { lo2 = 0x80; hi2 = 0xBF; }
60
-
61
- if (i + 1 >= end) {
62
- // Only lead byte available — maximal subpart is b0
63
- result += '\ufffd';
64
- i++;
65
- continue;
66
- }
67
- const b1 = bytes[i + 1];
68
- if (b1 < lo2 || b1 > hi2) {
69
- // Second byte out of range — maximal subpart is just b0
70
- result += '\ufffd';
71
- i++;
72
- continue;
73
- }
74
- if (i + 2 >= end) {
75
- // Two valid bytes but third missing — maximal subpart is b0 b1
76
- result += '\ufffd';
77
- i += 2;
78
- continue;
79
- }
80
- const b2 = bytes[i + 2];
81
- if (b2 < 0x80 || b2 > 0xBF) {
82
- // Third byte invalid — maximal subpart is b0 b1
83
- result += '\ufffd';
84
- i += 2;
85
- continue;
86
- }
87
- // Valid 3-byte sequence
88
- const cp = ((b0 & 0x0F) << 12) | ((b1 & 0x3F) << 6) | (b2 & 0x3F);
89
- result += String.fromCharCode(cp);
90
- i += 3;
91
- continue;
92
- }
93
-
94
- // 4-byte sequences
95
- if (b0 >= 0xF0 && b0 <= 0xF4) {
96
- // Determine valid range for second byte
97
- let lo2: number, hi2: number;
98
- if (b0 === 0xF0) { lo2 = 0x90; hi2 = 0xBF; }
99
- else if (b0 === 0xF4) { lo2 = 0x80; hi2 = 0x8F; }
100
- else { lo2 = 0x80; hi2 = 0xBF; }
101
-
102
- if (i + 1 >= end) {
103
- result += '\ufffd';
104
- i++;
105
- continue;
106
- }
107
- const b1 = bytes[i + 1];
108
- if (b1 < lo2 || b1 > hi2) {
109
- // Second byte out of range — maximal subpart is just b0
110
- result += '\ufffd';
111
- i++;
112
- continue;
113
- }
114
- if (i + 2 >= end) {
115
- // Two valid bytes but incomplete — maximal subpart is b0 b1
116
- result += '\ufffd';
117
- i += 2;
118
- continue;
119
- }
120
- const b2 = bytes[i + 2];
121
- if (b2 < 0x80 || b2 > 0xBF) {
122
- // Third byte invalid — maximal subpart is b0 b1
123
- result += '\ufffd';
124
- i += 2;
125
- continue;
126
- }
127
- if (i + 3 >= end) {
128
- // Three valid bytes but incomplete — maximal subpart is b0 b1 b2
129
- result += '\ufffd';
130
- i += 3;
131
- continue;
132
- }
133
- const b3 = bytes[i + 3];
134
- if (b3 < 0x80 || b3 > 0xBF) {
135
- // Fourth byte invalid — maximal subpart is b0 b1 b2
136
- result += '\ufffd';
137
- i += 3;
138
- continue;
139
- }
140
- // Valid 4-byte sequence — produces a surrogate pair
141
- const cp = ((b0 & 0x07) << 18) | ((b1 & 0x3F) << 12) | ((b2 & 0x3F) << 6) | (b3 & 0x3F);
142
- // Encode as surrogate pair
143
- result += String.fromCharCode(
144
- 0xD800 + ((cp - 0x10000) >> 10),
145
- 0xDC00 + ((cp - 0x10000) & 0x3FF)
146
- );
147
- i += 4;
148
- continue;
149
- }
150
-
151
- // Invalid lead byte (80-BF = orphan continuation, C0-C1 = overlong, F5-FF = too high)
152
- result += '\ufffd';
153
- i++;
154
- }
155
-
156
- return result;
157
- }
158
-
159
- /**
160
- * Returns the expected total byte length of a UTF-8 character given its first byte,
161
- * and validates the lead byte is in a valid range.
162
- * Returns 0 for invalid lead bytes.
163
- */
164
- function utf8CharLength(byte: number): number {
165
- if ((byte & 0x80) === 0) return 1;
166
- if (byte >= 0xC2 && byte <= 0xDF) return 2;
167
- if (byte >= 0xE0 && byte <= 0xEF) return 3;
168
- if (byte >= 0xF0 && byte <= 0xF4) return 4;
169
- return 0; // invalid leading byte (C0-C1 overlong, F5+ too high, 80-BF continuation)
170
- }
171
-
172
- /**
173
- * Check if a continuation byte is valid for its position in a multi-byte sequence.
174
- * Returns true if the byte is in the expected range for that position.
175
- */
176
- function isValidContinuation(leadByte: number, charLen: number, position: number, byte: number): boolean {
177
- if (position === 1) {
178
- // Second byte has restricted ranges for some lead bytes
179
- if (charLen === 3) {
180
- if (leadByte === 0xE0) return byte >= 0xA0 && byte <= 0xBF;
181
- if (leadByte === 0xED) return byte >= 0x80 && byte <= 0x9F;
182
- return byte >= 0x80 && byte <= 0xBF;
183
- }
184
- if (charLen === 4) {
185
- if (leadByte === 0xF0) return byte >= 0x90 && byte <= 0xBF;
186
- if (leadByte === 0xF4) return byte >= 0x80 && byte <= 0x8F;
187
- return byte >= 0x80 && byte <= 0xBF;
188
- }
189
- }
190
- // All other positions: standard continuation range
191
- return byte >= 0x80 && byte <= 0xBF;
192
- }
193
-
194
- interface StringDecoderInstance {
195
- readonly encoding: string;
196
- write(buf: Uint8Array): string;
197
- end(buf?: Uint8Array): string;
198
- }
199
-
200
- interface StringDecoderConstructor {
201
- new (encoding?: string): StringDecoderInstance;
202
- (this: StringDecoderInstance, encoding?: string): void;
203
- prototype: StringDecoderInstance;
204
- }
205
-
206
- /**
207
- * StringDecoder provides an interface for efficiently decoding Buffer data
208
- * into strings while preserving multi-byte characters that are split across
209
- * Buffer boundaries.
210
- *
211
- * Implemented as a function constructor (not ES6 class) for compatibility
212
- * with legacy CJS patterns that use StringDecoder.call(this, enc).
213
- */
214
- const StringDecoder = function StringDecoder(this: any, encoding?: string) {
215
- this.encoding = normalizeAndValidateEncoding(encoding);
216
- this._lastNeed = 0;
217
- this._lastTotal = 0;
218
- this._lastLeadByte = 0;
219
-
220
- if (this.encoding === 'utf8') {
221
- this._lastChar = new Uint8Array(4);
222
- } else if (this.encoding === 'utf16le') {
223
- this._lastChar = new Uint8Array(4);
224
- } else if (this.encoding === 'base64') {
225
- this._lastChar = new Uint8Array(3);
226
- } else {
227
- this._lastChar = new Uint8Array(0);
228
- }
229
- } as unknown as StringDecoderConstructor;
230
-
231
- StringDecoder.prototype.write = function write(buf: Uint8Array): string {
232
- if (buf.length === 0) return '';
233
-
234
- switch (this.encoding) {
235
- case 'utf8':
236
- return writeUtf8(this, buf);
237
- case 'utf16le':
238
- return writeUtf16le(this, buf);
239
- case 'base64':
240
- return writeBase64(this, buf);
241
- case 'ascii':
242
- return decodeAscii(buf);
243
- case 'latin1':
244
- return decodeLatin1(buf);
245
- case 'hex':
246
- return decodeHex(buf);
247
- default:
248
- return decodeAscii(buf);
249
- }
250
- };
251
-
252
- StringDecoder.prototype.end = function end(buf?: Uint8Array): string {
253
- let result = '';
254
- if (buf && buf.length > 0) {
255
- result = this.write(buf);
256
- }
257
-
258
- if (this.encoding === 'utf8' && this._lastNeed > 0) {
259
- result += '\ufffd';
260
- this._lastNeed = 0;
261
- this._lastTotal = 0;
262
- } else if (this.encoding === 'utf16le' && this._lastNeed > 0) {
263
- const stored = this._lastTotal - this._lastNeed;
264
- for (let i = 0; i + 1 < stored; i += 2) {
265
- result += String.fromCharCode(this._lastChar[i] | (this._lastChar[i + 1] << 8));
266
- }
267
- this._lastNeed = 0;
268
- this._lastTotal = 0;
269
- } else if (this.encoding === 'base64' && this._lastNeed > 0) {
270
- const remaining = this._lastChar.subarray(0, this._lastTotal - this._lastNeed);
271
- result += bytesToBase64(remaining);
272
- this._lastNeed = 0;
273
- this._lastTotal = 0;
274
- }
275
-
276
- return result;
277
- };
278
-
279
- function writeUtf8(self: any, buf: Uint8Array): string {
280
- let i = 0;
281
- let result = '';
282
-
283
- if (self._lastNeed > 0) {
284
- while (i < buf.length && self._lastNeed > 0) {
285
- const byte = buf[i];
286
- const position = self._lastTotal - self._lastNeed;
287
- if (isValidContinuation(self._lastLeadByte, self._lastTotal, position, byte)) {
288
- self._lastChar[position] = byte;
289
- self._lastNeed--;
290
- i++;
291
- } else {
292
- result += '\ufffd';
293
- self._lastNeed = 0;
294
- self._lastTotal = 0;
295
- self._lastLeadByte = 0;
296
- break;
297
- }
298
- }
299
-
300
- if (self._lastNeed === 0 && self._lastTotal > 0) {
301
- result += utf8DecodeMaximalSubpart(self._lastChar, 0, self._lastTotal);
302
- self._lastTotal = 0;
303
- self._lastLeadByte = 0;
304
- }
305
-
306
- if (self._lastNeed > 0) {
307
- return result;
308
- }
309
- }
310
-
311
- let completeEnd = buf.length;
312
- for (let j = 0; j < Math.min(4, buf.length - i); j++) {
313
- const idx = buf.length - 1 - j;
314
- if (idx < i) break;
315
- const byte = buf[idx];
316
- if ((byte & 0xC0) !== 0x80) {
317
- const charLen = utf8CharLength(byte);
318
- if (charLen > 0 && byte >= 0x80) {
319
- const available = buf.length - idx;
320
- if (available < charLen) {
321
- let allValid = true;
322
- for (let k = 1; k < available; k++) {
323
- if (!isValidContinuation(byte, charLen, k, buf[idx + k])) {
324
- allValid = false;
325
- break;
326
- }
327
- }
328
- if (allValid) {
329
- completeEnd = idx;
330
- for (let k = 0; k < available; k++) {
331
- self._lastChar[k] = buf[idx + k];
332
- }
333
- self._lastNeed = charLen - available;
334
- self._lastTotal = charLen;
335
- self._lastLeadByte = byte;
336
- }
337
- }
338
- }
339
- break;
340
- }
341
- }
342
-
343
- if (completeEnd > i) {
344
- result += utf8DecodeMaximalSubpart(buf, i, completeEnd);
345
- }
346
-
347
- return result;
348
- }
349
-
350
- function writeUtf16le(self: any, buf: Uint8Array): string {
351
- let result = '';
352
- let i = 0;
353
-
354
- if (self._lastNeed > 0) {
355
- const offset = self._lastTotal - self._lastNeed;
356
- const needed = Math.min(self._lastNeed, buf.length);
357
- for (let j = 0; j < needed; j++) {
358
- self._lastChar[offset + j] = buf[j];
359
- }
360
- self._lastNeed -= needed;
361
- i = needed;
362
-
363
- if (self._lastNeed > 0) return '';
364
-
365
- const stored = self._lastTotal;
366
- let j = 0;
367
- while (j + 1 < stored) {
368
- const code = self._lastChar[j] | (self._lastChar[j + 1] << 8);
369
- j += 2;
370
- if (code >= 0xD800 && code <= 0xDBFF) {
371
- if (j + 1 < stored) {
372
- const nextCode = self._lastChar[j] | (self._lastChar[j + 1] << 8);
373
- if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {
374
- result += String.fromCharCode(code, nextCode);
375
- j += 2;
376
- continue;
377
- }
378
- }
379
- if (i + 1 < buf.length) {
380
- const nextCode = buf[i] | (buf[i + 1] << 8);
381
- if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {
382
- result += String.fromCharCode(code, nextCode);
383
- i += 2;
384
- continue;
385
- }
386
- } else if (i >= buf.length) {
387
- self._lastChar[0] = self._lastChar[j - 2];
388
- self._lastChar[1] = self._lastChar[j - 1];
389
- self._lastNeed = 2;
390
- self._lastTotal = 4;
391
- return result;
392
- }
393
- }
394
- result += String.fromCharCode(code);
395
- }
396
- self._lastTotal = 0;
397
- }
398
-
399
- while (i + 1 < buf.length) {
400
- const code = buf[i] | (buf[i + 1] << 8);
401
- i += 2;
402
-
403
- if (code >= 0xD800 && code <= 0xDBFF) {
404
- if (i + 1 < buf.length) {
405
- const nextCode = buf[i] | (buf[i + 1] << 8);
406
- if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {
407
- result += String.fromCharCode(code, nextCode);
408
- i += 2;
409
- continue;
410
- }
411
- } else if (i < buf.length) {
412
- result += String.fromCharCode(code);
413
- self._lastChar[0] = buf[i];
414
- self._lastNeed = 1;
415
- self._lastTotal = 2;
416
- return result;
417
- } else {
418
- self._lastChar[0] = buf[i - 2];
419
- self._lastChar[1] = buf[i - 1];
420
- self._lastNeed = 2;
421
- self._lastTotal = 4;
422
- return result;
423
- }
424
- }
425
- result += String.fromCharCode(code);
426
- }
427
-
428
- if (i < buf.length) {
429
- self._lastChar[0] = buf[i];
430
- self._lastNeed = 1;
431
- self._lastTotal = 2;
432
- }
433
-
434
- return result;
435
- }
436
-
437
- function writeBase64(self: any, buf: Uint8Array): string {
438
- let start = 0;
439
-
440
- if (self._lastNeed > 0) {
441
- const needed = Math.min(self._lastNeed, buf.length);
442
- for (let i = 0; i < needed; i++) {
443
- self._lastChar[self._lastTotal - self._lastNeed + i] = buf[i];
444
- self._lastNeed--;
445
- }
446
- start = needed;
447
- if (self._lastNeed > 0) return '';
448
- }
449
-
450
- const remaining = buf.length - start;
451
- const complete = remaining - (remaining % 3);
452
- let result = '';
453
-
454
- if (self._lastTotal > 0 && self._lastNeed === 0) {
455
- result += bytesToBase64(self._lastChar.subarray(0, self._lastTotal));
456
- self._lastTotal = 0;
457
- }
458
-
459
- if (complete > 0) {
460
- result += bytesToBase64(buf.subarray(start, start + complete));
461
- }
462
-
463
- const leftover = remaining - complete;
464
- if (leftover > 0) {
465
- for (let i = 0; i < leftover; i++) {
466
- self._lastChar[i] = buf[start + complete + i];
467
- }
468
- self._lastNeed = 3 - leftover;
469
- self._lastTotal = 3;
470
- }
471
-
472
- return result;
473
- }
474
-
475
- function decodeAscii(buf: Uint8Array): string {
476
- let result = '';
477
- for (let i = 0; i < buf.length; i++) {
478
- result += String.fromCharCode(buf[i] & 0x7f);
479
- }
480
- return result;
481
- }
482
-
483
- function decodeLatin1(buf: Uint8Array): string {
484
- let result = '';
485
- for (let i = 0; i < buf.length; i++) {
486
- result += String.fromCharCode(buf[i]);
487
- }
488
- return result;
489
- }
490
-
491
- function decodeHex(buf: Uint8Array): string {
492
- let result = '';
493
- for (let i = 0; i < buf.length; i++) {
494
- result += buf[i].toString(16).padStart(2, '0');
495
- }
496
- return result;
497
- }
498
-
499
- export { StringDecoder };
500
-
501
- export default { StringDecoder };
package/src/test.mts DELETED
@@ -1,6 +0,0 @@
1
-
2
- import { run } from '@gjsify/unit';
3
-
4
- import stringDecoderTestSuite from './index.spec.js';
5
-
6
- run({ stringDecoderTestSuite });
package/tsconfig.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "ESNext",
4
- "target": "ESNext",
5
- "moduleResolution": "bundler",
6
- "types": [
7
- "node"
8
- ],
9
- "experimentalDecorators": true,
10
- "emitDeclarationOnly": true,
11
- "declaration": true,
12
- "allowImportingTsExtensions": true,
13
- "outDir": "lib",
14
- "rootDir": "src",
15
- "declarationDir": "lib/types",
16
- "composite": true,
17
- "skipLibCheck": true,
18
- "allowJs": true,
19
- "checkJs": false,
20
- "strict": false
21
- },
22
- "include": [
23
- "src/**/*.ts"
24
- ],
25
- "exclude": [
26
- "src/test.ts",
27
- "src/test.mts"
28
- ]
29
- }
@@ -1 +0,0 @@
1
- {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/typescript/lib/lib.es2025.d.ts","../../../node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/typescript/lib/lib.es2025.collection.d.ts","../../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/typescript/lib/lib.es2025.intl.d.ts","../../../node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../../node_modules/typescript/lib/lib.es2025.promise.d.ts","../../../node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/typescript/lib/lib.esnext.date.d.ts","../../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../../node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.esnext.full.d.ts","../../../node_modules/@girs/gjs/gettext.d.ts","../../../node_modules/@girs/gobject-2.0/gobject-2.0-ambient.d.ts","../../../node_modules/@girs/gobject-2.0/gobject-2.0-import.d.ts","../../../node_modules/@girs/glib-2.0/glib-2.0-ambient.d.ts","../../../node_modules/@girs/glib-2.0/glib-2.0-import.d.ts","../../../node_modules/@girs/glib-2.0/glib-2.0.d.ts","../../../node_modules/@girs/glib-2.0/index.d.ts","../../../node_modules/@girs/gobject-2.0/gobject-2.0.d.ts","../../../node_modules/@girs/gobject-2.0/index.d.ts","../../../node_modules/@girs/gjs/system.d.ts","../../../node_modules/@girs/cairo-1.0/cairo-1.0-ambient.d.ts","../../../node_modules/@girs/cairo-1.0/cairo-1.0-import.d.ts","../../../node_modules/@girs/cairo-1.0/cairo-1.0.d.ts","../../../node_modules/@girs/cairo-1.0/index.d.ts","../../../node_modules/@girs/gjs/cairo.d.ts","../../../node_modules/@girs/gjs/console.d.ts","../../../node_modules/@girs/gjs/gi.d.ts","../../../node_modules/@girs/gjs/gjs-ambient.d.ts","../../../node_modules/@girs/gjs/gjs.d.ts","../../../node_modules/@girs/gjs/index.d.ts","../../gjs/unit/lib/types/spy.d.ts","../../gjs/unit/lib/types/index.d.ts","./src/index.spec.ts","../../gjs/utils/lib/types/callable.d.ts","../../gjs/utils/lib/types/base64.d.ts","../../gjs/utils/lib/types/byte-array.d.ts","../../gjs/utils/lib/types/cli.d.ts","../../gjs/utils/lib/types/defer.d.ts","../../gjs/utils/lib/types/encoding.d.ts","../../gjs/utils/lib/types/globals.d.ts","../../gjs/utils/lib/types/error.d.ts","../../gjs/utils/lib/types/file.d.ts","../../gjs/utils/lib/types/fs.d.ts","../../../node_modules/@girs/gio-2.0/gio-2.0-ambient.d.ts","../../../node_modules/@girs/gio-2.0/gio-2.0-import.d.ts","../../../node_modules/@girs/gmodule-2.0/gmodule-2.0-ambient.d.ts","../../../node_modules/@girs/gmodule-2.0/gmodule-2.0-import.d.ts","../../../node_modules/@girs/gmodule-2.0/gmodule-2.0.d.ts","../../../node_modules/@girs/gmodule-2.0/index.d.ts","../../../node_modules/@girs/gio-2.0/gio-2.0.d.ts","../../../node_modules/@girs/gio-2.0/index.d.ts","../../gjs/utils/lib/types/gio.d.ts","../../gjs/utils/lib/types/gio-errors.d.ts","../../gjs/utils/lib/types/message.d.ts","../../gjs/utils/lib/types/microtask.d.ts","../../gjs/utils/lib/types/next-tick.d.ts","../../gjs/utils/lib/types/path.d.ts","../../gjs/utils/lib/types/structured-clone.d.ts","../../gjs/utils/lib/types/main-loop.d.ts","../../gjs/utils/lib/types/index.d.ts","./src/index.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/quic.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/test/reporters.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/util/types.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileIdsList":[[104,107,111,147,210,213,218,222,225,227,228,229,242],[107,111,147,210,213,218,222,225,227,228,229,242],[100,102,111,113,147,210,213,218,222,225,227,228,229,242],[105,106,111,147,210,213,218,222,225,227,228,229,242],[111,127,134,147,210,213,218,222,225,227,228,229,242],[111,134,147,210,213,218,222,225,227,228,229,242],[100,102,111,113,132,147,210,213,218,222,225,227,228,229,242],[111,128,133,147,210,213,218,222,225,227,228,229,242],[102,107,111,147,210,213,218,222,225,227,228,229,242],[111,147,210,213,218,222,225,227,228,229,242],[94,103,108,109,110,147,210,213,218,222,225,227,228,229,242],[94,100,102,103,108,111,147,210,213,218,222,225,227,228,229,242],[111,112,147,210,213,218,222,225,227,228,229,242],[102,111,147,210,213,218,222,225,227,228,229,242],[97,100,111,147,210,213,218,222,225,227,228,229,242],[100,111,147,210,213,218,222,225,227,228,229,242],[102,111,113,147,210,213,218,222,225,227,228,229,242],[98,99,111,147,210,213,218,222,225,227,228,229,242],[111,129,132,147,210,213,218,222,225,227,228,229,242],[111,132,147,210,213,218,222,225,227,228,229,242],[111,130,131,147,210,213,218,222,225,227,228,229,242],[95,102,111,147,210,213,218,222,225,227,228,229,242],[100,111,113,147,210,213,218,222,225,227,228,229,242],[96,101,111,147,210,213,218,222,225,227,228,229,242],[111,147,207,208,210,213,218,222,225,227,228,229,242],[111,147,209,210,213,218,222,225,227,228,229,242],[111,210,213,218,222,225,227,228,229,242],[111,147,210,213,218,222,225,227,228,229,242,250],[111,147,210,211,213,216,218,221,222,225,227,228,229,231,242,247,259],[111,147,210,211,212,213,218,221,222,225,227,228,229,242],[111,147,210,213,218,222,225,227,228,229,242,260],[111,147,210,213,214,215,218,222,225,227,228,229,233,242],[111,147,210,213,215,218,222,225,227,228,229,242,247,256],[111,147,210,213,216,218,221,222,225,227,228,229,231,242],[111,147,209,210,213,217,218,222,225,227,228,229,242],[111,147,210,213,218,219,222,225,227,228,229,242],[111,147,210,213,218,220,221,222,225,227,228,229,242],[111,147,209,210,213,218,221,222,225,227,228,229,242],[111,147,210,213,218,221,222,223,225,227,228,229,242,247,259],[111,147,210,213,218,221,222,223,225,227,228,229,242,247,250],[111,147,197,210,213,218,221,222,224,225,227,228,229,231,242,247,259],[111,147,210,213,218,221,222,224,225,227,228,229,231,242,247,256,259],[111,147,210,213,218,222,224,225,226,227,228,229,242,247,256,259],[111,145,146,147,148,149,150,151,152,153,154,155,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266],[111,147,210,213,218,221,222,225,227,228,229,242],[111,147,210,213,218,222,225,227,229,242],[111,147,210,213,218,222,225,227,228,229,230,242,259],[111,147,210,213,218,221,222,225,227,228,229,231,242,247],[111,147,210,213,218,222,225,227,228,229,233,242],[111,147,210,213,218,222,225,227,228,229,234,242],[111,147,210,213,218,221,222,225,227,228,229,237,242],[111,116,147,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266],[111,147,210,213,218,222,225,227,228,229,239,242],[111,147,210,213,218,222,225,227,228,229,240,242],[111,147,210,213,215,218,222,225,227,228,229,231,242,250],[111,147,210,213,218,221,222,225,227,228,229,242,243],[111,147,210,213,218,222,225,227,228,229,242,244,260,263],[111,147,210,213,218,221,222,225,227,228,229,242,247,249,250],[111,147,210,213,218,222,225,227,228,229,242,248,250],[111,147,210,213,218,222,225,227,228,229,242,250,260],[111,116,147,210,213,218,222,225,227,228,229,242,251],[111,147,207,210,213,218,222,225,227,228,229,242,247,253,259],[111,147,210,213,218,222,225,227,228,229,242,247,252],[111,147,210,213,218,221,222,225,227,228,229,242,254,255],[111,147,210,213,218,222,225,227,228,229,242,254,255],[111,147,210,213,215,218,222,225,227,228,229,231,242,247,256],[111,147,210,213,218,222,225,227,228,229,242,257],[111,147,210,213,218,222,225,227,228,229,231,242,258],[111,147,210,213,218,222,224,225,227,228,229,240,242,259],[111,147,210,213,218,222,225,227,228,229,242,260,261],[111,147,210,213,215,218,222,225,227,228,229,242,261],[111,147,210,213,218,222,225,227,228,229,242,247,262],[111,147,210,213,218,222,225,227,228,229,230,242,263],[111,147,210,213,218,222,225,227,228,229,242,264],[111,147,210,213,215,218,222,225,227,228,229,242],[111,147,197,210,213,218,222,225,227,228,229,242],[111,147,210,213,218,222,225,227,228,229,242,259],[111,147,210,213,218,222,225,227,228,229,242,265],[111,147,210,213,218,222,225,227,228,229,237,242],[111,147,210,213,218,222,225,227,228,229,242,255],[111,147,197,210,213,218,221,222,223,225,227,228,229,237,242,247,250,259,262,263,265],[111,147,210,213,218,222,225,227,228,229,242,247,266],[111,147,162,165,168,169,210,213,218,222,225,227,228,229,242,259],[111,147,165,210,213,218,222,225,227,228,229,242,247,259],[111,147,165,169,210,213,218,222,225,227,228,229,242,259],[111,147,210,213,218,222,225,227,228,229,242,247],[111,147,159,210,213,218,222,225,227,228,229,242],[111,147,163,210,213,218,222,225,227,228,229,242],[111,147,161,162,165,210,213,218,222,225,227,228,229,242,259],[111,147,210,213,218,222,225,227,228,229,231,242,256],[111,147,210,213,218,222,225,227,228,229,242,267],[111,147,159,210,213,218,222,225,227,228,229,242,267],[111,147,161,165,210,213,218,222,225,227,228,229,231,242,259],[111,147,156,157,158,160,164,210,213,218,221,222,225,227,228,229,242,247,259],[111,147,165,174,182,210,213,218,222,225,227,228,229,242],[111,147,157,163,210,213,218,222,225,227,228,229,242],[111,147,165,191,192,210,213,218,222,225,227,228,229,242],[111,147,157,160,165,210,213,218,222,225,227,228,229,242,250,259,267],[111,147,165,210,213,218,222,225,227,228,229,242],[111,147,161,165,210,213,218,222,225,227,228,229,242,259],[111,147,156,210,213,218,222,225,227,228,229,242],[111,147,159,160,161,163,164,165,166,167,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,192,193,194,195,196,210,213,218,222,225,227,228,229,242],[111,147,165,184,187,210,213,218,222,225,227,228,229,242],[111,147,165,174,175,176,210,213,218,222,225,227,228,229,242],[111,147,163,165,175,177,210,213,218,222,225,227,228,229,242],[111,147,164,210,213,218,222,225,227,228,229,242],[111,147,157,159,165,210,213,218,222,225,227,228,229,242],[111,147,165,169,175,177,210,213,218,222,225,227,228,229,242],[111,147,169,210,213,218,222,225,227,228,229,242],[111,147,163,165,168,210,213,218,222,225,227,228,229,242,259],[111,147,157,161,165,174,210,213,218,222,225,227,228,229,242],[111,147,165,184,210,213,218,222,225,227,228,229,242],[111,147,177,210,213,218,222,225,227,228,229,242],[111,147,159,165,191,210,213,218,222,225,227,228,229,242,250,265,267],[111,113,114,147,210,213,218,222,225,227,228,229,242],[111,117,118,119,120,121,122,123,124,125,126,135,136,137,138,139,140,141,142,147,210,213,218,222,225,227,228,229,242],[111,115,116,147,210,213,218,222,225,227,228,229,242,251],[111,143,147,210,213,218,222,225,227,228,229,242]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"ef4a897cd2a3f91000c10264e400b3667c7e51e1b7365f03b62e8081dc53bde6","impliedFormat":1},{"version":"4936d25ba31379ce4e3d4289f6c0ea936510e111f823ec377015de6ba7047adf","impliedFormat":99},{"version":"1ffa53902f87f288dbaebc1dd9c754a0f0f1c4af2733fc7e173022209e7d4ef8","impliedFormat":99},{"version":"d7801240a49920afb07e1a83597b05a26e5e3758163a70448ba14df3f7ab5286","affectsGlobalScope":true,"impliedFormat":99},{"version":"2aed5de224f5094280addfaf59e82b362b3680083917cfa7f066c4b89cc58b74","impliedFormat":99},{"version":"86ecf772256f9205f72c768dc9b47d27b4254a64a1dd94f61c8c2f29219c24e1","affectsGlobalScope":true,"impliedFormat":99},{"version":"f62bcd0d626998f4b14a5e4bf6c65abf4dfeaa042243dd57e4e92125fd602ed6","impliedFormat":99},{"version":"9462f849ff8d50a61639f09a8e369f7584c623a8cbcf9d99c6b81aacbca91fd2","impliedFormat":99},{"version":"6da820ee582c593971e71a933dbf54d72b47984bb11f888d225c7a8476e74790","impliedFormat":99},{"version":"048a292f9fb06d0aab8c52cabd81bc820c70d68500530afe1867c08e431d4e46","impliedFormat":99},{"version":"e2f9944677cba1c7f636dde67d7ca77982da3b52134c617bd86d3a4d8607b498","impliedFormat":99},{"version":"ceaf67c6cb2df4f38f466bd3709a72199d1d98377dcf215bf760b2a383fc73a8","impliedFormat":99},{"version":"c5f89dedf8e238012d580d16ee2286bf0681f1389f14d419c87711070430995c","affectsGlobalScope":true,"impliedFormat":99},{"version":"dc996a90baa100126e6014b2f55022930e1a44621ec68eb163f322714b7596bc","impliedFormat":99},{"version":"cdd5245a59183386c7b465ad56e2353a0a1b49c32733520ec5c0eeb718781012","impliedFormat":99},{"version":"35c6737b37a2c92e67a14ba7692f3216df6c140c28133835768f7c66cb15fa88","impliedFormat":99},{"version":"7b607f4711c496c7c4f57abddfc7b9912059e1f264417ff8f4280b65f756bf4d","impliedFormat":99},{"version":"17122ddf1e2ff9f0538a06af6edc8d2666d7e1a428239e86358afc09ac7a8779","impliedFormat":99},{"version":"2cc6a5c34041442caa16aff0686d41595296248c7c33bfac5b94cd4fe8ae20de","impliedFormat":99},{"version":"8384e3ab082eecd9d0faa07ddf7e9ff3879bfac60216e47328f799600e47ea80","affectsGlobalScope":true,"impliedFormat":99},{"version":"715e7c015d2f3f4de0da107d9be2db02b52cea3d2d446ad11d2e732848d8e3e7","impliedFormat":99},"cda120f78df4c624c7fb1bd8e17343a39bfbede803f38312fb8e51fa818e1a7a","d9e135cc1dcf9f798edb9665b777dcad812d980a467b6ed11ce1d1bb9f017176",{"version":"ae4912d62526ab851fbfcd80de45d045eb19b15dc35e48b0adea0596073854e7","signature":"2909b35b7b2e4ed55ef3e6c5dc6db7242df91f04fb7dc5688253471d69d2a6dc"},"a11b93fafafcf86fbc0e6c5442ec6f1ede06b32cba6382e01d0a5cf3667b1e0d","004cd7c170c88793a62f0b831a52c8bec5835581048d81ec483105bb6fb569c8","55aac1cafba7e50f99fb9e8628a7f634e8354534e96ea8585821215c87de20be","f88f71f98c5b98896efe89d3a38dc6ec813b7e08d168f1006c4973839d77ca08","b76aa9f47943110ec585bb2b743aecb6f000377700923632f0db301482bdd73c","af1988260c49b37553045ea830586a7aeb8e442f20579ee17b5a2ac26141ad6c","bcd5f304d453dd40284c9645b5de54e0d8c8df0f3d80f53d664d3f99782d0ef5","a7298076563ec3132348662dacd7512b67a8564714460cf092a0211bcca5ee20","c99b7291b92920c8990726218d15eb170e32f6d74c63b7a020f0812f8546d288","1981a715841b053d196bd2fa7094a40e443550be04387c5bd61bd987c862a8c1",{"version":"1a7eec8977d21e8bf216ea62b836bdda1768c2a49ee689e5e09fb2f56a7837e4","impliedFormat":99},{"version":"8deb0c1eae578bb83a0056727ddec6be752d015acebfdd90f53797f8a035e57d","affectsGlobalScope":true,"impliedFormat":99},{"version":"d0b90b2c22bda9b6a7dabfb505a7fd3896e0267ab791d63a4a37098d0829e1b0","impliedFormat":99},{"version":"d26efa37b7cbdcc391dc201683de609900869d285213abf1dcbfb5275427142f","affectsGlobalScope":true,"impliedFormat":99},{"version":"0fe0f52d9ee15bf4fbeef129a5841a706720641554be2220df52c994f343a2f1","impliedFormat":99},{"version":"586cc6c492134b4680582124d2cd7d20efe0993917871647e0000dbf670bc0da","impliedFormat":99},{"version":"eaac6969d2a0d853a8870b9ba9591b429b80f99308cc97c3fe223b54bfc4127f","impliedFormat":99},{"version":"4b8b7197750fcbfe01b0c3b0e42a18367763e07eb937e0a278a27c69489a2575","impliedFormat":99},"2b9a95c45751bab93ad8f47330f6e9ca44fe49484c34678f186994e92c539819","d99f0729ec70cb1c9f9a7e6352033a73dc082bf4b51ee2c2c1a78a19072af511","49243f7ff940e6fa2bb1064e9db8579284331ebfdbbc40afa4c5579c11daed12","e13cb0a1ad0c178ffd4c18d55e4928100f372b9676636f5ae7d60e1ff815a256","ca44c014d4c7b60f6f7c547055de18485d94714fb9012de67c2220449c3f4afc","0f633f56c3e62663502f33a45c9e05f06c638e00f949bbaa3efcb6623af1f910","fcaba16b3b0bf6471c328fce53f8b99b0f909dfd251dc7ab0fe29dbdbcc01136","3978e1a4e65d355befa56b48fece71e9cee3985f568ad88de880a9ebc336b03a","0b6d588d7c2fa5b9a5b28cecffd371b63f5f730c9119120d19f8027d92ac7cfa",{"version":"887cf99f1fede383071db62420c2f9c225d2a292bb1c5600fcca1f9f4f021576","signature":"20f679813e975042051c6e863d963806983dda4d847a2a0740bd85d4ee771ef2"},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"10deca769dfed888051b1808d6746f8883a490a707f8bdf9367079146987d6d0","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[116,144],"options":{"allowImportingTsExtensions":true,"allowJs":true,"checkJs":false,"composite":true,"declaration":true,"declarationDir":"./lib/types","emitDeclarationOnly":true,"experimentalDecorators":true,"module":99,"outDir":"./lib","rootDir":"./src","skipLibCheck":true,"strict":false,"target":99},"referencedMap":[[104,1],[105,2],[106,3],[107,4],[127,5],[128,6],[133,7],[134,8],[108,9],[109,10],[94,10],[110,10],[111,11],[112,12],[113,13],[103,14],[97,15],[98,16],[99,17],[100,18],[129,19],[130,20],[131,3],[132,21],[95,22],[96,14],[101,23],[102,24],[207,25],[208,25],[209,26],[147,27],[210,28],[211,29],[212,30],[145,10],[213,31],[214,32],[215,33],[216,34],[217,35],[218,36],[219,36],[220,37],[221,38],[222,39],[223,40],[148,10],[146,10],[224,41],[225,42],[226,43],[267,44],[227,45],[228,46],[229,45],[230,47],[231,48],[233,49],[234,50],[235,50],[236,50],[237,51],[238,52],[239,53],[240,54],[241,55],[242,56],[243,56],[244,57],[245,10],[246,10],[247,58],[248,59],[249,58],[250,60],[251,61],[252,62],[253,63],[254,64],[255,65],[256,66],[257,67],[258,68],[259,69],[260,70],[261,71],[262,72],[263,73],[264,74],[149,45],[150,10],[151,10],[152,75],[153,10],[154,31],[155,10],[198,76],[199,77],[200,78],[201,78],[202,79],[203,10],[204,28],[205,80],[206,77],[265,81],[266,82],[232,10],[91,10],[92,10],[16,10],[14,10],[15,10],[20,10],[19,10],[2,10],[21,10],[22,10],[23,10],[24,10],[25,10],[26,10],[27,10],[28,10],[3,10],[29,10],[30,10],[4,10],[31,10],[35,10],[32,10],[33,10],[34,10],[36,10],[37,10],[38,10],[5,10],[39,10],[40,10],[41,10],[42,10],[6,10],[46,10],[43,10],[44,10],[45,10],[47,10],[7,10],[48,10],[53,10],[54,10],[49,10],[50,10],[51,10],[52,10],[8,10],[58,10],[55,10],[56,10],[57,10],[59,10],[9,10],[60,10],[61,10],[62,10],[64,10],[63,10],[65,10],[66,10],[10,10],[67,10],[68,10],[69,10],[11,10],[70,10],[71,10],[72,10],[73,10],[74,10],[75,10],[12,10],[76,10],[77,10],[78,10],[79,10],[80,10],[1,10],[81,10],[82,10],[13,10],[83,10],[84,10],[85,10],[86,10],[93,10],[87,10],[88,10],[89,10],[90,10],[18,10],[17,10],[174,83],[186,84],[171,85],[187,86],[196,87],[162,88],[163,89],[161,90],[195,91],[190,92],[194,93],[165,94],[183,95],[164,96],[193,97],[159,98],[160,92],[166,99],[167,10],[173,100],[170,99],[157,101],[197,102],[188,103],[177,104],[176,99],[178,105],[181,106],[175,107],[179,108],[191,91],[168,109],[169,110],[182,111],[158,86],[185,112],[184,99],[172,110],[180,113],[189,10],[156,10],[192,114],[115,115],[114,10],[118,10],[119,16],[117,10],[120,10],[121,10],[122,10],[124,10],[125,10],[126,10],[136,10],[135,6],[123,10],[143,116],[142,16],[137,10],[138,10],[139,10],[140,6],[141,10],[116,117],[144,118]],"latestChangedDtsFile":"./lib/types/index.d.ts","version":"6.0.3"}