@jsprismarine/nbt 0.1.0-rc.53 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +373 -0
  2. package/dist/Allocation.cjs.js +14 -0
  3. package/dist/Allocation.es.js +10 -0
  4. package/dist/ByteOrder-C8lF6w2G.cjs +16 -0
  5. package/dist/ByteOrder-mAT605jQ.js +13 -0
  6. package/dist/ByteOrder.cjs.js +10 -0
  7. package/dist/ByteOrder.es.js +2 -0
  8. package/dist/NBT.cjs.js +30 -0
  9. package/dist/NBT.d.ts +7 -7
  10. package/dist/NBT.d.ts.map +1 -1
  11. package/dist/NBT.es.js +16 -0
  12. package/dist/NBTDefinitions-BF_rcBoW.js +23 -0
  13. package/dist/NBTDefinitions-DUnu0laJ.cjs +26 -0
  14. package/dist/NBTDefinitions.cjs.js +10 -0
  15. package/dist/NBTDefinitions.es.js +2 -0
  16. package/dist/NBTReader.cjs.js +23 -0
  17. package/dist/NBTReader.d.ts +4 -4
  18. package/dist/NBTReader.d.ts.map +1 -1
  19. package/dist/NBTReader.es.js +15 -0
  20. package/dist/NBTStreamReader.cjs.js +119 -0
  21. package/dist/NBTStreamReader.d.ts +9 -9
  22. package/dist/NBTStreamReader.d.ts.map +1 -1
  23. package/dist/NBTStreamReader.es.js +115 -0
  24. package/dist/NBTTagCompound.cjs.js +23 -0
  25. package/dist/NBTTagCompound.d.ts +1 -1
  26. package/dist/NBTTagCompound.d.ts.map +1 -1
  27. package/dist/NBTTagCompound.es.js +15 -0
  28. package/dist/NBTWriter-CWx4uanO.js +515 -0
  29. package/dist/NBTWriter-KG_h2i_E.cjs +524 -0
  30. package/dist/NBTWriter.cjs.js +23 -0
  31. package/dist/NBTWriter.d.ts +2 -2
  32. package/dist/NBTWriter.d.ts.map +1 -1
  33. package/dist/NBTWriter.es.js +15 -0
  34. package/dist/Types-7TSvUTtn.js +21 -0
  35. package/dist/Types-CTvMjHAk.cjs +23 -0
  36. package/dist/types/ByteVal.cjs.js +16 -0
  37. package/dist/types/ByteVal.es.js +12 -0
  38. package/dist/types/DoubleVal.cjs.js +16 -0
  39. package/dist/types/DoubleVal.es.js +12 -0
  40. package/dist/types/FloatVal.cjs.js +16 -0
  41. package/dist/types/FloatVal.es.js +12 -0
  42. package/dist/types/LongVal.cjs.js +16 -0
  43. package/dist/types/LongVal.es.js +12 -0
  44. package/dist/types/NumberVal.cjs.js +16 -0
  45. package/dist/types/NumberVal.es.js +12 -0
  46. package/dist/types/ShortVal.cjs.js +16 -0
  47. package/dist/types/ShortVal.es.js +12 -0
  48. package/dist/types/StringVal.cjs.js +16 -0
  49. package/dist/types/StringVal.es.js +12 -0
  50. package/dist/types/Types.cjs.js +22 -0
  51. package/dist/types/Types.d.ts +7 -7
  52. package/dist/types/Types.d.ts.map +1 -1
  53. package/dist/types/Types.es.js +8 -0
  54. package/package.json +50 -27
  55. package/dist/Allocation.js +0 -8
  56. package/dist/Allocation.js.map +0 -1
  57. package/dist/ByteOrder.js +0 -6
  58. package/dist/ByteOrder.js.map +0 -1
  59. package/dist/NBT.js +0 -9
  60. package/dist/NBT.js.map +0 -1
  61. package/dist/NBTDefinitions.js +0 -16
  62. package/dist/NBTDefinitions.js.map +0 -1
  63. package/dist/NBTReader.js +0 -157
  64. package/dist/NBTReader.js.map +0 -1
  65. package/dist/NBTStreamReader.js +0 -113
  66. package/dist/NBTStreamReader.js.map +0 -1
  67. package/dist/NBTTagCompound.js +0 -137
  68. package/dist/NBTTagCompound.js.map +0 -1
  69. package/dist/NBTWriter.js +0 -242
  70. package/dist/NBTWriter.js.map +0 -1
  71. package/dist/tsconfig.tsbuildinfo +0 -1
  72. package/dist/types/ByteVal.js +0 -10
  73. package/dist/types/ByteVal.js.map +0 -1
  74. package/dist/types/DoubleVal.js +0 -10
  75. package/dist/types/DoubleVal.js.map +0 -1
  76. package/dist/types/FloatVal.js +0 -10
  77. package/dist/types/FloatVal.js.map +0 -1
  78. package/dist/types/LongVal.js +0 -10
  79. package/dist/types/LongVal.js.map +0 -1
  80. package/dist/types/NumberVal.js +0 -10
  81. package/dist/types/NumberVal.js.map +0 -1
  82. package/dist/types/ShortVal.js +0 -10
  83. package/dist/types/ShortVal.js.map +0 -1
  84. package/dist/types/StringVal.js +0 -10
  85. package/dist/types/StringVal.js.map +0 -1
  86. package/dist/types/Types.js +0 -9
  87. package/dist/types/Types.js.map +0 -1
@@ -0,0 +1,524 @@
1
+ 'use strict';
2
+
3
+ const ByteOrder = require('./ByteOrder-C8lF6w2G.cjs');
4
+ const types_ByteVal = require('./types/ByteVal.cjs.js');
5
+ const types_DoubleVal = require('./types/DoubleVal.cjs.js');
6
+ const types_FloatVal = require('./types/FloatVal.cjs.js');
7
+ const types_LongVal = require('./types/LongVal.cjs.js');
8
+ const NBTDefinitions = require('./NBTDefinitions-DUnu0laJ.cjs');
9
+ const fs = require('node:fs');
10
+ const BinaryStream = require('@jsprismarine/jsbinaryutils');
11
+ const Allocation = require('./Allocation.cjs.js');
12
+ const NBTStreamReader = require('./NBTStreamReader.cjs.js');
13
+ const types_NumberVal = require('./types/NumberVal.cjs.js');
14
+ const types_ShortVal = require('./types/ShortVal.cjs.js');
15
+ const types_StringVal = require('./types/StringVal.cjs.js');
16
+
17
+ const _interopDefault = e => e && e.__esModule ? e : { default: e };
18
+
19
+ const fs__default = /*#__PURE__*/_interopDefault(fs);
20
+ const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream);
21
+
22
+ class NBTReader extends NBTStreamReader.default {
23
+ constructor(input, byteOrder) {
24
+ super(input, byteOrder);
25
+ }
26
+ parseList() {
27
+ this.expectInput(this.isUsingVarint() ? 2 : 3, "Invalid NBT Data: Not enough data to read new tag", false);
28
+ if (this.readByteValue().getValue() !== NBTDefinitions.NBTDefinitions$1.TAG_LIST) {
29
+ throw new Error("Invalid NBT Data: Not list tag found");
30
+ }
31
+ this.readStringValue();
32
+ return this.readTagListValue();
33
+ }
34
+ parse() {
35
+ this.expectInput(this.isUsingVarint() ? 2 : 3, "Invalid NBT Data: Not enough data to read new tag", false);
36
+ if (this.readByteValue().getValue() !== NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND) {
37
+ throw new Error("Invalid NBT Data: No root tag found");
38
+ }
39
+ const name = this.readStringValue().getValue();
40
+ const root = this.readTagCompoundValue();
41
+ root.setName(name);
42
+ return root;
43
+ }
44
+ readTagCompoundValue() {
45
+ this.alterAllocationLimit(Allocation.Allocation.COMPOUND);
46
+ const compound = new NBTTagCompound();
47
+ this.expectInput(1, "Invalid NBT Data: Expected Tag ID in compound tag", false);
48
+ let tagID = this.readByteValue().getValue();
49
+ while (tagID !== NBTDefinitions.NBTDefinitions$1.TAG_END) {
50
+ switch (tagID) {
51
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
52
+ compound.addValue(this.readStringValue().getValue(), this.readByteValue());
53
+ break;
54
+ case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
55
+ compound.addValue(this.readStringValue().getValue(), this.readShortValue());
56
+ break;
57
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT:
58
+ compound.addValue(this.readStringValue().getValue(), this.readIntValue());
59
+ break;
60
+ case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
61
+ compound.addValue(this.readStringValue().getValue(), this.readLongValue());
62
+ break;
63
+ case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
64
+ compound.addValue(this.readStringValue().getValue(), this.readFloatValue());
65
+ break;
66
+ case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
67
+ compound.addValue(this.readStringValue().getValue(), this.readDoubleValue());
68
+ break;
69
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
70
+ compound.addValue(this.readStringValue().getValue(), this.readByteArrayValue());
71
+ break;
72
+ case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
73
+ compound.addValue(this.readStringValue().getValue(), this.readStringValue());
74
+ break;
75
+ case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
76
+ compound.addValue(this.readStringValue().getValue(), this.readTagListValue());
77
+ break;
78
+ case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
79
+ const name = this.readStringValue().getValue();
80
+ const child = this.readTagCompoundValue();
81
+ child.setName(name);
82
+ compound.addChild(child);
83
+ break;
84
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
85
+ compound.addValue(this.readStringValue().getValue(), this.readIntArrayValue());
86
+ break;
87
+ default:
88
+ throw new Error(`Invalid NBT Data: Unknown tag <${tagID}>`);
89
+ }
90
+ this.expectInput(1, "Invalid NBT Data: Expected tag ID in tag compound", false);
91
+ tagID = this.readByteValue().getValue();
92
+ }
93
+ return compound;
94
+ }
95
+ readTagListValue() {
96
+ this.expectInput(this.isUsingVarint() ? 2 : 5, "Invalid NBT Data: Expected TAGList header", false);
97
+ const listType = this.readByteValue().getValue();
98
+ let listLength = this.readIntValue().getValue();
99
+ this.alterAllocationLimit(Allocation.Allocation.ARRAY_LIST);
100
+ this.alterAllocationLimit(Allocation.Allocation.REFERENCE);
101
+ const backingList = /* @__PURE__ */ new Set();
102
+ switch (listType) {
103
+ case NBTDefinitions.NBTDefinitions$1.TAG_END:
104
+ listLength = 0;
105
+ break;
106
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
107
+ this.expectInput(listLength, "Invalid NBT Data: Expected bytes for list");
108
+ for (let i = 0; i < listLength; i++) {
109
+ backingList.add(this.readShortValue());
110
+ }
111
+ break;
112
+ case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
113
+ this.expectInput(2 * listLength, "Invalid NBT Data: Expected shorts for list");
114
+ for (let i = 0; i < listLength; i++) {
115
+ backingList.add(this.readShortValue());
116
+ }
117
+ break;
118
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT:
119
+ this.expectInput(4 * listLength, "Invalid NBT Data: Expected ints for list");
120
+ for (let i = 0; i < listLength; i++) {
121
+ backingList.add(this.readIntValue());
122
+ }
123
+ break;
124
+ case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
125
+ this.expectInput(8 * listLength, "Invalid NBT Data: Expected longs for list");
126
+ for (let i = 0; i < listLength; i++) {
127
+ backingList.add(this.readLongValue());
128
+ }
129
+ break;
130
+ case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
131
+ this.expectInput(4 * listLength, "Invalid NBT Data: Expected floats for list");
132
+ for (let i = 0; i < listLength; i++) {
133
+ backingList.add(this.readFloatValue());
134
+ }
135
+ break;
136
+ case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
137
+ this.expectInput(8 * listLength, "Invalid NBT Data: Expected doubles for list");
138
+ for (let i = 0; i < listLength; i++) {
139
+ backingList.add(this.readDoubleValue());
140
+ }
141
+ break;
142
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
143
+ for (let i = 0; i < listLength; i++) {
144
+ backingList.add(this.readByteArrayValue());
145
+ }
146
+ break;
147
+ case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
148
+ for (let i = 0; i < listLength; i++) {
149
+ backingList.add(this.readStringValue());
150
+ }
151
+ break;
152
+ case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
153
+ for (let i = 0; i < listLength; i++) {
154
+ backingList.add(this.readTagListValue());
155
+ }
156
+ break;
157
+ case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
158
+ for (let i = 0; i < listLength; i++) {
159
+ backingList.add(this.readTagCompoundValue());
160
+ }
161
+ break;
162
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
163
+ for (let i = 0; i < listLength; i++) {
164
+ backingList.add(this.readIntArrayValue());
165
+ }
166
+ break;
167
+ default:
168
+ throw new Error(`Invalid NBT Data: Unknown tag <${listType}>`);
169
+ }
170
+ return backingList;
171
+ }
172
+ }
173
+
174
+ class NBTTagCompound {
175
+ name;
176
+ children = /* @__PURE__ */ new Map();
177
+ static readFromFile(path, byteOrder) {
178
+ return NBTTagCompound.readFromStream(new BinaryStream__default.default(fs__default.default.readFileSync(path)), byteOrder);
179
+ }
180
+ static readFromStream(input, byteOrder) {
181
+ const reader = new NBTReader(input, byteOrder);
182
+ return reader.parse();
183
+ }
184
+ constructor(name = null) {
185
+ this.name = name;
186
+ }
187
+ setName(name) {
188
+ this.name = name;
189
+ }
190
+ getName() {
191
+ return this.name;
192
+ }
193
+ addValue(name, value) {
194
+ if (value instanceof NBTTagCompound && !(name === value.getName())) {
195
+ throw new Error(`Failed to add NBTTagCompound with name ${value.getName()} given name ${name}`);
196
+ }
197
+ this.children.set(name, value);
198
+ }
199
+ addChild(tag) {
200
+ this.children.set(tag.getName(), tag);
201
+ }
202
+ getList(name, insert) {
203
+ if (this.children.has(name)) {
204
+ return this.children.get(name);
205
+ }
206
+ if (insert) {
207
+ const backingList = /* @__PURE__ */ new Set();
208
+ this.addValue(name, backingList);
209
+ return backingList;
210
+ }
211
+ return null;
212
+ }
213
+ getCompound(name, insert) {
214
+ if (this.children.has(name)) {
215
+ return this.children.get(name);
216
+ }
217
+ if (insert) {
218
+ const compound = new NBTTagCompound();
219
+ this.addValue(name, compound);
220
+ return compound;
221
+ }
222
+ return null;
223
+ }
224
+ writeToStream(out, byteOrder) {
225
+ const writer = new NBTWriter(out, byteOrder);
226
+ writer.writeCompound(this);
227
+ }
228
+ getByte(name, defaultValue) {
229
+ return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
230
+ }
231
+ getShort(name, defaultValue) {
232
+ return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
233
+ }
234
+ getNumber(name, defaultValue) {
235
+ return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
236
+ }
237
+ getLong(name, defaultValue) {
238
+ return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
239
+ }
240
+ getFloat(name, defaultValue) {
241
+ return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
242
+ }
243
+ getDouble(name, defaultValue) {
244
+ return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
245
+ }
246
+ getString(name, defaultValue) {
247
+ return this.children.has(name) ? this.children.get(name).getValue() : defaultValue;
248
+ }
249
+ remove(key) {
250
+ return this.children.delete(key);
251
+ }
252
+ entries() {
253
+ return this.children.entries();
254
+ }
255
+ has(key) {
256
+ return this.children.has(key);
257
+ }
258
+ size() {
259
+ return this.children.size;
260
+ }
261
+ // Thanks stackoverflow! https://stackoverflow.com/questions/35948335/how-can-i-check-if-two-map-objects-are-equal
262
+ equals(that) {
263
+ if (this.children.size !== that.children.size) {
264
+ return false;
265
+ }
266
+ for (const [key, val] of this.children) {
267
+ const testVal = that.children.get(key);
268
+ if (testVal === void 0 && !that.children.has(key)) {
269
+ return false;
270
+ }
271
+ if (val instanceof NBTTagCompound && testVal instanceof NBTTagCompound && !val.equals(testVal)) {
272
+ return false;
273
+ }
274
+ if (val instanceof types_ByteVal.default && testVal instanceof types_ByteVal.default && val.getValue() !== testVal.getValue()) {
275
+ return false;
276
+ }
277
+ if (val instanceof types_DoubleVal.default && testVal instanceof types_DoubleVal.default && val.getValue() !== testVal.getValue()) {
278
+ return false;
279
+ }
280
+ if (val instanceof types_FloatVal.default && testVal instanceof types_FloatVal.default && val.getValue() !== testVal.getValue()) {
281
+ return false;
282
+ }
283
+ if (val instanceof types_LongVal.default && testVal instanceof types_LongVal.default && val.getValue() !== testVal.getValue()) {
284
+ return false;
285
+ }
286
+ if (val instanceof types_NumberVal.default && testVal instanceof types_NumberVal.default && val.getValue() !== testVal.getValue()) {
287
+ return false;
288
+ }
289
+ if (val instanceof types_ShortVal.default && testVal instanceof types_ShortVal.default && val.getValue() !== testVal.getValue()) {
290
+ return false;
291
+ }
292
+ if (val instanceof types_StringVal.default && testVal instanceof types_StringVal.default && val.getValue() !== testVal.getValue()) {
293
+ return false;
294
+ }
295
+ }
296
+ return true;
297
+ }
298
+ }
299
+
300
+ class NBTWriter {
301
+ order;
302
+ buf;
303
+ useVarint = false;
304
+ constructor(out, byteOrder) {
305
+ this.buf = out;
306
+ this.order = byteOrder;
307
+ }
308
+ setUseVarint(useVarint) {
309
+ this.useVarint = useVarint;
310
+ }
311
+ writeList(list) {
312
+ this.writeTagHeader(NBTDefinitions.NBTDefinitions$1.TAG_LIST, "");
313
+ this.writeListValue(list);
314
+ }
315
+ writeCompound(compound) {
316
+ this.writeTagHeader(NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND, compound.getName() ?? "");
317
+ this.writeCompoundValue(compound);
318
+ }
319
+ writeTagHeader(type, name) {
320
+ this.writeByteValue(type);
321
+ this.writeStringValue(name);
322
+ }
323
+ writeStringValue(value) {
324
+ if (value !== null) {
325
+ const bytes = Buffer.from(value, "utf8");
326
+ if (this.useVarint) {
327
+ this.buf.writeUnsignedVarInt(Buffer.byteLength(value));
328
+ } else {
329
+ this.writeShortValue(Buffer.byteLength(value));
330
+ }
331
+ this.buf.write(bytes);
332
+ } else if (this.useVarint) {
333
+ this.writeByteValue(0);
334
+ } else {
335
+ this.writeShortValue(0);
336
+ }
337
+ }
338
+ writeByteValue(value) {
339
+ this.buf.writeByte(value);
340
+ }
341
+ writeShortValue(value) {
342
+ if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
343
+ this.buf.writeUnsignedShortLE(value);
344
+ } else {
345
+ this.buf.writeUnsignedShort(value);
346
+ }
347
+ }
348
+ writeIntegerValue(value) {
349
+ if (this.useVarint) {
350
+ this.buf.writeVarInt(value);
351
+ } else if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
352
+ this.buf.writeUnsignedIntLE(value);
353
+ } else {
354
+ this.buf.writeUnsignedInt(value);
355
+ }
356
+ }
357
+ writeLongValue(value) {
358
+ if (this.useVarint) {
359
+ this.buf.writeVarLong(value);
360
+ } else if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
361
+ this.buf.writeUnsignedLongLE(value);
362
+ } else {
363
+ this.buf.writeUnsignedLong(value);
364
+ }
365
+ }
366
+ writeFloatValue(value) {
367
+ if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
368
+ this.buf.writeFloatLE(value);
369
+ } else {
370
+ this.buf.writeFloat(value);
371
+ }
372
+ }
373
+ writeDoubleValue(value) {
374
+ if (this.order === ByteOrder.ByteOrder$1.LITTLE_ENDIAN) {
375
+ this.buf.writeDoubleLE(value);
376
+ } else {
377
+ this.buf.writeDouble(value);
378
+ }
379
+ }
380
+ writeByteArrayValue(value) {
381
+ this.writeIntegerValue(value.length);
382
+ this.buf.write(value);
383
+ }
384
+ writeIntegerArrayValue(value) {
385
+ this.writeIntegerValue(value.length);
386
+ value.forEach((v) => {
387
+ this.writeIntegerValue(v);
388
+ });
389
+ }
390
+ writeListValue(value) {
391
+ if (value.size > 0) {
392
+ const listNbtType = this.getNBTTypeFromValue(value.entries().next().value);
393
+ this.writeByteValue(listNbtType);
394
+ this.writeIntegerValue(value.size);
395
+ for (const rawValue of value) {
396
+ switch (listNbtType) {
397
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
398
+ this.writeByteValue(rawValue.getValue());
399
+ break;
400
+ case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
401
+ this.writeShortValue(rawValue.getValue());
402
+ break;
403
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT:
404
+ this.writeIntegerValue(rawValue.getValue());
405
+ break;
406
+ case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
407
+ this.writeLongValue(rawValue.getValue());
408
+ break;
409
+ case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
410
+ this.writeFloatValue(rawValue.getValue());
411
+ break;
412
+ case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
413
+ this.writeDoubleValue(rawValue.getValue());
414
+ break;
415
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
416
+ this.writeDoubleValue(rawValue);
417
+ break;
418
+ case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
419
+ this.writeStringValue(rawValue.getValue());
420
+ break;
421
+ case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
422
+ this.writeListValue(rawValue);
423
+ break;
424
+ case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
425
+ this.writeCompoundValue(rawValue);
426
+ break;
427
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
428
+ this.writeIntegerArrayValue(rawValue);
429
+ break;
430
+ default:
431
+ throw new Error("Invalid NBTTagType");
432
+ }
433
+ }
434
+ } else {
435
+ this.writeByteValue(NBTDefinitions.NBTDefinitions$1.TAG_BYTE);
436
+ this.writeIntegerValue(0);
437
+ }
438
+ }
439
+ writeCompoundValue(compound) {
440
+ for (const [key, value] of compound.entries()) {
441
+ const nbtType = this.getNBTTypeFromValue(value);
442
+ this.writeTagHeader(nbtType, key);
443
+ switch (nbtType) {
444
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE:
445
+ this.writeByteValue(value.getValue());
446
+ break;
447
+ case NBTDefinitions.NBTDefinitions$1.TAG_SHORT:
448
+ this.writeShortValue(value.getValue());
449
+ break;
450
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT:
451
+ this.writeIntegerValue(value.getValue());
452
+ break;
453
+ case NBTDefinitions.NBTDefinitions$1.TAG_LONG:
454
+ this.writeLongValue(value.getValue());
455
+ break;
456
+ case NBTDefinitions.NBTDefinitions$1.TAG_FLOAT:
457
+ this.writeFloatValue(value.getValue());
458
+ break;
459
+ case NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE:
460
+ this.writeDoubleValue(value.getValue());
461
+ break;
462
+ case NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY:
463
+ this.writeByteArrayValue(value);
464
+ break;
465
+ case NBTDefinitions.NBTDefinitions$1.TAG_STRING:
466
+ this.writeStringValue(value.getValue());
467
+ break;
468
+ case NBTDefinitions.NBTDefinitions$1.TAG_LIST:
469
+ this.writeListValue(value);
470
+ break;
471
+ case NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND:
472
+ this.writeCompoundValue(value);
473
+ break;
474
+ case NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY:
475
+ this.writeIntegerValue(value);
476
+ break;
477
+ default:
478
+ throw new Error("Invalid NBTTagType");
479
+ }
480
+ }
481
+ this.writeByteValue(NBTDefinitions.NBTDefinitions$1.TAG_END);
482
+ }
483
+ getNBTTypeFromValue(value) {
484
+ if (value instanceof types_ByteVal.default) {
485
+ return NBTDefinitions.NBTDefinitions$1.TAG_BYTE;
486
+ }
487
+ if (value instanceof types_ShortVal.default) {
488
+ return NBTDefinitions.NBTDefinitions$1.TAG_SHORT;
489
+ }
490
+ if (value instanceof types_NumberVal.default) {
491
+ return NBTDefinitions.NBTDefinitions$1.TAG_INT;
492
+ }
493
+ if (value instanceof types_LongVal.default) {
494
+ return NBTDefinitions.NBTDefinitions$1.TAG_LONG;
495
+ }
496
+ if (value instanceof types_FloatVal.default) {
497
+ return NBTDefinitions.NBTDefinitions$1.TAG_FLOAT;
498
+ }
499
+ if (value instanceof types_DoubleVal.default) {
500
+ return NBTDefinitions.NBTDefinitions$1.TAG_DOUBLE;
501
+ }
502
+ if (value instanceof Buffer) {
503
+ return NBTDefinitions.NBTDefinitions$1.TAG_BYTE_ARRAY;
504
+ }
505
+ if (value instanceof types_StringVal.default) {
506
+ return NBTDefinitions.NBTDefinitions$1.TAG_STRING;
507
+ }
508
+ if (value instanceof Set) {
509
+ return NBTDefinitions.NBTDefinitions$1.TAG_LIST;
510
+ }
511
+ if (value instanceof NBTTagCompound) {
512
+ return NBTDefinitions.NBTDefinitions$1.TAG_COMPOUND;
513
+ }
514
+ if (Array.isArray(value)) {
515
+ return NBTDefinitions.NBTDefinitions$1.TAG_INT_ARRAY;
516
+ }
517
+ throw new TypeError(`Invalid NBT Data: Cannot deduce NBT type of class ${value.constructor.name} (${value})`);
518
+ }
519
+ }
520
+
521
+ exports.NBTReader = NBTReader;
522
+ exports.NBTTagCompound = NBTTagCompound;
523
+ exports.NBTWriter = NBTWriter;
524
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUV3JpdGVyLUtHX2gyaV9FLmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL05CVFJlYWRlci50cyIsIi4uL3NyYy9OQlRUYWdDb21wb3VuZC50cyIsIi4uL3NyYy9OQlRXcml0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgQWxsb2NhdGlvbiB9IGZyb20gJy4vQWxsb2NhdGlvbic7XG5pbXBvcnQgQmluYXJ5U3RyZWFtIGZyb20gJ0Bqc3ByaXNtYXJpbmUvanNiaW5hcnl1dGlscyc7XG5pbXBvcnQgeyBCeXRlT3JkZXIgfSBmcm9tICcuL0J5dGVPcmRlcic7XG5pbXBvcnQgeyBOQlREZWZpbml0aW9ucyB9IGZyb20gJy4vTkJURGVmaW5pdGlvbnMnO1xuaW1wb3J0IE5CVFN0cmVhbVJlYWRlciBmcm9tICcuL05CVFN0cmVhbVJlYWRlcic7XG5pbXBvcnQgTkJUVGFnQ29tcG91bmQgZnJvbSAnLi9OQlRUYWdDb21wb3VuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5CVFJlYWRlciBleHRlbmRzIE5CVFN0cmVhbVJlYWRlciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGlucHV0OiBCaW5hcnlTdHJlYW0sIGJ5dGVPcmRlcjogQnl0ZU9yZGVyKSB7XG4gICAgICAgIHN1cGVyKGlucHV0LCBieXRlT3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZUxpc3Q8VGFnVHlwZT4oKTogU2V0PFRhZ1R5cGU+IHtcbiAgICAgICAgdGhpcy5leHBlY3RJbnB1dCh0aGlzLmlzVXNpbmdWYXJpbnQoKSA/IDIgOiAzLCAnSW52YWxpZCBOQlQgRGF0YTogTm90IGVub3VnaCBkYXRhIHRvIHJlYWQgbmV3IHRhZycsIGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMucmVhZEJ5dGVWYWx1ZSgpLmdldFZhbHVlKCkgIT09IE5CVERlZmluaXRpb25zLlRBR19MSVNUKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTkJUIERhdGE6IE5vdCBsaXN0IHRhZyBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWFkU3RyaW5nVmFsdWUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFRhZ0xpc3RWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXJzZSgpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIHRoaXMuZXhwZWN0SW5wdXQodGhpcy5pc1VzaW5nVmFyaW50KCkgPyAyIDogMywgJ0ludmFsaWQgTkJUIERhdGE6IE5vdCBlbm91Z2ggZGF0YSB0byByZWFkIG5ldyB0YWcnLCBmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLnJlYWRCeXRlVmFsdWUoKS5nZXRWYWx1ZSgpICE9PSBOQlREZWZpbml0aW9ucy5UQUdfQ09NUE9VTkQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOQlQgRGF0YTogTm8gcm9vdCB0YWcgZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgcm9vdDogTkJUVGFnQ29tcG91bmQgPSB0aGlzLnJlYWRUYWdDb21wb3VuZFZhbHVlKCk7XG4gICAgICAgIHJvb3Quc2V0TmFtZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkVGFnQ29tcG91bmRWYWx1ZSgpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIHRoaXMuYWx0ZXJBbGxvY2F0aW9uTGltaXQoQWxsb2NhdGlvbi5DT01QT1VORCk7XG4gICAgICAgIGNvbnN0IGNvbXBvdW5kOiBOQlRUYWdDb21wb3VuZCA9IG5ldyBOQlRUYWdDb21wb3VuZCgpO1xuICAgICAgICB0aGlzLmV4cGVjdElucHV0KDEsICdJbnZhbGlkIE5CVCBEYXRhOiBFeHBlY3RlZCBUYWcgSUQgaW4gY29tcG91bmQgdGFnJywgZmFsc2UpO1xuXG4gICAgICAgIGxldCB0YWdJRCA9IHRoaXMucmVhZEJ5dGVWYWx1ZSgpLmdldFZhbHVlKCk7XG4gICAgICAgIHdoaWxlICh0YWdJRCAhPT0gTkJURGVmaW5pdGlvbnMuVEFHX0VORCkge1xuICAgICAgICAgICAgc3dpdGNoICh0YWdJRCkge1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEU6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkQnl0ZVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19TSE9SVDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRTaG9ydFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19JTlQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkSW50VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xPTkc6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkTG9uZ1ZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19GTE9BVDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRGbG9hdFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19ET1VCTEU6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkRG91YmxlVmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEVfQVJSQVk6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkQnl0ZUFycmF5VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX1NUUklORzpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRTdHJpbmdWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfTElTVDpcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkVmFsdWUodGhpcy5yZWFkU3RyaW5nVmFsdWUoKS5nZXRWYWx1ZSgpLCB0aGlzLnJlYWRUYWdMaXN0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5EOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSB0aGlzLnJlYWRTdHJpbmdWYWx1ZSgpLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkOiBOQlRUYWdDb21wb3VuZCA9IHRoaXMucmVhZFRhZ0NvbXBvdW5kVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0TmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG91bmQuYWRkQ2hpbGQoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19JTlRfQVJSQVk6XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kLmFkZFZhbHVlKHRoaXMucmVhZFN0cmluZ1ZhbHVlKCkuZ2V0VmFsdWUoKSwgdGhpcy5yZWFkSW50QXJyYXlWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIE5CVCBEYXRhOiBVbmtub3duIHRhZyA8JHt0YWdJRH0+YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZXhwZWN0SW5wdXQoMSwgJ0ludmFsaWQgTkJUIERhdGE6IEV4cGVjdGVkIHRhZyBJRCBpbiB0YWcgY29tcG91bmQnLCBmYWxzZSk7XG4gICAgICAgICAgICB0YWdJRCA9IHRoaXMucmVhZEJ5dGVWYWx1ZSgpLmdldFZhbHVlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tcG91bmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkVGFnTGlzdFZhbHVlKCk6IFNldDxhbnk+IHtcbiAgICAgICAgdGhpcy5leHBlY3RJbnB1dCh0aGlzLmlzVXNpbmdWYXJpbnQoKSA/IDIgOiA1LCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgVEFHTGlzdCBoZWFkZXInLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGxpc3RUeXBlOiBudW1iZXIgPSB0aGlzLnJlYWRCeXRlVmFsdWUoKS5nZXRWYWx1ZSgpO1xuICAgICAgICBsZXQgbGlzdExlbmd0aDogbnVtYmVyID0gdGhpcy5yZWFkSW50VmFsdWUoKS5nZXRWYWx1ZSgpO1xuXG4gICAgICAgIHRoaXMuYWx0ZXJBbGxvY2F0aW9uTGltaXQoQWxsb2NhdGlvbi5BUlJBWV9MSVNUKTtcbiAgICAgICAgdGhpcy5hbHRlckFsbG9jYXRpb25MaW1pdChBbGxvY2F0aW9uLlJFRkVSRU5DRSk7XG5cbiAgICAgICAgY29uc3QgYmFja2luZ0xpc3Q6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xuXG4gICAgICAgIHN3aXRjaCAobGlzdFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0VORDpcbiAgICAgICAgICAgICAgICBsaXN0TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEU6XG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3RJbnB1dChsaXN0TGVuZ3RoLCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgYnl0ZXMgZm9yIGxpc3QnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBiYWNraW5nTGlzdC5hZGQodGhpcy5yZWFkU2hvcnRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX1NIT1JUOlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SW5wdXQoMiAqIGxpc3RMZW5ndGgsICdJbnZhbGlkIE5CVCBEYXRhOiBFeHBlY3RlZCBzaG9ydHMgZm9yIGxpc3QnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBiYWNraW5nTGlzdC5hZGQodGhpcy5yZWFkU2hvcnRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0lOVDpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdElucHV0KDQgKiBsaXN0TGVuZ3RoLCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgaW50cyBmb3IgbGlzdCcpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRJbnRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xPTkc6XG4gICAgICAgICAgICAgICAgdGhpcy5leHBlY3RJbnB1dCg4ICogbGlzdExlbmd0aCwgJ0ludmFsaWQgTkJUIERhdGE6IEV4cGVjdGVkIGxvbmdzIGZvciBsaXN0Jyk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2luZ0xpc3QuYWRkKHRoaXMucmVhZExvbmdWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0ZMT0FUOlxuICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0SW5wdXQoNCAqIGxpc3RMZW5ndGgsICdJbnZhbGlkIE5CVCBEYXRhOiBFeHBlY3RlZCBmbG9hdHMgZm9yIGxpc3QnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBiYWNraW5nTGlzdC5hZGQodGhpcy5yZWFkRmxvYXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0RPVUJMRTpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdElucHV0KDggKiBsaXN0TGVuZ3RoLCAnSW52YWxpZCBOQlQgRGF0YTogRXhwZWN0ZWQgZG91YmxlcyBmb3IgbGlzdCcpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWREb3VibGVWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEVfQVJSQVk6XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2luZ0xpc3QuYWRkKHRoaXMucmVhZEJ5dGVBcnJheVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfU1RSSU5HOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRTdHJpbmdWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xJU1Q6XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2luZ0xpc3QuYWRkKHRoaXMucmVhZFRhZ0xpc3RWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5EOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRUYWdDb21wb3VuZFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfSU5UX0FSUkFZOlxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tpbmdMaXN0LmFkZCh0aGlzLnJlYWRJbnRBcnJheVZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgTkJUIERhdGE6IFVua25vd24gdGFnIDwke2xpc3RUeXBlfT5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiYWNraW5nTGlzdDtcbiAgICB9XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCBCaW5hcnlTdHJlYW0gZnJvbSAnQGpzcHJpc21hcmluZS9qc2JpbmFyeXV0aWxzJztcbmltcG9ydCB7IEJ5dGVPcmRlciB9IGZyb20gJy4vQnl0ZU9yZGVyJztcbmltcG9ydCBCeXRlVmFsIGZyb20gJy4vdHlwZXMvQnl0ZVZhbCc7XG5pbXBvcnQgRG91YmxlVmFsIGZyb20gJy4vdHlwZXMvRG91YmxlVmFsJztcbmltcG9ydCBGbG9hdFZhbCBmcm9tICcuL3R5cGVzL0Zsb2F0VmFsJztcbmltcG9ydCBMb25nVmFsIGZyb20gJy4vdHlwZXMvTG9uZ1ZhbCc7XG5pbXBvcnQgTkJUUmVhZGVyIGZyb20gJy4vTkJUUmVhZGVyJztcbmltcG9ydCBOQlRXcml0ZXIgZnJvbSAnLi9OQlRXcml0ZXInO1xuaW1wb3J0IE51bWJlclZhbCBmcm9tICcuL3R5cGVzL051bWJlclZhbCc7XG5pbXBvcnQgU2hvcnRWYWwgZnJvbSAnLi90eXBlcy9TaG9ydFZhbCc7XG5pbXBvcnQgU3RyaW5nVmFsIGZyb20gJy4vdHlwZXMvU3RyaW5nVmFsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkJUVGFnQ29tcG91bmQge1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hpbGRyZW46IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRGcm9tRmlsZShwYXRoOiBzdHJpbmcsIGJ5dGVPcmRlcjogQnl0ZU9yZGVyKTogTkJUVGFnQ29tcG91bmQge1xuICAgICAgICByZXR1cm4gTkJUVGFnQ29tcG91bmQucmVhZEZyb21TdHJlYW0obmV3IEJpbmFyeVN0cmVhbShmcy5yZWFkRmlsZVN5bmMocGF0aCkpLCBieXRlT3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZEZyb21TdHJlYW0oaW5wdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIpOiBOQlRUYWdDb21wb3VuZCB7XG4gICAgICAgIGNvbnN0IHJlYWRlcjogTkJUUmVhZGVyID0gbmV3IE5CVFJlYWRlcihpbnB1dCwgYnl0ZU9yZGVyKTtcbiAgICAgICAgcmV0dXJuIHJlYWRlci5wYXJzZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgIShuYW1lID09PSB2YWx1ZS5nZXROYW1lKCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBhZGQgTkJUVGFnQ29tcG91bmQgd2l0aCBuYW1lICR7dmFsdWUuZ2V0TmFtZSgpfSBnaXZlbiBuYW1lICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ2hpbGQodGFnOiBOQlRUYWdDb21wb3VuZCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnNldCh0YWcuZ2V0TmFtZSgpISwgdGFnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGlzdChuYW1lOiBzdHJpbmcsIGluc2VydDogYm9vbGVhbik6IFNldDxhbnk+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc2VydCkge1xuICAgICAgICAgICAgY29uc3QgYmFja2luZ0xpc3Q6IFNldDxhbnk+ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdGhpcy5hZGRWYWx1ZShuYW1lLCBiYWNraW5nTGlzdCk7XG4gICAgICAgICAgICByZXR1cm4gYmFja2luZ0xpc3Q7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29tcG91bmQobmFtZTogc3RyaW5nLCBpbnNlcnQ6IGJvb2xlYW4pOiBOQlRUYWdDb21wb3VuZCB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmdldChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnNlcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvdW5kOiBOQlRUYWdDb21wb3VuZCA9IG5ldyBOQlRUYWdDb21wb3VuZCgpO1xuICAgICAgICAgICAgdGhpcy5hZGRWYWx1ZShuYW1lLCBjb21wb3VuZCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcG91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVUb1N0cmVhbShvdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd3JpdGVyOiBOQlRXcml0ZXIgPSBuZXcgTkJUV3JpdGVyKG91dCwgYnl0ZU9yZGVyKTtcbiAgICAgICAgd3JpdGVyLndyaXRlQ29tcG91bmQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5dGUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBCeXRlVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTaG9ydChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIFNob3J0VmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROdW1iZXIobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBOdW1iZXJWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExvbmcobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGJpZ2ludCk6IGJpZ2ludCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBMb25nVmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGbG9hdChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIEZsb2F0VmFsKS5nZXRWYWx1ZSgpIDogZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREb3VibGUobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmhhcyhuYW1lKSA/ICh0aGlzLmNoaWxkcmVuLmdldChuYW1lKSBhcyBEb3VibGVWYWwpLmdldFZhbHVlKCkgOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0cmluZyhuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uaGFzKG5hbWUpID8gKHRoaXMuY2hpbGRyZW4uZ2V0KG5hbWUpIGFzIFN0cmluZ1ZhbCkuZ2V0VmFsdWUoKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgYW55XT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5lbnRyaWVzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5zaXplO1xuICAgIH1cblxuICAgIC8vIFRoYW5rcyBzdGFja292ZXJmbG93ISBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTk0ODMzNS9ob3ctY2FuLWktY2hlY2staWYtdHdvLW1hcC1vYmplY3RzLWFyZS1lcXVhbFxuICAgIHB1YmxpYyBlcXVhbHModGhhdDogTkJUVGFnQ29tcG91bmQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uc2l6ZSAhPT0gdGhhdC5jaGlsZHJlbi5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgdGVzdFZhbCA9IHRoYXQuY2hpbGRyZW4uZ2V0KGtleSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0VmFsID09PSB1bmRlZmluZWQgJiYgIXRoYXQuY2hpbGRyZW4uaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCAmJiB0ZXN0VmFsIGluc3RhbmNlb2YgTkJUVGFnQ29tcG91bmQgJiYgIXZhbC5lcXVhbHModGVzdFZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBCeXRlVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBCeXRlVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEb3VibGVWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIERvdWJsZVZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgRmxvYXRWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIEZsb2F0VmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBMb25nVmFsICYmIHRlc3RWYWwgaW5zdGFuY2VvZiBMb25nVmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOdW1iZXJWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIE51bWJlclZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgU2hvcnRWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIFNob3J0VmFsICYmIHZhbC5nZXRWYWx1ZSgpICE9PSB0ZXN0VmFsLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBTdHJpbmdWYWwgJiYgdGVzdFZhbCBpbnN0YW5jZW9mIFN0cmluZ1ZhbCAmJiB2YWwuZ2V0VmFsdWUoKSAhPT0gdGVzdFZhbC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuIiwiaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IHsgQnl0ZU9yZGVyIH0gZnJvbSAnLi9CeXRlT3JkZXInO1xuaW1wb3J0IEJ5dGVWYWwgZnJvbSAnLi90eXBlcy9CeXRlVmFsJztcbmltcG9ydCBEb3VibGVWYWwgZnJvbSAnLi90eXBlcy9Eb3VibGVWYWwnO1xuaW1wb3J0IEZsb2F0VmFsIGZyb20gJy4vdHlwZXMvRmxvYXRWYWwnO1xuaW1wb3J0IExvbmdWYWwgZnJvbSAnLi90eXBlcy9Mb25nVmFsJztcbmltcG9ydCB7IE5CVERlZmluaXRpb25zIH0gZnJvbSAnLi9OQlREZWZpbml0aW9ucyc7XG5pbXBvcnQgTkJUVGFnQ29tcG91bmQgZnJvbSAnLi9OQlRUYWdDb21wb3VuZCc7XG5pbXBvcnQgTnVtYmVyVmFsIGZyb20gJy4vdHlwZXMvTnVtYmVyVmFsJztcbmltcG9ydCBTaG9ydFZhbCBmcm9tICcuL3R5cGVzL1Nob3J0VmFsJztcbmltcG9ydCBTdHJpbmdWYWwgZnJvbSAnLi90eXBlcy9TdHJpbmdWYWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOQlRXcml0ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3JkZXI6IEJ5dGVPcmRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1ZjogQmluYXJ5U3RyZWFtO1xuXG4gICAgcHJpdmF0ZSB1c2VWYXJpbnQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvdXQ6IEJpbmFyeVN0cmVhbSwgYnl0ZU9yZGVyOiBCeXRlT3JkZXIpIHtcbiAgICAgICAgdGhpcy5idWYgPSBvdXQ7XG4gICAgICAgIHRoaXMub3JkZXIgPSBieXRlT3JkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFVzZVZhcmludCh1c2VWYXJpbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy51c2VWYXJpbnQgPSB1c2VWYXJpbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlTGlzdChsaXN0OiBTZXQ8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlVGFnSGVhZGVyKE5CVERlZmluaXRpb25zLlRBR19MSVNULCAnJyk7XG4gICAgICAgIHRoaXMud3JpdGVMaXN0VmFsdWUobGlzdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlQ29tcG91bmQoY29tcG91bmQ6IE5CVFRhZ0NvbXBvdW5kKTogdm9pZCB7XG4gICAgICAgIHRoaXMud3JpdGVUYWdIZWFkZXIoTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5ELCBjb21wb3VuZC5nZXROYW1lKCkgPz8gJycpO1xuICAgICAgICB0aGlzLndyaXRlQ29tcG91bmRWYWx1ZShjb21wb3VuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZVRhZ0hlYWRlcih0eXBlOiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKHR5cGUpO1xuICAgICAgICB0aGlzLndyaXRlU3RyaW5nVmFsdWUobmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZVN0cmluZ1ZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbSh2YWx1ZSwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZVZhcmludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRWYXJJbnQoQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUoQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5idWYud3JpdGUoYnl0ZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlVmFyaW50KSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVCeXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1Zi53cml0ZUJ5dGUodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVNob3J0VmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRTaG9ydExFKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRTaG9ydCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlSW50ZWdlclZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudXNlVmFyaW50KSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZVZhckludCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRJbnRMRSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZVVuc2lnbmVkSW50KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVMb25nVmFsdWUodmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51c2VWYXJpbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVmFyTG9uZyh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlVW5zaWduZWRMb25nTEUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5idWYud3JpdGVVbnNpZ25lZExvbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUZsb2F0VmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcmRlciA9PT0gQnl0ZU9yZGVyLkxJVFRMRV9FTkRJQU4pIHtcbiAgICAgICAgICAgIHRoaXMuYnVmLndyaXRlRmxvYXRMRSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVEb3VibGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9yZGVyID09PSBCeXRlT3JkZXIuTElUVExFX0VORElBTikge1xuICAgICAgICAgICAgdGhpcy5idWYud3JpdGVEb3VibGVMRSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1Zi53cml0ZURvdWJsZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlQnl0ZUFycmF5VmFsdWUodmFsdWU6IEJ1ZmZlcik6IHZvaWQge1xuICAgICAgICB0aGlzLndyaXRlSW50ZWdlclZhbHVlKHZhbHVlLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuYnVmLndyaXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlSW50ZWdlckFycmF5VmFsdWUodmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMud3JpdGVJbnRlZ2VyVmFsdWUodmFsdWUubGVuZ3RoKTtcbiAgICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZSh2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUxpc3RWYWx1ZSh2YWx1ZTogU2V0PGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlLnNpemUgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsaXN0TmJ0VHlwZSA9IHRoaXMuZ2V0TkJUVHlwZUZyb21WYWx1ZSh2YWx1ZS5lbnRyaWVzKCkubmV4dCgpLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVCeXRlVmFsdWUobGlzdE5idFR5cGUpO1xuICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZSh2YWx1ZS5zaXplKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmF3VmFsdWUgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpc3ROYnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0JZVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKHJhd1ZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX1NIT1JUOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUocmF3VmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfSU5UOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZShyYXdWYWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19MT05HOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUxvbmdWYWx1ZShyYXdWYWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19GTE9BVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVGbG9hdFZhbHVlKHJhd1ZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0RPVUJMRTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVEb3VibGVWYWx1ZShyYXdWYWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19CWVRFX0FSUkFZOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZURvdWJsZVZhbHVlKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19TVFJJTkc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlU3RyaW5nVmFsdWUocmF3VmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfTElTVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVMaXN0VmFsdWUocmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0NPTVBPVU5EOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUNvbXBvdW5kVmFsdWUocmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0lOVF9BUlJBWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVJbnRlZ2VyQXJyYXlWYWx1ZShyYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBOQlRUYWdUeXBlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGVWYWx1ZShOQlREZWZpbml0aW9ucy5UQUdfQllURSk7XG4gICAgICAgICAgICB0aGlzLndyaXRlSW50ZWdlclZhbHVlKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3cml0ZUNvbXBvdW5kVmFsdWUoY29tcG91bmQ6IE5CVFRhZ0NvbXBvdW5kKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGNvbXBvdW5kLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgbmJ0VHlwZSA9IHRoaXMuZ2V0TkJUVHlwZUZyb21WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLndyaXRlVGFnSGVhZGVyKG5idFR5cGUsIGtleSk7XG4gICAgICAgICAgICBzd2l0Y2ggKG5idFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19CWVRFOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlQnl0ZVZhbHVlKHZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19TSE9SVDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVNob3J0VmFsdWUodmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0lOVDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUludGVnZXJWYWx1ZSh2YWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfTE9ORzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUxvbmdWYWx1ZSh2YWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfRkxPQVQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVGbG9hdFZhbHVlKHZhbHVlLmdldFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19ET1VCTEU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVEb3VibGVWYWx1ZSh2YWx1ZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfQllURV9BUlJBWTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUJ5dGVBcnJheVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBOQlREZWZpbml0aW9ucy5UQUdfU1RSSU5HOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlU3RyaW5nVmFsdWUodmFsdWUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTkJURGVmaW5pdGlvbnMuVEFHX0xJU1Q6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVMaXN0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19DT01QT1VORDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZUNvbXBvdW5kVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIE5CVERlZmluaXRpb25zLlRBR19JTlRfQVJSQVk6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVJbnRlZ2VyVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgTkJUVGFnVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZUJ5dGVWYWx1ZShOQlREZWZpbml0aW9ucy5UQUdfRU5EKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5CVFR5cGVGcm9tVmFsdWUodmFsdWU6IGFueSk6IE5CVERlZmluaXRpb25zIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQnl0ZVZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19CWVRFO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNob3J0VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX1NIT1JUO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlclZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19JTlQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9uZ1ZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19MT05HO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0VmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX0ZMT0FUO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERvdWJsZVZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19ET1VCTEU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX0JZVEVfQVJSQVk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nVmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gTkJURGVmaW5pdGlvbnMuVEFHX1NUUklORztcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBOQlREZWZpbml0aW9ucy5UQUdfTElTVDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBOQlRUYWdDb21wb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIE5CVERlZmluaXRpb25zLlRBR19DT01QT1VORDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBOQlREZWZpbml0aW9ucy5UQUdfSU5UX0FSUkFZO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBOQlQgRGF0YTogQ2Fubm90IGRlZHVjZSBOQlQgdHlwZSBvZiBjbGFzcyAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9ICgke3ZhbHVlfSlgKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOlsiTkJUU3RyZWFtUmVhZGVyIiwiTkJURGVmaW5pdGlvbnMiLCJBbGxvY2F0aW9uIiwiQmluYXJ5U3RyZWFtIiwiZnMiLCJCeXRlVmFsIiwiRG91YmxlVmFsIiwiRmxv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
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+
5
+ require('./ByteOrder-C8lF6w2G.cjs');
6
+ require('./types/ByteVal.cjs.js');
7
+ require('./types/DoubleVal.cjs.js');
8
+ require('./types/FloatVal.cjs.js');
9
+ require('./types/LongVal.cjs.js');
10
+ require('./NBTDefinitions-DUnu0laJ.cjs');
11
+ const NBTReader = require('./NBTWriter-KG_h2i_E.cjs');
12
+ require('./types/NumberVal.cjs.js');
13
+ require('./types/ShortVal.cjs.js');
14
+ require('./types/StringVal.cjs.js');
15
+ require('node:fs');
16
+ require('@jsprismarine/jsbinaryutils');
17
+ require('./Allocation.cjs.js');
18
+ require('./NBTStreamReader.cjs.js');
19
+
20
+
21
+
22
+ exports.default = NBTReader.NBTWriter;
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkJUV3JpdGVyLmNqcy5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==