rds-database-auto-start-preventer 0.2.6 → 0.3.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.
@@ -41,7 +41,8 @@ export declare class RDSDatabaseAutoStartPreventer extends Construct {
41
41
  * Creates the Durable Lambda, EventBridge rules, and IAM policies.
42
42
  *
43
43
  * The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
44
- * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}.
44
+ * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}. Tag filters are passed
45
+ * only via that payload (not via `TAG_KEY` / `TAG_VALUES` environment variables).
45
46
  *
46
47
  * @param scope - Parent construct.
47
48
  * @param id - Construct id.
@@ -53,12 +53,13 @@ const auto_start_prevent_function_1 = require("../funcs/auto-start-prevent-funct
53
53
  * IAM grants RDS describe and stop actions only (no Resource Groups Tagging API).
54
54
  */
55
55
  class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
56
- static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.2.6" };
56
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "rds-database-auto-start-preventer.RDSDatabaseAutoStartPreventer", version: "0.3.0" };
57
57
  /**
58
58
  * Creates the Durable Lambda, EventBridge rules, and IAM policies.
59
59
  *
60
60
  * The Lambda receives `{ event, params }` where `params` carries `tagKey` and `tagValues`
61
- * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}.
61
+ * from {@link RDSDatabaseAutoStartPreventerProps.targetResource}. Tag filters are passed
62
+ * only via that payload (not via `TAG_KEY` / `TAG_VALUES` environment variables).
62
63
  *
63
64
  * @param scope - Parent construct.
64
65
  * @param id - Construct id.
@@ -82,6 +83,7 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
82
83
  environment: {
83
84
  SLACK_SECRET_NAME: slackSecret.secretName,
84
85
  },
86
+ // Required by aws-lambda-secret-fetcher (^0.6+): Extension HTTP API + AWS_SESSION_TOKEN.
85
87
  paramsAndSecrets: lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
86
88
  cacheSize: 500,
87
89
  logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
@@ -168,4 +170,4 @@ class RDSDatabaseAutoStartPreventer extends constructs_1.Construct {
168
170
  }
169
171
  }
170
172
  exports.RDSDatabaseAutoStartPreventer = RDSDatabaseAutoStartPreventer;
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBc0Q7QUFDdEQsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQWtDaEY7Ozs7Ozs7R0FPRztBQUNILE1BQWEsNkJBQThCLFNBQVEsc0JBQVM7O0lBRTFEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUM7UUFDakYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRywyQkFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRyxtR0FBbUc7UUFDbkcsMENBQTBDO1FBQzFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxzREFBd0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDOUYsV0FBVyxFQUFFLGdGQUFnRjtZQUM3RixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ3hDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsVUFBVSxFQUFFLEdBQUc7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixhQUFhLEVBQUU7Z0JBQ2IsZ0JBQWdCLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxlQUFlLEVBQUUsc0JBQVEsQ0FBQyxJ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QUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsRUFBRTtvQkFDeEQsYUFBYSxFQUFFLENBQUM7b0JBQ2hCLEtBQUssRUFBRSxXQUFXO2lCQUNuQixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFFSCxvREFBb0Q7UUFDcEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN0QyxXQUFXLEVBQUUsd0NBQXdDO1lBQ3JELE9BQU8sRUFBRSxVQUFVO1lBQ25CLFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLFVBQVUsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNwQyxNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeEhILHNFQXlIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQtZnVuY3Rpb24nO1xuXG4vKipcbiAqIFRhZy1iYXNlZCBjcml0ZXJpYSBldmFsdWF0ZWQgaW4gdGhlIExhbWJkYSBoYW5kbGVyIChub3Qgb24gdGhlIEV2ZW50QnJpZGdlIHJ1bGUpLlxuICogUmVzb3VyY2VzIHdob3NlIHRhZyB2YWx1ZSBmb3Ige0BsaW5rIFRhcmdldFJlc291cmNlLnRhZ0tleX0gaXMgbm90IGluXG4gKiB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzfSBhcmUgc2tpcHBlZCB3aXRob3V0IGNhbGxpbmcgU3RvcERCKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZSB7XG4gIC8qKiBUYWcga2V5IHRvIG1hdGNoIChlLmcuIFwiRW52aXJvbm1lbnRcIiwgXCJBdXRvU3RhcnRQcmV2ZW50XCIpLiAqL1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgLyoqIFRhZyB2YWx1ZXMgdGhhdCBpbmRpY2F0ZSB0aGUgcmVzb3VyY2Ugc2hvdWxkIGJlIHByb3RlY3RlZCAoZS5nLiBbXCJwcm9kdWN0aW9uXCJdKS4gKi9cbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBzZWNyZXRzIHJlcXVpcmVkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzIHtcbiAgLyoqIE5hbWUgb2YgdGhlIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgY29udGFpbmluZyBTbGFjayB0b2tlbiBhbmQgY2hhbm5lbC4gKi9cbiAgcmVhZG9ubHkgc2xhY2tTZWNyZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBSRFMgZGF0YWJhc2UgYXV0by1zdGFydCBwcmV2ZW50ZXIgY29uc3RydWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldCByZXNvdXJjZSBjcml0ZXJpYSBmb3IgUkRTIGluc3RhbmNlcy9jbHVzdGVycyB0byBwcm90ZWN0LiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBFdmVudEJyaWRnZSBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVSdWxlPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgdXNlZCBmb3Igbm90aWZpY2F0aW9ucyAoZS5nLiBTbGFjaykuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG59XG5cbi8qKlxuICogRGVwbG95cyBFdmVudEJyaWRnZSBydWxlcyBhbmQgYSBEdXJhYmxlIExhbWJkYSB0byBzdG9wIG1hdGNoaW5nIFJEUyByZXNvdXJjZXNcbiAqIGFmdGVyIGF1dG8tc3RhcnQgZXZlbnRzIChSRFMtRVZFTlQtMDE1NCAvIFJEUy1FVkVOVC0wMTUzKS5cbiAqXG4gKiBFdmVudEJyaWRnZSBydWxlcyBtYXRjaCBhbGwgYXV0by1zdGFydCBldmVudHM7IHRhZyBmaWx0ZXJpbmcgcnVucyBpbiB0aGUgaGFuZGxlclxuICogdXNpbmcgYFRhZ0xpc3RgIGZyb20gYHJkczpEZXNjcmliZURCSW5zdGFuY2VzYCAvIGByZHM6RGVzY3JpYmVEQkNsdXN0ZXJzYC5cbiAqIElBTSBncmFudHMgUkRTIGRlc2NyaWJlIGFuZCBzdG9wIGFjdGlvbnMgb25seSAobm8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgRHVyYWJsZSBMYW1iZGEsIEV2ZW50QnJpZGdlIHJ1bGVzLCBhbmQgSUFNIHBvbGljaWVzLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIHJlY2VpdmVzIGB7IGV2ZW50LCBwYXJhbXMgfWAgd2hlcmUgYHBhcmFtc2AgY2FycmllcyBgdGFnS2V5YCBhbmQgYHRhZ1ZhbHVlc2BcbiAgICogZnJvbSB7QGxpbmsgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcy50YXJnZXRSZXNvdXJjZX0uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGFyZ2V0IHJlc291cmNlICh0YWcga2V5L3ZhbHVlcyksIGVuYWJsZSBydWxlIGZsYWcsIGFuZCBzZWNyZXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gPSBuZXcgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0EgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIgZnJvbSBzdGFydGluZyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBzbGFja1NlY3JldC5zZWNyZXROYW1lLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc0FuZFNlY3JldHM6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLmZyb21WZXJzaW9uKGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgY2FjaGVTaXplOiA1MDAsXG4gICAgICAgIGxvZ0xldmVsOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLklORk8sXG4gICAgICB9KSxcbiAgICAgIHJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uUm9sZScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdBIHJvbGUgdG8gY29udHJvbCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIuJyxcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRHVyYWJsZUV4ZWN1dGlvblJvbGVQb2xpY3knKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KSxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICBzeXN0ZW1Mb2dMZXZlbFYyOiBsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuSU5GTyxcbiAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWxWMjogbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GTyxcbiAgICB9KTtcbiAgICAvLyBHcmFudCBSRFMgZGVzY3JpYmUgKHN0YXR1cyBhbmQgVGFnTGlzdCkgYW5kIHN0b3AgcGVybWlzc2lvbnMgdG8gdGhlIGhhbmRsZXIgcm9sZS5cbiAgICBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ1Jkc0F1dG9TdGFydENvbnRyb2wnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAncmRzOkRlc2NyaWJlREJJbnN0YW5jZXMnLFxuICAgICAgICAncmRzOkRlc2NyaWJlREJDbHVzdGVycycsXG4gICAgICAgICdyZHM6U3RvcERCSW5zdGFuY2UnLFxuICAgICAgICAncmRzOlN0b3BEQkNsdXN0ZXInLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQoYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKTtcblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcyA9IGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbi5hZGRBbGlhcygnbGl2ZScpO1xuXG4gICAgY29uc3QgZW5hYmxlUnVsZTogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuZW5hYmxlUnVsZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVJ1bGU7XG4gICAgfSkoKTtcblxuICAgIC8vIFBhc3MgdGhlIEV2ZW50QnJpZGdlIGV2ZW50IGFuZCB0YWcgZmlsdGVyIHBhcmFtcyB0byB0aGUgTGFtYmRhIHRhcmdldCBpbnB1dC5cbiAgICBjb25zdCBsYW1iZGFJbnB1dCA9IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICBldmVudDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQnKSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0YWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgdGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g8J+RhyBFdmVudEJyaWRnZSBieSBSRFMgREIgSW5zdGFuY2UgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJJbnN0YW5jZUV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdyZHMgZGIgaW5zdGFuY2UgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlLicsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIEluc3RhbmNlIEV2ZW50J10sXG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIEV2ZW50SUQ6IFsnUkRTLUVWRU5ULTAxNTQnXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbXG4gICAgICAgIG5ldyB0YXJnZXRzLkxhbWJkYUZ1bmN0aW9uKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgICAgICBldmVudDogbGFtYmRhSW5wdXQsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIENsdXN0ZXIgYXV0byBzdGFydCBldmVudFxuICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnREJDbHVzdGVyRXZlbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2RiIGNsdXN0ZXIgYXV0byBzdGFydCBldmVudCBjYXRjaCBydWxlJyxcbiAgICAgIGVuYWJsZWQ6IGVuYWJsZVJ1bGUsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgc291cmNlOiBbJ2F3cy5yZHMnXSxcbiAgICAgICAgZGV0YWlsVHlwZTogWydSRFMgREIgQ2x1c3RlciBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTUzJ10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvcmRzLWRhdGFiYXNlLWF1dG8tc3RhcnQtcHJldmVudGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBc0Q7QUFDdEQsK0RBQWlEO0FBQ2pELHdFQUEwRDtBQUMxRCx5REFBMkM7QUFDM0MsK0RBQWlEO0FBQ2pELDJEQUE2QztBQUM3Qyx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLHNGQUFnRjtBQWtDaEY7Ozs7Ozs7R0FPRztBQUNILE1BQWEsNkJBQThCLFNBQVEsc0JBQVM7O0lBRTFEOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlDO1FBQ2pGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFaEcsbUdBQW1HO1FBQ25HLDBDQUEwQztRQUMxQyxNQUFNLHdCQUF3QixHQUFHLElBQUksc0RBQXdCLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQzlGLFdBQVcsRUFBRSxnRkFBZ0Y7WUFDN0YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUN4QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsYUFBYSxFQUFFLENBQUM7WUFDaEIsYUFBYSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsZUFBZSxFQUFFLHNCQUFRLENBQUMs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LENBQUM7aUJBQzVCO2FBQ0Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLDZCQUE2QixFQUFFO29CQUN4RCxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLFdBQVc7aUJBQ25CLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILG9EQUFvRDtRQUNwRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3RDLFdBQVcsRUFBRSx3Q0FBd0M7WUFDckQsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsVUFBVSxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRTtvQkFDTixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUI7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3hELGFBQWEsRUFBRSxDQUFDO29CQUNoQixLQUFLLEVBQUUsV0FBVztpQkFDbkIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUExSEgsc0VBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEF1dG9TdGFydFByZXZlbnRGdW5jdGlvbiB9IGZyb20gJy4uL2Z1bmNzL2F1dG8tc3RhcnQtcHJldmVudC1mdW5jdGlvbic7XG5cbi8qKlxuICogVGFnLWJhc2VkIGNyaXRlcmlhIGV2YWx1YXRlZCBpbiB0aGUgTGFtYmRhIGhhbmRsZXIgKG5vdCBvbiB0aGUgRXZlbnRCcmlkZ2UgcnVsZSkuXG4gKiBSZXNvdXJjZXMgd2hvc2UgdGFnIHZhbHVlIGZvciB7QGxpbmsgVGFyZ2V0UmVzb3VyY2UudGFnS2V5fSBpcyBub3QgaW5cbiAqIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdWYWx1ZXN9IGFyZSBza2lwcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdG8gbWF0Y2ggKGUuZy4gXCJFbnZpcm9ubWVudFwiLCBcIkF1dG9TdGFydFByZXZlbnRcIikuICovXG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICAvKiogVGFnIHZhbHVlcyB0aGF0IGluZGljYXRlIHRoZSByZXNvdXJjZSBzaG91bGQgYmUgcHJvdGVjdGVkIChlLmcuIFtcInByb2R1Y3Rpb25cIl0pLiAqL1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEV4dGVybmFsIHNlY3JldHMgcmVxdWlyZWQgZm9yIG5vdGlmaWNhdGlvbnMgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFJEUyBkYXRhYmFzZSBhdXRvLXN0YXJ0IHByZXZlbnRlciBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXJQcm9wcyB7XG4gIC8qKiBUYWctYmFzZWQgdGFyZ2V0IHJlc291cmNlIGNyaXRlcmlhIGZvciBSRFMgaW5zdGFuY2VzL2NsdXN0ZXJzIHRvIHByb3RlY3QuICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZTtcbiAgLyoqIFdoZXRoZXIgdGhlIEV2ZW50QnJpZGdlIHJ1bGVzIGFyZSBlbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIGlmIG9taXR0ZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZVJ1bGU/OiBib29sZWFuO1xuICAvKiogU2VjcmV0cyB1c2VkIGZvciBub3RpZmljYXRpb25zIChlLmcuIFNsYWNrKS4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcbn1cblxuLyoqXG4gKiBEZXBsb3lzIEV2ZW50QnJpZGdlIHJ1bGVzIGFuZCBhIER1cmFibGUgTGFtYmRhIHRvIHN0b3AgbWF0Y2hpbmcgUkRTIHJlc291cmNlc1xuICogYWZ0ZXIgYXV0by1zdGFydCBldmVudHMgKFJEUy1FVkVOVC0wMTU0IC8gUkRTLUVWRU5ULTAxNTMpLlxuICpcbiAqIEV2ZW50QnJpZGdlIHJ1bGVzIG1hdGNoIGFsbCBhdXRvLXN0YXJ0IGV2ZW50czsgdGFnIGZpbHRlcmluZyBydW5zIGluIHRoZSBoYW5kbGVyXG4gKiB1c2luZyBgVGFnTGlzdGAgZnJvbSBgcmRzOkRlc2NyaWJlREJJbnN0YW5jZXNgIC8gYHJkczpEZXNjcmliZURCQ2x1c3RlcnNgLlxuICogSUFNIGdyYW50cyBSRFMgZGVzY3JpYmUgYW5kIHN0b3AgYWN0aW9ucyBvbmx5IChubyBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkpLlxuICovXG5leHBvcnQgY2xhc3MgUkRTRGF0YWJhc2VBdXRvU3RhcnRQcmV2ZW50ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBEdXJhYmxlIExhbWJkYSwgRXZlbnRCcmlkZ2UgcnVsZXMsIGFuZCBJQU0gcG9saWNpZXMuXG4gICAqXG4gICAqIFRoZSBMYW1iZGEgcmVjZWl2ZXMgYHsgZXZlbnQsIHBhcmFtcyB9YCB3aGVyZSBgcGFyYW1zYCBjYXJyaWVzIGB0YWdLZXlgIGFuZCBgdGFnVmFsdWVzYFxuICAgKiBmcm9tIHtAbGluayBSRFNEYXRhYmFzZUF1dG9TdGFydFByZXZlbnRlclByb3BzLnRhcmdldFJlc291cmNlfS4gVGFnIGZpbHRlcnMgYXJlIHBhc3NlZFxuICAgKiBvbmx5IHZpYSB0aGF0IHBheWxvYWQgKG5vdCB2aWEgYFRBR19LRVlgIC8gYFRBR19WQUxVRVNgIGVudmlyb25tZW50IHZhcmlhYmxlcykuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGFyZ2V0IHJlc291cmNlICh0YWcga2V5L3ZhbHVlcyksIGVuYWJsZSBydWxlIGZsYWcsIGFuZCBzZWNyZXRzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJEU0RhdGFiYXNlQXV0b1N0YXJ0UHJldmVudGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24gPSBuZXcgQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uKHRoaXMsICdBdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0EgZnVuY3Rpb24gdG8gcHJldmVudCB0aGUgUkRTIERhdGFiYXNlIG9yIENsdXN0ZXIgZnJvbSBzdGFydGluZyBhdXRvbWF0aWNhbGx5LicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBzbGFja1NlY3JldC5zZWNyZXROYW1lLFxuICAgICAgfSxcbiAgICAgIC8vIFJlcXVpcmVkIGJ5IGF3cy1sYW1iZGEtc2VjcmV0LWZldGNoZXIgKF4wLjYrKTogRXh0ZW5zaW9uIEhUVFAgQVBJICsgQVdTX1NFU1NJT05fVE9LRU4uXG4gICAgICBwYXJhbXNBbmRTZWNyZXRzOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgIGNhY2hlU2l6ZTogNTAwLFxuICAgICAgICBsb2dMZXZlbDogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5JTkZPLFxuICAgICAgfSksXG4gICAgICByb2xlOiBuZXcgaWFtLlJvbGUodGhpcywgJ0F1dG9TdGFydFByZXZlbnRGdW5jdGlvblJvbGUnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQSByb2xlIHRvIGNvbnRyb2wgdGhlIFJEUyBEYXRhYmFzZSBvciBDbHVzdGVyLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnQXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uTG9nR3JvdXAnLCB7XG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSksXG4gICAgICBsb2dnaW5nRm9ybWF0OiBsYW1iZGEuTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgc3lzdGVtTG9nTGV2ZWxWMjogbGFtYmRhLlN5c3RlbUxvZ0xldmVsLklORk8sXG4gICAgICBhcHBsaWNhdGlvbkxvZ0xldmVsVjI6IGxhbWJkYS5BcHBsaWNhdGlvbkxvZ0xldmVsLklORk8sXG4gICAgfSk7XG4gICAgLy8gR3JhbnQgUkRTIGRlc2NyaWJlIChzdGF0dXMgYW5kIFRhZ0xpc3QpIGFuZCBzdG9wIHBlcm1pc3Npb25zIHRvIHRoZSBoYW5kbGVyIHJvbGUuXG4gICAgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdSZHNBdXRvU3RhcnRDb250cm9sJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3JkczpEZXNjcmliZURCSW5zdGFuY2VzJyxcbiAgICAgICAgJ3JkczpEZXNjcmliZURCQ2x1c3RlcnMnLFxuICAgICAgICAncmRzOlN0b3BEQkluc3RhbmNlJyxcbiAgICAgICAgJ3JkczpTdG9wREJDbHVzdGVyJyxcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgU2xhY2sgc2VjcmV0XG4gICAgc2xhY2tTZWNyZXQuZ3JhbnRSZWFkKGF1dG9TdGFydFByZXZlbnRGdW5jdGlvbik7XG5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2R1cmFibGUtZ2V0dGluZy1zdGFydGVkLWlhYy5odG1sXG4gICAgY29uc3QgYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMgPSBhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIGNvbnN0IGVuYWJsZVJ1bGU6IGJvb2xlYW4gPSAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHByb3BzLmVuYWJsZVJ1bGUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5lbmFibGVSdWxlO1xuICAgIH0pKCk7XG5cbiAgICAvLyBQYXNzIHRoZSBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbXMgdG8gdGhlIExhbWJkYSB0YXJnZXQgaW5wdXQuXG4gICAgY29uc3QgbGFtYmRhSW5wdXQgPSBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgZXZlbnQ6IGV2ZW50cy5FdmVudEZpZWxkLmZyb21QYXRoKCckJyksXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgIHRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIPCfkYcgRXZlbnRCcmlkZ2UgYnkgUkRTIERCIEluc3RhbmNlIGF1dG8gc3RhcnQgZXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCSW5zdGFuY2VFdmVudCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncmRzIGRiIGluc3RhbmNlIGF1dG8gc3RhcnQgZXZlbnQgY2F0Y2ggcnVsZS4nLFxuICAgICAgZW5hYmxlZDogZW5hYmxlUnVsZSxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFsnYXdzLnJkcyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBFdmVudElEOiBbJ1JEUy1FVkVOVC0wMTU0J10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW1xuICAgICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihhdXRvU3RhcnRQcmV2ZW50RnVuY3Rpb25BbGlhcywge1xuICAgICAgICAgIHJldHJ5QXR0ZW1wdHM6IDIsXG4gICAgICAgICAgZXZlbnQ6IGxhbWJkYUlucHV0LFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyDwn5GHIEV2ZW50QnJpZGdlIGJ5IFJEUyBEQiBDbHVzdGVyIGF1dG8gc3RhcnQgZXZlbnRcbiAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0RCQ2x1c3RlckV2ZW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdkYiBjbHVzdGVyIGF1dG8gc3RhcnQgZXZlbnQgY2F0Y2ggcnVsZScsXG4gICAgICBlbmFibGVkOiBlbmFibGVSdWxlLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MucmRzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnUkRTIERCIENsdXN0ZXIgRXZlbnQnXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgRXZlbnRJRDogWydSRFMtRVZFTlQtMDE1MyddLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFtcbiAgICAgICAgbmV3IHRhcmdldHMuTGFtYmRhRnVuY3Rpb24oYXV0b1N0YXJ0UHJldmVudEZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgICAgIGV2ZW50OiBsYW1iZGFJbnB1dCxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,18 +1,21 @@
1
+ import { DurableContext } from '@aws/durable-execution-sdk-js';
2
+ import { NoOpResult, StoppedResult } from './auto-start-prevent.predicates';
1
3
  /**
2
4
  * Durable Lambda handler for RDS auto-start prevention.
3
5
  *
4
6
  * Workflow:
5
- * 1. Wait 1 minute, then poll DescribeDB* until the resource leaves transitional statuses.
7
+ * 1. Wait 1 minute, then wait on DescribeDB* until the resource leaves transitional statuses.
6
8
  * 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
7
- * 3. If status is `available`, call StopDB* and poll until `stopped`.
9
+ * 3. If status is `available`, call StopDB* and wait until `stopped`.
8
10
  * 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
9
11
  * 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
10
12
  *
11
13
  * Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
12
14
  *
13
- * @param input - `{ event, params }` from EventBridge, or a raw RDS event.
15
+ * @param input - `{ event, params }` from EventBridge InputTransformer (same shape required for direct Invoke).
14
16
  * @param context - Durable execution context for steps and waits.
15
17
  * @returns {@link StoppedResult} or {@link NoOpResult}.
16
- * @throws When the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
18
+ * @throws When the payload is invalid, required env vars are missing, the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
17
19
  */
20
+ export declare const processAutoStartPrevent: (input: unknown, context: DurableContext) => Promise<StoppedResult | NoOpResult>;
18
21
  export declare const handler: import("@aws/durable-execution-sdk-js").DurableLambdaHandler;
@@ -1,131 +1,53 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handler = void 0;
3
+ exports.handler = exports.processAutoStartPrevent = void 0;
4
4
  const durable_execution_sdk_js_1 = require("@aws/durable-execution-sdk-js");
5
5
  const client_rds_1 = require("@aws-sdk/client-rds");
6
6
  const web_api_1 = require("@slack/web-api");
7
7
  const aws_lambda_secret_fetcher_1 = require("aws-lambda-secret-fetcher");
8
- /** Type guard: input is a raw EventBridge RDS auto-start event. */
9
- const isRawEvent = (input) => typeof input === 'object' &&
10
- input != null &&
11
- 'detail' in input &&
12
- 'detail-type' in input;
13
- /**
14
- * Builds tag filter parameters from `TAG_KEY` and `TAG_VALUES` environment variables.
15
- *
16
- * @returns Parsed tag key and values.
17
- * @throws When required environment variables are missing or `TAG_VALUES` is not a JSON string array.
18
- */
19
- const paramsFromEnv = () => {
20
- const tagKey = process.env.TAG_KEY;
21
- const tagValuesJson = process.env.TAG_VALUES;
22
- if (!tagKey || !tagValuesJson) {
23
- throw new Error('missing environment variables TAG_KEY or TAG_VALUES.');
24
- }
25
- let tagValues;
26
- try {
27
- tagValues = JSON.parse(tagValuesJson);
28
- }
29
- catch {
30
- throw new Error('TAG_VALUES must be a JSON array of strings.');
31
- }
32
- if (!Array.isArray(tagValues)) {
33
- throw new Error('TAG_VALUES must be a JSON array of strings.');
34
- }
35
- return { tagKey, tagValues };
36
- };
37
- /**
38
- * Normalizes invocation input to {@link AutoStartPreventInput}.
39
- *
40
- * @param input - `{ event, params }` or a raw EventBridge RDS event.
41
- * @returns Event plus tag filter parameters.
42
- * @throws When the payload shape is invalid.
43
- */
44
- const normalizeInput = (input) => {
45
- if (isRawEvent(input)) {
46
- return { event: input, params: paramsFromEnv() };
47
- }
48
- const candidate = input;
49
- if (typeof candidate === 'object' &&
50
- candidate != null &&
51
- candidate.event != null &&
52
- candidate.params != null) {
53
- return candidate;
54
- }
55
- throw new Error('Invalid input: expected RDS event or { event, params }.');
56
- };
8
+ const strict_env_resolver_1 = require("strict-env-resolver");
9
+ const auto_start_prevent_predicates_1 = require("./auto-start-prevent.predicates");
57
10
  /** Shared RDS client for describe and stop API calls. */
58
11
  const rdsClient = new client_rds_1.RDSClient({});
59
- /**
60
- * RDS statuses that indicate an in-progress transition.
61
- * The handler polls every 5 minutes while the resource remains in one of these states.
62
- */
63
- const TRANSITIONAL_STATUSES = new Set([
64
- 'starting',
65
- 'configuring-enhanced-monitoring',
66
- 'backing-up',
67
- 'modifying',
68
- 'stopping',
69
- ]);
70
- /**
71
- * Returns true if the resource has a tag with the given key and a value in the allowed list.
72
- *
73
- * @param params - Tag key and allowed values.
74
- * @param tags - Resource tag list (e.g. from DescribeDBInstances / DescribeDBClusters).
75
- * @returns Whether the tag matches.
76
- */
77
- const matchTag = (params, tags) => {
78
- if (!tags || tags.length === 0) {
79
- return false;
80
- }
81
- const value = tags.find(t => t.Key === params.tagKey)?.Value;
82
- if (!value) {
83
- return false;
84
- }
85
- return params.tagValues.includes(value);
86
- };
87
12
  /**
88
13
  * Durable Lambda handler for RDS auto-start prevention.
89
14
  *
90
15
  * Workflow:
91
- * 1. Wait 1 minute, then poll DescribeDB* until the resource leaves transitional statuses.
16
+ * 1. Wait 1 minute, then wait on DescribeDB* until the resource leaves transitional statuses.
92
17
  * 2. Read tags from the describe response `TagList`; skip when {@link matchTag} returns false.
93
- * 3. If status is `available`, call StopDB* and poll until `stopped`.
18
+ * 3. If status is `available`, call StopDB* and wait until `stopped`.
94
19
  * 4. If already `stopped` without calling StopDB*, return {@link NoOpResult} (no Slack notification).
95
20
  * 5. Post to Slack only when StopDB* was invoked and the resource reached `stopped`.
96
21
  *
97
22
  * Tag matching uses RDS Describe APIs only; Resource Groups Tagging API is not used.
98
23
  *
99
- * @param input - `{ event, params }` from EventBridge, or a raw RDS event.
24
+ * @param input - `{ event, params }` from EventBridge InputTransformer (same shape required for direct Invoke).
100
25
  * @param context - Durable execution context for steps and waits.
101
26
  * @returns {@link StoppedResult} or {@link NoOpResult}.
102
- * @throws When the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
27
+ * @throws When the payload is invalid, required env vars are missing, the event is unsupported, secrets are invalid, or stop did not reach `stopped`.
103
28
  */
104
- exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (input, context) => {
105
- const { event, params } = normalizeInput(input);
29
+ const processAutoStartPrevent = async (input, context) => {
30
+ const { event, params } = (0, auto_start_prevent_predicates_1.normalizeInput)(input);
106
31
  const { detail, 'detail-type': detailType } = event;
107
- const slackSecretName = process.env.SLACK_SECRET_NAME;
108
- if (!slackSecretName) {
109
- throw new Error('missing environment variable SLACK_SECRET_NAME.');
110
- }
32
+ const slackSecretName = strict_env_resolver_1.StrictEnvResolver.resolve('SLACK_SECRET_NAME', strict_env_resolver_1.StrictEnvType.String, {
33
+ trim: true,
34
+ });
35
+ // Requires AWS Parameters and Secrets Extension (ParamsAndSecrets layer) and
36
+ // AWS_SESSION_TOKEN from the Lambda runtime (aws-lambda-secret-fetcher ^0.6+).
111
37
  const slackSecretValue = await context.step('fetch-slack-secret', async () => {
112
38
  return aws_lambda_secret_fetcher_1.secretFetcher.getSecretValue(slackSecretName);
113
39
  });
114
- if (!slackSecretValue?.token || !slackSecretValue?.channel) {
115
- throw new Error('Slack secret must contain token and channel.');
40
+ if (!(0, auto_start_prevent_predicates_1.isSlackSecret)(slackSecretValue)) {
41
+ throw new Error('Slack secret must be JSON with non-empty token and channel.');
116
42
  }
117
- const isInstance = detailType === 'RDS DB Instance Event' &&
118
- detail.SourceType === 'DB_INSTANCE' &&
119
- detail.EventID === 'RDS-EVENT-0154';
120
- const isCluster = detailType === 'RDS DB Cluster Event' &&
121
- detail.SourceType === 'CLUSTER' &&
122
- detail.EventID === 'RDS-EVENT-0153';
43
+ const isInstance = (0, auto_start_prevent_predicates_1.isDbInstanceAutoStart)(detailType, detail);
44
+ const isCluster = (0, auto_start_prevent_predicates_1.isDbClusterAutoStart)(detailType, detail);
123
45
  if (!isInstance && !isCluster) {
124
46
  throw new Error(`Unsupported event: detail-type=${detailType}, SourceType=${detail.SourceType}, EventID=${detail.EventID}`);
125
47
  }
126
48
  // Initial delay before the first describe (allows RDS to report a stable status).
127
49
  await context.wait({ minutes: 1 });
128
- // Poll until the resource is no longer in a transitional status; capture status and TagList.
50
+ // Wait until the resource is no longer in a transitional status; capture status and TagList.
129
51
  const firstDescribe = await context.waitForCondition(async (_state, _ctx) => {
130
52
  if (isInstance) {
131
53
  const res = await rdsClient.send(new client_rds_1.DescribeDBInstancesCommand({
@@ -152,27 +74,17 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
152
74
  status: 'starting',
153
75
  identifier: detail.SourceIdentifier,
154
76
  },
155
- waitStrategy: state => {
156
- // Re-poll every 5 minutes while the status is still transitional.
157
- if (TRANSITIONAL_STATUSES.has(state.status)) {
158
- return { shouldContinue: true, delay: { minutes: 5 } };
159
- }
160
- // available, stopped, or other terminal status — proceed to tag check and stop logic.
161
- return { shouldContinue: false };
162
- },
77
+ waitStrategy: auto_start_prevent_predicates_1.waitStrategyUntilStable,
163
78
  });
164
79
  // Skip when TagList is missing or does not match tagKey / tagValues.
165
- if (!matchTag(params, firstDescribe.tags)) {
166
- return {
167
- action: 'no-op',
168
- reason: 'tag not matched or not found',
169
- status: firstDescribe.status,
170
- };
80
+ if (!(0, auto_start_prevent_predicates_1.matchTag)(params, firstDescribe.tags)) {
81
+ return (0, auto_start_prevent_predicates_1.tagMismatchNoOp)(firstDescribe.status);
171
82
  }
172
83
  let didStop = false;
173
84
  let finalStatus = firstDescribe.status;
174
- // When available, invoke StopDB* and poll until stopped.
175
- if (firstDescribe.status === 'available') {
85
+ // When available, invoke StopDB* and wait until stopped.
86
+ const afterTagMatch = (0, auto_start_prevent_predicates_1.decideAfterTagMatch)(firstDescribe.status);
87
+ if (afterTagMatch.kind === 'stop') {
176
88
  if (isInstance) {
177
89
  await context.step('stop-db-instance', async () => {
178
90
  await rdsClient.send(new client_rds_1.StopDBInstanceCommand({
@@ -211,78 +123,42 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (in
211
123
  status: firstDescribe.status,
212
124
  identifier: firstDescribe.identifier,
213
125
  },
214
- waitStrategy: state => {
215
- if (state.status === 'stopped') {
216
- return { shouldContinue: false };
217
- }
218
- if (TRANSITIONAL_STATUSES.has(state.status)) {
219
- return { shouldContinue: true, delay: { minutes: 5 } };
220
- }
221
- throw new Error(`Unexpected status while waiting for stop: ${state.status}`);
222
- },
126
+ waitStrategy: auto_start_prevent_predicates_1.waitStrategyUntilStopped,
223
127
  });
224
128
  didStop = true;
225
129
  finalStatus = stopped.status;
226
130
  }
227
131
  // Already stopped without calling StopDB* (e.g. stopped by another process) — no Slack notification.
228
132
  if (!didStop) {
229
- if (finalStatus === 'stopped') {
230
- return {
231
- action: 'no-op',
232
- reason: 'already stopped',
233
- status: finalStatus,
234
- };
133
+ if (afterTagMatch.kind === 'no-op') {
134
+ return afterTagMatch.result;
135
+ }
136
+ if (afterTagMatch.kind === 'error') {
137
+ throw new Error(afterTagMatch.message);
235
138
  }
236
- throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
237
139
  }
238
140
  // Fail when StopDB* was called but the resource did not reach stopped.
239
141
  if (finalStatus !== 'stopped') {
240
142
  throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
241
143
  }
242
- const sourceArnParts = detail.SourceArn.split(':');
243
- const region = sourceArnParts[3];
244
- const account = sourceArnParts[4];
144
+ const { region, account } = (0, auto_start_prevent_predicates_1.parseRdsSourceArn)(detail.SourceArn);
245
145
  const client = new web_api_1.WebClient(slackSecretValue.token);
246
- const channel = slackSecretValue.channel;
247
146
  await context.step('post-slack-messages', async () => {
248
- return client.chat.postMessage({
249
- channel,
250
- attachments: [
251
- {
252
- color: '#36a64f',
253
- pretext: `😴 Successfully stopped the automatically running RDS ${detail.SourceType} ${detail.SourceIdentifier}.`,
254
- fields: [
255
- {
256
- title: 'Account',
257
- value: account,
258
- short: true,
259
- },
260
- {
261
- title: 'Region',
262
- value: region,
263
- short: true,
264
- },
265
- {
266
- title: 'Type',
267
- value: detail.SourceType,
268
- short: true,
269
- },
270
- {
271
- title: 'Identifier',
272
- value: detail.SourceIdentifier,
273
- short: true,
274
- },
275
- ],
276
- },
277
- ],
278
- });
147
+ return client.chat.postMessage((0, auto_start_prevent_predicates_1.buildSlackStopNotification)({
148
+ channel: slackSecretValue.channel,
149
+ sourceType: detail.SourceType,
150
+ sourceIdentifier: detail.SourceIdentifier,
151
+ account,
152
+ region,
153
+ }));
279
154
  });
280
- return {
281
- action: 'stopped',
155
+ return (0, auto_start_prevent_predicates_1.buildStoppedResult)({
282
156
  finalStatus,
283
157
  account,
284
158
  region,
285
159
  identifier: detail.SourceIdentifier,
286
- };
287
- });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQTZFMUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYyxFQUE4QixFQUFFLENBQ2hFLE9BQU8sS0FBSyxLQUFLLFFBQVE7SUFDekIsS0FBSyxJQUFJLElBQUk7SUFDYixRQUFRLElBQUksS0FBSztJQUNqQixhQUFhLElBQUksS0FBSyxDQUFDO0FBRXpCOzs7OztHQUtHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsR0FBb0IsRUFBRTtJQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUNuQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUM3QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxJQUFJLFNBQW1CLENBQUM7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFhLENBQUM7SUFDcEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUs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Q2IsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsS0FBSyxFQUFFLE1BQU07NEJBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVOzRCQUN4QixLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsWUFBWTs0QkFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7NEJBQzlCLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxNQUFNLEVBQUUsU0FBUztRQUNqQixXQUFXO1FBQ1gsT0FBTztRQUNQLE1BQU07UUFDTixVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtLQUNwQyxDQUFDO0FBQ0osQ0FBQyxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3aXRoRHVyYWJsZUV4ZWN1dGlvbiwgRHVyYWJsZUNvbnRleHQgfSBmcm9tICdAYXdzL2R1cmFibGUtZXhlY3V0aW9uLXNkay1qcyc7XG5pbXBvcnQge1xuICBSRFNDbGllbnQsXG4gIERlc2NyaWJlREJJbnN0YW5jZXNDb21tYW5kLFxuICBEZXNjcmliZURCQ2x1c3RlcnNDb21tYW5kLFxuICBTdG9wREJJbnN0YW5jZUNvbW1hbmQsXG4gIFN0b3BEQkNsdXN0ZXJDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtcmRzJztcbmltcG9ydCB7IFdlYkNsaWVudCB9IGZyb20gJ0BzbGFjay93ZWItYXBpJztcbmltcG9ydCB7IHNlY3JldEZldGNoZXIgfSBmcm9tICdhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyJztcblxuLyoqXG4gKiBEZXRhaWwgcGF5bG9hZCBvZiBhbiBSRFMgYXV0by1zdGFydCBldmVudCBmcm9tIEV2ZW50QnJpZGdlLlxuICovXG5pbnRlcmZhY2UgUmRzQXV0b1N0YXJ0RGV0YWlsIHtcbiAgLyoqIEV2ZW50IElEOiBSRFMtRVZFTlQtMDE1NCAoREIgaW5zdGFuY2UpIG9yIFJEUy1FVkVOVC0wMTUzIChEQiBjbHVzdGVyKS4gKi9cbiAgRXZlbnRJRDogJ1JEUy1FVkVOVC0wMTU0JyB8ICdSRFMtRVZFTlQtMDE1Myc7XG4gIC8qKiBSZXNvdXJjZSB0eXBlIHRoYXQgZW1pdHRlZCB0aGUgZXZlbnQuICovXG4gIFNvdXJjZVR5cGU6ICdEQl9JTlNUQU5DRScgfCAnQ0xVU1RFUic7XG4gIC8qKiBBUk4gb2YgdGhlIERCIGluc3RhbmNlIG9yIGNsdXN0ZXIuICovXG4gIFNvdXJjZUFybjogc3RyaW5nO1xuICAvKiogREIgaW5zdGFuY2Ugb3IgY2x1c3RlciBpZGVudGlmaWVyIGZyb20gdGhlIGV2ZW50LiAqL1xuICBTb3VyY2VJZGVudGlmaWVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUkRTIGF1dG8tc3RhcnQgZXZlbnQgYXMgcmVjZWl2ZWQgZnJvbSBFdmVudEJyaWRnZS5cbiAqL1xuaW50ZXJmYWNlIFJkc0F1dG9TdGFydEV2ZW50IHtcbiAgJ2RldGFpbC10eXBlJzogJ1JEUyBEQiBJbnN0YW5jZSBFdmVudCcgfCAnUkRTIERCIENsdXN0ZXIgRXZlbnQnO1xuICAnc291cmNlJzogJ2F3cy5yZHMnO1xuICAnZGV0YWlsJzogUmRzQXV0b1N0YXJ0RGV0YWlsO1xufVxuXG4vKipcbiAqIFRhZy1iYXNlZCBmaWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIGhhbmRsZXIuXG4gKi9cbmludGVyZmFjZSBBdXRvU3RhcnRQYXJhbXMge1xuICAvKiogVGFnIGtleSB0byBtYXRjaCBvbiB0aGUgcmVzb3VyY2UuICovXG4gIHRhZ0tleTogc3RyaW5nO1xuICAvKiogQWxsb3dlZCB0YWcgdmFsdWVzOyB0aGUgcmVzb3VyY2UgaXMgcHJvY2Vzc2VkIG9ubHkgd2hlbiBpdHMgdGFnIHZhbHVlIGlzIGluIHRoaXMgbGlzdC4gKi9cbiAgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTbGFjayBjcmVkZW50aWFscyBzdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyLlxuICovXG5pbnRlcmZhY2UgU2xhY2tTZWNyZXQge1xuICAvKiogU2xhY2sgYm90IG9yIHVzZXIgT0F1dGggdG9rZW4uICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBDaGFubmVsIElEIG9yIG5hbWUgdG8gcG9zdCBub3RpZmljYXRpb25zIHRvLiAqL1xuICBjaGFubmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTm9ybWFsaXplZCBoYW5kbGVyIGlucHV0OiBFdmVudEJyaWRnZSBldmVudCBhbmQgdGFnIGZpbHRlciBwYXJhbWV0ZXJzLlxuICpcbiAqIENESyBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoIGB7IGV2ZW50LCBwYXJhbXMgfWAgdmlhIEV2ZW50QnJpZGdlIHRhcmdldCBpbnB1dC5cbiAqIEEgcmF3IEV2ZW50QnJpZGdlIGV2ZW50IGFsb25lIGlzIGFsc28gYWNjZXB0ZWQ7IGBwYXJhbXNgIGFyZSB0aGVuIHJlYWQgZnJvbVxuICogYFRBR19LRVlgIGFuZCBgVEFHX1ZBTFVFU2AgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5pbnRlcmZhY2UgQXV0b1N0YXJ0UHJldmVudElucHV0IHtcbiAgZXZlbnQ6IFJkc0F1dG9TdGFydEV2ZW50O1xuICBwYXJhbXM6IEF1dG9TdGFydFBhcmFtcztcbn1cblxuLyoqXG4gKiBIYW5kbGVyIHJlc3VsdCB3aGVuIG5vIHN0b3AgYWN0aW9uIHdhcyB0YWtlbi5cbiAqL1xuaW50ZXJmYWNlIE5vT3BSZXN1bHQge1xuICBhY3Rpb246ICduby1vcCc7XG4gIHJlYXNvbjogJ3RhZyBub3QgbWF0Y2hlZCBvciBub3QgZm91bmQnIHwgJ2FscmVhZHkgc3RvcHBlZCc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhhbmRsZXIgcmVzdWx0IHdoZW4gdGhpcyBpbnZvY2F0aW9uIGNhbGxlZCBTdG9wREIqIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKi9cbmludGVyZmFjZSBTdG9wcGVkUmVzdWx0IHtcbiAgYWN0aW9uOiAnc3RvcHBlZCc7XG4gIGZpbmFsU3RhdHVzOiBzdHJpbmc7XG4gIGFjY291bnQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbn1cblxuLyoqIFR5cGUgZ3VhcmQ6IGlucHV0IGlzIGEgcmF3IEV2ZW50QnJpZGdlIFJEUyBhdXRvLXN0YXJ0IGV2ZW50LiAqL1xuY29uc3QgaXNSYXdFdmVudCA9IChpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIFJkc0F1dG9TdGFydEV2ZW50ID0+XG4gIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcbiAgaW5wdXQgIT0gbnVsbCAmJlxuICAnZGV0YWlsJyBpbiBpbnB1dCAmJlxuICAnZGV0YWlsLXR5cGUnIGluIGlucHV0O1xuXG4vKipcbiAqIEJ1aWxkcyB0YWcgZmlsdGVyIHBhcmFtZXRlcnMgZnJvbSBgVEFHX0tFWWAgYW5kIGBUQUdfVkFMVUVTYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogQHJldHVybnMgUGFyc2VkIHRhZyBrZXkgYW5kIHZhbHVlcy5cbiAqIEB0aHJvd3MgV2hlbiByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG1pc3Npbmcgb3IgYFRBR19WQUxVRVNgIGlzIG5vdCBhIEpTT04gc3RyaW5nIGFycmF5LlxuICovXG5jb25zdCBwYXJhbXNGcm9tRW52ID0gKCk6IEF1dG9TdGFydFBhcmFtcyA9PiB7XG4gIGNvbnN0IHRhZ0tleSA9IHByb2Nlc3MuZW52LlRBR19LRVk7XG4gIGNvbnN0IHRhZ1ZhbHVlc0pzb24gPSBwcm9jZXNzLmVudi5UQUdfVkFMVUVTO1xuICBpZiAoIXRhZ0tleSB8fCAhdGFnVmFsdWVzSnNvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgVEFHX0tFWSBvciBUQUdfVkFMVUVTLicpO1xuICB9XG4gIGxldCB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIHRhZ1ZhbHVlcyA9IEpTT04ucGFyc2UodGFnVmFsdWVzSnNvbikgYXMgc3RyaW5nW107XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignVEFHX1ZBTFVFUyBtdXN0IGJlIGEgSlNPTiBhcnJheSBvZiBzdHJpbmdzLicpO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh0YWdWYWx1ZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUQUdfVkFMVUVTIG11c3QgYmUgYSBKU09OIGFycmF5IG9mIHN0cmluZ3MuJyk7XG4gIH1cbiAgcmV0dXJuIHsgdGFnS2V5LCB0YWdWYWx1ZXMgfTtcbn07XG5cbi8qKlxuICogTm9ybWFsaXplcyBpbnZvY2F0aW9uIGlucHV0IHRvIHtAbGluayBBdXRvU3RhcnRQcmV2ZW50SW5wdXR9LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgb3IgYSByYXcgRXZlbnRCcmlkZ2UgUkRTIGV2ZW50LlxuICogQHJldHVybnMgRXZlbnQgcGx1cyB0YWcgZmlsdGVyIHBhcmFtZXRlcnMuXG4gKiBAdGhyb3dzIFdoZW4gdGhlIHBheWxvYWQgc2hhcGUgaXMgaW52YWxpZC5cbiAqL1xuY29uc3Qgbm9ybWFsaXplSW5wdXQgPSAoaW5wdXQ6IHVua25vd24pOiBBdXRvU3RhcnRQcmV2ZW50SW5wdXQgPT4ge1xuICBpZiAoaXNSYXdFdmVudChpbnB1dCkpIHtcbiAgICByZXR1cm4geyBldmVudDogaW5wdXQsIHBhcmFtczogcGFyYW1zRnJvbUVudigpIH07XG4gIH1cbiAgY29uc3QgY2FuZGlkYXRlID0gaW5wdXQgYXMgQXV0b1N0YXJ0UHJldmVudElucHV0O1xuICBpZiAoXG4gICAgdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcgJiZcbiAgICBjYW5kaWRhdGUgIT0gbnVsbCAmJlxuICAgIGNhbmRpZGF0ZS5ldmVudCAhPSBudWxsICYmXG4gICAgY2FuZGlkYXRlLnBhcmFtcyAhPSBudWxsXG4gICkge1xuICAgIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0OiBleHBlY3RlZCBSRFMgZXZlbnQgb3IgeyBldmVudCwgcGFyYW1zIH0uJyk7XG59O1xuXG4vKipcbiAqIEFXUy1zdHlsZSB0YWcgKEtleS9WYWx1ZSkuXG4gKi9cbmludGVyZmFjZSBUYWcge1xuICBLZXk/OiBzdHJpbmc7XG4gIFZhbHVlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YXRlIHNuYXBzaG90IHdoaWxlIHBvbGxpbmcgUkRTIGRlc2NyaWJlIEFQSXMuXG4gKi9cbmludGVyZmFjZSBQb2xsU3RhdGUge1xuICAvKiogQ3VycmVudCBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIHN0YXR1cy4gKi9cbiAgc3RhdHVzOiBzdHJpbmc7XG4gIC8qKiBEQiBpbnN0YW5jZSBvciBjbHVzdGVyIGlkZW50aWZpZXIuICovXG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgLyoqIFRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2U7IHByZXNlbnQgb24gdGhlIGZpcnN0IHBvbGwgb25seS4gKi9cbiAgdGFncz86IFRhZ1tdO1xufVxuXG4vKiogU2hhcmVkIFJEUyBjbGllbnQgZm9yIGRlc2NyaWJlIGFuZCBzdG9wIEFQSSBjYWxscy4gKi9cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKipcbiAqIFJEUyBzdGF0dXNlcyB0aGF0IGluZGljYXRlIGFuIGluLXByb2dyZXNzIHRyYW5zaXRpb24uXG4gKiBUaGUgaGFuZGxlciBwb2xscyBldmVyeSA1IG1pbnV0ZXMgd2hpbGUgdGhlIHJlc291cmNlIHJlbWFpbnMgaW4gb25lIG9mIHRoZXNlIHN0YXRlcy5cbiAqL1xuY29uc3QgVFJBTlNJVElPTkFMX1NUQVRVU0VTID0gbmV3IFNldChbXG4gICdzdGFydGluZycsXG4gICdjb25maWd1cmluZy1lbmhhbmNlZC1tb25pdG9yaW5nJyxcbiAgJ2JhY2tpbmctdXAnLFxuICAnbW9kaWZ5aW5nJyxcbiAgJ3N0b3BwaW5nJyxcbl0pO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzb3VyY2UgaGFzIGEgdGFnIHdpdGggdGhlIGdpdmVuIGtleSBhbmQgYSB2YWx1ZSBpbiB0aGUgYWxsb3dlZCBsaXN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUYWcga2V5IGFuZCBhbGxvd2VkIHZhbHVlcy5cbiAqIEBwYXJhbSB0YWdzIC0gUmVzb3VyY2UgdGFnIGxpc3QgKGUuZy4gZnJvbSBEZXNjcmliZURCSW5zdGFuY2VzIC8gRGVzY3JpYmVEQkNsdXN0ZXJzKS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHRhZyBtYXRjaGVzLlxuICovXG5jb25zdCBtYXRjaFRhZyA9IChwYXJhbXM6IEF1dG9TdGFydFBhcmFtcywgdGFncz86IFRhZ1tdKTogYm9vbGVhbiA9PiB7XG4gIGlmICghdGFncyB8fCB0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB2YWx1ZSA9IHRhZ3MuZmluZCh0ID0+IHQuS2V5ID09PSBwYXJhbXMudGFnS2V5KT8uVmFsdWU7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHBhcmFtcy50YWdWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xufTtcblxuLyoqXG4gKiBEdXJhYmxlIExhbWJkYSBoYW5kbGVyIGZvciBSRFMgYXV0by1zdGFydCBwcmV2ZW50aW9uLlxuICpcbiAqIFdvcmtmbG93OlxuICogMS4gV2FpdCAxIG1pbnV0ZSwgdGhlbiBwb2xsIERlc2NyaWJlREIqIHVudGlsIHRoZSByZXNvdXJjZSBsZWF2ZXMgdHJhbnNpdGlvbmFsIHN0YXR1c2VzLlxuICogMi4gUmVhZCB0YWdzIGZyb20gdGhlIGRlc2NyaWJlIHJlc3BvbnNlIGBUYWdMaXN0YDsgc2tpcCB3aGVuIHtAbGluayBtYXRjaFRhZ30gcmV0dXJucyBmYWxzZS5cbiAqIDMuIElmIHN0YXR1cyBpcyBgYXZhaWxhYmxlYCwgY2FsbCBTdG9wREIqIGFuZCBwb2xsIHVudGlsIGBzdG9wcGVkYC5cbiAqIDQuIElmIGFscmVhZHkgYHN0b3BwZWRgIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqLCByZXR1cm4ge0BsaW5rIE5vT3BSZXN1bHR9IChubyBTbGFjayBub3RpZmljYXRpb24pLlxuICogNS4gUG9zdCB0byBTbGFjayBvbmx5IHdoZW4gU3RvcERCKiB3YXMgaW52b2tlZCBhbmQgdGhlIHJlc291cmNlIHJlYWNoZWQgYHN0b3BwZWRgLlxuICpcbiAqIFRhZyBtYXRjaGluZyB1c2VzIFJEUyBEZXNjcmliZSBBUElzIG9ubHk7IFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSBpcyBub3QgdXNlZC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBgeyBldmVudCwgcGFyYW1zIH1gIGZyb20gRXZlbnRCcmlkZ2UsIG9yIGEgcmF3IFJEUyBldmVudC5cbiAqIEBwYXJhbSBjb250ZXh0IC0gRHVyYWJsZSBleGVjdXRpb24gY29udGV4dCBmb3Igc3RlcHMgYW5kIHdhaXRzLlxuICogQHJldHVybnMge0BsaW5rIFN0b3BwZWRSZXN1bHR9IG9yIHtAbGluayBOb09wUmVzdWx0fS5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgZXZlbnQgaXMgdW5zdXBwb3J0ZWQsIHNlY3JldHMgYXJlIGludmFsaWQsIG9yIHN0b3AgZGlkIG5vdCByZWFjaCBgc3RvcHBlZGAuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gd2l0aER1cmFibGVFeGVjdXRpb24oXG4gIGFzeW5jIChpbnB1dDogdW5rbm93biwgY29udGV4dDogRHVyYWJsZUNvbnRleHQpOiBQcm9taXNlPFN0b3BwZWRSZXN1bHQgfCBOb09wUmVzdWx0PiA9PiB7XG4gICAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gICAgY29uc3QgeyBkZXRhaWwsICdkZXRhaWwtdHlwZSc6IGRldGFpbFR5cGUgfSA9IGV2ZW50O1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXROYW1lID0gcHJvY2Vzcy5lbnYuU0xBQ0tfU0VDUkVUX05BTUU7XG4gICAgaWYgKCFzbGFja1NlY3JldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBTTEFDS19TRUNSRVRfTkFNRS4nKTtcbiAgICB9XG4gICAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWU8U2xhY2tTZWNyZXQ+KHNsYWNrU2VjcmV0TmFtZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXNsYWNrU2VjcmV0VmFsdWU/LnRva2VuIHx8ICFzbGFja1NlY3JldFZhbHVlPy5jaGFubmVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGNvbnRhaW4gdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNJbnN0YW5jZSA9XG4gICAgICBkZXRhaWxUeXBlID09PSAnUkRTIERCIEluc3RhbmNlIEV2ZW50JyAmJlxuICAgICAgZGV0YWlsLlNvdXJjZVR5cGUgPT09ICdEQl9JTlNUQU5DRScgJiZcbiAgICAgIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTQnO1xuXG4gICAgY29uc3QgaXNDbHVzdGVyID1cbiAgICAgIGRldGFpbFR5cGUgPT09ICdSRFMgREIgQ2x1c3RlciBFdmVudCcgJiZcbiAgICAgIGRldGFpbC5Tb3VyY2VUeXBlID09PSAnQ0xVU1RFUicgJiZcbiAgICAgIGRldGFpbC5FdmVudElEID09PSAnUkRTLUVWRU5ULTAxNTMnO1xuXG4gICAgaWYgKCFpc0luc3RhbmNlICYmICFpc0NsdXN0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVuc3VwcG9ydGVkIGV2ZW50OiBkZXRhaWwtdHlwZT0ke2RldGFpbFR5cGV9LCBTb3VyY2VUeXBlPSR7ZGV0YWlsLlNvdXJjZVR5cGV9LCBFdmVudElEPSR7ZGV0YWlsLkV2ZW50SUR9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbCBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IGRlc2NyaWJlIChhbGxvd3MgUkRTIHRvIHJlcG9ydCBhIHN0YWJsZSBzdGF0dXMpLlxuICAgIGF3YWl0IGNvbnRleHQud2FpdCh7IG1pbnV0ZXM6IDEgfSk7XG5cbiAgICAvLyBQb2xsIHVudGlsIHRoZSByZXNvdXJjZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc2l0aW9uYWwgc3RhdHVzOyBjYXB0dXJlIHN0YXR1cyBhbmQgVGFnTGlzdC5cbiAgICBjb25zdCBmaXJzdERlc2NyaWJlID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFBvbGxTdGF0ZT4oXG4gICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgICAgdGFnczogKGRiPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXIgPSByZXMuREJDbHVzdGVycz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBjbHVzdGVyPy5EQkNsdXN0ZXJJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIHRhZ3M6IChjbHVzdGVyPy5UYWdMaXN0ID8/IFtdKSBhcyBUYWdbXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHN0YXR1czogJ3N0YXJ0aW5nJyxcbiAgICAgICAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgd2FpdFN0cmF0ZWd5OiBzdGF0ZSA9PiB7XG4gICAgICAgICAgLy8gUmUtcG9sbCBldmVyeSA1IG1pbnV0ZXMgd2hpbGUgdGhlIHN0YXR1cyBpcyBzdGlsbCB0cmFuc2l0aW9uYWwuXG4gICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IHRydWUsIGRlbGF5OiB7IG1pbnV0ZXM6IDUgfSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhdmFpbGFibGUsIHN0b3BwZWQsIG9yIG90aGVyIHRlcm1pbmFsIHN0YXR1cyDigJQgcHJvY2VlZCB0byB0YWcgY2hlY2sgYW5kIHN0b3AgbG9naWMuXG4gICAgICAgICAgcmV0dXJuIHsgc2hvdWxkQ29udGludWU6IGZhbHNlIH07XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBTa2lwIHdoZW4gVGFnTGlzdCBpcyBtaXNzaW5nIG9yIGRvZXMgbm90IG1hdGNoIHRhZ0tleSAvIHRhZ1ZhbHVlcy5cbiAgICBpZiAoIW1hdGNoVGFnKHBhcmFtcywgZmlyc3REZXNjcmliZS50YWdzKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aW9uOiAnbm8tb3AnLFxuICAgICAgICByZWFzb246ICd0YWcgbm90IG1hdGNoZWQgb3Igbm90IGZvdW5kJyxcbiAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGRpZFN0b3AgPSBmYWxzZTtcbiAgICBsZXQgZmluYWxTdGF0dXMgPSBmaXJzdERlc2NyaWJlLnN0YXR1cztcblxuICAgIC8vIFdoZW4gYXZhaWxhYmxlLCBpbnZva2UgU3RvcERCKiBhbmQgcG9sbCB1bnRpbCBzdG9wcGVkLlxuICAgIGlmIChmaXJzdERlc2NyaWJlLnN0YXR1cyA9PT0gJ2F2YWlsYWJsZScpIHtcbiAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1pbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICAgIG5ldyBTdG9wREJJbnN0YW5jZUNvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1jbHVzdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IFN0b3BEQkNsdXN0ZXJDb21tYW5kKHtcbiAgICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcHBlZCA9IGF3YWl0IGNvbnRleHQud2FpdEZvckNvbmRpdGlvbjxQb2xsU3RhdGU+KFxuICAgICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgICAgaWYgKGlzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZGIgPSByZXMuREJJbnN0YW5jZXM/LlswXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyOiBkYj8uREJJbnN0YW5jZUlkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgc3RhdHVzOiBmaXJzdERlc2NyaWJlLnN0YXR1cyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGZpcnN0RGVzY3JpYmUuaWRlbnRpZmllcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhaXRTdHJhdGVneTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IHNob3VsZENvbnRpbnVlOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFRSQU5TSVRJT05BTF9TVEFUVVNFUy5oYXMoc3RhdGUuc3RhdHVzKSkge1xuICAgICAgICAgICAgICByZXR1cm4geyBzaG91bGRDb250aW51ZTogdHJ1ZSwgZGVsYXk6IHsgbWludXRlczogNSB9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdHVzIHdoaWxlIHdhaXRpbmcgZm9yIHN0b3A6ICR7c3RhdGUuc3RhdHVzfWApO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBkaWRTdG9wID0gdHJ1ZTtcbiAgICAgIGZpbmFsU3RhdHVzID0gc3RvcHBlZC5zdGF0dXM7XG4gICAgfVxuXG4gICAgLy8gQWxyZWFkeSBzdG9wcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqIChlLmcuIHN0b3BwZWQgYnkgYW5vdGhlciBwcm9jZXNzKSDigJQgbm8gU2xhY2sgbm90aWZpY2F0aW9uLlxuICAgIGlmICghZGlkU3RvcCkge1xuICAgICAgaWYgKGZpbmFsU3RhdHVzID09PSAnc3RvcHBlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3Rpb246ICduby1vcCcsXG4gICAgICAgICAgcmVhc29uOiAnYWxyZWFkeSBzdG9wcGVkJyxcbiAgICAgICAgICBzdGF0dXM6IGZpbmFsU3RhdHVzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtmaW5hbFN0YXR1c31gKTtcbiAgICB9XG5cbiAgICAvLyBGYWlsIHdoZW4gU3RvcERCKiB3YXMgY2FsbGVkIGJ1dCB0aGUgcmVzb3VyY2UgZGlkIG5vdCByZWFjaCBzdG9wcGVkLlxuICAgIGlmIChmaW5hbFN0YXR1cyAhPT0gJ3N0b3BwZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERCIHN0YXR1cyBpcyBub3Qgc3RvcHBlZCBhZnRlciBwcm9jZXNzaW5nOiAke2ZpbmFsU3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUFyblBhcnRzID0gZGV0YWlsLlNvdXJjZUFybi5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHNvdXJjZUFyblBhcnRzWzNdO1xuICAgIGNvbnN0IGFjY291bnQgPSBzb3VyY2VBcm5QYXJ0c1s0XTtcblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJDbGllbnQoc2xhY2tTZWNyZXRWYWx1ZS50b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbCA9IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbDtcblxuICAgIGF3YWl0IGNvbnRleHQuc3RlcCgncG9zdC1zbGFjay1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBjbGllbnQuY2hhdC5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIGF0dGFjaG1lbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6ICcjMzZhNjRmJyxcbiAgICAgICAgICAgIHByZXRleHQ6IGDwn5i0IFN1Y2Nlc3NmdWxseSBzdG9wcGVkIHRoZSBhdXRvbWF0aWNhbGx5IHJ1bm5pbmcgUkRTICR7ZGV0YWlsLlNvdXJjZVR5cGV9ICR7ZGV0YWlsLlNvdXJjZUlkZW50aWZpZXJ9LmAsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnQWNjb3VudCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFjY291bnQsXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogJ1JlZ2lvbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlZ2lvbixcbiAgICAgICAgICAgICAgICBzaG9ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnVHlwZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRldGFpbC5Tb3VyY2VUeXBlLFxuICAgICAgICAgICAgICAgIHNob3J0OiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgc2hvcnQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb246ICdzdG9wcGVkJyxcbiAgICAgIGZpbmFsU3RhdHVzLFxuICAgICAgYWNjb3VudCxcbiAgICAgIHJlZ2lvbixcbiAgICAgIGlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgIH07XG4gIH0sXG4pO1xuXG4iXX0=
160
+ });
161
+ };
162
+ exports.processAutoStartPrevent = processAutoStartPrevent;
163
+ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(exports.processAutoStartPrevent);
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1zdGFydC1wcmV2ZW50LmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9hdXRvLXN0YXJ0LXByZXZlbnQubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUFxRjtBQUNyRixvREFNNkI7QUFDN0IsNENBQTJDO0FBQzNDLHlFQUEwRDtBQUMxRCw2REFBdUU7QUFDdkUsbUZBa0J5QztBQUV6Qyx5REFBeUQ7QUFDekQsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLEtBQWMsRUFDZCxPQUF1QixFQUNjLEVBQUU7SUFDdkMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLDhDQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBELE1BQU0sZUFBZSxHQUFHLHVDQUFpQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxtQ0FBYSxDQUFDLE1BQU0sRUFBRTtRQUMzRixJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztJQUNILDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0UsT0FBTyx5Q0FBYSxDQUFDLGNBQWMsQ0FBYyxlQUFlLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxJQUFBLDZDQUFhLEVBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBQSxxREFBcUIsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsSUFBQSxvREFBb0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0NBQWtDLFVBQVUsZ0JBQWdCLE1BQU0sQ0FBQyxVQUFVLGFBQWEsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRyxDQUFDO0lBQ0osQ0FBQztJQUVELGtGQUFrRjtJQUNsRixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVuQyw2RkFBNkY7SUFDN0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQ2xELEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDckIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztnQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztnQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2dCQUMvRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztZQUM1QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1NBQzdDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU87WUFDTCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxTQUFTO1lBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjtZQUNuRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBVTtTQUN4QyxDQUFDO0lBQ0osQ0FBQyxFQUNEO1FBQ0UsWUFBWSxFQUFFO1lBQ1osTUFBTSxFQUFFLFVBQVU7WUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7U0FDcEM7UUFDRCxZQUFZLEVBQUUsdURBQXVCO0tBQ3RDLENBQ0YsQ0FBQztJQUVGLHFFQUFxRTtJQUNyRSxJQUFJLENBQUMsSUFBQSx3Q0FBUSxFQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLElBQUEsK0NBQWUsRUFBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBRXZDLHlEQUF5RDtJQUN6RCxNQUFNLGFBQWEsR0FBRyxJQUFBLG1EQUFtQixFQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDbEMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNsQixJQUFJLGtDQUFxQixDQUFDO29CQUN4QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2lCQUM5QyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQy9DLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDbEIsSUFBSSxpQ0FBb0IsQ0FBQztvQkFDdkIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDN0MsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDNUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSx1Q0FBMEIsQ0FBQztvQkFDN0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtpQkFDOUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0YsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUztvQkFDekMsVUFBVSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCO2lCQUNoRSxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUIsSUFBSSxzQ0FBeUIsQ0FBQztnQkFDNUIsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUM3QyxDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxPQUFPO2dCQUNMLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLFNBQVM7Z0JBQ3BDLFVBQVUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLElBQUksTUFBTSxDQUFDLGdCQUFnQjthQUNwRSxDQUFDO1FBQ0osQ0FBQyxFQUNEO1lBQ0UsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtnQkFDNUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO2FBQ3JDO1lBQ0QsWUFBWSxFQUFFLHdEQUF3QjtTQUN2QyxDQUNGLENBQUM7UUFFRixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVELHFHQUFxRztJQUNyRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLGlEQUFpQixFQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFckQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ25ELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQzVCLElBQUEsMERBQTBCLEVBQUM7WUFDekIsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU87WUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDekMsT0FBTztZQUNQLE1BQU07U0FDUCxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFBLGtEQUFrQixFQUFDO1FBQ3hCLFdBQVc7UUFDWCxPQUFPO1FBQ1AsTUFBTTtRQUNOLFVBQVUsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO0tBQ3BDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQS9LVyxRQUFBLHVCQUF1QiwyQkErS2xDO0FBRVcsUUFBQSxPQUFPLEdBQUcsSUFBQSwrQ0FBb0IsRUFBQywrQkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aER1cmFibGVFeGVjdXRpb24sIER1cmFibGVDb250ZXh0IH0gZnJvbSAnQGF3cy9kdXJhYmxlLWV4ZWN1dGlvbi1zZGstanMnO1xuaW1wb3J0IHtcbiAgUkRTQ2xpZW50LFxuICBEZXNjcmliZURCSW5zdGFuY2VzQ29tbWFuZCxcbiAgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCxcbiAgU3RvcERCSW5zdGFuY2VDb21tYW5kLFxuICBTdG9wREJDbHVzdGVyQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJkcyc7XG5pbXBvcnQgeyBXZWJDbGllbnQgfSBmcm9tICdAc2xhY2svd2ViLWFwaSc7XG5pbXBvcnQgeyBzZWNyZXRGZXRjaGVyIH0gZnJvbSAnYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlcic7XG5pbXBvcnQgeyBTdHJpY3RFbnZSZXNvbHZlciwgU3RyaWN0RW52VHlwZSB9IGZyb20gJ3N0cmljdC1lbnYtcmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgYnVpbGRTbGFja1N0b3BOb3RpZmljYXRpb24sXG4gIGJ1aWxkU3RvcHBlZFJlc3VsdCxcbiAgZGVjaWRlQWZ0ZXJUYWdNYXRjaCxcbiAgaXNEYkNsdXN0ZXJBdXRvU3RhcnQsXG4gIGlzRGJJbnN0YW5jZUF1dG9TdGFydCxcbiAgaXNTbGFja1NlY3JldCxcbiAgbWF0Y2hUYWcsXG4gIG5vcm1hbGl6ZUlucHV0LFxuICBOb09wUmVzdWx0LFxuICBwYXJzZVJkc1NvdXJjZUFybixcbiAgV2FpdFN0YXRlLFxuICBTbGFja1NlY3JldCxcbiAgU3RvcHBlZFJlc3VsdCxcbiAgVGFnLFxuICB0YWdNaXNtYXRjaE5vT3AsXG4gIHdhaXRTdHJhdGVneVVudGlsU3RhYmxlLFxuICB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQsXG59IGZyb20gJy4vYXV0by1zdGFydC1wcmV2ZW50LnByZWRpY2F0ZXMnO1xuXG4vKiogU2hhcmVkIFJEUyBjbGllbnQgZm9yIGRlc2NyaWJlIGFuZCBzdG9wIEFQSSBjYWxscy4gKi9cbmNvbnN0IHJkc0NsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuXG4vKipcbiAqIER1cmFibGUgTGFtYmRhIGhhbmRsZXIgZm9yIFJEUyBhdXRvLXN0YXJ0IHByZXZlbnRpb24uXG4gKlxuICogV29ya2Zsb3c6XG4gKiAxLiBXYWl0IDEgbWludXRlLCB0aGVuIHdhaXQgb24gRGVzY3JpYmVEQiogdW50aWwgdGhlIHJlc291cmNlIGxlYXZlcyB0cmFuc2l0aW9uYWwgc3RhdHVzZXMuXG4gKiAyLiBSZWFkIHRhZ3MgZnJvbSB0aGUgZGVzY3JpYmUgcmVzcG9uc2UgYFRhZ0xpc3RgOyBza2lwIHdoZW4ge0BsaW5rIG1hdGNoVGFnfSByZXR1cm5zIGZhbHNlLlxuICogMy4gSWYgc3RhdHVzIGlzIGBhdmFpbGFibGVgLCBjYWxsIFN0b3BEQiogYW5kIHdhaXQgdW50aWwgYHN0b3BwZWRgLlxuICogNC4gSWYgYWxyZWFkeSBgc3RvcHBlZGAgd2l0aG91dCBjYWxsaW5nIFN0b3BEQiosIHJldHVybiB7QGxpbmsgTm9PcFJlc3VsdH0gKG5vIFNsYWNrIG5vdGlmaWNhdGlvbikuXG4gKiA1LiBQb3N0IHRvIFNsYWNrIG9ubHkgd2hlbiBTdG9wREIqIHdhcyBpbnZva2VkIGFuZCB0aGUgcmVzb3VyY2UgcmVhY2hlZCBgc3RvcHBlZGAuXG4gKlxuICogVGFnIG1hdGNoaW5nIHVzZXMgUkRTIERlc2NyaWJlIEFQSXMgb25seTsgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGlzIG5vdCB1c2VkLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIGB7IGV2ZW50LCBwYXJhbXMgfWAgZnJvbSBFdmVudEJyaWRnZSBJbnB1dFRyYW5zZm9ybWVyIChzYW1lIHNoYXBlIHJlcXVpcmVkIGZvciBkaXJlY3QgSW52b2tlKS5cbiAqIEBwYXJhbSBjb250ZXh0IC0gRHVyYWJsZSBleGVjdXRpb24gY29udGV4dCBmb3Igc3RlcHMgYW5kIHdhaXRzLlxuICogQHJldHVybnMge0BsaW5rIFN0b3BwZWRSZXN1bHR9IG9yIHtAbGluayBOb09wUmVzdWx0fS5cbiAqIEB0aHJvd3MgV2hlbiB0aGUgcGF5bG9hZCBpcyBpbnZhbGlkLCByZXF1aXJlZCBlbnYgdmFycyBhcmUgbWlzc2luZywgdGhlIGV2ZW50IGlzIHVuc3VwcG9ydGVkLCBzZWNyZXRzIGFyZSBpbnZhbGlkLCBvciBzdG9wIGRpZCBub3QgcmVhY2ggYHN0b3BwZWRgLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0F1dG9TdGFydFByZXZlbnQgPSBhc3luYyAoXG4gIGlucHV0OiB1bmtub3duLFxuICBjb250ZXh0OiBEdXJhYmxlQ29udGV4dCxcbik6IFByb21pc2U8U3RvcHBlZFJlc3VsdCB8IE5vT3BSZXN1bHQ+ID0+IHtcbiAgY29uc3QgeyBldmVudCwgcGFyYW1zIH0gPSBub3JtYWxpemVJbnB1dChpbnB1dCk7XG4gIGNvbnN0IHsgZGV0YWlsLCAnZGV0YWlsLXR5cGUnOiBkZXRhaWxUeXBlIH0gPSBldmVudDtcblxuICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBTdHJpY3RFbnZSZXNvbHZlci5yZXNvbHZlKCdTTEFDS19TRUNSRVRfTkFNRScsIFN0cmljdEVudlR5cGUuU3RyaW5nLCB7XG4gICAgdHJpbTogdHJ1ZSxcbiAgfSk7XG4gIC8vIFJlcXVpcmVzIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIEV4dGVuc2lvbiAoUGFyYW1zQW5kU2VjcmV0cyBsYXllcikgYW5kXG4gIC8vIEFXU19TRVNTSU9OX1RPS0VOIGZyb20gdGhlIExhbWJkYSBydW50aW1lIChhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIF4wLjYrKS5cbiAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZSA9IGF3YWl0IGNvbnRleHQuc3RlcCgnZmV0Y2gtc2xhY2stc2VjcmV0JywgYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBzZWNyZXRGZXRjaGVyLmdldFNlY3JldFZhbHVlPFNsYWNrU2VjcmV0PihzbGFja1NlY3JldE5hbWUpO1xuICB9KTtcblxuICBpZiAoIWlzU2xhY2tTZWNyZXQoc2xhY2tTZWNyZXRWYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGJlIEpTT04gd2l0aCBub24tZW1wdHkgdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gIH1cblxuICBjb25zdCBpc0luc3RhbmNlID0gaXNEYkluc3RhbmNlQXV0b1N0YXJ0KGRldGFpbFR5cGUsIGRldGFpbCk7XG4gIGNvbnN0IGlzQ2x1c3RlciA9IGlzRGJDbHVzdGVyQXV0b1N0YXJ0KGRldGFpbFR5cGUsIGRldGFpbCk7XG5cbiAgaWYgKCFpc0luc3RhbmNlICYmICFpc0NsdXN0ZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgZXZlbnQ6IGRldGFpbC10eXBlPSR7ZGV0YWlsVHlwZX0sIFNvdXJjZVR5cGU9JHtkZXRhaWwuU291cmNlVHlwZX0sIEV2ZW50SUQ9JHtkZXRhaWwuRXZlbnRJRH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBJbml0aWFsIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3QgZGVzY3JpYmUgKGFsbG93cyBSRFMgdG8gcmVwb3J0IGEgc3RhYmxlIHN0YXR1cykuXG4gIGF3YWl0IGNvbnRleHQud2FpdCh7IG1pbnV0ZXM6IDEgfSk7XG5cbiAgLy8gV2FpdCB1bnRpbCB0aGUgcmVzb3VyY2UgaXMgbm8gbG9uZ2VyIGluIGEgdHJhbnNpdGlvbmFsIHN0YXR1czsgY2FwdHVyZSBzdGF0dXMgYW5kIFRhZ0xpc3QuXG4gIGNvbnN0IGZpcnN0RGVzY3JpYmUgPSBhd2FpdCBjb250ZXh0LndhaXRGb3JDb25kaXRpb248V2FpdFN0YXRlPihcbiAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICBpZiAoaXNJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYiA9IHJlcy5EQkluc3RhbmNlcz8uWzBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGRiPy5EQkluc3RhbmNlSWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB0YWdzOiAoZGI/LlRhZ0xpc3QgPz8gW10pIGFzIFRhZ1tdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IERlc2NyaWJlREJDbHVzdGVyc0NvbW1hbmQoe1xuICAgICAgICAgIERCQ2x1c3RlcklkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBjbHVzdGVyID0gcmVzLkRCQ2x1c3RlcnM/LlswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogY2x1c3Rlcj8uU3RhdHVzID8/ICd1bmtub3duJyxcbiAgICAgICAgaWRlbnRpZmllcjogY2x1c3Rlcj8uREJDbHVzdGVySWRlbnRpZmllciA/PyBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgdGFnczogKGNsdXN0ZXI/LlRhZ0xpc3QgPz8gW10pIGFzIFRhZ1tdLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICBzdGF0dXM6ICdzdGFydGluZycsXG4gICAgICAgIGlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICAgIHdhaXRTdHJhdGVneTogd2FpdFN0cmF0ZWd5VW50aWxTdGFibGUsXG4gICAgfSxcbiAgKTtcblxuICAvLyBTa2lwIHdoZW4gVGFnTGlzdCBpcyBtaXNzaW5nIG9yIGRvZXMgbm90IG1hdGNoIHRhZ0tleSAvIHRhZ1ZhbHVlcy5cbiAgaWYgKCFtYXRjaFRhZyhwYXJhbXMsIGZpcnN0RGVzY3JpYmUudGFncykpIHtcbiAgICByZXR1cm4gdGFnTWlzbWF0Y2hOb09wKGZpcnN0RGVzY3JpYmUuc3RhdHVzKTtcbiAgfVxuXG4gIGxldCBkaWRTdG9wID0gZmFsc2U7XG4gIGxldCBmaW5hbFN0YXR1cyA9IGZpcnN0RGVzY3JpYmUuc3RhdHVzO1xuXG4gIC8vIFdoZW4gYXZhaWxhYmxlLCBpbnZva2UgU3RvcERCKiBhbmQgd2FpdCB1bnRpbCBzdG9wcGVkLlxuICBjb25zdCBhZnRlclRhZ01hdGNoID0gZGVjaWRlQWZ0ZXJUYWdNYXRjaChmaXJzdERlc2NyaWJlLnN0YXR1cyk7XG4gIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICdzdG9wJykge1xuICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICBhd2FpdCBjb250ZXh0LnN0ZXAoJ3N0b3AtZGItaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHJkc0NsaWVudC5zZW5kKFxuICAgICAgICAgIG5ldyBTdG9wREJJbnN0YW5jZUNvbW1hbmQoe1xuICAgICAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGNvbnRleHQuc3RlcCgnc3RvcC1kYi1jbHVzdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgU3RvcERCQ2x1c3RlckNvbW1hbmQoe1xuICAgICAgICAgICAgREJDbHVzdGVySWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9wcGVkID0gYXdhaXQgY29udGV4dC53YWl0Rm9yQ29uZGl0aW9uPFdhaXRTdGF0ZT4oXG4gICAgICBhc3luYyAoX3N0YXRlLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChpc0luc3RhbmNlKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmRzQ2xpZW50LnNlbmQoXG4gICAgICAgICAgICBuZXcgRGVzY3JpYmVEQkluc3RhbmNlc0NvbW1hbmQoe1xuICAgICAgICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRiID0gcmVzLkRCSW5zdGFuY2VzPy5bMF07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogZGI/LkRCSW5zdGFuY2VTdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZGI/LkRCSW5zdGFuY2VJZGVudGlmaWVyID8/IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCByZHNDbGllbnQuc2VuZChcbiAgICAgICAgICBuZXcgRGVzY3JpYmVEQkNsdXN0ZXJzQ29tbWFuZCh7XG4gICAgICAgICAgICBEQkNsdXN0ZXJJZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2x1c3RlciA9IHJlcy5EQkNsdXN0ZXJzPy5bMF07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzOiBjbHVzdGVyPy5TdGF0dXMgPz8gJ3Vua25vd24nLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGNsdXN0ZXI/LkRCQ2x1c3RlcklkZW50aWZpZXIgPz8gZGV0YWlsLlNvdXJjZUlkZW50aWZpZXIsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBzdGF0dXM6IGZpcnN0RGVzY3JpYmUuc3RhdHVzLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGZpcnN0RGVzY3JpYmUuaWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgd2FpdFN0cmF0ZWd5OiB3YWl0U3RyYXRlZ3lVbnRpbFN0b3BwZWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBkaWRTdG9wID0gdHJ1ZTtcbiAgICBmaW5hbFN0YXR1cyA9IHN0b3BwZWQuc3RhdHVzO1xuICB9XG5cbiAgLy8gQWxyZWFkeSBzdG9wcGVkIHdpdGhvdXQgY2FsbGluZyBTdG9wREIqIChlLmcuIHN0b3BwZWQgYnkgYW5vdGhlciBwcm9jZXNzKSDigJQgbm8gU2xhY2sgbm90aWZpY2F0aW9uLlxuICBpZiAoIWRpZFN0b3ApIHtcbiAgICBpZiAoYWZ0ZXJUYWdNYXRjaC5raW5kID09PSAnbm8tb3AnKSB7XG4gICAgICByZXR1cm4gYWZ0ZXJUYWdNYXRjaC5yZXN1bHQ7XG4gICAgfVxuICAgIGlmIChhZnRlclRhZ01hdGNoLmtpbmQgPT09ICdlcnJvcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihhZnRlclRhZ01hdGNoLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZhaWwgd2hlbiBTdG9wREIqIHdhcyBjYWxsZWQgYnV0IHRoZSByZXNvdXJjZSBkaWQgbm90IHJlYWNoIHN0b3BwZWQuXG4gIGlmIChmaW5hbFN0YXR1cyAhPT0gJ3N0b3BwZWQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEQiBzdGF0dXMgaXMgbm90IHN0b3BwZWQgYWZ0ZXIgcHJvY2Vzc2luZzogJHtmaW5hbFN0YXR1c31gKTtcbiAgfVxuXG4gIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBwYXJzZVJkc1NvdXJjZUFybihkZXRhaWwuU291cmNlQXJuKTtcblxuICBjb25zdCBjbGllbnQgPSBuZXcgV2ViQ2xpZW50KHNsYWNrU2VjcmV0VmFsdWUudG9rZW4pO1xuXG4gIGF3YWl0IGNvbnRleHQuc3RlcCgncG9zdC1zbGFjay1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gY2xpZW50LmNoYXQucG9zdE1lc3NhZ2UoXG4gICAgICBidWlsZFNsYWNrU3RvcE5vdGlmaWNhdGlvbih7XG4gICAgICAgIGNoYW5uZWw6IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbCxcbiAgICAgICAgc291cmNlVHlwZTogZGV0YWlsLlNvdXJjZVR5cGUsXG4gICAgICAgIHNvdXJjZUlkZW50aWZpZXI6IGRldGFpbC5Tb3VyY2VJZGVudGlmaWVyLFxuICAgICAgICBhY2NvdW50LFxuICAgICAgICByZWdpb24sXG4gICAgICB9KSxcbiAgICApO1xuICB9KTtcblxuICByZXR1cm4gYnVpbGRTdG9wcGVkUmVzdWx0KHtcbiAgICBmaW5hbFN0YXR1cyxcbiAgICBhY2NvdW50LFxuICAgIHJlZ2lvbixcbiAgICBpZGVudGlmaWVyOiBkZXRhaWwuU291cmNlSWRlbnRpZmllcixcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IHdpdGhEdXJhYmxlRXhlY3V0aW9uKHByb2Nlc3NBdXRvU3RhcnRQcmV2ZW50KTtcbiJdfQ==