cdk-local-lambda 0.1.1 → 0.1.2
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/lib/aspect/live-lambda-aspect.d.ts +1 -1
- package/lib/aspect/live-lambda-aspect.js +4 -4
- package/lib/aspect/live-lambda-bootstrap.js +5 -5
- package/lib/cli/commands/local.d.ts +1 -1
- package/lib/cli/commands/local.js +4 -4
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/package.json +1 -1
|
@@ -38,7 +38,7 @@ export interface LiveLambdaAspectProps {
|
|
|
38
38
|
* const app = new cdk.App();
|
|
39
39
|
* const stack = new MyStack(app, 'MyStack');
|
|
40
40
|
*
|
|
41
|
-
* if (process.env.
|
|
41
|
+
* if (process.env.CDK_LOCAL_LAMBDA === 'true') {
|
|
42
42
|
* cdk.Aspects.of(app).add(new LiveLambdaAspect());
|
|
43
43
|
* }
|
|
44
44
|
* ```
|
|
@@ -25,7 +25,7 @@ const EXTENSION_REGEX = /\.(ts|js|mjs|cjs|mts|cts)$/;
|
|
|
25
25
|
* const app = new cdk.App();
|
|
26
26
|
* const stack = new MyStack(app, 'MyStack');
|
|
27
27
|
*
|
|
28
|
-
* if (process.env.
|
|
28
|
+
* if (process.env.CDK_LOCAL_LAMBDA === 'true') {
|
|
29
29
|
* cdk.Aspects.of(app).add(new LiveLambdaAspect());
|
|
30
30
|
* }
|
|
31
31
|
* ```
|
|
@@ -259,7 +259,7 @@ export class LiveLambdaAspect {
|
|
|
259
259
|
* Helper function to check if live mode is enabled
|
|
260
260
|
*/
|
|
261
261
|
export function isLiveModeEnabled() {
|
|
262
|
-
return process.env.
|
|
262
|
+
return process.env.CDK_LOCAL_LAMBDA === "true";
|
|
263
263
|
}
|
|
264
264
|
/**
|
|
265
265
|
* Apply live lambda aspect to a CDK app or stack if live mode is enabled.
|
|
@@ -269,10 +269,10 @@ export function isLiveModeEnabled() {
|
|
|
269
269
|
*/
|
|
270
270
|
export function applyLiveLambdaAspect(scope, props = {}) {
|
|
271
271
|
if (!isLiveModeEnabled()) {
|
|
272
|
-
console.log("[LiveLambda] Live mode not enabled (set
|
|
272
|
+
console.log("[LiveLambda] Live mode not enabled (set CDK_LOCAL_LAMBDA=true to enable)");
|
|
273
273
|
return;
|
|
274
274
|
}
|
|
275
275
|
console.log("[LiveLambda] Live mode enabled - transforming Lambda functions");
|
|
276
276
|
cdk.Aspects.of(scope).add(new LiveLambdaAspect(props));
|
|
277
277
|
}
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJ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Q0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxLQUFpQixFQUNqQixRQUErQixFQUFFO0lBRWpDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxrRUFBa0UsQ0FDbkUsQ0FBQTtRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0lBQzdFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmdcbiAqXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBDREsgYXBwL3N0YWNrLCB0aGlzIGFzcGVjdDpcbiAqIDEuIFJlcGxhY2VzIExhbWJkYSBjb2RlIHdpdGggdGhlIGJyaWRnZSBoYW5kbGVyIGZyb20gdGhlIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICogMi4gR3JhbnRzIElBTSBwZXJtaXNzaW9ucyBmb3IgQXBwU3luYyBFdmVudHNcbiAqIDMuIEFkZHMgYSB0YWcgd2l0aCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoIGZvciB0aGUgZGFlbW9uIHRvIGRpc2NvdmVyXG4gKlxuICogVGhlIGJyaWRnZSB1c2VzIEFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSAoYXV0by1pbmplY3RlZCBieSBMYW1iZGEpIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gKiBUaGUgZGFlbW9uIGRpc2NvdmVycyBmdW5jdGlvbnMgYnkgcXVlcnlpbmcgTGFtYmRhIEFQSSBmb3IgZnVuY3Rpb25zIHdpdGggdGhlIGxpdmUtbGFtYmRhIHRhZy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgdHlwZSAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIlxuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHtcbiAgTElWRV9MQU1CREFfRE9DS0VSX1RBRyxcbiAgTElWRV9MQU1CREFfVEFHLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzLmpzXCJcbmltcG9ydCB7XG4gIGdldERvY2tlckNvbnRleHRQYXRoLFxuICBpc0RvY2tlckltYWdlRnVuY3Rpb24sXG59IGZyb20gXCIuL2RvY2tlci1mdW5jdGlvbi1ob29rLmpzXCJcbmltcG9ydCB7IGdldEVudHJ5UGF0aCwgZ2V0SGFuZGxlck5hbWUgfSBmcm9tIFwiLi9ub2RlanMtZnVuY3Rpb24taG9vay5qc1wiXG5cbi8vIFJlZ2V4IHRvIHN0cmlwIGZpbGUgZXh0ZW5zaW9uIGZyb20gZW50cnkgcGF0aFxuY29uc3QgRVhURU5TSU9OX1JFR0VYID0gL1xcLih0c3xqc3xtanN8Y2pzfG10c3xjdHMpJC9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMaXZlTGFtYmRhQXNwZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUxhbWJkYUFzcGVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBuYW1lIHRvIHVzZSBmb3IgY2hhbm5lbCByb3V0aW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIHN0YWNrIG5hbWUgZnJvbSB0aGUgZnVuY3Rpb24ncyBzdGFjay5cbiAgICovXG4gIHN0YWNrTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogUGF0dGVybiB0byBtYXRjaCBmdW5jdGlvbiBjb25zdHJ1Y3QgSURzIHRvIHRyYW5zZm9ybS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgTGFtYmRhIGZ1bmN0aW9ucyBhcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBmdW5jdGlvblBhdHRlcm4/OiBSZWdFeHBcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gZXhjbHVkZSBmcm9tIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhjbHVkZUZ1bmN0aW9ucz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IHRyYW5zZm9ybXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmcuXG4gKlxuICogVXNhZ2UgaW4gYmluL2FwcC50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gKiBjb25zdCBzdGFjayA9IG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqXG4gKiBpZiAocHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09ICd0cnVlJykge1xuICogICBjZGsuQXNwZWN0cy5vZihhcHApLmFkZChuZXcgTGl2ZUxhbWJkYUFzcGVjdCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTGl2ZUxhbWJkYUFzcGVjdCBpbXBsZW1lbnRzIGNkay5JQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VkRnVuY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBMaXZlTGFtYmRhQXNwZWN0UHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBMYW1iZGEgRnVuY3Rpb24gdXNpbmcgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBpbnN0YW5jZW9mXG4gICAgLy8gVGhpcyBhdm9pZHMgaXNzdWVzIHdpdGggbXVsdGlwbGUgY29waWVzIG9mIGF3cy1jZGstbGliIGJlaW5nIGxvYWRlZFxuICAgIGlmICghdGhpcy5pc0xhbWJkYUZ1bmN0aW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXN0IHRvIGxhbWJkYS5GdW5jdGlvbiBmb3IgdHlwZSBjaGVja2luZyAod2UndmUgdmVyaWZpZWQgaXQncyBhIExhbWJkYSlcbiAgICBjb25zdCBmbiA9IG5vZGUgYXMgdW5rbm93biBhcyBsYW1iZGEuRnVuY3Rpb25cblxuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWQgKGFzcGVjdHMgY2FuIHZpc2l0IG11bHRpcGxlIHRpbWVzKVxuICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUubm9kZS5hZGRyXG4gICAgaWYgKHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmhhcyhub2RlSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBmdW5jdGlvbiBJRCBmcm9tIHRoZSBjb25zdHJ1Y3QgcGF0aFxuICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25JZChmbilcblxuICAgIC8vIENoZWNrIGV4Y2x1c2lvbiBsaXN0XG4gICAgaWYgKHRoaXMucHJvcHMuZXhjbHVkZUZ1bmN0aW9ucz8uaW5jbHVkZXMoZnVuY3Rpb25JZCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgZXhjbHVkZWQgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcGF0dGVybiBtYXRjaFxuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuZnVuY3Rpb25QYXR0ZXJuICYmXG4gICAgICAhdGhpcy5wcm9wcy5mdW5jdGlvblBhdHRlcm4udGVzdChmdW5jdGlvbklkKVxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBTa2lwcGluZyBub24tbWF0Y2hpbmcgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gdGhpcy5wcm9wcy5zdGFja05hbWUgfHwgY2RrLlN0YWNrLm9mKGZuKS5zdGFja05hbWVcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBEb2NrZXJJbWFnZUZ1bmN0aW9uXG4gICAgY29uc3QgaXNEb2NrZXJGdW5jdGlvbiA9IGlzRG9ja2VySW1hZ2VGdW5jdGlvbihmbilcblxuICAgIGlmIChpc0RvY2tlckZ1bmN0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBUcmFuc2Zvcm1pbmcgRG9ja2VySW1hZ2VGdW5jdGlvbjogJHtmdW5jdGlvbklkfWAsXG4gICAgICApXG4gICAgICB0aGlzLnRyYW5zZm9ybURvY2tlckZ1bmN0aW9uKGZuLCBzdGFja05hbWUsIGZ1bmN0aW9uSWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBoYW5kbGVyIHBhdGhzIGJlZm9yZSB3ZSBtb2RpZnkgYW55dGhpbmdcbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRocyA9IHRoaXMuZ2V0SGFuZGxlclBhdGhzKGZuKVxuXG4gICAgICAvLyBTa2lwIHVuc3VwcG9ydGVkIGZ1bmN0aW9ucyAobm90IE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24pXG4gICAgICBpZiAoIWhhbmRsZXJQYXRocykge1xuICAgICAgICB0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5hZGQobm9kZUlkKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBvcmlnaW5hbEhhbmRsZXIsIGxvY2FsSGFuZGxlciB9ID0gaGFuZGxlclBhdGhzXG5cbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gVHJhbnNmb3JtaW5nIGZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YClcblxuICAgICAgLy8gVHJhbnNmb3JtIHRoZSBmdW5jdGlvblxuICAgICAgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihcbiAgICAgICAgZm4sXG4gICAgICAgIHN0YWNrTmFtZSxcbiAgICAgICAgZnVuY3Rpb25JZCxcbiAgICAgICAgb3JpZ2luYWxIYW5kbGVyLFxuICAgICAgICBsb2NhbEhhbmRsZXIsXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzZWRGdW5jdGlvbnMuYWRkKG5vZGVJZClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNvbnN0cnVjdCBpcyBhIExhbWJkYSBGdW5jdGlvbiB1c2luZyBkdWNrLXR5cGluZy5cbiAgICogVGhpcyBhdm9pZHMgaW5zdGFuY2VvZiBpc3N1ZXMgd2hlbiBtdWx0aXBsZSBjb3BpZXMgb2YgYXdzLWNkay1saWIgYXJlIGxvYWRlZC5cbiAgICovXG4gIHByaXZhdGUgaXNMYW1iZGFGdW5jdGlvbihub2RlOiBJQ29uc3RydWN0KTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgYnkgY29uc3RydWN0b3IgbmFtZSAtIGhhbmRsZXMgRnVuY3Rpb24sIERvY2tlckltYWdlRnVuY3Rpb24sIE5vZGVqc0Z1bmN0aW9uLCBldGMuXG4gICAgLy8gQWxzbyBoYW5kbGVzIG91ciBwYXRjaGVkIHZlcnNpb25zIGxpa2UgRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlXG4gICAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gbm9kZS5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgLy8gQ0RLIGFwcGVuZHMgXCIyXCIgdG8gY2xhc3MgbmFtZXMgaW4gc29tZSB2ZXJzaW9uc1xuICAgIGNvbnN0IGlzRnVuY3Rpb24gPVxuICAgICAgY29uc3RydWN0b3JOYW1lID09PSBcIkZ1bmN0aW9uXCIgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJGdW5jdGlvbjJcIiB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmVuZHNXaXRoKFwiRnVuY3Rpb25cIikgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZS5lbmRzV2l0aChcIkZ1bmN0aW9uMlwiKSB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmluY2x1ZGVzKFwiRnVuY3Rpb25cIikgLy8gQ2F0Y2ggcGF0Y2hlZCB2ZXJzaW9ucyBsaWtlIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBFeGNsdWRlIENmbkZ1bmN0aW9uICh0aGUgTDEgY29uc3RydWN0KVxuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IFwiQ2ZuRnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IGl0IGhhcyBleHBlY3RlZCBMYW1iZGEgRnVuY3Rpb24gcHJvcGVydGllc1xuICAgIGNvbnN0IG1heWJlRnVuY3Rpb24gPSBub2RlIGFzIHVua25vd24gYXMge1xuICAgICAgZnVuY3Rpb25OYW1lPzogdW5rbm93blxuICAgICAgZnVuY3Rpb25Bcm4/OiB1bmtub3duXG4gICAgICBub2RlPzogeyBkZWZhdWx0Q2hpbGQ/OiB1bmtub3duIH1cbiAgICB9XG5cbiAgICAvLyBNdXN0IGhhdmUgZnVuY3Rpb25OYW1lIGFuZCBmdW5jdGlvbkFybiAoSUZ1bmN0aW9uIGludGVyZmFjZSlcbiAgICBpZiAoIW1heWJlRnVuY3Rpb24uZnVuY3Rpb25OYW1lIHx8ICFtYXliZUZ1bmN0aW9uLmZ1bmN0aW9uQXJuKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBNdXN0IGhhdmUgYSBkZWZhdWx0Q2hpbGQgKHRoZSBDZm5GdW5jdGlvbilcbiAgICBpZiAoIW1heWJlRnVuY3Rpb24ubm9kZT8uZGVmYXVsdENoaWxkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZ1bmN0aW9uSWQoZm46IGxhbWJkYS5GdW5jdGlvbik6IHN0cmluZyB7XG4gICAgLy8gVXNlIHRoZSBjb25zdHJ1Y3QgSUQgYXMgdGhlIGZ1bmN0aW9uIElEXG4gICAgLy8gRm9yIG5lc3RlZCBjb25zdHJ1Y3RzLCBqb2luIHdpdGggZGFzaGVzXG4gICAgY29uc3QgcGFydHMgPSBmbi5ub2RlLnBhdGguc3BsaXQoXCIvXCIpXG4gICAgLy8gU2tpcCBmaXJzdCBwYXJ0IChBcHApIGFuZCB0YWtlIHRoZSByZXN0XG4gICAgY29uc3QgcmVsZXZhbnRQYXJ0cyA9IHBhcnRzLnNsaWNlKDEpXG4gICAgcmV0dXJuIHJlbGV2YW50UGFydHMuam9pbihcIi1cIikucmVwbGFjZSgvW15hLXpBLVowLTktXS9nLCBcIi1cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaGFuZGxlciBwYXRocyBmb3IgYSBmdW5jdGlvbi5cbiAgICogUmV0dXJucyBib3RoIHRoZSBvcmlnaW5hbCBoYW5kbGVyIChhcyBzZXQgaW4gQ2ZuRnVuY3Rpb24pIGFuZCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKGUuZy4sIG5vdCBhIE5vZGVqc0Z1bmN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0SGFuZGxlclBhdGhzKGZuOiBsYW1iZGEuRnVuY3Rpb24pOiB7XG4gICAgb3JpZ2luYWxIYW5kbGVyOiBzdHJpbmdcbiAgICBsb2NhbEhhbmRsZXI6IHN0cmluZ1xuICB9IHwgbnVsbCB7XG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb25cbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZXIgPSBjZm5GdW5jdGlvbi5oYW5kbGVyIHx8IFwiaW5kZXguaGFuZGxlclwiXG4gICAgY29uc3QgY29uc3RydWN0SWQgPSBmbi5ub2RlLmlkXG5cbiAgICAvLyBDaGVjayBpZiBjYXB0dXJlZCBieSB0aGUgTm9kZWpzRnVuY3Rpb24gaG9va1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGdldEVudHJ5UGF0aChmbilcbiAgICBjb25zdCBoYW5kbGVyTmFtZSA9IGdldEhhbmRsZXJOYW1lKGZuKSB8fCBcImhhbmRsZXJcIlxuICAgIGlmIChlbnRyeVBhdGgpIHtcbiAgICAgIC8vIENvbnZlcnQgZW50cnkgcGF0aCB0byBsb2NhbCBoYW5kbGVyIHBhdGhcbiAgICAgIC8vIGUuZy4sIFwiZnVuY3Rpb25zL3MzLXdyaXRlci9oYW5kbGVyLnRzXCIgKyBcImhhbmRsZXJcIiAtPiBcImZ1bmN0aW9ucy9zMy13cml0ZXIvaGFuZGxlci5oYW5kbGVyXCJcbiAgICAgIGNvbnN0IGxvY2FsSGFuZGxlciA9IGAke2VudHJ5UGF0aC5yZXBsYWNlKEVYVEVOU0lPTl9SRUdFWCwgXCJcIil9LiR7aGFuZGxlck5hbWV9YFxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gVXNpbmcgY2FwdHVyZWQgZW50cnkgZm9yICR7Y29uc3RydWN0SWR9OiAke2xvY2FsSGFuZGxlcn1gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHsgb3JpZ2luYWxIYW5kbGVyLCBsb2NhbEhhbmRsZXIgfVxuICAgIH1cblxuICAgIC8vIE5vIGhhbmRsZXIgcGF0aCBmb3VuZCAtIHRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCAobm90IGEgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbilcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gXCIke2NvbnN0cnVjdElkfVwiOiBgICtcbiAgICAgICAgYG5vdCBhIE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24gKG9yIGJvb3RzdHJhcCBob29rIHdhcyBub3QgaW5zdGFsbGVkIGVhcmx5IGVub3VnaClgLFxuICAgIClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIERvY2tlckltYWdlRnVuY3Rpb24gdG8gdXNlIHRoZSBicmlkZ2UgRG9ja2VyIGltYWdlLlxuICAgKiBTdG9yZXMgdGhlIGxvY2FsIERvY2tlciBjb250ZXh0IHBhdGggaW4gYSB0YWcgZm9yIHRoZSBkYWVtb24gdG8gYnVpbGQvcnVuIGxvY2FsbHkuXG4gICAqL1xuICBwcml2YXRlIHRyYW5zZm9ybURvY2tlckZ1bmN0aW9uKFxuICAgIGZuOiBsYW1iZGEuRnVuY3Rpb24sXG4gICAgX3N0YWNrTmFtZTogc3RyaW5nLFxuICAgIGZ1bmN0aW9uSWQ6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb25cbiAgICBjb25zdCBzdGFjayA9IGNkay5TdGFjay5vZihmbilcblxuICAgIC8vIEdldCB0aGUgZG9ja2VyIGNvbnRleHQgcGF0aCBmcm9tIHRoZSBob29rXG4gICAgY29uc3QgZG9ja2VyQ29udGV4dFBhdGggPSBnZXREb2NrZXJDb250ZXh0UGF0aChmbilcbiAgICBpZiAoIWRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gTm8gZG9ja2VyIGNvbnRleHQgcGF0aCBmb3IgXCIke2Z1bmN0aW9uSWR9XCIuIGAgK1xuICAgICAgICAgIGBUaGUgYm9vdHN0cmFwIGhvb2sgd2FzIG5vdCBpbnN0YWxsZWQgZWFybHkgZW5vdWdoLiBgICtcbiAgICAgICAgICBgRml4OiBpbXBvcnQgXCJjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcFwiIGJlZm9yZSBhbnkgQ0RLIGltcG9ydHMgKE5vZGUuanMpLCBgICtcbiAgICAgICAgICBgb3IgcnVuIEJ1biB3aXRoIFwiYnVuIC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcFwiLmAsXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gR2V0IFNTTSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgYm9vdHN0cmFwUXVhbGlmaWVyID1cbiAgICAgIHN0YWNrLm5vZGUudHJ5R2V0Q29udGV4dChcIkBhd3MtY2RrL2NvcmU6Ym9vdHN0cmFwUXVhbGlmaWVyXCIpIHx8XG4gICAgICBcImhuYjY1OWZkc1wiXG4gICAgY29uc3Qgc3NtQmFzZVBhdGggPSBgJHtTU01fQkFTRV9QQVRIfS8ke2Jvb3RzdHJhcFF1YWxpZmllcn1gXG5cbiAgICBjb25zdCBhcGlBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYXBpLWFybmAsXG4gICAgKVxuXG4gICAgLy8gRGV0ZXJtaW5lIGFyY2hpdGVjdHVyZSBhbmQgZ2V0IGFwcHJvcHJpYXRlIGJyaWRnZSBpbWFnZVxuICAgIGNvbnN0IGFyY2hpdGVjdHVyZSA9IHRoaXMuZ2V0QXJjaGl0ZWN0dXJlKGNmbkZ1bmN0aW9uKVxuICAgIGNvbnN0IGJyaWRnZUltYWdlUGFyYW0gPVxuICAgICAgYXJjaGl0ZWN0dXJlID09PSBcImFybTY0XCIgPyBcImJyaWRnZS1pbWFnZS1hcm02NFwiIDogXCJicmlkZ2UtaW1hZ2UteDg2XzY0XCJcblxuICAgIGNvbnN0IGJyaWRnZUltYWdlVXJpID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9LyR7YnJpZGdlSW1hZ2VQYXJhbX1gLFxuICAgIClcblxuICAgIC8vIEFkZCB0YWcgd2l0aCBkb2NrZXIgY29udGV4dCBwYXRoIGZvciBkYWVtb24gZGlzY292ZXJ5XG4gICAgLy8gVGhlIGRhZW1vbiB1c2VzIHRoaXMgdGFnIHRvIGJ1aWxkIGFuZCBydW4gdGhlIGNvbnRhaW5lciBsb2NhbGx5XG4gICAgY2ZuRnVuY3Rpb24udGFncy5zZXRUYWcoTElWRV9MQU1CREFfRE9DS0VSX1RBRywgZG9ja2VyQ29udGV4dFBhdGgpXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBwdWJsaXNoL3N1YnNjcmliZSB0byBBcHBTeW5jIEV2ZW50c1xuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50Q29ubmVjdFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFB1Ymxpc2hcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRTdWJzY3JpYmVcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYXBpQXJuLCBgJHthcGlBcm59LypgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHJlYWQgU1NNIHBhcmFtZXRlcnMgKGJyaWRnZSBuZWVkcyBBcHBTeW5jIGVuZHBvaW50cylcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06cGFyYW1ldGVyJHtzc21CYXNlUGF0aH0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBJbmNyZWFzZSB0aW1lb3V0IHRvIGFsbG93IGZvciBsb2NhbCBkZWJ1Z2dpbmdcbiAgICBjZm5GdW5jdGlvbi50aW1lb3V0ID0gMzAwIC8vIDUgbWludXRlc1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgRG9ja2VyIGltYWdlIHdpdGggdGhlIGJyaWRnZSBpbWFnZVxuICAgIGNmbkZ1bmN0aW9uLmNvZGUgPSB7XG4gICAgICBpbWFnZVVyaTogYnJpZGdlSW1hZ2VVcmksXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0xpdmVMYW1iZGFdIFJlcGxhY2VkIERvY2tlciBpbWFnZSB3aXRoIGJyaWRnZSAoJHthcmNoaXRlY3R1cmV9KWAsXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgYXJjaGl0ZWN0dXJlIG9mIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBEZWZhdWx0cyB0byB4ODZfNjQgaWYgbm90IGV4cGxpY2l0bHkgc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBcmNoaXRlY3R1cmUoY2ZuRnVuY3Rpb246IGxhbWJkYS5DZm5GdW5jdGlvbik6IFwiYXJtNjRcIiB8IFwieDg2XzY0XCIge1xuICAgIGNvbnN0IGFyY2hpdGVjdHVyZXMgPSBjZm5GdW5jdGlvbi5hcmNoaXRlY3R1cmVzIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gICAgaWYgKGFyY2hpdGVjdHVyZXM/LmluY2x1ZGVzKFwiYXJtNjRcIikpIHtcbiAgICAgIHJldHVybiBcImFybTY0XCJcbiAgICB9XG4gICAgcmV0dXJuIFwieDg2XzY0XCJcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRnVuY3Rpb24oXG4gICAgZm46IGxhbWJkYS5GdW5jdGlvbixcbiAgICBfc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgX2Z1bmN0aW9uSWQ6IHN0cmluZyxcbiAgICBfb3JpZ2luYWxIYW5kbGVyOiBzdHJpbmcsXG4gICAgbG9jYWxIYW5kbGVyOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uXG4gICAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2YoZm4pXG5cbiAgICAvLyBSZWFkIHZhbHVlcyBmcm9tIFNTTSBwYXJhbWV0ZXJzIChjcmVhdGVkIGJ5IGJvb3RzdHJhcCBzdGFjaylcbiAgICAvLyBVc2UgdGhlIENESyBib290c3RyYXAgcXVhbGlmaWVyIGZvciBwcm9wZXIgc2NvcGluZ1xuICAgIGNvbnN0IGJvb3RzdHJhcFF1YWxpZmllciA9XG4gICAgICBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllclwiKSB8fFxuICAgICAgXCJobmI2NTlmZHNcIlxuICAgIGNvbnN0IHNzbUJhc2VQYXRoID0gYCR7U1NNX0JBU0VfUEFUSH0vJHtib290c3RyYXBRdWFsaWZpZXJ9YFxuXG4gICAgY29uc3QgYXBpQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2FwaS1hcm5gLFxuICAgIClcbiAgICBjb25zdCBicmlkZ2VCdWNrZXQgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYnJpZGdlLWJ1Y2tldGAsXG4gICAgKVxuICAgIGNvbnN0IGJyaWRnZUtleSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9icmlkZ2Uta2V5YCxcbiAgICApXG5cbiAgICAvLyBBZGQgdGFnIHdpdGggbG9jYWwgaGFuZGxlciBwYXRoIGZvciBkYWVtb24gZGlzY292ZXJ5XG4gICAgLy8gVGhlIGRhZW1vbiBxdWVyaWVzIExhbWJkYSBBUEkgZm9yIGZ1bmN0aW9ucyB3aXRoIHRoaXMgdGFnXG4gICAgY2ZuRnVuY3Rpb24udGFncy5zZXRUYWcoTElWRV9MQU1CREFfVEFHLCBsb2NhbEhhbmRsZXIpXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBwdWJsaXNoL3N1YnNjcmliZSB0byBBcHBTeW5jIEV2ZW50c1xuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50Q29ubmVjdFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFB1Ymxpc2hcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRTdWJzY3JpYmVcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYXBpQXJuLCBgJHthcGlBcm59LypgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHJlYWQgU1NNIHBhcmFtZXRlcnMgKGJyaWRnZSBuZWVkcyBBcHBTeW5jIGVuZHBvaW50cylcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06cGFyYW1ldGVyJHtzc21CYXNlUGF0aH0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBJbmNyZWFzZSB0aW1lb3V0IHRvIGFsbG93IGZvciBsb2NhbCBkZWJ1Z2dpbmdcbiAgICBjZm5GdW5jdGlvbi50aW1lb3V0ID0gMzAwIC8vIDUgbWludXRlc1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgY29kZSB3aXRoIGJyaWRnZSBoYW5kbGVyIGZyb20gYm9vdHN0cmFwIHN0YWNrJ3MgUzMgYnVja2V0XG4gICAgY2ZuRnVuY3Rpb24uY29kZSA9IHtcbiAgICAgIHMzQnVja2V0OiBicmlkZ2VCdWNrZXQsXG4gICAgICBzM0tleTogYnJpZGdlS2V5LFxuICAgIH1cbiAgICBjZm5GdW5jdGlvbi5oYW5kbGVyID0gXCJpbmRleC5oYW5kbGVyXCJcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBsaXZlIG1vZGUgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMaXZlTW9kZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5DREtfTElWRSA9PT0gXCJ0cnVlXCJcbn1cblxuLyoqXG4gKiBBcHBseSBsaXZlIGxhbWJkYSBhc3BlY3QgdG8gYSBDREsgYXBwIG9yIHN0YWNrIGlmIGxpdmUgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBzY29wZSBUaGUgQ0RLIGFwcCBvciBzdGFjayB0byBhcHBseSB0aGUgYXNwZWN0IHRvXG4gKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxpdmUgbGFtYmRhIGFzcGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaXZlTGFtYmRhQXNwZWN0KFxuICBzY29wZTogSUNvbnN0cnVjdCxcbiAgcHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wcyA9IHt9LFxuKTogdm9pZCB7XG4gIGlmICghaXNMaXZlTW9kZUVuYWJsZWQoKSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIG5vdCBlbmFibGVkIChzZXQgQ0RLX0xJVkU9dHJ1ZSB0byBlbmFibGUpXCIsXG4gICAgKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc29sZS5sb2coXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIGVuYWJsZWQgLSB0cmFuc2Zvcm1pbmcgTGFtYmRhIGZ1bmN0aW9uc1wiKVxuICBjZGsuQXNwZWN0cy5vZihzY29wZSkuYWRkKG5ldyBMaXZlTGFtYmRhQXNwZWN0KHByb3BzKSlcbn1cbiJdfQ==
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFNO1FBQ1IsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFOUMsdUJBQXVCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1lBQ3JFLE9BQU07UUFDUixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLElBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO1lBQzFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUM1QyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnREFBZ0QsVUFBVSxFQUFFLENBQUMsQ0FBQTtZQUN6RSxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUVwRSx5Q0FBeUM7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVsRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxrREFBa0QsVUFBVSxFQUFFLENBQy9ELENBQUE7WUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUN6RCxDQUFDO2FBQU0sQ0FBQztZQUNOLDhDQUE4QztZQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRTdDLHlFQUF5RTtZQUN6RSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ25DLE9BQU07WUFDUixDQUFDO1lBRUQsTUFBTSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsR0FBRyxZQUFZLENBQUE7WUFFdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtZQUVoRSx5QkFBeUI7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixFQUFFLEVBQ0YsU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxDQUNiLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCLENBQUMsSUFBZ0I7UUFDdkMsMEZBQTBGO1FBQzFGLHdFQUF3RTtRQUN4RSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQTtRQUM3QyxrREFBa0Q7UUFDbEQsTUFBTSxVQUFVLEdBQ2QsZUFBZSxLQUFLLFVBQVU7WUFDOUIsZUFBZSxLQUFLLFdBQVc7WUFDL0IsZUFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDcEMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDckMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDLDZEQUE2RDtRQUVwRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksZUFBZSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUlyQixDQUFBO1FBRUQsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlELE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxFQUFtQjtRQUM1QywwQ0FBMEM7UUFDMUMsMENBQTBDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNyQywwQ0FBMEM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNwQyxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZUFBZSxDQUFDLEVBQW1CO1FBSXpDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBa0MsQ0FBQTtRQUM5RCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQTtRQUM5RCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUU5QiwrQ0FBK0M7UUFDL0MsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUE7UUFDbkQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLDJDQUEyQztZQUMzQyw4RkFBOEY7WUFDOUYsTUFBTSxZQUFZLEdBQUcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQTtZQUMvRSxPQUFPLENBQUMsR0FBRyxDQUNULHlDQUF5QyxXQUFXLEtBQUssWUFBWSxFQUFFLENBQ3hFLENBQUE7WUFDRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxDQUFBO1FBQzFDLENBQUM7UUFFRCx1R0FBdUc7UUFDdkcsT0FBTyxDQUFDLEdBQUcsQ0FDVCwrQ0FBK0MsV0FBVyxLQUFLO1lBQzdELGdHQUFnRyxDQUNuRyxDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssdUJBQXVCLENBQzdCLEVBQW1CLEVBQ25CLFVBQWtCLEVBQ2xCLFVBQWtCO1FBRWxCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBa0MsQ0FBQTtRQUM5RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUU5Qiw0Q0FBNEM7UUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUNiLDRDQUE0QyxVQUFVLEtBQUs7Z0JBQ3pELHFEQUFxRDtnQkFDckQsNkVBQTZFO2dCQUM3RSw2REFBNkQsQ0FDaEUsQ0FBQTtRQUNILENBQUM7UUFFRCxxQkFBcUI7UUFDckIsTUFBTSxrQkFBa0IsR0FDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsa0NBQWtDLENBQUM7WUFDNUQsV0FBVyxDQUFBO1FBQ2IsTUFBTSxXQUFXLEdBQUcsR0FBRyxhQUFhLElBQUksa0JBQWtCLEVBQUUsQ0FBQTtRQUU1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUN4RCxLQUFLLEVBQ0wsR0FBRyxXQUFXLFVBQVUsQ0FDekIsQ0FBQTtRQUVELDBEQUEwRDtRQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sZ0JBQWdCLEdBQ3BCLFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQTtRQUV6RSxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUNoRSxLQUFLLEVBQ0wsR0FBRyxXQUFXLElBQUksZ0JBQWdCLEVBQUUsQ0FDckMsQ0FBQTtRQUVELHdEQUF3RDtRQUN4RCxrRUFBa0U7UUFDbEUsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtRQUVsRSwyREFBMkQ7UUFDM0QsRUFBRSxDQUFDLGVBQWUsQ0FDaEIsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLHNCQUFzQjtnQkFDdEIsc0JBQXNCO2dCQUN0Qix3QkFBd0I7YUFDekI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQztTQUNuQyxDQUFDLENBQ0gsQ0FBQTtRQUVELDRFQUE0RTtRQUM1RSxFQUFFLENBQUMsZUFBZSxDQUNoQixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQztZQUNsRCxTQUFTLEVBQUU7Z0JBQ1QsZUFBZSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGFBQWEsV0FBVyxJQUFJO2FBQ3pFO1NBQ0YsQ0FBQyxDQUNILENBQUE7UUFFRCxnREFBZ0Q7UUFDaEQsV0FBVyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUEsQ0FBQyxZQUFZO1FBRXRDLGlEQUFpRDtRQUNqRCxXQUFXLENBQUMsSUFBSSxHQUFHO1lBQ2pCLFFBQVEsRUFBRSxjQUFjO1NBQ3pCLENBQUE7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUNULG1EQUFtRCxZQUFZLEdBQUcsQ0FDbkUsQ0FBQTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlLENBQUMsV0FBK0I7UUFDckQsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLGFBQXFDLENBQUE7UUFDdkUsSUFBSSxhQUFhLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsRUFBbUIsRUFDbkIsVUFBa0IsRUFDbEIsV0FBbUIsRUFDbkIsZ0JBQXdCLEVBQ3hCLFlBQW9CO1FBRXBCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBa0MsQ0FBQTtRQUM5RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUU5QiwrREFBK0Q7UUFDL0QscURBQXFEO1FBQ3JELE1BQU0sa0JBQWtCLEdBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGtDQUFrQyxDQUFDO1lBQzVELFdBQVcsQ0FBQTtRQUNiLE1BQU0sV0FBVyxHQUFHLEdBQUcsYUFBYSxJQUFJLGtCQUFrQixFQUFFLENBQUE7UUFFNUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDeEQsS0FBSyxFQUNMLEdBQUcsV0FBVyxVQUFVLENBQ3pCLENBQUE7UUFDRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUM5RCxLQUFLLEVBQ0wsR0FBRyxXQUFXLGdCQUFnQixDQUMvQixDQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDM0QsS0FBSyxFQUNMLEdBQUcsV0FBVyxhQUFhLENBQzVCLENBQUE7UUFFRCx1REFBdUQ7UUFDdkQsNERBQTREO1FBQzVELFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUV0RCwyREFBMkQ7UUFDM0QsRUFBRSxDQUFDLGVBQWUsQ0FDaEIsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLHNCQUFzQjtnQkFDdEIsc0JBQXNCO2dCQUN0Qix3QkFBd0I7YUFDekI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQztTQUNuQyxDQUFDLENBQ0gsQ0FBQTtRQUVELDRFQUE0RTtRQUM1RSxFQUFFLENBQUMsZUFBZSxDQUNoQixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQztZQUNsRCxTQUFTLEVBQUU7Z0JBQ1QsZUFBZSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGFBQWEsV0FBVyxJQUFJO2FBQ3pFO1NBQ0YsQ0FBQyxDQUNILENBQUE7UUFFRCxnREFBZ0Q7UUFDaEQsV0FBVyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUEsQ0FBQyxZQUFZO1FBRXRDLHdFQUF3RTtRQUN4RSxXQUFXLENBQUMsSUFBSSxHQUFHO1lBQ2pCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLEtBQUssRUFBRSxTQUFTO1NBQ2pCLENBQUE7UUFDRCxXQUFXLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQTtJQUN2QyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixLQUFLLE1BQU0sQ0FBQTtBQUNoRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLEtBQWlCLEVBQ2pCLFFBQStCLEVBQUU7SUFFakMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUNULDBFQUEwRSxDQUMzRSxDQUFBO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUE7SUFDN0UsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDREsgQXNwZWN0IHRvIHRyYW5zZm9ybSBMYW1iZGEgZnVuY3Rpb25zIGZvciBsaXZlIGRlYnVnZ2luZ1xuICpcbiAqIFdoZW4gYXBwbGllZCB0byBhIENESyBhcHAvc3RhY2ssIHRoaXMgYXNwZWN0OlxuICogMS4gUmVwbGFjZXMgTGFtYmRhIGNvZGUgd2l0aCB0aGUgYnJpZGdlIGhhbmRsZXIgZnJvbSB0aGUgYm9vdHN0cmFwIHN0YWNrJ3MgUzMgYnVja2V0XG4gKiAyLiBHcmFudHMgSUFNIHBlcm1pc3Npb25zIGZvciBBcHBTeW5jIEV2ZW50c1xuICogMy4gQWRkcyBhIHRhZyB3aXRoIHRoZSBsb2NhbCBoYW5kbGVyIHBhdGggZm9yIHRoZSBkYWVtb24gdG8gZGlzY292ZXJcbiAqXG4gKiBUaGUgYnJpZGdlIHVzZXMgQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FIChhdXRvLWluamVjdGVkIGJ5IExhbWJkYSkgZm9yIGNoYW5uZWwgcm91dGluZy5cbiAqIFRoZSBkYWVtb24gZGlzY292ZXJzIGZ1bmN0aW9ucyBieSBxdWVyeWluZyBMYW1iZGEgQVBJIGZvciBmdW5jdGlvbnMgd2l0aCB0aGUgbGl2ZS1sYW1iZGEgdGFnLlxuICovXG5cbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCB0eXBlICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiXG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQge1xuICBMSVZFX0xBTUJEQV9ET0NLRVJfVEFHLFxuICBMSVZFX0xBTUJEQV9UQUcsXG4gIFNTTV9CQVNFX1BBVEgsXG59IGZyb20gXCIuLi9zaGFyZWQvdHlwZXMuanNcIlxuaW1wb3J0IHtcbiAgZ2V0RG9ja2VyQ29udGV4dFBhdGgsXG4gIGlzRG9ja2VySW1hZ2VGdW5jdGlvbixcbn0gZnJvbSBcIi4vZG9ja2VyLWZ1bmN0aW9uLWhvb2suanNcIlxuaW1wb3J0IHsgZ2V0RW50cnlQYXRoLCBnZXRIYW5kbGVyTmFtZSB9IGZyb20gXCIuL25vZGVqcy1mdW5jdGlvbi1ob29rLmpzXCJcblxuLy8gUmVnZXggdG8gc3RyaXAgZmlsZSBleHRlbnNpb24gZnJvbSBlbnRyeSBwYXRoXG5jb25zdCBFWFRFTlNJT05fUkVHRVggPSAvXFwuKHRzfGpzfG1qc3xjanN8bXRzfGN0cykkL1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIExpdmVMYW1iZGFBc3BlY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXZlTGFtYmRhQXNwZWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIG5hbWUgdG8gdXNlIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdXNlcyB0aGUgc3RhY2sgbmFtZSBmcm9tIHRoZSBmdW5jdGlvbidzIHN0YWNrLlxuICAgKi9cbiAgc3RhY2tOYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBQYXR0ZXJuIHRvIG1hdGNoIGZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gdHJhbnNmb3JtLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGFsbCBMYW1iZGEgZnVuY3Rpb25zIGFyZSB0cmFuc2Zvcm1lZC5cbiAgICovXG4gIGZ1bmN0aW9uUGF0dGVybj86IFJlZ0V4cFxuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogRnVuY3Rpb24gY29uc3RydWN0IElEcyB0byBleGNsdWRlIGZyb20gdHJhbnNmb3JtYXRpb24uXG4gICAqL1xuICBleGNsdWRlRnVuY3Rpb25zPzogc3RyaW5nW11cbn1cblxuLyoqXG4gKiBDREsgQXNwZWN0IHRoYXQgdHJhbnNmb3JtcyBMYW1iZGEgZnVuY3Rpb25zIGZvciBsaXZlIGRlYnVnZ2luZy5cbiAqXG4gKiBVc2FnZSBpbiBiaW4vYXBwLnRzOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAqIGNvbnN0IHN0YWNrID0gbmV3IE15U3RhY2soYXBwLCAnTXlTdGFjaycpO1xuICpcbiAqIGlmIChwcm9jZXNzLmVudi5DREtfTE9DQUxfTEFNQkRBID09PSAndHJ1ZScpIHtcbiAqICAgY2RrLkFzcGVjdHMub2YoYXBwKS5hZGQobmV3IExpdmVMYW1iZGFBc3BlY3QoKSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIExpdmVMYW1iZGFBc3BlY3QgaW1wbGVtZW50cyBjZGsuSUFzcGVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wc1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlZEZ1bmN0aW9uczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzID0ge30pIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgTGFtYmRhIEZ1bmN0aW9uIHVzaW5nIGR1Y2stdHlwaW5nIGluc3RlYWQgb2YgaW5zdGFuY2VvZlxuICAgIC8vIFRoaXMgYXZvaWRzIGlzc3VlcyB3aXRoIG11bHRpcGxlIGNvcGllcyBvZiBhd3MtY2RrLWxpYiBiZWluZyBsb2FkZWRcbiAgICBpZiAoIXRoaXMuaXNMYW1iZGFGdW5jdGlvbihub2RlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzdCB0byBsYW1iZGEuRnVuY3Rpb24gZm9yIHR5cGUgY2hlY2tpbmcgKHdlJ3ZlIHZlcmlmaWVkIGl0J3MgYSBMYW1iZGEpXG4gICAgY29uc3QgZm4gPSBub2RlIGFzIHVua25vd24gYXMgbGFtYmRhLkZ1bmN0aW9uXG5cbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgcHJvY2Vzc2VkIChhc3BlY3RzIGNhbiB2aXNpdCBtdWx0aXBsZSB0aW1lcylcbiAgICBjb25zdCBub2RlSWQgPSBub2RlLm5vZGUuYWRkclxuICAgIGlmICh0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5oYXMobm9kZUlkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgZnVuY3Rpb24gSUQgZnJvbSB0aGUgY29uc3RydWN0IHBhdGhcbiAgICBjb25zdCBmdW5jdGlvbklkID0gdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uSWQoZm4pXG5cbiAgICAvLyBDaGVjayBleGNsdXNpb24gbGlzdFxuICAgIGlmICh0aGlzLnByb3BzLmV4Y2x1ZGVGdW5jdGlvbnM/LmluY2x1ZGVzKGZ1bmN0aW9uSWQpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0xpdmVMYW1iZGFdIFNraXBwaW5nIGV4Y2x1ZGVkIGZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENoZWNrIHBhdHRlcm4gbWF0Y2hcbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLmZ1bmN0aW9uUGF0dGVybiAmJlxuICAgICAgIXRoaXMucHJvcHMuZnVuY3Rpb25QYXR0ZXJuLnRlc3QoZnVuY3Rpb25JZClcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgbm9uLW1hdGNoaW5nIGZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrTmFtZSA9IHRoaXMucHJvcHMuc3RhY2tOYW1lIHx8IGNkay5TdGFjay5vZihmbikuc3RhY2tOYW1lXG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgRG9ja2VySW1hZ2VGdW5jdGlvblxuICAgIGNvbnN0IGlzRG9ja2VyRnVuY3Rpb24gPSBpc0RvY2tlckltYWdlRnVuY3Rpb24oZm4pXG5cbiAgICBpZiAoaXNEb2NrZXJGdW5jdGlvbikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gVHJhbnNmb3JtaW5nIERvY2tlckltYWdlRnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gLFxuICAgICAgKVxuICAgICAgdGhpcy50cmFuc2Zvcm1Eb2NrZXJGdW5jdGlvbihmbiwgc3RhY2tOYW1lLCBmdW5jdGlvbklkKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgaGFuZGxlciBwYXRocyBiZWZvcmUgd2UgbW9kaWZ5IGFueXRoaW5nXG4gICAgICBjb25zdCBoYW5kbGVyUGF0aHMgPSB0aGlzLmdldEhhbmRsZXJQYXRocyhmbilcblxuICAgICAgLy8gU2tpcCB1bnN1cHBvcnRlZCBmdW5jdGlvbnMgKG5vdCBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uKVxuICAgICAgaWYgKCFoYW5kbGVyUGF0aHMpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRGdW5jdGlvbnMuYWRkKG5vZGVJZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgb3JpZ2luYWxIYW5kbGVyLCBsb2NhbEhhbmRsZXIgfSA9IGhhbmRsZXJQYXRoc1xuXG4gICAgICBjb25zb2xlLmxvZyhgW0xpdmVMYW1iZGFdIFRyYW5zZm9ybWluZyBmdW5jdGlvbjogJHtmdW5jdGlvbklkfWApXG5cbiAgICAgIC8vIFRyYW5zZm9ybSB0aGUgZnVuY3Rpb25cbiAgICAgIHRoaXMudHJhbnNmb3JtRnVuY3Rpb24oXG4gICAgICAgIGZuLFxuICAgICAgICBzdGFja05hbWUsXG4gICAgICAgIGZ1bmN0aW9uSWQsXG4gICAgICAgIG9yaWdpbmFsSGFuZGxlcixcbiAgICAgICAgbG9jYWxIYW5kbGVyLFxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmFkZChub2RlSWQpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjb25zdHJ1Y3QgaXMgYSBMYW1iZGEgRnVuY3Rpb24gdXNpbmcgZHVjay10eXBpbmcuXG4gICAqIFRoaXMgYXZvaWRzIGluc3RhbmNlb2YgaXNzdWVzIHdoZW4gbXVsdGlwbGUgY29waWVzIG9mIGF3cy1jZGstbGliIGFyZSBsb2FkZWQuXG4gICAqL1xuICBwcml2YXRlIGlzTGFtYmRhRnVuY3Rpb24obm9kZTogSUNvbnN0cnVjdCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGJ5IGNvbnN0cnVjdG9yIG5hbWUgLSBoYW5kbGVzIEZ1bmN0aW9uLCBEb2NrZXJJbWFnZUZ1bmN0aW9uLCBOb2RlanNGdW5jdGlvbiwgZXRjLlxuICAgIC8vIEFsc28gaGFuZGxlcyBvdXIgcGF0Y2hlZCB2ZXJzaW9ucyBsaWtlIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZVxuICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IG5vZGUuY29uc3RydWN0b3IubmFtZVxuICAgIC8vIENESyBhcHBlbmRzIFwiMlwiIHRvIGNsYXNzIG5hbWVzIGluIHNvbWUgdmVyc2lvbnNcbiAgICBjb25zdCBpc0Z1bmN0aW9uID1cbiAgICAgIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJGdW5jdGlvblwiIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPT09IFwiRnVuY3Rpb24yXCIgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZS5lbmRzV2l0aChcIkZ1bmN0aW9uXCIpIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuZW5kc1dpdGgoXCJGdW5jdGlvbjJcIikgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZS5pbmNsdWRlcyhcIkZ1bmN0aW9uXCIpIC8vIENhdGNoIHBhdGNoZWQgdmVyc2lvbnMgbGlrZSBEb2NrZXJJbWFnZUZ1bmN0aW9uV2l0aENhcHR1cmVcblxuICAgIGlmICghaXNGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gRXhjbHVkZSBDZm5GdW5jdGlvbiAodGhlIEwxIGNvbnN0cnVjdClcbiAgICBpZiAoY29uc3RydWN0b3JOYW1lID09PSBcIkNmbkZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIFZlcmlmeSBpdCBoYXMgZXhwZWN0ZWQgTGFtYmRhIEZ1bmN0aW9uIHByb3BlcnRpZXNcbiAgICBjb25zdCBtYXliZUZ1bmN0aW9uID0gbm9kZSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGZ1bmN0aW9uTmFtZT86IHVua25vd25cbiAgICAgIGZ1bmN0aW9uQXJuPzogdW5rbm93blxuICAgICAgbm9kZT86IHsgZGVmYXVsdENoaWxkPzogdW5rbm93biB9XG4gICAgfVxuXG4gICAgLy8gTXVzdCBoYXZlIGZ1bmN0aW9uTmFtZSBhbmQgZnVuY3Rpb25Bcm4gKElGdW5jdGlvbiBpbnRlcmZhY2UpXG4gICAgaWYgKCFtYXliZUZ1bmN0aW9uLmZ1bmN0aW9uTmFtZSB8fCAhbWF5YmVGdW5jdGlvbi5mdW5jdGlvbkFybikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gTXVzdCBoYXZlIGEgZGVmYXVsdENoaWxkICh0aGUgQ2ZuRnVuY3Rpb24pXG4gICAgaWYgKCFtYXliZUZ1bmN0aW9uLm5vZGU/LmRlZmF1bHRDaGlsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGdW5jdGlvbklkKGZuOiBsYW1iZGEuRnVuY3Rpb24pOiBzdHJpbmcge1xuICAgIC8vIFVzZSB0aGUgY29uc3RydWN0IElEIGFzIHRoZSBmdW5jdGlvbiBJRFxuICAgIC8vIEZvciBuZXN0ZWQgY29uc3RydWN0cywgam9pbiB3aXRoIGRhc2hlc1xuICAgIGNvbnN0IHBhcnRzID0gZm4ubm9kZS5wYXRoLnNwbGl0KFwiL1wiKVxuICAgIC8vIFNraXAgZmlyc3QgcGFydCAoQXBwKSBhbmQgdGFrZSB0aGUgcmVzdFxuICAgIGNvbnN0IHJlbGV2YW50UGFydHMgPSBwYXJ0cy5zbGljZSgxKVxuICAgIHJldHVybiByZWxldmFudFBhcnRzLmpvaW4oXCItXCIpLnJlcGxhY2UoL1teYS16QS1aMC05LV0vZywgXCItXCIpXG4gIH1cblxuICAvKipcbiAgICogR2V0IGhhbmRsZXIgcGF0aHMgZm9yIGEgZnVuY3Rpb24uXG4gICAqIFJldHVybnMgYm90aCB0aGUgb3JpZ2luYWwgaGFuZGxlciAoYXMgc2V0IGluIENmbkZ1bmN0aW9uKSBhbmQgdGhlIGxvY2FsIGhhbmRsZXIgcGF0aC5cbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIChlLmcuLCBub3QgYSBOb2RlanNGdW5jdGlvbikuXG4gICAqL1xuICBwcml2YXRlIGdldEhhbmRsZXJQYXRocyhmbjogbGFtYmRhLkZ1bmN0aW9uKToge1xuICAgIG9yaWdpbmFsSGFuZGxlcjogc3RyaW5nXG4gICAgbG9jYWxIYW5kbGVyOiBzdHJpbmdcbiAgfSB8IG51bGwge1xuICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uXG4gICAgY29uc3Qgb3JpZ2luYWxIYW5kbGVyID0gY2ZuRnVuY3Rpb24uaGFuZGxlciB8fCBcImluZGV4LmhhbmRsZXJcIlxuICAgIGNvbnN0IGNvbnN0cnVjdElkID0gZm4ubm9kZS5pZFxuXG4gICAgLy8gQ2hlY2sgaWYgY2FwdHVyZWQgYnkgdGhlIE5vZGVqc0Z1bmN0aW9uIGhvb2tcbiAgICBjb25zdCBlbnRyeVBhdGggPSBnZXRFbnRyeVBhdGgoZm4pXG4gICAgY29uc3QgaGFuZGxlck5hbWUgPSBnZXRIYW5kbGVyTmFtZShmbikgfHwgXCJoYW5kbGVyXCJcbiAgICBpZiAoZW50cnlQYXRoKSB7XG4gICAgICAvLyBDb252ZXJ0IGVudHJ5IHBhdGggdG8gbG9jYWwgaGFuZGxlciBwYXRoXG4gICAgICAvLyBlLmcuLCBcImZ1bmN0aW9ucy9zMy13cml0ZXIvaGFuZGxlci50c1wiICsgXCJoYW5kbGVyXCIgLT4gXCJmdW5jdGlvbnMvczMtd3JpdGVyL2hhbmRsZXIuaGFuZGxlclwiXG4gICAgICBjb25zdCBsb2NhbEhhbmRsZXIgPSBgJHtlbnRyeVBhdGgucmVwbGFjZShFWFRFTlNJT05fUkVHRVgsIFwiXCIpfS4ke2hhbmRsZXJOYW1lfWBcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW0xpdmVMYW1iZGFdIFVzaW5nIGNhcHR1cmVkIGVudHJ5IGZvciAke2NvbnN0cnVjdElkfTogJHtsb2NhbEhhbmRsZXJ9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiB7IG9yaWdpbmFsSGFuZGxlciwgbG9jYWxIYW5kbGVyIH1cbiAgICB9XG5cbiAgICAvLyBObyBoYW5kbGVyIHBhdGggZm91bmQgLSB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKG5vdCBhIE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24pXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0xpdmVMYW1iZGFdIFNraXBwaW5nIHVuc3VwcG9ydGVkIGZ1bmN0aW9uIFwiJHtjb25zdHJ1Y3RJZH1cIjogYCArXG4gICAgICAgIGBub3QgYSBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uIChvciBib290c3RyYXAgaG9vayB3YXMgbm90IGluc3RhbGxlZCBlYXJseSBlbm91Z2gpYCxcbiAgICApXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSBEb2NrZXJJbWFnZUZ1bmN0aW9uIHRvIHVzZSB0aGUgYnJpZGdlIERvY2tlciBpbWFnZS5cbiAgICogU3RvcmVzIHRoZSBsb2NhbCBEb2NrZXIgY29udGV4dCBwYXRoIGluIGEgdGFnIGZvciB0aGUgZGFlbW9uIHRvIGJ1aWxkL3J1biBsb2NhbGx5LlxuICAgKi9cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Eb2NrZXJGdW5jdGlvbihcbiAgICBmbjogbGFtYmRhLkZ1bmN0aW9uLFxuICAgIF9zdGFja05hbWU6IHN0cmluZyxcbiAgICBmdW5jdGlvbklkOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uXG4gICAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2YoZm4pXG5cbiAgICAvLyBHZXQgdGhlIGRvY2tlciBjb250ZXh0IHBhdGggZnJvbSB0aGUgaG9va1xuICAgIGNvbnN0IGRvY2tlckNvbnRleHRQYXRoID0gZ2V0RG9ja2VyQ29udGV4dFBhdGgoZm4pXG4gICAgaWYgKCFkb2NrZXJDb250ZXh0UGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgW0xpdmVMYW1iZGFdIE5vIGRvY2tlciBjb250ZXh0IHBhdGggZm9yIFwiJHtmdW5jdGlvbklkfVwiLiBgICtcbiAgICAgICAgICBgVGhlIGJvb3RzdHJhcCBob29rIHdhcyBub3QgaW5zdGFsbGVkIGVhcmx5IGVub3VnaC4gYCArXG4gICAgICAgICAgYEZpeDogaW1wb3J0IFwiY2RrLWxvY2FsLWxhbWJkYS9ib290c3RyYXBcIiBiZWZvcmUgYW55IENESyBpbXBvcnRzIChOb2RlLmpzKSwgYCArXG4gICAgICAgICAgYG9yIHJ1biBCdW4gd2l0aCBcImJ1biAtLXByZWxvYWQgY2RrLWxvY2FsLWxhbWJkYS9ib290c3RyYXBcIi5gLFxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIEdldCBTU00gcGFyYW1ldGVyc1xuICAgIGNvbnN0IGJvb3RzdHJhcFF1YWxpZmllciA9XG4gICAgICBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllclwiKSB8fFxuICAgICAgXCJobmI2NTlmZHNcIlxuICAgIGNvbnN0IHNzbUJhc2VQYXRoID0gYCR7U1NNX0JBU0VfUEFUSH0vJHtib290c3RyYXBRdWFsaWZpZXJ9YFxuXG4gICAgY29uc3QgYXBpQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2FwaS1hcm5gLFxuICAgIClcblxuICAgIC8vIERldGVybWluZSBhcmNoaXRlY3R1cmUgYW5kIGdldCBhcHByb3ByaWF0ZSBicmlkZ2UgaW1hZ2VcbiAgICBjb25zdCBhcmNoaXRlY3R1cmUgPSB0aGlzLmdldEFyY2hpdGVjdHVyZShjZm5GdW5jdGlvbilcbiAgICBjb25zdCBicmlkZ2VJbWFnZVBhcmFtID1cbiAgICAgIGFyY2hpdGVjdHVyZSA9PT0gXCJhcm02NFwiID8gXCJicmlkZ2UtaW1hZ2UtYXJtNjRcIiA6IFwiYnJpZGdlLWltYWdlLXg4Nl82NFwiXG5cbiAgICBjb25zdCBicmlkZ2VJbWFnZVVyaSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS8ke2JyaWRnZUltYWdlUGFyYW19YCxcbiAgICApXG5cbiAgICAvLyBBZGQgdGFnIHdpdGggZG9ja2VyIGNvbnRleHQgcGF0aCBmb3IgZGFlbW9uIGRpc2NvdmVyeVxuICAgIC8vIFRoZSBkYWVtb24gdXNlcyB0aGlzIHRhZyB0byBidWlsZCBhbmQgcnVuIHRoZSBjb250YWluZXIgbG9jYWxseVxuICAgIGNmbkZ1bmN0aW9uLnRhZ3Muc2V0VGFnKExJVkVfTEFNQkRBX0RPQ0tFUl9UQUcsIGRvY2tlckNvbnRleHRQYXRoKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcHVibGlzaC9zdWJzY3JpYmUgdG8gQXBwU3luYyBFdmVudHNcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiYXBwc3luYzpFdmVudENvbm5lY3RcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRQdWJsaXNoXCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50U3Vic2NyaWJlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2FwaUFybiwgYCR7YXBpQXJufS8qYF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byByZWFkIFNTTSBwYXJhbWV0ZXJzIChicmlkZ2UgbmVlZHMgQXBwU3luYyBlbmRwb2ludHMpXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIiwgXCJzc206R2V0UGFyYW1ldGVyc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6c3NtOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnBhcmFtZXRlciR7c3NtQmFzZVBhdGh9LypgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gSW5jcmVhc2UgdGltZW91dCB0byBhbGxvdyBmb3IgbG9jYWwgZGVidWdnaW5nXG4gICAgY2ZuRnVuY3Rpb24udGltZW91dCA9IDMwMCAvLyA1IG1pbnV0ZXNcblxuICAgIC8vIFJlcGxhY2UgdGhlIERvY2tlciBpbWFnZSB3aXRoIHRoZSBicmlkZ2UgaW1hZ2VcbiAgICBjZm5GdW5jdGlvbi5jb2RlID0ge1xuICAgICAgaW1hZ2VVcmk6IGJyaWRnZUltYWdlVXJpLFxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtMaXZlTGFtYmRhXSBSZXBsYWNlZCBEb2NrZXIgaW1hZ2Ugd2l0aCBicmlkZ2UgKCR7YXJjaGl0ZWN0dXJlfSlgLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGFyY2hpdGVjdHVyZSBvZiBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICogRGVmYXVsdHMgdG8geDg2XzY0IGlmIG5vdCBleHBsaWNpdGx5IHNldC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QXJjaGl0ZWN0dXJlKGNmbkZ1bmN0aW9uOiBsYW1iZGEuQ2ZuRnVuY3Rpb24pOiBcImFybTY0XCIgfCBcIng4Nl82NFwiIHtcbiAgICBjb25zdCBhcmNoaXRlY3R1cmVzID0gY2ZuRnVuY3Rpb24uYXJjaGl0ZWN0dXJlcyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgIGlmIChhcmNoaXRlY3R1cmVzPy5pbmNsdWRlcyhcImFybTY0XCIpKSB7XG4gICAgICByZXR1cm4gXCJhcm02NFwiXG4gICAgfVxuICAgIHJldHVybiBcIng4Nl82NFwiXG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUZ1bmN0aW9uKFxuICAgIGZuOiBsYW1iZGEuRnVuY3Rpb24sXG4gICAgX3N0YWNrTmFtZTogc3RyaW5nLFxuICAgIF9mdW5jdGlvbklkOiBzdHJpbmcsXG4gICAgX29yaWdpbmFsSGFuZGxlcjogc3RyaW5nLFxuICAgIGxvY2FsSGFuZGxlcjogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKGZuKVxuXG4gICAgLy8gUmVhZCB2YWx1ZXMgZnJvbSBTU00gcGFyYW1ldGVycyAoY3JlYXRlZCBieSBib290c3RyYXAgc3RhY2spXG4gICAgLy8gVXNlIHRoZSBDREsgYm9vdHN0cmFwIHF1YWxpZmllciBmb3IgcHJvcGVyIHNjb3BpbmdcbiAgICBjb25zdCBib290c3RyYXBRdWFsaWZpZXIgPVxuICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXJcIikgfHxcbiAgICAgIFwiaG5iNjU5ZmRzXCJcbiAgICBjb25zdCBzc21CYXNlUGF0aCA9IGAke1NTTV9CQVNFX1BBVEh9LyR7Ym9vdHN0cmFwUXVhbGlmaWVyfWBcblxuICAgIGNvbnN0IGFwaUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9hcGktYXJuYCxcbiAgICApXG4gICAgY29uc3QgYnJpZGdlQnVja2V0ID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2JyaWRnZS1idWNrZXRgLFxuICAgIClcbiAgICBjb25zdCBicmlkZ2VLZXkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYnJpZGdlLWtleWAsXG4gICAgKVxuXG4gICAgLy8gQWRkIHRhZyB3aXRoIGxvY2FsIGhhbmRsZXIgcGF0aCBmb3IgZGFlbW9uIGRpc2NvdmVyeVxuICAgIC8vIFRoZSBkYWVtb24gcXVlcmllcyBMYW1iZGEgQVBJIGZvciBmdW5jdGlvbnMgd2l0aCB0aGlzIHRhZ1xuICAgIGNmbkZ1bmN0aW9uLnRhZ3Muc2V0VGFnKExJVkVfTEFNQkRBX1RBRywgbG9jYWxIYW5kbGVyKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcHVibGlzaC9zdWJzY3JpYmUgdG8gQXBwU3luYyBFdmVudHNcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiYXBwc3luYzpFdmVudENvbm5lY3RcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRQdWJsaXNoXCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50U3Vic2NyaWJlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2FwaUFybiwgYCR7YXBpQXJufS8qYF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byByZWFkIFNTTSBwYXJhbWV0ZXJzIChicmlkZ2UgbmVlZHMgQXBwU3luYyBlbmRwb2ludHMpXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIiwgXCJzc206R2V0UGFyYW1ldGVyc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6c3NtOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnBhcmFtZXRlciR7c3NtQmFzZVBhdGh9LypgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gSW5jcmVhc2UgdGltZW91dCB0byBhbGxvdyBmb3IgbG9jYWwgZGVidWdnaW5nXG4gICAgY2ZuRnVuY3Rpb24udGltZW91dCA9IDMwMCAvLyA1IG1pbnV0ZXNcblxuICAgIC8vIFJlcGxhY2UgdGhlIGNvZGUgd2l0aCBicmlkZ2UgaGFuZGxlciBmcm9tIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICAgIGNmbkZ1bmN0aW9uLmNvZGUgPSB7XG4gICAgICBzM0J1Y2tldDogYnJpZGdlQnVja2V0LFxuICAgICAgczNLZXk6IGJyaWRnZUtleSxcbiAgICB9XG4gICAgY2ZuRnVuY3Rpb24uaGFuZGxlciA9IFwiaW5kZXguaGFuZGxlclwiXG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgbGl2ZSBtb2RlIGlzIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl2ZU1vZGVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuQ0RLX0xPQ0FMX0xBTUJEQSA9PT0gXCJ0cnVlXCJcbn1cblxuLyoqXG4gKiBBcHBseSBsaXZlIGxhbWJkYSBhc3BlY3QgdG8gYSBDREsgYXBwIG9yIHN0YWNrIGlmIGxpdmUgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBzY29wZSBUaGUgQ0RLIGFwcCBvciBzdGFjayB0byBhcHBseSB0aGUgYXNwZWN0IHRvXG4gKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxpdmUgbGFtYmRhIGFzcGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaXZlTGFtYmRhQXNwZWN0KFxuICBzY29wZTogSUNvbnN0cnVjdCxcbiAgcHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wcyA9IHt9LFxuKTogdm9pZCB7XG4gIGlmICghaXNMaXZlTW9kZUVuYWJsZWQoKSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIG5vdCBlbmFibGVkIChzZXQgQ0RLX0xPQ0FMX0xBTUJEQT10cnVlIHRvIGVuYWJsZSlcIixcbiAgICApXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zb2xlLmxvZyhcIltMaXZlTGFtYmRhXSBMaXZlIG1vZGUgZW5hYmxlZCAtIHRyYW5zZm9ybWluZyBMYW1iZGEgZnVuY3Rpb25zXCIpXG4gIGNkay5Bc3BlY3RzLm9mKHNjb3BlKS5hZGQobmV3IExpdmVMYW1iZGFBc3BlY3QocHJvcHMpKVxufVxuIl19
|
|
@@ -84,7 +84,7 @@ let cachedLambdaModule = null;
|
|
|
84
84
|
* - We can patch Module._load to intercept module loading.
|
|
85
85
|
*/
|
|
86
86
|
if (isBun) {
|
|
87
|
-
const isLiveMode = process.env.
|
|
87
|
+
const isLiveMode = process.env.CDK_LOCAL_LAMBDA === "true";
|
|
88
88
|
// Best-effort patching for Bun. This is only guaranteed to work when this file
|
|
89
89
|
// is preloaded (see note above). Even then, we keep this logic lightweight.
|
|
90
90
|
if (isLiveMode) {
|
|
@@ -95,7 +95,7 @@ if (isBun) {
|
|
|
95
95
|
}
|
|
96
96
|
try {
|
|
97
97
|
// Patch aws-lambda first so NodejsFunction can create dummy Code.fromInline
|
|
98
|
-
// when
|
|
98
|
+
// when CDK_LOCAL_LAMBDA=true (skips bundling).
|
|
99
99
|
const lambdaModule = requireFromProject("aws-cdk-lib/aws-lambda");
|
|
100
100
|
cachedLambdaModule = lambdaModule;
|
|
101
101
|
patchDockerImageFunction(lambdaModule);
|
|
@@ -131,7 +131,7 @@ else {
|
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
133
|
* Create a dummy inline code that does nothing.
|
|
134
|
-
* Used to skip bundling when
|
|
134
|
+
* Used to skip bundling when CDK_LOCAL_LAMBDA=true.
|
|
135
135
|
*/
|
|
136
136
|
function createDummyCode(lambdaModule) {
|
|
137
137
|
// Access lambda.Code.fromInline to create a no-op code
|
|
@@ -153,7 +153,7 @@ function patchNodejsFunction(module) {
|
|
|
153
153
|
// Check if we can patch
|
|
154
154
|
if (module?.NodejsFunction) {
|
|
155
155
|
const OriginalNodejsFunction = module.NodejsFunction;
|
|
156
|
-
const isLiveMode = process.env.
|
|
156
|
+
const isLiveMode = process.env.CDK_LOCAL_LAMBDA === "true";
|
|
157
157
|
// Create wrapper class that captures entry/handler props
|
|
158
158
|
class NodejsFunctionWithCapture extends OriginalNodejsFunction {
|
|
159
159
|
constructor(scope, id, props = {}) {
|
|
@@ -257,4 +257,4 @@ function patchDockerImageFunction(module) {
|
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRXpELDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsc0VBQXNFO0FBQ3RFLElBQUksa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7QUFDM0MsSUFBSSxDQUFDO0lBQ0gsa0JBQWtCLEdBQUcsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQTtBQUNyRSxDQUFDO0FBQUMsTUFBTSxDQUFDO0lBQ1AsbURBQW1EO0FBQ3JELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFBO0FBRXpELDZCQUE2QjtBQUM3QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7QUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRXhELGtDQUFrQztBQUNsQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtBQUV0RTs7O0dBR0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLElBQUksT0FBTyxFQUFrQixDQUFBO0FBRS9EOzs7Ozs7R0FNRztBQUNILFNBQVMsb0JBQW9CLENBQUMsT0FBZTtJQUMzQyxPQUFPLENBQ0wsT0FBTyxLQUFLLCtCQUErQjtRQUMzQyxPQUFP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LG9EQUFvRDtRQUNwRCxNQUFNLDhCQUErQixTQUFRLDJCQUEyQjtZQUN0RSxZQUFZLEtBQWMsRUFBRSxFQUFVLEVBQUUsS0FBK0I7Z0JBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUV2Qiw4Q0FBOEM7Z0JBQzlDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNmLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FDL0MsS0FBSyxDQUFDLElBQWMsQ0FDckIsQ0FBQTtvQkFDRCxJQUFJLFdBQVcsRUFBRSxDQUFDO3dCQUNoQixDQUFDO3dCQUFDLElBQTBDLENBQzFDLHFCQUFxQixDQUN0QixHQUFHLFdBQVcsQ0FBQTtvQkFDakIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUE7O1FBR25DLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFO2dCQUNuRCxLQUFLLEVBQUUsOEJBQThCO2dCQUNyQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsSUFBSTthQUNuQixDQUFDLENBQUE7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQ1YsbURBQW1ELEVBQ2xELEdBQWEsQ0FBQyxPQUFPLENBQ3ZCLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJvb3RzdHJhcCBmaWxlIHRoYXQgaW5zdGFsbHMgaG9va3MgZm9yIE5vZGVqc0Z1bmN0aW9uIGFuZCBEb2NrZXJJbWFnZUZ1bmN0aW9uXG4gKiBCRUZPUkUgYW55IENESyBpbXBvcnRzLlxuICpcbiAqIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBhcyB0aGUgdmVyeSBmaXJzdCB0aGluZyBpbiB0aGUgQ0RLIGFwcCBlbnRyeSBwb2ludCxcbiAqIGJlZm9yZSBhbnkgb3RoZXIgaW1wb3J0cy5cbiAqXG4gKiBSdW50aW1lIHN1cHBvcnQ6XG4gKiAtIE5vZGUuanM6IHBhdGNoZXMgTW9kdWxlLl9sb2FkIHRvIGludGVyY2VwdCBtb2R1bGUgbG9hZGluZ1xuICogLSBCdW46IGRpcmVjdGx5IGltcG9ydHMgYW5kIHBhdGNoZXMgbW9kdWxlcyAoTW9kdWxlLl9sb2FkIG5vdCBzdXBwb3J0ZWQpXG4gKlxuICogSG9va3MgaW5zdGFsbGVkOlxuICogLSBOb2RlanNGdW5jdGlvbjogY2FwdHVyZXMgZW50cnkgYW5kIGhhbmRsZXIgcHJvcHNcbiAqIC0gRG9ja2VySW1hZ2VGdW5jdGlvbjogY2FwdHVyZXMgZG9ja2VyIGNvbnRleHQgcGF0aCBmcm9tIGNvZGUgcHJvcFxuICogLSBEb2NrZXJJbWFnZUNvZGUuZnJvbUltYWdlQXNzZXQ6IGNhcHR1cmVzIHRoZSBkaXJlY3RvcnkgcGF0aFxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIlxuXG5jb25zdCByZXF1aXJlRnJvbVBhY2thZ2UgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybClcblxuLy8gUHJlZmVyIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgKkNESyBhcHAgcHJvamVjdCogKHByb2Nlc3MuY3dkKCkpLlxuLy8gVGhpcyBhdm9pZHMgcGF0Y2hpbmcgYSBuZXN0ZWQgYXdzLWNkay1saWIgY29weSB3aGVuIGNkay1sb2NhbC1sYW1iZGEgaXNcbi8vIGluc3RhbGxlZCB3aXRoIGl0cyBvd24gbm9kZV9tb2R1bGVzIChjb21tb24gd2l0aCBwYWNrYWdlIG1hbmFnZXJzKS5cbmxldCByZXF1aXJlRnJvbVByb2plY3QgPSByZXF1aXJlRnJvbVBhY2thZ2VcbnRyeSB7XG4gIHJlcXVpcmVGcm9tUHJvamVjdCA9IGNyZWF0ZVJlcXVpcmUoYCR7cHJvY2Vzcy5jd2QoKX0vcGFja2FnZS5qc29uYClcbn0gY2F0Y2gge1xuICAvLyBGYWxsIGJhY2sgdG8gcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZS5cbn1cblxuLyoqXG4gKiBEZXRlY3QgaWYgd2UncmUgcnVubmluZyBpbiBCdW4gcnVudGltZVxuICovXG5jb25zdCBpc0J1biA9IHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLmJ1biAhPT0gXCJ1bmRlZmluZWRcIlxuXG4vLyBTeW1ib2xzIGZvciBOb2RlanNGdW5jdGlvblxuY29uc3QgRU5UUllfU1lNQk9MID0gU3ltYm9sLmZvcihcImxpdmUtbGFtYmRhOmVudHJ5XCIpXG5jb25zdCBIQU5ETEVSX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJsaXZlLWxhbWJkYTpoYW5kbGVyXCIpXG5cbi8vIFN5bWJvbHMgZm9yIERvY2tlckltYWdlRnVuY3Rpb25cbmNvbnN0IERPQ0tFUl9DT05URVhUX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJsaXZlLWxhbWJkYTpkb2NrZXItY29udGV4dFwiKVxuXG4vKipcbiAqIE1hcCB0byBzdG9yZSBkb2NrZXIgY29udGV4dCBwYXRocyBjYXB0dXJlZCBmcm9tIERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldFxuICogS2V5IGlzIHRoZSBEb2NrZXJJbWFnZUNvZGUgaW5zdGFuY2UsIHZhbHVlIGlzIHRoZSBjb250ZXh0IHBhdGhcbiAqL1xuY29uc3QgZG9ja2VySW1hZ2VDb2RlQ29udGV4dE1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgc3RyaW5nPigpXG5cbi8qKlxuICogQ2hlY2sgaWYgYSBtb2R1bGUgcmVxdWVzdCBpcyBmb3IgYXdzLWxhbWJkYS1ub2RlanMuXG4gKiBXZSBuZWVkIHRvIG1hdGNoOlxuICogLSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCIgKGRpcmVjdCBpbXBvcnQpXG4gKiAtIFBhdGhzIGVuZGluZyB3aXRoIFwiL2F3cy1sYW1iZGEtbm9kZWpzXCIgKHJlc29sdmVkIHBhdGhzKVxuICogLSBQYXRocyBjb250YWluaW5nIFwiL2F3cy1sYW1iZGEtbm9kZWpzL1wiIChzdWJtb2R1bGUgaW1wb3J0cylcbiAqL1xuZnVuY3Rpb24gaXNMYW1iZGFOb2RlanNNb2R1bGUocmVxdWVzdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcmVxdWVzdCA9PT0gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiIHx8XG4gICAgcmVxdWVzdC5lbmRzV2l0aChcIi9hd3MtbGFtYmRhLW5vZGVqc1wiKSB8fFxuICAgIHJlcXVlc3QuaW5jbHVkZXMoXCIvYXdzLWxhbWJkYS1ub2RlanMvXCIpXG4gIClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIG1vZHVsZSByZXF1ZXN0IGlzIGZvciBhd3MtbGFtYmRhIChmb3IgRG9ja2VySW1hZ2VGdW5jdGlvbikuXG4gKiBXZSBuZWVkIHRvIG1hdGNoOlxuICogLSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIiAoZGlyZWN0IGltcG9ydClcbiAqIC0gUGF0aHMgZW5kaW5nIHdpdGggXCIvYXdzLWxhbWJkYVwiIChyZXNvbHZlZCBwYXRocylcbiAqIC0gUGF0aHMgY29udGFpbmluZyBcIi9hd3MtbGFtYmRhL1wiIChzdWJtb2R1bGUgaW1wb3J0cylcbiAqL1xuZnVuY3Rpb24gaXNMYW1iZGFNb2R1bGUocmVxdWVzdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEJlIGNhcmVmdWwgbm90IHRvIG1hdGNoIGF3cy1sYW1iZGEtbm9kZWpzXG4gIGlmIChyZXF1ZXN0LmluY2x1ZGVzKFwiYXdzLWxhbWJkYS1ub2RlanNcIikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gKFxuICAgIHJlcXVlc3QgPT09IFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiIHx8XG4gICAgcmVxdWVzdC5lbmRzV2l0aChcIi9hd3MtbGFtYmRhXCIpIHx8XG4gICAgcmVxdWVzdC5pbmNsdWRlcyhcIi9hd3MtbGFtYmRhL1wiKVxuICApXG59XG5cbi8vIE1vZHVsZSB0eXBlIGZvciB0aGUgbGFtYmRhLW5vZGVqcyBleHBvcnRzXG5pbnRlcmZhY2UgTGFtYmRhTm9kZWpzTW9kdWxlIHtcbiAgTm9kZWpzRnVuY3Rpb246IE5vZGVqc0Z1bmN0aW9uQ29uc3RydWN0b3IgJiB7XG4gICAgX19saXZlTGFtYmRhUGF0Y2hlZD86IGJvb2xlYW5cbiAgfVxufVxuXG4vLyBDb25zdHJ1Y3RvciB0eXBlIHRoYXQgY2FuIGJlIGV4dGVuZGVkXG5pbnRlcmZhY2UgTm9kZWpzRnVuY3Rpb25Db25zdHJ1Y3RvciB7XG4gIG5ldyAoXG4gICAgc2NvcGU6IHVua25vd24sXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wcz86IE5vZGVqc0Z1bmN0aW9uUHJvcHMsXG4gICk6IE5vZGVqc0Z1bmN0aW9uSW5zdGFuY2VcbiAgcHJvdG90eXBlOiBOb2RlanNGdW5jdGlvbkluc3RhbmNlXG59XG5cbmludGVyZmFjZSBOb2RlanNGdW5jdGlvbkluc3RhbmNlIHtcbiAgbm9kZTogeyBhZGRyOiBzdHJpbmcgfVxufVxuXG5pbnRlcmZhY2UgTm9kZWpzRnVuY3Rpb25Qcm9wcyB7XG4gIGVudHJ5Pzogc3RyaW5nXG4gIGhhbmRsZXI/OiBzdHJpbmdcbiAgY29kZT86IHVua25vd24gLy8gbGFtYmRhLkNvZGUgLSBpZiBwcm92aWRlZCwgYnVuZGxpbmcgaXMgc2tpcHBlZFxufVxuXG4vLyBNb2R1bGUgdHlwZSBmb3IgdGhlIGxhbWJkYSBleHBvcnRzXG5pbnRlcmZhY2UgTGFtYmRhTW9kdWxlIHtcbiAgRG9ja2VySW1hZ2VGdW5jdGlvbjogRG9ja2VySW1hZ2VGdW5jdGlvbkNvbnN0cnVjdG9yICYge1xuICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/OiBib29sZWFuXG4gIH1cbiAgRG9ja2VySW1hZ2VDb2RlOiBEb2NrZXJJbWFnZUNvZGVTdGF0aWMgJiB7XG4gICAgX19saXZlTGFtYmRhUGF0Y2hlZD86IGJvb2xlYW5cbiAgfVxufVxuXG4vLyBEb2NrZXJJbWFnZUZ1bmN0aW9uIGNvbnN0cnVjdG9yIHR5cGVcbmludGVyZmFjZSBEb2NrZXJJbWFnZUZ1bmN0aW9uQ29uc3RydWN0b3Ige1xuICBuZXcgKFxuICAgIHNjb3BlOiB1bmtub3duLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgKTogRG9ja2VySW1hZ2VGdW5jdGlvbkluc3RhbmNlXG4gIHByb3RvdHlwZTogRG9ja2VySW1hZ2VGdW5jdGlvbkluc3RhbmNlXG59XG5cbmludGVyZmFjZSBEb2NrZXJJbWFnZUZ1bmN0aW9uSW5zdGFuY2Uge1xuICBub2RlOiB7IGFkZHI6IHN0cmluZyB9XG59XG5cbmludGVyZmFjZSBEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHMge1xuICBjb2RlOiBEb2NrZXJJbWFnZUNvZGVJbnN0YW5jZVxuICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cbi8vIERvY2tlckltYWdlQ29kZSBzdGF0aWMgdHlwZVxuaW50ZXJmYWNlIERvY2tlckltYWdlQ29kZVN0YXRpYyB7XG4gIGZyb21JbWFnZUFzc2V0KFxuICAgIGRpcmVjdG9yeTogc3RyaW5nLFxuICAgIHByb3BzPzogRG9ja2VySW1hZ2VBc3NldFByb3BzLFxuICApOiBEb2NrZXJJbWFnZUNvZGVJbnN0YW5jZVxufVxuXG5pbnRlcmZhY2UgRG9ja2VySW1hZ2VDb2RlSW5zdGFuY2Uge1xuICAvLyBNYXJrZXIgdG8gaWRlbnRpZnkgZG9ja2VyIGltYWdlIGNvZGUgaW5zdGFuY2VzXG4gIF9faXNEb2NrZXJJbWFnZUNvZGU/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBEb2NrZXJJbWFnZUFzc2V0UHJvcHMge1xuICBmaWxlPzogc3RyaW5nXG4gIGNtZD86IHN0cmluZ1tdXG4gIFtrZXk6IHN0cmluZ106IHVua25vd25cbn1cblxuLy8gQ2FjaGUgdGhlIGxhbWJkYSBtb2R1bGUgZm9yIGNyZWF0aW5nIGR1bW15IGNvZGVcbmxldCBjYWNoZWRMYW1iZGFNb2R1bGU6IExhbWJkYU1vZHVsZSB8IG51bGwgPSBudWxsXG5cbi8qKlxuICogSW5zdGFsbCBob29rcyBiYXNlZCBvbiBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIEJ1biBub3RlczpcbiAqIC0gQnVuIGNyZWF0ZXMgYSAqc25hcHNob3QqIG9mIENvbW1vbkpTIG5hbWVkIGV4cG9ydHMgd2hlbiBpbXBvcnRpbmcgZnJvbSBFU00uXG4gKiAgIFRoaXMgbWVhbnMgdGhhdCBtdXRhdGluZy9yZXBsYWNpbmcgYG1vZHVsZS5leHBvcnRzLkZvb2AgQUZURVIgdGhlIEVTTSBpbXBvcnRcbiAqICAgd2FzIGxpbmtlZCB3aWxsIG5vdCBhZmZlY3QgYGltcG9ydCB7IEZvbyB9IGZyb20gXCIuLi5cImAgaW4gdGhlIGN1cnJlbnQgcHJvY2Vzcy5cbiAqIC0gVGhlcmVmb3JlLCBCdW4gcGF0Y2hpbmcgb25seSB3b3JrcyByZWxpYWJseSB3aGVuIHRoaXMgYm9vdHN0cmFwIHJ1bnMgYmVmb3JlXG4gKiAgIHRoZSBhcHAgZW50cnkgcG9pbnQgaXMgbG9hZGVkLCBlLmcuIHZpYSBgYnVuIC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcGAuXG4gKlxuICogTm9kZS5qczpcbiAqIC0gV2UgY2FuIHBhdGNoIE1vZHVsZS5fbG9hZCB0byBpbnRlcmNlcHQgbW9kdWxlIGxvYWRpbmcuXG4gKi9cbmlmIChpc0J1bikge1xuICBjb25zdCBpc0xpdmVNb2RlID0gcHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09IFwidHJ1ZVwiXG5cbiAgLy8gQmVzdC1lZmZvcnQgcGF0Y2hpbmcgZm9yIEJ1bi4gVGhpcyBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayB3aGVuIHRoaXMgZmlsZVxuICAvLyBpcyBwcmVsb2FkZWQgKHNlZSBub3RlIGFib3ZlKS4gRXZlbiB0aGVuLCB3ZSBrZWVwIHRoaXMgbG9naWMgbGlnaHR3ZWlnaHQuXG4gIGlmIChpc0xpdmVNb2RlKSB7XG4gICAgY29uc3QgaGFzUHJlbG9hZEZsYWcgPSBwcm9jZXNzLmV4ZWNBcmd2LmluY2x1ZGVzKFwiLS1wcmVsb2FkXCIpXG5cbiAgICBpZiAoIWhhc1ByZWxvYWRGbGFnKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0xpdmVMYW1iZGFdIFdhcm5pbmc6IFJ1bm5pbmcgaW4gQnVuIHdpdGhvdXQgLS1wcmVsb2FkLiBBdXRvbWF0aWMgaGFuZGxlci9kb2NrZXIgZGV0ZWN0aW9uIGlzIGxpa2VseSBkaXNhYmxlZC5cIixcbiAgICAgIClcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gRml4OiBydW4gQnVuIHdpdGggYC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcGAuXCIsXG4gICAgICApXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhdGNoIGF3cy1sYW1iZGEgZmlyc3Qgc28gTm9kZWpzRnVuY3Rpb24gY2FuIGNyZWF0ZSBkdW1teSBDb2RlLmZyb21JbmxpbmVcbiAgICAgIC8vIHdoZW4gQ0RLX0xJVkU9dHJ1ZSAoc2tpcHMgYnVuZGxpbmcpLlxuICAgICAgY29uc3QgbGFtYmRhTW9kdWxlID0gcmVxdWlyZUZyb21Qcm9qZWN0KFxuICAgICAgICBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIixcbiAgICAgICkgYXMgTGFtYmRhTW9kdWxlXG4gICAgICBjYWNoZWRMYW1iZGFNb2R1bGUgPSBsYW1iZGFNb2R1bGVcbiAgICAgIHBhdGNoRG9ja2VySW1hZ2VGdW5jdGlvbihsYW1iZGFNb2R1bGUpXG5cbiAgICAgIGNvbnN0IG5vZGVqc01vZHVsZSA9IHJlcXVpcmVGcm9tUHJvamVjdChcbiAgICAgICAgXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiLFxuICAgICAgKSBhcyBMYW1iZGFOb2RlanNNb2R1bGVcbiAgICAgIHBhdGNoTm9kZWpzRnVuY3Rpb24obm9kZWpzTW9kdWxlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIltMaXZlTGFtYmRhXSBXYXJuaW5nOiBGYWlsZWQgdG8gaW5zdGFsbCBCdW4gcGF0Y2hlczpcIixcbiAgICAgICAgKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIClcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQXV0b21hdGljIGhhbmRsZXIvZG9ja2VyIGRldGVjdGlvbiBpcyByZXF1aXJlZDsgZW5zdXJlIGJvb3RzdHJhcCBpcyBwcmVsb2FkZWQuXCIsXG4gICAgICApXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0xpdmVMYW1iZGFdIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlcmVuZGRlYm9lci9jZGstbG9jYWwtbGFtYmRhI2J1bi1zdXBwb3J0XCIsXG4gICAgICApXG4gICAgfVxuICB9XG59IGVsc2Uge1xuICAvLyBOb2RlLmpzOiB1c2UgTW9kdWxlLl9sb2FkIGhvb2sgdG8gaW50ZXJjZXB0IG1vZHVsZSBsb2FkaW5nXG4gIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmVGcm9tUGFja2FnZShcIm5vZGU6bW9kdWxlXCIpXG4gIGNvbnN0IG9yaWdpbmFsTG9hZDogKFxuICAgIHJlcXVlc3Q6IHN0cmluZyxcbiAgICBwYXJlbnQ6IE5vZGVNb2R1bGUgfCB1bmRlZmluZWQsXG4gICAgaXNNYWluOiBib29sZWFuLFxuICApID0+IHVua25vd24gPSBNb2R1bGUuX2xvYWRcblxuICBNb2R1bGUuX2xvYWQgPSBmdW5jdGlvbiAoXG4gICAgcmVxdWVzdDogc3RyaW5nLFxuICAgIHBhcmVudDogTm9kZU1vZHVsZSB8IHVuZGVmaW5lZCxcbiAgICBpc01haW46IGJvb2xlYW4sXG4gICk6IHVua25vd24ge1xuICAgIC8vIENhbGwgb3JpZ2luYWwgbG9hZCAtIGxldCBlcnJvcnMgcHJvcGFnYXRlIG5hdHVyYWxseVxuICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsTG9hZC5jYWxsKHRoaXMsIHJlcXVlc3QsIHBhcmVudCwgaXNNYWluKVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFtYmRhLW5vZGVqcyBtb2R1bGVcbiAgICBpZiAoaXNMYW1iZGFOb2RlanNNb2R1bGUocmVxdWVzdCkpIHtcbiAgICAgIHBhdGNoTm9kZWpzRnVuY3Rpb24ocmVzdWx0IGFzIExhbWJkYU5vZGVqc01vZHVsZSB8IG51bGwpXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFtYmRhIG1vZHVsZSAoZm9yIERvY2tlckltYWdlRnVuY3Rpb24gYW5kIENvZGUuZnJvbUlubGluZSlcbiAgICBpZiAoaXNMYW1iZGFNb2R1bGUocmVxdWVzdCkpIHtcbiAgICAgIC8vIENhY2hlIHRoZSBsYW1iZGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgQ29kZS5mcm9tSW5saW5lIGluIE5vZGVqc0Z1bmN0aW9uIHBhdGNoXG4gICAgICBjYWNoZWRMYW1iZGFNb2R1bGUgPSByZXN1bHQgYXMgTGFtYmRhTW9kdWxlIHwgbnVsbFxuICAgICAgcGF0Y2hEb2NrZXJJbWFnZUZ1bmN0aW9uKHJlc3VsdCBhcyBMYW1iZGFNb2R1bGUgfCBudWxsKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGR1bW15IGlubGluZSBjb2RlIHRoYXQgZG9lcyBub3RoaW5nLlxuICogVXNlZCB0byBza2lwIGJ1bmRsaW5nIHdoZW4gQ0RLX0xJVkU9dHJ1ZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRHVtbXlDb2RlKGxhbWJkYU1vZHVsZTogTGFtYmRhTW9kdWxlKTogdW5rbm93biB7XG4gIC8vIEFjY2VzcyBsYW1iZGEuQ29kZS5mcm9tSW5saW5lIHRvIGNyZWF0ZSBhIG5vLW9wIGNvZGVcbiAgLy8gVGhpcyBhdm9pZHMgYnVuZGxpbmcgZW50aXJlbHkgc2luY2Ugd2UgcHJvdmlkZSBwcmUtYnVpbHQgY29kZVxuICBjb25zdCBDb2RlID0gKFxuICAgIGxhbWJkYU1vZHVsZSBhcyB1bmtub3duIGFzIHtcbiAgICAgIENvZGU/OiB7IGZyb21JbmxpbmU/OiAoY29kZTogc3RyaW5nKSA9PiB1bmtub3duIH1cbiAgICB9XG4gICkuQ29kZVxuICBpZiAoQ29kZT8uZnJvbUlubGluZSkge1xuICAgIHJldHVybiBDb2RlLmZyb21JbmxpbmUoXCIvLyBQbGFjZWhvbGRlciAtIHJlcGxhY2VkIGJ5IExpdmVMYW1iZGFBc3BlY3RcIilcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUGF0Y2ggTm9kZWpzRnVuY3Rpb24gdG8gY2FwdHVyZSBlbnRyeSBhbmQgaGFuZGxlciBwcm9wc1xuICovXG5mdW5jdGlvbiBwYXRjaE5vZGVqc0Z1bmN0aW9uKG1vZHVsZTogTGFtYmRhTm9kZWpzTW9kdWxlIHwgbnVsbCk6IHZvaWQge1xuICAvLyBJZiBhbHJlYWR5IHBhdGNoZWQsIHNraXBcbiAgaWYgKG1vZHVsZT8uTm9kZWpzRnVuY3Rpb24/Ll9fbGl2ZUxhbWJkYVBhdGNoZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHdlIGNhbiBwYXRjaFxuICBpZiAobW9kdWxlPy5Ob2RlanNGdW5jdGlvbikge1xuICAgIGNvbnN0IE9yaWdpbmFsTm9kZWpzRnVuY3Rpb24gPSBtb2R1bGUuTm9kZWpzRnVuY3Rpb25cbiAgICBjb25zdCBpc0xpdmVNb2RlID0gcHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09IFwidHJ1ZVwiXG5cbiAgICAvLyBDcmVhdGUgd3JhcHBlciBjbGFzcyB0aGF0IGNhcHR1cmVzIGVudHJ5L2hhbmRsZXIgcHJvcHNcbiAgICBjbGFzcyBOb2RlanNGdW5jdGlvbldpdGhDYXB0dXJlIGV4dGVuZHMgT3JpZ2luYWxOb2RlanNGdW5jdGlvbiB7XG4gICAgICBjb25zdHJ1Y3RvcihzY29wZTogdW5rbm93biwgaWQ6IHN0cmluZywgcHJvcHM6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPSB7fSkge1xuICAgICAgICAvLyBJbiBsaXZlIG1vZGUsIHByb3ZpZGUgZHVtbXkgY29kZSB0byBza2lwIGJ1bmRsaW5nIGVudGlyZWx5XG4gICAgICAgIC8vIFRoZSBhc3BlY3Qgd2lsbCByZXBsYWNlIHRoaXMgd2l0aCB0aGUgYnJpZGdlIGNvZGUgZnJvbSBTM1xuICAgICAgICBsZXQgbW9kaWZpZWRQcm9wcyA9IHByb3BzXG4gICAgICAgIGlmIChpc0xpdmVNb2RlICYmICFwcm9wcy5jb2RlICYmIGNhY2hlZExhbWJkYU1vZHVsZSkge1xuICAgICAgICAgIGNvbnN0IGR1bW15Q29kZSA9IGNyZWF0ZUR1bW15Q29kZShjYWNoZWRMYW1iZGFNb2R1bGUpXG4gICAgICAgICAgaWYgKGR1bW15Q29kZSkge1xuICAgICAgICAgICAgbW9kaWZpZWRQcm9wcyA9IHsgLi4ucHJvcHMsIGNvZGU6IGR1bW15Q29kZSB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCBtb2RpZmllZFByb3BzKVxuXG4gICAgICAgIC8vIFN0b3JlIHRoZSBlbnRyeSBwYXRoIG9uIHRoZSBpbnN0YW5jZSAodmFsaWRhdGUgaXQncyBhIG5vbi1lbXB0eSBzdHJpbmcpXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMuZW50cnkgPT09IFwic3RyaW5nXCIgJiYgcHJvcHMuZW50cnkudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA7KHRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3ltYm9sLCBzdHJpbmc+KVtFTlRSWV9TWU1CT0xdID1cbiAgICAgICAgICAgIHByb3BzLmVudHJ5XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSB0aGUgaGFuZGxlciBuYW1lICh2YWxpZGF0ZSBhbmQgZGVmYXVsdCB0byAnaGFuZGxlcicpXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPVxuICAgICAgICAgIHR5cGVvZiBwcm9wcy5oYW5kbGVyID09PSBcInN0cmluZ1wiICYmIHByb3BzLmhhbmRsZXIudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gcHJvcHMuaGFuZGxlclxuICAgICAgICAgICAgOiBcImhhbmRsZXJcIlxuICAgICAgICA7KHRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3ltYm9sLCBzdHJpbmc+KVtIQU5ETEVSX1NZTUJPTF0gPSBoYW5kbGVyXG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBfX2xpdmVMYW1iZGFQYXRjaGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFRyeSB0byByZXBsYWNlIC0gZmFpbCBpZiB3ZSBjYW4ndFxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcIk5vZGVqc0Z1bmN0aW9uXCIsIHtcbiAgICAgICAgdmFsdWU6IE5vZGVqc0Z1bmN0aW9uV2l0aENhcHR1cmUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gRkFUQUw6IENhbm5vdCBwYXRjaCBOb2RlanNGdW5jdGlvbiAtIG1vZHVsZSBpcyBmcm96ZW4gb3Igc2VhbGVkLlwiLFxuICAgICAgKVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gVGhpcyBjYW4gaGFwcGVuIHdpdGggY2VydGFpbiBidW5kbGVycyBvciBOb2RlLmpzIGNvbmZpZ3VyYXRpb25zLlwiLFxuICAgICAgKVxuICAgICAgY29uc29sZS5lcnJvcihcIltMaXZlTGFtYmRhXSBFcnJvcjpcIiwgKGVyciBhcyBFcnJvcikubWVzc2FnZSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhdGNoIERvY2tlckltYWdlRnVuY3Rpb24gYW5kIERvY2tlckltYWdlQ29kZSB0byBjYXB0dXJlIGRvY2tlciBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHBhdGNoRG9ja2VySW1hZ2VGdW5jdGlvbihtb2R1bGU6IExhbWJkYU1vZHVsZSB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKCFtb2R1bGUpIHJldHVyblxuXG4gIC8vIEZpcnN0LCBwYXRjaCBEb2NrZXJJbWFnZUNvZGUuZnJvbUltYWdlQXNzZXQgdG8gY2FwdHVyZSB0aGUgZGlyZWN0b3J5IHBhdGhcbiAgaWYgKG1vZHVsZS5Eb2NrZXJJbWFnZUNvZGUgJiYgIW1vZHVsZS5Eb2NrZXJJbWFnZUNvZGUuX19saXZlTGFtYmRhUGF0Y2hlZCkge1xuICAgIGNvbnN0IE9yaWdpbmFsRG9ja2VySW1hZ2VDb2RlID0gbW9kdWxlLkRvY2tlckltYWdlQ29kZVxuICAgIGNvbnN0IG9yaWdpbmFsRnJvbUltYWdlQXNzZXQgPSBPcmlnaW5hbERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldFxuXG4gICAgLy8gV3JhcCBmcm9tSW1hZ2VBc3NldCB0byBjYXB0dXJlIHRoZSBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRjaGVkRnJvbUltYWdlQXNzZXQgPSAoXG4gICAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgIHByb3BzPzogRG9ja2VySW1hZ2VBc3NldFByb3BzLFxuICAgICk6IERvY2tlckltYWdlQ29kZUluc3RhbmNlID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsRnJvbUltYWdlQXNzZXQuY2FsbChcbiAgICAgICAgT3JpZ2luYWxEb2NrZXJJbWFnZUNvZGUsXG4gICAgICAgIGRpcmVjdG9yeSxcbiAgICAgICAgcHJvcHMsXG4gICAgICApXG5cbiAgICAgIC8vIFN0b3JlIHRoZSBkaXJlY3RvcnkgcGF0aCBpbiB0aGUgV2Vha01hcCwga2V5ZWQgYnkgdGhlIHJlc3VsdCBpbnN0YW5jZVxuICAgICAgZG9ja2VySW1hZ2VDb2RlQ29udGV4dE1hcC5zZXQocmVzdWx0IGFzIG9iamVjdCwgZGlyZWN0b3J5KVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmlnaW5hbERvY2tlckltYWdlQ29kZSwgXCJmcm9tSW1hZ2VBc3NldFwiLCB7XG4gICAgICAgIHZhbHVlOiBwYXRjaGVkRnJvbUltYWdlQXNzZXQsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgICAgOyhcbiAgICAgICAgT3JpZ2luYWxEb2NrZXJJbWFnZUNvZGUgYXMgRG9ja2VySW1hZ2VDb2RlU3RhdGljICYge1xuICAgICAgICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/OiBib29sZWFuXG4gICAgICAgIH1cbiAgICAgICkuX19saXZlTGFtYmRhUGF0Y2hlZCA9IHRydWVcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQ291bGQgbm90IHBhdGNoIERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldDpcIixcbiAgICAgICAgKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBUaGVuLCBwYXRjaCBEb2NrZXJJbWFnZUZ1bmN0aW9uIHRvIHJlYWQgZnJvbSB0aGUgV2Vha01hcFxuICBpZiAoXG4gICAgbW9kdWxlLkRvY2tlckltYWdlRnVuY3Rpb24gJiZcbiAgICAhbW9kdWxlLkRvY2tlckltYWdlRnVuY3Rpb24uX19saXZlTGFtYmRhUGF0Y2hlZFxuICApIHtcbiAgICBjb25zdCBPcmlnaW5hbERvY2tlckltYWdlRnVuY3Rpb24gPSBtb2R1bGUuRG9ja2VySW1hZ2VGdW5jdGlvblxuXG4gICAgLy8gQ3JlYXRlIHdyYXBwZXIgY2xhc3MgdGhhdCBjYXB0dXJlcyBkb2NrZXIgY29udGV4dFxuICAgIGNsYXNzIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZSBleHRlbmRzIE9yaWdpbmFsRG9ja2VySW1hZ2VGdW5jdGlvbiB7XG4gICAgICBjb25zdHJ1Y3RvcihzY29wZTogdW5rbm93biwgaWQ6IHN0cmluZywgcHJvcHM6IERvY2tlckltYWdlRnVuY3Rpb25Qcm9wcykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKVxuXG4gICAgICAgIC8vIExvb2sgdXAgdGhlIGRvY2tlciBjb250ZXh0IGZyb20gdGhlIFdlYWtNYXBcbiAgICAgICAgaWYgKHByb3BzLmNvZGUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0UGF0aCA9IGRvY2tlckltYWdlQ29kZUNvbnRleHRNYXAuZ2V0KFxuICAgICAgICAgICAgcHJvcHMuY29kZSBhcyBvYmplY3QsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgICAgOyh0aGlzIGFzIHVua25vd24gYXMgUmVjb3JkPHN5bWJvbCwgc3RyaW5nPilbXG4gICAgICAgICAgICAgIERPQ0tFUl9DT05URVhUX1NZTUJPTFxuICAgICAgICAgICAgXSA9IGNvbnRleHRQYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBfX2xpdmVMYW1iZGFQYXRjaGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcIkRvY2tlckltYWdlRnVuY3Rpb25cIiwge1xuICAgICAgICB2YWx1ZTogRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQ291bGQgbm90IHBhdGNoIERvY2tlckltYWdlRnVuY3Rpb246XCIsXG4gICAgICAgIChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRXpELDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsc0VBQXNFO0FBQ3RFLElBQUksa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7QUFDM0MsSUFBSSxDQUFDO0lBQ0gsa0JBQWtCLEdBQUcsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQTtBQUNyRSxDQUFDO0FBQUMsTUFBTSxDQUFDO0lBQ1AsbURBQW1EO0FBQ3JELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFBO0FBRXpELDZCQUE2QjtBQUM3QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7QUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRXhELGtDQUFrQztBQUNsQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtBQUV0RTs7O0dBR0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLElBQUksT0FBTyxFQUFrQixDQUFBO0FBRS9EOzs7Ozs7R0FNRztBQUNILFNBQVMsb0JBQW9CLENBQUMsT0FBZTtJQUMzQyxPQUFPLENBQ0wsT0FBTyxLQUFLLCtCQUErQjtRQUMzQyxPQUFP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QUU5RCxvREFBb0Q7UUFDcEQsTUFBTSw4QkFBK0IsU0FBUSwyQkFBMkI7WUFDdEUsWUFBWSxLQUFjLEVBQUUsRUFBVSxFQUFFLEtBQStCO2dCQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFFdkIsOENBQThDO2dCQUM5QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDZixNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQyxHQUFHLENBQy9DLEtBQUssQ0FBQyxJQUFjLENBQ3JCLENBQUE7b0JBQ0QsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDaEIsQ0FBQzt3QkFBQyxJQUEwQyxDQUMxQyxxQkFBcUIsQ0FDdEIsR0FBRyxXQUFXLENBQUE7b0JBQ2pCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFBOztRQUduQyxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRTtnQkFDbkQsS0FBSyxFQUFFLDhCQUE4QjtnQkFDckMsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUNWLG1EQUFtRCxFQUNsRCxHQUFhLENBQUMsT0FBTyxDQUN2QixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCb290c3RyYXAgZmlsZSB0aGF0IGluc3RhbGxzIGhvb2tzIGZvciBOb2RlanNGdW5jdGlvbiBhbmQgRG9ja2VySW1hZ2VGdW5jdGlvblxuICogQkVGT1JFIGFueSBDREsgaW1wb3J0cy5cbiAqXG4gKiBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYXMgdGhlIHZlcnkgZmlyc3QgdGhpbmcgaW4gdGhlIENESyBhcHAgZW50cnkgcG9pbnQsXG4gKiBiZWZvcmUgYW55IG90aGVyIGltcG9ydHMuXG4gKlxuICogUnVudGltZSBzdXBwb3J0OlxuICogLSBOb2RlLmpzOiBwYXRjaGVzIE1vZHVsZS5fbG9hZCB0byBpbnRlcmNlcHQgbW9kdWxlIGxvYWRpbmdcbiAqIC0gQnVuOiBkaXJlY3RseSBpbXBvcnRzIGFuZCBwYXRjaGVzIG1vZHVsZXMgKE1vZHVsZS5fbG9hZCBub3Qgc3VwcG9ydGVkKVxuICpcbiAqIEhvb2tzIGluc3RhbGxlZDpcbiAqIC0gTm9kZWpzRnVuY3Rpb246IGNhcHR1cmVzIGVudHJ5IGFuZCBoYW5kbGVyIHByb3BzXG4gKiAtIERvY2tlckltYWdlRnVuY3Rpb246IGNhcHR1cmVzIGRvY2tlciBjb250ZXh0IHBhdGggZnJvbSBjb2RlIHByb3BcbiAqIC0gRG9ja2VySW1hZ2VDb2RlLmZyb21JbWFnZUFzc2V0OiBjYXB0dXJlcyB0aGUgZGlyZWN0b3J5IHBhdGhcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCJcblxuY29uc3QgcmVxdWlyZUZyb21QYWNrYWdlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpXG5cbi8vIFByZWZlciByZXNvbHZpbmcgZGVwZW5kZW5jaWVzIGZyb20gdGhlICpDREsgYXBwIHByb2plY3QqIChwcm9jZXNzLmN3ZCgpKS5cbi8vIFRoaXMgYXZvaWRzIHBhdGNoaW5nIGEgbmVzdGVkIGF3cy1jZGstbGliIGNvcHkgd2hlbiBjZGstbG9jYWwtbGFtYmRhIGlzXG4vLyBpbnN0YWxsZWQgd2l0aCBpdHMgb3duIG5vZGVfbW9kdWxlcyAoY29tbW9uIHdpdGggcGFja2FnZSBtYW5hZ2VycykuXG5sZXQgcmVxdWlyZUZyb21Qcm9qZWN0ID0gcmVxdWlyZUZyb21QYWNrYWdlXG50cnkge1xuICByZXF1aXJlRnJvbVByb2plY3QgPSBjcmVhdGVSZXF1aXJlKGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmApXG59IGNhdGNoIHtcbiAgLy8gRmFsbCBiYWNrIHRvIHJlc29sdmluZyByZWxhdGl2ZSB0byB0aGlzIHBhY2thZ2UuXG59XG5cbi8qKlxuICogRGV0ZWN0IGlmIHdlJ3JlIHJ1bm5pbmcgaW4gQnVuIHJ1bnRpbWVcbiAqL1xuY29uc3QgaXNCdW4gPSB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5idW4gIT09IFwidW5kZWZpbmVkXCJcblxuLy8gU3ltYm9scyBmb3IgTm9kZWpzRnVuY3Rpb25cbmNvbnN0IEVOVFJZX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJsaXZlLWxhbWJkYTplbnRyeVwiKVxuY29uc3QgSEFORExFUl9TWU1CT0wgPSBTeW1ib2wuZm9yKFwibGl2ZS1sYW1iZGE6aGFuZGxlclwiKVxuXG4vLyBTeW1ib2xzIGZvciBEb2NrZXJJbWFnZUZ1bmN0aW9uXG5jb25zdCBET0NLRVJfQ09OVEVYVF9TWU1CT0wgPSBTeW1ib2wuZm9yKFwibGl2ZS1sYW1iZGE6ZG9ja2VyLWNvbnRleHRcIilcblxuLyoqXG4gKiBNYXAgdG8gc3RvcmUgZG9ja2VyIGNvbnRleHQgcGF0aHMgY2FwdHVyZWQgZnJvbSBEb2NrZXJJbWFnZUNvZGUuZnJvbUltYWdlQXNzZXRcbiAqIEtleSBpcyB0aGUgRG9ja2VySW1hZ2VDb2RlIGluc3RhbmNlLCB2YWx1ZSBpcyB0aGUgY29udGV4dCBwYXRoXG4gKi9cbmNvbnN0IGRvY2tlckltYWdlQ29kZUNvbnRleHRNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIHN0cmluZz4oKVxuXG4vKipcbiAqIENoZWNrIGlmIGEgbW9kdWxlIHJlcXVlc3QgaXMgZm9yIGF3cy1sYW1iZGEtbm9kZWpzLlxuICogV2UgbmVlZCB0byBtYXRjaDpcbiAqIC0gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiIChkaXJlY3QgaW1wb3J0KVxuICogLSBQYXRocyBlbmRpbmcgd2l0aCBcIi9hd3MtbGFtYmRhLW5vZGVqc1wiIChyZXNvbHZlZCBwYXRocylcbiAqIC0gUGF0aHMgY29udGFpbmluZyBcIi9hd3MtbGFtYmRhLW5vZGVqcy9cIiAoc3VibW9kdWxlIGltcG9ydHMpXG4gKi9cbmZ1bmN0aW9uIGlzTGFtYmRhTm9kZWpzTW9kdWxlKHJlcXVlc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHJlcXVlc3QgPT09IFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIiB8fFxuICAgIHJlcXVlc3QuZW5kc1dpdGgoXCIvYXdzLWxhbWJkYS1ub2RlanNcIikgfHxcbiAgICByZXF1ZXN0LmluY2x1ZGVzKFwiL2F3cy1sYW1iZGEtbm9kZWpzL1wiKVxuICApXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBtb2R1bGUgcmVxdWVzdCBpcyBmb3IgYXdzLWxhbWJkYSAoZm9yIERvY2tlckltYWdlRnVuY3Rpb24pLlxuICogV2UgbmVlZCB0byBtYXRjaDpcbiAqIC0gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCIgKGRpcmVjdCBpbXBvcnQpXG4gKiAtIFBhdGhzIGVuZGluZyB3aXRoIFwiL2F3cy1sYW1iZGFcIiAocmVzb2x2ZWQgcGF0aHMpXG4gKiAtIFBhdGhzIGNvbnRhaW5pbmcgXCIvYXdzLWxhbWJkYS9cIiAoc3VibW9kdWxlIGltcG9ydHMpXG4gKi9cbmZ1bmN0aW9uIGlzTGFtYmRhTW9kdWxlKHJlcXVlc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBCZSBjYXJlZnVsIG5vdCB0byBtYXRjaCBhd3MtbGFtYmRhLW5vZGVqc1xuICBpZiAocmVxdWVzdC5pbmNsdWRlcyhcImF3cy1sYW1iZGEtbm9kZWpzXCIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIChcbiAgICByZXF1ZXN0ID09PSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIiB8fFxuICAgIHJlcXVlc3QuZW5kc1dpdGgoXCIvYXdzLWxhbWJkYVwiKSB8fFxuICAgIHJlcXVlc3QuaW5jbHVkZXMoXCIvYXdzLWxhbWJkYS9cIilcbiAgKVxufVxuXG4vLyBNb2R1bGUgdHlwZSBmb3IgdGhlIGxhbWJkYS1ub2RlanMgZXhwb3J0c1xuaW50ZXJmYWNlIExhbWJkYU5vZGVqc01vZHVsZSB7XG4gIE5vZGVqc0Z1bmN0aW9uOiBOb2RlanNGdW5jdGlvbkNvbnN0cnVjdG9yICYge1xuICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/OiBib29sZWFuXG4gIH1cbn1cblxuLy8gQ29uc3RydWN0b3IgdHlwZSB0aGF0IGNhbiBiZSBleHRlbmRlZFxuaW50ZXJmYWNlIE5vZGVqc0Z1bmN0aW9uQ29uc3RydWN0b3Ige1xuICBuZXcgKFxuICAgIHNjb3BlOiB1bmtub3duLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBOb2RlanNGdW5jdGlvblByb3BzLFxuICApOiBOb2RlanNGdW5jdGlvbkluc3RhbmNlXG4gIHByb3RvdHlwZTogTm9kZWpzRnVuY3Rpb25JbnN0YW5jZVxufVxuXG5pbnRlcmZhY2UgTm9kZWpzRnVuY3Rpb25JbnN0YW5jZSB7XG4gIG5vZGU6IHsgYWRkcjogc3RyaW5nIH1cbn1cblxuaW50ZXJmYWNlIE5vZGVqc0Z1bmN0aW9uUHJvcHMge1xuICBlbnRyeT86IHN0cmluZ1xuICBoYW5kbGVyPzogc3RyaW5nXG4gIGNvZGU/OiB1bmtub3duIC8vIGxhbWJkYS5Db2RlIC0gaWYgcHJvdmlkZWQsIGJ1bmRsaW5nIGlzIHNraXBwZWRcbn1cblxuLy8gTW9kdWxlIHR5cGUgZm9yIHRoZSBsYW1iZGEgZXhwb3J0c1xuaW50ZXJmYWNlIExhbWJkYU1vZHVsZSB7XG4gIERvY2tlckltYWdlRnVuY3Rpb246IERvY2tlckltYWdlRnVuY3Rpb25Db25zdHJ1Y3RvciAmIHtcbiAgICBfX2xpdmVMYW1iZGFQYXRjaGVkPzogYm9vbGVhblxuICB9XG4gIERvY2tlckltYWdlQ29kZTogRG9ja2VySW1hZ2VDb2RlU3RhdGljICYge1xuICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/OiBib29sZWFuXG4gIH1cbn1cblxuLy8gRG9ja2VySW1hZ2VGdW5jdGlvbiBjb25zdHJ1Y3RvciB0eXBlXG5pbnRlcmZhY2UgRG9ja2VySW1hZ2VGdW5jdGlvbkNvbnN0cnVjdG9yIHtcbiAgbmV3IChcbiAgICBzY29wZTogdW5rbm93bixcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHMsXG4gICk6IERvY2tlckltYWdlRnVuY3Rpb25JbnN0YW5jZVxuICBwcm90b3R5cGU6IERvY2tlckltYWdlRnVuY3Rpb25JbnN0YW5jZVxufVxuXG5pbnRlcmZhY2UgRG9ja2VySW1hZ2VGdW5jdGlvbkluc3RhbmNlIHtcbiAgbm9kZTogeyBhZGRyOiBzdHJpbmcgfVxufVxuXG5pbnRlcmZhY2UgRG9ja2VySW1hZ2VGdW5jdGlvblByb3BzIHtcbiAgY29kZTogRG9ja2VySW1hZ2VDb2RlSW5zdGFuY2VcbiAgW2tleTogc3RyaW5nXTogdW5rbm93blxufVxuXG4vLyBEb2NrZXJJbWFnZUNvZGUgc3RhdGljIHR5cGVcbmludGVyZmFjZSBEb2NrZXJJbWFnZUNvZGVTdGF0aWMge1xuICBmcm9tSW1hZ2VBc3NldChcbiAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBwcm9wcz86IERvY2tlckltYWdlQXNzZXRQcm9wcyxcbiAgKTogRG9ja2VySW1hZ2VDb2RlSW5zdGFuY2Vcbn1cblxuaW50ZXJmYWNlIERvY2tlckltYWdlQ29kZUluc3RhbmNlIHtcbiAgLy8gTWFya2VyIHRvIGlkZW50aWZ5IGRvY2tlciBpbWFnZSBjb2RlIGluc3RhbmNlc1xuICBfX2lzRG9ja2VySW1hZ2VDb2RlPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgRG9ja2VySW1hZ2VBc3NldFByb3BzIHtcbiAgZmlsZT86IHN0cmluZ1xuICBjbWQ/OiBzdHJpbmdbXVxuICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cbi8vIENhY2hlIHRoZSBsYW1iZGEgbW9kdWxlIGZvciBjcmVhdGluZyBkdW1teSBjb2RlXG5sZXQgY2FjaGVkTGFtYmRhTW9kdWxlOiBMYW1iZGFNb2R1bGUgfCBudWxsID0gbnVsbFxuXG4vKipcbiAqIEluc3RhbGwgaG9va3MgYmFzZWQgb24gcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBCdW4gbm90ZXM6XG4gKiAtIEJ1biBjcmVhdGVzIGEgKnNuYXBzaG90KiBvZiBDb21tb25KUyBuYW1lZCBleHBvcnRzIHdoZW4gaW1wb3J0aW5nIGZyb20gRVNNLlxuICogICBUaGlzIG1lYW5zIHRoYXQgbXV0YXRpbmcvcmVwbGFjaW5nIGBtb2R1bGUuZXhwb3J0cy5Gb29gIEFGVEVSIHRoZSBFU00gaW1wb3J0XG4gKiAgIHdhcyBsaW5rZWQgd2lsbCBub3QgYWZmZWN0IGBpbXBvcnQgeyBGb28gfSBmcm9tIFwiLi4uXCJgIGluIHRoZSBjdXJyZW50IHByb2Nlc3MuXG4gKiAtIFRoZXJlZm9yZSwgQnVuIHBhdGNoaW5nIG9ubHkgd29ya3MgcmVsaWFibHkgd2hlbiB0aGlzIGJvb3RzdHJhcCBydW5zIGJlZm9yZVxuICogICB0aGUgYXBwIGVudHJ5IHBvaW50IGlzIGxvYWRlZCwgZS5nLiB2aWEgYGJ1biAtLXByZWxvYWQgY2RrLWxvY2FsLWxhbWJkYS9ib290c3RyYXBgLlxuICpcbiAqIE5vZGUuanM6XG4gKiAtIFdlIGNhbiBwYXRjaCBNb2R1bGUuX2xvYWQgdG8gaW50ZXJjZXB0IG1vZHVsZSBsb2FkaW5nLlxuICovXG5pZiAoaXNCdW4pIHtcbiAgY29uc3QgaXNMaXZlTW9kZSA9IHByb2Nlc3MuZW52LkNES19MT0NBTF9MQU1CREEgPT09IFwidHJ1ZVwiXG5cbiAgLy8gQmVzdC1lZmZvcnQgcGF0Y2hpbmcgZm9yIEJ1bi4gVGhpcyBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayB3aGVuIHRoaXMgZmlsZVxuICAvLyBpcyBwcmVsb2FkZWQgKHNlZSBub3RlIGFib3ZlKS4gRXZlbiB0aGVuLCB3ZSBrZWVwIHRoaXMgbG9naWMgbGlnaHR3ZWlnaHQuXG4gIGlmIChpc0xpdmVNb2RlKSB7XG4gICAgY29uc3QgaGFzUHJlbG9hZEZsYWcgPSBwcm9jZXNzLmV4ZWNBcmd2LmluY2x1ZGVzKFwiLS1wcmVsb2FkXCIpXG5cbiAgICBpZiAoIWhhc1ByZWxvYWRGbGFnKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0xpdmVMYW1iZGFdIFdhcm5pbmc6IFJ1bm5pbmcgaW4gQnVuIHdpdGhvdXQgLS1wcmVsb2FkLiBBdXRvbWF0aWMgaGFuZGxlci9kb2NrZXIgZGV0ZWN0aW9uIGlzIGxpa2VseSBkaXNhYmxlZC5cIixcbiAgICAgIClcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gRml4OiBydW4gQnVuIHdpdGggYC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcGAuXCIsXG4gICAgICApXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhdGNoIGF3cy1sYW1iZGEgZmlyc3Qgc28gTm9kZWpzRnVuY3Rpb24gY2FuIGNyZWF0ZSBkdW1teSBDb2RlLmZyb21JbmxpbmVcbiAgICAgIC8vIHdoZW4gQ0RLX0xPQ0FMX0xBTUJEQT10cnVlIChza2lwcyBidW5kbGluZykuXG4gICAgICBjb25zdCBsYW1iZGFNb2R1bGUgPSByZXF1aXJlRnJvbVByb2plY3QoXG4gICAgICAgIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiLFxuICAgICAgKSBhcyBMYW1iZGFNb2R1bGVcbiAgICAgIGNhY2hlZExhbWJkYU1vZHVsZSA9IGxhbWJkYU1vZHVsZVxuICAgICAgcGF0Y2hEb2NrZXJJbWFnZUZ1bmN0aW9uKGxhbWJkYU1vZHVsZSlcblxuICAgICAgY29uc3Qgbm9kZWpzTW9kdWxlID0gcmVxdWlyZUZyb21Qcm9qZWN0KFxuICAgICAgICBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCIsXG4gICAgICApIGFzIExhbWJkYU5vZGVqc01vZHVsZVxuICAgICAgcGF0Y2hOb2RlanNGdW5jdGlvbihub2RlanNNb2R1bGUpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0xpdmVMYW1iZGFdIFdhcm5pbmc6IEZhaWxlZCB0byBpbnN0YWxsIEJ1biBwYXRjaGVzOlwiLFxuICAgICAgICAoZXJyIGFzIEVycm9yKS5tZXNzYWdlLFxuICAgICAgKVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIltMaXZlTGFtYmRhXSBBdXRvbWF0aWMgaGFuZGxlci9kb2NrZXIgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkOyBlbnN1cmUgYm9vdHN0cmFwIGlzIHByZWxvYWRlZC5cIixcbiAgICAgIClcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVyZW5kZGVib2VyL2Nkay1sb2NhbC1sYW1iZGEjYnVuLXN1cHBvcnRcIixcbiAgICAgIClcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIC8vIE5vZGUuanM6IHVzZSBNb2R1bGUuX2xvYWQgaG9vayB0byBpbnRlcmNlcHQgbW9kdWxlIGxvYWRpbmdcbiAgY29uc3QgTW9kdWxlID0gcmVxdWlyZUZyb21QYWNrYWdlKFwibm9kZTptb2R1bGVcIilcbiAgY29uc3Qgb3JpZ2luYWxMb2FkOiAoXG4gICAgcmVxdWVzdDogc3RyaW5nLFxuICAgIHBhcmVudDogTm9kZU1vZHVsZSB8IHVuZGVmaW5lZCxcbiAgICBpc01haW46IGJvb2xlYW4sXG4gICkgPT4gdW5rbm93biA9IE1vZHVsZS5fbG9hZFxuXG4gIE1vZHVsZS5fbG9hZCA9IGZ1bmN0aW9uIChcbiAgICByZXF1ZXN0OiBzdHJpbmcsXG4gICAgcGFyZW50OiBOb2RlTW9kdWxlIHwgdW5kZWZpbmVkLFxuICAgIGlzTWFpbjogYm9vbGVhbixcbiAgKTogdW5rbm93biB7XG4gICAgLy8gQ2FsbCBvcmlnaW5hbCBsb2FkIC0gbGV0IGVycm9ycyBwcm9wYWdhdGUgbmF0dXJhbGx5XG4gICAgY29uc3QgcmVzdWx0ID0gb3JpZ2luYWxMb2FkLmNhbGwodGhpcywgcmVxdWVzdCwgcGFyZW50LCBpc01haW4pXG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBsYW1iZGEtbm9kZWpzIG1vZHVsZVxuICAgIGlmIChpc0xhbWJkYU5vZGVqc01vZHVsZShyZXF1ZXN0KSkge1xuICAgICAgcGF0Y2hOb2RlanNGdW5jdGlvbihyZXN1bHQgYXMgTGFtYmRhTm9kZWpzTW9kdWxlIHwgbnVsbClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBsYW1iZGEgbW9kdWxlIChmb3IgRG9ja2VySW1hZ2VGdW5jdGlvbiBhbmQgQ29kZS5mcm9tSW5saW5lKVxuICAgIGlmIChpc0xhbWJkYU1vZHVsZShyZXF1ZXN0KSkge1xuICAgICAgLy8gQ2FjaGUgdGhlIGxhbWJkYSBtb2R1bGUgc28gd2UgY2FuIHVzZSBDb2RlLmZyb21JbmxpbmUgaW4gTm9kZWpzRnVuY3Rpb24gcGF0Y2hcbiAgICAgIGNhY2hlZExhbWJkYU1vZHVsZSA9IHJlc3VsdCBhcyBMYW1iZGFNb2R1bGUgfCBudWxsXG4gICAgICBwYXRjaERvY2tlckltYWdlRnVuY3Rpb24ocmVzdWx0IGFzIExhbWJkYU1vZHVsZSB8IG51bGwpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZHVtbXkgaW5saW5lIGNvZGUgdGhhdCBkb2VzIG5vdGhpbmcuXG4gKiBVc2VkIHRvIHNraXAgYnVuZGxpbmcgd2hlbiBDREtfTE9DQUxfTEFNQkRBPXRydWUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUR1bW15Q29kZShsYW1iZGFNb2R1bGU6IExhbWJkYU1vZHVsZSk6IHVua25vd24ge1xuICAvLyBBY2Nlc3MgbGFtYmRhLkNvZGUuZnJvbUlubGluZSB0byBjcmVhdGUgYSBuby1vcCBjb2RlXG4gIC8vIFRoaXMgYXZvaWRzIGJ1bmRsaW5nIGVudGlyZWx5IHNpbmNlIHdlIHByb3ZpZGUgcHJlLWJ1aWx0IGNvZGVcbiAgY29uc3QgQ29kZSA9IChcbiAgICBsYW1iZGFNb2R1bGUgYXMgdW5rbm93biBhcyB7XG4gICAgICBDb2RlPzogeyBmcm9tSW5saW5lPzogKGNvZGU6IHN0cmluZykgPT4gdW5rbm93biB9XG4gICAgfVxuICApLkNvZGVcbiAgaWYgKENvZGU/LmZyb21JbmxpbmUpIHtcbiAgICByZXR1cm4gQ29kZS5mcm9tSW5saW5lKFwiLy8gUGxhY2Vob2xkZXIgLSByZXBsYWNlZCBieSBMaXZlTGFtYmRhQXNwZWN0XCIpXG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFBhdGNoIE5vZGVqc0Z1bmN0aW9uIHRvIGNhcHR1cmUgZW50cnkgYW5kIGhhbmRsZXIgcHJvcHNcbiAqL1xuZnVuY3Rpb24gcGF0Y2hOb2RlanNGdW5jdGlvbihtb2R1bGU6IExhbWJkYU5vZGVqc01vZHVsZSB8IG51bGwpOiB2b2lkIHtcbiAgLy8gSWYgYWxyZWFkeSBwYXRjaGVkLCBza2lwXG4gIGlmIChtb2R1bGU/Lk5vZGVqc0Z1bmN0aW9uPy5fX2xpdmVMYW1iZGFQYXRjaGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBDaGVjayBpZiB3ZSBjYW4gcGF0Y2hcbiAgaWYgKG1vZHVsZT8uTm9kZWpzRnVuY3Rpb24pIHtcbiAgICBjb25zdCBPcmlnaW5hbE5vZGVqc0Z1bmN0aW9uID0gbW9kdWxlLk5vZGVqc0Z1bmN0aW9uXG4gICAgY29uc3QgaXNMaXZlTW9kZSA9IHByb2Nlc3MuZW52LkNES19MT0NBTF9MQU1CREEgPT09IFwidHJ1ZVwiXG5cbiAgICAvLyBDcmVhdGUgd3JhcHBlciBjbGFzcyB0aGF0IGNhcHR1cmVzIGVudHJ5L2hhbmRsZXIgcHJvcHNcbiAgICBjbGFzcyBOb2RlanNGdW5jdGlvbldpdGhDYXB0dXJlIGV4dGVuZHMgT3JpZ2luYWxOb2RlanNGdW5jdGlvbiB7XG4gICAgICBjb25zdHJ1Y3RvcihzY29wZTogdW5rbm93biwgaWQ6IHN0cmluZywgcHJvcHM6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPSB7fSkge1xuICAgICAgICAvLyBJbiBsaXZlIG1vZGUsIHByb3ZpZGUgZHVtbXkgY29kZSB0byBza2lwIGJ1bmRsaW5nIGVudGlyZWx5XG4gICAgICAgIC8vIFRoZSBhc3BlY3Qgd2lsbCByZXBsYWNlIHRoaXMgd2l0aCB0aGUgYnJpZGdlIGNvZGUgZnJvbSBTM1xuICAgICAgICBsZXQgbW9kaWZpZWRQcm9wcyA9IHByb3BzXG4gICAgICAgIGlmIChpc0xpdmVNb2RlICYmICFwcm9wcy5jb2RlICYmIGNhY2hlZExhbWJkYU1vZHVsZSkge1xuICAgICAgICAgIGNvbnN0IGR1bW15Q29kZSA9IGNyZWF0ZUR1bW15Q29kZShjYWNoZWRMYW1iZGFNb2R1bGUpXG4gICAgICAgICAgaWYgKGR1bW15Q29kZSkge1xuICAgICAgICAgICAgbW9kaWZpZWRQcm9wcyA9IHsgLi4ucHJvcHMsIGNvZGU6IGR1bW15Q29kZSB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCBtb2RpZmllZFByb3BzKVxuXG4gICAgICAgIC8vIFN0b3JlIHRoZSBlbnRyeSBwYXRoIG9uIHRoZSBpbnN0YW5jZSAodmFsaWRhdGUgaXQncyBhIG5vbi1lbXB0eSBzdHJpbmcpXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMuZW50cnkgPT09IFwic3RyaW5nXCIgJiYgcHJvcHMuZW50cnkudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA7KHRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3ltYm9sLCBzdHJpbmc+KVtFTlRSWV9TWU1CT0xdID1cbiAgICAgICAgICAgIHByb3BzLmVudHJ5XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSB0aGUgaGFuZGxlciBuYW1lICh2YWxpZGF0ZSBhbmQgZGVmYXVsdCB0byAnaGFuZGxlcicpXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPVxuICAgICAgICAgIHR5cGVvZiBwcm9wcy5oYW5kbGVyID09PSBcInN0cmluZ1wiICYmIHByb3BzLmhhbmRsZXIudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gcHJvcHMuaGFuZGxlclxuICAgICAgICAgICAgOiBcImhhbmRsZXJcIlxuICAgICAgICA7KHRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3ltYm9sLCBzdHJpbmc+KVtIQU5ETEVSX1NZTUJPTF0gPSBoYW5kbGVyXG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBfX2xpdmVMYW1iZGFQYXRjaGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFRyeSB0byByZXBsYWNlIC0gZmFpbCBpZiB3ZSBjYW4ndFxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcIk5vZGVqc0Z1bmN0aW9uXCIsIHtcbiAgICAgICAgdmFsdWU6IE5vZGVqc0Z1bmN0aW9uV2l0aENhcHR1cmUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gRkFUQUw6IENhbm5vdCBwYXRjaCBOb2RlanNGdW5jdGlvbiAtIG1vZHVsZSBpcyBmcm96ZW4gb3Igc2VhbGVkLlwiLFxuICAgICAgKVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gVGhpcyBjYW4gaGFwcGVuIHdpdGggY2VydGFpbiBidW5kbGVycyBvciBOb2RlLmpzIGNvbmZpZ3VyYXRpb25zLlwiLFxuICAgICAgKVxuICAgICAgY29uc29sZS5lcnJvcihcIltMaXZlTGFtYmRhXSBFcnJvcjpcIiwgKGVyciBhcyBFcnJvcikubWVzc2FnZSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhdGNoIERvY2tlckltYWdlRnVuY3Rpb24gYW5kIERvY2tlckltYWdlQ29kZSB0byBjYXB0dXJlIGRvY2tlciBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHBhdGNoRG9ja2VySW1hZ2VGdW5jdGlvbihtb2R1bGU6IExhbWJkYU1vZHVsZSB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKCFtb2R1bGUpIHJldHVyblxuXG4gIC8vIEZpcnN0LCBwYXRjaCBEb2NrZXJJbWFnZUNvZGUuZnJvbUltYWdlQXNzZXQgdG8gY2FwdHVyZSB0aGUgZGlyZWN0b3J5IHBhdGhcbiAgaWYgKG1vZHVsZS5Eb2NrZXJJbWFnZUNvZGUgJiYgIW1vZHVsZS5Eb2NrZXJJbWFnZUNvZGUuX19saXZlTGFtYmRhUGF0Y2hlZCkge1xuICAgIGNvbnN0IE9yaWdpbmFsRG9ja2VySW1hZ2VDb2RlID0gbW9kdWxlLkRvY2tlckltYWdlQ29kZVxuICAgIGNvbnN0IG9yaWdpbmFsRnJvbUltYWdlQXNzZXQgPSBPcmlnaW5hbERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldFxuXG4gICAgLy8gV3JhcCBmcm9tSW1hZ2VBc3NldCB0byBjYXB0dXJlIHRoZSBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRjaGVkRnJvbUltYWdlQXNzZXQgPSAoXG4gICAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgIHByb3BzPzogRG9ja2VySW1hZ2VBc3NldFByb3BzLFxuICAgICk6IERvY2tlckltYWdlQ29kZUluc3RhbmNlID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsRnJvbUltYWdlQXNzZXQuY2FsbChcbiAgICAgICAgT3JpZ2luYWxEb2NrZXJJbWFnZUNvZGUsXG4gICAgICAgIGRpcmVjdG9yeSxcbiAgICAgICAgcHJvcHMsXG4gICAgICApXG5cbiAgICAgIC8vIFN0b3JlIHRoZSBkaXJlY3RvcnkgcGF0aCBpbiB0aGUgV2Vha01hcCwga2V5ZWQgYnkgdGhlIHJlc3VsdCBpbnN0YW5jZVxuICAgICAgZG9ja2VySW1hZ2VDb2RlQ29udGV4dE1hcC5zZXQocmVzdWx0IGFzIG9iamVjdCwgZGlyZWN0b3J5KVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmlnaW5hbERvY2tlckltYWdlQ29kZSwgXCJmcm9tSW1hZ2VBc3NldFwiLCB7XG4gICAgICAgIHZhbHVlOiBwYXRjaGVkRnJvbUltYWdlQXNzZXQsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgICAgOyhcbiAgICAgICAgT3JpZ2luYWxEb2NrZXJJbWFnZUNvZGUgYXMgRG9ja2VySW1hZ2VDb2RlU3RhdGljICYge1xuICAgICAgICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/OiBib29sZWFuXG4gICAgICAgIH1cbiAgICAgICkuX19saXZlTGFtYmRhUGF0Y2hlZCA9IHRydWVcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQ291bGQgbm90IHBhdGNoIERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldDpcIixcbiAgICAgICAgKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBUaGVuLCBwYXRjaCBEb2NrZXJJbWFnZUZ1bmN0aW9uIHRvIHJlYWQgZnJvbSB0aGUgV2Vha01hcFxuICBpZiAoXG4gICAgbW9kdWxlLkRvY2tlckltYWdlRnVuY3Rpb24gJiZcbiAgICAhbW9kdWxlLkRvY2tlckltYWdlRnVuY3Rpb24uX19saXZlTGFtYmRhUGF0Y2hlZFxuICApIHtcbiAgICBjb25zdCBPcmlnaW5hbERvY2tlckltYWdlRnVuY3Rpb24gPSBtb2R1bGUuRG9ja2VySW1hZ2VGdW5jdGlvblxuXG4gICAgLy8gQ3JlYXRlIHdyYXBwZXIgY2xhc3MgdGhhdCBjYXB0dXJlcyBkb2NrZXIgY29udGV4dFxuICAgIGNsYXNzIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZSBleHRlbmRzIE9yaWdpbmFsRG9ja2VySW1hZ2VGdW5jdGlvbiB7XG4gICAgICBjb25zdHJ1Y3RvcihzY29wZTogdW5rbm93biwgaWQ6IHN0cmluZywgcHJvcHM6IERvY2tlckltYWdlRnVuY3Rpb25Qcm9wcykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKVxuXG4gICAgICAgIC8vIExvb2sgdXAgdGhlIGRvY2tlciBjb250ZXh0IGZyb20gdGhlIFdlYWtNYXBcbiAgICAgICAgaWYgKHByb3BzLmNvZGUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0UGF0aCA9IGRvY2tlckltYWdlQ29kZUNvbnRleHRNYXAuZ2V0KFxuICAgICAgICAgICAgcHJvcHMuY29kZSBhcyBvYmplY3QsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgICAgOyh0aGlzIGFzIHVua25vd24gYXMgUmVjb3JkPHN5bWJvbCwgc3RyaW5nPilbXG4gICAgICAgICAgICAgIERPQ0tFUl9DT05URVhUX1NZTUJPTFxuICAgICAgICAgICAgXSA9IGNvbnRleHRQYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBfX2xpdmVMYW1iZGFQYXRjaGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcIkRvY2tlckltYWdlRnVuY3Rpb25cIiwge1xuICAgICAgICB2YWx1ZTogRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQ291bGQgbm90IHBhdGNoIERvY2tlckltYWdlRnVuY3Rpb246XCIsXG4gICAgICAgIChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Local command for running Lambda functions locally using Docker.
|
|
3
3
|
*
|
|
4
4
|
* This command:
|
|
5
|
-
* 1. Starts CDK watch with
|
|
5
|
+
* 1. Starts CDK watch with CDK_LOCAL_LAMBDA=true and hotswap
|
|
6
6
|
* 2. Discovers Lambda functions with live-lambda:handler tag
|
|
7
7
|
* 3. Connects to AppSync Events
|
|
8
8
|
* 4. Subscribes to invocation channels
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Local command for running Lambda functions locally using Docker.
|
|
3
3
|
*
|
|
4
4
|
* This command:
|
|
5
|
-
* 1. Starts CDK watch with
|
|
5
|
+
* 1. Starts CDK watch with CDK_LOCAL_LAMBDA=true and hotswap
|
|
6
6
|
* 2. Discovers Lambda functions with live-lambda:handler tag
|
|
7
7
|
* 3. Connects to AppSync Events
|
|
8
8
|
* 4. Subscribes to invocation channels
|
|
@@ -848,7 +848,7 @@ const handleNodejsInvocation = (fn, invocation, workersRef, serverScope, project
|
|
|
848
848
|
yield* queueInvocation(worker.runtimeState, lambdaInvocation);
|
|
849
849
|
});
|
|
850
850
|
/**
|
|
851
|
-
* Start CDK watch process with
|
|
851
|
+
* Start CDK watch process with CDK_LOCAL_LAMBDA=true using Effect's Command.
|
|
852
852
|
* Returns the process and a queue of events.
|
|
853
853
|
*/
|
|
854
854
|
const startCdkWatch = (options, scope) => Effect.gen(function* () {
|
|
@@ -870,7 +870,7 @@ const startCdkWatch = (options, scope) => Effect.gen(function* () {
|
|
|
870
870
|
}
|
|
871
871
|
const env = {
|
|
872
872
|
...process.env,
|
|
873
|
-
|
|
873
|
+
CDK_LOCAL_LAMBDA: "true",
|
|
874
874
|
};
|
|
875
875
|
if (options.region) {
|
|
876
876
|
env.AWS_REGION = options.region;
|
|
@@ -1179,4 +1179,4 @@ export const localCommand = Command.make("local", {
|
|
|
1179
1179
|
yield* Effect.never;
|
|
1180
1180
|
}).pipe(Effect.provide(Logger.pretty), Effect.provide(Logger.minimumLogLevel(logLevel)));
|
|
1181
1181
|
}).pipe(Command.withDescription("Start local Lambda development with CDK watch and Docker containers"));
|
|
1182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL2xvY2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUFxQixLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM3RCxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3hDLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLGVBQWUsR0FDaEIsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDOUMsT0FBTyxFQUVMLE9BQU8sSUFBSSxlQUFlLEdBQzNCLE1BQU0sa0JBQWtCLENBQUE7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sUUFBUSxDQUFBO0FBQ2YsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBRWhCLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsYUFBYSxHQUNkLE1BQU0sdUJBQXVCLENBQUE7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDeEQsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixNQUFNLEVBQ04sVUFBVSxFQUNWLHlCQUF5QixHQUMxQixNQUFNLHdCQUF3QixDQUFBO0FB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c291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2NhbCBjb21tYW5kIGZvciBydW5uaW5nIExhbWJkYSBmdW5jdGlvbnMgbG9jYWxseSB1c2luZyBEb2NrZXIuXG4gKlxuICogVGhpcyBjb21tYW5kOlxuICogMS4gU3RhcnRzIENESyB3YXRjaCB3aXRoIENES19MSVZFPXRydWUgYW5kIGhvdHN3YXBcbiAqIDIuIERpc2NvdmVycyBMYW1iZGEgZnVuY3Rpb25zIHdpdGggbGl2ZS1sYW1iZGE6aGFuZGxlciB0YWdcbiAqIDMuIENvbm5lY3RzIHRvIEFwcFN5bmMgRXZlbnRzXG4gKiA0LiBTdWJzY3JpYmVzIHRvIGludm9jYXRpb24gY2hhbm5lbHNcbiAqIDUuIEZvciBlYWNoIGZ1bmN0aW9uLCBtYWludGFpbnMgT05FIERvY2tlciBjb250YWluZXIgdGhhdCBoYW5kbGVzIGFsbCBpbnZvY2F0aW9uc1xuICogNi4gU2VuZHMgcmVzcG9uc2VzIGJhY2sgdmlhIEFwcFN5bmNcbiAqIDcuIFJlLWRpc2NvdmVycyBmdW5jdGlvbnMgYWZ0ZXIgZWFjaCBDREsgZGVwbG95XG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDaGlsZFByb2Nlc3MsIHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiXG5pbXBvcnQge1xuICBMYW1iZGFDbGllbnQsXG4gIExpc3RGdW5jdGlvbnNDb21tYW5kLFxuICBMaXN0VGFnc0NvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtbGFtYmRhXCJcbmltcG9ydCB7IEdldFBhcmFtZXRlckNvbW1hbmQsIFNTTUNsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtc3NtXCJcbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbnMgfSBmcm9tIFwiQGVmZmVjdC9jbGlcIlxuaW1wb3J0IHtcbiAgdHlwZSBDb21tYW5kRXhlY3V0b3IsXG4gIENvbW1hbmQgYXMgUGxhdGZvcm1Db21tYW5kLFxufSBmcm9tIFwiQGVmZmVjdC9wbGF0Zm9ybVwiXG5pbXBvcnQgdHlwZSB7IFByb2Nlc3MgYXMgRWZmZWN0UHJvY2VzcyB9IGZyb20gXCJAZWZmZWN0L3BsYXRmb3JtL0NvbW1hbmRFeGVjdXRvclwiXG5pbXBvcnQgeyBCdW5Db250ZXh0IH0gZnJvbSBcIkBlZmZlY3QvcGxhdGZvcm0tYnVuXCJcbmltcG9ydCB7XG4gIER1cmF0aW9uLFxuICBFZmZlY3QsXG4gIEV4aXQsXG4gIEZpYmVyLFxuICBMb2dnZXIsXG4gIExvZ0xldmVsLFxuICBRdWV1ZSxcbiAgUmVmLFxuICBTY2hlZHVsZSxcbiAgU2NvcGUsXG4gIFN0cmVhbSxcbn0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQge1xuICBCT09UU1RSQVBfU1RBQ0tfTkFNRSxcbiAgQk9PVFNUUkFQX1ZFUlNJT04sXG4gIGJ1aWxkQ2hhbm5lbE5hbWUsXG4gIHR5cGUgSW52b2NhdGlvbk1lc3NhZ2UsXG4gIExJVkVfTEFNQkRBX0RPQ0tFUl9UQUcsXG4gIExJVkVfTEFNQkRBX1RBRyxcbiAgdHlwZSBSZXNwb25zZU1lc3NhZ2UsXG4gIFNTTV9CQVNFX1BBVEgsXG59IGZyb20gXCIuLi8uLi9zaGFyZWQvdHlwZXMuanNcIlxuaW1wb3J0IHsgbWFrZUFwcFN5bmNDbGllbnQgfSBmcm9tIFwiLi4vYXBwc3luYy9jbGllbnQuanNcIlxuaW1wb3J0IHtcbiAgYnVpbGRFeHRlbnNpb25XcmFwcGVyQ29tbWFuZCxcbiAgRG9ja2VyLFxuICBEb2NrZXJMaXZlLFxuICBtYWtlTGFtYmRhQ29udGFpbmVyQ29uZmlnLFxufSBmcm9tIFwiLi4vZG9ja2VyL2NvbnRhaW5lci5qc1wiXG5pbXBvcnQge1xuICB0eXBlIFdhdGNoZWREb2NrZXJGdW5jdGlvbixcbiAgd2F0Y2hEb2NrZXJDb250ZXh0cyxcbn0gZnJvbSBcIi4uL2RvY2tlci93YXRjaGVyLmpzXCJcbmltcG9ydCB7XG4gIG5vdGlmeUV4dGVuc2lvbnNJbnZva2UsXG4gIHF1ZXVlSW52b2NhdGlvbixcbiAgdHlwZSBSdW50aW1lQXBpU3RhdGUsXG4gIHN0YXJ0UnVudGltZUFwaVNlcnZlcixcbiAgd2FpdEZvclJlc3BvbnNlLFxufSBmcm9tIFwiLi4vcnVudGltZS1hcGkvc2VydmVyLmpzXCJcbmltcG9ydCB0eXBlIHtcbiAgTGFtYmRhRXJyb3IsXG4gIExhbWJkYUluaXRFcnJvcixcbiAgTGFtYmRhSW52b2NhdGlvbixcbiAgTGFtYmRhUmVzcG9uc2UsXG59IGZyb20gXCIuLi9ydW50aW1lLWFwaS90eXBlcy5qc1wiXG5cbi8qKlxuICogRGlzY292ZXJlZCBMYW1iZGEgZnVuY3Rpb24gaW5mby5cbiAqL1xuaW50ZXJmYWNlIERpc2NvdmVyZWRGdW5jdGlvbiB7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nXG4gIGZ1bmN0aW9uQXJuOiBzdHJpbmdcbiAgbG9jYWxIYW5kbGVyOiBzdHJpbmdcbiAgLyoqIExvY2FsIERvY2tlciBjb250ZXh0IHBhdGggZm9yIERvY2tlckltYWdlRnVuY3Rpb24gKi9cbiAgZG9ja2VyQ29udGV4dFBhdGg/OiBzdHJpbmdcbiAgbWVtb3J5TUI6IG51bWJlclxuICBhcmNoaXRlY3R1cmU/OiBcImFybTY0XCIgfCBcIng4Nl82NFwiXG59XG5cbi8qKlxuICogRGVmYXVsdCBpZGxlIHRpbWVvdXQgYmVmb3JlIHByb2FjdGl2ZWx5IHN0b3BwaW5nIGNvbnRhaW5lcnMuXG4gKiBTZXQgc2xpZ2h0bHkgYmVsb3cgdGhlIHBvbGwgdGltZW91dCAoMjQwcykgdG8gc3RvcCBjb250YWluZXIgYmVmb3JlXG4gKiB0aGUgTGFtYmRhIFJJQyBnZXRzIGEgNTAzIGVycm9yLlxuICovXG5jb25zdCBERUZBVUxUX0lETEVfVElNRU9VVF9NUyA9IDIzMF8wMDAgLy8gMjMwIHNlY29uZHMgKH40IG1pbnV0ZXMpXG5cbi8qKlxuICogU3RhdGUgZm9yIGEgcnVubmluZyBmdW5jdGlvbiBjb250YWluZXIuXG4gKi9cbmludGVyZmFjZSBGdW5jdGlvbkNvbnRhaW5lciB7XG4gIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb25cbiAgcnVudGltZVN0YXRlOiBSdW50aW1lQXBpU3RhdGVcbiAgLyoqIFRoZSBwb3J0IHRoZSBSdW50aW1lIEFQSSBzZXJ2ZXIgaXMgbGlzdGVuaW5nIG9uICovXG4gIHBvcnQ6IG51bWJlclxuICBjb250YWluZXJGaWJlcjogRmliZXIuUnVudGltZUZpYmVyPHZvaWQsIEVycm9yPlxuICBjb250YWluZXJOYW1lOiBzdHJpbmdcbiAgLyoqIERvY2tlciBpbWFnZSBuYW1lIGZvciByZWJ1aWxkcyAqL1xuICBpbWFnZU5hbWU6IHN0cmluZ1xuICAvKiogV2hldGhlciB0aGUgY29udGFpbmVyIGlzIGN1cnJlbnRseSBiZWluZyByZWJ1aWx0IChpbnZvY2F0aW9ucyB3aWxsIHF1ZXVlKSAqL1xuICBpc1JlYnVpbGRpbmc6IGJvb2xlYW5cbiAgLyoqIE1hcCBvZiByZXF1ZXN0SWQgLT4gcmVzcG9uc2UgcmVzb2x2ZXIgKi9cbiAgcGVuZGluZ1Jlc3BvbnNlczogTWFwPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICByZXNvbHZlOiAocmVzcG9uc2U6IFJlc3BvbnNlTWVzc2FnZSkgPT4gdm9pZFxuICAgIH1cbiAgPlxuICAvKiogRmliZXIgZm9yIHRoZSBpZGxlIHNodXRkb3duIHRpbWVyLCBjYW5jZWxsZWQgd2hlbiBuZXcgcmVzcG9uc2VzIGFycml2ZSAqL1xuICBpZGxlVGltZXJGaWJlcjogRmliZXIuUnVudGltZUZpYmVyPHZvaWQsIG5ldmVyPiB8IG51bGxcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyBjYXB0dXJlZCBmcm9tIGZpcnN0IGludm9jYXRpb24gKi9cbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG59XG5cbi8qKlxuICogU3RhdGUgZm9yIGEgcnVubmluZyBOb2RlLmpzIHdvcmtlciBwcm9jZXNzLlxuICovXG5pbnRlcmZhY2UgTm9kZWpzV29ya2VyIHtcbiAgZm46IERpc2NvdmVyZWRGdW5jdGlvblxuICBydW50aW1lU3RhdGU6IFJ1bnRpbWVBcGlTdGF0ZVxuICAvKiogVGhlIHBvcnQgdGhlIFJ1bnRpbWUgQVBJIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24gKi9cbiAgcG9ydDogbnVtYmVyXG4gIC8qKiBUaGUgc3Bhd25lZCBCdW4gcHJvY2VzcyAqL1xuICB3b3JrZXJQcm9jZXNzOiBDaGlsZFByb2Nlc3NcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyBjYXB0dXJlZCBmcm9tIGZpcnN0IGludm9jYXRpb24gKi9cbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIC8qKiBDdXJyZW50bHkgcHJvY2Vzc2luZyByZXF1ZXN0IElEIGZvciBsb2cgcHJlZml4aW5nICovXG4gIGN1cnJlbnRSZXF1ZXN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEludm9jYXRpb24gY29udGV4dCBmb3IgdHJhY2tpbmcgYW5kIGxvZ2dpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2NhdGlvbkNvbnRleHQge1xuICAvKiogU2VxdWVudGlhbCBpbnZvY2F0aW9uIG51bWJlciAqL1xuICBudW06IG51bWJlclxuICAvKiogU3RhcnQgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyAqL1xuICBzdGFydDogbnVtYmVyXG4gIC8qKiBGdW5jdGlvbiBuYW1lICovXG4gIGZuOiBzdHJpbmdcbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyBhIERvY2tlciBjb250YWluZXIgaW52b2NhdGlvbiAqL1xuICBpc0RvY2tlcjogYm9vbGVhblxufVxuXG4vKipcbiAqIENoZWNrIGlmIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHZlcnNpb24uXG4gKiBSZXR1cm5zIHRydWUgaWYgdmVyc2lvbiBtYXRjaGVzLCBmYWxzZSBpZiBtaXNzaW5nIG9yIG1pc21hdGNoZWQuXG4gKi9cbmNvbnN0IGNoZWNrQm9vdHN0cmFwVmVyc2lvbiA9IChxdWFsaWZpZXI6IHN0cmluZykgPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHNzbUNsaWVudCA9IG5ldyBTU01DbGllbnQoe30pXG4gICAgY29uc3QgYmFzZVBhdGggPSBgJHtTU01fQkFTRV9QQVRIfS8ke3F1YWxpZmllcn1gXG5cbiAgICBjb25zdCByZXN1bHQgPSB5aWVsZCogRWZmZWN0LnRyeVByb21pc2Uoe1xuICAgICAgdHJ5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc3NtQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IEdldFBhcmFtZXRlckNvbW1hbmQoeyBOYW1lOiBgJHtiYXNlUGF0aH0vdmVyc2lvbmAgfSksXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLlBhcmFtZXRlcj8uVmFsdWVcbiAgICAgIH0sXG4gICAgICBjYXRjaDogKCkgPT4gbnVsbCxcbiAgICB9KS5waXBlKEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Quc3VjY2VlZChudWxsKSkpXG5cbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJCb290c3RyYXAgc3RhY2sgdmVyc2lvbiBwYXJhbWV0ZXIgbm90IGZvdW5kXCIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ICE9PSBCT09UU1RSQVBfVkVSU0lPTikge1xuICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgICBgQm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gbWlzbWF0Y2g6IGZvdW5kICR7cmVzdWx0fSwgZXhwZWN0ZWQgJHtCT09UU1RSQVBfVkVSU0lPTn1gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfSlcblxuLyoqXG4gKiBSdW4gdGhlIGJvb3RzdHJhcCBzdGFjayBkZXBsb3ltZW50LlxuICovXG5jb25zdCBydW5Cb290c3RyYXAgPSAob3B0aW9uczoge1xuICBwcm9maWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHJlZ2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZFxufSkgPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIlJ1bm5pbmcgYm9vdHN0cmFwIHN0YWNrIGRlcGxveW1lbnQuLi5cIilcblxuICAgIC8vIFJlc29sdmUgdGhlIENESyBhcHAgcGF0aCByZWxhdGl2ZSB0byB0aGlzIG1vZHVsZVxuICAgIGNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbiAgICBjb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoX19maWxlbmFtZSlcbiAgICBjb25zdCBjZGtBcHBQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCIuLlwiLCBcImNkay1hcHAuanNcIilcblxuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICBcImNka1wiLFxuICAgICAgXCJkZXBsb3lcIixcbiAgICAgIEJPT1RTVFJBUF9TVEFDS19OQU1FLFxuICAgICAgXCItLXJlcXVpcmUtYXBwcm92YWxcIixcbiAgICAgIFwibmV2ZXJcIixcbiAgICAgIFwiLS1hcHBcIixcbiAgICAgIGBidW4gJHtjZGtBcHBQYXRofWAsXG4gICAgXVxuXG4gICAgaWYgKG9wdGlvbnMucHJvZmlsZSkge1xuICAgICAgYXJncy5wdXNoKFwiLS1wcm9maWxlXCIsIG9wdGlvbnMucHJvZmlsZSlcbiAgICB9XG5cbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICBpZiAob3B0aW9ucy5yZWdpb24pIHtcbiAgICAgIGVudi5BV1NfUkVHSU9OID0gb3B0aW9ucy5yZWdpb25cbiAgICAgIGVudi5DREtfREVGQVVMVF9SRUdJT04gPSBvcHRpb25zLnJlZ2lvblxuICAgIH1cblxuICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhgUnVubmluZzogbnB4ICR7YXJncy5qb2luKFwiIFwiKX1gKVxuXG4gICAgY29uc3QgY29tbWFuZCA9IFBsYXRmb3JtQ29tbWFuZC5tYWtlKFwibnB4XCIsIC4uLmFyZ3MpLnBpcGUoXG4gICAgICBQbGF0Zm9ybUNvbW1hbmQuZW52KGVudiksXG4gICAgICBQbGF0Zm9ybUNvbW1hbmQuc3RkaW4oXCJpbmhlcml0XCIpLFxuICAgIClcblxuICAgIGNvbnN0IHByb2MgPSB5aWVsZCogUGxhdGZvcm1Db21tYW5kLnN0YXJ0KGNvbW1hbmQpXG5cbiAgICAvLyBTdHJlYW0gb3V0cHV0IHRvIGNvbnNvbGVcbiAgICB5aWVsZCogU3RyZWFtLm1lcmdlKHByb2Muc3Rkb3V0LCBwcm9jLnN0ZGVycikucGlwZShcbiAgICAgIFN0cmVhbS5kZWNvZGVUZXh0KCksXG4gICAgICBTdHJlYW0uc3BsaXRMaW5lcyxcbiAgICAgIFN0cmVhbS5ydW5Gb3JFYWNoKChsaW5lKSA9PlxuICAgICAgICBFZmZlY3Quc3luYygoKSA9PiB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7bGluZX1cXG5gKVxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKVxuXG4gICAgY29uc3QgZXhpdENvZGUgPSB5aWVsZCogcHJvYy5leGl0Q29kZVxuICAgIGlmIChleGl0Q29kZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBFZmZlY3QuZmFpbChcbiAgICAgICAgbmV3IEVycm9yKGBCb290c3RyYXAgZGVwbG95bWVudCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJHtleGl0Q29kZX1gKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJCb290c3RyYXAgc3RhY2sgZGVwbG95ZWQgc3VjY2Vzc2Z1bGx5IVwiKVxuICB9KS5waXBlKEVmZmVjdC5zY29wZWQpXG5cbi8qKlxuICogRW5zdXJlIGJvb3RzdHJhcCBzdGFjayBpcyBkZXBsb3llZCB3aXRoIGNvcnJlY3QgdmVyc2lvbi5cbiAqIEF1dG9tYXRpY2FsbHkgZGVwbG95cyBpZiBtaXNzaW5nIG9yIG91dGRhdGVkLlxuICovXG5jb25zdCBlbnN1cmVCb290c3RyYXAgPSAob3B0aW9uczoge1xuICBxdWFsaWZpZXI6IHN0cmluZ1xuICBwcm9maWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHJlZ2lvbj86IHN0cmluZyB8IHVuZGVmaW5lZFxufSkgPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXCJbTG9jYWxdIENoZWNraW5nIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uLi4uXCIpXG5cbiAgICBjb25zdCB2ZXJzaW9uT2sgPSB5aWVsZCogY2hlY2tCb290c3RyYXBWZXJzaW9uKG9wdGlvbnMucXVhbGlmaWVyKVxuXG4gICAgaWYgKCF2ZXJzaW9uT2spIHtcbiAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcbiAgICAgICAgXCJbTG9jYWxdIEJvb3RzdHJhcCBzdGFjayBuZWVkcyB0byBiZSBkZXBsb3llZCBvciB1cGRhdGVkLlwiLFxuICAgICAgKVxuICAgICAgeWllbGQqIHJ1bkJvb3RzdHJhcCh7IHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSwgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbiB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFwiW0xvY2FsXSBCb290c3RyYXAgc3RhY2sgdmVyc2lvbiBPSy5cIilcbiAgICB9XG4gIH0pXG5cbi8qKlxuICogUmVhZCBBcHBTeW5jIGVuZHBvaW50cyBmcm9tIFNTTS5cbiAqL1xuY29uc3QgZ2V0QXBwU3luY0VuZHBvaW50cyA9IChxdWFsaWZpZXI6IHN0cmluZykgPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHNzbUNsaWVudCA9IG5ldyBTU01DbGllbnQoe30pXG4gICAgY29uc3QgYmFzZVBhdGggPSBgJHtTU01fQkFTRV9QQVRIfS8ke3F1YWxpZmllcn1gXG5cbiAgICBjb25zdCBnZXRQYXJhbSA9IChuYW1lOiBzdHJpbmcpID0+XG4gICAgICBFZmZlY3QudHJ5UHJvbWlzZSh7XG4gICAgICAgIHRyeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNzbUNsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IEdldFBhcmFtZXRlckNvbW1hbmQoeyBOYW1lOiBgJHtiYXNlUGF0aH0vJHtuYW1lfWAgfSksXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiByZXN1bHQuUGFyYW1ldGVyPy5WYWx1ZSA/PyBcIlwiXG4gICAgICAgIH0sXG4gICAgICAgIGNhdGNoOiAoZXJyb3IpID0+XG4gICAgICAgICAgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IFNTTSBwYXJhbWV0ZXIgJHtuYW1lfTogJHtTdHJpbmcoZXJyb3IpfWApLFxuICAgICAgfSlcblxuICAgIGNvbnN0IGh0dHBFbmRwb2ludCA9IHlpZWxkKiBnZXRQYXJhbShcImh0dHAtZW5kcG9pbnRcIilcbiAgICBjb25zdCByZWFsdGltZUVuZHBvaW50ID0geWllbGQqIGdldFBhcmFtKFwicmVhbHRpbWUtZW5kcG9pbnRcIilcblxuICAgIHJldHVybiB7IGh0dHBFbmRwb2ludCwgcmVhbHRpbWVFbmRwb2ludCB9XG4gIH0pXG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZSB0YWcgKHNldCBhdXRvbWF0aWNhbGx5IGJ5IENESylcbiAqL1xuY29uc3QgQ0ZOX1NUQUNLX05BTUVfVEFHID0gXCJhd3M6Y2xvdWRmb3JtYXRpb246c3RhY2stbmFtZVwiXG5cbi8qKlxuICogRGlzY292ZXIgTGFtYmRhIGZ1bmN0aW9ucyB3aXRoIGxpdmUtbGFtYmRhIHRhZ3MuXG4gKiBAcGFyYW0gc3RhY2tGaWx0ZXIgLSBPcHRpb25hbCBsaXN0IG9mIHN0YWNrIG5hbWVzIHRvIGZpbHRlciBieVxuICovXG5jb25zdCBkaXNjb3ZlckZ1bmN0aW9ucyA9IChzdGFja0ZpbHRlcj86IHN0cmluZ1tdKSA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgbGFtYmRhQ2xpZW50ID0gbmV3IExhbWJkYUNsaWVudCh7fSlcbiAgICBjb25zdCBmdW5jdGlvbnM6IERpc2NvdmVyZWRGdW5jdGlvbltdID0gW11cblxuICAgIC8vIExpc3QgYWxsIGZ1bmN0aW9uc1xuICAgIGxldCBuZXh0TWFya2VyOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICBkbyB7XG4gICAgICBjb25zdCBsaXN0UmVzcG9uc2UgPSB5aWVsZCogRWZmZWN0LnRyeVByb21pc2Uoe1xuICAgICAgICB0cnk6ICgpID0+XG4gICAgICAgICAgbGFtYmRhQ2xpZW50LnNlbmQobmV3IExpc3RGdW5jdGlvbnNDb21tYW5kKHsgTWFya2VyOiBuZXh0TWFya2VyIH0pKSxcbiAgICAgICAgY2F0Y2g6IChlcnJvcikgPT5cbiAgICAgICAgICBuZXcgRXJyb3IoYEZhaWxlZCB0byBsaXN0IGZ1bmN0aW9uczogJHtTdHJpbmcoZXJyb3IpfWApLFxuICAgICAgfSlcblxuICAgICAgZm9yIChjb25zdCBmbiBvZiBsaXN0UmVzcG9uc2UuRnVuY3Rpb25zID8/IFtdKSB7XG4gICAgICAgIC8vIEdldCB0YWdzIGZvciBlYWNoIGZ1bmN0aW9uXG4gICAgICAgIGNvbnN0IHRhZ3NSZXN1bHQgPSB5aWVsZCogRWZmZWN0LnRyeVByb21pc2Uoe1xuICAgICAgICAgIHRyeTogKCkgPT5cbiAgICAgICAgICAgIGxhbWJkYUNsaWVudC5zZW5kKFxuICAgICAgICAgICAgICBuZXcgTGlzdFRhZ3NDb21tYW5kKHsgUmVzb3VyY2U6IGZuLkZ1bmN0aW9uQXJuIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBjYXRjaDogKCkgPT4gbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IHRhZ3MgZm9yICR7Zm4uRnVuY3Rpb25OYW1lfWApLFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PlxuICAgICAgICAgICAgRWZmZWN0LnN1Y2NlZWQoeyBUYWdzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0pLFxuICAgICAgICAgICksXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCB0YWdzID0gdGFnc1Jlc3VsdC5UYWdzID8/IHt9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGxpdmUtbGFtYmRhIHRhZyAoaGFuZGxlcikgb3IgZG9ja2VyLWNvbnRleHQgdGFnXG4gICAgICAgIGlmICh0YWdzW0xJVkVfTEFNQkRBX1RBR10gfHwgdGFnc1tMSVZFX0xBTUJEQV9ET0NLRVJfVEFHXSkge1xuICAgICAgICAgIC8vIEZpbHRlciBieSBzdGFjayBuYW1lIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChzdGFja0ZpbHRlciAmJiBzdGFja0ZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFja05hbWUgPSB0YWdzW0NGTl9TVEFDS19OQU1FX1RBR11cbiAgICAgICAgICAgIGlmICghc3RhY2tOYW1lIHx8ICFzdGFja0ZpbHRlci5pbmNsdWRlcyhzdGFja05hbWUpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIGFyY2hpdGVjdHVyZSBmcm9tIExhbWJkYSBjb25maWdcbiAgICAgICAgICBjb25zdCBhcmNoaXRlY3R1cmVzID0gZm4uQXJjaGl0ZWN0dXJlcyA/PyBbXCJ4ODZfNjRcIl1cbiAgICAgICAgICBjb25zdCBhcmNoaXRlY3R1cmUgPSBhcmNoaXRlY3R1cmVzLmluY2x1ZGVzKFwiYXJtNjRcIilcbiAgICAgICAgICAgID8gKFwiYXJtNjRcIiBhcyBjb25zdClcbiAgICAgICAgICAgIDogKFwieDg2XzY0XCIgYXMgY29uc3QpXG5cbiAgICAgICAgICBjb25zdCBkaXNjb3ZlcmVkOiBEaXNjb3ZlcmVkRnVuY3Rpb24gPSB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZuLkZ1bmN0aW9uTmFtZSEsXG4gICAgICAgICAgICBmdW5jdGlvbkFybjogZm4uRnVuY3Rpb25Bcm4hLFxuICAgICAgICAgICAgbG9jYWxIYW5kbGVyOiB0YWdzW0xJVkVfTEFNQkRBX1RBR10gPz8gXCJcIixcbiAgICAgICAgICAgIGRvY2tlckNvbnRleHRQYXRoOiB0YWdzW0xJVkVfTEFNQkRBX0RPQ0tFUl9UQUddLFxuICAgICAgICAgICAgbWVtb3J5TUI6IGZuLk1lbW9yeVNpemUgPz8gMTI4LFxuICAgICAgICAgICAgYXJjaGl0ZWN0dXJlLFxuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbnMucHVzaChkaXNjb3ZlcmVkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHRNYXJrZXIgPSBsaXN0UmVzcG9uc2UuTmV4dE1hcmtlclxuICAgIH0gd2hpbGUgKG5leHRNYXJrZXIpXG5cbiAgICByZXR1cm4gZnVuY3Rpb25zXG4gIH0pXG5cbi8qKlxuICogU3RhcnQgYSBsb25nLXJ1bm5pbmcgRG9ja2VyIGNvbnRhaW5lciBmb3IgYSBmdW5jdGlvbi5cbiAqIEJ1aWxkcyB0aGUgaW1hZ2UgZnJvbSB0aGUgbG9jYWwgRG9ja2VyIGNvbnRleHQgcGF0aCwgdGhlbiBydW5zIGl0LlxuICogVGhlIGNvbnRhaW5lciBjb250aW51b3VzbHkgcG9sbHMgb3VyIFJ1bnRpbWUgQVBJIGZvciBpbnZvY2F0aW9ucy5cbiAqIFVzZXMgRWZmZWN0LmZvcmtEYWVtb24gdG8gZW5zdXJlIHRoZSBjb250YWluZXIgcnVucyBpbmRlcGVuZGVudGx5IHdpdGggY29udGV4dC5cbiAqL1xuY29uc3Qgc3RhcnRGdW5jdGlvbkNvbnRhaW5lciA9IChcbiAgZm46IERpc2NvdmVyZWRGdW5jdGlvbixcbiAgcG9ydDogbnVtYmVyLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBhZGRpdGlvbmFsRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBpbnZvY2F0aW9uQ29udGV4dHM/OiBNYXA8c3RyaW5nLCB7IG51bTogbnVtYmVyIH0+LFxuKTogRWZmZWN0LkVmZmVjdDxcbiAgRmliZXIuUnVudGltZUZpYmVyPHZvaWQsIEVycm9yPixcbiAgRXJyb3IsXG4gIENvbW1hbmRFeGVjdXRvci5Db21tYW5kRXhlY3V0b3Jcbj4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGlmICghZm4uZG9ja2VyQ29udGV4dFBhdGgpIHtcbiAgICAgIHJldHVybiB5aWVsZCogRWZmZWN0LmZhaWwoXG4gICAgICAgIG5ldyBFcnJvcihgRnVuY3Rpb24gJHtmbi5mdW5jdGlvbk5hbWV9IGhhcyBubyBEb2NrZXIgY29udGV4dCBwYXRoYCksXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZG9ja2VyID0geWllbGQqIERvY2tlclxuXG4gICAgY29uc3QgZG9ja2VyUnVudGltZSA9IHlpZWxkKiBkb2NrZXIuZ2V0UnVudGltZUluZm8oKVxuICAgIGNvbnN0IHJ1bnRpbWVBcGlIb3N0ID0gZG9ja2VyUnVudGltZS5pc0RvY2tlckRlc2t0b3BcbiAgICAgID8gXCJob3N0LmRvY2tlci5pbnRlcm5hbFwiXG4gICAgICA6IFwicnVudGltZS5hcGlcIlxuXG4gICAgLy8gR2VuZXJhdGUgYSBsb2NhbCBpbWFnZSBuYW1lIGZyb20gZnVuY3Rpb24gbmFtZVxuICAgIGNvbnN0IGltYWdlTmFtZSA9IGBsaXZlLWxhbWJkYS0ke2ZuLmZ1bmN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgXCItXCIpfWBcblxuICAgIC8vIFJlc29sdmUgdGhlIGNvbnRleHQgcGF0aCByZWxhdGl2ZSB0byBwcm9qZWN0IHJvb3RcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IGZuLmRvY2tlckNvbnRleHRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICA/IGZuLmRvY2tlckNvbnRleHRQYXRoXG4gICAgICA6IGAke3Byb2plY3RSb290fS8ke2ZuLmRvY2tlckNvbnRleHRQYXRofWBcblxuICAgIC8vIERldGVybWluZSBwbGF0Zm9ybSBmcm9tIGFyY2hpdGVjdHVyZVxuICAgIGNvbnN0IHBsYXRmb3JtID0gZm4uYXJjaGl0ZWN0dXJlID09PSBcImFybTY0XCIgPyBcImxpbnV4L2FybTY0XCIgOiBcImxpbnV4L2FtZDY0XCJcblxuICAgIC8vIEJ1aWxkIHRoZSBEb2NrZXIgaW1hZ2UgZnJvbSBsb2NhbCBjb250ZXh0XG4gICAgeWllbGQqIGRvY2tlclxuICAgICAgLmJ1aWxkKHtcbiAgICAgICAgY29udGV4dFBhdGgsXG4gICAgICAgIGltYWdlTmFtZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoRWZmZWN0LnNjb3BlZClcblxuICAgIC8vIEluc3BlY3QgdGhlIGltYWdlIHRvIGdldCBvcmlnaW5hbCBlbnRyeXBvaW50L2NtZCBmb3IgZXh0ZW5zaW9uIHdyYXBwZXJcbiAgICBjb25zdCBpbWFnZUNvbmZpZyA9IHlpZWxkKiBkb2NrZXIuaW5zcGVjdChpbWFnZU5hbWUpLnBpcGUoRWZmZWN0LnNjb3BlZClcbiAgICBjb25zdCBleHRlbnNpb25XcmFwcGVyID0gYnVpbGRFeHRlbnNpb25XcmFwcGVyQ29tbWFuZChcbiAgICAgIGltYWdlQ29uZmlnLmVudHJ5cG9pbnQsXG4gICAgICBpbWFnZUNvbmZpZy5jbWQsXG4gICAgKVxuXG4gICAgY29uc3QgY29udGFpbmVyQ29uZmlnID0gbWFrZUxhbWJkYUNvbnRhaW5lckNvbmZpZyh7XG4gICAgICBpbWFnZVVyaTogaW1hZ2VOYW1lLFxuICAgICAgcnVudGltZUFwaUhvc3QsXG4gICAgICBydW50aW1lQXBpUG9ydDogcG9ydCxcbiAgICAgIGZ1bmN0aW9uTmFtZTogZm4uZnVuY3Rpb25OYW1lLFxuICAgICAgZnVuY3Rpb25WZXJzaW9uOiBcIiRMQVRFU1RcIixcbiAgICAgIG1lbW9yeU1COiBmbi5tZW1vcnlNQixcbiAgICAgIHRpbWVvdXRTZWNvbmRzOiAzNjAwLCAvLyBMb25nIHRpbWVvdXQgLSBjb250YWluZXIgc3RheXMgcnVubmluZ1xuICAgICAgcGxhdGZvcm0sXG4gICAgICBhZGRpdGlvbmFsRW52LFxuICAgICAgaW52b2NhdGlvbkNvbnRleHRzLFxuICAgIH0pXG5cbiAgICAvLyBBcHBseSBleHRlbnNpb24gd3JhcHBlciB0byBzdGFydCBleHRlbnNpb25zIGJlZm9yZSB0aGUgYXBwXG4gICAgY29udGFpbmVyQ29uZmlnLmVudHJ5cG9pbnQgPSBleHRlbnNpb25XcmFwcGVyLmVudHJ5cG9pbnRcbiAgICBjb250YWluZXJDb25maWcuY29tbWFuZCA9IGV4dGVuc2lvbldyYXBwZXIuY29tbWFuZFxuXG4gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgYFN0YXJ0aW5nIGNvbnRhaW5lciBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9IG9uIHBvcnQgJHtwb3J0fWAsXG4gICAgKVxuXG4gICAgLy8gVXNlIEVmZmVjdC5mb3JrRGFlbW9uIHRvIHJ1biB0aGUgY29udGFpbmVyIGluZGVwZW5kZW50bHkgd2l0aCBjb250ZXh0IHByZXNlcnZlZFxuICAgIC8vIEVmZmVjdC5zY29wZWQgcHJvdmlkZXMgdGhlIHNjb3BlIG5lZWRlZCBieSBkb2NrZXIucnVuXG4gICAgY29uc3QgZmliZXIgPSB5aWVsZCogZG9ja2VyXG4gICAgICAucnVuKGNvbnRhaW5lckNvbmZpZylcbiAgICAgIC5waXBlKEVmZmVjdC5zY29wZWQsIEVmZmVjdC5pZ25vcmUsIEVmZmVjdC5mb3JrRGFlbW9uKVxuXG4gICAgcmV0dXJuIGZpYmVyXG4gIH0pLnBpcGUoRWZmZWN0LnByb3ZpZGUoRG9ja2VyTGl2ZSkpXG5cbi8vIFR5cGUgZ3VhcmRzIGZvciByZXNwb25zZSB0eXBlc1xuY29uc3QgaXNMYW1iZGFSZXNwb25zZSA9IChcbiAgcjogTGFtYmRhUmVzcG9uc2UgfCBMYW1iZGFFcnJvciB8IExhbWJkYUluaXRFcnJvcixcbik6IHIgaXMgTGFtYmRhUmVzcG9uc2UgPT4gXCJib2R5XCIgaW4gciAmJiAhKFwiZXJyb3JUeXBlXCIgaW4gcilcblxuY29uc3QgaXNMYW1iZGFFcnJvciA9IChcbiAgcjogTGFtYmRhUmVzcG9uc2UgfCBMYW1iZGFFcnJvciB8IExhbWJkYUluaXRFcnJvcixcbik6IHIgaXMgTGFtYmRhRXJyb3IgPT4gXCJyZXF1ZXN0SWRcIiBpbiByICYmIFwiZXJyb3JUeXBlXCIgaW4gclxuXG5jb25zdCBpc0xhbWJkYUluaXRFcnJvciA9IChcbiAgcjogTGFtYmRhUmVzcG9uc2UgfCBMYW1iZGFFcnJvciB8IExhbWJkYUluaXRFcnJvcixcbik6IHIgaXMgTGFtYmRhSW5pdEVycm9yID0+ICEoXCJyZXF1ZXN0SWRcIiBpbiByKSAmJiBcImVycm9yVHlwZVwiIGluIHJcblxuLyoqXG4gKiBSZXNldCB0aGUgaWRsZSB0aW1lciBmb3IgYSBjb250YWluZXIuXG4gKiBBZnRlciB0aGUgdGltZW91dCBleHBpcmVzIHdpdGggbm8gbmV3IHJlc3BvbnNlcywgdGhlIGNvbnRhaW5lciBpcyBzdG9wcGVkLlxuICogVGhpcyBwcmV2ZW50cyB0aGUgY29uZnVzaW5nIDUwMyBlcnJvciBmcm9tIHRoZSBMYW1iZGEgUklDIHdoZW4gdGhlIHBvbGwgdGltZXMgb3V0LlxuICovXG5jb25zdCByZXNldElkbGVUaW1lciA9IChcbiAgY29udGFpbmVyOiBGdW5jdGlvbkNvbnRhaW5lcixcbiAgY29udGFpbmVyc1JlZjogUmVmLlJlZjxNYXA8c3RyaW5nLCBGdW5jdGlvbkNvbnRhaW5lcj4+LFxuICBpZGxlVGltZW91dE1zOiBudW1iZXIsXG4pOiBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyLCBDb21tYW5kRXhlY3V0b3IuQ29tbWFuZEV4ZWN1dG9yPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgLy8gQ2FuY2VsIGV4aXN0aW5nIHRpbWVyIGlmIGFueVxuICAgIGlmIChjb250YWluZXIuaWRsZVRpbWVyRmliZXIpIHtcbiAgICAgIHlpZWxkKiBGaWJlci5pbnRlcnJ1cHQoY29udGFpbmVyLmlkbGVUaW1lckZpYmVyKS5waXBlKFxuICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpLFxuICAgICAgKVxuICAgICAgY29udGFpbmVyLmlkbGVUaW1lckZpYmVyID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFN0YXJ0IG5ldyB0aW1lciAtIHVzZSBuZXZlciBmb3IgZXJyb3IgdHlwZSBzaW5jZSB3ZSBjYXRjaCBhbGwgZXJyb3JzXG4gICAgY29uc3QgdGltZXJGaWJlcjogRmliZXIuUnVudGltZUZpYmVyPHZvaWQsIG5ldmVyPiA9IHlpZWxkKiBFZmZlY3QuZ2VuKFxuICAgICAgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQqIEVmZmVjdC5zbGVlcChEdXJhdGlvbi5taWxsaXMoaWRsZVRpbWVvdXRNcykpXG5cbiAgICAgICAgLy8gVGltZXIgZXhwaXJlZCAtIHN0b3AgY29udGFpbmVyIHByb2FjdGl2ZWx5XG4gICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcbiAgICAgICAgICBgW0xvY2FsXSBTdG9wcGluZyBpZGxlIGNvbnRhaW5lciAke2NvbnRhaW5lci5mbi5mdW5jdGlvbk5hbWV9ICh3aWxsIHJlc3RhcnQgb24gbmV4dCBpbnZvY2F0aW9uKWAsXG4gICAgICAgIClcblxuICAgICAgICAvLyBTdG9wIHRoZSBjb250YWluZXIgdXNpbmcgRG9ja2VyIHdpdGggZmFzdCB0aW1lb3V0ICgxcylcbiAgICAgICAgLy8gVGhlIGNvbnRhaW5lciBtYXkgYmUgYmxvY2tlZCBvbiBsb25nLXBvbGxpbmcsIHNvIHdlIG5lZWQgdG8gZm9yY2Uga2lsbFxuICAgICAgICBjb25zdCBkb2NrZXIgPSB5aWVsZCogRG9ja2VyXG4gICAgICAgIHlpZWxkKiBkb2NrZXIuc3RvcChjb250YWluZXIuY29udGFpbmVyTmFtZSwgMSkucGlwZShcbiAgICAgICAgICBFZmZlY3Quc2NvcGVkLFxuICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Qudm9pZCksXG4gICAgICAgIClcblxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBtYXAgc28gbmV4dCBpbnZvY2F0aW9uIGNyZWF0ZXMgZnJlc2ggY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250YWluZXJzID0geWllbGQqIFJlZi5nZXQoY29udGFpbmVyc1JlZilcbiAgICAgICAgY3VycmVudENvbnRhaW5lcnMuZGVsZXRlKGNvbnRhaW5lci5mbi5mdW5jdGlvbk5hbWUpXG4gICAgICAgIHlpZWxkKiBSZWYuc2V0KGNvbnRhaW5lcnNSZWYsIGN1cnJlbnRDb250YWluZXJzKVxuICAgICAgfSxcbiAgICApLnBpcGUoXG4gICAgICBFZmZlY3QucHJvdmlkZShEb2NrZXJMaXZlKSxcbiAgICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Qudm9pZCksXG4gICAgICBFZmZlY3QuZm9ya0RhZW1vbixcbiAgICApXG5cbiAgICBjb250YWluZXIuaWRsZVRpbWVyRmliZXIgPSB0aW1lckZpYmVyXG4gIH0pXG5cbi8qKlxuICogUHJvY2VzcyByZXNwb25zZXMgZnJvbSBhIGNvbnRhaW5lciBhbmQgZGlzcGF0Y2ggdG8gd2FpdGluZyBjYWxsZXJzLlxuICogQWZ0ZXIgZWFjaCByZXNwb25zZSwgcmVzZXRzIHRoZSBpZGxlIHRpbWVyIHRvIHByb2FjdGl2ZWx5IHN0b3AgdGhlIGNvbnRhaW5lclxuICogYmVmb3JlIHRoZSBwb2xsIHRpbWVvdXQgY2F1c2VzIGNvbmZ1c2luZyBMYW1iZGEgUklDIGVycm9ycy5cbiAqL1xuY29uc3QgcHJvY2Vzc0NvbnRhaW5lclJlc3BvbnNlcyA9IChcbiAgY29udGFpbmVyOiBGdW5jdGlvbkNvbnRhaW5lcixcbiAgY29udGFpbmVyc1JlZjogUmVmLlJlZjxNYXA8c3RyaW5nLCBGdW5jdGlvbkNvbnRhaW5lcj4+LFxuICBpZGxlVGltZW91dE1zOiBudW1iZXIsXG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgbWFrZUFwcFN5bmNDbGllbnQ+LFxuICBpbnZvY2F0aW9uQ29udGV4dHM6IE1hcDxzdHJpbmcsIEludm9jYXRpb25Db250ZXh0Pixcbik6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgRXJyb3IsIENvbW1hbmRFeGVjdXRvci5Db21tYW5kRXhlY3V0b3I+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCByZXNwb25zZUNoYW5uZWwgPSBidWlsZENoYW5uZWxOYW1lLnJlc3BvbnNlKGNvbnRhaW5lci5mbi5mdW5jdGlvbk5hbWUpXG5cbiAgICAvLyBDb250aW51b3VzbHkgcHJvY2VzcyByZXNwb25zZXMgZnJvbSB0aGUgY29udGFpbmVyXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkKiB3YWl0Rm9yUmVzcG9uc2UoY29udGFpbmVyLnJ1bnRpbWVTdGF0ZSlcblxuICAgICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZU1lc3NhZ2VcbiAgICAgIGlmIChpc0xhbWJkYVJlc3BvbnNlKHJlc3VsdCkpIHtcbiAgICAgICAgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgdHlwZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVzdWx0LnJlcXVlc3RJZCxcbiAgICAgICAgICByZXN1bHQ6IHJlc3VsdC5ib2R5LFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzTGFtYmRhRXJyb3IocmVzdWx0KSkge1xuICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICB0eXBlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgcmVxdWVzdElkOiByZXN1bHQucmVxdWVzdElkLFxuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBlcnJvclR5cGU6IHJlc3VsdC5lcnJvclR5cGUsXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IHJlc3VsdC5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFja1RyYWNlOiByZXN1bHQuc3RhY2tUcmFjZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzTGFtYmRhSW5pdEVycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICBgW0xvY2FsXSBJbml0IGVycm9yOiAke3Jlc3VsdC5lcnJvclR5cGV9OiAke3Jlc3VsdC5lcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gU2VuZCByZXNwb25zZSBiYWNrIHZpYSBBcHBTeW5jXG4gICAgICB5aWVsZCogY2xpZW50LnB1Ymxpc2hSZXNwb25zZShyZXNwb25zZUNoYW5uZWwsIHJlc3BvbnNlKVxuICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhgW0xvY2FsXSBTZW50IHJlc3BvbnNlIGZvciAke3Jlc3BvbnNlLnJlcXVlc3RJZH1gKVxuXG4gICAgICAvLyBQcmludCBlbmQgbWFya2VyIHdpdGggdGltaW5nXG4gICAgICBjb25zdCBjdHggPSBpbnZvY2F0aW9uQ29udGV4dHMuZ2V0KHJlc3BvbnNlLnJlcXVlc3RJZClcbiAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb25NcyA9IERhdGUubm93KCkgLSBjdHguc3RhcnRcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgWyR7Y3R4Lm51bX1dIFxcdTI1MTRcXHUyNTAwXFx1MjUwMCBcXHUyNzE3ICR7cmVzcG9uc2UuZXJyb3IuZXJyb3JUeXBlfTogJHtyZXNwb25zZS5lcnJvci5lcnJvck1lc3NhZ2V9ICgke2R1cmF0aW9uTXN9bXMpIFxcdTI1MDBcXHUyNTAwYCxcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgWyR7Y3R4Lm51bX1dIFxcdTI1MTRcXHUyNTAwXFx1MjUwMCBcXHUyNzEzIERvbmUgKCR7ZHVyYXRpb25Nc31tcykgXFx1MjUwMFxcdTI1MDBgLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBpbnZvY2F0aW9uQ29udGV4dHMuZGVsZXRlKHJlc3BvbnNlLnJlcXVlc3RJZClcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgaWRsZSB0aW1lciAtIGNvbnRhaW5lciB3aWxsIGJlIHN0b3BwZWQgaWYgbm8gbmV3IGludm9jYXRpb25zIGFycml2ZVxuICAgICAgeWllbGQqIHJlc2V0SWRsZVRpbWVyKGNvbnRhaW5lciwgY29udGFpbmVyc1JlZiwgaWRsZVRpbWVvdXRNcylcbiAgICB9XG4gIH0pXG5cbi8qKlxuICogU3RhcnQgYSBOb2RlLmpzIHdvcmtlciBwcm9jZXNzIGZvciBhIGZ1bmN0aW9uLlxuICogU3Bhd25zIEJ1biB0byBydW4gdGhlIHJ1bnRpbWUgd3JhcHBlciB3aXRoIHRoZSBoYW5kbGVyIHBhdGguXG4gKiBUaGUgd29ya2VyIGNvbnRpbnVvdXNseSBwb2xscyBvdXIgUnVudGltZSBBUEkgZm9yIGludm9jYXRpb25zLlxuICovXG5jb25zdCBzdGFydE5vZGVqc1dvcmtlciA9IChcbiAgZm46IERpc2NvdmVyZWRGdW5jdGlvbixcbiAgcG9ydDogbnVtYmVyLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGludm9jYXRpb25Db250ZXh0czogTWFwPHN0cmluZywgSW52b2NhdGlvbkNvbnRleHQ+LFxuICB3b3JrZXI6IE5vZGVqc1dvcmtlcixcbik6IEVmZmVjdC5FZmZlY3Q8Q2hpbGRQcm9jZXNzLCBFcnJvcj4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGlmICghZm4ubG9jYWxIYW5kbGVyKSB7XG4gICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKFxuICAgICAgICBuZXcgRXJyb3IoYEZ1bmN0aW9uICR7Zm4uZnVuY3Rpb25OYW1lfSBoYXMgbm8gbG9jYWwgaGFuZGxlciBwYXRoYCksXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gUmVzb2x2ZSB0aGUgcnVudGltZSB3cmFwcGVyIHBhdGggcmVsYXRpdmUgdG8gdGhpcyBtb2R1bGVcbiAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpXG4gICAgY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpXG4gICAgY29uc3QgcnVudGltZVdyYXBwZXJQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgICAgX19kaXJuYW1lLFxuICAgICAgXCIuLlwiLFxuICAgICAgXCJydW50aW1lLXdyYXBwZXJcIixcbiAgICAgIFwibm9kZWpzLXJ1bnRpbWUuanNcIixcbiAgICApXG5cbiAgICAvLyBHZXQgYWJzb2x1dGUgcGF0aCB0byBidW4gZm9yIHB1cmUgZW52IGlzb2xhdGlvbiAobm8gUEFUSCBkZXBlbmRlbmN5KVxuICAgIGNvbnN0IGJ1blBhdGggPSBCdW4ud2hpY2goXCJidW5cIilcbiAgICBpZiAoIWJ1blBhdGgpIHtcbiAgICAgIHJldHVybiB5aWVsZCogRWZmZWN0LmZhaWwoXG4gICAgICAgIG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kICdidW4nIGV4ZWN1dGFibGUgaW4gUEFUSFwiKSxcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBlbnZpcm9ubWVudCBmb3IgdGhlIHdvcmtlciBwcm9jZXNzXG4gICAgLy8gUHVyZSBpc29sYXRpb246IG9ubHkgZW52IGZyb20gYnJpZGdlICsgbG9jYWwgb3ZlcnJpZGVzLCBubyBsb2NhbCBQQVRIL0hPTUVcbiAgICBjb25zdCB3b3JrZXJFbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0ge1xuICAgICAgLy8gU3RhcnQgd2l0aCBlbnYgdmFycyBmcm9tIHRoZSBicmlkZ2UgTGFtYmRhIChBV1MgY3JlZGVudGlhbHMsIHVzZXItZGVmaW5lZCB2YXJzKVxuICAgICAgLi4uZW52LFxuICAgICAgLy8gTG9jYWwgb3ZlcnJpZGVzICh0aGVzZSBhcmUgc2V0IGJ5IHRoZSBkYWVtb24sIG5vdCBmcm9tIGJyaWRnZSlcbiAgICAgIEFXU19MQU1CREFfUlVOVElNRV9BUEk6IGBsb2NhbGhvc3Q6JHtwb3J0fWAsXG4gICAgICBfSEFORExFUjogZm4ubG9jYWxIYW5kbGVyLFxuICAgICAgTEFNQkRBX1RBU0tfUk9PVDogcHJvamVjdFJvb3QsXG4gICAgICAvLyBNZW1vcnkgbGltaXQgZm9yIGNvbnRleHQgb2JqZWN0XG4gICAgICBBV1NfTEFNQkRBX0ZVTkNUSU9OX01FTU9SWV9TSVpFOiBTdHJpbmcoZm4ubWVtb3J5TUIpLFxuICAgIH1cblxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICBgW0xvY2FsXSBTdGFydGluZyBOb2RlLmpzIHdvcmtlciBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9IG9uIHBvcnQgJHtwb3J0fWAsXG4gICAgKVxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFtMb2NhbF0gSGFuZGxlcjogJHtmbi5sb2NhbEhhbmRsZXJ9YClcblxuICAgIC8vIFNwYXduIEJ1biB3aXRoIC0td2F0Y2ggdG8gYXV0b21hdGljYWxseSByZXN0YXJ0IHdoZW4gaGFuZGxlciBmaWxlcyBjaGFuZ2VcbiAgICAvLyBUaGlzIGVuYWJsZXMgaG90LXJlbG9hZCB3aXRob3V0IG5lZWRpbmcgdG8gcmVzdGFydCB0aGUgZGFlbW9uXG4gICAgLy8gVXNlIGFic29sdXRlIGJ1biBwYXRoIGZvciBwdXJlIGVudiBpc29sYXRpb24gKG5vIFBBVEggZGVwZW5kZW5jeSlcbiAgICBjb25zdCB3b3JrZXJQcm9jZXNzID0gc3Bhd24oYnVuUGF0aCwgW1wiLS13YXRjaFwiLCBydW50aW1lV3JhcHBlclBhdGhdLCB7XG4gICAgICBjd2Q6IHByb2plY3RSb290LFxuICAgICAgZW52OiB3b3JrZXJFbnYsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcblxuICAgIC8vIFBhdHRlcm4gdG8gcGFyc2UgTGFtYmRhIGxvZyBmb3JtYXQ6IFRJTUVTVEFNUFxcdFJFUVVFU1RfSURcXHRMRVZFTFxcdE1FU1NBR0VcbiAgICAvLyBMYW1iZGEgdXNlcyB0YWJzIGJldHdlZW4gZmllbGRzLiBDYXB0dXJlczogWzFdID0gcmVxdWVzdCBJRCwgWzJdID0gbGV2ZWwgKyBtZXNzYWdlXG4gICAgY29uc3QgbGFtYmRhTG9nUGF0dGVybiA9XG4gICAgICAvXihcXGR7NH0tXFxkezJ9LVxcZHsyfVRbXFxkOi5dK1opW1xcdFxcc10rKFswLTlhLWYtXXszNn0pW1xcdFxcc10rKC4qKSQvaVxuXG4gICAgLy8gSGVscGVyIHRvIGZvcm1hdCBsb2cgbGluZSB3aXRoIGludm9jYXRpb24gcHJlZml4XG4gICAgY29uc3QgZm9ybWF0TGluZSA9IChcbiAgICAgIHJhd0xpbmU6IHN0cmluZyxcbiAgICApOiB7IHByZWZpeDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfSA9PiB7XG4gICAgICAvLyBTdHJpcCBjYXJyaWFnZSByZXR1cm5zIHRoYXQgY2FuIGNhdXNlIHRlcm1pbmFsIGNvcnJ1cHRpb25cbiAgICAgIGNvbnN0IGxpbmUgPSByYXdMaW5lLnJlcGxhY2UoL1xcci9nLCBcIlwiKVxuICAgICAgY29uc3QgbWF0Y2ggPSBsYW1iZGFMb2dQYXR0ZXJuLmV4ZWMobGluZSlcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSBtYXRjaFsyXVxuICAgICAgICBjb25zdCBjdHggPSBpbnZvY2F0aW9uQ29udGV4dHMuZ2V0KHJlcXVlc3RJZClcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgIC8vIFN0cmlwIHRpbWVzdGFtcCBhbmQgcmVxdWVzdCBJRCwga2VlcCBqdXN0IExFVkVMIE1FU1NBR0VcbiAgICAgICAgICByZXR1cm4geyBwcmVmaXg6IGBbJHtjdHgubnVtfV1gLCBjb250ZW50OiBtYXRjaFszXSB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEZhbGxiYWNrIHRvIHdvcmtlcidzIGN1cnJlbnQgcmVxdWVzdCBJRCBmb3IgbG9ncyB3aXRob3V0IHJlcXVlc3QgSURcbiAgICAgIGlmICh3b3JrZXIuY3VycmVudFJlcXVlc3RJZCkge1xuICAgICAgICBjb25zdCBjdHggPSBpbnZvY2F0aW9uQ29udGV4dHMuZ2V0KHdvcmtlci5jdXJyZW50UmVxdWVzdElkKVxuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgcmV0dXJuIHsgcHJlZml4OiBgWyR7Y3R4Lm51bX1dYCwgY29udGVudDogbGluZSB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHByZWZpeDogXCJbV29ya2VyXVwiLCBjb250ZW50OiBsaW5lIH1cbiAgICB9XG5cbiAgICAvLyBGb3J3YXJkIHN0ZG91dC9zdGRlcnIgd2l0aCBpbnZvY2F0aW9uIG51bWJlciBwcmVmaXhcbiAgICB3b3JrZXJQcm9jZXNzLnN0ZG91dD8ub24oXCJkYXRhXCIsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IGxpbmVzID0gZGF0YS50b1N0cmluZygpLnRyaW0oKS5zcGxpdChcIlxcblwiKVxuICAgICAgZm9yIChjb25zdCByYXdMaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4LCBjb250ZW50IH0gPSBmb3JtYXRMaW5lKHJhd0xpbmUpXG4gICAgICAgIGNvbnNvbGUubG9nKGAke3ByZWZpeH0gJHtjb250ZW50fWApXG4gICAgICB9XG4gICAgfSlcblxuICAgIHdvcmtlclByb2Nlc3Muc3RkZXJyPy5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3QgbGluZXMgPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpLnNwbGl0KFwiXFxuXCIpXG4gICAgICBmb3IgKGNvbnN0IHJhd0xpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgY29uc3QgeyBwcmVmaXgsIGNvbnRlbnQgfSA9IGZvcm1hdExpbmUocmF3TGluZSlcbiAgICAgICAgY29uc29sZS5lcnJvcihgJHtwcmVmaXh9ICR7Y29udGVudH1gKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB3b3JrZXJQcm9jZXNzLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgRWZmZWN0LnJ1blN5bmMoXG4gICAgICAgIEVmZmVjdC5sb2dFcnJvcihgV29ya2VyIGVycm9yOiAke2Vyci5tZXNzYWdlfWApLnBpcGUoXG4gICAgICAgICAgRWZmZWN0LmFubm90YXRlTG9ncyhcImZ1bmN0aW9uXCIsIGZuLmZ1bmN0aW9uTmFtZSksXG4gICAgICAgICksXG4gICAgICApXG4gICAgfSlcblxuICAgIHdvcmtlclByb2Nlc3Mub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgRWZmZWN0LnJ1blN5bmMoXG4gICAgICAgIEVmZmVjdC5sb2dJbmZvKGBXb3JrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkucGlwZShcbiAgICAgICAgICBFZmZlY3QuYW5ub3RhdGVMb2dzKFwiZnVuY3Rpb25cIiwgZm4uZnVuY3Rpb25OYW1lKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICB9KVxuXG4gICAgcmV0dXJuIHdvcmtlclByb2Nlc3NcbiAgfSlcblxuLyoqXG4gKiBQcm9jZXNzIHJlc3BvbnNlcyBmcm9tIGEgTm9kZS5qcyB3b3JrZXIgYW5kIGRpc3BhdGNoIHRvIHdhaXRpbmcgY2FsbGVycy5cbiAqL1xuY29uc3QgcHJvY2Vzc1dvcmtlclJlc3BvbnNlcyA9IChcbiAgd29ya2VyOiBOb2RlanNXb3JrZXIsXG4gIGNsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgbWFrZUFwcFN5bmNDbGllbnQ+LFxuICBpbnZvY2F0aW9uQ29udGV4dHM6IE1hcDxzdHJpbmcsIEludm9jYXRpb25Db250ZXh0PixcbikgPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlQ2hhbm5lbCA9IGJ1aWxkQ2hhbm5lbE5hbWUucmVzcG9uc2Uod29ya2VyLmZuLmZ1bmN0aW9uTmFtZSlcblxuICAgIC8vIENvbnRpbnVvdXNseSBwcm9jZXNzIHJlc3BvbnNlcyBmcm9tIHRoZSB3b3JrZXJcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQqIHdhaXRGb3JSZXNwb25zZSh3b3JrZXIucnVudGltZVN0YXRlKVxuXG4gICAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlTWVzc2FnZVxuICAgICAgaWYgKGlzTGFtYmRhUmVzcG9uc2UocmVzdWx0KSkge1xuICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICB0eXBlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgcmVxdWVzdElkOiByZXN1bHQucmVxdWVzdElkLFxuICAgICAgICAgIHJlc3VsdDogcmVzdWx0LmJvZHksXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNMYW1iZGFFcnJvcihyZXN1bHQpKSB7XG4gICAgICAgIHJlc3BvbnNlID0ge1xuICAgICAgICAgIHR5cGU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3VsdC5yZXF1ZXN0SWQsXG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGVycm9yVHlwZTogcmVzdWx0LmVycm9yVHlwZSxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZTogcmVzdWx0LmVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIHN0YWNrVHJhY2U6IHJlc3VsdC5zdGFja1RyYWNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNMYW1iZGFJbml0RXJyb3IocmVzdWx0KSkge1xuICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0Vycm9yKFxuICAgICAgICAgIGBbTG9jYWxdIFdvcmtlciBpbml0IGVycm9yOiAke3Jlc3VsdC5lcnJvclR5cGV9OiAke3Jlc3VsdC5lcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gU2VuZCByZXNwb25zZSBiYWNrIHZpYSBBcHBTeW5jXG4gICAgICB5aWVsZCogY2xpZW50LnB1Ymxpc2hSZXNwb25zZShyZXNwb25zZUNoYW5uZWwsIHJlc3BvbnNlKVxuICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhgW0xvY2FsXSBTZW50IHJlc3BvbnNlIGZvciAke3Jlc3BvbnNlLnJlcXVlc3RJZH1gKVxuXG4gICAgICAvLyBQcmludCBlbmQgbWFya2VyIHdpdGggdGltaW5nXG4gICAgICBjb25zdCBjdHggPSBpbnZvY2F0aW9uQ29udGV4dHMuZ2V0KHJlc3BvbnNlLnJlcXVlc3RJZClcbiAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb25NcyA9IERhdGUubm93KCkgLSBjdHguc3RhcnRcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgWyR7Y3R4Lm51bX1dIFxcdTI1MTRcXHUyNTAwXFx1MjUwMCBcXHUyNzE3ICR7cmVzcG9uc2UuZXJyb3IuZXJyb3JUeXBlfTogJHtyZXNwb25zZS5lcnJvci5lcnJvck1lc3NhZ2V9ICgke2R1cmF0aW9uTXN9bXMpIFxcdTI1MDBcXHUyNTAwYCxcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgWyR7Y3R4Lm51bX1dIFxcdTI1MTRcXHUyNTAwXFx1MjUwMCBcXHUyNzEzIERvbmUgKCR7ZHVyYXRpb25Nc31tcykgXFx1MjUwMFxcdTI1MDBgLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBpbnZvY2F0aW9uQ29udGV4dHMuZGVsZXRlKHJlc3BvbnNlLnJlcXVlc3RJZClcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgY3VycmVudCByZXF1ZXN0IElEIHRvIHByZXZlbnQgc3RhbGUgcHJlZml4ZXNcbiAgICAgIHdvcmtlci5jdXJyZW50UmVxdWVzdElkID0gdW5kZWZpbmVkXG4gICAgfVxuICB9KVxuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBjb21wbGV0ZWx5IGZpbHRlciBvdXQgZnJvbSBpbnZvY2F0aW9uIGVudi5cbiAqIFRoZXNlIGFyZSBub3QgcmVsZXZhbnQgZm9yIGxvY2FsIGV4ZWN1dGlvbi5cbiAqL1xuY29uc3QgRU5WX1ZBUlNfVE9fRklMVEVSID0gbmV3IFNldChbXCJBV1NfTEFNQkRBX0xPR19TVFJFQU1fTkFNRVwiXSlcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gaWdub3JlIHdoZW4gY2FsY3VsYXRpbmcgaWYgZW52IGhhcyBjaGFuZ2VkLlxuICogVGhlc2UgY2hhbmdlIGZyZXF1ZW50bHkgYnV0IGRvbid0IHJlcXVpcmUgYSBjb250YWluZXIgcmVzdGFydC5cbiAqXG4gKiBUT0RPOiBBV1MgY3JlZGVudGlhbHMgKEFDQ0VTU19LRVlfSUQsIFNFQ1JFVF9BQ0NFU1NfS0VZLCBTRVNTSU9OX1RPS0VOKVxuICogZG8gZXhwaXJlIGFuZCB3aWxsIG5lZWQgcmVmcmVzaGluZy4gRm9yIG5vdyB3ZSBpZ25vcmUgdGhlbSB0byBhdm9pZFxuICogdW5uZWNlc3NhcnkgcmVzdGFydHMsIGJ1dCB3ZSBzaG91bGQgaW1wbGVtZW50IGNyZWRlbnRpYWwgcmVmcmVzaCBsb2dpY1xuICogdGhhdCB1cGRhdGVzIHRoZSBjb250YWluZXIncyBjcmVkZW50aWFscyB3aXRob3V0IGEgZnVsbCByZXN0YXJ0LlxuICovXG5jb25zdCBFTlZfVkFSU19UT19JR05PUkVfSU5fRElGRiA9IG5ldyBTZXQoW1xuICBcIkFXU19BQ0NFU1NfS0VZX0lEXCIsXG4gIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXCIsXG4gIFwiQVdTX1NFU1NJT05fVE9LRU5cIixcbl0pXG5cbi8qKlxuICogRmlsdGVyIG91dCBpcnJlbGV2YW50IGVudiB2YXJzIGZyb20gaW52b2NhdGlvbiBlbnZpcm9ubWVudC5cbiAqL1xuY29uc3Qgc2FuaXRpemVJbnZvY2F0aW9uRW52ID0gKFxuICBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52KSkge1xuICAgIGlmICghRU5WX1ZBUlNfVE9fRklMVEVSLmhhcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBDb21wdXRlIHdoaWNoIGVudmlyb25tZW50IHZhcmlhYmxlcyBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0d28gZW52IG9iamVjdHMuXG4gKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcy5cbiAqIElnbm9yZXMgZW52IHZhcnMgaW4gRU5WX1ZBUlNfVE9fSUdOT1JFX0lOX0RJRkYuXG4gKi9cbmNvbnN0IGdldEVudkRpZmYgPSAoXG4gIG9sZEVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3RW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2hhbmdlczogc3RyaW5nW10gPSBbXVxuXG4gIC8vIENoZWNrIGZvciBhZGRlZCBvciBtb2RpZmllZCBrZXlzXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5ld0VudikpIHtcbiAgICBpZiAoRU5WX1ZBUlNfVE9fSUdOT1JFX0lOX0RJRkYuaGFzKGtleSkpIGNvbnRpbnVlXG4gICAgaWYgKCEoa2V5IGluIG9sZEVudikpIHtcbiAgICAgIGNoYW5nZXMucHVzaChgKyR7a2V5fWApXG4gICAgfSBlbHNlIGlmIChvbGRFbnZba2V5XSAhPT0gbmV3RW52W2tleV0pIHtcbiAgICAgIGNoYW5nZXMucHVzaChgfiR7a2V5fWApXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHJlbW92ZWQga2V5c1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvbGRFbnYpKSB7XG4gICAgaWYgKEVOVl9WQVJTX1RPX0lHTk9SRV9JTl9ESUZGLmhhcyhrZXkpKSBjb250aW51ZVxuICAgIGlmICghKGtleSBpbiBuZXdFbnYpKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goYC0ke2tleX1gKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFuZ2VzLmpvaW4oXCIsIFwiKVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIE5vZGUuanMgd29ya2VyIGlzIHN0YXJ0ZWQgZm9yIGEgZnVuY3Rpb24uXG4gKiBJZiB0aGUgd29ya2VyIGFscmVhZHkgZXhpc3RzLCByZXR1cm4gaXQuXG4gKiBPdGhlcndpc2UsIGNyZWF0ZSB0aGUgUnVudGltZSBBUEkgc2VydmVyLCBhZGQgdG8gd29ya2VycyBtYXAsIGFuZCBzdGFydCB0aGUgd29ya2VyLlxuICovXG5jb25zdCBlbnN1cmVXb3JrZXJTdGFydGVkID0gKFxuICBmbjogRGlzY292ZXJlZEZ1bmN0aW9uLFxuICBpbnZvY2F0aW9uRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICB3b3JrZXJzUmVmOiBSZWYuUmVmPE1hcDxzdHJpbmcsIE5vZGVqc1dvcmtlcj4+LFxuICBzZXJ2ZXJTY29wZTogU2NvcGUuU2NvcGUsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGFwcFN5bmNDbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIG1ha2VBcHBTeW5jQ2xpZW50PixcbiAgaW52b2NhdGlvbkNvbnRleHRzOiBNYXA8c3RyaW5nLCBJbnZvY2F0aW9uQ29udGV4dD4sXG4pOiBFZmZlY3QuRWZmZWN0PE5vZGVqc1dvcmtlciwgRXJyb3I+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAvLyBDaGVjayBpZiB3b3JrZXIgYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBjdXJyZW50V29ya2VycyA9IHlpZWxkKiBSZWYuZ2V0KHdvcmtlcnNSZWYpXG4gICAgY29uc3QgZXhpc3RpbmcgPSBjdXJyZW50V29ya2Vycy5nZXQoZm4uZnVuY3Rpb25OYW1lKVxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgLy8gQ2hlY2sgaWYgZW52IHZhcnMgaGF2ZSBjaGFuZ2VkIChlLmcuLCBhZnRlciBDREsgcmVkZXBsb3kpXG4gICAgICBjb25zdCBlbnZEaWZmID0gZ2V0RW52RGlmZihleGlzdGluZy5lbnYsIGludm9jYXRpb25FbnYpXG4gICAgICBpZiAoZW52RGlmZikge1xuICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXG4gICAgICAgICAgYFtMb2NhbF0gRW52aXJvbm1lbnQgY2hhbmdlZCBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9LCByZXN0YXJ0aW5nIHdvcmtlci4uLiAoJHtlbnZEaWZmfSlgLFxuICAgICAgICApXG4gICAgICAgIC8vIEtpbGwgdGhlIG9sZCB3b3JrZXJcbiAgICAgICAgeWllbGQqIEVmZmVjdC50cnkoKCkgPT4gZXhpc3Rpbmcud29ya2VyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKSkucGlwZShcbiAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpLFxuICAgICAgICApXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIG1hcCBzbyB3ZSBjcmVhdGUgYSBuZXcgb25lIGJlbG93XG4gICAgICAgIGN1cnJlbnRXb3JrZXJzLmRlbGV0ZShmbi5mdW5jdGlvbk5hbWUpXG4gICAgICAgIHlpZWxkKiBSZWYuc2V0KHdvcmtlcnNSZWYsIGN1cnJlbnRXb3JrZXJzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV29ya2VyIGRvZXNuJ3QgZXhpc3QgLSBzdGFydCBpdCBsYXppbHlcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgYFtMb2NhbF0gU3RhcnRpbmcgTm9kZS5qcyB3b3JrZXIgZm9yIGZpcnN0IGludm9jYXRpb24gb2YgJHtmbi5mdW5jdGlvbk5hbWV9Li4uYCxcbiAgICApXG5cbiAgICAvLyBDcmVhdGUgUnVudGltZSBBUEkgc2VydmVyIG9uIGVwaGVtZXJhbCBwb3J0XG4gICAgY29uc3QgeyBwb3J0LCBzdGF0ZTogcnVudGltZVN0YXRlIH0gPSB5aWVsZCogc3RhcnRSdW50aW1lQXBpU2VydmVyKHtcbiAgICAgIGZ1bmN0aW9uTWV0YWRhdGE6IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBmbi5mdW5jdGlvbk5hbWUsXG4gICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogXCIkTEFURVNUXCIsXG4gICAgICAgIGhhbmRsZXI6IGZuLmxvY2FsSGFuZGxlcixcbiAgICAgIH0sXG4gICAgfSkucGlwZShFZmZlY3QucHJvdmlkZVNlcnZpY2UoU2NvcGUuU2NvcGUsIHNlcnZlclNjb3BlKSlcblxuICAgIC8vIENyZWF0ZSB3b3JrZXIgb2JqZWN0ICh3aXRob3V0IHByb2Nlc3MgaW5pdGlhbGx5IC0gd2lsbCBiZSBzZXQgYWZ0ZXIgc3RhcnQpXG4gICAgLy8gV2UgYWRkIHRvIG1hcCBCRUZPUkUgc3RhcnRpbmcgd29ya2VyIHRvIGhhbmRsZSBjb25jdXJyZW50IGludm9jYXRpb25zXG4gICAgY29uc3Qgd29ya2VyOiBOb2RlanNXb3JrZXIgPSB7XG4gICAgICBmbixcbiAgICAgIHJ1bnRpbWVTdGF0ZSxcbiAgICAgIHBvcnQsXG4gICAgICB3b3JrZXJQcm9jZXNzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBDaGlsZFByb2Nlc3MsIC8vIFdpbGwgYmUgc2V0IHNob3J0bHlcbiAgICAgIGVudjogaW52b2NhdGlvbkVudixcbiAgICAgIGN1cnJlbnRSZXF1ZXN0SWQ6IHVuZGVmaW5lZCxcbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gbWFwIGltbWVkaWF0ZWx5IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgY3VycmVudFdvcmtlcnMuc2V0KGZuLmZ1bmN0aW9uTmFtZSwgd29ya2VyKVxuICAgIHlpZWxkKiBSZWYuc2V0KHdvcmtlcnNSZWYsIGN1cnJlbnRXb3JrZXJzKVxuXG4gICAgLy8gU3RhcnQgdGhlIHdvcmtlciBwcm9jZXNzIC0gcmVtb3ZlIGZyb20gbWFwIG9uIGZhaWx1cmVcbiAgICBjb25zdCB3b3JrZXJQcm9jZXNzID0geWllbGQqIHN0YXJ0Tm9kZWpzV29ya2VyKFxuICAgICAgZm4sXG4gICAgICBwb3J0LFxuICAgICAgcHJvamVjdFJvb3QsXG4gICAgICBpbnZvY2F0aW9uRW52LFxuICAgICAgaW52b2NhdGlvbkNvbnRleHRzLFxuICAgICAgd29ya2VyLFxuICAgICkucGlwZShcbiAgICAgIEVmZmVjdC5jYXRjaEFsbCgoZXJyb3IpID0+XG4gICAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgYnJva2VuIHdvcmtlciBmcm9tIG1hcCBvbiBmYWlsdXJlXG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICAgIGBbTG9jYWxdIEZhaWxlZCB0byBzdGFydCB3b3JrZXIgZm9yICR7Zm4uZnVuY3Rpb25OYW1lfTogJHtlcnJvcn1gLFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0geWllbGQqIFJlZi5nZXQod29ya2Vyc1JlZilcbiAgICAgICAgICBjdXJyZW50LmRlbGV0ZShmbi5mdW5jdGlvbk5hbWUpXG4gICAgICAgICAgeWllbGQqIFJlZi5zZXQod29ya2Vyc1JlZiwgY3VycmVudClcbiAgICAgICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKGVycm9yKVxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKVxuXG4gICAgLy8gVXBkYXRlIHdvcmtlciB3aXRoIHRoZSBwcm9jZXNzXG4gICAgd29ya2VyLndvcmtlclByb2Nlc3MgPSB3b3JrZXJQcm9jZXNzXG5cbiAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHJlc3BvbnNlcyBpbiB0aGUgYmFja2dyb3VuZFxuICAgIEVmZmVjdC5ydW5Gb3JrKFxuICAgICAgcHJvY2Vzc1dvcmtlclJlc3BvbnNlcyh3b3JrZXIsIGFwcFN5bmNDbGllbnQsIGludm9jYXRpb25Db250ZXh0cyksXG4gICAgKVxuXG4gICAgcmV0dXJuIHdvcmtlclxuICB9KVxuXG4vKipcbiAqIEVuc3VyZSBhIGNvbnRhaW5lciBpcyBzdGFydGVkIGZvciBhIGZ1bmN0aW9uLlxuICogSWYgdGhlIGNvbnRhaW5lciBhbHJlYWR5IGV4aXN0cywgcmV0dXJuIGl0LlxuICogSWYgdGhlIGVudiB2YXJzIGhhdmUgY2hhbmdlZCwgcmVzdGFydCB0aGUgY29udGFpbmVyLlxuICogT3RoZXJ3aXNlLCBjcmVhdGUgdGhlIFJ1bnRpbWUgQVBJIHNlcnZlciwgYWRkIHRvIGNvbnRhaW5lcnMgbWFwLCBhbmQgc3RhcnQgdGhlIGNvbnRhaW5lci5cbiAqL1xuY29uc3QgZW5zdXJlQ29udGFpbmVyU3RhcnRlZCA9IChcbiAgZm46IERpc2NvdmVyZWRGdW5jdGlvbixcbiAgaW52b2NhdGlvbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgY29udGFpbmVyc1JlZjogUmVmLlJlZjxNYXA8c3RyaW5nLCBGdW5jdGlvbkNvbnRhaW5lcj4+LFxuICBzZXJ2ZXJTY29wZTogU2NvcGUuU2NvcGUsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGlkbGVUaW1lb3V0TXM6IG51bWJlcixcbiAgcG9sbFRpbWVvdXRNczogbnVtYmVyLFxuICBhcHBTeW5jQ2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBtYWtlQXBwU3luY0NsaWVudD4sXG4gIGludm9jYXRpb25Db250ZXh0czogTWFwPHN0cmluZywgSW52b2NhdGlvbkNvbnRleHQ+LFxuKTogRWZmZWN0LkVmZmVjdDxGdW5jdGlvbkNvbnRhaW5lciwgRXJyb3IsIENvbW1hbmRFeGVjdXRvci5Db21tYW5kRXhlY3V0b3I+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAvLyBDaGVjayBpZiBjb250YWluZXIgYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBjdXJyZW50Q29udGFpbmVycyA9IHlpZWxkKiBSZWYuZ2V0KGNvbnRhaW5lcnNSZWYpXG4gICAgY29uc3QgZXhpc3RpbmcgPSBjdXJyZW50Q29udGFpbmVycy5nZXQoZm4uZnVuY3Rpb25OYW1lKVxuICAgIGlmIChleGlzdGluZykge1xuICAgICAgLy8gQ2hlY2sgaWYgZW52IHZhcnMgaGF2ZSBjaGFuZ2VkIChlLmcuLCBhZnRlciBDREsgcmVkZXBsb3kpXG4gICAgICBjb25zdCBlbnZEaWZmID0gZ2V0RW52RGlmZihleGlzdGluZy5lbnYsIGludm9jYXRpb25FbnYpXG4gICAgICBpZiAoZW52RGlmZikge1xuICAgICAgICAvLyBJTVBPUlRBTlQ6IFVwZGF0ZSBlbnYgaW1tZWRpYXRlbHkgKGJlZm9yZSBhbnkgeWllbGRzKSB0byBwcmV2ZW50XG4gICAgICAgIC8vIG90aGVyIGNvbmN1cnJlbnQgaW52b2NhdGlvbnMgZnJvbSBhbHNvIGRldGVjdGluZyB0aGUgY2hhbmdlIGFuZFxuICAgICAgICAvLyB0cmlnZ2VyaW5nIGR1cGxpY2F0ZSByZXN0YXJ0c1xuICAgICAgICBleGlzdGluZy5lbnYgPSBpbnZvY2F0aW9uRW52XG5cbiAgICAgICAgLy8gSWYgYWxyZWFkeSByZXN0YXJ0aW5nIGZvciBlbnYgY2hhbmdlLCBqdXN0IHJldHVybiB0aGUgZXhpc3RpbmcgY29udGFpbmVyXG4gICAgICAgIC8vIFRoZSBpbnZvY2F0aW9uIHdpbGwgYmUgcXVldWVkIGFuZCBwaWNrZWQgdXAgYnkgdGhlIG5ldyBjb250YWluZXJcbiAgICAgICAgaWYgKGV4aXN0aW5nLmlzUmVidWlsZGluZykge1xuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICBgW0xvY2FsXSBFbnZpcm9ubWVudCBjaGFuZ2UgcmVzdGFydCBhbHJlYWR5IGluIHByb2dyZXNzIGZvciAke2ZuLmZ1bmN0aW9uTmFtZX0sIHF1ZXVlaW5nIGludm9jYXRpb25gLFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcbiAgICAgICAgICBgW0xvY2FsXSBFbnZpcm9ubWVudCBjaGFuZ2VkIGZvciAke2ZuLmZ1bmN0aW9uTmFtZX0sIHJlc3RhcnRpbmcgY29udGFpbmVyLi4uICgke2VudkRpZmZ9KWAsXG4gICAgICAgIClcbiAgICAgICAgZXhpc3RpbmcuaXNSZWJ1aWxkaW5nID0gdHJ1ZVxuXG4gICAgICAgIC8vIFN0b3AgdGhlIERvY2tlciBjb250YWluZXIgZm9yY2VmdWxseSAodGltZW91dD0xcylcbiAgICAgICAgLy8gVGhpcyBzZW5kcyBTSUdURVJNIGFuZCB0aGVuIFNJR0tJTEwgYWZ0ZXIgMSBzZWNvbmRcbiAgICAgICAgLy8gV2UgbXVzdCBkbyB0aGlzIEJFRk9SRSBpbnRlcnJ1cHRpbmcgdGhlIGZpYmVyLCBiZWNhdXNlIHRoZSBmaWJlciBpc1xuICAgICAgICAvLyBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBkb2NrZXIgcHJvY2VzcyB0byBleGl0XG4gICAgICAgIHlpZWxkKiBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgY29uc3QgZG9ja2VyID0geWllbGQqIERvY2tlclxuICAgICAgICAgIHlpZWxkKiBkb2NrZXIuc3RvcChleGlzdGluZy5jb250YWluZXJOYW1lLCAxKS5waXBlKEVmZmVjdC5zY29wZWQpXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgRWZmZWN0LnByb3ZpZGUoRG9ja2VyTGl2ZSksXG4gICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcikgPT5cbiAgICAgICAgICAgIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgICAgYFtMb2NhbF0gRXJyb3Igc3RvcHBpbmcgY29udGFpbmVyIChtYXkgYWxyZWFkeSBiZSBzdG9wcGVkKTogJHtlcnJvcn1gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gTm93IGludGVycnVwdCB0aGUgZmliZXIgKGl0IHNob3VsZCBjb21wbGV0ZSBxdWlja2x5IHNpbmNlIGNvbnRhaW5lciBzdG9wcGVkKVxuICAgICAgICB5aWVsZCogRmliZXIuaW50ZXJydXB0KGV4aXN0aW5nLmNvbnRhaW5lckZpYmVyKS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Qudm9pZCksXG4gICAgICAgIClcblxuICAgICAgICAvLyBSZXN0YXJ0IHRoZSBjb250YWluZXIgd2l0aCBuZXcgZW52aXJvbm1lbnQsIHJldXNpbmcgZXhpc3RpbmcgUnVudGltZUFQSVxuICAgICAgICBjb25zdCBuZXdGaWJlciA9IHlpZWxkKiBzdGFydEZ1bmN0aW9uQ29udGFpbmVyKFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGV4aXN0aW5nLnBvcnQsXG4gICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgaW52b2NhdGlvbkVudixcbiAgICAgICAgICBpbnZvY2F0aW9uQ29udGV4dHMsXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgIGBbTG9jYWxdIEZhaWxlZCB0byByZXN0YXJ0IGNvbnRhaW5lciBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9OiAke2Vycm9yfWAsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZXhpc3RpbmcuaXNSZWJ1aWxkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgcmV0dXJuIHlpZWxkKiBFZmZlY3QuZmFpbChlcnJvcilcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIClcblxuICAgICAgICAvLyBVcGRhdGUgY29udGFpbmVyIHdpdGggbmV3IGZpYmVyXG4gICAgICAgIGV4aXN0aW5nLmNvbnRhaW5lckZpYmVyID0gbmV3RmliZXJcbiAgICAgICAgZXhpc3RpbmcuaXNSZWJ1aWxkaW5nID0gZmFsc2VcblxuICAgICAgICByZXR1cm4gZXhpc3RpbmdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnRhaW5lciBkb2Vzbid0IGV4aXN0IC0gc3RhcnQgaXQgbGF6aWx5XG4gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgYFtMb2NhbF0gU3RhcnRpbmcgY29udGFpbmVyIGZvciBmaXJzdCBpbnZvY2F0aW9uIG9mICR7Zm4uZnVuY3Rpb25OYW1lfS4uLmAsXG4gICAgKVxuXG4gICAgLy8gQ3JlYXRlIFJ1bnRpbWUgQVBJIHNlcnZlciBvbiBlcGhlbWVyYWwgcG9ydFxuICAgIC8vIFVzZSBwb2xsIHRpbWVvdXQgdGhhdCdzIHNob3J0ZXIgdGhhbiBpZGxlIHRpbWVvdXQgc28gY29udGFpbmVyIGV4aXRzIG5hdHVyYWxseVxuICAgIGNvbnN0IHsgcG9ydCwgc3RhdGU6IHJ1bnRpbWVTdGF0ZSB9ID0geWllbGQqIHN0YXJ0UnVudGltZUFwaVNlcnZlcih7XG4gICAgICBwb2xsVGltZW91dE1zLFxuICAgICAgZnVuY3Rpb25NZXRhZGF0YToge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IGZuLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiBcIiRMQVRFU1RcIixcbiAgICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICB9LFxuICAgIH0pLnBpcGUoRWZmZWN0LnByb3ZpZGVTZXJ2aWNlKFNjb3BlLlNjb3BlLCBzZXJ2ZXJTY29wZSkpXG5cbiAgICAvLyBHZW5lcmF0ZSBjb250YWluZXIgbmFtZSBhbmQgaW1hZ2UgbmFtZVxuICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBgbGFtYmRhLSR7Zm4uZnVuY3Rpb25OYW1lLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIi1cIil9YFxuICAgIGNvbnN0IGltYWdlTmFtZSA9IGBsaXZlLWxhbWJkYS0ke2ZuLmZ1bmN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgXCItXCIpfWBcblxuICAgIC8vIENyZWF0ZSBjb250YWluZXIgb2JqZWN0ICh3aXRob3V0IGZpYmVyIGluaXRpYWxseSAtIHdpbGwgYmUgc2V0IGFmdGVyIHN0YXJ0KVxuICAgIC8vIFdlIGFkZCB0byBtYXAgQkVGT1JFIHN0YXJ0aW5nIGNvbnRhaW5lciB0byBoYW5kbGUgY29uY3VycmVudCBpbnZvY2F0aW9uc1xuICAgIGNvbnN0IGNvbnRhaW5lcjogRnVuY3Rpb25Db250YWluZXIgPSB7XG4gICAgICBmbixcbiAgICAgIHJ1bnRpbWVTdGF0ZSxcbiAgICAgIHBvcnQsXG4gICAgICBjb250YWluZXJGaWJlcjogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgRmliZXIuUnVudGltZUZpYmVyPHZvaWQsIEVycm9yPiwgLy8gV2lsbCBiZSBzZXQgc2hvcnRseVxuICAgICAgY29udGFpbmVyTmFtZSxcbiAgICAgIGltYWdlTmFtZSxcbiAgICAgIGlzUmVidWlsZGluZzogZmFsc2UsXG4gICAgICBwZW5kaW5nUmVzcG9uc2VzOiBuZXcgTWFwKCksXG4gICAgICBpZGxlVGltZXJGaWJlcjogbnVsbCxcbiAgICAgIGVudjogaW52b2NhdGlvbkVudixcbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gbWFwIGltbWVkaWF0ZWx5IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgY3VycmVudENvbnRhaW5lcnMuc2V0KGZuLmZ1bmN0aW9uTmFtZSwgY29udGFpbmVyKVxuICAgIHlpZWxkKiBSZWYuc2V0KGNvbnRhaW5lcnNSZWYsIGN1cnJlbnRDb250YWluZXJzKVxuXG4gICAgLy8gQnVpbGQgYW5kIHN0YXJ0IHRoZSBjb250YWluZXIgLSByZW1vdmUgZnJvbSBtYXAgb24gZmFpbHVyZVxuICAgIGNvbnN0IGNvbnRhaW5lckZpYmVyID0geWllbGQqIHN0YXJ0RnVuY3Rpb25Db250YWluZXIoXG4gICAgICBmbixcbiAgICAgIHBvcnQsXG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIGludm9jYXRpb25FbnYsXG4gICAgICBpbnZvY2F0aW9uQ29udGV4dHMsXG4gICAgKS5waXBlKFxuICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcikgPT5cbiAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgIC8vIFJlbW92ZSBicm9rZW4gY29udGFpbmVyIGZyb20gbWFwIG9uIGZhaWx1cmVcbiAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0Vycm9yKFxuICAgICAgICAgICAgYFtMb2NhbF0gRmFpbGVkIHRvIHN0YXJ0IGNvbnRhaW5lciBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9OiAke2Vycm9yfWAsXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB5aWVsZCogUmVmLmdldChjb250YWluZXJzUmVmKVxuICAgICAgICAgIGN1cnJlbnQuZGVsZXRlKGZuLmZ1bmN0aW9uTmFtZSlcbiAgICAgICAgICB5aWVsZCogUmVmLnNldChjb250YWluZXJzUmVmLCBjdXJyZW50KVxuICAgICAgICAgIHJldHVybiB5aWVsZCogRWZmZWN0LmZhaWwoZXJyb3IpXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApXG5cbiAgICAvLyBVcGRhdGUgY29udGFpbmVyIHdpdGggdGhlIGZpYmVyXG4gICAgY29udGFpbmVyLmNvbnRhaW5lckZpYmVyID0gY29udGFpbmVyRmliZXJcblxuICAgIC8vIFN0YXJ0IHByb2Nlc3NpbmcgcmVzcG9uc2VzIGluIHRoZSBiYWNrZ3JvdW5kIHVzaW5nIGZvcmtEYWVtb25cbiAgICB5aWVsZCogcHJvY2Vzc0NvbnRhaW5lclJlc3BvbnNlcyhcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbnRhaW5lcnNSZWYsXG4gICAgICBpZGxlVGltZW91dE1zLFxuICAgICAgYXBwU3luY0NsaWVudCxcbiAgICAgIGludm9jYXRpb25Db250ZXh0cyxcbiAgICApLnBpcGUoRWZmZWN0LmZvcmtEYWVtb24pXG5cbiAgICByZXR1cm4gY29udGFpbmVyXG4gIH0pXG5cbi8qKlxuICogUmVidWlsZCBhIERvY2tlciBjb250YWluZXIgYWZ0ZXIgZmlsZSBjaGFuZ2VzLlxuICogSW52b2NhdGlvbnMgYXJyaXZpbmcgZHVyaW5nIHJlYnVpbGQgd2lsbCBiZSBxdWV1ZWQgYW5kIHBpY2tlZCB1cCBieSB0aGUgbmV3IGNvbnRhaW5lci5cbiAqL1xuY29uc3QgcmVidWlsZERvY2tlckNvbnRhaW5lciA9IChcbiAgZnVuY3Rpb25JZDogc3RyaW5nLFxuICBjb250YWluZXJzUmVmOiBSZWYuUmVmPE1hcDxzdHJpbmcsIEZ1bmN0aW9uQ29udGFpbmVyPj4sXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4pOiBFZmZlY3QuRWZmZWN0PHZvaWQsIEVycm9yLCBDb21tYW5kRXhlY3V0b3IuQ29tbWFuZEV4ZWN1dG9yPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgY29udGFpbmVycyA9IHlpZWxkKiBSZWYuZ2V0KGNvbnRhaW5lcnNSZWYpXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVycy5nZXQoZnVuY3Rpb25JZClcblxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXG4gICAgICAgIGBbTG9jYWxdIENhbm5vdCByZWJ1aWxkICR7ZnVuY3Rpb25JZH0gLSBjb250YWluZXIgbm90IGZvdW5kYCxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgcmVidWlsZGluZyAtIGludm9jYXRpb25zIHdpbGwgc3RpbGwgcXVldWUgYnV0IHdlIGxvZyBpdFxuICAgIGNvbnRhaW5lci5pc1JlYnVpbGRpbmcgPSB0cnVlXG5cbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKGBbTG9jYWxdIFJlYnVpbGRpbmcgY29udGFpbmVyIGZvciAke2Z1bmN0aW9uSWR9Li4uYClcblxuICAgIGNvbnN0IGRvY2tlciA9IHlpZWxkKiBEb2NrZXJcblxuICAgIC8vIFN0b3AgdGhlIGV4aXN0aW5nIGNvbnRhaW5lciB1c2luZyBEb2NrZXIgc2VydmljZVxuICAgIGNvbnN0IGNvbnRhaW5lcklkID0gY29udGFpbmVyLmNvbnRhaW5lck5hbWVcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXG4gICAgICBgW0xvY2FsXSBTdG9wcGluZyBjb250YWluZXIgd2l0aCBuYW1lIHByZWZpeDogJHtjb250YWluZXJJZH1gLFxuICAgIClcblxuICAgIGNvbnN0IHN0b3BDb3VudCA9IHlpZWxkKiBkb2NrZXIuc3RvcChjb250YWluZXJJZCkucGlwZShcbiAgICAgIEVmZmVjdC5zY29wZWQsXG4gICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKGBOb3RlOiBDb250YWluZXIgc3RvcCBoYWQgaXNzdWU6ICR7ZXJyb3J9YClcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKVxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFtMb2NhbF0gU3RvcHBlZCAke3N0b3BDb3VudH0gY29udGFpbmVyKHMpYClcblxuICAgIC8vIFJlc29sdmUgdGhlIGNvbnRleHQgcGF0aFxuICAgIGNvbnN0IGZuID0gY29udGFpbmVyLmZuXG4gICAgY29uc3QgY29udGV4dFBhdGggPSBmbi5kb2NrZXJDb250ZXh0UGF0aD8uc3RhcnRzV2l0aChcIi9cIilcbiAgICAgID8gZm4uZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgIDogYCR7cHJvamVjdFJvb3R9LyR7Zm4uZG9ja2VyQ29udGV4dFBhdGh9YFxuXG4gICAgLy8gRGV0ZXJtaW5lIHBsYXRmb3JtIGZyb20gYXJjaGl0ZWN0dXJlXG4gICAgY29uc3QgcGxhdGZvcm0gPSBmbi5hcmNoaXRlY3R1cmUgPT09IFwiYXJtNjRcIiA/IFwibGludXgvYXJtNjRcIiA6IFwibGludXgvYW1kNjRcIlxuXG4gICAgLy8gUmVidWlsZCB0aGUgRG9ja2VyIGltYWdlXG4gICAgeWllbGQqIGRvY2tlclxuICAgICAgLmJ1aWxkKHtcbiAgICAgICAgY29udGV4dFBhdGgsXG4gICAgICAgIGltYWdlTmFtZTogY29udGFpbmVyLmltYWdlTmFtZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoRWZmZWN0LnNjb3BlZClcblxuICAgIC8vIEluc3BlY3QgdGhlIGltYWdlIHRvIGdldCBvcmlnaW5hbCBlbnRyeXBvaW50L2NtZCBmb3IgZXh0ZW5zaW9uIHdyYXBwZXJcbiAgICBjb25zdCBpbWFnZUNvbmZpZyA9IHlpZWxkKiBkb2NrZXJcbiAgICAgIC5pbnNwZWN0KGNvbnRhaW5lci5pbWFnZU5hbWUpXG4gICAgICAucGlwZShFZmZlY3Quc2NvcGVkKVxuICAgIGNvbnN0IGV4dGVuc2lvbldyYXBwZXIgPSBidWlsZEV4dGVuc2lvbldyYXBwZXJDb21tYW5kKFxuICAgICAgaW1hZ2VDb25maWcuZW50cnlwb2ludCxcbiAgICAgIGltYWdlQ29uZmlnLmNtZCxcbiAgICApXG5cbiAgICAvLyBSZXN0YXJ0IHRoZSBjb250YWluZXIgYnkgdHJpZ2dlcmluZyBjb250YWluZXIgc3RhcnR1cFxuICAgIC8vIFRoZSBleGlzdGluZyBmaWJlciB3aWxsIGhhdmUgZXhpdGVkIHdoZW4gd2Ugc3RvcHBlZCB0aGUgY29udGFpbmVyXG4gICAgLy8gV2UgbmVlZCB0byBzdGFydCBhIG5ldyBvbmVcbiAgICBjb25zdCBkb2NrZXJSdW50aW1lID0geWllbGQqIGRvY2tlci5nZXRSdW50aW1lSW5mbygpXG4gICAgY29uc3QgcnVudGltZUFwaUhvc3QgPSBkb2NrZXJSdW50aW1lLmlzRG9ja2VyRGVza3RvcFxuICAgICAgPyBcImhvc3QuZG9ja2VyLmludGVybmFsXCJcbiAgICAgIDogXCJydW50aW1lLmFwaVwiXG5cbiAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXG4gICAgICBgW0xvY2FsXSBOZXcgY29udGFpbmVyIHdpbGwgY29ubmVjdCB0byBSdW50aW1lIEFQSSBhdCAke3J1bnRpbWVBcGlIb3N0fToke2NvbnRhaW5lci5wb3J0fWAsXG4gICAgKVxuXG4gICAgY29uc3QgY29udGFpbmVyQ29uZmlnID0gbWFrZUxhbWJkYUNvbnRhaW5lckNvbmZpZyh7XG4gICAgICBpbWFnZVVyaTogY29udGFpbmVyLmltYWdlTmFtZSxcbiAgICAgIHJ1bnRpbWVBcGlIb3N0LFxuICAgICAgcnVudGltZUFwaVBvcnQ6IGNvbnRhaW5lci5wb3J0LFxuICAgICAgZnVuY3Rpb25OYW1lOiBmbi5mdW5jdGlvbk5hbWUsXG4gICAgICBmdW5jdGlvblZlcnNpb246IFwiJExBVEVTVFwiLFxuICAgICAgbWVtb3J5TUI6IGZuLm1lbW9yeU1CLFxuICAgICAgdGltZW91dFNlY29uZHM6IDM2MDAsXG4gICAgICBwbGF0Zm9ybSxcbiAgICB9KVxuXG4gICAgLy8gQXBwbHkgZXh0ZW5zaW9uIHdyYXBwZXIgdG8gc3RhcnQgZXh0ZW5zaW9ucyBiZWZvcmUgdGhlIGFwcFxuICAgIGNvbnRhaW5lckNvbmZpZy5lbnRyeXBvaW50ID0gZXh0ZW5zaW9uV3JhcHBlci5lbnRyeXBvaW50XG4gICAgY29udGFpbmVyQ29uZmlnLmNvbW1hbmQgPSBleHRlbnNpb25XcmFwcGVyLmNvbW1hbmRcblxuICAgIC8vIFN0YXJ0IHRoZSBuZXcgY29udGFpbmVyXG4gICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgIGBbTG9jYWxdIFN0YXJ0aW5nIG5ldyBjb250YWluZXIgZm9yICR7ZnVuY3Rpb25JZH0uLi5gLFxuICAgIClcblxuICAgIC8vIFVzZSBFZmZlY3QuZm9ya0RhZW1vbiB0byBydW4gdGhlIGNvbnRhaW5lciBpbmRlcGVuZGVudGx5XG4gICAgY29uc3QgbmV3RmliZXIgPSB5aWVsZCogZG9ja2VyLnJ1bihjb250YWluZXJDb25maWcpLnBpcGUoXG4gICAgICBFZmZlY3Quc2NvcGVkLFxuICAgICAgRWZmZWN0LnRhcCgocmVzdWx0KSA9PlxuICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgLy8gT25seSBzdXBwcmVzcyBlcnJvcnMgZm9yIGV4cGVjdGVkIGV4aXQgY29kZXMgZnJvbSBkb2NrZXIgc3RvcDpcbiAgICAgICAgICAvLyAwOiBjbGVhbiwgMTQzOiBTSUdURVJNLCAxMzc6IFNJR0tJTExcbiAgICAgICAgICBjb25zdCBjb2RlID0gcmVzdWx0LmV4aXRDb2RlXG4gICAgICAgICAgaWYgKGNvZGUgIT09IDAgJiYgY29kZSAhPT0gMTQzICYmIGNvZGUgIT09IDEzNykge1xuICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICAgICAgYENvbnRhaW5lciBmb3IgJHtmdW5jdGlvbklkfSBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dFcnJvcihgc3RkZXJyOiAke3Jlc3VsdC5zdGRlcnJ9YClcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICAgIEVmZmVjdC5pZ25vcmUsXG4gICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICBFZmZlY3QubG9nRXJyb3IoYENvbnRhaW5lciBlcnJvciBmb3IgJHtmdW5jdGlvbklkfTogJHtlcnJvcn1gKSxcbiAgICAgICksXG4gICAgICBFZmZlY3QuZm9ya0RhZW1vbixcbiAgICApXG5cbiAgICAvLyBVcGRhdGUgdGhlIGNvbnRhaW5lciBzdGF0ZSB3aXRoIHRoZSBuZXcgZmliZXJcbiAgICBjb250YWluZXIuY29udGFpbmVyRmliZXIgPSBuZXdGaWJlclxuXG4gICAgLy8gV2FpdCBhIG1vbWVudCBmb3IgdGhlIGNvbnRhaW5lciB0byBzdGFydCBhbmQgYmVnaW4gcG9sbGluZ1xuICAgIHlpZWxkKiBFZmZlY3Quc2xlZXAoXCIyIHNlY29uZHNcIilcblxuICAgIGNvbnRhaW5lci5pc1JlYnVpbGRpbmcgPSBmYWxzZVxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFtMb2NhbF0gQ29udGFpbmVyIHJlYnVpbHQgZm9yICR7ZnVuY3Rpb25JZH1gKVxuICB9KS5waXBlKEVmZmVjdC5wcm92aWRlKERvY2tlckxpdmUpKVxuXG4vKipcbiAqIEhhbmRsZSBpbmNvbWluZyBpbnZvY2F0aW9ucyBmb3IgYSBEb2NrZXIgY29udGFpbmVyIGZ1bmN0aW9uIGJ5IHF1ZXVlaW5nIHRoZW0uXG4gKiBTdGFydHMgdGhlIGNvbnRhaW5lciBsYXppbHkgaWYgbm90IGFscmVhZHkgcnVubmluZy5cbiAqIEludm9jYXRpb25zIGFyZSBxdWV1ZWQgZXZlbiBpZiBhIHJlYnVpbGQgaXMgaW4gcHJvZ3Jlc3MgLSB0aGUgbmV3IGNvbnRhaW5lciB3aWxsIHBpY2sgdGhlbSB1cC5cbiAqL1xuY29uc3QgaGFuZGxlRG9ja2VySW52b2NhdGlvbiA9IChcbiAgZm46IERpc2NvdmVyZWRGdW5jdGlvbixcbiAgaW52b2NhdGlvbjogSW52b2NhdGlvbk1lc3NhZ2UsXG4gIGNvbnRhaW5lcnNSZWY6IFJlZi5SZWY8TWFwPHN0cmluZywgRnVuY3Rpb25Db250YWluZXI+PixcbiAgc2VydmVyU2NvcGU6IFNjb3BlLlNjb3BlLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBpZGxlVGltZW91dE1zOiBudW1iZXIsXG4gIHBvbGxUaW1lb3V0TXM6IG51bWJlcixcbiAgYXBwU3luY0NsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgbWFrZUFwcFN5bmNDbGllbnQ+LFxuICBpbnZvY2F0aW9uQ291bnRlcjogUmVmLlJlZjxudW1iZXI+LFxuICBpbnZvY2F0aW9uQ29udGV4dHM6IE1hcDxzdHJpbmcsIEludm9jYXRpb25Db250ZXh0Pixcbik6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgRXJyb3IsIENvbW1hbmRFeGVjdXRvci5Db21tYW5kRXhlY3V0b3I+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAvLyBFbnN1cmUgY29udGFpbmVyIGlzIHN0YXJ0ZWQgKGxhenkgc3RhcnR1cCBvbiBmaXJzdCBpbnZvY2F0aW9uKVxuICAgIC8vIFVzZSBlbnYgZnJvbSBpbnZvY2F0aW9uIChjYXB0dXJlZCBmcm9tIGJyaWRnZSBMYW1iZGEgb24gZmlyc3QgaW52b2tlKVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHlpZWxkKiBlbnN1cmVDb250YWluZXJTdGFydGVkKFxuICAgICAgZm4sXG4gICAgICBzYW5pdGl6ZUludm9jYXRpb25FbnYoaW52b2NhdGlvbi5lbnYgPz8ge30pLFxuICAgICAgY29udGFpbmVyc1JlZixcbiAgICAgIHNlcnZlclNjb3BlLFxuICAgICAgcHJvamVjdFJvb3QsXG4gICAgICBpZGxlVGltZW91dE1zLFxuICAgICAgcG9sbFRpbWVvdXRNcyxcbiAgICAgIGFwcFN5bmNDbGllbnQsXG4gICAgICBpbnZvY2F0aW9uQ29udGV4dHMsXG4gICAgKVxuXG4gICAgLy8gQXNzaWduIGludm9jYXRpb24gbnVtYmVyIGFuZCB0cmFjayBjb250ZXh0IGZvciBsb2dnaW5nXG4gICAgY29uc3QgaW52b2NhdGlvbk51bSA9IHlpZWxkKiBSZWYudXBkYXRlQW5kR2V0KFxuICAgICAgaW52b2NhdGlvbkNvdW50ZXIsXG4gICAgICAobikgPT4gbiArIDEsXG4gICAgKVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgICBpbnZvY2F0aW9uQ29udGV4dHMuc2V0KGludm9jYXRpb24ucmVxdWVzdElkLCB7XG4gICAgICBudW06IGludm9jYXRpb25OdW0sXG4gICAgICBzdGFydDogc3RhcnRUaW1lLFxuICAgICAgZm46IGZuLmZ1bmN0aW9uTmFtZSxcbiAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgIH0pXG5cbiAgICAvLyBQcmludCBzdGFydCBtYXJrZXJcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBcXG5bJHtpbnZvY2F0aW9uTnVtfV0gXFx1MjUwY1xcdTI1MDBcXHUyNTAwIFtEb2NrZXJdICR7Zm4uZnVuY3Rpb25OYW1lfSBcXHUyNTAwXFx1MjUwMGAsXG4gICAgKVxuXG4gICAgLy8gTG9nIGlmIHF1ZXVpbmcgZHVyaW5nIGEgcmVidWlsZFxuICAgIGlmIChjb250YWluZXIuaXNSZWJ1aWxkaW5nKSB7XG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgICBgW0xvY2FsXSBRdWV1ZWluZyBpbnZvY2F0aW9uICR7aW52b2NhdGlvbi5yZXF1ZXN0SWR9IGZvciAke2ZuLmZ1bmN0aW9uTmFtZX0gKHJlYnVpbGQgaW4gcHJvZ3Jlc3MsIHdpbGwgYmUgcGlja2VkIHVwIGJ5IG5ldyBjb250YWluZXIpYCxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgYFtMb2NhbF0gUXVldWVpbmcgaW52b2NhdGlvbiAke2ludm9jYXRpb24ucmVxdWVzdElkfSBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9YCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBsYW1iZGFJbnZvY2F0aW9uOiBMYW1iZGFJbnZvY2F0aW9uID0ge1xuICAgICAgcmVxdWVzdElkOiBpbnZvY2F0aW9uLnJlcXVlc3RJZCxcbiAgICAgIGV2ZW50OiBpbnZvY2F0aW9uLmV2ZW50LFxuICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBpbnZvY2F0aW9uLmNvbnRleHQuaW52b2tlZEZ1bmN0aW9uQXJuLFxuICAgICAgZGVhZGxpbmVNczogRGF0ZS5ub3coKSArIGludm9jYXRpb24uY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMsXG4gICAgICBmdW5jdGlvbk5hbWU6IGZuLmZ1bmN0aW9uTmFtZSxcbiAgICAgIGZ1bmN0aW9uVmVyc2lvbjogaW52b2NhdGlvbi5jb250ZXh0LmZ1bmN0aW9uVmVyc2lvbixcbiAgICAgIG1lbW9yeUxpbWl0TUI6IGZuLm1lbW9yeU1CLFxuICAgICAgbG9nR3JvdXBOYW1lOiBpbnZvY2F0aW9uLmNvbnRleHQubG9nR3JvdXBOYW1lLFxuICAgICAgbG9nU3RyZWFtTmFtZTogaW52b2NhdGlvbi5jb250ZXh0LmxvZ1N0cmVhbU5hbWUsXG4gICAgfVxuXG4gICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgIGBbTG9jYWxdIFF1ZXVlaW5nIHRvIFJ1bnRpbWUgQVBJIG9uIHBvcnQgJHtjb250YWluZXIucG9ydH1gLFxuICAgIClcbiAgICAvLyBOb3RpZnkgZXh0ZW5zaW9ucyBhYm91dCB0aGUgaW52b2NhdGlvbiAoZm9yIExhbWJkYSBXZWIgQWRhcHRlciBzdXBwb3J0KVxuICAgIHlpZWxkKiBub3RpZnlFeHRlbnNpb25zSW52b2tlKGNvbnRhaW5lci5ydW50aW1lU3RhdGUsIGxhbWJkYUludm9jYXRpb24pXG4gICAgeWllbGQqIHF1ZXVlSW52b2NhdGlvbihjb250YWluZXIucnVudGltZVN0YXRlLCBsYW1iZGFJbnZvY2F0aW9uKVxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFtMb2NhbF0gSW52b2NhdGlvbiBxdWV1ZWQgc3VjY2Vzc2Z1bGx5YClcbiAgfSlcblxuLyoqXG4gKiBIYW5kbGUgaW5jb21pbmcgaW52b2NhdGlvbnMgZm9yIGEgTm9kZS5qcyBmdW5jdGlvbiBieSBxdWV1ZWluZyB0aGVtLlxuICogU3RhcnRzIHRoZSB3b3JrZXIgbGF6aWx5IGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4gKi9cbmNvbnN0IGhhbmRsZU5vZGVqc0ludm9jYXRpb24gPSAoXG4gIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb24sXG4gIGludm9jYXRpb246IEludm9jYXRpb25NZXNzYWdlLFxuICB3b3JrZXJzUmVmOiBSZWYuUmVmPE1hcDxzdHJpbmcsIE5vZGVqc1dvcmtlcj4+LFxuICBzZXJ2ZXJTY29wZTogU2NvcGUuU2NvcGUsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGFwcFN5bmNDbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIG1ha2VBcHBTeW5jQ2xpZW50PixcbiAgaW52b2NhdGlvbkNvdW50ZXI6IFJlZi5SZWY8bnVtYmVyPixcbiAgaW52b2NhdGlvbkNvbnRleHRzOiBNYXA8c3RyaW5nLCBJbnZvY2F0aW9uQ29udGV4dD4sXG4pOiBFZmZlY3QuRWZmZWN0PHZvaWQsIEVycm9yPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgLy8gR2V0IGVudiB2YXJzIGZyb20gaW52b2NhdGlvbiAoZm9yd2FyZGVkIGZyb20gYnJpZGdlIExhbWJkYSlcbiAgICBjb25zdCBpbnZvY2F0aW9uRW52ID0gc2FuaXRpemVJbnZvY2F0aW9uRW52KGludm9jYXRpb24uZW52ID8/IHt9KVxuXG4gICAgLy8gRW5zdXJlIHdvcmtlciBpcyBzdGFydGVkIChsYXp5IHN0YXJ0dXAgb24gZmlyc3QgaW52b2NhdGlvbilcbiAgICBjb25zdCB3b3JrZXIgPSB5aWVsZCogZW5zdXJlV29ya2VyU3RhcnRlZChcbiAgICAgIGZuLFxuICAgICAgaW52b2NhdGlvbkVudixcbiAgICAgIHdvcmtlcnNSZWYsXG4gICAgICBzZXJ2ZXJTY29wZSxcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgYXBwU3luY0NsaWVudCxcbiAgICAgIGludm9jYXRpb25Db250ZXh0cyxcbiAgICApXG5cbiAgICAvLyBBc3NpZ24gaW52b2NhdGlvbiBudW1iZXIgYW5kIHRyYWNrIGNvbnRleHQgZm9yIGxvZ2dpbmdcbiAgICBjb25zdCBpbnZvY2F0aW9uTnVtID0geWllbGQqIFJlZi51cGRhdGVBbmRHZXQoXG4gICAgICBpbnZvY2F0aW9uQ291bnRlcixcbiAgICAgIChuKSA9PiBuICsgMSxcbiAgICApXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGludm9jYXRpb25Db250ZXh0cy5zZXQoaW52b2NhdGlvbi5yZXF1ZXN0SWQsIHtcbiAgICAgIG51bTogaW52b2NhdGlvbk51bSxcbiAgICAgIHN0YXJ0OiBzdGFydFRpbWUsXG4gICAgICBmbjogZm4uZnVuY3Rpb25OYW1lLFxuICAgICAgaXNEb2NrZXI6IGZhbHNlLFxuICAgIH0pXG5cbiAgICAvLyBQcmludCBzdGFydCBtYXJrZXJcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBcXG5bJHtpbnZvY2F0aW9uTnVtfV0gXFx1MjUwY1xcdTI1MDBcXHUyNTAwICR7Zm4uZnVuY3Rpb25OYW1lfSBcXHUyNTAwXFx1MjUwMGAsXG4gICAgKVxuXG4gICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgIGBbTG9jYWxdIFF1ZXVlaW5nIGludm9jYXRpb24gJHtpbnZvY2F0aW9uLnJlcXVlc3RJZH0gZm9yICR7Zm4uZnVuY3Rpb25OYW1lfWAsXG4gICAgKVxuXG4gICAgY29uc3QgbGFtYmRhSW52b2NhdGlvbjogTGFtYmRhSW52b2NhdGlvbiA9IHtcbiAgICAgIHJlcXVlc3RJZDogaW52b2NhdGlvbi5yZXF1ZXN0SWQsXG4gICAgICBldmVudDogaW52b2NhdGlvbi5ldmVudCxcbiAgICAgIGludm9rZWRGdW5jdGlvbkFybjogaW52b2NhdGlvbi5jb250ZXh0Lmludm9rZWRGdW5jdGlvbkFybixcbiAgICAgIGRlYWRsaW5lTXM6IERhdGUubm93KCkgKyBpbnZvY2F0aW9uLmNvbnRleHQuZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzLFxuICAgICAgZnVuY3Rpb25OYW1lOiBmbi5mdW5jdGlvbk5hbWUsXG4gICAgICBmdW5jdGlvblZlcnNpb246IGludm9jYXRpb24uY29udGV4dC5mdW5jdGlvblZlcnNpb24sXG4gICAgICBtZW1vcnlMaW1pdE1COiBmbi5tZW1vcnlNQixcbiAgICAgIGxvZ0dyb3VwTmFtZTogaW52b2NhdGlvbi5jb250ZXh0LmxvZ0dyb3VwTmFtZSxcbiAgICAgIGxvZ1N0cmVhbU5hbWU6IGludm9jYXRpb24uY29udGV4dC5sb2dTdHJlYW1OYW1lLFxuICAgIH1cblxuICAgIC8vIFRyYWNrIGN1cnJlbnQgcmVxdWVzdCBJRCBmb3IgbG9nIHByZWZpeGluZ1xuICAgIHdvcmtlci5jdXJyZW50UmVxdWVzdElkID0gaW52b2NhdGlvbi5yZXF1ZXN0SWRcblxuICAgIHlpZWxkKiBxdWV1ZUludm9jYXRpb24od29ya2VyLnJ1bnRpbWVTdGF0ZSwgbGFtYmRhSW52b2NhdGlvbilcbiAgfSlcblxuLyoqXG4gKiBDREsgd2F0Y2ggZXZlbnQgdHlwZXMuXG4gKi9cbnR5cGUgQ2RrV2F0Y2hFdmVudCA9XG4gIHwgeyByZWFkb25seSBfdGFnOiBcIlN0YWNrRGlzY292ZXJlZFwiOyByZWFkb25seSBzdGFja05hbWU6IHN0cmluZyB9XG4gIHwgeyByZWFkb25seSBfdGFnOiBcIkRlcGxveUNvbXBsZXRlXCIgfVxuXG4vKipcbiAqIFN0YXJ0IENESyB3YXRjaCBwcm9jZXNzIHdpdGggQ0RLX0xJVkU9dHJ1ZSB1c2luZyBFZmZlY3QncyBDb21tYW5kLlxuICogUmV0dXJucyB0aGUgcHJvY2VzcyBhbmQgYSBxdWV1ZSBvZiBldmVudHMuXG4gKi9cbmNvbnN0IHN0YXJ0Q2RrV2F0Y2ggPSAoXG4gIG9wdGlvbnM6IHtcbiAgICBwcm9maWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgcmVnaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgc3RhY2tzPzogc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgICBhbGw/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIH0sXG4gIHNjb3BlOiBTY29wZS5TY29wZSxcbik6IEVmZmVjdC5FZmZlY3Q8XG4gIHsgcHJvY2VzczogRWZmZWN0UHJvY2VzczsgZXZlbnRzOiBRdWV1ZS5RdWV1ZTxDZGtXYXRjaEV2ZW50PiB9LFxuICBFcnJvcixcbiAgQ29tbWFuZEV4ZWN1dG9yLkNvbW1hbmRFeGVjdXRvclxuPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIFwiY2RrXCIsXG4gICAgICBcIndhdGNoXCIsXG4gICAgICBcIi0taG90c3dhcC1mYWxsYmFja1wiLFxuICAgICAgXCItLW5vLWxvZ3NcIixcbiAgICAgIFwiLS1tZXRob2Q9ZGlyZWN0XCIsXG4gICAgXVxuXG4gICAgaWYgKG9wdGlvbnMuc3RhY2tzICYmIG9wdGlvbnMuc3RhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFyZ3MucHVzaCguLi5vcHRpb25zLnN0YWNrcylcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYWxsKSB7XG4gICAgICBhcmdzLnB1c2goXCItLWFsbFwiKVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByb2ZpbGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tcHJvZmlsZVwiLCBvcHRpb25zLnByb2ZpbGUpXG4gICAgfVxuXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBDREtfTElWRTogXCJ0cnVlXCIsXG4gICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICBpZiAob3B0aW9ucy5yZWdpb24pIHtcbiAgICAgIGVudi5BV1NfUkVHSU9OID0gb3B0aW9ucy5yZWdpb25cbiAgICAgIGVudi5DREtfREVGQVVMVF9SRUdJT04gPSBvcHRpb25zLnJlZ2lvblxuICAgIH1cblxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFN0YXJ0aW5nOiBucHggJHthcmdzLmpvaW4oXCIgXCIpfWApXG5cbiAgICBjb25zdCBjb21tYW5kID0gUGxhdGZvcm1Db21tYW5kLm1ha2UoXCJucHhcIiwgLi4uYXJncykucGlwZShcbiAgICAgIFBsYXRmb3JtQ29tbWFuZC5lbnYoZW52KSxcbiAgICAgIFBsYXRmb3JtQ29tbWFuZC5ydW5JblNoZWxsKHRydWUpLFxuICAgICAgUGxhdGZvcm1Db21tYW5kLnN0ZGluKFwiaW5oZXJpdFwiKSxcbiAgICApXG5cbiAgICAvLyBFeHRlbmQgdGhlIHByb2Nlc3MgcmVzb3VyY2UgbGlmZXRpbWUgdG8gdGhlIHByb3ZpZGVkIHNjb3BlXG4gICAgY29uc3QgcHJvYyA9IHlpZWxkKiBQbGF0Zm9ybUNvbW1hbmQuc3RhcnQoY29tbWFuZCkucGlwZShTY29wZS5leHRlbmQoc2NvcGUpKVxuXG4gICAgLy8gRXZlbnQgcXVldWUgZm9yIGNhbGxlcnMgdG8gc3Vic2NyaWJlIHRvXG4gICAgY29uc3QgZXZlbnRzID0geWllbGQqIFF1ZXVlLnVuYm91bmRlZDxDZGtXYXRjaEV2ZW50PigpXG5cbiAgICAvLyBTdGF0ZSB0cmFja2luZyBmb3IgZGVwbG95IHN0YXR1cyBtZXNzYWdlc1xuICAgIGxldCBpc0RlcGxveWluZyA9IGZhbHNlXG4gICAgbGV0IGlzRmlyc3REZXBsb3kgPSB0cnVlXG4gICAgY29uc3QgZGlzY292ZXJlZFN0YWNrcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgICAvLyBQYXR0ZXJucyB0byBkZXRlY3QgQ0RLIHdhdGNoIGJlaGF2aW9yXG4gICAgY29uc3QgZGVwbG95Q29tcGxldGVQYXR0ZXJuID0gL+KchVxccytcXFMrfERlcGxveW1lbnQgdGltZTovXG4gICAgY29uc3QgZGVwbG95U3RhcnRQYXR0ZXJuID0gL0RlcGxveWluZ3xob3Rzd2FwfEhvdHN3YXBwaW5nfEJ1bmRsaW5nL2lcbiAgICBjb25zdCBub0NoYW5nZXNQYXR0ZXJuID0gL25vIGNoYW5nZXN8aWRlbnRpY2FsfHVwIHRvIGRhdGUvaVxuICAgIGNvbnN0IGVycm9yUGF0dGVybiA9IC9lcnJvcnxmYWlsZWR8RXJyb3J8RmFpbGVkfEVSUiEvaVxuICAgIGNvbnN0IHN0YWNrTmFtZVBhdHRlcm4gPSAvXihcXFMrKTpcXHMqZGVwbG95aW5nfOKchVxccysoXFxTKykvXG5cbiAgICAvLyBNZXJnZSBzdGRvdXQgYW5kIHN0ZGVyciwgZGVjb2RlIHRvIHRleHQsIHNwbGl0IGludG8gbGluZXNcbiAgICBjb25zdCBvdXRwdXRTdHJlYW0gPSBTdHJlYW0ubWVyZ2UocHJvYy5zdGRvdXQsIHByb2Muc3RkZXJyKS5waXBlKFxuICAgICAgU3RyZWFtLmRlY29kZVRleHQoKSxcbiAgICAgIFN0cmVhbS5zcGxpdExpbmVzLFxuICAgIClcblxuICAgIC8vIEZvcmsgc3RyZWFtIHByb2Nlc3NpbmcgaW4gYmFja2dyb3VuZFxuICAgIHlpZWxkKiBvdXRwdXRTdHJlYW0ucGlwZShcbiAgICAgIFN0cmVhbS5ydW5Gb3JFYWNoKChsaW5lKSA9PlxuICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgLy8gTG9nIGFsbCBvdXRwdXQgYXQgZGVidWcgbGV2ZWxcbiAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKGBbQ0RLXSAke2xpbmV9YClcblxuICAgICAgICAgIC8vIFRyeSB0byBleHRyYWN0IHN0YWNrIG5hbWVcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IHN0YWNrTmFtZVBhdHRlcm4uZXhlYyhsaW5lLnRyaW0oKSlcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrTmFtZSA9IG1hdGNoWzFdIHx8IG1hdGNoWzJdXG4gICAgICAgICAgICBpZiAoc3RhY2tOYW1lICYmICFkaXNjb3ZlcmVkU3RhY2tzLmhhcyhzdGFja05hbWUpKSB7XG4gICAgICAgICAgICAgIGRpc2NvdmVyZWRTdGFja3MuYWRkKHN0YWNrTmFtZSlcbiAgICAgICAgICAgICAgeWllbGQqIFF1ZXVlLm9mZmVyKGV2ZW50cywge1xuICAgICAgICAgICAgICAgIF90YWc6IFwiU3RhY2tEaXNjb3ZlcmVkXCIsXG4gICAgICAgICAgICAgICAgc3RhY2tOYW1lLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERldGVjdCBkZXBsb3kgc3RhcnRcbiAgICAgICAgICBpZiAoIWlzRGVwbG95aW5nICYmIGRlcGxveVN0YXJ0UGF0dGVybi50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICBpc0RlcGxveWluZyA9IHRydWVcbiAgICAgICAgICAgIGlmICghaXNGaXJzdERlcGxveSkge1xuICAgICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJbQ0RLXSBEZXBsb3lpbmcuLi5cIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZXRlY3QgZXJyb3JzIC0gb3V0cHV0IGltbWVkaWF0ZWx5XG4gICAgICAgICAgaWYgKGVycm9yUGF0dGVybi50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICB5aWVsZCogRWZmZWN0LnN5bmMoKCkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUoYCR7bGluZX1cXG5gKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBmb3IgZGVwbG95IGNvbXBsZXRpb24gKG9ubHkgdHJpZ2dlciBvbmNlIHBlciBkZXBsb3kgY3ljbGUpXG4gICAgICAgICAgaWYgKGlzRGVwbG95aW5nICYmIGRlcGxveUNvbXBsZXRlUGF0dGVybi50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICBpc0RlcGxveWluZyA9IGZhbHNlXG4gICAgICAgICAgICBpc0ZpcnN0RGVwbG95ID0gZmFsc2VcbiAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIltDREtdIERlcGxveSBjb21wbGV0ZVwiKVxuICAgICAgICAgICAgLy8gU21hbGwgZGVsYXkgdG8gZW5zdXJlIEFXUyBoYXMgcHJvcGFnYXRlZCB0aGUgY2hhbmdlc1xuICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5zbGVlcChcIjEgc2Vjb25kXCIpXG4gICAgICAgICAgICB5aWVsZCogUXVldWUub2ZmZXIoZXZlbnRzLCB7IF90YWc6IFwiRGVwbG95Q29tcGxldGVcIiB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGZvciBubyBjaGFuZ2VzXG4gICAgICAgICAgaWYgKG5vQ2hhbmdlc1BhdHRlcm4udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgaXNEZXBsb3lpbmcgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgLy8gTG9nIGVycm9ycyBhbmQgZXhpdCBjb2RlIHdoZW4gc3RyZWFtIGVuZHNcbiAgICAgIEVmZmVjdC50YXBFcnJvcigoZXJyb3IpID0+XG4gICAgICAgIEVmZmVjdC5sb2dFcnJvcihgW0NES10gQ0RLIHdhdGNoIGVycm9yOiAke2Vycm9yfWApLFxuICAgICAgKSxcbiAgICAgIEVmZmVjdC5lbnN1cmluZyhcbiAgICAgICAgcHJvYy5leGl0Q29kZS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5mbGF0TWFwKChjb2RlKSA9PlxuICAgICAgICAgICAgY29kZSAhPT0gMFxuICAgICAgICAgICAgICA/IEVmZmVjdC5sb2dFcnJvcihgW0NES10gQ0RLIHdhdGNoIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gICAgICAgICAgICAgIDogRWZmZWN0LmxvZ0RlYnVnKGBbQ0RLXSBDREsgd2F0Y2ggZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIEVmZmVjdC5mb3JrLFxuICAgIClcblxuICAgIHJldHVybiB7IHByb2Nlc3M6IHByb2MsIGV2ZW50cyB9XG4gIH0pXG5cbi8qKlxuICogQ29tbW9uIENMSSBvcHRpb25zLlxuICovXG5jb25zdCBwcm9maWxlT3B0aW9uID0gT3B0aW9ucy50ZXh0KFwicHJvZmlsZVwiKS5waXBlKFxuICBPcHRpb25zLm9wdGlvbmFsLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIkFXUyBwcm9maWxlIHRvIHVzZVwiKSxcbilcblxuY29uc3QgcmVnaW9uT3B0aW9uID0gT3B0aW9ucy50ZXh0KFwicmVnaW9uXCIpLnBpcGUoXG4gIE9wdGlvbnMub3B0aW9uYWwsXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiQVdTIHJlZ2lvblwiKSxcbilcblxuY29uc3QgcXVhbGlmaWVyT3B0aW9uID0gT3B0aW9ucy50ZXh0KFwicXVhbGlmaWVyXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoXCJobmI2NTlmZHNcIiksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiQ0RLIGJvb3RzdHJhcCBxdWFsaWZpZXJcIiksXG4pXG5cbmNvbnN0IHN0YWNrc09wdGlvbiA9IE9wdGlvbnMudGV4dChcInN0YWNrc1wiKS5waXBlKFxuICBPcHRpb25zLm9wdGlvbmFsLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcbiAgICBcIlN0YWNrIG5hbWVzIHRvIGRlcGxveSAoY29tbWEtc2VwYXJhdGVkLCBkZWZhdWx0OiBhbGwpXCIsXG4gICksXG4pXG5cbmNvbnN0IGFsbFN0YWNrc09wdGlvbiA9IE9wdGlvbnMuYm9vbGVhbihcImFsbFwiKS5waXBlKFxuICBPcHRpb25zLndpdGhEZWZhdWx0KGZhbHNlKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJEZXBsb3kgYWxsIHN0YWNrcyAobGlrZSBjZGsgZGVwbG95IC0tYWxsKVwiKSxcbilcblxuY29uc3QgZGVidWdPcHRpb24gPSBPcHRpb25zLmJvb2xlYW4oXCJkZWJ1Z1wiKS5waXBlKFxuICBPcHRpb25zLndpdGhEZWZhdWx0KGZhbHNlKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJFbmFibGUgZGVidWcgbG9nZ2luZ1wiKSxcbilcblxuY29uc3QgaWRsZVRpbWVvdXRPcHRpb24gPSBPcHRpb25zLmludGVnZXIoXCJpZGxlLXRpbWVvdXRcIikucGlwZShcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX0lETEVfVElNRU9VVF9NUyksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFxuICAgIFwiSWRsZSB0aW1lb3V0IGluIG1zIGJlZm9yZSBzdG9wcGluZyBjb250YWluZXJzIChkZWZhdWx0OiAyMzAwMDApXCIsXG4gICksXG4pXG5cbmNvbnN0IHBvbGxUaW1lb3V0T3B0aW9uID0gT3B0aW9ucy5pbnRlZ2VyKFwicG9sbC10aW1lb3V0XCIpLnBpcGUoXG4gIE9wdGlvbnMub3B0aW9uYWwsXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFxuICAgIFwiUG9sbCB0aW1lb3V0IGluIG1zIGZvciBSdW50aW1lIEFQSSAoZGVmYXVsdDogaWRsZS10aW1lb3V0IC0gMTBzKS4gTXVzdCBiZSBzaG9ydGVyIHRoYW4gaWRsZS10aW1lb3V0LlwiLFxuICApLFxuKVxuXG4vKipcbiAqIExvY2FsIGNvbW1hbmQgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGxvY2FsQ29tbWFuZCA9IENvbW1hbmQubWFrZShcbiAgXCJsb2NhbFwiLFxuICB7XG4gICAgcHJvZmlsZTogcHJvZmlsZU9wdGlvbixcbiAgICByZWdpb246IHJlZ2lvbk9wdGlvbixcbiAgICBxdWFsaWZpZXI6IHF1YWxpZmllck9wdGlvbixcbiAgICBzdGFja3M6IHN0YWNrc09wdGlvbixcbiAgICBhbGw6IGFsbFN0YWNrc09wdGlvbixcbiAgICBkZWJ1ZzogZGVidWdPcHRpb24sXG4gICAgaWRsZVRpbWVvdXQ6IGlkbGVUaW1lb3V0T3B0aW9uLFxuICAgIHBvbGxUaW1lb3V0OiBwb2xsVGltZW91dE9wdGlvbixcbiAgfSxcbiAgKHtcbiAgICBwcm9maWxlLFxuICAgIHJlZ2lvbixcbiAgICBxdWFsaWZpZXIsXG4gICAgc3RhY2tzLFxuICAgIGFsbCxcbiAgICBkZWJ1ZyxcbiAgICBpZGxlVGltZW91dCxcbiAgICBwb2xsVGltZW91dCxcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGxvZ0xldmVsID0gZGVidWcgPyBMb2dMZXZlbC5EZWJ1ZyA6IExvZ0xldmVsLkluZm9cbiAgICByZXR1cm4gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFwiW0xvY2FsXSBTdGFydGluZyBsb2NhbCBMYW1iZGEgZGV2ZWxvcG1lbnQuLi5cIilcblxuICAgICAgY29uc3QgcHJvZmlsZVZhbHVlID0gcHJvZmlsZS5fdGFnID09PSBcIlNvbWVcIiA/IHByb2ZpbGUudmFsdWUgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlZ2lvblZhbHVlID0gcmVnaW9uLl90YWcgPT09IFwiU29tZVwiID8gcmVnaW9uLnZhbHVlIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCBzdGFja3NGcm9tT3B0aW9uID1cbiAgICAgICAgc3RhY2tzLl90YWcgPT09IFwiU29tZVwiXG4gICAgICAgICAgPyBzdGFja3MudmFsdWUuc3BsaXQoXCIsXCIpLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgLy8gUG9sbCB0aW1lb3V0IHNob3VsZCBiZSBzaG9ydGVyIHRoYW4gaWRsZSB0aW1lb3V0IHNvIGNvbnRhaW5lcnMgZXhpdCBuYXR1cmFsbHlcbiAgICAgIC8vIGJlZm9yZSB3ZSB0cnkgdG8gc3RvcCB0aGVtLiBEZWZhdWx0OiBpZGxlIHRpbWVvdXQgLSAxMCBzZWNvbmRzLlxuICAgICAgY29uc3QgZWZmZWN0aXZlUG9sbFRpbWVvdXQgPVxuICAgICAgICBwb2xsVGltZW91dC5fdGFnID09PSBcIlNvbWVcIlxuICAgICAgICAgID8gcG9sbFRpbWVvdXQudmFsdWVcbiAgICAgICAgICA6IE1hdGgubWF4KGlkbGVUaW1lb3V0IC0gMTBfMDAwLCA1XzAwMCkgLy8gQXQgbGVhc3QgNSBzZWNvbmRzXG5cbiAgICAgIGlmIChwcm9maWxlVmFsdWUpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgPSBwcm9maWxlVmFsdWVcbiAgICAgIH1cbiAgICAgIGlmIChyZWdpb25WYWx1ZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID0gcmVnaW9uVmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gQm9vdHN0cmFwIGNoZWNrIG11c3QgY29tcGxldGUgZmlyc3RcbiAgICAgIHlpZWxkKiBlbnN1cmVCb290c3RyYXAoe1xuICAgICAgICBxdWFsaWZpZXIsXG4gICAgICAgIC4uLihwcm9maWxlVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB7IHByb2ZpbGU6IHByb2ZpbGVWYWx1ZSB9KSxcbiAgICAgICAgLi4uKHJlZ2lvblZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyByZWdpb246IHJlZ2lvblZhbHVlIH0pLFxuICAgICAgfSlcblxuICAgICAgLy8gU3RhY2sgZmlsdGVyIC0gcG9wdWxhdGVkIGZyb20gQ0RLIHdhdGNoIG91dHB1dCwgdXNlZCB0byBmaWx0ZXIgTGFtYmRhIGRpc2NvdmVyeVxuICAgICAgLy8gVXNpbmcgb2JqZWN0IHNvIGNsb3N1cmUgaW4gc3RhcnRPclVwZGF0ZURhZW1vbiBzZWVzIHVwZGF0ZXNcbiAgICAgIGNvbnN0IGZpbHRlclN0YXRlID0geyBzdGFja3M6IHN0YWNrc0Zyb21PcHRpb24gPz8gKFtdIGFzIHN0cmluZ1tdKSB9XG5cbiAgICAgIC8vIENyZWF0ZSBhIGxvbmctbGl2ZWQgc2NvcGUgZm9yIGFsbCBSdW50aW1lIEFQSSBzZXJ2ZXJzIGFuZCBDREsgd2F0Y2ggcHJvY2Vzc1xuICAgICAgLy8gUmVzb3VyY2VzIHdpbGwgcnVuIHVudGlsIHRoaXMgc2NvcGUgaXMgY2xvc2VkICh3aGVuIHRoZSBwcm9ncmFtIGVuZHMpXG4gICAgICBjb25zdCBzZXJ2ZXJTY29wZSA9IHlpZWxkKiBTY29wZS5tYWtlKClcblxuICAgICAgLy8gU3RhcnQgQ0RLIHdhdGNoIGltbWVkaWF0ZWx5IGFmdGVyIGJvb3RzdHJhcFxuICAgICAgLy8gU3RhY2sgbmFtZXMgYXJlIGRpc2NvdmVyZWQgZnJvbSBDREsgd2F0Y2ggb3V0cHV0IChubyBuZWVkIGZvciBzZXBhcmF0ZSBjZGsgbHMpXG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJbQ0RLXSBEZXBsb3lpbmcuLi5cIilcblxuICAgICAgY29uc3QgeyBwcm9jZXNzOiBjZGtXYXRjaFByb2Nlc3MsIGV2ZW50czogY2RrRXZlbnRzIH0gPVxuICAgICAgICB5aWVsZCogc3RhcnRDZGtXYXRjaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9maWxlOiBwcm9maWxlVmFsdWUsXG4gICAgICAgICAgICByZWdpb246IHJlZ2lvblZhbHVlLFxuICAgICAgICAgICAgc3RhY2tzOiBzdGFja3NGcm9tT3B0aW9uLFxuICAgICAgICAgICAgYWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VydmVyU2NvcGUsXG4gICAgICAgIClcblxuICAgICAgLy8gVHJhY2sgcnVubmluZyBEb2NrZXIgY29udGFpbmVycyBieSBmdW5jdGlvbiBuYW1lXG4gICAgICBjb25zdCBjb250YWluZXJzID0geWllbGQqIFJlZi5tYWtlPE1hcDxzdHJpbmcsIEZ1bmN0aW9uQ29udGFpbmVyPj4oXG4gICAgICAgIG5ldyBNYXAoKSxcbiAgICAgIClcblxuICAgICAgLy8gVHJhY2sgcnVubmluZyBOb2RlLmpzIHdvcmtlcnMgYnkgZnVuY3Rpb24gbmFtZVxuICAgICAgY29uc3Qgd29ya2VycyA9IHlpZWxkKiBSZWYubWFrZTxNYXA8c3RyaW5nLCBOb2RlanNXb3JrZXI+PihuZXcgTWFwKCkpXG5cbiAgICAgIC8vIFRyYWNrIHJlZ2lzdGVyZWQgZnVuY3Rpb25zIChmb3IgbGF6eSBjb250YWluZXIvd29ya2VyIHN0YXJ0dXApXG4gICAgICBjb25zdCByZWdpc3RlcmVkRnVuY3Rpb25zID0geWllbGQqIFJlZi5tYWtlPFxuICAgICAgICBNYXA8c3RyaW5nLCBEaXNjb3ZlcmVkRnVuY3Rpb24+XG4gICAgICA+KG5ldyBNYXAoKSlcblxuICAgICAgLy8gVHJhY2sgRG9ja2VyIGZ1bmN0aW9ucyB3aXRoIGFjdGl2ZSBmaWxlIHdhdGNoZXJzXG4gICAgICBjb25zdCB3YXRjaGVkRG9ja2VyRnVuY3Rpb25zID0gbmV3IFNldDxzdHJpbmc+KClcblxuICAgICAgLy8gSW52b2NhdGlvbiB0cmFja2luZyBmb3IgaW1wcm92ZWQgbG9nZ2luZyBvdXRwdXRcbiAgICAgIGNvbnN0IGludm9jYXRpb25Db3VudGVyID0geWllbGQqIFJlZi5tYWtlPG51bWJlcj4oMClcbiAgICAgIC8vIFVzZSBhIHBsYWluIE1hcCBmb3IgaW52b2NhdGlvbiBjb250ZXh0cyBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSBzdHJlYW0gY2FsbGJhY2tzXG4gICAgICBjb25zdCBpbnZvY2F0aW9uQ29udGV4dHMgPSBuZXcgTWFwPHN0cmluZywgSW52b2NhdGlvbkNvbnRleHQ+KClcblxuICAgICAgLy8gUHJvamVjdCByb290IGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICh3aGVyZSBDREsgYXBwIGxpdmVzKVxuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBwcm9jZXNzLmN3ZCgpXG5cbiAgICAgIGxldCBhcHBTeW5jQ2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBtYWtlQXBwU3luY0NsaWVudD4gfCBudWxsID0gbnVsbFxuXG4gICAgICAvLyBUcmFjayBpZiB3ZSd2ZSBsb2dnZWQgdGhlIFwiV2F0Y2hpbmdcIiBtZXNzYWdlIChvbmx5IGxvZyBvbmNlKVxuICAgICAgY29uc3QgbG9nU3RhdGUgPSB7IGhhc0xvZ2dlZFdhdGNoaW5nOiBmYWxzZSwgaGFzRGlzY292ZXJlZE9uY2U6IGZhbHNlIH1cblxuICAgICAgLy8gRnVuY3Rpb24gdG8gc3RhcnQvdXBkYXRlIHRoZSBkYWVtb24gd2l0aCBkaXNjb3ZlcmVkIGZ1bmN0aW9uc1xuICAgICAgY29uc3Qgc3RhcnRPclVwZGF0ZURhZW1vbiA9IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gT25seSBzaG93IFwiRGlzY292ZXJpbmcgZnVuY3Rpb25zLi4uXCIgb24gZmlyc3QgcnVuXG4gICAgICAgIGlmICghbG9nU3RhdGUuaGFzRGlzY292ZXJlZE9uY2UpIHtcbiAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJbTG9jYWxdIERpc2NvdmVyaW5nIGZ1bmN0aW9ucy4uLlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IEFwcFN5bmMgZW5kcG9pbnRzIChtYXkgbmVlZCB0byB3YWl0IGZvciBmaXJzdCBkZXBsb3kpXG4gICAgICAgIGlmICghYXBwU3luY0NsaWVudCkge1xuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICBcIltMb2NhbF0gUmVhZGluZyBBcHBTeW5jIGVuZHBvaW50cyBmcm9tIFNTTS4uLlwiLFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBlbmRwb2ludHMgPSB5aWVsZCogZ2V0QXBwU3luY0VuZHBvaW50cyhxdWFsaWZpZXIpLnBpcGUoXG4gICAgICAgICAgICBFZmZlY3QucmV0cnkoeyB0aW1lczogMTAsIHNjaGVkdWxlOiBTY2hlZHVsZS5zcGFjZWQoXCIzIHNlY29uZHNcIikgfSksXG4gICAgICAgICAgKVxuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICBgW0xvY2FsXSBIVFRQIGVuZHBvaW50OiAke2VuZHBvaW50cy5odHRwRW5kcG9pbnR9YCxcbiAgICAgICAgICApXG4gICAgICAgICAgYXBwU3luY0NsaWVudCA9IG1ha2VBcHBTeW5jQ2xpZW50KGVuZHBvaW50cylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERpc2NvdmVyIGZ1bmN0aW9ucyAoZmlsdGVyZWQgdG8gc3RhY2tzIGluIHRoaXMgQ0RLIHByb2plY3QpXG4gICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXCJbTG9jYWxdIERpc2NvdmVyaW5nIExhbWJkYSBmdW5jdGlvbnMuLi5cIilcbiAgICAgICAgY29uc3QgZnVuY3Rpb25zID0geWllbGQqIGRpc2NvdmVyRnVuY3Rpb25zKGZpbHRlclN0YXRlLnN0YWNrcylcblxuICAgICAgICBpZiAoZnVuY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcbiAgICAgICAgICAgIFwiW0xvY2FsXSBObyBmdW5jdGlvbnMgZm91bmQgd2l0aCBsaXZlLWxhbWJkYSB0YWdzIHlldC4gSGF2ZSB5b3UgcGF0Y2hlZCB5b3VyIENESyBwcm9qZWN0IChib290c3RyYXApIGFuZCBhZGRlZCB0aGUgTGl2ZUxhbWJkYUFzcGVjdD9cIixcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50UmVnaXN0ZXJlZCA9IHlpZWxkKiBSZWYuZ2V0KHJlZ2lzdGVyZWRGdW5jdGlvbnMpXG5cbiAgICAgICAgLy8gQ29sbGVjdCBuZXcgZnVuY3Rpb25zIHRvIHJlZ2lzdGVyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmN0aW9uczogQXJyYXk8e1xuICAgICAgICAgIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb25cbiAgICAgICAgICBpc0RvY2tlcjogYm9vbGVhblxuICAgICAgICB9PiA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBpc0RvY2tlciA9IEJvb2xlYW4oZm4uZG9ja2VyQ29udGV4dFBhdGgpXG4gICAgICAgICAgY29uc3QgaXNOb2RlanMgPSAhaXNEb2NrZXIgJiYgQm9vbGVhbihmbi5sb2NhbEhhbmRsZXIpXG5cbiAgICAgICAgICBpZiAoIWlzRG9ja2VyICYmICFpc05vZGVqcykge1xuICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgICAgYFtMb2NhbF0gU2tpcHBpbmcgJHtmbi5mdW5jdGlvbk5hbWV9IC0gbm8gRG9ja2VyIGNvbnRleHQgb3IgbG9jYWwgaGFuZGxlcmAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyZW50UmVnaXN0ZXJlZC5oYXMoZm4uZnVuY3Rpb25OYW1lKSkge1xuICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgICAgYFtMb2NhbF0gQWxyZWFkeSB3YXRjaGluZyAke2ZuLmZ1bmN0aW9uTmFtZX1gLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdGdW5jdGlvbnMucHVzaCh7IGZuLCBpc0RvY2tlciB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbnQgc3VtbWFyeSBvZiBkaXNjb3ZlcmVkIGZ1bmN0aW9uc1xuICAgICAgICBpZiAobmV3RnVuY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdW1tYXJ5ID0gbmV3RnVuY3Rpb25zXG4gICAgICAgICAgICAubWFwKCh7IGZuLCBpc0RvY2tlciB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1vZGUgPSBpc0RvY2tlciA/IFwiZG9ja2VyXCIgOiBcIm5vZGVcIlxuICAgICAgICAgICAgICBjb25zdCBzaG9ydE5hbWUgPSBmbi5mdW5jdGlvbk5hbWUuaW5jbHVkZXMoXCItXCIpXG4gICAgICAgICAgICAgICAgPyBmbi5mdW5jdGlvbk5hbWUuc3BsaXQoXCItXCIpLnNsaWNlKC0yLCAtMSlbMF0gfHwgZm4uZnVuY3Rpb25OYW1lXG4gICAgICAgICAgICAgICAgOiBmbi5mdW5jdGlvbk5hbWVcbiAgICAgICAgICAgICAgcmV0dXJuIGAke3Nob3J0TmFtZX0gKCR7bW9kZX0pYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgICAvLyBVc2UgZGlmZmVyZW50IG1lc3NhZ2UgZm9yIGZpcnN0IGRpc2NvdmVyeSB2cyBzdWJzZXF1ZW50XG4gICAgICAgICAgY29uc3QgcHJlZml4ID0gbG9nU3RhdGUuaGFzRGlzY292ZXJlZE9uY2VcbiAgICAgICAgICAgID8gXCJbTG9jYWxdIEZ1bmN0aW9ucyBhZGRlZDpcIlxuICAgICAgICAgICAgOiBcIltMb2NhbF0gRnVuY3Rpb25zOlwiXG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKGAke3ByZWZpeH0gJHtzdW1tYXJ5fWApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWdpc3RlciBmdW5jdGlvbnMgYW5kIHNldCB1cCBzdWJzY3JpcHRpb25zXG4gICAgICAgIGZvciAoY29uc3QgeyBmbiwgaXNEb2NrZXIgfSBvZiBuZXdGdW5jdGlvbnMpIHtcbiAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgICAgICAgYFtMb2NhbF0gUmVnaXN0ZXJpbmcgJHtmbi5mdW5jdGlvbk5hbWV9ICgke2lzRG9ja2VyID8gXCJEb2NrZXJcIiA6IFwiTm9kZS5qc1wifSlgLFxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmdW5jdGlvblxuICAgICAgICAgIGN1cnJlbnRSZWdpc3RlcmVkLnNldChmbi5mdW5jdGlvbk5hbWUsIGZuKVxuXG4gICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGludm9jYXRpb25zIGZvciB0aGlzIGZ1bmN0aW9uXG4gICAgICAgICAgY29uc3QgaW52b2NhdGlvbkNoYW5uZWwgPSBidWlsZENoYW5uZWxOYW1lLmludm9jYXRpb24oZm4uZnVuY3Rpb25OYW1lKVxuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICBgW0xvY2FsXSBTdWJzY3JpYmluZyB0byBpbnZvY2F0aW9ucyBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9YCxcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBTdWJzY3JpYmUgdXNpbmcgZm9ya0RhZW1vbiB0byBydW4gaW5kZXBlbmRlbnRseSB3aXRoIGNvbnRleHQgcHJlc2VydmVkXG4gICAgICAgICAgLy8gUm91dGUgdG8gRG9ja2VyIG9yIE5vZGUuanMgaGFuZGxlciBiYXNlZCBvbiBmdW5jdGlvbiB0eXBlXG4gICAgICAgICAgaWYgKGlzRG9ja2VyKSB7XG4gICAgICAgICAgICB5aWVsZCogYXBwU3luY0NsaWVudCFcbiAgICAgICAgICAgICAgLnN1YnNjcmliZVRvSW52b2NhdGlvbnMoaW52b2NhdGlvbkNoYW5uZWwpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIFN0cmVhbS5ydW5Gb3JFYWNoKChpbnZvY2F0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgaGFuZGxlRG9ja2VySW52b2NhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZm4sXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclNjb3BlLFxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0Um9vdCxcbiAgICAgICAgICAgICAgICAgICAgaWRsZVRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBvbGxUaW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICBhcHBTeW5jQ2xpZW50ISxcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbkNvdW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25Db250ZXh0cyxcbiAgICAgICAgICAgICAgICAgICkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICBFZmZlY3QubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgW0xvY2FsXSBEb2NrZXIgaW52b2NhdGlvbiBlcnJvcjogJHtlcnJvcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRWZmZWN0LmZvcmtEYWVtb24sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeWllbGQqIGFwcFN5bmNDbGllbnQhXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmVUb0ludm9jYXRpb25zKGludm9jYXRpb25DaGFubmVsKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBTdHJlYW0ucnVuRm9yRWFjaCgoaW52b2NhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGVqc0ludm9jYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIGZuLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICB3b3JrZXJzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJTY29wZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgICAgICAgIGFwcFN5bmNDbGllbnQhLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uQ291bnRlcixcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbkNvbnRleHRzLFxuICAgICAgICAgICAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBbTG9jYWxdIE5vZGUuanMgaW52b2NhdGlvbiBlcnJvcjogJHtlcnJvcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgRWZmZWN0LmZvcmtEYWVtb24sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB5aWVsZCogUmVmLnNldChyZWdpc3RlcmVkRnVuY3Rpb25zLCBjdXJyZW50UmVnaXN0ZXJlZClcblxuICAgICAgICAvLyBTdGFydCBmaWxlIHdhdGNoZXJzIGZvciBuZXcgRG9ja2VyIGZ1bmN0aW9uc1xuICAgICAgICBjb25zdCBuZXdEb2NrZXJGdW5jdGlvbnM6IFdhdGNoZWREb2NrZXJGdW5jdGlvbltdID0gW11cbiAgICAgICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmbi5kb2NrZXJDb250ZXh0UGF0aCAmJlxuICAgICAgICAgICAgIXdhdGNoZWREb2NrZXJGdW5jdGlvbnMuaGFzKGZuLmZ1bmN0aW9uTmFtZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIGNvbnRleHQgcGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dFBhdGggPSBmbi5kb2NrZXJDb250ZXh0UGF0aC5zdGFydHNXaXRoKFwiL1wiKVxuICAgICAgICAgICAgICA/IGZuLmRvY2tlckNvbnRleHRQYXRoXG4gICAgICAgICAgICAgIDogYCR7cHJvamVjdFJvb3R9LyR7Zm4uZG9ja2VyQ29udGV4dFBhdGh9YFxuXG4gICAgICAgICAgICBuZXdEb2NrZXJGdW5jdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uSWQ6IGZuLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgZG9ja2VyQ29udGV4dFBhdGg6IGNvbnRleHRQYXRoLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHdhdGNoZWREb2NrZXJGdW5jdGlvbnMuYWRkKGZuLmZ1bmN0aW9uTmFtZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3YXRjaGluZyBuZXcgRG9ja2VyIGNvbnRleHRzXG4gICAgICAgIGlmIChuZXdEb2NrZXJGdW5jdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICBgW0xvY2FsXSBTdGFydGluZyBmaWxlIHdhdGNoZXJzIGZvciAke25ld0RvY2tlckZ1bmN0aW9ucy5sZW5ndGh9IERvY2tlciBmdW5jdGlvbihzKS4uLmAsXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gRm9yayBhIGRhZW1vbiBmaWJlciB0byBoYW5kbGUgZmlsZSBjaGFuZ2UgZXZlbnRzIHdpdGggY29udGV4dCBwcmVzZXJ2ZWRcbiAgICAgICAgICB5aWVsZCogd2F0Y2hEb2NrZXJDb250ZXh0cyhuZXdEb2NrZXJGdW5jdGlvbnMsIDUwMCkucGlwZShcbiAgICAgICAgICAgIFN0cmVhbS5ydW5Gb3JFYWNoKChldmVudCkgPT5cbiAgICAgICAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICAgICAgICBgW0xvY2FsXSBGaWxlIGNoYW5nZWQgaW4gJHtldmVudC5mdW5jdGlvbklkfTogJHtldmVudC5maWxlUGF0aH1gLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB5aWVsZCogcmVidWlsZERvY2tlckNvbnRhaW5lcihcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmZ1bmN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICBjb250YWluZXJzLFxuICAgICAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcikgPT5cbiAgICAgICAgICAgICAgICAgICAgRWZmZWN0LmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIGBbTG9jYWxdIFJlYnVpbGQgZmFpbGVkIGZvciAke2V2ZW50LmZ1bmN0aW9uSWR9OiAke2Vycm9yfWAsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgRWZmZWN0LmZvcmtEYWVtb24sXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFsb2dTdGF0ZS5oYXNMb2dnZWRXYXRjaGluZykge1xuICAgICAgICAgIGxvZ1N0YXRlLmhhc0xvZ2dlZFdhdGNoaW5nID0gdHJ1ZVxuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIltMb2NhbF0gUmVhZHkgZm9yIGludm9jYXRpb25zXCIpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYXJrIHRoYXQgd2UndmUgY29tcGxldGVkIGZpcnN0IGRpc2NvdmVyeVxuICAgICAgICBsb2dTdGF0ZS5oYXNEaXNjb3ZlcmVkT25jZSA9IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIC8vIEhhbmRsZSBDREsgd2F0Y2ggZXZlbnRzIChzdGFjayBkaXNjb3ZlcnkgYW5kIGRlcGxveSBjb21wbGV0aW9uKVxuICAgICAgeWllbGQqIFF1ZXVlLnRha2UoY2RrRXZlbnRzKS5waXBlKFxuICAgICAgICBFZmZlY3QuZmxhdE1hcCgoZXZlbnQpID0+XG4gICAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgc3dpdGNoIChldmVudC5fdGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJTdGFja0Rpc2NvdmVyZWRcIjpcbiAgICAgICAgICAgICAgICAvLyBBZGQgZGlzY292ZXJlZCBzdGFjayB0byBmaWx0ZXIgKGlmIG5vdCB1c2luZyAtLXN0YWNrcylcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhc3RhY2tzRnJvbU9wdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgIWZpbHRlclN0YXRlLnN0YWNrcy5pbmNsdWRlcyhldmVudC5zdGFja05hbWUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJTdGF0ZS5zdGFja3MucHVzaChldmVudC5zdGFja05hbWUpXG4gICAgICAgICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgICAgICAgICAgICAgICBgW0xvY2FsXSBEaXNjb3ZlcmVkIHN0YWNrOiAke2V2ZW50LnN0YWNrTmFtZX1gLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIFwiRGVwbG95Q29tcGxldGVcIjpcbiAgICAgICAgICAgICAgICAvLyBSdW4gZGFlbW9uIHVwZGF0ZSBvbiBkZXBsb3kgY29tcGxldGlvblxuICAgICAgICAgICAgICAgIHlpZWxkKiBzdGFydE9yVXBkYXRlRGFlbW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICAgICAgICAgICAgICBFZmZlY3QubG9nRXJyb3IoYEZhaWxlZCB0byB1cGRhdGUgZGFlbW9uOiAke2Vycm9yfWApLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICAgRWZmZWN0LmZvcmV2ZXIsXG4gICAgICAgIEVmZmVjdC5mb3JrLFxuICAgICAgKVxuXG4gICAgICAvLyBIYW5kbGUgY2xlYW51cCBvbiBleGl0XG4gICAgICBjb25zdCBjbGVhbnVwID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShcbiAgICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJcXG5TaHV0dGluZyBkb3duLi4uXCIpXG5cbiAgICAgICAgICAgIC8vIFN0b3AgQ0RLIHdhdGNoXG4gICAgICAgICAgICB5aWVsZCogY2RrV2F0Y2hQcm9jZXNzXG4gICAgICAgICAgICAgIC5raWxsKFwiU0lHVEVSTVwiKVxuICAgICAgICAgICAgICAucGlwZShFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpKVxuXG4gICAgICAgICAgICAvLyBTdG9wIGFsbCBEb2NrZXIgY29udGFpbmVycyB1c2luZyB0aGUgRG9ja2VyIHNlcnZpY2VcbiAgICAgICAgICAgIGNvbnN0IGRvY2tlciA9IHlpZWxkKiBEb2NrZXJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb250YWluZXJzID0geWllbGQqIFJlZi5nZXQoY29udGFpbmVycylcbiAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbnRhaW5lcl0gb2YgY3VycmVudENvbnRhaW5lcnMpIHtcbiAgICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKGBTdG9wcGluZyBjb250YWluZXI6ICR7bmFtZX1gKVxuICAgICAgICAgICAgICB5aWVsZCogZG9ja2VyLnN0b3AoY29udGFpbmVyLmNvbnRhaW5lck5hbWUpLnBpcGUoXG4gICAgICAgICAgICAgICAgRWZmZWN0LnNjb3BlZCxcbiAgICAgICAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN0b3AgYWxsIE5vZGUuanMgd29ya2Vyc1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFdvcmtlcnMgPSB5aWVsZCogUmVmLmdldCh3b3JrZXJzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgd29ya2VyXSBvZiBjdXJyZW50V29ya2Vycykge1xuICAgICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oYFN0b3BwaW5nIHdvcmtlcjogJHtuYW1lfWApXG4gICAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QudHJ5KCgpID0+XG4gICAgICAgICAgICAgICAgd29ya2VyLndvcmtlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIiksXG4gICAgICAgICAgICAgICkucGlwZShFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDbG9zZSB0aGUgc2VydmVyIHNjb3BlIHRvIGNsZWFuIHVwIFJ1bnRpbWUgQVBJIHNlcnZlcnNcbiAgICAgICAgICAgIHlpZWxkKiBTY29wZS5jbG9zZShzZXJ2ZXJTY29wZSwgRXhpdC52b2lkKVxuICAgICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICBFZmZlY3QucHJvdmlkZShEb2NrZXJMaXZlKSxcbiAgICAgICAgICAgIEVmZmVjdC5wcm92aWRlKEJ1bkNvbnRleHQubGF5ZXIpLFxuICAgICAgICAgICAgRWZmZWN0LnByb3ZpZGUoTG9nZ2VyLnByZXR0eSksXG4gICAgICAgICAgICBFZmZlY3QucHJvdmlkZShMb2dnZXIubWluaW11bUxvZ0xldmVsKGxvZ0xldmVsKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuXG4gICAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApXG4gICAgICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKVxuXG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJbTG9jYWxdIFByZXNzIEN0cmwrQyB0byBzdG9wXCIpXG5cbiAgICAgIC8vIEtlZXAgdGhlIHByb2Nlc3MgcnVubmluZ1xuICAgICAgeWllbGQqIEVmZmVjdC5uZXZlclxuICAgIH0pLnBpcGUoXG4gICAgICBFZmZlY3QucHJvdmlkZShMb2dnZXIucHJldHR5KSxcbiAgICAgIEVmZmVjdC5wcm92aWRlKExvZ2dlci5taW5pbXVtTG9nTGV2ZWwobG9nTGV2ZWwpKSxcbiAgICApXG4gIH0sXG4pLnBpcGUoXG4gIENvbW1hbmQud2l0aERlc2NyaXB0aW9uKFxuICAgIFwiU3RhcnQgbG9jYWwgTGFtYmRhIGRldmVsb3BtZW50IHdpdGggQ0RLIHdhdGNoIGFuZCBEb2NrZXIgY29udGFpbmVyc1wiLFxuICApLFxuKVxuIl19
|
|
1182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpL2NvbW1hbmRzL2xvY2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUFxQixLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM3RCxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3hDLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLGVBQWUsR0FDaEIsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDOUMsT0FBTyxFQUVMLE9BQU8sSUFBSSxlQUFlLEdBQzNCLE1BQU0sa0JBQWtCLENBQUE7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sUUFBUSxDQUFBO0FBQ2YsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBRWhCLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsYUFBYSxHQUNkLE1BQU0sdUJBQXVCLENBQUE7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDeEQsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixNQUFNLEVBQ04sVUFBVSxFQUNWLHlCQUF5QixHQUMxQixNQUFNLHdCQUF3QixDQUFBO0FB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LCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExvY2FsIGNvbW1hbmQgZm9yIHJ1bm5pbmcgTGFtYmRhIGZ1bmN0aW9ucyBsb2NhbGx5IHVzaW5nIERvY2tlci5cbiAqXG4gKiBUaGlzIGNvbW1hbmQ6XG4gKiAxLiBTdGFydHMgQ0RLIHdhdGNoIHdpdGggQ0RLX0xPQ0FMX0xBTUJEQT10cnVlIGFuZCBob3Rzd2FwXG4gKiAyLiBEaXNjb3ZlcnMgTGFtYmRhIGZ1bmN0aW9ucyB3aXRoIGxpdmUtbGFtYmRhOmhhbmRsZXIgdGFnXG4gKiAzLiBDb25uZWN0cyB0byBBcHBTeW5jIEV2ZW50c1xuICogNC4gU3Vic2NyaWJlcyB0byBpbnZvY2F0aW9uIGNoYW5uZWxzXG4gKiA1LiBGb3IgZWFjaCBmdW5jdGlvbiwgbWFpbnRhaW5zIE9ORSBEb2NrZXIgY29udGFpbmVyIHRoYXQgaGFuZGxlcyBhbGwgaW52b2NhdGlvbnNcbiAqIDYuIFNlbmRzIHJlc3BvbnNlcyBiYWNrIHZpYSBBcHBTeW5jXG4gKiA3LiBSZS1kaXNjb3ZlcnMgZnVuY3Rpb25zIGFmdGVyIGVhY2ggQ0RLIGRlcGxveVxuICovXG5cbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzLCBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIlxuaW1wb3J0IHtcbiAgTGFtYmRhQ2xpZW50LFxuICBMaXN0RnVuY3Rpb25zQ29tbWFuZCxcbiAgTGlzdFRhZ3NDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWxhbWJkYVwiXG5pbXBvcnQgeyBHZXRQYXJhbWV0ZXJDb21tYW5kLCBTU01DbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb25zIH0gZnJvbSBcIkBlZmZlY3QvY2xpXCJcbmltcG9ydCB7XG4gIHR5cGUgQ29tbWFuZEV4ZWN1dG9yLFxuICBDb21tYW5kIGFzIFBsYXRmb3JtQ29tbWFuZCxcbn0gZnJvbSBcIkBlZmZlY3QvcGxhdGZvcm1cIlxuaW1wb3J0IHR5cGUgeyBQcm9jZXNzIGFzIEVmZmVjdFByb2Nlc3MgfSBmcm9tIFwiQGVmZmVjdC9wbGF0Zm9ybS9Db21tYW5kRXhlY3V0b3JcIlxuaW1wb3J0IHsgQnVuQ29udGV4dCB9IGZyb20gXCJAZWZmZWN0L3BsYXRmb3JtLWJ1blwiXG5pbXBvcnQge1xuICBEdXJhdGlvbixcbiAgRWZmZWN0LFxuICBFeGl0LFxuICBGaWJlcixcbiAgTG9nZ2VyLFxuICBMb2dMZXZlbCxcbiAgUXVldWUsXG4gIFJlZixcbiAgU2NoZWR1bGUsXG4gIFNjb3BlLFxuICBTdHJlYW0sXG59IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1NUQUNLX05BTUUsXG4gIEJPT1RTVFJBUF9WRVJTSU9OLFxuICBidWlsZENoYW5uZWxOYW1lLFxuICB0eXBlIEludm9jYXRpb25NZXNzYWdlLFxuICBMSVZFX0xBTUJEQV9ET0NLRVJfVEFHLFxuICBMSVZFX0xBTUJEQV9UQUcsXG4gIHR5cGUgUmVzcG9uc2VNZXNzYWdlLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi4vLi4vc2hhcmVkL3R5cGVzLmpzXCJcbmltcG9ydCB7IG1ha2VBcHBTeW5jQ2xpZW50IH0gZnJvbSBcIi4uL2FwcHN5bmMvY2xpZW50LmpzXCJcbmltcG9ydCB7XG4gIGJ1aWxkRXh0ZW5zaW9uV3JhcHBlckNvbW1hbmQsXG4gIERvY2tlcixcbiAgRG9ja2VyTGl2ZSxcbiAgbWFrZUxhbWJkYUNvbnRhaW5lckNvbmZpZyxcbn0gZnJvbSBcIi4uL2RvY2tlci9jb250YWluZXIuanNcIlxuaW1wb3J0IHtcbiAgdHlwZSBXYXRjaGVkRG9ja2VyRnVuY3Rpb24sXG4gIHdhdGNoRG9ja2VyQ29udGV4dHMsXG59IGZyb20gXCIuLi9kb2NrZXIvd2F0Y2hlci5qc1wiXG5pbXBvcnQge1xuICBub3RpZnlFeHRlbnNpb25zSW52b2tlLFxuICBxdWV1ZUludm9jYXRpb24sXG4gIHR5cGUgUnVudGltZUFwaVN0YXRlLFxuICBzdGFydFJ1bnRpbWVBcGlTZXJ2ZXIsXG4gIHdhaXRGb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4uL3J1bnRpbWUtYXBpL3NlcnZlci5qc1wiXG5pbXBvcnQgdHlwZSB7XG4gIExhbWJkYUVycm9yLFxuICBMYW1iZGFJbml0RXJyb3IsXG4gIExhbWJkYUludm9jYXRpb24sXG4gIExhbWJkYVJlc3BvbnNlLFxufSBmcm9tIFwiLi4vcnVudGltZS1hcGkvdHlwZXMuanNcIlxuXG4vKipcbiAqIERpc2NvdmVyZWQgTGFtYmRhIGZ1bmN0aW9uIGluZm8uXG4gKi9cbmludGVyZmFjZSBEaXNjb3ZlcmVkRnVuY3Rpb24ge1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZ1xuICBmdW5jdGlvbkFybjogc3RyaW5nXG4gIGxvY2FsSGFuZGxlcjogc3RyaW5nXG4gIC8qKiBMb2NhbCBEb2NrZXIgY29udGV4dCBwYXRoIGZvciBEb2NrZXJJbWFnZUZ1bmN0aW9uICovXG4gIGRvY2tlckNvbnRleHRQYXRoPzogc3RyaW5nXG4gIG1lbW9yeU1COiBudW1iZXJcbiAgYXJjaGl0ZWN0dXJlPzogXCJhcm02NFwiIHwgXCJ4ODZfNjRcIlxufVxuXG4vKipcbiAqIERlZmF1bHQgaWRsZSB0aW1lb3V0IGJlZm9yZSBwcm9hY3RpdmVseSBzdG9wcGluZyBjb250YWluZXJzLlxuICogU2V0IHNsaWdodGx5IGJlbG93IHRoZSBwb2xsIHRpbWVvdXQgKDI0MHMpIHRvIHN0b3AgY29udGFpbmVyIGJlZm9yZVxuICogdGhlIExhbWJkYSBSSUMgZ2V0cyBhIDUwMyBlcnJvci5cbiAqL1xuY29uc3QgREVGQVVMVF9JRExFX1RJTUVPVVRfTVMgPSAyMzBfMDAwIC8vIDIzMCBzZWNvbmRzICh+NCBtaW51dGVzKVxuXG4vKipcbiAqIFN0YXRlIGZvciBhIHJ1bm5pbmcgZnVuY3Rpb24gY29udGFpbmVyLlxuICovXG5pbnRlcmZhY2UgRnVuY3Rpb25Db250YWluZXIge1xuICBmbjogRGlzY292ZXJlZEZ1bmN0aW9uXG4gIHJ1bnRpbWVTdGF0ZTogUnVudGltZUFwaVN0YXRlXG4gIC8qKiBUaGUgcG9ydCB0aGUgUnVudGltZSBBUEkgc2VydmVyIGlzIGxpc3RlbmluZyBvbiAqL1xuICBwb3J0OiBudW1iZXJcbiAgY29udGFpbmVyRmliZXI6IEZpYmVyLlJ1bnRpbWVGaWJlcjx2b2lkLCBFcnJvcj5cbiAgY29udGFpbmVyTmFtZTogc3RyaW5nXG4gIC8qKiBEb2NrZXIgaW1hZ2UgbmFtZSBmb3IgcmVidWlsZHMgKi9cbiAgaW1hZ2VOYW1lOiBzdHJpbmdcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBjdXJyZW50bHkgYmVpbmcgcmVidWlsdCAoaW52b2NhdGlvbnMgd2lsbCBxdWV1ZSkgKi9cbiAgaXNSZWJ1aWxkaW5nOiBib29sZWFuXG4gIC8qKiBNYXAgb2YgcmVxdWVzdElkIC0+IHJlc3BvbnNlIHJlc29sdmVyICovXG4gIHBlbmRpbmdSZXNwb25zZXM6IE1hcDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgcmVzb2x2ZTogKHJlc3BvbnNlOiBSZXNwb25zZU1lc3NhZ2UpID0+IHZvaWRcbiAgICB9XG4gID5cbiAgLyoqIEZpYmVyIGZvciB0aGUgaWRsZSBzaHV0ZG93biB0aW1lciwgY2FuY2VsbGVkIHdoZW4gbmV3IHJlc3BvbnNlcyBhcnJpdmUgKi9cbiAgaWRsZVRpbWVyRmliZXI6IEZpYmVyLlJ1bnRpbWVGaWJlcjx2b2lkLCBuZXZlcj4gfCBudWxsXG4gIC8qKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FwdHVyZWQgZnJvbSBmaXJzdCBpbnZvY2F0aW9uICovXG4gIGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxufVxuXG4vKipcbiAqIFN0YXRlIGZvciBhIHJ1bm5pbmcgTm9kZS5qcyB3b3JrZXIgcHJvY2Vzcy5cbiAqL1xuaW50ZXJmYWNlIE5vZGVqc1dvcmtlciB7XG4gIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb25cbiAgcnVudGltZVN0YXRlOiBSdW50aW1lQXBpU3RhdGVcbiAgLyoqIFRoZSBwb3J0IHRoZSBSdW50aW1lIEFQSSBzZXJ2ZXIgaXMgbGlzdGVuaW5nIG9uICovXG4gIHBvcnQ6IG51bWJlclxuICAvKiogVGhlIHNwYXduZWQgQnVuIHByb2Nlc3MgKi9cbiAgd29ya2VyUHJvY2VzczogQ2hpbGRQcm9jZXNzXG4gIC8qKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FwdHVyZWQgZnJvbSBmaXJzdCBpbnZvY2F0aW9uICovXG4gIGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAvKiogQ3VycmVudGx5IHByb2Nlc3NpbmcgcmVxdWVzdCBJRCBmb3IgbG9nIHByZWZpeGluZyAqL1xuICBjdXJyZW50UmVxdWVzdElkOiBzdHJpbmcgfCB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBJbnZvY2F0aW9uIGNvbnRleHQgZm9yIHRyYWNraW5nIGFuZCBsb2dnaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9jYXRpb25Db250ZXh0IHtcbiAgLyoqIFNlcXVlbnRpYWwgaW52b2NhdGlvbiBudW1iZXIgKi9cbiAgbnVtOiBudW1iZXJcbiAgLyoqIFN0YXJ0IHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgKi9cbiAgc3RhcnQ6IG51bWJlclxuICAvKiogRnVuY3Rpb24gbmFtZSAqL1xuICBmbjogc3RyaW5nXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgYSBEb2NrZXIgY29udGFpbmVyIGludm9jYXRpb24gKi9cbiAgaXNEb2NrZXI6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBib290c3RyYXAgc3RhY2sgdmVyc2lvbiBtYXRjaGVzIHRoZSBleHBlY3RlZCB2ZXJzaW9uLlxuICogUmV0dXJucyB0cnVlIGlmIHZlcnNpb24gbWF0Y2hlcywgZmFsc2UgaWYgbWlzc2luZyBvciBtaXNtYXRjaGVkLlxuICovXG5jb25zdCBjaGVja0Jvb3RzdHJhcFZlcnNpb24gPSAocXVhbGlmaWVyOiBzdHJpbmcpID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBzc21DbGllbnQgPSBuZXcgU1NNQ2xpZW50KHt9KVxuICAgIGNvbnN0IGJhc2VQYXRoID0gYCR7U1NNX0JBU0VfUEFUSH0vJHtxdWFsaWZpZXJ9YFxuXG4gICAgY29uc3QgcmVzdWx0ID0geWllbGQqIEVmZmVjdC50cnlQcm9taXNlKHtcbiAgICAgIHRyeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNzbUNsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBHZXRQYXJhbWV0ZXJDb21tYW5kKHsgTmFtZTogYCR7YmFzZVBhdGh9L3ZlcnNpb25gIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiByZXNwb25zZS5QYXJhbWV0ZXI/LlZhbHVlXG4gICAgICB9LFxuICAgICAgY2F0Y2g6ICgpID0+IG51bGwsXG4gICAgfSkucGlwZShFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnN1Y2NlZWQobnVsbCkpKVxuXG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFwiQm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gcGFyYW1ldGVyIG5vdCBmb3VuZFwiKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCAhPT0gQk9PVFNUUkFQX1ZFUlNJT04pIHtcbiAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcbiAgICAgICAgYEJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIG1pc21hdGNoOiBmb3VuZCAke3Jlc3VsdH0sIGV4cGVjdGVkICR7Qk9PVFNUUkFQX1ZFUlNJT059YCxcbiAgICAgIClcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH0pXG5cbi8qKlxuICogUnVuIHRoZSBib290c3RyYXAgc3RhY2sgZGVwbG95bWVudC5cbiAqL1xuY29uc3QgcnVuQm9vdHN0cmFwID0gKG9wdGlvbnM6IHtcbiAgcHJvZmlsZT86IHN0cmluZyB8IHVuZGVmaW5lZFxuICByZWdpb24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbn0pID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJSdW5uaW5nIGJvb3RzdHJhcCBzdGFjayBkZXBsb3ltZW50Li4uXCIpXG5cbiAgICAvLyBSZXNvbHZlIHRoZSBDREsgYXBwIHBhdGggcmVsYXRpdmUgdG8gdGhpcyBtb2R1bGVcbiAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpXG4gICAgY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpXG4gICAgY29uc3QgY2RrQXBwUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsIFwiLi5cIiwgXCJjZGstYXBwLmpzXCIpXG5cbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgXCJjZGtcIixcbiAgICAgIFwiZGVwbG95XCIsXG4gICAgICBCT09UU1RSQVBfU1RBQ0tfTkFNRSxcbiAgICAgIFwiLS1yZXF1aXJlLWFwcHJvdmFsXCIsXG4gICAgICBcIm5ldmVyXCIsXG4gICAgICBcIi0tYXBwXCIsXG4gICAgICBgYnVuICR7Y2RrQXBwUGF0aH1gLFxuICAgIF1cblxuICAgIGlmIChvcHRpb25zLnByb2ZpbGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tcHJvZmlsZVwiLCBvcHRpb25zLnByb2ZpbGUpXG4gICAgfVxuXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgaWYgKG9wdGlvbnMucmVnaW9uKSB7XG4gICAgICBlbnYuQVdTX1JFR0lPTiA9IG9wdGlvbnMucmVnaW9uXG4gICAgICBlbnYuQ0RLX0RFRkFVTFRfUkVHSU9OID0gb3B0aW9ucy5yZWdpb25cbiAgICB9XG5cbiAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oYFJ1bm5pbmc6IG5weCAke2FyZ3Muam9pbihcIiBcIil9YClcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBQbGF0Zm9ybUNvbW1hbmQubWFrZShcIm5weFwiLCAuLi5hcmdzKS5waXBlKFxuICAgICAgUGxhdGZvcm1Db21tYW5kLmVudihlbnYpLFxuICAgICAgUGxhdGZvcm1Db21tYW5kLnN0ZGluKFwiaW5oZXJpdFwiKSxcbiAgICApXG5cbiAgICBjb25zdCBwcm9jID0geWllbGQqIFBsYXRmb3JtQ29tbWFuZC5zdGFydChjb21tYW5kKVxuXG4gICAgLy8gU3RyZWFtIG91dHB1dCB0byBjb25zb2xlXG4gICAgeWllbGQqIFN0cmVhbS5tZXJnZShwcm9jLnN0ZG91dCwgcHJvYy5zdGRlcnIpLnBpcGUoXG4gICAgICBTdHJlYW0uZGVjb2RlVGV4dCgpLFxuICAgICAgU3RyZWFtLnNwbGl0TGluZXMsXG4gICAgICBTdHJlYW0ucnVuRm9yRWFjaCgobGluZSkgPT5cbiAgICAgICAgRWZmZWN0LnN5bmMoKCkgPT4ge1xuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke2xpbmV9XFxuYClcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcblxuICAgIGNvbnN0IGV4aXRDb2RlID0geWllbGQqIHByb2MuZXhpdENvZGVcbiAgICBpZiAoZXhpdENvZGUgIT09IDApIHtcbiAgICAgIHJldHVybiB5aWVsZCogRWZmZWN0LmZhaWwoXG4gICAgICAgIG5ldyBFcnJvcihgQm9vdHN0cmFwIGRlcGxveW1lbnQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7ZXhpdENvZGV9YCksXG4gICAgICApXG4gICAgfVxuXG4gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFwiQm9vdHN0cmFwIHN0YWNrIGRlcGxveWVkIHN1Y2Nlc3NmdWxseSFcIilcbiAgfSkucGlwZShFZmZlY3Quc2NvcGVkKVxuXG4vKipcbiAqIEVuc3VyZSBib290c3RyYXAgc3RhY2sgaXMgZGVwbG95ZWQgd2l0aCBjb3JyZWN0IHZlcnNpb24uXG4gKiBBdXRvbWF0aWNhbGx5IGRlcGxveXMgaWYgbWlzc2luZyBvciBvdXRkYXRlZC5cbiAqL1xuY29uc3QgZW5zdXJlQm9vdHN0cmFwID0gKG9wdGlvbnM6IHtcbiAgcXVhbGlmaWVyOiBzdHJpbmdcbiAgcHJvZmlsZT86IHN0cmluZyB8IHVuZGVmaW5lZFxuICByZWdpb24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbn0pID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFwiW0xvY2FsXSBDaGVja2luZyBib290c3RyYXAgc3RhY2sgdmVyc2lvbi4uLlwiKVxuXG4gICAgY29uc3QgdmVyc2lvbk9rID0geWllbGQqIGNoZWNrQm9vdHN0cmFwVmVyc2lvbihvcHRpb25zLnF1YWxpZmllcilcblxuICAgIGlmICghdmVyc2lvbk9rKSB7XG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXG4gICAgICAgIFwiW0xvY2FsXSBCb290c3RyYXAgc3RhY2sgbmVlZHMgdG8gYmUgZGVwbG95ZWQgb3IgdXBkYXRlZC5cIixcbiAgICAgIClcbiAgICAgIHlpZWxkKiBydW5Cb290c3RyYXAoeyBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24gfSlcbiAgICB9IGVsc2Uge1xuICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcIltMb2NhbF0gQm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gT0suXCIpXG4gICAgfVxuICB9KVxuXG4vKipcbiAqIFJlYWQgQXBwU3luYyBlbmRwb2ludHMgZnJvbSBTU00uXG4gKi9cbmNvbnN0IGdldEFwcFN5bmNFbmRwb2ludHMgPSAocXVhbGlmaWVyOiBzdHJpbmcpID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBzc21DbGllbnQgPSBuZXcgU1NNQ2xpZW50KHt9KVxuICAgIGNvbnN0IGJhc2VQYXRoID0gYCR7U1NNX0JBU0VfUEFUSH0vJHtxdWFsaWZpZXJ9YFxuXG4gICAgY29uc3QgZ2V0UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgRWZmZWN0LnRyeVByb21pc2Uoe1xuICAgICAgICB0cnk6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzc21DbGllbnQuc2VuZChcbiAgICAgICAgICAgIG5ldyBHZXRQYXJhbWV0ZXJDb21tYW5kKHsgTmFtZTogYCR7YmFzZVBhdGh9LyR7bmFtZX1gIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LlBhcmFtZXRlcj8uVmFsdWUgPz8gXCJcIlxuICAgICAgICB9LFxuICAgICAgICBjYXRjaDogKGVycm9yKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBTU00gcGFyYW1ldGVyICR7bmFtZX06ICR7U3RyaW5nKGVycm9yKX1gKSxcbiAgICAgIH0pXG5cbiAgICBjb25zdCBodHRwRW5kcG9pbnQgPSB5aWVsZCogZ2V0UGFyYW0oXCJodHRwLWVuZHBvaW50XCIpXG4gICAgY29uc3QgcmVhbHRpbWVFbmRwb2ludCA9IHlpZWxkKiBnZXRQYXJhbShcInJlYWx0aW1lLWVuZHBvaW50XCIpXG5cbiAgICByZXR1cm4geyBodHRwRW5kcG9pbnQsIHJlYWx0aW1lRW5kcG9pbnQgfVxuICB9KVxuXG4vKipcbiAqIENsb3VkRm9ybWF0aW9uIHN0YWNrIG5hbWUgdGFnIChzZXQgYXV0b21hdGljYWxseSBieSBDREspXG4gKi9cbmNvbnN0IENGTl9TVEFDS19OQU1FX1RBRyA9IFwiYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLW5hbWVcIlxuXG4vKipcbiAqIERpc2NvdmVyIExhbWJkYSBmdW5jdGlvbnMgd2l0aCBsaXZlLWxhbWJkYSB0YWdzLlxuICogQHBhcmFtIHN0YWNrRmlsdGVyIC0gT3B0aW9uYWwgbGlzdCBvZiBzdGFjayBuYW1lcyB0byBmaWx0ZXIgYnlcbiAqL1xuY29uc3QgZGlzY292ZXJGdW5jdGlvbnMgPSAoc3RhY2tGaWx0ZXI/OiBzdHJpbmdbXSkgPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IGxhbWJkYUNsaWVudCA9IG5ldyBMYW1iZGFDbGllbnQoe30pXG4gICAgY29uc3QgZnVuY3Rpb25zOiBEaXNjb3ZlcmVkRnVuY3Rpb25bXSA9IFtdXG5cbiAgICAvLyBMaXN0IGFsbCBmdW5jdGlvbnNcbiAgICBsZXQgbmV4dE1hcmtlcjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgZG8ge1xuICAgICAgY29uc3QgbGlzdFJlc3BvbnNlID0geWllbGQqIEVmZmVjdC50cnlQcm9taXNlKHtcbiAgICAgICAgdHJ5OiAoKSA9PlxuICAgICAgICAgIGxhbWJkYUNsaWVudC5zZW5kKG5ldyBMaXN0RnVuY3Rpb25zQ29tbWFuZCh7IE1hcmtlcjogbmV4dE1hcmtlciB9KSksXG4gICAgICAgIGNhdGNoOiAoZXJyb3IpID0+XG4gICAgICAgICAgbmV3IEVycm9yKGBGYWlsZWQgdG8gbGlzdCBmdW5jdGlvbnM6ICR7U3RyaW5nKGVycm9yKX1gKSxcbiAgICAgIH0pXG5cbiAgICAgIGZvciAoY29uc3QgZm4gb2YgbGlzdFJlc3BvbnNlLkZ1bmN0aW9ucyA/PyBbXSkge1xuICAgICAgICAvLyBHZXQgdGFncyBmb3IgZWFjaCBmdW5jdGlvblxuICAgICAgICBjb25zdCB0YWdzUmVzdWx0ID0geWllbGQqIEVmZmVjdC50cnlQcm9taXNlKHtcbiAgICAgICAgICB0cnk6ICgpID0+XG4gICAgICAgICAgICBsYW1iZGFDbGllbnQuc2VuZChcbiAgICAgICAgICAgICAgbmV3IExpc3RUYWdzQ29tbWFuZCh7IFJlc291cmNlOiBmbi5GdW5jdGlvbkFybiB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgY2F0Y2g6ICgpID0+IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCB0YWdzIGZvciAke2ZuLkZ1bmN0aW9uTmFtZX1gKSxcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT5cbiAgICAgICAgICAgIEVmZmVjdC5zdWNjZWVkKHsgVGFnczoge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgdGFncyA9IHRhZ3NSZXN1bHQuVGFncyA/PyB7fVxuXG4gICAgICAgIC8vIENoZWNrIGZvciBsaXZlLWxhbWJkYSB0YWcgKGhhbmRsZXIpIG9yIGRvY2tlci1jb250ZXh0IHRhZ1xuICAgICAgICBpZiAodGFnc1tMSVZFX0xBTUJEQV9UQUddIHx8IHRhZ3NbTElWRV9MQU1CREFfRE9DS0VSX1RBR10pIHtcbiAgICAgICAgICAvLyBGaWx0ZXIgYnkgc3RhY2sgbmFtZSBpZiBzcGVjaWZpZWRcbiAgICAgICAgICBpZiAoc3RhY2tGaWx0ZXIgJiYgc3RhY2tGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tOYW1lID0gdGFnc1tDRk5fU1RBQ0tfTkFNRV9UQUddXG4gICAgICAgICAgICBpZiAoIXN0YWNrTmFtZSB8fCAhc3RhY2tGaWx0ZXIuaW5jbHVkZXMoc3RhY2tOYW1lKSkge1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERldGVybWluZSBhcmNoaXRlY3R1cmUgZnJvbSBMYW1iZGEgY29uZmlnXG4gICAgICAgICAgY29uc3QgYXJjaGl0ZWN0dXJlcyA9IGZuLkFyY2hpdGVjdHVyZXMgPz8gW1wieDg2XzY0XCJdXG4gICAgICAgICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gYXJjaGl0ZWN0dXJlcy5pbmNsdWRlcyhcImFybTY0XCIpXG4gICAgICAgICAgICA/IChcImFybTY0XCIgYXMgY29uc3QpXG4gICAgICAgICAgICA6IChcIng4Nl82NFwiIGFzIGNvbnN0KVxuXG4gICAgICAgICAgY29uc3QgZGlzY292ZXJlZDogRGlzY292ZXJlZEZ1bmN0aW9uID0ge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmbi5GdW5jdGlvbk5hbWUhLFxuICAgICAgICAgICAgZnVuY3Rpb25Bcm46IGZuLkZ1bmN0aW9uQXJuISxcbiAgICAgICAgICAgIGxvY2FsSGFuZGxlcjogdGFnc1tMSVZFX0xBTUJEQV9UQUddID8/IFwiXCIsXG4gICAgICAgICAgICBkb2NrZXJDb250ZXh0UGF0aDogdGFnc1tMSVZFX0xBTUJEQV9ET0NLRVJfVEFHXSxcbiAgICAgICAgICAgIG1lbW9yeU1COiBmbi5NZW1vcnlTaXplID8/IDEyOCxcbiAgICAgICAgICAgIGFyY2hpdGVjdHVyZSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb25zLnB1c2goZGlzY292ZXJlZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXh0TWFya2VyID0gbGlzdFJlc3BvbnNlLk5leHRNYXJrZXJcbiAgICB9IHdoaWxlIChuZXh0TWFya2VyKVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uc1xuICB9KVxuXG4vKipcbiAqIFN0YXJ0IGEgbG9uZy1ydW5uaW5nIERvY2tlciBjb250YWluZXIgZm9yIGEgZnVuY3Rpb24uXG4gKiBCdWlsZHMgdGhlIGltYWdlIGZyb20gdGhlIGxvY2FsIERvY2tlciBjb250ZXh0IHBhdGgsIHRoZW4gcnVucyBpdC5cbiAqIFRoZSBjb250YWluZXIgY29udGludW91c2x5IHBvbGxzIG91ciBSdW50aW1lIEFQSSBmb3IgaW52b2NhdGlvbnMuXG4gKiBVc2VzIEVmZmVjdC5mb3JrRGFlbW9uIHRvIGVuc3VyZSB0aGUgY29udGFpbmVyIHJ1bnMgaW5kZXBlbmRlbnRseSB3aXRoIGNvbnRleHQuXG4gKi9cbmNvbnN0IHN0YXJ0RnVuY3Rpb25Db250YWluZXIgPSAoXG4gIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb24sXG4gIHBvcnQ6IG51bWJlcixcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgYWRkaXRpb25hbEVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgaW52b2NhdGlvbkNvbnRleHRzPzogTWFwPHN0cmluZywgeyBudW06IG51bWJlciB9Pixcbik6IEVmZmVjdC5FZmZlY3Q8XG4gIEZpYmVyLlJ1bnRpbWVGaWJlcjx2b2lkLCBFcnJvcj4sXG4gIEVycm9yLFxuICBDb21tYW5kRXhlY3V0b3IuQ29tbWFuZEV4ZWN1dG9yXG4+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBpZiAoIWZuLmRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKFxuICAgICAgICBuZXcgRXJyb3IoYEZ1bmN0aW9uICR7Zm4uZnVuY3Rpb25OYW1lfSBoYXMgbm8gRG9ja2VyIGNvbnRleHQgcGF0aGApLFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGRvY2tlciA9IHlpZWxkKiBEb2NrZXJcblxuICAgIGNvbnN0IGRvY2tlclJ1bnRpbWUgPSB5aWVsZCogZG9ja2VyLmdldFJ1bnRpbWVJbmZvKClcbiAgICBjb25zdCBydW50aW1lQXBpSG9zdCA9IGRvY2tlclJ1bnRpbWUuaXNEb2NrZXJEZXNrdG9wXG4gICAgICA/IFwiaG9zdC5kb2NrZXIuaW50ZXJuYWxcIlxuICAgICAgOiBcInJ1bnRpbWUuYXBpXCJcblxuICAgIC8vIEdlbmVyYXRlIGEgbG9jYWwgaW1hZ2UgbmFtZSBmcm9tIGZ1bmN0aW9uIG5hbWVcbiAgICBjb25zdCBpbWFnZU5hbWUgPSBgbGl2ZS1sYW1iZGEtJHtmbi5mdW5jdGlvbk5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csIFwiLVwiKX1gXG5cbiAgICAvLyBSZXNvbHZlIHRoZSBjb250ZXh0IHBhdGggcmVsYXRpdmUgdG8gcHJvamVjdCByb290XG4gICAgY29uc3QgY29udGV4dFBhdGggPSBmbi5kb2NrZXJDb250ZXh0UGF0aC5zdGFydHNXaXRoKFwiL1wiKVxuICAgICAgPyBmbi5kb2NrZXJDb250ZXh0UGF0aFxuICAgICAgOiBgJHtwcm9qZWN0Um9vdH0vJHtmbi5kb2NrZXJDb250ZXh0UGF0aH1gXG5cbiAgICAvLyBEZXRlcm1pbmUgcGxhdGZvcm0gZnJvbSBhcmNoaXRlY3R1cmVcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGZuLmFyY2hpdGVjdHVyZSA9PT0gXCJhcm02NFwiID8gXCJsaW51eC9hcm02NFwiIDogXCJsaW51eC9hbWQ2NFwiXG5cbiAgICAvLyBCdWlsZCB0aGUgRG9ja2VyIGltYWdlIGZyb20gbG9jYWwgY29udGV4dFxuICAgIHlpZWxkKiBkb2NrZXJcbiAgICAgIC5idWlsZCh7XG4gICAgICAgIGNvbnRleHRQYXRoLFxuICAgICAgICBpbWFnZU5hbWUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgfSlcbiAgICAgIC5waXBlKEVmZmVjdC5zY29wZWQpXG5cbiAgICAvLyBJbnNwZWN0IHRoZSBpbWFnZSB0byBnZXQgb3JpZ2luYWwgZW50cnlwb2ludC9jbWQgZm9yIGV4dGVuc2lvbiB3cmFwcGVyXG4gICAgY29uc3QgaW1hZ2VDb25maWcgPSB5aWVsZCogZG9ja2VyLmluc3BlY3QoaW1hZ2VOYW1lKS5waXBlKEVmZmVjdC5zY29wZWQpXG4gICAgY29uc3QgZXh0ZW5zaW9uV3JhcHBlciA9IGJ1aWxkRXh0ZW5zaW9uV3JhcHBlckNvbW1hbmQoXG4gICAgICBpbWFnZUNvbmZpZy5lbnRyeXBvaW50LFxuICAgICAgaW1hZ2VDb25maWcuY21kLFxuICAgIClcblxuICAgIGNvbnN0IGNvbnRhaW5lckNvbmZpZyA9IG1ha2VMYW1iZGFDb250YWluZXJDb25maWcoe1xuICAgICAgaW1hZ2VVcmk6IGltYWdlTmFtZSxcbiAgICAgIHJ1bnRpbWVBcGlIb3N0LFxuICAgICAgcnVudGltZUFwaVBvcnQ6IHBvcnQsXG4gICAgICBmdW5jdGlvbk5hbWU6IGZuLmZ1bmN0aW9uTmFtZSxcbiAgICAgIGZ1bmN0aW9uVmVyc2lvbjogXCIkTEFURVNUXCIsXG4gICAgICBtZW1vcnlNQjogZm4ubWVtb3J5TUIsXG4gICAgICB0aW1lb3V0U2Vjb25kczogMzYwMCwgLy8gTG9uZyB0aW1lb3V0IC0gY29udGFpbmVyIHN0YXlzIHJ1bm5pbmdcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgYWRkaXRpb25hbEVudixcbiAgICAgIGludm9jYXRpb25Db250ZXh0cyxcbiAgICB9KVxuXG4gICAgLy8gQXBwbHkgZXh0ZW5zaW9uIHdyYXBwZXIgdG8gc3RhcnQgZXh0ZW5zaW9ucyBiZWZvcmUgdGhlIGFwcFxuICAgIGNvbnRhaW5lckNvbmZpZy5lbnRyeXBvaW50ID0gZXh0ZW5zaW9uV3JhcHBlci5lbnRyeXBvaW50XG4gICAgY29udGFpbmVyQ29uZmlnLmNvbW1hbmQgPSBleHRlbnNpb25XcmFwcGVyLmNvbW1hbmRcblxuICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcbiAgICAgIGBTdGFydGluZyBjb250YWluZXIgZm9yICR7Zm4uZnVuY3Rpb25OYW1lfSBvbiBwb3J0ICR7cG9ydH1gLFxuICAgIClcblxuICAgIC8vIFVzZSBFZmZlY3QuZm9ya0RhZW1vbiB0byBydW4gdGhlIGNvbnRhaW5lciBpbmRlcGVuZGVudGx5IHdpdGggY29udGV4dCBwcmVzZXJ2ZWRcbiAgICAvLyBFZmZlY3Quc2NvcGVkIHByb3ZpZGVzIHRoZSBzY29wZSBuZWVkZWQgYnkgZG9ja2VyLnJ1blxuICAgIGNvbnN0IGZpYmVyID0geWllbGQqIGRvY2tlclxuICAgICAgLnJ1bihjb250YWluZXJDb25maWcpXG4gICAgICAucGlwZShFZmZlY3Quc2NvcGVkLCBFZmZlY3QuaWdub3JlLCBFZmZlY3QuZm9ya0RhZW1vbilcblxuICAgIHJldHVybiBmaWJlclxuICB9KS5waXBlKEVmZmVjdC5wcm92aWRlKERvY2tlckxpdmUpKVxuXG4vLyBUeXBlIGd1YXJkcyBmb3IgcmVzcG9uc2UgdHlwZXNcbmNvbnN0IGlzTGFtYmRhUmVzcG9uc2UgPSAoXG4gIHI6IExhbWJkYVJlc3BvbnNlIHwgTGFtYmRhRXJyb3IgfCBMYW1iZGFJbml0RXJyb3IsXG4pOiByIGlzIExhbWJkYVJlc3BvbnNlID0+IFwiYm9keVwiIGluIHIgJiYgIShcImVycm9yVHlwZVwiIGluIHIpXG5cbmNvbnN0IGlzTGFtYmRhRXJyb3IgPSAoXG4gIHI6IExhbWJkYVJlc3BvbnNlIHwgTGFtYmRhRXJyb3IgfCBMYW1iZGFJbml0RXJyb3IsXG4pOiByIGlzIExhbWJkYUVycm9yID0+IFwicmVxdWVzdElkXCIgaW4gciAmJiBcImVycm9yVHlwZVwiIGluIHJcblxuY29uc3QgaXNMYW1iZGFJbml0RXJyb3IgPSAoXG4gIHI6IExhbWJkYVJlc3BvbnNlIHwgTGFtYmRhRXJyb3IgfCBMYW1iZGFJbml0RXJyb3IsXG4pOiByIGlzIExhbWJkYUluaXRFcnJvciA9PiAhKFwicmVxdWVzdElkXCIgaW4gcikgJiYgXCJlcnJvclR5cGVcIiBpbiByXG5cbi8qKlxuICogUmVzZXQgdGhlIGlkbGUgdGltZXIgZm9yIGEgY29udGFpbmVyLlxuICogQWZ0ZXIgdGhlIHRpbWVvdXQgZXhwaXJlcyB3aXRoIG5vIG5ldyByZXNwb25zZXMsIHRoZSBjb250YWluZXIgaXMgc3RvcHBlZC5cbiAqIFRoaXMgcHJldmVudHMgdGhlIGNvbmZ1c2luZyA1MDMgZXJyb3IgZnJvbSB0aGUgTGFtYmRhIFJJQyB3aGVuIHRoZSBwb2xsIHRpbWVzIG91dC5cbiAqL1xuY29uc3QgcmVzZXRJZGxlVGltZXIgPSAoXG4gIGNvbnRhaW5lcjogRnVuY3Rpb25Db250YWluZXIsXG4gIGNvbnRhaW5lcnNSZWY6IFJlZi5SZWY8TWFwPHN0cmluZywgRnVuY3Rpb25Db250YWluZXI+PixcbiAgaWRsZVRpbWVvdXRNczogbnVtYmVyLFxuKTogRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlciwgQ29tbWFuZEV4ZWN1dG9yLkNvbW1hbmRFeGVjdXRvcj4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIC8vIENhbmNlbCBleGlzdGluZyB0aW1lciBpZiBhbnlcbiAgICBpZiAoY29udGFpbmVyLmlkbGVUaW1lckZpYmVyKSB7XG4gICAgICB5aWVsZCogRmliZXIuaW50ZXJydXB0KGNvbnRhaW5lci5pZGxlVGltZXJGaWJlcikucGlwZShcbiAgICAgICAgRWZmZWN0LmNhdGNoQWxsKCgpID0+IEVmZmVjdC52b2lkKSxcbiAgICAgIClcbiAgICAgIGNvbnRhaW5lci5pZGxlVGltZXJGaWJlciA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBTdGFydCBuZXcgdGltZXIgLSB1c2UgbmV2ZXIgZm9yIGVycm9yIHR5cGUgc2luY2Ugd2UgY2F0Y2ggYWxsIGVycm9yc1xuICAgIGNvbnN0IHRpbWVyRmliZXI6IEZpYmVyLlJ1bnRpbWVGaWJlcjx2b2lkLCBuZXZlcj4gPSB5aWVsZCogRWZmZWN0LmdlbihcbiAgICAgIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkKiBFZmZlY3Quc2xlZXAoRHVyYXRpb24ubWlsbGlzKGlkbGVUaW1lb3V0TXMpKVxuXG4gICAgICAgIC8vIFRpbWVyIGV4cGlyZWQgLSBzdG9wIGNvbnRhaW5lciBwcm9hY3RpdmVseVxuICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXG4gICAgICAgICAgYFtMb2NhbF0gU3RvcHBpbmcgaWRsZSBjb250YWluZXIgJHtjb250YWluZXIuZm4uZnVuY3Rpb25OYW1lfSAod2lsbCByZXN0YXJ0IG9uIG5leHQgaW52b2NhdGlvbilgLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gU3RvcCB0aGUgY29udGFpbmVyIHVzaW5nIERvY2tlciB3aXRoIGZhc3QgdGltZW91dCAoMXMpXG4gICAgICAgIC8vIFRoZSBjb250YWluZXIgbWF5IGJlIGJsb2NrZWQgb24gbG9uZy1wb2xsaW5nLCBzbyB3ZSBuZWVkIHRvIGZvcmNlIGtpbGxcbiAgICAgICAgY29uc3QgZG9ja2VyID0geWllbGQqIERvY2tlclxuICAgICAgICB5aWVsZCogZG9ja2VyLnN0b3AoY29udGFpbmVyLmNvbnRhaW5lck5hbWUsIDEpLnBpcGUoXG4gICAgICAgICAgRWZmZWN0LnNjb3BlZCxcbiAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gbWFwIHNvIG5leHQgaW52b2NhdGlvbiBjcmVhdGVzIGZyZXNoIGNvbnRhaW5lclxuICAgICAgICBjb25zdCBjdXJyZW50Q29udGFpbmVycyA9IHlpZWxkKiBSZWYuZ2V0KGNvbnRhaW5lcnNSZWYpXG4gICAgICAgIGN1cnJlbnRDb250YWluZXJzLmRlbGV0ZShjb250YWluZXIuZm4uZnVuY3Rpb25OYW1lKVxuICAgICAgICB5aWVsZCogUmVmLnNldChjb250YWluZXJzUmVmLCBjdXJyZW50Q29udGFpbmVycylcbiAgICAgIH0sXG4gICAgKS5waXBlKFxuICAgICAgRWZmZWN0LnByb3ZpZGUoRG9ja2VyTGl2ZSksXG4gICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpLFxuICAgICAgRWZmZWN0LmZvcmtEYWVtb24sXG4gICAgKVxuXG4gICAgY29udGFpbmVyLmlkbGVUaW1lckZpYmVyID0gdGltZXJGaWJlclxuICB9KVxuXG4vKipcbiAqIFByb2Nlc3MgcmVzcG9uc2VzIGZyb20gYSBjb250YWluZXIgYW5kIGRpc3BhdGNoIHRvIHdhaXRpbmcgY2FsbGVycy5cbiAqIEFmdGVyIGVhY2ggcmVzcG9uc2UsIHJlc2V0cyB0aGUgaWRsZSB0aW1lciB0byBwcm9hY3RpdmVseSBzdG9wIHRoZSBjb250YWluZXJcbiAqIGJlZm9yZSB0aGUgcG9sbCB0aW1lb3V0IGNhdXNlcyBjb25mdXNpbmcgTGFtYmRhIFJJQyBlcnJvcnMuXG4gKi9cbmNvbnN0IHByb2Nlc3NDb250YWluZXJSZXNwb25zZXMgPSAoXG4gIGNvbnRhaW5lcjogRnVuY3Rpb25Db250YWluZXIsXG4gIGNvbnRhaW5lcnNSZWY6IFJlZi5SZWY8TWFwPHN0cmluZywgRnVuY3Rpb25Db250YWluZXI+PixcbiAgaWRsZVRpbWVvdXRNczogbnVtYmVyLFxuICBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIG1ha2VBcHBTeW5jQ2xpZW50PixcbiAgaW52b2NhdGlvbkNvbnRleHRzOiBNYXA8c3RyaW5nLCBJbnZvY2F0aW9uQ29udGV4dD4sXG4pOiBFZmZlY3QuRWZmZWN0PHZvaWQsIEVycm9yLCBDb21tYW5kRXhlY3V0b3IuQ29tbWFuZEV4ZWN1dG9yPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgcmVzcG9uc2VDaGFubmVsID0gYnVpbGRDaGFubmVsTmFtZS5yZXNwb25zZShjb250YWluZXIuZm4uZnVuY3Rpb25OYW1lKVxuXG4gICAgLy8gQ29udGludW91c2x5IHByb2Nlc3MgcmVzcG9uc2VzIGZyb20gdGhlIGNvbnRhaW5lclxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCogd2FpdEZvclJlc3BvbnNlKGNvbnRhaW5lci5ydW50aW1lU3RhdGUpXG5cbiAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2VNZXNzYWdlXG4gICAgICBpZiAoaXNMYW1iZGFSZXNwb25zZShyZXN1bHQpKSB7XG4gICAgICAgIHJlc3BvbnNlID0ge1xuICAgICAgICAgIHR5cGU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3VsdC5yZXF1ZXN0SWQsXG4gICAgICAgICAgcmVzdWx0OiByZXN1bHQuYm9keSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0xhbWJkYUVycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgdHlwZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVzdWx0LnJlcXVlc3RJZCxcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZXJyb3JUeXBlOiByZXN1bHQuZXJyb3JUeXBlLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiByZXN1bHQuZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgc3RhY2tUcmFjZTogcmVzdWx0LnN0YWNrVHJhY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0xhbWJkYUluaXRFcnJvcihyZXN1bHQpKSB7XG4gICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRXJyb3IoXG4gICAgICAgICAgYFtMb2NhbF0gSW5pdCBlcnJvcjogJHtyZXN1bHQuZXJyb3JUeXBlfTogJHtyZXN1bHQuZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFNlbmQgcmVzcG9uc2UgYmFjayB2aWEgQXBwU3luY1xuICAgICAgeWllbGQqIGNsaWVudC5wdWJsaXNoUmVzcG9uc2UocmVzcG9uc2VDaGFubmVsLCByZXNwb25zZSlcbiAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFtMb2NhbF0gU2VudCByZXNwb25zZSBmb3IgJHtyZXNwb25zZS5yZXF1ZXN0SWR9YClcblxuICAgICAgLy8gUHJpbnQgZW5kIG1hcmtlciB3aXRoIHRpbWluZ1xuICAgICAgY29uc3QgY3R4ID0gaW52b2NhdGlvbkNvbnRleHRzLmdldChyZXNwb25zZS5yZXF1ZXN0SWQpXG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gY3R4LnN0YXJ0XG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFske2N0eC5udW19XSBcXHUyNTE0XFx1MjUwMFxcdTI1MDAgXFx1MjcxNyAke3Jlc3BvbnNlLmVycm9yLmVycm9yVHlwZX06ICR7cmVzcG9uc2UuZXJyb3IuZXJyb3JNZXNzYWdlfSAoJHtkdXJhdGlvbk1zfW1zKSBcXHUyNTAwXFx1MjUwMGAsXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFske2N0eC5udW19XSBcXHUyNTE0XFx1MjUwMFxcdTI1MDAgXFx1MjcxMyBEb25lICgke2R1cmF0aW9uTXN9bXMpIFxcdTI1MDBcXHUyNTAwYCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaW52b2NhdGlvbkNvbnRleHRzLmRlbGV0ZShyZXNwb25zZS5yZXF1ZXN0SWQpXG4gICAgICB9XG5cbiAgICAgIC8vIFJlc2V0IGlkbGUgdGltZXIgLSBjb250YWluZXIgd2lsbCBiZSBzdG9wcGVkIGlmIG5vIG5ldyBpbnZvY2F0aW9ucyBhcnJpdmVcbiAgICAgIHlpZWxkKiByZXNldElkbGVUaW1lcihjb250YWluZXIsIGNvbnRhaW5lcnNSZWYsIGlkbGVUaW1lb3V0TXMpXG4gICAgfVxuICB9KVxuXG4vKipcbiAqIFN0YXJ0IGEgTm9kZS5qcyB3b3JrZXIgcHJvY2VzcyBmb3IgYSBmdW5jdGlvbi5cbiAqIFNwYXducyBCdW4gdG8gcnVuIHRoZSBydW50aW1lIHdyYXBwZXIgd2l0aCB0aGUgaGFuZGxlciBwYXRoLlxuICogVGhlIHdvcmtlciBjb250aW51b3VzbHkgcG9sbHMgb3VyIFJ1bnRpbWUgQVBJIGZvciBpbnZvY2F0aW9ucy5cbiAqL1xuY29uc3Qgc3RhcnROb2RlanNXb3JrZXIgPSAoXG4gIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb24sXG4gIHBvcnQ6IG51bWJlcixcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBpbnZvY2F0aW9uQ29udGV4dHM6IE1hcDxzdHJpbmcsIEludm9jYXRpb25Db250ZXh0PixcbiAgd29ya2VyOiBOb2RlanNXb3JrZXIsXG4pOiBFZmZlY3QuRWZmZWN0PENoaWxkUHJvY2VzcywgRXJyb3I+ID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBpZiAoIWZuLmxvY2FsSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHlpZWxkKiBFZmZlY3QuZmFpbChcbiAgICAgICAgbmV3IEVycm9yKGBGdW5jdGlvbiAke2ZuLmZ1bmN0aW9uTmFtZX0gaGFzIG5vIGxvY2FsIGhhbmRsZXIgcGF0aGApLFxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIFJlc29sdmUgdGhlIHJ1bnRpbWUgd3JhcHBlciBwYXRoIHJlbGF0aXZlIHRvIHRoaXMgbW9kdWxlXG4gICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuICAgIGNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKVxuICAgIGNvbnN0IHJ1bnRpbWVXcmFwcGVyUGF0aCA9IHBhdGgucmVzb2x2ZShcbiAgICAgIF9fZGlybmFtZSxcbiAgICAgIFwiLi5cIixcbiAgICAgIFwicnVudGltZS13cmFwcGVyXCIsXG4gICAgICBcIm5vZGVqcy1ydW50aW1lLmpzXCIsXG4gICAgKVxuXG4gICAgLy8gR2V0IGFic29sdXRlIHBhdGggdG8gYnVuIGZvciBwdXJlIGVudiBpc29sYXRpb24gKG5vIFBBVEggZGVwZW5kZW5jeSlcbiAgICBjb25zdCBidW5QYXRoID0gQnVuLndoaWNoKFwiYnVuXCIpXG4gICAgaWYgKCFidW5QYXRoKSB7XG4gICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKFxuICAgICAgICBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCAnYnVuJyBleGVjdXRhYmxlIGluIFBBVEhcIiksXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gQnVpbGQgZW52aXJvbm1lbnQgZm9yIHRoZSB3b3JrZXIgcHJvY2Vzc1xuICAgIC8vIFB1cmUgaXNvbGF0aW9uOiBvbmx5IGVudiBmcm9tIGJyaWRnZSArIGxvY2FsIG92ZXJyaWRlcywgbm8gbG9jYWwgUEFUSC9IT01FXG4gICAgY29uc3Qgd29ya2VyRW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHtcbiAgICAgIC8vIFN0YXJ0IHdpdGggZW52IHZhcnMgZnJvbSB0aGUgYnJpZGdlIExhbWJkYSAoQVdTIGNyZWRlbnRpYWxzLCB1c2VyLWRlZmluZWQgdmFycylcbiAgICAgIC4uLmVudixcbiAgICAgIC8vIExvY2FsIG92ZXJyaWRlcyAodGhlc2UgYXJlIHNldCBieSB0aGUgZGFlbW9uLCBub3QgZnJvbSBicmlkZ2UpXG4gICAgICBBV1NfTEFNQkRBX1JVTlRJTUVfQVBJOiBgbG9jYWxob3N0OiR7cG9ydH1gLFxuICAgICAgX0hBTkRMRVI6IGZuLmxvY2FsSGFuZGxlcixcbiAgICAgIExBTUJEQV9UQVNLX1JPT1Q6IHByb2plY3RSb290LFxuICAgICAgLy8gTWVtb3J5IGxpbWl0IGZvciBjb250ZXh0IG9iamVjdFxuICAgICAgQVdTX0xBTUJEQV9GVU5DVElPTl9NRU1PUllfU0laRTogU3RyaW5nKGZuLm1lbW9yeU1CKSxcbiAgICB9XG5cbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgYFtMb2NhbF0gU3RhcnRpbmcgTm9kZS5qcyB3b3JrZXIgZm9yICR7Zm4uZnVuY3Rpb25OYW1lfSBvbiBwb3J0ICR7cG9ydH1gLFxuICAgIClcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKGBbTG9jYWxdIEhhbmRsZXI6ICR7Zm4ubG9jYWxIYW5kbGVyfWApXG5cbiAgICAvLyBTcGF3biBCdW4gd2l0aCAtLXdhdGNoIHRvIGF1dG9tYXRpY2FsbHkgcmVzdGFydCB3aGVuIGhhbmRsZXIgZmlsZXMgY2hhbmdlXG4gICAgLy8gVGhpcyBlbmFibGVzIGhvdC1yZWxvYWQgd2l0aG91dCBuZWVkaW5nIHRvIHJlc3RhcnQgdGhlIGRhZW1vblxuICAgIC8vIFVzZSBhYnNvbHV0ZSBidW4gcGF0aCBmb3IgcHVyZSBlbnYgaXNvbGF0aW9uIChubyBQQVRIIGRlcGVuZGVuY3kpXG4gICAgY29uc3Qgd29ya2VyUHJvY2VzcyA9IHNwYXduKGJ1blBhdGgsIFtcIi0td2F0Y2hcIiwgcnVudGltZVdyYXBwZXJQYXRoXSwge1xuICAgICAgY3dkOiBwcm9qZWN0Um9vdCxcbiAgICAgIGVudjogd29ya2VyRW52LFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG5cbiAgICAvLyBQYXR0ZXJuIHRvIHBhcnNlIExhbWJkYSBsb2cgZm9ybWF0OiBUSU1FU1RBTVBcXHRSRVFVRVNUX0lEXFx0TEVWRUxcXHRNRVNTQUdFXG4gICAgLy8gTGFtYmRhIHVzZXMgdGFicyBiZXR3ZWVuIGZpZWxkcy4gQ2FwdHVyZXM6IFsxXSA9IHJlcXVlc3QgSUQsIFsyXSA9IGxldmVsICsgbWVzc2FnZVxuICAgIGNvbnN0IGxhbWJkYUxvZ1BhdHRlcm4gPVxuICAgICAgL14oXFxkezR9LVxcZHsyfS1cXGR7Mn1UW1xcZDouXStaKVtcXHRcXHNdKyhbMC05YS1mLV17MzZ9KVtcXHRcXHNdKyguKikkL2lcblxuICAgIC8vIEhlbHBlciB0byBmb3JtYXQgbG9nIGxpbmUgd2l0aCBpbnZvY2F0aW9uIHByZWZpeFxuICAgIGNvbnN0IGZvcm1hdExpbmUgPSAoXG4gICAgICByYXdMaW5lOiBzdHJpbmcsXG4gICAgKTogeyBwcmVmaXg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0gPT4ge1xuICAgICAgLy8gU3RyaXAgY2FycmlhZ2UgcmV0dXJucyB0aGF0IGNhbiBjYXVzZSB0ZXJtaW5hbCBjb3JydXB0aW9uXG4gICAgICBjb25zdCBsaW5lID0gcmF3TGluZS5yZXBsYWNlKC9cXHIvZywgXCJcIilcbiAgICAgIGNvbnN0IG1hdGNoID0gbGFtYmRhTG9nUGF0dGVybi5leGVjKGxpbmUpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkID0gbWF0Y2hbMl1cbiAgICAgICAgY29uc3QgY3R4ID0gaW52b2NhdGlvbkNvbnRleHRzLmdldChyZXF1ZXN0SWQpXG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAvLyBTdHJpcCB0aW1lc3RhbXAgYW5kIHJlcXVlc3QgSUQsIGtlZXAganVzdCBMRVZFTCBNRVNTQUdFXG4gICAgICAgICAgcmV0dXJuIHsgcHJlZml4OiBgWyR7Y3R4Lm51bX1dYCwgY29udGVudDogbWF0Y2hbM10gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjayB0byB3b3JrZXIncyBjdXJyZW50IHJlcXVlc3QgSUQgZm9yIGxvZ3Mgd2l0aG91dCByZXF1ZXN0IElEXG4gICAgICBpZiAod29ya2VyLmN1cnJlbnRSZXF1ZXN0SWQpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gaW52b2NhdGlvbkNvbnRleHRzLmdldCh3b3JrZXIuY3VycmVudFJlcXVlc3RJZClcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgIHJldHVybiB7IHByZWZpeDogYFske2N0eC5udW19XWAsIGNvbnRlbnQ6IGxpbmUgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBwcmVmaXg6IFwiW1dvcmtlcl1cIiwgY29udGVudDogbGluZSB9XG4gICAgfVxuXG4gICAgLy8gRm9yd2FyZCBzdGRvdXQvc3RkZXJyIHdpdGggaW52b2NhdGlvbiBudW1iZXIgcHJlZml4XG4gICAgd29ya2VyUHJvY2Vzcy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBsaW5lcyA9IGRhdGEudG9TdHJpbmcoKS50cmltKCkuc3BsaXQoXCJcXG5cIilcbiAgICAgIGZvciAoY29uc3QgcmF3TGluZSBvZiBsaW5lcykge1xuICAgICAgICBjb25zdCB7IHByZWZpeCwgY29udGVudCB9ID0gZm9ybWF0TGluZShyYXdMaW5lKVxuICAgICAgICBjb25zb2xlLmxvZyhgJHtwcmVmaXh9ICR7Y29udGVudH1gKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB3b3JrZXJQcm9jZXNzLnN0ZGVycj8ub24oXCJkYXRhXCIsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IGxpbmVzID0gZGF0YS50b1N0cmluZygpLnRyaW0oKS5zcGxpdChcIlxcblwiKVxuICAgICAgZm9yIChjb25zdCByYXdMaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGNvbnN0IHsgcHJlZml4LCBjb250ZW50IH0gPSBmb3JtYXRMaW5lKHJhd0xpbmUpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7cHJlZml4fSAke2NvbnRlbnR9YClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgd29ya2VyUHJvY2Vzcy5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgIEVmZmVjdC5ydW5TeW5jKFxuICAgICAgICBFZmZlY3QubG9nRXJyb3IoYFdvcmtlciBlcnJvcjogJHtlcnIubWVzc2FnZX1gKS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5hbm5vdGF0ZUxvZ3MoXCJmdW5jdGlvblwiLCBmbi5mdW5jdGlvbk5hbWUpLFxuICAgICAgICApLFxuICAgICAgKVxuICAgIH0pXG5cbiAgICB3b3JrZXJQcm9jZXNzLm9uKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgIEVmZmVjdC5ydW5TeW5jKFxuICAgICAgICBFZmZlY3QubG9nSW5mbyhgV29ya2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApLnBpcGUoXG4gICAgICAgICAgRWZmZWN0LmFubm90YXRlTG9ncyhcImZ1bmN0aW9uXCIsIGZuLmZ1bmN0aW9uTmFtZSksXG4gICAgICAgICksXG4gICAgICApXG4gICAgfSlcblxuICAgIHJldHVybiB3b3JrZXJQcm9jZXNzXG4gIH0pXG5cbi8qKlxuICogUHJvY2VzcyByZXNwb25zZXMgZnJvbSBhIE5vZGUuanMgd29ya2VyIGFuZCBkaXNwYXRjaCB0byB3YWl0aW5nIGNhbGxlcnMuXG4gKi9cbmNvbnN0IHByb2Nlc3NXb3JrZXJSZXNwb25zZXMgPSAoXG4gIHdvcmtlcjogTm9kZWpzV29ya2VyLFxuICBjbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIG1ha2VBcHBTeW5jQ2xpZW50PixcbiAgaW52b2NhdGlvbkNvbnRleHRzOiBNYXA8c3RyaW5nLCBJbnZvY2F0aW9uQ29udGV4dD4sXG4pID0+XG4gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCByZXNwb25zZUNoYW5uZWwgPSBidWlsZENoYW5uZWxOYW1lLnJlc3BvbnNlKHdvcmtlci5mbi5mdW5jdGlvbk5hbWUpXG5cbiAgICAvLyBDb250aW51b3VzbHkgcHJvY2VzcyByZXNwb25zZXMgZnJvbSB0aGUgd29ya2VyXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkKiB3YWl0Rm9yUmVzcG9uc2Uod29ya2VyLnJ1bnRpbWVTdGF0ZSlcblxuICAgICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZU1lc3NhZ2VcbiAgICAgIGlmIChpc0xhbWJkYVJlc3BvbnNlKHJlc3VsdCkpIHtcbiAgICAgICAgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgdHlwZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVzdWx0LnJlcXVlc3RJZCxcbiAgICAgICAgICByZXN1bHQ6IHJlc3VsdC5ib2R5LFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzTGFtYmRhRXJyb3IocmVzdWx0KSkge1xuICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICB0eXBlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgcmVxdWVzdElkOiByZXN1bHQucmVxdWVzdElkLFxuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICBlcnJvclR5cGU6IHJlc3VsdC5lcnJvclR5cGUsXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2U6IHJlc3VsdC5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFja1RyYWNlOiByZXN1bHQuc3RhY2tUcmFjZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzTGFtYmRhSW5pdEVycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICBgW0xvY2FsXSBXb3JrZXIgaW5pdCBlcnJvcjogJHtyZXN1bHQuZXJyb3JUeXBlfTogJHtyZXN1bHQuZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFNlbmQgcmVzcG9uc2UgYmFjayB2aWEgQXBwU3luY1xuICAgICAgeWllbGQqIGNsaWVudC5wdWJsaXNoUmVzcG9uc2UocmVzcG9uc2VDaGFubmVsLCByZXNwb25zZSlcbiAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFtMb2NhbF0gU2VudCByZXNwb25zZSBmb3IgJHtyZXNwb25zZS5yZXF1ZXN0SWR9YClcblxuICAgICAgLy8gUHJpbnQgZW5kIG1hcmtlciB3aXRoIHRpbWluZ1xuICAgICAgY29uc3QgY3R4ID0gaW52b2NhdGlvbkNvbnRleHRzLmdldChyZXNwb25zZS5yZXF1ZXN0SWQpXG4gICAgICBpZiAoY3R4KSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBEYXRlLm5vdygpIC0gY3R4LnN0YXJ0XG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFske2N0eC5udW19XSBcXHUyNTE0XFx1MjUwMFxcdTI1MDAgXFx1MjcxNyAke3Jlc3BvbnNlLmVycm9yLmVycm9yVHlwZX06ICR7cmVzcG9uc2UuZXJyb3IuZXJyb3JNZXNzYWdlfSAoJHtkdXJhdGlvbk1zfW1zKSBcXHUyNTAwXFx1MjUwMGAsXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFske2N0eC5udW19XSBcXHUyNTE0XFx1MjUwMFxcdTI1MDAgXFx1MjcxMyBEb25lICgke2R1cmF0aW9uTXN9bXMpIFxcdTI1MDBcXHUyNTAwYCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaW52b2NhdGlvbkNvbnRleHRzLmRlbGV0ZShyZXNwb25zZS5yZXF1ZXN0SWQpXG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGN1cnJlbnQgcmVxdWVzdCBJRCB0byBwcmV2ZW50IHN0YWxlIHByZWZpeGVzXG4gICAgICB3b3JrZXIuY3VycmVudFJlcXVlc3RJZCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSlcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gY29tcGxldGVseSBmaWx0ZXIgb3V0IGZyb20gaW52b2NhdGlvbiBlbnYuXG4gKiBUaGVzZSBhcmUgbm90IHJlbGV2YW50IGZvciBsb2NhbCBleGVjdXRpb24uXG4gKi9cbmNvbnN0IEVOVl9WQVJTX1RPX0ZJTFRFUiA9IG5ldyBTZXQoW1wiQVdTX0xBTUJEQV9MT0dfU1RSRUFNX05BTUVcIl0pXG5cbi8qKlxuICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGlnbm9yZSB3aGVuIGNhbGN1bGF0aW5nIGlmIGVudiBoYXMgY2hhbmdlZC5cbiAqIFRoZXNlIGNoYW5nZSBmcmVxdWVudGx5IGJ1dCBkb24ndCByZXF1aXJlIGEgY29udGFpbmVyIHJlc3RhcnQuXG4gKlxuICogVE9ETzogQVdTIGNyZWRlbnRpYWxzIChBQ0NFU1NfS0VZX0lELCBTRUNSRVRfQUNDRVNTX0tFWSwgU0VTU0lPTl9UT0tFTilcbiAqIGRvIGV4cGlyZSBhbmQgd2lsbCBuZWVkIHJlZnJlc2hpbmcuIEZvciBub3cgd2UgaWdub3JlIHRoZW0gdG8gYXZvaWRcbiAqIHVubmVjZXNzYXJ5IHJlc3RhcnRzLCBidXQgd2Ugc2hvdWxkIGltcGxlbWVudCBjcmVkZW50aWFsIHJlZnJlc2ggbG9naWNcbiAqIHRoYXQgdXBkYXRlcyB0aGUgY29udGFpbmVyJ3MgY3JlZGVudGlhbHMgd2l0aG91dCBhIGZ1bGwgcmVzdGFydC5cbiAqL1xuY29uc3QgRU5WX1ZBUlNfVE9fSUdOT1JFX0lOX0RJRkYgPSBuZXcgU2V0KFtcbiAgXCJBV1NfQUNDRVNTX0tFWV9JRFwiLFxuICBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICBcIkFXU19TRVNTSU9OX1RPS0VOXCIsXG5dKVxuXG4vKipcbiAqIEZpbHRlciBvdXQgaXJyZWxldmFudCBlbnYgdmFycyBmcm9tIGludm9jYXRpb24gZW52aXJvbm1lbnQuXG4gKi9cbmNvbnN0IHNhbml0aXplSW52b2NhdGlvbkVudiA9IChcbiAgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVudikpIHtcbiAgICBpZiAoIUVOVl9WQVJTX1RPX0ZJTFRFUi5oYXMoa2V5KSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQ29tcHV0ZSB3aGljaCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdHdvIGVudiBvYmplY3RzLlxuICogUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMuXG4gKiBJZ25vcmVzIGVudiB2YXJzIGluIEVOVl9WQVJTX1RPX0lHTk9SRV9JTl9ESUZGLlxuICovXG5jb25zdCBnZXRFbnZEaWZmID0gKFxuICBvbGRFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG5ld0VudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNoYW5nZXM6IHN0cmluZ1tdID0gW11cblxuICAvLyBDaGVjayBmb3IgYWRkZWQgb3IgbW9kaWZpZWQga2V5c1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZXdFbnYpKSB7XG4gICAgaWYgKEVOVl9WQVJTX1RPX0lHTk9SRV9JTl9ESUZGLmhhcyhrZXkpKSBjb250aW51ZVxuICAgIGlmICghKGtleSBpbiBvbGRFbnYpKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goYCske2tleX1gKVxuICAgIH0gZWxzZSBpZiAob2xkRW52W2tleV0gIT09IG5ld0VudltrZXldKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goYH4ke2tleX1gKVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGZvciByZW1vdmVkIGtleXNcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2xkRW52KSkge1xuICAgIGlmIChFTlZfVkFSU19UT19JR05PUkVfSU5fRElGRi5oYXMoa2V5KSkgY29udGludWVcbiAgICBpZiAoIShrZXkgaW4gbmV3RW52KSkge1xuICAgICAgY2hhbmdlcy5wdXNoKGAtJHtrZXl9YClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hhbmdlcy5qb2luKFwiLCBcIilcbn1cblxuLyoqXG4gKiBFbnN1cmUgYSBOb2RlLmpzIHdvcmtlciBpcyBzdGFydGVkIGZvciBhIGZ1bmN0aW9uLlxuICogSWYgdGhlIHdvcmtlciBhbHJlYWR5IGV4aXN0cywgcmV0dXJuIGl0LlxuICogT3RoZXJ3aXNlLCBjcmVhdGUgdGhlIFJ1bnRpbWUgQVBJIHNlcnZlciwgYWRkIHRvIHdvcmtlcnMgbWFwLCBhbmQgc3RhcnQgdGhlIHdvcmtlci5cbiAqL1xuY29uc3QgZW5zdXJlV29ya2VyU3RhcnRlZCA9IChcbiAgZm46IERpc2NvdmVyZWRGdW5jdGlvbixcbiAgaW52b2NhdGlvbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgd29ya2Vyc1JlZjogUmVmLlJlZjxNYXA8c3RyaW5nLCBOb2RlanNXb3JrZXI+PixcbiAgc2VydmVyU2NvcGU6IFNjb3BlLlNjb3BlLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBhcHBTeW5jQ2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBtYWtlQXBwU3luY0NsaWVudD4sXG4gIGludm9jYXRpb25Db250ZXh0czogTWFwPHN0cmluZywgSW52b2NhdGlvbkNvbnRleHQ+LFxuKTogRWZmZWN0LkVmZmVjdDxOb2RlanNXb3JrZXIsIEVycm9yPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgLy8gQ2hlY2sgaWYgd29ya2VyIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgY3VycmVudFdvcmtlcnMgPSB5aWVsZCogUmVmLmdldCh3b3JrZXJzUmVmKVxuICAgIGNvbnN0IGV4aXN0aW5nID0gY3VycmVudFdvcmtlcnMuZ2V0KGZuLmZ1bmN0aW9uTmFtZSlcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIC8vIENoZWNrIGlmIGVudiB2YXJzIGhhdmUgY2hhbmdlZCAoZS5nLiwgYWZ0ZXIgQ0RLIHJlZGVwbG95KVxuICAgICAgY29uc3QgZW52RGlmZiA9IGdldEVudkRpZmYoZXhpc3RpbmcuZW52LCBpbnZvY2F0aW9uRW52KVxuICAgICAgaWYgKGVudkRpZmYpIHtcbiAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgICAgIGBbTG9jYWxdIEVudmlyb25tZW50IGNoYW5nZWQgZm9yICR7Zm4uZnVuY3Rpb25OYW1lfSwgcmVzdGFydGluZyB3b3JrZXIuLi4gKCR7ZW52RGlmZn0pYCxcbiAgICAgICAgKVxuICAgICAgICAvLyBLaWxsIHRoZSBvbGQgd29ya2VyXG4gICAgICAgIHlpZWxkKiBFZmZlY3QudHJ5KCgpID0+IGV4aXN0aW5nLndvcmtlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIikpLnBpcGUoXG4gICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKCgpID0+IEVmZmVjdC52b2lkKSxcbiAgICAgICAgKVxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBtYXAgc28gd2UgY3JlYXRlIGEgbmV3IG9uZSBiZWxvd1xuICAgICAgICBjdXJyZW50V29ya2Vycy5kZWxldGUoZm4uZnVuY3Rpb25OYW1lKVxuICAgICAgICB5aWVsZCogUmVmLnNldCh3b3JrZXJzUmVmLCBjdXJyZW50V29ya2VycylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdvcmtlciBkb2Vzbid0IGV4aXN0IC0gc3RhcnQgaXQgbGF6aWx5XG4gICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgIGBbTG9jYWxdIFN0YXJ0aW5nIE5vZGUuanMgd29ya2VyIGZvciBmaXJzdCBpbnZvY2F0aW9uIG9mICR7Zm4uZnVuY3Rpb25OYW1lfS4uLmAsXG4gICAgKVxuXG4gICAgLy8gQ3JlYXRlIFJ1bnRpbWUgQVBJIHNlcnZlciBvbiBlcGhlbWVyYWwgcG9ydFxuICAgIGNvbnN0IHsgcG9ydCwgc3RhdGU6IHJ1bnRpbWVTdGF0ZSB9ID0geWllbGQqIHN0YXJ0UnVudGltZUFwaVNlcnZlcih7XG4gICAgICBmdW5jdGlvbk1ldGFkYXRhOiB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogZm4uZnVuY3Rpb25OYW1lLFxuICAgICAgICBmdW5jdGlvblZlcnNpb246IFwiJExBVEVTVFwiLFxuICAgICAgICBoYW5kbGVyOiBmbi5sb2NhbEhhbmRsZXIsXG4gICAgICB9LFxuICAgIH0pLnBpcGUoRWZmZWN0LnByb3ZpZGVTZXJ2aWNlKFNjb3BlLlNjb3BlLCBzZXJ2ZXJTY29wZSkpXG5cbiAgICAvLyBDcmVhdGUgd29ya2VyIG9iamVjdCAod2l0aG91dCBwcm9jZXNzIGluaXRpYWxseSAtIHdpbGwgYmUgc2V0IGFmdGVyIHN0YXJ0KVxuICAgIC8vIFdlIGFkZCB0byBtYXAgQkVGT1JFIHN0YXJ0aW5nIHdvcmtlciB0byBoYW5kbGUgY29uY3VycmVudCBpbnZvY2F0aW9uc1xuICAgIGNvbnN0IHdvcmtlcjogTm9kZWpzV29ya2VyID0ge1xuICAgICAgZm4sXG4gICAgICBydW50aW1lU3RhdGUsXG4gICAgICBwb3J0LFxuICAgICAgd29ya2VyUHJvY2VzczogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgQ2hpbGRQcm9jZXNzLCAvLyBXaWxsIGJlIHNldCBzaG9ydGx5XG4gICAgICBlbnY6IGludm9jYXRpb25FbnYsXG4gICAgICBjdXJyZW50UmVxdWVzdElkOiB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgLy8gQWRkIHRvIG1hcCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uc1xuICAgIGN1cnJlbnRXb3JrZXJzLnNldChmbi5mdW5jdGlvbk5hbWUsIHdvcmtlcilcbiAgICB5aWVsZCogUmVmLnNldCh3b3JrZXJzUmVmLCBjdXJyZW50V29ya2VycylcblxuICAgIC8vIFN0YXJ0IHRoZSB3b3JrZXIgcHJvY2VzcyAtIHJlbW92ZSBmcm9tIG1hcCBvbiBmYWlsdXJlXG4gICAgY29uc3Qgd29ya2VyUHJvY2VzcyA9IHlpZWxkKiBzdGFydE5vZGVqc1dvcmtlcihcbiAgICAgIGZuLFxuICAgICAgcG9ydCxcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgaW52b2NhdGlvbkVudixcbiAgICAgIGludm9jYXRpb25Db250ZXh0cyxcbiAgICAgIHdvcmtlcixcbiAgICApLnBpcGUoXG4gICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGJyb2tlbiB3b3JrZXIgZnJvbSBtYXAgb24gZmFpbHVyZVxuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRXJyb3IoXG4gICAgICAgICAgICBgW0xvY2FsXSBGYWlsZWQgdG8gc3RhcnQgd29ya2VyIGZvciAke2ZuLmZ1bmN0aW9uTmFtZX06ICR7ZXJyb3J9YCxcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IHlpZWxkKiBSZWYuZ2V0KHdvcmtlcnNSZWYpXG4gICAgICAgICAgY3VycmVudC5kZWxldGUoZm4uZnVuY3Rpb25OYW1lKVxuICAgICAgICAgIHlpZWxkKiBSZWYuc2V0KHdvcmtlcnNSZWYsIGN1cnJlbnQpXG4gICAgICAgICAgcmV0dXJuIHlpZWxkKiBFZmZlY3QuZmFpbChlcnJvcilcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcblxuICAgIC8vIFVwZGF0ZSB3b3JrZXIgd2l0aCB0aGUgcHJvY2Vzc1xuICAgIHdvcmtlci53b3JrZXJQcm9jZXNzID0gd29ya2VyUHJvY2Vzc1xuXG4gICAgLy8gU3RhcnQgcHJvY2Vzc2luZyByZXNwb25zZXMgaW4gdGhlIGJhY2tncm91bmRcbiAgICBFZmZlY3QucnVuRm9yayhcbiAgICAgIHByb2Nlc3NXb3JrZXJSZXNwb25zZXMod29ya2VyLCBhcHBTeW5jQ2xpZW50LCBpbnZvY2F0aW9uQ29udGV4dHMpLFxuICAgIClcblxuICAgIHJldHVybiB3b3JrZXJcbiAgfSlcblxuLyoqXG4gKiBFbnN1cmUgYSBjb250YWluZXIgaXMgc3RhcnRlZCBmb3IgYSBmdW5jdGlvbi5cbiAqIElmIHRoZSBjb250YWluZXIgYWxyZWFkeSBleGlzdHMsIHJldHVybiBpdC5cbiAqIElmIHRoZSBlbnYgdmFycyBoYXZlIGNoYW5nZWQsIHJlc3RhcnQgdGhlIGNvbnRhaW5lci5cbiAqIE90aGVyd2lzZSwgY3JlYXRlIHRoZSBSdW50aW1lIEFQSSBzZXJ2ZXIsIGFkZCB0byBjb250YWluZXJzIG1hcCwgYW5kIHN0YXJ0IHRoZSBjb250YWluZXIuXG4gKi9cbmNvbnN0IGVuc3VyZUNvbnRhaW5lclN0YXJ0ZWQgPSAoXG4gIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb24sXG4gIGludm9jYXRpb25FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGNvbnRhaW5lcnNSZWY6IFJlZi5SZWY8TWFwPHN0cmluZywgRnVuY3Rpb25Db250YWluZXI+PixcbiAgc2VydmVyU2NvcGU6IFNjb3BlLlNjb3BlLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBpZGxlVGltZW91dE1zOiBudW1iZXIsXG4gIHBvbGxUaW1lb3V0TXM6IG51bWJlcixcbiAgYXBwU3luY0NsaWVudDogUmV0dXJuVHlwZTx0eXBlb2YgbWFrZUFwcFN5bmNDbGllbnQ+LFxuICBpbnZvY2F0aW9uQ29udGV4dHM6IE1hcDxzdHJpbmcsIEludm9jYXRpb25Db250ZXh0Pixcbik6IEVmZmVjdC5FZmZlY3Q8RnVuY3Rpb25Db250YWluZXIsIEVycm9yLCBDb21tYW5kRXhlY3V0b3IuQ29tbWFuZEV4ZWN1dG9yPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgLy8gQ2hlY2sgaWYgY29udGFpbmVyIGFscmVhZHkgZXhpc3RzXG4gICAgY29uc3QgY3VycmVudENvbnRhaW5lcnMgPSB5aWVsZCogUmVmLmdldChjb250YWluZXJzUmVmKVxuICAgIGNvbnN0IGV4aXN0aW5nID0gY3VycmVudENvbnRhaW5lcnMuZ2V0KGZuLmZ1bmN0aW9uTmFtZSlcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIC8vIENoZWNrIGlmIGVudiB2YXJzIGhhdmUgY2hhbmdlZCAoZS5nLiwgYWZ0ZXIgQ0RLIHJlZGVwbG95KVxuICAgICAgY29uc3QgZW52RGlmZiA9IGdldEVudkRpZmYoZXhpc3RpbmcuZW52LCBpbnZvY2F0aW9uRW52KVxuICAgICAgaWYgKGVudkRpZmYpIHtcbiAgICAgICAgLy8gSU1QT1JUQU5UOiBVcGRhdGUgZW52IGltbWVkaWF0ZWx5IChiZWZvcmUgYW55IHlpZWxkcykgdG8gcHJldmVudFxuICAgICAgICAvLyBvdGhlciBjb25jdXJyZW50IGludm9jYXRpb25zIGZyb20gYWxzbyBkZXRlY3RpbmcgdGhlIGNoYW5nZSBhbmRcbiAgICAgICAgLy8gdHJpZ2dlcmluZyBkdXBsaWNhdGUgcmVzdGFydHNcbiAgICAgICAgZXhpc3RpbmcuZW52ID0gaW52b2NhdGlvbkVudlxuXG4gICAgICAgIC8vIElmIGFscmVhZHkgcmVzdGFydGluZyBmb3IgZW52IGNoYW5nZSwganVzdCByZXR1cm4gdGhlIGV4aXN0aW5nIGNvbnRhaW5lclxuICAgICAgICAvLyBUaGUgaW52b2NhdGlvbiB3aWxsIGJlIHF1ZXVlZCBhbmQgcGlja2VkIHVwIGJ5IHRoZSBuZXcgY29udGFpbmVyXG4gICAgICAgIGlmIChleGlzdGluZy5pc1JlYnVpbGRpbmcpIHtcbiAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgICAgICAgYFtMb2NhbF0gRW52aXJvbm1lbnQgY2hhbmdlIHJlc3RhcnQgYWxyZWFkeSBpbiBwcm9ncmVzcyBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9LCBxdWV1ZWluZyBpbnZvY2F0aW9uYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nXG4gICAgICAgIH1cblxuICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXG4gICAgICAgICAgYFtMb2NhbF0gRW52aXJvbm1lbnQgY2hhbmdlZCBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9LCByZXN0YXJ0aW5nIGNvbnRhaW5lci4uLiAoJHtlbnZEaWZmfSlgLFxuICAgICAgICApXG4gICAgICAgIGV4aXN0aW5nLmlzUmVidWlsZGluZyA9IHRydWVcblxuICAgICAgICAvLyBTdG9wIHRoZSBEb2NrZXIgY29udGFpbmVyIGZvcmNlZnVsbHkgKHRpbWVvdXQ9MXMpXG4gICAgICAgIC8vIFRoaXMgc2VuZHMgU0lHVEVSTSBhbmQgdGhlbiBTSUdLSUxMIGFmdGVyIDEgc2Vjb25kXG4gICAgICAgIC8vIFdlIG11c3QgZG8gdGhpcyBCRUZPUkUgaW50ZXJydXB0aW5nIHRoZSBmaWJlciwgYmVjYXVzZSB0aGUgZmliZXIgaXNcbiAgICAgICAgLy8gYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgZG9ja2VyIHByb2Nlc3MgdG8gZXhpdFxuICAgICAgICB5aWVsZCogRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgIGNvbnN0IGRvY2tlciA9IHlpZWxkKiBEb2NrZXJcbiAgICAgICAgICB5aWVsZCogZG9ja2VyLnN0b3AoZXhpc3RpbmcuY29udGFpbmVyTmFtZSwgMSkucGlwZShFZmZlY3Quc2NvcGVkKVxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5wcm92aWRlKERvY2tlckxpdmUpLFxuICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoZXJyb3IpID0+XG4gICAgICAgICAgICBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICAgIGBbTG9jYWxdIEVycm9yIHN0b3BwaW5nIGNvbnRhaW5lciAobWF5IGFscmVhZHkgYmUgc3RvcHBlZCk6ICR7ZXJyb3J9YCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIE5vdyBpbnRlcnJ1cHQgdGhlIGZpYmVyIChpdCBzaG91bGQgY29tcGxldGUgcXVpY2tseSBzaW5jZSBjb250YWluZXIgc3RvcHBlZClcbiAgICAgICAgeWllbGQqIEZpYmVyLmludGVycnVwdChleGlzdGluZy5jb250YWluZXJGaWJlcikucGlwZShcbiAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnZvaWQpLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gUmVzdGFydCB0aGUgY29udGFpbmVyIHdpdGggbmV3IGVudmlyb25tZW50LCByZXVzaW5nIGV4aXN0aW5nIFJ1bnRpbWVBUElcbiAgICAgICAgY29uc3QgbmV3RmliZXIgPSB5aWVsZCogc3RhcnRGdW5jdGlvbkNvbnRhaW5lcihcbiAgICAgICAgICBmbixcbiAgICAgICAgICBleGlzdGluZy5wb3J0LFxuICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgIGludm9jYXRpb25FbnYsXG4gICAgICAgICAgaW52b2NhdGlvbkNvbnRleHRzLFxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcikgPT5cbiAgICAgICAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICBgW0xvY2FsXSBGYWlsZWQgdG8gcmVzdGFydCBjb250YWluZXIgZm9yICR7Zm4uZnVuY3Rpb25OYW1lfTogJHtlcnJvcn1gLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGV4aXN0aW5nLmlzUmVidWlsZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIHJldHVybiB5aWVsZCogRWZmZWN0LmZhaWwoZXJyb3IpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gVXBkYXRlIGNvbnRhaW5lciB3aXRoIG5ldyBmaWJlclxuICAgICAgICBleGlzdGluZy5jb250YWluZXJGaWJlciA9IG5ld0ZpYmVyXG4gICAgICAgIGV4aXN0aW5nLmlzUmVidWlsZGluZyA9IGZhbHNlXG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb250YWluZXIgZG9lc24ndCBleGlzdCAtIHN0YXJ0IGl0IGxhemlseVxuICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcbiAgICAgIGBbTG9jYWxdIFN0YXJ0aW5nIGNvbnRhaW5lciBmb3IgZmlyc3QgaW52b2NhdGlvbiBvZiAke2ZuLmZ1bmN0aW9uTmFtZX0uLi5gLFxuICAgIClcblxuICAgIC8vIENyZWF0ZSBSdW50aW1lIEFQSSBzZXJ2ZXIgb24gZXBoZW1lcmFsIHBvcnRcbiAgICAvLyBVc2UgcG9sbCB0aW1lb3V0IHRoYXQncyBzaG9ydGVyIHRoYW4gaWRsZSB0aW1lb3V0IHNvIGNvbnRhaW5lciBleGl0cyBuYXR1cmFsbHlcbiAgICBjb25zdCB7IHBvcnQsIHN0YXRlOiBydW50aW1lU3RhdGUgfSA9IHlpZWxkKiBzdGFydFJ1bnRpbWVBcGlTZXJ2ZXIoe1xuICAgICAgcG9sbFRpbWVvdXRNcyxcbiAgICAgIGZ1bmN0aW9uTWV0YWRhdGE6IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBmbi5mdW5jdGlvbk5hbWUsXG4gICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogXCIkTEFURVNUXCIsXG4gICAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgfSxcbiAgICB9KS5waXBlKEVmZmVjdC5wcm92aWRlU2VydmljZShTY29wZS5TY29wZSwgc2VydmVyU2NvcGUpKVxuXG4gICAgLy8gR2VuZXJhdGUgY29udGFpbmVyIG5hbWUgYW5kIGltYWdlIG5hbWVcbiAgICBjb25zdCBjb250YWluZXJOYW1lID0gYGxhbWJkYS0ke2ZuLmZ1bmN0aW9uTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCItXCIpfWBcbiAgICBjb25zdCBpbWFnZU5hbWUgPSBgbGl2ZS1sYW1iZGEtJHtmbi5mdW5jdGlvbk5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOS1dL2csIFwiLVwiKX1gXG5cbiAgICAvLyBDcmVhdGUgY29udGFpbmVyIG9iamVjdCAod2l0aG91dCBmaWJlciBpbml0aWFsbHkgLSB3aWxsIGJlIHNldCBhZnRlciBzdGFydClcbiAgICAvLyBXZSBhZGQgdG8gbWFwIEJFRk9SRSBzdGFydGluZyBjb250YWluZXIgdG8gaGFuZGxlIGNvbmN1cnJlbnQgaW52b2NhdGlvbnNcbiAgICBjb25zdCBjb250YWluZXI6IEZ1bmN0aW9uQ29udGFpbmVyID0ge1xuICAgICAgZm4sXG4gICAgICBydW50aW1lU3RhdGUsXG4gICAgICBwb3J0LFxuICAgICAgY29udGFpbmVyRmliZXI6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIEZpYmVyLlJ1bnRpbWVGaWJlcjx2b2lkLCBFcnJvcj4sIC8vIFdpbGwgYmUgc2V0IHNob3J0bHlcbiAgICAgIGNvbnRhaW5lck5hbWUsXG4gICAgICBpbWFnZU5hbWUsXG4gICAgICBpc1JlYnVpbGRpbmc6IGZhbHNlLFxuICAgICAgcGVuZGluZ1Jlc3BvbnNlczogbmV3IE1hcCgpLFxuICAgICAgaWRsZVRpbWVyRmliZXI6IG51bGwsXG4gICAgICBlbnY6IGludm9jYXRpb25FbnYsXG4gICAgfVxuXG4gICAgLy8gQWRkIHRvIG1hcCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uc1xuICAgIGN1cnJlbnRDb250YWluZXJzLnNldChmbi5mdW5jdGlvbk5hbWUsIGNvbnRhaW5lcilcbiAgICB5aWVsZCogUmVmLnNldChjb250YWluZXJzUmVmLCBjdXJyZW50Q29udGFpbmVycylcblxuICAgIC8vIEJ1aWxkIGFuZCBzdGFydCB0aGUgY29udGFpbmVyIC0gcmVtb3ZlIGZyb20gbWFwIG9uIGZhaWx1cmVcbiAgICBjb25zdCBjb250YWluZXJGaWJlciA9IHlpZWxkKiBzdGFydEZ1bmN0aW9uQ29udGFpbmVyKFxuICAgICAgZm4sXG4gICAgICBwb3J0LFxuICAgICAgcHJvamVjdFJvb3QsXG4gICAgICBpbnZvY2F0aW9uRW52LFxuICAgICAgaW52b2NhdGlvbkNvbnRleHRzLFxuICAgICkucGlwZShcbiAgICAgIEVmZmVjdC5jYXRjaEFsbCgoZXJyb3IpID0+XG4gICAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgYnJva2VuIGNvbnRhaW5lciBmcm9tIG1hcCBvbiBmYWlsdXJlXG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICAgIGBbTG9jYWxdIEZhaWxlZCB0byBzdGFydCBjb250YWluZXIgZm9yICR7Zm4uZnVuY3Rpb25OYW1lfTogJHtlcnJvcn1gLFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0geWllbGQqIFJlZi5nZXQoY29udGFpbmVyc1JlZilcbiAgICAgICAgICBjdXJyZW50LmRlbGV0ZShmbi5mdW5jdGlvbk5hbWUpXG4gICAgICAgICAgeWllbGQqIFJlZi5zZXQoY29udGFpbmVyc1JlZiwgY3VycmVudClcbiAgICAgICAgICByZXR1cm4geWllbGQqIEVmZmVjdC5mYWlsKGVycm9yKVxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKVxuXG4gICAgLy8gVXBkYXRlIGNvbnRhaW5lciB3aXRoIHRoZSBmaWJlclxuICAgIGNvbnRhaW5lci5jb250YWluZXJGaWJlciA9IGNvbnRhaW5lckZpYmVyXG5cbiAgICAvLyBTdGFydCBwcm9jZXNzaW5nIHJlc3BvbnNlcyBpbiB0aGUgYmFja2dyb3VuZCB1c2luZyBmb3JrRGFlbW9uXG4gICAgeWllbGQqIHByb2Nlc3NDb250YWluZXJSZXNwb25zZXMoXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250YWluZXJzUmVmLFxuICAgICAgaWRsZVRpbWVvdXRNcyxcbiAgICAgIGFwcFN5bmNDbGllbnQsXG4gICAgICBpbnZvY2F0aW9uQ29udGV4dHMsXG4gICAgKS5waXBlKEVmZmVjdC5mb3JrRGFlbW9uKVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lclxuICB9KVxuXG4vKipcbiAqIFJlYnVpbGQgYSBEb2NrZXIgY29udGFpbmVyIGFmdGVyIGZpbGUgY2hhbmdlcy5cbiAqIEludm9jYXRpb25zIGFycml2aW5nIGR1cmluZyByZWJ1aWxkIHdpbGwgYmUgcXVldWVkIGFuZCBwaWNrZWQgdXAgYnkgdGhlIG5ldyBjb250YWluZXIuXG4gKi9cbmNvbnN0IHJlYnVpbGREb2NrZXJDb250YWluZXIgPSAoXG4gIGZ1bmN0aW9uSWQ6IHN0cmluZyxcbiAgY29udGFpbmVyc1JlZjogUmVmLlJlZjxNYXA8c3RyaW5nLCBGdW5jdGlvbkNvbnRhaW5lcj4+LFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuKTogRWZmZWN0LkVmZmVjdDx2b2lkLCBFcnJvciwgQ29tbWFuZEV4ZWN1dG9yLkNvbW1hbmRFeGVjdXRvcj4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSB5aWVsZCogUmVmLmdldChjb250YWluZXJzUmVmKVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lcnMuZ2V0KGZ1bmN0aW9uSWQpXG5cbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgICBgW0xvY2FsXSBDYW5ub3QgcmVidWlsZCAke2Z1bmN0aW9uSWR9IC0gY29udGFpbmVyIG5vdCBmb3VuZGAsXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBNYXJrIGFzIHJlYnVpbGRpbmcgLSBpbnZvY2F0aW9ucyB3aWxsIHN0aWxsIHF1ZXVlIGJ1dCB3ZSBsb2cgaXRcbiAgICBjb250YWluZXIuaXNSZWJ1aWxkaW5nID0gdHJ1ZVxuXG4gICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhgW0xvY2FsXSBSZWJ1aWxkaW5nIGNvbnRhaW5lciBmb3IgJHtmdW5jdGlvbklkfS4uLmApXG5cbiAgICBjb25zdCBkb2NrZXIgPSB5aWVsZCogRG9ja2VyXG5cbiAgICAvLyBTdG9wIHRoZSBleGlzdGluZyBjb250YWluZXIgdXNpbmcgRG9ja2VyIHNlcnZpY2VcbiAgICBjb25zdCBjb250YWluZXJJZCA9IGNvbnRhaW5lci5jb250YWluZXJOYW1lXG4gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgYFtMb2NhbF0gU3RvcHBpbmcgY29udGFpbmVyIHdpdGggbmFtZSBwcmVmaXg6ICR7Y29udGFpbmVySWR9YCxcbiAgICApXG5cbiAgICBjb25zdCBzdG9wQ291bnQgPSB5aWVsZCogZG9ja2VyLnN0b3AoY29udGFpbmVySWQpLnBpcGUoXG4gICAgICBFZmZlY3Quc2NvcGVkLFxuICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcikgPT5cbiAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhgTm90ZTogQ29udGFpbmVyIHN0b3AgaGFkIGlzc3VlOiAke2Vycm9yfWApXG4gICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIClcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKGBbTG9jYWxdIFN0b3BwZWQgJHtzdG9wQ291bnR9IGNvbnRhaW5lcihzKWApXG5cbiAgICAvLyBSZXNvbHZlIHRoZSBjb250ZXh0IHBhdGhcbiAgICBjb25zdCBmbiA9IGNvbnRhaW5lci5mblxuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gZm4uZG9ja2VyQ29udGV4dFBhdGg/LnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICA/IGZuLmRvY2tlckNvbnRleHRQYXRoXG4gICAgICA6IGAke3Byb2plY3RSb290fS8ke2ZuLmRvY2tlckNvbnRleHRQYXRofWBcblxuICAgIC8vIERldGVybWluZSBwbGF0Zm9ybSBmcm9tIGFyY2hpdGVjdHVyZVxuICAgIGNvbnN0IHBsYXRmb3JtID0gZm4uYXJjaGl0ZWN0dXJlID09PSBcImFybTY0XCIgPyBcImxpbnV4L2FybTY0XCIgOiBcImxpbnV4L2FtZDY0XCJcblxuICAgIC8vIFJlYnVpbGQgdGhlIERvY2tlciBpbWFnZVxuICAgIHlpZWxkKiBkb2NrZXJcbiAgICAgIC5idWlsZCh7XG4gICAgICAgIGNvbnRleHRQYXRoLFxuICAgICAgICBpbWFnZU5hbWU6IGNvbnRhaW5lci5pbWFnZU5hbWUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgfSlcbiAgICAgIC5waXBlKEVmZmVjdC5zY29wZWQpXG5cbiAgICAvLyBJbnNwZWN0IHRoZSBpbWFnZSB0byBnZXQgb3JpZ2luYWwgZW50cnlwb2ludC9jbWQgZm9yIGV4dGVuc2lvbiB3cmFwcGVyXG4gICAgY29uc3QgaW1hZ2VDb25maWcgPSB5aWVsZCogZG9ja2VyXG4gICAgICAuaW5zcGVjdChjb250YWluZXIuaW1hZ2VOYW1lKVxuICAgICAgLnBpcGUoRWZmZWN0LnNjb3BlZClcbiAgICBjb25zdCBleHRlbnNpb25XcmFwcGVyID0gYnVpbGRFeHRlbnNpb25XcmFwcGVyQ29tbWFuZChcbiAgICAgIGltYWdlQ29uZmlnLmVudHJ5cG9pbnQsXG4gICAgICBpbWFnZUNvbmZpZy5jbWQsXG4gICAgKVxuXG4gICAgLy8gUmVzdGFydCB0aGUgY29udGFpbmVyIGJ5IHRyaWdnZXJpbmcgY29udGFpbmVyIHN0YXJ0dXBcbiAgICAvLyBUaGUgZXhpc3RpbmcgZmliZXIgd2lsbCBoYXZlIGV4aXRlZCB3aGVuIHdlIHN0b3BwZWQgdGhlIGNvbnRhaW5lclxuICAgIC8vIFdlIG5lZWQgdG8gc3RhcnQgYSBuZXcgb25lXG4gICAgY29uc3QgZG9ja2VyUnVudGltZSA9IHlpZWxkKiBkb2NrZXIuZ2V0UnVudGltZUluZm8oKVxuICAgIGNvbnN0IHJ1bnRpbWVBcGlIb3N0ID0gZG9ja2VyUnVudGltZS5pc0RvY2tlckRlc2t0b3BcbiAgICAgID8gXCJob3N0LmRvY2tlci5pbnRlcm5hbFwiXG4gICAgICA6IFwicnVudGltZS5hcGlcIlxuXG4gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgYFtMb2NhbF0gTmV3IGNvbnRhaW5lciB3aWxsIGNvbm5lY3QgdG8gUnVudGltZSBBUEkgYXQgJHtydW50aW1lQXBpSG9zdH06JHtjb250YWluZXIucG9ydH1gLFxuICAgIClcblxuICAgIGNvbnN0IGNvbnRhaW5lckNvbmZpZyA9IG1ha2VMYW1iZGFDb250YWluZXJDb25maWcoe1xuICAgICAgaW1hZ2VVcmk6IGNvbnRhaW5lci5pbWFnZU5hbWUsXG4gICAgICBydW50aW1lQXBpSG9zdCxcbiAgICAgIHJ1bnRpbWVBcGlQb3J0OiBjb250YWluZXIucG9ydCxcbiAgICAgIGZ1bmN0aW9uTmFtZTogZm4uZnVuY3Rpb25OYW1lLFxuICAgICAgZnVuY3Rpb25WZXJzaW9uOiBcIiRMQVRFU1RcIixcbiAgICAgIG1lbW9yeU1COiBmbi5tZW1vcnlNQixcbiAgICAgIHRpbWVvdXRTZWNvbmRzOiAzNjAwLFxuICAgICAgcGxhdGZvcm0sXG4gICAgfSlcblxuICAgIC8vIEFwcGx5IGV4dGVuc2lvbiB3cmFwcGVyIHRvIHN0YXJ0IGV4dGVuc2lvbnMgYmVmb3JlIHRoZSBhcHBcbiAgICBjb250YWluZXJDb25maWcuZW50cnlwb2ludCA9IGV4dGVuc2lvbldyYXBwZXIuZW50cnlwb2ludFxuICAgIGNvbnRhaW5lckNvbmZpZy5jb21tYW5kID0gZXh0ZW5zaW9uV3JhcHBlci5jb21tYW5kXG5cbiAgICAvLyBTdGFydCB0aGUgbmV3IGNvbnRhaW5lclxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICBgW0xvY2FsXSBTdGFydGluZyBuZXcgY29udGFpbmVyIGZvciAke2Z1bmN0aW9uSWR9Li4uYCxcbiAgICApXG5cbiAgICAvLyBVc2UgRWZmZWN0LmZvcmtEYWVtb24gdG8gcnVuIHRoZSBjb250YWluZXIgaW5kZXBlbmRlbnRseVxuICAgIGNvbnN0IG5ld0ZpYmVyID0geWllbGQqIGRvY2tlci5ydW4oY29udGFpbmVyQ29uZmlnKS5waXBlKFxuICAgICAgRWZmZWN0LnNjb3BlZCxcbiAgICAgIEVmZmVjdC50YXAoKHJlc3VsdCkgPT5cbiAgICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAgIC8vIE9ubHkgc3VwcHJlc3MgZXJyb3JzIGZvciBleHBlY3RlZCBleGl0IGNvZGVzIGZyb20gZG9ja2VyIHN0b3A6XG4gICAgICAgICAgLy8gMDogY2xlYW4sIDE0MzogU0lHVEVSTSwgMTM3OiBTSUdLSUxMXG4gICAgICAgICAgY29uc3QgY29kZSA9IHJlc3VsdC5leGl0Q29kZVxuICAgICAgICAgIGlmIChjb2RlICE9PSAwICYmIGNvZGUgIT09IDE0MyAmJiBjb2RlICE9PSAxMzcpIHtcbiAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRXJyb3IoXG4gICAgICAgICAgICAgIGBDb250YWluZXIgZm9yICR7ZnVuY3Rpb25JZH0gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRXJyb3IoYHN0ZGVycjogJHtyZXN1bHQuc3RkZXJyfWApXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICBFZmZlY3QuaWdub3JlLFxuICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcikgPT5cbiAgICAgICAgRWZmZWN0LmxvZ0Vycm9yKGBDb250YWluZXIgZXJyb3IgZm9yICR7ZnVuY3Rpb25JZH06ICR7ZXJyb3J9YCksXG4gICAgICApLFxuICAgICAgRWZmZWN0LmZvcmtEYWVtb24sXG4gICAgKVxuXG4gICAgLy8gVXBkYXRlIHRoZSBjb250YWluZXIgc3RhdGUgd2l0aCB0aGUgbmV3IGZpYmVyXG4gICAgY29udGFpbmVyLmNvbnRhaW5lckZpYmVyID0gbmV3RmliZXJcblxuICAgIC8vIFdhaXQgYSBtb21lbnQgZm9yIHRoZSBjb250YWluZXIgdG8gc3RhcnQgYW5kIGJlZ2luIHBvbGxpbmdcbiAgICB5aWVsZCogRWZmZWN0LnNsZWVwKFwiMiBzZWNvbmRzXCIpXG5cbiAgICBjb250YWluZXIuaXNSZWJ1aWxkaW5nID0gZmFsc2VcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKGBbTG9jYWxdIENvbnRhaW5lciByZWJ1aWx0IGZvciAke2Z1bmN0aW9uSWR9YClcbiAgfSkucGlwZShFZmZlY3QucHJvdmlkZShEb2NrZXJMaXZlKSlcblxuLyoqXG4gKiBIYW5kbGUgaW5jb21pbmcgaW52b2NhdGlvbnMgZm9yIGEgRG9ja2VyIGNvbnRhaW5lciBmdW5jdGlvbiBieSBxdWV1ZWluZyB0aGVtLlxuICogU3RhcnRzIHRoZSBjb250YWluZXIgbGF6aWx5IGlmIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4gKiBJbnZvY2F0aW9ucyBhcmUgcXVldWVkIGV2ZW4gaWYgYSByZWJ1aWxkIGlzIGluIHByb2dyZXNzIC0gdGhlIG5ldyBjb250YWluZXIgd2lsbCBwaWNrIHRoZW0gdXAuXG4gKi9cbmNvbnN0IGhhbmRsZURvY2tlckludm9jYXRpb24gPSAoXG4gIGZuOiBEaXNjb3ZlcmVkRnVuY3Rpb24sXG4gIGludm9jYXRpb246IEludm9jYXRpb25NZXNzYWdlLFxuICBjb250YWluZXJzUmVmOiBSZWYuUmVmPE1hcDxzdHJpbmcsIEZ1bmN0aW9uQ29udGFpbmVyPj4sXG4gIHNlcnZlclNjb3BlOiBTY29wZS5TY29wZSxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgaWRsZVRpbWVvdXRNczogbnVtYmVyLFxuICBwb2xsVGltZW91dE1zOiBudW1iZXIsXG4gIGFwcFN5bmNDbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIG1ha2VBcHBTeW5jQ2xpZW50PixcbiAgaW52b2NhdGlvbkNvdW50ZXI6IFJlZi5SZWY8bnVtYmVyPixcbiAgaW52b2NhdGlvbkNvbnRleHRzOiBNYXA8c3RyaW5nLCBJbnZvY2F0aW9uQ29udGV4dD4sXG4pOiBFZmZlY3QuRWZmZWN0PHZvaWQsIEVycm9yLCBDb21tYW5kRXhlY3V0b3IuQ29tbWFuZEV4ZWN1dG9yPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgLy8gRW5zdXJlIGNvbnRhaW5lciBpcyBzdGFydGVkIChsYXp5IHN0YXJ0dXAgb24gZmlyc3QgaW52b2NhdGlvbilcbiAgICAvLyBVc2UgZW52IGZyb20gaW52b2NhdGlvbiAoY2FwdHVyZWQgZnJvbSBicmlkZ2UgTGFtYmRhIG9uIGZpcnN0IGludm9rZSlcbiAgICBjb25zdCBjb250YWluZXIgPSB5aWVsZCogZW5zdXJlQ29udGFpbmVyU3RhcnRlZChcbiAgICAgIGZuLFxuICAgICAgc2FuaXRpemVJbnZvY2F0aW9uRW52KGludm9jYXRpb24uZW52ID8/IHt9KSxcbiAgICAgIGNvbnRhaW5lcnNSZWYsXG4gICAgICBzZXJ2ZXJTY29wZSxcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgaWRsZVRpbWVvdXRNcyxcbiAgICAgIHBvbGxUaW1lb3V0TXMsXG4gICAgICBhcHBTeW5jQ2xpZW50LFxuICAgICAgaW52b2NhdGlvbkNvbnRleHRzLFxuICAgIClcblxuICAgIC8vIEFzc2lnbiBpbnZvY2F0aW9uIG51bWJlciBhbmQgdHJhY2sgY29udGV4dCBmb3IgbG9nZ2luZ1xuICAgIGNvbnN0IGludm9jYXRpb25OdW0gPSB5aWVsZCogUmVmLnVwZGF0ZUFuZEdldChcbiAgICAgIGludm9jYXRpb25Db3VudGVyLFxuICAgICAgKG4pID0+IG4gKyAxLFxuICAgIClcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpXG4gICAgaW52b2NhdGlvbkNvbnRleHRzLnNldChpbnZvY2F0aW9uLnJlcXVlc3RJZCwge1xuICAgICAgbnVtOiBpbnZvY2F0aW9uTnVtLFxuICAgICAgc3RhcnQ6IHN0YXJ0VGltZSxcbiAgICAgIGZuOiBmbi5mdW5jdGlvbk5hbWUsXG4gICAgICBpc0RvY2tlcjogdHJ1ZSxcbiAgICB9KVxuXG4gICAgLy8gUHJpbnQgc3RhcnQgbWFya2VyXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgXFxuWyR7aW52b2NhdGlvbk51bX1dIFxcdTI1MGNcXHUyNTAwXFx1MjUwMCBbRG9ja2VyXSAke2ZuLmZ1bmN0aW9uTmFtZX0gXFx1MjUwMFxcdTI1MDBgLFxuICAgIClcblxuICAgIC8vIExvZyBpZiBxdWV1aW5nIGR1cmluZyBhIHJlYnVpbGRcbiAgICBpZiAoY29udGFpbmVyLmlzUmVidWlsZGluZykge1xuICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgYFtMb2NhbF0gUXVldWVpbmcgaW52b2NhdGlvbiAke2ludm9jYXRpb24ucmVxdWVzdElkfSBmb3IgJHtmbi5mdW5jdGlvbk5hbWV9IChyZWJ1aWxkIGluIHByb2dyZXNzLCB3aWxsIGJlIHBpY2tlZCB1cCBieSBuZXcgY29udGFpbmVyKWAsXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgIGBbTG9jYWxdIFF1ZXVlaW5nIGludm9jYXRpb24gJHtpbnZvY2F0aW9uLnJlcXVlc3RJZH0gZm9yICR7Zm4uZnVuY3Rpb25OYW1lfWAsXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgbGFtYmRhSW52b2NhdGlvbjogTGFtYmRhSW52b2NhdGlvbiA9IHtcbiAgICAgIHJlcXVlc3RJZDogaW52b2NhdGlvbi5yZXF1ZXN0SWQsXG4gICAgICBldmVudDogaW52b2NhdGlvbi5ldmVudCxcbiAgICAgIGludm9rZWRGdW5jdGlvbkFybjogaW52b2NhdGlvbi5jb250ZXh0Lmludm9rZWRGdW5jdGlvbkFybixcbiAgICAgIGRlYWRsaW5lTXM6IERhdGUubm93KCkgKyBpbnZvY2F0aW9uLmNvbnRleHQuZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzLFxuICAgICAgZnVuY3Rpb25OYW1lOiBmbi5mdW5jdGlvbk5hbWUsXG4gICAgICBmdW5jdGlvblZlcnNpb246IGludm9jYXRpb24uY29udGV4dC5mdW5jdGlvblZlcnNpb24sXG4gICAgICBtZW1vcnlMaW1pdE1COiBmbi5tZW1vcnlNQixcbiAgICAgIGxvZ0dyb3VwTmFtZTogaW52b2NhdGlvbi5jb250ZXh0LmxvZ0dyb3VwTmFtZSxcbiAgICAgIGxvZ1N0cmVhbU5hbWU6IGludm9jYXRpb24uY29udGV4dC5sb2dTdHJlYW1OYW1lLFxuICAgIH1cblxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICBgW0xvY2FsXSBRdWV1ZWluZyB0byBSdW50aW1lIEFQSSBvbiBwb3J0ICR7Y29udGFpbmVyLnBvcnR9YCxcbiAgICApXG4gICAgLy8gTm90aWZ5IGV4dGVuc2lvbnMgYWJvdXQgdGhlIGludm9jYXRpb24gKGZvciBMYW1iZGEgV2ViIEFkYXB0ZXIgc3VwcG9ydClcbiAgICB5aWVsZCogbm90aWZ5RXh0ZW5zaW9uc0ludm9rZShjb250YWluZXIucnVudGltZVN0YXRlLCBsYW1iZGFJbnZvY2F0aW9uKVxuICAgIHlpZWxkKiBxdWV1ZUludm9jYXRpb24oY29udGFpbmVyLnJ1bnRpbWVTdGF0ZSwgbGFtYmRhSW52b2NhdGlvbilcbiAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKGBbTG9jYWxdIEludm9jYXRpb24gcXVldWVkIHN1Y2Nlc3NmdWxseWApXG4gIH0pXG5cbi8qKlxuICogSGFuZGxlIGluY29taW5nIGludm9jYXRpb25zIGZvciBhIE5vZGUuanMgZnVuY3Rpb24gYnkgcXVldWVpbmcgdGhlbS5cbiAqIFN0YXJ0cyB0aGUgd29ya2VyIGxhemlseSBpZiBub3QgYWxyZWFkeSBydW5uaW5nLlxuICovXG5jb25zdCBoYW5kbGVOb2RlanNJbnZvY2F0aW9uID0gKFxuICBmbjogRGlzY292ZXJlZEZ1bmN0aW9uLFxuICBpbnZvY2F0aW9uOiBJbnZvY2F0aW9uTWVzc2FnZSxcbiAgd29ya2Vyc1JlZjogUmVmLlJlZjxNYXA8c3RyaW5nLCBOb2RlanNXb3JrZXI+PixcbiAgc2VydmVyU2NvcGU6IFNjb3BlLlNjb3BlLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICBhcHBTeW5jQ2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBtYWtlQXBwU3luY0NsaWVudD4sXG4gIGludm9jYXRpb25Db3VudGVyOiBSZWYuUmVmPG51bWJlcj4sXG4gIGludm9jYXRpb25Db250ZXh0czogTWFwPHN0cmluZywgSW52b2NhdGlvbkNvbnRleHQ+LFxuKTogRWZmZWN0LkVmZmVjdDx2b2lkLCBFcnJvcj4gPT5cbiAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgIC8vIEdldCBlbnYgdmFycyBmcm9tIGludm9jYXRpb24gKGZvcndhcmRlZCBmcm9tIGJyaWRnZSBMYW1iZGEpXG4gICAgY29uc3QgaW52b2NhdGlvbkVudiA9IHNhbml0aXplSW52b2NhdGlvbkVudihpbnZvY2F0aW9uLmVudiA/PyB7fSlcblxuICAgIC8vIEVuc3VyZSB3b3JrZXIgaXMgc3RhcnRlZCAobGF6eSBzdGFydHVwIG9uIGZpcnN0IGludm9jYXRpb24pXG4gICAgY29uc3Qgd29ya2VyID0geWllbGQqIGVuc3VyZVdvcmtlclN0YXJ0ZWQoXG4gICAgICBmbixcbiAgICAgIGludm9jYXRpb25FbnYsXG4gICAgICB3b3JrZXJzUmVmLFxuICAgICAgc2VydmVyU2NvcGUsXG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIGFwcFN5bmNDbGllbnQsXG4gICAgICBpbnZvY2F0aW9uQ29udGV4dHMsXG4gICAgKVxuXG4gICAgLy8gQXNzaWduIGludm9jYXRpb24gbnVtYmVyIGFuZCB0cmFjayBjb250ZXh0IGZvciBsb2dnaW5nXG4gICAgY29uc3QgaW52b2NhdGlvbk51bSA9IHlpZWxkKiBSZWYudXBkYXRlQW5kR2V0KFxuICAgICAgaW52b2NhdGlvbkNvdW50ZXIsXG4gICAgICAobikgPT4gbiArIDEsXG4gICAgKVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KClcbiAgICBpbnZvY2F0aW9uQ29udGV4dHMuc2V0KGludm9jYXRpb24ucmVxdWVzdElkLCB7XG4gICAgICBudW06IGludm9jYXRpb25OdW0sXG4gICAgICBzdGFydDogc3RhcnRUaW1lLFxuICAgICAgZm46IGZuLmZ1bmN0aW9uTmFtZSxcbiAgICAgIGlzRG9ja2VyOiBmYWxzZSxcbiAgICB9KVxuXG4gICAgLy8gUHJpbnQgc3RhcnQgbWFya2VyXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgXFxuWyR7aW52b2NhdGlvbk51bX1dIFxcdTI1MGNcXHUyNTAwXFx1MjUwMCAke2ZuLmZ1bmN0aW9uTmFtZX0gXFx1MjUwMFxcdTI1MDBgLFxuICAgIClcblxuICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICBgW0xvY2FsXSBRdWV1ZWluZyBpbnZvY2F0aW9uICR7aW52b2NhdGlvbi5yZXF1ZXN0SWR9IGZvciAke2ZuLmZ1bmN0aW9uTmFtZX1gLFxuICAgIClcblxuICAgIGNvbnN0IGxhbWJkYUludm9jYXRpb246IExhbWJkYUludm9jYXRpb24gPSB7XG4gICAgICByZXF1ZXN0SWQ6IGludm9jYXRpb24ucmVxdWVzdElkLFxuICAgICAgZXZlbnQ6IGludm9jYXRpb24uZXZlbnQsXG4gICAgICBpbnZva2VkRnVuY3Rpb25Bcm46IGludm9jYXRpb24uY29udGV4dC5pbnZva2VkRnVuY3Rpb25Bcm4sXG4gICAgICBkZWFkbGluZU1zOiBEYXRlLm5vdygpICsgaW52b2NhdGlvbi5jb250ZXh0LmdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcyxcbiAgICAgIGZ1bmN0aW9uTmFtZTogZm4uZnVuY3Rpb25OYW1lLFxuICAgICAgZnVuY3Rpb25WZXJzaW9uOiBpbnZvY2F0aW9uLmNvbnRleHQuZnVuY3Rpb25WZXJzaW9uLFxuICAgICAgbWVtb3J5TGltaXRNQjogZm4ubWVtb3J5TUIsXG4gICAgICBsb2dHcm91cE5hbWU6IGludm9jYXRpb24uY29udGV4dC5sb2dHcm91cE5hbWUsXG4gICAgICBsb2dTdHJlYW1OYW1lOiBpbnZvY2F0aW9uLmNvbnRleHQubG9nU3RyZWFtTmFtZSxcbiAgICB9XG5cbiAgICAvLyBUcmFjayBjdXJyZW50IHJlcXVlc3QgSUQgZm9yIGxvZyBwcmVmaXhpbmdcbiAgICB3b3JrZXIuY3VycmVudFJlcXVlc3RJZCA9IGludm9jYXRpb24ucmVxdWVzdElkXG5cbiAgICB5aWVsZCogcXVldWVJbnZvY2F0aW9uKHdvcmtlci5ydW50aW1lU3RhdGUsIGxhbWJkYUludm9jYXRpb24pXG4gIH0pXG5cbi8qKlxuICogQ0RLIHdhdGNoIGV2ZW50IHR5cGVzLlxuICovXG50eXBlIENka1dhdGNoRXZlbnQgPVxuICB8IHsgcmVhZG9ubHkgX3RhZzogXCJTdGFja0Rpc2NvdmVyZWRcIjsgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmcgfVxuICB8IHsgcmVhZG9ubHkgX3RhZzogXCJEZXBsb3lDb21wbGV0ZVwiIH1cblxuLyoqXG4gKiBTdGFydCBDREsgd2F0Y2ggcHJvY2VzcyB3aXRoIENES19MT0NBTF9MQU1CREE9dHJ1ZSB1c2luZyBFZmZlY3QncyBDb21tYW5kLlxuICogUmV0dXJucyB0aGUgcHJvY2VzcyBhbmQgYSBxdWV1ZSBvZiBldmVudHMuXG4gKi9cbmNvbnN0IHN0YXJ0Q2RrV2F0Y2ggPSAoXG4gIG9wdGlvbnM6IHtcbiAgICBwcm9maWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgcmVnaW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgc3RhY2tzPzogc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgICBhbGw/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIH0sXG4gIHNjb3BlOiBTY29wZS5TY29wZSxcbik6IEVmZmVjdC5FZmZlY3Q8XG4gIHsgcHJvY2VzczogRWZmZWN0UHJvY2VzczsgZXZlbnRzOiBRdWV1ZS5RdWV1ZTxDZGtXYXRjaEV2ZW50PiB9LFxuICBFcnJvcixcbiAgQ29tbWFuZEV4ZWN1dG9yLkNvbW1hbmRFeGVjdXRvclxuPiA9PlxuICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgIFwiY2RrXCIsXG4gICAgICBcIndhdGNoXCIsXG4gICAgICBcIi0taG90c3dhcC1mYWxsYmFja1wiLFxuICAgICAgXCItLW5vLWxvZ3NcIixcbiAgICAgIFwiLS1tZXRob2Q9ZGlyZWN0XCIsXG4gICAgXVxuXG4gICAgaWYgKG9wdGlvbnMuc3RhY2tzICYmIG9wdGlvbnMuc3RhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFyZ3MucHVzaCguLi5vcHRpb25zLnN0YWNrcylcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYWxsKSB7XG4gICAgICBhcmdzLnB1c2goXCItLWFsbFwiKVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByb2ZpbGUpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tcHJvZmlsZVwiLCBvcHRpb25zLnByb2ZpbGUpXG4gICAgfVxuXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBDREtfTE9DQUxfTEFNQkRBOiBcInRydWVcIixcbiAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgIGlmIChvcHRpb25zLnJlZ2lvbikge1xuICAgICAgZW52LkFXU19SRUdJT04gPSBvcHRpb25zLnJlZ2lvblxuICAgICAgZW52LkNES19ERUZBVUxUX1JFR0lPTiA9IG9wdGlvbnMucmVnaW9uXG4gICAgfVxuXG4gICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhgU3RhcnRpbmc6IG5weCAke2FyZ3Muam9pbihcIiBcIil9YClcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBQbGF0Zm9ybUNvbW1hbmQubWFrZShcIm5weFwiLCAuLi5hcmdzKS5waXBlKFxuICAgICAgUGxhdGZvcm1Db21tYW5kLmVudihlbnYpLFxuICAgICAgUGxhdGZvcm1Db21tYW5kLnJ1bkluU2hlbGwodHJ1ZSksXG4gICAgICBQbGF0Zm9ybUNvbW1hbmQuc3RkaW4oXCJpbmhlcml0XCIpLFxuICAgIClcblxuICAgIC8vIEV4dGVuZCB0aGUgcHJvY2VzcyByZXNvdXJjZSBsaWZldGltZSB0byB0aGUgcHJvdmlkZWQgc2NvcGVcbiAgICBjb25zdCBwcm9jID0geWllbGQqIFBsYXRmb3JtQ29tbWFuZC5zdGFydChjb21tYW5kKS5waXBlKFNjb3BlLmV4dGVuZChzY29wZSkpXG5cbiAgICAvLyBFdmVudCBxdWV1ZSBmb3IgY2FsbGVycyB0byBzdWJzY3JpYmUgdG9cbiAgICBjb25zdCBldmVudHMgPSB5aWVsZCogUXVldWUudW5ib3VuZGVkPENka1dhdGNoRXZlbnQ+KClcblxuICAgIC8vIFN0YXRlIHRyYWNraW5nIGZvciBkZXBsb3kgc3RhdHVzIG1lc3NhZ2VzXG4gICAgbGV0IGlzRGVwbG95aW5nID0gZmFsc2VcbiAgICBsZXQgaXNGaXJzdERlcGxveSA9IHRydWVcbiAgICBjb25zdCBkaXNjb3ZlcmVkU3RhY2tzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICAgIC8vIFBhdHRlcm5zIHRvIGRldGVjdCBDREsgd2F0Y2ggYmVoYXZpb3JcbiAgICBjb25zdCBkZXBsb3lDb21wbGV0ZVBhdHRlcm4gPSAv4pyFXFxzK1xcUyt8RGVwbG95bWVudCB0aW1lOi9cbiAgICBjb25zdCBkZXBsb3lTdGFydFBhdHRlcm4gPSAvRGVwbG95aW5nfGhvdHN3YXB8SG90c3dhcHBpbmd8QnVuZGxpbmcvaVxuICAgIGNvbnN0IG5vQ2hhbmdlc1BhdHRlcm4gPSAvbm8gY2hhbmdlc3xpZGVudGljYWx8dXAgdG8gZGF0ZS9pXG4gICAgY29uc3QgZXJyb3JQYXR0ZXJuID0gL2Vycm9yfGZhaWxlZHxFcnJvcnxGYWlsZWR8RVJSIS9pXG4gICAgY29uc3Qgc3RhY2tOYW1lUGF0dGVybiA9IC9eKFxcUyspOlxccypkZXBsb3lpbmd84pyFXFxzKyhcXFMrKS9cblxuICAgIC8vIE1lcmdlIHN0ZG91dCBhbmQgc3RkZXJyLCBkZWNvZGUgdG8gdGV4dCwgc3BsaXQgaW50byBsaW5lc1xuICAgIGNvbnN0IG91dHB1dFN0cmVhbSA9IFN0cmVhbS5tZXJnZShwcm9jLnN0ZG91dCwgcHJvYy5zdGRlcnIpLnBpcGUoXG4gICAgICBTdHJlYW0uZGVjb2RlVGV4dCgpLFxuICAgICAgU3RyZWFtLnNwbGl0TGluZXMsXG4gICAgKVxuXG4gICAgLy8gRm9yayBzdHJlYW0gcHJvY2Vzc2luZyBpbiBiYWNrZ3JvdW5kXG4gICAgeWllbGQqIG91dHB1dFN0cmVhbS5waXBlKFxuICAgICAgU3RyZWFtLnJ1bkZvckVhY2goKGxpbmUpID0+XG4gICAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAvLyBMb2cgYWxsIG91dHB1dCBhdCBkZWJ1ZyBsZXZlbFxuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoYFtDREtdICR7bGluZX1gKVxuXG4gICAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3Qgc3RhY2sgbmFtZVxuICAgICAgICAgIGNvbnN0IG1hdGNoID0gc3RhY2tOYW1lUGF0dGVybi5leGVjKGxpbmUudHJpbSgpKVxuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhY2tOYW1lID0gbWF0Y2hbMV0gfHwgbWF0Y2hbMl1cbiAgICAgICAgICAgIGlmIChzdGFja05hbWUgJiYgIWRpc2NvdmVyZWRTdGFja3MuaGFzKHN0YWNrTmFtZSkpIHtcbiAgICAgICAgICAgICAgZGlzY292ZXJlZFN0YWNrcy5hZGQoc3RhY2tOYW1lKVxuICAgICAgICAgICAgICB5aWVsZCogUXVldWUub2ZmZXIoZXZlbnRzLCB7XG4gICAgICAgICAgICAgICAgX3RhZzogXCJTdGFja0Rpc2NvdmVyZWRcIixcbiAgICAgICAgICAgICAgICBzdGFja05hbWUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGV0ZWN0IGRlcGxveSBzdGFydFxuICAgICAgICAgIGlmICghaXNEZXBsb3lpbmcgJiYgZGVwbG95U3RhcnRQYXR0ZXJuLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIGlzRGVwbG95aW5nID0gdHJ1ZVxuICAgICAgICAgICAgaWYgKCFpc0ZpcnN0RGVwbG95KSB7XG4gICAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIltDREtdIERlcGxveWluZy4uLlwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERldGVjdCBlcnJvcnMgLSBvdXRwdXQgaW1tZWRpYXRlbHlcbiAgICAgICAgICBpZiAoZXJyb3JQYXR0ZXJuLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIHlpZWxkKiBFZmZlY3Quc3luYygoKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgJHtsaW5lfVxcbmApKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrIGZvciBkZXBsb3kgY29tcGxldGlvbiAob25seSB0cmlnZ2VyIG9uY2UgcGVyIGRlcGxveSBjeWNsZSlcbiAgICAgICAgICBpZiAoaXNEZXBsb3lpbmcgJiYgZGVwbG95Q29tcGxldGVQYXR0ZXJuLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIGlzRGVwbG95aW5nID0gZmFsc2VcbiAgICAgICAgICAgIGlzRmlyc3REZXBsb3kgPSBmYWxzZVxuICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFwiW0NES10gRGVwbG95IGNvbXBsZXRlXCIpXG4gICAgICAgICAgICAvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgQVdTIGhhcyBwcm9wYWdhdGVkIHRoZSBjaGFuZ2VzXG4gICAgICAgICAgICB5aWVsZCogRWZmZWN0LnNsZWVwKFwiMSBzZWNvbmRcIilcbiAgICAgICAgICAgIHlpZWxkKiBRdWV1ZS5vZmZlcihldmVudHMsIHsgX3RhZzogXCJEZXBsb3lDb21wbGV0ZVwiIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIG5vIGNoYW5nZXNcbiAgICAgICAgICBpZiAobm9DaGFuZ2VzUGF0dGVybi50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICBpc0RlcGxveWluZyA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICAvLyBMb2cgZXJyb3JzIGFuZCBleGl0IGNvZGUgd2hlbiBzdHJlYW0gZW5kc1xuICAgICAgRWZmZWN0LnRhcEVycm9yKChlcnJvcikgPT5cbiAgICAgICAgRWZmZWN0LmxvZ0Vycm9yKGBbQ0RLXSBDREsgd2F0Y2ggZXJyb3I6ICR7ZXJyb3J9YCksXG4gICAgICApLFxuICAgICAgRWZmZWN0LmVuc3VyaW5nKFxuICAgICAgICBwcm9jLmV4aXRDb2RlLnBpcGUoXG4gICAgICAgICAgRWZmZWN0LmZsYXRNYXAoKGNvZGUpID0+XG4gICAgICAgICAgICBjb2RlICE9PSAwXG4gICAgICAgICAgICAgID8gRWZmZWN0LmxvZ0Vycm9yKGBbQ0RLXSBDREsgd2F0Y2ggZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YClcbiAgICAgICAgICAgICAgOiBFZmZlY3QubG9nRGVidWcoYFtDREtdIENESyB3YXRjaCBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Qudm9pZCksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgRWZmZWN0LmZvcmssXG4gICAgKVxuXG4gICAgcmV0dXJuIHsgcHJvY2VzczogcHJvYywgZXZlbnRzIH1cbiAgfSlcblxuLyoqXG4gKiBDb21tb24gQ0xJIG9wdGlvbnMuXG4gKi9cbmNvbnN0IHByb2ZpbGVPcHRpb24gPSBPcHRpb25zLnRleHQoXCJwcm9maWxlXCIpLnBpcGUoXG4gIE9wdGlvbnMub3B0aW9uYWwsXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiQVdTIHByb2ZpbGUgdG8gdXNlXCIpLFxuKVxuXG5jb25zdCByZWdpb25PcHRpb24gPSBPcHRpb25zLnRleHQoXCJyZWdpb25cIikucGlwZShcbiAgT3B0aW9ucy5vcHRpb25hbCxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJBV1MgcmVnaW9uXCIpLFxuKVxuXG5jb25zdCBxdWFsaWZpZXJPcHRpb24gPSBPcHRpb25zLnRleHQoXCJxdWFsaWZpZXJcIikucGlwZShcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChcImhuYjY1OWZkc1wiKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJDREsgYm9vdHN0cmFwIHF1YWxpZmllclwiKSxcbilcblxuY29uc3Qgc3RhY2tzT3B0aW9uID0gT3B0aW9ucy50ZXh0KFwic3RhY2tzXCIpLnBpcGUoXG4gIE9wdGlvbnMub3B0aW9uYWwsXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFxuICAgIFwiU3RhY2sgbmFtZXMgdG8gZGVwbG95IChjb21tYS1zZXBhcmF0ZWQsIGRlZmF1bHQ6IGFsbClcIixcbiAgKSxcbilcblxuY29uc3QgYWxsU3RhY2tzT3B0aW9uID0gT3B0aW9ucy5ib29sZWFuKFwiYWxsXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoZmFsc2UpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIkRlcGxveSBhbGwgc3RhY2tzIChsaWtlIGNkayBkZXBsb3kgLS1hbGwpXCIpLFxuKVxuXG5jb25zdCBkZWJ1Z09wdGlvbiA9IE9wdGlvbnMuYm9vbGVhbihcImRlYnVnXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoZmFsc2UpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIkVuYWJsZSBkZWJ1ZyBsb2dnaW5nXCIpLFxuKVxuXG5jb25zdCBpZGxlVGltZW91dE9wdGlvbiA9IE9wdGlvbnMuaW50ZWdlcihcImlkbGUtdGltZW91dFwiKS5waXBlKFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfSURMRV9USU1FT1VUX01TKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXG4gICAgXCJJZGxlIHRpbWVvdXQgaW4gbXMgYmVmb3JlIHN0b3BwaW5nIGNvbnRhaW5lcnMgKGRlZmF1bHQ6IDIzMDAwMClcIixcbiAgKSxcbilcblxuY29uc3QgcG9sbFRpbWVvdXRPcHRpb24gPSBPcHRpb25zLmludGVnZXIoXCJwb2xsLXRpbWVvdXRcIikucGlwZShcbiAgT3B0aW9ucy5vcHRpb25hbCxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXG4gICAgXCJQb2xsIHRpbWVvdXQgaW4gbXMgZm9yIFJ1bnRpbWUgQVBJIChkZWZhdWx0OiBpZGxlLXRpbWVvdXQgLSAxMHMpLiBNdXN0IGJlIHNob3J0ZXIgdGhhbiBpZGxlLXRpbWVvdXQuXCIsXG4gICksXG4pXG5cbi8qKlxuICogTG9jYWwgY29tbWFuZCBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbG9jYWxDb21tYW5kID0gQ29tbWFuZC5tYWtlKFxuICBcImxvY2FsXCIsXG4gIHtcbiAgICBwcm9maWxlOiBwcm9maWxlT3B0aW9uLFxuICAgIHJlZ2lvbjogcmVnaW9uT3B0aW9uLFxuICAgIHF1YWxpZmllcjogcXVhbGlmaWVyT3B0aW9uLFxuICAgIHN0YWNrczogc3RhY2tzT3B0aW9uLFxuICAgIGFsbDogYWxsU3RhY2tzT3B0aW9uLFxuICAgIGRlYnVnOiBkZWJ1Z09wdGlvbixcbiAgICBpZGxlVGltZW91dDogaWRsZVRpbWVvdXRPcHRpb24sXG4gICAgcG9sbFRpbWVvdXQ6IHBvbGxUaW1lb3V0T3B0aW9uLFxuICB9LFxuICAoe1xuICAgIHByb2ZpbGUsXG4gICAgcmVnaW9uLFxuICAgIHF1YWxpZmllcixcbiAgICBzdGFja3MsXG4gICAgYWxsLFxuICAgIGRlYnVnLFxuICAgIGlkbGVUaW1lb3V0LFxuICAgIHBvbGxUaW1lb3V0LFxuICB9KSA9PiB7XG4gICAgY29uc3QgbG9nTGV2ZWwgPSBkZWJ1ZyA/IExvZ0xldmVsLkRlYnVnIDogTG9nTGV2ZWwuSW5mb1xuICAgIHJldHVybiBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oXCJbTG9jYWxdIFN0YXJ0aW5nIGxvY2FsIExhbWJkYSBkZXZlbG9wbWVudC4uLlwiKVxuXG4gICAgICBjb25zdCBwcm9maWxlVmFsdWUgPSBwcm9maWxlLl90YWcgPT09IFwiU29tZVwiID8gcHJvZmlsZS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVnaW9uVmFsdWUgPSByZWdpb24uX3RhZyA9PT0gXCJTb21lXCIgPyByZWdpb24udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHN0YWNrc0Zyb21PcHRpb24gPVxuICAgICAgICBzdGFja3MuX3RhZyA9PT0gXCJTb21lXCJcbiAgICAgICAgICA/IHN0YWNrcy52YWx1ZS5zcGxpdChcIixcIikubWFwKChzKSA9PiBzLnRyaW0oKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAvLyBQb2xsIHRpbWVvdXQgc2hvdWxkIGJlIHNob3J0ZXIgdGhhbiBpZGxlIHRpbWVvdXQgc28gY29udGFpbmVycyBleGl0IG5hdHVyYWxseVxuICAgICAgLy8gYmVmb3JlIHdlIHRyeSB0byBzdG9wIHRoZW0uIERlZmF1bHQ6IGlkbGUgdGltZW91dCAtIDEwIHNlY29uZHMuXG4gICAgICBjb25zdCBlZmZlY3RpdmVQb2xsVGltZW91dCA9XG4gICAgICAgIHBvbGxUaW1lb3V0Ll90YWcgPT09IFwiU29tZVwiXG4gICAgICAgICAgPyBwb2xsVGltZW91dC52YWx1ZVxuICAgICAgICAgIDogTWF0aC5tYXgoaWRsZVRpbWVvdXQgLSAxMF8wMDAsIDVfMDAwKSAvLyBBdCBsZWFzdCA1IHNlY29uZHNcblxuICAgICAgaWYgKHByb2ZpbGVWYWx1ZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5BV1NfUFJPRklMRSA9IHByb2ZpbGVWYWx1ZVxuICAgICAgfVxuICAgICAgaWYgKHJlZ2lvblZhbHVlKSB7XG4gICAgICAgIHByb2Nlc3MuZW52LkFXU19SRUdJT04gPSByZWdpb25WYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBCb290c3RyYXAgY2hlY2sgbXVzdCBjb21wbGV0ZSBmaXJzdFxuICAgICAgeWllbGQqIGVuc3VyZUJvb3RzdHJhcCh7XG4gICAgICAgIHF1YWxpZmllcixcbiAgICAgICAgLi4uKHByb2ZpbGVWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHsgcHJvZmlsZTogcHJvZmlsZVZhbHVlIH0pLFxuICAgICAgICAuLi4ocmVnaW9uVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB7IHJlZ2lvbjogcmVnaW9uVmFsdWUgfSksXG4gICAgICB9KVxuXG4gICAgICAvLyBTdGFjayBmaWx0ZXIgLSBwb3B1bGF0ZWQgZnJvbSBDREsgd2F0Y2ggb3V0cHV0LCB1c2VkIHRvIGZpbHRlciBMYW1iZGEgZGlzY292ZXJ5XG4gICAgICAvLyBVc2luZyBvYmplY3Qgc28gY2xvc3VyZSBpbiBzdGFydE9yVXBkYXRlRGFlbW9uIHNlZXMgdXBkYXRlc1xuICAgICAgY29uc3QgZmlsdGVyU3RhdGUgPSB7IHN0YWNrczogc3RhY2tzRnJvbU9wdGlvbiA/PyAoW10gYXMgc3RyaW5nW10pIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgbG9uZy1saXZlZCBzY29wZSBmb3IgYWxsIFJ1bnRpbWUgQVBJIHNlcnZlcnMgYW5kIENESyB3YXRjaCBwcm9jZXNzXG4gICAgICAvLyBSZXNvdXJjZXMgd2lsbCBydW4gdW50aWwgdGhpcyBzY29wZSBpcyBjbG9zZWQgKHdoZW4gdGhlIHByb2dyYW0gZW5kcylcbiAgICAgIGNvbnN0IHNlcnZlclNjb3BlID0geWllbGQqIFNjb3BlLm1ha2UoKVxuXG4gICAgICAvLyBTdGFydCBDREsgd2F0Y2ggaW1tZWRpYXRlbHkgYWZ0ZXIgYm9vdHN0cmFwXG4gICAgICAvLyBTdGFjayBuYW1lcyBhcmUgZGlzY292ZXJlZCBmcm9tIENESyB3YXRjaCBvdXRwdXQgKG5vIG5lZWQgZm9yIHNlcGFyYXRlIGNkayBscylcbiAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIltDREtdIERlcGxveWluZy4uLlwiKVxuXG4gICAgICBjb25zdCB7IHByb2Nlc3M6IGNka1dhdGNoUHJvY2VzcywgZXZlbnRzOiBjZGtFdmVudHMgfSA9XG4gICAgICAgIHlpZWxkKiBzdGFydENka1dhdGNoKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2ZpbGU6IHByb2ZpbGVWYWx1ZSxcbiAgICAgICAgICAgIHJlZ2lvbjogcmVnaW9uVmFsdWUsXG4gICAgICAgICAgICBzdGFja3M6IHN0YWNrc0Zyb21PcHRpb24sXG4gICAgICAgICAgICBhbGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXJ2ZXJTY29wZSxcbiAgICAgICAgKVxuXG4gICAgICAvLyBUcmFjayBydW5uaW5nIERvY2tlciBjb250YWluZXJzIGJ5IGZ1bmN0aW9uIG5hbWVcbiAgICAgIGNvbnN0IGNvbnRhaW5lcnMgPSB5aWVsZCogUmVmLm1ha2U8TWFwPHN0cmluZywgRnVuY3Rpb25Db250YWluZXI+PihcbiAgICAgICAgbmV3IE1hcCgpLFxuICAgICAgKVxuXG4gICAgICAvLyBUcmFjayBydW5uaW5nIE5vZGUuanMgd29ya2VycyBieSBmdW5jdGlvbiBuYW1lXG4gICAgICBjb25zdCB3b3JrZXJzID0geWllbGQqIFJlZi5tYWtlPE1hcDxzdHJpbmcsIE5vZGVqc1dvcmtlcj4+KG5ldyBNYXAoKSlcblxuICAgICAgLy8gVHJhY2sgcmVnaXN0ZXJlZCBmdW5jdGlvbnMgKGZvciBsYXp5IGNvbnRhaW5lci93b3JrZXIgc3RhcnR1cClcbiAgICAgIGNvbnN0IHJlZ2lzdGVyZWRGdW5jdGlvbnMgPSB5aWVsZCogUmVmLm1ha2U8XG4gICAgICAgIE1hcDxzdHJpbmcsIERpc2NvdmVyZWRGdW5jdGlvbj5cbiAgICAgID4obmV3IE1hcCgpKVxuXG4gICAgICAvLyBUcmFjayBEb2NrZXIgZnVuY3Rpb25zIHdpdGggYWN0aXZlIGZpbGUgd2F0Y2hlcnNcbiAgICAgIGNvbnN0IHdhdGNoZWREb2NrZXJGdW5jdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gICAgICAvLyBJbnZvY2F0aW9uIHRyYWNraW5nIGZvciBpbXByb3ZlZCBsb2dnaW5nIG91dHB1dFxuICAgICAgY29uc3QgaW52b2NhdGlvbkNvdW50ZXIgPSB5aWVsZCogUmVmLm1ha2U8bnVtYmVyPigwKVxuICAgICAgLy8gVXNlIGEgcGxhaW4gTWFwIGZvciBpbnZvY2F0aW9uIGNvbnRleHRzIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHN0cmVhbSBjYWxsYmFja3NcbiAgICAgIGNvbnN0IGludm9jYXRpb25Db250ZXh0cyA9IG5ldyBNYXA8c3RyaW5nLCBJbnZvY2F0aW9uQ29udGV4dD4oKVxuXG4gICAgICAvLyBQcm9qZWN0IHJvb3QgaXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKHdoZXJlIENESyBhcHAgbGl2ZXMpXG4gICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuY3dkKClcblxuICAgICAgbGV0IGFwcFN5bmNDbGllbnQ6IFJldHVyblR5cGU8dHlwZW9mIG1ha2VBcHBTeW5jQ2xpZW50PiB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFRyYWNrIGlmIHdlJ3ZlIGxvZ2dlZCB0aGUgXCJXYXRjaGluZ1wiIG1lc3NhZ2UgKG9ubHkgbG9nIG9uY2UpXG4gICAgICBjb25zdCBsb2dTdGF0ZSA9IHsgaGFzTG9nZ2VkV2F0Y2hpbmc6IGZhbHNlLCBoYXNEaXNjb3ZlcmVkT25jZTogZmFsc2UgfVxuXG4gICAgICAvLyBGdW5jdGlvbiB0byBzdGFydC91cGRhdGUgdGhlIGRhZW1vbiB3aXRoIGRpc2NvdmVyZWQgZnVuY3Rpb25zXG4gICAgICBjb25zdCBzdGFydE9yVXBkYXRlRGFlbW9uID0gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBPbmx5IHNob3cgXCJEaXNjb3ZlcmluZyBmdW5jdGlvbnMuLi5cIiBvbiBmaXJzdCBydW5cbiAgICAgICAgaWYgKCFsb2dTdGF0ZS5oYXNEaXNjb3ZlcmVkT25jZSkge1xuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIltMb2NhbF0gRGlzY292ZXJpbmcgZnVuY3Rpb25zLi4uXCIpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgQXBwU3luYyBlbmRwb2ludHMgKG1heSBuZWVkIHRvIHdhaXQgZm9yIGZpcnN0IGRlcGxveSlcbiAgICAgICAgaWYgKCFhcHBTeW5jQ2xpZW50KSB7XG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgIFwiW0xvY2FsXSBSZWFkaW5nIEFwcFN5bmMgZW5kcG9pbnRzIGZyb20gU1NNLi4uXCIsXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IGVuZHBvaW50cyA9IHlpZWxkKiBnZXRBcHBTeW5jRW5kcG9pbnRzKHF1YWxpZmllcikucGlwZShcbiAgICAgICAgICAgIEVmZmVjdC5yZXRyeSh7IHRpbWVzOiAxMCwgc2NoZWR1bGU6IFNjaGVkdWxlLnNwYWNlZChcIjMgc2Vjb25kc1wiKSB9KSxcbiAgICAgICAgICApXG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgIGBbTG9jYWxdIEhUVFAgZW5kcG9pbnQ6ICR7ZW5kcG9pbnRzLmh0dHBFbmRwb2ludH1gLFxuICAgICAgICAgIClcbiAgICAgICAgICBhcHBTeW5jQ2xpZW50ID0gbWFrZUFwcFN5bmNDbGllbnQoZW5kcG9pbnRzKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGlzY292ZXIgZnVuY3Rpb25zIChmaWx0ZXJlZCB0byBzdGFja3MgaW4gdGhpcyBDREsgcHJvamVjdClcbiAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcIltMb2NhbF0gRGlzY292ZXJpbmcgTGFtYmRhIGZ1bmN0aW9ucy4uLlwiKVxuICAgICAgICBjb25zdCBmdW5jdGlvbnMgPSB5aWVsZCogZGlzY292ZXJGdW5jdGlvbnMoZmlsdGVyU3RhdGUuc3RhY2tzKVxuXG4gICAgICAgIGlmIChmdW5jdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFxuICAgICAgICAgICAgXCJbTG9jYWxdIE5vIGZ1bmN0aW9ucyBmb3VuZCB3aXRoIGxpdmUtbGFtYmRhIHRhZ3MgeWV0LiBIYXZlIHlvdSBwYXRjaGVkIHlvdXIgQ0RLIHByb2plY3QgKGJvb3RzdHJhcCkgYW5kIGFkZGVkIHRoZSBMaXZlTGFtYmRhQXNwZWN0P1wiLFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZWdpc3RlcmVkID0geWllbGQqIFJlZi5nZXQocmVnaXN0ZXJlZEZ1bmN0aW9ucylcblxuICAgICAgICAvLyBDb2xsZWN0IG5ldyBmdW5jdGlvbnMgdG8gcmVnaXN0ZXJcbiAgICAgICAgY29uc3QgbmV3RnVuY3Rpb25zOiBBcnJheTx7XG4gICAgICAgICAgZm46IERpc2NvdmVyZWRGdW5jdGlvblxuICAgICAgICAgIGlzRG9ja2VyOiBib29sZWFuXG4gICAgICAgIH0+ID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZ1bmN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGlzRG9ja2VyID0gQm9vbGVhbihmbi5kb2NrZXJDb250ZXh0UGF0aClcbiAgICAgICAgICBjb25zdCBpc05vZGVqcyA9ICFpc0RvY2tlciAmJiBCb29sZWFuKGZuLmxvY2FsSGFuZGxlcilcblxuICAgICAgICAgIGlmICghaXNEb2NrZXIgJiYgIWlzTm9kZWpzKSB7XG4gICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgICAgICAgICBgW0xvY2FsXSBTa2lwcGluZyAke2ZuLmZ1bmN0aW9uTmFtZX0gLSBubyBEb2NrZXIgY29udGV4dCBvciBsb2NhbCBoYW5kbGVyYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGN1cnJlbnRSZWdpc3RlcmVkLmhhcyhmbi5mdW5jdGlvbk5hbWUpKSB7XG4gICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0RlYnVnKFxuICAgICAgICAgICAgICBgW0xvY2FsXSBBbHJlYWR5IHdhdGNoaW5nICR7Zm4uZnVuY3Rpb25OYW1lfWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld0Z1bmN0aW9ucy5wdXNoKHsgZm4sIGlzRG9ja2VyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmludCBzdW1tYXJ5IG9mIGRpc2NvdmVyZWQgZnVuY3Rpb25zXG4gICAgICAgIGlmIChuZXdGdW5jdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSBuZXdGdW5jdGlvbnNcbiAgICAgICAgICAgIC5tYXAoKHsgZm4sIGlzRG9ja2VyIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbW9kZSA9IGlzRG9ja2VyID8gXCJkb2NrZXJcIiA6IFwibm9kZVwiXG4gICAgICAgICAgICAgIGNvbnN0IHNob3J0TmFtZSA9IGZuLmZ1bmN0aW9uTmFtZS5pbmNsdWRlcyhcIi1cIilcbiAgICAgICAgICAgICAgICA/IGZuLmZ1bmN0aW9uTmFtZS5zcGxpdChcIi1cIikuc2xpY2UoLTIsIC0xKVswXSB8fCBmbi5mdW5jdGlvbk5hbWVcbiAgICAgICAgICAgICAgICA6IGZuLmZ1bmN0aW9uTmFtZVxuICAgICAgICAgICAgICByZXR1cm4gYCR7c2hvcnROYW1lfSAoJHttb2RlfSlgXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgICAgICAgIC8vIFVzZSBkaWZmZXJlbnQgbWVzc2FnZSBmb3IgZmlyc3QgZGlzY292ZXJ5IHZzIHN1YnNlcXVlbnRcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSBsb2dTdGF0ZS5oYXNEaXNjb3ZlcmVkT25jZVxuICAgICAgICAgICAgPyBcIltMb2NhbF0gRnVuY3Rpb25zIGFkZGVkOlwiXG4gICAgICAgICAgICA6IFwiW0xvY2FsXSBGdW5jdGlvbnM6XCJcbiAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oYCR7cHJlZml4fSAke3N1bW1hcnl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZ2lzdGVyIGZ1bmN0aW9ucyBhbmQgc2V0IHVwIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCB7IGZuLCBpc0RvY2tlciB9IG9mIG5ld0Z1bmN0aW9ucykge1xuICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICBgW0xvY2FsXSBSZWdpc3RlcmluZyAke2ZuLmZ1bmN0aW9uTmFtZX0gKCR7aXNEb2NrZXIgPyBcIkRvY2tlclwiIDogXCJOb2RlLmpzXCJ9KWAsXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgICAgICAgY3VycmVudFJlZ2lzdGVyZWQuc2V0KGZuLmZ1bmN0aW9uTmFtZSwgZm4pXG5cbiAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gaW52b2NhdGlvbnMgZm9yIHRoaXMgZnVuY3Rpb25cbiAgICAgICAgICBjb25zdCBpbnZvY2F0aW9uQ2hhbm5lbCA9IGJ1aWxkQ2hhbm5lbE5hbWUuaW52b2NhdGlvbihmbi5mdW5jdGlvbk5hbWUpXG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgIGBbTG9jYWxdIFN1YnNjcmliaW5nIHRvIGludm9jYXRpb25zIGZvciAke2ZuLmZ1bmN0aW9uTmFtZX1gLFxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIFN1YnNjcmliZSB1c2luZyBmb3JrRGFlbW9uIHRvIHJ1biBpbmRlcGVuZGVudGx5IHdpdGggY29udGV4dCBwcmVzZXJ2ZWRcbiAgICAgICAgICAvLyBSb3V0ZSB0byBEb2NrZXIgb3IgTm9kZS5qcyBoYW5kbGVyIGJhc2VkIG9uIGZ1bmN0aW9uIHR5cGVcbiAgICAgICAgICBpZiAoaXNEb2NrZXIpIHtcbiAgICAgICAgICAgIHlpZWxkKiBhcHBTeW5jQ2xpZW50IVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlVG9JbnZvY2F0aW9ucyhpbnZvY2F0aW9uQ2hhbm5lbClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgU3RyZWFtLnJ1bkZvckVhY2goKGludm9jYXRpb24pID0+XG4gICAgICAgICAgICAgICAgICBoYW5kbGVEb2NrZXJJbnZvY2F0aW9uKFxuICAgICAgICAgICAgICAgICAgICBmbixcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyU2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgICAgICAgICAgICBpZGxlVGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlUG9sbFRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgIGFwcFN5bmNDbGllbnQhLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uQ291bnRlcixcbiAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbkNvbnRleHRzLFxuICAgICAgICAgICAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdC5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBbTG9jYWxdIERvY2tlciBpbnZvY2F0aW9uIGVycm9yOiAke2Vycm9yfWAsXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBFZmZlY3QuZm9ya0RhZW1vbixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB5aWVsZCogYXBwU3luY0NsaWVudCFcbiAgICAgICAgICAgICAgLnN1YnNjcmliZVRvSW52b2NhdGlvbnMoaW52b2NhdGlvbkNoYW5uZWwpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIFN0cmVhbS5ydW5Gb3JFYWNoKChpbnZvY2F0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgaGFuZGxlTm9kZWpzSW52b2NhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZm4sXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHdvcmtlcnMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclNjb3BlLFxuICAgICAgICAgICAgICAgICAgICBwcm9qZWN0Um9vdCxcbiAgICAgICAgICAgICAgICAgICAgYXBwU3luY0NsaWVudCEsXG4gICAgICAgICAgICAgICAgICAgIGludm9jYXRpb25Db3VudGVyLFxuICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uQ29udGV4dHMsXG4gICAgICAgICAgICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoZXJyb3IpID0+XG4gICAgICAgICAgICAgICAgICAgICAgRWZmZWN0LmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFtMb2NhbF0gTm9kZS5qcyBpbnZvY2F0aW9uIGVycm9yOiAke2Vycm9yfWAsXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBFZmZlY3QuZm9ya0RhZW1vbixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHlpZWxkKiBSZWYuc2V0KHJlZ2lzdGVyZWRGdW5jdGlvbnMsIGN1cnJlbnRSZWdpc3RlcmVkKVxuXG4gICAgICAgIC8vIFN0YXJ0IGZpbGUgd2F0Y2hlcnMgZm9yIG5ldyBEb2NrZXIgZnVuY3Rpb25zXG4gICAgICAgIGNvbnN0IG5ld0RvY2tlckZ1bmN0aW9uczogV2F0Y2hlZERvY2tlckZ1bmN0aW9uW10gPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZ1bmN0aW9ucykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZuLmRvY2tlckNvbnRleHRQYXRoICYmXG4gICAgICAgICAgICAhd2F0Y2hlZERvY2tlckZ1bmN0aW9ucy5oYXMoZm4uZnVuY3Rpb25OYW1lKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgY29udGV4dCBwYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0UGF0aCA9IGZuLmRvY2tlckNvbnRleHRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpXG4gICAgICAgICAgICAgID8gZm4uZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgICAgICAgICAgOiBgJHtwcm9qZWN0Um9vdH0vJHtmbi5kb2NrZXJDb250ZXh0UGF0aH1gXG5cbiAgICAgICAgICAgIG5ld0RvY2tlckZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgZnVuY3Rpb25JZDogZm4uZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICBkb2NrZXJDb250ZXh0UGF0aDogY29udGV4dFBhdGgsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgd2F0Y2hlZERvY2tlckZ1bmN0aW9ucy5hZGQoZm4uZnVuY3Rpb25OYW1lKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0YXJ0IHdhdGNoaW5nIG5ldyBEb2NrZXIgY29udGV4dHNcbiAgICAgICAgaWYgKG5ld0RvY2tlckZ1bmN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgIGBbTG9jYWxdIFN0YXJ0aW5nIGZpbGUgd2F0Y2hlcnMgZm9yICR7bmV3RG9ja2VyRnVuY3Rpb25zLmxlbmd0aH0gRG9ja2VyIGZ1bmN0aW9uKHMpLi4uYCxcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBGb3JrIGEgZGFlbW9uIGZpYmVyIHRvIGhhbmRsZSBmaWxlIGNoYW5nZSBldmVudHMgd2l0aCBjb250ZXh0IHByZXNlcnZlZFxuICAgICAgICAgIHlpZWxkKiB3YXRjaERvY2tlckNvbnRleHRzKG5ld0RvY2tlckZ1bmN0aW9ucywgNTAwKS5waXBlKFxuICAgICAgICAgICAgU3RyZWFtLnJ1bkZvckVhY2goKGV2ZW50KSA9PlxuICAgICAgICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dEZWJ1ZyhcbiAgICAgICAgICAgICAgICAgIGBbTG9jYWxdIEZpbGUgY2hhbmdlZCBpbiAke2V2ZW50LmZ1bmN0aW9uSWR9OiAke2V2ZW50LmZpbGVQYXRofWAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHlpZWxkKiByZWJ1aWxkRG9ja2VyQ29udGFpbmVyKFxuICAgICAgICAgICAgICAgICAgZXZlbnQuZnVuY3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnMsXG4gICAgICAgICAgICAgICAgICBwcm9qZWN0Um9vdCxcbiAgICAgICAgICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoKGVycm9yKSA9PlxuICAgICAgICAgICAgICAgICAgICBFZmZlY3QubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgYFtMb2NhbF0gUmVidWlsZCBmYWlsZWQgZm9yICR7ZXZlbnQuZnVuY3Rpb25JZH06ICR7ZXJyb3J9YCxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBFZmZlY3QuZm9ya0RhZW1vbixcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxvZ1N0YXRlLmhhc0xvZ2dlZFdhdGNoaW5nKSB7XG4gICAgICAgICAgbG9nU3RhdGUuaGFzTG9nZ2VkV2F0Y2hpbmcgPSB0cnVlXG4gICAgICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKFwiW0xvY2FsXSBSZWFkeSBmb3IgaW52b2NhdGlvbnNcIilcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hcmsgdGhhdCB3ZSd2ZSBjb21wbGV0ZWQgZmlyc3QgZGlzY292ZXJ5XG4gICAgICAgIGxvZ1N0YXRlLmhhc0Rpc2NvdmVyZWRPbmNlID0gdHJ1ZVxuICAgICAgfSlcblxuICAgICAgLy8gSGFuZGxlIENESyB3YXRjaCBldmVudHMgKHN0YWNrIGRpc2NvdmVyeSBhbmQgZGVwbG95IGNvbXBsZXRpb24pXG4gICAgICB5aWVsZCogUXVldWUudGFrZShjZGtFdmVudHMpLnBpcGUoXG4gICAgICAgIEVmZmVjdC5mbGF0TWFwKChldmVudCkgPT5cbiAgICAgICAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50Ll90YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIlN0YWNrRGlzY292ZXJlZFwiOlxuICAgICAgICAgICAgICAgIC8vIEFkZCBkaXNjb3ZlcmVkIHN0YWNrIHRvIGZpbHRlciAoaWYgbm90IHVzaW5nIC0tc3RhY2tzKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICFzdGFja3NGcm9tT3B0aW9uICYmXG4gICAgICAgICAgICAgICAgICAhZmlsdGVyU3RhdGUuc3RhY2tzLmluY2x1ZGVzKGV2ZW50LnN0YWNrTmFtZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGZpbHRlclN0YXRlLnN0YWNrcy5wdXNoKGV2ZW50LnN0YWNrTmFtZSlcbiAgICAgICAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nRGVidWcoXG4gICAgICAgICAgICAgICAgICAgIGBbTG9jYWxdIERpc2NvdmVyZWQgc3RhY2s6ICR7ZXZlbnQuc3RhY2tOYW1lfWAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgXCJEZXBsb3lDb21wbGV0ZVwiOlxuICAgICAgICAgICAgICAgIC8vIFJ1biBkYWVtb24gdXBkYXRlIG9uIGRlcGxveSBjb21wbGV0aW9uXG4gICAgICAgICAgICAgICAgeWllbGQqIHN0YXJ0T3JVcGRhdGVEYWVtb24ucGlwZShcbiAgICAgICAgICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoZXJyb3IpID0+XG4gICAgICAgICAgICAgICAgICAgIEVmZmVjdC5sb2dFcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBkYWVtb246ICR7ZXJyb3J9YCksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgICBFZmZlY3QuZm9yZXZlcixcbiAgICAgICAgRWZmZWN0LmZvcmssXG4gICAgICApXG5cbiAgICAgIC8vIEhhbmRsZSBjbGVhbnVwIG9uIGV4aXRcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKFxuICAgICAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIlxcblNodXR0aW5nIGRvd24uLi5cIilcblxuICAgICAgICAgICAgLy8gU3RvcCBDREsgd2F0Y2hcbiAgICAgICAgICAgIHlpZWxkKiBjZGtXYXRjaFByb2Nlc3NcbiAgICAgICAgICAgICAgLmtpbGwoXCJTSUdURVJNXCIpXG4gICAgICAgICAgICAgIC5waXBlKEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Qudm9pZCkpXG5cbiAgICAgICAgICAgIC8vIFN0b3AgYWxsIERvY2tlciBjb250YWluZXJzIHVzaW5nIHRoZSBEb2NrZXIgc2VydmljZVxuICAgICAgICAgICAgY29uc3QgZG9ja2VyID0geWllbGQqIERvY2tlclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbnRhaW5lcnMgPSB5aWVsZCogUmVmLmdldChjb250YWluZXJzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29udGFpbmVyXSBvZiBjdXJyZW50Q29udGFpbmVycykge1xuICAgICAgICAgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oYFN0b3BwaW5nIGNvbnRhaW5lcjogJHtuYW1lfWApXG4gICAgICAgICAgICAgIHlpZWxkKiBkb2NrZXIuc3RvcChjb250YWluZXIuY29udGFpbmVyTmFtZSkucGlwZShcbiAgICAgICAgICAgICAgICBFZmZlY3Quc2NvcGVkLFxuICAgICAgICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Qudm9pZCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3RvcCBhbGwgTm9kZS5qcyB3b3JrZXJzXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50V29ya2VycyA9IHlpZWxkKiBSZWYuZ2V0KHdvcmtlcnMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB3b3JrZXJdIG9mIGN1cnJlbnRXb3JrZXJzKSB7XG4gICAgICAgICAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhgU3RvcHBpbmcgd29ya2VyOiAke25hbWV9YClcbiAgICAgICAgICAgICAgeWllbGQqIEVmZmVjdC50cnkoKCkgPT5cbiAgICAgICAgICAgICAgICB3b3JrZXIud29ya2VyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKSxcbiAgICAgICAgICAgICAgKS5waXBlKEVmZmVjdC5jYXRjaEFsbCgoKSA9PiBFZmZlY3Qudm9pZCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENsb3NlIHRoZSBzZXJ2ZXIgc2NvcGUgdG8gY2xlYW4gdXAgUnVudGltZSBBUEkgc2VydmVyc1xuICAgICAgICAgICAgeWllbGQqIFNjb3BlLmNsb3NlKHNlcnZlclNjb3BlLCBFeGl0LnZvaWQpXG4gICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIEVmZmVjdC5wcm92aWRlKERvY2tlckxpdmUpLFxuICAgICAgICAgICAgRWZmZWN0LnByb3ZpZGUoQnVuQ29udGV4dC5sYXllciksXG4gICAgICAgICAgICBFZmZlY3QucHJvdmlkZShMb2dnZXIucHJldHR5KSxcbiAgICAgICAgICAgIEVmZmVjdC5wcm92aWRlKExvZ2dlci5taW5pbXVtTG9nTGV2ZWwobG9nTGV2ZWwpKSxcbiAgICAgICAgICApLFxuICAgICAgICApXG5cbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgY2xlYW51cClcbiAgICAgIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApXG5cbiAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhcIltMb2NhbF0gUHJlc3MgQ3RybCtDIHRvIHN0b3BcIilcblxuICAgICAgLy8gS2VlcCB0aGUgcHJvY2VzcyBydW5uaW5nXG4gICAgICB5aWVsZCogRWZmZWN0Lm5ldmVyXG4gICAgfSkucGlwZShcbiAgICAgIEVmZmVjdC5wcm92aWRlKExvZ2dlci5wcmV0dHkpLFxuICAgICAgRWZmZWN0LnByb3ZpZGUoTG9nZ2VyLm1pbmltdW1Mb2dMZXZlbChsb2dMZXZlbCkpLFxuICAgIClcbiAgfSxcbikucGlwZShcbiAgQ29tbWFuZC53aXRoRGVzY3JpcHRpb24oXG4gICAgXCJTdGFydCBsb2NhbCBMYW1iZGEgZGV2ZWxvcG1lbnQgd2l0aCBDREsgd2F0Y2ggYW5kIERvY2tlciBjb250YWluZXJzXCIsXG4gICksXG4pXG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Exports:
|
|
5
5
|
* - LiveLambdaAspect: CDK Aspect to transform Lambda functions
|
|
6
|
-
* - applyLiveLambdaAspect: Helper to apply the aspect if
|
|
6
|
+
* - applyLiveLambdaAspect: Helper to apply the aspect if CDK_LOCAL_LAMBDA=true
|
|
7
7
|
* - isLiveModeEnabled: Check if live mode is enabled
|
|
8
8
|
* - CdkLocalLambdaBootstrapStack: The bootstrap stack for shared infrastructure
|
|
9
9
|
*
|
package/lib/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Exports:
|
|
5
5
|
* - LiveLambdaAspect: CDK Aspect to transform Lambda functions
|
|
6
|
-
* - applyLiveLambdaAspect: Helper to apply the aspect if
|
|
6
|
+
* - applyLiveLambdaAspect: Helper to apply the aspect if CDK_LOCAL_LAMBDA=true
|
|
7
7
|
* - isLiveModeEnabled: Check if live mode is enabled
|
|
8
8
|
* - CdkLocalLambdaBootstrapStack: The bootstrap stack for shared infrastructure
|
|
9
9
|
*
|
|
@@ -25,4 +25,4 @@ export { applyLiveLambdaAspect, isLiveModeEnabled, LiveLambdaAspect, } from "./a
|
|
|
25
25
|
export { CdkLocalLambdaBootstrapStack, } from "./bootstrap-stack/bootstrap-stack.js";
|
|
26
26
|
// Re-export shared types
|
|
27
27
|
export { buildChannelName, hashFunctionName, LIVE_LAMBDA_DOCKER_TAG, LIVE_LAMBDA_TAG, SSM_BASE_PATH, } from "./shared/types.js";
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsbUNBQW1DO0FBQ25DLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUVqQixNQUFNLGdDQUFnQyxDQUFBO0FBRXZDLGdDQUFnQztBQUNoQyxPQUFPLEVBQ0wsNEJBQTRCLEdBRTdCLE1BQU0sc0NBQXNDLENBQUE7QUFFN0MseUJBQXlCO0FBQ3pCLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsZ0JBQWdCLEVBR2hCLHNCQUFzQixFQUN0QixlQUFlLEVBRWYsYUFBYSxHQUNkLE1BQU0sbUJBQW1CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1haW4gZW50cnkgcG9pbnQgZm9yIGNkay1sb2NhbC1sYW1iZGEuXG4gKlxuICogRXhwb3J0czpcbiAqIC0gTGl2ZUxhbWJkYUFzcGVjdDogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9uc1xuICogLSBhcHBseUxpdmVMYW1iZGFBc3BlY3Q6IEhlbHBlciB0byBhcHBseSB0aGUgYXNwZWN0IGlmIENES19MT0NBTF9MQU1CREE9dHJ1ZVxuICogLSBpc0xpdmVNb2RlRW5hYmxlZDogQ2hlY2sgaWYgbGl2ZSBtb2RlIGlzIGVuYWJsZWRcbiAqIC0gQ2RrTG9jYWxMYW1iZGFCb290c3RyYXBTdGFjazogVGhlIGJvb3RzdHJhcCBzdGFjayBmb3Igc2hhcmVkIGluZnJhc3RydWN0dXJlXG4gKlxuICogRm9yIERvY2tlciBmdW5jdGlvbiBzdXBwb3J0LCB5b3UgbXVzdCBpbnN0YWxsIHRoZSBib290c3RyYXAgQkVGT1JFIGFueSBDREtcbiAqIGltcG9ydHMgaW4geW91ciBhcHAgZW50cnkgcG9pbnQ6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IFwiY2RrLWxvY2FsLWxhbWJkYS9ib290c3RyYXBcIlxuICogaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG4gKiBgYGBcbiAqXG4gKiBOb2RlLmpzOiB0aGlzIGlzIHN1ZmZpY2llbnQuXG4gKiBCdW46IHVzZSBgYnVuIC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcGAgKHN0YXRpYyBFU00gaW1wb3J0cyBhcmVcbiAqIGxpbmtlZCBiZWZvcmUgdGhpcyBtb2R1bGUgcnVucykuXG4gKi9cblxuLy8gUmUtZXhwb3J0IHRoZSBhc3BlY3QgYW5kIGhlbHBlcnNcbmV4cG9ydCB7XG4gIGFwcGx5TGl2ZUxhbWJkYUFzcGVjdCxcbiAgaXNMaXZlTW9kZUVuYWJsZWQsXG4gIExpdmVMYW1iZGFBc3BlY3QsXG4gIHR5cGUgTGl2ZUxhbWJkYUFzcGVjdFByb3BzLFxufSBmcm9tIFwiLi9hc3BlY3QvbGl2ZS1sYW1iZGEtYXNwZWN0LmpzXCJcblxuLy8gUmUtZXhwb3J0IHRoZSBib290c3RyYXAgc3RhY2tcbmV4cG9ydCB7XG4gIENka0xvY2FsTGFtYmRhQm9vdHN0cmFwU3RhY2ssXG4gIHR5cGUgQ2RrTG9jYWxMYW1iZGFCb290c3RyYXBTdGFja1Byb3BzLFxufSBmcm9tIFwiLi9ib290c3RyYXAtc3RhY2svYm9vdHN0cmFwLXN0YWNrLmpzXCJcblxuLy8gUmUtZXhwb3J0IHNoYXJlZCB0eXBlc1xuZXhwb3J0IHtcbiAgYnVpbGRDaGFubmVsTmFtZSxcbiAgdHlwZSBFcnJvclBheWxvYWQsXG4gIGhhc2hGdW5jdGlvbk5hbWUsXG4gIHR5cGUgSW52b2NhdGlvbk1lc3NhZ2UsXG4gIHR5cGUgTGFtYmRhQ29udGV4dCxcbiAgTElWRV9MQU1CREFfRE9DS0VSX1RBRyxcbiAgTElWRV9MQU1CREFfVEFHLFxuICB0eXBlIFJlc3BvbnNlTWVzc2FnZSxcbiAgU1NNX0JBU0VfUEFUSCxcbn0gZnJvbSBcIi4vc2hhcmVkL3R5cGVzLmpzXCJcbiJdfQ==
|