@rudderstack/integrations-lib 0.2.2 → 0.2.5
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/build/constants.js +1 -1
- package/build/errors/aborted_error.d.ts +1 -1
- package/build/errors/aborted_error.d.ts.map +1 -1
- package/build/errors/aborted_error.js +1 -1
- package/build/errors/base.d.ts.map +1 -1
- package/build/errors/base.js +2 -2
- package/build/errors/configuration_auth_error.d.ts +1 -1
- package/build/errors/configuration_auth_error.d.ts.map +1 -1
- package/build/errors/configuration_auth_error.js +1 -1
- package/build/errors/configuration_error.d.ts +1 -1
- package/build/errors/configuration_error.js +1 -1
- package/build/errors/instrumentation_error.d.ts +1 -1
- package/build/errors/instrumentation_error.js +1 -1
- package/build/errors/invalid_auth_token_error.d.ts +1 -1
- package/build/errors/invalid_auth_token_error.d.ts.map +1 -1
- package/build/errors/invalid_auth_token_error.js +1 -1
- package/build/errors/network_error.d.ts +1 -1
- package/build/errors/network_error.d.ts.map +1 -1
- package/build/errors/network_error.js +2 -2
- package/build/errors/oauth_secret_error.d.ts +1 -1
- package/build/errors/oauth_secret_error.js +1 -1
- package/build/errors/platform_error.d.ts +1 -1
- package/build/errors/platform_error.js +1 -1
- package/build/errors/redis_error.d.ts +1 -1
- package/build/errors/redis_error.js +1 -1
- package/build/errors/retryable_error.d.ts +1 -1
- package/build/errors/retryable_error.d.ts.map +1 -1
- package/build/errors/retryable_error.js +1 -1
- package/build/errors/throttled_error.d.ts +1 -1
- package/build/errors/throttled_error.js +1 -1
- package/build/errors/unauthorized_error.d.ts +1 -1
- package/build/errors/unauthorized_error.d.ts.map +1 -1
- package/build/errors/unauthorized_error.js +1 -1
- package/build/errors/unhandled_status_code_error.d.ts +1 -1
- package/build/errors/unhandled_status_code_error.js +1 -1
- package/build/errors/unsupported_event_error.d.ts +1 -1
- package/build/errors/unsupported_event_error.js +1 -1
- package/build/logger.js +1 -1
- package/build/network/clients/axios_client.d.ts.map +1 -1
- package/build/network/clients/axios_client.js +9 -7
- package/build/network/clients/axios_client.test.js +64 -29
- package/build/network/clients/types.d.ts.map +1 -1
- package/build/network/clients/types.js +1 -1
- package/build/network/factory.d.ts +1 -1
- package/build/network/factory.d.ts.map +1 -1
- package/build/network/factory.js +1 -1
- package/build/network/factory.test.js +3 -2
- package/build/network/index.d.ts.map +1 -1
- package/build/network/index.js +1 -1
- package/build/structured-logger.d.ts +2 -0
- package/build/structured-logger.d.ts.map +1 -1
- package/build/structured-logger.js +11 -8
- package/build/structured-logger.test.d.ts +2 -0
- package/build/structured-logger.test.d.ts.map +1 -0
- package/build/structured-logger.test.js +118 -0
- package/build/tags.js +43 -43
- package/build/types.d.ts.map +1 -1
- package/build/types.js +4 -10
- package/build/utils/json.d.ts.map +1 -1
- package/build/utils/json.js +17 -4
- package/build/utils/json.test.js +703 -1
- package/build/utils/misc.d.ts +8 -1
- package/build/utils/misc.d.ts.map +1 -1
- package/build/utils/misc.js +16 -10
- package/build/utils/misc.test.js +33 -1
- package/build/utils/sem.d.ts.map +1 -1
- package/build/utils/sem.js +1 -1
- package/build/utils/sem.test.js +81 -1
- package/mock/index.d.ts.map +1 -1
- package/mock/index.js +1 -1
- package/package.json +22 -6
package/build/utils/json.js
CHANGED
|
@@ -31,12 +31,12 @@ const handlebars_1 = __importDefault(require("handlebars"));
|
|
|
31
31
|
const get_value_1 = __importDefault(require("get-value"));
|
|
32
32
|
const set_value_1 = __importDefault(require("set-value"));
|
|
33
33
|
const lodash_1 = require("lodash");
|
|
34
|
+
const moment_timezone_1 = __importDefault(require("moment-timezone"));
|
|
34
35
|
const logger = __importStar(require("../logger"));
|
|
35
36
|
const platform_error_1 = require("../errors/platform_error");
|
|
36
37
|
const sem_1 = require("./sem");
|
|
37
38
|
const instrumentation_error_1 = require("../errors/instrumentation_error");
|
|
38
39
|
const misc_1 = require("./misc");
|
|
39
|
-
const moment_timezone_1 = __importDefault(require("moment-timezone"));
|
|
40
40
|
const transformation_error_1 = require("../errors/transformation_error");
|
|
41
41
|
const constants_1 = require("../constants");
|
|
42
42
|
class JsonUtils {
|
|
@@ -54,7 +54,17 @@ class JsonUtils {
|
|
|
54
54
|
// in the same order it is populated
|
|
55
55
|
const argValues = args.map((arg) => {
|
|
56
56
|
const { sourceKeys, defaultVal } = arg;
|
|
57
|
-
|
|
57
|
+
if (!Array.isArray(sourceKeys) && typeof sourceKeys !== 'string') {
|
|
58
|
+
return defaultVal;
|
|
59
|
+
}
|
|
60
|
+
let val;
|
|
61
|
+
let foundKey = sourceKeys;
|
|
62
|
+
if (Array.isArray(sourceKeys)) {
|
|
63
|
+
foundKey = sourceKeys.find((srcKey) => (0, get_value_1.default)(message, srcKey));
|
|
64
|
+
}
|
|
65
|
+
if (foundKey) {
|
|
66
|
+
val = (0, get_value_1.default)(message, foundKey);
|
|
67
|
+
}
|
|
58
68
|
if (val || val === false || val === 0) {
|
|
59
69
|
return val;
|
|
60
70
|
}
|
|
@@ -72,6 +82,7 @@ class JsonUtils {
|
|
|
72
82
|
switch (operation) {
|
|
73
83
|
case 'multiplication':
|
|
74
84
|
result = 1;
|
|
85
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
75
86
|
for (const v of argValues) {
|
|
76
87
|
if ((0, lodash_1.isNumber)(v)) {
|
|
77
88
|
result *= v;
|
|
@@ -85,6 +96,7 @@ class JsonUtils {
|
|
|
85
96
|
return result;
|
|
86
97
|
case 'addition':
|
|
87
98
|
result = 0;
|
|
99
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
88
100
|
for (const v of argValues) {
|
|
89
101
|
if ((0, lodash_1.isNumber)(v)) {
|
|
90
102
|
result += v;
|
|
@@ -124,7 +136,7 @@ class JsonUtils {
|
|
|
124
136
|
if (pastTimeDifference > allowedPastTimeDifference) {
|
|
125
137
|
throw new instrumentation_error_1.InstrumentationError(`Allowed timestamp is [${allowedPastTimeDifference} ${allowedPastTimeUnit}] into the past`);
|
|
126
138
|
}
|
|
127
|
-
if (pastTimeDifference <= 0) {
|
|
139
|
+
if (!pastTimeDifference || pastTimeDifference <= 0) {
|
|
128
140
|
switch (allowedFutureTimeUnit) {
|
|
129
141
|
case 'seconds':
|
|
130
142
|
futureTimeDifference = Math.ceil(moment_timezone_1.default.duration(time.diff(currentTime)).asSeconds());
|
|
@@ -246,6 +258,7 @@ class JsonUtils {
|
|
|
246
258
|
if (typeof value === 'object') {
|
|
247
259
|
// exclude the fields from the formattedVal
|
|
248
260
|
excludes.forEach((key) => {
|
|
261
|
+
// eslint-disable-next-line no-param-reassign
|
|
249
262
|
delete formattedVal[key];
|
|
250
263
|
});
|
|
251
264
|
}
|
|
@@ -504,4 +517,4 @@ class JsonUtils {
|
|
|
504
517
|
}
|
|
505
518
|
exports.JsonUtils = JsonUtils;
|
|
506
519
|
JsonUtils.MESSAGE_MAPPING = constants_1.GENERIC_MAPPING_CONFIG;
|
|
507
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNERBQW9DO0FBRXBDLDBEQUE0QjtBQUM1QiwwREFBNEI7QUFDNUIsbUNBQXlEO0FBR3pELGtEQUFvQztBQUNwQyw2REFBeUQ7QUFDekQsK0JBQXFDO0FBQ3JDLDJFQUF1RTtBQUN2RSxpQ0FPZ0I7QUFDaEIsc0VBQXFDO0FBQ3JDLHlFQUFxRTtBQUNyRSw0Q0FBc0Q7QUFxQnRELE1BQWEsU0FBUztJQUdwQjs7Ozs7OztPQU9HO0lBQ0ssTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQ3ZDLE9BQU8sRUFDUCxlQUFlLEdBSWhCO1FBQ0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUM7UUFFNUMseUNBQXlDO1FBQ3pDLG9DQUFvQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBQSxtQkFBRyxFQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNyQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JDLE9BQU8sR0FBRyxDQUFDO2FBQ1o7WUFDRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxnREFBZ0Q7UUFDaEQsdUNBQXVDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUEsY0FBSyxFQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFBLGNBQUssRUFBQyxDQUFDLENBQUMsQ0FB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Q0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUVELHNCQUFzQjtRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQWM7UUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7O0FBaGxCSCw4QkFpbEJDO0FBaGxCZ0IseUJBQWUsR0FBRyxrQ0FBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBIYW5kbGViYXJzIGZyb20gJ2hhbmRsZWJhcnMnO1xuaW1wb3J0IHsgUnVkZGVyU3RhY2tFdmVudCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBnZXQgZnJvbSAnZ2V0LXZhbHVlJztcbmltcG9ydCBzZXQgZnJvbSAnc2V0LXZhbHVlJztcbmltcG9ydCB7IGV2ZXJ5LCBpc0VtcHR5LCBpc05pbCwgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBQbGF0Zm9ybUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3BsYXRmb3JtX2Vycm9yJztcbmltcG9ydCB7IFNlbWFudGljVXRpbCB9IGZyb20gJy4vc2VtJztcbmltcG9ydCB7IEluc3RydW1lbnRhdGlvbkVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL2luc3RydW1lbnRhdGlvbl9lcnJvcic7XG5pbXBvcnQge1xuICBmbGF0dGVuSnNvbixcbiAgZm9ybWF0VGltZVN0YW1wLFxuICBnZXRPZmZzZXRJblNlYyxcbiAgaGFzaFRvU2hhMjU2LFxuICBpc0RlZmluZWRBbmROb3ROdWxsLFxuICBpc1ZhbGlkVXJsLFxufSBmcm9tICcuL21pc2MnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgVHJhbnNmb3JtYXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycy90cmFuc2Zvcm1hdGlvbl9lcnJvcic7XG5pbXBvcnQgeyBHRU5FUklDX01BUFBJTkdfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbnR5cGUgT3BlcmF0aW9uID0ge1xuICBvcGVyYXRpb246IHN0cmluZztcbiAgYXJnczogeyBzb3VyY2VLZXlzOiBzdHJpbmdbXTsgZGVmYXVsdFZhbD86IGFueSB9W107XG59O1xudHlwZSBNYXBwaW5nTWV0YWRhdGEgPSB7XG4gIHR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgdHlwZUZvcm1hdD86IHN0cmluZztcbiAgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHVua25vd247XG4gIGV4Y2x1ZGVzPzogc3RyaW5nW107XG4gIG11bHRpa2V5TWFwPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xuICBzdHJpY3RNdWx0aU1hcD86IHsgc291cmNlVmFsOiBzdHJpbmdbXTsgZGVzdFZhbDogc3RyaW5nIH1bXTtcbiAgdmFsaWRhdGVUaW1lc3RhbXA/OiB7XG4gICAgYWxsb3dlZEZ1dHVyZVRpbWVEaWZmZXJlbmNlOiBudW1iZXI7XG4gICAgYWxsb3dlZEZ1dHVyZVRpbWVVbml0OiBzdHJpbmc7XG4gICAgYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZTogbnVtYmVyO1xuICAgIGFsbG93ZWRQYXN0VGltZVVuaXQ6IHN0cmluZztcbiAgfTtcbiAgYWxsb3dlZEtleUNoZWNrPzogeyB0eXBlOiBzdHJpbmc7IHNvdXJjZVZhbDogc3RyaW5nW10gfVtdO1xufVxuZXhwb3J0IGNsYXNzIEpzb25VdGlscyB7XG4gIHByaXZhdGUgc3RhdGljIE1FU1NBR0VfTUFQUElORyA9IEdFTkVSSUNfTUFQUElOR19DT05GSUc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uOiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgc291cmNlIGtleXMgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2Ugb2JqZWN0XG4gICAqIEByZXR1cm5zXHR7YW55fVx0LSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc291cmNlIGtleVxuICAgKiBcdFx0XHRcdFx0XHRpZiB0aGUgc291cmNlIGtleSBpcyBub3QgcHJlc2VudCBpbiB0aGUgbWVzc2FnZVxuICAgKiBcdFx0XHRcdFx0XHRyZXR1cm5zIG51bGxcbiAgICpcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZVNvdXJjZUtleXNPcGVyYXRpb24oe1xuICAgIG1lc3NhZ2UsXG4gICAgb3BlcmF0aW9uT2JqZWN0LFxuICB9OiB7XG4gICAgbWVzc2FnZTogUnVkZGVyU3RhY2tFdmVudDtcbiAgICBvcGVyYXRpb25PYmplY3Q6IE9wZXJhdGlvbjtcbiAgfSk6IGFueSB7XG4gICAgY29uc3QgeyBvcGVyYXRpb24sIGFyZ3MgfSA9IG9wZXJhdGlvbk9iamVjdDtcblxuICAgIC8vIHBvcHVsYXRlIHRoZSB2YWx1ZXMgZnJvbSB0aGUgYXJndW1lbnRzXG4gICAgLy8gaW4gdGhlIHNhbWUgb3JkZXIgaXQgaXMgcG9wdWxhdGVkXG4gICAgY29uc3QgYXJnVmFsdWVzID0gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgICAgY29uc3QgeyBzb3VyY2VLZXlzLCBkZWZhdWx0VmFsIH0gPSBhcmc7XG4gICAgICBjb25zdCB2YWwgPSBnZXQobWVzc2FnZSwgc291cmNlS2V5cyk7XG4gICAgICBpZiAodmFsIHx8IHZhbCA9PT0gZmFsc2UgfHwgdmFsID09PSAwKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbDtcbiAgICB9KTtcblxuICAgIC8vIHF1aWNrIHNhbml0eSBjaGVjayBmb3IgdGhlIHVuZGVmaW5lZCB2YWx1ZXMgaW4gdGhlIGxpc3QuXG4gICAgLy8gaWYgdGhlcmUgaXMgYW55IHVuZGVmaW5lZCB2YWx1ZXMsIHJldHVybiBudWxsXG4gICAgLy8gd2l0aG91dCBnb2luZyBmdXJ0aGVyIGZvciBvcGVyYXRpb25zXG4gICAgY29uc3QgaXNBbGxEZWZpbmVkID0gZXZlcnkoYXJnVmFsdWVzLCAodikgPT4gIWlzTmlsKHYpKTtcbiAgICBpZiAoIWlzQWxsRGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgaGFuZGxpbmcgb3BlcmF0aW9uc1xuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcbiAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgY2FzZSAnbXVsdGlwbGljYXRpb24nOlxuICAgICAgICByZXN1bHQgPSAxO1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgYXJnVmFsdWVzKSB7XG4gICAgICAgICAgaWYgKGlzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICByZXN1bHQgKj0gdjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBub24gbnVtYmVyIGFyZ3VtZW50IHNpbXBseSByZXR1cm4gbnVsbFxuICAgICAgICAgICAgLy8gbm9uIG51bWJlcnMgY2FuJ3QgYmUgb3BlcmF0ZWQgYXJpdGhtYXRpY2FsbHlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgY2FzZSAnYWRkaXRpb24nOlxuICAgICAgICByZXN1bHQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgYXJnVmFsdWVzKSB7XG4gICAgICAgICAgaWYgKGlzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBub24gbnVtYmVyIGFyZ3VtZW50IHNpbXBseSByZXR1cm4gbnVsbFxuICAgICAgICAgICAgLy8gbm9uIG51bWJlcnMgY2FuJ3QgYmUgb3BlcmF0ZWQgYXJpdGhtYXRpY2FsbHlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY2hlY2tUaW1lc3RhbXAoXG4gICAgdmFsaWRhdGVUaW1lc3RhbXA6IHtcbiAgICAgIGFsbG93ZWRGdXR1cmVUaW1lRGlmZmVyZW5jZTogbnVtYmVyO1xuICAgICAgYWxsb3dlZEZ1dHVyZVRpbWVVbml0OiBzdHJpbmc7XG4gICAgICBhbGxvd2VkUGFzdFRpbWVEaWZmZXJlbmNlOiBudW1iZXI7XG4gICAgICBhbGxvd2VkUGFzdFRpbWVVbml0OiBzdHJpbmc7XG4gICAgfSxcbiAgICBmb3JtYXR0ZWRWYWw6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZSxcbiAgICAgIGFsbG93ZWRQYXN0VGltZVVuaXQsIC8vIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzXG4gICAgICBhbGxvd2VkRnV0dXJlVGltZURpZmZlcmVuY2UsXG4gICAgICBhbGxvd2VkRnV0dXJlVGltZVVuaXQsIC8vIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzXG4gICAgfSA9IHZhbGlkYXRlVGltZXN0YW1wO1xuXG4gICAgbGV0IHBhc3RUaW1lRGlmZmVyZW5jZTtcbiAgICBsZXQgZnV0dXJlVGltZURpZmZlcmVuY2U7XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG1vbWVudC51bml4KE51bWJlcihtb21lbnQoKS5mb3JtYXQoJ1gnKSkpO1xuICAgIGNvbnN0IHRpbWUgPSBtb21lbnQudW5peChOdW1iZXIobW9tZW50KGZvcm1hdHRlZFZhbCkuZm9ybWF0KCdYJykpKTtcblxuICAgIHN3aXRjaCAoYWxsb3dlZFBhc3RUaW1lVW5pdCkge1xuICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgIHBhc3RUaW1lRGlmZmVyZW5jZSA9IE1hdGguY2VpbChtb21lbnQuZHVyYXRpb24oY3VycmVudFRpbWUuZGlmZih0aW1lKSkuYXNTZWNvbmRzKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICBwYXN0VGltZURpZmZlcmVuY2UgPSBNYXRoLmNlaWwobW9tZW50LmR1cmF0aW9uKGN1cnJlbnRUaW1lLmRpZmYodGltZSkpLmFzTWludXRlcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIHBhc3RUaW1lRGlmZmVyZW5jZSA9IE1hdGguY2VpbChtb21lbnQuZHVyYXRpb24oY3VycmVudFRpbWUuZGlmZih0aW1lKSkuYXNIb3VycygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGFzdFRpbWVEaWZmZXJlbmNlID4gYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEluc3RydW1lbnRhdGlvbkVycm9yKFxuICAgICAgICBgQWxsb3dlZCB0aW1lc3RhbXAgaXMgWyR7YWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZX0gJHthbGxvd2VkUGFzdFRpbWVVbml0fV0gaW50byB0aGUgcGFzdGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXN0VGltZURpZmZlcmVuY2UgPD0gMCkge1xuICAgICAgc3dpdGNoIChhbGxvd2VkRnV0dXJlVGltZVVuaXQpIHtcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgZnV0dXJlVGltZURpZmZlcmVuY2UgPSBNYXRoLmNlaWwobW9tZW50LmR1cmF0aW9uKHRpbWUuZGlmZihjdXJyZW50VGltZSkpLmFzU2Vjb25kcygpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgZnV0dXJlVGltZURpZmZlcmVuY2UgPSBNYXRoLmNlaWwobW9tZW50LmR1cmF0aW9uKHRpbWUuZGlmZihjdXJyZW50VGltZSkpLmFzTWludXRlcygpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG91cnMnOlxuICAgICAgICAgIGZ1dHVyZVRpbWVEaWZmZXJlbmNlID0gTWF0aC5jZWlsKG1vbWVudC5kdXJhdGlvbih0aW1lLmRpZmYoY3VycmVudFRpbWUpKS5hc0hvdXJzKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZnV0dXJlVGltZURpZmZlcmVuY2UgPiBhbGxvd2VkRnV0dXJlVGltZURpZmZlcmVuY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEluc3RydW1lbnRhdGlvbkVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIHRpbWVzdGFtcCBpcyBbJHthbGxvd2VkRnV0dXJlVGltZURpZmZlcmVuY2V9ICR7YWxsb3dlZEZ1dHVyZVRpbWVVbml0fV0gaW50byB0aGUgZnV0dXJlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JtYXRWYWx1ZXMoXG4gICAgZm9ybWF0dGVkVmFsOiB1bmtub3duLFxuICAgIGZvcm1hdHRpbmdUeXBlOiBzdHJpbmcsXG4gICAgdHlwZUZvcm1hdD86IHN0cmluZyxcbiAgICBpbnRlZ3JhdGlvbnNPYmo/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICApIHtcbiAgICBsZXQgY3VyRm9ybWF0dGVkVmFsID0gZm9ybWF0dGVkVmFsO1xuXG4gICAgY29uc3QgZm9ybWF0dGluZ0Z1bmN0aW9ucyA9IHtcbiAgICAgIHRpbWVzdGFtcDogKCkgPT4ge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBmb3JtYXRUaW1lU3RhbXAoU3RyaW5nKGZvcm1hdHRlZFZhbCksIHR5cGVGb3JtYXQpO1xuICAgICAgfSxcbiAgICAgIHNlY29uZFRpbWVzdGFtcDogKCkgPT4ge1xuICAgICAgICBpZiAoIW1vbWVudChTdHJpbmcoZm9ybWF0dGVkVmFsKSwgJ3gnLCB0cnVlKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGZvcm1hdFRpbWVTdGFtcChTdHJpbmcoZm9ybWF0dGVkVmFsKSwgdHlwZUZvcm1hdCkgYXMgbnVtYmVyKSAvIDEwMDAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG1pY3JvU2Vjb25kVGltZXN0YW1wOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBfdmFsID0gbW9tZW50LnVuaXgoTnVtYmVyKG1vbWVudChTdHJpbmcoZm9ybWF0dGVkVmFsKSkuZm9ybWF0KCdYJykpKTtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gdGVtcF92YWwudG9EYXRlKCkuZ2V0VGltZSgpICogMTAwMCArIHRlbXBfdmFsLnRvRGF0ZSgpLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgfSxcbiAgICAgIGZsYXRKc29uOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGZsYXR0ZW5Kc29uKGZvcm1hdHRlZFZhbCk7XG4gICAgICB9LFxuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRfdmFsOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuID0gZm9ybWF0dGVkVmFsIGFzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGVuY29kZVVSSUNvbXBvbmVudCh0X3ZhbCk7XG4gICAgICB9LFxuICAgICAganNvblN0cmluZ2lmeTogKCkgPT4ge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBKU09OLnN0cmluZ2lmeShmb3JtYXR0ZWRWYWwpO1xuICAgICAgfSxcbiAgICAgIGpzb25TdHJpbmdpZnlPbkZsYXR0ZW46ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gSlNPTi5zdHJpbmdpZnkoZmxhdHRlbkpzb24oZm9ybWF0dGVkVmFsKSk7XG4gICAgICB9LFxuICAgICAgZG9iSW5NTUREOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IFN0cmluZyhmb3JtYXR0ZWRWYWwpLnNsaWNlKDUpO1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBTdHJpbmcoY3VyRm9ybWF0dGVkVmFsKS5yZXBsYWNlKCctJywgJy8nKTtcbiAgICAgIH0sXG4gICAgICBqc29uU3RyaW5naWZ5T25PYmplY3Q6ICgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmb3JtYXR0ZWRWYWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gSlNPTi5zdHJpbmdpZnkoZm9ybWF0dGVkVmFsKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG51bWJlckZvclJldmVudWU6ICgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0eXBlb2YgZm9ybWF0dGVkVmFsID09PSAnc3RyaW5nJyB8fCBmb3JtYXR0ZWRWYWwgaW5zdGFuY2VvZiBTdHJpbmcpICYmXG4gICAgICAgICAgZm9ybWF0dGVkVmFsLmNoYXJBdCgwKSA9PT0gJyQnXG4gICAgICAgICkge1xuICAgICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGZvcm1hdHRlZFZhbC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gTnVtYmVyLnBhcnNlRmxvYXQoTnVtYmVyKGN1ckZvcm1hdHRlZFZhbCB8fCAwKS50b0ZpeGVkKDIpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihjdXJGb3JtYXR0ZWRWYWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEluc3RydW1lbnRhdGlvbkVycm9yKCdSZXZlbnVlIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvU3RyaW5nOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IFN0cmluZyhmb3JtYXR0ZWRWYWwpO1xuICAgICAgfSxcbiAgICAgIHRvTnVtYmVyOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IE51bWJlcihmb3JtYXR0ZWRWYWwpO1xuICAgICAgfSxcbiAgICAgIHRvRmxvYXQ6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gcGFyc2VGbG9hdChTdHJpbmcoZm9ybWF0dGVkVmFsKSk7XG4gICAgICB9LFxuICAgICAgdG9JbnQ6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gcGFyc2VJbnQoU3RyaW5nKGZvcm1hdHRlZFZhbCksIDEwKTtcbiAgICAgIH0sXG4gICAgICB0b0xvd2VyOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IFN0cmluZyhmb3JtYXR0ZWRWYWwpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9LFxuICAgICAgaGFzaFRvU2hhMjU2OiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGludGVncmF0aW9uc09iaj8uaGFzaGVkXG4gICAgICAgICAgPyBTdHJpbmcoZm9ybWF0dGVkVmFsKVxuICAgICAgICAgIDogaGFzaFRvU2hhMjU2KFN0cmluZyhmb3JtYXR0ZWRWYWwpKTtcbiAgICAgIH0sXG4gICAgICBnZXRPZmZzZXRJblNlYzogKCkgPT4ge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBnZXRPZmZzZXRJblNlYyhTdHJpbmcoZm9ybWF0dGVkVmFsKSk7XG4gICAgICB9LFxuICAgICAgZG9tYWluVXJsOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IFN0cmluZyhmb3JtYXR0ZWRWYWwpLnJlcGxhY2UoJ2h0dHBzOi8vJywgJycpLnJlcGxhY2UoJ2h0dHA6Ly8nLCAnJyk7XG4gICAgICB9LFxuICAgICAgZG9tYWluVXJsVjI6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdXJsID0gaXNWYWxpZFVybChmb3JtYXR0ZWRWYWwgYXMgc3RyaW5nIHwgVVJMKTtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW5zdHJ1bWVudGF0aW9uRXJyb3IoYEludmFsaWQgVVJMOiAke2Zvcm1hdHRlZFZhbH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSB1cmwuaG9zdG5hbWUucmVwbGFjZSgnd3d3LicsICcnKTtcbiAgICAgIH0sXG4gICAgICBJc0Jvb2xlYW46ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gdHJ1ZTtcbiAgICAgICAgaWYgKCEodHlwZW9mIGZvcm1hdHRlZFZhbCA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQm9vbGVhbiB2YWx1ZSBtaXNzaW5nLCBzbyBkcm9wcGluZyBpdCcpO1xuICAgICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdHJpbTogKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlZFZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBmb3JtYXR0ZWRWYWwudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoZm9ybWF0dGluZ1R5cGUgaW4gZm9ybWF0dGluZ0Z1bmN0aW9ucykge1xuICAgICAgY29uc3QgZm9ybWF0dGluZ0Z1bmN0aW9uID0gZm9ybWF0dGluZ0Z1bmN0aW9uc1tmb3JtYXR0aW5nVHlwZV07XG4gICAgICBmb3JtYXR0aW5nRnVuY3Rpb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VyRm9ybWF0dGVkVmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaGFuZGxlRXhjbHVkZXMoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgZXhjbHVkZXM6IHN0cmluZ1tdLFxuICAgIGZvcm1hdHRlZFZhbDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIGV4Y2x1ZGUgdGhlIGZpZWxkcyBmcm9tIHRoZSBmb3JtYXR0ZWRWYWxcbiAgICAgIGV4Y2x1ZGVzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBkZWxldGUgZm9ybWF0dGVkVmFsW2tleV07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLndhcm4oXCJleGNsdWRlcyBkb2Vzbid0IHdvcmsgd2l0aCBub24tb2JqZWN0IGRhdGEgdHlwZS4gSWdub3JpbmcgZXhjbHVkZXNcIik7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9ybWF0IHRoZSB2YWx1ZSBhcyBwZXIgdGhlIG1ldGFkYXRhIHZhbHVlc1xuICAvLyBFeHBlY3RlZCBtZXRhZGF0YSBrZXlzIGFyZTogKGFjY29yZGluZyB0byBwcmVjZWRlbmNlKVxuICAvLyAtIC0gdHlwZSwgdHlwZUZvcm1hdDogZXhwZWN0ZWQgZGF0YSB0eXBlIGFuZCBpdHMgZm9ybWF0XG4gIC8vIC0gLSB0ZW1wbGF0ZSA6IG5lZWQgdG8gaGF2ZSBhIGhhbmRsZWJhciBleHByZXNzaW9uIHt7dmFsdWV9fVxuICAvLyAtIC0gZXhjbHVkZXMgOiBmaWVsZHMgeW91IHdhbnQgdG8gc3RyaXAgb2YgZnJvbSB0aGUgZmluYWwgdmFsdWUgKHdvcmtzIG9ubHkgZm9yIG9iamVjdClcbiAgLy8gLSAtIC0gLSBleDogXCJhbm9ueW1vdXNJZFwiLCBcInVzZXJJZFwiIGZyb20gdHJhaXRzXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZU1ldGFkYXRhRm9yVmFsdWUoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgbWV0YWRhdGE6IE1hcHBpbmdNZXRhZGF0YSxcbiAgICBkZXN0S2V5OiBzdHJpbmcsXG4gICAgaW50ZWdyYXRpb25zT2JqOiB1bmtub3duLFxuICApIHtcbiAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGluZm9ybWF0aW9uIGZyb20gbWV0YWRhdGFcbiAgICBjb25zdCB7XG4gICAgICB0eXBlLFxuICAgICAgdHlwZUZvcm1hdCxcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZXhjbHVkZXMsXG4gICAgICBtdWx0aWtleU1hcCxcbiAgICAgIHN0cmljdE11bHRpTWFwLFxuICAgICAgdmFsaWRhdGVUaW1lc3RhbXAsXG4gICAgICBhbGxvd2VkS2V5Q2hlY2ssXG4gICAgfSA9IG1ldGFkYXRhO1xuXG4gICAgLy8gaWYgdmFsdWUgaXMgbnVsbCBhbmQgZGVmYXVsdFZhbHVlIGlzIHN1cHBsaWVkIC0gdXNlIHRoYXRcbiAgICBpZiAoIWlzRGVmaW5lZEFuZE5vdE51bGwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IHZhbHVlO1xuICAgIH1cbiAgICAvLyB3ZSd2ZSBnb3QgYSBjb3JyZWN0IHZhbHVlLiBzdGFydCBwcm9jZXNzaW5nXG4gICAgbGV0IGZvcm1hdHRlZFZhbCA9IHZhbHVlO1xuXG4gICAgLyoqXG4gICAgICogdmFsaWRhdGUgYWxsb3dlZCB0aW1lIGRpZmZlcmVuY2VcbiAgICAgKi9cbiAgICBpZiAodmFsaWRhdGVUaW1lc3RhbXApIHtcbiAgICAgIGZvcm1hdHRlZFZhbCA9IE51bWJlcihmb3JtYXR0ZWRWYWwpO1xuICAgICAgaWYgKE51bWJlci5pc05hTihmb3JtYXR0ZWRWYWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBUcmFuc2Zvcm1hdGlvbkVycm9yKCdUaW1lc3RhbXAgaXMgbm90IGEgbnVtYmVyLCBjYW5ub3QgdmFsaWRhdGUnKTtcbiAgICAgIH1cbiAgICAgIEpzb25VdGlscy5jaGVja1RpbWVzdGFtcCh2YWxpZGF0ZVRpbWVzdGFtcCwgZm9ybWF0dGVkVmFsIGFzIG51bWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIHR5cGUuZm9yRWFjaCgoZWFjaFR5cGUpID0+IHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWwgPSBKc29uVXRpbHMuZm9ybWF0VmFsdWVzKFxuICAgICAgICAgICAgZm9ybWF0dGVkVmFsLFxuICAgICAgICAgICAgZWFjaFR5cGUsXG4gICAgICAgICAgICB0eXBlRm9ybWF0LFxuICAgICAgICAgICAgaW50ZWdyYXRpb25zT2JqIGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0dGVkVmFsID0gSnNvblV0aWxzLmZvcm1hdFZhbHVlcyhcbiAgICAgICAgICBmb3JtYXR0ZWRWYWwsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB0eXBlRm9ybWF0LFxuICAgICAgICAgIGludGVncmF0aW9uc09iaiBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdGVtcGxhdGVcbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIGZvcm1hdHRlZFZhbCA9IEpzb25VdGlscy5oYW5kbGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgdmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgZXhjbHVkZXNcbiAgICBpZiAoZXhjbHVkZXMpIHtcbiAgICAgIEpzb25VdGlscy5oYW5kbGVFeGNsdWRlcyh2YWx1ZSwgZXhjbHVkZXMsIGZvcm1hdHRlZFZhbCBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlrZXlNYXBcbiAgICBpZiAobXVsdGlrZXlNYXAgfHwgc3RyaWN0TXVsdGlNYXApIHtcbiAgICAgIGZvcm1hdHRlZFZhbCA9IEpzb25VdGlscy5oYW5kbGVNdWx0aWtleU1hcChcbiAgICAgICAgbXVsdGlrZXlNYXAsXG4gICAgICAgIHN0cmljdE11bHRpTWFwLFxuICAgICAgICBmb3JtYXR0ZWRWYWwsXG4gICAgICAgIGRlc3RLZXksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkS2V5Q2hlY2spIHtcbiAgICAgIGxldCBmb3VuZFZhbCA9IGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsb3dlZEtleUNoZWNrKSkge1xuICAgICAgICBhbGxvd2VkS2V5Q2hlY2suc29tZSgoa2V5KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndG9Mb3dlckNhc2UnOlxuICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWwgPSBTdHJpbmcoZm9ybWF0dGVkVmFsKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RvVXBwZXJDYXNlJzpcbiAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsID0gU3RyaW5nKGZvcm1hdHRlZFZhbCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGtleS5zb3VyY2VWYWwuaW5jbHVkZXMoZm9ybWF0dGVkVmFsIGFzIGFueSkpIHtcbiAgICAgICAgICAgIGZvdW5kVmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZFZhbCkge1xuICAgICAgICBmb3JtYXR0ZWRWYWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZFZhbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZVRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoVGVtcGxhdGUgPSBIYW5kbGViYXJzLmNvbXBpbGUodGVtcGxhdGUudHJpbSgpKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWwgPSBoVGVtcGxhdGUoeyB2YWx1ZSB9KS50cmltKCk7XG4gICAgcmV0dXJuIGZvcm1hdHRlZFZhbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZU11bHRpa2V5TWFwKFxuICAgIG11bHRpa2V5TWFwOlxuICAgICAgfCB7XG4gICAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gICAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkLFxuICAgIHN0cmljdE11bHRpTWFwOlxuICAgICAgfCB7XG4gICAgICAgICAgc291cmNlVmFsOiBzdHJpbmdbXTtcbiAgICAgICAgICBkZXN0VmFsOiBzdHJpbmc7XG4gICAgICAgIH1bXVxuICAgICAgfCB1bmRlZmluZWQsXG4gICAgZm9ybWF0dGVkVmFsOiB1bmtub3duLFxuICAgIGRlc3RLZXk6IHN0cmluZyxcbiAgKSB7XG4gICAgLy8gc291cmNlVmFsIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG4gICAgLy8gaWYgdmFsdWUgaXMgcHJlc2VudCBpbiBzb3VyY2VWYWwsIHJldHVybnMgdGhlIGRlc3RWYWxcbiAgICAvLyBlbHNlIHJldHVybnMgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgLy8gRXhwZWN0ZWQgbXVsdGlrZXlNYXAgdmFsdWU6XG4gICAgLy8gXCJtdWx0aWtleU1hcFwiOiBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgIFwic291cmNlVmFsXCI6IFtcIm1cIiwgXCJNXCIsIFwiTWFsZVwiLCBcIm1hbGVcIl0sXG4gICAgLy8gICAgIFwiZGVzdFZhbFwiOiBcIk1cIlxuICAgIC8vICAgfSxcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgXCJzb3VyY2VWYWxcIjogW1wiZlwiLCBcIkZcIiwgXCJGZW1hbGVcIiwgXCJmZW1hbGVcIl0sXG4gICAgLy8gICAgIFwiZGVzdFZhbFwiOiBcIkZcIlxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgICBsZXQgY3VyRm9ybWF0dGVkVmFsID0gZm9ybWF0dGVkVmFsO1xuICAgIGNvbnN0IGZpbmFsS2V5TWFwID0gbXVsdGlrZXlNYXAgfHwgc3RyaWN0TXVsdGlNYXA7XG4gICAgbGV0IGZvdW5kVmFsID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmluYWxLZXlNYXApKSB7XG4gICAgICBmaW5hbEtleU1hcC5zb21lKChtYXApID0+IHtcbiAgICAgICAgaWYgKCFtYXAuc291cmNlVmFsIHx8ICFpc0RlZmluZWRBbmROb3ROdWxsKG1hcC5kZXN0VmFsKSB8fCAhQXJyYXkuaXNBcnJheShtYXAuc291cmNlVmFsKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdtdWx0aWtleU1hcCBza2lwcGVkOiBzb3VyY2VWYWwgYW5kIGRlc3RWYWwgbXVzdCBiZSBvZiB2YWxpZCB0eXBlJyk7XG4gICAgICAgICAgZm91bmRWYWwgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcC5zb3VyY2VWYWwuaW5jbHVkZXMoU3RyaW5nKGZvcm1hdHRlZFZhbCkpKSB7XG4gICAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gbWFwLmRlc3RWYWw7XG4gICAgICAgICAgZm91bmRWYWwgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci53YXJuKCdtdWx0aWtleU1hcCBza2lwcGVkOiBtdWx0aWtleU1hcCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGlmICghZm91bmRWYWwpIHtcbiAgICAgIGlmIChzdHJpY3RNdWx0aU1hcCkge1xuICAgICAgICB0aHJvdyBuZXcgSW5zdHJ1bWVudGF0aW9uRXJyb3IoYEludmFsaWQgZW50cnkgZm9yIGtleSAke2Rlc3RLZXl9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJGb3JtYXR0ZWRWYWw7XG4gIH1cblxuICAvKipcbiAgICogRGVzY3JpcHRpb246IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBtZXNzYWdlXG4gICAqIFx0XHRcdFx0XHRcdCAgYmFzZWQgb24gdGhlIHNvdXJjZSBrZXlzXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2Ugb2JqZWN0XG4gICAqIEBwYXJhbSBzb3VyY2VLZXlzIC0gdGhlIHNvdXJjZSBrZXlzIHRvIGJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBtZXNzYWdlXG4gICAqIEByZXR1cm5zICB7YW55fSAtIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzb3VyY2Uga2V5XG4gICAqICAgICAgICAgICAgIGlmIHRoZSBzb3VyY2Uga2V5IGlzIG5vdCBwcmVzZW50IGluIHRoZSBtZXNzYWdlXG4gICAqICAgICAgICAgICAgcmV0dXJucyBudWxsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFZhbHVlRnJvbU1lc3NhZ2UoXG4gICAgbWVzc2FnZTogUnVkZGVyU3RhY2tFdmVudCxcbiAgICBzb3VyY2VLZXlzOiAoc3RyaW5nIHwgb2JqZWN0KVtdIHwgc3RyaW5nIHwgb2JqZWN0LFxuICApOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZUtleXMpICYmIHNvdXJjZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHNvdXJjZUtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdMaXN0IHdpdGggc2luZ2xlIGVsZW1lbnQgaXMgbm90IGlkZWFsLiBVc2UgaXQgYXMgc3RyaW5nIGluc3RlYWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdvdCB0aGUgcG9zc2libGUgc291cmNlS2V5c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZUtleSBvZiBzb3VyY2VLZXlzKSB7XG4gICAgICAgIGxldCB2YWw6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBBcnJheTxhbnk+IHwgT2JqZWN0IHwgbnVsbDtcbiAgICAgICAgLy8gaWYgdGhlIHNvdXJjZUtleSBpcyBhbiBvYmplY3Qgd2UgZXhwZWN0IGl0IHRvIGJlIGEgb3BlcmF0aW9uXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlS2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHZhbCA9IEpzb25VdGlscy5oYW5kbGVTb3VyY2VLZXlzT3BlcmF0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBvcGVyYXRpb25PYmplY3Q6IHNvdXJjZUtleSBhcyBPcGVyYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gZ2V0KG1lc3NhZ2UsIHNvdXJjZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCB8fCB2YWwgPT09IGZhbHNlIHx8IHZhbCA9PT0gMCkge1xuICAgICAgICAgIC8vIHJldHVybiBvbmx5IGlmIHRoZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAgICAgICAvLyBlbHNlIGxvb2sgZm9yIG5leHQgcG9zc2libGUgc291cmNlIGluIHByZWNlZGVuY2VcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc291cmNlS2V5cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGdvdCBhIHNpbmdsZSBrZXlcbiAgICAgIC8vIC0gd2UgZG9uJ3QgbmVlZCB0byBpdGVyYXRlIG92ZXIgYSBsb29wIGZvciBhIHNpbmdsZSBwb3NzaWJsZSB2YWx1ZVxuICAgICAgcmV0dXJuIGdldChtZXNzYWdlLCBzb3VyY2VLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2VLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gaWYgdGhlIHNvdXJjZUtleSBpcyBhbiBvYmplY3Qgd2UgZXhwZWN0IGl0IHRvIGJlIGEgb3BlcmF0aW9uXG4gICAgICByZXR1cm4gSnNvblV0aWxzLmhhbmRsZVNvdXJjZUtleXNPcGVyYXRpb24oe1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBvcGVyYXRpb25PYmplY3Q6IHNvdXJjZUtleXMgYXMgeyBvcGVyYXRpb246IHN0cmluZzsgYXJnczogYW55W10gfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3cm9uZyBzb3VyY2VLZXkgdHlwZS4gYWJvcnRcbiAgICAgIC8vIERFVkVMT1BFUiBFUlJPUlxuICAgICAgdGhyb3cgbmV3IFBsYXRmb3JtRXJyb3IoJ1dyb25nIHNvdXJjZUtleSB0eXBlIG9yIGJsYW5rIHNvdXJjZUtleSBhcnJheScpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbjogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIG1lc3NhZ2VcbiAgICogICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc291cmNlIGtleVxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIHRoZSBtZXNzYWdlIG9iamVjdFxuICAgKiBAcGFyYW0gc291cmNlS2V5IC0gdGhlIHNvdXJjZSBrZXkgdG8gYmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIG1lc3NhZ2VcbiAgICogQHJldHVybnMgIHthbnl9IC0gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNvdXJjZSBrZXlcbiAgICogICAgICAgICAgICBpZiB0aGUgc291cmNlIGtleSBpcyBub3QgcHJlc2VudCBpbiB0aGUgbWVzc2FnZVxuICAgKiAgICAgICAgICAgcmV0dXJucyBudWxsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEZpZWxkVmFsdWVGcm9tTWVzc2FnZShtZXNzYWdlOiBSdWRkZXJTdGFja0V2ZW50LCBzb3VyY2VLZXk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc291cmNlS2V5TWFwID0gSnNvblV0aWxzLk1FU1NBR0VfTUFQUElOR1tzb3VyY2VLZXldO1xuICAgIGlmIChzb3VyY2VLZXlNYXApIHtcbiAgICAgIHJldHVybiBKc29uVXRpbHMuZ2V0VmFsdWVGcm9tTWVzc2FnZShtZXNzYWdlLCBzb3VyY2VLZXlNYXApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbjogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBheWxvYWQgYmFzZWQgb24gdGhlIG1hcHBpbmdKc29uXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2Ugb2JqZWN0XG4gICAqIEBwYXJhbSBtYXBwaW5nSnNvbiAtIHRoZSBtYXBwaW5nSnNvbiB0byBiZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcGF5bG9hZFxuICAgKiBAcGFyYW0gZGVzdGluYXRpb25OYW1lIC0gdGhlIGRlc3RpbmF0aW9uIG5hbWUgdG8gYmUgdXNlZCB0byBnZXQgdGhlIG1hcHBpbmdKc29uXG4gICAqIEByZXR1cm5zICB7YW55fSAtIHJldHVybnMgdGhlIHBheWxvYWQgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIG1hcHBpbmdKc29uXG4gICAqICAgICAgICAgICBpZiB0aGUgbWFwcGluZ0pzb24gaXMgbm90IHByZXNlbnQgaW4gdGhlIG1lc3NhZ2Ugb3IgYmxhbmtcbiAgICogICAgICAgICAgIHJldHVybnMgbnVsbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb25zdHJ1Y3RQYXlsb2FkKFxuICAgIG1lc3NhZ2U6IFJ1ZGRlclN0YWNrRXZlbnQsXG4gICAgbWFwcGluZ0pzb246IGFueVtdLFxuICAgIGRlc3RpbmF0aW9uTmFtZTogc3RyaW5nID0gJycsXG4gICk6IGFueSB7XG4gICAgLy8gTWFwcGluZyBKU09OIHNob3VsZCBiZSBhbiBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBpbmdKc29uKSAmJiBtYXBwaW5nSnNvbi5sZW5ndGggPiAwKSB7XG4gICAgICAvLyAtIGNvbnN0cnVjdCBhIGJsYW5rIHBheWxvYWQgYW5kIHJldHVybiBhdCB0aGUgZW5kXG4gICAgICAvLyAtIGlmIHlvdSB0byBuZWVkIG1lcmdlIG11bHRpcGxlIGNvbnN0cnVjdFBheWxvYWQgZG8gaXQgb24gdGhlIHRyYW5zZm9ybWVyIGNvZGVcbiAgICAgIC8vIC0gLSB3aWxsIGdpdmUgYSBjbGVhbmVyIGFwcHJvYWNoXG4gICAgICAvLyAtIC0geW91IGRvbid0IG5lZWQgdG8gaXRlcmF0ZSBvdmVyIG11bHRpcGxlIGxvb3BzIHRvIGNvbnN0cnVjdCBhIHBheWxvYWQgZm9yIGEgc2luZ2xlIGV2ZW50XG4gICAgICBjb25zdCBwYXlsb2FkID0ge307XG5cbiAgICAgIG1hcHBpbmdKc29uLmZvckVhY2goKG1hcHBpbmcpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNvdXJjZUtleXMsXG4gICAgICAgICAgZGVzdEtleSxcbiAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICBzb3VyY2VGcm9tR2VuZXJpY01hcCxcbiAgICAgICAgfToge1xuICAgICAgICAgIHNvdXJjZUtleXM6IChzdHJpbmcgfCBvYmplY3QpW10gfCBzdHJpbmcgfCBvYmplY3Q7XG4gICAgICAgICAgZGVzdEtleTogc3RyaW5nO1xuICAgICAgICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgICAgICAgIG1ldGFkYXRhOiBNYXBwaW5nTWV0YWRhdGE7XG4gICAgICAgICAgc291cmNlRnJvbUdlbmVyaWNNYXA6IGJvb2xlYW47XG4gICAgICAgIH0gPSBtYXBwaW5nO1xuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gZXZlbnQsIHBhc3Mgc291cmNlRnJvbUdlbmVyaWNNYXAgaW4gdGhlIG1hcHBpbmcgdG8gZm9yY2UgdGhpcyB0byB0YWtlIHRoZVxuICAgICAgICAvLyBzb3VyY2VrZXlzIGZyb20gR2VuZXJpY0ZpZWxkTWFwcGluZywgZWxzZSB0YWtlIHRoZSBzb3VyY2VLZXlzIGZyb20gc3BlY2lmaWMgZGVzdGluYXRpb24gbWFwcGluZyBzb3VyY2VLZXlzXG4gICAgICAgIGNvbnN0IGludGVncmF0aW9uc09iaiA9IGlzRW1wdHkoZGVzdGluYXRpb25OYW1lKVxuICAgICAgICAgID8gU2VtYW50aWNVdGlsLmdldEludGVncmF0aW9uc09iaihtZXNzYWdlLCBkZXN0aW5hdGlvbk5hbWUpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEpzb25VdGlscy5oYW5kbGVNZXRhZGF0YUZvclZhbHVlKFxuICAgICAgICAgIHNvdXJjZUZyb21HZW5lcmljTWFwXG4gICAgICAgICAgICA/IHRoaXMuZ2V0RmllbGRWYWx1ZUZyb21NZXNzYWdlKG1lc3NhZ2UsIHNvdXJjZUtleXMgYXMgc3RyaW5nKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZhbHVlRnJvbU1lc3NhZ2UobWVzc2FnZSwgc291cmNlS2V5cyksXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgZGVzdEtleSxcbiAgICAgICAgICBpbnRlZ3JhdGlvbnNPYmosXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgIGlmIChkZXN0S2V5KSB7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9ubHkgaWYgY29ycmVjdFxuICAgICAgICAgICAgc2V0KHBheWxvYWQsIGRlc3RLZXksIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdG8gc2V0IHRvIHJvb3QgYW5kIGZsYXR0ZW4gbGF0ZXJcbiAgICAgICAgICAgIHBheWxvYWRbJyddID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgLy8gdGhyb3cgZXJyb3IgaWYgcmVxaXJlZCB2YWx1ZSBpcyBtaXNzaW5nXG4gICAgICAgICAgdGhyb3cgbmV3IEluc3RydW1lbnRhdGlvbkVycm9yKFxuICAgICAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgdmFsdWUgZnJvbSAke0pTT04uc3RyaW5naWZ5KHNvdXJjZUtleXMpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cblxuICAgIC8vIGludmFsaWQgbWFwcGluZ0pzb25cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5naWZ5KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG59XG4iXX0=
|
|
520
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNERBQW9DO0FBQ3BDLDBEQUE0QjtBQUM1QiwwREFBNEI7QUFDNUIsbUNBQXlEO0FBQ3pELHNFQUFxQztBQUVyQyxrREFBb0M7QUFDcEMsNkRBQXlEO0FBQ3pELCtCQUFxQztBQUNyQywyRUFBdUU7QUFDdkUsaUNBT2dCO0FBQ2hCLHlFQUFxRTtBQUNyRSw0Q0FBc0Q7QUFzQnRELE1BQWEsU0FBUztJQUdwQjs7Ozs7OztPQU9HO0lBQ0ssTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQ3ZDLE9BQU8sRUFDUCxlQUFlLEdBSWhCO1FBQ0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUM7UUFFNUMseUNBQXlDO1FBQ3pDLG9DQUFvQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUNoRSxPQUFPLFVBQVUsQ0FBQzthQUNuQjtZQUNELElBQUksR0FBRyxDQUFDO1lBQ1IsSUFBSSxRQUFRLEdBQWtDLFVBQVUsQ0FBQztZQUN6RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzdCLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFBLG1CQUFHLEVBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDOUQ7WUFDRCxJQUFJLFFBQVEsRUFB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USxFQUNSLE9BQU8sRUFDUCxlQUFlLENBQ2hCLENBQUM7Z0JBRUYsSUFBSSxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO29CQUMzQyxJQUFJLE9BQU8sRUFBRTt3QkFDWCxnQ0FBZ0M7d0JBQ2hDLElBQUEsbUJBQUcsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUM5Qjt5QkFBTTt3QkFDTCxtQ0FBbUM7d0JBQ25DLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7cUJBQ3JCO2lCQUNGO3FCQUFNLElBQUksUUFBUSxFQUFFO29CQUNuQiwwQ0FBMEM7b0JBQzFDLE1BQU0sSUFBSSw0Q0FBb0IsQ0FDNUIsK0JBQStCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDNUQsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFFRCxzQkFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFjO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDOztBQTdsQkgsOEJBOGxCQztBQTdsQmdCLHlCQUFlLEdBQUcsa0NBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSGFuZGxlYmFycyBmcm9tICdoYW5kbGViYXJzJztcbmltcG9ydCBnZXQgZnJvbSAnZ2V0LXZhbHVlJztcbmltcG9ydCBzZXQgZnJvbSAnc2V0LXZhbHVlJztcbmltcG9ydCB7IGV2ZXJ5LCBpc0VtcHR5LCBpc05pbCwgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgUnVkZGVyU3RhY2tFdmVudCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgUGxhdGZvcm1FcnJvciB9IGZyb20gJy4uL2Vycm9ycy9wbGF0Zm9ybV9lcnJvcic7XG5pbXBvcnQgeyBTZW1hbnRpY1V0aWwgfSBmcm9tICcuL3NlbSc7XG5pbXBvcnQgeyBJbnN0cnVtZW50YXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycy9pbnN0cnVtZW50YXRpb25fZXJyb3InO1xuaW1wb3J0IHtcbiAgZmxhdHRlbkpzb24sXG4gIGZvcm1hdFRpbWVTdGFtcCxcbiAgZ2V0T2Zmc2V0SW5TZWMsXG4gIGhhc2hUb1NoYTI1NixcbiAgaXNEZWZpbmVkQW5kTm90TnVsbCxcbiAgaXNWYWxpZFVybCxcbn0gZnJvbSAnLi9taXNjJztcbmltcG9ydCB7IFRyYW5zZm9ybWF0aW9uRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvdHJhbnNmb3JtYXRpb25fZXJyb3InO1xuaW1wb3J0IHsgR0VORVJJQ19NQVBQSU5HX0NPTkZJRyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbnR5cGUgT3BlcmF0aW9uID0ge1xuICBvcGVyYXRpb246IHN0cmluZztcbiAgYXJnczogeyBzb3VyY2VLZXlzOiBzdHJpbmdbXTsgZGVmYXVsdFZhbD86IGFueSB9W107XG59O1xudHlwZSBNYXBwaW5nTWV0YWRhdGEgPSB7XG4gIHR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgdHlwZUZvcm1hdD86IHN0cmluZztcbiAgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIGRlZmF1bHRWYWx1ZT86IHVua25vd247XG4gIGV4Y2x1ZGVzPzogc3RyaW5nW107XG4gIG11bHRpa2V5TWFwPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xuICBzdHJpY3RNdWx0aU1hcD86IHsgc291cmNlVmFsOiBzdHJpbmdbXTsgZGVzdFZhbDogc3RyaW5nIH1bXTtcbiAgdmFsaWRhdGVUaW1lc3RhbXA/OiB7XG4gICAgYWxsb3dlZEZ1dHVyZVRpbWVEaWZmZXJlbmNlOiBudW1iZXI7XG4gICAgYWxsb3dlZEZ1dHVyZVRpbWVVbml0OiBzdHJpbmc7XG4gICAgYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZTogbnVtYmVyO1xuICAgIGFsbG93ZWRQYXN0VGltZVVuaXQ6IHN0cmluZztcbiAgfTtcbiAgYWxsb3dlZEtleUNoZWNrPzogeyB0eXBlOiBzdHJpbmc7IHNvdXJjZVZhbDogc3RyaW5nW10gfVtdO1xufTtcbmV4cG9ydCBjbGFzcyBKc29uVXRpbHMge1xuICBwcml2YXRlIHN0YXRpYyBNRVNTQUdFX01BUFBJTkcgPSBHRU5FUklDX01BUFBJTkdfQ09ORklHO1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbjogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBoYW5kbGUgdGhlIHNvdXJjZSBrZXlzIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIHRoZSBtZXNzYWdlIG9iamVjdFxuICAgKiBAcmV0dXJuc1x0e2FueX1cdC0gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNvdXJjZSBrZXlcbiAgICogXHRcdFx0XHRcdFx0aWYgdGhlIHNvdXJjZSBrZXkgaXMgbm90IHByZXNlbnQgaW4gdGhlIG1lc3NhZ2VcbiAgICogXHRcdFx0XHRcdFx0cmV0dXJucyBudWxsXG4gICAqXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVTb3VyY2VLZXlzT3BlcmF0aW9uKHtcbiAgICBtZXNzYWdlLFxuICAgIG9wZXJhdGlvbk9iamVjdCxcbiAgfToge1xuICAgIG1lc3NhZ2U6IFJ1ZGRlclN0YWNrRXZlbnQ7XG4gICAgb3BlcmF0aW9uT2JqZWN0OiBPcGVyYXRpb247XG4gIH0pOiBhbnkge1xuICAgIGNvbnN0IHsgb3BlcmF0aW9uLCBhcmdzIH0gPSBvcGVyYXRpb25PYmplY3Q7XG5cbiAgICAvLyBwb3B1bGF0ZSB0aGUgdmFsdWVzIGZyb20gdGhlIGFyZ3VtZW50c1xuICAgIC8vIGluIHRoZSBzYW1lIG9yZGVyIGl0IGlzIHBvcHVsYXRlZFxuICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc291cmNlS2V5cywgZGVmYXVsdFZhbCB9ID0gYXJnO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNvdXJjZUtleXMpICYmIHR5cGVvZiBzb3VyY2VLZXlzICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbDtcbiAgICAgIH1cbiAgICAgIGxldCB2YWw7XG4gICAgICBsZXQgZm91bmRLZXk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gc291cmNlS2V5cztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZUtleXMpKSB7XG4gICAgICAgIGZvdW5kS2V5ID0gc291cmNlS2V5cy5maW5kKChzcmNLZXkpID0+IGdldChtZXNzYWdlLCBzcmNLZXkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEtleSkge1xuICAgICAgICB2YWwgPSBnZXQobWVzc2FnZSwgZm91bmRLZXkpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbCB8fCB2YWwgPT09IGZhbHNlIHx8IHZhbCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWw7XG4gICAgfSk7XG5cbiAgICAvLyBxdWljayBzYW5pdHkgY2hlY2sgZm9yIHRoZSB1bmRlZmluZWQgdmFsdWVzIGluIHRoZSBsaXN0LlxuICAgIC8vIGlmIHRoZXJlIGlzIGFueSB1bmRlZmluZWQgdmFsdWVzLCByZXR1cm4gbnVsbFxuICAgIC8vIHdpdGhvdXQgZ29pbmcgZnVydGhlciBmb3Igb3BlcmF0aW9uc1xuICAgIGNvbnN0IGlzQWxsRGVmaW5lZCA9IGV2ZXJ5KGFyZ1ZhbHVlcywgKHYpID0+ICFpc05pbCh2KSk7XG4gICAgaWYgKCFpc0FsbERlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGhhbmRsaW5nIG9wZXJhdGlvbnNcbiAgICBsZXQgcmVzdWx0OiBudW1iZXI7XG4gICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgIGNhc2UgJ211bHRpcGxpY2F0aW9uJzpcbiAgICAgICAgcmVzdWx0ID0gMTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgIGZvciAoY29uc3QgdiBvZiBhcmdWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgIHJlc3VsdCAqPSB2O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIG5vbiBudW1iZXIgYXJndW1lbnQgc2ltcGx5IHJldHVybiBudWxsXG4gICAgICAgICAgICAvLyBub24gbnVtYmVycyBjYW4ndCBiZSBvcGVyYXRlZCBhcml0aG1hdGljYWxseVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICBjYXNlICdhZGRpdGlvbic6XG4gICAgICAgIHJlc3VsdCA9IDA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgYXJnVmFsdWVzKSB7XG4gICAgICAgICAgaWYgKGlzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBub24gbnVtYmVyIGFyZ3VtZW50IHNpbXBseSByZXR1cm4gbnVsbFxuICAgICAgICAgICAgLy8gbm9uIG51bWJlcnMgY2FuJ3QgYmUgb3BlcmF0ZWQgYXJpdGhtYXRpY2FsbHlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY2hlY2tUaW1lc3RhbXAoXG4gICAgdmFsaWRhdGVUaW1lc3RhbXA6IHtcbiAgICAgIGFsbG93ZWRGdXR1cmVUaW1lRGlmZmVyZW5jZTogbnVtYmVyO1xuICAgICAgYWxsb3dlZEZ1dHVyZVRpbWVVbml0OiBzdHJpbmc7XG4gICAgICBhbGxvd2VkUGFzdFRpbWVEaWZmZXJlbmNlOiBudW1iZXI7XG4gICAgICBhbGxvd2VkUGFzdFRpbWVVbml0OiBzdHJpbmc7XG4gICAgfSxcbiAgICBmb3JtYXR0ZWRWYWw6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZSxcbiAgICAgIGFsbG93ZWRQYXN0VGltZVVuaXQsIC8vIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzXG4gICAgICBhbGxvd2VkRnV0dXJlVGltZURpZmZlcmVuY2UsXG4gICAgICBhbGxvd2VkRnV0dXJlVGltZVVuaXQsIC8vIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzXG4gICAgfSA9IHZhbGlkYXRlVGltZXN0YW1wO1xuXG4gICAgbGV0IHBhc3RUaW1lRGlmZmVyZW5jZTtcbiAgICBsZXQgZnV0dXJlVGltZURpZmZlcmVuY2U7XG5cbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG1vbWVudC51bml4KE51bWJlcihtb21lbnQoKS5mb3JtYXQoJ1gnKSkpO1xuICAgIGNvbnN0IHRpbWUgPSBtb21lbnQudW5peChOdW1iZXIobW9tZW50KGZvcm1hdHRlZFZhbCkuZm9ybWF0KCdYJykpKTtcblxuICAgIHN3aXRjaCAoYWxsb3dlZFBhc3RUaW1lVW5pdCkge1xuICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgIHBhc3RUaW1lRGlmZmVyZW5jZSA9IE1hdGguY2VpbChtb21lbnQuZHVyYXRpb24oY3VycmVudFRpbWUuZGlmZih0aW1lKSkuYXNTZWNvbmRzKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICBwYXN0VGltZURpZmZlcmVuY2UgPSBNYXRoLmNlaWwobW9tZW50LmR1cmF0aW9uKGN1cnJlbnRUaW1lLmRpZmYodGltZSkpLmFzTWludXRlcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgIHBhc3RUaW1lRGlmZmVyZW5jZSA9IE1hdGguY2VpbChtb21lbnQuZHVyYXRpb24oY3VycmVudFRpbWUuZGlmZih0aW1lKSkuYXNIb3VycygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGFzdFRpbWVEaWZmZXJlbmNlID4gYWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEluc3RydW1lbnRhdGlvbkVycm9yKFxuICAgICAgICBgQWxsb3dlZCB0aW1lc3RhbXAgaXMgWyR7YWxsb3dlZFBhc3RUaW1lRGlmZmVyZW5jZX0gJHthbGxvd2VkUGFzdFRpbWVVbml0fV0gaW50byB0aGUgcGFzdGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghcGFzdFRpbWVEaWZmZXJlbmNlIHx8IHBhc3RUaW1lRGlmZmVyZW5jZSA8PSAwKSB7XG4gICAgICBzd2l0Y2ggKGFsbG93ZWRGdXR1cmVUaW1lVW5pdCkge1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgICBmdXR1cmVUaW1lRGlmZmVyZW5jZSA9IE1hdGguY2VpbChtb21lbnQuZHVyYXRpb24odGltZS5kaWZmKGN1cnJlbnRUaW1lKSkuYXNTZWNvbmRzKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICBmdXR1cmVUaW1lRGlmZmVyZW5jZSA9IE1hdGguY2VpbChtb21lbnQuZHVyYXRpb24odGltZS5kaWZmKGN1cnJlbnRUaW1lKSkuYXNNaW51dGVzKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgZnV0dXJlVGltZURpZmZlcmVuY2UgPSBNYXRoLmNlaWwobW9tZW50LmR1cmF0aW9uKHRpbWUuZGlmZihjdXJyZW50VGltZSkpLmFzSG91cnMoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChmdXR1cmVUaW1lRGlmZmVyZW5jZSA+IGFsbG93ZWRGdXR1cmVUaW1lRGlmZmVyZW5jZSkge1xuICAgICAgICB0aHJvdyBuZXcgSW5zdHJ1bWVudGF0aW9uRXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgdGltZXN0YW1wIGlzIFske2FsbG93ZWRGdXR1cmVUaW1lRGlmZmVyZW5jZX0gJHthbGxvd2VkRnV0dXJlVGltZVVuaXR9XSBpbnRvIHRoZSBmdXR1cmVgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcm1hdFZhbHVlcyhcbiAgICBmb3JtYXR0ZWRWYWw6IHVua25vd24sXG4gICAgZm9ybWF0dGluZ1R5cGU6IHN0cmluZyxcbiAgICB0eXBlRm9ybWF0Pzogc3RyaW5nLFxuICAgIGludGVncmF0aW9uc09iaj86IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICkge1xuICAgIGxldCBjdXJGb3JtYXR0ZWRWYWwgPSBmb3JtYXR0ZWRWYWw7XG5cbiAgICBjb25zdCBmb3JtYXR0aW5nRnVuY3Rpb25zID0ge1xuICAgICAgdGltZXN0YW1wOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGZvcm1hdFRpbWVTdGFtcChTdHJpbmcoZm9ybWF0dGVkVmFsKSwgdHlwZUZvcm1hdCk7XG4gICAgICB9LFxuICAgICAgc2Vjb25kVGltZXN0YW1wOiAoKSA9PiB7XG4gICAgICAgIGlmICghbW9tZW50KFN0cmluZyhmb3JtYXR0ZWRWYWwpLCAneCcsIHRydWUpLmlzVmFsaWQoKSkge1xuICAgICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IE1hdGguZmxvb3IoXG4gICAgICAgICAgICAoZm9ybWF0VGltZVN0YW1wKFN0cmluZyhmb3JtYXR0ZWRWYWwpLCB0eXBlRm9ybWF0KSBhcyBudW1iZXIpIC8gMTAwMCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbWljcm9TZWNvbmRUaW1lc3RhbXA6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVtcF92YWwgPSBtb21lbnQudW5peChOdW1iZXIobW9tZW50KFN0cmluZyhmb3JtYXR0ZWRWYWwpKS5mb3JtYXQoJ1gnKSkpO1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSB0ZW1wX3ZhbC50b0RhdGUoKS5nZXRUaW1lKCkgKiAxMDAwICsgdGVtcF92YWwudG9EYXRlKCkuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgICB9LFxuICAgICAgZmxhdEpzb246ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gZmxhdHRlbkpzb24oZm9ybWF0dGVkVmFsKTtcbiAgICAgIH0sXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdF92YWw6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gPSBmb3JtYXR0ZWRWYWwgYXMgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gZW5jb2RlVVJJQ29tcG9uZW50KHRfdmFsKTtcbiAgICAgIH0sXG4gICAgICBqc29uU3RyaW5naWZ5OiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IEpTT04uc3RyaW5naWZ5KGZvcm1hdHRlZFZhbCk7XG4gICAgICB9LFxuICAgICAganNvblN0cmluZ2lmeU9uRmxhdHRlbjogKCkgPT4ge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBKU09OLnN0cmluZ2lmeShmbGF0dGVuSnNvbihmb3JtYXR0ZWRWYWwpKTtcbiAgICAgIH0sXG4gICAgICBkb2JJbk1NREQ6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gU3RyaW5nKGZvcm1hdHRlZFZhbCkuc2xpY2UoNSk7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IFN0cmluZyhjdXJGb3JtYXR0ZWRWYWwpLnJlcGxhY2UoJy0nLCAnLycpO1xuICAgICAgfSxcbiAgICAgIGpzb25TdHJpbmdpZnlPbk9iamVjdDogKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlZFZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBKU09OLnN0cmluZ2lmeShmb3JtYXR0ZWRWYWwpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbnVtYmVyRm9yUmV2ZW51ZTogKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHR5cGVvZiBmb3JtYXR0ZWRWYWwgPT09ICdzdHJpbmcnIHx8IGZvcm1hdHRlZFZhbCBpbnN0YW5jZW9mIFN0cmluZykgJiZcbiAgICAgICAgICBmb3JtYXR0ZWRWYWwuY2hhckF0KDApID09PSAnJCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gZm9ybWF0dGVkVmFsLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBOdW1iZXIucGFyc2VGbG9hdChOdW1iZXIoY3VyRm9ybWF0dGVkVmFsIHx8IDApLnRvRml4ZWQoMikpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGN1ckZvcm1hdHRlZFZhbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW5zdHJ1bWVudGF0aW9uRXJyb3IoJ1JldmVudWUgaXMgbm90IGluIHRoZSBjb3JyZWN0IGZvcm1hdCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gU3RyaW5nKGZvcm1hdHRlZFZhbCk7XG4gICAgICB9LFxuICAgICAgdG9OdW1iZXI6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gTnVtYmVyKGZvcm1hdHRlZFZhbCk7XG4gICAgICB9LFxuICAgICAgdG9GbG9hdDogKCkgPT4ge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBwYXJzZUZsb2F0KFN0cmluZyhmb3JtYXR0ZWRWYWwpKTtcbiAgICAgIH0sXG4gICAgICB0b0ludDogKCkgPT4ge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSBwYXJzZUludChTdHJpbmcoZm9ybWF0dGVkVmFsKSwgMTApO1xuICAgICAgfSxcbiAgICAgIHRvTG93ZXI6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gU3RyaW5nKGZvcm1hdHRlZFZhbCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIH0sXG4gICAgICBoYXNoVG9TaGEyNTY6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gaW50ZWdyYXRpb25zT2JqPy5oYXNoZWRcbiAgICAgICAgICA/IFN0cmluZyhmb3JtYXR0ZWRWYWwpXG4gICAgICAgICAgOiBoYXNoVG9TaGEyNTYoU3RyaW5nKGZvcm1hdHRlZFZhbCkpO1xuICAgICAgfSxcbiAgICAgIGdldE9mZnNldEluU2VjOiAoKSA9PiB7XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGdldE9mZnNldEluU2VjKFN0cmluZyhmb3JtYXR0ZWRWYWwpKTtcbiAgICAgIH0sXG4gICAgICBkb21haW5Vcmw6ICgpID0+IHtcbiAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gU3RyaW5nKGZvcm1hdHRlZFZhbCkucmVwbGFjZSgnaHR0cHM6Ly8nLCAnJykucmVwbGFjZSgnaHR0cDovLycsICcnKTtcbiAgICAgIH0sXG4gICAgICBkb21haW5VcmxWMjogKCkgPT4ge1xuICAgICAgICBjb25zdCB1cmwgPSBpc1ZhbGlkVXJsKGZvcm1hdHRlZFZhbCBhcyBzdHJpbmcgfCBVUkwpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnN0cnVtZW50YXRpb25FcnJvcihgSW52YWxpZCBVUkw6ICR7Zm9ybWF0dGVkVmFsfWApO1xuICAgICAgICB9XG4gICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IHVybC5ob3N0bmFtZS5yZXBsYWNlKCd3d3cuJywgJycpO1xuICAgICAgfSxcbiAgICAgIElzQm9vbGVhbjogKCkgPT4ge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSB0cnVlO1xuICAgICAgICBpZiAoISh0eXBlb2YgZm9ybWF0dGVkVmFsID09PSAnYm9vbGVhbicpKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdCb29sZWFuIHZhbHVlIG1pc3NpbmcsIHNvIGRyb3BwaW5nIGl0Jyk7XG4gICAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cmltOiAoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0dGVkVmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGN1ckZvcm1hdHRlZFZhbCA9IGZvcm1hdHRlZFZhbC50cmltKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmIChmb3JtYXR0aW5nVHlwZSBpbiBmb3JtYXR0aW5nRnVuY3Rpb25zKSB7XG4gICAgICBjb25zdCBmb3JtYXR0aW5nRnVuY3Rpb24gPSBmb3JtYXR0aW5nRnVuY3Rpb25zW2Zvcm1hdHRpbmdUeXBlXTtcbiAgICAgIGZvcm1hdHRpbmdGdW5jdGlvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJGb3JtYXR0ZWRWYWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVFeGNsdWRlcyhcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICBleGNsdWRlczogc3RyaW5nW10sXG4gICAgZm9ybWF0dGVkVmFsOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gZXhjbHVkZSB0aGUgZmllbGRzIGZyb20gdGhlIGZvcm1hdHRlZFZhbFxuICAgICAgZXhjbHVkZXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBkZWxldGUgZm9ybWF0dGVkVmFsW2tleV07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLndhcm4oXCJleGNsdWRlcyBkb2Vzbid0IHdvcmsgd2l0aCBub24tb2JqZWN0IGRhdGEgdHlwZS4gSWdub3JpbmcgZXhjbHVkZXNcIik7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9ybWF0IHRoZSB2YWx1ZSBhcyBwZXIgdGhlIG1ldGFkYXRhIHZhbHVlc1xuICAvLyBFeHBlY3RlZCBtZXRhZGF0YSBrZXlzIGFyZTogKGFjY29yZGluZyB0byBwcmVjZWRlbmNlKVxuICAvLyAtIC0gdHlwZSwgdHlwZUZvcm1hdDogZXhwZWN0ZWQgZGF0YSB0eXBlIGFuZCBpdHMgZm9ybWF0XG4gIC8vIC0gLSB0ZW1wbGF0ZSA6IG5lZWQgdG8gaGF2ZSBhIGhhbmRsZWJhciBleHByZXNzaW9uIHt7dmFsdWV9fVxuICAvLyAtIC0gZXhjbHVkZXMgOiBmaWVsZHMgeW91IHdhbnQgdG8gc3RyaXAgb2YgZnJvbSB0aGUgZmluYWwgdmFsdWUgKHdvcmtzIG9ubHkgZm9yIG9iamVjdClcbiAgLy8gLSAtIC0gLSBleDogXCJhbm9ueW1vdXNJZFwiLCBcInVzZXJJZFwiIGZyb20gdHJhaXRzXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZU1ldGFkYXRhRm9yVmFsdWUoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgbWV0YWRhdGE6IE1hcHBpbmdNZXRhZGF0YSxcbiAgICBkZXN0S2V5OiBzdHJpbmcsXG4gICAgaW50ZWdyYXRpb25zT2JqOiB1bmtub3duLFxuICApIHtcbiAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGluZm9ybWF0aW9uIGZyb20gbWV0YWRhdGFcbiAgICBjb25zdCB7XG4gICAgICB0eXBlLFxuICAgICAgdHlwZUZvcm1hdCxcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZXhjbHVkZXMsXG4gICAgICBtdWx0aWtleU1hcCxcbiAgICAgIHN0cmljdE11bHRpTWFwLFxuICAgICAgdmFsaWRhdGVUaW1lc3RhbXAsXG4gICAgICBhbGxvd2VkS2V5Q2hlY2ssXG4gICAgfSA9IG1ldGFkYXRhO1xuXG4gICAgLy8gaWYgdmFsdWUgaXMgbnVsbCBhbmQgZGVmYXVsdFZhbHVlIGlzIHN1cHBsaWVkIC0gdXNlIHRoYXRcbiAgICBpZiAoIWlzRGVmaW5lZEFuZE5vdE51bGwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IHZhbHVlO1xuICAgIH1cbiAgICAvLyB3ZSd2ZSBnb3QgYSBjb3JyZWN0IHZhbHVlLiBzdGFydCBwcm9jZXNzaW5nXG4gICAgbGV0IGZvcm1hdHRlZFZhbCA9IHZhbHVlO1xuXG4gICAgLyoqXG4gICAgICogdmFsaWRhdGUgYWxsb3dlZCB0aW1lIGRpZmZlcmVuY2VcbiAgICAgKi9cbiAgICBpZiAodmFsaWRhdGVUaW1lc3RhbXApIHtcbiAgICAgIGZvcm1hdHRlZFZhbCA9IE51bWJlcihmb3JtYXR0ZWRWYWwpO1xuICAgICAgaWYgKE51bWJlci5pc05hTihmb3JtYXR0ZWRWYWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBUcmFuc2Zvcm1hdGlvbkVycm9yKCdUaW1lc3RhbXAgaXMgbm90IGEgbnVtYmVyLCBjYW5ub3QgdmFsaWRhdGUnKTtcbiAgICAgIH1cbiAgICAgIEpzb25VdGlscy5jaGVja1RpbWVzdGFtcCh2YWxpZGF0ZVRpbWVzdGFtcCwgZm9ybWF0dGVkVmFsIGFzIG51bWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIHR5cGUuZm9yRWFjaCgoZWFjaFR5cGUpID0+IHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWwgPSBKc29uVXRpbHMuZm9ybWF0VmFsdWVzKFxuICAgICAgICAgICAgZm9ybWF0dGVkVmFsLFxuICAgICAgICAgICAgZWFjaFR5cGUsXG4gICAgICAgICAgICB0eXBlRm9ybWF0LFxuICAgICAgICAgICAgaW50ZWdyYXRpb25zT2JqIGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0dGVkVmFsID0gSnNvblV0aWxzLmZvcm1hdFZhbHVlcyhcbiAgICAgICAgICBmb3JtYXR0ZWRWYWwsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICB0eXBlRm9ybWF0LFxuICAgICAgICAgIGludGVncmF0aW9uc09iaiBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgdGVtcGxhdGVcbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIGZvcm1hdHRlZFZhbCA9IEpzb25VdGlscy5oYW5kbGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgdmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgZXhjbHVkZXNcbiAgICBpZiAoZXhjbHVkZXMpIHtcbiAgICAgIEpzb25VdGlscy5oYW5kbGVFeGNsdWRlcyh2YWx1ZSwgZXhjbHVkZXMsIGZvcm1hdHRlZFZhbCBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlrZXlNYXBcbiAgICBpZiAobXVsdGlrZXlNYXAgfHwgc3RyaWN0TXVsdGlNYXApIHtcbiAgICAgIGZvcm1hdHRlZFZhbCA9IEpzb25VdGlscy5oYW5kbGVNdWx0aWtleU1hcChcbiAgICAgICAgbXVsdGlrZXlNYXAsXG4gICAgICAgIHN0cmljdE11bHRpTWFwLFxuICAgICAgICBmb3JtYXR0ZWRWYWwsXG4gICAgICAgIGRlc3RLZXksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkS2V5Q2hlY2spIHtcbiAgICAgIGxldCBmb3VuZFZhbCA9IGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsb3dlZEtleUNoZWNrKSkge1xuICAgICAgICBhbGxvd2VkS2V5Q2hlY2suc29tZSgoa2V5KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChrZXkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndG9Mb3dlckNhc2UnOlxuICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWwgPSBTdHJpbmcoZm9ybWF0dGVkVmFsKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RvVXBwZXJDYXNlJzpcbiAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsID0gU3RyaW5nKGZvcm1hdHRlZFZhbCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGtleS5zb3VyY2VWYWwuaW5jbHVkZXMoZm9ybWF0dGVkVmFsIGFzIGFueSkpIHtcbiAgICAgICAgICAgIGZvdW5kVmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZFZhbCkge1xuICAgICAgICBmb3JtYXR0ZWRWYWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZFZhbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZVRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoVGVtcGxhdGUgPSBIYW5kbGViYXJzLmNvbXBpbGUodGVtcGxhdGUudHJpbSgpKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWwgPSBoVGVtcGxhdGUoeyB2YWx1ZSB9KS50cmltKCk7XG4gICAgcmV0dXJuIGZvcm1hdHRlZFZhbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZU11bHRpa2V5TWFwKFxuICAgIG11bHRpa2V5TWFwOlxuICAgICAgfCB7XG4gICAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gICAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkLFxuICAgIHN0cmljdE11bHRpTWFwOlxuICAgICAgfCB7XG4gICAgICAgICAgc291cmNlVmFsOiBzdHJpbmdbXTtcbiAgICAgICAgICBkZXN0VmFsOiBzdHJpbmc7XG4gICAgICAgIH1bXVxuICAgICAgfCB1bmRlZmluZWQsXG4gICAgZm9ybWF0dGVkVmFsOiB1bmtub3duLFxuICAgIGRlc3RLZXk6IHN0cmluZyxcbiAgKSB7XG4gICAgLy8gc291cmNlVmFsIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG4gICAgLy8gaWYgdmFsdWUgaXMgcHJlc2VudCBpbiBzb3VyY2VWYWwsIHJldHVybnMgdGhlIGRlc3RWYWxcbiAgICAvLyBlbHNlIHJldHVybnMgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgLy8gRXhwZWN0ZWQgbXVsdGlrZXlNYXAgdmFsdWU6XG4gICAgLy8gXCJtdWx0aWtleU1hcFwiOiBbXG4gICAgLy8gICB7XG4gICAgLy8gICAgIFwic291cmNlVmFsXCI6IFtcIm1cIiwgXCJNXCIsIFwiTWFsZVwiLCBcIm1hbGVcIl0sXG4gICAgLy8gICAgIFwiZGVzdFZhbFwiOiBcIk1cIlxuICAgIC8vICAgfSxcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgXCJzb3VyY2VWYWxcIjogW1wiZlwiLCBcIkZcIiwgXCJGZW1hbGVcIiwgXCJmZW1hbGVcIl0sXG4gICAgLy8gICAgIFwiZGVzdFZhbFwiOiBcIkZcIlxuICAgIC8vICAgfVxuICAgIC8vIF1cbiAgICBsZXQgY3VyRm9ybWF0dGVkVmFsID0gZm9ybWF0dGVkVmFsO1xuICAgIGNvbnN0IGZpbmFsS2V5TWFwID0gbXVsdGlrZXlNYXAgfHwgc3RyaWN0TXVsdGlNYXA7XG4gICAgbGV0IGZvdW5kVmFsID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmluYWxLZXlNYXApKSB7XG4gICAgICBmaW5hbEtleU1hcC5zb21lKChtYXApID0+IHtcbiAgICAgICAgaWYgKCFtYXAuc291cmNlVmFsIHx8ICFpc0RlZmluZWRBbmROb3ROdWxsKG1hcC5kZXN0VmFsKSB8fCAhQXJyYXkuaXNBcnJheShtYXAuc291cmNlVmFsKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdtdWx0aWtleU1hcCBza2lwcGVkOiBzb3VyY2VWYWwgYW5kIGRlc3RWYWwgbXVzdCBiZSBvZiB2YWxpZCB0eXBlJyk7XG4gICAgICAgICAgZm91bmRWYWwgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcC5zb3VyY2VWYWwuaW5jbHVkZXMoU3RyaW5nKGZvcm1hdHRlZFZhbCkpKSB7XG4gICAgICAgICAgY3VyRm9ybWF0dGVkVmFsID0gbWFwLmRlc3RWYWw7XG4gICAgICAgICAgZm91bmRWYWwgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci53YXJuKCdtdWx0aWtleU1hcCBza2lwcGVkOiBtdWx0aWtleU1hcCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGlmICghZm91bmRWYWwpIHtcbiAgICAgIGlmIChzdHJpY3RNdWx0aU1hcCkge1xuICAgICAgICB0aHJvdyBuZXcgSW5zdHJ1bWVudGF0aW9uRXJyb3IoYEludmFsaWQgZW50cnkgZm9yIGtleSAke2Rlc3RLZXl9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJGb3JtYXR0ZWRWYWwgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJGb3JtYXR0ZWRWYWw7XG4gIH1cblxuICAvKipcbiAgICogRGVzY3JpcHRpb246IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBtZXNzYWdlXG4gICAqIFx0XHRcdFx0XHRcdCAgYmFzZWQgb24gdGhlIHNvdXJjZSBrZXlzXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2Ugb2JqZWN0XG4gICAqIEBwYXJhbSBzb3VyY2VLZXlzIC0gdGhlIHNvdXJjZSBrZXlzIHRvIGJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBtZXNzYWdlXG4gICAqIEByZXR1cm5zICB7YW55fSAtIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzb3VyY2Uga2V5XG4gICAqICAgICAgICAgICAgIGlmIHRoZSBzb3VyY2Uga2V5IGlzIG5vdCBwcmVzZW50IGluIHRoZSBtZXNzYWdlXG4gICAqICAgICAgICAgICAgcmV0dXJucyBudWxsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFZhbHVlRnJvbU1lc3NhZ2UoXG4gICAgbWVzc2FnZTogUnVkZGVyU3RhY2tFdmVudCxcbiAgICBzb3VyY2VLZXlzOiAoc3RyaW5nIHwgb2JqZWN0KVtdIHwgc3RyaW5nIHwgb2JqZWN0LFxuICApOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZUtleXMpICYmIHNvdXJjZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHNvdXJjZUtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdMaXN0IHdpdGggc2luZ2xlIGVsZW1lbnQgaXMgbm90IGlkZWFsLiBVc2UgaXQgYXMgc3RyaW5nIGluc3RlYWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdvdCB0aGUgcG9zc2libGUgc291cmNlS2V5c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZUtleSBvZiBzb3VyY2VLZXlzKSB7XG4gICAgICAgIGxldCB2YWw6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBBcnJheTxhbnk+IHwgT2JqZWN0IHwgbnVsbDtcbiAgICAgICAgLy8gaWYgdGhlIHNvdXJjZUtleSBpcyBhbiBvYmplY3Qgd2UgZXhwZWN0IGl0IHRvIGJlIGEgb3BlcmF0aW9uXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlS2V5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHZhbCA9IEpzb25VdGlscy5oYW5kbGVTb3VyY2VLZXlzT3BlcmF0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBvcGVyYXRpb25PYmplY3Q6IHNvdXJjZUtleSBhcyBPcGVyYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gZ2V0KG1lc3NhZ2UsIHNvdXJjZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCB8fCB2YWwgPT09IGZhbHNlIHx8IHZhbCA9PT0gMCkge1xuICAgICAgICAgIC8vIHJldHVybiBvbmx5IGlmIHRoZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAgICAgICAvLyBlbHNlIGxvb2sgZm9yIG5leHQgcG9zc2libGUgc291cmNlIGluIHByZWNlZGVuY2VcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc291cmNlS2V5cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGdvdCBhIHNpbmdsZSBrZXlcbiAgICAgIC8vIC0gd2UgZG9uJ3QgbmVlZCB0byBpdGVyYXRlIG92ZXIgYSBsb29wIGZvciBhIHNpbmdsZSBwb3NzaWJsZSB2YWx1ZVxuICAgICAgcmV0dXJuIGdldChtZXNzYWdlLCBzb3VyY2VLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzb3VyY2VLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gaWYgdGhlIHNvdXJjZUtleSBpcyBhbiBvYmplY3Qgd2UgZXhwZWN0IGl0IHRvIGJlIGEgb3BlcmF0aW9uXG4gICAgICByZXR1cm4gSnNvblV0aWxzLmhhbmRsZVNvdXJjZUtleXNPcGVyYXRpb24oe1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBvcGVyYXRpb25PYmplY3Q6IHNvdXJjZUtleXMgYXMgeyBvcGVyYXRpb246IHN0cmluZzsgYXJnczogYW55W10gfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3cm9uZyBzb3VyY2VLZXkgdHlwZS4gYWJvcnRcbiAgICAgIC8vIERFVkVMT1BFUiBFUlJPUlxuICAgICAgdGhyb3cgbmV3IFBsYXRmb3JtRXJyb3IoJ1dyb25nIHNvdXJjZUtleSB0eXBlIG9yIGJsYW5rIHNvdXJjZUtleSBhcnJheScpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbjogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIG1lc3NhZ2VcbiAgICogICAgICAgICAgICAgICBiYXNlZCBvbiB0aGUgc291cmNlIGtleVxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIHRoZSBtZXNzYWdlIG9iamVjdFxuICAgKiBAcGFyYW0gc291cmNlS2V5IC0gdGhlIHNvdXJjZSBrZXkgdG8gYmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIG1lc3NhZ2VcbiAgICogQHJldHVybnMgIHthbnl9IC0gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNvdXJjZSBrZXlcbiAgICogICAgICAgICAgICBpZiB0aGUgc291cmNlIGtleSBpcyBub3QgcHJlc2VudCBpbiB0aGUgbWVzc2FnZVxuICAgKiAgICAgICAgICAgcmV0dXJucyBudWxsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEZpZWxkVmFsdWVGcm9tTWVzc2FnZShtZXNzYWdlOiBSdWRkZXJTdGFja0V2ZW50LCBzb3VyY2VLZXk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc291cmNlS2V5TWFwID0gSnNvblV0aWxzLk1FU1NBR0VfTUFQUElOR1tzb3VyY2VLZXldO1xuICAgIGlmIChzb3VyY2VLZXlNYXApIHtcbiAgICAgIHJldHVybiBKc29uVXRpbHMuZ2V0VmFsdWVGcm9tTWVzc2FnZShtZXNzYWdlLCBzb3VyY2VLZXlNYXApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbjogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBheWxvYWQgYmFzZWQgb24gdGhlIG1hcHBpbmdKc29uXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2Ugb2JqZWN0XG4gICAqIEBwYXJhbSBtYXBwaW5nSnNvbiAtIHRoZSBtYXBwaW5nSnNvbiB0byBiZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcGF5bG9hZFxuICAgKiBAcGFyYW0gZGVzdGluYXRpb25OYW1lIC0gdGhlIGRlc3RpbmF0aW9uIG5hbWUgdG8gYmUgdXNlZCB0byBnZXQgdGhlIG1hcHBpbmdKc29uXG4gICAqIEByZXR1cm5zICB7YW55fSAtIHJldHVybnMgdGhlIHBheWxvYWQgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIG1hcHBpbmdKc29uXG4gICAqICAgICAgICAgICBpZiB0aGUgbWFwcGluZ0pzb24gaXMgbm90IHByZXNlbnQgaW4gdGhlIG1lc3NhZ2Ugb3IgYmxhbmtcbiAgICogICAgICAgICAgIHJldHVybnMgbnVsbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb25zdHJ1Y3RQYXlsb2FkKFxuICAgIG1lc3NhZ2U6IFJ1ZGRlclN0YWNrRXZlbnQsXG4gICAgbWFwcGluZ0pzb246IGFueVtdLFxuICAgIGRlc3RpbmF0aW9uTmFtZTogc3RyaW5nID0gJycsXG4gICk6IGFueSB7XG4gICAgLy8gTWFwcGluZyBKU09OIHNob3VsZCBiZSBhbiBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBpbmdKc29uKSAmJiBtYXBwaW5nSnNvbi5sZW5ndGggPiAwKSB7XG4gICAgICAvLyAtIGNvbnN0cnVjdCBhIGJsYW5rIHBheWxvYWQgYW5kIHJldHVybiBhdCB0aGUgZW5kXG4gICAgICAvLyAtIGlmIHlvdSB0byBuZWVkIG1lcmdlIG11bHRpcGxlIGNvbnN0cnVjdFBheWxvYWQgZG8gaXQgb24gdGhlIHRyYW5zZm9ybWVyIGNvZGVcbiAgICAgIC8vIC0gLSB3aWxsIGdpdmUgYSBjbGVhbmVyIGFwcHJvYWNoXG4gICAgICAvLyAtIC0geW91IGRvbid0IG5lZWQgdG8gaXRlcmF0ZSBvdmVyIG11bHRpcGxlIGxvb3BzIHRvIGNvbnN0cnVjdCBhIHBheWxvYWQgZm9yIGEgc2luZ2xlIGV2ZW50XG4gICAgICBjb25zdCBwYXlsb2FkID0ge307XG5cbiAgICAgIG1hcHBpbmdKc29uLmZvckVhY2goKG1hcHBpbmcpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNvdXJjZUtleXMsXG4gICAgICAgICAgZGVzdEtleSxcbiAgICAgICAgICByZXF1aXJlZCxcbiAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICBzb3VyY2VGcm9tR2VuZXJpY01hcCxcbiAgICAgICAgfToge1xuICAgICAgICAgIHNvdXJjZUtleXM6IChzdHJpbmcgfCBvYmplY3QpW10gfCBzdHJpbmcgfCBvYmplY3Q7XG4gICAgICAgICAgZGVzdEtleTogc3RyaW5nO1xuICAgICAgICAgIHJlcXVpcmVkOiBib29sZWFuO1xuICAgICAgICAgIG1ldGFkYXRhOiBNYXBwaW5nTWV0YWRhdGE7XG4gICAgICAgICAgc291cmNlRnJvbUdlbmVyaWNNYXA6IGJvb2xlYW47XG4gICAgICAgIH0gPSBtYXBwaW5nO1xuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gZXZlbnQsIHBhc3Mgc291cmNlRnJvbUdlbmVyaWNNYXAgaW4gdGhlIG1hcHBpbmcgdG8gZm9yY2UgdGhpcyB0byB0YWtlIHRoZVxuICAgICAgICAvLyBzb3VyY2VrZXlzIGZyb20gR2VuZXJpY0ZpZWxkTWFwcGluZywgZWxzZSB0YWtlIHRoZSBzb3VyY2VLZXlzIGZyb20gc3BlY2lmaWMgZGVzdGluYXRpb24gbWFwcGluZyBzb3VyY2VLZXlzXG4gICAgICAgIGNvbnN0IGludGVncmF0aW9uc09iaiA9IGlzRW1wdHkoZGVzdGluYXRpb25OYW1lKVxuICAgICAgICAgID8gU2VtYW50aWNVdGlsLmdldEludGVncmF0aW9uc09iaihtZXNzYWdlLCBkZXN0aW5hdGlvbk5hbWUpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEpzb25VdGlscy5oYW5kbGVNZXRhZGF0YUZvclZhbHVlKFxuICAgICAgICAgIHNvdXJjZUZyb21HZW5lcmljTWFwXG4gICAgICAgICAgICA/IHRoaXMuZ2V0RmllbGRWYWx1ZUZyb21NZXNzYWdlKG1lc3NhZ2UsIHNvdXJjZUtleXMgYXMgc3RyaW5nKVxuICAgICAgICAgICAgOiB0aGlzLmdldFZhbHVlRnJvbU1lc3NhZ2UobWVzc2FnZSwgc291cmNlS2V5cyksXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgZGVzdEtleSxcbiAgICAgICAgICBpbnRlZ3JhdGlvbnNPYmosXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgIGlmIChkZXN0S2V5KSB7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHZhbHVlIG9ubHkgaWYgY29ycmVjdFxuICAgICAgICAgICAgc2V0KHBheWxvYWQsIGRlc3RLZXksIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdG8gc2V0IHRvIHJvb3QgYW5kIGZsYXR0ZW4gbGF0ZXJcbiAgICAgICAgICAgIHBheWxvYWRbJyddID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgLy8gdGhyb3cgZXJyb3IgaWYgcmVxaXJlZCB2YWx1ZSBpcyBtaXNzaW5nXG4gICAgICAgICAgdGhyb3cgbmV3IEluc3RydW1lbnRhdGlvbkVycm9yKFxuICAgICAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgdmFsdWUgZnJvbSAke0pTT04uc3RyaW5naWZ5KHNvdXJjZUtleXMpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cblxuICAgIC8vIGludmFsaWQgbWFwcGluZ0pzb25cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5naWZ5KHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG59XG4iXX0=
|