@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
|
@@ -109,7 +109,7 @@ var NodeRequest = (function () {
|
|
|
109
109
|
function NodeRequest(config) {
|
|
110
110
|
var _this = this;
|
|
111
111
|
this.getReqOptions = function (url, options) { return __awaiter(_this, void 0, void 0, function () {
|
|
112
|
-
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;
|
|
112
|
+
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;
|
|
113
113
|
var _e, _f, _g, _h, _j, _k, _l, _m;
|
|
114
114
|
return __generator(this, function (_o) {
|
|
115
115
|
switch (_o.label) {
|
|
@@ -140,7 +140,13 @@ var NodeRequest = (function () {
|
|
|
140
140
|
secretType = (((_l = this.config) === null || _l === void 0 ? void 0 : _l.auth) || {}).secretType;
|
|
141
141
|
method = options.method, body = options.body;
|
|
142
142
|
headers = JSON.parse(JSON.stringify(options.headers));
|
|
143
|
-
|
|
143
|
+
isNpmFormDataBody = this.isNpmFormData(body);
|
|
144
|
+
if (isNpmFormDataBody) {
|
|
145
|
+
params = body.__plainObj ? __assign({}, body.__plainObj) : {};
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
params = typeof body === 'object' ? body : (0, utils_1.safeParseJson)(body) || {};
|
|
149
|
+
}
|
|
144
150
|
params.envName = (params === null || params === void 0 ? void 0 : params.env) || this.config.env || ((_m = (0, context_1.getSecretInfo)()) === null || _m === void 0 ? void 0 : _m.env) || '';
|
|
145
151
|
if (params.access_token) {
|
|
146
152
|
return [2, options];
|
|
@@ -204,6 +210,19 @@ var NodeRequest = (function () {
|
|
|
204
210
|
headers['X-Signature-Expires'] = 600;
|
|
205
211
|
}
|
|
206
212
|
}
|
|
213
|
+
if (isNpmFormDataBody) {
|
|
214
|
+
formDataInstance = body;
|
|
215
|
+
existingKeys = new Set(Object.keys(formDataInstance.__plainObj || {}));
|
|
216
|
+
if (params.envName && !existingKeys.has('envName')) {
|
|
217
|
+
formDataInstance.append('envName', params.envName);
|
|
218
|
+
}
|
|
219
|
+
if (params.sessionToken && !existingKeys.has('sessionToken')) {
|
|
220
|
+
formDataInstance.append('sessionToken', params.sessionToken);
|
|
221
|
+
}
|
|
222
|
+
formBuffer = formDataInstance.getBuffer();
|
|
223
|
+
formHeaders = formDataInstance.getHeaders();
|
|
224
|
+
return [2, __assign(__assign({}, options), { headers: __assign(__assign(__assign({}, headers), formHeaders), { 'content-length': String(formBuffer.length) }), body: formBuffer })];
|
|
225
|
+
}
|
|
207
226
|
return [2, __assign(__assign({}, options), { headers: headers, body: typeof params === 'object' ? JSON.stringify(params) : params })];
|
|
208
227
|
}
|
|
209
228
|
});
|
|
@@ -213,20 +232,21 @@ var NodeRequest = (function () {
|
|
|
213
232
|
this.put = function (options) { return _this.request(__assign(__assign({}, options), { method: 'put' })); };
|
|
214
233
|
this.upload = function (options) {
|
|
215
234
|
var _a;
|
|
216
|
-
var
|
|
217
|
-
|
|
235
|
+
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;
|
|
236
|
+
var file = rawFile !== null && rawFile !== void 0 ? rawFile : fileContent;
|
|
237
|
+
if (file === undefined || name === undefined) {
|
|
218
238
|
throw new Error('file and name is required');
|
|
219
239
|
}
|
|
220
|
-
var
|
|
240
|
+
var formFields = (0, utils_1.obj2StrRecord)(data !== null && data !== void 0 ? data : {});
|
|
221
241
|
var loweredMethod = method === null || method === void 0 ? void 0 : method.toLowerCase();
|
|
222
242
|
var reqMethod = (_a = ['post', 'put'].find(function (m) { return m === loweredMethod; })) !== null && _a !== void 0 ? _a : 'put';
|
|
223
243
|
var formData = new FormData();
|
|
224
244
|
if (reqMethod === 'post') {
|
|
225
|
-
Object.keys(
|
|
226
|
-
formData.append(key,
|
|
245
|
+
Object.keys(formFields).forEach(function (key) {
|
|
246
|
+
formData.append(key, formFields[key]);
|
|
227
247
|
});
|
|
228
248
|
formData.append('key', name);
|
|
229
|
-
formData.append('file', file);
|
|
249
|
+
formData.append('file', file instanceof Blob ? file : new Blob([file]));
|
|
230
250
|
return _this.request(__assign(__assign({}, options), { data: formData, method: reqMethod }), _this.restrictedMethods.includes('upload'));
|
|
231
251
|
}
|
|
232
252
|
return _this.request(__assign(__assign({}, options), { method: 'put', headers: headers, body: file }), _this.restrictedMethods.includes('upload'));
|
|
@@ -269,83 +289,64 @@ var NodeRequest = (function () {
|
|
|
269
289
|
});
|
|
270
290
|
}); };
|
|
271
291
|
this.fetch = function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
272
|
-
var _a, enableAbort, _b, stream, signal, customReqOpts, url,
|
|
273
|
-
var
|
|
274
|
-
return __generator(this, function (
|
|
275
|
-
switch (
|
|
292
|
+
var _a, enableAbort, _b, stream, signal, customReqOpts, url, timeout, _c, abortController, cleanup, headers, fetchOptions, res, _d, _e;
|
|
293
|
+
var _f;
|
|
294
|
+
return __generator(this, function (_g) {
|
|
295
|
+
switch (_g.label) {
|
|
276
296
|
case 0:
|
|
277
297
|
_a = options.enableAbort, enableAbort = _a === void 0 ? false : _a, _b = options.stream, stream = _b === void 0 ? false : _b, signal = options.signal, customReqOpts = options.customReqOpts;
|
|
278
298
|
url = this.getRealUrl(options.url, options.headers || {}, options.body);
|
|
279
|
-
abortController = new AbortController();
|
|
280
299
|
timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
|
|
281
|
-
|
|
282
|
-
if (signal.aborted) {
|
|
283
|
-
abortController.abort();
|
|
284
|
-
}
|
|
285
|
-
else {
|
|
286
|
-
signal.addEventListener('abort', function () { return abortController.abort(); });
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
timer = undefined;
|
|
290
|
-
if (enableAbort || timeout) {
|
|
291
|
-
timer = setTimeout(function () {
|
|
292
|
-
var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
|
|
293
|
-
console.warn(timeoutMsg);
|
|
294
|
-
abortController.abort(new Error(timeoutMsg));
|
|
295
|
-
}, timeout);
|
|
296
|
-
}
|
|
300
|
+
_c = this.createAbortController(timeout, enableAbort, signal), abortController = _c[0], cleanup = _c[1];
|
|
297
301
|
headers = options.headers ? (0, utils_1.headersInit2Indexable)(options.headers) : undefined;
|
|
298
302
|
return [4, this.getReqOptions(url, __assign(__assign({}, options), { headers: headers, body: options.body, signal: abortController.signal }))];
|
|
299
303
|
case 1:
|
|
300
|
-
fetchOptions =
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
clearTimeout(timer);
|
|
304
|
-
return x;
|
|
305
|
-
})
|
|
306
|
-
.catch(function (x) {
|
|
307
|
-
clearTimeout(timer);
|
|
308
|
-
return Promise.reject(x);
|
|
309
|
-
})];
|
|
304
|
+
fetchOptions = _g.sent();
|
|
305
|
+
this.applyDuplexIfNeeded(fetchOptions);
|
|
306
|
+
_g.label = 2;
|
|
310
307
|
case 2:
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
if (!(+res.status === 204)) return [3, 3];
|
|
314
|
-
_c = '';
|
|
315
|
-
return [3, 7];
|
|
308
|
+
_g.trys.push([2, , 9, 10]);
|
|
309
|
+
return [4, fetch(url, fetchOptions)];
|
|
316
310
|
case 3:
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
return [3,
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
311
|
+
res = _g.sent();
|
|
312
|
+
_f = {};
|
|
313
|
+
if (!(+res.status === 204)) return [3, 4];
|
|
314
|
+
_d = '';
|
|
315
|
+
return [3, 8];
|
|
316
|
+
case 4:
|
|
317
|
+
if (!stream) return [3, 5];
|
|
318
|
+
_e = res.body;
|
|
319
|
+
return [3, 7];
|
|
320
|
+
case 5: return [4, res.json()];
|
|
324
321
|
case 6:
|
|
325
|
-
|
|
326
|
-
|
|
322
|
+
_e = _g.sent();
|
|
323
|
+
_g.label = 7;
|
|
327
324
|
case 7:
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
325
|
+
_d = _e;
|
|
326
|
+
_g.label = 8;
|
|
327
|
+
case 8: return [2, (_f.data = _d,
|
|
328
|
+
_f.statusCode = res.status,
|
|
329
|
+
_f.header = res.headers,
|
|
330
|
+
_f)];
|
|
331
|
+
case 9:
|
|
332
|
+
cleanup();
|
|
333
|
+
return [7];
|
|
334
|
+
case 10: return [2];
|
|
333
335
|
}
|
|
334
336
|
});
|
|
335
337
|
}); };
|
|
336
338
|
this.request = function (options, enableAbort) {
|
|
337
339
|
if (enableAbort === void 0) { enableAbort = false; }
|
|
338
340
|
return __awaiter(_this, void 0, void 0, function () {
|
|
339
|
-
var url, _a,
|
|
340
|
-
return __generator(this, function (
|
|
341
|
-
switch (
|
|
341
|
+
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;
|
|
342
|
+
return __generator(this, function (_p) {
|
|
343
|
+
switch (_p.label) {
|
|
342
344
|
case 0:
|
|
343
|
-
url = options.url, _a = options.headers,
|
|
344
|
-
headers = (0, utils_1.obj2StrRecord)(
|
|
345
|
-
method = String(
|
|
346
|
-
abortController = new AbortController();
|
|
347
|
-
signal = abortController.signal;
|
|
345
|
+
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;
|
|
346
|
+
headers = (0, utils_1.obj2StrRecord)(rawHeaders);
|
|
347
|
+
method = String(rawMethod).toLowerCase() || 'get';
|
|
348
348
|
timeout = (customReqOpts === null || customReqOpts === void 0 ? void 0 : customReqOpts.timeout) || this.timeout;
|
|
349
|
+
_b = this.createAbortController(timeout, enableAbort), abortController = _b[0], cleanup = _b[1];
|
|
349
350
|
if ((0, utils_1.isFormData)(data)) {
|
|
350
351
|
payload = data;
|
|
351
352
|
}
|
|
@@ -359,74 +360,83 @@ var NodeRequest = (function () {
|
|
|
359
360
|
payload = data ? JSON.stringify(data) : undefined;
|
|
360
361
|
}
|
|
361
362
|
realUrl = this.getRealUrl((0, adapter_interface_1.formatUrl)('https', url !== null && url !== void 0 ? url : '', method === 'get' ? data : {}), options.headers || {}, payload);
|
|
362
|
-
if (enableAbort || timeout) {
|
|
363
|
-
timer = setTimeout(function () {
|
|
364
|
-
var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
|
|
365
|
-
console.warn(timeoutMsg);
|
|
366
|
-
abortController.abort(new Error(timeoutMsg));
|
|
367
|
-
}, timeout);
|
|
368
|
-
}
|
|
369
363
|
return [4, this.getReqOptions(realUrl, {
|
|
370
364
|
method: method,
|
|
371
365
|
headers: headers,
|
|
372
366
|
body: payload,
|
|
373
367
|
credentials: withCredentials ? 'include' : 'same-origin',
|
|
374
|
-
signal: signal,
|
|
368
|
+
signal: abortController.signal,
|
|
375
369
|
})];
|
|
376
370
|
case 1:
|
|
377
|
-
requestOptions =
|
|
378
|
-
|
|
371
|
+
requestOptions = _p.sent();
|
|
372
|
+
this.applyDuplexIfNeeded(requestOptions);
|
|
373
|
+
_p.label = 2;
|
|
379
374
|
case 2:
|
|
380
|
-
|
|
375
|
+
_p.trys.push([2, , 19, 20]);
|
|
381
376
|
return [4, fetch(realUrl, requestOptions)];
|
|
382
377
|
case 3:
|
|
383
|
-
response =
|
|
378
|
+
response = _p.sent();
|
|
384
379
|
result_1 = {
|
|
385
380
|
header: {},
|
|
386
381
|
statusCode: response.status,
|
|
387
382
|
};
|
|
388
|
-
|
|
383
|
+
_p.label = 4;
|
|
389
384
|
case 4:
|
|
390
|
-
|
|
391
|
-
_b = result_1;
|
|
385
|
+
_p.trys.push([4, 11, , 18]);
|
|
392
386
|
if (!(responseType === 'blob')) return [3, 6];
|
|
387
|
+
_c = result_1;
|
|
393
388
|
return [4, response.blob()];
|
|
394
389
|
case 5:
|
|
395
|
-
_c =
|
|
396
|
-
return [3,
|
|
390
|
+
_c.data = _p.sent();
|
|
391
|
+
return [3, 10];
|
|
397
392
|
case 6:
|
|
398
|
-
|
|
399
|
-
|
|
393
|
+
if (!(responseType === 'buffer')) return [3, 8];
|
|
394
|
+
_d = result_1;
|
|
395
|
+
_f = (_e = Buffer).from;
|
|
396
|
+
return [4, response.arrayBuffer()];
|
|
400
397
|
case 7:
|
|
401
|
-
|
|
402
|
-
|
|
398
|
+
_d.data = _f.apply(_e, [_p.sent()]);
|
|
399
|
+
return [3, 10];
|
|
403
400
|
case 8:
|
|
404
|
-
|
|
405
|
-
|
|
401
|
+
_g = result_1;
|
|
402
|
+
_h = utils_1.safeParseJson;
|
|
403
|
+
return [4, response.text()];
|
|
406
404
|
case 9:
|
|
407
|
-
|
|
405
|
+
_g.data = _h.apply(void 0, [_p.sent()]);
|
|
406
|
+
_p.label = 10;
|
|
407
|
+
case 10: return [3, 18];
|
|
408
|
+
case 11:
|
|
409
|
+
e_2 = _p.sent();
|
|
408
410
|
console.log('catch an error', e_2);
|
|
409
|
-
|
|
410
|
-
|
|
411
|
+
if (!(responseType === 'blob')) return [3, 13];
|
|
412
|
+
_j = result_1;
|
|
411
413
|
return [4, response.blob()];
|
|
412
|
-
case 10:
|
|
413
|
-
_f = _g.sent();
|
|
414
|
-
return [3, 13];
|
|
415
|
-
case 11: return [4, response.text()];
|
|
416
414
|
case 12:
|
|
417
|
-
|
|
418
|
-
|
|
415
|
+
_j.data = _p.sent();
|
|
416
|
+
return [3, 17];
|
|
419
417
|
case 13:
|
|
420
|
-
|
|
421
|
-
|
|
418
|
+
if (!(responseType === 'buffer')) return [3, 15];
|
|
419
|
+
_k = result_1;
|
|
420
|
+
_m = (_l = Buffer).from;
|
|
421
|
+
return [4, response.arrayBuffer()];
|
|
422
422
|
case 14:
|
|
423
|
+
_k.data = _m.apply(_l, [_p.sent()]);
|
|
424
|
+
return [3, 17];
|
|
425
|
+
case 15:
|
|
426
|
+
_o = result_1;
|
|
427
|
+
return [4, response.text()];
|
|
428
|
+
case 16:
|
|
429
|
+
_o.data = _p.sent();
|
|
430
|
+
_p.label = 17;
|
|
431
|
+
case 17: return [3, 18];
|
|
432
|
+
case 18:
|
|
423
433
|
headers_1 = response.headers;
|
|
424
434
|
headers_1.forEach(function (val, key) { return (result_1.header[key.toLowerCase()] = val); });
|
|
425
435
|
return [2, result_1];
|
|
426
|
-
case
|
|
427
|
-
|
|
436
|
+
case 19:
|
|
437
|
+
cleanup();
|
|
428
438
|
return [7];
|
|
429
|
-
case
|
|
439
|
+
case 20: return [2];
|
|
430
440
|
}
|
|
431
441
|
});
|
|
432
442
|
});
|
|
@@ -474,7 +484,38 @@ var NodeRequest = (function () {
|
|
|
474
484
|
}
|
|
475
485
|
return urlObj.toString();
|
|
476
486
|
};
|
|
487
|
+
NodeRequest.prototype.createAbortController = function (timeout, enableAbort, externalSignal) {
|
|
488
|
+
var controller = new AbortController();
|
|
489
|
+
if (externalSignal) {
|
|
490
|
+
if (externalSignal.aborted) {
|
|
491
|
+
controller.abort();
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
externalSignal.addEventListener('abort', function () { return controller.abort(); });
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
var timer;
|
|
498
|
+
if (enableAbort || timeout) {
|
|
499
|
+
timer = setTimeout(function () {
|
|
500
|
+
var timeoutMsg = "\u8BF7\u6C42\u5728".concat(timeout / 1000, "s\u5185\u672A\u5B8C\u6210\uFF0C\u5DF2\u4E2D\u65AD");
|
|
501
|
+
console.warn(timeoutMsg);
|
|
502
|
+
controller.abort(new Error(timeoutMsg));
|
|
503
|
+
}, timeout);
|
|
504
|
+
}
|
|
505
|
+
return [controller, function () { return clearTimeout(timer); }];
|
|
506
|
+
};
|
|
507
|
+
NodeRequest.prototype.applyDuplexIfNeeded = function (options) {
|
|
508
|
+
var _a;
|
|
509
|
+
if (options.body && typeof ((_a = options.body) === null || _a === void 0 ? void 0 : _a.pipe) === 'function') {
|
|
510
|
+
options.duplex = 'half';
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
NodeRequest.prototype.isNpmFormData = function (obj) {
|
|
514
|
+
return obj && typeof obj === 'object'
|
|
515
|
+
&& typeof obj.getHeaders === 'function'
|
|
516
|
+
&& typeof obj.getBuffer === 'function';
|
|
517
|
+
};
|
|
477
518
|
return NodeRequest;
|
|
478
519
|
}());
|
|
479
520
|
exports.NodeRequest = NodeRequest;
|
|
480
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBd0I7QUFDeEIseUNBQTRCO0FBQzVCLGtFQVFxQztBQUNyQyx5Q0FBMEQ7QUFDMUQscUNBQTJFO0FBRTNFLGlDQVFnQjtBQUVoQixpREFBc0Q7QUFHdEQsSUFBSSxNQUFNLEdBQXFDLElBQUksQ0FBQTtBQUNuRCxTQUFlLE9BQU87Ozs7Ozt5QkFDaEIsQ0FBQyxNQUFNLEVBQVAsY0FBTzs7OztvQkFHSyxXQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBOztvQkFBakQsR0FBRyxHQUFHLFNBQTJDO29CQUN2RCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTs7OztvQkFFakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQ7MEJBQzNELCtDQUErQzswQkFDL0Msc0JBQXNCLENBQUMsQ0FBQTs7d0JBRy9CLFdBQU8sTUFBTyxFQUFBOzs7O0NBQ2Y7QUFPRDtJQVVFLHFCQUFZLE1BQXlDO1FBQXJELGlCQUtDO1FBdURNLGtCQUFhLEdBQUcsVUFDckIsR0FBVyxFQUNYLE9BT0M7Ozs7Ozt3QkFFSyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBRW5CLFVBQVUsR0FBSyxJQUFBLDZCQUFtQixHQUFFLFdBQTFCLENBQTBCOzZDQUUxQixDQUFBLE1BQUEsTUFBQSxxQkFBVyxDQUFDLE9BQU8sMENBQUUsZUFBZSwwQ0FBRSxNQUFNLEtBQUksVUFBVSxJQUFJLEVBQUU7d0JBQUksV0FBTSxJQUFBLHdCQUFnQixHQUFFLEVBQUE7O3dCQUF4RyxNQUFNLEdBQUcsY0FBdUUsU0FBd0IsRUFBRTt3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Q0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7Z0NBQ25CLFVBQVUsRUFBRSxvQkFBb0I7NkJBQ2pDLENBQUM7eUJBQ0gsQ0FBQyxFQUFBOzt3QkFUSSxHQUFHLEdBQUcsU0FTVjt3QkFFRixXQUFPLE1BQUEsR0FBRyxDQUFDLElBQUksMENBQUUsWUFBWSxFQUFBOzs7O0tBQzlCO0lBT0QsZ0NBQVUsR0FBVixVQUFXLEdBQVcsRUFBRSxPQUE0QixFQUFFLElBQVM7O1FBQzdELElBQUksTUFBQSxNQUFBLE9BQU8sQ0FBQyxhQUFhLDBDQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLDBDQUFFLElBQUksRUFBRSxFQUFFO1lBQ3hELE9BQU8sR0FBRyxDQUFBO1NBQ1g7UUFFRCxJQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBQSxxQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUUxRSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDdkIsT0FBTyxHQUFHLENBQUE7U0FDWDtRQUVELElBQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTNCLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLEtBQUksTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksMENBQUUsUUFBUSxDQUFBLEtBQUksTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksMENBQUUsU0FBUyxDQUFBLEVBQUU7WUFDM0YsTUFBTSxDQUFDLFFBQVEsR0FBRyxzQkFBVSxDQUFBO1NBQzdCO1FBQ0QsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQTJZSCxrQkFBQztBQUFELENBQUMsQUFyY0QsSUFxY0M7QUFyY1ksa0NBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQge1xuICBJRmV0Y2hPcHRpb25zLFxuICBJUmVxdWVzdENvbmZpZyxcbiAgSVJlcXVlc3RNZXRob2QsXG4gIElSZXF1ZXN0T3B0aW9ucyxcbiAgUmVzcG9uc2VPYmplY3QsXG4gIFNES1JlcXVlc3RJbnRlcmZhY2UsXG4gIGZvcm1hdFVybCxcbn0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcbmltcG9ydCB7IEFETUlOX1BBVEgsIENMSUVOVF9BVVRIX1BBVEggfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IGdldENsb3VkYmFzZUNvbnRleHQsIGdldFNlY3JldEluZm8sIElOSVRfQ09ORklHIH0gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBJQ3VzdG9tUmVxT3B0cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQge1xuICBnZXRFbnYsXG4gIGlzRm9ybURhdGEsXG4gIHRvUXVlcnlTdHJpbmcsXG4gIHNhZmVQYXJzZUpzb24sXG4gIG9iajJTdHJSZWNvcmQsXG4gIGhlYWRlcnNJbml0MkluZGV4YWJsZSxcbiAgZ2V0Q3VyclJ1bkVudlRhZyxcbn0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IElDbG91ZGJhc2VDb25maWcgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2RrVmVyc2lvbiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb21tb24nXG4vLyDlu7bov5/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+8iVxuICAgKi9cbiAgZ2V0UmVhbFVybCh1cmw6IHN0cmluZywgaGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PiwgYm9keTogYW55KSB7XG4gICAgaWYgKGhlYWRlcnMuQXV0aG9yaXphdGlvbj8ucmVwbGFjZSgnQmVhcmVyJywgJycpPy50cmltKCkpIHtcbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5IDogc2FmZVBhcnNlSnNvbihib2R5KSB8fCAnJ1xuXG4gICAgaWYgKHBhcmFtcy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybClcblxuICAgIGlmICh1cmxPYmoucGF0aG5hbWUgPT09ICcvd2ViJyAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRJZCAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRLZXkpIHtcbiAgICAgIHVybE9iai5wYXRobmFtZSA9IEFETUlOX1BBVEhcbiAgICB9XG4gICAgcmV0dXJuIHVybE9iai50b1N0cmluZygpXG4gIH1cblxuICAvKipcbiAgICog5Li66K+35rGC5re75Yqg562+5ZCN5oiW6K6k6K+B5L+h5oGvXG4gICAqXG4gICAqIOWkhOeQhumAu+i+keS8mOWFiOe6p++8mlxuICAgKiAxLiDlt7LmnIkgQXV0aG9yaXphdGlvbiBoZWFkZXIg4oaSIOebtOaOpei/lOWbnlxuICAgKiAyLiAvYXV0aC8g6Lev5b6EIOKGkiBTREsg6K6k6K+B5o6l5Y+j77yM5peg6ZyA562+5ZCNXG4gICAqIDMuIOS4jeaUr+aMgSBWMyDnrb7lkI3nmoTot6/lvoTvvIgvdjEvbW9kZWwvIOetie+8ieKGkiDnlKggY2xpZW50Q3JlZGVudGlhbCBCZWFyZXIgVG9rZW5cbiAgICogNC4g5Y+C5pWw5ZCrIGFjY2Vzc190b2tlbiDihpIg5peg6ZyA562+5ZCNXG4gICAqIDUuIOWFtuS7liDihpIg5L2/55SoIFYzIOetvuWQje+8iFRDMy1ITUFDLVNIQTI1Nu+8iVxuICAgKi9cbiAgcHVibGljIGdldFJlcU9wdGlvbnMgPSBhc3luYyAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgbWV0aG9kPzogYW55XG4gICAgICBoZWFkZXJzOiBhbnlcbiAgICAgIGJvZHk/OiBhbnlcbiAgICAgIGNyZWRlbnRpYWxzPzogc3RyaW5nXG4gICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICAgdXJsPzogYW55XG4gICAgfSxcbiAgKSA9PiB7XG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpXG5cbiAgICBjb25zdCB7IFRDQl9TT1VSQ0UgfSA9IGdldENsb3VkYmFzZUNvbnRleHQoKVxuICAgIC8vIE5vdGU6IOS6keWHveaVsOiiq+iwg+eUqOaXtuWPr+iDveiwg+eUqOerr+acquS8oOmAkiBTT1VSQ0XvvIxUQ0JfU09VUkNFIOWPr+iDveS4uuepulxuICAgIGNvbnN0IFNPVVJDRSA9IGAke0lOSVRfQ09ORklHLmNvbnRleHQ/LmV4dGVuZGVkQ29udGV4dD8uc291cmNlIHx8IFRDQl9TT1VSQ0UgfHwgJyd9LCR7YXdhaXQgZ2V0Q3VyclJ1bkVudlRhZygpfWBcblxuICAgIG9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICdVc2VyLUFnZW50JzogYGFkYXB0ZXItbm9kZS8ke29wdGlvbnMuaGVhZGVycz8uWydYLVNESy1WZXJzaW9uJ10gfHwgYEBjbG91ZGJhc2UvanMtc2RrLyR7Z2V0U2RrVmVyc2lvbigpfWB9YCxcbiAgICAgICdYLVRDQi1Tb3VyY2UnOiBTT1VSQ0UsXG4gICAgICAnWC1DbGllbnQtVGltZXN0YW1wJzogbmV3IERhdGUoKS52YWx1ZU9mKCksXG4gICAgICAnWC1UQ0ItUmVnaW9uJzogSU5JVF9DT05GSUcucmVnaW9uIHx8IGdldEVudignVEVOQ0VOVENMT1VEX1JFR0lPTicpIHx8ICcnLFxuICAgICAgSG9zdDogdXJsT2JqLmhvc3QsXG4gICAgfVxuXG4gICAgLy8g5bey5pC65bim5pyJ5pWIIEF1dGhvcml6YXRpb27vvIznm7TmjqXov5Tlm55cbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24/LnJlcGxhY2UoJ0JlYXJlcicsICcnKT8udHJpbSgpKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIC8vIGF1dGgg55u45YWz5o6l5Y+j5LiN6ZyA6KaB562+5ZCNXG4gICAgaWYgKHVybE9iai5wYXRobmFtZS5zdGFydHNXaXRoKCcvYXV0aC8nKSAmJiB1cmxPYmoucGF0aG5hbWUgIT09IENMSUVOVF9BVVRIX1BBVEgpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgY29uc3QgaXNBZG1pblBhdGggPSB1cmxPYmoucGF0aG5hbWUgPT09IEFETUlOX1BBVEhcblxuICAgIC8vIOi/meS6m+i3r+W+hOS4jeaUr+aMgSBWMyDnrb7lkI3vvIzmlLnnlKggY2xpZW50Q3JlZGVudGlhbCDojrflj5YgQmVhcmVyIFRva2VuXG4gICAgY29uc3QgVU5TVVBQT1JURURfVjNfU0lHTl9QQVRIID0gWycvdjEvbW9kZWwvJywgJy92MS9yZGIvJywgJy92MS9haS8nXVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX1YzX1NJR05fUEFUSC5zb21lKHYgPT4gdXJsT2JqLnBhdGhuYW1lLnN0YXJ0c1dpdGgodikpKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50Q3JlZGVudGlhbCh7IG9yaWdpbjogdXJsT2JqLm9yaWdpbiB9KVxuICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YFxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICBsZXQgeyBzZWNyZXRJZCwgc2VjcmV0S2V5LCBzZXNzaW9uVG9rZW4gfSA9IHRoaXMuY29uZmlnPy5hdXRoIHx8IHt9XG4gICAgY29uc3QgeyBzZWNyZXRUeXBlIH0gPSB0aGlzLmNvbmZpZz8uYXV0aCB8fCB7fVxuICAgIGNvbnN0IHsgbWV0aG9kLCBib2R5IH0gPSBvcHRpb25zXG4gICAgY29uc3QgaGVhZGVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5oZWFkZXJzKSlcbiAgICBsZXQgcGFyYW1zID0gdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keSA6IHNhZmVQYXJzZUpzb24oYm9keSkgfHwge31cblxuICAgIHBhcmFtcy5lbnZOYW1lID0gcGFyYW1zPy5lbnYgfHwgdGhpcy5jb25maWcuZW52IHx8IGdldFNlY3JldEluZm8oKT8uZW52IHx8ICcnXG5cbiAgICAvLyDlj4LmlbDoh6rluKYgYWNjZXNzX3Rva2Vu77yM5peg6ZyA562+5ZCNXG4gICAgaWYgKHBhcmFtcy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gR0VUIOivt+axguWPguaVsOW3suWcqCBVUkwg5Lit77yM562+5ZCN5pe2IHBhcmFtcyDnva7nqbpcbiAgICBpZiAobWV0aG9kLnRvTG93ZXJDYXNlKCkgPT09ICdnZXQnKSB7XG4gICAgICBwYXJhbXMgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvLyBTRVNTSU9OX1NFQ1JFVCDnsbvlnovmiJbml6Dlr4bpkqXml7bvvIzku47njq/looPlj5jph4/ojrflj5bkuLTml7blr4bpkqVcbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkgfHwgc2VjcmV0VHlwZSA9PT0gJ1NFU1NJT05fU0VDUkVUJykge1xuICAgICAgY29uc3Qgc2VjcmV0SW5mbyA9IGdldFNlY3JldEluZm8oKVxuICAgICAgc2VjcmV0SWQgPSBzZWNyZXRJbmZvLnNlY3JldElkXG4gICAgICBzZWNyZXRLZXkgPSBzZWNyZXRJbmZvLnNlY3JldEtleVxuICAgICAgc2Vzc2lvblRva2VuID0gc2VjcmV0SW5mby5zZXNzaW9uVG9rZW5cbiAgICB9XG5cbiAgICAvLyDku43ml6Dlr4bpkqXliJnot7Pov4fnrb7lkI1cbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvblxuXG4gICAgLy8gY29udGVudC10eXBlIOmcgOS4juacjeWKoeerr+etvuWQjemqjOivgeS/neaMgeWkp+Wwj+WGmeS4gOiHtFxuICAgIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBoZWFkZXJzWydDb250ZW50LVR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfVxuXG4gICAgaWYgKGlzQWRtaW5QYXRoICYmICEhc2Vzc2lvblRva2VuKSB7XG4gICAgICBwYXJhbXMuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVkUGFyYW1zID0ge1xuICAgICAgc2VjcmV0SWQsXG4gICAgICBzZWNyZXRLZXksXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aFNpZ25lZFBhcmFtczogaXNBZG1pblBhdGgsXG4gICAgICB0aW1lc3RhbXA6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDEsXG4gICAgICBpc0Nsb3VkQXBpOiAhaXNBZG1pblBhdGgsXG4gICAgfVxuXG4gICAgaWYgKCFoZWFkZXJzWydjb250ZW50LXR5cGUnXSAmJiAhaGVhZGVyc1snQ29udGVudC1UeXBlJ10pIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbiA9IGF3YWl0IGdldFNpZ24oKVxuICAgIGlmICghc2lnbikgcmV0dXJuIG9wdGlvbnNcblxuICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiwgdGltZXN0YW1wIH0gPSBzaWduKHNpZ25lZFBhcmFtcylcblxuICAgIGlmICh0eXBlb2Ygc2Vzc2lvblRva2VuID09PSAnc3RyaW5nJyAmJiBzZXNzaW9uVG9rZW4gIT09ICcnKSB7XG4gICAgICBpZiAoaXNBZG1pblBhdGgpIHtcbiAgICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvbn1gXG4gICAgICAgIGhlYWRlcnNbJ1gtVGltZXN0YW1wJ10gPSB0aW1lc3RhbXBcbiAgICAgICAgaGVhZGVyc1snWC1TaWduYXR1cmUtRXhwaXJlcyddID0gNjAwXG4gICAgICB9IGVsc2UgIHtcbiAgICAgICAgLy8g5Li05pe25a+G6ZKl6ZyA6KaB6aKd5aSW6ZmE5bimIFRva2VuXG4gICAgICAgIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb259LCBUaW1lc3RhbXA9JHt0aW1lc3RhbXB9LCBUb2tlbj0ke3Nlc3Npb25Ub2tlbn1gXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb259LCBUaW1lc3RhbXA9JHt0aW1lc3RhbXB9YFxuXG4gICAgICAvLyBhZG1pbiDot6/lvoTpnIDopoHpop3lpJbnmoTml7bpl7TmiLPlkozov4fmnJ/lpLRcbiAgICAgIGlmIChpc0FkbWluUGF0aCkge1xuICAgICAgICBoZWFkZXJzWydYLVRpbWVzdGFtcCddID0gdGltZXN0YW1wXG4gICAgICAgIGhlYWRlcnNbJ1gtU2lnbmF0dXJlLUV4cGlyZXMnXSA9IDYwMFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkocGFyYW1zKSA6IHBhcmFtcyxcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdChcbiAgICB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICB9LFxuICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ2dldCcpLFxuICApXG5cbiAgcHVibGljIHBvc3QgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4gdGhpcy5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICB9LFxuICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ3Bvc3QnKSxcbiAgKVxuXG4gIHB1YmxpYyBwdXQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4gdGhpcy5yZXF1ZXN0KHtcbiAgICAuLi5vcHRpb25zLFxuICAgIG1ldGhvZDogJ3B1dCcsXG4gIH0pXG5cbiAgLyoqXG4gICAqIOaWh+S7tuS4iuS8oFxuICAgKiBQT1NUIOaWueW8j++8muaehOW7uiBGb3JtRGF0YSDkuIrkvKBcbiAgICogUFVUIOaWueW8j++8muebtOaOpeWwhuaWh+S7tuS9nOS4uiBib2R5IOS4iuS8oFxuICAgKi9cbiAgcHVibGljIHVwbG9hZCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB7XG4gICAgY29uc3QgeyBkYXRhOiBfZGF0YSwgZmlsZSwgbmFtZSwgbWV0aG9kLCBoZWFkZXJzID0ge30gfSA9IG9wdGlvbnNcbiAgICBpZiAoZmlsZSA9PT0gdW5kZWZpbmVkIHx8IG5hbWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbGUgYW5kIG5hbWUgaXMgcmVxdWlyZWQnKVxuICAgIH1cbiAgICBjb25zdCBkYXRhID0gb2JqMlN0clJlY29yZChfZGF0YSA/PyB7fSlcbiAgICBjb25zdCBsb3dlcmVkTWV0aG9kID0gbWV0aG9kPy50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgcmVxTWV0aG9kID0gWydwb3N0JywgJ3B1dCddLmZpbmQobSA9PiBtID09PSBsb3dlcmVkTWV0aG9kKSA/PyAncHV0J1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICBpZiAocmVxTWV0aG9kID09PSAncG9zdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhW2tleV0pXG4gICAgICB9KVxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdrZXknLCBuYW1lKVxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSlcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICAgICAgIG1ldGhvZDogcmVxTWV0aG9kLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCd1cGxvYWQnKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBtZXRob2Q6ICdwdXQnLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5OiBmaWxlLFxuICAgICAgfSxcbiAgICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ3VwbG9hZCcpLFxuICAgIClcbiAgfVxuXG4gIC8qKiDmlofku7bkuIvovb3vvIhOb2RlLmpzIOeOr+Wig++8jOmAmui/hyBmZXRjaCDojrflj5bmlofku7blhoXlrrnlubblhpnlhaXmnKzlnLDmlofku7bmiJbov5Tlm54gQnVmZmVy77yJICovXG4gIHB1YmxpYyBkb3dubG9hZCA9IGFzeW5jIChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChvcHRpb25zLnVybCEsIHtcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgc2lnbmFsOiBBYm9ydFNpZ25hbC50aW1lb3V0KHRoaXMudGltZW91dCksXG4gICAgfSlcblxuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERvd25sb2FkIGZhaWxlZCB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9YClcbiAgICB9XG5cbiAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpXG5cbiAgICAvLyDlpoLmnpzmjIflrprkuoYgdGVtcEZpbGVQYXRo77yM5bCG5paH5Lu25YaZ5YWl5pys5ZywXG4gICAgY29uc3QgeyB0ZW1wRmlsZVBhdGggfSA9IG9wdGlvbnNcbiAgICBpZiAodGVtcEZpbGVQYXRoKSB7XG4gICAgICAvLyDnoa7kv53nm67lvZXlrZjlnKhcbiAgICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyKSkge1xuICAgICAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZVBhdGgsIGJ1ZmZlcilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgdGVtcEZpbGVQYXRoLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOacquaMh+Wumui3r+W+hOaXtui/lOWbniBCdWZmZXJcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgdGVtcEZpbGVQYXRoOiBvcHRpb25zLnVybCxcbiAgICAgIGZpbGVDb250ZW50OiBidWZmZXIsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOW6leWxgiBmZXRjaCDor7fmsYLvvIzmlK/mjIHmtYHlvI/lk43lupRcbiAgICog6LaF5pe26YCa6L+HIEFib3J0Q29udHJvbGxlciArIHNldFRpbWVvdXQg5a6e546wXG4gICAqL1xuICBwdWJsaWMgZmV0Y2ggPSBhc3luYyAob3B0aW9uczogT21pdDxJRmV0Y2hPcHRpb25zLCAnc2lnbmFsJz4gJiB7IHNpZ25hbD86IEFib3J0U2lnbmFsOyBjdXN0b21SZXFPcHRzPzogSUN1c3RvbVJlcU9wdHMgfSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7IGVuYWJsZUFib3J0ID0gZmFsc2UsIHN0cmVhbSA9IGZhbHNlLCBzaWduYWwsIGN1c3RvbVJlcU9wdHMgfSA9IG9wdGlvbnNcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlYWxVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMuaGVhZGVycyB8fCB7fSwgb3B0aW9ucy5ib2R5KVxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IHRpbWVvdXQgPSBjdXN0b21SZXFPcHRzPy50aW1lb3V0IHx8IHRoaXMudGltZW91dFxuXG4gICAgLy8g5qGl5o6l5aSW6YOoIHNpZ25hbCDliLDlhoXpg6ggQWJvcnRDb250cm9sbGVyXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotoXml7boh6rliqjkuK3mlq1cbiAgICBsZXQgdGltZXIgPSB1bmRlZmluZWRcbiAgICBpZiAoZW5hYmxlQWJvcnQgfHwgdGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dE1zZyA9IGDor7fmsYLlnKgke3RpbWVvdXQgLyAxMDAwfXPlhoXmnKrlrozmiJDvvIzlt7LkuK3mlq1gXG4gICAgICAgIGNvbnNvbGUud2Fybih0aW1lb3V0TXNnKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKHRpbWVvdXRNc2cpKVxuICAgICAgfSwgdGltZW91dClcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8gaGVhZGVyc0luaXQySW5kZXhhYmxlKG9wdGlvbnMuaGVhZGVycykgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UmVxT3B0aW9ucyh1cmwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5IGFzIGFueSBhcyBOb2RlSlMuUmVhZGFibGVTdHJlYW0sXG4gICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSlcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgZmV0Y2hPcHRpb25zIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLnRoZW4oKHgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICByZXR1cm4geFxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoeCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh4KVxuICAgICAgfSlcblxuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgIGRhdGE6XG4gICAgICAgICtyZXMuc3RhdHVzID09PSAyMDRcbiAgICAgICAgICA/ICcnIC8vIDIwNCBObyBDb250ZW50XG4gICAgICAgICAgOiBzdHJlYW1cbiAgICAgICAgICAgID8gcmVzLmJvZHlcbiAgICAgICAgICAgIDogYXdhaXQgcmVzLmpzb24oKSxcbiAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXMsXG4gICAgICBoZWFkZXI6IHJlcy5oZWFkZXJzLFxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvKipcbiAgICog6YCa55So6K+35rGC5pa55rOV77yM6KKrIGdldC9wb3N0L3B1dC91cGxvYWQg562J6LCD55SoXG4gICAqIOi0n+i0o+aehOW7uiBwYXlsb2Fk44CB6K6+572u6LaF5pe244CB6Kej5p6Q5ZON5bqUXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g6K+35rGC6YCJ6aG5XG4gICAqIEBwYXJhbSBlbmFibGVBYm9ydCAtIOaYr+WQpuWQr+eUqOi2heaXtuS4reaWre+8iOeUsSByZXN0cmljdGVkTWV0aG9kcyDlhrPlrprvvIlcbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0ID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgZW5hYmxlQWJvcnQgPSBmYWxzZSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzOiBfaGVhZGVycyA9IHt9LFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICAgIGJvZHksXG4gICAgICBtZXRob2Q6IF9tZXRob2QsXG4gICAgICBjdXN0b21SZXFPcHRzLFxuICAgIH0gPSBvcHRpb25zXG4gICAgY29uc3QgaGVhZGVycyA9IG9iajJTdHJSZWNvcmQoX2hlYWRlcnMpXG4gICAgY29uc3QgbWV0aG9kID0gU3RyaW5nKF9tZXRob2QpLnRvTG93ZXJDYXNlKCkgfHwgJ2dldCdcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCB7IHNpZ25hbCB9ID0gYWJvcnRDb250cm9sbGVyXG4gICAgY29uc3QgdGltZW91dCA9IGN1c3RvbVJlcU9wdHM/LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0XG5cbiAgICAvLyDmnoTlu7ror7fmsYIgcGF5bG9hZO+8mkZvcm1EYXRhID4gdXJsZW5jb2RlZCA+IHJhdyBib2R5ID4gSlNPTlxuICAgIGxldCBwYXlsb2FkXG4gICAgaWYgKGlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICAgIHBheWxvYWQgPSBkYXRhXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHBheWxvYWQgPSB0b1F1ZXJ5U3RyaW5nKGRhdGEgPz8ge30pXG4gICAgfSBlbHNlIGlmIChib2R5KSB7XG4gICAgICBwYXlsb2FkID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcmVhbFVybCA9IHRoaXMuZ2V0UmVhbFVybChcbiAgICAgIGZvcm1hdFVybCgnaHR0cHMnLCB1cmwgPz8gJycsIG1ldGhvZCA9PT0gJ2dldCcgPyBkYXRhIDoge30pLFxuICAgICAgb3B0aW9ucy5oZWFkZXJzIHx8IHt9LFxuICAgICAgcGF5bG9hZCxcbiAgICApXG5cbiAgICAvLyDotoXml7bpgJrov4cgQWJvcnRDb250cm9sbGVyICsgc2V0VGltZW91dCDlrp7njrBcbiAgICBsZXQgdGltZXJcblxuICAgIGlmIChlbmFibGVBYm9ydCB8fCB0aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0TXNnID0gYOivt+axguWcqCR7dGltZW91dCAvIDEwMDB9c+WGheacquWujOaIkO+8jOW3suS4reaWrWBcbiAgICAgICAgY29uc29sZS53YXJuKHRpbWVvdXRNc2cpXG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IodGltZW91dE1zZykpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRSZXFPcHRpb25zKHJlYWxVcmwsIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdzYW1lLW9yaWdpbicsXG4gICAgICBzaWduYWwsXG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlYWxVcmwsIHJlcXVlc3RPcHRpb25zIGFzIFJlcXVlc3RJbml0KVxuICAgICAgY29uc3QgcmVzdWx0OiBSZXNwb25zZU9iamVjdCA9IHtcbiAgICAgICAgaGVhZGVyOiB7fSxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQuZGF0YSA9IHJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2InID8gYXdhaXQgcmVzcG9uc2UuYmxvYigpIDogc2FmZVBhcnNlSnNvbihhd2FpdCByZXNwb25zZS50ZXh0KCkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIOS4iuS8oCBQT1NUIOivt+axguWPr+iDvei/lOWbniBYTUwg562J6Z2eIEpTT04g5qC85byP77yM5a656ZSZ5aSE55CGXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYXRjaCBhbiBlcnJvcicsIGUpXG4gICAgICAgIHJlc3VsdC5kYXRhID0gcmVzcG9uc2VUeXBlID09PSAnYmxvYicgPyBhd2FpdCByZXNwb25zZS5ibG9iKCkgOiBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgIH1cblxuICAgICAgLy8g5bCG5ZON5bqU5aS057uf5LiA6L2s5Li65bCP5YaZIGtleVxuICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZVxuICAgICAgaGVhZGVycy5mb3JFYWNoKCh2YWwsIGtleSkgPT4gKHJlc3VsdC5oZWFkZXJba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsKSlcblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
521
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBd0I7QUFDeEIseUNBQTRCO0FBQzVCLGtFQVFxQztBQUNyQyx5Q0FBMEQ7QUFDMUQscUNBQTJFO0FBRTNFLGlDQVFnQjtBQUVoQixpREFBc0Q7QUFHdEQsSUFBSSxNQUFNLEdBQXFDLElBQUksQ0FBQTtBQUNuRCxTQUFlLE9BQU87Ozs7Ozt5QkFDaEIsQ0FBQyxNQUFNLEVBQVAsY0FBTzs7OztvQkFHSyxXQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBOztvQkFBakQsR0FBRyxHQUFHLFNBQTJDO29CQUN2RCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTs7OztvQkFFakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQ7MEJBQzNELCtDQUErQzswQkFDL0Msc0JBQXNCLENBQUMsQ0FBQTs7d0JBRy9CLFdBQU8sTUFBTyxFQUFBOzs7O0NBQ2Y7QUFPRDtJQVVFLHFCQUFZLE1BQXlDO1FBQXJELGlCQUtDO1FBNkNNLGtCQUFhLEdBQUcsVUFDckIsR0FBVyxFQUNYLE9BT0M7Ozs7Ozt3QkFFSyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBRW5CLFVBQVUsR0FBSyxJQUFBLDZCQUFtQixHQUFFLFdBQTFCLENBQTBCOzZDQUUxQixDQUFBLE1BQUEsTUFBQSxxQkFBVyxDQUFDLE9BQU8sMENBQUUsZUFBZSwwQ0FBRSxNQUFNLEtBQUksVUFBVSxJQUFJLEVBQUU7d0JBQUksV0FBTSxJQUFBLHdCQUFnQixHQUFFLEVBQUE7O3dCQUF4RyxNQUFNLEdBQUcsY0FBdUUsU0FBd0IsRUFBRTt3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O2dCQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO2dCQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7WUFDekMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQ1o7UUFFRCxPQUFPLENBQUMsVUFBVSxFQUFFLGNBQU0sT0FBQSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQW5CLENBQW1CLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBR08seUNBQW1CLEdBQTNCLFVBQTRCLE9BQVk7O1FBQ3RDLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUEsTUFBQSxPQUFPLENBQUMsSUFBSSwwQ0FBRSxJQUFJLENBQUEsS0FBSyxVQUFVLEVBQUU7WUFDNUQsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7U0FDeEI7SUFDSCxDQUFDO0lBTU8sbUNBQWEsR0FBckIsVUFBc0IsR0FBUTtRQUM1QixPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO2VBQ2hDLE9BQU8sR0FBRyxDQUFDLFVBQVUsS0FBSyxVQUFVO2VBQ3BDLE9BQU8sR0FBRyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUE7SUFDMUMsQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FBQyxBQXRnQkQsSUFzZ0JDO0FBdGdCWSxrQ0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7XG4gIElGZXRjaE9wdGlvbnMsXG4gIElSZXF1ZXN0Q29uZmlnLFxuICBJUmVxdWVzdE1ldGhvZCxcbiAgSVJlcXVlc3RPcHRpb25zLFxuICBSZXNwb25zZU9iamVjdCxcbiAgU0RLUmVxdWVzdEludGVyZmFjZSxcbiAgZm9ybWF0VXJsLFxufSBmcm9tICdAY2xvdWRiYXNlL2FkYXB0ZXItaW50ZXJmYWNlJ1xuaW1wb3J0IHsgQURNSU5fUEFUSCwgQ0xJRU5UX0FVVEhfUEFUSCB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgZ2V0Q2xvdWRiYXNlQ29udGV4dCwgZ2V0U2VjcmV0SW5mbywgSU5JVF9DT05GSUcgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IElDdXN0b21SZXFPcHRzIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7XG4gIGdldEVudixcbiAgaXNGb3JtRGF0YSxcbiAgdG9RdWVyeVN0cmluZyxcbiAgc2FmZVBhcnNlSnNvbixcbiAgb2JqMlN0clJlY29yZCxcbiAgaGVhZGVyc0luaXQySW5kZXhhYmxlLFxuICBnZXRDdXJyUnVuRW52VGFnLFxufSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbmZpZyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBnZXRTZGtWZXJzaW9uIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbW1vbidcbi8vIOW7tui/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/LnNlY3JldEtleSkge1xuICAgICAgdXJsT2JqLnBhdGhuYW1lID0gQURNSU5fUEFUSFxuICAgIH1cbiAgICByZXR1cm4gdXJsT2JqLnRvU3RyaW5nKClcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXFPcHRpb25zID0gYXN5bmMgKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG1ldGhvZD86IGFueVxuICAgICAgaGVhZGVyczogYW55XG4gICAgICBib2R5PzogYW55XG4gICAgICBjcmVkZW50aWFscz86IHN0cmluZ1xuICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICAgIHVybD86IGFueVxuICAgIH0sXG4gICkgPT4ge1xuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKVxuXG4gICAgY29uc3QgeyBUQ0JfU09VUkNFIH0gPSBnZXRDbG91ZGJhc2VDb250ZXh0KClcbiAgICAvLyBOb3RlOiDkupHlh73mlbDooqvosIPnlKjml7blj6/og73osIPnlKjnq6/mnKrkvKDpgJIgU09VUkNF77yMVENCX1NPVVJDRSDlj6/og73kuLrnqbpcbiAgICBjb25zdCBTT1VSQ0UgPSBgJHtJTklUX0NPTkZJRy5jb250ZXh0Py5leHRlbmRlZENvbnRleHQ/LnNvdXJjZSB8fCBUQ0JfU09VUkNFIHx8ICcnfSwke2F3YWl0IGdldEN1cnJSdW5FbnZUYWcoKX1gXG5cbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAnVXNlci1BZ2VudCc6IGBhZGFwdGVyLW5vZGUvJHtvcHRpb25zLmhlYWRlcnM/LlsnWC1TREstVmVyc2lvbiddIHx8IGBAY2xvdWRiYXNlL2pzLXNkay8ke2dldFNka1ZlcnNpb24oKX1gfWAsXG4gICAgICAnWC1UQ0ItU291cmNlJzogU09VUkNFLFxuICAgICAgJ1gtQ2xpZW50LVRpbWVzdGFtcCc6IG5ldyBEYXRlKCkudmFsdWVPZigpLFxuICAgICAgJ1gtVENCLVJlZ2lvbic6IElOSVRfQ09ORklHLnJlZ2lvbiB8fCBnZXRFbnYoJ1RFTkNFTlRDTE9VRF9SRUdJT04nKSB8fCAnJyxcbiAgICAgIEhvc3Q6IHVybE9iai5ob3N0LFxuICAgIH1cblxuICAgIC8vIOW3suaQuuW4puacieaViCBBdXRob3JpemF0aW9u77yM55u05o6l6L+U5ZueXG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uPy5yZXBsYWNlKCdCZWFyZXInLCAnJyk/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBhdXRoIOebuOWFs+aOpeWPo+S4jemcgOimgeetvuWQjVxuICAgIGlmICh1cmxPYmoucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2F1dGgvJykgJiYgdXJsT2JqLnBhdGhuYW1lICE9PSBDTElFTlRfQVVUSF9QQVRIKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWRtaW5QYXRoID0gdXJsT2JqLnBhdGhuYW1lID09PSBBRE1JTl9QQVRIXG5cbiAgICAvLyDov5nkupvot6/lvoTkuI3mlK/mjIEgVjMg562+5ZCN77yM5pS555SoIGNsaWVudENyZWRlbnRpYWwg6I635Y+WIEJlYXJlciBUb2tlblxuICAgIGNvbnN0IFVOU1VQUE9SVEVEX1YzX1NJR05fUEFUSCA9IFsnL3YxL21vZGVsLycsICcvdjEvcmRiLycsICcvdjEvYWkvJ11cblxuICAgIGlmIChVTlNVUFBPUlRFRF9WM19TSUdOX1BBVEguc29tZSh2ID0+IHVybE9iai5wYXRobmFtZS5zdGFydHNXaXRoKHYpKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmdldENsaWVudENyZWRlbnRpYWwoeyBvcmlnaW46IHVybE9iai5vcmlnaW4gfSlcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Rva2VufWBcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgbGV0IHsgc2VjcmV0SWQsIHNlY3JldEtleSwgc2Vzc2lvblRva2VuIH0gPSB0aGlzLmNvbmZpZz8uYXV0aCB8fCB7fVxuICAgIGNvbnN0IHsgc2VjcmV0VHlwZSB9ID0gdGhpcy5jb25maWc/LmF1dGggfHwge31cbiAgICBjb25zdCB7IG1ldGhvZCwgYm9keSB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuaGVhZGVycykpXG5cbiAgICAvLyA9PT09PT09PT09IOWkhOeQhiBucG0gZm9ybS1kYXRhIOWMheWunuS+iyA9PT09PT09PT09XG4gICAgLy8gbnBtIGZvcm0tZGF0YSDlrp7kvovvvIjmnaXoh6ogbm9kZS1zZGsg55qEIHNlbmRXeEZvcm1EYXRhUmVxdWVzdO+8iTpcbiAgICAvLyAtIOmAmui/hyBfX3BsYWluT2JqIOaMgui9veS6huetvuWQjeeUqOeahOe6r+WvueixoVxuICAgIC8vIC0g562+5ZCN5pe25L2/55SoIHBsYWluIG9iamVjdCDnmoQga2V5LXZhbHVl77yIbXVsdGlwYXJ0IOetvuWQjeaWueW8j++8iVxuICAgIC8vIC0g5Y+R6YCB5pe25L2/55SoIGZvcm0tZGF0YSDnmoQgZ2V0QnVmZmVyKCnvvIhtdWx0aXBhcnQvZm9ybS1kYXRhIOagvOW8j++8iVxuICAgIGNvbnN0IGlzTnBtRm9ybURhdGFCb2R5ID0gdGhpcy5pc05wbUZvcm1EYXRhKGJvZHkpXG4gICAgbGV0IHBhcmFtczogYW55XG5cbiAgICBpZiAoaXNOcG1Gb3JtRGF0YUJvZHkpIHtcbiAgICAgIC8vIOS7jiBmb3JtLWRhdGEg5a6e5L6L5LiK5Y+W562+5ZCN55So55qE57qv5a+56LGhXG4gICAgICBwYXJhbXMgPSBib2R5Ll9fcGxhaW5PYmogPyB7IC4uLmJvZHkuX19wbGFpbk9iaiB9IDoge31cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zID0gdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keSA6IHNhZmVQYXJzZUpzb24oYm9keSkgfHwge31cbiAgICB9XG5cbiAgICBwYXJhbXMuZW52TmFtZSA9IHBhcmFtcz8uZW52IHx8IHRoaXMuY29uZmlnLmVudiB8fCBnZXRTZWNyZXRJbmZvKCk/LmVudiB8fCAnJ1xuXG4gICAgLy8g5Y+C5pWw6Ieq5bimIGFjY2Vzc190b2tlbu+8jOaXoOmcgOetvuWQjVxuICAgIGlmIChwYXJhbXMuYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIC8vIEdFVCDor7fmsYLlj4LmlbDlt7LlnKggVVJMIOS4re+8jOetvuWQjeaXtiBwYXJhbXMg572u56m6XG4gICAgaWYgKG1ldGhvZC50b0xvd2VyQ2FzZSgpID09PSAnZ2V0Jykge1xuICAgICAgcGFyYW1zID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgLy8gU0VTU0lPTl9TRUNSRVQg57G75Z6L5oiW5peg5a+G6ZKl5pe277yM5LuO546v5aKD5Y+Y6YeP6I635Y+W5Li05pe25a+G6ZKlXG4gICAgaWYgKCFzZWNyZXRJZCB8fCAhc2VjcmV0S2V5IHx8IHNlY3JldFR5cGUgPT09ICdTRVNTSU9OX1NFQ1JFVCcpIHtcbiAgICAgIGNvbnN0IHNlY3JldEluZm8gPSBnZXRTZWNyZXRJbmZvKClcbiAgICAgIHNlY3JldElkID0gc2VjcmV0SW5mby5zZWNyZXRJZFxuICAgICAgc2VjcmV0S2V5ID0gc2VjcmV0SW5mby5zZWNyZXRLZXlcbiAgICAgIHNlc3Npb25Ub2tlbiA9IHNlY3JldEluZm8uc2Vzc2lvblRva2VuXG4gICAgfVxuXG4gICAgLy8g5LuN5peg5a+G6ZKl5YiZ6Lez6L+H562+5ZCNXG4gICAgaWYgKCFzZWNyZXRJZCB8fCAhc2VjcmV0S2V5KSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGRlbGV0ZSBoZWFkZXJzLkF1dGhvcml6YXRpb25cblxuICAgIC8vIGNvbnRlbnQtdHlwZSDpnIDkuI7mnI3liqHnq6/nrb7lkI3pqozor4Hkv53mjIHlpKflsI/lhpnkuIDoh7RcbiAgICBpZiAoaGVhZGVyc1snY29udGVudC10eXBlJ10pIHtcbiAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gaGVhZGVyc1snY29udGVudC10eXBlJ10udG9Mb3dlckNhc2UoKVxuICAgIH0gZWxzZSBpZiAoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pIHtcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gaGVhZGVyc1snQ29udGVudC1UeXBlJ10udG9Mb3dlckNhc2UoKVxuICAgIH1cblxuICAgIGlmIChpc0FkbWluUGF0aCAmJiAhIXNlc3Npb25Ub2tlbikge1xuICAgICAgcGFyYW1zLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25Ub2tlblxuICAgIH1cblxuICAgIGNvbnN0IHNpZ25lZFBhcmFtcyA9IHtcbiAgICAgIHNlY3JldElkLFxuICAgICAgc2VjcmV0S2V5LFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgaGVhZGVycyxcbiAgICAgIHdpdGhTaWduZWRQYXJhbXM6IGlzQWRtaW5QYXRoLFxuICAgICAgdGltZXN0YW1wOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxLFxuICAgICAgaXNDbG91ZEFwaTogIWlzQWRtaW5QYXRoLFxuICAgIH1cblxuICAgIGlmICghaGVhZGVyc1snY29udGVudC10eXBlJ10gJiYgIWhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ24gPSBhd2FpdCBnZXRTaWduKClcbiAgICBpZiAoIXNpZ24pIHJldHVybiBvcHRpb25zXG5cbiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHRpbWVzdGFtcCB9ID0gc2lnbihzaWduZWRQYXJhbXMpXG5cbiAgICBpZiAodHlwZW9mIHNlc3Npb25Ub2tlbiA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvblRva2VuICE9PSAnJykge1xuICAgICAgaWYgKGlzQWRtaW5QYXRoKSB7XG4gICAgICAgIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb259YFxuICAgICAgICBoZWFkZXJzWydYLVRpbWVzdGFtcCddID0gdGltZXN0YW1wXG4gICAgICAgIGhlYWRlcnNbJ1gtU2lnbmF0dXJlLUV4cGlyZXMnXSA9IDYwMFxuICAgICAgfSBlbHNlICB7XG4gICAgICAgIC8vIOS4tOaXtuWvhumSpemcgOimgemineWklumZhOW4piBUb2tlblxuICAgICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfSwgVG9rZW49JHtzZXNzaW9uVG9rZW59YFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfWBcblxuICAgICAgLy8gYWRtaW4g6Lev5b6E6ZyA6KaB6aKd5aSW55qE5pe26Ze05oiz5ZKM6L+H5pyf5aS0XG4gICAgICBpZiAoaXNBZG1pblBhdGgpIHtcbiAgICAgICAgaGVhZGVyc1snWC1UaW1lc3RhbXAnXSA9IHRpbWVzdGFtcFxuICAgICAgICBoZWFkZXJzWydYLVNpZ25hdHVyZS1FeHBpcmVzJ10gPSA2MDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09IOaehOW7uui/lOWbnueahCBib2R5ID09PT09PT09PT1cbiAgICBpZiAoaXNOcG1Gb3JtRGF0YUJvZHkpIHtcbiAgICAgIC8vIG5wbSBmb3JtLWRhdGE6IOetvuWQjeWujOaIkOWQju+8jOmcgOimgeWwhiBlbnZOYW1lL3Nlc3Npb25Ub2tlbiDnrYnnrb7lkI3ml7bov73liqDnmoTlrZfmrrVcbiAgICAgIC8vIOS5n+WQjOatpei/veWKoOWIsCBmb3JtLWRhdGEg5a6e5L6L5Lit77yI5Zug5Li65pyN5Yqh56uv6ZyA6KaB5LuOIGZvcm0tZGF0YSBib2R5IOS4reivu+WPlui/meS6m+Wtl+aute+8iVxuICAgICAgLy8g54S25ZCO55SoIGZvcm0tZGF0YSDnmoQgZ2V0QnVmZmVyKCkg5L2c5Li65a6e6ZmF5Y+R6YCB55qEIGJvZHlcbiAgICAgIGNvbnN0IGZvcm1EYXRhSW5zdGFuY2UgPSBib2R5XG4gICAgICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKGZvcm1EYXRhSW5zdGFuY2UuX19wbGFpbk9iaiB8fCB7fSkpXG5cbiAgICAgIC8vIOaKiuetvuWQjei/h+eoi+S4rei/veWKoOeahOWtl+auteWQjOatpeWIsCBmb3JtLWRhdGEg5a6e5L6L77yI5LuF6L+95Yqg5LmL5YmN5LiN5a2Y5Zyo55qE77yJXG4gICAgICBpZiAocGFyYW1zLmVudk5hbWUgJiYgIWV4aXN0aW5nS2V5cy5oYXMoJ2Vudk5hbWUnKSkge1xuICAgICAgICBmb3JtRGF0YUluc3RhbmNlLmFwcGVuZCgnZW52TmFtZScsIHBhcmFtcy5lbnZOYW1lKVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5zZXNzaW9uVG9rZW4gJiYgIWV4aXN0aW5nS2V5cy5oYXMoJ3Nlc3Npb25Ub2tlbicpKSB7XG4gICAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKCdzZXNzaW9uVG9rZW4nLCBwYXJhbXMuc2Vzc2lvblRva2VuKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtQnVmZmVyID0gZm9ybURhdGFJbnN0YW5jZS5nZXRCdWZmZXIoKVxuICAgICAgY29uc3QgZm9ybUhlYWRlcnMgPSBmb3JtRGF0YUluc3RhbmNlLmdldEhlYWRlcnMoKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAuLi5mb3JtSGVhZGVycyxcbiAgICAgICAgICAnY29udGVudC1sZW5ndGgnOiBTdHJpbmcoZm9ybUJ1ZmZlci5sZW5ndGgpLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBmb3JtQnVmZmVyLFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkocGFyYW1zKSA6IHBhcmFtcyxcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdChcbiAgICB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICB9LFxuICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ2dldCcpLFxuICApXG5cbiAgcHVibGljIHBvc3QgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4gdGhpcy5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICB9LFxuICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ3Bvc3QnKSxcbiAgKVxuXG4gIHB1YmxpYyBwdXQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4gdGhpcy5yZXF1ZXN0KHtcbiAgICAuLi5vcHRpb25zLFxuICAgIG1ldGhvZDogJ3B1dCcsXG4gIH0pXG5cbiAgLyoqXG4gICAqIOaWh+S7tuS4iuS8oFxuICAgKiBQT1NUIOaWueW8j++8muaehOW7uiBGb3JtRGF0YSDkuIrkvKBcbiAgICogUFVUIOaWueW8j++8muebtOaOpeWwhuaWh+S7tuS9nOS4uiBib2R5IOS4iuS8oFxuICAgKi9cbiAgcHVibGljIHVwbG9hZCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBmaWxlOiByYXdGaWxlLCBmaWxlQ29udGVudCwgbmFtZSwgbWV0aG9kLCBoZWFkZXJzID0ge30gfSA9IG9wdGlvbnMgYXMgYW55XG4gICAgLy8g5LyY5YWI5L2/55SoIGZpbGXvvIhmaWxlUGF0aO+8ie+8jOayoeacieWImeWbnumAgOWIsCBmaWxlQ29udGVudO+8iEJ1ZmZlcu+8iVxuICAgIGNvbnN0IGZpbGUgPSByYXdGaWxlID8/IGZpbGVDb250ZW50XG4gICAgaWYgKGZpbGUgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlsZSBhbmQgbmFtZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSBvYmoyU3RyUmVjb3JkKGRhdGEgPz8ge30pXG4gICAgY29uc3QgbG93ZXJlZE1ldGhvZCA9IG1ldGhvZD8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IHJlcU1ldGhvZCA9IFsncG9zdCcsICdwdXQnXS5maW5kKG0gPT4gbSA9PT0gbG93ZXJlZE1ldGhvZCkgPz8gJ3B1dCdcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgaWYgKHJlcU1ldGhvZCA9PT0gJ3Bvc3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhmb3JtRmllbGRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZm9ybUZpZWxkc1trZXldKVxuICAgICAgfSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgna2V5JywgbmFtZSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUgaW5zdGFuY2VvZiBCbG9iID8gZmlsZSA6IG5ldyBCbG9iKFtmaWxlXSkpXG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICBtZXRob2Q6IHJlcU1ldGhvZCxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygndXBsb2FkJyksXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbWV0aG9kOiAncHV0JyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogZmlsZSxcbiAgICAgIH0sXG4gICAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCd1cGxvYWQnKSxcbiAgICApXG4gIH1cblxuICAvKiog5paH5Lu25LiL6L2977yITm9kZS5qcyDnjq/looPvvIzpgJrov4cgZmV0Y2gg6I635Y+W5paH5Lu25YaF5a655bm25YaZ5YWl5pys5Zyw5paH5Lu25oiW6L+U5ZueIEJ1ZmZlcu+8iSAqL1xuICBwdWJsaWMgZG93bmxvYWQgPSBhc3luYyAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2gob3B0aW9ucy51cmwhLCB7XG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCh0aGlzLnRpbWVvdXQpLFxuICAgIH0pXG5cbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEb3dubG9hZCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtyZXMuc3RhdHVzfWApXG4gICAgfVxuXG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKVxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKVxuXG4gICAgLy8g5aaC5p6c5oyH5a6a5LqGIHRlbXBGaWxlUGF0aO+8jOWwhuaWh+S7tuWGmeWFpeacrOWcsFxuICAgIGNvbnN0IHsgdGVtcEZpbGVQYXRoIH0gPSBvcHRpb25zXG4gICAgaWYgKHRlbXBGaWxlUGF0aCkge1xuICAgICAgLy8g56Gu5L+d55uu5b2V5a2Y5ZyoXG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUodGVtcEZpbGVQYXRoKVxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICAgICAgZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICAgIH1cbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBidWZmZXIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICAgIHRlbXBGaWxlUGF0aCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDmnKrmjIflrprot6/lvoTml7bov5Tlm54gQnVmZmVyXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgIHRlbXBGaWxlUGF0aDogb3B0aW9ucy51cmwsXG4gICAgICBmaWxlQ29udGVudDogYnVmZmVyLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlupXlsYIgZmV0Y2gg6K+35rGC77yM5pSv5oyB5rWB5byP5ZON5bqUXG4gICAqIOi2heaXtumAmui/hyBBYm9ydENvbnRyb2xsZXIgKyBzZXRUaW1lb3V0IOWunueOsFxuICAgKi9cbiAgcHVibGljIGZldGNoID0gYXN5bmMgKG9wdGlvbnM6IE9taXQ8SUZldGNoT3B0aW9ucywgJ3NpZ25hbCc+ICYgeyBzaWduYWw/OiBBYm9ydFNpZ25hbDsgY3VzdG9tUmVxT3B0cz86IElDdXN0b21SZXFPcHRzIH0pOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB7XG4gICAgY29uc3QgeyBlbmFibGVBYm9ydCA9IGZhbHNlLCBzdHJlYW0gPSBmYWxzZSwgc2lnbmFsLCBjdXN0b21SZXFPcHRzIH0gPSBvcHRpb25zXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZWFsVXJsKG9wdGlvbnMudXJsLCBvcHRpb25zLmhlYWRlcnMgfHwge30sIG9wdGlvbnMuYm9keSlcbiAgICBjb25zdCB0aW1lb3V0ID0gY3VzdG9tUmVxT3B0cz8udGltZW91dCB8fCB0aGlzLnRpbWVvdXRcbiAgICBjb25zdCBbYWJvcnRDb250cm9sbGVyLCBjbGVhbnVwXSA9IHRoaXMuY3JlYXRlQWJvcnRDb250cm9sbGVyKHRpbWVvdXQsIGVuYWJsZUFib3J0LCBzaWduYWwpXG5cbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8gaGVhZGVyc0luaXQySW5kZXhhYmxlKG9wdGlvbnMuaGVhZGVycykgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UmVxT3B0aW9ucyh1cmwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5IGFzIGFueSBhcyBOb2RlSlMuUmVhZGFibGVTdHJlYW0sXG4gICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSlcblxuICAgIHRoaXMuYXBwbHlEdXBsZXhJZk5lZWRlZChmZXRjaE9wdGlvbnMpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCBmZXRjaE9wdGlvbnMgYXMgUmVxdWVzdEluaXQpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOlxuICAgICAgICAgICtyZXMuc3RhdHVzID09PSAyMDRcbiAgICAgICAgICAgID8gJycgLy8gMjA0IE5vIENvbnRlbnRcbiAgICAgICAgICAgIDogc3RyZWFtXG4gICAgICAgICAgICAgID8gcmVzLmJvZHlcbiAgICAgICAgICAgICAgOiBhd2FpdCByZXMuanNvbigpLFxuICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzLFxuICAgICAgICBoZWFkZXI6IHJlcy5oZWFkZXJzLFxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhbnVwKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6YCa55So6K+35rGC5pa55rOV77yM6KKrIGdldC9wb3N0L3B1dC91cGxvYWQg562J6LCD55SoXG4gICAqIOi0n+i0o+aehOW7uiBwYXlsb2Fk44CB6K6+572u6LaF5pe244CB6Kej5p6Q5ZON5bqUXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g6K+35rGC6YCJ6aG5XG4gICAqIEBwYXJhbSBlbmFibGVBYm9ydCAtIOaYr+WQpuWQr+eUqOi2heaXtuS4reaWre+8iOeUsSByZXN0cmljdGVkTWV0aG9kcyDlhrPlrprvvIlcbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0ID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgZW5hYmxlQWJvcnQgPSBmYWxzZSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzOiByYXdIZWFkZXJzID0ge30sXG4gICAgICBkYXRhLFxuICAgICAgcmVzcG9uc2VUeXBlLFxuICAgICAgd2l0aENyZWRlbnRpYWxzLFxuICAgICAgYm9keSxcbiAgICAgIG1ldGhvZDogcmF3TWV0aG9kLFxuICAgICAgY3VzdG9tUmVxT3B0cyxcbiAgICB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvYmoyU3RyUmVjb3JkKHJhd0hlYWRlcnMpXG4gICAgY29uc3QgbWV0aG9kID0gU3RyaW5nKHJhd01ldGhvZCkudG9Mb3dlckNhc2UoKSB8fCAnZ2V0J1xuICAgIGNvbnN0IHRpbWVvdXQgPSBjdXN0b21SZXFPcHRzPy50aW1lb3V0IHx8IHRoaXMudGltZW91dFxuICAgIGNvbnN0IFthYm9ydENvbnRyb2xsZXIsIGNsZWFudXBdID0gdGhpcy5jcmVhdGVBYm9ydENvbnRyb2xsZXIodGltZW91dCwgZW5hYmxlQWJvcnQpXG5cbiAgICAvLyDmnoTlu7ror7fmsYIgcGF5bG9hZO+8mkZvcm1EYXRhID4gdXJsZW5jb2RlZCA+IHJhdyBib2R5ID4gSlNPTlxuICAgIGxldCBwYXlsb2FkXG4gICAgaWYgKGlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICAgIHBheWxvYWQgPSBkYXRhXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHBheWxvYWQgPSB0b1F1ZXJ5U3RyaW5nKGRhdGEgPz8ge30pXG4gICAgfSBlbHNlIGlmIChib2R5KSB7XG4gICAgICBwYXlsb2FkID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcmVhbFVybCA9IHRoaXMuZ2V0UmVhbFVybChcbiAgICAgIGZvcm1hdFVybCgnaHR0cHMnLCB1cmwgPz8gJycsIG1ldGhvZCA9PT0gJ2dldCcgPyBkYXRhIDoge30pLFxuICAgICAgb3B0aW9ucy5oZWFkZXJzIHx8IHt9LFxuICAgICAgcGF5bG9hZCxcbiAgICApXG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UmVxT3B0aW9ucyhyZWFsVXJsLCB7XG4gICAgICBtZXRob2QsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgIGNyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnc2FtZS1vcmlnaW4nLFxuICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pXG5cbiAgICB0aGlzLmFwcGx5RHVwbGV4SWZOZWVkZWQocmVxdWVzdE9wdGlvbnMpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZWFsVXJsLCByZXF1ZXN0T3B0aW9ucyBhcyBSZXF1ZXN0SW5pdClcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVzcG9uc2VPYmplY3QgPSB7XG4gICAgICAgIGhlYWRlcjoge30sXG4gICAgICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEgPSBhd2FpdCByZXNwb25zZS5ibG9iKClcbiAgICAgICAgfSBlbHNlIGlmICgocmVzcG9uc2VUeXBlIGFzIHN0cmluZykgPT09ICdidWZmZXInKSB7XG4gICAgICAgICAgLy8g6L+U5ZueIEJ1ZmZlcu+8iOWFvOWuueaXp+eJiCBub2RlLXNkayDkuozov5vliLblk43lupTmoLzlvI/vvIlcbiAgICAgICAgICByZXN1bHQuZGF0YSA9IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEgPSBzYWZlUGFyc2VKc29uKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyDkuIrkvKAgUE9TVCDor7fmsYLlj6/og73ov5Tlm54gWE1MIOetiemdniBKU09OIOagvOW8j++8jOWuuemUmeWkhOeQhlxuICAgICAgICBjb25zb2xlLmxvZygnY2F0Y2ggYW4gZXJyb3InLCBlKVxuICAgICAgICBpZiAocmVzcG9uc2VUeXBlID09PSAnYmxvYicpIHtcbiAgICAgICAgICByZXN1bHQuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKVxuICAgICAgICB9IGVsc2UgaWYgKChyZXNwb25zZVR5cGUgYXMgc3RyaW5nKSA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICByZXN1bHQuZGF0YSA9IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEgPSBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDlsIblk43lupTlpLTnu5/kuIDovazkuLrlsI/lhpkga2V5XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlXG4gICAgICBoZWFkZXJzLmZvckVhY2goKHZhbCwga2V5KSA9PiAocmVzdWx0LmhlYWRlcltrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWwpKVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFudXAoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDliJvlu7rluKbotoXml7bnmoQgQWJvcnRDb250cm9sbGVyXG4gICAqIEByZXR1cm5zIFthYm9ydENvbnRyb2xsZXIsIGNsZWFudXBdIOKAlCBjbGVhbnVwIOeUqOS6jua4hemZpOWumuaXtuWZqFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBYm9ydENvbnRyb2xsZXIoXG4gICAgdGltZW91dDogbnVtYmVyLFxuICAgIGVuYWJsZUFib3J0OiBib29sZWFuLFxuICAgIGV4dGVybmFsU2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFtBYm9ydENvbnRyb2xsZXIsICgpID0+IHZvaWRdIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cbiAgICAvLyDmoaXmjqXlpJbpg6ggc2lnbmFsXG4gICAgaWYgKGV4dGVybmFsU2lnbmFsKSB7XG4gICAgICBpZiAoZXh0ZXJuYWxTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dGVybmFsU2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gY29udHJvbGxlci5hYm9ydCgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWRcbiAgICBpZiAoZW5hYmxlQWJvcnQgfHwgdGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dE1zZyA9IGDor7fmsYLlnKgke3RpbWVvdXQgLyAxMDAwfXPlhoXmnKrlrozmiJDvvIzlt7LkuK3mlq1gXG4gICAgICAgIGNvbnNvbGUud2Fybih0aW1lb3V0TXNnKVxuICAgICAgICBjb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcih0aW1lb3V0TXNnKSlcbiAgICAgIH0sIHRpbWVvdXQpXG4gICAgfVxuXG4gICAgcmV0dXJuIFtjb250cm9sbGVyLCAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpXVxuICB9XG5cbiAgLyoqIE5vZGUgMTgrIOWOn+eUnyBmZXRjaCDlnKggYm9keSDkuLogc3RyZWFtIOaXtuimgeaxgiBkdXBsZXg6ICdoYWxmJyAqL1xuICBwcml2YXRlIGFwcGx5RHVwbGV4SWZOZWVkZWQob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMuYm9keSAmJiB0eXBlb2Ygb3B0aW9ucy5ib2R5Py5waXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb25zLmR1cGxleCA9ICdoYWxmJ1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDliKTmlq3mmK/lkKbkuLogbnBtIGZvcm0tZGF0YSDljIXnmoTlrp7kvovvvIjlhbfmnIkgZ2V0SGVhZGVycyAvIGdldEJ1ZmZlciDmlrnms5XvvIlcbiAgICog5Yy65Yir5LqO5YWo5bGAIEZvcm1EYXRh77yIV2ViIEFQSe+8iVxuICAgKi9cbiAgcHJpdmF0ZSBpc05wbUZvcm1EYXRhKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xuICAgICAgJiYgdHlwZW9mIG9iai5nZXRIZWFkZXJzID09PSAnZnVuY3Rpb24nXG4gICAgICAmJiB0eXBlb2Ygb2JqLmdldEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJ1xuICB9XG59XG4iXX0=
|