tedious 16.5.0 → 16.6.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.
- package/lib/metadata-parser.js +361 -241
- package/lib/metadata-parser.js.map +1 -1
- package/lib/token/colmetadata-token-parser.js +103 -74
- package/lib/token/colmetadata-token-parser.js.map +1 -1
- package/lib/token/done-token-parser.js +52 -40
- package/lib/token/done-token-parser.js.map +1 -1
- package/lib/token/env-change-token-parser.js +110 -81
- package/lib/token/env-change-token-parser.js.map +1 -1
- package/lib/token/feature-ext-ack-parser.js +30 -22
- package/lib/token/feature-ext-ack-parser.js.map +1 -1
- package/lib/token/fedauth-info-parser.js +47 -30
- package/lib/token/fedauth-info-parser.js.map +1 -1
- package/lib/token/helpers.js +205 -0
- package/lib/token/helpers.js.map +1 -0
- package/lib/token/infoerror-token-parser.js +69 -36
- package/lib/token/infoerror-token-parser.js.map +1 -1
- package/lib/token/loginack-token-parser.js +59 -31
- package/lib/token/loginack-token-parser.js.map +1 -1
- package/lib/token/nbcrow-token-parser.js +60 -23
- package/lib/token/nbcrow-token-parser.js.map +1 -1
- package/lib/token/order-token-parser.js +22 -20
- package/lib/token/order-token-parser.js.map +1 -1
- package/lib/token/returnstatus-token-parser.js +9 -5
- package/lib/token/returnstatus-token-parser.js.map +1 -1
- package/lib/token/returnvalue-token-parser.js +79 -22
- package/lib/token/returnvalue-token-parser.js.map +1 -1
- package/lib/token/row-token-parser.js +50 -20
- package/lib/token/row-token-parser.js.map +1 -1
- package/lib/token/sspi-token-parser.js +14 -5
- package/lib/token/sspi-token-parser.js.map +1 -1
- package/lib/token/stream-parser.js +292 -324
- package/lib/token/stream-parser.js.map +1 -1
- package/lib/token/token.js +1 -1
- package/lib/token/token.js.map +1 -1
- package/lib/value-parser.js +655 -438
- package/lib/value-parser.js.map +1 -1
- package/package.json +1 -1
package/lib/value-parser.js
CHANGED
|
@@ -3,594 +3,811 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.isPLPStream = isPLPStream;
|
|
7
|
+
exports.readPLPStream = readPLPStream;
|
|
8
|
+
exports.readValue = readValue;
|
|
7
9
|
var _metadataParser = require("./metadata-parser");
|
|
8
10
|
var _dataType = require("./data-type");
|
|
9
11
|
var _iconvLite = _interopRequireDefault(require("iconv-lite"));
|
|
10
12
|
var _sprintfJs = require("sprintf-js");
|
|
11
13
|
var _guidParser = require("./guid-parser");
|
|
14
|
+
var _helpers = require("./token/helpers");
|
|
12
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
16
|
const NULL = (1 << 16) - 1;
|
|
14
17
|
const MAX = (1 << 16) - 1;
|
|
15
18
|
const THREE_AND_A_THIRD = 3 + 1 / 3;
|
|
16
19
|
const MONEY_DIVISOR = 10000;
|
|
17
|
-
const PLP_NULL =
|
|
18
|
-
const UNKNOWN_PLP_LEN =
|
|
20
|
+
const PLP_NULL = 0xFFFFFFFFFFFFFFFFn;
|
|
21
|
+
const UNKNOWN_PLP_LEN = 0xFFFFFFFFFFFFFFFEn;
|
|
19
22
|
const DEFAULT_ENCODING = 'utf8';
|
|
20
|
-
function readTinyInt(
|
|
21
|
-
|
|
23
|
+
function readTinyInt(buf, offset) {
|
|
24
|
+
return (0, _helpers.readUInt8)(buf, offset);
|
|
22
25
|
}
|
|
23
|
-
function readSmallInt(
|
|
24
|
-
|
|
26
|
+
function readSmallInt(buf, offset) {
|
|
27
|
+
return (0, _helpers.readInt16LE)(buf, offset);
|
|
25
28
|
}
|
|
26
|
-
function readInt(
|
|
27
|
-
|
|
29
|
+
function readInt(buf, offset) {
|
|
30
|
+
return (0, _helpers.readInt32LE)(buf, offset);
|
|
28
31
|
}
|
|
29
|
-
function readBigInt(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
function readBigInt(buf, offset) {
|
|
33
|
+
let value;
|
|
34
|
+
({
|
|
35
|
+
offset,
|
|
36
|
+
value
|
|
37
|
+
} = (0, _helpers.readBigInt64LE)(buf, offset));
|
|
38
|
+
return new _helpers.Result(value.toString(), offset);
|
|
33
39
|
}
|
|
34
|
-
function readReal(
|
|
35
|
-
|
|
40
|
+
function readReal(buf, offset) {
|
|
41
|
+
return (0, _helpers.readFloatLE)(buf, offset);
|
|
36
42
|
}
|
|
37
|
-
function readFloat(
|
|
38
|
-
|
|
43
|
+
function readFloat(buf, offset) {
|
|
44
|
+
return (0, _helpers.readDoubleLE)(buf, offset);
|
|
39
45
|
}
|
|
40
|
-
function readSmallMoney(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
function readSmallMoney(buf, offset) {
|
|
47
|
+
let value;
|
|
48
|
+
({
|
|
49
|
+
offset,
|
|
50
|
+
value
|
|
51
|
+
} = (0, _helpers.readInt32LE)(buf, offset));
|
|
52
|
+
return new _helpers.Result(value / MONEY_DIVISOR, offset);
|
|
44
53
|
}
|
|
45
|
-
function readMoney(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
});
|
|
54
|
+
function readMoney(buf, offset) {
|
|
55
|
+
let high;
|
|
56
|
+
({
|
|
57
|
+
offset,
|
|
58
|
+
value: high
|
|
59
|
+
} = (0, _helpers.readInt32LE)(buf, offset));
|
|
60
|
+
let low;
|
|
61
|
+
({
|
|
62
|
+
offset,
|
|
63
|
+
value: low
|
|
64
|
+
} = (0, _helpers.readUInt32LE)(buf, offset));
|
|
65
|
+
return new _helpers.Result((low + 0x100000000 * high) / MONEY_DIVISOR, offset);
|
|
51
66
|
}
|
|
52
|
-
function readBit(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
67
|
+
function readBit(buf, offset) {
|
|
68
|
+
let value;
|
|
69
|
+
({
|
|
70
|
+
offset,
|
|
71
|
+
value
|
|
72
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
73
|
+
return new _helpers.Result(!!value, offset);
|
|
56
74
|
}
|
|
57
|
-
function
|
|
75
|
+
function readValue(buf, offset, metadata, options) {
|
|
58
76
|
const type = metadata.type;
|
|
59
77
|
switch (type.name) {
|
|
60
78
|
case 'Null':
|
|
61
|
-
return
|
|
79
|
+
return new _helpers.Result(null, offset);
|
|
62
80
|
case 'TinyInt':
|
|
63
|
-
|
|
81
|
+
{
|
|
82
|
+
return readTinyInt(buf, offset);
|
|
83
|
+
}
|
|
64
84
|
case 'SmallInt':
|
|
65
|
-
|
|
85
|
+
{
|
|
86
|
+
return readSmallInt(buf, offset);
|
|
87
|
+
}
|
|
66
88
|
case 'Int':
|
|
67
|
-
|
|
89
|
+
{
|
|
90
|
+
return readInt(buf, offset);
|
|
91
|
+
}
|
|
68
92
|
case 'BigInt':
|
|
69
|
-
|
|
93
|
+
{
|
|
94
|
+
return readBigInt(buf, offset);
|
|
95
|
+
}
|
|
70
96
|
case 'IntN':
|
|
71
|
-
|
|
97
|
+
{
|
|
98
|
+
let dataLength;
|
|
99
|
+
({
|
|
100
|
+
offset,
|
|
101
|
+
value: dataLength
|
|
102
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
72
103
|
switch (dataLength) {
|
|
73
104
|
case 0:
|
|
74
|
-
return
|
|
105
|
+
return new _helpers.Result(null, offset);
|
|
75
106
|
case 1:
|
|
76
|
-
return readTinyInt(
|
|
107
|
+
return readTinyInt(buf, offset);
|
|
77
108
|
case 2:
|
|
78
|
-
return readSmallInt(
|
|
109
|
+
return readSmallInt(buf, offset);
|
|
79
110
|
case 4:
|
|
80
|
-
return readInt(
|
|
111
|
+
return readInt(buf, offset);
|
|
81
112
|
case 8:
|
|
82
|
-
return readBigInt(
|
|
113
|
+
return readBigInt(buf, offset);
|
|
83
114
|
default:
|
|
84
115
|
throw new Error('Unsupported dataLength ' + dataLength + ' for IntN');
|
|
85
116
|
}
|
|
86
|
-
}
|
|
117
|
+
}
|
|
87
118
|
case 'Real':
|
|
88
|
-
|
|
119
|
+
{
|
|
120
|
+
return readReal(buf, offset);
|
|
121
|
+
}
|
|
89
122
|
case 'Float':
|
|
90
|
-
|
|
123
|
+
{
|
|
124
|
+
return readFloat(buf, offset);
|
|
125
|
+
}
|
|
91
126
|
case 'FloatN':
|
|
92
|
-
|
|
127
|
+
{
|
|
128
|
+
let dataLength;
|
|
129
|
+
({
|
|
130
|
+
offset,
|
|
131
|
+
value: dataLength
|
|
132
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
93
133
|
switch (dataLength) {
|
|
94
134
|
case 0:
|
|
95
|
-
return
|
|
135
|
+
return new _helpers.Result(null, offset);
|
|
96
136
|
case 4:
|
|
97
|
-
return readReal(
|
|
137
|
+
return readReal(buf, offset);
|
|
98
138
|
case 8:
|
|
99
|
-
return readFloat(
|
|
139
|
+
return readFloat(buf, offset);
|
|
100
140
|
default:
|
|
101
141
|
throw new Error('Unsupported dataLength ' + dataLength + ' for FloatN');
|
|
102
142
|
}
|
|
103
|
-
}
|
|
143
|
+
}
|
|
104
144
|
case 'SmallMoney':
|
|
105
|
-
|
|
145
|
+
{
|
|
146
|
+
return readSmallMoney(buf, offset);
|
|
147
|
+
}
|
|
106
148
|
case 'Money':
|
|
107
|
-
return readMoney(
|
|
149
|
+
return readMoney(buf, offset);
|
|
108
150
|
case 'MoneyN':
|
|
109
|
-
|
|
151
|
+
{
|
|
152
|
+
let dataLength;
|
|
153
|
+
({
|
|
154
|
+
offset,
|
|
155
|
+
value: dataLength
|
|
156
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
110
157
|
switch (dataLength) {
|
|
111
158
|
case 0:
|
|
112
|
-
return
|
|
159
|
+
return new _helpers.Result(null, offset);
|
|
113
160
|
case 4:
|
|
114
|
-
return readSmallMoney(
|
|
161
|
+
return readSmallMoney(buf, offset);
|
|
115
162
|
case 8:
|
|
116
|
-
return readMoney(
|
|
163
|
+
return readMoney(buf, offset);
|
|
117
164
|
default:
|
|
118
165
|
throw new Error('Unsupported dataLength ' + dataLength + ' for MoneyN');
|
|
119
166
|
}
|
|
120
|
-
}
|
|
167
|
+
}
|
|
121
168
|
case 'Bit':
|
|
122
|
-
|
|
169
|
+
{
|
|
170
|
+
return readBit(buf, offset);
|
|
171
|
+
}
|
|
123
172
|
case 'BitN':
|
|
124
|
-
|
|
173
|
+
{
|
|
174
|
+
let dataLength;
|
|
175
|
+
({
|
|
176
|
+
offset,
|
|
177
|
+
value: dataLength
|
|
178
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
125
179
|
switch (dataLength) {
|
|
126
180
|
case 0:
|
|
127
|
-
return
|
|
181
|
+
return new _helpers.Result(null, offset);
|
|
128
182
|
case 1:
|
|
129
|
-
return readBit(
|
|
183
|
+
return readBit(buf, offset);
|
|
130
184
|
default:
|
|
131
185
|
throw new Error('Unsupported dataLength ' + dataLength + ' for BitN');
|
|
132
186
|
}
|
|
133
|
-
}
|
|
187
|
+
}
|
|
134
188
|
case 'VarChar':
|
|
135
189
|
case 'Char':
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
190
|
+
{
|
|
191
|
+
const codepage = metadata.collation.codepage;
|
|
192
|
+
let dataLength;
|
|
193
|
+
({
|
|
194
|
+
offset,
|
|
195
|
+
value: dataLength
|
|
196
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
197
|
+
if (dataLength === NULL) {
|
|
198
|
+
return new _helpers.Result(null, offset);
|
|
199
|
+
}
|
|
200
|
+
return readChars(buf, offset, dataLength, codepage);
|
|
146
201
|
}
|
|
147
202
|
case 'NVarChar':
|
|
148
203
|
case 'NChar':
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
204
|
+
{
|
|
205
|
+
let dataLength;
|
|
206
|
+
({
|
|
207
|
+
offset,
|
|
208
|
+
value: dataLength
|
|
209
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
210
|
+
if (dataLength === NULL) {
|
|
211
|
+
return new _helpers.Result(null, offset);
|
|
212
|
+
}
|
|
213
|
+
return readNChars(buf, offset, dataLength);
|
|
158
214
|
}
|
|
159
215
|
case 'VarBinary':
|
|
160
216
|
case 'Binary':
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
217
|
+
{
|
|
218
|
+
let dataLength;
|
|
219
|
+
({
|
|
220
|
+
offset,
|
|
221
|
+
value: dataLength
|
|
222
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
223
|
+
if (dataLength === NULL) {
|
|
224
|
+
return new _helpers.Result(null, offset);
|
|
225
|
+
}
|
|
226
|
+
return readBinary(buf, offset, dataLength);
|
|
170
227
|
}
|
|
171
228
|
case 'Text':
|
|
172
|
-
|
|
229
|
+
{
|
|
230
|
+
let textPointerLength;
|
|
231
|
+
({
|
|
232
|
+
offset,
|
|
233
|
+
value: textPointerLength
|
|
234
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
173
235
|
if (textPointerLength === 0) {
|
|
174
|
-
return
|
|
236
|
+
return new _helpers.Result(null, offset);
|
|
175
237
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
238
|
+
|
|
239
|
+
// Textpointer
|
|
240
|
+
({
|
|
241
|
+
offset
|
|
242
|
+
} = readBinary(buf, offset, textPointerLength));
|
|
243
|
+
|
|
244
|
+
// Timestamp
|
|
245
|
+
({
|
|
246
|
+
offset
|
|
247
|
+
} = readBinary(buf, offset, 8));
|
|
248
|
+
let dataLength;
|
|
249
|
+
({
|
|
250
|
+
offset,
|
|
251
|
+
value: dataLength
|
|
252
|
+
} = (0, _helpers.readUInt32LE)(buf, offset));
|
|
253
|
+
return readChars(buf, offset, dataLength, metadata.collation.codepage);
|
|
254
|
+
}
|
|
184
255
|
case 'NText':
|
|
185
|
-
|
|
256
|
+
{
|
|
257
|
+
let textPointerLength;
|
|
258
|
+
({
|
|
259
|
+
offset,
|
|
260
|
+
value: textPointerLength
|
|
261
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
186
262
|
if (textPointerLength === 0) {
|
|
187
|
-
return
|
|
263
|
+
return new _helpers.Result(null, offset);
|
|
188
264
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
265
|
+
|
|
266
|
+
// Textpointer
|
|
267
|
+
({
|
|
268
|
+
offset
|
|
269
|
+
} = readBinary(buf, offset, textPointerLength));
|
|
270
|
+
|
|
271
|
+
// Timestamp
|
|
272
|
+
({
|
|
273
|
+
offset
|
|
274
|
+
} = readBinary(buf, offset, 8));
|
|
275
|
+
let dataLength;
|
|
276
|
+
({
|
|
277
|
+
offset,
|
|
278
|
+
value: dataLength
|
|
279
|
+
} = (0, _helpers.readUInt32LE)(buf, offset));
|
|
280
|
+
return readNChars(buf, offset, dataLength);
|
|
281
|
+
}
|
|
197
282
|
case 'Image':
|
|
198
|
-
|
|
283
|
+
{
|
|
284
|
+
let textPointerLength;
|
|
285
|
+
({
|
|
286
|
+
offset,
|
|
287
|
+
value: textPointerLength
|
|
288
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
199
289
|
if (textPointerLength === 0) {
|
|
200
|
-
return
|
|
290
|
+
return new _helpers.Result(null, offset);
|
|
201
291
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
292
|
+
|
|
293
|
+
// Textpointer
|
|
294
|
+
({
|
|
295
|
+
offset
|
|
296
|
+
} = readBinary(buf, offset, textPointerLength));
|
|
297
|
+
|
|
298
|
+
// Timestamp
|
|
299
|
+
({
|
|
300
|
+
offset
|
|
301
|
+
} = readBinary(buf, offset, 8));
|
|
302
|
+
let dataLength;
|
|
303
|
+
({
|
|
304
|
+
offset,
|
|
305
|
+
value: dataLength
|
|
306
|
+
} = (0, _helpers.readUInt32LE)(buf, offset));
|
|
307
|
+
return readBinary(buf, offset, dataLength);
|
|
308
|
+
}
|
|
212
309
|
case 'SmallDateTime':
|
|
213
|
-
|
|
310
|
+
{
|
|
311
|
+
return readSmallDateTime(buf, offset, options.useUTC);
|
|
312
|
+
}
|
|
214
313
|
case 'DateTime':
|
|
215
|
-
|
|
314
|
+
{
|
|
315
|
+
return readDateTime(buf, offset, options.useUTC);
|
|
316
|
+
}
|
|
216
317
|
case 'DateTimeN':
|
|
217
|
-
|
|
318
|
+
{
|
|
319
|
+
let dataLength;
|
|
320
|
+
({
|
|
321
|
+
offset,
|
|
322
|
+
value: dataLength
|
|
323
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
218
324
|
switch (dataLength) {
|
|
219
325
|
case 0:
|
|
220
|
-
return
|
|
326
|
+
return new _helpers.Result(null, offset);
|
|
221
327
|
case 4:
|
|
222
|
-
return readSmallDateTime(
|
|
328
|
+
return readSmallDateTime(buf, offset, options.useUTC);
|
|
223
329
|
case 8:
|
|
224
|
-
return readDateTime(
|
|
330
|
+
return readDateTime(buf, offset, options.useUTC);
|
|
225
331
|
default:
|
|
226
332
|
throw new Error('Unsupported dataLength ' + dataLength + ' for DateTimeN');
|
|
227
333
|
}
|
|
228
|
-
}
|
|
334
|
+
}
|
|
229
335
|
case 'Time':
|
|
230
|
-
|
|
336
|
+
{
|
|
337
|
+
let dataLength;
|
|
338
|
+
({
|
|
339
|
+
offset,
|
|
340
|
+
value: dataLength
|
|
341
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
231
342
|
if (dataLength === 0) {
|
|
232
|
-
return
|
|
233
|
-
} else {
|
|
234
|
-
return readTime(parser, dataLength, metadata.scale, options.useUTC, callback);
|
|
343
|
+
return new _helpers.Result(null, offset);
|
|
235
344
|
}
|
|
236
|
-
|
|
345
|
+
return readTime(buf, offset, dataLength, metadata.scale, options.useUTC);
|
|
346
|
+
}
|
|
237
347
|
case 'Date':
|
|
238
|
-
|
|
348
|
+
{
|
|
349
|
+
let dataLength;
|
|
350
|
+
({
|
|
351
|
+
offset,
|
|
352
|
+
value: dataLength
|
|
353
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
239
354
|
if (dataLength === 0) {
|
|
240
|
-
return
|
|
241
|
-
} else {
|
|
242
|
-
return readDate(parser, options.useUTC, callback);
|
|
355
|
+
return new _helpers.Result(null, offset);
|
|
243
356
|
}
|
|
244
|
-
|
|
357
|
+
return readDate(buf, offset, options.useUTC);
|
|
358
|
+
}
|
|
245
359
|
case 'DateTime2':
|
|
246
|
-
|
|
360
|
+
{
|
|
361
|
+
let dataLength;
|
|
362
|
+
({
|
|
363
|
+
offset,
|
|
364
|
+
value: dataLength
|
|
365
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
247
366
|
if (dataLength === 0) {
|
|
248
|
-
return
|
|
249
|
-
} else {
|
|
250
|
-
return readDateTime2(parser, dataLength, metadata.scale, options.useUTC, callback);
|
|
367
|
+
return new _helpers.Result(null, offset);
|
|
251
368
|
}
|
|
252
|
-
|
|
369
|
+
return readDateTime2(buf, offset, dataLength, metadata.scale, options.useUTC);
|
|
370
|
+
}
|
|
253
371
|
case 'DateTimeOffset':
|
|
254
|
-
|
|
372
|
+
{
|
|
373
|
+
let dataLength;
|
|
374
|
+
({
|
|
375
|
+
offset,
|
|
376
|
+
value: dataLength
|
|
377
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
255
378
|
if (dataLength === 0) {
|
|
256
|
-
return
|
|
257
|
-
} else {
|
|
258
|
-
return readDateTimeOffset(parser, dataLength, metadata.scale, callback);
|
|
379
|
+
return new _helpers.Result(null, offset);
|
|
259
380
|
}
|
|
260
|
-
|
|
381
|
+
return readDateTimeOffset(buf, offset, dataLength, metadata.scale);
|
|
382
|
+
}
|
|
261
383
|
case 'NumericN':
|
|
262
384
|
case 'DecimalN':
|
|
263
|
-
|
|
385
|
+
{
|
|
386
|
+
let dataLength;
|
|
387
|
+
({
|
|
388
|
+
offset,
|
|
389
|
+
value: dataLength
|
|
390
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
264
391
|
if (dataLength === 0) {
|
|
265
|
-
return
|
|
266
|
-
} else {
|
|
267
|
-
return readNumeric(parser, dataLength, metadata.precision, metadata.scale, callback);
|
|
392
|
+
return new _helpers.Result(null, offset);
|
|
268
393
|
}
|
|
269
|
-
|
|
394
|
+
return readNumeric(buf, offset, dataLength, metadata.precision, metadata.scale);
|
|
395
|
+
}
|
|
270
396
|
case 'UniqueIdentifier':
|
|
271
|
-
|
|
397
|
+
{
|
|
398
|
+
let dataLength;
|
|
399
|
+
({
|
|
400
|
+
offset,
|
|
401
|
+
value: dataLength
|
|
402
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
272
403
|
switch (dataLength) {
|
|
273
404
|
case 0:
|
|
274
|
-
return
|
|
405
|
+
return new _helpers.Result(null, offset);
|
|
275
406
|
case 0x10:
|
|
276
|
-
return readUniqueIdentifier(
|
|
407
|
+
return readUniqueIdentifier(buf, offset, options);
|
|
277
408
|
default:
|
|
278
409
|
throw new Error((0, _sprintfJs.sprintf)('Unsupported guid size %d', dataLength - 1));
|
|
279
410
|
}
|
|
280
|
-
}
|
|
281
|
-
case 'UDT':
|
|
282
|
-
return readMaxBinary(parser, callback);
|
|
411
|
+
}
|
|
283
412
|
case 'Variant':
|
|
284
|
-
|
|
413
|
+
{
|
|
414
|
+
let dataLength;
|
|
415
|
+
({
|
|
416
|
+
offset,
|
|
417
|
+
value: dataLength
|
|
418
|
+
} = (0, _helpers.readUInt32LE)(buf, offset));
|
|
285
419
|
if (dataLength === 0) {
|
|
286
|
-
return
|
|
420
|
+
return new _helpers.Result(null, offset);
|
|
287
421
|
}
|
|
288
|
-
readVariant(
|
|
289
|
-
}
|
|
422
|
+
return readVariant(buf, offset, options, dataLength);
|
|
423
|
+
}
|
|
290
424
|
default:
|
|
291
|
-
|
|
425
|
+
{
|
|
426
|
+
throw new Error('Invalid type!');
|
|
427
|
+
}
|
|
292
428
|
}
|
|
293
429
|
}
|
|
294
|
-
function
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
430
|
+
function isPLPStream(metadata) {
|
|
431
|
+
switch (metadata.type.name) {
|
|
432
|
+
case 'VarChar':
|
|
433
|
+
case 'NVarChar':
|
|
434
|
+
case 'VarBinary':
|
|
435
|
+
{
|
|
436
|
+
return metadata.dataLength === MAX;
|
|
437
|
+
}
|
|
438
|
+
case 'Xml':
|
|
439
|
+
{
|
|
440
|
+
return true;
|
|
441
|
+
}
|
|
442
|
+
case 'UDT':
|
|
443
|
+
{
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
298
447
|
}
|
|
299
|
-
function
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
readValue = parser.readUNumeric64LE;
|
|
307
|
-
} else if (dataLength === 13) {
|
|
308
|
-
readValue = parser.readUNumeric96LE;
|
|
309
|
-
} else if (dataLength === 17) {
|
|
310
|
-
readValue = parser.readUNumeric128LE;
|
|
311
|
-
} else {
|
|
312
|
-
throw new Error((0, _sprintfJs.sprintf)('Unsupported numeric dataLength %d', dataLength));
|
|
313
|
-
}
|
|
314
|
-
readValue.call(parser, value => {
|
|
315
|
-
callback(value * sign / Math.pow(10, scale));
|
|
316
|
-
});
|
|
317
|
-
});
|
|
448
|
+
function readUniqueIdentifier(buf, offset, options) {
|
|
449
|
+
let data;
|
|
450
|
+
({
|
|
451
|
+
value: data,
|
|
452
|
+
offset
|
|
453
|
+
} = readBinary(buf, offset, 0x10));
|
|
454
|
+
return new _helpers.Result(options.lowerCaseGuids ? (0, _guidParser.bufferToLowerCaseGuid)(data) : (0, _guidParser.bufferToUpperCaseGuid)(data), offset);
|
|
318
455
|
}
|
|
319
|
-
function
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
case 'Time':
|
|
352
|
-
return parser.readUInt8(scale => {
|
|
353
|
-
return readTime(parser, dataLength, scale, options.useUTC, callback);
|
|
354
|
-
});
|
|
355
|
-
case 'DateTime2':
|
|
356
|
-
return parser.readUInt8(scale => {
|
|
357
|
-
return readDateTime2(parser, dataLength, scale, options.useUTC, callback);
|
|
358
|
-
});
|
|
359
|
-
case 'DateTimeOffset':
|
|
360
|
-
return parser.readUInt8(scale => {
|
|
361
|
-
return readDateTimeOffset(parser, dataLength, scale, callback);
|
|
362
|
-
});
|
|
363
|
-
case 'VarBinary':
|
|
364
|
-
case 'Binary':
|
|
365
|
-
return parser.readUInt16LE(_maxLength => {
|
|
366
|
-
readBinary(parser, dataLength, callback);
|
|
367
|
-
});
|
|
368
|
-
case 'NumericN':
|
|
369
|
-
case 'DecimalN':
|
|
370
|
-
return parser.readUInt8(precision => {
|
|
371
|
-
parser.readUInt8(scale => {
|
|
372
|
-
readNumeric(parser, dataLength, precision, scale, callback);
|
|
373
|
-
});
|
|
374
|
-
});
|
|
375
|
-
case 'VarChar':
|
|
376
|
-
case 'Char':
|
|
377
|
-
return parser.readUInt16LE(_maxLength => {
|
|
378
|
-
(0, _metadataParser.readCollation)(parser, collation => {
|
|
379
|
-
readChars(parser, dataLength, collation.codepage, callback);
|
|
380
|
-
});
|
|
381
|
-
});
|
|
382
|
-
case 'NVarChar':
|
|
383
|
-
case 'NChar':
|
|
384
|
-
return parser.readUInt16LE(_maxLength => {
|
|
385
|
-
(0, _metadataParser.readCollation)(parser, _collation => {
|
|
386
|
-
readNChars(parser, dataLength, callback);
|
|
387
|
-
});
|
|
388
|
-
});
|
|
389
|
-
default:
|
|
390
|
-
throw new Error('Invalid type!');
|
|
391
|
-
}
|
|
392
|
-
});
|
|
393
|
-
});
|
|
456
|
+
function readNumeric(buf, offset, dataLength, _precision, scale) {
|
|
457
|
+
let sign;
|
|
458
|
+
({
|
|
459
|
+
offset,
|
|
460
|
+
value: sign
|
|
461
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
462
|
+
sign = sign === 1 ? 1 : -1;
|
|
463
|
+
let value;
|
|
464
|
+
if (dataLength === 5) {
|
|
465
|
+
({
|
|
466
|
+
offset,
|
|
467
|
+
value
|
|
468
|
+
} = (0, _helpers.readUInt32LE)(buf, offset));
|
|
469
|
+
} else if (dataLength === 9) {
|
|
470
|
+
({
|
|
471
|
+
offset,
|
|
472
|
+
value
|
|
473
|
+
} = (0, _helpers.readUNumeric64LE)(buf, offset));
|
|
474
|
+
} else if (dataLength === 13) {
|
|
475
|
+
({
|
|
476
|
+
offset,
|
|
477
|
+
value
|
|
478
|
+
} = (0, _helpers.readUNumeric96LE)(buf, offset));
|
|
479
|
+
} else if (dataLength === 17) {
|
|
480
|
+
({
|
|
481
|
+
offset,
|
|
482
|
+
value
|
|
483
|
+
} = (0, _helpers.readUNumeric128LE)(buf, offset));
|
|
484
|
+
} else {
|
|
485
|
+
throw new Error((0, _sprintfJs.sprintf)('Unsupported numeric dataLength %d', dataLength));
|
|
486
|
+
}
|
|
487
|
+
return new _helpers.Result(value * sign / Math.pow(10, scale), offset);
|
|
394
488
|
}
|
|
395
|
-
function
|
|
396
|
-
|
|
489
|
+
function readVariant(buf, offset, options, dataLength) {
|
|
490
|
+
let baseType;
|
|
491
|
+
({
|
|
492
|
+
value: baseType,
|
|
493
|
+
offset
|
|
494
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
495
|
+
const type = _dataType.TYPE[baseType];
|
|
496
|
+
let propBytes;
|
|
497
|
+
({
|
|
498
|
+
value: propBytes,
|
|
499
|
+
offset
|
|
500
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
501
|
+
dataLength = dataLength - propBytes - 2;
|
|
502
|
+
switch (type.name) {
|
|
503
|
+
case 'UniqueIdentifier':
|
|
504
|
+
return readUniqueIdentifier(buf, offset, options);
|
|
505
|
+
case 'Bit':
|
|
506
|
+
return readBit(buf, offset);
|
|
507
|
+
case 'TinyInt':
|
|
508
|
+
return readTinyInt(buf, offset);
|
|
509
|
+
case 'SmallInt':
|
|
510
|
+
return readSmallInt(buf, offset);
|
|
511
|
+
case 'Int':
|
|
512
|
+
return readInt(buf, offset);
|
|
513
|
+
case 'BigInt':
|
|
514
|
+
return readBigInt(buf, offset);
|
|
515
|
+
case 'SmallDateTime':
|
|
516
|
+
return readSmallDateTime(buf, offset, options.useUTC);
|
|
517
|
+
case 'DateTime':
|
|
518
|
+
return readDateTime(buf, offset, options.useUTC);
|
|
519
|
+
case 'Real':
|
|
520
|
+
return readReal(buf, offset);
|
|
521
|
+
case 'Float':
|
|
522
|
+
return readFloat(buf, offset);
|
|
523
|
+
case 'SmallMoney':
|
|
524
|
+
return readSmallMoney(buf, offset);
|
|
525
|
+
case 'Money':
|
|
526
|
+
return readMoney(buf, offset);
|
|
527
|
+
case 'Date':
|
|
528
|
+
return readDate(buf, offset, options.useUTC);
|
|
529
|
+
case 'Time':
|
|
530
|
+
{
|
|
531
|
+
let scale;
|
|
532
|
+
({
|
|
533
|
+
value: scale,
|
|
534
|
+
offset
|
|
535
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
536
|
+
return readTime(buf, offset, dataLength, scale, options.useUTC);
|
|
537
|
+
}
|
|
538
|
+
case 'DateTime2':
|
|
539
|
+
{
|
|
540
|
+
let scale;
|
|
541
|
+
({
|
|
542
|
+
value: scale,
|
|
543
|
+
offset
|
|
544
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
545
|
+
return readDateTime2(buf, offset, dataLength, scale, options.useUTC);
|
|
546
|
+
}
|
|
547
|
+
case 'DateTimeOffset':
|
|
548
|
+
{
|
|
549
|
+
let scale;
|
|
550
|
+
({
|
|
551
|
+
value: scale,
|
|
552
|
+
offset
|
|
553
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
554
|
+
return readDateTimeOffset(buf, offset, dataLength, scale);
|
|
555
|
+
}
|
|
556
|
+
case 'VarBinary':
|
|
557
|
+
case 'Binary':
|
|
558
|
+
{
|
|
559
|
+
// maxLength (unused?)
|
|
560
|
+
({
|
|
561
|
+
offset
|
|
562
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
563
|
+
return readBinary(buf, offset, dataLength);
|
|
564
|
+
}
|
|
565
|
+
case 'NumericN':
|
|
566
|
+
case 'DecimalN':
|
|
567
|
+
{
|
|
568
|
+
let precision;
|
|
569
|
+
({
|
|
570
|
+
value: precision,
|
|
571
|
+
offset
|
|
572
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
573
|
+
let scale;
|
|
574
|
+
({
|
|
575
|
+
value: scale,
|
|
576
|
+
offset
|
|
577
|
+
} = (0, _helpers.readUInt8)(buf, offset));
|
|
578
|
+
return readNumeric(buf, offset, dataLength, precision, scale);
|
|
579
|
+
}
|
|
580
|
+
case 'VarChar':
|
|
581
|
+
case 'Char':
|
|
582
|
+
{
|
|
583
|
+
// maxLength (unused?)
|
|
584
|
+
({
|
|
585
|
+
offset
|
|
586
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
587
|
+
let collation;
|
|
588
|
+
({
|
|
589
|
+
value: collation,
|
|
590
|
+
offset
|
|
591
|
+
} = (0, _metadataParser.readCollation)(buf, offset));
|
|
592
|
+
return readChars(buf, offset, dataLength, collation.codepage);
|
|
593
|
+
}
|
|
594
|
+
case 'NVarChar':
|
|
595
|
+
case 'NChar':
|
|
596
|
+
{
|
|
597
|
+
// maxLength (unused?)
|
|
598
|
+
({
|
|
599
|
+
offset
|
|
600
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
601
|
+
|
|
602
|
+
// collation (unsued?)
|
|
603
|
+
({
|
|
604
|
+
offset
|
|
605
|
+
} = (0, _metadataParser.readCollation)(buf, offset));
|
|
606
|
+
return readNChars(buf, offset, dataLength);
|
|
607
|
+
}
|
|
608
|
+
default:
|
|
609
|
+
throw new Error('Invalid type!');
|
|
610
|
+
}
|
|
397
611
|
}
|
|
398
|
-
function
|
|
399
|
-
if (
|
|
400
|
-
|
|
612
|
+
function readBinary(buf, offset, dataLength) {
|
|
613
|
+
if (buf.length < offset + dataLength) {
|
|
614
|
+
throw new _helpers.NotEnoughDataError(offset + dataLength);
|
|
401
615
|
}
|
|
402
|
-
return
|
|
403
|
-
callback(_iconvLite.default.decode(data, codepage));
|
|
404
|
-
});
|
|
616
|
+
return new _helpers.Result(buf.slice(offset, offset + dataLength), offset + dataLength);
|
|
405
617
|
}
|
|
406
|
-
function
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
}
|
|
618
|
+
function readChars(buf, offset, dataLength, codepage) {
|
|
619
|
+
if (buf.length < offset + dataLength) {
|
|
620
|
+
throw new _helpers.NotEnoughDataError(offset + dataLength);
|
|
621
|
+
}
|
|
622
|
+
return new _helpers.Result(_iconvLite.default.decode(buf.slice(offset, offset + dataLength), codepage ?? DEFAULT_ENCODING), offset + dataLength);
|
|
410
623
|
}
|
|
411
|
-
function
|
|
412
|
-
|
|
624
|
+
function readNChars(buf, offset, dataLength) {
|
|
625
|
+
if (buf.length < offset + dataLength) {
|
|
626
|
+
throw new _helpers.NotEnoughDataError(offset + dataLength);
|
|
627
|
+
}
|
|
628
|
+
return new _helpers.Result(buf.toString('ucs2', offset, offset + dataLength), offset + dataLength);
|
|
413
629
|
}
|
|
414
|
-
function
|
|
415
|
-
|
|
416
|
-
|
|
630
|
+
async function readPLPStream(parser) {
|
|
631
|
+
while (parser.buffer.length < parser.position + 8) {
|
|
632
|
+
await parser.waitForChunk();
|
|
417
633
|
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
634
|
+
const expectedLength = parser.buffer.readBigUInt64LE(parser.position);
|
|
635
|
+
parser.position += 8;
|
|
636
|
+
if (expectedLength === PLP_NULL) {
|
|
637
|
+
return null;
|
|
638
|
+
}
|
|
639
|
+
const chunks = [];
|
|
640
|
+
let currentLength = 0;
|
|
641
|
+
while (true) {
|
|
642
|
+
while (parser.buffer.length < parser.position + 4) {
|
|
643
|
+
await parser.waitForChunk();
|
|
423
644
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
if (data) {
|
|
429
|
-
callback(data.toString('ucs2'));
|
|
430
|
-
} else {
|
|
431
|
-
callback(null);
|
|
645
|
+
const chunkLength = parser.buffer.readUInt32LE(parser.position);
|
|
646
|
+
parser.position += 4;
|
|
647
|
+
if (!chunkLength) {
|
|
648
|
+
break;
|
|
432
649
|
}
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
function readMax(parser, callback) {
|
|
436
|
-
parser.readBuffer(8, type => {
|
|
437
|
-
if (type.equals(PLP_NULL)) {
|
|
438
|
-
return callback(null);
|
|
439
|
-
} else if (type.equals(UNKNOWN_PLP_LEN)) {
|
|
440
|
-
return readMaxUnknownLength(parser, callback);
|
|
441
|
-
} else {
|
|
442
|
-
const low = type.readUInt32LE(0);
|
|
443
|
-
const high = type.readUInt32LE(4);
|
|
444
|
-
if (high >= 2 << 53 - 32) {
|
|
445
|
-
console.warn('Read UInt64LE > 53 bits : high=' + high + ', low=' + low);
|
|
446
|
-
}
|
|
447
|
-
const expectedLength = low + 0x100000000 * high;
|
|
448
|
-
return readMaxKnownLength(parser, expectedLength, callback);
|
|
650
|
+
while (parser.buffer.length < parser.position + chunkLength) {
|
|
651
|
+
await parser.waitForChunk();
|
|
449
652
|
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
const data = Buffer.alloc(totalLength, 0);
|
|
454
|
-
let offset = 0;
|
|
455
|
-
function next(done) {
|
|
456
|
-
parser.readUInt32LE(chunkLength => {
|
|
457
|
-
if (!chunkLength) {
|
|
458
|
-
return done();
|
|
459
|
-
}
|
|
460
|
-
parser.readBuffer(chunkLength, chunk => {
|
|
461
|
-
chunk.copy(data, offset);
|
|
462
|
-
offset += chunkLength;
|
|
463
|
-
next(done);
|
|
464
|
-
});
|
|
465
|
-
});
|
|
653
|
+
chunks.push(parser.buffer.slice(parser.position, parser.position + chunkLength));
|
|
654
|
+
parser.position += chunkLength;
|
|
655
|
+
currentLength += chunkLength;
|
|
466
656
|
}
|
|
467
|
-
|
|
468
|
-
if (
|
|
469
|
-
throw new Error('Partially Length-prefixed Bytes unmatched lengths : expected ' +
|
|
657
|
+
if (expectedLength !== UNKNOWN_PLP_LEN) {
|
|
658
|
+
if (currentLength !== Number(expectedLength)) {
|
|
659
|
+
throw new Error('Partially Length-prefixed Bytes unmatched lengths : expected ' + expectedLength + ', but got ' + currentLength + ' bytes');
|
|
470
660
|
}
|
|
471
|
-
callback(data);
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
function readMaxUnknownLength(parser, callback) {
|
|
475
|
-
const chunks = [];
|
|
476
|
-
let length = 0;
|
|
477
|
-
function next(done) {
|
|
478
|
-
parser.readUInt32LE(chunkLength => {
|
|
479
|
-
if (!chunkLength) {
|
|
480
|
-
return done();
|
|
481
|
-
}
|
|
482
|
-
parser.readBuffer(chunkLength, chunk => {
|
|
483
|
-
chunks.push(chunk);
|
|
484
|
-
length += chunkLength;
|
|
485
|
-
next(done);
|
|
486
|
-
});
|
|
487
|
-
});
|
|
488
661
|
}
|
|
489
|
-
|
|
490
|
-
callback(Buffer.concat(chunks, length));
|
|
491
|
-
});
|
|
662
|
+
return chunks;
|
|
492
663
|
}
|
|
493
|
-
function readSmallDateTime(
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
664
|
+
function readSmallDateTime(buf, offset, useUTC) {
|
|
665
|
+
let days;
|
|
666
|
+
({
|
|
667
|
+
offset,
|
|
668
|
+
value: days
|
|
669
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
670
|
+
let minutes;
|
|
671
|
+
({
|
|
672
|
+
offset,
|
|
673
|
+
value: minutes
|
|
674
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
675
|
+
let value;
|
|
676
|
+
if (useUTC) {
|
|
677
|
+
value = new Date(Date.UTC(1900, 0, 1 + days, 0, minutes));
|
|
678
|
+
} else {
|
|
679
|
+
value = new Date(1900, 0, 1 + days, 0, minutes);
|
|
680
|
+
}
|
|
681
|
+
return new _helpers.Result(value, offset);
|
|
505
682
|
}
|
|
506
|
-
function readDateTime(
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
683
|
+
function readDateTime(buf, offset, useUTC) {
|
|
684
|
+
let days;
|
|
685
|
+
({
|
|
686
|
+
offset,
|
|
687
|
+
value: days
|
|
688
|
+
} = (0, _helpers.readInt32LE)(buf, offset));
|
|
689
|
+
let threeHundredthsOfSecond;
|
|
690
|
+
({
|
|
691
|
+
offset,
|
|
692
|
+
value: threeHundredthsOfSecond
|
|
693
|
+
} = (0, _helpers.readInt32LE)(buf, offset));
|
|
694
|
+
const milliseconds = Math.round(threeHundredthsOfSecond * THREE_AND_A_THIRD);
|
|
695
|
+
let value;
|
|
696
|
+
if (useUTC) {
|
|
697
|
+
value = new Date(Date.UTC(1900, 0, 1 + days, 0, 0, 0, milliseconds));
|
|
698
|
+
} else {
|
|
699
|
+
value = new Date(1900, 0, 1 + days, 0, 0, 0, milliseconds);
|
|
700
|
+
}
|
|
701
|
+
return new _helpers.Result(value, offset);
|
|
519
702
|
}
|
|
520
|
-
function readTime(
|
|
521
|
-
let
|
|
703
|
+
function readTime(buf, offset, dataLength, scale, useUTC) {
|
|
704
|
+
let value;
|
|
522
705
|
switch (dataLength) {
|
|
523
706
|
case 3:
|
|
524
|
-
|
|
525
|
-
|
|
707
|
+
{
|
|
708
|
+
({
|
|
709
|
+
value,
|
|
710
|
+
offset
|
|
711
|
+
} = (0, _helpers.readUInt24LE)(buf, offset));
|
|
712
|
+
break;
|
|
713
|
+
}
|
|
526
714
|
case 4:
|
|
527
|
-
|
|
528
|
-
|
|
715
|
+
{
|
|
716
|
+
({
|
|
717
|
+
value,
|
|
718
|
+
offset
|
|
719
|
+
} = (0, _helpers.readUInt32LE)(buf, offset));
|
|
720
|
+
break;
|
|
721
|
+
}
|
|
529
722
|
case 5:
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
723
|
+
{
|
|
724
|
+
({
|
|
725
|
+
value,
|
|
726
|
+
offset
|
|
727
|
+
} = (0, _helpers.readUInt40LE)(buf, offset));
|
|
728
|
+
break;
|
|
536
729
|
}
|
|
730
|
+
default:
|
|
731
|
+
{
|
|
732
|
+
throw new Error('unreachable');
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
if (scale < 7) {
|
|
736
|
+
for (let i = scale; i < 7; i++) {
|
|
737
|
+
value *= 10;
|
|
537
738
|
}
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
callback(date);
|
|
739
|
+
}
|
|
740
|
+
let date;
|
|
741
|
+
if (useUTC) {
|
|
742
|
+
date = new Date(Date.UTC(1970, 0, 1, 0, 0, 0, value / 10000));
|
|
743
|
+
} else {
|
|
744
|
+
date = new Date(1970, 0, 1, 0, 0, 0, value / 10000);
|
|
745
|
+
}
|
|
746
|
+
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
747
|
+
enumerable: false,
|
|
748
|
+
value: value % 10000 / Math.pow(10, 7)
|
|
549
749
|
});
|
|
750
|
+
return new _helpers.Result(date, offset);
|
|
550
751
|
}
|
|
551
|
-
function readDate(
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
752
|
+
function readDate(buf, offset, useUTC) {
|
|
753
|
+
let days;
|
|
754
|
+
({
|
|
755
|
+
offset,
|
|
756
|
+
value: days
|
|
757
|
+
} = (0, _helpers.readUInt24LE)(buf, offset));
|
|
758
|
+
if (useUTC) {
|
|
759
|
+
return new _helpers.Result(new Date(Date.UTC(2000, 0, days - 730118)), offset);
|
|
760
|
+
} else {
|
|
761
|
+
return new _helpers.Result(new Date(2000, 0, days - 730118), offset);
|
|
762
|
+
}
|
|
559
763
|
}
|
|
560
|
-
function readDateTime2(
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
764
|
+
function readDateTime2(buf, offset, dataLength, scale, useUTC) {
|
|
765
|
+
let time;
|
|
766
|
+
({
|
|
767
|
+
offset,
|
|
768
|
+
value: time
|
|
769
|
+
} = readTime(buf, offset, dataLength - 3, scale, useUTC));
|
|
770
|
+
let days;
|
|
771
|
+
({
|
|
772
|
+
offset,
|
|
773
|
+
value: days
|
|
774
|
+
} = (0, _helpers.readUInt24LE)(buf, offset));
|
|
775
|
+
let date;
|
|
776
|
+
if (useUTC) {
|
|
777
|
+
date = new Date(Date.UTC(2000, 0, days - 730118, 0, 0, 0, +time));
|
|
778
|
+
} else {
|
|
779
|
+
date = new Date(2000, 0, days - 730118, time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
|
|
780
|
+
}
|
|
781
|
+
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
782
|
+
enumerable: false,
|
|
783
|
+
value: time.nanosecondsDelta
|
|
576
784
|
});
|
|
785
|
+
return new _helpers.Result(date, offset);
|
|
577
786
|
}
|
|
578
|
-
function readDateTimeOffset(
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
787
|
+
function readDateTimeOffset(buf, offset, dataLength, scale) {
|
|
788
|
+
let time;
|
|
789
|
+
({
|
|
790
|
+
offset,
|
|
791
|
+
value: time
|
|
792
|
+
} = readTime(buf, offset, dataLength - 5, scale, true));
|
|
793
|
+
let days;
|
|
794
|
+
({
|
|
795
|
+
offset,
|
|
796
|
+
value: days
|
|
797
|
+
} = (0, _helpers.readUInt24LE)(buf, offset));
|
|
798
|
+
|
|
799
|
+
// time offset?
|
|
800
|
+
({
|
|
801
|
+
offset
|
|
802
|
+
} = (0, _helpers.readUInt16LE)(buf, offset));
|
|
803
|
+
const date = new Date(Date.UTC(2000, 0, days - 730118, 0, 0, 0, +time));
|
|
804
|
+
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
805
|
+
enumerable: false,
|
|
806
|
+
value: time.nanosecondsDelta
|
|
591
807
|
});
|
|
808
|
+
return new _helpers.Result(date, offset);
|
|
592
809
|
}
|
|
593
|
-
|
|
594
|
-
exports.
|
|
595
|
-
module.exports =
|
|
596
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX2RhdGFUeXBlIiwiX2ljb252TGl0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3ByaW50ZkpzIiwiX2d1aWRQYXJzZXIiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTEwiLCJNQVgiLCJUSFJFRV9BTkRfQV9USElSRCIsIk1PTkVZX0RJVklTT1IiLCJQTFBfTlVMTCIsIkJ1ZmZlciIsImZyb20iLCJVTktOT1dOX1BMUF9MRU4iLCJERUZBVUxUX0VOQ09ESU5HIiwicmVhZFRpbnlJbnQiLCJwYXJzZXIiLCJjYWxsYmFjayIsInJlYWRVSW50OCIsInJlYWRTbWFsbEludCIsInJlYWRJbnQxNkxFIiwicmVhZEludCIsInJlYWRJbnQzMkxFIiwicmVhZEJpZ0ludCIsInJlYWRCaWdJbnQ2NExFIiwidmFsdWUiLCJ0b1N0cmluZyIsInJlYWRSZWFsIiwicmVhZEZsb2F0TEUiLCJyZWFkRmxvYXQiLCJyZWFkRG91YmxlTEUiLCJyZWFkU21hbGxNb25leSIsInJlYWRNb25leSIsImhpZ2giLCJyZWFkVUludDMyTEUiLCJsb3ciLCJyZWFkQml0IiwidmFsdWVQYXJzZSIsIm1ldGFkYXRhIiwib3B0aW9ucyIsInR5cGUiLCJuYW1lIiwiZGF0YUxlbmd0aCIsIkVycm9yIiwiY29kZXBhZ2UiLCJjb2xsYXRpb24iLCJyZWFkTWF4Q2hhcnMiLCJyZWFkVUludDE2TEUiLCJyZWFkQ2hhcnMiLCJyZWFkTWF4TkNoYXJzIiwicmVhZE5DaGFycyIsInJlYWRNYXhCaW5hcnkiLCJyZWFkQmluYXJ5IiwidGV4dFBvaW50ZXJMZW5ndGgiLCJyZWFkQnVmZmVyIiwiX3RleHRQb2ludGVyIiwiX3RpbWVzdGFtcCIsInJlYWRTbWFsbERhdGVUaW1lIiwidXNlVVRDIiwicmVhZERhdGVUaW1lIiwicmVhZFRpbWUiLCJzY2FsZSIsInJlYWREYXRlIiwicmVhZERhdGVUaW1lMiIsInJlYWREYXRlVGltZU9mZnNldCIsInJlYWROdW1lcmljIiwicHJlY2lzaW9uIiwicmVhZFVuaXF1ZUlkZW50aWZpZXIiLCJzcHJpbnRmIiwicmVhZFZhcmlhbnQiLCJkYXRhIiwibG93ZXJDYXNlR3VpZHMiLCJidWZmZXJUb0xvd2VyQ2FzZUd1aWQiLCJidWZmZXJUb1VwcGVyQ2FzZUd1aWQiLCJfcHJlY2lzaW9uIiwic2lnbiIsInJlYWRWYWx1ZSIsInJlYWRVTnVtZXJpYzY0TEUiLCJyZWFkVU51bWVyaWM5NkxFIiwicmVhZFVOdW1lcmljMTI4TEUiLCJjYWxsIiwiTWF0aCIsInBvdyIsImJhc2VUeXBlIiwiVFlQRSIsInByb3BCeXRlcyIsIl9tYXhMZW5ndGgiLCJyZWFkQ29sbGF0aW9uIiwiX2NvbGxhdGlvbiIsImljb252IiwiZGVjb2RlIiwicmVhZE1heCIsImVxdWFscyIsInJlYWRNYXhVbmtub3duTGVuZ3RoIiwiY29uc29sZSIsIndhcm4iLCJleHBlY3RlZExlbmd0aCIsInJlYWRNYXhLbm93bkxlbmd0aCIsInRvdGFsTGVuZ3RoIiwiYWxsb2MiLCJvZmZzZXQiLCJuZXh0IiwiZG9uZSIsImNodW5rTGVuZ3RoIiwiY2h1bmsiLCJjb3B5IiwiY2h1bmtzIiwibGVuZ3RoIiwicHVzaCIsImNvbmNhdCIsImRheXMiLCJtaW51dGVzIiwiRGF0ZSIsIlVUQyIsInRocmVlSHVuZHJlZHRoc09mU2Vjb25kIiwibWlsbGlzZWNvbmRzIiwicm91bmQiLCJyZWFkVUludDI0TEUiLCJyZWFkVUludDQwTEUiLCJpIiwiZGF0ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwibmFub3NlY29uZHNEZWx0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy92YWx1ZS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3Rva2VuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IHsgdHlwZSBNZXRhZGF0YSwgcmVhZENvbGxhdGlvbiB9IGZyb20gJy4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5cbmltcG9ydCBpY29udiBmcm9tICdpY29udi1saXRlJztcbmltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcbmltcG9ydCB7IGJ1ZmZlclRvTG93ZXJDYXNlR3VpZCwgYnVmZmVyVG9VcHBlckNhc2VHdWlkIH0gZnJvbSAnLi9ndWlkLXBhcnNlcic7XG5cbmNvbnN0IE5VTEwgPSAoMSA8PCAxNikgLSAxO1xuY29uc3QgTUFYID0gKDEgPDwgMTYpIC0gMTtcbmNvbnN0IFRIUkVFX0FORF9BX1RISVJEID0gMyArICgxIC8gMyk7XG5jb25zdCBNT05FWV9ESVZJU09SID0gMTAwMDA7XG5jb25zdCBQTFBfTlVMTCA9IEJ1ZmZlci5mcm9tKFsweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGXSk7XG5jb25zdCBVTktOT1dOX1BMUF9MRU4gPSBCdWZmZXIuZnJvbShbMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRl0pO1xuY29uc3QgREVGQVVMVF9FTkNPRElORyA9ICd1dGY4JztcblxuZnVuY3Rpb24gcmVhZFRpbnlJbnQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50OChjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTbWFsbEludChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDE2TEUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkSW50KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkSW50MzJMRShjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCaWdJbnQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRCaWdJbnQ2NExFKCh2YWx1ZSkgPT4ge1xuICAgIGNhbGxiYWNrKHZhbHVlLnRvU3RyaW5nKCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZFJlYWwocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRGbG9hdExFKGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZEZsb2F0KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkRG91YmxlTEUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkU21hbGxNb25leShwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDMyTEUoKHZhbHVlKSA9PiB7XG4gICAgY2FsbGJhY2sodmFsdWUgLyBNT05FWV9ESVZJU09SKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNb25leShwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEludDMyTEUoKGhpZ2gpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChsb3cpID0+IHtcbiAgICAgIGNhbGxiYWNrKChsb3cgKyAoMHgxMDAwMDAwMDAgKiBoaWdoKSkgLyBNT05FWV9ESVZJU09SKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCaXQocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50OCgodmFsdWUpID0+IHtcbiAgICBjYWxsYmFjayghIXZhbHVlKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbHVlUGFyc2UocGFyc2VyOiBQYXJzZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICBjb25zdCB0eXBlID0gbWV0YWRhdGEudHlwZTtcblxuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ051bGwnOlxuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgY2FzZSAnVGlueUludCc6XG4gICAgICByZXR1cm4gcmVhZFRpbnlJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdTbWFsbEludCc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnSW50JzpcbiAgICAgIHJldHVybiByZWFkSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnQmlnSW50JzpcbiAgICAgIHJldHVybiByZWFkQmlnSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnSW50Tic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFRpbnlJbnQocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRTbWFsbEludChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhZEludChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gcmVhZEJpZ0ludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBJbnROJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnUmVhbCc6XG4gICAgICByZXR1cm4gcmVhZFJlYWwocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdGbG9hdCc6XG4gICAgICByZXR1cm4gcmVhZEZsb2F0KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnRmxvYXROJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiByZWFkUmVhbChwYXJzZXIsIGNhbGxiYWNrKTtcbiAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZsb2F0KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEZsb2F0TicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1NtYWxsTW9uZXknOlxuICAgICAgcmV0dXJuIHJlYWRTbWFsbE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSAnTW9uZXknOlxuICAgICAgcmV0dXJuIHJlYWRNb25leShwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ01vbmV5Tic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRNb25leShwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBNb25leU4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdCaXQnOlxuICAgICAgcmV0dXJuIHJlYWRCaXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdCaXROJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHJldHVybiByZWFkQml0KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEJpdE4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdWYXJDaGFyJzpcbiAgICBjYXNlICdDaGFyJzpcbiAgICAgIGNvbnN0IGNvZGVwYWdlID0gbWV0YWRhdGEuY29sbGF0aW9uIS5jb2RlcGFnZSE7XG4gICAgICBpZiAobWV0YWRhdGEuZGF0YUxlbmd0aCA9PT0gTUFYKSB7XG4gICAgICAgIHJldHVybiByZWFkTWF4Q2hhcnMocGFyc2VyLCBjb2RlcGFnZSwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gTlVMTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlYWRDaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBjb2RlcGFnZSwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICBjYXNlICdOQ2hhcic6XG4gICAgICBpZiAobWV0YWRhdGEuZGF0YUxlbmd0aCA9PT0gTUFYKSB7XG4gICAgICAgIHJldHVybiByZWFkTWF4TkNoYXJzKHBhcnNlciwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gTlVMTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlYWROQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoISwgY2FsbGJhY2spO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ1ZhckJpbmFyeSc6XG4gICAgY2FzZSAnQmluYXJ5JzpcbiAgICAgIGlmIChtZXRhZGF0YS5kYXRhTGVuZ3RoID09PSBNQVgpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRNYXhCaW5hcnkocGFyc2VyLCBjYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVhZEJpbmFyeShwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnVGV4dCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgodGV4dFBvaW50ZXJMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKHRleHRQb2ludGVyTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIodGV4dFBvaW50ZXJMZW5ndGgsIChfdGV4dFBvaW50ZXIpID0+IHtcbiAgICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcig4LCAoX3RpbWVzdGFtcCkgPT4ge1xuICAgICAgICAgICAgcGFyc2VyLnJlYWRVSW50MzJMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICByZWFkQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEuY29sbGF0aW9uIS5jb2RlcGFnZSEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnTlRleHQnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHRleHRQb2ludGVyTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmICh0ZXh0UG9pbnRlckxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKHRleHRQb2ludGVyTGVuZ3RoLCAoX3RleHRQb2ludGVyKSA9PiB7XG4gICAgICAgICAgcGFyc2VyLnJlYWRCdWZmZXIoOCwgKF90aW1lc3RhbXApID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZE5DaGFycyhwYXJzZXIsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ0ltYWdlJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KCh0ZXh0UG9pbnRlckxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZXIucmVhZEJ1ZmZlcih0ZXh0UG9pbnRlckxlbmd0aCwgKF90ZXh0UG9pbnRlcikgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkQnVmZmVyKDgsIChfdGltZXN0YW1wKSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRCaW5hcnkocGFyc2VyLCBkYXRhTGVuZ3RoISwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdYbWwnOlxuICAgICAgcmV0dXJuIHJlYWRNYXhOQ2hhcnMocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdTbWFsbERhdGVUaW1lJzpcbiAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICBjYXNlICdEYXRlVGltZSc6XG4gICAgICByZXR1cm4gcmVhZERhdGVUaW1lKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lTic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIERhdGVUaW1lTicpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1RpbWUnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWRUaW1lKHBhcnNlciwgZGF0YUxlbmd0aCEsIG1ldGFkYXRhLnNjYWxlISwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkRGF0ZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnRGF0ZVRpbWUyJzpcbiAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUyKHBhcnNlciwgZGF0YUxlbmd0aCEsIG1ldGFkYXRhLnNjYWxlISwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lT2Zmc2V0KHBhcnNlciwgZGF0YUxlbmd0aCEsIG1ldGFkYXRhLnNjYWxlISwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ051bWVyaWNOJzpcbiAgICBjYXNlICdEZWNpbWFsTic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVhZE51bWVyaWMocGFyc2VyLCBkYXRhTGVuZ3RoISwgbWV0YWRhdGEucHJlY2lzaW9uISwgbWV0YWRhdGEuc2NhbGUhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnVW5pcXVlSWRlbnRpZmllcic6XG4gICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG5cbiAgICAgICAgICBjYXNlIDB4MTA6XG4gICAgICAgICAgICByZXR1cm4gcmVhZFVuaXF1ZUlkZW50aWZpZXIocGFyc2VyLCBvcHRpb25zLCBjYWxsYmFjayk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1Vuc3VwcG9ydGVkIGd1aWQgc2l6ZSAlZCcsIGRhdGFMZW5ndGghIC0gMSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNhc2UgJ1VEVCc6XG4gICAgICByZXR1cm4gcmVhZE1heEJpbmFyeShwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgJ1ZhcmlhbnQnOlxuICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZWFkVmFyaWFudChwYXJzZXIsIG9wdGlvbnMsIGRhdGFMZW5ndGghLCBjYWxsYmFjayk7XG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5yZWNvZ25pc2VkIHR5cGUgJXMnLCB0eXBlLm5hbWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVW5pcXVlSWRlbnRpZmllcihwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBwYXJzZXIucmVhZEJ1ZmZlcigweDEwLCAoZGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKG9wdGlvbnMubG93ZXJDYXNlR3VpZHMgPyBidWZmZXJUb0xvd2VyQ2FzZUd1aWQoZGF0YSkgOiBidWZmZXJUb1VwcGVyQ2FzZUd1aWQoZGF0YSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE51bWVyaWMocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgX3ByZWNpc2lvbjogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkVUludDgoKHNpZ24pID0+IHtcbiAgICBzaWduID0gc2lnbiA9PT0gMSA/IDEgOiAtMTtcblxuICAgIGxldCByZWFkVmFsdWU7XG4gICAgaWYgKGRhdGFMZW5ndGggPT09IDUpIHtcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVUludDMyTEU7XG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSA5KSB7XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVOdW1lcmljNjRMRTtcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDEzKSB7XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVOdW1lcmljOTZMRTtcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDE3KSB7XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVOdW1lcmljMTI4TEU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihzcHJpbnRmKCdVbnN1cHBvcnRlZCBudW1lcmljIGRhdGFMZW5ndGggJWQnLCBkYXRhTGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgcmVhZFZhbHVlLmNhbGwocGFyc2VyLCAodmFsdWUpID0+IHtcbiAgICAgIGNhbGxiYWNrKCh2YWx1ZSAqIHNpZ24pIC8gTWF0aC5wb3coMTAsIHNjYWxlKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkVmFyaWFudChwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgZGF0YUxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChiYXNlVHlwZSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBUWVBFW2Jhc2VUeXBlXTtcblxuICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChwcm9wQnl0ZXMpID0+IHtcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhTGVuZ3RoIC0gcHJvcEJ5dGVzIC0gMjtcblxuICAgICAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICAgICAgY2FzZSAnVW5pcXVlSWRlbnRpZmllcic6XG4gICAgICAgICAgcmV0dXJuIHJlYWRVbmlxdWVJZGVudGlmaWVyKHBhcnNlciwgb3B0aW9ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0JpdCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRCaXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnVGlueUludCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRUaW55SW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsSW50KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0ludCc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRJbnQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnQmlnSW50JzpcbiAgICAgICAgICByZXR1cm4gcmVhZEJpZ0ludChwYXJzZXIsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdTbWFsbERhdGVUaW1lJzpcbiAgICAgICAgICByZXR1cm4gcmVhZFNtYWxsRGF0ZVRpbWUocGFyc2VyLCBvcHRpb25zLnVzZVVUQywgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lKHBhcnNlciwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcblxuICAgICAgICBjYXNlICdSZWFsJzpcbiAgICAgICAgICByZXR1cm4gcmVhZFJlYWwocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnRmxvYXQnOlxuICAgICAgICAgIHJldHVybiByZWFkRmxvYXQocGFyc2VyLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnU21hbGxNb25leSc6XG4gICAgICAgICAgcmV0dXJuIHJlYWRTbWFsbE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ01vbmV5JzpcbiAgICAgICAgICByZXR1cm4gcmVhZE1vbmV5KHBhcnNlciwgY2FsbGJhY2spO1xuXG4gICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgIHJldHVybiByZWFkRGF0ZShwYXJzZXIsIG9wdGlvbnMudXNlVVRDLCBjYWxsYmFjayk7XG5cbiAgICAgICAgY2FzZSAnVGltZSc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZFRpbWUocGFyc2VyLCBkYXRhTGVuZ3RoLCBzY2FsZSwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdEYXRlVGltZTInOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChzY2FsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZTIocGFyc2VyLCBkYXRhTGVuZ3RoLCBzY2FsZSwgb3B0aW9ucy51c2VVVEMsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZERhdGVUaW1lT2Zmc2V0KHBhcnNlciwgZGF0YUxlbmd0aCwgc2NhbGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdWYXJCaW5hcnknOlxuICAgICAgICBjYXNlICdCaW5hcnknOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChfbWF4TGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICByZWFkQmluYXJ5KHBhcnNlciwgZGF0YUxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgJ051bWVyaWNOJzpcbiAgICAgICAgY2FzZSAnRGVjaW1hbE4nOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChwcmVjaXNpb24pID0+IHtcbiAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWROdW1lcmljKHBhcnNlciwgZGF0YUxlbmd0aCwgcHJlY2lzaW9uLCBzY2FsZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnVmFyQ2hhcic6XG4gICAgICAgIGNhc2UgJ0NoYXInOlxuICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQxNkxFKChfbWF4TGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICByZWFkQ29sbGF0aW9uKHBhcnNlciwgKGNvbGxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICByZWFkQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoLCBjb2xsYXRpb24uY29kZXBhZ2UhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdOVmFyQ2hhcic6XG4gICAgICAgIGNhc2UgJ05DaGFyJzpcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoX21heExlbmd0aCkgPT4ge1xuICAgICAgICAgICAgcmVhZENvbGxhdGlvbihwYXJzZXIsIChfY29sbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWROQ2hhcnMocGFyc2VyLCBkYXRhTGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0eXBlIScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZEJpbmFyeShwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIHJldHVybiBwYXJzZXIucmVhZEJ1ZmZlcihkYXRhTGVuZ3RoLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDaGFycyhwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBjb2RlcGFnZTogc3RyaW5nLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIGlmIChjb2RlcGFnZSA9PSBudWxsKSB7XG4gICAgY29kZXBhZ2UgPSBERUZBVUxUX0VOQ09ESU5HO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlci5yZWFkQnVmZmVyKGRhdGFMZW5ndGgsIChkYXRhKSA9PiB7XG4gICAgY2FsbGJhY2soaWNvbnYuZGVjb2RlKGRhdGEsIGNvZGVwYWdlKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTkNoYXJzKHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRCdWZmZXIoZGF0YUxlbmd0aCwgKGRhdGEpID0+IHtcbiAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZE1heEJpbmFyeShwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICByZXR1cm4gcmVhZE1heChwYXJzZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZE1heENoYXJzKHBhcnNlcjogUGFyc2VyLCBjb2RlcGFnZTogc3RyaW5nLCBjYWxsYmFjazogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKSB7XG4gIGlmIChjb2RlcGFnZSA9PSBudWxsKSB7XG4gICAgY29kZXBhZ2UgPSBERUZBVUxUX0VOQ09ESU5HO1xuICB9XG5cbiAgcmVhZE1heChwYXJzZXIsIChkYXRhKSA9PiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNhbGxiYWNrKGljb252LmRlY29kZShkYXRhLCBjb2RlcGFnZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4TkNoYXJzKHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKSB7XG4gIHJlYWRNYXgocGFyc2VyLCAoZGF0YSkgPT4ge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBjYWxsYmFjayhkYXRhLnRvU3RyaW5nKCd1Y3MyJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4KHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHZhbHVlOiBudWxsIHwgQnVmZmVyKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkQnVmZmVyKDgsICh0eXBlKSA9PiB7XG4gICAgaWYgKHR5cGUuZXF1YWxzKFBMUF9OVUxMKSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoVU5LTk9XTl9QTFBfTEVOKSkge1xuICAgICAgcmV0dXJuIHJlYWRNYXhVbmtub3duTGVuZ3RoKHBhcnNlciwgY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsb3cgPSB0eXBlLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSB0eXBlLnJlYWRVSW50MzJMRSg0KTtcblxuICAgICAgaWYgKGhpZ2ggPj0gKDIgPDwgKDUzIC0gMzIpKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1JlYWQgVUludDY0TEUgPiA1MyBiaXRzIDogaGlnaD0nICsgaGlnaCArICcsIGxvdz0nICsgbG93KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBsb3cgKyAoMHgxMDAwMDAwMDAgKiBoaWdoKTtcbiAgICAgIHJldHVybiByZWFkTWF4S25vd25MZW5ndGgocGFyc2VyLCBleHBlY3RlZExlbmd0aCwgY2FsbGJhY2spO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXhLbm93bkxlbmd0aChwYXJzZXI6IFBhcnNlciwgdG90YWxMZW5ndGg6IG51bWJlciwgY2FsbGJhY2s6ICh2YWx1ZTogbnVsbCB8IEJ1ZmZlcikgPT4gdm9pZCkge1xuICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jKHRvdGFsTGVuZ3RoLCAwKTtcblxuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZnVuY3Rpb24gbmV4dChkb25lOiBhbnkpIHtcbiAgICBwYXJzZXIucmVhZFVJbnQzMkxFKChjaHVua0xlbmd0aCkgPT4ge1xuICAgICAgaWYgKCFjaHVua0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIucmVhZEJ1ZmZlcihjaHVua0xlbmd0aCwgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rLmNvcHkoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IGNodW5rTGVuZ3RoO1xuXG4gICAgICAgIG5leHQoZG9uZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHQoKCkgPT4ge1xuICAgIGlmIChvZmZzZXQgIT09IHRvdGFsTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnRpYWxseSBMZW5ndGgtcHJlZml4ZWQgQnl0ZXMgdW5tYXRjaGVkIGxlbmd0aHMgOiBleHBlY3RlZCAnICsgdG90YWxMZW5ndGggKyAnLCBidXQgZ290ICcgKyBvZmZzZXQgKyAnIGJ5dGVzJyk7XG4gICAgfVxuXG4gICAgY2FsbGJhY2soZGF0YSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkTWF4VW5rbm93bkxlbmd0aChwYXJzZXI6IFBhcnNlciwgY2FsbGJhY2s6ICh2YWx1ZTogbnVsbCB8IEJ1ZmZlcikgPT4gdm9pZCkge1xuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG5cbiAgbGV0IGxlbmd0aCA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoZG9uZTogYW55KSB7XG4gICAgcGFyc2VyLnJlYWRVSW50MzJMRSgoY2h1bmtMZW5ndGgpID0+IHtcbiAgICAgIGlmICghY2h1bmtMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgIH1cblxuICAgICAgcGFyc2VyLnJlYWRCdWZmZXIoY2h1bmtMZW5ndGgsIChjaHVuaykgPT4ge1xuICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIGxlbmd0aCArPSBjaHVua0xlbmd0aDtcblxuICAgICAgICBuZXh0KGRvbmUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZXh0KCgpID0+IHtcbiAgICBjYWxsYmFjayhCdWZmZXIuY29uY2F0KGNodW5rcywgbGVuZ3RoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkU21hbGxEYXRlVGltZShwYXJzZXI6IFBhcnNlciwgdXNlVVRDOiBib29sZWFuLCBjYWxsYmFjazogKHZhbHVlOiBEYXRlKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkVUludDE2TEUoKGRheXMpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQxNkxFKChtaW51dGVzKSA9PiB7XG4gICAgICBsZXQgdmFsdWU7XG4gICAgICBpZiAodXNlVVRDKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoRGF0ZS5VVEMoMTkwMCwgMCwgMSArIGRheXMsIDAsIG1pbnV0ZXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoMTkwMCwgMCwgMSArIGRheXMsIDAsIG1pbnV0ZXMpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGVUaW1lKHBhcnNlcjogUGFyc2VyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGUpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRJbnQzMkxFKChkYXlzKSA9PiB7XG4gICAgcGFyc2VyLnJlYWRVSW50MzJMRSgodGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQpID0+IHtcbiAgICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IE1hdGgucm91bmQodGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQgKiBUSFJFRV9BTkRfQV9USElSRCk7XG5cbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGlmICh1c2VVVEMpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxICsgZGF5cywgMCwgMCwgMCwgbWlsbGlzZWNvbmRzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhIGV4dGVuZHMgRGF0ZSB7XG4gIG5hbm9zZWNvbmRzRGVsdGE6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbWUocGFyc2VyOiBQYXJzZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlciwgdXNlVVRDOiBib29sZWFuLCBjYWxsYmFjazogKHZhbHVlOiBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGEpID0+IHZvaWQpIHtcbiAgbGV0IHJlYWRWYWx1ZTogYW55O1xuICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICBjYXNlIDM6XG4gICAgICByZWFkVmFsdWUgPSBwYXJzZXIucmVhZFVJbnQyNExFO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA0OlxuICAgICAgcmVhZFZhbHVlID0gcGFyc2VyLnJlYWRVSW50MzJMRTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIHJlYWRWYWx1ZSA9IHBhcnNlci5yZWFkVUludDQwTEU7XG4gIH1cblxuICByZWFkVmFsdWUhLmNhbGwocGFyc2VyLCAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgIGlmIChzY2FsZSA8IDcpIHtcbiAgICAgIGZvciAobGV0IGkgPSBzY2FsZTsgaSA8IDc7IGkrKykge1xuICAgICAgICB2YWx1ZSAqPSAxMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZGF0ZTtcbiAgICBpZiAodXNlVVRDKSB7XG4gICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMTk3MCwgMCwgMSwgMCwgMCwgMCwgdmFsdWUgLyAxMDAwMCkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKDE5NzAsIDAsIDEsIDAsIDAsIDAsIHZhbHVlIC8gMTAwMDApIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGUsICduYW5vc2Vjb25kc0RlbHRhJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogKHZhbHVlICUgMTAwMDApIC8gTWF0aC5wb3coMTAsIDcpXG4gICAgfSk7XG4gICAgY2FsbGJhY2soZGF0ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZShwYXJzZXI6IFBhcnNlciwgdXNlVVRDOiBib29sZWFuLCBjYWxsYmFjazogKHZhbHVlOiBEYXRlKSA9PiB2b2lkKSB7XG4gIHBhcnNlci5yZWFkVUludDI0TEUoKGRheXMpID0+IHtcbiAgICBpZiAodXNlVVRDKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRGF0ZShEYXRlLlVUQygyMDAwLCAwLCBkYXlzIC0gNzMwMTE4KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhuZXcgRGF0ZSgyMDAwLCAwLCBkYXlzIC0gNzMwMTE4KSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGVUaW1lMihwYXJzZXI6IFBhcnNlciwgZGF0YUxlbmd0aDogbnVtYmVyLCBzY2FsZTogbnVtYmVyLCB1c2VVVEM6IGJvb2xlYW4sIGNhbGxiYWNrOiAodmFsdWU6IERhdGVXaXRoTmFub3NlY29uZHNEZWx0YSkgPT4gdm9pZCkge1xuICByZWFkVGltZShwYXJzZXIsIGRhdGFMZW5ndGggLSAzLCBzY2FsZSwgdXNlVVRDLCAodGltZSkgPT4geyAvLyBUT0RPOiAnaW5wdXQnIGlzICd0aW1lJywgYnV0IFR5cGVTY3JpcHQgY2Fubm90IGZpbmQgXCJ0aW1lLm5hbm9zZWNvbmRzRGVsdGFcIjtcbiAgICBwYXJzZXIucmVhZFVJbnQyNExFKChkYXlzKSA9PiB7XG4gICAgICBsZXQgZGF0ZTtcbiAgICAgIGlmICh1c2VVVEMpIHtcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIDAsIDAsIDAsICt0aW1lKSkgYXMgRGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgsIHRpbWUuZ2V0SG91cnMoKSwgdGltZS5nZXRNaW51dGVzKCksIHRpbWUuZ2V0U2Vjb25kcygpLCB0aW1lLmdldE1pbGxpc2Vjb25kcygpKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gICAgICB9XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdGltZS5uYW5vc2Vjb25kc0RlbHRhXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKGRhdGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVhZERhdGVUaW1lT2Zmc2V0KHBhcnNlcjogUGFyc2VyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIGNhbGxiYWNrOiAodmFsdWU6IERhdGVXaXRoTmFub3NlY29uZHNEZWx0YSkgPT4gdm9pZCkge1xuICByZWFkVGltZShwYXJzZXIsIGRhdGFMZW5ndGggLSA1LCBzY2FsZSwgdHJ1ZSwgKHRpbWUpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQyNExFKChkYXlzKSA9PiB7XG4gICAgICAvLyBvZmZzZXRcbiAgICAgIHBhcnNlci5yZWFkSW50MTZMRSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygyMDAwLCAwLCBkYXlzIC0gNzMwMTE4LCAwLCAwLCAwLCArdGltZSkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGUsICduYW5vc2Vjb25kc0RlbHRhJywge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiB0aW1lLm5hbm9zZWNvbmRzRGVsdGFcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrKGRhdGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWx1ZVBhcnNlO1xu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
|
|
810
|
+
module.exports.readValue = readValue;
|
|
811
|
+
module.exports.isPLPStream = isPLPStream;
|
|
812
|
+
module.exports.readPLPStream = readPLPStream;
|
|
813
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX2RhdGFUeXBlIiwiX2ljb252TGl0ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3ByaW50ZkpzIiwiX2d1aWRQYXJzZXIiLCJfaGVscGVycyIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTlVMTCIsIk1BWCIsIlRIUkVFX0FORF9BX1RISVJEIiwiTU9ORVlfRElWSVNPUiIsIlBMUF9OVUxMIiwiVU5LTk9XTl9QTFBfTEVOIiwiREVGQVVMVF9FTkNPRElORyIsInJlYWRUaW55SW50IiwiYnVmIiwib2Zmc2V0IiwicmVhZFVJbnQ4IiwicmVhZFNtYWxsSW50IiwicmVhZEludDE2TEUiLCJyZWFkSW50IiwicmVhZEludDMyTEUiLCJyZWFkQmlnSW50IiwidmFsdWUiLCJyZWFkQmlnSW50NjRMRSIsIlJlc3VsdCIsInRvU3RyaW5nIiwicmVhZFJlYWwiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdCIsInJlYWREb3VibGVMRSIsInJlYWRTbWFsbE1vbmV5IiwicmVhZE1vbmV5IiwiaGlnaCIsImxvdyIsInJlYWRVSW50MzJMRSIsInJlYWRCaXQiLCJyZWFkVmFsdWUiLCJtZXRhZGF0YSIsIm9wdGlvbnMiLCJ0eXBlIiwibmFtZSIsImRhdGFMZW5ndGgiLCJFcnJvciIsImNvZGVwYWdlIiwiY29sbGF0aW9uIiwicmVhZFVJbnQxNkxFIiwicmVhZENoYXJzIiwicmVhZE5DaGFycyIsInJlYWRCaW5hcnkiLCJ0ZXh0UG9pbnRlckxlbmd0aCIsInJlYWRTbWFsbERhdGVUaW1lIiwidXNlVVRDIiwicmVhZERhdGVUaW1lIiwicmVhZFRpbWUiLCJzY2FsZSIsInJlYWREYXRlIiwicmVhZERhdGVUaW1lMiIsInJlYWREYXRlVGltZU9mZnNldCIsInJlYWROdW1lcmljIiwicHJlY2lzaW9uIiwicmVhZFVuaXF1ZUlkZW50aWZpZXIiLCJzcHJpbnRmIiwicmVhZFZhcmlhbnQiLCJpc1BMUFN0cmVhbSIsImRhdGEiLCJsb3dlckNhc2VHdWlkcyIsImJ1ZmZlclRvTG93ZXJDYXNlR3VpZCIsImJ1ZmZlclRvVXBwZXJDYXNlR3VpZCIsIl9wcmVjaXNpb24iLCJzaWduIiwicmVhZFVOdW1lcmljNjRMRSIsInJlYWRVTnVtZXJpYzk2TEUiLCJyZWFkVU51bWVyaWMxMjhMRSIsIk1hdGgiLCJwb3ciLCJiYXNlVHlwZSIsIlRZUEUiLCJwcm9wQnl0ZXMiLCJyZWFkQ29sbGF0aW9uIiwibGVuZ3RoIiwiTm90RW5vdWdoRGF0YUVycm9yIiwic2xpY2UiLCJpY29udiIsImRlY29kZSIsInJlYWRQTFBTdHJlYW0iLCJwYXJzZXIiLCJidWZmZXIiLCJwb3NpdGlvbiIsIndhaXRGb3JDaHVuayIsImV4cGVjdGVkTGVuZ3RoIiwicmVhZEJpZ1VJbnQ2NExFIiwiY2h1bmtzIiwiY3VycmVudExlbmd0aCIsImNodW5rTGVuZ3RoIiwicHVzaCIsIk51bWJlciIsImRheXMiLCJtaW51dGVzIiwiRGF0ZSIsIlVUQyIsInRocmVlSHVuZHJlZHRoc09mU2Vjb25kIiwibWlsbGlzZWNvbmRzIiwicm91bmQiLCJyZWFkVUludDI0TEUiLCJyZWFkVUludDQwTEUiLCJpIiwiZGF0ZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInRpbWUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwibmFub3NlY29uZHNEZWx0YSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvdmFsdWUtcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZXIsIHsgdHlwZSBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi90b2tlbi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IHR5cGUgTWV0YWRhdGEsIHJlYWRDb2xsYXRpb24gfSBmcm9tICcuL21ldGFkYXRhLXBhcnNlcic7XG5pbXBvcnQgeyBUWVBFIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xuXG5pbXBvcnQgaWNvbnYgZnJvbSAnaWNvbnYtbGl0ZSc7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnc3ByaW50Zi1qcyc7XG5pbXBvcnQgeyBidWZmZXJUb0xvd2VyQ2FzZUd1aWQsIGJ1ZmZlclRvVXBwZXJDYXNlR3VpZCB9IGZyb20gJy4vZ3VpZC1wYXJzZXInO1xuaW1wb3J0IHsgTm90RW5vdWdoRGF0YUVycm9yLCBSZXN1bHQsIHJlYWRCaWdJbnQ2NExFLCByZWFkRG91YmxlTEUsIHJlYWRGbG9hdExFLCByZWFkSW50MTZMRSwgcmVhZEludDMyTEUsIHJlYWRVSW50MTZMRSwgcmVhZFVJbnQzMkxFLCByZWFkVUludDgsIHJlYWRVSW50MjRMRSwgcmVhZFVJbnQ0MExFLCByZWFkVU51bWVyaWM2NExFLCByZWFkVU51bWVyaWM5NkxFLCByZWFkVU51bWVyaWMxMjhMRSB9IGZyb20gJy4vdG9rZW4vaGVscGVycyc7XG5cbmNvbnN0IE5VTEwgPSAoMSA8PCAxNikgLSAxO1xuY29uc3QgTUFYID0gKDEgPDwgMTYpIC0gMTtcbmNvbnN0IFRIUkVFX0FORF9BX1RISVJEID0gMyArICgxIC8gMyk7XG5jb25zdCBNT05FWV9ESVZJU09SID0gMTAwMDA7XG5jb25zdCBQTFBfTlVMTCA9IDB4RkZGRkZGRkZGRkZGRkZGRm47XG5jb25zdCBVTktOT1dOX1BMUF9MRU4gPSAweEZGRkZGRkZGRkZGRkZGRkVuO1xuY29uc3QgREVGQVVMVF9FTkNPRElORyA9ICd1dGY4JztcblxuZnVuY3Rpb24gcmVhZFRpbnlJbnQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICByZXR1cm4gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFNtYWxsSW50KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgcmV0dXJuIHJlYWRJbnQxNkxFKGJ1Ziwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEludChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiBSZXN1bHQ8bnVtYmVyPiB7XG4gIHJldHVybiByZWFkSW50MzJMRShidWYsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCaWdJbnQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PHN0cmluZz4ge1xuICBsZXQgdmFsdWU7XG4gICh7IG9mZnNldCwgdmFsdWUgfSA9IHJlYWRCaWdJbnQ2NExFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWUudG9TdHJpbmcoKSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFJlYWwoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICByZXR1cm4gcmVhZEZsb2F0TEUoYnVmLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkRmxvYXQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICByZXR1cm4gcmVhZERvdWJsZUxFKGJ1Ziwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFNtYWxsTW9uZXkoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICBsZXQgdmFsdWU7XG4gICh7IG9mZnNldCwgdmFsdWUgfSA9IHJlYWRJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWUgLyBNT05FWV9ESVZJU09SLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkTW9uZXkoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKTogUmVzdWx0PG51bWJlcj4ge1xuICBsZXQgaGlnaDtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogaGlnaCB9ID0gcmVhZEludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgbG93O1xuICAoeyBvZmZzZXQsIHZhbHVlOiBsb3cgfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KChsb3cgKyAoMHgxMDAwMDAwMDAgKiBoaWdoKSkgLyBNT05FWV9ESVZJU09SLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkQml0KGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxib29sZWFuPiB7XG4gIGxldCB2YWx1ZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZSB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoISF2YWx1ZSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFZhbHVlKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgbWV0YWRhdGE6IE1ldGFkYXRhLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zKTogUmVzdWx0PHVua25vd24+IHtcbiAgY29uc3QgdHlwZSA9IG1ldGFkYXRhLnR5cGU7XG5cbiAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICBjYXNlICdOdWxsJzpcbiAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG5cbiAgICBjYXNlICdUaW55SW50Jzoge1xuICAgICAgcmV0dXJuIHJlYWRUaW55SW50KGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdTbWFsbEludCc6IHtcbiAgICAgIHJldHVybiByZWFkU21hbGxJbnQoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ0ludCc6IHtcbiAgICAgIHJldHVybiByZWFkSW50KGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdCaWdJbnQnOiB7XG4gICAgICByZXR1cm4gcmVhZEJpZ0ludChidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnSW50Tic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIHJlYWRUaW55SW50KGJ1Ziwgb2Zmc2V0KTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxJbnQoYnVmLCBvZmZzZXQpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHJlYWRJbnQoYnVmLCBvZmZzZXQpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRCaWdJbnQoYnVmLCBvZmZzZXQpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgSW50TicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhc2UgJ1JlYWwnOiB7XG4gICAgICByZXR1cm4gcmVhZFJlYWwoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ0Zsb2F0Jzoge1xuICAgICAgcmV0dXJuIHJlYWRGbG9hdChidWYsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnRmxvYXROJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChudWxsLCBvZmZzZXQpO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gcmVhZFJlYWwoYnVmLCBvZmZzZXQpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWRGbG9hdChidWYsIG9mZnNldCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGFMZW5ndGggJyArIGRhdGFMZW5ndGggKyAnIGZvciBGbG9hdE4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdTbWFsbE1vbmV5Jzoge1xuICAgICAgcmV0dXJuIHJlYWRTbWFsbE1vbmV5KGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdNb25leSc6XG4gICAgICByZXR1cm4gcmVhZE1vbmV5KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ01vbmV5Tic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHN3aXRjaCAoZGF0YUxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHJlYWRTbWFsbE1vbmV5KGJ1Ziwgb2Zmc2V0KTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiByZWFkTW9uZXkoYnVmLCBvZmZzZXQpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgTW9uZXlOJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnQml0Jzoge1xuICAgICAgcmV0dXJuIHJlYWRCaXQoYnVmLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ0JpdE4nOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiByZWFkQml0KGJ1Ziwgb2Zmc2V0KTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZGF0YUxlbmd0aCAnICsgZGF0YUxlbmd0aCArICcgZm9yIEJpdE4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYXNlICdWYXJDaGFyJzpcbiAgICBjYXNlICdDaGFyJzoge1xuICAgICAgY29uc3QgY29kZXBhZ2UgPSBtZXRhZGF0YS5jb2xsYXRpb24hLmNvZGVwYWdlITtcblxuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IE5VTEwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWRDaGFycyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgY29kZXBhZ2UpO1xuICAgIH1cblxuICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICBjYXNlICdOQ2hhcic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkTkNoYXJzKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjYXNlICdWYXJCaW5hcnknOlxuICAgIGNhc2UgJ0JpbmFyeSc6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSBOVUxMKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgbGV0IHRleHRQb2ludGVyTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogdGV4dFBvaW50ZXJMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gVGV4dHBvaW50ZXJcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgdGV4dFBvaW50ZXJMZW5ndGgpKTtcblxuICAgICAgLy8gVGltZXN0YW1wXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIDgpKTtcblxuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWRDaGFycyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgbWV0YWRhdGEuY29sbGF0aW9uIS5jb2RlcGFnZSEpO1xuICAgIH1cblxuICAgIGNhc2UgJ05UZXh0Jzoge1xuICAgICAgbGV0IHRleHRQb2ludGVyTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogdGV4dFBvaW50ZXJMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gVGV4dHBvaW50ZXJcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgdGV4dFBvaW50ZXJMZW5ndGgpKTtcblxuICAgICAgLy8gVGltZXN0YW1wXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIDgpKTtcblxuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWROQ2hhcnMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIH1cblxuICAgIGNhc2UgJ0ltYWdlJzoge1xuICAgICAgbGV0IHRleHRQb2ludGVyTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogdGV4dFBvaW50ZXJMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBpZiAodGV4dFBvaW50ZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gVGV4dHBvaW50ZXJcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZEJpbmFyeShidWYsIG9mZnNldCwgdGV4dFBvaW50ZXJMZW5ndGgpKTtcblxuICAgICAgLy8gVGltZXN0YW1wXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIDgpKTtcblxuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWRCaW5hcnkoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgpO1xuICAgIH1cblxuICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOiB7XG4gICAgICByZXR1cm4gcmVhZFNtYWxsRGF0ZVRpbWUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcbiAgICB9XG5cbiAgICBjYXNlICdEYXRlVGltZSc6IHtcbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcbiAgICB9XG5cbiAgICBjYXNlICdEYXRlVGltZU4nOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByZWFkU21hbGxEYXRlVGltZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIHJlYWREYXRlVGltZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRhTGVuZ3RoICcgKyBkYXRhTGVuZ3RoICsgJyBmb3IgRGF0ZVRpbWVOJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnVGltZSc6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkVGltZShidWYsIG9mZnNldCwgZGF0YUxlbmd0aCwgbWV0YWRhdGEuc2NhbGUhLCBvcHRpb25zLnVzZVVUQyk7XG4gICAgfVxuXG4gICAgY2FzZSAnRGF0ZSc6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkRGF0ZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuICAgIH1cblxuICAgIGNhc2UgJ0RhdGVUaW1lMic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUyKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBtZXRhZGF0YS5zY2FsZSEsIG9wdGlvbnMudXNlVVRDKTtcbiAgICB9XG5cbiAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIG1ldGFkYXRhLnNjYWxlISk7XG4gICAgfVxuXG4gICAgY2FzZSAnTnVtZXJpY04nOlxuICAgIGNhc2UgJ0RlY2ltYWxOJzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgaWYgKGRhdGFMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQobnVsbCwgb2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlYWROdW1lcmljKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBtZXRhZGF0YS5wcmVjaXNpb24hLCBtZXRhZGF0YS5zY2FsZSEpO1xuICAgIH1cblxuICAgIGNhc2UgJ1VuaXF1ZUlkZW50aWZpZXInOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBzd2l0Y2ggKGRhdGFMZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG5cbiAgICAgICAgY2FzZSAweDEwOlxuICAgICAgICAgIHJldHVybiByZWFkVW5pcXVlSWRlbnRpZmllcihidWYsIG9mZnNldCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5zdXBwb3J0ZWQgZ3VpZCBzaXplICVkJywgZGF0YUxlbmd0aCEgLSAxKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FzZSAnVmFyaWFudCc6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGlmIChkYXRhTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KG51bGwsIG9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWFkVmFyaWFudChidWYsIG9mZnNldCwgb3B0aW9ucywgZGF0YUxlbmd0aCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHR5cGUhJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzUExQU3RyZWFtKG1ldGFkYXRhOiBNZXRhZGF0YSkge1xuICBzd2l0Y2ggKG1ldGFkYXRhLnR5cGUubmFtZSkge1xuICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICBjYXNlICdWYXJCaW5hcnknOiB7XG4gICAgICByZXR1cm4gbWV0YWRhdGEuZGF0YUxlbmd0aCA9PT0gTUFYO1xuICAgIH1cblxuICAgIGNhc2UgJ1htbCc6IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNhc2UgJ1VEVCc6IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkVW5pcXVlSWRlbnRpZmllcihidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gIGxldCBkYXRhO1xuICAoeyB2YWx1ZTogZGF0YSwgb2Zmc2V0IH0gPSByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCAweDEwKSk7XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQob3B0aW9ucy5sb3dlckNhc2VHdWlkcyA/IGJ1ZmZlclRvTG93ZXJDYXNlR3VpZChkYXRhKSA6IGJ1ZmZlclRvVXBwZXJDYXNlR3VpZChkYXRhKSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZE51bWVyaWMoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIF9wcmVjaXNpb246IG51bWJlciwgc2NhbGU6IG51bWJlcik6IFJlc3VsdDxudW1iZXI+IHtcbiAgbGV0IHNpZ247XG4gICh7IG9mZnNldCwgdmFsdWU6IHNpZ24gfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gIHNpZ24gPSBzaWduID09PSAxID8gMSA6IC0xO1xuXG4gIGxldCB2YWx1ZTtcbiAgaWYgKGRhdGFMZW5ndGggPT09IDUpIHtcbiAgICAoeyBvZmZzZXQsIHZhbHVlIH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcbiAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSA5KSB7XG4gICAgKHsgb2Zmc2V0LCB2YWx1ZSB9ID0gcmVhZFVOdW1lcmljNjRMRShidWYsIG9mZnNldCkpO1xuICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDEzKSB7XG4gICAgKHsgb2Zmc2V0LCB2YWx1ZSB9ID0gcmVhZFVOdW1lcmljOTZMRShidWYsIG9mZnNldCkpO1xuICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDE3KSB7XG4gICAgKHsgb2Zmc2V0LCB2YWx1ZSB9ID0gcmVhZFVOdW1lcmljMTI4TEUoYnVmLCBvZmZzZXQpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5zdXBwb3J0ZWQgbnVtZXJpYyBkYXRhTGVuZ3RoICVkJywgZGF0YUxlbmd0aCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoKHZhbHVlICogc2lnbikgLyBNYXRoLnBvdygxMCwgc2NhbGUpLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkVmFyaWFudChidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMsIGRhdGFMZW5ndGg6IG51bWJlcik6IFJlc3VsdDx1bmtub3duPiB7XG4gIGxldCBiYXNlVHlwZTtcbiAgKHsgdmFsdWU6IGJhc2VUeXBlLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gIGNvbnN0IHR5cGUgPSBUWVBFW2Jhc2VUeXBlXTtcblxuICBsZXQgcHJvcEJ5dGVzO1xuICAoeyB2YWx1ZTogcHJvcEJ5dGVzLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gIGRhdGFMZW5ndGggPSBkYXRhTGVuZ3RoIC0gcHJvcEJ5dGVzIC0gMjtcblxuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ1VuaXF1ZUlkZW50aWZpZXInOlxuICAgICAgcmV0dXJuIHJlYWRVbmlxdWVJZGVudGlmaWVyKGJ1Ziwgb2Zmc2V0LCBvcHRpb25zKTtcblxuICAgIGNhc2UgJ0JpdCc6XG4gICAgICByZXR1cm4gcmVhZEJpdChidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdUaW55SW50JzpcbiAgICAgIHJldHVybiByZWFkVGlueUludChidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdTbWFsbEludCc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsSW50KGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ0ludCc6XG4gICAgICByZXR1cm4gcmVhZEludChidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgcmV0dXJuIHJlYWRCaWdJbnQoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnU21hbGxEYXRlVGltZSc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsRGF0ZVRpbWUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcblxuICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWUoYnVmLCBvZmZzZXQsIG9wdGlvbnMudXNlVVRDKTtcblxuICAgIGNhc2UgJ1JlYWwnOlxuICAgICAgcmV0dXJuIHJlYWRSZWFsKGJ1Ziwgb2Zmc2V0KTtcblxuICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgIHJldHVybiByZWFkRmxvYXQoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnU21hbGxNb25leSc6XG4gICAgICByZXR1cm4gcmVhZFNtYWxsTW9uZXkoYnVmLCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnTW9uZXknOlxuICAgICAgcmV0dXJuIHJlYWRNb25leShidWYsIG9mZnNldCk7XG5cbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiByZWFkRGF0ZShidWYsIG9mZnNldCwgb3B0aW9ucy51c2VVVEMpO1xuXG4gICAgY2FzZSAnVGltZSc6IHtcbiAgICAgIGxldCBzY2FsZTtcbiAgICAgICh7IHZhbHVlOiBzY2FsZSwgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWRUaW1lKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoLCBzY2FsZSwgb3B0aW9ucy51c2VVVEMpO1xuICAgIH1cblxuICAgIGNhc2UgJ0RhdGVUaW1lMic6IHtcbiAgICAgIGxldCBzY2FsZTtcbiAgICAgICh7IHZhbHVlOiBzY2FsZSwgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIHJlYWREYXRlVGltZTIoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIHNjYWxlLCBvcHRpb25zLnVzZVVUQyk7XG4gICAgfVxuXG4gICAgY2FzZSAnRGF0ZVRpbWVPZmZzZXQnOiB7XG4gICAgICBsZXQgc2NhbGU7XG4gICAgICAoeyB2YWx1ZTogc2NhbGUsIG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkRGF0ZVRpbWVPZmZzZXQoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIHNjYWxlKTtcbiAgICB9XG5cbiAgICBjYXNlICdWYXJCaW5hcnknOlxuICAgIGNhc2UgJ0JpbmFyeSc6IHtcbiAgICAgIC8vIG1heExlbmd0aCAodW51c2VkPylcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkQmluYXJ5KGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjYXNlICdOdW1lcmljTic6XG4gICAgY2FzZSAnRGVjaW1hbE4nOiB7XG4gICAgICBsZXQgcHJlY2lzaW9uO1xuICAgICAgKHsgdmFsdWU6IHByZWNpc2lvbiwgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgbGV0IHNjYWxlO1xuICAgICAgKHsgdmFsdWU6IHNjYWxlLCBvZmZzZXQgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZE51bWVyaWMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUpO1xuICAgIH1cblxuICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgIGNhc2UgJ0NoYXInOiB7XG4gICAgICAvLyBtYXhMZW5ndGggKHVudXNlZD8pXG4gICAgICAoeyBvZmZzZXQgfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICBsZXQgY29sbGF0aW9uO1xuICAgICAgKHsgdmFsdWU6IGNvbGxhdGlvbiwgb2Zmc2V0IH0gPSByZWFkQ29sbGF0aW9uKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiByZWFkQ2hhcnMoYnVmLCBvZmZzZXQsIGRhdGFMZW5ndGgsIGNvbGxhdGlvbi5jb2RlcGFnZSEpO1xuICAgIH1cblxuICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICBjYXNlICdOQ2hhcic6IHtcbiAgICAgIC8vIG1heExlbmd0aCAodW51c2VkPylcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIC8vIGNvbGxhdGlvbiAodW5zdWVkPylcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZENvbGxhdGlvbihidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gcmVhZE5DaGFycyhidWYsIG9mZnNldCwgZGF0YUxlbmd0aCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0eXBlIScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRCaW5hcnkoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIpOiBSZXN1bHQ8QnVmZmVyPiB7XG4gIGlmIChidWYubGVuZ3RoIDwgb2Zmc2V0ICsgZGF0YUxlbmd0aCkge1xuICAgIHRocm93IG5ldyBOb3RFbm91Z2hEYXRhRXJyb3Iob2Zmc2V0ICsgZGF0YUxlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3VsdChidWYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBkYXRhTGVuZ3RoKSwgb2Zmc2V0ICsgZGF0YUxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRDaGFycyhidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgY29kZXBhZ2U6IHN0cmluZyk6IFJlc3VsdDxzdHJpbmc+IHtcbiAgaWYgKGJ1Zi5sZW5ndGggPCBvZmZzZXQgKyBkYXRhTGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEVub3VnaERhdGFFcnJvcihvZmZzZXQgKyBkYXRhTGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KGljb252LmRlY29kZShidWYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBkYXRhTGVuZ3RoKSwgY29kZXBhZ2UgPz8gREVGQVVMVF9FTkNPRElORyksIG9mZnNldCArIGRhdGFMZW5ndGgpO1xufVxuXG5mdW5jdGlvbiByZWFkTkNoYXJzKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgZGF0YUxlbmd0aDogbnVtYmVyKTogUmVzdWx0PHN0cmluZz4ge1xuICBpZiAoYnVmLmxlbmd0aCA8IG9mZnNldCArIGRhdGFMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgTm90RW5vdWdoRGF0YUVycm9yKG9mZnNldCArIGRhdGFMZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQoYnVmLnRvU3RyaW5nKCd1Y3MyJywgb2Zmc2V0LCBvZmZzZXQgKyBkYXRhTGVuZ3RoKSwgb2Zmc2V0ICsgZGF0YUxlbmd0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQTFBTdHJlYW0ocGFyc2VyOiBQYXJzZXIpOiBQcm9taXNlPG51bGwgfCBCdWZmZXJbXT4ge1xuICB3aGlsZSAocGFyc2VyLmJ1ZmZlci5sZW5ndGggPCBwYXJzZXIucG9zaXRpb24gKyA4KSB7XG4gICAgYXdhaXQgcGFyc2VyLndhaXRGb3JDaHVuaygpO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBwYXJzZXIuYnVmZmVyLnJlYWRCaWdVSW50NjRMRShwYXJzZXIucG9zaXRpb24pO1xuICBwYXJzZXIucG9zaXRpb24gKz0gODtcblxuICBpZiAoZXhwZWN0ZWRMZW5ndGggPT09IFBMUF9OVUxMKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGxldCBjdXJyZW50TGVuZ3RoID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHdoaWxlIChwYXJzZXIuYnVmZmVyLmxlbmd0aCA8IHBhcnNlci5wb3NpdGlvbiArIDQpIHtcbiAgICAgIGF3YWl0IHBhcnNlci53YWl0Rm9yQ2h1bmsoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVua0xlbmd0aCA9IHBhcnNlci5idWZmZXIucmVhZFVJbnQzMkxFKHBhcnNlci5wb3NpdGlvbik7XG4gICAgcGFyc2VyLnBvc2l0aW9uICs9IDQ7XG5cbiAgICBpZiAoIWNodW5rTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB3aGlsZSAocGFyc2VyLmJ1ZmZlci5sZW5ndGggPCBwYXJzZXIucG9zaXRpb24gKyBjaHVua0xlbmd0aCkge1xuICAgICAgYXdhaXQgcGFyc2VyLndhaXRGb3JDaHVuaygpO1xuICAgIH1cblxuICAgIGNodW5rcy5wdXNoKHBhcnNlci5idWZmZXIuc2xpY2UocGFyc2VyLnBvc2l0aW9uLCBwYXJzZXIucG9zaXRpb24gKyBjaHVua0xlbmd0aCkpO1xuICAgIHBhcnNlci5wb3NpdGlvbiArPSBjaHVua0xlbmd0aDtcbiAgICBjdXJyZW50TGVuZ3RoICs9IGNodW5rTGVuZ3RoO1xuICB9XG5cbiAgaWYgKGV4cGVjdGVkTGVuZ3RoICE9PSBVTktOT1dOX1BMUF9MRU4pIHtcbiAgICBpZiAoY3VycmVudExlbmd0aCAhPT0gTnVtYmVyKGV4cGVjdGVkTGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aWFsbHkgTGVuZ3RoLXByZWZpeGVkIEJ5dGVzIHVubWF0Y2hlZCBsZW5ndGhzIDogZXhwZWN0ZWQgJyArIGV4cGVjdGVkTGVuZ3RoICsgJywgYnV0IGdvdCAnICsgY3VycmVudExlbmd0aCArICcgYnl0ZXMnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2h1bmtzO1xufVxuXG5mdW5jdGlvbiByZWFkU21hbGxEYXRlVGltZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbik6IFJlc3VsdDxEYXRlPiB7XG4gIGxldCBkYXlzO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYXlzIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgbWludXRlcztcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogbWludXRlcyB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IHZhbHVlO1xuICBpZiAodXNlVVRDKSB7XG4gICAgdmFsdWUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxICsgZGF5cywgMCwgbWludXRlcykpO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbmV3IERhdGUoMTkwMCwgMCwgMSArIGRheXMsIDAsIG1pbnV0ZXMpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWUsIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlVGltZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbik6IFJlc3VsdDxEYXRlPiB7XG4gIGxldCBkYXlzO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYXlzIH0gPSByZWFkSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gIGxldCB0aHJlZUh1bmRyZWR0aHNPZlNlY29uZDtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogdGhyZWVIdW5kcmVkdGhzT2ZTZWNvbmQgfSA9IHJlYWRJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgY29uc3QgbWlsbGlzZWNvbmRzID0gTWF0aC5yb3VuZCh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCAqIFRIUkVFX0FORF9BX1RISVJEKTtcblxuICBsZXQgdmFsdWU7XG4gIGlmICh1c2VVVEMpIHtcbiAgICB2YWx1ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpKTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEgKyBkYXlzLCAwLCAwLCAwLCBtaWxsaXNlY29uZHMpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWUsIG9mZnNldCk7XG59XG5cbmludGVyZmFjZSBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGEgZXh0ZW5kcyBEYXRlIHtcbiAgbmFub3NlY29uZHNEZWx0YTogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiByZWFkVGltZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGRhdGFMZW5ndGg6IG51bWJlciwgc2NhbGU6IG51bWJlciwgdXNlVVRDOiBib29sZWFuKTogUmVzdWx0PERhdGVXaXRoTmFub3NlY29uZHNEZWx0YT4ge1xuICBsZXQgdmFsdWU7XG5cbiAgc3dpdGNoIChkYXRhTGVuZ3RoKSB7XG4gICAgY2FzZSAzOiB7XG4gICAgICAoeyB2YWx1ZSwgb2Zmc2V0IH0gPSByZWFkVUludDI0TEUoYnVmLCBvZmZzZXQpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgNDoge1xuICAgICAgKHsgdmFsdWUsIG9mZnNldCB9ID0gcmVhZFVJbnQzMkxFKGJ1Ziwgb2Zmc2V0KSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIDU6IHtcbiAgICAgICh7IHZhbHVlLCBvZmZzZXQgfSA9IHJlYWRVSW50NDBMRShidWYsIG9mZnNldCkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnJlYWNoYWJsZScpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzY2FsZSA8IDcpIHtcbiAgICBmb3IgKGxldCBpID0gc2NhbGU7IGkgPCA3OyBpKyspIHtcbiAgICAgIHZhbHVlICo9IDEwO1xuICAgIH1cbiAgfVxuXG4gIGxldCBkYXRlO1xuICBpZiAodXNlVVRDKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKDE5NzAsIDAsIDEsIDAsIDAsIDAsIHZhbHVlIC8gMTAwMDApKSBhcyBEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE7XG4gIH0gZWxzZSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKDE5NzAsIDAsIDEsIDAsIDAsIDAsIHZhbHVlIC8gMTAwMDApIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6ICh2YWx1ZSAlIDEwMDAwKSAvIE1hdGgucG93KDEwLCA3KVxuICB9KTtcblxuICByZXR1cm4gbmV3IFJlc3VsdChkYXRlLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbik6IFJlc3VsdDxEYXRlPiB7XG4gIGxldCBkYXlzO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYXlzIH0gPSByZWFkVUludDI0TEUoYnVmLCBvZmZzZXQpKTtcblxuICBpZiAodXNlVVRDKSB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQobmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgMCwgZGF5cyAtIDczMDExOCkpLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgUmVzdWx0KG5ldyBEYXRlKDIwMDAsIDAsIGRheXMgLSA3MzAxMTgpLCBvZmZzZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlVGltZTIoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIsIHVzZVVUQzogYm9vbGVhbik6IFJlc3VsdDxEYXRlV2l0aE5hbm9zZWNvbmRzRGVsdGE+IHtcbiAgbGV0IHRpbWU7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRpbWUgfSA9IHJlYWRUaW1lKGJ1Ziwgb2Zmc2V0LCBkYXRhTGVuZ3RoIC0gMywgc2NhbGUsIHVzZVVUQykpO1xuXG4gIGxldCBkYXlzO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYXlzIH0gPSByZWFkVUludDI0TEUoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgZGF0ZTtcbiAgaWYgKHVzZVVUQykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygyMDAwLCAwLCBkYXlzIC0gNzMwMTE4LCAwLCAwLCAwLCArdGltZSkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgfSBlbHNlIHtcbiAgICBkYXRlID0gbmV3IERhdGUoMjAwMCwgMCwgZGF5cyAtIDczMDExOCwgdGltZS5nZXRIb3VycygpLCB0aW1lLmdldE1pbnV0ZXMoKSwgdGltZS5nZXRTZWNvbmRzKCksIHRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGF0ZSwgJ25hbm9zZWNvbmRzRGVsdGEnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IHRpbWUubmFub3NlY29uZHNEZWx0YVxuICB9KTtcblxuICByZXR1cm4gbmV3IFJlc3VsdChkYXRlLCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZVRpbWVPZmZzZXQoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBkYXRhTGVuZ3RoOiBudW1iZXIsIHNjYWxlOiBudW1iZXIpOiBSZXN1bHQ8RGF0ZVdpdGhOYW5vc2Vjb25kc0RlbHRhPiB7XG4gIGxldCB0aW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiB0aW1lIH0gPSByZWFkVGltZShidWYsIG9mZnNldCwgZGF0YUxlbmd0aCAtIDUsIHNjYWxlLCB0cnVlKSk7XG5cbiAgbGV0IGRheXM7XG4gICh7IG9mZnNldCwgdmFsdWU6IGRheXMgfSA9IHJlYWRVSW50MjRMRShidWYsIG9mZnNldCkpO1xuXG4gIC8vIHRpbWUgb2Zmc2V0P1xuICAoeyBvZmZzZXQgfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygyMDAwLCAwLCBkYXlzIC0gNzMwMTE4LCAwLCAwLCAwLCArdGltZSkpIGFzIERhdGVXaXRoTmFub3NlY29uZHNEZWx0YTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGUsICduYW5vc2Vjb25kc0RlbHRhJywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiB0aW1lLm5hbm9zZWNvbmRzRGVsdGFcbiAgfSk7XG4gIHJldHVybiBuZXcgUmVzdWx0KGRhdGUsIG9mZnNldCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlYWRWYWx1ZSA9IHJlYWRWYWx1ZTtcbm1vZHVsZS5leHBvcnRzLmlzUExQU3RyZWFtID0gaXNQTFBTdHJlYW07XG5tb2R1bGUuZXhwb3J0cy5yZWFkUExQU3RyZWFtID0gcmVhZFBMUFN0cmVhbTtcblxuZXhwb3J0IHsgcmVhZFZhbHVlLCBpc1BMUFN0cmVhbSwgcmVhZFBMUFN0cmVhbSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBLElBQUFBLGVBQUEsR0FBQUMsT0FBQTtBQUNB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
|