pw-js-world 0.1.4-dev.e52001b → 0.1.5-dev.415d227

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,673 +0,0 @@
1
- "use strict";
2
- /**
3
- * CREDIT: Anatoly for making this Buffer Reader so I don't have to!
4
- * Source: https://github.com/Anatoly03/pixelwalker.js/blob/9bb3c7e39a45006086a2abae8c515599bd3db835/src/util/buffer-reader.ts
5
- * License: ISC
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ComponentTypeHeader = void 0;
9
- /**
10
- * Data during the communication in the process is dynamic
11
- * typed. Every entry is followed by a byte identifying the
12
- * type, followed by data. The type header is noted by its'
13
- * 7-bit notation.
14
- */
15
- var ComponentTypeHeader;
16
- (function (ComponentTypeHeader) {
17
- ComponentTypeHeader[ComponentTypeHeader["String"] = 0] = "String";
18
- ComponentTypeHeader[ComponentTypeHeader["Byte"] = 1] = "Byte";
19
- ComponentTypeHeader[ComponentTypeHeader["Int16"] = 2] = "Int16";
20
- ComponentTypeHeader[ComponentTypeHeader["Int32"] = 3] = "Int32";
21
- ComponentTypeHeader[ComponentTypeHeader["Int64"] = 4] = "Int64";
22
- ComponentTypeHeader[ComponentTypeHeader["Float"] = 5] = "Float";
23
- ComponentTypeHeader[ComponentTypeHeader["Double"] = 6] = "Double";
24
- ComponentTypeHeader[ComponentTypeHeader["Boolean"] = 7] = "Boolean";
25
- ComponentTypeHeader[ComponentTypeHeader["ByteArray"] = 8] = "ByteArray";
26
- })(ComponentTypeHeader || (exports.ComponentTypeHeader = ComponentTypeHeader = {}));
27
- /**
28
- * A Buffer reader is a special buffer extension made to perform
29
- * game-specific tasks in the field of communication.
30
- *
31
- * @implements Buffer
32
- */
33
- class BufferReader {
34
- /**
35
- *
36
- */
37
- constructor(buffer) {
38
- this.offset = 0;
39
- this.buffer = buffer;
40
- }
41
- //
42
- //
43
- // Static Methods
44
- //
45
- //
46
- /**
47
- *
48
- */
49
- static from(from) {
50
- if (from instanceof Buffer)
51
- return new BufferReader(from);
52
- return new BufferReader(Buffer.from(from));
53
- }
54
- /**
55
- *
56
- */
57
- static alloc(amount) {
58
- return BufferReader.from(Buffer.alloc(amount));
59
- }
60
- //
61
- //
62
- // Message Component Types
63
- //
64
- //
65
- /**
66
- * @param {string} value
67
- * @returns {Buffer}
68
- */
69
- static String(value = '') {
70
- const stringByteLen = Buffer.byteLength(value);
71
- const lengthByteCount = this.length7BitInt(stringByteLen);
72
- const buffer = BufferReader.alloc(1 + lengthByteCount + stringByteLen);
73
- buffer.writeUInt8(ComponentTypeHeader.String);
74
- buffer.write7BitInt(stringByteLen);
75
- buffer.write(value);
76
- return buffer.toBuffer();
77
- }
78
- /**
79
- * @param {number} value
80
- * @returns {Buffer}
81
- */
82
- static Byte(value = 0) {
83
- const buffer = BufferReader.alloc(2);
84
- buffer.writeUInt8(ComponentTypeHeader.Byte);
85
- buffer.writeUInt8(value);
86
- return buffer.toBuffer();
87
- }
88
- /**
89
- * @param {number} value
90
- * @returns {Buffer}
91
- */
92
- static Int16(value = 0) {
93
- const buffer = BufferReader.alloc(3);
94
- buffer.writeUInt8(ComponentTypeHeader.Int16);
95
- buffer.writeUInt16BE(value);
96
- return buffer.toBuffer();
97
- }
98
- /**
99
- * @param {number} value
100
- * @returns {Buffer}
101
- */
102
- static Int32(value = 0) {
103
- const buffer = BufferReader.alloc(5);
104
- buffer.writeUInt8(ComponentTypeHeader.Int32);
105
- buffer.writeInt32BE(value);
106
- return buffer.toBuffer();
107
- }
108
- /**
109
- * @param {bigint} value
110
- * @returns {Buffer}
111
- */
112
- static Int64(value = BigInt(0).valueOf()) {
113
- const buffer = BufferReader.alloc(9);
114
- buffer.writeUInt8(ComponentTypeHeader.Int64);
115
- buffer.writeBigInt64BE(value);
116
- return buffer.toBuffer();
117
- }
118
- /**
119
- * @param {number} value
120
- * @returns {Buffer}
121
- */
122
- static Float(value = 0) {
123
- const buffer = BufferReader.alloc(5);
124
- buffer.writeUInt8(ComponentTypeHeader.Float);
125
- buffer.writeFloatBE(value);
126
- return buffer.toBuffer();
127
- }
128
- /**
129
- * @param {number} value
130
- * @returns {Buffer}
131
- */
132
- static Double(value = 0) {
133
- const buffer = BufferReader.alloc(9);
134
- buffer.writeUInt8(ComponentTypeHeader.Double);
135
- buffer.writeDoubleBE(value);
136
- return buffer.toBuffer();
137
- }
138
- /**
139
- * @param {boolean} value
140
- * @returns {Buffer}
141
- */
142
- static Boolean(value = false) {
143
- const buffer = BufferReader.alloc(2);
144
- buffer.writeUInt8(ComponentTypeHeader.Boolean);
145
- buffer.writeUInt8(value ? 1 : 0);
146
- return buffer.toBuffer();
147
- }
148
- /**
149
- * @param {Uint8Array} buffer
150
- * @returns {Buffer}
151
- */
152
- static ByteArray(buffer = Buffer.from([0])) {
153
- const bufferLength = Buffer.byteLength(buffer);
154
- const prefix = BufferReader.alloc(2);
155
- prefix.writeUInt8(ComponentTypeHeader.ByteArray);
156
- prefix.writeUInt8(bufferLength);
157
- return Buffer.concat([prefix.toBuffer(), buffer]);
158
- }
159
- /**
160
- * @param {number} value
161
- * @returns {Buffer}
162
- */
163
- static Magic(value) {
164
- if (value === undefined)
165
- throw new Error('Received undefined magic byte');
166
- return Buffer.from([value]);
167
- }
168
- /**
169
- * @param {number} value
170
- * @returns {Buffer}
171
- */
172
- static Bit7(value = 0) {
173
- const buffer = BufferReader.alloc(this.length7BitInt(value));
174
- buffer.write7BitInt(value);
175
- return buffer.toBuffer();
176
- }
177
- /**
178
- * @param tt
179
- * @param value
180
- */
181
- static Dynamic(tt, value) {
182
- switch (tt) {
183
- case ComponentTypeHeader.String:
184
- return this.String(value);
185
- case ComponentTypeHeader.Byte:
186
- return this.Byte(value);
187
- case ComponentTypeHeader.Int16:
188
- return this.Int16(value);
189
- case ComponentTypeHeader.Int32:
190
- return this.Int32(value);
191
- case ComponentTypeHeader.Int64:
192
- return this.Int64(value);
193
- case ComponentTypeHeader.Float:
194
- return this.Float(value);
195
- case ComponentTypeHeader.Double:
196
- return this.Double(value);
197
- case ComponentTypeHeader.Boolean:
198
- return this.Boolean(value);
199
- case ComponentTypeHeader.ByteArray:
200
- return this.ByteArray(value);
201
- }
202
- }
203
- //
204
- //
205
- // Overrides
206
- //
207
- //
208
- /**
209
- *
210
- */
211
- get length() {
212
- return this.buffer.length - this.offset;
213
- }
214
- /**
215
- *
216
- */
217
- subarray(start = this.offset, end = this.length) {
218
- return new BufferReader(this.buffer.subarray(start, this.offset + end));
219
- }
220
- /**
221
- *
222
- */
223
- write(value) {
224
- return (this.offset = this.buffer.write(value, this.offset));
225
- }
226
- /**
227
- *
228
- */
229
- writeBigInt64BE(value) {
230
- return (this.offset = this.buffer.writeBigInt64BE(value, this.offset));
231
- }
232
- /**
233
- *
234
- */
235
- writeBigInt64LE(value) {
236
- return (this.offset = this.buffer.writeBigInt64LE(value, this.offset));
237
- }
238
- /**
239
- *
240
- */
241
- writeUInt8(value) {
242
- return (this.offset = this.buffer.writeUInt8(value, this.offset));
243
- }
244
- /**
245
- *
246
- */
247
- writeUInt16LE(value) {
248
- return (this.offset = this.buffer.writeUInt16LE(value, this.offset));
249
- }
250
- /**
251
- *
252
- */
253
- writeUInt16BE(value) {
254
- return (this.offset = this.buffer.writeUInt16BE(value, this.offset));
255
- }
256
- /**
257
- *
258
- */
259
- writeUInt32LE(value) {
260
- return (this.offset = this.buffer.writeUInt32LE(value, this.offset));
261
- }
262
- /**
263
- *
264
- */
265
- writeUInt32BE(value) {
266
- return (this.offset = this.buffer.writeUInt32BE(value, this.offset));
267
- }
268
- /**
269
- *
270
- */
271
- writeInt8(value) {
272
- return (this.offset = this.buffer.writeInt8(value, this.offset));
273
- }
274
- /**
275
- *
276
- */
277
- writeInt16LE(value) {
278
- return (this.offset = this.buffer.writeInt16LE(value, this.offset));
279
- }
280
- /**
281
- *
282
- */
283
- writeInt16BE(value) {
284
- return (this.offset = this.buffer.writeInt16BE(value, this.offset));
285
- }
286
- /**
287
- *
288
- */
289
- writeInt32LE(value) {
290
- return (this.offset = this.buffer.writeInt32LE(value, this.offset));
291
- }
292
- /**
293
- *
294
- */
295
- writeInt32BE(value) {
296
- return (this.offset = this.buffer.writeInt32BE(value, this.offset));
297
- }
298
- /**
299
- *
300
- */
301
- writeFloatLE(value) {
302
- return (this.offset = this.buffer.writeFloatLE(value, this.offset));
303
- }
304
- /**
305
- *
306
- */
307
- writeFloatBE(value) {
308
- return (this.offset = this.buffer.writeFloatBE(value, this.offset));
309
- }
310
- /**
311
- *
312
- */
313
- writeDoubleLE(value) {
314
- return (this.offset = this.buffer.writeDoubleLE(value, this.offset));
315
- }
316
- /**
317
- *
318
- */
319
- writeDoubleBE(value) {
320
- return (this.offset = this.buffer.writeDoubleBE(value, this.offset));
321
- }
322
- /**
323
- *
324
- */
325
- readBigUInt64BE() {
326
- const tmp = this.buffer.readBigUInt64BE(this.offset);
327
- this.offset += 8;
328
- return tmp;
329
- }
330
- /**
331
- *
332
- */
333
- readBigUInt64LE() {
334
- const tmp = this.buffer.readBigUInt64LE(this.offset);
335
- this.offset += 8;
336
- return tmp;
337
- }
338
- /**
339
- *
340
- */
341
- readBigInt64BE() {
342
- const tmp = this.buffer.readBigInt64BE(this.offset);
343
- this.offset += 8;
344
- return tmp;
345
- }
346
- /**
347
- *
348
- */
349
- readBigInt64LE() {
350
- const tmp = this.buffer.readBigInt64LE(this.offset);
351
- this.offset += 8;
352
- return tmp;
353
- }
354
- // public readUIntLE() {
355
- // const tmp = this.buffer.readUIntLE(this.offset);
356
- // this.offset += 1;
357
- // return tmp;
358
- // }
359
- // public readUIntBE() {
360
- // const tmp = this.buffer.readUIntBE(this.offset);
361
- // this.offset += 1;
362
- // return tmp;
363
- // }
364
- // public readIntLE() {
365
- // const tmp = this.buffer.readIntLE(this.offset);
366
- // this.offset += 1;
367
- // return tmp;
368
- // }
369
- // public readIntBE() {
370
- // const tmp = this.buffer.readIntBE(this.offset);
371
- // this.offset += 1;
372
- // return tmp;
373
- // }
374
- /**
375
- *
376
- */
377
- expectUInt8(value) {
378
- const tmp = this.buffer.readUInt8(this.offset);
379
- this.offset += 1;
380
- if (tmp !== value)
381
- throw new Error(`Expected ${value} but got ${tmp}`);
382
- return tmp;
383
- }
384
- /**
385
- *
386
- */
387
- readUInt8() {
388
- const tmp = this.buffer.readUInt8(this.offset);
389
- this.offset += 1;
390
- return tmp;
391
- }
392
- /**
393
- *
394
- */
395
- readUInt16LE() {
396
- const tmp = this.buffer.readUInt16LE(this.offset);
397
- this.offset += 2;
398
- return tmp;
399
- }
400
- /**
401
- *
402
- */
403
- readUInt16BE() {
404
- const tmp = this.buffer.readUInt16BE(this.offset);
405
- this.offset += 2;
406
- return tmp;
407
- }
408
- /**
409
- *
410
- */
411
- readUInt32LE() {
412
- const tmp = this.buffer.readUInt32LE(this.offset);
413
- this.offset += 4;
414
- return tmp;
415
- }
416
- /**
417
- *
418
- */
419
- readUInt32BE() {
420
- const tmp = this.buffer.readUInt32BE(this.offset);
421
- this.offset += 4;
422
- return tmp;
423
- }
424
- /**
425
- *
426
- */
427
- readInt8() {
428
- const tmp = this.buffer.readInt8(this.offset);
429
- this.offset += 1;
430
- return tmp;
431
- }
432
- /**
433
- *
434
- */
435
- readInt16LE() {
436
- const tmp = this.buffer.readInt16LE(this.offset);
437
- this.offset += 2;
438
- return tmp;
439
- }
440
- /**
441
- *
442
- */
443
- readInt16BE() {
444
- const tmp = this.buffer.readInt16BE(this.offset);
445
- this.offset += 2;
446
- return tmp;
447
- }
448
- /**
449
- *
450
- */
451
- readInt32LE() {
452
- const tmp = this.buffer.readInt32LE(this.offset);
453
- this.offset += 4;
454
- return tmp;
455
- }
456
- /**
457
- *
458
- */
459
- readInt32BE() {
460
- const tmp = this.buffer.readInt32BE(this.offset);
461
- this.offset += 4;
462
- return tmp;
463
- }
464
- /**
465
- *
466
- */
467
- readFloatLE() {
468
- const tmp = this.buffer.readFloatLE(this.offset);
469
- this.offset += 4;
470
- return tmp;
471
- }
472
- /**
473
- *
474
- */
475
- readFloatBE() {
476
- const tmp = this.buffer.readFloatBE(this.offset);
477
- this.offset += 4;
478
- return tmp;
479
- }
480
- /**
481
- *
482
- */
483
- readDoubleLE() {
484
- const tmp = this.buffer.readDoubleLE(this.offset);
485
- this.offset += 8;
486
- return tmp;
487
- }
488
- /**
489
- *
490
- */
491
- readDoubleBE() {
492
- const tmp = this.buffer.readDoubleBE(this.offset);
493
- this.offset += 8;
494
- return tmp;
495
- }
496
- read(tt, little = true) {
497
- switch (tt) {
498
- case ComponentTypeHeader.String:
499
- return this.readDynamicBuffer().toString("ascii");
500
- case ComponentTypeHeader.Byte:
501
- return this.readUInt8();
502
- case ComponentTypeHeader.Int16:
503
- return little ? this.readInt16LE() : this.readInt16BE();
504
- case ComponentTypeHeader.Int32:
505
- return little ? this.readInt32LE() : this.readInt32BE();
506
- case ComponentTypeHeader.Int64:
507
- return little ? this.readBigInt64LE() : this.readBigInt64BE();
508
- case ComponentTypeHeader.Float:
509
- return little ? this.readFloatLE() : this.readFloatBE();
510
- case ComponentTypeHeader.Double:
511
- return little ? this.readDoubleLE() : this.readDoubleBE();
512
- case ComponentTypeHeader.Boolean:
513
- return !!this.readUInt8();
514
- case ComponentTypeHeader.ByteArray:
515
- return this.readDynamicBuffer();
516
- }
517
- }
518
- //
519
- //
520
- // Methods
521
- //
522
- //
523
- /**
524
- *
525
- */
526
- toBuffer() {
527
- return this.buffer;
528
- }
529
- /**
530
- * https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer
531
- */
532
- toArrayBuffer() {
533
- const arrayBuffer = new ArrayBuffer(this.length);
534
- const view = new Uint8Array(arrayBuffer);
535
- for (let i = 0; i < this.length; ++i) {
536
- view[i] = this.buffer[i];
537
- }
538
- return arrayBuffer;
539
- }
540
- /**
541
- *
542
- */
543
- at(idx) {
544
- return this.buffer[idx];
545
- }
546
- /**
547
- * Advanced the buffer reader by pffset.
548
- */
549
- advanceOffset(relativeOffset = 1) {
550
- this.offset += relativeOffset;
551
- return this;
552
- }
553
- /**
554
- * This function reads how many bytes a normal integer would take
555
- * as a 7-bit number
556
- *
557
- * 1(000 0001) 0(111 1110)
558
- */
559
- static length7BitInt(value) {
560
- let size = 0;
561
- do
562
- (value >>= 7), size++;
563
- while (value > 0);
564
- return size;
565
- }
566
- /**
567
- * Reads in an integer in 7-bit notation. A 7-bit integer
568
- * encoding splits a number into a variable size of bits,
569
- * in which the first bit is set while bytes are following.
570
- *
571
- * @example
572
- *
573
- * ```
574
- * 1111 0000 1010 1010 1000 0000 0000 0001 Reading In
575
- * ^--- ---- ^--- ---- ^--- ---- ^--- ----
576
- * 111 0000 010 1010 000 0000 000 0001 Writing Out
577
- * ```
578
- */
579
- read7BitInt() {
580
- let value = 0, shift = 0, byte = 0xff;
581
- while (byte & 0x80) {
582
- byte = this.readUInt8();
583
- value |= (byte & 0x7f) << shift;
584
- shift += 7;
585
- }
586
- return value;
587
- }
588
- /**
589
- * Write a normal integer value into buffer at offset.
590
- */
591
- write7BitInt(value) {
592
- while (value >= 128) {
593
- this.writeUInt8((value & 127) | 128);
594
- value >>= 7;
595
- }
596
- this.writeUInt8(value);
597
- }
598
- /**
599
- * Reads a dynamic buffer which is prepended by its' length
600
- * in 7-bit encoding.
601
- */
602
- readDynamicBuffer() {
603
- const length = this.read7BitInt();
604
- const value = this.subarray(this.offset, length);
605
- this.offset += length;
606
- return value.toBuffer();
607
- }
608
- /**
609
- * Append a buffer to the current buffer. Asserts the cursor
610
- * to be at the end of the current buffer.
611
- */
612
- append(buffer) {
613
- if (this.offset !== this.length - 1)
614
- throw new Error("Cursor hasn't finished reading yet.");
615
- this.buffer = Buffer.concat([this.buffer, buffer]);
616
- return this;
617
- }
618
- /**
619
- * Keep Deserializing the buffer for typed data until
620
- * you reach the end of the buffer. Typed data consists
621
- * of a type indicator in 7-bit-encoding and data following
622
- * accordingly.
623
- */
624
- deserialize() {
625
- const arr = [];
626
- while (this.offset < this.length) {
627
- const type = this.read7BitInt();
628
- switch (type) {
629
- case ComponentTypeHeader.String:
630
- arr.push(this.readDynamicBuffer().toString("ascii"));
631
- break;
632
- case ComponentTypeHeader.Byte:
633
- arr.push(this.readUInt8());
634
- break;
635
- case ComponentTypeHeader.Int16: // = Int16 (short)
636
- arr.push(this.readInt16BE());
637
- break;
638
- case ComponentTypeHeader.Int32: // = Int32
639
- arr.push(this.readInt32BE());
640
- break;
641
- case ComponentTypeHeader.Int64:
642
- arr.push(this.readBigInt64BE());
643
- break;
644
- case ComponentTypeHeader.Float:
645
- arr.push(this.readFloatBE());
646
- break;
647
- case ComponentTypeHeader.Double:
648
- arr.push(this.readDoubleBE());
649
- break;
650
- case ComponentTypeHeader.Boolean:
651
- arr.push(!!this.readUInt8()); // !! is truthy
652
- break;
653
- case ComponentTypeHeader.ByteArray:
654
- arr.push(this.readDynamicBuffer());
655
- break;
656
- default:
657
- throw new Error(`While serializing a buffer for data, an unexpected type 0x${type.toString(16)} was read. Expected one of 0-8`);
658
- }
659
- }
660
- return arr;
661
- }
662
- [Symbol.for("nodejs.util.inspect.custom")]() {
663
- let s = '<BufferReader';
664
- let copy = BufferReader.from(this.buffer);
665
- copy.offset = this.offset;
666
- for (let i = 0; i < 20 && this.offset + i < this.length - 1; i++) {
667
- s += ' ' + copy.readUInt8().toString(16).padStart(2, '0');
668
- }
669
- return s + '>';
670
- }
671
- }
672
- exports.default = BufferReader;
673
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVmZmVyUmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0J1ZmZlclJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBRUg7Ozs7O0dBS0c7QUFDSCxJQUFZLG1CQVVYO0FBVkQsV0FBWSxtQkFBbUI7SUFDM0IsaUVBQVUsQ0FBQTtJQUNWLDZEQUFRLENBQUE7SUFDUiwrREFBUyxDQUFBO0lBQ1QsK0RBQVMsQ0FBQTtJQUNULCtEQUFTLENBQUE7SUFDVCwrREFBUyxDQUFBO0lBQ1QsaUVBQVUsQ0FBQTtJQUNWLG1FQUFXLENBQUE7SUFDWCx1RUFBYSxDQUFBO0FBQ2pCLENBQUMsRUFWVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVU5QjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBcUIsWUFBWTtJQUk3Qjs7T0FFRztJQUNILFlBQW9CLE1BQWM7UUFMMUIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQU12QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQsRUFBRTtJQUNGLEVBQUU7SUFDRixpQkFBaUI7SUFDakIsRUFBRTtJQUNGLEVBQUU7SUFFRjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBeUI7UUFDeEMsSUFBSSxJQUFJLFlBQVksTUFBTTtZQUFFLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFjO1FBQzlCLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEVBQUU7SUFDRixFQUFFO0lBQ0YsMEJBQTBCO0lBQzFCLEVBQUU7SUFDRixFQUFFO0lBRUY7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFO1FBQ25DLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDdkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBZ0IsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFnQixDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWdCLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBZ0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNuRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFnQixDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQWdCLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBaUIsS0FBSztRQUN4QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBaUIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBYTtRQUM3QixJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO1FBQ3pFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBZ0IsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQXVCLEVBQUUsS0FBa0Q7UUFDN0YsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNULEtBQUssbUJBQW1CLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssbUJBQW1CLENBQUMsSUFBSTtnQkFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQ3RDLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssbUJBQW1CLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssbUJBQW1CLENBQUMsT0FBTztnQkFDNUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQWdCLENBQUMsQ0FBQztZQUMxQyxLQUFLLG1CQUFtQixDQUFDLFNBQVM7Z0JBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEVBQUU7SUFDRixFQUFFO0lBQ0YsWUFBWTtJQUNaLEVBQUU7SUFDRixFQUFFO0lBRUY7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLFFBQWdCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBYyxJQUFJLENBQUMsTUFBTTtRQUNsRSxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsS0FBYTtRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLEtBQWE7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsS0FBYTtRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsS0FBYTtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxLQUFhO1FBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBYTtRQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxLQUFhO1FBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBYTtRQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsdURBQXVEO0lBQ3ZELHdCQUF3QjtJQUN4QixrQkFBa0I7SUFDbEIsSUFBSTtJQUVKLHdCQUF3QjtJQUN4Qix1REFBdUQ7SUFDdkQsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQixJQUFJO0lBRUosdUJBQXVCO0lBQ3ZCLHNEQUFzRDtJQUN0RCx3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLElBQUk7SUFFSix1QkFBdUI7SUFDdkIsc0RBQXNEO0lBQ3RELHdCQUF3QjtJQUN4QixrQkFBa0I7SUFDbEIsSUFBSTtJQUVKOztPQUVHO0lBQ0ksV0FBVyxDQUFDLEtBQWE7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxLQUFLLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFhTSxJQUFJLENBQUMsRUFBdUIsRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUM5QyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ1QsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNO2dCQUMzQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RCxLQUFLLG1CQUFtQixDQUFDLElBQUk7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVCLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVELEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVELEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2xFLEtBQUssbUJBQW1CLENBQUMsS0FBSztnQkFDMUIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVELEtBQUssbUJBQW1CLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlELEtBQUssbUJBQW1CLENBQUMsT0FBTztnQkFDNUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlCLEtBQUssbUJBQW1CLENBQUMsU0FBUztnQkFDOUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUVELEVBQUU7SUFDRixFQUFFO0lBQ0YsVUFBVTtJQUNWLEVBQUU7SUFDRixFQUFFO0lBRUY7O09BRUc7SUFDSSxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNJLEVBQUUsQ0FBQyxHQUFXO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsY0FBYyxHQUFHLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFhO1FBQ3JDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiO1lBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7ZUFDbEIsS0FBSyxHQUFHLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksV0FBVztRQUNkLElBQUksS0FBSyxHQUFHLENBQUMsRUFDVCxLQUFLLEdBQUcsQ0FBQyxFQUNULElBQUksR0FBRyxJQUFJLENBQUM7UUFFaEIsT0FBTyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QixLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1lBQ2hDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNyQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUI7UUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLE1BQWM7UUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksV0FBVztRQUNkLE1BQU0sR0FBRyxHQUFvRCxFQUFFLENBQUM7UUFFaEUsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFaEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDWCxLQUFLLG1CQUFtQixDQUFDLE1BQU07b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ3JELE1BQU07Z0JBQ1YsS0FBSyxtQkFBbUIsQ0FBQyxJQUFJO29CQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUMzQixNQUFNO2dCQUNWLEtBQUssbUJBQW1CLENBQUMsS0FBSyxFQUFFLGtCQUFrQjtvQkFDOUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDN0IsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLEtBQUssRUFBRSxVQUFVO29CQUN0QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUM3QixNQUFNO2dCQUNWLEtBQUssbUJBQW1CLENBQUMsS0FBSztvQkFDMUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztvQkFDaEMsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLEtBQUs7b0JBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1YsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNO29CQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO29CQUM5QixNQUFNO2dCQUNWLEtBQUssbUJBQW1CLENBQUMsT0FBTztvQkFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlO29CQUM3QyxNQUFNO2dCQUNWLEtBQUssbUJBQW1CLENBQUMsU0FBUztvQkFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO29CQUNuQyxNQUFNO2dCQUNWO29CQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDeEksQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDeEIsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvRCxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7Q0FDSjtBQTN0QkQsK0JBMnRCQyJ9