@cloudbase/app 3.0.5 → 3.0.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/dist/cjs/index.js +2 -2
- package/dist/cjs/libs/adapter-node/request.js +14 -6
- package/dist/esm/index.js +2 -2
- package/dist/esm/libs/adapter-node/request.js +14 -6
- package/dist/miniprogram/index.js +1 -1
- package/package.json +4 -4
- package/src/index.ts +1 -1
- package/src/libs/adapter-node/request.ts +14 -8
- package/webpack/web.prod.js +1 -0
- package/webpack/webpack.miniprogram.js +1 -0
|
@@ -49,6 +49,7 @@ import { formatUrl, } from '@cloudbase/adapter-interface';
|
|
|
49
49
|
import { ADMIN_PATH, CLIENT_AUTH_PATH } from './constants';
|
|
50
50
|
import { getCloudbaseContext, getSecretInfo, INIT_CONFIG } from './context';
|
|
51
51
|
import { getEnv, isFormData, toQueryString, safeParseJson, obj2StrRecord, headersInit2Indexable, getCurrRunEnvTag, } from './utils';
|
|
52
|
+
import { getSdkVersion } from '../../constants/common';
|
|
52
53
|
var signFn = null;
|
|
53
54
|
function getSign() {
|
|
54
55
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -90,7 +91,7 @@ var NodeRequest = (function () {
|
|
|
90
91
|
return [4, getCurrRunEnvTag()];
|
|
91
92
|
case 1:
|
|
92
93
|
SOURCE = _b.apply(_a, [_m.sent()]);
|
|
93
|
-
options.headers = __assign(__assign({}, options.headers), { 'User-Agent': "adapter-node/".concat(((_g = options.headers) === null || _g === void 0 ? void 0 : _g['X-SDK-Version']) ||
|
|
94
|
+
options.headers = __assign(__assign({}, options.headers), { 'User-Agent': "adapter-node/".concat(((_g = options.headers) === null || _g === void 0 ? void 0 : _g['X-SDK-Version']) || "@cloudbase/js-sdk/".concat(getSdkVersion())), 'X-TCB-Source': SOURCE, 'X-Client-Timestamp': new Date().valueOf(), 'X-TCB-Region': INIT_CONFIG.region || getEnv('TENCENTCLOUD_REGION') || '', Host: urlObj.host });
|
|
94
95
|
if ((_j = (_h = options.headers.Authorization) === null || _h === void 0 ? void 0 : _h.replace('Bearer', '')) === null || _j === void 0 ? void 0 : _j.trim()) {
|
|
95
96
|
return [2, options];
|
|
96
97
|
}
|
|
@@ -133,6 +134,9 @@ var NodeRequest = (function () {
|
|
|
133
134
|
else if (headers['Content-Type']) {
|
|
134
135
|
headers['Content-Type'] = headers['Content-Type'].toLowerCase();
|
|
135
136
|
}
|
|
137
|
+
if (isAdminPath && !!sessionToken) {
|
|
138
|
+
params.sessionToken = sessionToken;
|
|
139
|
+
}
|
|
136
140
|
signedParams = {
|
|
137
141
|
secretId: secretId,
|
|
138
142
|
secretKey: secretKey,
|
|
@@ -144,7 +148,6 @@ var NodeRequest = (function () {
|
|
|
144
148
|
timestamp: Math.floor(new Date().getTime() / 1000) - 1,
|
|
145
149
|
isCloudApi: !isAdminPath,
|
|
146
150
|
};
|
|
147
|
-
console.log('======signedParams', signedParams);
|
|
148
151
|
return [4, getSign()];
|
|
149
152
|
case 4:
|
|
150
153
|
sign = _m.sent();
|
|
@@ -152,7 +155,14 @@ var NodeRequest = (function () {
|
|
|
152
155
|
return [2, options];
|
|
153
156
|
_d = sign(signedParams), authorization = _d.authorization, timestamp = _d.timestamp;
|
|
154
157
|
if (typeof sessionToken === 'string' && sessionToken !== '') {
|
|
155
|
-
|
|
158
|
+
if (isAdminPath) {
|
|
159
|
+
headers.Authorization = "".concat(authorization);
|
|
160
|
+
headers['X-Timestamp'] = timestamp;
|
|
161
|
+
headers['X-Signature-Expires'] = 600;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
headers.Authorization = "".concat(authorization, ", Timestamp=").concat(timestamp, ", Token=").concat(sessionToken);
|
|
165
|
+
}
|
|
156
166
|
}
|
|
157
167
|
else {
|
|
158
168
|
headers.Authorization = "".concat(authorization, ", Timestamp=").concat(timestamp);
|
|
@@ -245,7 +255,6 @@ var NodeRequest = (function () {
|
|
|
245
255
|
return [4, this.getReqOptions(url, __assign(__assign({}, options), { headers: headers, body: options.body, signal: abortController.signal }))];
|
|
246
256
|
case 1:
|
|
247
257
|
fetchOptions = _f.sent();
|
|
248
|
-
console.log('======fetchOptions', url, fetchOptions);
|
|
249
258
|
return [4, fetch(url, fetchOptions)
|
|
250
259
|
.then(function (x) {
|
|
251
260
|
clearTimeout(timer);
|
|
@@ -323,7 +332,6 @@ var NodeRequest = (function () {
|
|
|
323
332
|
})];
|
|
324
333
|
case 1:
|
|
325
334
|
requestOptions = _g.sent();
|
|
326
|
-
console.log('======requestOptions', realUrl, requestOptions);
|
|
327
335
|
_g.label = 2;
|
|
328
336
|
case 2:
|
|
329
337
|
_g.trys.push([2, , 15, 16]);
|
|
@@ -426,4 +434,4 @@ var NodeRequest = (function () {
|
|
|
426
434
|
return NodeRequest;
|
|
427
435
|
}());
|
|
428
436
|
export { NodeRequest };
|
|
429
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFM0UsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQTtBQUloQixJQUFJLE1BQU0sR0FBcUMsSUFBSSxDQUFBO0FBQ25ELFNBQWUsT0FBTzs7Ozs7O3lCQUNoQixDQUFDLE1BQU0sRUFBUCxjQUFPOzs7O29CQUdLLFdBQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLEVBQUE7O29CQUFqRCxHQUFHLEdBQUcsU0FBMkM7b0JBQ3ZELE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFBOzs7O29CQUVqQixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRDswQkFDN0QsK0NBQStDOzBCQUMvQyxzQkFBc0IsQ0FBQyxDQUFBO3dCQUcvQixXQUFPLE1BQU8sRUFBQTs7OztDQUNmO0FBT0Q7SUFVRSxxQkFBWSxNQUF5QztRQUFyRCxpQkFLQztRQXVETSxrQkFBYSxHQUFHLFVBQ3JCLEdBQVcsRUFDWCxPQU9DOzs7Ozs7d0JBRUssTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO3dCQUVuQixVQUFVLEdBQUssbUJBQW1CLEVBQUUsV0FBMUIsQ0FBMEI7NkNBRTFC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QUUsT0FBNEIsRUFBRSxJQUFTOztRQUM3RCxJQUFJLE1BQUEsTUFBQSxPQUFPLENBQUMsYUFBYSwwQ0FBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQywwQ0FBRSxJQUFJLEVBQUUsRUFBRTtZQUN4RCxPQUFPLEdBQUcsQ0FBQTtTQUNYO1FBRUQsSUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFMUUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxDQUFBO1NBQ1g7UUFFRCxJQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUUzQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssTUFBTSxLQUFJLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDBDQUFFLFFBQVEsQ0FBQSxLQUFJLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDBDQUFFLFNBQVMsQ0FBQSxFQUFFO1lBQzNGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1NBQzdCO1FBQ0QsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQXVYSCxrQkFBQztBQUFELENBQUMsQUFqYkQsSUFpYkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0IHtcbiAgSUZldGNoT3B0aW9ucyxcbiAgSVJlcXVlc3RDb25maWcsXG4gIElSZXF1ZXN0TWV0aG9kLFxuICBJUmVxdWVzdE9wdGlvbnMsXG4gIFJlc3BvbnNlT2JqZWN0LFxuICBTREtSZXF1ZXN0SW50ZXJmYWNlLFxuICBmb3JtYXRVcmwsXG59IGZyb20gJ0BjbG91ZGJhc2UvYWRhcHRlci1pbnRlcmZhY2UnXG5pbXBvcnQgeyBBRE1JTl9QQVRILCBDTElFTlRfQVVUSF9QQVRIIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnZXRDbG91ZGJhc2VDb250ZXh0LCBnZXRTZWNyZXRJbmZvLCBJTklUX0NPTkZJRyB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHsgSUN1c3RvbVJlcU9wdHMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHtcbiAgZ2V0RW52LFxuICBpc0Zvcm1EYXRhLFxuICB0b1F1ZXJ5U3RyaW5nLFxuICBzYWZlUGFyc2VKc29uLFxuICBvYmoyU3RyUmVjb3JkLFxuICBoZWFkZXJzSW5pdDJJbmRleGFibGUsXG4gIGdldEN1cnJSdW5FbnZUYWcsXG59IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBJQ2xvdWRiYXNlQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbi8vIOW7tui/n+WKoOi9ve+8jOmBv+WFjemdniBOb2RlIOeOr+Wig+aJk+WMheaXtuW8leWFpeatpOWMhVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmxldCBzaWduRm46ICgoLi4uYXJnczogYW55W10pID0+IGFueSkgfCBudWxsID0gbnVsbFxuYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbigpIHtcbiAgaWYgKCFzaWduRm4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZSDigJQg6K+l5YyF5LuF5ZyoIE5vZGUg6L+Q6KGM5pe25a2Y5Zyo77yM5byA5Y+R546v5aKD5Y+v6IO95pyq5a6J6KOFXG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQoJ0BjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqcycpXG4gICAgICBzaWduRm4gPSBtb2Quc2lnblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5L6d6LWWIEBjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqc++8jOivt+aJp+ihjOS7peS4i+WRveS7pOWuieijhe+8mlxcblxcbidcbiAgICAgICAgKyAnICBucG0gaW5zdGFsbCBAY2xvdWRiYXNlL3NpZ25hdHVyZS1ub2RlanNcXG5cXG4nXG4gICAgICAgICsgJ+ivpeS+nei1lueUqOS6jiBOb2RlIOeOr+Wig+S4i+eahOivt+axguetvuWQjeOAgicpXG4gICAgfVxuICB9XG4gIHJldHVybiBzaWduRm4hXG59XG5cbi8qKlxuICogTm9kZS5qcyDnjq/looPkuIvnmoQgSFRUUCDor7fmsYLlrp7njrBcbiAqIOWfuuS6juWOn+eUnyBmZXRjaO+8jOaUr+aMgSBHRVQvUE9TVC9QVVQv5LiK5LygL+S4i+i9vS/mtYHlvI/or7fmsYJcbiAqIOiHquWKqOWkhOeQhiBWMyDnrb7lkI3lkowgQmVhcmVyIFRva2VuIOiupOivgVxuICovXG5leHBvcnQgY2xhc3MgTm9kZVJlcXVlc3QgaW1wbGVtZW50cyBTREtSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgLyoqIOivt+axgumFjee9ru+8jOWMheWQq+iupOivgeS/oeaBryAqL1xuICBjb25maWc6IElSZXF1ZXN0Q29uZmlnICYgSUNsb3VkYmFzZUNvbmZpZ1xuXG4gIC8qKiDor7fmsYLotoXml7bml7bpl7TvvIjmr6vnp5LvvInvvIzpu5jorqQgMTUwMDAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0OiBudW1iZXJcblxuICAvKiog5Y+X6LaF5pe25o6n5Yi255qE6K+35rGC57G75Z6L5YiX6KGoICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzdHJpY3RlZE1ldGhvZHM6IEFycmF5PElSZXF1ZXN0TWV0aG9kPlxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSVJlcXVlc3RDb25maWcgJiBJQ2xvdWRiYXNlQ29uZmlnKSB7XG4gICAgY29uc3QgeyB0aW1lb3V0LCByZXN0cmljdGVkTWV0aG9kcyB9ID0gY29uZmlnXG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dCB8fCAxNTAwMFxuICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMgPSByZXN0cmljdGVkTWV0aG9kcyB8fCBbJ2dldCcsICdwb3N0JywgJ3VwbG9hZCcsICdkb3dubG9hZCddXG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blrqLmiLfnq6/lh63or4EgYWNjZXNzX3Rva2Vu77yM5Li6566h55CG5ZGY5p2D6ZmQXG4gICAqIOeUqOS6juS4jeaUr+aMgSBWMyDnrb7lkI3nmoTmjqXlj6PvvIjlpoLmlbDmja7mqKHlnovjgIHlhbPns7vlnovmlbDmja7lupPjgIFBSe+8iVxuICAgKi9cbiAgYXN5bmMgZ2V0Q2xpZW50Q3JlZGVudGlhbChvcHRzOiB7IG9yaWdpbjogc3RyaW5nIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZmV0Y2goe1xuICAgICAgdXJsOiBgJHtvcHRzLm9yaWdpbn0ke0NMSUVOVF9BVVRIX1BBVEh9YCxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycsXG4gICAgICB9KSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlcy5kYXRhPy5hY2Nlc3NfdG9rZW5cbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blrp7pmYXor7fmsYIgVVJMXG4gICAqIOW9k+ivt+axguacquaQuuW4piBBdXRob3JpemF0aW9uIOS4lOacquiHquW4piBhY2Nlc3NfdG9rZW4g5pe277yMXG4gICAqIOWwhiAvd2ViIOi3r+W+hOabv+aNouS4uiAvYWRtaW7vvIjnrqHnkIbnq6/nrb7lkI3ot6/lvoTvvIlcbiAgICovXG4gIGdldFJlYWxVcmwodXJsOiBzdHJpbmcsIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGJvZHk6IGFueSkge1xuICAgIGlmIChoZWFkZXJzLkF1dGhvcml6YXRpb24/LnJlcGxhY2UoJ0JlYXJlcicsICcnKT8udHJpbSgpKSB7XG4gICAgICByZXR1cm4gdXJsXG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keSA6IHNhZmVQYXJzZUpzb24oYm9keSkgfHwgJydcblxuICAgIGlmIChwYXJhbXMuYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gdXJsXG4gICAgfVxuXG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAodXJsT2JqLnBhdGhuYW1lID09PSAnL3dlYicgJiYgdGhpcy5jb25maWcuYXV0aD8uc2VjcmV0SWQgJiYgdGhpcy5jb25maWcuYXV0aD8uc2VjcmV0S2V5KSB7XG4gICAgICB1cmxPYmoucGF0aG5hbWUgPSBBRE1JTl9QQVRIXG4gICAgfVxuICAgIHJldHVybiB1cmxPYmoudG9TdHJpbmcoKVxuICB9XG5cbiAgLyoqXG4gICAqIOS4uuivt+axgua3u+WKoOetvuWQjeaIluiupOivgeS/oeaBr1xuICAgKlxuICAgKiDlpITnkIbpgLvovpHkvJjlhYjnuqfvvJpcbiAgICogMS4g5bey5pyJIEF1dGhvcml6YXRpb24gaGVhZGVyIOKGkiDnm7TmjqXov5Tlm55cbiAgICogMi4gL2F1dGgvIOi3r+W+hCDihpIgU0RLIOiupOivgeaOpeWPo++8jOaXoOmcgOetvuWQjVxuICAgKiAzLiDkuI3mlK/mjIEgVjMg562+5ZCN55qE6Lev5b6E77yIL3YxL21vZGVsLyDnrYnvvInihpIg55SoIGNsaWVudENyZWRlbnRpYWwgQmVhcmVyIFRva2VuXG4gICAqIDQuIOWPguaVsOWQqyBhY2Nlc3NfdG9rZW4g4oaSIOaXoOmcgOetvuWQjVxuICAgKiA1LiDlhbbku5Yg4oaSIOS9v+eUqCBWMyDnrb7lkI3vvIhUQzMtSE1BQy1TSEEyNTbvvIlcbiAgICovXG4gIHB1YmxpYyBnZXRSZXFPcHRpb25zID0gYXN5bmMgKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG1ldGhvZD86IGFueVxuICAgICAgaGVhZGVyczogYW55XG4gICAgICBib2R5PzogYW55XG4gICAgICBjcmVkZW50aWFscz86IHN0cmluZ1xuICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICAgIHVybD86IGFueVxuICAgIH0sXG4gICkgPT4ge1xuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKVxuXG4gICAgY29uc3QgeyBUQ0JfU09VUkNFIH0gPSBnZXRDbG91ZGJhc2VDb250ZXh0KClcbiAgICAvLyBOb3RlOiDkupHlh73mlbDooqvosIPnlKjml7blj6/og73osIPnlKjnq6/mnKrkvKDpgJIgU09VUkNF77yMVENCX1NPVVJDRSDlj6/og73kuLrnqbpcbiAgICBjb25zdCBTT1VSQ0UgPSBgJHtJTklUX0NPTkZJRy5jb250ZXh0Py5leHRlbmRlZENvbnRleHQ/LnNvdXJjZSB8fCBUQ0JfU09VUkNFIHx8ICcnfSwke2F3YWl0IGdldEN1cnJSdW5FbnZUYWcoKX1gXG5cbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAnVXNlci1BZ2VudCc6IGBhZGFwdGVyLW5vZGUvJHtvcHRpb25zLmhlYWRlcnM/LlsnWC1TREstVmVyc2lvbiddIHx8ICcnfWAsXG4gICAgICAnWC1UQ0ItU291cmNlJzogU09VUkNFLFxuICAgICAgJ1gtQ2xpZW50LVRpbWVzdGFtcCc6IG5ldyBEYXRlKCkudmFsdWVPZigpLFxuICAgICAgJ1gtVENCLVJlZ2lvbic6IElOSVRfQ09ORklHLnJlZ2lvbiB8fCBnZXRFbnYoJ1RFTkNFTlRDTE9VRF9SRUdJT04nKSB8fCAnJyxcbiAgICAgIEhvc3Q6IHVybE9iai5ob3N0LFxuICAgIH1cblxuICAgIC8vIOW3suaQuuW4puacieaViCBBdXRob3JpemF0aW9u77yM55u05o6l6L+U5ZueXG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uPy5yZXBsYWNlKCdCZWFyZXInLCAnJyk/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBhdXRoIOebuOWFs+aOpeWPo+S4jemcgOimgeetvuWQjVxuICAgIGlmICh1cmxPYmoucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2F1dGgvJykgJiYgdXJsT2JqLnBhdGhuYW1lICE9PSBDTElFTlRfQVVUSF9QQVRIKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWRtaW5QYXRoID0gdXJsT2JqLnBhdGhuYW1lID09PSBBRE1JTl9QQVRIXG5cbiAgICAvLyDov5nkupvot6/lvoTkuI3mlK/mjIEgVjMg562+5ZCN77yM5pS555SoIGNsaWVudENyZWRlbnRpYWwg6I635Y+WIEJlYXJlciBUb2tlblxuICAgIGNvbnN0IFVOU1VQUE9SVEVEX1YzX1NJR05fUEFUSCA9IFsnL3YxL21vZGVsLycsICcvdjEvcmRiLycsICcvdjEvYWkvJ11cblxuICAgIGlmIChVTlNVUFBPUlRFRF9WM19TSUdOX1BBVEguc29tZSh2ID0+IHVybE9iai5wYXRobmFtZS5zdGFydHNXaXRoKHYpKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmdldENsaWVudENyZWRlbnRpYWwoeyBvcmlnaW46IHVybE9iai5vcmlnaW4gfSlcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Rva2VufWBcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgbGV0IHsgc2VjcmV0SWQsIHNlY3JldEtleSwgc2Vzc2lvblRva2VuIH0gPSB0aGlzLmNvbmZpZz8uYXV0aCB8fCB7fVxuICAgIGNvbnN0IHsgc2VjcmV0VHlwZSB9ID0gdGhpcy5jb25maWc/LmF1dGggfHwge31cbiAgICBjb25zdCB7IG1ldGhvZCwgYm9keSB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuaGVhZGVycykpXG4gICAgbGV0IHBhcmFtcyA9IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkgOiBzYWZlUGFyc2VKc29uKGJvZHkpIHx8ICcnXG5cbiAgICAvLyDlj4LmlbDoh6rluKYgYWNjZXNzX3Rva2Vu77yM5peg6ZyA562+5ZCNXG4gICAgaWYgKHBhcmFtcy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gR0VUIOivt+axguWPguaVsOW3suWcqCBVUkwg5Lit77yM562+5ZCN5pe2IHBhcmFtcyDnva7nqbpcbiAgICBpZiAobWV0aG9kLnRvTG93ZXJDYXNlKCkgPT09ICdnZXQnKSB7XG4gICAgICBwYXJhbXMgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvLyBTRVNTSU9OX1NFQ1JFVCDnsbvlnovmiJbml6Dlr4bpkqXml7bvvIzku47njq/looPlj5jph4/ojrflj5bkuLTml7blr4bpkqVcbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkgfHwgc2VjcmV0VHlwZSA9PT0gJ1NFU1NJT05fU0VDUkVUJykge1xuICAgICAgY29uc3Qgc2VjcmV0SW5mbyA9IGdldFNlY3JldEluZm8oKVxuICAgICAgc2VjcmV0SWQgPSBzZWNyZXRJbmZvLnNlY3JldElkXG4gICAgICBzZWNyZXRLZXkgPSBzZWNyZXRJbmZvLnNlY3JldEtleVxuICAgICAgc2Vzc2lvblRva2VuID0gc2VjcmV0SW5mby5zZXNzaW9uVG9rZW5cbiAgICB9XG5cbiAgICAvLyDku43ml6Dlr4bpkqXliJnot7Pov4fnrb7lkI1cbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvblxuXG4gICAgLy8gY29udGVudC10eXBlIOmcgOS4juacjeWKoeerr+etvuWQjemqjOivgeS/neaMgeWkp+Wwj+WGmeS4gOiHtFxuICAgIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBoZWFkZXJzWydDb250ZW50LVR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVkUGFyYW1zID0ge1xuICAgICAgc2VjcmV0SWQsXG4gICAgICBzZWNyZXRLZXksXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aFNpZ25lZFBhcmFtczogaXNBZG1pblBhdGgsXG4gICAgICB0aW1lc3RhbXA6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDEsXG4gICAgICBpc0Nsb3VkQXBpOiAhaXNBZG1pblBhdGgsXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJz09PT09PXNpZ25lZFBhcmFtcycsIHNpZ25lZFBhcmFtcylcblxuICAgIGNvbnN0IHNpZ24gPSBhd2FpdCBnZXRTaWduKClcbiAgICBpZiAoIXNpZ24pIHJldHVybiBvcHRpb25zXG5cbiAgICBjb25zdCB7IGF1dGhvcml6YXRpb24sIHRpbWVzdGFtcCB9ID0gc2lnbihzaWduZWRQYXJhbXMpXG5cbiAgICBpZiAodHlwZW9mIHNlc3Npb25Ub2tlbiA9PT0gJ3N0cmluZycgJiYgc2Vzc2lvblRva2VuICE9PSAnJykge1xuICAgICAgLy8g5Li05pe25a+G6ZKl6ZyA6KaB6aKd5aSW6ZmE5bimIFRva2VuXG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfSwgVG9rZW49JHtzZXNzaW9uVG9rZW59YFxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufSwgVGltZXN0YW1wPSR7dGltZXN0YW1wfWBcblxuICAgICAgLy8gYWRtaW4g6Lev5b6E6ZyA6KaB6aKd5aSW55qE5pe26Ze05oiz5ZKM6L+H5pyf5aS0XG4gICAgICBpZiAoaXNBZG1pblBhdGgpIHtcbiAgICAgICAgaGVhZGVyc1snWC1UaW1lc3RhbXAnXSA9IHRpbWVzdGFtcFxuICAgICAgICBoZWFkZXJzWydYLVNpZ25hdHVyZS1FeHBpcmVzJ10gPSA2MDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiB0eXBlb2YgcGFyYW1zID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHBhcmFtcykgOiBwYXJhbXMsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3QoXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdnZXQnKSxcbiAgKVxuXG4gIHB1YmxpYyBwb3N0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdChcbiAgICB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgfSxcbiAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCdwb3N0JyksXG4gIClcblxuICBwdWJsaWMgcHV0ID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHRoaXMucmVxdWVzdCh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBtZXRob2Q6ICdwdXQnLFxuICB9KVxuXG4gIC8qKlxuICAgKiDmlofku7bkuIrkvKBcbiAgICogUE9TVCDmlrnlvI/vvJrmnoTlu7ogRm9ybURhdGEg5LiK5LygXG4gICAqIFBVVCDmlrnlvI/vvJrnm7TmjqXlsIbmlofku7bkvZzkuLogYm9keSDkuIrkvKBcbiAgICovXG4gIHB1YmxpYyB1cGxvYWQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YTogX2RhdGEsIGZpbGUsIG5hbWUsIG1ldGhvZCwgaGVhZGVycyA9IHt9IH0gPSBvcHRpb25zXG4gICAgaWYgKGZpbGUgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWxlIGFuZCBuYW1lIGlzIHJlcXVpcmVkJylcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IG9iajJTdHJSZWNvcmQoX2RhdGEgPz8ge30pXG4gICAgY29uc3QgbG93ZXJlZE1ldGhvZCA9IG1ldGhvZD8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IHJlcU1ldGhvZCA9IFsncG9zdCcsICdwdXQnXS5maW5kKG0gPT4gbSA9PT0gbG93ZXJlZE1ldGhvZCkgPz8gJ3B1dCdcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgaWYgKHJlcU1ldGhvZCA9PT0gJ3Bvc3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YVtrZXldKVxuICAgICAgfSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgna2V5JywgbmFtZSlcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpXG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICBtZXRob2Q6IHJlcU1ldGhvZCxcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygndXBsb2FkJyksXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbWV0aG9kOiAncHV0JyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogZmlsZSxcbiAgICAgIH0sXG4gICAgICB0aGlzLnJlc3RyaWN0ZWRNZXRob2RzLmluY2x1ZGVzKCd1cGxvYWQnKSxcbiAgICApXG4gIH1cblxuICAvKiog5paH5Lu25LiL6L2977yI5rWP6KeI5Zmo546v5aKD77yM6YCa6L+H5Yib5bu6IDxhPiDmoIfnrb7op6blj5HkuIvovb3vvIkgKi9cbiAgcHVibGljIGRvd25sb2FkID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5nZXQoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgfSlcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZGF0YV0pKVxuICAgIGNvbnN0IGZpbGVOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KG5ldyBVUkwob3B0aW9ucz8udXJsID8/ICcnKS5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpIHx8ICcnKVxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblxuICAgIGxpbmsuaHJlZiA9IHVybFxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lKVxuICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgIGxpbmsuY2xpY2soKVxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICB0ZW1wRmlsZVBhdGg6IG9wdGlvbnMudXJsLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOW6leWxgiBmZXRjaCDor7fmsYLvvIzmlK/mjIHmtYHlvI/lk43lupRcbiAgICog6LaF5pe26YCa6L+HIEFib3J0Q29udHJvbGxlciArIHNldFRpbWVvdXQg5a6e546wXG4gICAqL1xuICBwdWJsaWMgZmV0Y2ggPSBhc3luYyAob3B0aW9uczogT21pdDxJRmV0Y2hPcHRpb25zLCAnc2lnbmFsJz4gJiB7IHNpZ25hbD86IEFib3J0U2lnbmFsOyBjdXN0b21SZXFPcHRzPzogSUN1c3RvbVJlcU9wdHMgfSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7IGVuYWJsZUFib3J0ID0gZmFsc2UsIHN0cmVhbSA9IGZhbHNlLCBzaWduYWwsIGN1c3RvbVJlcU9wdHMgfSA9IG9wdGlvbnNcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlYWxVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMuaGVhZGVycyB8fCB7fSwgb3B0aW9ucy5ib2R5KVxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IHRpbWVvdXQgPSBjdXN0b21SZXFPcHRzPy50aW1lb3V0IHx8IHRoaXMudGltZW91dFxuXG4gICAgLy8g5qGl5o6l5aSW6YOoIHNpZ25hbCDliLDlhoXpg6ggQWJvcnRDb250cm9sbGVyXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDotoXml7boh6rliqjkuK3mlq1cbiAgICBsZXQgdGltZXIgPSB1bmRlZmluZWRcbiAgICBpZiAoZW5hYmxlQWJvcnQgfHwgdGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dE1zZyA9IGDor7fmsYLlnKgke3RpbWVvdXQgLyAxMDAwfXPlhoXmnKrlrozmiJDvvIzlt7LkuK3mlq1gXG4gICAgICAgIGNvbnNvbGUud2Fybih0aW1lb3V0TXNnKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKHRpbWVvdXRNc2cpKVxuICAgICAgfSwgdGltZW91dClcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8gaGVhZGVyc0luaXQySW5kZXhhYmxlKG9wdGlvbnMuaGVhZGVycykgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGZldGNoT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UmVxT3B0aW9ucyh1cmwsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogb3B0aW9ucy5ib2R5IGFzIGFueSBhcyBOb2RlSlMuUmVhZGFibGVTdHJlYW0sXG4gICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCc9PT09PT1mZXRjaE9wdGlvbnMnLCB1cmwsIGZldGNoT3B0aW9ucylcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCwgZmV0Y2hPcHRpb25zIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLnRoZW4oKHgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICByZXR1cm4geFxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoeCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh4KVxuICAgICAgfSlcblxuICAgIGNvbnN0IHJldCA9IHtcbiAgICAgIGRhdGE6XG4gICAgICAgICtyZXMuc3RhdHVzID09PSAyMDRcbiAgICAgICAgICA/ICcnIC8vIDIwNCBObyBDb250ZW50XG4gICAgICAgICAgOiBzdHJlYW1cbiAgICAgICAgICAgID8gcmVzLmJvZHlcbiAgICAgICAgICAgIDogYXdhaXQgcmVzLmpzb24oKSxcbiAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXMsXG4gICAgICBoZWFkZXI6IHJlcy5oZWFkZXJzLFxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvKipcbiAgICog6YCa55So6K+35rGC5pa55rOV77yM6KKrIGdldC9wb3N0L3B1dC91cGxvYWQg562J6LCD55SoXG4gICAqIOi0n+i0o+aehOW7uiBwYXlsb2Fk44CB6K6+572u6LaF5pe244CB6Kej5p6Q5ZON5bqUXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g6K+35rGC6YCJ6aG5XG4gICAqIEBwYXJhbSBlbmFibGVBYm9ydCAtIOaYr+WQpuWQr+eUqOi2heaXtuS4reaWre+8iOeUsSByZXN0cmljdGVkTWV0aG9kcyDlhrPlrprvvIlcbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0ID0gYXN5bmMgKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucywgZW5hYmxlQWJvcnQgPSBmYWxzZSk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1cmwsXG4gICAgICBoZWFkZXJzOiBfaGVhZGVycyA9IHt9LFxuICAgICAgZGF0YSxcbiAgICAgIHJlc3BvbnNlVHlwZSxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICAgIGJvZHksXG4gICAgICBtZXRob2Q6IF9tZXRob2QsXG4gICAgICBjdXN0b21SZXFPcHRzLFxuICAgIH0gPSBvcHRpb25zXG4gICAgY29uc3QgaGVhZGVycyA9IG9iajJTdHJSZWNvcmQoX2hlYWRlcnMpXG4gICAgY29uc3QgbWV0aG9kID0gU3RyaW5nKF9tZXRob2QpLnRvTG93ZXJDYXNlKCkgfHwgJ2dldCdcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCB7IHNpZ25hbCB9ID0gYWJvcnRDb250cm9sbGVyXG4gICAgY29uc3QgdGltZW91dCA9IGN1c3RvbVJlcU9wdHM/LnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0XG5cbiAgICAvLyDmnoTlu7ror7fmsYIgcGF5bG9hZO+8mkZvcm1EYXRhID4gdXJsZW5jb2RlZCA+IHJhdyBib2R5ID4gSlNPTlxuICAgIGxldCBwYXlsb2FkXG4gICAgaWYgKGlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICAgIHBheWxvYWQgPSBkYXRhXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHBheWxvYWQgPSB0b1F1ZXJ5U3RyaW5nKGRhdGEgPz8ge30pXG4gICAgfSBlbHNlIGlmIChib2R5KSB7XG4gICAgICBwYXlsb2FkID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcmVhbFVybCA9IHRoaXMuZ2V0UmVhbFVybChcbiAgICAgIGZvcm1hdFVybCgnaHR0cHMnLCB1cmwgPz8gJycsIG1ldGhvZCA9PT0gJ2dldCcgPyBkYXRhIDoge30pLFxuICAgICAgb3B0aW9ucy5oZWFkZXJzIHx8IHt9LFxuICAgICAgcGF5bG9hZCxcbiAgICApXG5cbiAgICAvLyDotoXml7bpgJrov4cgQWJvcnRDb250cm9sbGVyICsgc2V0VGltZW91dCDlrp7njrBcbiAgICBsZXQgdGltZXJcblxuICAgIGlmIChlbmFibGVBYm9ydCB8fCB0aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lb3V0TXNnID0gYOivt+axguWcqCR7dGltZW91dCAvIDEwMDB9c+WGheacquWujOaIkO+8jOW3suS4reaWrWBcbiAgICAgICAgY29uc29sZS53YXJuKHRpbWVvdXRNc2cpXG4gICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IodGltZW91dE1zZykpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRSZXFPcHRpb25zKHJlYWxVcmwsIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdzYW1lLW9yaWdpbicsXG4gICAgICBzaWduYWwsXG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCc9PT09PT1yZXF1ZXN0T3B0aW9ucycsIHJlYWxVcmwsIHJlcXVlc3RPcHRpb25zKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVhbFVybCwgcmVxdWVzdE9wdGlvbnMgYXMgUmVxdWVzdEluaXQpXG4gICAgICBjb25zdCByZXN1bHQ6IFJlc3BvbnNlT2JqZWN0ID0ge1xuICAgICAgICBoZWFkZXI6IHt9LFxuICAgICAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdC5kYXRhID0gcmVzcG9uc2VUeXBlID09PSAnYmxvYicgPyBhd2FpdCByZXNwb25zZS5ibG9iKCkgOiBzYWZlUGFyc2VKc29uKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8g5LiK5LygIFBPU1Qg6K+35rGC5Y+v6IO96L+U5ZueIFhNTCDnrYnpnZ4gSlNPTiDmoLzlvI/vvIzlrrnplJnlpITnkIZcbiAgICAgICAgY29uc29sZS5sb2coJ2NhdGNoIGFuIGVycm9yJywgZSlcbiAgICAgICAgcmVzdWx0LmRhdGEgPSByZXNwb25zZVR5cGUgPT09ICdibG9iJyA/IGF3YWl0IHJlc3BvbnNlLmJsb2IoKSA6IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgICAgfVxuXG4gICAgICAvLyDlsIblk43lupTlpLTnu5/kuIDovazkuLrlsI/lhpkga2V5XG4gICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlXG4gICAgICBoZWFkZXJzLmZvckVhY2goKHZhbCwga2V5KSA9PiAocmVzdWx0LmhlYWRlcltrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWwpKVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
437
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWJzL2FkYXB0ZXItbm9kZS9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFM0UsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGdCQUFnQixHQUNqQixNQUFNLFNBQVMsQ0FBQTtBQUVoQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFHdEQsSUFBSSxNQUFNLEdBQXFDLElBQUksQ0FBQTtBQUNuRCxTQUFlLE9BQU87Ozs7Ozt5QkFDaEIsQ0FBQyxNQUFNLEVBQVAsY0FBTzs7OztvQkFHSyxXQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBOztvQkFBakQsR0FBRyxHQUFHLFNBQTJDO29CQUN2RCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQTs7OztvQkFFakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQ7MEJBQzdELCtDQUErQzswQkFDL0Msc0JBQXNCLENBQUMsQ0FBQTt3QkFHL0IsV0FBTyxNQUFPLEVBQUE7Ozs7Q0FDZjtBQU9EO0lBVUUscUJBQVksTUFBeUM7UUFBckQsaUJBS0M7UUF1RE0sa0JBQWEsR0FBRyxVQUNyQixHQUFXLEVBQ1gsT0FPQzs7Ozs7O3dCQUVLLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTt3QkFF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Qjs2QkFDakMsQ0FBQzt5QkFDSCxDQUFDLEVBQUE7O3dCQVRJLEdBQUcsR0FBRyxTQVNWO3dCQUVGLFdBQU8sTUFBQSxHQUFHLENBQUMsSUFBSSwwQ0FBRSxZQUFZLEVBQUE7Ozs7S0FDOUI7SUFPRCxnQ0FBVSxHQUFWLFVBQVcsR0FBVyxFQUFFLE9BQTRCLEVBQUUsSUFBUzs7UUFDN0QsSUFBSSxNQUFBLE1BQUEsT0FBTyxDQUFDLGFBQWEsMENBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsMENBQUUsSUFBSSxFQUFFLEVBQUU7WUFDeEQsT0FBTyxHQUFHLENBQUE7U0FDWDtRQUVELElBQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1FBRTFFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtZQUN2QixPQUFPLEdBQUcsQ0FBQTtTQUNYO1FBRUQsSUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFM0IsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLE1BQU0sS0FBSSxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSwwQ0FBRSxRQUFRLENBQUEsS0FBSSxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSwwQ0FBRSxTQUFTLENBQUEsRUFBRTtZQUMzRixNQUFNLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQTtTQUM3QjtRQUNELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUE0WEgsa0JBQUM7QUFBRCxDQUFDLEFBdGJELElBc2JDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbmltcG9ydCB7XG4gIElGZXRjaE9wdGlvbnMsXG4gIElSZXF1ZXN0Q29uZmlnLFxuICBJUmVxdWVzdE1ldGhvZCxcbiAgSVJlcXVlc3RPcHRpb25zLFxuICBSZXNwb25zZU9iamVjdCxcbiAgU0RLUmVxdWVzdEludGVyZmFjZSxcbiAgZm9ybWF0VXJsLFxufSBmcm9tICdAY2xvdWRiYXNlL2FkYXB0ZXItaW50ZXJmYWNlJ1xuaW1wb3J0IHsgQURNSU5fUEFUSCwgQ0xJRU5UX0FVVEhfUEFUSCB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgZ2V0Q2xvdWRiYXNlQ29udGV4dCwgZ2V0U2VjcmV0SW5mbywgSU5JVF9DT05GSUcgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IElDdXN0b21SZXFPcHRzIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7XG4gIGdldEVudixcbiAgaXNGb3JtRGF0YSxcbiAgdG9RdWVyeVN0cmluZyxcbiAgc2FmZVBhcnNlSnNvbixcbiAgb2JqMlN0clJlY29yZCxcbiAgaGVhZGVyc0luaXQySW5kZXhhYmxlLFxuICBnZXRDdXJyUnVuRW52VGFnLFxufSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbmZpZyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgeyBnZXRTZGtWZXJzaW9uIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbW1vbidcbi8vIOW7tui/n+WKoOi9ve+8jOmBv+WFjemdniBOb2RlIOeOr+Wig+aJk+WMheaXtuW8leWFpeatpOWMhVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmxldCBzaWduRm46ICgoLi4uYXJnczogYW55W10pID0+IGFueSkgfCBudWxsID0gbnVsbFxuYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbigpIHtcbiAgaWYgKCFzaWduRm4pIHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZSDigJQg6K+l5YyF5LuF5ZyoIE5vZGUg6L+Q6KGM5pe25a2Y5Zyo77yM5byA5Y+R546v5aKD5Y+v6IO95pyq5a6J6KOFXG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQoJ0BjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqcycpXG4gICAgICBzaWduRm4gPSBtb2Quc2lnblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5L6d6LWWIEBjbG91ZGJhc2Uvc2lnbmF0dXJlLW5vZGVqc++8jOivt+aJp+ihjOS7peS4i+WRveS7pOWuieijhe+8mlxcblxcbidcbiAgICAgICAgKyAnICBucG0gaW5zdGFsbCBAY2xvdWRiYXNlL3NpZ25hdHVyZS1ub2RlanNcXG5cXG4nXG4gICAgICAgICsgJ+ivpeS+nei1lueUqOS6jiBOb2RlIOeOr+Wig+S4i+eahOivt+axguetvuWQjeOAgicpXG4gICAgfVxuICB9XG4gIHJldHVybiBzaWduRm4hXG59XG5cbi8qKlxuICogTm9kZS5qcyDnjq/looPkuIvnmoQgSFRUUCDor7fmsYLlrp7njrBcbiAqIOWfuuS6juWOn+eUnyBmZXRjaO+8jOaUr+aMgSBHRVQvUE9TVC9QVVQv5LiK5LygL+S4i+i9vS/mtYHlvI/or7fmsYJcbiAqIOiHquWKqOWkhOeQhiBWMyDnrb7lkI3lkowgQmVhcmVyIFRva2VuIOiupOivgVxuICovXG5leHBvcnQgY2xhc3MgTm9kZVJlcXVlc3QgaW1wbGVtZW50cyBTREtSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgLyoqIOivt+axgumFjee9ru+8jOWMheWQq+iupOivgeS/oeaBryAqL1xuICBjb25maWc6IElSZXF1ZXN0Q29uZmlnICYgSUNsb3VkYmFzZUNvbmZpZ1xuXG4gIC8qKiDor7fmsYLotoXml7bml7bpl7TvvIjmr6vnp5LvvInvvIzpu5jorqQgMTUwMDAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0OiBudW1iZXJcblxuICAvKiog5Y+X6LaF5pe25o6n5Yi255qE6K+35rGC57G75Z6L5YiX6KGoICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzdHJpY3RlZE1ldGhvZHM6IEFycmF5PElSZXF1ZXN0TWV0aG9kPlxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSVJlcXVlc3RDb25maWcgJiBJQ2xvdWRiYXNlQ29uZmlnKSB7XG4gICAgY29uc3QgeyB0aW1lb3V0LCByZXN0cmljdGVkTWV0aG9kcyB9ID0gY29uZmlnXG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dCB8fCAxNTAwMFxuICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMgPSByZXN0cmljdGVkTWV0aG9kcyB8fCBbJ2dldCcsICdwb3N0JywgJ3VwbG9hZCcsICdkb3dubG9hZCddXG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blrqLmiLfnq6/lh63or4EgYWNjZXNzX3Rva2Vu77yM5Li6566h55CG5ZGY5p2D6ZmQXG4gICAqIOeUqOS6juS4jeaUr+aMgSBWMyDnrb7lkI3nmoTmjqXlj6PvvIjlpoLmlbDmja7mqKHlnovjgIHlhbPns7vlnovmlbDmja7lupPjgIFBSe+8iVxuICAgKi9cbiAgYXN5bmMgZ2V0Q2xpZW50Q3JlZGVudGlhbChvcHRzOiB7IG9yaWdpbjogc3RyaW5nIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZmV0Y2goe1xuICAgICAgdXJsOiBgJHtvcHRzLm9yaWdpbn0ke0NMSUVOVF9BVVRIX1BBVEh9YCxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycsXG4gICAgICB9KSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlcy5kYXRhPy5hY2Nlc3NfdG9rZW5cbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blrp7pmYXor7fmsYIgVVJMXG4gICAqIOW9k+ivt+axguacquaQuuW4piBBdXRob3JpemF0aW9uIOS4lOacquiHquW4piBhY2Nlc3NfdG9rZW4g5pe277yMXG4gICAqIOWwhiAvd2ViIOi3r+W+hOabv+aNouS4uiAvYWRtaW7vvIjnrqHnkIbnq6/nrb7lkI3ot6/lvoTvvIlcbiAgICovXG4gIGdldFJlYWxVcmwodXJsOiBzdHJpbmcsIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGJvZHk6IGFueSkge1xuICAgIGlmIChoZWFkZXJzLkF1dGhvcml6YXRpb24/LnJlcGxhY2UoJ0JlYXJlcicsICcnKT8udHJpbSgpKSB7XG4gICAgICByZXR1cm4gdXJsXG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keSA6IHNhZmVQYXJzZUpzb24oYm9keSkgfHwgJydcblxuICAgIGlmIChwYXJhbXMuYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gdXJsXG4gICAgfVxuXG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAodXJsT2JqLnBhdGhuYW1lID09PSAnL3dlYicgJiYgdGhpcy5jb25maWcuYXV0aD8uc2VjcmV0SWQgJiYgdGhpcy5jb25maWcuYXV0aD8uc2VjcmV0S2V5KSB7XG4gICAgICB1cmxPYmoucGF0aG5hbWUgPSBBRE1JTl9QQVRIXG4gICAgfVxuICAgIHJldHVybiB1cmxPYmoudG9TdHJpbmcoKVxuICB9XG5cbiAgLyoqXG4gICAqIOS4uuivt+axgua3u+WKoOetvuWQjeaIluiupOivgeS/oeaBr1xuICAgKlxuICAgKiDlpITnkIbpgLvovpHkvJjlhYjnuqfvvJpcbiAgICogMS4g5bey5pyJIEF1dGhvcml6YXRpb24gaGVhZGVyIOKGkiDnm7TmjqXov5Tlm55cbiAgICogMi4gL2F1dGgvIOi3r+W+hCDihpIgU0RLIOiupOivgeaOpeWPo++8jOaXoOmcgOetvuWQjVxuICAgKiAzLiDkuI3mlK/mjIEgVjMg562+5ZCN55qE6Lev5b6E77yIL3YxL21vZGVsLyDnrYnvvInihpIg55SoIGNsaWVudENyZWRlbnRpYWwgQmVhcmVyIFRva2VuXG4gICAqIDQuIOWPguaVsOWQqyBhY2Nlc3NfdG9rZW4g4oaSIOaXoOmcgOetvuWQjVxuICAgKiA1LiDlhbbku5Yg4oaSIOS9v+eUqCBWMyDnrb7lkI3vvIhUQzMtSE1BQy1TSEEyNTbvvIlcbiAgICovXG4gIHB1YmxpYyBnZXRSZXFPcHRpb25zID0gYXN5bmMgKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG1ldGhvZD86IGFueVxuICAgICAgaGVhZGVyczogYW55XG4gICAgICBib2R5PzogYW55XG4gICAgICBjcmVkZW50aWFscz86IHN0cmluZ1xuICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICAgIHVybD86IGFueVxuICAgIH0sXG4gICkgPT4ge1xuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKVxuXG4gICAgY29uc3QgeyBUQ0JfU09VUkNFIH0gPSBnZXRDbG91ZGJhc2VDb250ZXh0KClcbiAgICAvLyBOb3RlOiDkupHlh73mlbDooqvosIPnlKjml7blj6/og73osIPnlKjnq6/mnKrkvKDpgJIgU09VUkNF77yMVENCX1NPVVJDRSDlj6/og73kuLrnqbpcbiAgICBjb25zdCBTT1VSQ0UgPSBgJHtJTklUX0NPTkZJRy5jb250ZXh0Py5leHRlbmRlZENvbnRleHQ/LnNvdXJjZSB8fCBUQ0JfU09VUkNFIHx8ICcnfSwke2F3YWl0IGdldEN1cnJSdW5FbnZUYWcoKX1gXG5cbiAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAnVXNlci1BZ2VudCc6IGBhZGFwdGVyLW5vZGUvJHtvcHRpb25zLmhlYWRlcnM/LlsnWC1TREstVmVyc2lvbiddIHx8IGBAY2xvdWRiYXNlL2pzLXNkay8ke2dldFNka1ZlcnNpb24oKX1gfWAsXG4gICAgICAnWC1UQ0ItU291cmNlJzogU09VUkNFLFxuICAgICAgJ1gtQ2xpZW50LVRpbWVzdGFtcCc6IG5ldyBEYXRlKCkudmFsdWVPZigpLFxuICAgICAgJ1gtVENCLVJlZ2lvbic6IElOSVRfQ09ORklHLnJlZ2lvbiB8fCBnZXRFbnYoJ1RFTkNFTlRDTE9VRF9SRUdJT04nKSB8fCAnJyxcbiAgICAgIEhvc3Q6IHVybE9iai5ob3N0LFxuICAgIH1cblxuICAgIC8vIOW3suaQuuW4puacieaViCBBdXRob3JpemF0aW9u77yM55u05o6l6L+U5ZueXG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uPy5yZXBsYWNlKCdCZWFyZXInLCAnJyk/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvLyBhdXRoIOebuOWFs+aOpeWPo+S4jemcgOimgeetvuWQjVxuICAgIGlmICh1cmxPYmoucGF0aG5hbWUuc3RhcnRzV2l0aCgnL2F1dGgvJykgJiYgdXJsT2JqLnBhdGhuYW1lICE9PSBDTElFTlRfQVVUSF9QQVRIKSB7XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH1cblxuICAgIGNvbnN0IGlzQWRtaW5QYXRoID0gdXJsT2JqLnBhdGhuYW1lID09PSBBRE1JTl9QQVRIXG5cbiAgICAvLyDov5nkupvot6/lvoTkuI3mlK/mjIEgVjMg562+5ZCN77yM5pS555SoIGNsaWVudENyZWRlbnRpYWwg6I635Y+WIEJlYXJlciBUb2tlblxuICAgIGNvbnN0IFVOU1VQUE9SVEVEX1YzX1NJR05fUEFUSCA9IFsnL3YxL21vZGVsLycsICcvdjEvcmRiLycsICcvdjEvYWkvJ11cblxuICAgIGlmIChVTlNVUFBPUlRFRF9WM19TSUdOX1BBVEguc29tZSh2ID0+IHVybE9iai5wYXRobmFtZS5zdGFydHNXaXRoKHYpKSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLmdldENsaWVudENyZWRlbnRpYWwoeyBvcmlnaW46IHVybE9iai5vcmlnaW4gfSlcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Rva2VufWBcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgbGV0IHsgc2VjcmV0SWQsIHNlY3JldEtleSwgc2Vzc2lvblRva2VuIH0gPSB0aGlzLmNvbmZpZz8uYXV0aCB8fCB7fVxuICAgIGNvbnN0IHsgc2VjcmV0VHlwZSB9ID0gdGhpcy5jb25maWc/LmF1dGggfHwge31cbiAgICBjb25zdCB7IG1ldGhvZCwgYm9keSB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuaGVhZGVycykpXG4gICAgbGV0IHBhcmFtcyA9IHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkgOiBzYWZlUGFyc2VKc29uKGJvZHkpIHx8ICcnXG5cbiAgICAvLyDlj4LmlbDoh6rluKYgYWNjZXNzX3Rva2Vu77yM5peg6ZyA562+5ZCNXG4gICAgaWYgKHBhcmFtcy5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gR0VUIOivt+axguWPguaVsOW3suWcqCBVUkwg5Lit77yM562+5ZCN5pe2IHBhcmFtcyDnva7nqbpcbiAgICBpZiAobWV0aG9kLnRvTG93ZXJDYXNlKCkgPT09ICdnZXQnKSB7XG4gICAgICBwYXJhbXMgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvLyBTRVNTSU9OX1NFQ1JFVCDnsbvlnovmiJbml6Dlr4bpkqXml7bvvIzku47njq/looPlj5jph4/ojrflj5bkuLTml7blr4bpkqVcbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkgfHwgc2VjcmV0VHlwZSA9PT0gJ1NFU1NJT05fU0VDUkVUJykge1xuICAgICAgY29uc3Qgc2VjcmV0SW5mbyA9IGdldFNlY3JldEluZm8oKVxuICAgICAgc2VjcmV0SWQgPSBzZWNyZXRJbmZvLnNlY3JldElkXG4gICAgICBzZWNyZXRLZXkgPSBzZWNyZXRJbmZvLnNlY3JldEtleVxuICAgICAgc2Vzc2lvblRva2VuID0gc2VjcmV0SW5mby5zZXNzaW9uVG9rZW5cbiAgICB9XG5cbiAgICAvLyDku43ml6Dlr4bpkqXliJnot7Pov4fnrb7lkI1cbiAgICBpZiAoIXNlY3JldElkIHx8ICFzZWNyZXRLZXkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvblxuXG4gICAgLy8gY29udGVudC10eXBlIOmcgOS4juacjeWKoeerr+etvuWQjemqjOivgeS/neaMgeWkp+Wwj+WGmeS4gOiHtFxuICAgIGlmIChoZWFkZXJzWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfSBlbHNlIGlmIChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkge1xuICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBoZWFkZXJzWydDb250ZW50LVR5cGUnXS50b0xvd2VyQ2FzZSgpXG4gICAgfVxuXG4gICAgaWYgKGlzQWRtaW5QYXRoICYmICEhc2Vzc2lvblRva2VuKSB7XG4gICAgICBwYXJhbXMuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVkUGFyYW1zID0ge1xuICAgICAgc2VjcmV0SWQsXG4gICAgICBzZWNyZXRLZXksXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aFNpZ25lZFBhcmFtczogaXNBZG1pblBhdGgsXG4gICAgICB0aW1lc3RhbXA6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDEsXG4gICAgICBpc0Nsb3VkQXBpOiAhaXNBZG1pblBhdGgsXG4gICAgfVxuXG5cbiAgICBjb25zdCBzaWduID0gYXdhaXQgZ2V0U2lnbigpXG4gICAgaWYgKCFzaWduKSByZXR1cm4gb3B0aW9uc1xuXG4gICAgY29uc3QgeyBhdXRob3JpemF0aW9uLCB0aW1lc3RhbXAgfSA9IHNpZ24oc2lnbmVkUGFyYW1zKVxuXG4gICAgaWYgKHR5cGVvZiBzZXNzaW9uVG9rZW4gPT09ICdzdHJpbmcnICYmIHNlc3Npb25Ub2tlbiAhPT0gJycpIHtcbiAgICAgIGlmIChpc0FkbWluUGF0aCkge1xuICAgICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9ufWBcbiAgICAgICAgaGVhZGVyc1snWC1UaW1lc3RhbXAnXSA9IHRpbWVzdGFtcFxuICAgICAgICBoZWFkZXJzWydYLVNpZ25hdHVyZS1FeHBpcmVzJ10gPSA2MDBcbiAgICAgIH0gZWxzZSAge1xuICAgICAgICAvLyDkuLTml7blr4bpkqXpnIDopoHpop3lpJbpmYTluKYgVG9rZW5cbiAgICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvbn0sIFRpbWVzdGFtcD0ke3RpbWVzdGFtcH0sIFRva2VuPSR7c2Vzc2lvblRva2VufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvbn0sIFRpbWVzdGFtcD0ke3RpbWVzdGFtcH1gXG5cbiAgICAgIC8vIGFkbWluIOi3r+W+hOmcgOimgemineWklueahOaXtumXtOaIs+WSjOi/h+acn+WktFxuICAgICAgaWYgKGlzQWRtaW5QYXRoKSB7XG4gICAgICAgIGhlYWRlcnNbJ1gtVGltZXN0YW1wJ10gPSB0aW1lc3RhbXBcbiAgICAgICAgaGVhZGVyc1snWC1TaWduYXR1cmUtRXhwaXJlcyddID0gNjAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogdHlwZW9mIHBhcmFtcyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShwYXJhbXMpIDogcGFyYW1zLFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgPSAob3B0aW9uczogSVJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZU9iamVjdD4gPT4gdGhpcy5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgIH0sXG4gICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygnZ2V0JyksXG4gIClcblxuICBwdWJsaWMgcG9zdCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3QoXG4gICAge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgIH0sXG4gICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygncG9zdCcpLFxuICApXG5cbiAgcHVibGljIHB1dCA9IChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB0aGlzLnJlcXVlc3Qoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbWV0aG9kOiAncHV0JyxcbiAgfSlcblxuICAvKipcbiAgICog5paH5Lu25LiK5LygXG4gICAqIFBPU1Qg5pa55byP77ya5p6E5bu6IEZvcm1EYXRhIOS4iuS8oFxuICAgKiBQVVQg5pa55byP77ya55u05o6l5bCG5paH5Lu25L2c5Li6IGJvZHkg5LiK5LygXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkID0gKG9wdGlvbnM6IElSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VPYmplY3Q+ID0+IHtcbiAgICBjb25zdCB7IGRhdGE6IF9kYXRhLCBmaWxlLCBuYW1lLCBtZXRob2QsIGhlYWRlcnMgPSB7fSB9ID0gb3B0aW9uc1xuICAgIGlmIChmaWxlID09PSB1bmRlZmluZWQgfHwgbmFtZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlsZSBhbmQgbmFtZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSBvYmoyU3RyUmVjb3JkKF9kYXRhID8/IHt9KVxuICAgIGNvbnN0IGxvd2VyZWRNZXRob2QgPSBtZXRob2Q/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCByZXFNZXRob2QgPSBbJ3Bvc3QnLCAncHV0J10uZmluZChtID0+IG0gPT09IGxvd2VyZWRNZXRob2QpID8/ICdwdXQnXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIGlmIChyZXFNZXRob2QgPT09ICdwb3N0Jykge1xuICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGFba2V5XSlcbiAgICAgIH0pXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2tleScsIG5hbWUpXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKVxuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgbWV0aG9kOiByZXFNZXRob2QsXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMucmVzdHJpY3RlZE1ldGhvZHMuaW5jbHVkZXMoJ3VwbG9hZCcpLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIG1ldGhvZDogJ3B1dCcsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IGZpbGUsXG4gICAgICB9LFxuICAgICAgdGhpcy5yZXN0cmljdGVkTWV0aG9kcy5pbmNsdWRlcygndXBsb2FkJyksXG4gICAgKVxuICB9XG5cbiAgLyoqIOaWh+S7tuS4i+i9ve+8iOa1j+iniOWZqOeOr+Wig++8jOmAmui/h+WIm+W7uiA8YT4g5qCH562+6Kem5Y+R5LiL6L2977yJICovXG4gIHB1YmxpYyBkb3dubG9hZCA9IGFzeW5jIChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuZ2V0KHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgIH0pXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2RhdGFdKSlcbiAgICBjb25zdCBmaWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChuZXcgVVJMKG9wdGlvbnM/LnVybCA/PyAnJykucGF0aG5hbWUuc3BsaXQoJy8nKS5wb3AoKSB8fCAnJylcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG5cbiAgICBsaW5rLmhyZWYgPSB1cmxcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSlcbiAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICBsaW5rLmNsaWNrKClcbiAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgdGVtcEZpbGVQYXRoOiBvcHRpb25zLnVybCxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDlupXlsYIgZmV0Y2gg6K+35rGC77yM5pSv5oyB5rWB5byP5ZON5bqUXG4gICAqIOi2heaXtumAmui/hyBBYm9ydENvbnRyb2xsZXIgKyBzZXRUaW1lb3V0IOWunueOsFxuICAgKi9cbiAgcHVibGljIGZldGNoID0gYXN5bmMgKG9wdGlvbnM6IE9taXQ8SUZldGNoT3B0aW9ucywgJ3NpZ25hbCc+ICYgeyBzaWduYWw/OiBBYm9ydFNpZ25hbDsgY3VzdG9tUmVxT3B0cz86IElDdXN0b21SZXFPcHRzIH0pOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB7XG4gICAgY29uc3QgeyBlbmFibGVBYm9ydCA9IGZhbHNlLCBzdHJlYW0gPSBmYWxzZSwgc2lnbmFsLCBjdXN0b21SZXFPcHRzIH0gPSBvcHRpb25zXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZWFsVXJsKG9wdGlvbnMudXJsLCBvcHRpb25zLmhlYWRlcnMgfHwge30sIG9wdGlvbnMuYm9keSlcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCB0aW1lb3V0ID0gY3VzdG9tUmVxT3B0cz8udGltZW91dCB8fCB0aGlzLnRpbWVvdXRcblxuICAgIC8vIOahpeaOpeWklumDqCBzaWduYWwg5Yiw5YaF6YOoIEFib3J0Q29udHJvbGxlclxuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4gYWJvcnRDb250cm9sbGVyLmFib3J0KCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g6LaF5pe26Ieq5Yqo5Lit5patXG4gICAgbGV0IHRpbWVyID0gdW5kZWZpbmVkXG4gICAgaWYgKGVuYWJsZUFib3J0IHx8IHRpbWVvdXQpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRNc2cgPSBg6K+35rGC5ZyoJHt0aW1lb3V0IC8gMTAwMH1z5YaF5pyq5a6M5oiQ77yM5bey5Lit5patYFxuICAgICAgICBjb25zb2xlLndhcm4odGltZW91dE1zZylcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcih0aW1lb3V0TXNnKSlcbiAgICAgIH0sIHRpbWVvdXQpXG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyA/IGhlYWRlcnNJbml0MkluZGV4YWJsZShvcHRpb25zLmhlYWRlcnMpIDogdW5kZWZpbmVkXG5cbiAgICBjb25zdCBmZXRjaE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldFJlcU9wdGlvbnModXJsLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSBhcyBhbnkgYXMgTm9kZUpTLlJlYWRhYmxlU3RyZWFtLFxuICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pXG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIGZldGNoT3B0aW9ucyBhcyBSZXF1ZXN0SW5pdClcbiAgICAgIC50aGVuKCh4KSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgICAgcmV0dXJuIHhcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKHgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeClcbiAgICAgIH0pXG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICBkYXRhOlxuICAgICAgICArcmVzLnN0YXR1cyA9PT0gMjA0XG4gICAgICAgICAgPyAnJyAvLyAyMDQgTm8gQ29udGVudFxuICAgICAgICAgIDogc3RyZWFtXG4gICAgICAgICAgICA/IHJlcy5ib2R5XG4gICAgICAgICAgICA6IGF3YWl0IHJlcy5qc29uKCksXG4gICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzLFxuICAgICAgaGVhZGVyOiByZXMuaGVhZGVycyxcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLyoqXG4gICAqIOmAmueUqOivt+axguaWueazle+8jOiiqyBnZXQvcG9zdC9wdXQvdXBsb2FkIOetieiwg+eUqFxuICAgKiDotJ/otKPmnoTlu7ogcGF5bG9hZOOAgeiuvue9rui2heaXtuOAgeino+aekOWTjeW6lFxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIOivt+axgumAiemhuVxuICAgKiBAcGFyYW0gZW5hYmxlQWJvcnQgLSDmmK/lkKblkK/nlKjotoXml7bkuK3mlq3vvIjnlLEgcmVzdHJpY3RlZE1ldGhvZHMg5Yaz5a6a77yJXG4gICAqL1xuICBwdWJsaWMgcmVxdWVzdCA9IGFzeW5jIChvcHRpb25zOiBJUmVxdWVzdE9wdGlvbnMsIGVuYWJsZUFib3J0ID0gZmFsc2UpOiBQcm9taXNlPFJlc3BvbnNlT2JqZWN0PiA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdXJsLFxuICAgICAgaGVhZGVyczogX2hlYWRlcnMgPSB7fSxcbiAgICAgIGRhdGEsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgICBib2R5LFxuICAgICAgbWV0aG9kOiBfbWV0aG9kLFxuICAgICAgY3VzdG9tUmVxT3B0cyxcbiAgICB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvYmoyU3RyUmVjb3JkKF9oZWFkZXJzKVxuICAgIGNvbnN0IG1ldGhvZCA9IFN0cmluZyhfbWV0aG9kKS50b0xvd2VyQ2FzZSgpIHx8ICdnZXQnXG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgeyBzaWduYWwgfSA9IGFib3J0Q29udHJvbGxlclxuICAgIGNvbnN0IHRpbWVvdXQgPSBjdXN0b21SZXFPcHRzPy50aW1lb3V0IHx8IHRoaXMudGltZW91dFxuXG4gICAgLy8g5p6E5bu66K+35rGCIHBheWxvYWTvvJpGb3JtRGF0YSA+IHVybGVuY29kZWQgPiByYXcgYm9keSA+IEpTT05cbiAgICBsZXQgcGF5bG9hZFxuICAgIGlmIChpc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgICBwYXlsb2FkID0gZGF0YVxuICAgIH0gZWxzZSBpZiAoaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICBwYXlsb2FkID0gdG9RdWVyeVN0cmluZyhkYXRhID8/IHt9KVxuICAgIH0gZWxzZSBpZiAoYm9keSkge1xuICAgICAgcGF5bG9hZCA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgcGF5bG9hZCA9IGRhdGEgPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHJlYWxVcmwgPSB0aGlzLmdldFJlYWxVcmwoXG4gICAgICBmb3JtYXRVcmwoJ2h0dHBzJywgdXJsID8/ICcnLCBtZXRob2QgPT09ICdnZXQnID8gZGF0YSA6IHt9KSxcbiAgICAgIG9wdGlvbnMuaGVhZGVycyB8fCB7fSxcbiAgICAgIHBheWxvYWQsXG4gICAgKVxuXG4gICAgLy8g6LaF5pe26YCa6L+HIEFib3J0Q29udHJvbGxlciArIHNldFRpbWVvdXQg5a6e546wXG4gICAgbGV0IHRpbWVyXG5cbiAgICBpZiAoZW5hYmxlQWJvcnQgfHwgdGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdGltZW91dE1zZyA9IGDor7fmsYLlnKgke3RpbWVvdXQgLyAxMDAwfXPlhoXmnKrlrozmiJDvvIzlt7LkuK3mlq1gXG4gICAgICAgIGNvbnNvbGUud2Fybih0aW1lb3V0TXNnKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKHRpbWVvdXRNc2cpKVxuICAgICAgfSwgdGltZW91dClcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UmVxT3B0aW9ucyhyZWFsVXJsLCB7XG4gICAgICBtZXRob2QsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgIGNyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnc2FtZS1vcmlnaW4nLFxuICAgICAgc2lnbmFsLFxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZWFsVXJsLCByZXF1ZXN0T3B0aW9ucyBhcyBSZXF1ZXN0SW5pdClcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVzcG9uc2VPYmplY3QgPSB7XG4gICAgICAgIGhlYWRlcjoge30sXG4gICAgICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0LmRhdGEgPSByZXNwb25zZVR5cGUgPT09ICdibG9iJyA/IGF3YWl0IHJlc3BvbnNlLmJsb2IoKSA6IHNhZmVQYXJzZUpzb24oYXdhaXQgcmVzcG9uc2UudGV4dCgpKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyDkuIrkvKAgUE9TVCDor7fmsYLlj6/og73ov5Tlm54gWE1MIOetiemdniBKU09OIOagvOW8j++8jOWuuemUmeWkhOeQhlxuICAgICAgICBjb25zb2xlLmxvZygnY2F0Y2ggYW4gZXJyb3InLCBlKVxuICAgICAgICByZXN1bHQuZGF0YSA9IHJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2InID8gYXdhaXQgcmVzcG9uc2UuYmxvYigpIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpXG4gICAgICB9XG5cbiAgICAgIC8vIOWwhuWTjeW6lOWktOe7n+S4gOi9rOS4uuWwj+WGmSBrZXlcbiAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2VcbiAgICAgIGhlYWRlcnMuZm9yRWFjaCgodmFsLCBrZXkpID0+IChyZXN1bHQuaGVhZGVyW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbCkpXG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgIH1cbiAgfVxufVxuIl19
|