@aws-cdk/toolkit-lib 1.21.2 → 1.21.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.yarnrc.yml ADDED
@@ -0,0 +1,3 @@
1
+ # ~~ Generated by projen. To modify, edit .projenrc.js and run "yarn projen".
2
+
3
+ {}
package/build-info.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "comment": "Generated at 2026-04-08T18:41:42Z by build-info.sh",
3
- "commit": "2a848bc"
2
+ "comment": "Generated at 2026-04-16T15:24:03Z by build-info.sh",
3
+ "commit": "3a90862"
4
4
  }
package/db.json.gz CHANGED
Binary file
@@ -0,0 +1,39 @@
1
+ import type { ChangeSetDeployment, DeploymentMethod } from '..';
2
+ export declare const DEFAULT_DEPLOY_CHANGE_SET_NAME = "cdk-deploy-change-set";
3
+ /**
4
+ * Execute a previously created change set.
5
+ * This is an internal deployment method used by the two-phase deploy flow.
6
+ */
7
+ export interface ExecuteChangeSetDeployment {
8
+ readonly method: 'execute-change-set';
9
+ readonly changeSetName: string;
10
+ }
11
+ /**
12
+ * A change set deployment that will execute.
13
+ */
14
+ export type ExecutingChangeSetDeployment = ChangeSetDeployment & {
15
+ execute: true;
16
+ };
17
+ /**
18
+ * A change set deployment that will not execute.
19
+ */
20
+ export type NonExecutingChangeSetDeployment = ChangeSetDeployment & {
21
+ execute: false;
22
+ };
23
+ /**
24
+ * Returns true if the deployment method is a change-set deployment.
25
+ */
26
+ export declare function isChangeSetDeployment(method?: DeploymentMethod): method is ChangeSetDeployment;
27
+ /**
28
+ * Returns true if the deployment method is a change-set deployment that will execute.
29
+ */
30
+ export declare function isExecutingChangeSetDeployment(method?: DeploymentMethod): method is ExecutingChangeSetDeployment;
31
+ /**
32
+ * Returns true if the deployment method is a change-set deployment that will not execute.
33
+ */
34
+ export declare function isNonExecutingChangeSetDeployment(method?: DeploymentMethod): method is NonExecutingChangeSetDeployment;
35
+ /**
36
+ * Create an ExecuteChangeSetDeployment from a ChangeSetDeployment.
37
+ */
38
+ export declare function toExecuteChangeSetDeployment(method: ChangeSetDeployment): ExecuteChangeSetDeployment;
39
+ //# sourceMappingURL=deployment-method.d.ts.map
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_DEPLOY_CHANGE_SET_NAME = void 0;
4
+ exports.isChangeSetDeployment = isChangeSetDeployment;
5
+ exports.isExecutingChangeSetDeployment = isExecutingChangeSetDeployment;
6
+ exports.isNonExecutingChangeSetDeployment = isNonExecutingChangeSetDeployment;
7
+ exports.toExecuteChangeSetDeployment = toExecuteChangeSetDeployment;
8
+ exports.DEFAULT_DEPLOY_CHANGE_SET_NAME = 'cdk-deploy-change-set';
9
+ /**
10
+ * Returns true if the deployment method is a change-set deployment.
11
+ */
12
+ function isChangeSetDeployment(method) {
13
+ return method?.method === 'change-set';
14
+ }
15
+ /**
16
+ * Returns true if the deployment method is a change-set deployment that will execute.
17
+ */
18
+ function isExecutingChangeSetDeployment(method) {
19
+ return isChangeSetDeployment(method) && (method.execute ?? true);
20
+ }
21
+ /**
22
+ * Returns true if the deployment method is a change-set deployment that will not execute.
23
+ */
24
+ function isNonExecutingChangeSetDeployment(method) {
25
+ return isChangeSetDeployment(method) && (method.execute === false);
26
+ }
27
+ /**
28
+ * Create an ExecuteChangeSetDeployment from a ChangeSetDeployment.
29
+ */
30
+ function toExecuteChangeSetDeployment(method) {
31
+ return {
32
+ method: 'execute-change-set',
33
+ changeSetName: method.changeSetName ?? exports.DEFAULT_DEPLOY_CHANGE_SET_NAME,
34
+ };
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudC1tZXRob2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3ltZW50LW1ldGhvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwQkEsc0RBRUM7QUFLRCx3RUFFQztBQUtELDhFQUVDO0FBS0Qsb0VBS0M7QUFsRFksUUFBQSw4QkFBOEIsR0FBRyx1QkFBdUIsQ0FBQztBQXFCdEU7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxNQUF5QjtJQUM3RCxPQUFPLE1BQU0sRUFBRSxNQUFNLEtBQUssWUFBWSxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDhCQUE4QixDQUFDLE1BQXlCO0lBQ3RFLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlDQUFpQyxDQUFDLE1BQXlCO0lBQ3pFLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLE1BQTJCO0lBQ3RFLE9BQU87UUFDTCxNQUFNLEVBQUUsb0JBQW9CO1FBQzVCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxJQUFJLHNDQUE4QjtLQUN0RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2hhbmdlU2V0RGVwbG95bWVudCwgRGVwbG95bWVudE1ldGhvZCB9IGZyb20gJy4uJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfREVQTE9ZX0NIQU5HRV9TRVRfTkFNRSA9ICdjZGstZGVwbG95LWNoYW5nZS1zZXQnO1xuXG4vKipcbiAqIEV4ZWN1dGUgYSBwcmV2aW91c2x5IGNyZWF0ZWQgY2hhbmdlIHNldC5cbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZGVwbG95bWVudCBtZXRob2QgdXNlZCBieSB0aGUgdHdvLXBoYXNlIGRlcGxveSBmbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVDaGFuZ2VTZXREZXBsb3ltZW50IHtcbiAgcmVhZG9ubHkgbWV0aG9kOiAnZXhlY3V0ZS1jaGFuZ2Utc2V0JztcbiAgcmVhZG9ubHkgY2hhbmdlU2V0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgY2hhbmdlIHNldCBkZXBsb3ltZW50IHRoYXQgd2lsbCBleGVjdXRlLlxuICovXG5leHBvcnQgdHlwZSBFeGVjdXRpbmdDaGFuZ2VTZXREZXBsb3ltZW50ID0gQ2hhbmdlU2V0RGVwbG95bWVudCAmIHsgZXhlY3V0ZTogdHJ1ZSB9O1xuXG4vKipcbiAqIEEgY2hhbmdlIHNldCBkZXBsb3ltZW50IHRoYXQgd2lsbCBub3QgZXhlY3V0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgTm9uRXhlY3V0aW5nQ2hhbmdlU2V0RGVwbG95bWVudCA9IENoYW5nZVNldERlcGxveW1lbnQgJiB7IGV4ZWN1dGU6IGZhbHNlIH07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBkZXBsb3ltZW50IG1ldGhvZCBpcyBhIGNoYW5nZS1zZXQgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2hhbmdlU2V0RGVwbG95bWVudChtZXRob2Q/OiBEZXBsb3ltZW50TWV0aG9kKTogbWV0aG9kIGlzIENoYW5nZVNldERlcGxveW1lbnQge1xuICByZXR1cm4gbWV0aG9kPy5tZXRob2QgPT09ICdjaGFuZ2Utc2V0Jztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRlcGxveW1lbnQgbWV0aG9kIGlzIGEgY2hhbmdlLXNldCBkZXBsb3ltZW50IHRoYXQgd2lsbCBleGVjdXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeGVjdXRpbmdDaGFuZ2VTZXREZXBsb3ltZW50KG1ldGhvZD86IERlcGxveW1lbnRNZXRob2QpOiBtZXRob2QgaXMgRXhlY3V0aW5nQ2hhbmdlU2V0RGVwbG95bWVudCB7XG4gIHJldHVybiBpc0NoYW5nZVNldERlcGxveW1lbnQobWV0aG9kKSAmJiAobWV0aG9kLmV4ZWN1dGUgPz8gdHJ1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBkZXBsb3ltZW50IG1ldGhvZCBpcyBhIGNoYW5nZS1zZXQgZGVwbG95bWVudCB0aGF0IHdpbGwgbm90IGV4ZWN1dGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vbkV4ZWN1dGluZ0NoYW5nZVNldERlcGxveW1lbnQobWV0aG9kPzogRGVwbG95bWVudE1ldGhvZCk6IG1ldGhvZCBpcyBOb25FeGVjdXRpbmdDaGFuZ2VTZXREZXBsb3ltZW50IHtcbiAgcmV0dXJuIGlzQ2hhbmdlU2V0RGVwbG95bWVudChtZXRob2QpICYmIChtZXRob2QuZXhlY3V0ZSA9PT0gZmFsc2UpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBFeGVjdXRlQ2hhbmdlU2V0RGVwbG95bWVudCBmcm9tIGEgQ2hhbmdlU2V0RGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRXhlY3V0ZUNoYW5nZVNldERlcGxveW1lbnQobWV0aG9kOiBDaGFuZ2VTZXREZXBsb3ltZW50KTogRXhlY3V0ZUNoYW5nZVNldERlcGxveW1lbnQge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ2V4ZWN1dGUtY2hhbmdlLXNldCcsXG4gICAgY2hhbmdlU2V0TmFtZTogbWV0aG9kLmNoYW5nZVNldE5hbWUgPz8gREVGQVVMVF9ERVBMT1lfQ0hBTkdFX1NFVF9OQU1FLFxuICB9O1xufVxuIl19
@@ -1,3 +1,4 @@
1
1
  export * from './deploy-options';
2
+ export * from './deployment-method';
2
3
  export * from './helpers';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -15,5 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./deploy-options"), exports);
18
+ __exportStar(require("./deployment-method"), exports);
18
19
  __exportStar(require("./helpers"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLDRDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGVwbG95LW9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzJztcblxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLHNEQUFvQztBQUNwQyw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RlcGxveS1vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vZGVwbG95bWVudC1tZXRob2QnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzJztcblxuIl19
@@ -6,6 +6,7 @@ const node_util_1 = require("node:util");
6
6
  const credential_providers_1 = require("@aws-sdk/credential-providers");
7
7
  const ec2_metadata_service_1 = require("@aws-sdk/ec2-metadata-service");
8
8
  const shared_ini_file_loader_1 = require("@smithy/shared-ini-file-loader");
9
+ const ec2_detection_1 = require("./ec2-detection");
9
10
  const provider_caching_1 = require("./provider-caching");
10
11
  const toolkit_error_1 = require("../../toolkit/toolkit-error");
11
12
  const private_1 = require("../io/private");
@@ -103,6 +104,13 @@ class AwsCliCompatible {
103
104
  *
104
105
  * The NodeProviderChain is already cached.
105
106
  */
107
+ // Skip the IMDS credential provider if we're not on EC2, to avoid a
108
+ // 1-2 second timeout on non-EC2 machines.
109
+ if (process.env.AWS_EC2_METADATA_DISABLED === undefined && !(0, ec2_detection_1.isEc2Instance)()) {
110
+ process.env.AWS_EC2_METADATA_DISABLED = 'true';
111
+ }
112
+ // This chain respects the AWS_EC2_METADATA_DISABLED envvar, which can otherwise
113
+ // not be easily disabled using a property.
106
114
  const nodeProviderChain = (0, credential_providers_1.fromNodeProviderChain)({
107
115
  profile: envProfile,
108
116
  clientConfig,
@@ -153,6 +161,9 @@ class AwsCliCompatible {
153
161
  * @returns The region for the instance identity
154
162
  */
155
163
  async regionFromMetadataService() {
164
+ if (!(0, ec2_detection_1.isEc2Instance)()) {
165
+ return undefined;
166
+ }
156
167
  await this.ioHelper.defaults.debug('Looking up AWS region in the EC2 Instance Metadata Service (IMDS).');
157
168
  try {
158
169
  const metadataService = new ec2_metadata_service_1.MetadataService({
@@ -243,4 +254,4 @@ function sdkRequestHandler(agent) {
243
254
  httpAgent: agent,
244
255
  };
245
256
  }
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2xpLWNvbXBhdGlibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3NjbGktY29tcGF0aWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErUUEsOENBT0M7QUFyUkQseUNBQW1DO0FBRW5DLHdFQUErRztBQUMvRyx3RUFBZ0U7QUFDaEUsMkVBQXVFO0FBRXZFLHlEQUF5RDtBQUV6RCwrREFBa0U7QUFDbEUsMkNBQWtEO0FBRWxELE1BQU0sMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQjs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDVixRQUFRLENBQVc7SUFDbkIsY0FBYyxDQUF5QjtJQUN2QyxNQUFNLENBQWM7SUFFckMsWUFBbUIsUUFBa0IsRUFBRSxjQUFzQyxFQUFFLE1BQW1CO1FBQ2hHLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQWdCO1FBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDM0QsT0FBTztZQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLHNCQUFzQixDQUNqQyxVQUFrQyxFQUFFO1FBRXBDLE1BQU0sWUFBWSxHQUFHO1lBQ25CLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxlQUFlLEVBQUUs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QUMxQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7SUFDN0UsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0lBRXRGLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUM7UUFFeEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZGLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQU9ELFNBQWdCLGlCQUFpQixDQUFDLEtBQWE7SUFDN0MsT0FBTztRQUNMLGlCQUFpQixFQUFFLDBCQUEwQjtRQUM3QyxjQUFjLEVBQUUsZUFBZTtRQUMvQixVQUFVLEVBQUUsS0FBSztRQUNqQixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWdlbnQgfSBmcm9tICdub2RlOmh0dHBzJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxQcm92aWRlciB9IGZyb20gJ0Bhd3MtY2RrL2NsaS1wbHVnaW4tY29udHJhY3QnO1xuaW1wb3J0IHsgY3JlYXRlQ3JlZGVudGlhbENoYWluLCBmcm9tRW52LCBmcm9tSW5pLCBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4gfSBmcm9tICdAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICdAYXdzLXNkay9lYzItbWV0YWRhdGEtc2VydmljZSc7XG5pbXBvcnQgeyBsb2FkU2hhcmVkQ29uZmlnRmlsZXMgfSBmcm9tICdAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXInO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SGFuZGxlclNldHRpbmdzIH0gZnJvbSAnLi9iYXNlLWNyZWRlbnRpYWxzJztcbmltcG9ydCB7IG1ha2VDYWNoaW5nUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVyLWNhY2hpbmcnO1xuaW1wb3J0IHR5cGUgeyBJU2RrTG9nZ2VyIH0gZnJvbSAnLi9zZGstbG9nZ2VyJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuY29uc3QgREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDMwMDAwMDtcblxuLyoqXG4gKiBCZWhhdmlvcnMgdG8gbWF0Y2ggQVdTIENMSVxuICpcbiAqIFNlZSB0aGVzZSBsaW5rczpcbiAqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC90b3BpYy9jb25maWctdmFycy5odG1sXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC91c2VyZ3VpZGUvY2xpLWNvbmZpZ3VyZS1lbnZ2YXJzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0NsaUNvbXBhdGlibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0SGFuZGxlcjogUmVxdWVzdEhhbmRsZXJTZXR0aW5ncztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI/OiBJU2RrTG9nZ2VyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpb0hlbHBlcjogSW9IZWxwZXIsIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlclNldHRpbmdzLCBsb2dnZXI/OiBJU2RrTG9nZ2VyKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICAgIHRoaXMucmVxdWVzdEhhbmRsZXIgPSByZXF1ZXN0SGFuZGxlcjtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBiYXNlQ29uZmlnKHByb2ZpbGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgY3JlZGVudGlhbFByb3ZpZGVyOiBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXI7IGRlZmF1bHRSZWdpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbFByb3ZpZGVyID0gYXdhaXQgdGhpcy5jcmVkZW50aWFsQ2hhaW5CdWlsZGVyKHtcbiAgICAgIHByb2ZpbGUsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRSZWdpb24gPSBhd2FpdCB0aGlzLnJlZ2lvbihwcm9maWxlKTtcbiAgICByZXR1cm4geyBjcmVkZW50aWFsUHJvdmlkZXIsIGRlZmF1bHRSZWdpb24gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiBBV1MgQ0xJLWNvbXBhdGlibGUgY3JlZGVudGlhbCBjaGFpbiBwcm92aWRlclxuICAgKlxuICAgKiBUaGUgY3JlZGVudGlhbCBjaGFpbiByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWNoaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWRlbnRpYWxDaGFpbkJ1aWxkZXIoXG4gICAgb3B0aW9uczogQ3JlZGVudGlhbENoYWluT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxQcm92aWRlcj4ge1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHtcbiAgICAgIHJlcXVlc3RIYW5kbGVyOiB0aGlzLnJlcXVlc3RIYW5kbGVyLFxuICAgICAgY3VzdG9tVXNlckFnZW50OiAnYXdzLWNkaycsXG4gICAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyLFxuICAgIH07XG5cbiAgICAvLyBTdXBlciBoYWNreSBzb2x1dGlvbiB0byBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzMyNTEwLCBwcm9wb3NlZCBieSB0aGUgU0RLIHRlYW0uXG4gICAgLy9cbiAgICAvLyBTdW1tYXJ5IG9mIHRoZSBwcm9ibGVtOiB3ZSB3ZXJlIHJlYWRpbmcgdGhlIHJlZ2lvbiBmcm9tIHRoZSBjb25maWcgZmlsZSBhbmQgcGFzc2luZyBpdCB0b1xuICAgIC8vIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVycy4gSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2YgU1NPLCB0aGlzIG1ha2VzIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyXG4gICAgLy8gdXNlIHRoYXQgcmVnaW9uIHRvIGRvIHRoZSBTU08gZmxvdywgd2hpY2ggaXMgaW5jb3JyZWN0LiBUaGUgcmVnaW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yXG4gICAgLy8gdGhhdCBpcyB0aGUgb25lIHNldCBpbiB0aGUgc3NvX3Nlc3Npb24gc2VjdGlvbiBvZiB0aGUgY29uZmlnIGZpbGUuXG4gICAgLy9cbiAgICAvLyBUaGUgaWRlYSBoZXJlOiB0aGUgXCJjbGllbnRDb25maWdcIiBpcyBmb3IgY29uZmlndXJpbmcgdGhlIGlubmVyIGF1dGggY2xpZW50IGRpcmVjdGx5LFxuICAgIC8vIGFuZCBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHksIHdoZXJlYXMgXCJwYXJlbnRDbGllbnRDb25maWdcIiBpcyB0aGUgdXBwZXIgZGF0YSBjbGllbnRcbiAgICAvLyBhbmQgaGFzIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIHNzb19yZWdpb24gYnV0IHN0aWxsIGhpZ2hlciBwcmlvcml0eSB0aGFuIFNUUyBnbG9iYWwgcmVnaW9uLlxuICAgIGNvbnN0IHBhcmVudENsaWVudENvbmZpZyA9IHtcbiAgICAgIHJlZ2lvbjogYXdhaXQgdGhpcy5yZWdpb24ob3B0aW9ucy5wcm9maWxlKSxcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBtYXRjaGVkIEFXUyBDTEkgYmVoYXZpb3I6XG4gICAgICpcbiAgICAgKiBJZiBhIHByb2ZpbGUgaXMgZXhwbGljaXRseSBzZXQgdXNpbmcgYC0tcHJvZmlsZWAsXG4gICAgICogd2UgdXNlIHRoYXQgdG8gdGhlIGV4Y2x1c2lvbiBvZiBldmVyeXRoaW5nIGVsc2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIEFXU19QUk9GSUxFLFxuICAgICAqIGVudmlyb25tZW50IGNyZWRlbnRpYWxzIHN0aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIEFXU19QUk9GSUxFXG4gICAgICovXG4gICAgaWYgKG9wdGlvbnMucHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG1ha2VDYWNoaW5nUHJvdmlkZXIoZnJvbUluaSh7XG4gICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgaWdub3JlQ2FjaGU6IHRydWUsXG4gICAgICAgIG1mYUNvZGVQcm92aWRlcjogdGhpcy50b2tlbkNvZGVGbi5iaW5kKHRoaXMpLFxuICAgICAgICBjbGllbnRDb25maWcsXG4gICAgICAgIHBhcmVudENsaWVudENvbmZpZyxcbiAgICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZQcm9maWxlID0gcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgfHwgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUFJPRklMRTtcblxuICAgIC8qKlxuICAgICAqIEVudiBBV1MgLSBFbnZpcm9ubWVudENyZWRlbnRpYWxzIHdpdGggc3RyaW5nIEFXU1xuICAgICAqIEVudiBBbWF6b24gLSBFbnZpcm9ubWVudENyZWRlbnRpYWxzIHdpdGggc3RyaW5nIEFNQVpPTlxuICAgICAqIFByb2ZpbGUgQ3JlZGVudGlhbHMgLSBQYXRjaGVkU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzIHdpdGggaW1wbGljaXQgcHJvZmlsZSwgY3JlZGVudGlhbHMgZmlsZSwgaHR0cCBvcHRpb25zLCBhbmQgdG9rZW4gZm5cbiAgICAgKiAgICBTU08gd2l0aCBpbXBsaWNpdCBwcm9maWxlIG9ubHlcbiAgICAgKiAgICBTaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMgd2l0aCBpbXBsaWNpdCBwcm9maWxlIGFuZCBwcmVmZXJTdGF0aWNDcmVkZW50aWFscyB0cnVlIChwcm9maWxlIHdpdGggc291cmNlX3Byb2ZpbGUpXG4gICAgICogICAgU2hhcmVkIENyZWRlbnRpYWwgZmlsZSB0aGF0IHBvaW50cyB0byBFbnZpcm9ubWVudCBDcmVkZW50aWFscyB3aXRoIEFXUyBwcmVmaXhcbiAgICAgKiAgICBTaGFyZWQgQ3JlZGVudGlhbCBmaWxlIHRoYXQgcG9pbnRzIHRvIEVDMiBNZXRhZGF0YVxuICAgICAqICAgIFNoYXJlZCBDcmVkZW50aWFsIGZpbGUgdGhhdCBwb2ludHMgdG8gRUNTIENyZWRlbnRpYWxzXG4gICAgICogU1NPIENyZWRlbnRpYWxzIC0gU3NvQ3JlZGVudGlhbHMgd2l0aCBpbXBsaWNpdCBwcm9maWxlIGFuZCBodHRwIG9wdGlvbnNcbiAgICAgKiBQcm9jZXNzQ3JlZGVudGlhbHMgd2l0aCBpbXBsaWNpdCBwcm9maWxlXG4gICAgICogRUNTIENyZWRlbnRpYWxzIC0gRUNTQ3JlZGVudGlhbHMgd2l0aCBubyBpbnB1dCBPUiBXZWIgSWRlbnRpdHkgLSBUb2tlbkZpbGVXZWJJZGVudGl0eUNyZWRlbnRpYWxzIHdpdGggbm8gaW5wdXQgT1IgRUMyIE1ldGFkYXRhIC0gRUMyTWV0YWRhdGFDcmVkZW50aWFscyB3aXRoIG5vIGlucHV0XG4gICAgICpcbiAgICAgKiBUaGVzZSB0cmFuc2xhdGUgdG86XG4gICAgICogZnJvbUVudigpXG4gICAgICogZnJvbVNTTygpL2Zyb21JbmkoKVxuICAgICAqIGZyb21Qcm9jZXNzKClcbiAgICAgKiBmcm9tQ29udGFpbmVyTWV0YWRhdGEoKVxuICAgICAqIGZyb21Ub2tlbkZpbGUoKVxuICAgICAqIGZyb21JbnN0YW5jZU1ldGFkYXRhKClcbiAgICAgKlxuICAgICAqIFRoZSBOb2RlUHJvdmlkZXJDaGFpbiBpcyBhbHJlYWR5IGNhY2hlZC5cbiAgICAgKi9cbiAgICBjb25zdCBub2RlUHJvdmlkZXJDaGFpbiA9IGZyb21Ob2RlUHJvdmlkZXJDaGFpbih7XG4gICAgICBwcm9maWxlOiBlbnZQcm9maWxlLFxuICAgICAgY2xpZW50Q29uZmlnLFxuICAgICAgcGFyZW50Q2xpZW50Q29uZmlnLFxuICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgIG1mYUNvZGVQcm92aWRlcjogdGhpcy50b2tlbkNvZGVGbi5iaW5kKHRoaXMpLFxuICAgICAgaWdub3JlQ2FjaGU6IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2hvdWxkUHJpb3JpdGl6ZUVudigpXG4gICAgICA/IGNyZWF0ZUNyZWRlbnRpYWxDaGFpbihmcm9tRW52KCksIG5vZGVQcm92aWRlckNoYWluKS5leHBpcmVBZnRlcig2MCAqIDYwXzAwMClcbiAgICAgIDogbm9kZVByb3ZpZGVyQ2hhaW47XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gZ2V0IHRoZSByZWdpb24gZnJvbSBhIG51bWJlciBvZiBzb3VyY2VzIGFuZCBmYWxscyBiYWNrIHRvIHVzLWVhc3QtMSBpZiBubyByZWdpb24gY2FuIGJlIGZvdW5kLFxuICAgKiBhcyBpcyBkb25lIGluIHRoZSBBV1MgQ0xJLlxuICAgKlxuICAgKiBUaGUgb3JkZXIgb2YgcHJpb3JpdHkgaXMgdGhlIGZvbGxvd2luZzpcbiAgICpcbiAgICogMS4gRW52aXJvbm1lbnQgdmFyaWFibGVzIHNwZWNpZnlpbmcgcmVnaW9uLCB3aXRoIGJvdGggYW4gQVdTIHByZWZpeCBhbmQgQU1BWk9OIHByZWZpeFxuICAgKiAgICB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYW5kIHdpdGhvdXQgYERFRkFVTFRgIGluIHRoZSBuYW1lIGJlY2F1c2VcbiAgICogICAgTGFtYmRhIGFuZCBDb2RlQnVpbGQgc2V0IHRoZSAkQVdTX1JFR0lPTiB2YXJpYWJsZS5cbiAgICogMi4gUmVnaW9ucyBsaXN0ZWQgaW4gdGhlIFNoYXJlZCBJbmkgRmlsZXMgLSBGaXJzdCBjaGVja2luZyBmb3IgdGhlIHByb2ZpbGUgcHJvdmlkZWRcbiAgICogICAgYW5kIHRoZW4gY2hlY2tpbmcgZm9yIHRoZSBkZWZhdWx0IHByb2ZpbGUuXG4gICAqIDMuIElNRFMgaW5zdGFuY2UgaWRlbnRpdHkgcmVnaW9uIGZyb20gdGhlIE1ldGFkYXRhIFNlcnZpY2UuXG4gICAqIDQuIHVzLWVhc3QtMVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lvbihtYXliZVByb2ZpbGU/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRlZmF1bHRSZWdpb24gPSAndXMtZWFzdC0xJztcbiAgICBjb25zdCBwcm9maWxlID0gbWF5YmVQcm9maWxlIHx8IHByb2Nlc3MuZW52LkFXU19QUk9GSUxFIHx8IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1BST0ZJTEUgfHwgJ2RlZmF1bHQnO1xuXG4gICAgY29uc3QgcmVnaW9uID1cbiAgICAgIHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHxcbiAgICAgIHByb2Nlc3MuZW52LkFNQVpPTl9SRUdJT04gfHxcbiAgICAgIHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuQU1BWk9OX0RFRkFVTFRfUkVHSU9OIHx8XG4gICAgICAoYXdhaXQgdGhpcy5nZXRSZWdpb25Gcm9tSW5pKHByb2ZpbGUpKSB8fFxuICAgICAgKGF3YWl0IHRoaXMucmVnaW9uRnJvbU1ldGFkYXRhU2VydmljZSgpKTtcblxuICAgIGlmICghcmVnaW9uKSB7XG4gICAgICBjb25zdCB1c2VkUHJvZmlsZSA9ICFwcm9maWxlID8gJycgOiBgIChwcm9maWxlOiBcIiR7cHJvZmlsZX1cIilgO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhcbiAgICAgICAgYFVuYWJsZSB0byBkZXRlcm1pbmUgQVdTIHJlZ2lvbiBmcm9tIGVudmlyb25tZW50IG9yIEFXUyBjb25maWd1cmF0aW9uJHt1c2VkUHJvZmlsZX0sIGRlZmF1bHRpbmcgdG8gJyR7ZGVmYXVsdFJlZ2lvbn0nYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGVmYXVsdFJlZ2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBNZXRhZGF0YVNlcnZpY2UgY2xhc3Mgd2lsbCBhdHRlbXB0IHRvIGZldGNoIHRoZSBpbnN0YW5jZSBpZGVudGl0eSBkb2N1bWVudCBmcm9tXG4gICAqIElNRFN2MiBmaXJzdCwgYW5kIHRoZW4gd2lsbCBhdHRlbXB0IHYxIGFzIGEgZmFsbGJhY2suXG4gICAqXG4gICAqIElmIHRoaXMgZmFpbHMsIHdlIHdpbGwgdXNlIHVzLWVhc3QtMSBhcyB0aGUgcmVnaW9uIHNvIG5vIGVycm9yIHNob3VsZCBiZSB0aHJvd24uXG4gICAqIEByZXR1cm5zIFRoZSByZWdpb24gZm9yIHRoZSBpbnN0YW5jZSBpZGVudGl0eVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWdpb25Gcm9tTWV0YWRhdGFTZXJ2aWNlKCkge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoJ0xvb2tpbmcgdXAgQVdTIHJlZ2lvbiBpbiB0aGUgRUMyIEluc3RhbmNlIE1ldGFkYXRhIFNlcnZpY2UgKElNRFMpLicpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlKHtcbiAgICAgICAgaHR0cE9wdGlvbnM6IHtcbiAgICAgICAgICB0aW1lb3V0OiAxMDAwLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IG1ldGFkYXRhU2VydmljZS5mZXRjaE1ldGFkYXRhVG9rZW4oKTtcbiAgICAgIGNvbnN0IGRvY3VtZW50ID0gYXdhaXQgbWV0YWRhdGFTZXJ2aWNlLnJlcXVlc3QoJy9sYXRlc3QvZHluYW1pYy9pbnN0YW5jZS1pZGVudGl0eS9kb2N1bWVudCcsIHt9KTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRvY3VtZW50KS5yZWdpb247XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgVW5hYmxlIHRvIHJldHJpZXZlIEFXUyByZWdpb24gZnJvbSBJTURTOiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHRoZSByZWdpb24gb2YgdGhlIHByb3ZpZGVkIHByb2ZpbGUuIElmIG5vIHJlZ2lvbiBpcyBwcmVzZW50LFxuICAgKiBpdCB3aWxsIGF0dGVtcHQgdG8gbG9va3VwIHRoZSBkZWZhdWx0IHJlZ2lvbi5cbiAgICogQHBhcmFtIHByb2ZpbGUgLSBUaGUgcHJvZmlsZSB0byB1c2UgdG8gbG9va3VwIHRoZSByZWdpb25cbiAgICogQHJldHVybnMgVGhlIHJlZ2lvbiBmb3IgdGhlIHByb2ZpbGUgb3IgZGVmYXVsdCBwcm9maWxlLCBpZiBwcmVzZW50LiBPdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFJlZ2lvbkZyb21JbmkocHJvZmlsZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzaGFyZWRGaWxlcyA9IGF3YWl0IGxvYWRTaGFyZWRDb25maWdGaWxlcyh7IGlnbm9yZUNhY2hlOiB0cnVlIH0pO1xuXG4gICAgLy8gUHJpb3JpdHk6XG4gICAgLy9cbiAgICAvLyBjcmVkZW50aWFscyBjb21lIGJlZm9yZSBjb25maWcgYmVjYXVzZSBhd3MtY2xpIHYxIGJlaGF2ZXMgbGlrZSB0aGF0LlxuICAgIC8vXG4gICAgLy8gMS4gcHJvZmlsZS1yZWdpb24taW4tY3JlZGVudGlhbHNcbiAgICAvLyAyLiBwcm9maWxlLXJlZ2lvbi1pbi1jb25maWdcbiAgICAvLyAzLiBkZWZhdWx0LXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuICAgIC8vIDQuIGRlZmF1bHQtcmVnaW9uLWluLWNvbmZpZ1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVnaW9uRnJvbUluaUZpbGUocHJvZmlsZSwgc2hhcmVkRmlsZXMuY3JlZGVudGlhbHNGaWxlKVxuICAgID8/IHRoaXMuZ2V0UmVnaW9uRnJvbUluaUZpbGUocHJvZmlsZSwgc2hhcmVkRmlsZXMuY29uZmlnRmlsZSlcbiAgICA/PyB0aGlzLmdldFJlZ2lvbkZyb21JbmlGaWxlKCdkZWZhdWx0Jywgc2hhcmVkRmlsZXMuY3JlZGVudGlhbHNGaWxlKVxuICAgID8/IHRoaXMuZ2V0UmVnaW9uRnJvbUluaUZpbGUoJ2RlZmF1bHQnLCBzaGFyZWRGaWxlcy5jb25maWdGaWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVnaW9uRnJvbUluaUZpbGUocHJvZmlsZTogc3RyaW5nLCBkYXRhPzogYW55KSB7XG4gICAgcmV0dXJuIGRhdGE/Lltwcm9maWxlXT8ucmVnaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzayB1c2VyIGZvciBNRkEgdG9rZW4gZm9yIGdpdmVuIE1GQSBkZXZpY2VcbiAgICpcbiAgICogUmVzdWx0IGlzIHNlbmQgdG8gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIFNESyB0byBhdXRob3JpemUgdGhlIHJlcXVlc3RcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdG9rZW5Db2RlRm4oZGV2aWNlQXJuOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRlYnVnRm4gPSAobXNnOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSA9PiB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGZvcm1hdChtc2csIC4uLmFyZ3MpKTtcbiAgICBhd2FpdCBkZWJ1Z0ZuKCdSZXF1aXJlIE1GQSB0b2tlbiBmcm9tIE1GQSBkZXZpY2Ugd2l0aCBBUk4nLCBkZXZpY2VBcm4pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbjogc3RyaW5nID0gYXdhaXQgdGhpcy5pb0hlbHBlci5yZXF1ZXN0UmVzcG9uc2UoSU8uQ0RLX1NES19JMTEwMC5yZXEoYE1GQSB0b2tlbiBmb3IgJHtkZXZpY2VBcm59YCwge1xuICAgICAgICBkZXZpY2VBcm4sXG4gICAgICB9LCAnJykpO1xuXG4gICAgICBhd2FpdCBkZWJ1Z0ZuKCdTdWNjZXNzZnVsbHkgZ290IE1GQSB0b2tlbiBmcm9tIHVzZXInKTtcbiAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgYXdhaXQgZGVidWdGbignRmFpbGVkIHRvIGdldCBNRkEgdG9rZW4nLCBlcnIpO1xuICAgICAgY29uc3QgZSA9IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKCdNZmFUb2tlbkVycm9yJywgYEVycm9yIGZldGNoaW5nIE1GQSB0b2tlbjogJHtlcnIubWVzc2FnZSA/PyBlcnJ9YCk7XG4gICAgICBlLm5hbWUgPSAnU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzUHJvdmlkZXJGYWlsdXJlJztcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogV2UgdXNlZCB0byBzdXBwb3J0IGJvdGggQVdTIGFuZCBBTUFaT04gcHJlZml4ZXMgZm9yIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBBZGRpbmcgdGhpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJpb3JpdGl6ZUVudigpIHtcbiAgY29uc3QgaWQgPSBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCB8fCBwcm9jZXNzLmVudi5BTUFaT05fQUNDRVNTX0tFWV9JRDtcbiAgY29uc3Qga2V5ID0gcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIHx8IHByb2Nlc3MuZW52LkFNQVpPTl9TRUNSRVRfQUNDRVNTX0tFWTtcblxuICBpZiAoISFpZCAmJiAhIWtleSkge1xuICAgIHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEID0gaWQ7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZID0ga2V5O1xuXG4gICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gPz8gcHJvY2Vzcy5lbnYuQU1BWk9OX1NFU1NJT05fVE9LRU47XG4gICAgaWYgKHNlc3Npb25Ub2tlbikge1xuICAgICAgcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gPSBzZXNzaW9uVG9rZW47XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbENoYWluT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ2dlcj86IElTZGtMb2dnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZGtSZXF1ZXN0SGFuZGxlcihhZ2VudD86IEFnZW50KTogUmVxdWVzdEhhbmRsZXJTZXR0aW5ncyB7XG4gIHJldHVybiB7XG4gICAgY29ubmVjdGlvblRpbWVvdXQ6IERFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VULFxuICAgIHJlcXVlc3RUaW1lb3V0OiBERUZBVUxUX1RJTUVPVVQsXG4gICAgaHR0cHNBZ2VudDogYWdlbnQsXG4gICAgaHR0cEFnZW50OiBhZ2VudCxcbiAgfTtcbn1cbiJdfQ==
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2xpLWNvbXBhdGlibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3NjbGktY29tcGF0aWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2UkEsOENBT0M7QUFuU0QseUNBQW1DO0FBRW5DLHdFQUErRztBQUMvRyx3RUFBZ0U7QUFDaEUsMkVBQXVFO0FBRXZFLG1EQUFnRDtBQUNoRCx5REFBeUQ7QUFFekQsK0RBQWtFO0FBQ2xFLDJDQUFrRDtBQUVsRCxNQUFNLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUN6QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFFL0I7Ozs7Ozs7R0FPRztBQUNILE1BQWEsZ0JBQWdCO0lBQ1YsUUFBUSxDQUFXO0lBQ25CLGNBQWMsQ0FBeUI7SUFDdkMsTUFBTSxDQUFjO0lBRXJDLFlBQW1CLFFBQWtCLEVBQUUsY0FBc0MsRUFBRSxNQUFtQjtRQUNoRyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFnQjtRQUN0QyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQzNELE9BQU87WUFDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsVUFBa0MsRUFBRTtRQUVwQyxNQUFNLFlBQVksR0FBRztZQUNuQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFD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Y0FBYyxFQUFFLGVBQWU7UUFDL0IsVUFBVSxFQUFFLEtBQUs7UUFDakIsU0FBUyxFQUFFLEtBQUs7S0FDakIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFnZW50IH0gZnJvbSAnbm9kZTpodHRwcyc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXIgfSBmcm9tICdAYXdzLWNkay9jbGktcGx1Z2luLWNvbnRyYWN0JztcbmltcG9ydCB7IGNyZWF0ZUNyZWRlbnRpYWxDaGFpbiwgZnJvbUVudiwgZnJvbUluaSwgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnQGF3cy1zZGsvZWMyLW1ldGFkYXRhLXNlcnZpY2UnO1xuaW1wb3J0IHsgbG9hZFNoYXJlZENvbmZpZ0ZpbGVzIH0gZnJvbSAnQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdEhhbmRsZXJTZXR0aW5ncyB9IGZyb20gJy4vYmFzZS1jcmVkZW50aWFscyc7XG5pbXBvcnQgeyBpc0VjMkluc3RhbmNlIH0gZnJvbSAnLi9lYzItZGV0ZWN0aW9uJztcbmltcG9ydCB7IG1ha2VDYWNoaW5nUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVyLWNhY2hpbmcnO1xuaW1wb3J0IHR5cGUgeyBJU2RrTG9nZ2VyIH0gZnJvbSAnLi9zZGstbG9nZ2VyJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuY29uc3QgREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQgPSAxMDAwMDtcbmNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDMwMDAwMDtcblxuLyoqXG4gKiBCZWhhdmlvcnMgdG8gbWF0Y2ggQVdTIENMSVxuICpcbiAqIFNlZSB0aGVzZSBsaW5rczpcbiAqXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC90b3BpYy9jb25maWctdmFycy5odG1sXG4gKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpL2xhdGVzdC91c2VyZ3VpZGUvY2xpLWNvbmZpZ3VyZS1lbnZ2YXJzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0NsaUNvbXBhdGlibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSGVscGVyOiBJb0hlbHBlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0SGFuZGxlcjogUmVxdWVzdEhhbmRsZXJTZXR0aW5ncztcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI/OiBJU2RrTG9nZ2VyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpb0hlbHBlcjogSW9IZWxwZXIsIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlclNldHRpbmdzLCBsb2dnZXI/OiBJU2RrTG9nZ2VyKSB7XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICAgIHRoaXMucmVxdWVzdEhhbmRsZXIgPSByZXF1ZXN0SGFuZGxlcjtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBiYXNlQ29uZmlnKHByb2ZpbGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgY3JlZGVudGlhbFByb3ZpZGVyOiBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXI7IGRlZmF1bHRSZWdpb246IHN0cmluZyB9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbFByb3ZpZGVyID0gYXdhaXQgdGhpcy5jcmVkZW50aWFsQ2hhaW5CdWlsZGVyKHtcbiAgICAgIHByb2ZpbGUsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRSZWdpb24gPSBhd2FpdCB0aGlzLnJlZ2lvbihwcm9maWxlKTtcbiAgICByZXR1cm4geyBjcmVkZW50aWFsUHJvdmlkZXIsIGRlZmF1bHRSZWdpb24gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiBBV1MgQ0xJLWNvbXBhdGlibGUgY3JlZGVudGlhbCBjaGFpbiBwcm92aWRlclxuICAgKlxuICAgKiBUaGUgY3JlZGVudGlhbCBjaGFpbiByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWNoaW5nLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWRlbnRpYWxDaGFpbkJ1aWxkZXIoXG4gICAgb3B0aW9uczogQ3JlZGVudGlhbENoYWluT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxQcm92aWRlcj4ge1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHtcbiAgICAgIHJlcXVlc3RIYW5kbGVyOiB0aGlzLnJlcXVlc3RIYW5kbGVyLFxuICAgICAgY3VzdG9tVXNlckFnZW50OiAnYXdzLWNkaycsXG4gICAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyLFxuICAgIH07XG5cbiAgICAvLyBTdXBlciBoYWNreSBzb2x1dGlvbiB0byBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzMyNTEwLCBwcm9wb3NlZCBieSB0aGUgU0RLIHRlYW0uXG4gICAgLy9cbiAgICAvLyBTdW1tYXJ5IG9mIHRoZSBwcm9ibGVtOiB3ZSB3ZXJlIHJlYWRpbmcgdGhlIHJlZ2lvbiBmcm9tIHRoZSBjb25maWcgZmlsZSBhbmQgcGFzc2luZyBpdCB0b1xuICAgIC8vIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVycy4gSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2YgU1NPLCB0aGlzIG1ha2VzIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyXG4gICAgLy8gdXNlIHRoYXQgcmVnaW9uIHRvIGRvIHRoZSBTU08gZmxvdywgd2hpY2ggaXMgaW5jb3JyZWN0LiBUaGUgcmVnaW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yXG4gICAgLy8gdGhhdCBpcyB0aGUgb25lIHNldCBpbiB0aGUgc3NvX3Nlc3Npb24gc2VjdGlvbiBvZiB0aGUgY29uZmlnIGZpbGUuXG4gICAgLy9cbiAgICAvLyBUaGUgaWRlYSBoZXJlOiB0aGUgXCJjbGllbnRDb25maWdcIiBpcyBmb3IgY29uZmlndXJpbmcgdGhlIGlubmVyIGF1dGggY2xpZW50IGRpcmVjdGx5LFxuICAgIC8vIGFuZCBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHksIHdoZXJlYXMgXCJwYXJlbnRDbGllbnRDb25maWdcIiBpcyB0aGUgdXBwZXIgZGF0YSBjbGllbnRcbiAgICAvLyBhbmQgaGFzIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIHNzb19yZWdpb24gYnV0IHN0aWxsIGhpZ2hlciBwcmlvcml0eSB0aGFuIFNUUyBnbG9iYWwgcmVnaW9uLlxuICAgIGNvbnN0IHBhcmVudENsaWVudENvbmZpZyA9IHtcbiAgICAgIHJlZ2lvbjogYXdhaXQgdGhpcy5yZWdpb24ob3B0aW9ucy5wcm9maWxlKSxcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBtYXRjaGVkIEFXUyBDTEkgYmVoYXZpb3I6XG4gICAgICpcbiAgICAgKiBJZiBhIHByb2ZpbGUgaXMgZXhwbGljaXRseSBzZXQgdXNpbmcgYC0tcHJvZmlsZWAsXG4gICAgICogd2UgdXNlIHRoYXQgdG8gdGhlIGV4Y2x1c2lvbiBvZiBldmVyeXRoaW5nIGVsc2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIEFXU19QUk9GSUxFLFxuICAgICAqIGVudmlyb25tZW50IGNyZWRlbnRpYWxzIHN0aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIEFXU19QUk9GSUxFXG4gICAgICovXG4gICAgaWYgKG9wdGlvbnMucHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG1ha2VDYWNoaW5nUHJvdmlkZXIoZnJvbUluaSh7XG4gICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgaWdub3JlQ2FjaGU6IHRydWUsXG4gICAgICAgIG1mYUNvZGVQcm92aWRlcjogdGhpcy50b2tlbkNvZGVGbi5iaW5kKHRoaXMpLFxuICAgICAgICBjbGllbnRDb25maWcsXG4gICAgICAgIHBhcmVudENsaWVudENvbmZpZyxcbiAgICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZQcm9maWxlID0gcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgfHwgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUFJPRklMRTtcblxuICAgIC8qKlxuICAgICAqIEVudiBBV1MgLSBFbnZpcm9ubWVudENyZWRlbnRpYWxzIHdpdGggc3RyaW5nIEFXU1xuICAgICAqIEVudiBBbWF6b24gLSBFbnZpcm9ubWVudENyZWRlbnRpYWxzIHdpdGggc3RyaW5nIEFNQVpPTlxuICAgICAqIFByb2ZpbGUgQ3JlZGVudGlhbHMgLSBQYXRjaGVkU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzIHdpdGggaW1wbGljaXQgcHJvZmlsZSwgY3JlZGVudGlhbHMgZmlsZSwgaHR0cCBvcHRpb25zLCBhbmQgdG9rZW4gZm5cbiAgICAgKiAgICBTU08gd2l0aCBpbXBsaWNpdCBwcm9maWxlIG9ubHlcbiAgICAgKiAgICBTaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMgd2l0aCBpbXBsaWNpdCBwcm9maWxlIGFuZCBwcmVmZXJTdGF0aWNDcmVkZW50aWFscyB0cnVlIChwcm9maWxlIHdpdGggc291cmNlX3Byb2ZpbGUpXG4gICAgICogICAgU2hhcmVkIENyZWRlbnRpYWwgZmlsZSB0aGF0IHBvaW50cyB0byBFbnZpcm9ubWVudCBDcmVkZW50aWFscyB3aXRoIEFXUyBwcmVmaXhcbiAgICAgKiAgICBTaGFyZWQgQ3JlZGVudGlhbCBmaWxlIHRoYXQgcG9pbnRzIHRvIEVDMiBNZXRhZGF0YVxuICAgICAqICAgIFNoYXJlZCBDcmVkZW50aWFsIGZpbGUgdGhhdCBwb2ludHMgdG8gRUNTIENyZWRlbnRpYWxzXG4gICAgICogU1NPIENyZWRlbnRpYWxzIC0gU3NvQ3JlZGVudGlhbHMgd2l0aCBpbXBsaWNpdCBwcm9maWxlIGFuZCBodHRwIG9wdGlvbnNcbiAgICAgKiBQcm9jZXNzQ3JlZGVudGlhbHMgd2l0aCBpbXBsaWNpdCBwcm9maWxlXG4gICAgICogRUNTIENyZWRlbnRpYWxzIC0gRUNTQ3JlZGVudGlhbHMgd2l0aCBubyBpbnB1dCBPUiBXZWIgSWRlbnRpdHkgLSBUb2tlbkZpbGVXZWJJZGVudGl0eUNyZWRlbnRpYWxzIHdpdGggbm8gaW5wdXQgT1IgRUMyIE1ldGFkYXRhIC0gRUMyTWV0YWRhdGFDcmVkZW50aWFscyB3aXRoIG5vIGlucHV0XG4gICAgICpcbiAgICAgKiBUaGVzZSB0cmFuc2xhdGUgdG86XG4gICAgICogZnJvbUVudigpXG4gICAgICogZnJvbVNTTygpL2Zyb21JbmkoKVxuICAgICAqIGZyb21Qcm9jZXNzKClcbiAgICAgKiBmcm9tQ29udGFpbmVyTWV0YWRhdGEoKVxuICAgICAqIGZyb21Ub2tlbkZpbGUoKVxuICAgICAqIGZyb21JbnN0YW5jZU1ldGFkYXRhKClcbiAgICAgKlxuICAgICAqIFRoZSBOb2RlUHJvdmlkZXJDaGFpbiBpcyBhbHJlYWR5IGNhY2hlZC5cbiAgICAgKi9cblxuICAgIC8vIFNraXAgdGhlIElNRFMgY3JlZGVudGlhbCBwcm92aWRlciBpZiB3ZSdyZSBub3Qgb24gRUMyLCB0byBhdm9pZCBhXG4gICAgLy8gMS0yIHNlY29uZCB0aW1lb3V0IG9uIG5vbi1FQzIgbWFjaGluZXMuXG4gICAgaWYgKHByb2Nlc3MuZW52LkFXU19FQzJfTUVUQURBVEFfRElTQUJMRUQgPT09IHVuZGVmaW5lZCAmJiAhaXNFYzJJbnN0YW5jZSgpKSB7XG4gICAgICBwcm9jZXNzLmVudi5BV1NfRUMyX01FVEFEQVRBX0RJU0FCTEVEID0gJ3RydWUnO1xuICAgIH1cblxuICAgIC8vIFRoaXMgY2hhaW4gcmVzcGVjdHMgdGhlIEFXU19FQzJfTUVUQURBVEFfRElTQUJMRUQgZW52dmFyLCB3aGljaCBjYW4gb3RoZXJ3aXNlXG4gICAgLy8gbm90IGJlIGVhc2lseSBkaXNhYmxlZCB1c2luZyBhIHByb3BlcnR5LlxuICAgIGNvbnN0IG5vZGVQcm92aWRlckNoYWluID0gZnJvbU5vZGVQcm92aWRlckNoYWluKHtcbiAgICAgIHByb2ZpbGU6IGVudlByb2ZpbGUsXG4gICAgICBjbGllbnRDb25maWcsXG4gICAgICBwYXJlbnRDbGllbnRDb25maWcsXG4gICAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyLFxuICAgICAgbWZhQ29kZVByb3ZpZGVyOiB0aGlzLnRva2VuQ29kZUZuLmJpbmQodGhpcyksXG4gICAgICBpZ25vcmVDYWNoZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzaG91bGRQcmlvcml0aXplRW52KClcbiAgICAgID8gY3JlYXRlQ3JlZGVudGlhbENoYWluKGZyb21FbnYoKSwgbm9kZVByb3ZpZGVyQ2hhaW4pLmV4cGlyZUFmdGVyKDYwICogNjBfMDAwKVxuICAgICAgOiBub2RlUHJvdmlkZXJDaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBnZXQgdGhlIHJlZ2lvbiBmcm9tIGEgbnVtYmVyIG9mIHNvdXJjZXMgYW5kIGZhbGxzIGJhY2sgdG8gdXMtZWFzdC0xIGlmIG5vIHJlZ2lvbiBjYW4gYmUgZm91bmQsXG4gICAqIGFzIGlzIGRvbmUgaW4gdGhlIEFXUyBDTEkuXG4gICAqXG4gICAqIFRoZSBvcmRlciBvZiBwcmlvcml0eSBpcyB0aGUgZm9sbG93aW5nOlxuICAgKlxuICAgKiAxLiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgc3BlY2lmeWluZyByZWdpb24sIHdpdGggYm90aCBhbiBBV1MgcHJlZml4IGFuZCBBTUFaT04gcHJlZml4XG4gICAqICAgIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhbmQgd2l0aG91dCBgREVGQVVMVGAgaW4gdGhlIG5hbWUgYmVjYXVzZVxuICAgKiAgICBMYW1iZGEgYW5kIENvZGVCdWlsZCBzZXQgdGhlICRBV1NfUkVHSU9OIHZhcmlhYmxlLlxuICAgKiAyLiBSZWdpb25zIGxpc3RlZCBpbiB0aGUgU2hhcmVkIEluaSBGaWxlcyAtIEZpcnN0IGNoZWNraW5nIGZvciB0aGUgcHJvZmlsZSBwcm92aWRlZFxuICAgKiAgICBhbmQgdGhlbiBjaGVja2luZyBmb3IgdGhlIGRlZmF1bHQgcHJvZmlsZS5cbiAgICogMy4gSU1EUyBpbnN0YW5jZSBpZGVudGl0eSByZWdpb24gZnJvbSB0aGUgTWV0YWRhdGEgU2VydmljZS5cbiAgICogNC4gdXMtZWFzdC0xXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaW9uKG1heWJlUHJvZmlsZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGVmYXVsdFJlZ2lvbiA9ICd1cy1lYXN0LTEnO1xuICAgIGNvbnN0IHByb2ZpbGUgPSBtYXliZVByb2ZpbGUgfHwgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgfHwgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUFJPRklMRSB8fCAnZGVmYXVsdCc7XG5cbiAgICBjb25zdCByZWdpb24gPVxuICAgICAgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuQU1BWk9OX1JFR0lPTiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OIHx8XG4gICAgICBwcm9jZXNzLmVudi5BTUFaT05fREVGQVVMVF9SRUdJT04gfHxcbiAgICAgIChhd2FpdCB0aGlzLmdldFJlZ2lvbkZyb21JbmkocHJvZmlsZSkpIHx8XG4gICAgICAoYXdhaXQgdGhpcy5yZWdpb25Gcm9tTWV0YWRhdGFTZXJ2aWNlKCkpO1xuXG4gICAgaWYgKCFyZWdpb24pIHtcbiAgICAgIGNvbnN0IHVzZWRQcm9maWxlID0gIXByb2ZpbGUgPyAnJyA6IGAgKHByb2ZpbGU6IFwiJHtwcm9maWxlfVwiKWA7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKFxuICAgICAgICBgVW5hYmxlIHRvIGRldGVybWluZSBBV1MgcmVnaW9uIGZyb20gZW52aXJvbm1lbnQgb3IgQVdTIGNvbmZpZ3VyYXRpb24ke3VzZWRQcm9maWxlfSwgZGVmYXVsdGluZyB0byAnJHtkZWZhdWx0UmVnaW9ufSdgLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBkZWZhdWx0UmVnaW9uO1xuICAgIH1cblxuICAgIHJldHVybiByZWdpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIE1ldGFkYXRhU2VydmljZSBjbGFzcyB3aWxsIGF0dGVtcHQgdG8gZmV0Y2ggdGhlIGluc3RhbmNlIGlkZW50aXR5IGRvY3VtZW50IGZyb21cbiAgICogSU1EU3YyIGZpcnN0LCBhbmQgdGhlbiB3aWxsIGF0dGVtcHQgdjEgYXMgYSBmYWxsYmFjay5cbiAgICpcbiAgICogSWYgdGhpcyBmYWlscywgd2Ugd2lsbCB1c2UgdXMtZWFzdC0xIGFzIHRoZSByZWdpb24gc28gbm8gZXJyb3Igc2hvdWxkIGJlIHRocm93bi5cbiAgICogQHJldHVybnMgVGhlIHJlZ2lvbiBmb3IgdGhlIGluc3RhbmNlIGlkZW50aXR5XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlZ2lvbkZyb21NZXRhZGF0YVNlcnZpY2UoKSB7XG4gICAgaWYgKCFpc0VjMkluc3RhbmNlKCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZygnTG9va2luZyB1cCBBV1MgcmVnaW9uIGluIHRoZSBFQzIgSW5zdGFuY2UgTWV0YWRhdGEgU2VydmljZSAoSU1EUykuJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2Uoe1xuICAgICAgICBodHRwT3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXQ6IDEwMDAsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgbWV0YWRhdGFTZXJ2aWNlLmZldGNoTWV0YWRhdGFUb2tlbigpO1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBhd2FpdCBtZXRhZGF0YVNlcnZpY2UucmVxdWVzdCgnL2xhdGVzdC9keW5hbWljL2luc3RhbmNlLWlkZW50aXR5L2RvY3VtZW50Jywge30pO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZG9jdW1lbnQpLnJlZ2lvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGBVbmFibGUgdG8gcmV0cmlldmUgQVdTIHJlZ2lvbiBmcm9tIElNRFM6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgdXAgdGhlIHJlZ2lvbiBvZiB0aGUgcHJvdmlkZWQgcHJvZmlsZS4gSWYgbm8gcmVnaW9uIGlzIHByZXNlbnQsXG4gICAqIGl0IHdpbGwgYXR0ZW1wdCB0byBsb29rdXAgdGhlIGRlZmF1bHQgcmVnaW9uLlxuICAgKiBAcGFyYW0gcHJvZmlsZSAtIFRoZSBwcm9maWxlIHRvIHVzZSB0byBsb29rdXAgdGhlIHJlZ2lvblxuICAgKiBAcmV0dXJucyBUaGUgcmVnaW9uIGZvciB0aGUgcHJvZmlsZSBvciBkZWZhdWx0IHByb2ZpbGUsIGlmIHByZXNlbnQuIE90aGVyd2lzZSByZXR1cm5zIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVnaW9uRnJvbUluaShwcm9maWxlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHNoYXJlZEZpbGVzID0gYXdhaXQgbG9hZFNoYXJlZENvbmZpZ0ZpbGVzKHsgaWdub3JlQ2FjaGU6IHRydWUgfSk7XG5cbiAgICAvLyBQcmlvcml0eTpcbiAgICAvL1xuICAgIC8vIGNyZWRlbnRpYWxzIGNvbWUgYmVmb3JlIGNvbmZpZyBiZWNhdXNlIGF3cy1jbGkgdjEgYmVoYXZlcyBsaWtlIHRoYXQuXG4gICAgLy9cbiAgICAvLyAxLiBwcm9maWxlLXJlZ2lvbi1pbi1jcmVkZW50aWFsc1xuICAgIC8vIDIuIHByb2ZpbGUtcmVnaW9uLWluLWNvbmZpZ1xuICAgIC8vIDMuIGRlZmF1bHQtcmVnaW9uLWluLWNyZWRlbnRpYWxzXG4gICAgLy8gNC4gZGVmYXVsdC1yZWdpb24taW4tY29uZmlnXG5cbiAgICByZXR1cm4gdGhpcy5nZXRSZWdpb25Gcm9tSW5pRmlsZShwcm9maWxlLCBzaGFyZWRGaWxlcy5jcmVkZW50aWFsc0ZpbGUpXG4gICAgPz8gdGhpcy5nZXRSZWdpb25Gcm9tSW5pRmlsZShwcm9maWxlLCBzaGFyZWRGaWxlcy5jb25maWdGaWxlKVxuICAgID8/IHRoaXMuZ2V0UmVnaW9uRnJvbUluaUZpbGUoJ2RlZmF1bHQnLCBzaGFyZWRGaWxlcy5jcmVkZW50aWFsc0ZpbGUpXG4gICAgPz8gdGhpcy5nZXRSZWdpb25Gcm9tSW5pRmlsZSgnZGVmYXVsdCcsIHNoYXJlZEZpbGVzLmNvbmZpZ0ZpbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWdpb25Gcm9tSW5pRmlsZShwcm9maWxlOiBzdHJpbmcsIGRhdGE/OiBhbnkpIHtcbiAgICByZXR1cm4gZGF0YT8uW3Byb2ZpbGVdPy5yZWdpb247XG4gIH1cblxuICAvKipcbiAgICogQXNrIHVzZXIgZm9yIE1GQSB0b2tlbiBmb3IgZ2l2ZW4gTUZBIGRldmljZVxuICAgKlxuICAgKiBSZXN1bHQgaXMgc2VuZCB0byBjYWxsYmFjayBmdW5jdGlvbiBmb3IgU0RLIHRvIGF1dGhvcml6ZSB0aGUgcmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB0b2tlbkNvZGVGbihkZXZpY2VBcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZGVidWdGbiA9IChtc2c6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoZm9ybWF0KG1zZywgLi4uYXJncykpO1xuICAgIGF3YWl0IGRlYnVnRm4oJ1JlcXVpcmUgTUZBIHRva2VuIGZyb20gTUZBIGRldmljZSB3aXRoIEFSTicsIGRldmljZUFybik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmlvSGVscGVyLnJlcXVlc3RSZXNwb25zZShJTy5DREtfU0RLX0kxMTAwLnJlcShgTUZBIHRva2VuIGZvciAke2RldmljZUFybn1gLCB7XG4gICAgICAgIGRldmljZUFybixcbiAgICAgIH0sICcnKSk7XG5cbiAgICAgIGF3YWl0IGRlYnVnRm4oJ1N1Y2Nlc3NmdWxseSBnb3QgTUZBIHRva2VuIGZyb20gdXNlcicpO1xuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBhd2FpdCBkZWJ1Z0ZuKCdGYWlsZWQgdG8gZ2V0IE1GQSB0b2tlbicsIGVycik7XG4gICAgICBjb25zdCBlID0gbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoJ01mYVRva2VuRXJyb3InLCBgRXJyb3IgZmV0Y2hpbmcgTUZBIHRva2VuOiAke2Vyci5tZXNzYWdlID8/IGVycn1gKTtcbiAgICAgIGUubmFtZSA9ICdTaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHNQcm92aWRlckZhaWx1cmUnO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXZSB1c2VkIHRvIHN1cHBvcnQgYm90aCBBV1MgYW5kIEFNQVpPTiBwcmVmaXhlcyBmb3IgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqIEFkZGluZyB0aGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5mdW5jdGlvbiBzaG91bGRQcmlvcml0aXplRW52KCkge1xuICBjb25zdCBpZCA9IHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEIHx8IHByb2Nlc3MuZW52LkFNQVpPTl9BQ0NFU1NfS0VZX0lEO1xuICBjb25zdCBrZXkgPSBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgfHwgcHJvY2Vzcy5lbnYuQU1BWk9OX1NFQ1JFVF9BQ0NFU1NfS0VZO1xuXG4gIGlmICghIWlkICYmICEha2V5KSB7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX0FDQ0VTU19LRVlfSUQgPSBpZDtcbiAgICBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSBrZXk7XG5cbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSBwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTiA/PyBwcm9jZXNzLmVudi5BTUFaT05fU0VTU0lPTl9UT0tFTjtcbiAgICBpZiAoc2Vzc2lvblRva2VuKSB7XG4gICAgICBwcm9jZXNzLmVudi5BV1NfU0VTU0lPTl9UT0tFTiA9IHNlc3Npb25Ub2tlbjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFsQ2hhaW5PcHRpb25zIHtcbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nZ2VyPzogSVNka0xvZ2dlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNka1JlcXVlc3RIYW5kbGVyKGFnZW50PzogQWdlbnQpOiBSZXF1ZXN0SGFuZGxlclNldHRpbmdzIHtcbiAgcmV0dXJuIHtcbiAgICBjb25uZWN0aW9uVGltZW91dDogREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQsXG4gICAgcmVxdWVzdFRpbWVvdXQ6IERFRkFVTFRfVElNRU9VVCxcbiAgICBodHRwc0FnZW50OiBhZ2VudCxcbiAgICBodHRwQWdlbnQ6IGFnZW50LFxuICB9O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export declare function isEc2Instance(): boolean;
2
+ //# sourceMappingURL=ec2-detection.d.ts.map
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isEc2Instance = isEc2Instance;
4
+ const node_child_process_1 = require("node:child_process");
5
+ const node_fs_1 = require("node:fs");
6
+ const node_os_1 = require("node:os");
7
+ /**
8
+ * Detect whether we are running on an EC2 instance by inspecting local system
9
+ * metadata. This avoids the 1-2 second IMDS timeout on non-EC2 machines.
10
+ *
11
+ * Detection methods per platform (per AWS docs
12
+ * https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html):
13
+ * - Linux: check DMI board_asset_tag for an EC2 instance ID, or hypervisor UUID for "ec2" prefix
14
+ * - Windows: check DMI board_asset_tag via registry
15
+ * - macOS and other platforms: assumed not EC2
16
+ *
17
+ * The result is cached for the lifetime of the process.
18
+ */
19
+ let cachedIsEc2;
20
+ function isEc2Instance() {
21
+ if (cachedIsEc2 !== undefined) {
22
+ return cachedIsEc2;
23
+ }
24
+ cachedIsEc2 = detectEc2();
25
+ return cachedIsEc2;
26
+ }
27
+ function detectEc2() {
28
+ const os = (0, node_os_1.platform)();
29
+ try {
30
+ if (os === 'linux') {
31
+ return detectEc2Linux();
32
+ }
33
+ if (os === 'win32') {
34
+ return detectEc2Windows();
35
+ }
36
+ // macOS and other platforms: not EC2
37
+ // (EC2 Mac instances run on dedicated Mac minis with a Linux-based Nitro
38
+ // hypervisor, but the guest OS sees itself as darwin. In practice these are
39
+ // extremely rare for CDK CLI usage. If needed, this can be extended.)
40
+ return false;
41
+ }
42
+ catch {
43
+ // If detection fails, assume EC2. This makes us slightly slower but nothing
44
+ // will unexpectedly break.
45
+ return true;
46
+ }
47
+ }
48
+ function detectEc2Linux() {
49
+ // Nitro instances expose the instance ID as the board asset tag
50
+ const boardAssetTag = '/sys/devices/virtual/dmi/id/board_asset_tag';
51
+ if ((0, node_fs_1.existsSync)(boardAssetTag)) {
52
+ const tag = (0, node_fs_1.readFileSync)(boardAssetTag, 'utf-8').trim();
53
+ if (tag.startsWith('i-')) {
54
+ return true;
55
+ }
56
+ }
57
+ // Xen (PV) instances expose a UUID starting with "ec2" via the hypervisor
58
+ const hypervisorUuid = '/sys/hypervisor/uuid';
59
+ if ((0, node_fs_1.existsSync)(hypervisorUuid)) {
60
+ const uuid = (0, node_fs_1.readFileSync)(hypervisorUuid, 'utf-8').trim().toLowerCase();
61
+ if (uuid.startsWith('ec2')) {
62
+ return true;
63
+ }
64
+ }
65
+ return false;
66
+ }
67
+ function detectEc2Windows() {
68
+ // On Windows EC2 instances the board asset tag is an instance ID, readable
69
+ // from the registry without elevated privileges.
70
+ const tag = (0, node_child_process_1.execSync)('reg query "HKLM\\SYSTEM\\HardwareConfig\\Current" /v BaseBoardAssetTag 2>nul', { encoding: 'utf-8', timeout: 500 }).trim();
71
+ // Output contains "BaseBoardAssetTag REG_SZ i-0abc..."
72
+ if (/i-[0-9a-f]+/i.test(tag)) {
73
+ return true;
74
+ }
75
+ return false;
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWRldGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVjMi1kZXRlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsc0NBTUM7QUF2QkQsMkRBQThDO0FBQzlDLHFDQUFtRDtBQUNuRCxxQ0FBbUM7QUFFbkM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxJQUFJLFdBQWdDLENBQUM7QUFDckMsU0FBZ0IsYUFBYTtJQUMzQixJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM5QixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsV0FBVyxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQzFCLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLFNBQVM7SUFDaEIsTUFBTSxFQUFFLEdBQUcsSUFBQSxrQkFBUSxHQUFFLENBQUM7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxxQ0FBcUM7UUFDckMseUVBQXlFO1FBQ3pFLDRFQUE0RTtRQUM1RSxzRUFBc0U7UUFDdEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsNEVBQTRFO1FBQzVFLDJCQUEyQjtRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjO0lBQ3JCLGdFQUFnRTtJQUNoRSxNQUFNLGFBQWEsR0FBRyw2Q0FBNkMsQ0FBQztJQUNwRSxJQUFJLElBQUEsb0JBQVUsRUFBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLElBQUEsc0JBQVksRUFBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztJQUM5QyxJQUFJLElBQUEsb0JBQVUsRUFBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUEsc0JBQVksRUFBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsZ0JBQWdCO0lBQ3ZCLDJFQUEyRTtJQUMzRSxpREFBaUQ7SUFDakQsTUFBTSxHQUFHLEdBQUcsSUFBQSw2QkFBUSxFQUNsQiw4RUFBOEUsRUFDOUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDcEMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNULDZEQUE2RDtJQUM3RCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5cbi8qKlxuICogRGV0ZWN0IHdoZXRoZXIgd2UgYXJlIHJ1bm5pbmcgb24gYW4gRUMyIGluc3RhbmNlIGJ5IGluc3BlY3RpbmcgbG9jYWwgc3lzdGVtXG4gKiBtZXRhZGF0YS4gVGhpcyBhdm9pZHMgdGhlIDEtMiBzZWNvbmQgSU1EUyB0aW1lb3V0IG9uIG5vbi1FQzIgbWFjaGluZXMuXG4gKlxuICogRGV0ZWN0aW9uIG1ldGhvZHMgcGVyIHBsYXRmb3JtIChwZXIgQVdTIGRvY3NcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pZGVudGlmeV9lYzJfaW5zdGFuY2VzLmh0bWwpOlxuICogLSBMaW51eDogY2hlY2sgRE1JIGJvYXJkX2Fzc2V0X3RhZyBmb3IgYW4gRUMyIGluc3RhbmNlIElELCBvciBoeXBlcnZpc29yIFVVSUQgZm9yIFwiZWMyXCIgcHJlZml4XG4gKiAtIFdpbmRvd3M6IGNoZWNrIERNSSBib2FyZF9hc3NldF90YWcgdmlhIHJlZ2lzdHJ5XG4gKiAtIG1hY09TIGFuZCBvdGhlciBwbGF0Zm9ybXM6IGFzc3VtZWQgbm90IEVDMlxuICpcbiAqIFRoZSByZXN1bHQgaXMgY2FjaGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuXG4gKi9cbmxldCBjYWNoZWRJc0VjMjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBpc0VjMkluc3RhbmNlKCk6IGJvb2xlYW4ge1xuICBpZiAoY2FjaGVkSXNFYzIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZWRJc0VjMjtcbiAgfVxuICBjYWNoZWRJc0VjMiA9IGRldGVjdEVjMigpO1xuICByZXR1cm4gY2FjaGVkSXNFYzI7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEVjMigpOiBib29sZWFuIHtcbiAgY29uc3Qgb3MgPSBwbGF0Zm9ybSgpO1xuICB0cnkge1xuICAgIGlmIChvcyA9PT0gJ2xpbnV4Jykge1xuICAgICAgcmV0dXJuIGRldGVjdEVjMkxpbnV4KCk7XG4gICAgfVxuICAgIGlmIChvcyA9PT0gJ3dpbjMyJykge1xuICAgICAgcmV0dXJuIGRldGVjdEVjMldpbmRvd3MoKTtcbiAgICB9XG4gICAgLy8gbWFjT1MgYW5kIG90aGVyIHBsYXRmb3Jtczogbm90IEVDMlxuICAgIC8vIChFQzIgTWFjIGluc3RhbmNlcyBydW4gb24gZGVkaWNhdGVkIE1hYyBtaW5pcyB3aXRoIGEgTGludXgtYmFzZWQgTml0cm9cbiAgICAvLyBoeXBlcnZpc29yLCBidXQgdGhlIGd1ZXN0IE9TIHNlZXMgaXRzZWxmIGFzIGRhcndpbi4gSW4gcHJhY3RpY2UgdGhlc2UgYXJlXG4gICAgLy8gZXh0cmVtZWx5IHJhcmUgZm9yIENESyBDTEkgdXNhZ2UuIElmIG5lZWRlZCwgdGhpcyBjYW4gYmUgZXh0ZW5kZWQuKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgZGV0ZWN0aW9uIGZhaWxzLCBhc3N1bWUgRUMyLiBUaGlzIG1ha2VzIHVzIHNsaWdodGx5IHNsb3dlciBidXQgbm90aGluZ1xuICAgIC8vIHdpbGwgdW5leHBlY3RlZGx5IGJyZWFrLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVjdEVjMkxpbnV4KCk6IGJvb2xlYW4ge1xuICAvLyBOaXRybyBpbnN0YW5jZXMgZXhwb3NlIHRoZSBpbnN0YW5jZSBJRCBhcyB0aGUgYm9hcmQgYXNzZXQgdGFnXG4gIGNvbnN0IGJvYXJkQXNzZXRUYWcgPSAnL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL2JvYXJkX2Fzc2V0X3RhZyc7XG4gIGlmIChleGlzdHNTeW5jKGJvYXJkQXNzZXRUYWcpKSB7XG4gICAgY29uc3QgdGFnID0gcmVhZEZpbGVTeW5jKGJvYXJkQXNzZXRUYWcsICd1dGYtOCcpLnRyaW0oKTtcbiAgICBpZiAodGFnLnN0YXJ0c1dpdGgoJ2ktJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFhlbiAoUFYpIGluc3RhbmNlcyBleHBvc2UgYSBVVUlEIHN0YXJ0aW5nIHdpdGggXCJlYzJcIiB2aWEgdGhlIGh5cGVydmlzb3JcbiAgY29uc3QgaHlwZXJ2aXNvclV1aWQgPSAnL3N5cy9oeXBlcnZpc29yL3V1aWQnO1xuICBpZiAoZXhpc3RzU3luYyhoeXBlcnZpc29yVXVpZCkpIHtcbiAgICBjb25zdCB1dWlkID0gcmVhZEZpbGVTeW5jKGh5cGVydmlzb3JVdWlkLCAndXRmLTgnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodXVpZC5zdGFydHNXaXRoKCdlYzInKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RFYzJXaW5kb3dzKCk6IGJvb2xlYW4ge1xuICAvLyBPbiBXaW5kb3dzIEVDMiBpbnN0YW5jZXMgdGhlIGJvYXJkIGFzc2V0IHRhZyBpcyBhbiBpbnN0YW5jZSBJRCwgcmVhZGFibGVcbiAgLy8gZnJvbSB0aGUgcmVnaXN0cnkgd2l0aG91dCBlbGV2YXRlZCBwcml2aWxlZ2VzLlxuICBjb25zdCB0YWcgPSBleGVjU3luYyhcbiAgICAncmVnIHF1ZXJ5IFwiSEtMTVxcXFxTWVNURU1cXFxcSGFyZHdhcmVDb25maWdcXFxcQ3VycmVudFwiIC92IEJhc2VCb2FyZEFzc2V0VGFnIDI+bnVsJyxcbiAgICB7IGVuY29kaW5nOiAndXRmLTgnLCB0aW1lb3V0OiA1MDAgfSxcbiAgKS50cmltKCk7XG4gIC8vIE91dHB1dCBjb250YWlucyBcIkJhc2VCb2FyZEFzc2V0VGFnICAgIFJFR19TWiAgICBpLTBhYmMuLi5cIlxuICBpZiAoL2ktWzAtOWEtZl0rL2kudGVzdCh0YWcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
@@ -6,6 +6,7 @@ import type { SDK, SdkProvider } from '../aws-auth/private';
6
6
  import type { EnvironmentResources, StringWithoutPlaceholders } from '../environment';
7
7
  import type { IoHelper } from '../io/private';
8
8
  import type { ResourcesToImport } from '../resource-import';
9
+ import type { ExecuteChangeSetDeployment } from '../../actions/deploy/private/deployment-method';
9
10
  export interface DeployStackOptions {
10
11
  /**
11
12
  * The stack to be deployed
@@ -80,7 +81,7 @@ export interface DeployStackOptions {
80
81
  *
81
82
  * @default - Change set with defaults
82
83
  */
83
- readonly deploymentMethod?: DeploymentMethod;
84
+ readonly deploymentMethod?: DeploymentMethod | ExecuteChangeSetDeployment;
84
85
  /**
85
86
  * The collection of extra parameters
86
87
  * (in addition to those used for assets)