ec2-instance-running-scheduler 0.4.6 → 0.5.0

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.
@@ -1,8 +1,9 @@
1
1
  import { Duration, RemovalPolicy, TimeZone } from 'aws-cdk-lib';
2
2
  import * as logs from 'aws-cdk-lib/aws-logs';
3
3
  import { Construct } from 'constructs';
4
- import { type FailureDetectionAlarms, type RunningSchedulerFailureDetection } from './running-scheduler-failure-detection';
5
- export type { FailureDetectionAlarms, RunningSchedulerFailureDetection, RunningSchedulerFailureDetectionProps, } from './running-scheduler-failure-detection';
4
+ import { type RunningSchedulerFailureDetection, type RunningSchedulerFailureDetectionProps } from './running-scheduler-failure-detection';
5
+ export type { RunningSchedulerFailureDetection, RunningSchedulerFailureDetectionProps, RunningSchedulerFailureDetectionResourcesProps, } from './running-scheduler-failure-detection';
6
+ export { createLambdaFailureDetector, isLambdaFailureDetectionEnabled, LambdaFailureDetector, type CreateLambdaFailureDetectorProps, type LambdaFailureDetection, type LambdaFailureDetectorProps, type LogFailureAlarm, type LogFailureFilter, } from './lambda-failure-detector/lambda-failure-detector';
6
7
  /**
7
8
  * Cron-style schedule configuration for start/stop actions.
8
9
  */
@@ -177,7 +178,7 @@ export interface EC2InstanceRunningSchedulerProps {
177
178
  *
178
179
  * @default disabled when omitted
179
180
  */
180
- readonly failureDetection?: FailureDetectionAlarms;
181
+ readonly failureDetection?: RunningSchedulerFailureDetectionProps;
181
182
  }
182
183
  /**
183
184
  * Provisions EventBridge Scheduler rules and a Durable Execution Lambda that start/stop tagged EC2 instances.
@@ -205,7 +206,7 @@ export declare class EC2InstanceRunningScheduler extends Construct {
205
206
  * @param props - Target tags, schedules, Slack secret, schedule enable flag, optional
206
207
  * {@link ResourceWaitLimits}, {@link RunningSchedulerRuntimeProps},
207
208
  * {@link RunningSchedulerDurableProps}, {@link RunningSchedulerLogGroupProps},
208
- * and optional {@link FailureDetectionAlarms}.
209
+ * and optional {@link RunningSchedulerFailureDetectionProps}.
209
210
  */
210
211
  constructor(scope: Construct, id: string, props: EC2InstanceRunningSchedulerProps);
211
212
  }
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.EC2InstanceRunningScheduler = void 0;
36
+ exports.EC2InstanceRunningScheduler = exports.LambdaFailureDetector = exports.isLambdaFailureDetectionEnabled = exports.createLambdaFailureDetector = void 0;
37
37
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
38
38
  const aws_cdk_lib_1 = require("aws-cdk-lib");
39
39
  const iam = __importStar(require("aws-cdk-lib/aws-iam"));
@@ -47,6 +47,10 @@ const running_scheduler_failure_detection_1 = require("./running-scheduler-failu
47
47
  const running_scheduler_function_1 = require("../funcs/running-scheduler-function");
48
48
  const running_scheduler_predicates_1 = require("../funcs/running-scheduler-predicates");
49
49
  const running_scheduler_wait_config_1 = require("../funcs/running-scheduler-wait-config");
50
+ var lambda_failure_detector_1 = require("./lambda-failure-detector/lambda-failure-detector");
51
+ Object.defineProperty(exports, "createLambdaFailureDetector", { enumerable: true, get: function () { return lambda_failure_detector_1.createLambdaFailureDetector; } });
52
+ Object.defineProperty(exports, "isLambdaFailureDetectionEnabled", { enumerable: true, get: function () { return lambda_failure_detector_1.isLambdaFailureDetectionEnabled; } });
53
+ Object.defineProperty(exports, "LambdaFailureDetector", { enumerable: true, get: function () { return lambda_failure_detector_1.LambdaFailureDetector; } });
50
54
  const DEFAULT_LAMBDA_MEMORY_SIZE = 512;
51
55
  const DEFAULT_LAMBDA_TIMEOUT = aws_cdk_lib_1.Duration.minutes(15);
52
56
  const DEFAULT_DURABLE_EXECUTION_TIMEOUT = aws_cdk_lib_1.Duration.hours(2);
@@ -132,7 +136,7 @@ const taggedInstanceStartStopStatement = (scope, targetResource) => {
132
136
  * detection is available via {@link EC2InstanceRunningSchedulerProps.failureDetection}.
133
137
  */
134
138
  class EC2InstanceRunningScheduler extends constructs_1.Construct {
135
- static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.4.6" };
139
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.5.0" };
136
140
  /** Failure detection alarms, when {@link EC2InstanceRunningSchedulerProps.failureDetection} is enabled. */
137
141
  failureDetection;
138
142
  /**
@@ -144,7 +148,7 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
144
148
  * @param props - Target tags, schedules, Slack secret, schedule enable flag, optional
145
149
  * {@link ResourceWaitLimits}, {@link RunningSchedulerRuntimeProps},
146
150
  * {@link RunningSchedulerDurableProps}, {@link RunningSchedulerLogGroupProps},
147
- * and optional {@link FailureDetectionAlarms}.
151
+ * and optional {@link RunningSchedulerFailureDetectionProps}.
148
152
  */
149
153
  constructor(scope, id, props) {
150
154
  super(scope, id);
@@ -275,4 +279,4 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
275
279
  }
276
280
  }
277
281
  exports.EC2InstanceRunningScheduler = EC2InstanceRunningScheduler;
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBa0Y7QUFDbEYseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCwyREFBNkM7QUFDN0MscUVBQXVEO0FBQ3ZELDJFQUE2RDtBQUM3RCx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLCtGQUkrQztBQUMvQyxvRkFBK0U7QUFDL0Usd0ZBRytDO0FBQy9DLDBGQUtnRDtBQWdNaEQsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxNQUFNLGlDQUFpQyxHQUFHLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sZ0NBQWdDLEdBQUcsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsSUFBWSxFQUFFLEtBQXlCLEVBQUUsWUFBb0IsRUFBVSxFQUFFO0lBQ3ZHLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksb0NBQW9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQUMsY0FBOEIsRUFBUSxFQUFFO0lBQzFFLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0lBQzlFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sZ0NBQWdDLEdBQUcsQ0FDdkMsS0FBZ0IsRUFDaEIsY0FBOEIsRUFDVCxFQUFFO0lBQ3ZCLE1BQU0sV0FBVyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM1QyxPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFlBQVksRUFBRSxHQUFHO1FBQ2pCLFNBQVMsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQjtLQUN6QyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztRQUM3QixHQUFHLEVBQUUsNkJBQTZCO1FBQ2xDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7UUFDeEIsT0FBTyxFQUFFO1lBQ1Asb0JBQW9CO1lBQ3BCLG1CQUFtQjtTQUNwQjtRQUNELFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN4QixVQUFVLEVBQUU7WUFDVixZQUFZLEVBQUU7Z0JBQ1osQ0FBQyxtQkFBbUIsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsY0FBYyxDQUFDLFNBQVM7YUFDdkU7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHNCQUFTOztJQUN4RCwyR0FBMkc7SUFDM0YsZ0JBQWdCLENBQW9DO0lBRXBFOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVDO1FBQy9FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMEJBQTBCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWpELE1BQU0sV0FBVyxHQUFHLDJCQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUN6QywyQkFBMkIsRUFDM0IsS0FBSyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQ2hDLDJEQUE0QixDQUFDLFlBQVksQ0FDMUMsQ0FBQztRQUNGLE1BQU0saUJBQWlCLEdBQUcsc0JBQXNCLENBQzlDLGdDQUFnQyxFQUNoQyxLQUFLLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUNyQywyREFBNEIsQ0FBQyxpQkFBaUIsQ0FDL0MsQ0FBQztRQUNGLE1BQU0sdUJBQXVCLEdBQUcsc0JBQXNCLENBQ3BELHNDQUFzQyxFQUN0QyxLQUFLLENBQUMsWUFBWSxFQUFFLHVCQUF1QixFQUMzQywyREFBNEIsQ0FBQyx1QkFBdUIsQ0FDckQsQ0FBQztRQUNGLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUMzQyx3QkFBd0IsRUFDeEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQzdCLHNEQUF1QixDQUN4QixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQ3ZDLG9CQUFvQixFQUNwQixLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFDekIsMEJBQTBCLENBQzNCLENBQUM7UUFFRixtR0FBbUc7UUFDbkcsMENBQTBDO1FBQzFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsRUFBRTtZQUNsRyxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZO1lBQ3ZFLGFBQWEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsSUFBSSwyQkFBYSxDQUFDLE9BQU87U0FDdEUsQ0FBQyxDQUFDO1FBRUgsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLHFEQUF3QixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUM3RixXQUFXLEVBQUUsMkVBQTJFO1lBQ3hGLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLHNCQUFzQjtZQUN6RCxVQUFVO1lBQ1YsYUFBYSxFQUFFLENBQUM7WUFDaEIsYUFBYSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksaUNBQWlDO2dCQUN0RixlQUFlLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLElBQUksZ0NBQWdDO2FBQ3BGO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZTtnQkFDaEQsQ0FBQyxtRUFBbUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7Z0JBQzNELENBQUMsd0VBQXdDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3JFLENBQUMsK0VBQStDLENBQUMsRUFBRSxNQUFNLENBQUMsdUJBQXVCLENBQUM7Z0JBQ2xGLENBQUMscUVBQXFDLENBQUMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDO2FBQ2hFO1lBQ0QsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLDRCQUE0QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFO2dCQUMxRyw2SEFBNkg7Z0JBQzdILFNBQVMsRUFBRSxHQUFHO2dCQUNkLFFBQVEsRUFBRSxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSTthQUMvQyxDQUFDO1lBQ0YsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEVBQUU7Z0JBQ3ZELFdBQVcsRUFBRSxvSEFBb0g7Z0JBQ2pJLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDM0QsZUFBZSxFQUFFO29CQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsMENBQTBDLENBQUM7b0JBQ3RGLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsdURBQXVELENBQUM7aUJBQ3BHO2FBQ0YsQ0FBQztZQUNGLFFBQVEsRUFBRSwrQkFBK0I7WUFDekMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSTtZQUN4QyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUk7WUFDNUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUk7U0FDdkQsQ0FBQyxDQUFDO1FBQ0gsdUJBQXVCLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUM5RCxHQUFHLEVBQUUsY0FBYztZQUNuQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLE9BQU8sRUFBRTtnQkFDUCxrQkFBa0I7YUFDbkI7WUFDRCwyRUFBMkU7WUFDM0UsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0osdUJBQXVCLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUM5RCxHQUFHLEVBQUUsc0JBQXNCO1lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLHVCQUF1QjthQUN4QjtZQUNELHVGQUF1RjtZQUN2RixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUFDLENBQUM7UUFDSix1QkFBdUIsQ0FBQyxlQUFlLENBQ3JDLGdDQUFnQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQzdELENBQUM7UUFDRix3Q0FBd0M7UUFDeEMsV0FBVyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLDRFQUFzQyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUN2RixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLHVCQUF1QjtZQUN2QixRQUFRLEVBQUUsK0JBQStCO1NBQzFDLENBQUMsQ0FBQztRQUVILHFGQUFxRjtRQUNyRixNQUFNLDRCQUE0QixHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5RSwyRUFBMkU7UUFDM0UsTUFBTSxlQUFlLEdBQVksQ0FBQyxHQUFHLEVBQUU7WUFDckMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuRSxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwseUZBQXlGO1FBQ3pGLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7WUFDbkQsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztnQkFDMUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxJQUFJLElBQUk7Z0JBQzNDLElBQUksRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxHQUFHO2dCQUN0QyxPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksU0FBUztnQkFDL0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxJQUFJLHNCQUFRLENBQUMsT0FBTzthQUM1RCxDQUFDO1lBQ0YsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsRUFBRTtnQkFDN0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7b0JBQzlDLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNO3dCQUNuQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTO3dCQUN6QyxJQUFJLEVBQUUsT0FBTztxQkFDZDtpQkFDRixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7WUFDbEQsV0FBVyxFQUFFLHVCQUF1QjtZQUNwQyxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztnQkFDMUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxJQUFJLEdBQUc7Z0JBQ3pDLElBQUksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJO2dCQUN0QyxPQUFPLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksU0FBUztnQkFDOUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLHNCQUFRLENBQUMsT0FBTzthQUMzRCxDQUFDO1lBQ0YsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsRUFBRTtnQkFDN0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7b0JBQzlDLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNO3dCQUNuQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTO3dCQUN6QyxJQUFJLEVBQUUsTUFBTTtxQkFDYjtpQkFDRixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUtILGtFQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFybkZvcm1hdCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUaW1lWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgc2NoZWR1bGVyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXInO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2NoZWR1bGVyLXRhcmdldHMnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24sXG4gIHR5cGUgRmFpbHVyZURldGVjdGlvbkFsYXJtcyxcbiAgdHlwZSBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci1mYWlsdXJlLWRldGVjdGlvbic7XG5pbXBvcnQgeyBSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1mdW5jdGlvbic7XG5pbXBvcnQge1xuICBERUZBVUxUX01BWF9DT05DVVJSRU5DWSxcbiAgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUyxcbn0gZnJvbSAnLi4vZnVuY3MvcnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcyc7XG5pbXBvcnQge1xuICBQUk9DRVNTX1JFU09VUkNFX01BWF9FTEFQU0VEX1NFQ09ORFNfRU5WLFxuICBQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVixcbiAgUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VTX01BWF9DT05DVVJSRU5DWV9FTlYsXG59IGZyb20gJy4uL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLXdhaXQtY29uZmlnJztcblxuZXhwb3J0IHR5cGUge1xuICBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zLFxuICBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbiAgUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb25Qcm9wcyxcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci1mYWlsdXJlLWRldGVjdGlvbic7XG5cbi8qKlxuICogQ3Jvbi1zdHlsZSBzY2hlZHVsZSBjb25maWd1cmF0aW9uIGZvciBzdGFydC9zdG9wIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGUge1xuICAvKiogVGltZSB6b25lIGZvciB0aGUgc2NoZWR1bGUgKGUuZy4gRVRDX1VUQykuICovXG4gIHJlYWRvbmx5IHRpbWV6b25lOiBUaW1lWm9uZTtcbiAgLyoqIENyb24gbWludXRlICgw4oCTNTkpLiAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGhvdXIgKDDigJMyMykuICovXG4gIHJlYWRvbmx5IGhvdXI/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGRheSBvZiB3ZWVrIChlLmcuIE1PTi1GUkkpLiAqL1xuICByZWFkb25seSB3ZWVrPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hpY2ggRUMyIGluc3RhbmNlcyBhcmUgdGFyZ2V0ZWQgYnkgdGFnIGtleSBhbmQgdmFsdWVzLlxuICpcbiAqIEluc3RhbmNlcyBtdXN0IGFscmVhZHkgaGF2ZSB0aGlzIHRhZy4gSUFNIGFsbG93cyBgZWMyOlN0YXJ0SW5zdGFuY2VzYCAvXG4gKiBgZWMyOlN0b3BJbnN0YW5jZXNgIG9ubHkgb24gaW5zdGFuY2VzIGluIHRoZSBzdGFjayBhY2NvdW50IGFuZCByZWdpb24gd2hvc2VcbiAqIGBhd3M6UmVzb3VyY2VUYWcvPHRhZ0tleT5gIG1hdGNoZXMgb25lIG9mIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdWYWx1ZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdXNlZCB0byBzZWxlY3QgaW5zdGFuY2VzIChlLmcuIFNjaGVkdWxlKS4gKi9cbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBUYWcgdmFsdWVzIHRoYXQgbWF0Y2ggaW5zdGFuY2VzIHRvIGluY2x1ZGUuICovXG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VjcmV0IGlkZW50aWZpZXJzIHJlcXVpcmVkIGJ5IHRoZSBzY2hlZHVsZXIgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDREstc2lkZSBsaW1pdHMgZm9yIHBlci1pbnN0YW5jZSBzdGFibGUtc3RhdGUgd2FpdGluZyBpbiB0aGUgRHVyYWJsZSBMYW1iZGEgaGFuZGxlci5cbiAqXG4gKiBPcHRpb25hbCBmaWVsZHMgbWFwIHRvIHtAbGluayBQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVn0gYW5kXG4gKiB7QGxpbmsgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVn0gb24gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICogUHJldmVudHMgYWJub3JtYWwgb3Igc3R1Y2sgdHJhbnNpdGlvbnMgZnJvbSBydW5uaW5nIHVudGlsIHRoZSBEdXJhYmxlIGV4ZWN1dGlvbiB0aW1lb3V0LlxuICpcbiAqIEBzZWUge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMudHNgIGZvciB0aGUgaGFuZGxlci1zaWRlIHJlcXVpcmVkIHNoYXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlV2FpdExpbWl0cyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGRlc2NyaWJlL3dhaXQgbG9vcCBpdGVyYXRpb25zIHBlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50fSAoOTApXG4gICAqL1xuICByZWFkb25seSBtYXhMb29wQ291bnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIHdhbGwtY2xvY2sgc2Vjb25kcyBzcGVudCB3YWl0aW5nIGZvciBhIHNpbmdsZSBpbnN0YW5jZSB0byBzdGFiaWxpemUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heEVsYXBzZWRTZWNvbmRzfSAoMTgwMCwgMzAgbWludXRlcylcbiAgICovXG4gIHJlYWRvbmx5IG1heEVsYXBzZWRTZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgICogU2Vjb25kcyB0byB3YWl0IGJldHdlZW4gZGVzY3JpYmUgaXRlcmF0aW9ucyBhZnRlciBzdGFydC9zdG9wIG9yIHdoaWxlIHRyYW5zaXRpb25pbmcuXG4gICAqXG4gICAqIExvd2VyIHZhbHVlcyBkZXRlY3Qgc3RhdGUgY2hhbmdlcyBzb29uZXI7IGhpZ2hlciB2YWx1ZXMgcmVkdWNlIERlc2NyaWJlSW5zdGFuY2VzIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kc30gKDIwKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGFtYmRhIGludm9rZSBzZXR0aW5ncyBhbmQgYm91bmRlZCBwYXJhbGxlbGlzbSBmb3IgdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICpcbiAqIEluY3JlYXNlIHtAbGluayBtZW1vcnlTaXplfSBhbmQge0BsaW5rIG1heENvbmN1cnJlbmN5fSB3aGVuIGEgc2luZ2xlIGludm9jYXRpb24gdGFyZ2V0c1xuICogbWFueSBpbnN0YW5jZXMgb3IgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIE1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYSwgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDUxMlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEludm9rZSB0aW1lb3V0IGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uIChub3QgdGhlIGR1cmFibGUgZXhlY3V0aW9uIHRpbWVvdXQpLlxuICAgKlxuICAgKiBBV1MgTGFtYmRhJ3MgbWF4aW11bSBpbnZva2UgdGltZW91dCBpcyAxNSBtaW51dGVzLiBEdXJhYmxlIHdhaXRzIGNhbiBjb250aW51ZVxuICAgKiBiZXlvbmQgdGhpcyB2aWEge0BsaW5rIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMuZXhlY3V0aW9uVGltZW91dH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoMTUpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSBkdXJhYmxlIGBtYXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbmN1cnJlbmN5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIER1cmFibGUgRXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIGZvciB0aGUgcnVubmluZyBzY2hlZHVsZXIgTGFtYmRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMge1xuICAvKipcbiAgICogTWF4aW11bSBkdXJhdGlvbiBvZiBhIGR1cmFibGUgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBJbmNyZWFzZSB3aGVuIG1hbnkgaW5zdGFuY2VzIGFyZSBwcm9jZXNzZWQgd2l0aCBsb25nIHBlci1pbnN0YW5jZSB3YWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uaG91cnMoMilcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHJldGFpbiBkdXJhYmxlIGV4ZWN1dGlvbiBoaXN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5kYXlzKDEpXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb25QZXJpb2Q/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDbG91ZFdhdGNoIExvZ3Mgc2V0dGluZ3MgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbiBsb2cgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmluZ1NjaGVkdWxlckxvZ0dyb3VwUHJvcHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gcmV0YWluIGFwcGxpY2F0aW9uIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIGxvZyBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldGluZyBmb3IgRUMyIGluc3RhbmNlcyB0byBzdGFydC9zdG9wLiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKlxuICAgKiBQZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VXYWl0PzogUmVzb3VyY2VXYWl0TGltaXRzO1xuICAvKipcbiAgICogTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsIGFuZCBwZXItaW52b2NhdGlvbiBpbnN0YW5jZSBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgNTEyIE1CLCAxNSBtaW51dGVzLCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzO1xuICAvKipcbiAgICogRHVyYWJsZSBFeGVjdXRpb24gdGltZW91dCBhbmQgaGlzdG9yeSByZXRlbnRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGV4ZWN1dGlvblRpbWVvdXQgMiBob3VycywgcmV0ZW50aW9uUGVyaW9kIDEgZGF5XG4gICAqL1xuICByZWFkb25seSBkdXJhYmxlPzogUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wcztcbiAgLyoqXG4gICAqIENsb3VkV2F0Y2ggTG9ncyByZXRlbnRpb24gYW5kIHJlbW92YWwgcG9saWN5IGZvciB0aGUgZnVuY3Rpb24gbG9nIGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUywgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IFJ1bm5pbmdTY2hlZHVsZXJMb2dHcm91cFByb3BzO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ2xvdWRXYXRjaCBhbGFybXMgYW5kIGxvZy1iYXNlZCBtZXRyaWNzIGZvciBmYWlsdXJlIGRldGVjdGlvbi5cbiAgICpcbiAgICogU2V0IGBlbmFibGVkOiB0cnVlYCB0byBjcmVhdGUgYWxhcm1zOyBvcHRpb25hbGx5IHBhc3MgYGFsYXJtVG9waWNgIGZvciBTTlMgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzYWJsZWQgd2hlbiBvbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlRGV0ZWN0aW9uPzogRmFpbHVyZURldGVjdGlvbkFsYXJtcztcbn1cblxuY29uc3QgREVGQVVMVF9MQU1CREFfTUVNT1JZX1NJWkUgPSA1MTI7XG5jb25zdCBERUZBVUxUX0xBTUJEQV9USU1FT1VUID0gRHVyYXRpb24ubWludXRlcygxNSk7XG5jb25zdCBERUZBVUxUX0RVUkFCTEVfRVhFQ1VUSU9OX1RJTUVPVVQgPSBEdXJhdGlvbi5ob3VycygyKTtcbmNvbnN0IERFRkFVTFRfRFVSQUJMRV9SRVRFTlRJT05fUEVSSU9EID0gRHVyYXRpb24uZGF5cygxKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB2YWx1ZWAgd2hlbiBzZXQsIG90aGVyd2lzZSBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFByb3BlcnR5IHBhdGggdXNlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIE9wdGlvbmFsIHBvc2l0aXZlIGludGVnZXIgZnJvbSBjb25zdHJ1Y3QgcHJvcHMuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gRmFsbGJhY2sgd2hlbiBgdmFsdWVgIGlzIG9taXR0ZWQuXG4gKiBAcmV0dXJucyBBIHBvc2l0aXZlIGludGVnZXIuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdmFsdWVgIGlzIHNldCBhbmQgaXMgbm90IGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuY29uc3QgcmVzb2x2ZVBvc2l0aXZlSW50ZWdlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290ICR7U3RyaW5nKHZhbHVlKX0pYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBFbnN1cmVzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0gY2FuIGJlIHVzZWQgaW4gSUFNIGBhd3M6UmVzb3VyY2VUYWdgIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHRhcmdldFJlc291cmNlIC0gVGFnIGtleSBhbmQgdmFsdWVzIHVzZWQgdG8gc2VsZWN0IEVDMiBpbnN0YW5jZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdGFnS2V5YCBpcyBlbXB0eSBvciBgdGFnVmFsdWVzYCBpcyBlbXB0eS5cbiAqL1xuY29uc3QgYXNzZXJ0VGFyZ2V0UmVzb3VyY2VGb3JJYW0gPSAodGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlKTogdm9pZCA9PiB7XG4gIGlmICh0YXJnZXRSZXNvdXJjZS50YWdLZXkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0YXJnZXRSZXNvdXJjZS50YWdLZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuICBpZiAodGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFsdWUnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJQU0gc3RhdGVtZW50IHRoYXQgYWxsb3dzIHN0YXJ0L3N0b3Agb25seSBvbiBFQzIgaW5zdGFuY2VzIGluIHRoaXMgYWNjb3VudCBhbmQgcmVnaW9uXG4gKiB3aG9zZSB0YWdzIG1hdGNoIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uXG4gKlxuICogYHRhZzpHZXRSZXNvdXJjZXNgIGFuZCBgZWMyOkRlc2NyaWJlSW5zdGFuY2VzYCBjYW5ub3QgdXNlIHJlc291cmNlLWxldmVsIEFSTnMgb3JcbiAqIHJlc291cmNlLXRhZyBjb25kaXRpb25zIChBV1MgQVBJIGxpbWl0YXRpb24pLiBTdGFydC9zdG9wIGFyZSBzY29wZWQgaW5zdGVhZCBzbyBhXG4gKiBjb21wcm9taXNlZCBmdW5jdGlvbiBjYW5ub3Qgc3RhcnQgb3Igc3RvcCB1bnRhZ2dlZCBpbnN0YW5jZXMuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gQ29uc3RydWN0IHVzZWQgdG8gcmVzb2x2ZSB0aGUgc3RhY2sgQVJOIHBhcnRpdGlvbiwgcmVnaW9uLCBhbmQgYWNjb3VudC5cbiAqIEBwYXJhbSB0YXJnZXRSZXNvdXJjZSAtIFRhZyBrZXkgYW5kIHZhbHVlcyByZXF1aXJlZCBvbiB0YXJnZXQgaW5zdGFuY2VzLlxuICogQHJldHVybnMgUG9saWN5IHN0YXRlbWVudCBmb3IgYGVjMjpTdGFydEluc3RhbmNlc2AgYW5kIGBlYzI6U3RvcEluc3RhbmNlc2AuXG4gKi9cbmNvbnN0IHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50ID0gKFxuICBzY29wZTogQ29uc3RydWN0LFxuICB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2UsXG4pOiBpYW0uUG9saWN5U3RhdGVtZW50ID0+IHtcbiAgY29uc3QgaW5zdGFuY2VBcm4gPSBTdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICBzZXJ2aWNlOiAnZWMyJyxcbiAgICByZXNvdXJjZTogJ2luc3RhbmNlJyxcbiAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICB9KTtcblxuICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgIHNpZDogJ0VjMlN0YXJ0U3RvcFRhZ2dlZEluc3RhbmNlcycsXG4gICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgIGFjdGlvbnM6IFtcbiAgICAgICdlYzI6U3RhcnRJbnN0YW5jZXMnLFxuICAgICAgJ2VjMjpTdG9wSW5zdGFuY2VzJyxcbiAgICBdLFxuICAgIHJlc291cmNlczogW2luc3RhbmNlQXJuXSxcbiAgICBjb25kaXRpb25zOiB7XG4gICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgW2Bhd3M6UmVzb3VyY2VUYWcvJHt0YXJnZXRSZXNvdXJjZS50YWdLZXl9YF06IHRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFByb3Zpc2lvbnMgRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHJ1bGVzIGFuZCBhIER1cmFibGUgRXhlY3V0aW9uIExhbWJkYSB0aGF0IHN0YXJ0L3N0b3AgdGFnZ2VkIEVDMiBpbnN0YW5jZXMuXG4gKlxuICogRWFjaCBzY2hlZHVsZSBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoIGBQYXJhbXNgIChgVGFnS2V5YCwgYFRhZ1ZhbHVlc2AsIGBNb2RlYCkuIFRoZSBmdW5jdGlvbiB1c2VzXG4gKiB0aGUgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGFuZCBFQzIgQVBJczsgU2xhY2sgbm90aWZpY2F0aW9ucyB1c2UgdGhlIHNlY3JldCBuYW1lZCBpbiB7QGxpbmsgU2VjcmV0cy5zbGFja1NlY3JldE5hbWV9LlxuICpcbiAqIFBlci1pbnN0YW5jZSB3YWl0IHRpbWVvdXRzIGFyZSBjb25maWd1cmVkIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMucmVzb3VyY2VXYWl0fVxuICogYW5kIGVuZm9yY2VkIGluIHRoZSBoYW5kbGVyIGJlZm9yZSB0aGUgRHVyYWJsZSBleGVjdXRpb24gdGltZW91dC4gTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsXG4gKiBhbmQgbWFwIGNvbmN1cnJlbmN5IGFyZSBzZXQgdmlhIHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcy5ydW50aW1lfTsgRHVyYWJsZVxuICogZXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZHVyYWJsZX07XG4gKiBsb2cgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMubG9nR3JvdXB9LiBTdGFydC9zdG9wIElBTSBpcyBsaW1pdGVkXG4gKiB0byBpbnN0YW5jZXMgdGFnZ2VkIGFzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uIE9wdGlvbmFsIENsb3VkV2F0Y2ggZmFpbHVyZVxuICogZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLmZhaWx1cmVEZXRlY3Rpb259LlxuICovXG5leHBvcnQgY2xhc3MgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIEZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgd2hlbiB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZmFpbHVyZURldGVjdGlvbn0gaXMgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVEZXRlY3Rpb24/OiBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbjtcblxuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIG9wdGlvbmFsIGZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgdHdvIGNyb24gc2NoZWR1bGVzIChzdGFydC9zdG9wKSxcbiAgICogYW5kIHRoZSBidW5kbGVkIHJ1bm5pbmctc2NoZWR1bGVyIExhbWJkYSAoTm9kZS5qcywgRHVyYWJsZSBFeGVjdXRpb24pLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRhcmdldCB0YWdzLCBzY2hlZHVsZXMsIFNsYWNrIHNlY3JldCwgc2NoZWR1bGUgZW5hYmxlIGZsYWcsIG9wdGlvbmFsXG4gICAqICAge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzfSxcbiAgICogICB7QGxpbmsgUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wc30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyTG9nR3JvdXBQcm9wc30sXG4gICAqICAgYW5kIG9wdGlvbmFsIHtAbGluayBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zfS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBhc3NlcnRUYXJnZXRSZXNvdXJjZUZvcklhbShwcm9wcy50YXJnZXRSZXNvdXJjZSk7XG5cbiAgICBjb25zdCBzbGFja1NlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHRoaXMsICdTbGFja1NlY3JldCcsIHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lKTtcblxuICAgIGNvbnN0IG1heExvb3BDb3VudCA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncmVzb3VyY2VXYWl0Lm1heExvb3BDb3VudCcsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heExvb3BDb3VudCxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50LFxuICAgICk7XG4gICAgY29uc3QgbWF4RWxhcHNlZFNlY29uZHMgPSByZXNvbHZlUG9zaXRpdmVJbnRlZ2VyKFxuICAgICAgJ3Jlc291cmNlV2FpdC5tYXhFbGFwc2VkU2Vjb25kcycsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heEVsYXBzZWRTZWNvbmRzLFxuICAgICAgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5tYXhFbGFwc2VkU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzID0gcmVzb2x2ZVBvc2l0aXZlSW50ZWdlcihcbiAgICAgICdyZXNvdXJjZVdhaXQuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMnLFxuICAgICAgcHJvcHMucmVzb3VyY2VXYWl0Py5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kcyxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMsXG4gICAgKTtcbiAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tYXhDb25jdXJyZW5jeScsXG4gICAgICBwcm9wcy5ydW50aW1lPy5tYXhDb25jdXJyZW5jeSxcbiAgICAgIERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZLFxuICAgICk7XG4gICAgY29uc3QgbWVtb3J5U2l6ZSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tZW1vcnlTaXplJyxcbiAgICAgIHByb3BzLnJ1bnRpbWU/Lm1lbW9yeVNpemUsXG4gICAgICBERUZBVUxUX0xBTUJEQV9NRU1PUllfU0laRSxcbiAgICApO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnMtYmFzZWQgUnVubmluZyBTY2hlZHVsZXIgKHByZXZpb3VzIFN0ZXAgRnVuY3Rpb25zIGxvZ2ljIGltcGxlbWVudGVkIGluIExhbWJkYSkuXG4gICAgLy8gRHVyYWJsZSBFeGVjdXRpb24gcmVxdWlyZXMgTm9kZS5qcyAyMisuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nR3JvdXA/LnJldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMubG9nR3JvdXA/LnJlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24gPSBuZXcgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyBhbmQgc3RvcHMgdGFnZ2VkIEVDMiBpbnN0YW5jZXMgb24gRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHNjaGVkdWxlcy4nLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnJ1bnRpbWU/LnRpbWVvdXQgPz8gREVGQVVMVF9MQU1CREFfVElNRU9VVCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBwcm9wcy5kdXJhYmxlPy5leGVjdXRpb25UaW1lb3V0ID8/IERFRkFVTFRfRFVSQUJMRV9FWEVDVVRJT05fVElNRU9VVCxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBwcm9wcy5kdXJhYmxlPy5yZXRlbnRpb25QZXJpb2QgPz8gREVGQVVMVF9EVVJBQkxFX1JFVEVOVElPTl9QRVJJT0QsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU0xBQ0tfU0VDUkVUX05BTUU6IHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZdOiBTdHJpbmcobWF4TG9vcENvdW50KSxcbiAgICAgICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdOiBTdHJpbmcobWF4RWxhcHNlZFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlZdOiBTdHJpbmcoc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZX0VOVl06IFN0cmluZyhtYXhDb25jdXJyZW5jeSksXG4gICAgICB9LFxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICAvLyBSZXF1aXJlZCBieSBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIChleHRlbnNpb24gSFRUUCBBUEkgb24gbG9jYWxob3N0OyBwb3J0IGZyb20gUEFSQU1FVEVSU19TRUNSRVRTX0VYVEVOU0lPTl9IVFRQX1BPUlQpLlxuICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgbG9nTGV2ZWw6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuSU5GTyxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Sb2xlJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93cyB0aGUgcnVubmluZyBzY2hlZHVsZXIgdG8gZGVzY3JpYmUgaW5zdGFuY2VzIGFuZCBzdGFydC9zdG9wIHRhZ2dlZCBFQzIgaW5zdGFuY2VzLCBhbmQgdG8gcmVhZCBTbGFjayBzZWNyZXRzLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRSZXNvdXJjZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBdLFxuICAgICAgLy8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMuXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRWMyRGVzY3JpYmVJbnN0YW5jZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgIF0sXG4gICAgICAvLyBEZXNjcmliZSogQVBJcyBkbyBub3Qgc3VwcG9ydCByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9ucyBvciByZXNvdXJjZS10YWcgY29uZGl0aW9ucy5cbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50KHRoaXMsIHByb3BzLnRhcmdldFJlc291cmNlKSxcbiAgICApO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQocnVubmluZ1NjaGVkdWxlRnVuY3Rpb24pO1xuXG4gICAgdGhpcy5mYWlsdXJlRGV0ZWN0aW9uID0gY3JlYXRlUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24odGhpcywgJ0ZhaWx1cmVEZXRlY3Rpb24nLCB7XG4gICAgICBmYWlsdXJlRGV0ZWN0aW9uOiBwcm9wcy5mYWlsdXJlRGV0ZWN0aW9uLFxuICAgICAgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24sXG4gICAgICBsb2dHcm91cDogcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCxcbiAgICB9KTtcblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzID0gcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIC8vIFdoZXRoZXIgc2NoZWR1bGVzIGFyZSBlbmFibGVkIChkZWZhdWx0IHRydWUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQpLlxuICAgIGNvbnN0IHNjaGVkdWxlRW5hYmxlZDogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuZW5hYmxlU2NoZWR1bGluZyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVNjaGVkdWxpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIC8vIER1cmFibGUgRnVuY3Rpb25zOiBMYW1iZGEgcGVyZm9ybXMgdGFnIGxvb2t1cCBhbmQgaW5zdGFuY2Ugc3RhcnQvc3RvcCBpbiBhIHNpbmdsZSBydW4uXG4gICAgbmV3IHNjaGVkdWxlci5TY2hlZHVsZSh0aGlzLCAnUnVubmluZ1N0YXJ0U2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RhcnQgc2NoZWR1bGUnLFxuICAgICAgZW5hYmxlZDogc2NoZWR1bGVFbmFibGVkLFxuICAgICAgc2NoZWR1bGU6IHNjaGVkdWxlci5TY2hlZHVsZUV4cHJlc3Npb24uY3Jvbih7XG4gICAgICAgIG1pbnV0ZTogcHJvcHMuc3RhcnRTY2hlZHVsZT8ubWludXRlID8/ICc1MCcsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LmhvdXIgPz8gJzcnLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdGFydFNjaGVkdWxlPy53ZWVrID8/ICdNT04tRlJJJyxcbiAgICAgICAgdGltZVpvbmU6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LnRpbWV6b25lID8/IFRpbWVab25lLkVUQ19VVEMsXG4gICAgICB9KSxcbiAgICAgIHRhcmdldDogbmV3IHRhcmdldHMuTGFtYmRhSW52b2tlKHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgaW5wdXQ6IHNjaGVkdWxlci5TY2hlZHVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIE1vZGU6ICdTdGFydCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIG5ldyBzY2hlZHVsZXIuU2NoZWR1bGUodGhpcywgJ1J1bm5pbmdTdG9wU2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RvcCBzY2hlZHVsZScsXG4gICAgICBlbmFibGVkOiBzY2hlZHVsZUVuYWJsZWQsXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVyLlNjaGVkdWxlRXhwcmVzc2lvbi5jcm9uKHtcbiAgICAgICAgbWludXRlOiBwcm9wcy5zdG9wU2NoZWR1bGU/Lm1pbnV0ZSA/PyAnNScsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0b3BTY2hlZHVsZT8uaG91ciA/PyAnMTknLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdG9wU2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknLFxuICAgICAgICB0aW1lWm9uZTogcHJvcHMuc3RvcFNjaGVkdWxlPy50aW1lem9uZSA/PyBUaW1lWm9uZS5FVENfVVRDLFxuICAgICAgfSksXG4gICAgICB0YXJnZXQ6IG5ldyB0YXJnZXRzLkxhbWJkYUludm9rZShydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgIGlucHV0OiBzY2hlZHVsZXIuU2NoZWR1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICBQYXJhbXM6IHtcbiAgICAgICAgICAgIFRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgVGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICAgICAgICBNb2RlOiAnU3RvcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuIl19
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBa0Y7QUFDbEYseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCwyREFBNkM7QUFDN0MscUVBQXVEO0FBQ3ZELDJFQUE2RDtBQUM3RCx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLCtGQUkrQztBQUMvQyxvRkFBK0U7QUFDL0Usd0ZBRytDO0FBQy9DLDBGQUtnRDtBQU9oRCw2RkFTMkQ7QUFSekQsc0lBQUEsMkJBQTJCLE9BQUE7QUFDM0IsMElBQUEsK0JBQStCLE9BQUE7QUFDL0IsZ0lBQUEscUJBQXFCLE9BQUE7QUFnTXZCLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQsTUFBTSxpQ0FBaUMsR0FBRyxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxNQUFNLGdDQUFnQyxHQUFHLHNCQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTFEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLElBQVksRUFBRSxLQUF5QixFQUFFLFlBQW9CLEVBQVUsRUFBRTtJQUN2RyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENB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LEVBQUU7d0JBQ04sTUFBTSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTTt3QkFDbkMsU0FBUyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUzt3QkFDekMsSUFBSSxFQUFFLE1BQU07cUJBQ2I7aUJBQ0YsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTVLSCxrRUE2S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcm5Gb3JtYXQsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBTdGFjaywgVGltZVpvbmUgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIHNjaGVkdWxlciBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2NoZWR1bGVyJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNjaGVkdWxlci10YXJnZXRzJztcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uLFxuICB0eXBlIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uLFxuICB0eXBlIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uUHJvcHMsXG59IGZyb20gJy4vcnVubmluZy1zY2hlZHVsZXItZmFpbHVyZS1kZXRlY3Rpb24nO1xuaW1wb3J0IHsgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uIH0gZnJvbSAnLi4vZnVuY3MvcnVubmluZy1zY2hlZHVsZXItZnVuY3Rpb24nO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1ksXG4gIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMsXG59IGZyb20gJy4uL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMnO1xuaW1wb3J0IHtcbiAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVixcbiAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VfU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFNfRU5WLFxuICBQUk9DRVNTX1JFU09VUkNFU19NQVhfQ09OQ1VSUkVOQ1lfRU5WLFxufSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci13YWl0LWNvbmZpZyc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24sXG4gIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uUHJvcHMsXG4gIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uUmVzb3VyY2VzUHJvcHMsXG59IGZyb20gJy4vcnVubmluZy1zY2hlZHVsZXItZmFpbHVyZS1kZXRlY3Rpb24nO1xuZXhwb3J0IHtcbiAgY3JlYXRlTGFtYmRhRmFpbHVyZURldGVjdG9yLFxuICBpc0xhbWJkYUZhaWx1cmVEZXRlY3Rpb25FbmFibGVkLFxuICBMYW1iZGFGYWlsdXJlRGV0ZWN0b3IsXG4gIHR5cGUgQ3JlYXRlTGFtYmRhRmFpbHVyZURldGVjdG9yUHJvcHMsXG4gIHR5cGUgTGFtYmRhRmFpbHVyZURldGVjdGlvbixcbiAgdHlwZSBMYW1iZGFGYWlsdXJlRGV0ZWN0b3JQcm9wcyxcbiAgdHlwZSBMb2dGYWlsdXJlQWxhcm0sXG4gIHR5cGUgTG9nRmFpbHVyZUZpbHRlcixcbn0gZnJvbSAnLi9sYW1iZGEtZmFpbHVyZS1kZXRlY3Rvci9sYW1iZGEtZmFpbHVyZS1kZXRlY3Rvcic7XG5cbi8qKlxuICogQ3Jvbi1zdHlsZSBzY2hlZHVsZSBjb25maWd1cmF0aW9uIGZvciBzdGFydC9zdG9wIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGUge1xuICAvKiogVGltZSB6b25lIGZvciB0aGUgc2NoZWR1bGUgKGUuZy4gRVRDX1VUQykuICovXG4gIHJlYWRvbmx5IHRpbWV6b25lOiBUaW1lWm9uZTtcbiAgLyoqIENyb24gbWludXRlICgw4oCTNTkpLiAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGhvdXIgKDDigJMyMykuICovXG4gIHJlYWRvbmx5IGhvdXI/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGRheSBvZiB3ZWVrIChlLmcuIE1PTi1GUkkpLiAqL1xuICByZWFkb25seSB3ZWVrPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hpY2ggRUMyIGluc3RhbmNlcyBhcmUgdGFyZ2V0ZWQgYnkgdGFnIGtleSBhbmQgdmFsdWVzLlxuICpcbiAqIEluc3RhbmNlcyBtdXN0IGFscmVhZHkgaGF2ZSB0aGlzIHRhZy4gSUFNIGFsbG93cyBgZWMyOlN0YXJ0SW5zdGFuY2VzYCAvXG4gKiBgZWMyOlN0b3BJbnN0YW5jZXNgIG9ubHkgb24gaW5zdGFuY2VzIGluIHRoZSBzdGFjayBhY2NvdW50IGFuZCByZWdpb24gd2hvc2VcbiAqIGBhd3M6UmVzb3VyY2VUYWcvPHRhZ0tleT5gIG1hdGNoZXMgb25lIG9mIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdWYWx1ZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdXNlZCB0byBzZWxlY3QgaW5zdGFuY2VzIChlLmcuIFNjaGVkdWxlKS4gKi9cbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBUYWcgdmFsdWVzIHRoYXQgbWF0Y2ggaW5zdGFuY2VzIHRvIGluY2x1ZGUuICovXG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VjcmV0IGlkZW50aWZpZXJzIHJlcXVpcmVkIGJ5IHRoZSBzY2hlZHVsZXIgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDREstc2lkZSBsaW1pdHMgZm9yIHBlci1pbnN0YW5jZSBzdGFibGUtc3RhdGUgd2FpdGluZyBpbiB0aGUgRHVyYWJsZSBMYW1iZGEgaGFuZGxlci5cbiAqXG4gKiBPcHRpb25hbCBmaWVsZHMgbWFwIHRvIHtAbGluayBQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVn0gYW5kXG4gKiB7QGxpbmsgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVn0gb24gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICogUHJldmVudHMgYWJub3JtYWwgb3Igc3R1Y2sgdHJhbnNpdGlvbnMgZnJvbSBydW5uaW5nIHVudGlsIHRoZSBEdXJhYmxlIGV4ZWN1dGlvbiB0aW1lb3V0LlxuICpcbiAqIEBzZWUge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMudHNgIGZvciB0aGUgaGFuZGxlci1zaWRlIHJlcXVpcmVkIHNoYXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlV2FpdExpbWl0cyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGRlc2NyaWJlL3dhaXQgbG9vcCBpdGVyYXRpb25zIHBlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50fSAoOTApXG4gICAqL1xuICByZWFkb25seSBtYXhMb29wQ291bnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIHdhbGwtY2xvY2sgc2Vjb25kcyBzcGVudCB3YWl0aW5nIGZvciBhIHNpbmdsZSBpbnN0YW5jZSB0byBzdGFiaWxpemUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heEVsYXBzZWRTZWNvbmRzfSAoMTgwMCwgMzAgbWludXRlcylcbiAgICovXG4gIHJlYWRvbmx5IG1heEVsYXBzZWRTZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgICogU2Vjb25kcyB0byB3YWl0IGJldHdlZW4gZGVzY3JpYmUgaXRlcmF0aW9ucyBhZnRlciBzdGFydC9zdG9wIG9yIHdoaWxlIHRyYW5zaXRpb25pbmcuXG4gICAqXG4gICAqIExvd2VyIHZhbHVlcyBkZXRlY3Qgc3RhdGUgY2hhbmdlcyBzb29uZXI7IGhpZ2hlciB2YWx1ZXMgcmVkdWNlIERlc2NyaWJlSW5zdGFuY2VzIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kc30gKDIwKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGFtYmRhIGludm9rZSBzZXR0aW5ncyBhbmQgYm91bmRlZCBwYXJhbGxlbGlzbSBmb3IgdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICpcbiAqIEluY3JlYXNlIHtAbGluayBtZW1vcnlTaXplfSBhbmQge0BsaW5rIG1heENvbmN1cnJlbmN5fSB3aGVuIGEgc2luZ2xlIGludm9jYXRpb24gdGFyZ2V0c1xuICogbWFueSBpbnN0YW5jZXMgb3IgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIE1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYSwgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDUxMlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEludm9rZSB0aW1lb3V0IGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uIChub3QgdGhlIGR1cmFibGUgZXhlY3V0aW9uIHRpbWVvdXQpLlxuICAgKlxuICAgKiBBV1MgTGFtYmRhJ3MgbWF4aW11bSBpbnZva2UgdGltZW91dCBpcyAxNSBtaW51dGVzLiBEdXJhYmxlIHdhaXRzIGNhbiBjb250aW51ZVxuICAgKiBiZXlvbmQgdGhpcyB2aWEge0BsaW5rIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMuZXhlY3V0aW9uVGltZW91dH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoMTUpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSBkdXJhYmxlIGBtYXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbmN1cnJlbmN5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIER1cmFibGUgRXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIGZvciB0aGUgcnVubmluZyBzY2hlZHVsZXIgTGFtYmRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMge1xuICAvKipcbiAgICogTWF4aW11bSBkdXJhdGlvbiBvZiBhIGR1cmFibGUgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBJbmNyZWFzZSB3aGVuIG1hbnkgaW5zdGFuY2VzIGFyZSBwcm9jZXNzZWQgd2l0aCBsb25nIHBlci1pbnN0YW5jZSB3YWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uaG91cnMoMilcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHJldGFpbiBkdXJhYmxlIGV4ZWN1dGlvbiBoaXN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5kYXlzKDEpXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb25QZXJpb2Q/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDbG91ZFdhdGNoIExvZ3Mgc2V0dGluZ3MgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbiBsb2cgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmluZ1NjaGVkdWxlckxvZ0dyb3VwUHJvcHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gcmV0YWluIGFwcGxpY2F0aW9uIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIGxvZyBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldGluZyBmb3IgRUMyIGluc3RhbmNlcyB0byBzdGFydC9zdG9wLiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKlxuICAgKiBQZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VXYWl0PzogUmVzb3VyY2VXYWl0TGltaXRzO1xuICAvKipcbiAgICogTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsIGFuZCBwZXItaW52b2NhdGlvbiBpbnN0YW5jZSBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgNTEyIE1CLCAxNSBtaW51dGVzLCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzO1xuICAvKipcbiAgICogRHVyYWJsZSBFeGVjdXRpb24gdGltZW91dCBhbmQgaGlzdG9yeSByZXRlbnRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGV4ZWN1dGlvblRpbWVvdXQgMiBob3VycywgcmV0ZW50aW9uUGVyaW9kIDEgZGF5XG4gICAqL1xuICByZWFkb25seSBkdXJhYmxlPzogUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wcztcbiAgLyoqXG4gICAqIENsb3VkV2F0Y2ggTG9ncyByZXRlbnRpb24gYW5kIHJlbW92YWwgcG9saWN5IGZvciB0aGUgZnVuY3Rpb24gbG9nIGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUywgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IFJ1bm5pbmdTY2hlZHVsZXJMb2dHcm91cFByb3BzO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ2xvdWRXYXRjaCBhbGFybXMgYW5kIGxvZy1iYXNlZCBtZXRyaWNzIGZvciBmYWlsdXJlIGRldGVjdGlvbi5cbiAgICpcbiAgICogU2V0IGBlbmFibGVkOiB0cnVlYCB0byBjcmVhdGUgYWxhcm1zOyBvcHRpb25hbGx5IHBhc3MgYGFsYXJtVG9waWNgIGZvciBTTlMgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzYWJsZWQgd2hlbiBvbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlRGV0ZWN0aW9uPzogUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb25Qcm9wcztcbn1cblxuY29uc3QgREVGQVVMVF9MQU1CREFfTUVNT1JZX1NJWkUgPSA1MTI7XG5jb25zdCBERUZBVUxUX0xBTUJEQV9USU1FT1VUID0gRHVyYXRpb24ubWludXRlcygxNSk7XG5jb25zdCBERUZBVUxUX0RVUkFCTEVfRVhFQ1VUSU9OX1RJTUVPVVQgPSBEdXJhdGlvbi5ob3VycygyKTtcbmNvbnN0IERFRkFVTFRfRFVSQUJMRV9SRVRFTlRJT05fUEVSSU9EID0gRHVyYXRpb24uZGF5cygxKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB2YWx1ZWAgd2hlbiBzZXQsIG90aGVyd2lzZSBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFByb3BlcnR5IHBhdGggdXNlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIE9wdGlvbmFsIHBvc2l0aXZlIGludGVnZXIgZnJvbSBjb25zdHJ1Y3QgcHJvcHMuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gRmFsbGJhY2sgd2hlbiBgdmFsdWVgIGlzIG9taXR0ZWQuXG4gKiBAcmV0dXJucyBBIHBvc2l0aXZlIGludGVnZXIuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdmFsdWVgIGlzIHNldCBhbmQgaXMgbm90IGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuY29uc3QgcmVzb2x2ZVBvc2l0aXZlSW50ZWdlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290ICR7U3RyaW5nKHZhbHVlKX0pYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBFbnN1cmVzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0gY2FuIGJlIHVzZWQgaW4gSUFNIGBhd3M6UmVzb3VyY2VUYWdgIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHRhcmdldFJlc291cmNlIC0gVGFnIGtleSBhbmQgdmFsdWVzIHVzZWQgdG8gc2VsZWN0IEVDMiBpbnN0YW5jZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdGFnS2V5YCBpcyBlbXB0eSBvciBgdGFnVmFsdWVzYCBpcyBlbXB0eS5cbiAqL1xuY29uc3QgYXNzZXJ0VGFyZ2V0UmVzb3VyY2VGb3JJYW0gPSAodGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlKTogdm9pZCA9PiB7XG4gIGlmICh0YXJnZXRSZXNvdXJjZS50YWdLZXkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0YXJnZXRSZXNvdXJjZS50YWdLZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuICBpZiAodGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFsdWUnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJQU0gc3RhdGVtZW50IHRoYXQgYWxsb3dzIHN0YXJ0L3N0b3Agb25seSBvbiBFQzIgaW5zdGFuY2VzIGluIHRoaXMgYWNjb3VudCBhbmQgcmVnaW9uXG4gKiB3aG9zZSB0YWdzIG1hdGNoIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uXG4gKlxuICogYHRhZzpHZXRSZXNvdXJjZXNgIGFuZCBgZWMyOkRlc2NyaWJlSW5zdGFuY2VzYCBjYW5ub3QgdXNlIHJlc291cmNlLWxldmVsIEFSTnMgb3JcbiAqIHJlc291cmNlLXRhZyBjb25kaXRpb25zIChBV1MgQVBJIGxpbWl0YXRpb24pLiBTdGFydC9zdG9wIGFyZSBzY29wZWQgaW5zdGVhZCBzbyBhXG4gKiBjb21wcm9taXNlZCBmdW5jdGlvbiBjYW5ub3Qgc3RhcnQgb3Igc3RvcCB1bnRhZ2dlZCBpbnN0YW5jZXMuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gQ29uc3RydWN0IHVzZWQgdG8gcmVzb2x2ZSB0aGUgc3RhY2sgQVJOIHBhcnRpdGlvbiwgcmVnaW9uLCBhbmQgYWNjb3VudC5cbiAqIEBwYXJhbSB0YXJnZXRSZXNvdXJjZSAtIFRhZyBrZXkgYW5kIHZhbHVlcyByZXF1aXJlZCBvbiB0YXJnZXQgaW5zdGFuY2VzLlxuICogQHJldHVybnMgUG9saWN5IHN0YXRlbWVudCBmb3IgYGVjMjpTdGFydEluc3RhbmNlc2AgYW5kIGBlYzI6U3RvcEluc3RhbmNlc2AuXG4gKi9cbmNvbnN0IHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50ID0gKFxuICBzY29wZTogQ29uc3RydWN0LFxuICB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2UsXG4pOiBpYW0uUG9saWN5U3RhdGVtZW50ID0+IHtcbiAgY29uc3QgaW5zdGFuY2VBcm4gPSBTdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICBzZXJ2aWNlOiAnZWMyJyxcbiAgICByZXNvdXJjZTogJ2luc3RhbmNlJyxcbiAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICB9KTtcblxuICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgIHNpZDogJ0VjMlN0YXJ0U3RvcFRhZ2dlZEluc3RhbmNlcycsXG4gICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgIGFjdGlvbnM6IFtcbiAgICAgICdlYzI6U3RhcnRJbnN0YW5jZXMnLFxuICAgICAgJ2VjMjpTdG9wSW5zdGFuY2VzJyxcbiAgICBdLFxuICAgIHJlc291cmNlczogW2luc3RhbmNlQXJuXSxcbiAgICBjb25kaXRpb25zOiB7XG4gICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgW2Bhd3M6UmVzb3VyY2VUYWcvJHt0YXJnZXRSZXNvdXJjZS50YWdLZXl9YF06IHRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFByb3Zpc2lvbnMgRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHJ1bGVzIGFuZCBhIER1cmFibGUgRXhlY3V0aW9uIExhbWJkYSB0aGF0IHN0YXJ0L3N0b3AgdGFnZ2VkIEVDMiBpbnN0YW5jZXMuXG4gKlxuICogRWFjaCBzY2hlZHVsZSBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoIGBQYXJhbXNgIChgVGFnS2V5YCwgYFRhZ1ZhbHVlc2AsIGBNb2RlYCkuIFRoZSBmdW5jdGlvbiB1c2VzXG4gKiB0aGUgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGFuZCBFQzIgQVBJczsgU2xhY2sgbm90aWZpY2F0aW9ucyB1c2UgdGhlIHNlY3JldCBuYW1lZCBpbiB7QGxpbmsgU2VjcmV0cy5zbGFja1NlY3JldE5hbWV9LlxuICpcbiAqIFBlci1pbnN0YW5jZSB3YWl0IHRpbWVvdXRzIGFyZSBjb25maWd1cmVkIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMucmVzb3VyY2VXYWl0fVxuICogYW5kIGVuZm9yY2VkIGluIHRoZSBoYW5kbGVyIGJlZm9yZSB0aGUgRHVyYWJsZSBleGVjdXRpb24gdGltZW91dC4gTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsXG4gKiBhbmQgbWFwIGNvbmN1cnJlbmN5IGFyZSBzZXQgdmlhIHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcy5ydW50aW1lfTsgRHVyYWJsZVxuICogZXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZHVyYWJsZX07XG4gKiBsb2cgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMubG9nR3JvdXB9LiBTdGFydC9zdG9wIElBTSBpcyBsaW1pdGVkXG4gKiB0byBpbnN0YW5jZXMgdGFnZ2VkIGFzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uIE9wdGlvbmFsIENsb3VkV2F0Y2ggZmFpbHVyZVxuICogZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLmZhaWx1cmVEZXRlY3Rpb259LlxuICovXG5leHBvcnQgY2xhc3MgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIEZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgd2hlbiB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZmFpbHVyZURldGVjdGlvbn0gaXMgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVEZXRlY3Rpb24/OiBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbjtcblxuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIG9wdGlvbmFsIGZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgdHdvIGNyb24gc2NoZWR1bGVzIChzdGFydC9zdG9wKSxcbiAgICogYW5kIHRoZSBidW5kbGVkIHJ1bm5pbmctc2NoZWR1bGVyIExhbWJkYSAoTm9kZS5qcywgRHVyYWJsZSBFeGVjdXRpb24pLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRhcmdldCB0YWdzLCBzY2hlZHVsZXMsIFNsYWNrIHNlY3JldCwgc2NoZWR1bGUgZW5hYmxlIGZsYWcsIG9wdGlvbmFsXG4gICAqICAge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzfSxcbiAgICogICB7QGxpbmsgUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wc30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyTG9nR3JvdXBQcm9wc30sXG4gICAqICAgYW5kIG9wdGlvbmFsIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvblByb3BzfS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBhc3NlcnRUYXJnZXRSZXNvdXJjZUZvcklhbShwcm9wcy50YXJnZXRSZXNvdXJjZSk7XG5cbiAgICBjb25zdCBzbGFja1NlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHRoaXMsICdTbGFja1NlY3JldCcsIHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lKTtcblxuICAgIGNvbnN0IG1heExvb3BDb3VudCA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncmVzb3VyY2VXYWl0Lm1heExvb3BDb3VudCcsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heExvb3BDb3VudCxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50LFxuICAgICk7XG4gICAgY29uc3QgbWF4RWxhcHNlZFNlY29uZHMgPSByZXNvbHZlUG9zaXRpdmVJbnRlZ2VyKFxuICAgICAgJ3Jlc291cmNlV2FpdC5tYXhFbGFwc2VkU2Vjb25kcycsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heEVsYXBzZWRTZWNvbmRzLFxuICAgICAgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5tYXhFbGFwc2VkU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzID0gcmVzb2x2ZVBvc2l0aXZlSW50ZWdlcihcbiAgICAgICdyZXNvdXJjZVdhaXQuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMnLFxuICAgICAgcHJvcHMucmVzb3VyY2VXYWl0Py5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kcyxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMsXG4gICAgKTtcbiAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tYXhDb25jdXJyZW5jeScsXG4gICAgICBwcm9wcy5ydW50aW1lPy5tYXhDb25jdXJyZW5jeSxcbiAgICAgIERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZLFxuICAgICk7XG4gICAgY29uc3QgbWVtb3J5U2l6ZSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tZW1vcnlTaXplJyxcbiAgICAgIHByb3BzLnJ1bnRpbWU/Lm1lbW9yeVNpemUsXG4gICAgICBERUZBVUxUX0xBTUJEQV9NRU1PUllfU0laRSxcbiAgICApO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnMtYmFzZWQgUnVubmluZyBTY2hlZHVsZXIgKHByZXZpb3VzIFN0ZXAgRnVuY3Rpb25zIGxvZ2ljIGltcGxlbWVudGVkIGluIExhbWJkYSkuXG4gICAgLy8gRHVyYWJsZSBFeGVjdXRpb24gcmVxdWlyZXMgTm9kZS5qcyAyMisuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nR3JvdXA/LnJldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMubG9nR3JvdXA/LnJlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24gPSBuZXcgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyBhbmQgc3RvcHMgdGFnZ2VkIEVDMiBpbnN0YW5jZXMgb24gRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHNjaGVkdWxlcy4nLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnJ1bnRpbWU/LnRpbWVvdXQgPz8gREVGQVVMVF9MQU1CREFfVElNRU9VVCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBwcm9wcy5kdXJhYmxlPy5leGVjdXRpb25UaW1lb3V0ID8/IERFRkFVTFRfRFVSQUJMRV9FWEVDVVRJT05fVElNRU9VVCxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBwcm9wcy5kdXJhYmxlPy5yZXRlbnRpb25QZXJpb2QgPz8gREVGQVVMVF9EVVJBQkxFX1JFVEVOVElPTl9QRVJJT0QsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU0xBQ0tfU0VDUkVUX05BTUU6IHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZdOiBTdHJpbmcobWF4TG9vcENvdW50KSxcbiAgICAgICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdOiBTdHJpbmcobWF4RWxhcHNlZFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlZdOiBTdHJpbmcoc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZX0VOVl06IFN0cmluZyhtYXhDb25jdXJyZW5jeSksXG4gICAgICB9LFxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICAvLyBSZXF1aXJlZCBieSBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIChleHRlbnNpb24gSFRUUCBBUEkgb24gbG9jYWxob3N0OyBwb3J0IGZyb20gUEFSQU1FVEVSU19TRUNSRVRTX0VYVEVOU0lPTl9IVFRQX1BPUlQpLlxuICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgbG9nTGV2ZWw6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuSU5GTyxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Sb2xlJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93cyB0aGUgcnVubmluZyBzY2hlZHVsZXIgdG8gZGVzY3JpYmUgaW5zdGFuY2VzIGFuZCBzdGFydC9zdG9wIHRhZ2dlZCBFQzIgaW5zdGFuY2VzLCBhbmQgdG8gcmVhZCBTbGFjayBzZWNyZXRzLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRSZXNvdXJjZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBdLFxuICAgICAgLy8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMuXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRWMyRGVzY3JpYmVJbnN0YW5jZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgIF0sXG4gICAgICAvLyBEZXNjcmliZSogQVBJcyBkbyBub3Qgc3VwcG9ydCByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9ucyBvciByZXNvdXJjZS10YWcgY29uZGl0aW9ucy5cbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50KHRoaXMsIHByb3BzLnRhcmdldFJlc291cmNlKSxcbiAgICApO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQocnVubmluZ1NjaGVkdWxlRnVuY3Rpb24pO1xuXG4gICAgdGhpcy5mYWlsdXJlRGV0ZWN0aW9uID0gY3JlYXRlUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24odGhpcywgJ0ZhaWx1cmVEZXRlY3Rpb24nLCB7XG4gICAgICBmYWlsdXJlRGV0ZWN0aW9uOiBwcm9wcy5mYWlsdXJlRGV0ZWN0aW9uLFxuICAgICAgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24sXG4gICAgICBsb2dHcm91cDogcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCxcbiAgICB9KTtcblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzID0gcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIC8vIFdoZXRoZXIgc2NoZWR1bGVzIGFyZSBlbmFibGVkIChkZWZhdWx0IHRydWUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQpLlxuICAgIGNvbnN0IHNjaGVkdWxlRW5hYmxlZDogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuZW5hYmxlU2NoZWR1bGluZyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVNjaGVkdWxpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIC8vIER1cmFibGUgRnVuY3Rpb25zOiBMYW1iZGEgcGVyZm9ybXMgdGFnIGxvb2t1cCBhbmQgaW5zdGFuY2Ugc3RhcnQvc3RvcCBpbiBhIHNpbmdsZSBydW4uXG4gICAgbmV3IHNjaGVkdWxlci5TY2hlZHVsZSh0aGlzLCAnUnVubmluZ1N0YXJ0U2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RhcnQgc2NoZWR1bGUnLFxuICAgICAgZW5hYmxlZDogc2NoZWR1bGVFbmFibGVkLFxuICAgICAgc2NoZWR1bGU6IHNjaGVkdWxlci5TY2hlZHVsZUV4cHJlc3Npb24uY3Jvbih7XG4gICAgICAgIG1pbnV0ZTogcHJvcHMuc3RhcnRTY2hlZHVsZT8ubWludXRlID8/ICc1MCcsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LmhvdXIgPz8gJzcnLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdGFydFNjaGVkdWxlPy53ZWVrID8/ICdNT04tRlJJJyxcbiAgICAgICAgdGltZVpvbmU6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LnRpbWV6b25lID8/IFRpbWVab25lLkVUQ19VVEMsXG4gICAgICB9KSxcbiAgICAgIHRhcmdldDogbmV3IHRhcmdldHMuTGFtYmRhSW52b2tlKHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgaW5wdXQ6IHNjaGVkdWxlci5TY2hlZHVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIE1vZGU6ICdTdGFydCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIG5ldyBzY2hlZHVsZXIuU2NoZWR1bGUodGhpcywgJ1J1bm5pbmdTdG9wU2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RvcCBzY2hlZHVsZScsXG4gICAgICBlbmFibGVkOiBzY2hlZHVsZUVuYWJsZWQsXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVyLlNjaGVkdWxlRXhwcmVzc2lvbi5jcm9uKHtcbiAgICAgICAgbWludXRlOiBwcm9wcy5zdG9wU2NoZWR1bGU/Lm1pbnV0ZSA/PyAnNScsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0b3BTY2hlZHVsZT8uaG91ciA/PyAnMTknLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdG9wU2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknLFxuICAgICAgICB0aW1lWm9uZTogcHJvcHMuc3RvcFNjaGVkdWxlPy50aW1lem9uZSA/PyBUaW1lWm9uZS5FVENfVVRDLFxuICAgICAgfSksXG4gICAgICB0YXJnZXQ6IG5ldyB0YXJnZXRzLkxhbWJkYUludm9rZShydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgIGlucHV0OiBzY2hlZHVsZXIuU2NoZWR1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICBQYXJhbXM6IHtcbiAgICAgICAgICAgIFRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgVGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICAgICAgICBNb2RlOiAnU3RvcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ import * as sns from 'aws-cdk-lib/aws-sns';
2
+ /**
3
+ * Opt-in options for {@link LambdaFailureDetector}.
4
+ *
5
+ * When {@link LambdaFailureDetection.enabled} is true, alarms are created.
6
+ * {@link LambdaFailureDetection.alarmTopic} is optional; when omitted, alarms have no SNS actions.
7
+ * The construct never creates an SNS topic.
8
+ */
9
+ export interface LambdaFailureDetection {
10
+ /**
11
+ * When true, creates failure detection alarms and log-based metrics.
12
+ *
13
+ * @default false when omitted
14
+ */
15
+ readonly enabled?: boolean;
16
+ /**
17
+ * SNS topic for alarm notifications.
18
+ *
19
+ * When omitted, alarms are created without SNS actions.
20
+ */
21
+ readonly alarmTopic?: sns.ITopic;
22
+ }
23
+ /**
24
+ * Whether {@link LambdaFailureDetection} requests alarm creation.
25
+ */
26
+ export declare const isLambdaFailureDetectionEnabled: (failureDetection: LambdaFailureDetection) => boolean;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isLambdaFailureDetectionEnabled = void 0;
4
+ /**
5
+ * Whether {@link LambdaFailureDetection} requests alarm creation.
6
+ */
7
+ const isLambdaFailureDetectionEnabled = (failureDetection) => failureDetection.enabled === true;
8
+ exports.isLambdaFailureDetectionEnabled = isLambdaFailureDetectionEnabled;
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZhaWx1cmUtZGV0ZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnN0cnVjdHMvbGFtYmRhLWZhaWx1cmUtZGV0ZWN0b3IvbGFtYmRhLWZhaWx1cmUtZGV0ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQTs7R0FFRztBQUNJLE1BQU0sK0JBQStCLEdBQUcsQ0FDN0MsZ0JBQXdDLEVBQy9CLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBRm5DLFFBQUEsK0JBQStCLG1DQUVJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuXG4vKipcbiAqIE9wdC1pbiBvcHRpb25zIGZvciB7QGxpbmsgTGFtYmRhRmFpbHVyZURldGVjdG9yfS5cbiAqXG4gKiBXaGVuIHtAbGluayBMYW1iZGFGYWlsdXJlRGV0ZWN0aW9uLmVuYWJsZWR9IGlzIHRydWUsIGFsYXJtcyBhcmUgY3JlYXRlZC5cbiAqIHtAbGluayBMYW1iZGFGYWlsdXJlRGV0ZWN0aW9uLmFsYXJtVG9waWN9IGlzIG9wdGlvbmFsOyB3aGVuIG9taXR0ZWQsIGFsYXJtcyBoYXZlIG5vIFNOUyBhY3Rpb25zLlxuICogVGhlIGNvbnN0cnVjdCBuZXZlciBjcmVhdGVzIGFuIFNOUyB0b3BpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGYWlsdXJlRGV0ZWN0aW9uIHtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgY3JlYXRlcyBmYWlsdXJlIGRldGVjdGlvbiBhbGFybXMgYW5kIGxvZy1iYXNlZCBtZXRyaWNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSB3aGVuIG9taXR0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogU05TIHRvcGljIGZvciBhbGFybSBub3RpZmljYXRpb25zLlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGFsYXJtcyBhcmUgY3JlYXRlZCB3aXRob3V0IFNOUyBhY3Rpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxhcm1Ub3BpYz86IHNucy5JVG9waWM7XG59XG5cbi8qKlxuICogV2hldGhlciB7QGxpbmsgTGFtYmRhRmFpbHVyZURldGVjdGlvbn0gcmVxdWVzdHMgYWxhcm0gY3JlYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBpc0xhbWJkYUZhaWx1cmVEZXRlY3Rpb25FbmFibGVkID0gKFxuICBmYWlsdXJlRGV0ZWN0aW9uOiBMYW1iZGFGYWlsdXJlRGV0ZWN0aW9uLFxuKTogYm9vbGVhbiA9PiBmYWlsdXJlRGV0ZWN0aW9uLmVuYWJsZWQgPT09IHRydWU7XG4iXX0=
@@ -0,0 +1,99 @@
1
+ import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
2
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
3
+ import * as logs from 'aws-cdk-lib/aws-logs';
4
+ import * as sns from 'aws-cdk-lib/aws-sns';
5
+ import { Construct } from 'constructs';
6
+ import { type LambdaFailureDetection } from './lambda-failure-detection';
7
+ import type { LogFailureFilter } from './log-failure-filter';
8
+ /**
9
+ * Alarm created for one {@link LogFailureFilter}.
10
+ */
11
+ export interface LogFailureAlarm {
12
+ /** Same as {@link LogFailureFilter.id}. */
13
+ readonly id: string;
14
+ /** Alarm on the log metric filter sum. */
15
+ readonly alarm: cloudwatch.Alarm;
16
+ }
17
+ /**
18
+ * Props for {@link LambdaFailureDetector}.
19
+ */
20
+ export interface LambdaFailureDetectorProps {
21
+ /** Lambda function whose platform `Errors` metric is alarmed. */
22
+ readonly lambdaFunction: lambda.IFunction;
23
+ /** Log group used for {@link LogFailureFilter} metric filters. */
24
+ readonly logGroup: logs.ILogGroup;
25
+ /**
26
+ * Optional SNS topic for all alarm actions.
27
+ *
28
+ * When omitted, alarms are created without SNS actions.
29
+ */
30
+ readonly alarmTopic?: sns.ITopic;
31
+ /**
32
+ * Log-based failure filters. Each entry creates a metric filter and alarm.
33
+ *
34
+ * @default no log-based alarms
35
+ */
36
+ readonly logFilters?: LogFailureFilter[];
37
+ }
38
+ /**
39
+ * Props accepted by {@link createLambdaFailureDetector}.
40
+ */
41
+ export interface CreateLambdaFailureDetectorProps {
42
+ /** Opt-in options; alarms are created only when {@link LambdaFailureDetection.enabled} is true. */
43
+ readonly failureDetection?: LambdaFailureDetection;
44
+ /** Lambda function to monitor. */
45
+ readonly lambdaFunction: lambda.IFunction;
46
+ /** Application log group for log-based filters. */
47
+ readonly logGroup: logs.ILogGroup;
48
+ /**
49
+ * Log-based failure filters.
50
+ *
51
+ * @default no log-based alarms
52
+ */
53
+ readonly logFilters?: LogFailureFilter[];
54
+ }
55
+ /**
56
+ * CloudWatch failure detection for a Lambda function.
57
+ *
58
+ * Always creates a platform `AWS/Lambda` `Errors` alarm. Optionally creates one
59
+ * metric filter + alarm per {@link LogFailureFilter}. Does not create an SNS topic;
60
+ * pass {@link LambdaFailureDetectorProps.alarmTopic} to attach notifications.
61
+ *
62
+ * Entry module for `lambda-failure-detector/`: import types and helpers from this file only.
63
+ */
64
+ export declare class LambdaFailureDetector extends Construct {
65
+ /** SNS topic used for alarm actions, when configured. */
66
+ readonly alarmTopic?: sns.ITopic;
67
+ /** Fires when the Lambda `Errors` metric is non-zero. */
68
+ readonly lambdaErrorsAlarm: cloudwatch.Alarm;
69
+ /**
70
+ * Alarms for each log filter, in the same order as
71
+ * {@link LambdaFailureDetectorProps.logFilters}.
72
+ */
73
+ readonly logFilterAlarms: LogFailureAlarm[];
74
+ /**
75
+ * @param scope - Parent construct.
76
+ * @param id - Construct id.
77
+ * @param props - Lambda, log group, optional topic, and log filters.
78
+ */
79
+ constructor(scope: Construct, id: string, props: LambdaFailureDetectorProps);
80
+ /**
81
+ * Returns the log-filter alarm for the given filter id, or undefined when missing.
82
+ *
83
+ * @param id - Same as {@link LogFailureFilter.id}.
84
+ * @returns Matching alarm, or undefined when the id was not in `logFilters`.
85
+ */
86
+ findLogFilterAlarm(id: string): cloudwatch.Alarm | undefined;
87
+ }
88
+ /**
89
+ * Creates a {@link LambdaFailureDetector} when failure detection is enabled.
90
+ *
91
+ * @param scope - Parent construct.
92
+ * @param id - Construct id.
93
+ * @param props - Lambda, log group, optional opt-in options, and log filters.
94
+ * @returns Detector construct, or undefined when disabled.
95
+ */
96
+ export declare const createLambdaFailureDetector: (scope: Construct, id: string, props: CreateLambdaFailureDetectorProps) => LambdaFailureDetector | undefined;
97
+ export type { LambdaFailureDetection } from './lambda-failure-detection';
98
+ export { isLambdaFailureDetectionEnabled } from './lambda-failure-detection';
99
+ export type { LogFailureFilter } from './log-failure-filter';
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.isLambdaFailureDetectionEnabled = exports.createLambdaFailureDetector = exports.LambdaFailureDetector = void 0;
37
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
38
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
39
+ const cloudwatch = __importStar(require("aws-cdk-lib/aws-cloudwatch"));
40
+ const cloudwatch_actions = __importStar(require("aws-cdk-lib/aws-cloudwatch-actions"));
41
+ const logs = __importStar(require("aws-cdk-lib/aws-logs"));
42
+ const constructs_1 = require("constructs");
43
+ const lambda_failure_detection_1 = require("./lambda-failure-detection");
44
+ /** Alarm threshold for failure sum metrics. */
45
+ const FAILURE_ALARM_THRESHOLD = 1;
46
+ /** Evaluation periods for failure alarms. */
47
+ const FAILURE_ALARM_EVALUATION_PERIODS = 1;
48
+ /** Metric period for failure alarms. */
49
+ const FAILURE_ALARM_PERIOD = aws_cdk_lib_1.Duration.minutes(5);
50
+ /** Statistic used for failure sum metrics. */
51
+ const FAILURE_ALARM_STATISTIC = 'Sum';
52
+ /** Metric filter value emitted per matching log event. */
53
+ const LOG_METRIC_VALUE = '1';
54
+ /** Default value when no matching log events occur in the period. */
55
+ const LOG_METRIC_DEFAULT_VALUE = 0;
56
+ /**
57
+ * Registers an SNS alarm action when a topic is configured.
58
+ */
59
+ const attachAlarmActions = (alarm, alarmTopic) => {
60
+ if (!alarmTopic) {
61
+ return;
62
+ }
63
+ alarm.addAlarmAction(new cloudwatch_actions.SnsAction(alarmTopic));
64
+ };
65
+ /**
66
+ * Creates a CloudWatch alarm that fires when a sum metric is at or above the failure threshold.
67
+ *
68
+ * Uses `treatMissingData: notBreaching` so scheduled invocations do not alarm between runs.
69
+ */
70
+ const createSumAlarm = (scope, id, props) => {
71
+ // CreateAlarmOptionsBase typings in this aws-cdk-lib build omit evaluationPeriods;
72
+ // the Alarm construct still accepts the property at synth time.
73
+ const alarm = new cloudwatch.Alarm(scope, id, {
74
+ metric: props.metric,
75
+ threshold: FAILURE_ALARM_THRESHOLD,
76
+ comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
77
+ evaluationPeriods: FAILURE_ALARM_EVALUATION_PERIODS,
78
+ treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING,
79
+ });
80
+ attachAlarmActions(alarm, props.alarmTopic);
81
+ return alarm;
82
+ };
83
+ /**
84
+ * CloudWatch failure detection for a Lambda function.
85
+ *
86
+ * Always creates a platform `AWS/Lambda` `Errors` alarm. Optionally creates one
87
+ * metric filter + alarm per {@link LogFailureFilter}. Does not create an SNS topic;
88
+ * pass {@link LambdaFailureDetectorProps.alarmTopic} to attach notifications.
89
+ *
90
+ * Entry module for `lambda-failure-detector/`: import types and helpers from this file only.
91
+ */
92
+ class LambdaFailureDetector extends constructs_1.Construct {
93
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.LambdaFailureDetector", version: "0.5.0" };
94
+ /** SNS topic used for alarm actions, when configured. */
95
+ alarmTopic;
96
+ /** Fires when the Lambda `Errors` metric is non-zero. */
97
+ lambdaErrorsAlarm;
98
+ /**
99
+ * Alarms for each log filter, in the same order as
100
+ * {@link LambdaFailureDetectorProps.logFilters}.
101
+ */
102
+ logFilterAlarms;
103
+ /**
104
+ * @param scope - Parent construct.
105
+ * @param id - Construct id.
106
+ * @param props - Lambda, log group, optional topic, and log filters.
107
+ */
108
+ constructor(scope, id, props) {
109
+ super(scope, id);
110
+ const alarmTopic = props.alarmTopic;
111
+ this.alarmTopic = alarmTopic;
112
+ this.lambdaErrorsAlarm = createSumAlarm(this, 'LambdaErrorsAlarm', {
113
+ metric: props.lambdaFunction.metricErrors({
114
+ period: FAILURE_ALARM_PERIOD,
115
+ statistic: FAILURE_ALARM_STATISTIC,
116
+ }),
117
+ alarmTopic,
118
+ });
119
+ const logFilters = props.logFilters ?? [];
120
+ this.logFilterAlarms = logFilters.map((filter) => {
121
+ const metricFilter = new logs.MetricFilter(this, `${filter.id}Metric`, {
122
+ logGroup: props.logGroup,
123
+ filterPattern: logs.FilterPattern.literal(filter.filterPattern),
124
+ metricNamespace: filter.metricNamespace,
125
+ metricName: filter.metricName,
126
+ metricValue: LOG_METRIC_VALUE,
127
+ defaultValue: LOG_METRIC_DEFAULT_VALUE,
128
+ });
129
+ const alarm = createSumAlarm(this, `${filter.id}Alarm`, {
130
+ metric: metricFilter.metric({
131
+ period: FAILURE_ALARM_PERIOD,
132
+ statistic: FAILURE_ALARM_STATISTIC,
133
+ }),
134
+ alarmTopic,
135
+ });
136
+ return { id: filter.id, alarm };
137
+ });
138
+ }
139
+ /**
140
+ * Returns the log-filter alarm for the given filter id, or undefined when missing.
141
+ *
142
+ * @param id - Same as {@link LogFailureFilter.id}.
143
+ * @returns Matching alarm, or undefined when the id was not in `logFilters`.
144
+ */
145
+ findLogFilterAlarm(id) {
146
+ return this.logFilterAlarms.find((entry) => entry.id === id)?.alarm;
147
+ }
148
+ }
149
+ exports.LambdaFailureDetector = LambdaFailureDetector;
150
+ /**
151
+ * Creates a {@link LambdaFailureDetector} when failure detection is enabled.
152
+ *
153
+ * @param scope - Parent construct.
154
+ * @param id - Construct id.
155
+ * @param props - Lambda, log group, optional opt-in options, and log filters.
156
+ * @returns Detector construct, or undefined when disabled.
157
+ */
158
+ const createLambdaFailureDetector = (scope, id, props) => {
159
+ if (!props.failureDetection || !(0, lambda_failure_detection_1.isLambdaFailureDetectionEnabled)(props.failureDetection)) {
160
+ return undefined;
161
+ }
162
+ return new LambdaFailureDetector(scope, id, {
163
+ lambdaFunction: props.lambdaFunction,
164
+ logGroup: props.logGroup,
165
+ alarmTopic: props.failureDetection.alarmTopic,
166
+ logFilters: props.logFilters,
167
+ });
168
+ };
169
+ exports.createLambdaFailureDetector = createLambdaFailureDetector;
170
+ var lambda_failure_detection_2 = require("./lambda-failure-detection");
171
+ Object.defineProperty(exports, "isLambdaFailureDetectionEnabled", { enumerable: true, get: function () { return lambda_failure_detection_2.isLambdaFailureDetectionEnabled; } });
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZhaWx1cmUtZGV0ZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uc3RydWN0cy9sYW1iZGEtZmFpbHVyZS1kZXRlY3Rvci9sYW1iZGEtZmFpbHVyZS1kZXRlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXVDO0FBQ3ZDLHVFQUF5RDtBQUN6RCx1RkFBeUU7QUFFekUsMkRBQTZDO0FBRTdDLDJDQUF1QztBQUN2Qyx5RUFHb0M7QUFHcEMsK0NBQStDO0FBQy9DLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLDZDQUE2QztBQUM3QyxNQUFNLGdDQUFnQyxHQUFHLENBQUMsQ0FBQztBQUMzQyx3Q0FBd0M7QUFDeEMsTUFBTSxvQkFBb0IsR0FBRyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCw4Q0FBOEM7QUFDOUMsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFDdEMsMERBQTBEO0FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBQzdCLHFFQUFxRTtBQUNyRSxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQW9EbkM7O0dBRUc7QUFDSCxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBdUIsRUFBRSxVQUF1QixFQUFRLEVBQUU7SUFDcEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUNyQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FHQyxFQUNpQixFQUFFO0lBQ3BCLG1GQUFtRjtJQUNuRixnRUFB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SixFQUFFO0lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFBLDBEQUErQixFQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDeEYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzFDLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNwQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO1FBQzdDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtLQUM3QixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFmVyxRQUFBLDJCQUEyQiwrQkFldEM7QUFHRix1RUFBNkU7QUFBcEUsMklBQUEsK0JBQStCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaF9hY3Rpb25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoLWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIGlzTGFtYmRhRmFpbHVyZURldGVjdGlvbkVuYWJsZWQsXG4gIHR5cGUgTGFtYmRhRmFpbHVyZURldGVjdGlvbixcbn0gZnJvbSAnLi9sYW1iZGEtZmFpbHVyZS1kZXRlY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBMb2dGYWlsdXJlRmlsdGVyIH0gZnJvbSAnLi9sb2ctZmFpbHVyZS1maWx0ZXInO1xuXG4vKiogQWxhcm0gdGhyZXNob2xkIGZvciBmYWlsdXJlIHN1bSBtZXRyaWNzLiAqL1xuY29uc3QgRkFJTFVSRV9BTEFSTV9USFJFU0hPTEQgPSAxO1xuLyoqIEV2YWx1YXRpb24gcGVyaW9kcyBmb3IgZmFpbHVyZSBhbGFybXMuICovXG5jb25zdCBGQUlMVVJFX0FMQVJNX0VWQUxVQVRJT05fUEVSSU9EUyA9IDE7XG4vKiogTWV0cmljIHBlcmlvZCBmb3IgZmFpbHVyZSBhbGFybXMuICovXG5jb25zdCBGQUlMVVJFX0FMQVJNX1BFUklPRCA9IER1cmF0aW9uLm1pbnV0ZXMoNSk7XG4vKiogU3RhdGlzdGljIHVzZWQgZm9yIGZhaWx1cmUgc3VtIG1ldHJpY3MuICovXG5jb25zdCBGQUlMVVJFX0FMQVJNX1NUQVRJU1RJQyA9ICdTdW0nO1xuLyoqIE1ldHJpYyBmaWx0ZXIgdmFsdWUgZW1pdHRlZCBwZXIgbWF0Y2hpbmcgbG9nIGV2ZW50LiAqL1xuY29uc3QgTE9HX01FVFJJQ19WQUxVRSA9ICcxJztcbi8qKiBEZWZhdWx0IHZhbHVlIHdoZW4gbm8gbWF0Y2hpbmcgbG9nIGV2ZW50cyBvY2N1ciBpbiB0aGUgcGVyaW9kLiAqL1xuY29uc3QgTE9HX01FVFJJQ19ERUZBVUxUX1ZBTFVFID0gMDtcblxuLyoqXG4gKiBBbGFybSBjcmVhdGVkIGZvciBvbmUge0BsaW5rIExvZ0ZhaWx1cmVGaWx0ZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0ZhaWx1cmVBbGFybSB7XG4gIC8qKiBTYW1lIGFzIHtAbGluayBMb2dGYWlsdXJlRmlsdGVyLmlkfS4gKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIEFsYXJtIG9uIHRoZSBsb2cgbWV0cmljIGZpbHRlciBzdW0uICovXG4gIHJlYWRvbmx5IGFsYXJtOiBjbG91ZHdhdGNoLkFsYXJtO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgTGFtYmRhRmFpbHVyZURldGVjdG9yfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGYWlsdXJlRGV0ZWN0b3JQcm9wcyB7XG4gIC8qKiBMYW1iZGEgZnVuY3Rpb24gd2hvc2UgcGxhdGZvcm0gYEVycm9yc2AgbWV0cmljIGlzIGFsYXJtZWQuICovXG4gIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uOiBsYW1iZGEuSUZ1bmN0aW9uO1xuICAvKiogTG9nIGdyb3VwIHVzZWQgZm9yIHtAbGluayBMb2dGYWlsdXJlRmlsdGVyfSBtZXRyaWMgZmlsdGVycy4gKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwO1xuICAvKipcbiAgICogT3B0aW9uYWwgU05TIHRvcGljIGZvciBhbGwgYWxhcm0gYWN0aW9ucy5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCBhbGFybXMgYXJlIGNyZWF0ZWQgd2l0aG91dCBTTlMgYWN0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGFsYXJtVG9waWM/OiBzbnMuSVRvcGljO1xuICAvKipcbiAgICogTG9nLWJhc2VkIGZhaWx1cmUgZmlsdGVycy4gRWFjaCBlbnRyeSBjcmVhdGVzIGEgbWV0cmljIGZpbHRlciBhbmQgYWxhcm0uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGxvZy1iYXNlZCBhbGFybXNcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0ZpbHRlcnM/OiBMb2dGYWlsdXJlRmlsdGVyW107XG59XG5cbi8qKlxuICogUHJvcHMgYWNjZXB0ZWQgYnkge0BsaW5rIGNyZWF0ZUxhbWJkYUZhaWx1cmVEZXRlY3Rvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTGFtYmRhRmFpbHVyZURldGVjdG9yUHJvcHMge1xuICAvKiogT3B0LWluIG9wdGlvbnM7IGFsYXJtcyBhcmUgY3JlYXRlZCBvbmx5IHdoZW4ge0BsaW5rIExhbWJkYUZhaWx1cmVEZXRlY3Rpb24uZW5hYmxlZH0gaXMgdHJ1ZS4gKi9cbiAgcmVhZG9ubHkgZmFpbHVyZURldGVjdGlvbj86IExhbWJkYUZhaWx1cmVEZXRlY3Rpb247XG4gIC8qKiBMYW1iZGEgZnVuY3Rpb24gdG8gbW9uaXRvci4gKi9cbiAgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKiBBcHBsaWNhdGlvbiBsb2cgZ3JvdXAgZm9yIGxvZy1iYXNlZCBmaWx0ZXJzLiAqL1xuICByZWFkb25seSBsb2dHcm91cDogbG9ncy5JTG9nR3JvdXA7XG4gIC8qKlxuICAgKiBMb2ctYmFzZWQgZmFpbHVyZSBmaWx0ZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBsb2ctYmFzZWQgYWxhcm1zXG4gICAqL1xuICByZWFkb25seSBsb2dGaWx0ZXJzPzogTG9nRmFpbHVyZUZpbHRlcltdO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBTTlMgYWxhcm0gYWN0aW9uIHdoZW4gYSB0b3BpYyBpcyBjb25maWd1cmVkLlxuICovXG5jb25zdCBhdHRhY2hBbGFybUFjdGlvbnMgPSAoYWxhcm06IGNsb3Vkd2F0Y2guQWxhcm0sIGFsYXJtVG9waWM/OiBzbnMuSVRvcGljKTogdm9pZCA9PiB7XG4gIGlmICghYWxhcm1Ub3BpYykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFsYXJtLmFkZEFsYXJtQWN0aW9uKG5ldyBjbG91ZHdhdGNoX2FjdGlvbnMuU25zQWN0aW9uKGFsYXJtVG9waWMpKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIENsb3VkV2F0Y2ggYWxhcm0gdGhhdCBmaXJlcyB3aGVuIGEgc3VtIG1ldHJpYyBpcyBhdCBvciBhYm92ZSB0aGUgZmFpbHVyZSB0aHJlc2hvbGQuXG4gKlxuICogVXNlcyBgdHJlYXRNaXNzaW5nRGF0YTogbm90QnJlYWNoaW5nYCBzbyBzY2hlZHVsZWQgaW52b2NhdGlvbnMgZG8gbm90IGFsYXJtIGJldHdlZW4gcnVucy5cbiAqL1xuY29uc3QgY3JlYXRlU3VtQWxhcm0gPSAoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIHByb3BzOiB7XG4gICAgbWV0cmljOiBjbG91ZHdhdGNoLklNZXRyaWM7XG4gICAgYWxhcm1Ub3BpYz86IHNucy5JVG9waWM7XG4gIH0sXG4pOiBjbG91ZHdhdGNoLkFsYXJtID0+IHtcbiAgLy8gQ3JlYXRlQWxhcm1PcHRpb25zQmFzZSB0eXBpbmdzIGluIHRoaXMgYXdzLWNkay1saWIgYnVpbGQgb21pdCBldmFsdWF0aW9uUGVyaW9kcztcbiAgLy8gdGhlIEFsYXJtIGNvbnN0cnVjdCBzdGlsbCBhY2NlcHRzIHRoZSBwcm9wZXJ0eSBhdCBzeW50aCB0aW1lLlxuICBjb25zdCBhbGFybSA9IG5ldyBjbG91ZHdhdGNoLkFsYXJtKHNjb3BlLCBpZCwge1xuICAgIG1ldHJpYzogcHJvcHMubWV0cmljLFxuICAgIHRocmVzaG9sZDogRkFJTFVSRV9BTEFSTV9USFJFU0hPTEQsXG4gICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgIGV2YWx1YXRpb25QZXJpb2RzOiBGQUlMVVJFX0FMQVJNX0VWQUxVQVRJT05fUEVSSU9EUyxcbiAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgfSBhcyBjbG91ZHdhdGNoLkFsYXJtUHJvcHMpO1xuICBhdHRhY2hBbGFybUFjdGlvbnMoYWxhcm0sIHByb3BzLmFsYXJtVG9waWMpO1xuICByZXR1cm4gYWxhcm07XG59O1xuXG4vKipcbiAqIENsb3VkV2F0Y2ggZmFpbHVyZSBkZXRlY3Rpb24gZm9yIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIEFsd2F5cyBjcmVhdGVzIGEgcGxhdGZvcm0gYEFXUy9MYW1iZGFgIGBFcnJvcnNgIGFsYXJtLiBPcHRpb25hbGx5IGNyZWF0ZXMgb25lXG4gKiBtZXRyaWMgZmlsdGVyICsgYWxhcm0gcGVyIHtAbGluayBMb2dGYWlsdXJlRmlsdGVyfS4gRG9lcyBub3QgY3JlYXRlIGFuIFNOUyB0b3BpYztcbiAqIHBhc3Mge0BsaW5rIExhbWJkYUZhaWx1cmVEZXRlY3RvclByb3BzLmFsYXJtVG9waWN9IHRvIGF0dGFjaCBub3RpZmljYXRpb25zLlxuICpcbiAqIEVudHJ5IG1vZHVsZSBmb3IgYGxhbWJkYS1mYWlsdXJlLWRldGVjdG9yL2A6IGltcG9ydCB0eXBlcyBhbmQgaGVscGVycyBmcm9tIHRoaXMgZmlsZSBvbmx5LlxuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhRmFpbHVyZURldGVjdG9yIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIFNOUyB0b3BpYyB1c2VkIGZvciBhbGFybSBhY3Rpb25zLCB3aGVuIGNvbmZpZ3VyZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBhbGFybVRvcGljPzogc25zLklUb3BpYztcbiAgLyoqIEZpcmVzIHdoZW4gdGhlIExhbWJkYSBgRXJyb3JzYCBtZXRyaWMgaXMgbm9uLXplcm8uICovXG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGFFcnJvcnNBbGFybTogY2xvdWR3YXRjaC5BbGFybTtcbiAgLyoqXG4gICAqIEFsYXJtcyBmb3IgZWFjaCBsb2cgZmlsdGVyLCBpbiB0aGUgc2FtZSBvcmRlciBhc1xuICAgKiB7QGxpbmsgTGFtYmRhRmFpbHVyZURldGVjdG9yUHJvcHMubG9nRmlsdGVyc30uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nRmlsdGVyQWxhcm1zOiBMb2dGYWlsdXJlQWxhcm1bXTtcblxuICAvKipcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBMYW1iZGEsIGxvZyBncm91cCwgb3B0aW9uYWwgdG9waWMsIGFuZCBsb2cgZmlsdGVycy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMYW1iZGFGYWlsdXJlRGV0ZWN0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBhbGFybVRvcGljID0gcHJvcHMuYWxhcm1Ub3BpYztcbiAgICB0aGlzLmFsYXJtVG9waWMgPSBhbGFybVRvcGljO1xuXG4gICAgdGhpcy5sYW1iZGFFcnJvcnNBbGFybSA9IGNyZWF0ZVN1bUFsYXJtKHRoaXMsICdMYW1iZGFFcnJvcnNBbGFybScsIHtcbiAgICAgIG1ldHJpYzogcHJvcHMubGFtYmRhRnVuY3Rpb24ubWV0cmljRXJyb3JzKHtcbiAgICAgICAgcGVyaW9kOiBGQUlMVVJFX0FMQVJNX1BFUklPRCxcbiAgICAgICAgc3RhdGlzdGljOiBGQUlMVVJFX0FMQVJNX1NUQVRJU1RJQyxcbiAgICAgIH0pLFxuICAgICAgYWxhcm1Ub3BpYyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZ0ZpbHRlcnMgPSBwcm9wcy5sb2dGaWx0ZXJzID8/IFtdO1xuICAgIHRoaXMubG9nRmlsdGVyQWxhcm1zID0gbG9nRmlsdGVycy5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgY29uc3QgbWV0cmljRmlsdGVyID0gbmV3IGxvZ3MuTWV0cmljRmlsdGVyKHRoaXMsIGAke2ZpbHRlci5pZH1NZXRyaWNgLCB7XG4gICAgICAgIGxvZ0dyb3VwOiBwcm9wcy5sb2dHcm91cCxcbiAgICAgICAgZmlsdGVyUGF0dGVybjogbG9ncy5GaWx0ZXJQYXR0ZXJuLmxpdGVyYWwoZmlsdGVyLmZpbHRlclBhdHRlcm4pLFxuICAgICAgICBtZXRyaWNOYW1lc3BhY2U6IGZpbHRlci5tZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgIG1ldHJpY05hbWU6IGZpbHRlci5tZXRyaWNOYW1lLFxuICAgICAgICBtZXRyaWNWYWx1ZTogTE9HX01FVFJJQ19WQUxVRSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBMT0dfTUVUUklDX0RFRkFVTFRfVkFMVUUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGFsYXJtID0gY3JlYXRlU3VtQWxhcm0odGhpcywgYCR7ZmlsdGVyLmlkfUFsYXJtYCwge1xuICAgICAgICBtZXRyaWM6IG1ldHJpY0ZpbHRlci5tZXRyaWMoe1xuICAgICAgICAgIHBlcmlvZDogRkFJTFVSRV9BTEFSTV9QRVJJT0QsXG4gICAgICAgICAgc3RhdGlzdGljOiBGQUlMVVJFX0FMQVJNX1NUQVRJU1RJQyxcbiAgICAgICAgfSksXG4gICAgICAgIGFsYXJtVG9waWMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IGlkOiBmaWx0ZXIuaWQsIGFsYXJtIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9nLWZpbHRlciBhbGFybSBmb3IgdGhlIGdpdmVuIGZpbHRlciBpZCwgb3IgdW5kZWZpbmVkIHdoZW4gbWlzc2luZy5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gU2FtZSBhcyB7QGxpbmsgTG9nRmFpbHVyZUZpbHRlci5pZH0uXG4gICAqIEByZXR1cm5zIE1hdGNoaW5nIGFsYXJtLCBvciB1bmRlZmluZWQgd2hlbiB0aGUgaWQgd2FzIG5vdCBpbiBgbG9nRmlsdGVyc2AuXG4gICAqL1xuICBwdWJsaWMgZmluZExvZ0ZpbHRlckFsYXJtKGlkOiBzdHJpbmcpOiBjbG91ZHdhdGNoLkFsYXJtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5sb2dGaWx0ZXJBbGFybXMuZmluZCgoZW50cnkpID0+IGVudHJ5LmlkID09PSBpZCk/LmFsYXJtO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMYW1iZGFGYWlsdXJlRGV0ZWN0b3J9IHdoZW4gZmFpbHVyZSBkZXRlY3Rpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkLlxuICogQHBhcmFtIHByb3BzIC0gTGFtYmRhLCBsb2cgZ3JvdXAsIG9wdGlvbmFsIG9wdC1pbiBvcHRpb25zLCBhbmQgbG9nIGZpbHRlcnMuXG4gKiBAcmV0dXJucyBEZXRlY3RvciBjb25zdHJ1Y3QsIG9yIHVuZGVmaW5lZCB3aGVuIGRpc2FibGVkLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlTGFtYmRhRmFpbHVyZURldGVjdG9yID0gKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBwcm9wczogQ3JlYXRlTGFtYmRhRmFpbHVyZURldGVjdG9yUHJvcHMsXG4pOiBMYW1iZGFGYWlsdXJlRGV0ZWN0b3IgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIXByb3BzLmZhaWx1cmVEZXRlY3Rpb24gfHwgIWlzTGFtYmRhRmFpbHVyZURldGVjdGlvbkVuYWJsZWQocHJvcHMuZmFpbHVyZURldGVjdGlvbikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBMYW1iZGFGYWlsdXJlRGV0ZWN0b3Ioc2NvcGUsIGlkLCB7XG4gICAgbGFtYmRhRnVuY3Rpb246IHByb3BzLmxhbWJkYUZ1bmN0aW9uLFxuICAgIGxvZ0dyb3VwOiBwcm9wcy5sb2dHcm91cCxcbiAgICBhbGFybVRvcGljOiBwcm9wcy5mYWlsdXJlRGV0ZWN0aW9uLmFsYXJtVG9waWMsXG4gICAgbG9nRmlsdGVyczogcHJvcHMubG9nRmlsdGVycyxcbiAgfSk7XG59O1xuXG5leHBvcnQgdHlwZSB7IExhbWJkYUZhaWx1cmVEZXRlY3Rpb24gfSBmcm9tICcuL2xhbWJkYS1mYWlsdXJlLWRldGVjdGlvbic7XG5leHBvcnQgeyBpc0xhbWJkYUZhaWx1cmVEZXRlY3Rpb25FbmFibGVkIH0gZnJvbSAnLi9sYW1iZGEtZmFpbHVyZS1kZXRlY3Rpb24nO1xuZXhwb3J0IHR5cGUgeyBMb2dGYWlsdXJlRmlsdGVyIH0gZnJvbSAnLi9sb2ctZmFpbHVyZS1maWx0ZXInO1xuIl19
@@ -0,0 +1,22 @@
1
+ /**
2
+ * One log-based failure signal for {@link LambdaFailureDetector}.
3
+ *
4
+ * Creates a CloudWatch Logs metric filter and an alarm on the resulting sum metric.
5
+ */
6
+ export interface LogFailureFilter {
7
+ /**
8
+ * Stable id used as the MetricFilter / Alarm construct id prefix
9
+ * (e.g. `InstanceStatusFailure` → `InstanceStatusFailureMetric`).
10
+ */
11
+ readonly id: string;
12
+ /**
13
+ * CloudWatch Logs filter pattern string passed to `FilterPattern.literal`.
14
+ *
15
+ * @example '"ResourceWaitFailed"'
16
+ */
17
+ readonly filterPattern: string;
18
+ /** Custom metric namespace for the metric filter. */
19
+ readonly metricNamespace: string;
20
+ /** Custom metric name for the metric filter. */
21
+ readonly metricName: string;
22
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZhaWx1cmUtZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnN0cnVjdHMvbGFtYmRhLWZhaWx1cmUtZGV0ZWN0b3IvbG9nLWZhaWx1cmUtZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9uZSBsb2ctYmFzZWQgZmFpbHVyZSBzaWduYWwgZm9yIHtAbGluayBMYW1iZGFGYWlsdXJlRGV0ZWN0b3J9LlxuICpcbiAqIENyZWF0ZXMgYSBDbG91ZFdhdGNoIExvZ3MgbWV0cmljIGZpbHRlciBhbmQgYW4gYWxhcm0gb24gdGhlIHJlc3VsdGluZyBzdW0gbWV0cmljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0ZhaWx1cmVGaWx0ZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkIHVzZWQgYXMgdGhlIE1ldHJpY0ZpbHRlciAvIEFsYXJtIGNvbnN0cnVjdCBpZCBwcmVmaXhcbiAgICogKGUuZy4gYEluc3RhbmNlU3RhdHVzRmFpbHVyZWAg4oaSIGBJbnN0YW5jZVN0YXR1c0ZhaWx1cmVNZXRyaWNgKS5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDbG91ZFdhdGNoIExvZ3MgZmlsdGVyIHBhdHRlcm4gc3RyaW5nIHBhc3NlZCB0byBgRmlsdGVyUGF0dGVybi5saXRlcmFsYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJ1wiUmVzb3VyY2VXYWl0RmFpbGVkXCInXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXJQYXR0ZXJuOiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gbWV0cmljIG5hbWVzcGFjZSBmb3IgdGhlIG1ldHJpYyBmaWx0ZXIuICovXG4gIHJlYWRvbmx5IG1ldHJpY05hbWVzcGFjZTogc3RyaW5nO1xuICAvKiogQ3VzdG9tIG1ldHJpYyBuYW1lIGZvciB0aGUgbWV0cmljIGZpbHRlci4gKi9cbiAgcmVhZG9ubHkgbWV0cmljTmFtZTogc3RyaW5nO1xufVxuIl19