cdk-local-lambda 0.1.1 → 0.1.3

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/README.md CHANGED
@@ -95,6 +95,24 @@ To deploy the bootstrap stack separately:
95
95
  npx cll bootstrap --profile my-profile --region us-west-2
96
96
  ```
97
97
 
98
+ ## Options
99
+
100
+ ### Conditional Configuration
101
+
102
+ Use `isInLocalMode()` to conditionally configure your constructs when running locally:
103
+
104
+ ```typescript
105
+ import { isInLocalMode } from "cdk-local-lambda"
106
+
107
+ new lambda.Function(this, "MyFunction", {
108
+ // Longer timeout for local debugging
109
+ timeout: isInLocalMode()
110
+ ? cdk.Duration.minutes(5)
111
+ : cdk.Duration.seconds(30),
112
+ // ... other props
113
+ })
114
+ ```
115
+
98
116
  ## Troubleshooting
99
117
 
100
118
  ### "No functions found with live-lambda tags yet"
@@ -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.CDK_LIVE === 'true') {
41
+ * if (process.env.CDK_LOCAL_LAMBDA === 'true') {
42
42
  * cdk.Aspects.of(app).add(new LiveLambdaAspect());
43
43
  * }
44
44
  * ```
@@ -73,9 +73,15 @@ export declare class LiveLambdaAspect implements cdk.IAspect {
73
73
  private transformFunction;
74
74
  }
75
75
  /**
76
- * Helper function to check if live mode is enabled
76
+ * Check if local mode is enabled (CDK_LOCAL_LAMBDA=true).
77
+ * Use this in your constructs for conditional configuration.
78
+ *
79
+ * @example
80
+ * timeout: isInLocalMode()
81
+ * ? cdk.Duration.minutes(5)
82
+ * : cdk.Duration.seconds(30)
77
83
  */
78
- export declare function isLiveModeEnabled(): boolean;
84
+ export declare function isInLocalMode(): boolean;
79
85
  /**
80
86
  * Apply live lambda aspect to a CDK app or stack if live mode is enabled.
81
87
  *
@@ -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.CDK_LIVE === 'true') {
28
+ * if (process.env.CDK_LOCAL_LAMBDA === 'true') {
29
29
  * cdk.Aspects.of(app).add(new LiveLambdaAspect());
30
30
  * }
31
31
  * ```
@@ -194,8 +194,6 @@ export class LiveLambdaAspect {
194
194
  `arn:aws:ssm:${stack.region}:${stack.account}:parameter${ssmBasePath}/*`,
195
195
  ],
196
196
  }));
197
- // Increase timeout to allow for local debugging
198
- cfnFunction.timeout = 300; // 5 minutes
199
197
  // Replace the Docker image with the bridge image
200
198
  cfnFunction.code = {
201
199
  imageUri: bridgeImageUri,
@@ -245,8 +243,6 @@ export class LiveLambdaAspect {
245
243
  `arn:aws:ssm:${stack.region}:${stack.account}:parameter${ssmBasePath}/*`,
246
244
  ],
247
245
  }));
248
- // Increase timeout to allow for local debugging
249
- cfnFunction.timeout = 300; // 5 minutes
250
246
  // Replace the code with bridge handler from bootstrap stack's S3 bucket
251
247
  cfnFunction.code = {
252
248
  s3Bucket: bridgeBucket,
@@ -256,10 +252,16 @@ export class LiveLambdaAspect {
256
252
  }
257
253
  }
258
254
  /**
259
- * Helper function to check if live mode is enabled
255
+ * Check if local mode is enabled (CDK_LOCAL_LAMBDA=true).
256
+ * Use this in your constructs for conditional configuration.
257
+ *
258
+ * @example
259
+ * timeout: isInLocalMode()
260
+ * ? cdk.Duration.minutes(5)
261
+ * : cdk.Duration.seconds(30)
260
262
  */
261
- export function isLiveModeEnabled() {
262
- return process.env.CDK_LIVE === "true";
263
+ export function isInLocalMode() {
264
+ return process.env.CDK_LOCAL_LAMBDA === "true";
263
265
  }
264
266
  /**
265
267
  * Apply live lambda aspect to a CDK app or stack if live mode is enabled.
@@ -268,11 +270,11 @@ export function isLiveModeEnabled() {
268
270
  * @param props Optional configuration for the live lambda aspect
269
271
  */
270
272
  export function applyLiveLambdaAspect(scope, props = {}) {
271
- if (!isLiveModeEnabled()) {
272
- console.log("[LiveLambda] Live mode not enabled (set CDK_LIVE=true to enable)");
273
+ if (!isInLocalMode()) {
274
+ console.log("[LiveLambda] Live mode not enabled (set CDK_LOCAL_LAMBDA=true to enable)");
273
275
  return;
274
276
  }
275
277
  console.log("[LiveLambda] Live mode enabled - transforming Lambda functions");
276
278
  cdk.Aspects.of(scope).add(new LiveLambdaAspect(props));
277
279
  }
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJ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Q0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxLQUFpQixFQUNqQixRQUErQixFQUFFO0lBRWpDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxrRUFBa0UsQ0FDbkUsQ0FBQTtRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0lBQzdFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmdcbiAqXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBDREsgYXBwL3N0YWNrLCB0aGlzIGFzcGVjdDpcbiAqIDEuIFJlcGxhY2VzIExhbWJkYSBjb2RlIHdpdGggdGhlIGJyaWRnZSBoYW5kbGVyIGZyb20gdGhlIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICogMi4gR3JhbnRzIElBTSBwZXJtaXNzaW9ucyBmb3IgQXBwU3luYyBFdmVudHNcbiAqIDMuIEFkZHMgYSB0YWcgd2l0aCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoIGZvciB0aGUgZGFlbW9uIHRvIGRpc2NvdmVyXG4gKlxuICogVGhlIGJyaWRnZSB1c2VzIEFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSAoYXV0by1pbmplY3RlZCBieSBMYW1iZGEpIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gKiBUaGUgZGFlbW9uIGRpc2NvdmVycyBmdW5jdGlvbnMgYnkgcXVlcnlpbmcgTGFtYmRhIEFQSSBmb3IgZnVuY3Rpb25zIHdpdGggdGhlIGxpdmUtbGFtYmRhIHRhZy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgdHlwZSAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIlxuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHtcbiAgTElWRV9MQU1CREFfRE9DS0VSX1RBRyxcbiAgTElWRV9MQU1CREFfVEFHLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzLmpzXCJcbmltcG9ydCB7XG4gIGdldERvY2tlckNvbnRleHRQYXRoLFxuICBpc0RvY2tlckltYWdlRnVuY3Rpb24sXG59IGZyb20gXCIuL2RvY2tlci1mdW5jdGlvbi1ob29rLmpzXCJcbmltcG9ydCB7IGdldEVudHJ5UGF0aCwgZ2V0SGFuZGxlck5hbWUgfSBmcm9tIFwiLi9ub2RlanMtZnVuY3Rpb24taG9vay5qc1wiXG5cbi8vIFJlZ2V4IHRvIHN0cmlwIGZpbGUgZXh0ZW5zaW9uIGZyb20gZW50cnkgcGF0aFxuY29uc3QgRVhURU5TSU9OX1JFR0VYID0gL1xcLih0c3xqc3xtanN8Y2pzfG10c3xjdHMpJC9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMaXZlTGFtYmRhQXNwZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUxhbWJkYUFzcGVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBuYW1lIHRvIHVzZSBmb3IgY2hhbm5lbCByb3V0aW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIHN0YWNrIG5hbWUgZnJvbSB0aGUgZnVuY3Rpb24ncyBzdGFjay5cbiAgICovXG4gIHN0YWNrTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogUGF0dGVybiB0byBtYXRjaCBmdW5jdGlvbiBjb25zdHJ1Y3QgSURzIHRvIHRyYW5zZm9ybS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgTGFtYmRhIGZ1bmN0aW9ucyBhcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBmdW5jdGlvblBhdHRlcm4/OiBSZWdFeHBcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gZXhjbHVkZSBmcm9tIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhjbHVkZUZ1bmN0aW9ucz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IHRyYW5zZm9ybXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmcuXG4gKlxuICogVXNhZ2UgaW4gYmluL2FwcC50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gKiBjb25zdCBzdGFjayA9IG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqXG4gKiBpZiAocHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09ICd0cnVlJykge1xuICogICBjZGsuQXNwZWN0cy5vZihhcHApLmFkZChuZXcgTGl2ZUxhbWJkYUFzcGVjdCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTGl2ZUxhbWJkYUFzcGVjdCBpbXBsZW1lbnRzIGNkay5JQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VkRnVuY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBMaXZlTGFtYmRhQXNwZWN0UHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBMYW1iZGEgRnVuY3Rpb24gdXNpbmcgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBpbnN0YW5jZW9mXG4gICAgLy8gVGhpcyBhdm9pZHMgaXNzdWVzIHdpdGggbXVsdGlwbGUgY29waWVzIG9mIGF3cy1jZGstbGliIGJlaW5nIGxvYWRlZFxuICAgIGlmICghdGhpcy5pc0xhbWJkYUZ1bmN0aW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXN0IHRvIGxhbWJkYS5GdW5jdGlvbiBmb3IgdHlwZSBjaGVja2luZyAod2UndmUgdmVyaWZpZWQgaXQncyBhIExhbWJkYSlcbiAgICBjb25zdCBmbiA9IG5vZGUgYXMgdW5rbm93biBhcyBsYW1iZGEuRnVuY3Rpb25cblxuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWQgKGFzcGVjdHMgY2FuIHZpc2l0IG11bHRpcGxlIHRpbWVzKVxuICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUubm9kZS5hZGRyXG4gICAgaWYgKHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmhhcyhub2RlSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBmdW5jdGlvbiBJRCBmcm9tIHRoZSBjb25zdHJ1Y3QgcGF0aFxuICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25JZChmbilcblxuICAgIC8vIENoZWNrIGV4Y2x1c2lvbiBsaXN0XG4gICAgaWYgKHRoaXMucHJvcHMuZXhjbHVkZUZ1bmN0aW9ucz8uaW5jbHVkZXMoZnVuY3Rpb25JZCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgZXhjbHVkZWQgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcGF0dGVybiBtYXRjaFxuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuZnVuY3Rpb25QYXR0ZXJuICYmXG4gICAgICAhdGhpcy5wcm9wcy5mdW5jdGlvblBhdHRlcm4udGVzdChmdW5jdGlvbklkKVxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBTa2lwcGluZyBub24tbWF0Y2hpbmcgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gdGhpcy5wcm9wcy5zdGFja05hbWUgfHwgY2RrLlN0YWNrLm9mKGZuKS5zdGFja05hbWVcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBEb2NrZXJJbWFnZUZ1bmN0aW9uXG4gICAgY29uc3QgaXNEb2NrZXJGdW5jdGlvbiA9IGlzRG9ja2VySW1hZ2VGdW5jdGlvbihmbilcblxuICAgIGlmIChpc0RvY2tlckZ1bmN0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBUcmFuc2Zvcm1pbmcgRG9ja2VySW1hZ2VGdW5jdGlvbjogJHtmdW5jdGlvbklkfWAsXG4gICAgICApXG4gICAgICB0aGlzLnRyYW5zZm9ybURvY2tlckZ1bmN0aW9uKGZuLCBzdGFja05hbWUsIGZ1bmN0aW9uSWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBoYW5kbGVyIHBhdGhzIGJlZm9yZSB3ZSBtb2RpZnkgYW55dGhpbmdcbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRocyA9IHRoaXMuZ2V0SGFuZGxlclBhdGhzKGZuKVxuXG4gICAgICAvLyBTa2lwIHVuc3VwcG9ydGVkIGZ1bmN0aW9ucyAobm90IE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24pXG4gICAgICBpZiAoIWhhbmRsZXJQYXRocykge1xuICAgICAgICB0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5hZGQobm9kZUlkKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBvcmlnaW5hbEhhbmRsZXIsIGxvY2FsSGFuZGxlciB9ID0gaGFuZGxlclBhdGhzXG5cbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gVHJhbnNmb3JtaW5nIGZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YClcblxuICAgICAgLy8gVHJhbnNmb3JtIHRoZSBmdW5jdGlvblxuICAgICAgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihcbiAgICAgICAgZm4sXG4gICAgICAgIHN0YWNrTmFtZSxcbiAgICAgICAgZnVuY3Rpb25JZCxcbiAgICAgICAgb3JpZ2luYWxIYW5kbGVyLFxuICAgICAgICBsb2NhbEhhbmRsZXIsXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzZWRGdW5jdGlvbnMuYWRkKG5vZGVJZClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNvbnN0cnVjdCBpcyBhIExhbWJkYSBGdW5jdGlvbiB1c2luZyBkdWNrLXR5cGluZy5cbiAgICogVGhpcyBhdm9pZHMgaW5zdGFuY2VvZiBpc3N1ZXMgd2hlbiBtdWx0aXBsZSBjb3BpZXMgb2YgYXdzLWNkay1saWIgYXJlIGxvYWRlZC5cbiAgICovXG4gIHByaXZhdGUgaXNMYW1iZGFGdW5jdGlvbihub2RlOiBJQ29uc3RydWN0KTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgYnkgY29uc3RydWN0b3IgbmFtZSAtIGhhbmRsZXMgRnVuY3Rpb24sIERvY2tlckltYWdlRnVuY3Rpb24sIE5vZGVqc0Z1bmN0aW9uLCBldGMuXG4gICAgLy8gQWxzbyBoYW5kbGVzIG91ciBwYXRjaGVkIHZlcnNpb25zIGxpa2UgRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlXG4gICAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gbm9kZS5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgLy8gQ0RLIGFwcGVuZHMgXCIyXCIgdG8gY2xhc3MgbmFtZXMgaW4gc29tZSB2ZXJzaW9uc1xuICAgIGNvbnN0IGlzRnVuY3Rpb24gPVxuICAgICAgY29uc3RydWN0b3JOYW1lID09PSBcIkZ1bmN0aW9uXCIgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJGdW5jdGlvbjJcIiB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmVuZHNXaXRoKFwiRnVuY3Rpb25cIikgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZS5lbmRzV2l0aChcIkZ1bmN0aW9uMlwiKSB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmluY2x1ZGVzKFwiRnVuY3Rpb25cIikgLy8gQ2F0Y2ggcGF0Y2hlZCB2ZXJzaW9ucyBsaWtlIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBFeGNsdWRlIENmbkZ1bmN0aW9uICh0aGUgTDEgY29uc3RydWN0KVxuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IFwiQ2ZuRnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IGl0IGhhcyBleHBlY3RlZCBMYW1iZGEgRnVuY3Rpb24gcHJvcGVydGllc1xuICAgIGNvbnN0IG1heWJlRnVuY3Rpb24gPSBub2RlIGFzIHVua25vd24gYXMge1xuICAgICAgZnVuY3Rpb25OYW1lPzogdW5rbm93blxuICAgICAgZnVuY3Rpb25Bcm4/OiB1bmtub3duXG4gICAgICBub2RlPzogeyBkZWZhdWx0Q2hpbGQ/OiB1bmtub3duIH1cbiAgICB9XG5cbiAgICAvLyBNdXN0IGhhdmUgZnVuY3Rpb25OYW1lIGFuZCBmdW5jdGlvbkFybiAoSUZ1bmN0aW9uIGludGVyZmFjZSlcbiAgICBpZiAoIW1heWJlRnVuY3Rpb24uZnVuY3Rpb25OYW1lIHx8ICFtYXliZUZ1bmN0aW9uLmZ1bmN0aW9uQXJuKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBNdXN0IGhhdmUgYSBkZWZhdWx0Q2hpbGQgKHRoZSBDZm5GdW5jdGlvbilcbiAgICBpZiAoIW1heWJlRnVuY3Rpb24ubm9kZT8uZGVmYXVsdENoaWxkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZ1bmN0aW9uSWQoZm46IGxhbWJkYS5GdW5jdGlvbik6IHN0cmluZyB7XG4gICAgLy8gVXNlIHRoZSBjb25zdHJ1Y3QgSUQgYXMgdGhlIGZ1bmN0aW9uIElEXG4gICAgLy8gRm9yIG5lc3RlZCBjb25zdHJ1Y3RzLCBqb2luIHdpdGggZGFzaGVzXG4gICAgY29uc3QgcGFydHMgPSBmbi5ub2RlLnBhdGguc3BsaXQoXCIvXCIpXG4gICAgLy8gU2tpcCBmaXJzdCBwYXJ0IChBcHApIGFuZCB0YWtlIHRoZSByZXN0XG4gICAgY29uc3QgcmVsZXZhbnRQYXJ0cyA9IHBhcnRzLnNsaWNlKDEpXG4gICAgcmV0dXJuIHJlbGV2YW50UGFydHMuam9pbihcIi1cIikucmVwbGFjZSgvW15hLXpBLVowLTktXS9nLCBcIi1cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaGFuZGxlciBwYXRocyBmb3IgYSBmdW5jdGlvbi5cbiAgICogUmV0dXJucyBib3RoIHRoZSBvcmlnaW5hbCBoYW5kbGVyIChhcyBzZXQgaW4gQ2ZuRnVuY3Rpb24pIGFuZCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKGUuZy4sIG5vdCBhIE5vZGVqc0Z1bmN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0SGFuZGxlclBhdGhzKGZuOiBsYW1iZGEuRnVuY3Rpb24pOiB7XG4gICAgb3JpZ2luYWxIYW5kbGVyOiBzdHJpbmdcbiAgICBsb2NhbEhhbmRsZXI6IHN0cmluZ1xuICB9IHwgbnVsbCB7XG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb25cbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZXIgPSBjZm5GdW5jdGlvbi5oYW5kbGVyIHx8IFwiaW5kZXguaGFuZGxlclwiXG4gICAgY29uc3QgY29uc3RydWN0SWQgPSBmbi5ub2RlLmlkXG5cbiAgICAvLyBDaGVjayBpZiBjYXB0dXJlZCBieSB0aGUgTm9kZWpzRnVuY3Rpb24gaG9va1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGdldEVudHJ5UGF0aChmbilcbiAgICBjb25zdCBoYW5kbGVyTmFtZSA9IGdldEhhbmRsZXJOYW1lKGZuKSB8fCBcImhhbmRsZXJcIlxuICAgIGlmIChlbnRyeVBhdGgpIHtcbiAgICAgIC8vIENvbnZlcnQgZW50cnkgcGF0aCB0byBsb2NhbCBoYW5kbGVyIHBhdGhcbiAgICAgIC8vIGUuZy4sIFwiZnVuY3Rpb25zL3MzLXdyaXRlci9oYW5kbGVyLnRzXCIgKyBcImhhbmRsZXJcIiAtPiBcImZ1bmN0aW9ucy9zMy13cml0ZXIvaGFuZGxlci5oYW5kbGVyXCJcbiAgICAgIGNvbnN0IGxvY2FsSGFuZGxlciA9IGAke2VudHJ5UGF0aC5yZXBsYWNlKEVYVEVOU0lPTl9SRUdFWCwgXCJcIil9LiR7aGFuZGxlck5hbWV9YFxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gVXNpbmcgY2FwdHVyZWQgZW50cnkgZm9yICR7Y29uc3RydWN0SWR9OiAke2xvY2FsSGFuZGxlcn1gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHsgb3JpZ2luYWxIYW5kbGVyLCBsb2NhbEhhbmRsZXIgfVxuICAgIH1cblxuICAgIC8vIE5vIGhhbmRsZXIgcGF0aCBmb3VuZCAtIHRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCAobm90IGEgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbilcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gXCIke2NvbnN0cnVjdElkfVwiOiBgICtcbiAgICAgICAgYG5vdCBhIE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24gKG9yIGJvb3RzdHJhcCBob29rIHdhcyBub3QgaW5zdGFsbGVkIGVhcmx5IGVub3VnaClgLFxuICAgIClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIERvY2tlckltYWdlRnVuY3Rpb24gdG8gdXNlIHRoZSBicmlkZ2UgRG9ja2VyIGltYWdlLlxuICAgKiBTdG9yZXMgdGhlIGxvY2FsIERvY2tlciBjb250ZXh0IHBhdGggaW4gYSB0YWcgZm9yIHRoZSBkYWVtb24gdG8gYnVpbGQvcnVuIGxvY2FsbHkuXG4gICAqL1xuICBwcml2YXRlIHRyYW5zZm9ybURvY2tlckZ1bmN0aW9uKFxuICAgIGZuOiBsYW1iZGEuRnVuY3Rpb24sXG4gICAgX3N0YWNrTmFtZTogc3RyaW5nLFxuICAgIGZ1bmN0aW9uSWQ6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb25cbiAgICBjb25zdCBzdGFjayA9IGNkay5TdGFjay5vZihmbilcblxuICAgIC8vIEdldCB0aGUgZG9ja2VyIGNvbnRleHQgcGF0aCBmcm9tIHRoZSBob29rXG4gICAgY29uc3QgZG9ja2VyQ29udGV4dFBhdGggPSBnZXREb2NrZXJDb250ZXh0UGF0aChmbilcbiAgICBpZiAoIWRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gTm8gZG9ja2VyIGNvbnRleHQgcGF0aCBmb3IgXCIke2Z1bmN0aW9uSWR9XCIuIGAgK1xuICAgICAgICAgIGBUaGUgYm9vdHN0cmFwIGhvb2sgd2FzIG5vdCBpbnN0YWxsZWQgZWFybHkgZW5vdWdoLiBgICtcbiAgICAgICAgICBgRml4OiBpbXBvcnQgXCJjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcFwiIGJlZm9yZSBhbnkgQ0RLIGltcG9ydHMgKE5vZGUuanMpLCBgICtcbiAgICAgICAgICBgb3IgcnVuIEJ1biB3aXRoIFwiYnVuIC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcFwiLmAsXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gR2V0IFNTTSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgYm9vdHN0cmFwUXVhbGlmaWVyID1cbiAgICAgIHN0YWNrLm5vZGUudHJ5R2V0Q29udGV4dChcIkBhd3MtY2RrL2NvcmU6Ym9vdHN0cmFwUXVhbGlmaWVyXCIpIHx8XG4gICAgICBcImhuYjY1OWZkc1wiXG4gICAgY29uc3Qgc3NtQmFzZVBhdGggPSBgJHtTU01fQkFTRV9QQVRIfS8ke2Jvb3RzdHJhcFF1YWxpZmllcn1gXG5cbiAgICBjb25zdCBhcGlBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYXBpLWFybmAsXG4gICAgKVxuXG4gICAgLy8gRGV0ZXJtaW5lIGFyY2hpdGVjdHVyZSBhbmQgZ2V0IGFwcHJvcHJpYXRlIGJyaWRnZSBpbWFnZVxuICAgIGNvbnN0IGFyY2hpdGVjdHVyZSA9IHRoaXMuZ2V0QXJjaGl0ZWN0dXJlKGNmbkZ1bmN0aW9uKVxuICAgIGNvbnN0IGJyaWRnZUltYWdlUGFyYW0gPVxuICAgICAgYXJjaGl0ZWN0dXJlID09PSBcImFybTY0XCIgPyBcImJyaWRnZS1pbWFnZS1hcm02NFwiIDogXCJicmlkZ2UtaW1hZ2UteDg2XzY0XCJcblxuICAgIGNvbnN0IGJyaWRnZUltYWdlVXJpID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9LyR7YnJpZGdlSW1hZ2VQYXJhbX1gLFxuICAgIClcblxuICAgIC8vIEFkZCB0YWcgd2l0aCBkb2NrZXIgY29udGV4dCBwYXRoIGZvciBkYWVtb24gZGlzY292ZXJ5XG4gICAgLy8gVGhlIGRhZW1vbiB1c2VzIHRoaXMgdGFnIHRvIGJ1aWxkIGFuZCBydW4gdGhlIGNvbnRhaW5lciBsb2NhbGx5XG4gICAgY2ZuRnVuY3Rpb24udGFncy5zZXRUYWcoTElWRV9MQU1CREFfRE9DS0VSX1RBRywgZG9ja2VyQ29udGV4dFBhdGgpXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBwdWJsaXNoL3N1YnNjcmliZSB0byBBcHBTeW5jIEV2ZW50c1xuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50Q29ubmVjdFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFB1Ymxpc2hcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRTdWJzY3JpYmVcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYXBpQXJuLCBgJHthcGlBcm59LypgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHJlYWQgU1NNIHBhcmFtZXRlcnMgKGJyaWRnZSBuZWVkcyBBcHBTeW5jIGVuZHBvaW50cylcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06cGFyYW1ldGVyJHtzc21CYXNlUGF0aH0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBJbmNyZWFzZSB0aW1lb3V0IHRvIGFsbG93IGZvciBsb2NhbCBkZWJ1Z2dpbmdcbiAgICBjZm5GdW5jdGlvbi50aW1lb3V0ID0gMzAwIC8vIDUgbWludXRlc1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgRG9ja2VyIGltYWdlIHdpdGggdGhlIGJyaWRnZSBpbWFnZVxuICAgIGNmbkZ1bmN0aW9uLmNvZGUgPSB7XG4gICAgICBpbWFnZVVyaTogYnJpZGdlSW1hZ2VVcmksXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0xpdmVMYW1iZGFdIFJlcGxhY2VkIERvY2tlciBpbWFnZSB3aXRoIGJyaWRnZSAoJHthcmNoaXRlY3R1cmV9KWAsXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgYXJjaGl0ZWN0dXJlIG9mIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBEZWZhdWx0cyB0byB4ODZfNjQgaWYgbm90IGV4cGxpY2l0bHkgc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBcmNoaXRlY3R1cmUoY2ZuRnVuY3Rpb246IGxhbWJkYS5DZm5GdW5jdGlvbik6IFwiYXJtNjRcIiB8IFwieDg2XzY0XCIge1xuICAgIGNvbnN0IGFyY2hpdGVjdHVyZXMgPSBjZm5GdW5jdGlvbi5hcmNoaXRlY3R1cmVzIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gICAgaWYgKGFyY2hpdGVjdHVyZXM/LmluY2x1ZGVzKFwiYXJtNjRcIikpIHtcbiAgICAgIHJldHVybiBcImFybTY0XCJcbiAgICB9XG4gICAgcmV0dXJuIFwieDg2XzY0XCJcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRnVuY3Rpb24oXG4gICAgZm46IGxhbWJkYS5GdW5jdGlvbixcbiAgICBfc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgX2Z1bmN0aW9uSWQ6IHN0cmluZyxcbiAgICBfb3JpZ2luYWxIYW5kbGVyOiBzdHJpbmcsXG4gICAgbG9jYWxIYW5kbGVyOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uXG4gICAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2YoZm4pXG5cbiAgICAvLyBSZWFkIHZhbHVlcyBmcm9tIFNTTSBwYXJhbWV0ZXJzIChjcmVhdGVkIGJ5IGJvb3RzdHJhcCBzdGFjaylcbiAgICAvLyBVc2UgdGhlIENESyBib290c3RyYXAgcXVhbGlmaWVyIGZvciBwcm9wZXIgc2NvcGluZ1xuICAgIGNvbnN0IGJvb3RzdHJhcFF1YWxpZmllciA9XG4gICAgICBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllclwiKSB8fFxuICAgICAgXCJobmI2NTlmZHNcIlxuICAgIGNvbnN0IHNzbUJhc2VQYXRoID0gYCR7U1NNX0JBU0VfUEFUSH0vJHtib290c3RyYXBRdWFsaWZpZXJ9YFxuXG4gICAgY29uc3QgYXBpQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2FwaS1hcm5gLFxuICAgIClcbiAgICBjb25zdCBicmlkZ2VCdWNrZXQgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYnJpZGdlLWJ1Y2tldGAsXG4gICAgKVxuICAgIGNvbnN0IGJyaWRnZUtleSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9icmlkZ2Uta2V5YCxcbiAgICApXG5cbiAgICAvLyBBZGQgdGFnIHdpdGggbG9jYWwgaGFuZGxlciBwYXRoIGZvciBkYWVtb24gZGlzY292ZXJ5XG4gICAgLy8gVGhlIGRhZW1vbiBxdWVyaWVzIExhbWJkYSBBUEkgZm9yIGZ1bmN0aW9ucyB3aXRoIHRoaXMgdGFnXG4gICAgY2ZuRnVuY3Rpb24udGFncy5zZXRUYWcoTElWRV9MQU1CREFfVEFHLCBsb2NhbEhhbmRsZXIpXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBwdWJsaXNoL3N1YnNjcmliZSB0byBBcHBTeW5jIEV2ZW50c1xuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50Q29ubmVjdFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFB1Ymxpc2hcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRTdWJzY3JpYmVcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYXBpQXJuLCBgJHthcGlBcm59LypgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHJlYWQgU1NNIHBhcmFtZXRlcnMgKGJyaWRnZSBuZWVkcyBBcHBTeW5jIGVuZHBvaW50cylcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06cGFyYW1ldGVyJHtzc21CYXNlUGF0aH0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBJbmNyZWFzZSB0aW1lb3V0IHRvIGFsbG93IGZvciBsb2NhbCBkZWJ1Z2dpbmdcbiAgICBjZm5GdW5jdGlvbi50aW1lb3V0ID0gMzAwIC8vIDUgbWludXRlc1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgY29kZSB3aXRoIGJyaWRnZSBoYW5kbGVyIGZyb20gYm9vdHN0cmFwIHN0YWNrJ3MgUzMgYnVja2V0XG4gICAgY2ZuRnVuY3Rpb24uY29kZSA9IHtcbiAgICAgIHMzQnVja2V0OiBicmlkZ2VCdWNrZXQsXG4gICAgICBzM0tleTogYnJpZGdlS2V5LFxuICAgIH1cbiAgICBjZm5GdW5jdGlvbi5oYW5kbGVyID0gXCJpbmRleC5oYW5kbGVyXCJcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBsaXZlIG1vZGUgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMaXZlTW9kZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5DREtfTElWRSA9PT0gXCJ0cnVlXCJcbn1cblxuLyoqXG4gKiBBcHBseSBsaXZlIGxhbWJkYSBhc3BlY3QgdG8gYSBDREsgYXBwIG9yIHN0YWNrIGlmIGxpdmUgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBzY29wZSBUaGUgQ0RLIGFwcCBvciBzdGFjayB0byBhcHBseSB0aGUgYXNwZWN0IHRvXG4gKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxpdmUgbGFtYmRhIGFzcGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaXZlTGFtYmRhQXNwZWN0KFxuICBzY29wZTogSUNvbnN0cnVjdCxcbiAgcHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wcyA9IHt9LFxuKTogdm9pZCB7XG4gIGlmICghaXNMaXZlTW9kZUVuYWJsZWQoKSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIG5vdCBlbmFibGVkIChzZXQgQ0RLX0xJVkU9dHJ1ZSB0byBlbmFibGUpXCIsXG4gICAgKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc29sZS5sb2coXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIGVuYWJsZWQgLSB0cmFuc2Zvcm1pbmcgTGFtYmRhIGZ1bmN0aW9uc1wiKVxuICBjZGsuQXNwZWN0cy5vZihzY29wZSkuYWRkKG5ldyBMaXZlTGFtYmRhQXNwZWN0KHByb3BzKSlcbn1cbiJdfQ==
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJ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T0FBTyxDQUFDLEdBQUcsQ0FDVCwwRUFBMEUsQ0FDM0UsQ0FBQTtRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0lBQzdFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmdcbiAqXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBDREsgYXBwL3N0YWNrLCB0aGlzIGFzcGVjdDpcbiAqIDEuIFJlcGxhY2VzIExhbWJkYSBjb2RlIHdpdGggdGhlIGJyaWRnZSBoYW5kbGVyIGZyb20gdGhlIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICogMi4gR3JhbnRzIElBTSBwZXJtaXNzaW9ucyBmb3IgQXBwU3luYyBFdmVudHNcbiAqIDMuIEFkZHMgYSB0YWcgd2l0aCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoIGZvciB0aGUgZGFlbW9uIHRvIGRpc2NvdmVyXG4gKlxuICogVGhlIGJyaWRnZSB1c2VzIEFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSAoYXV0by1pbmplY3RlZCBieSBMYW1iZGEpIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gKiBUaGUgZGFlbW9uIGRpc2NvdmVycyBmdW5jdGlvbnMgYnkgcXVlcnlpbmcgTGFtYmRhIEFQSSBmb3IgZnVuY3Rpb25zIHdpdGggdGhlIGxpdmUtbGFtYmRhIHRhZy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgdHlwZSAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIlxuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHtcbiAgTElWRV9MQU1CREFfRE9DS0VSX1RBRyxcbiAgTElWRV9MQU1CREFfVEFHLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzLmpzXCJcbmltcG9ydCB7XG4gIGdldERvY2tlckNvbnRleHRQYXRoLFxuICBpc0RvY2tlckltYWdlRnVuY3Rpb24sXG59IGZyb20gXCIuL2RvY2tlci1mdW5jdGlvbi1ob29rLmpzXCJcbmltcG9ydCB7IGdldEVudHJ5UGF0aCwgZ2V0SGFuZGxlck5hbWUgfSBmcm9tIFwiLi9ub2RlanMtZnVuY3Rpb24taG9vay5qc1wiXG5cbi8vIFJlZ2V4IHRvIHN0cmlwIGZpbGUgZXh0ZW5zaW9uIGZyb20gZW50cnkgcGF0aFxuY29uc3QgRVhURU5TSU9OX1JFR0VYID0gL1xcLih0c3xqc3xtanN8Y2pzfG10c3xjdHMpJC9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMaXZlTGFtYmRhQXNwZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUxhbWJkYUFzcGVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBuYW1lIHRvIHVzZSBmb3IgY2hhbm5lbCByb3V0aW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIHN0YWNrIG5hbWUgZnJvbSB0aGUgZnVuY3Rpb24ncyBzdGFjay5cbiAgICovXG4gIHN0YWNrTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogUGF0dGVybiB0byBtYXRjaCBmdW5jdGlvbiBjb25zdHJ1Y3QgSURzIHRvIHRyYW5zZm9ybS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgTGFtYmRhIGZ1bmN0aW9ucyBhcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBmdW5jdGlvblBhdHRlcm4/OiBSZWdFeHBcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gZXhjbHVkZSBmcm9tIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhjbHVkZUZ1bmN0aW9ucz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IHRyYW5zZm9ybXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmcuXG4gKlxuICogVXNhZ2UgaW4gYmluL2FwcC50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gKiBjb25zdCBzdGFjayA9IG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqXG4gKiBpZiAocHJvY2Vzcy5lbnYuQ0RLX0xPQ0FMX0xBTUJEQSA9PT0gJ3RydWUnKSB7XG4gKiAgIGNkay5Bc3BlY3RzLm9mKGFwcCkuYWRkKG5ldyBMaXZlTGFtYmRhQXNwZWN0KCkpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXZlTGFtYmRhQXNwZWN0IGltcGxlbWVudHMgY2RrLklBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBMaXZlTGFtYmRhQXNwZWN0UHJvcHNcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzZWRGdW5jdGlvbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIExhbWJkYSBGdW5jdGlvbiB1c2luZyBkdWNrLXR5cGluZyBpbnN0ZWFkIG9mIGluc3RhbmNlb2ZcbiAgICAvLyBUaGlzIGF2b2lkcyBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBjb3BpZXMgb2YgYXdzLWNkay1saWIgYmVpbmcgbG9hZGVkXG4gICAgaWYgKCF0aGlzLmlzTGFtYmRhRnVuY3Rpb24obm9kZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhc3QgdG8gbGFtYmRhLkZ1bmN0aW9uIGZvciB0eXBlIGNoZWNraW5nICh3ZSd2ZSB2ZXJpZmllZCBpdCdzIGEgTGFtYmRhKVxuICAgIGNvbnN0IGZuID0gbm9kZSBhcyB1bmtub3duIGFzIGxhbWJkYS5GdW5jdGlvblxuXG4gICAgLy8gU2tpcCBpZiBhbHJlYWR5IHByb2Nlc3NlZCAoYXNwZWN0cyBjYW4gdmlzaXQgbXVsdGlwbGUgdGltZXMpXG4gICAgY29uc3Qgbm9kZUlkID0gbm9kZS5ub2RlLmFkZHJcbiAgICBpZiAodGhpcy5wcm9jZXNzZWRGdW5jdGlvbnMuaGFzKG5vZGVJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGZ1bmN0aW9uIElEIGZyb20gdGhlIGNvbnN0cnVjdCBwYXRoXG4gICAgY29uc3QgZnVuY3Rpb25JZCA9IHRoaXMuZ2VuZXJhdGVGdW5jdGlvbklkKGZuKVxuXG4gICAgLy8gQ2hlY2sgZXhjbHVzaW9uIGxpc3RcbiAgICBpZiAodGhpcy5wcm9wcy5leGNsdWRlRnVuY3Rpb25zPy5pbmNsdWRlcyhmdW5jdGlvbklkKSkge1xuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBTa2lwcGluZyBleGNsdWRlZCBmdW5jdGlvbjogJHtmdW5jdGlvbklkfWApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDaGVjayBwYXR0ZXJuIG1hdGNoXG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm9wcy5mdW5jdGlvblBhdHRlcm4gJiZcbiAgICAgICF0aGlzLnByb3BzLmZ1bmN0aW9uUGF0dGVybi50ZXN0KGZ1bmN0aW9uSWQpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0xpdmVMYW1iZGFdIFNraXBwaW5nIG5vbi1tYXRjaGluZyBmdW5jdGlvbjogJHtmdW5jdGlvbklkfWApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFja05hbWUgPSB0aGlzLnByb3BzLnN0YWNrTmFtZSB8fCBjZGsuU3RhY2sub2YoZm4pLnN0YWNrTmFtZVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIERvY2tlckltYWdlRnVuY3Rpb25cbiAgICBjb25zdCBpc0RvY2tlckZ1bmN0aW9uID0gaXNEb2NrZXJJbWFnZUZ1bmN0aW9uKGZuKVxuXG4gICAgaWYgKGlzRG9ja2VyRnVuY3Rpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgW0xpdmVMYW1iZGFdIFRyYW5zZm9ybWluZyBEb2NrZXJJbWFnZUZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YCxcbiAgICAgIClcbiAgICAgIHRoaXMudHJhbnNmb3JtRG9ja2VyRnVuY3Rpb24oZm4sIHN0YWNrTmFtZSwgZnVuY3Rpb25JZClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gR2V0IGhhbmRsZXIgcGF0aHMgYmVmb3JlIHdlIG1vZGlmeSBhbnl0aGluZ1xuICAgICAgY29uc3QgaGFuZGxlclBhdGhzID0gdGhpcy5nZXRIYW5kbGVyUGF0aHMoZm4pXG5cbiAgICAgIC8vIFNraXAgdW5zdXBwb3J0ZWQgZnVuY3Rpb25zIChub3QgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbilcbiAgICAgIGlmICghaGFuZGxlclBhdGhzKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmFkZChub2RlSWQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG9yaWdpbmFsSGFuZGxlciwgbG9jYWxIYW5kbGVyIH0gPSBoYW5kbGVyUGF0aHNcblxuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBUcmFuc2Zvcm1pbmcgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuXG4gICAgICAvLyBUcmFuc2Zvcm0gdGhlIGZ1bmN0aW9uXG4gICAgICB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uKFxuICAgICAgICBmbixcbiAgICAgICAgc3RhY2tOYW1lLFxuICAgICAgICBmdW5jdGlvbklkLFxuICAgICAgICBvcmlnaW5hbEhhbmRsZXIsXG4gICAgICAgIGxvY2FsSGFuZGxlcixcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5hZGQobm9kZUlkKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgY29uc3RydWN0IGlzIGEgTGFtYmRhIEZ1bmN0aW9uIHVzaW5nIGR1Y2stdHlwaW5nLlxuICAgKiBUaGlzIGF2b2lkcyBpbnN0YW5jZW9mIGlzc3VlcyB3aGVuIG11bHRpcGxlIGNvcGllcyBvZiBhd3MtY2RrLWxpYiBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0xhbWJkYUZ1bmN0aW9uKG5vZGU6IElDb25zdHJ1Y3QpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBieSBjb25zdHJ1Y3RvciBuYW1lIC0gaGFuZGxlcyBGdW5jdGlvbiwgRG9ja2VySW1hZ2VGdW5jdGlvbiwgTm9kZWpzRnVuY3Rpb24sIGV0Yy5cbiAgICAvLyBBbHNvIGhhbmRsZXMgb3VyIHBhdGNoZWQgdmVyc2lvbnMgbGlrZSBEb2NrZXJJbWFnZUZ1bmN0aW9uV2l0aENhcHR1cmVcbiAgICBjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSBub2RlLmNvbnN0cnVjdG9yLm5hbWVcbiAgICAvLyBDREsgYXBwZW5kcyBcIjJcIiB0byBjbGFzcyBuYW1lcyBpbiBzb21lIHZlcnNpb25zXG4gICAgY29uc3QgaXNGdW5jdGlvbiA9XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPT09IFwiRnVuY3Rpb25cIiB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lID09PSBcIkZ1bmN0aW9uMlwiIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuZW5kc1dpdGgoXCJGdW5jdGlvblwiKSB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmVuZHNXaXRoKFwiRnVuY3Rpb24yXCIpIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuaW5jbHVkZXMoXCJGdW5jdGlvblwiKSAvLyBDYXRjaCBwYXRjaGVkIHZlcnNpb25zIGxpa2UgRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlXG5cbiAgICBpZiAoIWlzRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIEV4Y2x1ZGUgQ2ZuRnVuY3Rpb24gKHRoZSBMMSBjb25zdHJ1Y3QpXG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJDZm5GdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgaXQgaGFzIGV4cGVjdGVkIExhbWJkYSBGdW5jdGlvbiBwcm9wZXJ0aWVzXG4gICAgY29uc3QgbWF5YmVGdW5jdGlvbiA9IG5vZGUgYXMgdW5rbm93biBhcyB7XG4gICAgICBmdW5jdGlvbk5hbWU/OiB1bmtub3duXG4gICAgICBmdW5jdGlvbkFybj86IHVua25vd25cbiAgICAgIG5vZGU/OiB7IGRlZmF1bHRDaGlsZD86IHVua25vd24gfVxuICAgIH1cblxuICAgIC8vIE11c3QgaGF2ZSBmdW5jdGlvbk5hbWUgYW5kIGZ1bmN0aW9uQXJuIChJRnVuY3Rpb24gaW50ZXJmYWNlKVxuICAgIGlmICghbWF5YmVGdW5jdGlvbi5mdW5jdGlvbk5hbWUgfHwgIW1heWJlRnVuY3Rpb24uZnVuY3Rpb25Bcm4pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIE11c3QgaGF2ZSBhIGRlZmF1bHRDaGlsZCAodGhlIENmbkZ1bmN0aW9uKVxuICAgIGlmICghbWF5YmVGdW5jdGlvbi5ub2RlPy5kZWZhdWx0Q2hpbGQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRnVuY3Rpb25JZChmbjogbGFtYmRhLkZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgdGhlIGNvbnN0cnVjdCBJRCBhcyB0aGUgZnVuY3Rpb24gSURcbiAgICAvLyBGb3IgbmVzdGVkIGNvbnN0cnVjdHMsIGpvaW4gd2l0aCBkYXNoZXNcbiAgICBjb25zdCBwYXJ0cyA9IGZuLm5vZGUucGF0aC5zcGxpdChcIi9cIilcbiAgICAvLyBTa2lwIGZpcnN0IHBhcnQgKEFwcCkgYW5kIHRha2UgdGhlIHJlc3RcbiAgICBjb25zdCByZWxldmFudFBhcnRzID0gcGFydHMuc2xpY2UoMSlcbiAgICByZXR1cm4gcmVsZXZhbnRQYXJ0cy5qb2luKFwiLVwiKS5yZXBsYWNlKC9bXmEtekEtWjAtOS1dL2csIFwiLVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoYW5kbGVyIHBhdGhzIGZvciBhIGZ1bmN0aW9uLlxuICAgKiBSZXR1cm5zIGJvdGggdGhlIG9yaWdpbmFsIGhhbmRsZXIgKGFzIHNldCBpbiBDZm5GdW5jdGlvbikgYW5kIHRoZSBsb2NhbCBoYW5kbGVyIHBhdGguXG4gICAqIFJldHVybnMgbnVsbCBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCAoZS5nLiwgbm90IGEgTm9kZWpzRnVuY3Rpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIYW5kbGVyUGF0aHMoZm46IGxhbWJkYS5GdW5jdGlvbik6IHtcbiAgICBvcmlnaW5hbEhhbmRsZXI6IHN0cmluZ1xuICAgIGxvY2FsSGFuZGxlcjogc3RyaW5nXG4gIH0gfCBudWxsIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IG9yaWdpbmFsSGFuZGxlciA9IGNmbkZ1bmN0aW9uLmhhbmRsZXIgfHwgXCJpbmRleC5oYW5kbGVyXCJcbiAgICBjb25zdCBjb25zdHJ1Y3RJZCA9IGZuLm5vZGUuaWRcblxuICAgIC8vIENoZWNrIGlmIGNhcHR1cmVkIGJ5IHRoZSBOb2RlanNGdW5jdGlvbiBob29rXG4gICAgY29uc3QgZW50cnlQYXRoID0gZ2V0RW50cnlQYXRoKGZuKVxuICAgIGNvbnN0IGhhbmRsZXJOYW1lID0gZ2V0SGFuZGxlck5hbWUoZm4pIHx8IFwiaGFuZGxlclwiXG4gICAgaWYgKGVudHJ5UGF0aCkge1xuICAgICAgLy8gQ29udmVydCBlbnRyeSBwYXRoIHRvIGxvY2FsIGhhbmRsZXIgcGF0aFxuICAgICAgLy8gZS5nLiwgXCJmdW5jdGlvbnMvczMtd3JpdGVyL2hhbmRsZXIudHNcIiArIFwiaGFuZGxlclwiIC0+IFwiZnVuY3Rpb25zL3MzLXdyaXRlci9oYW5kbGVyLmhhbmRsZXJcIlxuICAgICAgY29uc3QgbG9jYWxIYW5kbGVyID0gYCR7ZW50cnlQYXRoLnJlcGxhY2UoRVhURU5TSU9OX1JFR0VYLCBcIlwiKX0uJHtoYW5kbGVyTmFtZX1gXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBVc2luZyBjYXB0dXJlZCBlbnRyeSBmb3IgJHtjb25zdHJ1Y3RJZH06ICR7bG9jYWxIYW5kbGVyfWAsXG4gICAgICApXG4gICAgICByZXR1cm4geyBvcmlnaW5hbEhhbmRsZXIsIGxvY2FsSGFuZGxlciB9XG4gICAgfVxuXG4gICAgLy8gTm8gaGFuZGxlciBwYXRoIGZvdW5kIC0gdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIChub3QgYSBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uKVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtMaXZlTGFtYmRhXSBTa2lwcGluZyB1bnN1cHBvcnRlZCBmdW5jdGlvbiBcIiR7Y29uc3RydWN0SWR9XCI6IGAgK1xuICAgICAgICBgbm90IGEgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbiAob3IgYm9vdHN0cmFwIGhvb2sgd2FzIG5vdCBpbnN0YWxsZWQgZWFybHkgZW5vdWdoKWAsXG4gICAgKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgRG9ja2VySW1hZ2VGdW5jdGlvbiB0byB1c2UgdGhlIGJyaWRnZSBEb2NrZXIgaW1hZ2UuXG4gICAqIFN0b3JlcyB0aGUgbG9jYWwgRG9ja2VyIGNvbnRleHQgcGF0aCBpbiBhIHRhZyBmb3IgdGhlIGRhZW1vbiB0byBidWlsZC9ydW4gbG9jYWxseS5cbiAgICovXG4gIHByaXZhdGUgdHJhbnNmb3JtRG9ja2VyRnVuY3Rpb24oXG4gICAgZm46IGxhbWJkYS5GdW5jdGlvbixcbiAgICBfc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25JZDogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKGZuKVxuXG4gICAgLy8gR2V0IHRoZSBkb2NrZXIgY29udGV4dCBwYXRoIGZyb20gdGhlIGhvb2tcbiAgICBjb25zdCBkb2NrZXJDb250ZXh0UGF0aCA9IGdldERvY2tlckNvbnRleHRQYXRoKGZuKVxuICAgIGlmICghZG9ja2VyQ29udGV4dFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBObyBkb2NrZXIgY29udGV4dCBwYXRoIGZvciBcIiR7ZnVuY3Rpb25JZH1cIi4gYCArXG4gICAgICAgICAgYFRoZSBib290c3RyYXAgaG9vayB3YXMgbm90IGluc3RhbGxlZCBlYXJseSBlbm91Z2guIGAgK1xuICAgICAgICAgIGBGaXg6IGltcG9ydCBcImNkay1sb2NhbC1sYW1iZGEvYm9vdHN0cmFwXCIgYmVmb3JlIGFueSBDREsgaW1wb3J0cyAoTm9kZS5qcyksIGAgK1xuICAgICAgICAgIGBvciBydW4gQnVuIHdpdGggXCJidW4gLS1wcmVsb2FkIGNkay1sb2NhbC1sYW1iZGEvYm9vdHN0cmFwXCIuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBHZXQgU1NNIHBhcmFtZXRlcnNcbiAgICBjb25zdCBib290c3RyYXBRdWFsaWZpZXIgPVxuICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXJcIikgfHxcbiAgICAgIFwiaG5iNjU5ZmRzXCJcbiAgICBjb25zdCBzc21CYXNlUGF0aCA9IGAke1NTTV9CQVNFX1BBVEh9LyR7Ym9vdHN0cmFwUXVhbGlmaWVyfWBcblxuICAgIGNvbnN0IGFwaUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9hcGktYXJuYCxcbiAgICApXG5cbiAgICAvLyBEZXRlcm1pbmUgYXJjaGl0ZWN0dXJlIGFuZCBnZXQgYXBwcm9wcmlhdGUgYnJpZGdlIGltYWdlXG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gdGhpcy5nZXRBcmNoaXRlY3R1cmUoY2ZuRnVuY3Rpb24pXG4gICAgY29uc3QgYnJpZGdlSW1hZ2VQYXJhbSA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IFwiYXJtNjRcIiA/IFwiYnJpZGdlLWltYWdlLWFybTY0XCIgOiBcImJyaWRnZS1pbWFnZS14ODZfNjRcIlxuXG4gICAgY29uc3QgYnJpZGdlSW1hZ2VVcmkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vJHticmlkZ2VJbWFnZVBhcmFtfWAsXG4gICAgKVxuXG4gICAgLy8gQWRkIHRhZyB3aXRoIGRvY2tlciBjb250ZXh0IHBhdGggZm9yIGRhZW1vbiBkaXNjb3ZlcnlcbiAgICAvLyBUaGUgZGFlbW9uIHVzZXMgdGhpcyB0YWcgdG8gYnVpbGQgYW5kIHJ1biB0aGUgY29udGFpbmVyIGxvY2FsbHlcbiAgICBjZm5GdW5jdGlvbi50YWdzLnNldFRhZyhMSVZFX0xBTUJEQV9ET0NLRVJfVEFHLCBkb2NrZXJDb250ZXh0UGF0aClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHB1Ymxpc2gvc3Vic2NyaWJlIHRvIEFwcFN5bmMgRXZlbnRzXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRDb25uZWN0XCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50UHVibGlzaFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFN1YnNjcmliZVwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFthcGlBcm4sIGAke2FwaUFybn0vKmBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcmVhZCBTU00gcGFyYW1ldGVycyAoYnJpZGdlIG5lZWRzIEFwcFN5bmMgZW5kcG9pbnRzKVxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCIsIFwic3NtOkdldFBhcmFtZXRlcnNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOnNzbToke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpwYXJhbWV0ZXIke3NzbUJhc2VQYXRofS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIFJlcGxhY2UgdGhlIERvY2tlciBpbWFnZSB3aXRoIHRoZSBicmlkZ2UgaW1hZ2VcbiAgICBjZm5GdW5jdGlvbi5jb2RlID0ge1xuICAgICAgaW1hZ2VVcmk6IGJyaWRnZUltYWdlVXJpLFxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtMaXZlTGFtYmRhXSBSZXBsYWNlZCBEb2NrZXIgaW1hZ2Ugd2l0aCBicmlkZ2UgKCR7YXJjaGl0ZWN0dXJlfSlgLFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGFyY2hpdGVjdHVyZSBvZiBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICogRGVmYXVsdHMgdG8geDg2XzY0IGlmIG5vdCBleHBsaWNpdGx5IHNldC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QXJjaGl0ZWN0dXJlKGNmbkZ1bmN0aW9uOiBsYW1iZGEuQ2ZuRnVuY3Rpb24pOiBcImFybTY0XCIgfCBcIng4Nl82NFwiIHtcbiAgICBjb25zdCBhcmNoaXRlY3R1cmVzID0gY2ZuRnVuY3Rpb24uYXJjaGl0ZWN0dXJlcyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICAgIGlmIChhcmNoaXRlY3R1cmVzPy5pbmNsdWRlcyhcImFybTY0XCIpKSB7XG4gICAgICByZXR1cm4gXCJhcm02NFwiXG4gICAgfVxuICAgIHJldHVybiBcIng4Nl82NFwiXG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUZ1bmN0aW9uKFxuICAgIGZuOiBsYW1iZGEuRnVuY3Rpb24sXG4gICAgX3N0YWNrTmFtZTogc3RyaW5nLFxuICAgIF9mdW5jdGlvbklkOiBzdHJpbmcsXG4gICAgX29yaWdpbmFsSGFuZGxlcjogc3RyaW5nLFxuICAgIGxvY2FsSGFuZGxlcjogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKGZuKVxuXG4gICAgLy8gUmVhZCB2YWx1ZXMgZnJvbSBTU00gcGFyYW1ldGVycyAoY3JlYXRlZCBieSBib290c3RyYXAgc3RhY2spXG4gICAgLy8gVXNlIHRoZSBDREsgYm9vdHN0cmFwIHF1YWxpZmllciBmb3IgcHJvcGVyIHNjb3BpbmdcbiAgICBjb25zdCBib290c3RyYXBRdWFsaWZpZXIgPVxuICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXJcIikgfHxcbiAgICAgIFwiaG5iNjU5ZmRzXCJcbiAgICBjb25zdCBzc21CYXNlUGF0aCA9IGAke1NTTV9CQVNFX1BBVEh9LyR7Ym9vdHN0cmFwUXVhbGlmaWVyfWBcblxuICAgIGNvbnN0IGFwaUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9hcGktYXJuYCxcbiAgICApXG4gICAgY29uc3QgYnJpZGdlQnVja2V0ID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2JyaWRnZS1idWNrZXRgLFxuICAgIClcbiAgICBjb25zdCBicmlkZ2VLZXkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYnJpZGdlLWtleWAsXG4gICAgKVxuXG4gICAgLy8gQWRkIHRhZyB3aXRoIGxvY2FsIGhhbmRsZXIgcGF0aCBmb3IgZGFlbW9uIGRpc2NvdmVyeVxuICAgIC8vIFRoZSBkYWVtb24gcXVlcmllcyBMYW1iZGEgQVBJIGZvciBmdW5jdGlvbnMgd2l0aCB0aGlzIHRhZ1xuICAgIGNmbkZ1bmN0aW9uLnRhZ3Muc2V0VGFnKExJVkVfTEFNQkRBX1RBRywgbG9jYWxIYW5kbGVyKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcHVibGlzaC9zdWJzY3JpYmUgdG8gQXBwU3luYyBFdmVudHNcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiYXBwc3luYzpFdmVudENvbm5lY3RcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRQdWJsaXNoXCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50U3Vic2NyaWJlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2FwaUFybiwgYCR7YXBpQXJufS8qYF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byByZWFkIFNTTSBwYXJhbWV0ZXJzIChicmlkZ2UgbmVlZHMgQXBwU3luYyBlbmRwb2ludHMpXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIiwgXCJzc206R2V0UGFyYW1ldGVyc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6c3NtOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OnBhcmFtZXRlciR7c3NtQmFzZVBhdGh9LypgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gUmVwbGFjZSB0aGUgY29kZSB3aXRoIGJyaWRnZSBoYW5kbGVyIGZyb20gYm9vdHN0cmFwIHN0YWNrJ3MgUzMgYnVja2V0XG4gICAgY2ZuRnVuY3Rpb24uY29kZSA9IHtcbiAgICAgIHMzQnVja2V0OiBicmlkZ2VCdWNrZXQsXG4gICAgICBzM0tleTogYnJpZGdlS2V5LFxuICAgIH1cbiAgICBjZm5GdW5jdGlvbi5oYW5kbGVyID0gXCJpbmRleC5oYW5kbGVyXCJcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGxvY2FsIG1vZGUgaXMgZW5hYmxlZCAoQ0RLX0xPQ0FMX0xBTUJEQT10cnVlKS5cbiAqIFVzZSB0aGlzIGluIHlvdXIgY29uc3RydWN0cyBmb3IgY29uZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogdGltZW91dDogaXNJbkxvY2FsTW9kZSgpXG4gKiAgID8gY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSlcbiAqICAgOiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5Mb2NhbE1vZGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5DREtfTE9DQUxfTEFNQkRBID09PSBcInRydWVcIlxufVxuXG4vKipcbiAqIEFwcGx5IGxpdmUgbGFtYmRhIGFzcGVjdCB0byBhIENESyBhcHAgb3Igc3RhY2sgaWYgbGl2ZSBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHNjb3BlIFRoZSBDREsgYXBwIG9yIHN0YWNrIHRvIGFwcGx5IHRoZSBhc3BlY3QgdG9cbiAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgbGl2ZSBsYW1iZGEgYXNwZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxpdmVMYW1iZGFBc3BlY3QoXG4gIHNjb3BlOiBJQ29uc3RydWN0LFxuICBwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzID0ge30sXG4pOiB2b2lkIHtcbiAgaWYgKCFpc0luTG9jYWxNb2RlKCkpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiW0xpdmVMYW1iZGFdIExpdmUgbW9kZSBub3QgZW5hYmxlZCAoc2V0IENES19MT0NBTF9MQU1CREE9dHJ1ZSB0byBlbmFibGUpXCIsXG4gICAgKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc29sZS5sb2coXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIGVuYWJsZWQgLSB0cmFuc2Zvcm1pbmcgTGFtYmRhIGZ1bmN0aW9uc1wiKVxuICBjZGsuQXNwZWN0cy5vZihzY29wZSkuYWRkKG5ldyBMaXZlTGFtYmRhQXNwZWN0KHByb3BzKSlcbn1cbiJdfQ==
@@ -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.CDK_LIVE === "true";
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 CDK_LIVE=true (skips bundling).
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 CDK_LIVE=true.
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.CDK_LIVE === "true";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRXpELDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsc0VBQXNFO0FBQ3RFLElBQUksa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7QUFDM0MsSUFBSSxDQUFDO0lBQ0gsa0JBQWtCLEdBQUcsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQTtBQUNyRSxDQUFDO0FBQUMsTUFBTSxDQUFDO0lBQ1AsbURBQW1EO0FBQ3JELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFBO0FBRXpELDZCQUE2QjtBQUM3QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7QUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRXhELGtDQUFrQztBQUNsQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtBQUV0RTs7O0dBR0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLElBQUksT0FBTyxFQUFrQixDQUFBO0FBRS9EOzs7Ozs7R0FNRztBQUNILFNBQVMsb0JBQW9CLENBQUMsT0FBZTtJQUMzQyxPQUFPLENBQ0wsT0FBTyxLQUFLLCtCQUErQjtRQUMzQyxPQUFPLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FDeEMsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxPQUFlO0lBQ3JDLDRDQUE0QztJQUM1QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE9BQU8sQ0FDTCxPQUFPLEtBQUssd0JBQXdCO1FBQ3BDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQ2pDLENBQUE7QUFDSCxDQUFDO0FBNkVELGtEQUFrRDtBQUNsRCxJQUFJLGtCQUFrQixHQUF3QixJQUFJLENBQUE7QUFFbEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNWLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQTtJQUVsRCwrRUFBK0U7SUFDL0UsNEVBQTRFO0lBQzVFLElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUU3RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksQ0FDVixnSEFBZ0gsQ0FDakgsQ0FBQTtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQ1Ysd0VBQXdFLENBQ3pFLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsNEVBQTRFO1lBQzVFLHVDQUF1QztZQUN2QyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FDckMsd0JBQXdCLENBQ1QsQ0FBQTtZQUNqQixrQkFBa0IsR0FBRyxZQUFZLENBQUE7WUFDakMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUE7WUFFdEMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQ3JDLCtCQUErQixDQUNWLENBQUE7WUFDdkIsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDbkMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUNWLHNEQUFzRCxFQUNyRCxHQUFhLENBQUMsT0FBTyxDQUN2QixDQUFBO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FDViw2RkFBNkYsQ0FDOUYsQ0FBQTtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQ1YsZ0ZBQWdGLENBQ2pGLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7S0FBTSxDQUFDO0lBQ04sNkRBQTZEO0lBQzdELE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2hELE1BQU0sWUFBWSxHQUlILE1BQU0sQ0FBQyxLQUFLLENBQUE7SUFFM0IsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUNiLE9BQWUsRUFDZixNQUE4QixFQUM5QixNQUFlO1FBRWYsc0RBQXNEO1FBQ3RELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFFL0QsNENBQTRDO1FBQzVDLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxtQkFBbUIsQ0FBQyxNQUFtQyxDQUFDLENBQUE7UUFDMUQsQ0FBQztRQUVELG1GQUFtRjtRQUNuRixJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLGdGQUFnRjtZQUNoRixrQkFBa0IsR0FBRyxNQUE2QixDQUFBO1lBQ2xELHdCQUF3QixDQUFDLE1BQTZCLENBQUMsQ0FBQTtRQUN6RCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxlQUFlLENBQUMsWUFBMEI7SUFDakQsdURBQXVEO0lBQ3ZELGdFQUFnRTtJQUNoRSxNQUFNLElBQUksR0FDUixZQUdELENBQUMsSUFBSSxDQUFBO0lBQ04sSUFBSSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLCtDQUErQyxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsTUFBaUM7SUFDNUQsMkJBQTJCO0lBQzNCLElBQUksTUFBTSxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hELE9BQU07SUFDUixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQUksTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUE7UUFFbEQseURBQXlEO1FBQ3pELE1BQU0seUJBQTBCLFNBQVEsc0JBQXNCO1lBQzVELFlBQVksS0FBYyxFQUFFLEVBQVUsRUFBRSxRQUE2QixFQUFFO2dCQUNyRSw2REFBNkQ7Z0JBQzdELDREQUE0RDtnQkFDNUQsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFBO2dCQUN6QixJQUFJLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztvQkFDcEQsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUE7b0JBQ3JELElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2QsYUFBYSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO29CQUMvQyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBRS9CLDBFQUEwRTtnQkFDMUUsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyRSxDQUFDO29CQUFDLElBQTBDLENBQUMsWUFBWSxDQUFDO3dCQUN4RCxLQUFLLENBQUMsS0FBSyxDQUFBO2dCQUNmLENBQUM7Z0JBRUQsNkRBQTZEO2dCQUM3RCxNQUFNLE9BQU8sR0FDWCxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ2xFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztvQkFDZixDQUFDLENBQUMsU0FBUyxDQUNkO2dCQUFDLElBQTBDLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFBO1lBQ3hFLENBQUM7WUFFRCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFBOztRQUduQyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzlDLEtBQUssRUFBRSx5QkFBeUI7Z0JBQ2hDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FDWCwrRUFBK0UsQ0FDaEYsQ0FBQTtZQUNELE9BQU8sQ0FBQyxLQUFLLENBQ1gsK0VBQStFLENBQ2hGLENBQUE7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFHLEdBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUM1RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxNQUEyQjtJQUMzRCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU07SUFFbkIsNEVBQTRFO0lBQzVFLElBQUksTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMxRSxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUE7UUFDdEQsTUFBTSxzQkFBc0IsR0FBRyx1QkFBdUIsQ0FBQyxjQUFjLENBQUE7UUFFckUsK0NBQStDO1FBQy9DLE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsU0FBaUIsRUFDakIsS0FBNkIsRUFDSixFQUFFO1lBQzNCLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FDeEMsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBQTtZQUVELHdFQUF3RTtZQUN4RSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsTUFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUUxRCxPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUMsQ0FBQTtRQUVELElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQy9ELEtBQUssRUFBRSxxQkFBcUI7Z0JBQzVCLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FDRDtZQUNDLHVCQUdELENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO1FBQzlCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FDViw4REFBOEQsRUFDN0QsR0FBYSxDQUFDLE9BQU8sQ0FDdkIsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELElBQ0UsTUFBTSxDQUFDLG1CQUFtQjtRQUMxQixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFDL0MsQ0FBQztRQUNELE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFBO1FBRTlELG9EQUFvRDtRQUNwRCxNQUFNLDhCQUErQixTQUFRLDJCQUEyQjtZQUN0RSxZQUFZLEtBQWMsRUFBRSxFQUFVLEVBQUUsS0FBK0I7Z0JBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUV2Qiw4Q0FBOEM7Z0JBQzlDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNmLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FDL0MsS0FBSyxDQUFDLElBQWMsQ0FDckIsQ0FBQTtvQkFDRCxJQUFJLFdBQVcsRUFBRSxDQUFDO3dCQUNoQixDQUFDO3dCQUFDLElBQTBDLENBQzFDLHFCQUFxQixDQUN0QixHQUFHLFdBQVcsQ0FBQTtvQkFDakIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUE7O1FBR25DLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFO2dCQUNuRCxLQUFLLEVBQUUsOEJBQThCO2dCQUNyQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsSUFBSTthQUNuQixDQUFDLENBQUE7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQ1YsbURBQW1ELEVBQ2xELEdBQWEsQ0FBQyxPQUFPLENBQ3ZCLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJvb3RzdHJhcCBmaWxlIHRoYXQgaW5zdGFsbHMgaG9va3MgZm9yIE5vZGVqc0Z1bmN0aW9uIGFuZCBEb2NrZXJJbWFnZUZ1bmN0aW9uXG4gKiBCRUZPUkUgYW55IENESyBpbXBvcnRzLlxuICpcbiAqIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBhcyB0aGUgdmVyeSBmaXJzdCB0aGluZyBpbiB0aGUgQ0RLIGFwcCBlbnRyeSBwb2ludCxcbiAqIGJlZm9yZSBhbnkgb3RoZXIgaW1wb3J0cy5cbiAqXG4gKiBSdW50aW1lIHN1cHBvcnQ6XG4gKiAtIE5vZGUuanM6IHBhdGNoZXMgTW9kdWxlLl9sb2FkIHRvIGludGVyY2VwdCBtb2R1bGUgbG9hZGluZ1xuICogLSBCdW46IGRpcmVjdGx5IGltcG9ydHMgYW5kIHBhdGNoZXMgbW9kdWxlcyAoTW9kdWxlLl9sb2FkIG5vdCBzdXBwb3J0ZWQpXG4gKlxuICogSG9va3MgaW5zdGFsbGVkOlxuICogLSBOb2RlanNGdW5jdGlvbjogY2FwdHVyZXMgZW50cnkgYW5kIGhhbmRsZXIgcHJvcHNcbiAqIC0gRG9ja2VySW1hZ2VGdW5jdGlvbjogY2FwdHVyZXMgZG9ja2VyIGNvbnRleHQgcGF0aCBmcm9tIGNvZGUgcHJvcFxuICogLSBEb2NrZXJJbWFnZUNvZGUuZnJvbUltYWdlQXNzZXQ6IGNhcHR1cmVzIHRoZSBkaXJlY3RvcnkgcGF0aFxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIlxuXG5jb25zdCByZXF1aXJlRnJvbVBhY2thZ2UgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybClcblxuLy8gUHJlZmVyIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgKkNESyBhcHAgcHJvamVjdCogKHByb2Nlc3MuY3dkKCkpLlxuLy8gVGhpcyBhdm9pZHMgcGF0Y2hpbmcgYSBuZXN0ZWQgYXdzLWNkay1saWIgY29weSB3aGVuIGNkay1sb2NhbC1sYW1iZGEgaXNcbi8vIGluc3RhbGxlZCB3aXRoIGl0cyBvd24gbm9kZV9tb2R1bGVzIChjb21tb24gd2l0aCBwYWNrYWdlIG1hbmFnZXJzKS5cbmxldCByZXF1aXJlRnJvbVByb2plY3QgPSByZXF1aXJlRnJvbVBhY2thZ2VcbnRyeSB7XG4gIHJlcXVpcmVGcm9tUHJvamVjdCA9IGNyZWF0ZVJlcXVpcmUoYCR7cHJvY2Vzcy5jd2QoKX0vcGFja2FnZS5qc29uYClcbn0gY2F0Y2gge1xuICAvLyBGYWxsIGJhY2sgdG8gcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZS5cbn1cblxuLyoqXG4gKiBEZXRlY3QgaWYgd2UncmUgcnVubmluZyBpbiBCdW4gcnVudGltZVxuICovXG5jb25zdCBpc0J1biA9IHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLmJ1biAhPT0gXCJ1bmRlZmluZWRcIlxuXG4vLyBTeW1ib2xzIGZvciBOb2RlanNGdW5jdGlvblxuY29uc3QgRU5UUllfU1lNQk9MID0gU3ltYm9sLmZvcihcImxpdmUtbGFtYmRhOmVudHJ5XCIpXG5jb25zdCBIQU5ETEVSX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJsaXZlLWxhbWJkYTpoYW5kbGVyXCIpXG5cbi8vIFN5bWJvbHMgZm9yIERvY2tlckltYWdlRnVuY3Rpb25cbmNvbnN0IERPQ0tFUl9DT05URVhUX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJsaXZlLWxhbWJkYTpkb2NrZXItY29udGV4dFwiKVxuXG4vKipcbiAqIE1hcCB0byBzdG9yZSBkb2NrZXIgY29udGV4dCBwYXRocyBjYXB0dXJlZCBmcm9tIERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldFxuICogS2V5IGlzIHRoZSBEb2NrZXJJbWFnZUNvZGUgaW5zdGFuY2UsIHZhbHVlIGlzIHRoZSBjb250ZXh0IHBhdGhcbiAqL1xuY29uc3QgZG9ja2VySW1hZ2VDb2RlQ29udGV4dE1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgc3RyaW5nPigpXG5cbi8qKlxuICogQ2hlY2sgaWYgYSBtb2R1bGUgcmVxdWVzdCBpcyBmb3IgYXdzLWxhbWJkYS1ub2RlanMuXG4gKiBXZSBuZWVkIHRvIG1hdGNoOlxuICogLSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCIgKGRpcmVjdCBpbXBvcnQpXG4gKiAtIFBhdGhzIGVuZGluZyB3aXRoIFwiL2F3cy1sYW1iZGEtbm9kZWpzXCIgKHJlc29sdmVkIHBhdGhzKVxuICogLSBQYXRocyBjb250YWluaW5nIFwiL2F3cy1sYW1iZGEtbm9kZWpzL1wiIChzdWJtb2R1bGUgaW1wb3J0cylcbiAqL1xuZnVuY3Rpb24gaXNMYW1iZGFOb2RlanNNb2R1bGUocmVxdWVzdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcmVxdWVzdCA9PT0gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiIHx8XG4gICAgcmVxdWVzdC5lbmRzV2l0aChcIi9hd3MtbGFtYmRhLW5vZGVqc1wiKSB8fFxuICAgIHJlcXVlc3QuaW5jbHVkZXMoXCIvYXdzLWxhbWJkYS1ub2RlanMvXCIpXG4gIClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIG1vZHVsZSByZXF1ZXN0IGlzIGZvciBhd3MtbGFtYmRhIChmb3IgRG9ja2VySW1hZ2VGdW5jdGlvbikuXG4gKiBXZSBuZWVkIHRvIG1hdGNoOlxuICogLSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIiAoZGlyZWN0IGltcG9ydClcbiAqIC0gUGF0aHMgZW5kaW5nIHdpdGggXCIvYXdzLWxhbWJkYVwiIChyZXNvbHZlZCBwYXRocylcbiAqIC0gUGF0aHMgY29udGFpbmluZyBcIi9hd3MtbGFtYmRhL1wiIChzdWJtb2R1bGUgaW1wb3J0cylcbiAqL1xuZnVuY3Rpb24gaXNMYW1iZGFNb2R1bGUocmVxdWVzdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEJlIGNhcmVmdWwgbm90IHRvIG1hdGNoIGF3cy1sYW1iZGEtbm9kZWpzXG4gIGlmIChyZXF1ZXN0LmluY2x1ZGVzKFwiYXdzLWxhbWJkYS1ub2RlanNcIikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gKFxuICAgIHJlcXVlc3QgPT09IFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiIHx8XG4gICAgcmVxdWVzdC5lbmRzV2l0aChcIi9hd3MtbGFtYmRhXCIpIHx8XG4gICAgcmVxdWVzdC5pbmNsdWRlcyhcIi9hd3MtbGFtYmRhL1wiKVxuICApXG59XG5cbi8vIE1vZHVsZSB0eXBlIGZvciB0aGUgbGFtYmRhLW5vZGVqcyBleHBvcnRzXG5pbnRlcmZhY2UgTGFtYmRhTm9kZWpzTW9kdWxlIHtcbiAgTm9kZWpzRnVuY3Rpb246IE5vZGVqc0Z1bmN0aW9uQ29uc3RydWN0b3IgJiB7XG4gICAgX19saXZlTGFtYmRhUGF0Y2hlZD86IGJvb2xlYW5cbiAgfVxufVxuXG4vLyBDb25zdHJ1Y3RvciB0eXBlIHRoYXQgY2FuIGJlIGV4dGVuZGVkXG5pbnRlcmZhY2UgTm9kZWpzRnVuY3Rpb25Db25zdHJ1Y3RvciB7XG4gIG5ldyAoXG4gICAgc2NvcGU6IHVua25vd24sXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wcz86IE5vZGVqc0Z1bmN0aW9uUHJvcHMsXG4gICk6IE5vZGVqc0Z1bmN0aW9uSW5zdGFuY2VcbiAgcHJvdG90eXBlOiBOb2RlanNGdW5jdGlvbkluc3RhbmNlXG59XG5cbmludGVyZmFjZSBOb2RlanNGdW5jdGlvbkluc3RhbmNlIHtcbiAgbm9kZTogeyBhZGRyOiBzdHJpbmcgfVxufVxuXG5pbnRlcmZhY2UgTm9kZWpzRnVuY3Rpb25Qcm9wcyB7XG4gIGVudHJ5Pzogc3RyaW5nXG4gIGhhbmRsZXI/OiBzdHJpbmdcbiAgY29kZT86IHVua25vd24gLy8gbGFtYmRhLkNvZGUgLSBpZiBwcm92aWRlZCwgYnVuZGxpbmcgaXMgc2tpcHBlZFxufVxuXG4vLyBNb2R1bGUgdHlwZSBmb3IgdGhlIGxhbWJkYSBleHBvcnRzXG5pbnRlcmZhY2UgTGFtYmRhTW9kdWxlIHtcbiAgRG9ja2VySW1hZ2VGdW5jdGlvbjogRG9ja2VySW1hZ2VGdW5jdGlvbkNvbnN0cnVjdG9yICYge1xuICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/OiBib29sZWFuXG4gIH1cbiAgRG9ja2VySW1hZ2VDb2RlOiBEb2NrZXJJbWFnZUNvZGVTdGF0aWMgJiB7XG4gICAgX19saXZlTGFtYmRhUGF0Y2hlZD86IGJvb2xlYW5cbiAgfVxufVxuXG4vLyBEb2NrZXJJbWFnZUZ1bmN0aW9uIGNvbnN0cnVjdG9yIHR5cGVcbmludGVyZmFjZSBEb2NrZXJJbWFnZUZ1bmN0aW9uQ29uc3RydWN0b3Ige1xuICBuZXcgKFxuICAgIHNjb3BlOiB1bmtub3duLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgKTogRG9ja2VySW1hZ2VGdW5jdGlvbkluc3RhbmNlXG4gIHByb3RvdHlwZTogRG9ja2VySW1hZ2VGdW5jdGlvbkluc3RhbmNlXG59XG5cbmludGVyZmFjZSBEb2NrZXJJbWFnZUZ1bmN0aW9uSW5zdGFuY2Uge1xuICBub2RlOiB7IGFkZHI6IHN0cmluZyB9XG59XG5cbmludGVyZmFjZSBEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHMge1xuICBjb2RlOiBEb2NrZXJJbWFnZUNvZGVJbnN0YW5jZVxuICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cbi8vIERvY2tlckltYWdlQ29kZSBzdGF0aWMgdHlwZVxuaW50ZXJmYWNlIERvY2tlckltYWdlQ29kZVN0YXRpYyB7XG4gIGZyb21JbWFnZUFzc2V0KFxuICAgIGRpcmVjdG9yeTogc3RyaW5nLFxuICAgIHByb3BzPzogRG9ja2VySW1hZ2VBc3NldFByb3BzLFxuICApOiBEb2NrZXJJbWFnZUNvZGVJbnN0YW5jZVxufVxuXG5pbnRlcmZhY2UgRG9ja2VySW1hZ2VDb2RlSW5zdGFuY2Uge1xuICAvLyBNYXJrZXIgdG8gaWRlbnRpZnkgZG9ja2VyIGltYWdlIGNvZGUgaW5zdGFuY2VzXG4gIF9faXNEb2NrZXJJbWFnZUNvZGU/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBEb2NrZXJJbWFnZUFzc2V0UHJvcHMge1xuICBmaWxlPzogc3RyaW5nXG4gIGNtZD86IHN0cmluZ1tdXG4gIFtrZXk6IHN0cmluZ106IHVua25vd25cbn1cblxuLy8gQ2FjaGUgdGhlIGxhbWJkYSBtb2R1bGUgZm9yIGNyZWF0aW5nIGR1bW15IGNvZGVcbmxldCBjYWNoZWRMYW1iZGFNb2R1bGU6IExhbWJkYU1vZHVsZSB8IG51bGwgPSBudWxsXG5cbi8qKlxuICogSW5zdGFsbCBob29rcyBiYXNlZCBvbiBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIEJ1biBub3RlczpcbiAqIC0gQnVuIGNyZWF0ZXMgYSAqc25hcHNob3QqIG9mIENvbW1vbkpTIG5hbWVkIGV4cG9ydHMgd2hlbiBpbXBvcnRpbmcgZnJvbSBFU00uXG4gKiAgIFRoaXMgbWVhbnMgdGhhdCBtdXRhdGluZy9yZXBsYWNpbmcgYG1vZHVsZS5leHBvcnRzLkZvb2AgQUZURVIgdGhlIEVTTSBpbXBvcnRcbiAqICAgd2FzIGxpbmtlZCB3aWxsIG5vdCBhZmZlY3QgYGltcG9ydCB7IEZvbyB9IGZyb20gXCIuLi5cImAgaW4gdGhlIGN1cnJlbnQgcHJvY2Vzcy5cbiAqIC0gVGhlcmVmb3JlLCBCdW4gcGF0Y2hpbmcgb25seSB3b3JrcyByZWxpYWJseSB3aGVuIHRoaXMgYm9vdHN0cmFwIHJ1bnMgYmVmb3JlXG4gKiAgIHRoZSBhcHAgZW50cnkgcG9pbnQgaXMgbG9hZGVkLCBlLmcuIHZpYSBgYnVuIC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcGAuXG4gKlxuICogTm9kZS5qczpcbiAqIC0gV2UgY2FuIHBhdGNoIE1vZHVsZS5fbG9hZCB0byBpbnRlcmNlcHQgbW9kdWxlIGxvYWRpbmcuXG4gKi9cbmlmIChpc0J1bikge1xuICBjb25zdCBpc0xpdmVNb2RlID0gcHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09IFwidHJ1ZVwiXG5cbiAgLy8gQmVzdC1lZmZvcnQgcGF0Y2hpbmcgZm9yIEJ1bi4gVGhpcyBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayB3aGVuIHRoaXMgZmlsZVxuICAvLyBpcyBwcmVsb2FkZWQgKHNlZSBub3RlIGFib3ZlKS4gRXZlbiB0aGVuLCB3ZSBrZWVwIHRoaXMgbG9naWMgbGlnaHR3ZWlnaHQuXG4gIGlmIChpc0xpdmVNb2RlKSB7XG4gICAgY29uc3QgaGFzUHJlbG9hZEZsYWcgPSBwcm9jZXNzLmV4ZWNBcmd2LmluY2x1ZGVzKFwiLS1wcmVsb2FkXCIpXG5cbiAgICBpZiAoIWhhc1ByZWxvYWRGbGFnKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0xpdmVMYW1iZGFdIFdhcm5pbmc6IFJ1bm5pbmcgaW4gQnVuIHdpdGhvdXQgLS1wcmVsb2FkLiBBdXRvbWF0aWMgaGFuZGxlci9kb2NrZXIgZGV0ZWN0aW9uIGlzIGxpa2VseSBkaXNhYmxlZC5cIixcbiAgICAgIClcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gRml4OiBydW4gQnVuIHdpdGggYC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcGAuXCIsXG4gICAgICApXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhdGNoIGF3cy1sYW1iZGEgZmlyc3Qgc28gTm9kZWpzRnVuY3Rpb24gY2FuIGNyZWF0ZSBkdW1teSBDb2RlLmZyb21JbmxpbmVcbiAgICAgIC8vIHdoZW4gQ0RLX0xJVkU9dHJ1ZSAoc2tpcHMgYnVuZGxpbmcpLlxuICAgICAgY29uc3QgbGFtYmRhTW9kdWxlID0gcmVxdWlyZUZyb21Qcm9qZWN0KFxuICAgICAgICBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIixcbiAgICAgICkgYXMgTGFtYmRhTW9kdWxlXG4gICAgICBjYWNoZWRMYW1iZGFNb2R1bGUgPSBsYW1iZGFNb2R1bGVcbiAgICAgIHBhdGNoRG9ja2VySW1hZ2VGdW5jdGlvbihsYW1iZGFNb2R1bGUpXG5cbiAgICAgIGNvbnN0IG5vZGVqc01vZHVsZSA9IHJlcXVpcmVGcm9tUHJvamVjdChcbiAgICAgICAgXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiLFxuICAgICAgKSBhcyBMYW1iZGFOb2RlanNNb2R1bGVcbiAgICAgIHBhdGNoTm9kZWpzRnVuY3Rpb24obm9kZWpzTW9kdWxlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIltMaXZlTGFtYmRhXSBXYXJuaW5nOiBGYWlsZWQgdG8gaW5zdGFsbCBCdW4gcGF0Y2hlczpcIixcbiAgICAgICAgKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIClcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQXV0b21hdGljIGhhbmRsZXIvZG9ja2VyIGRldGVjdGlvbiBpcyByZXF1aXJlZDsgZW5zdXJlIGJvb3RzdHJhcCBpcyBwcmVsb2FkZWQuXCIsXG4gICAgICApXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0xpdmVMYW1iZGFdIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlcmVuZGRlYm9lci9jZGstbG9jYWwtbGFtYmRhI2J1bi1zdXBwb3J0XCIsXG4gICAgICApXG4gICAgfVxuICB9XG59IGVsc2Uge1xuICAvLyBOb2RlLmpzOiB1c2UgTW9kdWxlLl9sb2FkIGhvb2sgdG8gaW50ZXJjZXB0IG1vZHVsZSBsb2FkaW5nXG4gIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmVGcm9tUGFja2FnZShcIm5vZGU6bW9kdWxlXCIpXG4gIGNvbnN0IG9yaWdpbmFsTG9hZDogKFxuICAgIHJlcXVlc3Q6IHN0cmluZyxcbiAgICBwYXJlbnQ6IE5vZGVNb2R1bGUgfCB1bmRlZmluZWQsXG4gICAgaXNNYWluOiBib29sZWFuLFxuICApID0+IHVua25vd24gPSBNb2R1bGUuX2xvYWRcblxuICBNb2R1bGUuX2xvYWQgPSBmdW5jdGlvbiAoXG4gICAgcmVxdWVzdDogc3RyaW5nLFxuICAgIHBhcmVudDogTm9kZU1vZHVsZSB8IHVuZGVmaW5lZCxcbiAgICBpc01haW46IGJvb2xlYW4sXG4gICk6IHVua25vd24ge1xuICAgIC8vIENhbGwgb3JpZ2luYWwgbG9hZCAtIGxldCBlcnJvcnMgcHJvcGFnYXRlIG5hdHVyYWxseVxuICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsTG9hZC5jYWxsKHRoaXMsIHJlcXVlc3QsIHBhcmVudCwgaXNNYWluKVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFtYmRhLW5vZGVqcyBtb2R1bGVcbiAgICBpZiAoaXNMYW1iZGFOb2RlanNNb2R1bGUocmVxdWVzdCkpIHtcbiAgICAgIHBhdGNoTm9kZWpzRnVuY3Rpb24ocmVzdWx0IGFzIExhbWJkYU5vZGVqc01vZHVsZSB8IG51bGwpXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgbGFtYmRhIG1vZHVsZSAoZm9yIERvY2tlckltYWdlRnVuY3Rpb24gYW5kIENvZGUuZnJvbUlubGluZSlcbiAgICBpZiAoaXNMYW1iZGFNb2R1bGUocmVxdWVzdCkpIHtcbiAgICAgIC8vIENhY2hlIHRoZSBsYW1iZGEgbW9kdWxlIHNvIHdlIGNhbiB1c2UgQ29kZS5mcm9tSW5saW5lIGluIE5vZGVqc0Z1bmN0aW9uIHBhdGNoXG4gICAgICBjYWNoZWRMYW1iZGFNb2R1bGUgPSByZXN1bHQgYXMgTGFtYmRhTW9kdWxlIHwgbnVsbFxuICAgICAgcGF0Y2hEb2NrZXJJbWFnZUZ1bmN0aW9uKHJlc3VsdCBhcyBMYW1iZGFNb2R1bGUgfCBudWxsKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGR1bW15IGlubGluZSBjb2RlIHRoYXQgZG9lcyBub3RoaW5nLlxuICogVXNlZCB0byBza2lwIGJ1bmRsaW5nIHdoZW4gQ0RLX0xJVkU9dHJ1ZS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRHVtbXlDb2RlKGxhbWJkYU1vZHVsZTogTGFtYmRhTW9kdWxlKTogdW5rbm93biB7XG4gIC8vIEFjY2VzcyBsYW1iZGEuQ29kZS5mcm9tSW5saW5lIHRvIGNyZWF0ZSBhIG5vLW9wIGNvZGVcbiAgLy8gVGhpcyBhdm9pZHMgYnVuZGxpbmcgZW50aXJlbHkgc2luY2Ugd2UgcHJvdmlkZSBwcmUtYnVpbHQgY29kZVxuICBjb25zdCBDb2RlID0gKFxuICAgIGxhbWJkYU1vZHVsZSBhcyB1bmtub3duIGFzIHtcbiAgICAgIENvZGU/OiB7IGZyb21JbmxpbmU/OiAoY29kZTogc3RyaW5nKSA9PiB1bmtub3duIH1cbiAgICB9XG4gICkuQ29kZVxuICBpZiAoQ29kZT8uZnJvbUlubGluZSkge1xuICAgIHJldHVybiBDb2RlLmZyb21JbmxpbmUoXCIvLyBQbGFjZWhvbGRlciAtIHJlcGxhY2VkIGJ5IExpdmVMYW1iZGFBc3BlY3RcIilcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUGF0Y2ggTm9kZWpzRnVuY3Rpb24gdG8gY2FwdHVyZSBlbnRyeSBhbmQgaGFuZGxlciBwcm9wc1xuICovXG5mdW5jdGlvbiBwYXRjaE5vZGVqc0Z1bmN0aW9uKG1vZHVsZTogTGFtYmRhTm9kZWpzTW9kdWxlIHwgbnVsbCk6IHZvaWQge1xuICAvLyBJZiBhbHJlYWR5IHBhdGNoZWQsIHNraXBcbiAgaWYgKG1vZHVsZT8uTm9kZWpzRnVuY3Rpb24/Ll9fbGl2ZUxhbWJkYVBhdGNoZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHdlIGNhbiBwYXRjaFxuICBpZiAobW9kdWxlPy5Ob2RlanNGdW5jdGlvbikge1xuICAgIGNvbnN0IE9yaWdpbmFsTm9kZWpzRnVuY3Rpb24gPSBtb2R1bGUuTm9kZWpzRnVuY3Rpb25cbiAgICBjb25zdCBpc0xpdmVNb2RlID0gcHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09IFwidHJ1ZVwiXG5cbiAgICAvLyBDcmVhdGUgd3JhcHBlciBjbGFzcyB0aGF0IGNhcHR1cmVzIGVudHJ5L2hhbmRsZXIgcHJvcHNcbiAgICBjbGFzcyBOb2RlanNGdW5jdGlvbldpdGhDYXB0dXJlIGV4dGVuZHMgT3JpZ2luYWxOb2RlanNGdW5jdGlvbiB7XG4gICAgICBjb25zdHJ1Y3RvcihzY29wZTogdW5rbm93biwgaWQ6IHN0cmluZywgcHJvcHM6IE5vZGVqc0Z1bmN0aW9uUHJvcHMgPSB7fSkge1xuICAgICAgICAvLyBJbiBsaXZlIG1vZGUsIHByb3ZpZGUgZHVtbXkgY29kZSB0byBza2lwIGJ1bmRsaW5nIGVudGlyZWx5XG4gICAgICAgIC8vIFRoZSBhc3BlY3Qgd2lsbCByZXBsYWNlIHRoaXMgd2l0aCB0aGUgYnJpZGdlIGNvZGUgZnJvbSBTM1xuICAgICAgICBsZXQgbW9kaWZpZWRQcm9wcyA9IHByb3BzXG4gICAgICAgIGlmIChpc0xpdmVNb2RlICYmICFwcm9wcy5jb2RlICYmIGNhY2hlZExhbWJkYU1vZHVsZSkge1xuICAgICAgICAgIGNvbnN0IGR1bW15Q29kZSA9IGNyZWF0ZUR1bW15Q29kZShjYWNoZWRMYW1iZGFNb2R1bGUpXG4gICAgICAgICAgaWYgKGR1bW15Q29kZSkge1xuICAgICAgICAgICAgbW9kaWZpZWRQcm9wcyA9IHsgLi4ucHJvcHMsIGNvZGU6IGR1bW15Q29kZSB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCBtb2RpZmllZFByb3BzKVxuXG4gICAgICAgIC8vIFN0b3JlIHRoZSBlbnRyeSBwYXRoIG9uIHRoZSBpbnN0YW5jZSAodmFsaWRhdGUgaXQncyBhIG5vbi1lbXB0eSBzdHJpbmcpXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMuZW50cnkgPT09IFwic3RyaW5nXCIgJiYgcHJvcHMuZW50cnkudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA7KHRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3ltYm9sLCBzdHJpbmc+KVtFTlRSWV9TWU1CT0xdID1cbiAgICAgICAgICAgIHByb3BzLmVudHJ5XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSB0aGUgaGFuZGxlciBuYW1lICh2YWxpZGF0ZSBhbmQgZGVmYXVsdCB0byAnaGFuZGxlcicpXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPVxuICAgICAgICAgIHR5cGVvZiBwcm9wcy5oYW5kbGVyID09PSBcInN0cmluZ1wiICYmIHByb3BzLmhhbmRsZXIudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gcHJvcHMuaGFuZGxlclxuICAgICAgICAgICAgOiBcImhhbmRsZXJcIlxuICAgICAgICA7KHRoaXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3ltYm9sLCBzdHJpbmc+KVtIQU5ETEVSX1NZTUJPTF0gPSBoYW5kbGVyXG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBfX2xpdmVMYW1iZGFQYXRjaGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFRyeSB0byByZXBsYWNlIC0gZmFpbCBpZiB3ZSBjYW4ndFxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcIk5vZGVqc0Z1bmN0aW9uXCIsIHtcbiAgICAgICAgdmFsdWU6IE5vZGVqc0Z1bmN0aW9uV2l0aENhcHR1cmUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gRkFUQUw6IENhbm5vdCBwYXRjaCBOb2RlanNGdW5jdGlvbiAtIG1vZHVsZSBpcyBmcm96ZW4gb3Igc2VhbGVkLlwiLFxuICAgICAgKVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gVGhpcyBjYW4gaGFwcGVuIHdpdGggY2VydGFpbiBidW5kbGVycyBvciBOb2RlLmpzIGNvbmZpZ3VyYXRpb25zLlwiLFxuICAgICAgKVxuICAgICAgY29uc29sZS5lcnJvcihcIltMaXZlTGFtYmRhXSBFcnJvcjpcIiwgKGVyciBhcyBFcnJvcikubWVzc2FnZSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhdGNoIERvY2tlckltYWdlRnVuY3Rpb24gYW5kIERvY2tlckltYWdlQ29kZSB0byBjYXB0dXJlIGRvY2tlciBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHBhdGNoRG9ja2VySW1hZ2VGdW5jdGlvbihtb2R1bGU6IExhbWJkYU1vZHVsZSB8IG51bGwpOiB2b2lkIHtcbiAgaWYgKCFtb2R1bGUpIHJldHVyblxuXG4gIC8vIEZpcnN0LCBwYXRjaCBEb2NrZXJJbWFnZUNvZGUuZnJvbUltYWdlQXNzZXQgdG8gY2FwdHVyZSB0aGUgZGlyZWN0b3J5IHBhdGhcbiAgaWYgKG1vZHVsZS5Eb2NrZXJJbWFnZUNvZGUgJiYgIW1vZHVsZS5Eb2NrZXJJbWFnZUNvZGUuX19saXZlTGFtYmRhUGF0Y2hlZCkge1xuICAgIGNvbnN0IE9yaWdpbmFsRG9ja2VySW1hZ2VDb2RlID0gbW9kdWxlLkRvY2tlckltYWdlQ29kZVxuICAgIGNvbnN0IG9yaWdpbmFsRnJvbUltYWdlQXNzZXQgPSBPcmlnaW5hbERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldFxuXG4gICAgLy8gV3JhcCBmcm9tSW1hZ2VBc3NldCB0byBjYXB0dXJlIHRoZSBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRjaGVkRnJvbUltYWdlQXNzZXQgPSAoXG4gICAgICBkaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgIHByb3BzPzogRG9ja2VySW1hZ2VBc3NldFByb3BzLFxuICAgICk6IERvY2tlckltYWdlQ29kZUluc3RhbmNlID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsRnJvbUltYWdlQXNzZXQuY2FsbChcbiAgICAgICAgT3JpZ2luYWxEb2NrZXJJbWFnZUNvZGUsXG4gICAgICAgIGRpcmVjdG9yeSxcbiAgICAgICAgcHJvcHMsXG4gICAgICApXG5cbiAgICAgIC8vIFN0b3JlIHRoZSBkaXJlY3RvcnkgcGF0aCBpbiB0aGUgV2Vha01hcCwga2V5ZWQgYnkgdGhlIHJlc3VsdCBpbnN0YW5jZVxuICAgICAgZG9ja2VySW1hZ2VDb2RlQ29udGV4dE1hcC5zZXQocmVzdWx0IGFzIG9iamVjdCwgZGlyZWN0b3J5KVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmlnaW5hbERvY2tlckltYWdlQ29kZSwgXCJmcm9tSW1hZ2VBc3NldFwiLCB7XG4gICAgICAgIHZhbHVlOiBwYXRjaGVkRnJvbUltYWdlQXNzZXQsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KVxuICAgICAgOyhcbiAgICAgICAgT3JpZ2luYWxEb2NrZXJJbWFnZUNvZGUgYXMgRG9ja2VySW1hZ2VDb2RlU3RhdGljICYge1xuICAgICAgICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/OiBib29sZWFuXG4gICAgICAgIH1cbiAgICAgICkuX19saXZlTGFtYmRhUGF0Y2hlZCA9IHRydWVcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQ291bGQgbm90IHBhdGNoIERvY2tlckltYWdlQ29kZS5mcm9tSW1hZ2VBc3NldDpcIixcbiAgICAgICAgKGVyciBhcyBFcnJvcikubWVzc2FnZSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBUaGVuLCBwYXRjaCBEb2NrZXJJbWFnZUZ1bmN0aW9uIHRvIHJlYWQgZnJvbSB0aGUgV2Vha01hcFxuICBpZiAoXG4gICAgbW9kdWxlLkRvY2tlckltYWdlRnVuY3Rpb24gJiZcbiAgICAhbW9kdWxlLkRvY2tlckltYWdlRnVuY3Rpb24uX19saXZlTGFtYmRhUGF0Y2hlZFxuICApIHtcbiAgICBjb25zdCBPcmlnaW5hbERvY2tlckltYWdlRnVuY3Rpb24gPSBtb2R1bGUuRG9ja2VySW1hZ2VGdW5jdGlvblxuXG4gICAgLy8gQ3JlYXRlIHdyYXBwZXIgY2xhc3MgdGhhdCBjYXB0dXJlcyBkb2NrZXIgY29udGV4dFxuICAgIGNsYXNzIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZSBleHRlbmRzIE9yaWdpbmFsRG9ja2VySW1hZ2VGdW5jdGlvbiB7XG4gICAgICBjb25zdHJ1Y3RvcihzY29wZTogdW5rbm93biwgaWQ6IHN0cmluZywgcHJvcHM6IERvY2tlckltYWdlRnVuY3Rpb25Qcm9wcykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKVxuXG4gICAgICAgIC8vIExvb2sgdXAgdGhlIGRvY2tlciBjb250ZXh0IGZyb20gdGhlIFdlYWtNYXBcbiAgICAgICAgaWYgKHByb3BzLmNvZGUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0UGF0aCA9IGRvY2tlckltYWdlQ29kZUNvbnRleHRNYXAuZ2V0KFxuICAgICAgICAgICAgcHJvcHMuY29kZSBhcyBvYmplY3QsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgICAgOyh0aGlzIGFzIHVua25vd24gYXMgUmVjb3JkPHN5bWJvbCwgc3RyaW5nPilbXG4gICAgICAgICAgICAgIERPQ0tFUl9DT05URVhUX1NZTUJPTFxuICAgICAgICAgICAgXSA9IGNvbnRleHRQYXRoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBfX2xpdmVMYW1iZGFQYXRjaGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcIkRvY2tlckltYWdlRnVuY3Rpb25cIiwge1xuICAgICAgICB2YWx1ZTogRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbTGl2ZUxhbWJkYV0gQ291bGQgbm90IHBhdGNoIERvY2tlckltYWdlRnVuY3Rpb246XCIsXG4gICAgICAgIChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iXX0=
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1ib290c3RyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRXpELDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsc0VBQXNFO0FBQ3RFLElBQUksa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7QUFDM0MsSUFBSSxDQUFDO0lBQ0gsa0JBQWtCLEdBQUcsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQTtBQUNyRSxDQUFDO0FBQUMsTUFBTSxDQUFDO0lBQ1AsbURBQW1EO0FBQ3JELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sS0FBSyxHQUFHLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFBO0FBRXpELDZCQUE2QjtBQUM3QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7QUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRXhELGtDQUFrQztBQUNsQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtBQUV0RTs7O0dBR0c7QUFDSCxNQUFNLHlCQUF5QixHQUFHLElBQUksT0FBTyxFQUFrQixDQUFBO0FBRS9EOzs7Ozs7R0FNRztBQUNILFNBQVMsb0JBQW9CLENBQUMsT0FBZTtJQUMzQyxPQUFPLENBQ0wsT0FBTyxLQUFLLCtCQUErQjtRQUMzQyxPQUFPLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FDeEMsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxPQUFlO0lBQ3JDLDRDQUE0QztJQUM1QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE9BQU8sQ0FDTCxPQUFPLEtBQUssd0JBQXdCO1FBQ3BDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQ2pDLENBQUE7QUFDSCxDQUFDO0FBNkVELGtEQUFrRDtBQUNsRCxJQUFJLGtCQUFrQixHQUF3QixJQUFJLENBQUE7QUFFbEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNWLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFBO0lBRTFELCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRTdELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsSUFBSSxDQUNWLGdIQUFnSCxDQUNqSCxDQUFBO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FDVix3RUFBd0UsQ0FDekUsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCw0RUFBNEU7WUFDNUUsK0NBQStDO1lBQy9DLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUNyQyx3QkFBd0IsQ0FDVCxDQUFBO1lBQ2pCLGtCQUFrQixHQUFHLFlBQVksQ0FBQTtZQUNqQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUV0QyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FDckMsK0JBQStCLENBQ1YsQ0FBQTtZQUN2QixtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNuQyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysc0RBQXNELEVBQ3JELEdBQWEsQ0FBQyxPQUFPLENBQ3ZCLENBQUE7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUNWLDZGQUE2RixDQUM5RixDQUFBO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FDVixnRkFBZ0YsQ0FDakYsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztLQUFNLENBQUM7SUFDTiw2REFBNkQ7SUFDN0QsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDaEQsTUFBTSxZQUFZLEdBSUgsTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUUzQixNQUFNLENBQUMsS0FBSyxHQUFHLFVBQ2IsT0FBZSxFQUNmLE1BQThCLEVBQzlCLE1BQWU7UUFFZixzREFBc0Q7UUFDdEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUUvRCw0Q0FBNEM7UUFDNUMsSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xDLG1CQUFtQixDQUFDLE1BQW1DLENBQUMsQ0FBQTtRQUMxRCxDQUFDO1FBRUQsbUZBQW1GO1FBQ25GLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUIsZ0ZBQWdGO1lBQ2hGLGtCQUFrQixHQUFHLE1BQTZCLENBQUE7WUFDbEQsd0JBQXdCLENBQUMsTUFBNkIsQ0FBQyxDQUFBO1FBQ3pELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxZQUEwQjtJQUNqRCx1REFBdUQ7SUFDdkQsZ0VBQWdFO0lBQ2hFLE1BQU0sSUFBSSxHQUNSLFlBR0QsQ0FBQyxJQUFJLENBQUE7SUFDTixJQUFJLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsK0NBQStDLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxNQUFpQztJQUM1RCwyQkFBMkI7SUFDM0IsSUFBSSxNQUFNLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLENBQUM7UUFDaEQsT0FBTTtJQUNSLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFBSSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDM0IsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFBO1FBQ3BELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEtBQUssTUFBTSxDQUFBO1FBRTFELHlEQUF5RDtRQUN6RCxNQUFNLHlCQUEwQixTQUFRLHNCQUFzQjtZQUM1RCxZQUFZLEtBQWMsRUFBRSxFQUFVLEVBQUUsUUFBNkIsRUFBRTtnQkFDckUsNkRBQTZEO2dCQUM3RCw0REFBNEQ7Z0JBQzVELElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQTtnQkFDekIsSUFBSSxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3BELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO29CQUNyRCxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUNkLGFBQWEsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQTtvQkFDL0MsQ0FBQztnQkFDSCxDQUFDO2dCQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFBO2dCQUUvQiwwRUFBMEU7Z0JBQzFFLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckUsQ0FBQztvQkFBQyxJQUEwQyxDQUFDLFlBQVksQ0FBQzt3QkFDeEQsS0FBSyxDQUFDLEtBQUssQ0FBQTtnQkFDZixDQUFDO2dCQUVELDZEQUE2RDtnQkFDN0QsTUFBTSxPQUFPLEdBQ1gsT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUNsRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU87b0JBQ2YsQ0FBQyxDQUFDLFNBQVMsQ0FDZDtnQkFBQyxJQUEwQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQTtZQUN4RSxDQUFDO1lBRUQsTUFBTSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQTs7UUFHbkMsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQztZQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFO2dCQUM5QyxLQUFLLEVBQUUseUJBQXlCO2dCQUNoQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsSUFBSTthQUNuQixDQUFDLENBQUE7UUFDSixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQ1gsK0VBQStFLENBQ2hGLENBQUE7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUNYLCtFQUErRSxDQUNoRixDQUFBO1lBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRyxHQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDNUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsd0JBQXdCLENBQUMsTUFBMkI7SUFDM0QsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFNO0lBRW5CLDRFQUE0RTtJQUM1RSxJQUFJLE1BQU0sQ0FBQyxlQUFlLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUUsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFBO1FBQ3RELE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUMsY0FBYyxDQUFBO1FBRXJFLCtDQUErQztRQUMvQyxNQUFNLHFCQUFxQixHQUFHLENBQzVCLFNBQWlCLEVBQ2pCLEtBQTZCLEVBQ0osRUFBRTtZQUMzQixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQ3hDLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxDQUNOLENBQUE7WUFFRCx3RUFBd0U7WUFDeEUseUJBQXlCLENBQUMsR0FBRyxDQUFDLE1BQWdCLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFFMUQsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDLENBQUE7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFO2dCQUMvRCxLQUFLLEVBQUUscUJBQXFCO2dCQUM1QixRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsSUFBSTthQUNuQixDQUFDLENBQ0Q7WUFDQyx1QkFHRCxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQTtRQUM5QixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQ1YsOERBQThELEVBQzdELEdBQWEsQ0FBQyxPQUFPLENBQ3ZCLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxJQUNFLE1BQU0sQ0FBQyxtQkFBbUI7UUFDMUIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLEVBQy9DLENBQUM7UUFDRCxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQTtRQUU5RCxvREFBb0Q7UUFDcEQsTUFBTSw4QkFBK0IsU0FBUSwyQkFBMkI7WUFDdEUsWUFBWSxLQUFjLEVBQUUsRUFBVSxFQUFFLEtBQStCO2dCQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFFdkIsOENBQThDO2dCQUM5QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDZixNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQyxHQUFHLENBQy9DLEtBQUssQ0FBQyxJQUFjLENBQ3JCLENBQUE7b0JBQ0QsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDaEIsQ0FBQzt3QkFBQyxJQUEwQyxDQUMxQyxxQkFBcUIsQ0FDdEIsR0FBRyxXQUFXLENBQUE7b0JBQ2pCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFBOztRQUduQyxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsRUFBRTtnQkFDbkQsS0FBSyxFQUFFLDhCQUE4QjtnQkFDckMsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUNWLG1EQUFtRCxFQUNsRCxHQUFhLENBQUMsT0FBTyxDQUN2QixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCb290c3RyYXAgZmlsZSB0aGF0IGluc3RhbGxzIGhvb2tzIGZvciBOb2RlanNGdW5jdGlvbiBhbmQgRG9ja2VySW1hZ2VGdW5jdGlvblxuICogQkVGT1JFIGFueSBDREsgaW1wb3J0cy5cbiAqXG4gKiBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYXMgdGhlIHZlcnkgZmlyc3QgdGhpbmcgaW4gdGhlIENESyBhcHAgZW50cnkgcG9pbnQsXG4gKiBiZWZvcmUgYW55IG90aGVyIGltcG9ydHMuXG4gKlxuICogUnVudGltZSBzdXBwb3J0OlxuICogLSBOb2RlLmpzOiBwYXRjaGVzIE1vZHVsZS5fbG9hZCB0byBpbnRlcmNlcHQgbW9kdWxlIGxvYWRpbmdcbiAqIC0gQnVuOiBkaXJlY3RseSBpbXBvcnRzIGFuZCBwYXRjaGVzIG1vZHVsZXMgKE1vZHVsZS5fbG9hZCBub3Qgc3VwcG9ydGVkKVxuICpcbiAqIEhvb2tzIGluc3RhbGxlZDpcbiAqIC0gTm9kZWpzRnVuY3Rpb246IGNhcHR1cmVzIGVudHJ5IGFuZCBoYW5kbGVyIHByb3BzXG4gKiAtIERvY2tlckltYWdlRnVuY3Rpb246IGNhcHR1cmVzIGRvY2tlciBjb250ZXh0IHBhdGggZnJvbSBjb2RlIHByb3BcbiAqIC0gRG9ja2VySW1hZ2VDb2RlLmZyb21JbWFnZUFzc2V0OiBjYXB0dXJlcyB0aGUgZGlyZWN0b3J5IHBhdGhcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCJcblxuY29uc3QgcmVxdWlyZUZyb21QYWNrYWdlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpXG5cbi8vIFByZWZlciByZXNvbHZpbmcgZGVwZW5kZW5jaWVzIGZyb20gdGhlICpDREsgYXBwIHByb2plY3QqIChwcm9jZXNzLmN3ZCgpKS5cbi8vIFRoaXMgYXZvaWRzIHBhdGNoaW5nIGEgbmVzdGVkIGF3cy1jZGstbGliIGNvcHkgd2hlbiBjZGstbG9jYWwtbGFtYmRhIGlzXG4vLyBpbnN0YWxsZWQgd2l0aCBpdHMgb3duIG5vZGVfbW9kdWxlcyAoY29tbW9uIHdpdGggcGFja2FnZSBtYW5hZ2VycykuXG5sZXQgcmVxdWlyZUZyb21Qcm9qZWN0ID0gcmVxdWlyZUZyb21QYWNrYWdlXG50cnkge1xuICByZXF1aXJlRnJvbVByb2plY3QgPSBjcmVhdGVSZXF1aXJlKGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmApXG59IGNhdGNoIHtcbiAgLy8gRmFsbCBiYWNrIHRvIHJlc29sdmluZyByZWxhdGl2ZSB0byB0aGlzIHBhY2thZ2UuXG59XG5cbi8qKlxuICogRGV0ZWN0IGlmIHdlJ3JlIHJ1bm5pbmcgaW4gQnVuIHJ1bnRpbWVcbiAqL1xuY29uc3QgaXNCdW4gPSB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5idW4gIT09IFwidW5kZWZpbmVkXCJcblxuLy8gU3ltYm9scyBmb3IgTm9kZWpzRnVuY3Rpb25cbmNvbnN0IEVOVFJZX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJsaXZlLWxhbWJkYTplbnRyeVwiKVxuY29uc3QgSEFORExFUl9TWU1CT0wgPSBTeW1ib2wuZm9yKFwibGl2ZS1sYW1iZGE6aGFuZGxlclwiKVxuXG4vLyBTeW1ib2xzIGZvciBEb2NrZXJJbWFnZUZ1bmN0aW9uXG5jb25zdCBET0NLRVJfQ09OVEVYVF9TWU1CT0wgPSBTeW1ib2wuZm9yKFwibGl2ZS1sYW1iZGE6ZG9ja2VyLWNvbnRleHRcIilcblxuLyoqXG4gKiBNYXAgdG8gc3RvcmUgZG9ja2VyIGNvbnRleHQgcGF0aHMgY2FwdHVyZWQgZnJvbSBEb2NrZXJJbWFnZUNvZGUuZnJvbUltYWdlQXNzZXRcbiAqIEtleSBpcyB0aGUgRG9ja2VySW1hZ2VDb2RlIGluc3RhbmNlLCB2YWx1ZSBpcyB0aGUgY29udGV4dCBwYXRoXG4gKi9cbmNvbnN0IGRvY2tlckltYWdlQ29kZUNvbnRleHRNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIHN0cmluZz4oKVxuXG4vKipcbiAqIENoZWNrIGlmIGEgbW9kdWxlIHJlcXVlc3QgaXMgZm9yIGF3cy1sYW1iZGEtbm9kZWpzLlxuICogV2UgbmVlZCB0byBtYXRjaDpcbiAqIC0gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiIChkaXJlY3QgaW1wb3J0KVxuICogLSBQYXRocyBlbmRpbmcgd2l0aCBcIi9hd3MtbGFtYmRhLW5vZGVqc1wiIChyZXNvbHZlZCBwYXRocylcbiAqIC0gUGF0aHMgY29udGFpbmluZyBcIi9hd3MtbGFtYmRhLW5vZGVqcy9cIiAoc3VibW9kdWxlIGltcG9ydHMpXG4gKi9cbmZ1bmN0aW9uIGlzTGFtYmRhTm9kZWpzTW9kdWxlKHJlcXVlc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHJlcXVlc3QgPT09IFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIiB8fFxuICAgIHJlcXVlc3QuZW5kc1dpdGgoXCIvYXdzLWxhbWJkYS1ub2RlanNcIikgfHxcbiAgICByZXF1ZXN0LmluY2x1ZGVzKFwiL2F3cy1sYW1iZGEtbm9kZWpzL1wiKVxuICApXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBtb2R1bGUgcmVxdWVzdCBpcyBmb3IgYXdzLWxhbWJkYSAoZm9yIERvY2tlckltYWdlRnVuY3Rpb24pLlxuICogV2UgbmVlZCB0byBtYXRjaDpcbiAqIC0gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCIgKGRpcmVjdCBpbXBvcnQpXG4gKiAtIFBhdGhzIGVuZGluZyB3aXRoIFwiL2F3cy1sYW1iZGFcIiAocmVzb2x2ZWQgcGF0aHMpXG4gKiAtIFBhdGhzIGNvbnRhaW5pbmcgXCIvYXdzLWxhbWJkYS9cIiAoc3VibW9kdWxlIGltcG9ydHMpXG4gKi9cbmZ1bmN0aW9uIGlzTGFtYmRhTW9kdWxlKHJlcXVlc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBCZSBjYXJlZnVsIG5vdCB0byBtYXRjaCBhd3MtbGFtYmRhLW5vZGVqc1xuICBpZiAocmVxdWVzdC5pbmNsdWRlcyhcImF3cy1sYW1iZGEtbm9kZWpzXCIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIChcbiAgICByZXF1ZXN0ID09PSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIiB8fFxuICAgIHJlcXVlc3QuZW5kc1dpdGgoXCIvYXdzLWxhbWJkYVwiKSB8fFxuICAgIHJlcXVlc3QuaW5jbHVkZXMoXCIvYXdzLWxhbWJkYS9cIilcbiAgKVxufVxuXG4vLyBNb2R1bGUgdHlwZSBmb3IgdGhlIGxhbWJkYS1ub2RlanMgZXhwb3J0c1xuaW50ZXJmYWNlIExhbWJkYU5vZGVqc01vZHVsZSB7XG4gIE5vZGVqc0Z1bmN0aW9uOiBOb2RlanNGdW5jdGlvbkNvbnN0cnVjdG9yICYge1xuICAgIF9fbGl2ZUxhbWJkYVBhdGNoZWQ/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 CDK_LIVE=true and hotswap
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