@datagrok-libraries/utils 4.2.17 → 4.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/package.json +1 -1
- package/src/test.d.ts +2 -0
- package/src/test.d.ts.map +1 -1
- package/src/test.js +4 -4
package/CHANGELOG.md
CHANGED
package/package.json
CHANGED
package/src/test.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare const tests: {
|
|
|
10
10
|
clear?: boolean;
|
|
11
11
|
timeout?: number;
|
|
12
12
|
benchmarks?: boolean;
|
|
13
|
+
benchmarkTimeout?: number;
|
|
13
14
|
};
|
|
14
15
|
};
|
|
15
16
|
export declare let currentCategory: string;
|
|
@@ -18,6 +19,7 @@ export declare namespace assure {
|
|
|
18
19
|
}
|
|
19
20
|
export interface TestOptions {
|
|
20
21
|
timeout?: number;
|
|
22
|
+
benchmarkTimeout?: number;
|
|
21
23
|
unhandledExceptionTimeout?: number;
|
|
22
24
|
skipReason?: string;
|
|
23
25
|
isAggregated?: boolean;
|
package/src/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAalC,eAAO,MAAM,KAAK,EAAE;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC/E,UAAU,CAAC,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
|
package/src/test.js
CHANGED
|
@@ -274,7 +274,7 @@ export function initAutoTests(package_, module) {
|
|
|
274
274
|
// eslint-disable-next-line no-throw-literal
|
|
275
275
|
if (typeof res === 'boolean' && !res)
|
|
276
276
|
throw `Failed: ${tests[i]}, expected true, got ${res}`;
|
|
277
|
-
}), { skipReason: map.skip, timeout: map.timeout });
|
|
277
|
+
}), { skipReason: map.skip, timeout: DG.Test.isInBenchmark ? map.benchmarkTimeout : map.timeout });
|
|
278
278
|
if (map.cat) {
|
|
279
279
|
const cat = autoTestsCatName + ': ' + map.cat;
|
|
280
280
|
test.category = cat;
|
|
@@ -388,7 +388,7 @@ export function runTests(options) {
|
|
|
388
388
|
t[i].options.benchmark = value.isAllTestsEnabledBenchmarkMode || false;
|
|
389
389
|
}
|
|
390
390
|
}
|
|
391
|
-
let testRun = yield execTest(t[i], options === null || options === void 0 ? void 0 : options.test, logs, value.timeout, package_.name, options.verbose);
|
|
391
|
+
let testRun = yield execTest(t[i], options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? value.benchmarkTimeout : value.timeout, package_.name, options.verbose);
|
|
392
392
|
if (testRun)
|
|
393
393
|
res.push(testRun);
|
|
394
394
|
grok.shell.closeAll();
|
|
@@ -397,7 +397,7 @@ export function runTests(options) {
|
|
|
397
397
|
}
|
|
398
398
|
else {
|
|
399
399
|
for (let i = 0; i < t.length; i++) {
|
|
400
|
-
let testRun = yield execTest(t[i], options === null || options === void 0 ? void 0 : options.test, logs, value.timeout, package_.name, options.verbose);
|
|
400
|
+
let testRun = yield execTest(t[i], options === null || options === void 0 ? void 0 : options.test, logs, DG.Test.isInBenchmark ? value.benchmarkTimeout : value.timeout, package_.name, options.verbose);
|
|
401
401
|
if (testRun)
|
|
402
402
|
res.push(testRun);
|
|
403
403
|
}
|
|
@@ -661,4 +661,4 @@ export function testViewer(v, df, options) {
|
|
|
661
661
|
}
|
|
662
662
|
});
|
|
663
663
|
}
|
|
664
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FNZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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QUV4RSxvQ0FBb0M7WUFDcEMsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxlQUFlLE1BQUssS0FBSyxFQUFFO2dCQUN0QyxFQUFFLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDckIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVztvQkFDdEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzVHO1lBRUQsNkJBQTZCO1lBQzdCLE1BQU0sa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDckYsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsV0FBVztnQkFDdEIsTUFBTSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBRTlHO2dCQUFTO1lBQ1IsaURBQWlEO1lBQ2pELHlCQUF5QjtZQUN6Qix5QkFBeUI7U0FDMUI7O0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0ZXN0RGF0YSB9IGZyb20gJy4vZGF0YWZyYW1lLXV0aWxzJztcbmltcG9ydCBUaW1lb3V0ID0gTm9kZUpTLlRpbWVvdXQ7XG5pbXBvcnQgeyBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgZmlsdGVyQXN5bmMsIGxvYWRMYXlvdXQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIHRlc3RWaWV3ZXJJbnRlcm5hbCB9IGZyb20gJy4vdGVzdC12aWV3ZXItdXRpbHMnO1xuXG5jb25zdCBTVEFOREFSVF9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBCRU5DSE1BUktfVElNRU9VVCA9IDEwODAwMDAwO1xuXG5jb25zdCBzdGRMb2cgPSBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkSW5mbyA9IGNvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5cbmV4cG9ydCBjb25zdCB0ZXN0czoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgdGVzdHM/OiBUZXN0W10sIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD4sIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBiZWZvcmVTdGF0dXM/OiBzdHJpbmcsIGFmdGVyU3RhdHVzPzogc3RyaW5nLCBjbGVhcj86IGJvb2xlYW4sIHRpbWVvdXQ/OiBudW1iZXIsXG4gICAgYmVuY2htYXJrcz86IGJvb2xlYW5cbiAgfVxufSA9IHt9O1xuXG5jb25zdCBhdXRvVGVzdHNDYXROYW1lID0gJ0F1dG8gVGVzdHMnO1xuY29uc3QgZGVtb0NhdE5hbWUgPSAnRGVtbyc7XG5jb25zdCBkZXRlY3RvcnNDYXROYW1lID0gJ0RldGVjdG9ycyc7XG5jb25zdCBjb3JlQ2F0TmFtZSA9ICdDb3JlJztcbmNvbnN0IHdhc1JlZ2lzdGVyZWQ6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTogc3RyaW5nO1xuXG5leHBvcnQgbmFtZXNwYWNlIGFzc3VyZSB7XG4gIGV4cG9ydCBmdW5jdGlvbiBub3ROdWxsKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lID09IG51bGwgPyAnVmFsdWUnIDogbmFtZX0gbm90IGRlZmluZWRgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgdW5oYW5kbGVkRXhjZXB0aW9uVGltZW91dD86IG51bWJlcjtcbiAgc2tpcFJlYXNvbj86IHN0cmluZztcbiAgaXNBZ2dyZWdhdGVkPzogYm9vbGVhbjtcbiAgYmVuY2htYXJrPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeU9wdGlvbnMge1xuICBjbGVhcj86IGJvb2xlYW47XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVGVzdENvbnRleHQge1xuICBjYXRjaFVuaGFuZGxlZCA9IHRydWU7XG4gIHJlcG9ydCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGNoVW5oYW5kbGVkPzogYm9vbGVhbiwgcmVwb3J0PzogYm9vbGVhbikge1xuICAgIGlmIChjYXRjaFVuaGFuZGxlZCAhPT0gdW5kZWZpbmVkKSB0aGlzLmNhdGNoVW5oYW5kbGVkID0gY2F0Y2hVbmhhbmRsZWQ7XG4gICAgaWYgKHJlcG9ydCAhPT0gdW5kZWZpbmVkKSB0aGlzLnJlcG9ydCA9IHJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3Qge1xuICB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIG5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgb3B0aW9ucz86IFRlc3RPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpIHtcbiAgICB0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBvcHRpb25zID8/PSB7fTtcbiAgICBvcHRpb25zLnRpbWVvdXQgPz89IFNUQU5EQVJUX1RJTUVPVVQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRlc3QgPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0ZXN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RXZlbnQ8VD4oZXZlbnQ6IE9ic2VydmFibGU8VD4sXG4gIGhhbmRsZXI6IChhcmdzOiBUKSA9PiB2b2lkLCB0cmlnZ2VyOiAoKSA9PiB2b2lkLCBtczogbnVtYmVyID0gMCwgcmVhc29uOiBzdHJpbmcgPSBgdGltZW91dGBcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzOiBUKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKGFyZ3MpO1xuICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdChyZWFzb24pO1xuICAgIH0sIG1zKTtcbiAgICB0cmlnZ2VyKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50QXN5bmM8VD4oZXZlbnQ6IE9ic2VydmFibGU8VD4sXG4gIGhhbmRsZXI6IChhcmdzOiBUKSA9PiBQcm9taXNlPHZvaWQ+LCB0cmlnZ2VyOiAoKSA9PiB2b2lkLCBtczogbnVtYmVyID0gMCwgcmVhc29uOiBzdHJpbmcgPSBgdGltZW91dGBcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc3ViID0gZXZlbnQuc3Vic2NyaWJlKChhcmdzOiBUKSA9PiB7XG4gICAgICBoYW5kbGVyKGFyZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCdPSycpO1xuICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZTogc3RyaW5nLCB0ZXN0OiAoKSA9PiBQcm9taXNlPGFueT4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyk6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzIS5wdXNoKG5ldyBUZXN0KGN1cnJlbnRDYXRlZ29yeSwgbmFtZSwgdGVzdCwgb3B0aW9ucykpO1xufVxuXG4vKiBUZXN0cyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgbm90IGVxdWFsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdChhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSA9IHRydWUsIGVycm9yPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChlcnJvcilcbiAgICBlcnJvciA9IGAke2Vycm9yfSwgYDtcbiAgZWxzZSBlcnJvciA9ICcnO1xuICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3J9RXhwZWN0ZWQgXCIke2V4cGVjdGVkfVwiLCBnb3QgXCIke2FjdHVhbH1cImApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RmxvYXQoYWN0dWFsOiBudW1iZXIsIGV4cGVjdGVkOiBudW1iZXIsIHRvbGVyYW5jZSA9IDAuMDAxLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoKGFjdHVhbCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZICYmIGV4cGVjdGVkID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHx8XG4gICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZICYmIGV4cGVjdGVkID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpIHx8XG4gICAgKGFjdHVhbCA9PT0gTnVtYmVyLk5hTiAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5hTikgfHwgKGlzTmFOKGFjdHVhbCkgJiYgaXNOYU4oZXhwZWN0ZWQpKSlcbiAgICByZXR1cm47XG4gIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICBleHBlY3QoYXJlRXF1YWwsIHRydWUsIGAke2Vycm9yID8/ICcnfSAodG9sZXJhbmNlID0gJHt0b2xlcmFuY2V9KWApO1xuICBpZiAoIWFyZUVxdWFsKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdFRhYmxlKGFjdHVhbDogREcuRGF0YUZyYW1lLCBleHBlY3RlZDogREcuRGF0YUZyYW1lLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBleHBlY3RlZFJvd0NvdW50ID0gZXhwZWN0ZWQucm93Q291bnQ7XG4gIGNvbnN0IGFjdHVhbFJvd0NvdW50ID0gYWN0dWFsLnJvd0NvdW50O1xuICBleHBlY3QoYWN0dWFsUm93Q291bnQsIGV4cGVjdGVkUm93Q291bnQsIGAke2Vycm9yID8/ICcnfSwgcm93IGNvdW50YCk7XG5cbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgZXhwZWN0ZWQuY29sdW1ucykge1xuICAgIGNvbnN0IGFjdHVhbENvbHVtbiA9IGFjdHVhbC5jb2x1bW5zLmJ5TmFtZShjb2x1bW4ubmFtZSk7XG4gICAgaWYgKGFjdHVhbENvbHVtbiA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gbm90IGZvdW5kYCk7XG4gICAgaWYgKGFjdHVhbENvbHVtbi50eXBlICE9IGNvbHVtbi50eXBlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJHtjb2x1bW4ubmFtZX0gdHlwZSBleHBlY3RlZCAke2NvbHVtbi50eXBlfSBnb3QgJHthY3R1YWxDb2x1bW4udHlwZX1gKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkUm93Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZ2V0KGkpO1xuICAgICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxDb2x1bW4uZ2V0KGkpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09IERHLlRZUEUuRkxPQVQpXG4gICAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgMC4wMDAxLCBlcnJvcik7XG4gICAgICBlbHNlIGlmIChjb2x1bW4udHlwZSA9PSBERy5UWVBFLkRBVEVfVElNRSlcbiAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLmlzU2FtZSh2YWx1ZSksIHRydWUsIGVycm9yKTtcbiAgICAgIGVsc2VcbiAgICAgICAgZXhwZWN0KGFjdHVhbFZhbHVlLCB2YWx1ZSwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0T2JqZWN0KGFjdHVhbDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgZXhwZWN0ZWQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgZm9yIChjb25zdCBbZXhwZWN0ZWRLZXksIGV4cGVjdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkKSkge1xuICAgIGlmICghYWN0dWFsLmhhc093blByb3BlcnR5KGV4cGVjdGVkS2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcHJvcGVydHkgXCIke2V4cGVjdGVkS2V5fVwiIG5vdCBmb3VuZGApO1xuXG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBhY3R1YWxbZXhwZWN0ZWRLZXldO1xuICAgIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkVmFsdWUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIGV4cGVjdEFycmF5KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChOdW1iZXIuaXNGaW5pdGUoYWN0dWFsVmFsdWUpICYmIE51bWJlci5pc0Zpbml0ZShleHBlY3RlZFZhbHVlKSlcbiAgICAgIGV4cGVjdEZsb2F0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSAhPSBleHBlY3RlZFZhbHVlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAoJHtleHBlY3RlZFZhbHVlfSkgZm9yIGtleSAnJHtleHBlY3RlZEtleX0nLCBnb3QgKCR7YWN0dWFsVmFsdWV9KWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RBcnJheShhY3R1YWw6IEFycmF5TGlrZTxhbnk+LCBleHBlY3RlZDogQXJyYXlMaWtlPGFueT4pIHtcbiAgY29uc3QgYWN0dWFsTGVuZ3RoID0gYWN0dWFsLmxlbmd0aDtcbiAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG5cbiAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXlzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RoOiBhY3R1YWwgYXJyYXkgbGVuZ3RoIGlzICR7YWN0dWFsTGVuZ3RofSBgICtcbiAgICAgIGBhbmQgZXhwZWN0ZWQgYXJyYXkgbGVuZ3RoIGlzICR7ZXhwZWN0ZWRMZW5ndGh9YCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICBlbHNlIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRbaV0gaW5zdGFuY2VvZiBPYmplY3QpXG4gICAgICBleHBlY3RPYmplY3QoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIHRlc3Qgc3VpdGUuICovXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZywgdGVzdHNfOiAoKSA9PiB2b2lkLCBvcHRpb25zPzogQ2F0ZWdvcnlPcHRpb25zKTogdm9pZCB7XG4gIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICB0ZXN0c18oKTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0pIHtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmNsZWFyID0gb3B0aW9ucz8uY2xlYXIgPz8gdHJ1ZTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVuY2htYXJrcyA9IG9wdGlvbnM/LmJlbmNobWFya3M7XG4gIH1cbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlZm9yZSA9IGJlZm9yZTtcbn1cblxuLyogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0ZXN0cyBpbiB0aGlzIGNhdGVnb3J5IGFyZSBleGVjdXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZnRlcihhZnRlcjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5cbmZ1bmN0aW9uIGFkZE5hbWVzcGFjZShzOiBzdHJpbmcsIGY6IERHLkZ1bmMpOiBzdHJpbmcge1xuICByZXR1cm4gcy5yZXBsYWNlKG5ldyBSZWdFeHAoZi5uYW1lLCAnZ2knKSwgZi5ucU5hbWUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdEF1dG9UZXN0cyhwYWNrYWdlXzogREcuUGFja2FnZSwgbW9kdWxlPzogYW55KSB7XG4gIGNvbnN0IHBhY2thZ2VJZCA9IHBhY2thZ2VfLmlkO1xuICBpZiAod2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdKSByZXR1cm47XG4gIGNvbnN0IG1vZHVsZVRlc3RzID0gbW9kdWxlID8gbW9kdWxlLnRlc3RzIDogdGVzdHM7XG4gIGlmIChtb2R1bGVUZXN0c1thdXRvVGVzdHNDYXROYW1lXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdICE9PSB1bmRlZmluZWQgfHxcbiAgICBPYmplY3Qua2V5cyhtb2R1bGVUZXN0cykuZmluZCgoYykgPT4gYy5zdGFydHNXaXRoKGF1dG9UZXN0c0NhdE5hbWUpIHx8IGMuc3RhcnRzV2l0aChjb3JlQ2F0TmFtZSkpKSB7XG4gICAgd2FzUmVnaXN0ZXJlZFtwYWNrYWdlSWRdID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhY2thZ2VfLm5hbWUgPT09ICdEZXZUb29scycgfHwgKCEhbW9kdWxlICYmIG1vZHVsZS5fcGFja2FnZS5uYW1lID09PSAnRGV2VG9vbHMnKSkge1xuICAgIGZvciAoY29uc3QgZiBvZiAoPGFueT53aW5kb3cpLmRhcnRUZXN0cykge1xuICAgICAgY29uc3QgYXJyID0gZi5uYW1lLnNwbGl0KC9cXHMqXFx8XFxzKiEvZyk7XG4gICAgICBsZXQgbmFtZSA9IGFyci5wb3AoKSA/PyBmLm5hbWU7XG4gICAgICBsZXQgY2F0ID0gYXJyLmxlbmd0aCA/IGNvcmVDYXROYW1lICsgJzogJyArIGFyci5qb2luKCc6ICcpIDogY29yZUNhdE5hbWU7XG4gICAgICBsZXQgZnVsbE5hbWUgOiBzdHJpbmdbXT1uYW1lLnNwbGl0KCcgfCAnKTtcbiAgICAgIG5hbWUgPSBmdWxsTmFtZVtmdWxsTmFtZS5sZW5ndGgtMV07XG4gICAgICBmdWxsTmFtZS51bnNoaWZ0KGNhdCk7XG4gICAgICBmdWxsTmFtZS5wb3AoKTtcbiAgICAgIGNhdCA9IGZ1bGxOYW1lLmpvaW4oJzogJyk7XG4gICAgICBpZiAobW9kdWxlVGVzdHNbY2F0XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBtb2R1bGVUZXN0c1tjYXRdID0geyB0ZXN0czogW10sIGNsZWFyOiB0cnVlIH07XG4gICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzLnB1c2gobmV3IFRlc3QoY2F0LCBuYW1lLCBmLnRlc3QsIHsgaXNBZ2dyZWdhdGVkOiBmYWxzZSwgdGltZW91dDogU1RBTkRBUlRfVElNRU9VVCB9KSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG1vZHVsZUF1dG9UZXN0cyA9IFtdO1xuICBjb25zdCBtb2R1bGVEZW1vID0gW107XG4gIGNvbnN0IG1vZHVsZURldGVjdG9ycyA9IFtdO1xuICBjb25zdCBwYWNrRnVuY3Rpb25zID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5maWx0ZXIoYHBhY2thZ2UuaWQgPSBcIiR7cGFja2FnZUlkfVwiYCkubGlzdCgpO1xuICBjb25zdCByZWcgPSBuZXcgUmVnRXhwKC9za2lwOlxccyooW14sXFxzXSspfHdhaXQ6XFxzKihcXGQrKXxjYXQ6XFxzKihbXixcXHNdKyl8dGltZW91dDpcXHMqKFxcZCspL2cpO1xuICBmb3IgKGNvbnN0IGYgb2YgcGFja0Z1bmN0aW9ucykge1xuICAgIGNvbnN0IHRlc3RzID0gZi5vcHRpb25zWyd0ZXN0J107XG4gICAgY29uc3QgZGVtbyA9IGYub3B0aW9uc1snZGVtb1BhdGgnXTtcbiAgICBpZiAoKHRlc3RzICYmIEFycmF5LmlzQXJyYXkodGVzdHMpICYmIHRlc3RzLmxlbmd0aCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzID0gKHRlc3RzW2ldIGFzIHN0cmluZykubWF0Y2hBbGwocmVnKTtcbiAgICAgICAgY29uc3QgbWFwOiB7IHNraXA/OiBzdHJpbmcsIHdhaXQ/OiBudW1iZXIsIGNhdD86IHN0cmluZywgdGltZW91dD86IG51bWJlciB9ID0ge307XG4gICAgICAgIEFycmF5LmZyb20ocmVzKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgICBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3NraXAnKSkgbWFwWydza2lwJ10gPSBhcnJbMV07XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3dhaXQnKSkgbWFwWyd3YWl0J10gPSBwYXJzZUludChhcnJbMl0pO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCdjYXQnKSkgbWFwWydjYXQnXSA9IGFyclszXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgndGltZW91dCcpKSBtYXBbJ3RpbWVvdXQnXSA9IHBhcnNlSW50KGFycls0XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoYXV0b1Rlc3RzQ2F0TmFtZSwgdGVzdHMubGVuZ3RoID09PSAxID8gZi5uYW1lIDogYCR7Zi5uYW1lfSAke2kgKyAxfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgIGlmIChtYXAud2FpdCkgYXdhaXQgZGVsYXkobWFwLndhaXQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdib29sZWFuJyAmJiAhcmVzKSB0aHJvdyBgRmFpbGVkOiAke3Rlc3RzW2ldfSwgZXhwZWN0ZWQgdHJ1ZSwgZ290ICR7cmVzfWA7XG4gICAgICAgIH0sIHsgc2tpcFJlYXNvbjogbWFwLnNraXAsIHRpbWVvdXQ6IG1hcC50aW1lb3V0IH0pO1xuICAgICAgICBpZiAobWFwLmNhdCkge1xuICAgICAgICAgIGNvbnN0IGNhdDogc3RyaW5nID0gYXV0b1Rlc3RzQ2F0TmFtZSArICc6ICcgKyBtYXAuY2F0O1xuICAgICAgICAgIHRlc3QuY2F0ZWdvcnkgPSBjYXQ7XG4gICAgICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0gPSB7IHRlc3RzOiBbXSwgY2xlYXI6IHRydWUgfTtcbiAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzLnB1c2godGVzdCk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIG1vZHVsZUF1dG9UZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVtbykge1xuICAgICAgY29uc3Qgd2FpdCA9IGYub3B0aW9uc1snZGVtb1dhaXQnXSA/IHBhcnNlSW50KGYub3B0aW9uc1snZGVtb1dhaXQnXSkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGVtb0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgICAgICAgYXdhaXQgZi5hcHBseSgpO1xuICAgICAgICBhd2FpdCBkZWxheSh3YWl0ID8gd2FpdCA6IDIwMDApO1xuICAgICAgICBjb25zdCB1bmhhbmRsZWQgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgICAgaWYgKHVuaGFuZGxlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5oYW5kbGVkKTtcblxuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ2RlbW9Ta2lwJ10gfSk7XG4gICAgICBtb2R1bGVEZW1vLnB1c2godGVzdCk7XG4gICAgfVxuICAgIGlmIChmLmhhc1RhZygnc2VtVHlwZURldGVjdG9yJykpIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZXRlY3RvcnNDYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGVzdERhdGEuY2xvbmUoKS5jb2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZi5hcHBseShbY29sXSk7XG4gICAgICAgICAgYXJyLnB1c2gocmVzIHx8IGNvbC5zZW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoYXJyLmZpbHRlcigoaSkgPT4gaSkubGVuZ3RoLCAxKTtcbiAgICAgIH0sIHsgc2tpcFJlYXNvbjogZi5vcHRpb25zWydza2lwVGVzdCddIH0pO1xuICAgICAgbW9kdWxlRGV0ZWN0b3JzLnB1c2godGVzdCk7XG4gICAgfVxuICB9XG4gIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gIGlmIChtb2R1bGVBdXRvVGVzdHMubGVuZ3RoKVxuICAgIG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlQXV0b1Rlc3RzLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGVtby5sZW5ndGgpXG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGVtbywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURldGVjdG9ycy5sZW5ndGgpXG4gICAgbW9kdWxlVGVzdHNbZGV0ZWN0b3JzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVEZXRlY3RvcnMsIGNsZWFyOiBmYWxzZSB9O1xufVxuXG5mdW5jdGlvbiByZWRlZmluZUNvbnNvbGUoKTogYW55W10ge1xuICBjb25zdCBsb2dzOiBhbnlbXSA9IFtdO1xuICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZExvZyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkSW5mbyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS53YXJuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkV2FybiguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEVycm9yKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gbG9ncztcbn1cblxuZnVuY3Rpb24gcmVzZXRDb25zb2xlKCk6IHZvaWQge1xuICBjb25zb2xlLmxvZyA9IHN0ZExvZztcbiAgY29uc29sZS5pbmZvID0gc3RkSW5mbztcbiAgY29uc29sZS53YXJuID0gc3RkV2FybjtcbiAgY29uc29sZS5lcnJvciA9IHN0ZEVycm9yO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucz86XG4gIHsgY2F0ZWdvcnk/OiBzdHJpbmcsIHRlc3Q/OiBzdHJpbmcsIHRlc3RDb250ZXh0PzogVGVzdENvbnRleHQsIGV4Y2x1ZGU/OiBzdHJpbmdbXSwgdmVyYm9zZT86IGJvb2xlYW4gfSkge1xuICBjb25zdCBwYWNrYWdlXyA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk/LmZ1bmM/LnBhY2thZ2U7XG4gIGF3YWl0IGluaXRBdXRvVGVzdHMocGFja2FnZV8pO1xuICBjb25zdCByZXN1bHRzOiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW5cbiAgfVtdID0gW107XG4gIGNvbnNvbGUubG9nKGBSdW5uaW5nIHRlc3RzYCk7XG4gIG9wdGlvbnMgPz89IHt9O1xuICBvcHRpb25zIS50ZXN0Q29udGV4dCA/Pz0gbmV3IFRlc3RDb250ZXh0KCk7XG4gIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgY29uc3QgY2F0ZWdvcmllcyA9IFtdO1xuICBjb25zdCBsb2dzID0gcmVkZWZpbmVDb25zb2xlKCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgICBpZiAoKCEhb3B0aW9ucz8uY2F0ZWdvcnkgJiYgIWtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgob3B0aW9ucz8uY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpIHx8XG4gICAgICAgIG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgIGNhdGVnb3JpZXMucHVzaChrZXkpO1xuICAgICAgY29uc3Qgc2tpcHBlZCA9IHZhbHVlLnRlc3RzPy5ldmVyeSgodCkgPT4gdC5vcHRpb25zPy5za2lwUmVhc29uKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh2YWx1ZS5iZWZvcmUgJiYgIXNraXBwZWQpIHtcbiAgICAgICAgICBhd2FpdCB0aW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHZhbHVlLmJlZm9yZSEoKTtcbiAgICAgICAgICB9LCAxMDAwMDAsIGBiZWZvcmUgJHtvcHRpb25zLmNhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0gYXdhaXQgZ2V0UmVzdWx0KHgpO1xuICAgICAgfVxuICAgICAgY29uc3QgdCA9IHZhbHVlLnRlc3RzID8/IFtdO1xuICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICBpZiAodmFsdWUuY2xlYXIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRbaV0ub3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCF0W2ldLm9wdGlvbnMpXG4gICAgICAgICAgICAgICAgdFtpXS5vcHRpb25zID0ge31cbiAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgIHRbaV0ub3B0aW9ucy5iZW5jaG1hcmsgPSB2YWx1ZS5pc0FsbFRlc3RzRW5hYmxlZEJlbmNobWFya01vZGUgfHwgZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCwgbG9ncywgdmFsdWUudGltZW91dCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcbiAgICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICAgIHJlcy5wdXNoKHRlc3RSdW4pO1xuICAgICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgICBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCwgbG9ncywgdmFsdWUudGltZW91dCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcbiAgICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICAgIHJlcy5wdXNoKHRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gcmVzLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh2YWx1ZS5hZnRlciAmJiAhc2tpcHBlZCkge1xuICAgICAgICAgIGF3YWl0IHRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdmFsdWUuYWZ0ZXIhKCk7XG4gICAgICAgICAgfSwgMTAwMDAwLCBgQWZ0ZXIgJHtvcHRpb25zLmNhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSBhd2FpdCBnZXRSZXN1bHQoeCk7XG4gICAgICB9XG4gICAgICAvLyBDbGVhciBhZnRlciBjYXRlZ29yeVxuICAgICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnYWZ0ZXInLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2JlZm9yZScsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZXNldENvbnNvbGUoKTtcbiAgfVxuICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCAmJiAoIURHLlRlc3QuaXNJbkJlbmNobWFyaykpIHtcbiAgICBhd2FpdCBkZWxheSgxMDAwKTtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgbmFtZTogJ0V4Y2VwdGlvbicsXG4gICAgICByZXN1bHQ6IGVycm9yID8/ICcnLCBzdWNjZXNzOiAhZXJyb3IsIG1zOiAwLCBza2lwcGVkOiBmYWxzZVxuICAgIH07XG4gICAgcmVzdWx0cy5wdXNoKHBhcmFtcyk7XG4gICAgKDxhbnk+cGFyYW1zKS5wYWNrYWdlID0gcGFja2FnZV8ubmFtZTtcbiAgICBpZiAoKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCAhPSBudWxsKVxuICAgICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCgncGFja2FnZScsIHBhcmFtcyk7XG4gICAgZWxzZSB7XG4gICAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzL3BhY2thZ2VgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzdWx0KHg6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBgJHt4LnRvU3RyaW5nKCl9XFxuJHt4LnN0YWNrID8gKGF3YWl0IERHLkxvZ2dlci50cmFuc2xhdGVTdGFja1RyYWNlKHguc3RhY2spKSA6ICcnfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNUZXN0KHQ6IFRlc3QsIHByZWRpY2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBsb2dzOiBhbnlbXSxcbiAgY2F0ZWdvcnlUaW1lb3V0PzogbnVtYmVyLCBwYWNrYWdlTmFtZT86IHN0cmluZywgdmVyYm9zZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICBsb2dzLmxlbmd0aCA9IDA7XG4gIGxldCByOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IGFueSwgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiwgbG9ncz86IHN0cmluZyB9O1xuICBsZXQgdHlwZTogc3RyaW5nID0gJ3BhY2thZ2UnO1xuICBjb25zdCBmaWx0ZXIgPSBwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICh0Lm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gcHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpO1xuICBsZXQgc2tpcCA9IHQub3B0aW9ucz8uc2tpcFJlYXNvbiB8fCBmaWx0ZXI7XG4gIGxldCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogdC5vcHRpb25zPy5za2lwUmVhc29uO1xuXG4gIGlmIChERy5UZXN0LmlzSW5CZW5jaG1hcmsgJiYgIXQub3B0aW9ucz8uYmVuY2htYXJrKSB7XG4gICAgc3RkTG9nKGBTS0lQUEVEOiAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBkb2VzbnQgYXZhaWxhYmxlIGluIGJlbmNobWFyayBtb2RlYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcblxuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24hLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgIGVsc2Uge1xuICAgICAgbGV0IHRpbWVvdXRfID0gdC5vcHRpb25zPy50aW1lb3V0ID09PSBTVEFOREFSVF9USU1FT1VUICYmXG4gICAgICAgIGNhdGVnb3J5VGltZW91dCA/IGNhdGVnb3J5VGltZW91dCA6IHQub3B0aW9ucz8udGltZW91dCE7XG4gICAgICB0aW1lb3V0XyA9IERHLlRlc3QuaXNJbkJlbmNobWFyayA/IEJFTkNITUFSS19USU1FT1VUIDogdGltZW91dF87XG4gICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHRpbWVvdXQodC50ZXN0LCB0aW1lb3V0XykgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICBzdGRFcnJvcih4KTtcbiAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiBhd2FpdCBnZXRSZXN1bHQoeCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICB9XG4gIGlmICh0Lm9wdGlvbnM/LmlzQWdncmVnYXRlZCAmJiByLnJlc3VsdC5jb25zdHJ1Y3RvciA9PT0gREcuRGF0YUZyYW1lKSB7XG4gICAgY29uc3QgY29sID0gci5yZXN1bHQuY29sKCdzdWNjZXNzJyk7XG4gICAgaWYgKGNvbClcbiAgICAgIHIuc3VjY2VzcyA9IGNvbC5zdGF0cy5zdW0gPT09IGNvbC5sZW5ndGg7XG4gICAgaWYgKCF2ZXJib3NlKSB7XG4gICAgICBjb25zdCBkZiA9IHIucmVzdWx0O1xuICAgICAgZGYuY29sdW1ucy5yZW1vdmUoJ3N0YWNrJyk7XG4gICAgICBkZi5yb3dzLnJlbW92ZVdoZXJlKChyKSA9PiByLmdldCgnc3VjY2VzcycpKTtcbiAgICAgIHIucmVzdWx0ID0gZGY7XG4gICAgfVxuICAgIHIucmVzdWx0ID0gci5yZXN1bHQudG9Dc3YoKTtcbiAgfVxuICByLmxvZ3MgPSBsb2dzLmpvaW4oJ1xcbicpO1xuICByLm1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICBpZiAoIXNraXApXG4gICAgc3RkTG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgci5uYW1lID0gdC5uYW1lO1xuICBpZiAoIWZpbHRlcikge1xuICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAnc3VjY2Vzcyc6IHIuc3VjY2VzcywgJ3Jlc3VsdCc6IHIucmVzdWx0LCAnbXMnOiByLm1zLFxuICAgICAgJ3NraXBwZWQnOiByLnNraXBwZWQsICdwYWNrYWdlJzogcGFja2FnZU5hbWUsICdjYXRlZ29yeSc6IHQuY2F0ZWdvcnksICduYW1lJzogdC5uYW1lLCAnbG9ncyc6IHIubG9nc1xuICAgIH07XG4gICAgaWYgKHIucmVzdWx0LmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xuICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmtleXMoci5yZXN1bHQpLnJlZHVjZSgoYWNjLCBrKSA9PiAoeyAuLi5hY2MsIFsncmVzdWx0LicgKyBrXTogci5yZXN1bHRba10gfSksIHt9KTtcbiAgICAgIHBhcmFtcyA9IHsgLi4ucGFyYW1zLCAuLi5yZXMgfTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5yZXN1bHQgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpXG4gICAgICBwYXJhbXMucmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLnJlc3VsdD8udG9Kc29uKCkpIHx8ICcnO1xuICAgIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgICBhd2FpdCAoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0KHR5cGUsIHBhcmFtcyk7XG4gICAgZWxzZSB7XG4gICAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwLCBpbnRlcnZhbDogbnVtYmVyID0gNTApOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgdGVzdCBleGVjdXRpb24gcmVzdWx0IG9yIGFuIGVycm9yIGluIGNhc2Ugb2YgdGltZW91dFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoZnVuYzogKCkgPT4gUHJvbWlzZTxhbnk+LCB0ZXN0VGltZW91dDogbnVtYmVyLCB0aW1lb3V0UmVhc29uOiBzdHJpbmcgPSAnRVhFQ1VUSU9OIFRJTUVPVVQnKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCh0aW1lb3V0UmVhc29uKTtcbiAgICB9LCB0ZXN0VGltZW91dCk7XG4gIH0pO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW2Z1bmMoKSwgdGltZW91dFByb21pc2VdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV4cGVjdHMgYW4gYXN5bmNocm9ub3VzIHtAbGluayBhY3Rpb259IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVXNlIHtAbGluayBjaGVja30gdG8gcGVyZm9ybVxuICogZGVlcGVyIGluc3BlY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0gIHtmdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXhjZXB0aW9uQXN5bmMoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBjaGVjaz86IChleGNlcHRpb246IGFueSkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2F1Z2h0OiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWN0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYXVnaHQgPSB0cnVlO1xuICAgIGNoZWNrZWQgPSAhY2hlY2sgfHwgY2hlY2soZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjYXVnaHQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBidXQgbm90IHRocm93bicpO1xuICAgIGlmICghY2hlY2tlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93biwgYnV0IGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbmRpdGlvbicpO1xuICB9XG59XG5cbmNvbnN0IGNhdERGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2NvbCcsIFsndmFsMScsICd2YWwyJywgJ3ZhbDMnXSldKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgdGVzdCBmb3Igdmlld2Vycy4gSXQgc2VhcmNoIHZpZXdlcnMgaW4gRE9NIGJ5IHRhZ3M6IGNhbnZhcywgc3ZnLCBpbWcsIGlucHV0LCBoMSwgYVxuICogQHBhcmFtICB7c3RyaW5nfSB2IFZpZXdlciBuYW1lXG4gKiBAcGFyYW0gIHtERy5EYXRhRnJhbWV9IGRmIERhdGFmcmFtZSB0byB1c2UuIFNob3VsZCBoYXZlIGF0IGxlYXN0IDMgcm93c1xuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5kZXRlY3RTZW1hbnRpY1R5cGVzIFNwZWNpZnkgd2hldGhlciB0byBkZXRlY3Qgc2VtYW50aWMgdHlwZXMgb3Igbm90XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLnJlYWRPbmx5IElmIHNldCB0byB0cnVlLCB0aGUgZGF0YWZyYW1lIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgdGVzdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5hcmJpdHJhcnlEZlRlc3QgSWYgc2V0IHRvIGZhbHNlLCB0ZXN0IG9uIGFyYml0cmFyeSBkYXRhZnJhbWVcbiAqIChvbmUgY2F0ZWdvcmljYWwgY29sdW1uKSB3aWxsIG5vdCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSAge29iamVjdH0gb3B0aW9ucyBMaXN0IG9mIG9wdGlvbnMgKG9wdGlvbmFsKVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gVGhlIHRlc3QgaXMgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGlmIGl0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFZpZXdlcih2OiBzdHJpbmcsIGRmOiBERy5EYXRhRnJhbWUsIG9wdGlvbnM/OiB7XG4gIGRldGVjdFNlbWFudGljVHlwZXM/OiBib29sZWFuLCByZWFkT25seT86IGJvb2xlYW4sIGFyYml0cmFyeURmVGVzdD86IGJvb2xlYW4sXG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nLCBhd2FpdFZpZXdlcj86ICh2aWV3ZXI6IERHLlZpZXdlcikgPT4gUHJvbWlzZTx2b2lkPlxufSk6IFByb21pc2U8dm9pZD4ge1xuXG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gb3B0aW9ucz8ucGFja2FnZU5hbWUgPz8gJyc7XG4gIGlmIChvcHRpb25zPy5kZXRlY3RTZW1hbnRpY1R5cGVzKVxuICAgIGF3YWl0IGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgY29uc3QgdHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG5cbiAgdHJ5IHtcbiAgICAvLzEuIE9wZW4sIGRvIG5vdGhpbmcgYW5kIGNsb3NlXG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCk7XG4gICAgLy9pbiBjYXNlIHZpZXdlciB3aXRoIGFzeW5jIHJlbmRlcmluZyAtIHdhaXQgZm9yIHJlbmRlciB0byBjb21wbGV0ZVxuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHVuZGVmaW5lZCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gICAgLy8yLiBPcGVuIHZpZXdlciwgcnVuIHNlbGVjdGlvbiwgZmlsdGVyLCBldGMuIGFuZCBjbG9zZVxuICAgIGlmICghb3B0aW9ucz8ucmVhZE9ubHkpIHtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50LCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG4gICAgfVxuXG4gICAgLy8yLiBPcGVuIHZpZXdlciwgY2hhbmdlIG9wdGlvbnMsIHNhdmUgbGF5b3V0IGFuZCBjbG9zZVxuICAgIGxldCBwcm9wc0FuZExheW91dDogeyBsYXlvdXQ6IGFueSwgc2F2ZWRQcm9wczogYW55IH0gfCBudWxsID0gbnVsbDtcbiAgICBwcm9wc0FuZExheW91dCA9IGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBwcm9wc0FuZExheW91dCA9IGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsXG4gICAgICAgIGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcilcblxuICAgIC8vMy4gTG9hZCBsYXlvdXRcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCB1bmRlZmluZWQsIHByb3BzQW5kTGF5b3V0Py5sYXlvdXQsXG4gICAgICB7IHNhdmVkUHJvcHM6IHByb3BzQW5kTGF5b3V0Py5zYXZlZFByb3BzIH0pO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld0xheW91dEFwcGxpZWQsIGxvYWRMYXlvdXQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyLFxuICAgICAgICBwcm9wc0FuZExheW91dD8ubGF5b3V0LCB7IHNhdmVkUHJvcHM6IHByb3BzQW5kTGF5b3V0Py5zYXZlZFByb3BzIH0pO1xuXG4gICAgLy80LiBPcGVuIHZpZXdlciBvbiBhcmJpdGFyeSBkYXRhc2V0XG4gICAgaWYgKG9wdGlvbnM/LmFyYml0cmFyeURmVGVzdCAhPT0gZmFsc2UpIHtcbiAgICAgIHR2LmRhdGFGcmFtZSA9IGNhdERGO1xuICAgICAgYXdhaXQgZGVsYXkoNTApO1xuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCk7XG4gICAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHVuZGVmaW5lZCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vNS4gQ2FsbCBwb3N0cG9uZWQgZmlsdGVyaW5nXG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgZmlsdGVyQXN5bmMpO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG5cbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBjbG9zZUFsbCgpIGlzIGhhbmRsaW5nIGJ5IGNvbW1vbiB0ZXN0IHdvcmtmbG93XG4gICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgIC8vIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgfVxufVxuIl19
|
|
664
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRJLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDO0FBRW5DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FNZCxFQUFFLENBQUM7QUFFUCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUErQixFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLElBQUksZUFBdUIsQ0FBQztBQUVuQyxNQUFNLEtBQVcsTUFBTSxDQUt0QjtBQUxE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QyxDQUFDO1NBRTlHO2dCQUFTO1lBQ1IsaURBQWlEO1lBQ2pELHlCQUF5QjtZQUN6Qix5QkFBeUI7U0FDMUI7O0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0ZXN0RGF0YSB9IGZyb20gJy4vZGF0YWZyYW1lLXV0aWxzJztcbmltcG9ydCBUaW1lb3V0ID0gTm9kZUpTLlRpbWVvdXQ7XG5pbXBvcnQgeyBjaGFuZ2VPcHRpb25zU2F2ZUxheW91dCwgZmlsdGVyQXN5bmMsIGxvYWRMYXlvdXQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQsIHRlc3RWaWV3ZXJJbnRlcm5hbCB9IGZyb20gJy4vdGVzdC12aWV3ZXItdXRpbHMnO1xuXG5jb25zdCBTVEFOREFSVF9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBCRU5DSE1BUktfVElNRU9VVCA9IDEwODAwMDAwO1xuXG5jb25zdCBzdGRMb2cgPSBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkSW5mbyA9IGNvbnNvbGUuaW5mby5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3Qgc3RkRXJyb3IgPSBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7XG5cbmV4cG9ydCBjb25zdCB0ZXN0czoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgdGVzdHM/OiBUZXN0W10sIGJlZm9yZT86ICgpID0+IFByb21pc2U8dm9pZD4sIGFmdGVyPzogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBiZWZvcmVTdGF0dXM/OiBzdHJpbmcsIGFmdGVyU3RhdHVzPzogc3RyaW5nLCBjbGVhcj86IGJvb2xlYW4sIHRpbWVvdXQ/OiBudW1iZXIsXG4gICAgYmVuY2htYXJrcz86IGJvb2xlYW4sIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXIsXG4gIH1cbn0gPSB7fTtcblxuY29uc3QgYXV0b1Rlc3RzQ2F0TmFtZSA9ICdBdXRvIFRlc3RzJztcbmNvbnN0IGRlbW9DYXROYW1lID0gJ0RlbW8nO1xuY29uc3QgZGV0ZWN0b3JzQ2F0TmFtZSA9ICdEZXRlY3RvcnMnO1xuY29uc3QgY29yZUNhdE5hbWUgPSAnQ29yZSc7XG5jb25zdCB3YXNSZWdpc3RlcmVkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuZXhwb3J0IGxldCBjdXJyZW50Q2F0ZWdvcnk6IHN0cmluZztcblxuZXhwb3J0IG5hbWVzcGFjZSBhc3N1cmUge1xuICBleHBvcnQgZnVuY3Rpb24gbm90TnVsbCh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZSA9PSBudWxsID8gJ1ZhbHVlJyA6IG5hbWV9IG5vdCBkZWZpbmVkYCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGJlbmNobWFya1RpbWVvdXQ/OiBudW1iZXI7XG4gIHVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQ/OiBudW1iZXI7XG4gIHNraXBSZWFzb24/OiBzdHJpbmc7XG4gIGlzQWdncmVnYXRlZD86IGJvb2xlYW47XG4gIGJlbmNobWFyaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlPcHRpb25zIHtcbiAgY2xlYXI/OiBib29sZWFuO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBiZW5jaG1hcmtzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RDb250ZXh0IHtcbiAgY2F0Y2hVbmhhbmRsZWQgPSB0cnVlO1xuICByZXBvcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihjYXRjaFVuaGFuZGxlZD86IGJvb2xlYW4sIHJlcG9ydD86IGJvb2xlYW4pIHtcbiAgICBpZiAoY2F0Y2hVbmhhbmRsZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5jYXRjaFVuaGFuZGxlZCA9IGNhdGNoVW5oYW5kbGVkO1xuICAgIGlmIChyZXBvcnQgIT09IHVuZGVmaW5lZCkgdGhpcy5yZXBvcnQgPSByZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0IHtcbiAgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBUZXN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHRlc3Q6ICgpID0+IFByb21pc2U8YW55Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSB7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb3B0aW9ucy50aW1lb3V0ID8/PSBTVEFOREFSVF9USU1FT1VUO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy50ZXN0ID0gYXN5bmMgKCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGVzdCgpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEV2ZW50PFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gdm9pZCwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaGFuZGxlcihhcmdzKTtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzXG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9LCBtcyk7XG4gICAgdHJpZ2dlcigpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RFdmVudEFzeW5jPFQ+KGV2ZW50OiBPYnNlcnZhYmxlPFQ+LFxuICBoYW5kbGVyOiAoYXJnczogVCkgPT4gUHJvbWlzZTx2b2lkPiwgdHJpZ2dlcjogKCkgPT4gdm9pZCwgbXM6IG51bWJlciA9IDAsIHJlYXNvbjogc3RyaW5nID0gYHRpbWVvdXRgXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN1YiA9IGV2ZW50LnN1YnNjcmliZSgoYXJnczogVCkgPT4ge1xuICAgICAgaGFuZGxlcihhcmdzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgnT0snKTtcbiAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9yc1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSwgbXMpO1xuICAgIHRyaWdnZXIoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0KG5hbWU6IHN0cmluZywgdGVzdDogKCkgPT4gUHJvbWlzZTxhbnk+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMgPSBbXTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyEucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cblxuLyogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkgPSB0cnVlLCBlcnJvcj86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXJyb3IpXG4gICAgZXJyb3IgPSBgJHtlcnJvcn0sIGA7XG4gIGVsc2UgZXJyb3IgPSAnJztcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yfUV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEZsb2F0KGFjdHVhbDogbnVtYmVyLCBleHBlY3RlZDogbnVtYmVyLCB0b2xlcmFuY2UgPSAwLjAwMSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKChhY3R1YWwgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSAmJiBleHBlY3RlZCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB8fFxuICAgIChhY3R1YWwgPT09IE51bWJlci5OYU4gJiYgZXhwZWN0ZWQgPT09IE51bWJlci5OYU4pIHx8IChpc05hTihhY3R1YWwpICYmIGlzTmFOKGV4cGVjdGVkKSkpXG4gICAgcmV0dXJuO1xuICBjb25zdCBhcmVFcXVhbCA9IE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IHRvbGVyYW5jZTtcbiAgZXhwZWN0KGFyZUVxdWFsLCB0cnVlLCBgJHtlcnJvciA/PyAnJ30gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbiAgaWYgKCFhcmVFcXVhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9ICh0b2xlcmFuY2UgPSAke3RvbGVyYW5jZX0pYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RUYWJsZShhY3R1YWw6IERHLkRhdGFGcmFtZSwgZXhwZWN0ZWQ6IERHLkRhdGFGcmFtZSwgZXJyb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZXhwZWN0ZWRSb3dDb3VudCA9IGV4cGVjdGVkLnJvd0NvdW50O1xuICBjb25zdCBhY3R1YWxSb3dDb3VudCA9IGFjdHVhbC5yb3dDb3VudDtcbiAgZXhwZWN0KGFjdHVhbFJvd0NvdW50LCBleHBlY3RlZFJvd0NvdW50LCBgJHtlcnJvciA/PyAnJ30sIHJvdyBjb3VudGApO1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGV4cGVjdGVkLmNvbHVtbnMpIHtcbiAgICBjb25zdCBhY3R1YWxDb2x1bW4gPSBhY3R1YWwuY29sdW1ucy5ieU5hbWUoY29sdW1uLm5hbWUpO1xuICAgIGlmIChhY3R1YWxDb2x1bW4gPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmIChhY3R1YWxDb2x1bW4udHlwZSAhPSBjb2x1bW4udHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uLm5hbWV9IHR5cGUgZXhwZWN0ZWQgJHtjb2x1bW4udHlwZX0gZ290ICR7YWN0dWFsQ29sdW1uLnR5cGV9YCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZFJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uLmdldChpKTtcbiAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsQ29sdW1uLmdldChpKTtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PSBERy5UWVBFLkZMT0FUKVxuICAgICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgdmFsdWUsIDAuMDAwMSwgZXJyb3IpO1xuICAgICAgZWxzZSBpZiAoY29sdW1uLnR5cGUgPT0gREcuVFlQRS5EQVRFX1RJTUUpXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZS5pc1NhbWUodmFsdWUpLCB0cnVlLCBlcnJvcik7XG4gICAgICBlbHNlXG4gICAgICAgIGV4cGVjdChhY3R1YWxWYWx1ZSwgdmFsdWUsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE9iamVjdChhY3R1YWw6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGV4cGVjdGVkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICBpZiAoIWFjdHVhbC5oYXNPd25Qcm9wZXJ0eShleHBlY3RlZEtleSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHByb3BlcnR5IFwiJHtleHBlY3RlZEtleX1cIiBub3QgZm91bmRgKTtcblxuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICBleHBlY3RBcnJheShhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoTnVtYmVyLmlzRmluaXRlKGFjdHVhbFZhbHVlKSAmJiBOdW1iZXIuaXNGaW5pdGUoZXhwZWN0ZWRWYWx1ZSkpXG4gICAgICBleHBlY3RGbG9hdChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgKCR7ZXhwZWN0ZWRWYWx1ZX0pIGZvciBrZXkgJyR7ZXhwZWN0ZWRLZXl9JywgZ290ICgke2FjdHVhbFZhbHVlfSlgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsOiBBcnJheUxpa2U8YW55PiwgZXhwZWN0ZWQ6IEFycmF5TGlrZTxhbnk+KSB7XG4gIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gIGNvbnN0IGV4cGVjdGVkTGVuZ3RoID0gZXhwZWN0ZWQubGVuZ3RoO1xuXG4gIGlmIChhY3R1YWxMZW5ndGggIT0gZXhwZWN0ZWRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxMZW5ndGg7IGkrKykge1xuICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgZWxzZSBpZiAoYWN0dWFsW2ldIGluc3RhbmNlb2YgT2JqZWN0ICYmIGV4cGVjdGVkW2ldIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0pO1xuICAgIGVsc2UgaWYgKGFjdHVhbFtpXSAhPSBleHBlY3RlZFtpXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFtpXX0gYXQgcG9zaXRpb24gJHtpfSwgZ290ICR7YWN0dWFsW2ldfWApO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcsIHRlc3RzXzogKCkgPT4gdm9pZCwgb3B0aW9ucz86IENhdGVnb3J5T3B0aW9ucyk6IHZvaWQge1xuICBjdXJyZW50Q2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgdGVzdHNfKCk7XG4gIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldKSB7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5jbGVhciA9IG9wdGlvbnM/LmNsZWFyID8/IHRydWU7XG4gICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50aW1lb3V0ID0gb3B0aW9ucz8udGltZW91dDtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmJlbmNobWFya3MgPSBvcHRpb25zPy5iZW5jaG1hcmtzO1xuICB9XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBiZWZvcmUgdGhlIHRlc3RzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGV4ZWN1dGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZShiZWZvcmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5iZWZvcmUgPSBiZWZvcmU7XG59XG5cbi8qIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgaWYgKHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPT0gdW5kZWZpbmVkKVxuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgdGVzdHNbY3VycmVudENhdGVnb3J5XS5hZnRlciA9IGFmdGVyO1xufVxuXG5mdW5jdGlvbiBhZGROYW1lc3BhY2Uoczogc3RyaW5nLCBmOiBERy5GdW5jKTogc3RyaW5nIHtcbiAgcmV0dXJuIHMucmVwbGFjZShuZXcgUmVnRXhwKGYubmFtZSwgJ2dpJyksIGYubnFOYW1lKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRBdXRvVGVzdHMocGFja2FnZV86IERHLlBhY2thZ2UsIG1vZHVsZT86IGFueSkge1xuICBjb25zdCBwYWNrYWdlSWQgPSBwYWNrYWdlXy5pZDtcbiAgaWYgKHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSkgcmV0dXJuO1xuICBjb25zdCBtb2R1bGVUZXN0cyA9IG1vZHVsZSA/IG1vZHVsZS50ZXN0cyA6IHRlc3RzO1xuICBpZiAobW9kdWxlVGVzdHNbYXV0b1Rlc3RzQ2F0TmFtZV0gIT09IHVuZGVmaW5lZCB8fFxuICAgIG1vZHVsZVRlc3RzW2RlbW9DYXROYW1lXSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgT2JqZWN0LmtleXMobW9kdWxlVGVzdHMpLmZpbmQoKGMpID0+IGMuc3RhcnRzV2l0aChhdXRvVGVzdHNDYXROYW1lKSB8fCBjLnN0YXJ0c1dpdGgoY29yZUNhdE5hbWUpKSkge1xuICAgIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYWNrYWdlXy5uYW1lID09PSAnRGV2VG9vbHMnIHx8ICghIW1vZHVsZSAmJiBtb2R1bGUuX3BhY2thZ2UubmFtZSA9PT0gJ0RldlRvb2xzJykpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgKDxhbnk+d2luZG93KS5kYXJ0VGVzdHMpIHtcbiAgICAgIGNvbnN0IGFyciA9IGYubmFtZS5zcGxpdCgvXFxzKlxcfFxccyohL2cpO1xuICAgICAgbGV0IG5hbWUgPSBhcnIucG9wKCkgPz8gZi5uYW1lO1xuICAgICAgbGV0IGNhdCA9IGFyci5sZW5ndGggPyBjb3JlQ2F0TmFtZSArICc6ICcgKyBhcnIuam9pbignOiAnKSA6IGNvcmVDYXROYW1lO1xuICAgICAgbGV0IGZ1bGxOYW1lIDogc3RyaW5nW109bmFtZS5zcGxpdCgnIHwgJyk7XG4gICAgICBuYW1lID0gZnVsbE5hbWVbZnVsbE5hbWUubGVuZ3RoLTFdO1xuICAgICAgZnVsbE5hbWUudW5zaGlmdChjYXQpO1xuICAgICAgZnVsbE5hbWUucG9wKCk7XG4gICAgICBjYXQgPSBmdWxsTmFtZS5qb2luKCc6ICcpO1xuICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgbW9kdWxlVGVzdHNbY2F0XSA9IHsgdGVzdHM6IFtdLCBjbGVhcjogdHJ1ZSB9O1xuICAgICAgbW9kdWxlVGVzdHNbY2F0XS50ZXN0cy5wdXNoKG5ldyBUZXN0KGNhdCwgbmFtZSwgZi50ZXN0LCB7IGlzQWdncmVnYXRlZDogZmFsc2UsIHRpbWVvdXQ6IFNUQU5EQVJUX1RJTUVPVVQgfSkpO1xuICAgIH1cbiAgfVxuICBjb25zdCBtb2R1bGVBdXRvVGVzdHMgPSBbXTtcbiAgY29uc3QgbW9kdWxlRGVtbyA9IFtdO1xuICBjb25zdCBtb2R1bGVEZXRlY3RvcnMgPSBbXTtcbiAgY29uc3QgcGFja0Z1bmN0aW9ucyA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuZmlsdGVyKGBwYWNrYWdlLmlkID0gXCIke3BhY2thZ2VJZH1cImApLmxpc3QoKTtcbiAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cCgvc2tpcDpcXHMqKFteLFxcc10rKXx3YWl0OlxccyooXFxkKyl8Y2F0OlxccyooW14sXFxzXSspfHRpbWVvdXQ6XFxzKihcXGQrKS9nKTtcbiAgZm9yIChjb25zdCBmIG9mIHBhY2tGdW5jdGlvbnMpIHtcbiAgICBjb25zdCB0ZXN0cyA9IGYub3B0aW9uc1sndGVzdCddO1xuICAgIGNvbnN0IGRlbW8gPSBmLm9wdGlvbnNbJ2RlbW9QYXRoJ107XG4gICAgaWYgKCh0ZXN0cyAmJiBBcnJheS5pc0FycmF5KHRlc3RzKSAmJiB0ZXN0cy5sZW5ndGgpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9ICh0ZXN0c1tpXSBhcyBzdHJpbmcpLm1hdGNoQWxsKHJlZyk7XG4gICAgICAgIGNvbnN0IG1hcDogeyBza2lwPzogc3RyaW5nLCB3YWl0PzogbnVtYmVyLCBjYXQ/OiBzdHJpbmcsIHRpbWVvdXQ/OiBudW1iZXIsIGJlbmNobWFya1RpbWVvdXQ/Om51bWJlciB9ID0ge307XG4gICAgICAgIEFycmF5LmZyb20ocmVzKS5mb3JFYWNoKChhcnIpID0+IHtcbiAgICAgICAgICBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3NraXAnKSkgbWFwWydza2lwJ10gPSBhcnJbMV07XG4gICAgICAgICAgZWxzZSBpZiAoYXJyWzBdLnN0YXJ0c1dpdGgoJ3dhaXQnKSkgbWFwWyd3YWl0J10gPSBwYXJzZUludChhcnJbMl0pO1xuICAgICAgICAgIGVsc2UgaWYgKGFyclswXS5zdGFydHNXaXRoKCdjYXQnKSkgbWFwWydjYXQnXSA9IGFyclszXTtcbiAgICAgICAgICBlbHNlIGlmIChhcnJbMF0uc3RhcnRzV2l0aCgndGltZW91dCcpKSBtYXBbJ3RpbWVvdXQnXSA9IHBhcnNlSW50KGFycls0XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoYXV0b1Rlc3RzQ2F0TmFtZSwgdGVzdHMubGVuZ3RoID09PSAxID8gZi5uYW1lIDogYCR7Zi5uYW1lfSAke2kgKyAxfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBncm9rLmZ1bmN0aW9ucy5ldmFsKGFkZE5hbWVzcGFjZSh0ZXN0c1tpXSwgZikpO1xuICAgICAgICAgIGlmIChtYXAud2FpdCkgYXdhaXQgZGVsYXkobWFwLndhaXQpO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdib29sZWFuJyAmJiAhcmVzKSB0aHJvdyBgRmFpbGVkOiAke3Rlc3RzW2ldfSwgZXhwZWN0ZWQgdHJ1ZSwgZ290ICR7cmVzfWA7XG4gICAgICAgIH0sIHsgc2tpcFJlYXNvbjogbWFwLnNraXAsIHRpbWVvdXQ6IERHLlRlc3QuaXNJbkJlbmNobWFyaz8gbWFwLmJlbmNobWFya1RpbWVvdXQgOm1hcC50aW1lb3V0IH0pO1xuICAgICAgICBpZiAobWFwLmNhdCkge1xuICAgICAgICAgIGNvbnN0IGNhdDogc3RyaW5nID0gYXV0b1Rlc3RzQ2F0TmFtZSArICc6ICcgKyBtYXAuY2F0O1xuICAgICAgICAgIHRlc3QuY2F0ZWdvcnkgPSBjYXQ7XG4gICAgICAgICAgaWYgKG1vZHVsZVRlc3RzW2NhdF0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG1vZHVsZVRlc3RzW2NhdF0gPSB7IHRlc3RzOiBbXSwgY2xlYXI6IHRydWUgfTtcbiAgICAgICAgICBtb2R1bGVUZXN0c1tjYXRdLnRlc3RzLnB1c2godGVzdCk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIG1vZHVsZUF1dG9UZXN0cy5wdXNoKHRlc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVtbykge1xuICAgICAgY29uc3Qgd2FpdCA9IGYub3B0aW9uc1snZGVtb1dhaXQnXSA/IHBhcnNlSW50KGYub3B0aW9uc1snZGVtb1dhaXQnXSkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0ZXN0ID0gbmV3IFRlc3QoZGVtb0NhdE5hbWUsIGYuZnJpZW5kbHlOYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgICAgICAgYXdhaXQgZi5hcHBseSgpO1xuICAgICAgICBhd2FpdCBkZWxheSh3YWl0ID8gd2FpdCA6IDIwMDApO1xuICAgICAgICBjb25zdCB1bmhhbmRsZWQgPSBhd2FpdCBncm9rLnNoZWxsLmxhc3RFcnJvcjtcbiAgICAgICAgaWYgKHVuaGFuZGxlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5oYW5kbGVkKTtcblxuICAgICAgfSwgeyBza2lwUmVhc29uOiBmLm9wdGlvbnNbJ2RlbW9Ta2lwJ10gfSk7XG4gICAgICBtb2R1bGVEZW1vLnB1c2godGVzdCk7XG4gICAgfVxuICAgIGlmIChmLmhhc1RhZygnc2VtVHlwZURldGVjdG9yJykpIHtcbiAgICAgIGNvbnN0IHRlc3QgPSBuZXcgVGVzdChkZXRlY3RvcnNDYXROYW1lLCBmLmZyaWVuZGx5TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGVzdERhdGEuY2xvbmUoKS5jb2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZi5hcHBseShbY29sXSk7XG4gICAgICAgICAgYXJyLnB1c2gocmVzIHx8IGNvbC5zZW1UeXBlKTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoYXJyLmZpbHRlcigoaSkgPT4gaSkubGVuZ3RoLCAxKTtcbiAgICAgIH0sIHsgc2tpcFJlYXNvbjogZi5vcHRpb25zWydza2lwVGVzdCddIH0pO1xuICAgICAgbW9kdWxlRGV0ZWN0b3JzLnB1c2godGVzdCk7XG4gICAgfVxuICB9XG4gIHdhc1JlZ2lzdGVyZWRbcGFja2FnZUlkXSA9IHRydWU7XG4gIGlmIChtb2R1bGVBdXRvVGVzdHMubGVuZ3RoKVxuICAgIG1vZHVsZVRlc3RzW2F1dG9UZXN0c0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlQXV0b1Rlc3RzLCBjbGVhcjogdHJ1ZSB9O1xuICBpZiAobW9kdWxlRGVtby5sZW5ndGgpXG4gICAgbW9kdWxlVGVzdHNbZGVtb0NhdE5hbWVdID0geyB0ZXN0czogbW9kdWxlRGVtbywgY2xlYXI6IHRydWUgfTtcbiAgaWYgKG1vZHVsZURldGVjdG9ycy5sZW5ndGgpXG4gICAgbW9kdWxlVGVzdHNbZGV0ZWN0b3JzQ2F0TmFtZV0gPSB7IHRlc3RzOiBtb2R1bGVEZXRlY3RvcnMsIGNsZWFyOiBmYWxzZSB9O1xufVxuXG5mdW5jdGlvbiByZWRlZmluZUNvbnNvbGUoKTogYW55W10ge1xuICBjb25zdCBsb2dzOiBhbnlbXSA9IFtdO1xuICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZExvZyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkSW5mbyguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS53YXJuID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsb2dzLnB1c2goLi4uYXJncyk7XG4gICAgc3RkV2FybiguLi5hcmdzKTtcbiAgfTtcbiAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzKSA9PiB7XG4gICAgbG9ncy5wdXNoKC4uLmFyZ3MpO1xuICAgIHN0ZEVycm9yKC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4gbG9ncztcbn1cblxuZnVuY3Rpb24gcmVzZXRDb25zb2xlKCk6IHZvaWQge1xuICBjb25zb2xlLmxvZyA9IHN0ZExvZztcbiAgY29uc29sZS5pbmZvID0gc3RkSW5mbztcbiAgY29uc29sZS53YXJuID0gc3RkV2FybjtcbiAgY29uc29sZS5lcnJvciA9IHN0ZEVycm9yO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucz86XG4gIHsgY2F0ZWdvcnk/OiBzdHJpbmcsIHRlc3Q/OiBzdHJpbmcsIHRlc3RDb250ZXh0PzogVGVzdENvbnRleHQsIGV4Y2x1ZGU/OiBzdHJpbmdbXSwgdmVyYm9zZT86IGJvb2xlYW4gfSkge1xuICBjb25zdCBwYWNrYWdlXyA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCk/LmZ1bmM/LnBhY2thZ2U7XG4gIGF3YWl0IGluaXRBdXRvVGVzdHMocGFja2FnZV8pO1xuICBjb25zdCByZXN1bHRzOiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBzdHJpbmcsIG1zOiBudW1iZXIsIHNraXBwZWQ6IGJvb2xlYW5cbiAgfVtdID0gW107XG4gIGNvbnNvbGUubG9nKGBSdW5uaW5nIHRlc3RzYCk7XG4gIG9wdGlvbnMgPz89IHt9O1xuICBvcHRpb25zIS50ZXN0Q29udGV4dCA/Pz0gbmV3IFRlc3RDb250ZXh0KCk7XG4gIGdyb2suc2hlbGwuY2xlYXJMYXN0RXJyb3IoKTtcbiAgY29uc3QgY2F0ZWdvcmllcyA9IFtdO1xuICBjb25zdCBsb2dzID0gcmVkZWZpbmVDb25zb2xlKCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGVzdHMpKSB7XG4gICAgICBpZiAoKCEhb3B0aW9ucz8uY2F0ZWdvcnkgJiYgIWtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgob3B0aW9ucz8uY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpIHx8XG4gICAgICAgIG9wdGlvbnMuZXhjbHVkZT8uc29tZSgoYykgPT4ga2V5LnN0YXJ0c1dpdGgoYykpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHN0ZExvZyhgU3RhcnRlZCAke2tleX0gY2F0ZWdvcnlgKTtcbiAgICAgIGNhdGVnb3JpZXMucHVzaChrZXkpO1xuICAgICAgY29uc3Qgc2tpcHBlZCA9IHZhbHVlLnRlc3RzPy5ldmVyeSgodCkgPT4gdC5vcHRpb25zPy5za2lwUmVhc29uKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh2YWx1ZS5iZWZvcmUgJiYgIXNraXBwZWQpIHtcbiAgICAgICAgICBhd2FpdCB0aW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHZhbHVlLmJlZm9yZSEoKTtcbiAgICAgICAgICB9LCAxMDAwMDAsIGBiZWZvcmUgJHtvcHRpb25zLmNhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0gYXdhaXQgZ2V0UmVzdWx0KHgpO1xuICAgICAgfVxuICAgICAgY29uc3QgdCA9IHZhbHVlLnRlc3RzID8/IFtdO1xuICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICBpZiAodmFsdWUuY2xlYXIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRbaV0ub3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHRbaV0ub3B0aW9ucz8uYmVuY2htYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCF0W2ldLm9wdGlvbnMpXG4gICAgICAgICAgICAgICAgdFtpXS5vcHRpb25zID0ge31cbiAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICAgIHRbaV0ub3B0aW9ucy5iZW5jaG1hcmsgPSB2YWx1ZS5pc0FsbFRlc3RzRW5hYmxlZEJlbmNobWFya01vZGUgfHwgZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCwgbG9ncywgIERHLlRlc3QuaXNJbkJlbmNobWFyaz8gdmFsdWUuYmVuY2htYXJrVGltZW91dCA6dmFsdWUudGltZW91dCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcbiAgICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICAgIHJlcy5wdXNoKHRlc3RSdW4pO1xuICAgICAgICAgIGdyb2suc2hlbGwuY2xvc2VBbGwoKTtcbiAgICAgICAgICBERy5CYWxsb29uLmNsb3NlQWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCB0ZXN0UnVuID0gYXdhaXQgZXhlY1Rlc3QodFtpXSwgb3B0aW9ucz8udGVzdCwgbG9ncywgIERHLlRlc3QuaXNJbkJlbmNobWFyaz8gdmFsdWUuYmVuY2htYXJrVGltZW91dCA6dmFsdWUudGltZW91dCwgcGFja2FnZV8ubmFtZSwgb3B0aW9ucy52ZXJib3NlKTtcbiAgICAgICAgICBpZiAodGVzdFJ1bilcbiAgICAgICAgICAgIHJlcy5wdXNoKHRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gcmVzLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh2YWx1ZS5hZnRlciAmJiAhc2tpcHBlZCkge1xuICAgICAgICAgIGF3YWl0IHRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdmFsdWUuYWZ0ZXIhKCk7XG4gICAgICAgICAgfSwgMTAwMDAwLCBgQWZ0ZXIgJHtvcHRpb25zLmNhdGVnb3J5fTogdGltZW91dCBlcnJvcmApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICAgICAgdmFsdWUuYWZ0ZXJTdGF0dXMgPSBhd2FpdCBnZXRSZXN1bHQoeCk7XG4gICAgICB9XG4gICAgICAvLyBDbGVhciBhZnRlciBjYXRlZ29yeVxuICAgICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgICAgLy8gREcuQmFsbG9vbi5jbG9zZUFsbCgpO1xuICAgICAgaWYgKHZhbHVlLmFmdGVyU3RhdHVzKVxuICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnYWZ0ZXInLCByZXN1bHQ6IHZhbHVlLmFmdGVyU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgZGF0YS5wdXNoKHsgY2F0ZWdvcnk6IGtleSwgbmFtZTogJ2JlZm9yZScsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSwgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH0pO1xuICAgICAgcmVzdWx0cy5wdXNoKC4uLmRhdGEpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZXNldENvbnNvbGUoKTtcbiAgfVxuICBpZiAob3B0aW9ucy50ZXN0Q29udGV4dC5jYXRjaFVuaGFuZGxlZCAmJiAoIURHLlRlc3QuaXNJbkJlbmNobWFyaykpIHtcbiAgICBhd2FpdCBkZWxheSgxMDAwKTtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IGdyb2suc2hlbGwubGFzdEVycm9yO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGNhdGVnb3J5OiAnVW5oYW5kbGVkIGV4Y2VwdGlvbnMnLFxuICAgICAgbmFtZTogJ0V4Y2VwdGlvbicsXG4gICAgICByZXN1bHQ6IGVycm9yID8/ICcnLCBzdWNjZXNzOiAhZXJyb3IsIG1zOiAwLCBza2lwcGVkOiBmYWxzZVxuICAgIH07XG4gICAgcmVzdWx0cy5wdXNoKHBhcmFtcyk7XG4gICAgKDxhbnk+cGFyYW1zKS5wYWNrYWdlID0gcGFja2FnZV8ubmFtZTtcbiAgICBpZiAoKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCAhPSBudWxsKVxuICAgICAgYXdhaXQgKDxhbnk+Z3Jvay5zaGVsbCkucmVwb3J0VGVzdCgncGFja2FnZScsIHBhcmFtcyk7XG4gICAgZWxzZSB7XG4gICAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzL3BhY2thZ2VgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzdWx0KHg6IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBgJHt4LnRvU3RyaW5nKCl9XFxuJHt4LnN0YWNrID8gKGF3YWl0IERHLkxvZ2dlci50cmFuc2xhdGVTdGFja1RyYWNlKHguc3RhY2spKSA6ICcnfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNUZXN0KHQ6IFRlc3QsIHByZWRpY2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBsb2dzOiBhbnlbXSxcbiAgY2F0ZWdvcnlUaW1lb3V0PzogbnVtYmVyLCBwYWNrYWdlTmFtZT86IHN0cmluZywgdmVyYm9zZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuICBsb2dzLmxlbmd0aCA9IDA7XG4gIGxldCByOiB7IGNhdGVnb3J5Pzogc3RyaW5nLCBuYW1lPzogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IGFueSwgbXM6IG51bWJlciwgc2tpcHBlZDogYm9vbGVhbiwgbG9ncz86IHN0cmluZyB9O1xuICBsZXQgdHlwZTogc3RyaW5nID0gJ3BhY2thZ2UnO1xuICBjb25zdCBmaWx0ZXIgPSBwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICh0Lm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gcHJlZGljYXRlLnRvTG93ZXJDYXNlKCkpO1xuICBsZXQgc2tpcCA9IHQub3B0aW9ucz8uc2tpcFJlYXNvbiB8fCBmaWx0ZXI7XG4gIGxldCBza2lwUmVhc29uID0gZmlsdGVyID8gJ3NraXBwZWQnIDogdC5vcHRpb25zPy5za2lwUmVhc29uO1xuXG4gIGlmIChERy5UZXN0LmlzSW5CZW5jaG1hcmsgJiYgIXQub3B0aW9ucz8uYmVuY2htYXJrKSB7XG4gICAgc3RkTG9nKGBTS0lQUEVEOiAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBkb2VzbnQgYXZhaWxhYmxlIGluIGJlbmNobWFyayBtb2RlYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghc2tpcClcbiAgICBzdGRMb2coYFN0YXJ0ZWQgJHt0LmNhdGVnb3J5fSAke3QubmFtZX1gKTtcblxuICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgaWYgKHNraXApXG4gICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IHNraXBSZWFzb24hLCBtczogMCwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgIGVsc2Uge1xuICAgICAgbGV0IHRpbWVvdXRfID0gdC5vcHRpb25zPy50aW1lb3V0ID09PSBTVEFOREFSVF9USU1FT1VUICYmXG4gICAgICAgIGNhdGVnb3J5VGltZW91dCA/IGNhdGVnb3J5VGltZW91dCA6IHQub3B0aW9ucz8udGltZW91dCE7XG4gICAgICB0aW1lb3V0XyA9IERHLlRlc3QuaXNJbkJlbmNobWFyayA/IEJFTkNITUFSS19USU1FT1VUIDogdGltZW91dF87XG4gICAgICByID0geyBzdWNjZXNzOiB0cnVlLCByZXN1bHQ6IGF3YWl0IHRpbWVvdXQodC50ZXN0LCB0aW1lb3V0XykgPz8gJ09LJywgbXM6IDAsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgfVxuICB9IGNhdGNoICh4OiBhbnkpIHtcbiAgICBzdGRFcnJvcih4KTtcbiAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiBhd2FpdCBnZXRSZXN1bHQoeCksIG1zOiAwLCBza2lwcGVkOiBmYWxzZSB9O1xuICB9XG4gIGlmICh0Lm9wdGlvbnM/LmlzQWdncmVnYXRlZCAmJiByLnJlc3VsdC5jb25zdHJ1Y3RvciA9PT0gREcuRGF0YUZyYW1lKSB7XG4gICAgY29uc3QgY29sID0gci5yZXN1bHQuY29sKCdzdWNjZXNzJyk7XG4gICAgaWYgKGNvbClcbiAgICAgIHIuc3VjY2VzcyA9IGNvbC5zdGF0cy5zdW0gPT09IGNvbC5sZW5ndGg7XG4gICAgaWYgKCF2ZXJib3NlKSB7XG4gICAgICBjb25zdCBkZiA9IHIucmVzdWx0O1xuICAgICAgZGYuY29sdW1ucy5yZW1vdmUoJ3N0YWNrJyk7XG4gICAgICBkZi5yb3dzLnJlbW92ZVdoZXJlKChyKSA9PiByLmdldCgnc3VjY2VzcycpKTtcbiAgICAgIHIucmVzdWx0ID0gZGY7XG4gICAgfVxuICAgIHIucmVzdWx0ID0gci5yZXN1bHQudG9Dc3YoKTtcbiAgfVxuICByLmxvZ3MgPSBsb2dzLmpvaW4oJ1xcbicpO1xuICByLm1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICBpZiAoIXNraXApXG4gICAgc3RkTG9nKGBGaW5pc2hlZCAke3QuY2F0ZWdvcnl9ICR7dC5uYW1lfSBmb3IgJHtyLm1zfSBtc2ApO1xuICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgci5uYW1lID0gdC5uYW1lO1xuICBpZiAoIWZpbHRlcikge1xuICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAnc3VjY2Vzcyc6IHIuc3VjY2VzcywgJ3Jlc3VsdCc6IHIucmVzdWx0LCAnbXMnOiByLm1zLFxuICAgICAgJ3NraXBwZWQnOiByLnNraXBwZWQsICdwYWNrYWdlJzogcGFja2FnZU5hbWUsICdjYXRlZ29yeSc6IHQuY2F0ZWdvcnksICduYW1lJzogdC5uYW1lLCAnbG9ncyc6IHIubG9nc1xuICAgIH07XG4gICAgaWYgKHIucmVzdWx0LmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xuICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmtleXMoci5yZXN1bHQpLnJlZHVjZSgoYWNjLCBrKSA9PiAoeyAuLi5hY2MsIFsncmVzdWx0LicgKyBrXTogci5yZXN1bHRba10gfSksIHt9KTtcbiAgICAgIHBhcmFtcyA9IHsgLi4ucGFyYW1zLCAuLi5yZXMgfTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5yZXN1bHQgaW5zdGFuY2VvZiBERy5EYXRhRnJhbWUpXG4gICAgICBwYXJhbXMucmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLnJlc3VsdD8udG9Kc29uKCkpIHx8ICcnO1xuICAgIGlmICgoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0ICE9IG51bGwpXG4gICAgICBhd2FpdCAoPGFueT5ncm9rLnNoZWxsKS5yZXBvcnRUZXN0KHR5cGUsIHBhcmFtcyk7XG4gICAgZWxzZSB7XG4gICAgICBhd2FpdCBmZXRjaChgJHtncm9rLmRhcGkucm9vdH0vbG9nL3Rlc3RzLyR7dHlwZX1gLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBhcmFtcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLyogV2FpdHMgW21zXSBtaWxsaXNlY29uZHMgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxheShtczogbnVtYmVyKSB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIG1zKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhd2FpdENoZWNrKGNoZWNrSGFuZGxlcjogKCkgPT4gYm9vbGVhbixcbiAgZXJyb3I6IHN0cmluZyA9ICdUaW1lb3V0IGV4Y2VlZGVkJywgd2FpdDogbnVtYmVyID0gNTAwLCBpbnRlcnZhbDogbnVtYmVyID0gNTApOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGVycm9yKSk7XG4gICAgfSwgd2FpdCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSWQ6IFRpbWVvdXQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoY2hlY2tIYW5kbGVyKCkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgdGVzdCBleGVjdXRpb24gcmVzdWx0IG9yIGFuIGVycm9yIGluIGNhc2Ugb2YgdGltZW91dFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQoZnVuYzogKCkgPT4gUHJvbWlzZTxhbnk+LCB0ZXN0VGltZW91dDogbnVtYmVyLCB0aW1lb3V0UmVhc29uOiBzdHJpbmcgPSAnRVhFQ1VUSU9OIFRJTUVPVVQnKTogUHJvbWlzZTxhbnk+IHtcbiAgbGV0IHRpbWVvdXQ6IGFueSA9IG51bGw7XG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoXywgcmVqZWN0KSA9PiB7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnNcbiAgICAgIHJlamVjdCh0aW1lb3V0UmVhc29uKTtcbiAgICB9LCB0ZXN0VGltZW91dCk7XG4gIH0pO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJhY2UoW2Z1bmMoKSwgdGltZW91dFByb21pc2VdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dQcmVzZW50KGRpYWxvZ1RpdGxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGlhbG9ncyA9IERHLkRpYWxvZy5nZXRPcGVuRGlhbG9ncygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpYWxvZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGlhbG9nc1tpXS50aXRsZSA9PSBkaWFsb2dUaXRsZSlcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqIEV4cGVjdHMgYW4gYXN5bmNocm9ub3VzIHtAbGluayBhY3Rpb259IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVXNlIHtAbGluayBjaGVja30gdG8gcGVyZm9ybVxuICogZGVlcGVyIGluc3BlY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0gIHtmdW5jdGlvbigpOiBQcm9taXNlPHZvaWQ+fSBhY3Rpb25cbiAqIEBwYXJhbSAge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwZWN0RXhjZXB0aW9uQXN5bmMoYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBjaGVjaz86IChleGNlcHRpb246IGFueSkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2F1Z2h0OiBib29sZWFuID0gZmFsc2U7XG4gIGxldCBjaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgYXdhaXQgYWN0aW9uKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjYXVnaHQgPSB0cnVlO1xuICAgIGNoZWNrZWQgPSAhY2hlY2sgfHwgY2hlY2soZSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFjYXVnaHQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZCBidXQgbm90IHRocm93bicpO1xuICAgIGlmICghY2hlY2tlZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gZXhwZWN0ZWQgZXhjZXB0aW9uIGlzIHRocm93biwgYnV0IGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbmRpdGlvbicpO1xuICB9XG59XG5cbmNvbnN0IGNhdERGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2NvbCcsIFsndmFsMScsICd2YWwyJywgJ3ZhbDMnXSldKTtcblxuLyoqXG4gKiBVbml2ZXJzYWwgdGVzdCBmb3Igdmlld2Vycy4gSXQgc2VhcmNoIHZpZXdlcnMgaW4gRE9NIGJ5IHRhZ3M6IGNhbnZhcywgc3ZnLCBpbWcsIGlucHV0LCBoMSwgYVxuICogQHBhcmFtICB7c3RyaW5nfSB2IFZpZXdlciBuYW1lXG4gKiBAcGFyYW0gIHtERy5EYXRhRnJhbWV9IGRmIERhdGFmcmFtZSB0byB1c2UuIFNob3VsZCBoYXZlIGF0IGxlYXN0IDMgcm93c1xuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5kZXRlY3RTZW1hbnRpY1R5cGVzIFNwZWNpZnkgd2hldGhlciB0byBkZXRlY3Qgc2VtYW50aWMgdHlwZXMgb3Igbm90XG4gKiBAcGFyYW0gIHtib29sZWFufSBvcHRpb25zLnJlYWRPbmx5IElmIHNldCB0byB0cnVlLCB0aGUgZGF0YWZyYW1lIHdpbGwgbm90IGJlIG1vZGlmaWVkIGR1cmluZyB0aGUgdGVzdFxuICogQHBhcmFtICB7Ym9vbGVhbn0gb3B0aW9ucy5hcmJpdHJhcnlEZlRlc3QgSWYgc2V0IHRvIGZhbHNlLCB0ZXN0IG9uIGFyYml0cmFyeSBkYXRhZnJhbWVcbiAqIChvbmUgY2F0ZWdvcmljYWwgY29sdW1uKSB3aWxsIG5vdCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSAge29iamVjdH0gb3B0aW9ucyBMaXN0IG9mIG9wdGlvbnMgKG9wdGlvbmFsKVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gVGhlIHRlc3QgaXMgY29uc2lkZXJlZCBzdWNjZXNzZnVsIGlmIGl0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdFZpZXdlcih2OiBzdHJpbmcsIGRmOiBERy5EYXRhRnJhbWUsIG9wdGlvbnM/OiB7XG4gIGRldGVjdFNlbWFudGljVHlwZXM/OiBib29sZWFuLCByZWFkT25seT86IGJvb2xlYW4sIGFyYml0cmFyeURmVGVzdD86IGJvb2xlYW4sXG4gIHBhY2thZ2VOYW1lPzogc3RyaW5nLCBhd2FpdFZpZXdlcj86ICh2aWV3ZXI6IERHLlZpZXdlcikgPT4gUHJvbWlzZTx2b2lkPlxufSk6IFByb21pc2U8dm9pZD4ge1xuXG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gb3B0aW9ucz8ucGFja2FnZU5hbWUgPz8gJyc7XG4gIGlmIChvcHRpb25zPy5kZXRlY3RTZW1hbnRpY1R5cGVzKVxuICAgIGF3YWl0IGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgY29uc3QgdHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhkZik7XG5cbiAgdHJ5IHtcbiAgICAvLzEuIE9wZW4sIGRvIG5vdGhpbmcgYW5kIGNsb3NlXG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCk7XG4gICAgLy9pbiBjYXNlIHZpZXdlciB3aXRoIGFzeW5jIHJlbmRlcmluZyAtIHdhaXQgZm9yIHJlbmRlciB0byBjb21wbGV0ZVxuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHVuZGVmaW5lZCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuXG4gICAgLy8yLiBPcGVuIHZpZXdlciwgcnVuIHNlbGVjdGlvbiwgZmlsdGVyLCBldGMuIGFuZCBjbG9zZVxuICAgIGlmICghb3B0aW9ucz8ucmVhZE9ubHkpIHtcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHNlbGVjdEZpbHRlckNoYW5nZUN1cnJlbnQpO1xuICAgICAgaWYgKG9wdGlvbnM/LmF3YWl0Vmlld2VyKVxuICAgICAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdlckFkZGVkLCBzZWxlY3RGaWx0ZXJDaGFuZ2VDdXJyZW50LCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG4gICAgfVxuXG4gICAgLy8yLiBPcGVuIHZpZXdlciwgY2hhbmdlIG9wdGlvbnMsIHNhdmUgbGF5b3V0IGFuZCBjbG9zZVxuICAgIGxldCBwcm9wc0FuZExheW91dDogeyBsYXlvdXQ6IGFueSwgc2F2ZWRQcm9wczogYW55IH0gfCBudWxsID0gbnVsbDtcbiAgICBwcm9wc0FuZExheW91dCA9IGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0KTtcbiAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICBwcm9wc0FuZExheW91dCA9IGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsXG4gICAgICAgIGNoYW5nZU9wdGlvbnNTYXZlTGF5b3V0LCBvcHRpb25zIS5hd2FpdFZpZXdlcilcblxuICAgIC8vMy4gTG9hZCBsYXlvdXRcbiAgICBhd2FpdCB0ZXN0Vmlld2VySW50ZXJuYWwodHYsIHYsIHBhY2thZ2VOYW1lLCBncm9rLmV2ZW50cy5vblZpZXdMYXlvdXRBcHBsaWVkLCBsb2FkTGF5b3V0LCB1bmRlZmluZWQsIHByb3BzQW5kTGF5b3V0Py5sYXlvdXQsXG4gICAgICB7IHNhdmVkUHJvcHM6IHByb3BzQW5kTGF5b3V0Py5zYXZlZFByb3BzIH0pO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld0xheW91dEFwcGxpZWQsIGxvYWRMYXlvdXQsIG9wdGlvbnMhLmF3YWl0Vmlld2VyLFxuICAgICAgICBwcm9wc0FuZExheW91dD8ubGF5b3V0LCB7IHNhdmVkUHJvcHM6IHByb3BzQW5kTGF5b3V0Py5zYXZlZFByb3BzIH0pO1xuXG4gICAgLy80LiBPcGVuIHZpZXdlciBvbiBhcmJpdGFyeSBkYXRhc2V0XG4gICAgaWYgKG9wdGlvbnM/LmFyYml0cmFyeURmVGVzdCAhPT0gZmFsc2UpIHtcbiAgICAgIHR2LmRhdGFGcmFtZSA9IGNhdERGO1xuICAgICAgYXdhaXQgZGVsYXkoNTApO1xuICAgICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCk7XG4gICAgICBpZiAob3B0aW9ucz8uYXdhaXRWaWV3ZXIpXG4gICAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIHVuZGVmaW5lZCwgb3B0aW9ucyEuYXdhaXRWaWV3ZXIpO1xuICAgIH1cblxuICAgIC8vNS4gQ2FsbCBwb3N0cG9uZWQgZmlsdGVyaW5nXG4gICAgYXdhaXQgdGVzdFZpZXdlckludGVybmFsKHR2LCB2LCBwYWNrYWdlTmFtZSwgZ3Jvay5ldmVudHMub25WaWV3ZXJBZGRlZCwgZmlsdGVyQXN5bmMpO1xuICAgIGlmIChvcHRpb25zPy5hd2FpdFZpZXdlcilcbiAgICAgIGF3YWl0IHRlc3RWaWV3ZXJJbnRlcm5hbCh0diwgdiwgcGFja2FnZU5hbWUsIGdyb2suZXZlbnRzLm9uVmlld2VyQWRkZWQsIGZpbHRlckFzeW5jLCBvcHRpb25zIS5hd2FpdFZpZXdlcik7XG5cbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBjbG9zZUFsbCgpIGlzIGhhbmRsaW5nIGJ5IGNvbW1vbiB0ZXN0IHdvcmtmbG93XG4gICAgLy8gZ3Jvay5zaGVsbC5jbG9zZUFsbCgpO1xuICAgIC8vIERHLkJhbGxvb24uY2xvc2VBbGwoKTtcbiAgfVxufVxuIl19
|