@cloudbase/js-sdk 3.4.4 → 3.4.6
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/CHANGELOG.md +11 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/miniprogram_dist/app.js +1 -1
- package/miniprogram_dist/index.js +1 -1
- package/node_modules/@cloudbase/ai/package.json +3 -3
- package/node_modules/@cloudbase/apis/package.json +3 -3
- package/node_modules/@cloudbase/app/dist/cjs/constants/common.d.ts +1 -1
- package/node_modules/@cloudbase/app/dist/cjs/constants/common.js +3 -3
- package/node_modules/@cloudbase/app/dist/cjs/index.node.js +11 -4
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.d.ts +7 -3
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/context.js +67 -40
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.d.ts +4 -2
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/index.js +28 -2
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.d.ts +3 -0
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/request.js +145 -104
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/tool.js +151 -25
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.d.ts +24 -0
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/types.js +1 -1
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.d.ts +21 -1
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/utils.js +76 -11
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/wx.d.ts +39 -0
- package/node_modules/@cloudbase/app/dist/cjs/libs/adapter-node/wx.js +272 -0
- package/node_modules/@cloudbase/app/dist/esm/constants/common.d.ts +1 -1
- package/node_modules/@cloudbase/app/dist/esm/constants/common.js +3 -3
- package/node_modules/@cloudbase/app/dist/esm/index.node.js +10 -3
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.d.ts +7 -3
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/context.js +63 -38
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.d.ts +4 -2
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/index.js +4 -2
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.d.ts +3 -0
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/request.js +145 -104
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/tool.js +153 -27
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.d.ts +24 -0
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/types.js +1 -1
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.d.ts +21 -1
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/utils.js +68 -9
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/wx.d.ts +39 -0
- package/node_modules/@cloudbase/app/dist/esm/libs/adapter-node/wx.js +237 -0
- package/node_modules/@cloudbase/app/package.json +3 -3
- package/node_modules/@cloudbase/auth/package.json +3 -3
- package/node_modules/@cloudbase/cloudrun/package.json +3 -3
- package/node_modules/@cloudbase/container/package.json +2 -2
- package/node_modules/@cloudbase/functions/package.json +4 -4
- package/node_modules/@cloudbase/model/package.json +3 -3
- package/node_modules/@cloudbase/mysql/package.json +1 -1
- package/node_modules/@cloudbase/oauth/package.json +2 -2
- package/node_modules/@cloudbase/realtime/package.json +2 -2
- package/node_modules/@cloudbase/storage/package.json +3 -3
- package/node_modules/@cloudbase/types/package.json +1 -1
- package/node_modules/@cloudbase/utilities/package.json +2 -2
- package/package.json +1 -1
|
@@ -83,7 +83,7 @@ var NodeRequest = (function () {
|
|
|
83
83
|
function NodeRequest(config) {
|
|
84
84
|
var _this = this;
|
|
85
85
|
this.getReqOptions = function (url, options) { return __awaiter(_this, void 0, void 0, function () {
|
|
86
|
-
var urlObj, TCB_SOURCE, SOURCE, _a, _b, isAdminPath, UNSUPPORTED_V3_SIGN_PATH, token, _c, secretId, secretKey, sessionToken, secretType, method, body, headers, params, secretInfo, signedParams, sign, _d, authorization, timestamp;
|
|
86
|
+
var urlObj, TCB_SOURCE, SOURCE, _a, _b, isAdminPath, UNSUPPORTED_V3_SIGN_PATH, token, _c, secretId, secretKey, sessionToken, secretType, method, body, headers, isNpmFormDataBody, params, secretInfo, signedParams, sign, _d, authorization, timestamp, formDataInstance, existingKeys, formBuffer, formHeaders;
|
|
87
87
|
var _e, _f, _g, _h, _j, _k, _l, _m;
|
|
88
88
|
return __generator(this, function (_o) {
|
|
89
89
|
switch (_o.label) {
|
|
@@ -114,7 +114,13 @@ var NodeRequest = (function () {
|
|
|
114
114
|
secretType = (((_l = this.config) === null || _l === void 0 ? void 0 : _l.auth) || {}).secretType;
|
|
115
115
|
method = options.method, body = options.body;
|
|
116
116
|
headers = JSON.parse(JSON.stringify(options.headers));
|
|
117
|
-
|
|
117
|
+
isNpmFormDataBody = this.isNpmFormData(body);
|
|
118
|
+
if (isNpmFormDataBody) {
|
|
119
|
+
params = body.__plainObj ? __assign({}, body.__plainObj) : {};
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
params = typeof body === 'object' ? body : safeParseJson(body) || {};
|
|
123
|
+
}
|
|
118
124
|
params.envName = (params === null || params === void 0 ? void 0 : params.env) || this.config.env || ((_m = getSecretInfo()) === null || _m === void 0 ? void 0 : _m.env) || '';
|
|
119
125
|
if (params.access_token) {
|
|
120
126
|
return [2, options];
|
|
@@ -178,6 +184,19 @@ var NodeRequest = (function () {
|
|
|
178
184
|
headers['X-Signature-Expires'] = 600;
|
|
179
185
|
}
|
|
180
186
|
}
|
|
187
|
+
if (isNpmFormDataBody) {
|
|
188
|
+
formDataInstance = body;
|
|
189
|
+
existingKeys = new Set(Object.keys(formDataInstance.__plainObj || {}));
|
|
190
|
+
if (params.envName && !existingKeys.has('envName')) {
|
|
191
|
+
formDataInstance.append('envName', params.envName);
|
|
192
|
+
}
|
|
193
|
+
if (params.sessionToken && !existingKeys.has('sessionToken')) {
|
|
194
|
+
formDataInstance.append('sessionToken', params.sessionToken);
|
|
195
|
+
}
|
|
196
|
+
formBuffer = formDataInstance.getBuffer();
|
|
197
|
+
formHeaders = formDataInstance.getHeaders();
|
|
198
|
+
return [2, __assign(__assign({}, options), { headers: __assign(__assign(__assign({}, headers), formHeaders), { 'content-length': String(formBuffer.length) }), body: formBuffer })];
|
|
199
|
+
}
|
|
181
200
|
return [2, __assign(__assign({}, options), { headers: headers, body: typeof params === 'object' ? JSON.stringify(params) : params })];
|
|
182
201
|
}
|
|
183
202
|
});
|
|
@@ -187,20 +206,21 @@ var NodeRequest = (function () {
|
|
|
187
206
|
this.put = function (options) { return _this.request(__assign(__assign({}, options), { method: 'put' })); };
|
|
188
207
|
this.upload = function (options) {
|
|
189
208
|
var _a;
|
|
190
|
-
var
|
|
191
|
-
|
|
209
|
+
var _b = options, data = _b.data, rawFile = _b.file, fileContent = _b.fileContent, name = _b.name, method = _b.method, _c = _b.headers, headers = _c === void 0 ? {} : _c;
|
|
210
|
+
var file = rawFile !== null && rawFile !== void 0 ? rawFile : fileContent;
|
|
211
|
+
if (file === undefined || name === undefined) {
|
|
192
212
|
throw new Error('file and name is required');
|
|
193
213
|
}
|
|
194
|
-
var
|
|
214
|
+
var formFields = obj2StrRecord(data !== null && data !== void 0 ? data : {});
|
|
195
215
|
var loweredMethod = method === null || method === void 0 ? void 0 : method.toLowerCase();
|
|
196
216
|
var reqMethod = (_a = ['post', 'put'].find(function (m) { return m === loweredMethod; })) !== null && _a !== void 0 ? _a : 'put';
|
|
197
217
|
var formData = new FormData();
|
|
198
218
|
if (reqMethod === 'post') {
|
|
199
|
-
Object.keys(
|
|
200
|
-
formData.append(key,
|
|
219
|
+
Object.keys(formFields).forEach(function (key) {
|
|
220
|
+
formData.append(key, formFields[key]);
|
|
201
221
|
});
|
|
202
222
|
formData.append('key', name);
|
|
203
|
-
formData.append('file', file);
|
|
223
|
+
formData.append('file', file instanceof Blob ? file : new Blob([file]));
|
|
204
224
|
return _this.request(__assign(__assign({}, options), { data: formData, method: reqMethod }), _this.restrictedMethods.includes('upload'));
|
|
205
225
|
}
|
|
206
226
|
return _this.request(__assign(__assign({}, options), { method: 'put', headers: headers, body: file }), _this.restrictedMethods.includes('upload'));
|
|
@@ -243,83 +263,64 @@ var NodeRequest = (function () {
|
|
|
243
263
|
});
|
|
244
264
|
}); };
|
|
245
265
|
this.fetch = function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
246
|
-
var _a, enableAbort, _b, stream, signal, customReqOpts, url,
|
|
247
|
-
var
|
|
248
|
-
return __generator(this, function (
|
|
249
|
-
switch (
|
|
266
|
+
var _a, enableAbort, _b, stream, signal, customReqOpts, url, timeout, _c, abortController, cleanup, headers, fetchOptions, res, _d, _e;
|
|
267
|
+
var _f;
|
|
268
|
+
return __generator(this, function (_g) {
|
|
269
|
+
switch (_g.label) {
|
|
250
270
|
case 0:
|
|
251
271
|
_a = options.enableAbort, enableAbort = _a === void 0 ? false : _a, _b = options.stream, stream = _b === void 0 ? false : _b, signal = options.signal, customReqOpts = options.customReqOpts;
|
|
252
272
|
url = this.getRealUrl(options.url, options.headers || {}, options.body);
|
|
253
|
-
abortController = new AbortController();
|
|
254
273
|
timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
|
|
255
|
-
|
|
256
|
-
if (signal.aborted) {
|
|
257
|
-
abortController.abort();
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
signal.addEventListener('abort', function () { return abortController.abort(); });
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
timer = undefined;
|
|
264
|
-
if (enableAbort || timeout) {
|
|
265
|
-
timer = setTimeout(function () {
|
|
266
|
-
var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
|
|
267
|
-
console.warn(timeoutMsg);
|
|
268
|
-
abortController.abort(new Error(timeoutMsg));
|
|
269
|
-
}, timeout);
|
|
270
|
-
}
|
|
274
|
+
_c = this.createAbortController(timeout, enableAbort, signal), abortController = _c[0], cleanup = _c[1];
|
|
271
275
|
headers = options.headers ? headersInit2Indexable(options.headers) : undefined;
|
|
272
276
|
return [4, this.getReqOptions(url, __assign(__assign({}, options), { headers: headers, body: options.body, signal: abortController.signal }))];
|
|
273
277
|
case 1:
|
|
274
|
-
fetchOptions =
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
clearTimeout(timer);
|
|
278
|
-
return x;
|
|
279
|
-
})
|
|
280
|
-
.catch(function (x) {
|
|
281
|
-
clearTimeout(timer);
|
|
282
|
-
return Promise.reject(x);
|
|
283
|
-
})];
|
|
278
|
+
fetchOptions = _g.sent();
|
|
279
|
+
this.applyDuplexIfNeeded(fetchOptions);
|
|
280
|
+
_g.label = 2;
|
|
284
281
|
case 2:
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
if (!(+res.status === 204)) return [3, 3];
|
|
288
|
-
_c = '';
|
|
289
|
-
return [3, 7];
|
|
282
|
+
_g.trys.push([2, , 9, 10]);
|
|
283
|
+
return [4, fetch(url, fetchOptions)];
|
|
290
284
|
case 3:
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
return [3,
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
285
|
+
res = _g.sent();
|
|
286
|
+
_f = {};
|
|
287
|
+
if (!(+res.status === 204)) return [3, 4];
|
|
288
|
+
_d = '';
|
|
289
|
+
return [3, 8];
|
|
290
|
+
case 4:
|
|
291
|
+
if (!stream) return [3, 5];
|
|
292
|
+
_e = res.body;
|
|
293
|
+
return [3, 7];
|
|
294
|
+
case 5: return [4, res.json()];
|
|
298
295
|
case 6:
|
|
299
|
-
|
|
300
|
-
|
|
296
|
+
_e = _g.sent();
|
|
297
|
+
_g.label = 7;
|
|
301
298
|
case 7:
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
299
|
+
_d = _e;
|
|
300
|
+
_g.label = 8;
|
|
301
|
+
case 8: return [2, (_f.data = _d,
|
|
302
|
+
_f.statusCode = res.status,
|
|
303
|
+
_f.header = res.headers,
|
|
304
|
+
_f)];
|
|
305
|
+
case 9:
|
|
306
|
+
cleanup();
|
|
307
|
+
return [7];
|
|
308
|
+
case 10: return [2];
|
|
307
309
|
}
|
|
308
310
|
});
|
|
309
311
|
}); };
|
|
310
312
|
this.request = function (options, enableAbort) {
|
|
311
313
|
if (enableAbort === void 0) { enableAbort = false; }
|
|
312
314
|
return __awaiter(_this, void 0, void 0, function () {
|
|
313
|
-
var url, _a,
|
|
314
|
-
return __generator(this, function (
|
|
315
|
-
switch (
|
|
315
|
+
var url, _a, rawHeaders, data, responseType, withCredentials, body, rawMethod, customReqOpts, headers, method, timeout, _b, abortController, cleanup, payload, realUrl, requestOptions, response, result_1, _c, _d, _e, _f, _g, _h, e_2, _j, _k, _l, _m, _o, headers_1;
|
|
316
|
+
return __generator(this, function (_p) {
|
|
317
|
+
switch (_p.label) {
|
|
316
318
|
case 0:
|
|
317
|
-
url = options.url, _a = options.headers,
|
|
318
|
-
headers = obj2StrRecord(
|
|
319
|
-
method = String(
|
|
320
|
-
abortController = new AbortController();
|
|
321
|
-
signal = abortController.signal;
|
|
319
|
+
url = options.url, _a = options.headers, rawHeaders = _a === void 0 ? {} : _a, data = options.data, responseType = options.responseType, withCredentials = options.withCredentials, body = options.body, rawMethod = options.method, customReqOpts = options.customReqOpts;
|
|
320
|
+
headers = obj2StrRecord(rawHeaders);
|
|
321
|
+
method = String(rawMethod).toLowerCase() || 'get';
|
|
322
322
|
timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
|
|
323
|
+
_b = this.createAbortController(timeout, enableAbort), abortController = _b[0], cleanup = _b[1];
|
|
323
324
|
if (isFormData(data)) {
|
|
324
325
|
payload = data;
|
|
325
326
|
}
|
|
@@ -333,74 +334,83 @@ var NodeRequest = (function () {
|
|
|
333
334
|
payload = data ? JSON.stringify(data) : undefined;
|
|
334
335
|
}
|
|
335
336
|
realUrl = this.getRealUrl(formatUrl('https', url !== null && url !== void 0 ? url : '', method === 'get' ? data : {}), options.headers || {}, payload);
|
|
336
|
-
if (enableAbort || timeout) {
|
|
337
|
-
timer = setTimeout(function () {
|
|
338
|
-
var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
|
|
339
|
-
console.warn(timeoutMsg);
|
|
340
|
-
abortController.abort(new Error(timeoutMsg));
|
|
341
|
-
}, timeout);
|
|
342
|
-
}
|
|
343
337
|
return [4, this.getReqOptions(realUrl, {
|
|
344
338
|
method: method,
|
|
345
339
|
headers: headers,
|
|
346
340
|
body: payload,
|
|
347
341
|
credentials: withCredentials ? 'include' : 'same-origin',
|
|
348
|
-
signal: signal,
|
|
342
|
+
signal: abortController.signal,
|
|
349
343
|
})];
|
|
350
344
|
case 1:
|
|
351
|
-
requestOptions =
|
|
352
|
-
|
|
345
|
+
requestOptions = _p.sent();
|
|
346
|
+
this.applyDuplexIfNeeded(requestOptions);
|
|
347
|
+
_p.label = 2;
|
|
353
348
|
case 2:
|
|
354
|
-
|
|
349
|
+
_p.trys.push([2, , 19, 20]);
|
|
355
350
|
return [4, fetch(realUrl, requestOptions)];
|
|
356
351
|
case 3:
|
|
357
|
-
response =
|
|
352
|
+
response = _p.sent();
|
|
358
353
|
result_1 = {
|
|
359
354
|
header: {},
|
|
360
355
|
statusCode: response.status,
|
|
361
356
|
};
|
|
362
|
-
|
|
357
|
+
_p.label = 4;
|
|
363
358
|
case 4:
|
|
364
|
-
|
|
365
|
-
_b = result_1;
|
|
359
|
+
_p.trys.push([4, 11, , 18]);
|
|
366
360
|
if (!(responseType === 'blob')) return [3, 6];
|
|
361
|
+
_c = result_1;
|
|
367
362
|
return [4, response.blob()];
|
|
368
363
|
case 5:
|
|
369
|
-
_c =
|
|
370
|
-
return [3,
|
|
364
|
+
_c.data = _p.sent();
|
|
365
|
+
return [3, 10];
|
|
371
366
|
case 6:
|
|
372
|
-
|
|
373
|
-
|
|
367
|
+
if (!(responseType === 'buffer')) return [3, 8];
|
|
368
|
+
_d = result_1;
|
|
369
|
+
_f = (_e = Buffer).from;
|
|
370
|
+
return [4, response.arrayBuffer()];
|
|
374
371
|
case 7:
|
|
375
|
-
|
|
376
|
-
|
|
372
|
+
_d.data = _f.apply(_e, [_p.sent()]);
|
|
373
|
+
return [3, 10];
|
|
377
374
|
case 8:
|
|
378
|
-
|
|
379
|
-
|
|
375
|
+
_g = result_1;
|
|
376
|
+
_h = safeParseJson;
|
|
377
|
+
return [4, response.text()];
|
|
380
378
|
case 9:
|
|
381
|
-
|
|
379
|
+
_g.data = _h.apply(void 0, [_p.sent()]);
|
|
380
|
+
_p.label = 10;
|
|
381
|
+
case 10: return [3, 18];
|
|
382
|
+
case 11:
|
|
383
|
+
e_2 = _p.sent();
|
|
382
384
|
console.log('catch an error', e_2);
|
|
383
|
-
|
|
384
|
-
|
|
385
|
+
if (!(responseType === 'blob')) return [3, 13];
|
|
386
|
+
_j = result_1;
|
|
385
387
|
return [4, response.blob()];
|
|
386
|
-
case 10:
|
|
387
|
-
_f = _g.sent();
|
|
388
|
-
return [3, 13];
|
|
389
|
-
case 11: return [4, response.text()];
|
|
390
388
|
case 12:
|
|
391
|
-
|
|
392
|
-
|
|
389
|
+
_j.data = _p.sent();
|
|
390
|
+
return [3, 17];
|
|
393
391
|
case 13:
|
|
394
|
-
|
|
395
|
-
|
|
392
|
+
if (!(responseType === 'buffer')) return [3, 15];
|
|
393
|
+
_k = result_1;
|
|
394
|
+
_m = (_l = Buffer).from;
|
|
395
|
+
return [4, response.arrayBuffer()];
|
|
396
396
|
case 14:
|
|
397
|
+
_k.data = _m.apply(_l, [_p.sent()]);
|
|
398
|
+
return [3, 17];
|
|
399
|
+
case 15:
|
|
400
|
+
_o = result_1;
|
|
401
|
+
return [4, response.text()];
|
|
402
|
+
case 16:
|
|
403
|
+
_o.data = _p.sent();
|
|
404
|
+
_p.label = 17;
|
|
405
|
+
case 17: return [3, 18];
|
|
406
|
+
case 18:
|
|
397
407
|
headers_1 = response.headers;
|
|
398
408
|
headers_1.forEach(function (val, key) { return (result_1.header[key.toLowerCase()] = val); });
|
|
399
409
|
return [2, result_1];
|
|
400
|
-
case
|
|
401
|
-
|
|
410
|
+
case 19:
|
|
411
|
+
cleanup();
|
|
402
412
|
return [7];
|
|
403
|
-
case
|
|
413
|
+
case 20: return [2];
|
|
404
414
|
}
|
|
405
415
|
});
|
|
406
416
|
});
|
|
@@ -448,7 +458,38 @@ var NodeRequest = (function () {
|
|
|
448
458
|
}
|
|
449
459
|
return urlObj.toString();
|
|
450
460
|
};
|
|
461
|
+
NodeRequest.prototype.createAbortController = function (timeout, enableAbort, externalSignal) {
|
|
462
|
+
var controller = new AbortController();
|
|
463
|
+
if (externalSignal) {
|
|
464
|
+
if (externalSignal.aborted) {
|
|
465
|
+
controller.abort();
|
|
466
|
+
}
|
|
467
|
+
else {
|
|
468
|
+
externalSignal.addEventListener('abort', function () { return controller.abort(); });
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
var timer;
|
|
472
|
+
if (enableAbort || timeout) {
|
|
473
|
+
timer = setTimeout(function () {
|
|
474
|
+
var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
|
|
475
|
+
console.warn(timeoutMsg);
|
|
476
|
+
controller.abort(new Error(timeoutMsg));
|
|
477
|
+
}, timeout);
|
|
478
|
+
}
|
|
479
|
+
return [controller, function () { return clearTimeout(timer); }];
|
|
480
|
+
};
|
|
481
|
+
NodeRequest.prototype.applyDuplexIfNeeded = function (options) {
|
|
482
|
+
var _a;
|
|
483
|
+
if (options.body && typeof ((_a = options.body) === null || _a === void 0 ? void 0 : _a.pipe) === 'function') {
|
|
484
|
+
options.duplex = 'half';
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
NodeRequest.prototype.isNpmFormData = function (obj) {
|
|
488
|
+
return obj && typeof obj === 'object'
|
|
489
|
+
&& typeof obj.getHeaders === 'function'
|
|
490
|
+
&& typeof obj.getBuffer === 'function';
|
|
491
|
+
};
|
|
451
492
|
return NodeRequest;
|
|
452
493
|
}());
|
|
453
494
|
export { NodeRequest };
|
|
454
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDeEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFM0UsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQTtBQUVoQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFHdEQsSUFBSSxNQUFNLEdBQXFDLElBQUksQ0FBQTtBQUNuRCxTQUFlLE9BQU87Ozs7Ozt5QkFDaEIsQ0FBQyxNQUFNLEVBQVAsY0FBTzs7OztvQkFHSyxXQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBOztvQkFBakQsR0FBRyxHQUFHLFNBQTJDO29CQUN2RCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTs7OztvQkFFakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQ7MEJBQzNELCtDQUErQzswQkFDL0Msc0JBQXNCLENBQUMsQ0FBQTs7d0JBRy9CLFdBQU8sTUFBTyxFQUFBOzs7O0NBQ2Y7QUFPRDtJQVVFLHFCQUFZLE1BQXlDO1FBQXJELGlCQUtDO1FBdURNLGtCQUFhLEdBQUcsVUFD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RyxVQUFVLENBQUE7U0FDN0I7UUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBMllILGtCQUFDO0FBQUQsQ0FBQyxBQXJjRCxJQXFjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7XG4gIElGZXRjaE9wdGlvbnMsXG4gIElSZXF1ZXN0Q29uZmlnLFxuICBJUmVxdWVzdE1ldGhvZCxcbiAgSVJlcXVlc3RPcHRpb25zLFxuICBSZXNwb25zZU9iamVjdCxcbiAgU0RLUmVxdWVzdEludGVyZmFjZSxcbiAgZm9ybWF0VXJsLFxufSBmcm9tICdAY2xvdWRiYXNlL2FkYXB0ZXItaW50ZXJmYWNlJ1xuaW1wb3J0IHsgQURNSU5fUEFUSCwgQ0xJRU5UX0FVVEhfUEFUSCB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgZ2V0Q2xvdWRiYXNlQ29udGV4dCwgZ2V0U2VjcmV0SW5mbywgSU5JVF9DT05GSUcgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IElDdXN0b21SZXFPcHRzIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7XG4gIGdldEVudixcbiAgaXNGb3JtRGF0YSxcbiAgdG9RdWVyeVN0cmluZyxcbiAgc2FmZVBhcnNlSnNvbixcbiAgb2JqMlN0clJlY29yZCxcbiAgaGVhZGVyc0luaXQySW5kZXhhYmxlLFxuICBnZXRDdXJyUnVuRW52VGFnLFxufSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbmZpZyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBnZXRTZGtWZXJzaW9uIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbW1vbidcbi8vIOW7tui/n+WKoOi9ve+8jOmBv+WFjemdniBOb2RlIOeOr+Wig+aJk+WMheaXtuW8leWFpeatpOWMhVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmxldCBzaWduRm46ICgoLi4uYXJnczogYW55W10pID0+IGFueSkgfCBudWxsID0gbnVsbFxuYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbigpIHtcbiAgaWYgKCFzaWduRm4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZSDigJQg6K+l5YyF5LuF5ZyoIE5vZGUg6L+Q6KGM5pe25a2Y5Zyo77yM5byA5Y+R546v5aKD5Y+v6IO95pyq5a6J6KOFXG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQoJ0BjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqcycpXG4gICAgICBzaWduRm4gPSBtb2Quc2lnblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+e8uuWwkeS+nei1liBAY2xvdWRiYXNlL3NpZ25hdHVyZS1ub2RlanPvvIzor7fmiafooYzku6XkuIvlkb3ku6Tlronoo4XvvJpcXG5cXG4nXG4gICAgICAgICsgJyAgbnBtIGluc3RhbGwgQGNsb3VkYmFzZS9zaWduYXR1cmUtbm9kZWpzXFxuXFxuJ1xuICAgICAgICArICfor6Xkvp3otZbnlKjkuo4gTm9kZSDnjq/looPkuIvnmoTor7fmsYLnrb7lkI3jgIInKVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2lnbkZuIVxufVxuXG4vKipcbiAqIE5vZGUuanMg546v5aKD5LiL55qEIEhUVFAg6K+35rGC5a6e546wXG4gKiDln7rkuo7ljp/nlJ8gZmV0Y2jvvIzmlK/mjIEgR0VUL1BPU1QvUFVUL+S4iuS8oC/kuIvovb0v5rWB5byP6K+35rGCXG4gKiDoh6rliqjlpITnkIYgVjMg562+5ZCN5ZKMIEJlYXJlciBUb2tlbiDorqTor4FcbiAqL1xuZXhwb3J0IGNsYXNzIE5vZGVSZXF1ZXN0IGltcGxlbWVudHMgU0RLUmVxdWVzdEludGVyZmFjZSB7XG4gIC8qKiDor7fmsYLphY3nva7vvIzljIXlkKvorqTor4Hkv6Hmga8gKi9cbiAgY29uZmlnOiBJUmVxdWVzdENvbmZpZyAmIElDbG91ZGJhc2VDb25maWdcblxuICAvKiog6K+35rGC6LaF5pe25pe26Ze077yI5q+r56eS77yJ77yM6buY6K6kIDE1MDAwICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyXG5cbiAgLyoqIOWPl+i2heaXtuaOp+WItueahOivt+axguexu+Wei+WIl+ihqCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc3RyaWN0ZWRNZXRob2RzOiBBcnJheTxJUmVxdWVzdE1ldGhvZD5cblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IElSZXF1ZXN0Q29uZmlnICYgSUNsb3VkYmFzZUNvbmZpZykge1xuICAgIGNvbnN0IHsgdGltZW91dCwgcmVzdHJpY3RlZE1ldGhvZHMgfSA9IGNvbmZpZ1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQgfHwgMTUwMDBcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzID0gcmVzdHJpY3RlZE1ldGhvZHMgfHwgWydnZXQnLCAncG9zdCcsICd1cGxvYWQnLCAnZG93bmxvYWQnXVxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5a6i5oi356uv5Yet6K+BIGFjY2Vzc190b2tlbu+8jOS4uueuoeeQhuWRmOadg+mZkFxuICAgKiDnlKjkuo7kuI3mlK/mjIEgVjMg562+5ZCN55qE5o6l5Y+j77yI5aaC5pWw5o2u5qih5Z6L44CB5YWz57O75Z6L5pWw5o2u5bqT44CBQUnvvIlcbiAgICovXG4gIGFzeW5jIGdldENsaWVudENyZWRlbnRpYWwob3B0czogeyBvcmlnaW46IHN0cmluZyB9KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmZldGNoKHtcbiAgICAgIHVybDogYCR7b3B0cy5vcmlnaW59JHtDTElFTlRfQVVUSF9QQVRIfWAsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdyYW50X3R5cGU6ICdjbGllbnRfY3JlZGVudGlhbHMnLFxuICAgICAgfSksXG4gICAgfSlcblxuICAgIHJldHVybiByZXMuZGF0YT8uYWNjZXNzX3Rva2VuXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5a6e6ZmF6K+35rGCIFVSTFxuICAgKiDlvZPor7fmsYLmnKrmkLrluKYgQXV0aG9yaXphdGlvbiDkuJTmnKroh6rluKYgYWNjZXNzX3Rva2VuIOaXtu+8jFxuICAgKiDlsIYgL3dlYiDot6/lvoTmm7/mjaLkuLogL2FkbWlu77yI566h55CG56uv562+5ZCN6Lev5b6E77yJXG4gICAqL1xuICBnZXRSZWFsVXJsKHVybDogc3RyaW5nLCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBib2R5OiBhbnkpIHtcbiAgICBpZiAoaGVhZGVycy5BdXRob3JpemF0aW9uPy5yZXBsYWNlKCdCZWFyZXInLCAnJyk/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIHVybFxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtcyA9IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkgOiBzYWZlUGFyc2VKc29uKGJvZHkpIHx8ICcnXG5cbiAgICBpZiAocGFyYW1zLmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIHVybFxuICAgIH1cblxuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKHVybE9iai5wYXRobmFtZSA9PT0gJy93ZWInICYmIHRoaXMuY29uZmlnLmF1dGg/LnNlY3JldElkICYmIHRoaXMuY29uZmlnLmF1dGg/LnNlY3JldEtleSkge1xuICAgICAgdXJsT2JqLnBhdGhuYW1lID0gQURNSU5fUEFUSFxuICAgIH1cbiAgICByZXR1cm4gdXJsT2JqLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8qKlxuICAgKiDkuLror7fmsYLmt7vliqDnrb7lkI3miJborqTor4Hkv6Hmga9cbiAgICpcbiAgICog5aSE55CG6YC76L6R5LyY5YWI57qn77yaXG4gICAqIDEuIOW3suaciSBBdXRob3JpemF0aW9uIGhlYWRlciDihpIg55u05o6l6L+U5ZueXG4gICAqIDIuIC9hdXRoLyDot6/lvoQg4oaSIFNESyDorqTor4HmjqXlj6PvvIzml6DpnIDnrb7lkI1cbiAgICogMy4g5LiN5pSv5oyBIFYzIOetvuWQjeeahOi3r+W+hO+8iC92MS9tb2RlbC8g562J77yJ4oaSIOeUqCBjbGllbnRDcmVkZW50aWFsIEJlYXJlciBUb2tlblxuICAgKiA0LiDlj4LmlbDlkKsgYWNjZXNzX3Rva2VuIOKGkiDml6DpnIDnrb7lkI1cbiAgICogNS4g5YW25LuWIOKGkiDkvb/nlKggVjMg562+5ZCN77yIVEMzLUhNQUMtU0hBMjU277yJXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVxT3B0aW9ucyA9IGFzeW5jIChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBtZXRob2Q/OiBhbnlcbiAgICAgIGhlYWRlcnM6IGFueVxuICAgICAgYm9keT86IGFueVxuICAgICAgY3JlZGVudGlhbHM/OiBzdHJpbmdcbiAgICAgIHNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgICB1cmw/OiBhbnlcbiAgICB9LFxuICApID0+IHtcbiAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybClcblxuICAgIGNvbnN0IHsgVENCX1NPVVJDRSB9ID0gZ2V0Q2xvdWRiYXNlQ29udGV4dCgpXG4gICAgLy8gTm90ZTog5LqR5Ye95pWw6KKr6LCD55So5pe25Y+v6IO96LCD55So56uv5pyq5Lyg6YCSIFNPVVJDRe+8jFRDQl9TT1VSQ0Ug5Y+v6IO95Li656m6XG4gICAgY29uc3QgU09VUkNFID0gYCR7SU5JVF9DT05GSUcuY29udGV4dD8uZXh0ZW5kZWRDb250ZXh0Py5zb3VyY2UgfHwgVENCX1NPVVJDRSB8fCAnJ30sJHthd2FpdCBnZXRDdXJyUnVuRW52VGFnKCl9YFxuXG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgJ1VzZXItQWdlbnQnOiBgYWRhcHRlci1ub2RlLyR7b3B0aW9ucy5oZWFkZXJzPy5bJ1gtU0RLLVZlcnNpb24nXSB8fCBgQGNsb3VkYmFzZS9qcy1zZGsvJHtnZXRTZGtWZXJzaW9uKCl9YH1gLFxuICAgICAgJ1gtVENCLVNvdXJjZSc6IFNPVVJDRSxcbiAgICAgICdYLUNsaWVudC1UaW1lc3RhbXAnOiBuZXcgRGF0ZSgpLnZhbHVlT2YoKSxcbiAgICAgICdYLVRDQi1SZWdpb24nOiBJTklUX0NPTkZJRy5yZWdpb24gfHwgZ2V0RW52KCdURU5DRU5UQ0xPVURfUkVHSU9OJykgfHwgJycsXG4gICAgICBIb3N0OiB1cmxPYmouaG9zdCxcbiAgICB9XG5cbiAgICAvLyDlt7LmkLrluKbmnInmlYggQXV0aG9yaXphdGlvbu+8jOebtOaOpei/lOWbnlxuICAgIGlmIChvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbj8ucmVwbGFjZSgnQmVhcmVyJywgJycpPy50cmltKCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gYXV0aCDnm7jlhbPmjqXlj6PkuI3pnIDopoHnrb7lkI1cbiAgICBpZiAodXJsT2JqLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy9hdXRoLycpICYmIHVybE9iai5wYXRobmFtZSAhPT0gQ0xJRU5UX0FVVEhfUEFUSCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBjb25zdCBpc0FkbWluUGF0aCA9IHVybE9iai5wYXRobmFtZSA9PT0gQURNSU5fUEFUSFxuXG4gICAgLy8g6L+Z5Lqb6Lev5b6E5LiN5pSv5oyBIFYzIOetvuWQje+8jOaUueeUqCBjbGllbnRDcmVkZW50aWFsIOiOt+WPliBCZWFyZXIgVG9rZW5cbiAgICBjb25zdCBVTlNVUFBPUlRFRF9WM19TSUdOX1BBVEggPSBbJy92MS9tb2RlbC8nLCAnL3YxL3JkYi8nLCAnL3YxL2FpLyddXG5cbiAgICBpZiAoVU5TVVBQT1JURURfVjNfU0lHTl9QQVRILnNvbWUodiA9PiB1cmxPYmoucGF0aG5hbWUuc3RhcnRzV2l0aCh2KSkpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5nZXRDbGllbnRDcmVkZW50aWFsKHsgb3JpZ2luOiB1cmxPYmoub3JpZ2luIH0pXG4gICAgICBvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gXG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGxldCB7IHNlY3JldElkLCBzZWNyZXRLZXksIHNlc3Npb25Ub2tlbiB9ID0gdGhpcy5jb25maWc/LmF1dGggfHwge31cbiAgICBjb25zdCB7IHNlY3JldFR5cGUgfSA9IHRoaXMuY29uZmlnPy5hdXRoIHx8IHt9XG4gICAgY29uc3QgeyBtZXRob2QsIGJvZHkgfSA9IG9wdGlvbnNcbiAgICBjb25zdCBoZWFkZXJzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zLmhlYWRlcnMpKVxuICAgIGxldCBwYXJhbXMgPSB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5IDogc2FmZVBhcnNlSnNvbihib2R5KSB8fCB7fVxuXG4gICAgcGFyYW1zLmVudk5hbWUgPSBwYXJhbXM/LmVudiB8fCB0aGlzLmNvbmZpZy5lbnYgfHwgZ2V0U2VjcmV0SW5mbygpPy5lbnYgfHwgJydcblxuICAgIC8vIOWPguaVsOiHquW4piBhY2Nlc3NfdG9rZW7vvIzml6DpnIDnrb7lkI1cbiAgICBpZiAocGFyYW1zLmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBHRVQg6K+35rGC5Y+C5pWw5bey5ZyoIFVSTCDkuK3vvIznrb7lkI3ml7YgcGFyYW1zIOe9ruepulxuICAgIGlmIChtZXRob2QudG9Mb3dlckNhc2UoKSA9PT0gJ2dldCcpIHtcbiAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIC8vIFNFU1NJT05fU0VDUkVUIOexu+Wei+aIluaXoOWvhumSpeaXtu+8jOS7jueOr+Wig+WPmOmHj+iOt+WPluS4tOaXtuWvhumSpVxuICAgIGlmICghc2VjcmV0SWQgfHwgIXNlY3JldEtleSB8fCBzZWNyZXRUeXBlID09PSAnU0VTU0lPTl9TRUNSRVQnKSB7XG4gICAgICBjb25zdCBzZWNyZXRJbmZvID0gZ2V0U2VjcmV0SW5mbygpXG4gICAgICBzZWNyZXRJZCA9IHNlY3JldEluZm8uc2VjcmV0SWRcbiAgICAgIHNlY3JldEtleSA9IHNlY3JldEluZm8uc2VjcmV0S2V5XG4gICAgICBzZXNzaW9uVG9rZW4gPSBzZWNyZXRJbmZvLnNlc3Npb25Ub2tlblxuICAgIH1cblxuICAgIC8vIOS7jeaXoOWvhumSpeWImei3s+i/h+etvuWQjVxuICAgIGlmICghc2VjcmV0SWQgfHwgIXNlY3JldEtleSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uXG5cbiAgICAvLyBjb250ZW50LXR5cGUg6ZyA5LiO5pyN5Yqh56uv562+5ZCN6aqM6K+B5L+d5oyB5aSn5bCP5YaZ5LiA6Ie0XG4gICAgaWYgKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLnRvTG93ZXJDYXNlKClcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSB7XG4gICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICBpZiAoaXNBZG1pblBhdGggJiYgISFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5zZXNzaW9uVG9rZW4gPSBzZXNzaW9uVG9rZW5cbiAgICB9XG5cbiAgICBjb25zdCBzaWduZWRQYXJhbXMgPSB7XG4gICAgICBzZWNyZXRJZCxcbiAgICAgIHNlY3JldEtleSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICB3aXRoU2lnbmVkUGFyYW1zOiBpc0FkbWluUGF0aCxcbiAgICAgIHRpbWVzdGFtcDogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMSxcbiAgICAgIGlzQ2xvdWRBcGk6ICFpc0FkbWluUGF0aCxcbiAgICB9XG5cbiAgICBpZiAoIWhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICYmICFoZWFkZXJzWydDb250ZW50LVR5cGUnXSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBjb25zdCBzaWduID0gYXdhaXQgZ2V0U2lnbigpXG4gICAgaWYgKCFzaWduKSByZXR1cm4gb3B0aW9uc1xuXG4gICAgY29uc3QgeyBhdXRob3JpemF0aW9uLCB0aW1lc3RhbXAgfSA9IHNpZ24oc2lnbmVkUGFyYW1zKVxuXG4gICAgaWYgKHR5cGVvZiBzZXNzaW9uVG9rZW4gPT09ICdzdHJpbmcnICYmIHNlc3Npb25Ub2tlbiAhPT0gJycpIHtcbiAgICAgIGlmIChpc0FkbWluUGF0aCkge1xuICAgICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufWBcbiAgICAgICAgaGVhZGVyc1snWC1UaW1lc3RhbXAnXSA9IHRpbWVzdGFtcFxuICAgICAgICBoZWFkZXJzWydYLVNpZ25hdHVyZS1FeHBpcmVzJ10gPSA2MDBcbiAgICAgIH0gZWxzZSAge1xuICAgICAgICAvLyDkuLTml7blr4bpkqXpnIDopoHpop3lpJbpmYTluKYgVG9rZW5cbiAgICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvbn0sIFRpbWVzdGFtcD0ke3RpbWVzdGFtcH0sIFRva2VuPSR7c2Vzc2lvblRva2VufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvbn0sIFRpbWVzdGFtcD0ke3RpbWVzdGFtcH1gXG5cbiAgICAgIC8vIGFkbWluIOi3r+W+hOmcgOimgemineWklueahOaXtumXtOaIs+WSjOi/h+acn+WktFxuICAgICAgaWYgKGlzQWRtaW5QYXRoKSB7XG4gICAgICAgIGhlYWRlcnNbJ1gtVGltZXN0YW1wJ10gPSB0aW1lc3RhbXBcbiAgICAgICAgaGVhZGVyc1snWC1TaWduYXR1cmUtRXhwaXJlcyddID0gNjAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogdHlwZW9mIHBhcmFtcyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShwYXJhbXMpIDogcGFyYW1zLFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4gdGhpcy5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgIH0sXG4gICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygnZ2V0JyksXG4gIClcblxuICBwdWJsaWMgcG9zdCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3QoXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIH0sXG4gICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygncG9zdCcpLFxuICApXG5cbiAgcHVibGljIHB1dCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3Qoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbWV0aG9kOiAncHV0JyxcbiAgfSlcblxuICAvKipcbiAgICog5paH5Lu25LiK5LygXG4gICAqIFBPU1Qg5pa55byP77ya5p6E5bu6IEZvcm1EYXRhIOS4iuS8oFxuICAgKiBQVVQg5pa55byP77ya55u05o6l5bCG5paH5Lu25L2c5Li6IGJvZHkg5LiK5LygXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7IGRhdGE6IF9kYXRhLCBmaWxlLCBuYW1lLCBtZXRob2QsIGhlYWRlcnMgPSB7fSB9ID0gb3B0aW9uc1xuICAgIGlmIChmaWxlID09PSB1bmRlZmluZWQgfHwgbmFtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlsZSBhbmQgbmFtZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBvYmoyU3RyUmVjb3JkKF9kYXRhID8/IHt9KVxuICAgIGNvbnN0IGxvd2VyZWRNZXRob2QgPSBtZXRob2Q/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCByZXFNZXRob2QgPSBbJ3Bvc3QnLCAncHV0J10uZmluZChtID0+IG0gPT09IGxvd2VyZWRNZXRob2QpID8/ICdwdXQnXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIGlmIChyZXFNZXRob2QgPT09ICdwb3N0Jykge1xuICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGFba2V5XSlcbiAgICAgIH0pXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2tleScsIG5hbWUpXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKVxuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgbWV0aG9kOiByZXFNZXRob2QsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ3VwbG9hZCcpLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IGZpbGUsXG4gICAgICB9LFxuICAgICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygndXBsb2FkJyksXG4gICAgKVxuICB9XG5cbiAgLyoqIOaWh+S7tuS4i+i9ve+8iE5vZGUuanMg546v5aKD77yM6YCa6L+HIGZldGNoIOiOt+WPluaWh+S7tuWGheWuueW5tuWGmeWFpeacrOWcsOaWh+S7tuaIlui/lOWbniBCdWZmZXLvvIkgKi9cbiAgcHVibGljIGRvd25sb2FkID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKG9wdGlvbnMudXJsISwge1xuICAgICAgaGVhZGVyczoge30sXG4gICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0KSxcbiAgICB9KVxuXG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRG93bmxvYWQgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzLnN0YXR1c31gKVxuICAgIH1cblxuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKClcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcilcblxuICAgIC8vIOWmguaenOaMh+WumuS6hiB0ZW1wRmlsZVBhdGjvvIzlsIbmlofku7blhpnlhaXmnKzlnLBcbiAgICBjb25zdCB7IHRlbXBGaWxlUGF0aCB9ID0gb3B0aW9uc1xuICAgIGlmICh0ZW1wRmlsZVBhdGgpIHtcbiAgICAgIC8vIOehruS/neebruW9leWtmOWcqFxuICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKHRlbXBGaWxlUGF0aClcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgYnVmZmVyKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICB0ZW1wRmlsZVBhdGgsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g5pyq5oyH5a6a6Lev5b6E5pe26L+U5ZueIEJ1ZmZlclxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICB0ZW1wRmlsZVBhdGg6IG9wdGlvbnMudXJsLFxuICAgICAgZmlsZUNvbnRlbnQ6IGJ1ZmZlcixcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5bqV5bGCIGZldGNoIOivt+axgu+8jOaUr+aMgea1geW8j+WTjeW6lFxuICAgKiDotoXml7bpgJrov4cgQWJvcnRDb250cm9sbGVyICsgc2V0VGltZW91dCDlrp7njrBcbiAgICovXG4gIHB1YmxpYyBmZXRjaCA9IGFzeW5jIChvcHRpb25zOiBPbWl0PElGZXRjaE9wdGlvbnMsICdzaWduYWwnPiAmIHsgc2lnbmFsPzogQWJvcnRTaWduYWw7IGN1c3RvbVJlcU9wdHM/OiBJQ3VzdG9tUmVxT3B0cyB9KTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4ge1xuICAgIGNvbnN0IHsgZW5hYmxlQWJvcnQgPSBmYWxzZSwgc3RyZWFtID0gZmFsc2UsIHNpZ25hbCwgY3VzdG9tUmVxT3B0cyB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UmVhbFVybChvcHRpb25zLnVybCwgb3B0aW9ucy5oZWFkZXJzIHx8IHt9LCBvcHRpb25zLmJvZHkpXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgdGltZW91dCA9IGN1c3RvbVJlcU9wdHM/LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0XG5cbiAgICAvLyDmoaXmjqXlpJbpg6ggc2lnbmFsIOWIsOWGhemDqCBBYm9ydENvbnRyb2xsZXJcbiAgICBpZiAoc2lnbmFsKSB7XG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IGFib3J0Q29udHJvbGxlci5hYm9ydCgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOi2heaXtuiHquWKqOS4reaWrVxuICAgIGxldCB0aW1lciA9IHVuZGVmaW5lZFxuICAgIGlmIChlbmFibGVBYm9ydCB8fCB0aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0TXNnID0gYOivt+axguWcqCR7dGltZW91dCAvIDEwMDB9c+WGheacquWujOaIkO+8jOW3suS4reaWrWBcbiAgICAgICAgY29uc29sZS53YXJuKHRpbWVvdXRNc2cpXG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IodGltZW91dE1zZykpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgPyBoZWFkZXJzSW5pdDJJbmRleGFibGUob3B0aW9ucy5oZWFkZXJzKSA6IHVuZGVmaW5lZFxuXG4gICAgY29uc3QgZmV0Y2hPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRSZXFPcHRpb25zKHVybCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBvcHRpb25zLmJvZHkgYXMgYW55IGFzIE5vZGVKUy5SZWFkYWJsZVN0cmVhbSxcbiAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCBmZXRjaE9wdGlvbnMgYXMgUmVxdWVzdEluaXQpXG4gICAgICAudGhlbigoeCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICAgIHJldHVybiB4XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCh4KSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHgpXG4gICAgICB9KVxuXG4gICAgY29uc3QgcmV0ID0ge1xuICAgICAgZGF0YTpcbiAgICAgICAgK3Jlcy5zdGF0dXMgPT09IDIwNFxuICAgICAgICAgID8gJycgLy8gMjA0IE5vIENvbnRlbnRcbiAgICAgICAgICA6IHN0cmVhbVxuICAgICAgICAgICAgPyByZXMuYm9keVxuICAgICAgICAgICAgOiBhd2FpdCByZXMuanNvbigpLFxuICAgICAgc3RhdHVzQ29kZTogcmVzLnN0YXR1cyxcbiAgICAgIGhlYWRlcjogcmVzLmhlYWRlcnMsXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIC8qKlxuICAgKiDpgJrnlKjor7fmsYLmlrnms5XvvIzooqsgZ2V0L3Bvc3QvcHV0L3VwbG9hZCDnrYnosIPnlKhcbiAgICog6LSf6LSj5p6E5bu6IHBheWxvYWTjgIHorr7nva7otoXml7bjgIHop6PmnpDlk43lupRcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSDor7fmsYLpgInpoblcbiAgICogQHBhcmFtIGVuYWJsZUFib3J0IC0g5piv5ZCm5ZCv55So6LaF5pe25Lit5pat77yI55SxIHJlc3RyaWN0ZWRNZXRob2RzIOWGs+Wumu+8iVxuICAgKi9cbiAgcHVibGljIHJlcXVlc3QgPSBhc3luYyAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zLCBlbmFibGVBYm9ydCA9IGZhbHNlKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHVybCxcbiAgICAgIGhlYWRlcnM6IF9oZWFkZXJzID0ge30sXG4gICAgICBkYXRhLFxuICAgICAgcmVzcG9uc2VUeXBlLFxuICAgICAgd2l0aENyZWRlbnRpYWxzLFxuICAgICAgYm9keSxcbiAgICAgIG1ldGhvZDogX21ldGhvZCxcbiAgICAgIGN1c3RvbVJlcU9wdHMsXG4gICAgfSA9IG9wdGlvbnNcbiAgICBjb25zdCBoZWFkZXJzID0gb2JqMlN0clJlY29yZChfaGVhZGVycylcbiAgICBjb25zdCBtZXRob2QgPSBTdHJpbmcoX21ldGhvZCkudG9Mb3dlckNhc2UoKSB8fCAnZ2V0J1xuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IHsgc2lnbmFsIH0gPSBhYm9ydENvbnRyb2xsZXJcbiAgICBjb25zdCB0aW1lb3V0ID0gY3VzdG9tUmVxT3B0cz8udGltZW91dCB8fCB0aGlzLnRpbWVvdXRcblxuICAgIC8vIOaehOW7uuivt+axgiBwYXlsb2Fk77yaRm9ybURhdGEgPiB1cmxlbmNvZGVkID4gcmF3IGJvZHkgPiBKU09OXG4gICAgbGV0IHBheWxvYWRcbiAgICBpZiAoaXNGb3JtRGF0YShkYXRhKSkge1xuICAgICAgcGF5bG9hZCA9IGRhdGFcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgcGF5bG9hZCA9IHRvUXVlcnlTdHJpbmcoZGF0YSA/PyB7fSlcbiAgICB9IGVsc2UgaWYgKGJvZHkpIHtcbiAgICAgIHBheWxvYWQgPSBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIHBheWxvYWQgPSBkYXRhID8gSlNPTi5zdHJpbmdpZnkoZGF0YSkgOiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCByZWFsVXJsID0gdGhpcy5nZXRSZWFsVXJsKFxuICAgICAgZm9ybWF0VXJsKCdodHRwcycsIHVybCA/PyAnJywgbWV0aG9kID09PSAnZ2V0JyA/IGRhdGEgOiB7fSksXG4gICAgICBvcHRpb25zLmhlYWRlcnMgfHwge30sXG4gICAgICBwYXlsb2FkLFxuICAgIClcblxuICAgIC8vIOi2heaXtumAmui/hyBBYm9ydENvbnRyb2xsZXIgKyBzZXRUaW1lb3V0IOWunueOsFxuICAgIGxldCB0aW1lclxuXG4gICAgaWYgKGVuYWJsZUFib3J0IHx8IHRpbWVvdXQpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRNc2cgPSBg6K+35rGC5ZyoJHt0aW1lb3V0IC8gMTAwMH1z5YaF5pyq5a6M5oiQ77yM5bey5Lit5patYFxuICAgICAgICBjb25zb2xlLndhcm4odGltZW91dE1zZylcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcih0aW1lb3V0TXNnKSlcbiAgICAgIH0sIHRpbWVvdXQpXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldFJlcU9wdGlvbnMocmVhbFVybCwge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IHBheWxvYWQsXG4gICAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIHNpZ25hbCxcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVhbFVybCwgcmVxdWVzdE9wdGlvbnMgYXMgUmVxdWVzdEluaXQpXG4gICAgICBjb25zdCByZXN1bHQ6IFJlc3BvbnNlT2JqZWN0ID0ge1xuICAgICAgICBoZWFkZXI6IHt9LFxuICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdC5kYXRhID0gcmVzcG9uc2VUeXBlID09PSAnYmxvYicgPyBhd2FpdCByZXNwb25zZS5ibG9iKCkgOiBzYWZlUGFyc2VKc29uKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8g5LiK5LygIFBPU1Qg6K+35rGC5Y+v6IO96L+U5ZueIFhNTCDnrYnpnZ4gSlNPTiDmoLzlvI/vvIzlrrnplJnlpITnkIZcbiAgICAgICAgY29uc29sZS5sb2coJ2NhdGNoIGFuIGVycm9yJywgZSlcbiAgICAgICAgcmVzdWx0LmRhdGEgPSByZXNwb25zZVR5cGUgPT09ICdibG9iJyA/IGF3YWl0IHJlc3BvbnNlLmJsb2IoKSA6IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgICAgfVxuXG4gICAgICAvLyDlsIblk43lupTlpLTnu5/kuIDovazkuLrlsI/lhpkga2V5XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlXG4gICAgICBoZWFkZXJzLmZvckVhY2goKHZhbCwga2V5KSA9PiAocmVzdWx0LmhlYWRlcltrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWwpKVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDeEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUE7QUFDNUIsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFM0UsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQTtBQUVoQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFHdEQsSUFBSSxNQUFNLEdBQXFDLElBQUksQ0FBQTtBQUNuRCxTQUFlLE9BQU87Ozs7Ozt5QkFDaEIsQ0FBQyxNQUFNLEVBQVAsY0FBTzs7OztvQkFHSyxXQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBOztvQkFBakQsR0FBRyxHQUFHLFNBQTJDO29CQUN2RCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTs7OztvQkFFakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQ7MEJBQzNELCtDQUErQzswQkFDL0Msc0JBQXNCLENBQUMsQ0FBQTs7d0JBRy9CLFdBQU8sTUFBTyxFQUFBOzs7O0NBQ2Y7QUFPRDtJQVVFLHFCQUFZLE1BQXlDO1FBQXJELGlCQUtDO1FBNkNNLGtCQUFhLEdBQUcsVUFDckIsR0FBVyxFQUNYLE9BT0M7Ozs7Ozt3QkFFSyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBRW5CLFVBQVUsR0FBSyxtQkFBbUIsRUFBRSxXQUExQixDQUEwQjs2Q0FFMUIsQ0FBQSxNQUFBLE1BQUEsV0FBVyxDQUFDLE9BQU8sMENBQUUsZUFBZSwwQ0FBRSxNQUFNLEtBQUksVUFBVSxJQUFJLEVBQUU7d0JBQUksV0FBTSxnQkFBZ0IsRUFBRSxFQUFBOzt3QkFBeEcsTUFBTSxHQUFHLGNBQXVFLFNBQXdCLEVBQUU7d0JBRWhILE9BQU8sQ0FBQyxPQUFPLHlCQUNWLE9BQU8sQ0FBQyxPQUFPLEtBQ2xCLFlBQVksRUFBRSx1QkFBZ0IsQ0FBQSxNQUFBLE9BQU8sQ0FBQyxPQUFPLDBDQUFHLGVBQWUsQ0FBQyxLQUFJLDRCQUFxQixhQUFhLEVBQUUsQ0FBRSxDQUFFLEVBQzVHLGNBQWMsRUFBRSxNQUFNLEVBQ3RCLG9CQUFvQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQzFDLGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsRUFDekUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQ2xCLENBQUE7d0JBR0QsSUFBSSxNQUFBLE1BQUEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLDBDQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLDBDQUFFLElBQUksRUFBRSxFQUFFOzRCQUNoRSxXQUFPLE9BQU8sRUFBQTt5QkFDZjt3QkFHRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLEVBQUU7NEJBQ2hGLFdBQU8sT0FBTyxFQUFBO3lCQUNmO3dCQUVLLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQTt3QkFHNUMsd0JBQXdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFBOzZCQUVsRSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBN0IsQ0FBNkIsQ0FBQyxFQUFqRSxjQUFpRTt3QkFDckQsV0FBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUE7O3dCQUFqRSxLQUFLLEdBQUcsU0FBeUQ7d0JBQ3ZFLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLGlCQUFVLEtBQUssQ0FBRSxDQUFBO3dCQUNqRCxXQUFPLE9BQU8sRUFBQTs7d0JBR1osS0FBd0MsQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLElBQUksS0FBSSxFQUFFLEVBQTdELFFBQVEsY0FBQSxFQUFFLFNBQVMsZUFBQSxFQUFFLFlBQVksa0JBQUEsQ0FBNEI7d0JBQzNELFVBQVUsR0FBSyxDQUFBLENBQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxJQUFJLEtBQUksRUFBRSxDQUFBLFdBQTVCLENBQTRCO3dCQUN0QyxNQUFNLEdBQVcsT0FBTyxPQUFsQixFQUFFLElBQUksR0FBSyxPQUFPLEtBQVosQ0FBWTt3QkFDMUIsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTt3QkFPckQsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFHbEQsSUFBSSxpQkFBaUIsRUFBRTs0QkFFckIsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxjQUFNLElBQUksQ0FBQyxVQUFVLEVBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQTt5QkFDdkQ7NkJBQU07NEJBQ0wsTUFBTSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO3lCQUNyRTt3QkFFRCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEdBQUcsS0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSSxNQUFBLGFBQWEsRUFBRSwwQ0FBRSxHQUFHLENBQUEsSUFBSSxFQUFFLENBQUE7d0JBRzdFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTs0QkFDdkIsV0FBTyxPQUFPLEVBQUE7eUJBQ2Y7d0JBR0QsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFOzRCQUNsQyxNQUFNLEdBQUcsU0FBUyxDQUFBO3lCQUNuQjt3QkFHRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsS0FBSyxnQkFBZ0IsRUFBRTs0QkFDeEQsVUFBVSxHQUFHLGFBQWEsRUFBRSxDQUFBOzRCQUNsQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQTs0QkFDOUIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUE7NEJBQ2hDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFBO3lCQUN2Qzt3QkFHRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFOzRCQUMzQixXQUFPLE9BQU8sRUFBQTt5QkFDZjt3QkFFRCxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUE7d0JBRzVCLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFOzRCQUMzQixPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO3lCQUNoRTs2QkFBTSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTs0QkFDbEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTt5QkFDaEU7d0JBRUQsSUFBSSxXQUFXLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRTs0QkFDakMsTUFBTSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7eUJBQ25DO3dCQUVLLFlBQVksR0FBRzs0QkFDbkIsUUFBUSxVQUFBOzRCQUNSLFNBQVMsV0FBQTs0QkFDVCxNQUFNLFFBQUE7NEJBQ04sR0FBRyxLQUFBOzRCQUNILE1BQU0sUUFBQTs0QkFDTixPQUFPLFNBQUE7NEJBQ1AsZ0JBQWdCLEVBQUUsV0FBVzs0QkFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzRCQUN0RCxVQUFVLEVBQUUsQ0FBQyxXQUFXO3lCQUN6QixDQUFBO3dCQUVELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7NEJBQ3hELFdBQU8sT0FBTyxFQUFBO3lCQUNmO3dCQUVZLFdBQU0sT0FBTyxFQUFFLEVBQUE7O3dCQUF0QixJQUFJLEdBQUcsU0FBZTt3QkFDNUIsSUFBSSxDQUFDLElBQUk7NEJBQUUsV0FBTyxPQUFPLEVBQUE7d0JBRW5CLEtBQStCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBL0MsYUFBYSxtQkFBQSxFQUFFLFNBQVMsZUFBQSxDQUF1Qjt3QkFFdkQsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRTs0QkFDM0QsSUFBSSxXQUFXLEVBQUU7Z0NBQ2YsT0FBTyxDQUFDLGFBQWEsR0FBRyxVQUFHLGFBQWEsQ0FBRSxDQUFBO2dDQUMxQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFBO2dDQUNsQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxHQUFHLENBQUE7NkJBQ3JDO2lDQUFPO2dDQUVOLE9BQU8sQ0FBQyxhQUFhLEdBQUcsVUFBRyxhQUFhLHlCQUFlLFNBQVMscUJBQVcsWUFBWSxDQUFFLENBQUE7NkJBQzFGO3lCQUNGOzZCQUFNOzRCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsVUFBRyxhQUFhLHlCQUFlLFNBQVMsQ0FBRSxDQUFBOzRCQUdsRSxJQUFJLFdBQVcsRUFBRTtnQ0FDZixPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFBO2dDQUNsQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxHQUFHLENBQUE7NkJBQ3JDO3lCQUNGO3dCQUdELElBQUksaUJBQWlCLEVBQUU7NEJBSWYsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBOzRCQUN2QixZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTs0QkFHNUUsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQ0FDbEQsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7NkJBQ25EOzRCQUNELElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0NBQzVELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBOzZCQUM3RDs0QkFFSyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUE7NEJBQ3pDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQTs0QkFFakQsaUNBQ0ssT0FBTyxLQUNWLE9BQU8saUNBQ0YsT0FBTyxHQUNQLFdBQVcsS0FDZCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUU3QyxJQUFJLEVBQUUsVUFBVSxLQUNqQjt5QkFDRjt3QkFFRCxpQ0FDSyxPQUFPLEtBQ1YsT0FBTyxTQUFBLEVBQ1AsSUFBSSxFQUFFLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUNuRTs7O2FBQ0YsQ0FBQTtRQUVNLFFBQUcsR0FBRyxVQUFDLE9BQXdCLElBQThCLE9BQUEsS0FBSSxDQUFDLE9BQU8sdUJBRXpFLE9BQU8sS0FDVixNQUFNLEVBQUUsS0FBSyxLQUVmLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQ3ZDLEVBTm1FLENBTW5FLENBQUE7UUFFTSxTQUFJLEdBQUcsVUFBQyxPQUF3QixJQUE4QixPQUFBLEtBQUksQ0FBQyxPQUFPLHVCQUUxRSxPQUFPLEtBQ1YsTUFBTSxFQUFFLE1BQU0sS0FFaEIsS0FBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDeEMsRUFOb0UsQ0FNcEUsQ0FBQTtRQUVNLFFBQUcsR0FBRyxVQUFDLE9BQXdCLElBQThCLE9BQUEsS0FBSSxDQUFDLE9BQU8sdUJBQzNFLE9BQU8sS0FDVixNQUFNLEVBQUUsS0FBSyxJQUNiLEVBSGtFLENBR2xFLENBQUE7UUFPSyxXQUFNLEdBQUcsVUFBQyxPQUF3Qjs7WUFDakMsSUFBQSxLQUFtRSxPQUFjLEVBQS9FLElBQUksVUFBQSxFQUFRLE9BQU8sVUFBQSxFQUFFLFdBQVcsaUJBQUEsRUFBRSxJQUFJLFVBQUEsRUFBRSxNQUFNLFlBQUEsRUFBRSxlQUFZLEVBQVosT0FBTyxtQkFBRyxFQUFFLEtBQW1CLENBQUE7WUFFdkYsSUFBTSxJQUFJLEdBQUcsT0FBTyxhQUFQLE9BQU8sY0FBUCxPQUFPLEdBQUksV0FBVyxDQUFBO1lBQ25DLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7YUFDN0M7WUFDRCxJQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxhQUFKLElBQUksY0FBSixJQUFJLEdBQUksRUFBRSxDQUFDLENBQUE7WUFDNUMsSUFBTSxhQUFhLEdBQUcsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFdBQVcsRUFBRSxDQUFBO1lBQzNDLElBQU0sU0FBUyxHQUFHLE1BQUEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxLQUFLLGFBQWEsRUFBbkIsQ0FBbUIsQ0FBQyxtQ0FBSSxLQUFLLENBQUE7WUFDekUsSUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQTtZQUMvQixJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBRztvQkFDbEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQ3ZDLENBQUMsQ0FBQyxDQUFBO2dCQUNGLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUM1QixRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUN2RSxPQUFPLEtBQUksQ0FBQyxPQUFPLHVCQUVaLE9BQU8sS0FDVixJQUFJLEVBQUUsUUFBUSxFQUNkLE1BQU0sRUFBRSxTQUFTLEtBRW5CLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQzFDLENBQUE7YUFDRjtZQUVELE9BQU8sS0FBSSxDQUFDLE9BQU8sdUJBRVosT0FBTyxLQUNWLE1BQU0sRUFBRSxLQUFLLEVBQ2IsT0FBTyxTQUFBLEVBQ1AsSUFBSSxFQUFFLElBQUksS0FFWixLQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUMxQyxDQUFBO1FBQ0gsQ0FBQyxDQUFBO1FBR00sYUFBUSxHQUFHLFVBQU8sT0FBd0I7Ozs7NEJBQ25DLFdBQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFJLEVBQUU7NEJBQ3BDLE9BQU8sRUFBRSxFQUFFOzRCQUNYLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7eUJBQzFDLENBQUMsRUFBQTs7d0JBSEksR0FBRyxHQUFHLFNBR1Y7d0JBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7NEJBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBK0IsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDLENBQUE7eUJBQzdEO3dCQUVtQixXQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBQTs7d0JBQXJDLFdBQVcsR0FBRyxTQUF1Qjt3QkFDckMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7d0JBRy9CLFlBQVksR0FBSyxPQUFPLGFBQVosQ0FBWTt3QkFDaEMsSUFBSSxZQUFZLEVBQUU7NEJBRVYsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7NEJBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dDQUN2QixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBOzZCQUN2Qzs0QkFDRCxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQTs0QkFDdEMsV0FBTztvQ0FDTCxVQUFVLEVBQUUsR0FBRztvQ0FDZixZQUFZLGNBQUE7aUNBQ2IsRUFBQTt5QkFDRjt3QkFHRCxXQUFPO2dDQUNMLFVBQVUsRUFBRSxHQUFHO2dDQUNmLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRztnQ0FDekIsV0FBVyxFQUFFLE1BQU07NkJBQ3BCLEVBQUE7OzthQUNGLENBQUE7UUFNTSxVQUFLLEdBQUcsVUFBTyxPQUFpRzs7Ozs7O3dCQUM3RyxLQUErRCxPQUFPLFlBQW5ELEVBQW5CLFdBQVcsbUJBQUcsS0FBSyxLQUFBLEVBQUUsS0FBMEMsT0FBTyxPQUFuQyxFQUFkLE1BQU0sbUJBQUcsS0FBSyxLQUFBLEVBQUUsTUFBTSxHQUFvQixPQUFPLE9BQTNCLEVBQUUsYUFBYSxHQUFLLE9BQU8sY0FBWixDQUFZO3dCQUN4RSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDdkUsT0FBTyxHQUFHLENBQUEsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLE9BQU8sS0FBSSxJQUFJLENBQUMsT0FBTyxDQUFBO3dCQUNoRCxLQUE2QixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBcEYsZUFBZSxRQUFBLEVBQUUsT0FBTyxRQUFBLENBQTREO3dCQUVyRixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7d0JBRS9ELFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLHdCQUM1QyxPQUFPLEtBQ1YsT0FBTyxTQUFBLEVBQ1AsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFvQyxFQUNsRCxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sSUFDOUIsRUFBQTs7d0JBTEksWUFBWSxHQUFHLFNBS25CO3dCQUVGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQTs7Ozt3QkFHeEIsV0FBTSxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQTJCLENBQUMsRUFBQTs7d0JBQW5ELEdBQUcsR0FBRyxTQUE2Qzs7NkJBR3JELENBQUEsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQSxFQUFuQixjQUFtQjt3QkFDZixLQUFBLEVBQUUsQ0FBQTs7OzZCQUNGLE1BQU0sRUFBTixjQUFNO3dCQUNKLEtBQUEsR0FBRyxDQUFDLElBQUksQ0FBQTs7NEJBQ1IsV0FBTSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUE7O3dCQUFoQixLQUFBLFNBQWdCLENBQUE7Ozt3QkFGbEIsUUFFa0I7OzRCQU4xQixZQUNFLE9BQUksS0FLb0I7NEJBQ3hCLGFBQVUsR0FBRSxHQUFHLENBQUMsTUFBTTs0QkFDdEIsU0FBTSxHQUFFLEdBQUcsQ0FBQyxPQUFPO2lDQUNwQjs7d0JBRUQsT0FBTyxFQUFFLENBQUE7Ozs7O2FBRVosQ0FBQTtRQVNNLFlBQU8sR0FBRyxVQUFPLE9BQXdCLEVBQUUsV0FBbUI7WUFBbkIsNEJBQUEsRUFBQSxtQkFBbUI7Ozs7Ozs0QkFFakUsR0FBRyxHQVFELE9BQU8sSUFSTixFQUNILEtBT0UsT0FBTyxRQVBlLEVBQWYsVUFBVSxtQkFBRyxFQUFFLEtBQUEsRUFDeEIsSUFBSSxHQU1GLE9BQU8sS0FOTCxFQUNKLFlBQVksR0FLVixPQUFPLGFBTEcsRUFDWixlQUFlLEdBSWIsT0FBTyxnQkFKTSxFQUNmLElBQUksR0FHRixPQUFPLEtBSEwsRUFDSSxTQUFTLEdBRWYsT0FBTyxPQUZRLEVBQ2pCLGFBQWEsR0FDWCxPQUFPLGNBREksQ0FDSjs0QkFDTCxPQUFPLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFBOzRCQUNuQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQTs0QkFDakQsT0FBTyxHQUFHLENBQUEsYUFBYSxhQUFiLGFBQWEsdUJBQWIsYUFBYSxDQUFFLE9BQU8sS0FBSSxJQUFJLENBQUMsT0FBTyxDQUFBOzRCQUNoRCxLQUE2QixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUE1RSxlQUFlLFFBQUEsRUFBRSxPQUFPLFFBQUEsQ0FBb0Q7NEJBSW5GLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO2dDQUNwQixPQUFPLEdBQUcsSUFBSSxDQUFBOzZCQUNmO2lDQUFNLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLG1DQUFtQyxFQUFFO2dDQUMxRSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksYUFBSixJQUFJLGNBQUosSUFBSSxHQUFJLEVBQUUsQ0FBQyxDQUFBOzZCQUNwQztpQ0FBTSxJQUFJLElBQUksRUFBRTtnQ0FDZixPQUFPLEdBQUcsSUFBSSxDQUFBOzZCQUNmO2lDQUFNO2dDQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTs2QkFDbEQ7NEJBRUssT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQzdCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFILEdBQUcsY0FBSCxHQUFHLEdBQUksRUFBRSxFQUFFLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzNELE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUNyQixPQUFPLENBQ1IsQ0FBQTs0QkFFc0IsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtvQ0FDdkQsTUFBTSxRQUFBO29DQUNOLE9BQU8sU0FBQTtvQ0FDUCxJQUFJLEVBQUUsT0FBTztvQ0FDYixXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWE7b0NBQ3hELE1BQU0sRUFBRSxlQUFlLENBQUMsTUFBTTtpQ0FDL0IsQ0FBQyxFQUFBOzs0QkFOSSxjQUFjLEdBQUcsU0FNckI7NEJBRUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFBOzs7OzRCQUdyQixXQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsY0FBNkIsQ0FBQyxFQUFBOzs0QkFBOUQsUUFBUSxHQUFHLFNBQW1EOzRCQUM5RCxXQUF5QjtnQ0FDN0IsTUFBTSxFQUFFLEVBQUU7Z0NBQ1YsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNOzZCQUM1QixDQUFBOzs7O2lDQUdLLENBQUEsWUFBWSxLQUFLLE1BQU0sQ0FBQSxFQUF2QixjQUF1Qjs0QkFDekIsS0FBQSxRQUFNLENBQUE7NEJBQVEsV0FBTSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUE7OzRCQUFuQyxHQUFPLElBQUksR0FBRyxTQUFxQixDQUFBOzs7aUNBQzFCLENBQUMsWUFBdUIsS0FBSyxRQUFRLENBQUEsRUFBckMsY0FBcUM7NEJBRTlDLEtBQUEsUUFBTSxDQUFBOzRCQUFRLEtBQUEsQ0FBQSxLQUFBLE1BQU0sQ0FBQSxDQUFDLElBQUksQ0FBQTs0QkFBQyxXQUFNLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBQTs7NEJBQXRELEdBQU8sSUFBSSxHQUFHLGNBQVksU0FBNEIsRUFBQyxDQUFBOzs7NEJBRXZELEtBQUEsUUFBTSxDQUFBOzRCQUFRLEtBQUEsYUFBYSxDQUFBOzRCQUFDLFdBQU0sUUFBUSxDQUFDLElBQUksRUFBRSxFQUFBOzs0QkFBakQsR0FBTyxJQUFJLEdBQUcsa0JBQWMsU0FBcUIsRUFBQyxDQUFBOzs7Ozs0QkFJcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFDLENBQUMsQ0FBQTtpQ0FDNUIsQ0FBQSxZQUFZLEtBQUssTUFBTSxDQUFBLEVBQXZCLGVBQXVCOzRCQUN6QixLQUFBLFFBQU0sQ0FBQTs0QkFBUSxXQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBQTs7NEJBQW5DLEdBQU8sSUFBSSxHQUFHLFNBQXFCLENBQUE7OztpQ0FDMUIsQ0FBQyxZQUF1QixLQUFLLFFBQVEsQ0FBQSxFQUFyQyxlQUFxQzs0QkFDOUMsS0FBQSxRQUFNLENBQUE7NEJBQVEsS0FBQSxDQUFBLEtBQUEsTUFBTSxDQUFBLENBQUMsSUFBSSxDQUFBOzRCQUFDLFdBQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFBOzs0QkFBdEQsR0FBTyxJQUFJLEdBQUcsY0FBWSxTQUE0QixFQUFDLENBQUE7Ozs0QkFFdkQsS0FBQSxRQUFNLENBQUE7NEJBQVEsV0FBTSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUE7OzRCQUFuQyxHQUFPLElBQUksR0FBRyxTQUFxQixDQUFBOzs7OzRCQUsvQixZQUFZLFFBQVEsUUFBYixDQUFhOzRCQUM1QixTQUFPLENBQUMsT0FBTyxDQUFDLFVBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSyxPQUFBLENBQUMsUUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBeEMsQ0FBd0MsQ0FBQyxDQUFBOzRCQUV2RSxXQUFPLFFBQU0sRUFBQTs7NEJBRWIsT0FBTyxFQUFFLENBQUE7Ozs7OztTQUVaLENBQUE7UUF6Y1MsSUFBQSxPQUFPLEdBQXdCLE1BQU0sUUFBOUIsRUFBRSxpQkFBaUIsR0FBSyxNQUFNLGtCQUFYLENBQVc7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksS0FBSyxDQUFBO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ25GLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3RCLENBQUM7SUFNSyx5Q0FBbUIsR0FBekIsVUFBMEIsSUFBd0I7Ozs7Ozs0QkFDcEMsV0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDOzRCQUMzQixHQUFHLEVBQUUsVUFBRyxJQUFJLENBQUMsTUFBTSxTQUFHLGdCQUFnQixDQUFFOzRCQUN4QyxNQUFNLEVBQUUsTUFBTTs0QkFDZCxPQUFPLEVBQUU7Z0NBQ1AsY0FBYyxFQUFFLGtCQUFrQjs2QkFDbkM7NEJBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7Z0NBQ25CLFVBQVUsRUFBRSxvQkFBb0I7NkJBQ2pDLENBQUM7eUJBQ0gsQ0FBQyxFQUFBOzt3QkFUSSxHQUFHLEdBQUcsU0FTVjt3QkFFRixXQUFPLE1BQUEsR0FBRyxDQUFDLElBQUksMENBQUUsWUFBWSxFQUFBOzs7O0tBQzlCO0lBT0QsZ0NBQVUsR0FBVixVQUFXLEdBQVcsRUFBRSxPQUE0QixFQUFFLElBQVM7O1FBQzdELElBQUksTUFBQSxNQUFBLE9BQU8sQ0FBQyxhQUFhLDBDQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLDBDQUFFLElBQUksRUFBRSxFQUFFO1lBQ3hELE9BQU8sR0FBRyxDQUFBO1NBQ1g7UUFFRCxJQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUUxRSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDdkIsT0FBTyxHQUFHLENBQUE7U0FDWDtRQUVELElBQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTNCLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLEtBQUksTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksMENBQUUsUUFBUSxDQUFBLEtBQUksTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksMENBQUUsU0FBUyxDQUFBLEVBQUU7WUFDM0YsTUFBTSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7U0FDN0I7UUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBZ2FPLDJDQUFxQixHQUE3QixVQUNFLE9BQWUsRUFDZixXQUFvQixFQUNwQixjQUE0QjtRQUU1QixJQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFBO1FBR3hDLElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBO2FBQ25CO2lCQUFNO2dCQUNMLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsY0FBTSxPQUFBLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBbEIsQ0FBa0IsQ0FBQyxDQUFBO2FBQ25FO1NBQ0Y7UUFFRCxJQUFJLEtBQWdELENBQUE7UUFDcEQsSUFBSSxXQUFXLElBQUksT0FBTyxFQUFFO1lBQzFCLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ2pCLElBQU0sVUFBVSxHQUFHLDRCQUFNLE9BQU8sR0FBRyxJQUFJLHNEQUFXLENBQUE7Z0JBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ3hCLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUN6QyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDWjtRQUVELE9BQU8sQ0FBQyxVQUFVLEVBQUUsY0FBTSxPQUFBLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBbkIsQ0FBbUIsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFHTyx5Q0FBbUIsR0FBM0IsVUFBNEIsT0FBWTs7UUFDdEMsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQSxNQUFBLE9BQU8sQ0FBQyxJQUFJLDBDQUFFLElBQUksQ0FBQSxLQUFLLFVBQVUsRUFBRTtZQUM1RCxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtTQUN4QjtJQUNILENBQUM7SUFNTyxtQ0FBYSxHQUFyQixVQUFzQixHQUFRO1FBQzVCLE9BQU8sR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7ZUFDaEMsT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFVBQVU7ZUFDcEMsT0FBTyxHQUFHLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQTtJQUMxQyxDQUFDO0lBQ0gsa0JBQUM7QUFBRCxDQUFDLEFBdGdCRCxJQXNnQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQge1xuICBJRmV0Y2hPcHRpb25zLFxuICBJUmVxdWVzdENvbmZpZyxcbiAgSVJlcXVlc3RNZXRob2QsXG4gIElSZXF1ZXN0T3B0aW9ucyxcbiAgUmVzcG9uc2VPYmplY3QsXG4gIFNES1JlcXVlc3RJbnRlcmZhY2UsXG4gIGZvcm1hdFVybCxcbn0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcbmltcG9ydCB7IEFETUlOX1BBVEgsIENMSUVOVF9BVVRIX1BBVEggfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IGdldENsb3VkYmFzZUNvbnRleHQsIGdldFNlY3JldEluZm8sIElOSVRfQ09ORklHIH0gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBJQ3VzdG9tUmVxT3B0cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQge1xuICBnZXRFbnYsXG4gIGlzRm9ybURhdGEsXG4gIHRvUXVlcnlTdHJpbmcsXG4gIHNhZmVQYXJzZUpzb24sXG4gIG9iajJTdHJSZWNvcmQsXG4gIGhlYWRlcnNJbml0MkluZGV4YWJsZSxcbiAgZ2V0Q3VyclJ1bkVudlRhZyxcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IElDbG91ZGJhc2VDb25maWcgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2RrVmVyc2lvbiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb21tb24nXG4vLyDlu7bov5/liqDovb3vvIzpgb/lhY3pnZ4gTm9kZSDnjq/looPmiZPljIXml7blvJXlhaXmraTljIVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5sZXQgc2lnbkZuOiAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpIHwgbnVsbCA9IG51bGxcbmFzeW5jIGZ1bmN0aW9uIGdldFNpZ24oKSB7XG4gIGlmICghc2lnbkZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEB0cy1pZ25vcmUg4oCUIOivpeWMheS7heWcqCBOb2RlIOi/kOihjOaXtuWtmOWcqO+8jOW8gOWPkeeOr+Wig+WPr+iDveacquWuieijhVxuICAgICAgY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KCdAY2xvdWRiYXNlL3NpZ25hdHVyZS1ub2RlanMnKVxuICAgICAgc2lnbkZuID0gbW9kLnNpZ25cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfnvLrlsJHkvp3otZYgQGNsb3VkYmFzZS9zaWduYXR1cmUtbm9kZWpz77yM6K+35omn6KGM5Lul5LiL5ZG95Luk5a6J6KOF77yaXFxuXFxuJ1xuICAgICAgICArICcgIG5wbSBpbnN0YWxsIEBjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqc1xcblxcbidcbiAgICAgICAgKyAn6K+l5L6d6LWW55So5LqOIE5vZGUg546v5aKD5LiL55qE6K+35rGC562+5ZCN44CCJylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNpZ25GbiFcbn1cblxuLyoqXG4gKiBOb2RlLmpzIOeOr+Wig+S4i+eahCBIVFRQIOivt+axguWunueOsFxuICog5Z+65LqO5Y6f55SfIGZldGNo77yM5pSv5oyBIEdFVC9QT1NUL1BVVC/kuIrkvKAv5LiL6L29L+a1geW8j+ivt+axglxuICog6Ieq5Yqo5aSE55CGIFYzIOetvuWQjeWSjCBCZWFyZXIgVG9rZW4g6K6k6K+BXG4gKi9cbmV4cG9ydCBjbGFzcyBOb2RlUmVxdWVzdCBpbXBsZW1lbnRzIFNES1JlcXVlc3RJbnRlcmZhY2Uge1xuICAvKiog6K+35rGC6YWN572u77yM5YyF5ZCr6K6k6K+B5L+h5oGvICovXG4gIGNvbmZpZzogSVJlcXVlc3RDb25maWcgJiBJQ2xvdWRiYXNlQ29uZmlnXG5cbiAgLyoqIOivt+axgui2heaXtuaXtumXtO+8iOavq+enku+8ie+8jOm7mOiupCAxNTAwMCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlclxuXG4gIC8qKiDlj5fotoXml7bmjqfliLbnmoTor7fmsYLnsbvlnovliJfooaggKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXN0cmljdGVkTWV0aG9kczogQXJyYXk8SVJlcXVlc3RNZXRob2Q+XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJUmVxdWVzdENvbmZpZyAmIElDbG91ZGJhc2VDb25maWcpIHtcbiAgICBjb25zdCB7IHRpbWVvdXQsIHJlc3RyaWN0ZWRNZXRob2RzIH0gPSBjb25maWdcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0IHx8IDE1MDAwXG4gICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcyA9IHJlc3RyaWN0ZWRNZXRob2RzIHx8IFsnZ2V0JywgJ3Bvc3QnLCAndXBsb2FkJywgJ2Rvd25sb2FkJ11cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZ1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluWuouaIt+err+WHreivgSBhY2Nlc3NfdG9rZW7vvIzkuLrnrqHnkIblkZjmnYPpmZBcbiAgICog55So5LqO5LiN5pSv5oyBIFYzIOetvuWQjeeahOaOpeWPo++8iOWmguaVsOaNruaooeWei+OAgeWFs+ezu+Wei+aVsOaNruW6k+OAgUFJ77yJXG4gICAqL1xuICBhc3luYyBnZXRDbGllbnRDcmVkZW50aWFsKG9wdHM6IHsgb3JpZ2luOiBzdHJpbmcgfSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5mZXRjaCh7XG4gICAgICB1cmw6IGAke29wdHMub3JpZ2lufSR7Q0xJRU5UX0FVVEhfUEFUSH1gLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgIH0pLFxuICAgIH0pXG5cbiAgICByZXR1cm4gcmVzLmRhdGE/LmFjY2Vzc190b2tlblxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluWunumZheivt+axgiBVUkxcbiAgICog5b2T6K+35rGC5pyq5pC65bimIEF1dGhvcml6YXRpb24g5LiU5pyq6Ieq5bimIGFjY2Vzc190b2tlbiDml7bvvIxcbiAgICog5bCGIC93ZWIg6Lev5b6E5pu/5o2i5Li6IC9hZG1pbu+8iOeuoeeQhuerr+etvuWQjei3r+W+hO+8iVxuICAgKi9cbiAgZ2V0UmVhbFVybCh1cmw6IHN0cmluZywgaGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PiwgYm9keTogYW55KSB7XG4gICAgaWYgKGhlYWRlcnMuQXV0aG9yaXphdGlvbj8ucmVwbGFjZSgnQmVhcmVyJywgJycpPy50cmltKCkpIHtcbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5IDogc2FmZVBhcnNlSnNvbihib2R5KSB8fCAnJ1xuXG4gICAgaWYgKHBhcmFtcy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybClcblxuICAgIGlmICh1cmxPYmoucGF0aG5hbWUgPT09ICcvd2ViJyAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRJZCAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRLZXkpIHtcbiAgICAgIHVybE9iai5wYXRobmFtZSA9IEFETUlOX1BBVEhcbiAgICB9XG4gICAgcmV0dXJuIHVybE9iai50b1N0cmluZygpXG4gIH1cblxuICBwdWJsaWMgZ2V0UmVxT3B0aW9ucyA9IGFzeW5jIChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBtZXRob2Q/OiBhbnlcbiAgICAgIGhlYWRlcnM6IGFueVxuICAgICAgYm9keT86IGFueVxuICAgICAgY3JlZGVudGlhbHM/OiBzdHJpbmdcbiAgICAgIHNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgICB1cmw/OiBhbnlcbiAgICB9LFxuICApID0+IHtcbiAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybClcblxuICAgIGNvbnN0IHsgVENCX1NPVVJDRSB9ID0gZ2V0Q2xvdWRiYXNlQ29udGV4dCgpXG4gICAgLy8gTm90ZTog5LqR5Ye95pWw6KKr6LCD55So5pe25Y+v6IO96LCD55So56uv5pyq5Lyg6YCSIFNPVVJDRe+8jFRDQl9TT1VSQ0Ug5Y+v6IO95Li656m6XG4gICAgY29uc3QgU09VUkNFID0gYCR7SU5JVF9DT05GSUcuY29udGV4dD8uZXh0ZW5kZWRDb250ZXh0Py5zb3VyY2UgfHwgVENCX1NPVVJDRSB8fCAnJ30sJHthd2FpdCBnZXRDdXJyUnVuRW52VGFnKCl9YFxuXG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgJ1VzZXItQWdlbnQnOiBgYWRhcHRlci1ub2RlLyR7b3B0aW9ucy5oZWFkZXJzPy5bJ1gtU0RLLVZlcnNpb24nXSB8fCBgQGNsb3VkYmFzZS9qcy1zZGsvJHtnZXRTZGtWZXJzaW9uKCl9YH1gLFxuICAgICAgJ1gtVENCLVNvdXJjZSc6IFNPVVJDRSxcbiAgICAgICdYLUNsaWVudC1UaW1lc3RhbXAnOiBuZXcgRGF0ZSgpLnZhbHVlT2YoKSxcbiAgICAgICdYLVRDQi1SZWdpb24nOiBJTklUX0NPTkZJRy5yZWdpb24gfHwgZ2V0RW52KCdURU5DRU5UQ0xPVURfUkVHSU9OJykgfHwgJycsXG4gICAgICBIb3N0OiB1cmxPYmouaG9zdCxcbiAgICB9XG5cbiAgICAvLyDlt7LmkLrluKbmnInmlYggQXV0aG9yaXphdGlvbu+8jOebtOaOpei/lOWbnlxuICAgIGlmIChvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbj8ucmVwbGFjZSgnQmVhcmVyJywgJycpPy50cmltKCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gYXV0aCDnm7jlhbPmjqXlj6PkuI3pnIDopoHnrb7lkI1cbiAgICBpZiAodXJsT2JqLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy9hdXRoLycpICYmIHVybE9iai5wYXRobmFtZSAhPT0gQ0xJRU5UX0FVVEhfUEFUSCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBjb25zdCBpc0FkbWluUGF0aCA9IHVybE9iai5wYXRobmFtZSA9PT0gQURNSU5fUEFUSFxuXG4gICAgLy8g6L+Z5Lqb6Lev5b6E5LiN5pSv5oyBIFYzIOetvuWQje+8jOaUueeUqCBjbGllbnRDcmVkZW50aWFsIOiOt+WPliBCZWFyZXIgVG9rZW5cbiAgICBjb25zdCBVTlNVUFBPUlRFRF9WM19TSUdOX1BBVEggPSBbJy92MS9tb2RlbC8nLCAnL3YxL3JkYi8nLCAnL3YxL2FpLyddXG5cbiAgICBpZiAoVU5TVVBQT1JURURfVjNfU0lHTl9QQVRILnNvbWUodiA9PiB1cmxPYmoucGF0aG5hbWUuc3RhcnRzV2l0aCh2KSkpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5nZXRDbGllbnRDcmVkZW50aWFsKHsgb3JpZ2luOiB1cmxPYmoub3JpZ2luIH0pXG4gICAgICBvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHt0b2tlbn1gXG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGxldCB7IHNlY3JldElkLCBzZWNyZXRLZXksIHNlc3Npb25Ub2tlbiB9ID0gdGhpcy5jb25maWc/LmF1dGggfHwge31cbiAgICBjb25zdCB7IHNlY3JldFR5cGUgfSA9IHRoaXMuY29uZmlnPy5hdXRoIHx8IHt9XG4gICAgY29uc3QgeyBtZXRob2QsIGJvZHkgfSA9IG9wdGlvbnNcbiAgICBjb25zdCBoZWFkZXJzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zLmhlYWRlcnMpKVxuXG4gICAgLy8gPT09PT09PT09PSDlpITnkIYgbnBtIGZvcm0tZGF0YSDljIXlrp7kvosgPT09PT09PT09PVxuICAgIC8vIG5wbSBmb3JtLWRhdGEg5a6e5L6L77yI5p2l6IeqIG5vZGUtc2RrIOeahCBzZW5kV3hGb3JtRGF0YVJlcXVlc3TvvIk6XG4gICAgLy8gLSDpgJrov4cgX19wbGFpbk9iaiDmjILovb3kuobnrb7lkI3nlKjnmoTnuq/lr7nosaFcbiAgICAvLyAtIOetvuWQjeaXtuS9v+eUqCBwbGFpbiBvYmplY3Qg55qEIGtleS12YWx1Ze+8iG11bHRpcGFydCDnrb7lkI3mlrnlvI/vvIlcbiAgICAvLyAtIOWPkemAgeaXtuS9v+eUqCBmb3JtLWRhdGEg55qEIGdldEJ1ZmZlcigp77yIbXVsdGlwYXJ0L2Zvcm0tZGF0YSDmoLzlvI/vvIlcbiAgICBjb25zdCBpc05wbUZvcm1EYXRhQm9keSA9IHRoaXMuaXNOcG1Gb3JtRGF0YShib2R5KVxuICAgIGxldCBwYXJhbXM6IGFueVxuXG4gICAgaWYgKGlzTnBtRm9ybURhdGFCb2R5KSB7XG4gICAgICAvLyDku44gZm9ybS1kYXRhIOWunuS+i+S4iuWPluetvuWQjeeUqOeahOe6r+WvueixoVxuICAgICAgcGFyYW1zID0gYm9keS5fX3BsYWluT2JqID8geyAuLi5ib2R5Ll9fcGxhaW5PYmogfSA6IHt9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcyA9IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkgOiBzYWZlUGFyc2VKc29uKGJvZHkpIHx8IHt9XG4gICAgfVxuXG4gICAgcGFyYW1zLmVudk5hbWUgPSBwYXJhbXM/LmVudiB8fCB0aGlzLmNvbmZpZy5lbnYgfHwgZ2V0U2VjcmV0SW5mbygpPy5lbnYgfHwgJydcblxuICAgIC8vIOWPguaVsOiHquW4piBhY2Nlc3NfdG9rZW7vvIzml6DpnIDnrb7lkI1cbiAgICBpZiAocGFyYW1zLmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBHRVQg6K+35rGC5Y+C5pWw5bey5ZyoIFVSTCDkuK3vvIznrb7lkI3ml7YgcGFyYW1zIOe9ruepulxuICAgIGlmIChtZXRob2QudG9Mb3dlckNhc2UoKSA9PT0gJ2dldCcpIHtcbiAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIC8vIFNFU1NJT05fU0VDUkVUIOexu+Wei+aIluaXoOWvhumSpeaXtu+8jOS7jueOr+Wig+WPmOmHj+iOt+WPluS4tOaXtuWvhumSpVxuICAgIGlmICghc2VjcmV0SWQgfHwgIXNlY3JldEtleSB8fCBzZWNyZXRUeXBlID09PSAnU0VTU0lPTl9TRUNSRVQnKSB7XG4gICAgICBjb25zdCBzZWNyZXRJbmZvID0gZ2V0U2VjcmV0SW5mbygpXG4gICAgICBzZWNyZXRJZCA9IHNlY3JldEluZm8uc2VjcmV0SWRcbiAgICAgIHNlY3JldEtleSA9IHNlY3JldEluZm8uc2VjcmV0S2V5XG4gICAgICBzZXNzaW9uVG9rZW4gPSBzZWNyZXRJbmZvLnNlc3Npb25Ub2tlblxuICAgIH1cblxuICAgIC8vIOS7jeaXoOWvhumSpeWImei3s+i/h+etvuWQjVxuICAgIGlmICghc2VjcmV0SWQgfHwgIXNlY3JldEtleSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uXG5cbiAgICAvLyBjb250ZW50LXR5cGUg6ZyA5LiO5pyN5Yqh56uv562+5ZCN6aqM6K+B5L+d5oyB5aSn5bCP5YaZ5LiA6Ie0XG4gICAgaWYgKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLnRvTG93ZXJDYXNlKClcbiAgICB9IGVsc2UgaWYgKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSB7XG4gICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICBpZiAoaXNBZG1pblBhdGggJiYgISFzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5zZXNzaW9uVG9rZW4gPSBzZXNzaW9uVG9rZW5cbiAgICB9XG5cbiAgICBjb25zdCBzaWduZWRQYXJhbXMgPSB7XG4gICAgICBzZWNyZXRJZCxcbiAgICAgIHNlY3JldEtleSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICB3aXRoU2lnbmVkUGFyYW1zOiBpc0FkbWluUGF0aCxcbiAgICAgIHRpbWVzdGFtcDogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMSxcbiAgICAgIGlzQ2xvdWRBcGk6ICFpc0FkbWluUGF0aCxcbiAgICB9XG5cbiAgICBpZiAoIWhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICYmICFoZWFkZXJzWydDb250ZW50LVR5cGUnXSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBjb25zdCBzaWduID0gYXdhaXQgZ2V0U2lnbigpXG4gICAgaWYgKCFzaWduKSByZXR1cm4gb3B0aW9uc1xuXG4gICAgY29uc3QgeyBhdXRob3JpemF0aW9uLCB0aW1lc3RhbXAgfSA9IHNpZ24oc2lnbmVkUGFyYW1zKVxuXG4gICAgaWYgKHR5cGVvZiBzZXNzaW9uVG9rZW4gPT09ICdzdHJpbmcnICYmIHNlc3Npb25Ub2tlbiAhPT0gJycpIHtcbiAgICAgIGlmIChpc0FkbWluUGF0aCkge1xuICAgICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufWBcbiAgICAgICAgaGVhZGVyc1snWC1UaW1lc3RhbXAnXSA9IHRpbWVzdGFtcFxuICAgICAgICBoZWFkZXJzWydYLVNpZ25hdHVyZS1FeHBpcmVzJ10gPSA2MDBcbiAgICAgIH0gZWxzZSAge1xuICAgICAgICAvLyDkuLTml7blr4bpkqXpnIDopoHpop3lpJbpmYTluKYgVG9rZW5cbiAgICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvbn0sIFRpbWVzdGFtcD0ke3RpbWVzdGFtcH0sIFRva2VuPSR7c2Vzc2lvblRva2VufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvbn0sIFRpbWVzdGFtcD0ke3RpbWVzdGFtcH1gXG5cbiAgICAgIC8vIGFkbWluIOi3r+W+hOmcgOimgemineWklueahOaXtumXtOaIs+WSjOi/h+acn+WktFxuICAgICAgaWYgKGlzQWRtaW5QYXRoKSB7XG4gICAgICAgIGhlYWRlcnNbJ1gtVGltZXN0YW1wJ10gPSB0aW1lc3RhbXBcbiAgICAgICAgaGVhZGVyc1snWC1TaWduYXR1cmUtRXhwaXJlcyddID0gNjAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PSDmnoTlu7rov5Tlm57nmoQgYm9keSA9PT09PT09PT09XG4gICAgaWYgKGlzTnBtRm9ybURhdGFCb2R5KSB7XG4gICAgICAvLyBucG0gZm9ybS1kYXRhOiDnrb7lkI3lrozmiJDlkI7vvIzpnIDopoHlsIYgZW52TmFtZS9zZXNzaW9uVG9rZW4g562J562+5ZCN5pe26L+95Yqg55qE5a2X5q61XG4gICAgICAvLyDkuZ/lkIzmraXov73liqDliLAgZm9ybS1kYXRhIOWunuS+i+S4re+8iOWboOS4uuacjeWKoeerr+mcgOimgeS7jiBmb3JtLWRhdGEgYm9keSDkuK3or7vlj5bov5nkupvlrZfmrrXvvIlcbiAgICAgIC8vIOeEtuWQjueUqCBmb3JtLWRhdGEg55qEIGdldEJ1ZmZlcigpIOS9nOS4uuWunumZheWPkemAgeeahCBib2R5XG4gICAgICBjb25zdCBmb3JtRGF0YUluc3RhbmNlID0gYm9keVxuICAgICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhmb3JtRGF0YUluc3RhbmNlLl9fcGxhaW5PYmogfHwge30pKVxuXG4gICAgICAvLyDmiornrb7lkI3ov4fnqIvkuK3ov73liqDnmoTlrZfmrrXlkIzmraXliLAgZm9ybS1kYXRhIOWunuS+i++8iOS7hei/veWKoOS5i+WJjeS4jeWtmOWcqOeahO+8iVxuICAgICAgaWYgKHBhcmFtcy5lbnZOYW1lICYmICFleGlzdGluZ0tleXMuaGFzKCdlbnZOYW1lJykpIHtcbiAgICAgICAgZm9ybURhdGFJbnN0YW5jZS5hcHBlbmQoJ2Vudk5hbWUnLCBwYXJhbXMuZW52TmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuc2Vzc2lvblRva2VuICYmICFleGlzdGluZ0tleXMuaGFzKCdzZXNzaW9uVG9rZW4nKSkge1xuICAgICAgICBmb3JtRGF0YUluc3RhbmNlLmFwcGVuZCgnc2Vzc2lvblRva2VuJywgcGFyYW1zLnNlc3Npb25Ub2tlbilcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybUJ1ZmZlciA9IGZvcm1EYXRhSW5zdGFuY2UuZ2V0QnVmZmVyKClcbiAgICAgIGNvbnN0IGZvcm1IZWFkZXJzID0gZm9ybURhdGFJbnN0YW5jZS5nZXRIZWFkZXJzKClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgLi4uZm9ybUhlYWRlcnMsXG4gICAgICAgICAgJ2NvbnRlbnQtbGVuZ3RoJzogU3RyaW5nKGZvcm1CdWZmZXIubGVuZ3RoKSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogZm9ybUJ1ZmZlcixcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiB0eXBlb2YgcGFyYW1zID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHBhcmFtcykgOiBwYXJhbXMsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3QoXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdnZXQnKSxcbiAgKVxuXG4gIHB1YmxpYyBwb3N0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdChcbiAgICB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdwb3N0JyksXG4gIClcblxuICBwdWJsaWMgcHV0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdCh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBtZXRob2Q6ICdwdXQnLFxuICB9KVxuXG4gIC8qKlxuICAgKiDmlofku7bkuIrkvKBcbiAgICogUE9TVCDmlrnlvI/vvJrmnoTlu7ogRm9ybURhdGEg5LiK5LygXG4gICAqIFBVVCDmlrnlvI/vvJrnm7TmjqXlsIbmlofku7bkvZzkuLogYm9keSDkuIrkvKBcbiAgICovXG4gIHB1YmxpYyB1cGxvYWQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgZmlsZTogcmF3RmlsZSwgZmlsZUNvbnRlbnQsIG5hbWUsIG1ldGhvZCwgaGVhZGVycyA9IHt9IH0gPSBvcHRpb25zIGFzIGFueVxuICAgIC8vIOS8mOWFiOS9v+eUqCBmaWxl77yIZmlsZVBhdGjvvInvvIzmsqHmnInliJnlm57pgIDliLAgZmlsZUNvbnRlbnTvvIhCdWZmZXLvvIlcbiAgICBjb25zdCBmaWxlID0gcmF3RmlsZSA/PyBmaWxlQ29udGVudFxuICAgIGlmIChmaWxlID09PSB1bmRlZmluZWQgfHwgbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbGUgYW5kIG5hbWUgaXMgcmVxdWlyZWQnKVxuICAgIH1cbiAgICBjb25zdCBmb3JtRmllbGRzID0gb2JqMlN0clJlY29yZChkYXRhID8/IHt9KVxuICAgIGNvbnN0IGxvd2VyZWRNZXRob2QgPSBtZXRob2Q/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCByZXFNZXRob2QgPSBbJ3Bvc3QnLCAncHV0J10uZmluZChtID0+IG0gPT09IGxvd2VyZWRNZXRob2QpID8/ICdwdXQnXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIGlmIChyZXFNZXRob2QgPT09ICdwb3N0Jykge1xuICAgICAgT2JqZWN0LmtleXMoZm9ybUZpZWxkcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGZvcm1GaWVsZHNba2V5XSlcbiAgICAgIH0pXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2tleScsIG5hbWUpXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlIGluc3RhbmNlb2YgQmxvYiA/IGZpbGUgOiBuZXcgQmxvYihbZmlsZV0pKVxuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgbWV0aG9kOiByZXFNZXRob2QsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ3VwbG9hZCcpLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IGZpbGUsXG4gICAgICB9LFxuICAgICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygndXBsb2FkJyksXG4gICAgKVxuICB9XG5cbiAgLyoqIOaWh+S7tuS4i+i9ve+8iE5vZGUuanMg546v5aKD77yM6YCa6L+HIGZldGNoIOiOt+WPluaWh+S7tuWGheWuueW5tuWGmeWFpeacrOWcsOaWh+S7tuaIlui/lOWbniBCdWZmZXLvvIkgKi9cbiAgcHVibGljIGRvd25sb2FkID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKG9wdGlvbnMudXJsISwge1xuICAgICAgaGVhZGVyczoge30sXG4gICAgICBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQodGhpcy50aW1lb3V0KSxcbiAgICB9KVxuXG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRG93bmxvYWQgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzLnN0YXR1c31gKVxuICAgIH1cblxuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKClcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcilcblxuICAgIC8vIOWmguaenOaMh+WumuS6hiB0ZW1wRmlsZVBhdGjvvIzlsIbmlofku7blhpnlhaXmnKzlnLBcbiAgICBjb25zdCB7IHRlbXBGaWxlUGF0aCB9ID0gb3B0aW9uc1xuICAgIGlmICh0ZW1wRmlsZVBhdGgpIHtcbiAgICAgIC8vIOehruS/neebruW9leWtmOWcqFxuICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKHRlbXBGaWxlUGF0aClcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgICB9XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgYnVmZmVyKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICB0ZW1wRmlsZVBhdGgsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g5pyq5oyH5a6a6Lev5b6E5pe26L+U5ZueIEJ1ZmZlclxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICB0ZW1wRmlsZVBhdGg6IG9wdGlvbnMudXJsLFxuICAgICAgZmlsZUNvbnRlbnQ6IGJ1ZmZlcixcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5bqV5bGCIGZldGNoIOivt+axgu+8jOaUr+aMgea1geW8j+WTjeW6lFxuICAgKiDotoXml7bpgJrov4cgQWJvcnRDb250cm9sbGVyICsgc2V0VGltZW91dCDlrp7njrBcbiAgICovXG4gIHB1YmxpYyBmZXRjaCA9IGFzeW5jIChvcHRpb25zOiBPbWl0PElGZXRjaE9wdGlvbnMsICdzaWduYWwnPiAmIHsgc2lnbmFsPzogQWJvcnRTaWduYWw7IGN1c3RvbVJlcU9wdHM/OiBJQ3VzdG9tUmVxT3B0cyB9KTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4ge1xuICAgIGNvbnN0IHsgZW5hYmxlQWJvcnQgPSBmYWxzZSwgc3RyZWFtID0gZmFsc2UsIHNpZ25hbCwgY3VzdG9tUmVxT3B0cyB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UmVhbFVybChvcHRpb25zLnVybCwgb3B0aW9ucy5oZWFkZXJzIHx8IHt9LCBvcHRpb25zLmJvZHkpXG4gICAgY29uc3QgdGltZW91dCA9IGN1c3RvbVJlcU9wdHM/LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0XG4gICAgY29uc3QgW2Fib3J0Q29udHJvbGxlciwgY2xlYW51cF0gPSB0aGlzLmNyZWF0ZUFib3J0Q29udHJvbGxlcih0aW1lb3V0LCBlbmFibGVBYm9ydCwgc2lnbmFsKVxuXG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyA/IGhlYWRlcnNJbml0MkluZGV4YWJsZShvcHRpb25zLmhlYWRlcnMpIDogdW5kZWZpbmVkXG5cbiAgICBjb25zdCBmZXRjaE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldFJlcU9wdGlvbnModXJsLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSBhcyBhbnkgYXMgTm9kZUpTLlJlYWRhYmxlU3RyZWFtLFxuICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pXG5cbiAgICB0aGlzLmFwcGx5RHVwbGV4SWZOZWVkZWQoZmV0Y2hPcHRpb25zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgZmV0Y2hPcHRpb25zIGFzIFJlcXVlc3RJbml0KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICArcmVzLnN0YXR1cyA9PT0gMjA0XG4gICAgICAgICAgICA/ICcnIC8vIDIwNCBObyBDb250ZW50XG4gICAgICAgICAgICA6IHN0cmVhbVxuICAgICAgICAgICAgICA/IHJlcy5ib2R5XG4gICAgICAgICAgICAgIDogYXdhaXQgcmVzLmpzb24oKSxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzLnN0YXR1cyxcbiAgICAgICAgaGVhZGVyOiByZXMuaGVhZGVycyxcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYW51cCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOmAmueUqOivt+axguaWueazle+8jOiiqyBnZXQvcG9zdC9wdXQvdXBsb2FkIOetieiwg+eUqFxuICAgKiDotJ/otKPmnoTlu7ogcGF5bG9hZOOAgeiuvue9rui2heaXtuOAgeino+aekOWTjeW6lFxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIOivt+axgumAiemhuVxuICAgKiBAcGFyYW0gZW5hYmxlQWJvcnQgLSDmmK/lkKblkK/nlKjotoXml7bkuK3mlq3vvIjnlLEgcmVzdHJpY3RlZE1ldGhvZHMg5Yaz5a6a77yJXG4gICAqL1xuICBwdWJsaWMgcmVxdWVzdCA9IGFzeW5jIChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMsIGVuYWJsZUFib3J0ID0gZmFsc2UpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdXJsLFxuICAgICAgaGVhZGVyczogcmF3SGVhZGVycyA9IHt9LFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICAgIGJvZHksXG4gICAgICBtZXRob2Q6IHJhd01ldGhvZCxcbiAgICAgIGN1c3RvbVJlcU9wdHMsXG4gICAgfSA9IG9wdGlvbnNcbiAgICBjb25zdCBoZWFkZXJzID0gb2JqMlN0clJlY29yZChyYXdIZWFkZXJzKVxuICAgIGNvbnN0IG1ldGhvZCA9IFN0cmluZyhyYXdNZXRob2QpLnRvTG93ZXJDYXNlKCkgfHwgJ2dldCdcbiAgICBjb25zdCB0aW1lb3V0ID0gY3VzdG9tUmVxT3B0cz8udGltZW91dCB8fCB0aGlzLnRpbWVvdXRcbiAgICBjb25zdCBbYWJvcnRDb250cm9sbGVyLCBjbGVhbnVwXSA9IHRoaXMuY3JlYXRlQWJvcnRDb250cm9sbGVyKHRpbWVvdXQsIGVuYWJsZUFib3J0KVxuXG4gICAgLy8g5p6E5bu66K+35rGCIHBheWxvYWTvvJpGb3JtRGF0YSA+IHVybGVuY29kZWQgPiByYXcgYm9keSA+IEpTT05cbiAgICBsZXQgcGF5bG9hZFxuICAgIGlmIChpc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgICBwYXlsb2FkID0gZGF0YVxuICAgIH0gZWxzZSBpZiAoaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICBwYXlsb2FkID0gdG9RdWVyeVN0cmluZyhkYXRhID8/IHt9KVxuICAgIH0gZWxzZSBpZiAoYm9keSkge1xuICAgICAgcGF5bG9hZCA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgcGF5bG9hZCA9IGRhdGEgPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHJlYWxVcmwgPSB0aGlzLmdldFJlYWxVcmwoXG4gICAgICBmb3JtYXRVcmwoJ2h0dHBzJywgdXJsID8/ICcnLCBtZXRob2QgPT09ICdnZXQnID8gZGF0YSA6IHt9KSxcbiAgICAgIG9wdGlvbnMuaGVhZGVycyB8fCB7fSxcbiAgICAgIHBheWxvYWQsXG4gICAgKVxuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldFJlcU9wdGlvbnMocmVhbFVybCwge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IHBheWxvYWQsXG4gICAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ3NhbWUtb3JpZ2luJyxcbiAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KVxuXG4gICAgdGhpcy5hcHBseUR1cGxleElmTmVlZGVkKHJlcXVlc3RPcHRpb25zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVhbFVybCwgcmVxdWVzdE9wdGlvbnMgYXMgUmVxdWVzdEluaXQpXG4gICAgICBjb25zdCByZXN1bHQ6IFJlc3BvbnNlT2JqZWN0ID0ge1xuICAgICAgICBoZWFkZXI6IHt9LFxuICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICdibG9iJykge1xuICAgICAgICAgIHJlc3VsdC5kYXRhID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpXG4gICAgICAgIH0gZWxzZSBpZiAoKHJlc3BvbnNlVHlwZSBhcyBzdHJpbmcpID09PSAnYnVmZmVyJykge1xuICAgICAgICAgIC8vIOi/lOWbniBCdWZmZXLvvIjlhbzlrrnml6fniYggbm9kZS1zZGsg5LqM6L+b5Yi25ZON5bqU5qC85byP77yJXG4gICAgICAgICAgcmVzdWx0LmRhdGEgPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5kYXRhID0gc2FmZVBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8g5LiK5LygIFBPU1Qg6K+35rGC5Y+v6IO96L+U5ZueIFhNTCDnrYnpnZ4gSlNPTiDmoLzlvI/vvIzlrrnplJnlpITnkIZcbiAgICAgICAgY29uc29sZS5sb2coJ2NhdGNoIGFuIGVycm9yJywgZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEgPSBhd2FpdCByZXNwb25zZS5ibG9iKClcbiAgICAgICAgfSBlbHNlIGlmICgocmVzcG9uc2VUeXBlIGFzIHN0cmluZykgPT09ICdidWZmZXInKSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEgPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5kYXRhID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8g5bCG5ZON5bqU5aS057uf5LiA6L2s5Li65bCP5YaZIGtleVxuICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZVxuICAgICAgaGVhZGVycy5mb3JFYWNoKCh2YWwsIGtleSkgPT4gKHJlc3VsdC5oZWFkZXJba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsKSlcblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhbnVwKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Yib5bu65bim6LaF5pe255qEIEFib3J0Q29udHJvbGxlclxuICAgKiBAcmV0dXJucyBbYWJvcnRDb250cm9sbGVyLCBjbGVhbnVwXSDigJQgY2xlYW51cCDnlKjkuo7muIXpmaTlrprml7blmahcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQWJvcnRDb250cm9sbGVyKFxuICAgIHRpbWVvdXQ6IG51bWJlcixcbiAgICBlbmFibGVBYm9ydDogYm9vbGVhbixcbiAgICBleHRlcm5hbFNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBbQWJvcnRDb250cm9sbGVyLCAoKSA9PiB2b2lkXSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgLy8g5qGl5o6l5aSW6YOoIHNpZ25hbFxuICAgIGlmIChleHRlcm5hbFNpZ25hbCkge1xuICAgICAgaWYgKGV4dGVybmFsU2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRlcm5hbFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkXG4gICAgaWYgKGVuYWJsZUFib3J0IHx8IHRpbWVvdXQpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRNc2cgPSBg6K+35rGC5ZyoJHt0aW1lb3V0IC8gMTAwMH1z5YaF5pyq5a6M5oiQ77yM5bey5Lit5patYFxuICAgICAgICBjb25zb2xlLndhcm4odGltZW91dE1zZylcbiAgICAgICAgY29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IodGltZW91dE1zZykpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH1cblxuICAgIHJldHVybiBbY29udHJvbGxlciwgKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKV1cbiAgfVxuXG4gIC8qKiBOb2RlIDE4KyDljp/nlJ8gZmV0Y2gg5ZyoIGJvZHkg5Li6IHN0cmVhbSDml7bopoHmsYIgZHVwbGV4OiAnaGFsZicgKi9cbiAgcHJpdmF0ZSBhcHBseUR1cGxleElmTmVlZGVkKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLmJvZHkgJiYgdHlwZW9mIG9wdGlvbnMuYm9keT8ucGlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9ucy5kdXBsZXggPSAnaGFsZidcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Yik5pat5piv5ZCm5Li6IG5wbSBmb3JtLWRhdGEg5YyF55qE5a6e5L6L77yI5YW35pyJIGdldEhlYWRlcnMgLyBnZXRCdWZmZXIg5pa55rOV77yJXG4gICAqIOWMuuWIq+S6juWFqOWxgCBGb3JtRGF0Ye+8iFdlYiBBUEnvvIlcbiAgICovXG4gIHByaXZhdGUgaXNOcG1Gb3JtRGF0YShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbiAgICAgICYmIHR5cGVvZiBvYmouZ2V0SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgJiYgdHlwZW9mIG9iai5nZXRCdWZmZXIgPT09ICdmdW5jdGlvbidcbiAgfVxufVxuIl19
|