@aws-cdk/toolkit-lib 1.6.1 → 1.7.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.
package/build-info.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "comment": "Generated at 2025-08-27T11:05:57Z by build-info.sh",
3
- "commit": "5fc1b13"
2
+ "comment": "Generated at 2025-09-03T16:01:18Z by build-info.sh",
3
+ "commit": "e7ea9d5"
4
4
  }
package/db.json.gz CHANGED
Binary file
@@ -19,7 +19,7 @@ export interface FormattedDrift {
19
19
  */
20
20
  readonly unchanged?: string;
21
21
  /**
22
- * Resources that were not checked for drift
22
+ * Resources that were not checked for drift or have an UNKNOWN drift status
23
23
  */
24
24
  readonly unchecked?: string;
25
25
  /**
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vYXBpL2Nsb3VkLWFzc2VtYmx5JztcblxuZXhwb3J0IGludGVyZmFjZSBEcmlmdE9wdGlvbnMge1xuICAvKipcbiAgICogU2VsZWN0IHN0YWNrcyB0byBjaGVjayBmb3IgZHJpZnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgc3RhY2tzXG4gICAqL1xuICByZWFkb25seSBzdGFja3M/OiBTdGFja1NlbGVjdG9yO1xufVxuXG4vKipcbiAqIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZHJpZnQgYXMgZm9ybWF0dGVkIGRyaWZ0IG91dHB1dFxuICpcbiAqIEEgbWlzc2luZyB0eXBlIGltcGxpZXMgbm8gZHJpZnQgb2YgdGhpcyB0eXBlLlxuICogSWYgbm8gZHJpZnQgd2FzIGRldGVjdGVkIGF0IGFsbCwgYWxsIHdpbGwgYmUgbWlzc2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXR0ZWREcmlmdCB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIG5vdCBjaGFuZ2VkXG4gICAqL1xuICByZWFkb25seSB1bmNoYW5nZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IHdlcmUgbm90IGNoZWNrZWQgZm9yIGRyaWZ0XG4gICAqL1xuICByZWFkb25seSB1bmNoZWNrZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB3aXRoIGRyaWZ0XG4gICAqL1xuICByZWFkb25seSBtb2RpZmllZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQgKGRyaWZ0KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21iaW5lZCBkcmlmdCBmb3Igc2VsZWN0ZWQgc3RhY2tzIG9mIHRoZSBhcHBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmlmdFJlc3VsdCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIHdpdGggZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhbiBlcnJvciBvY2N1cnJlZFxuICAgKiBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzV2l0aERyaWZ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IHJlc291cmNlcyB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdC4gSWYgdW5kZWZpbmVkLCB0aGVuIGFuXG4gICAqIGVycm9yIG9jY3VycmVkIGFuZCByZXNvdXJjZXMgd2VyZSBub3QgcHJvcGVybHkgY2hlY2tlZCBmb3IgZHJpZnQuXG4gICAqL1xuICByZWFkb25seSBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogQ29tcGxldGUgZm9ybWF0dGVkIGRyaWZ0XG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZWREcmlmdDogRm9ybWF0dGVkRHJpZnQ7XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdGFja1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vYXBpL2Nsb3VkLWFzc2VtYmx5JztcblxuZXhwb3J0IGludGVyZmFjZSBEcmlmdE9wdGlvbnMge1xuICAvKipcbiAgICogU2VsZWN0IHN0YWNrcyB0byBjaGVjayBmb3IgZHJpZnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgc3RhY2tzXG4gICAqL1xuICByZWFkb25seSBzdGFja3M/OiBTdGFja1NlbGVjdG9yO1xufVxuXG4vKipcbiAqIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZHJpZnQgYXMgZm9ybWF0dGVkIGRyaWZ0IG91dHB1dFxuICpcbiAqIEEgbWlzc2luZyB0eXBlIGltcGxpZXMgbm8gZHJpZnQgb2YgdGhpcyB0eXBlLlxuICogSWYgbm8gZHJpZnQgd2FzIGRldGVjdGVkIGF0IGFsbCwgYWxsIHdpbGwgYmUgbWlzc2luZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXR0ZWREcmlmdCB7XG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIG5vdCBjaGFuZ2VkXG4gICAqL1xuICByZWFkb25seSB1bmNoYW5nZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IHdlcmUgbm90IGNoZWNrZWQgZm9yIGRyaWZ0IG9yIGhhdmUgYW4gVU5LTk9XTiBkcmlmdCBzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hlY2tlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHdpdGggZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCAoZHJpZnQpXG4gICAqL1xuICByZWFkb25seSBkZWxldGVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbWJpbmVkIGRyaWZ0IGZvciBzZWxlY3RlZCBzdGFja3Mgb2YgdGhlIGFwcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERyaWZ0UmVzdWx0IHtcbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXNvdXJjZXMgd2l0aCBkcmlmdC4gSWYgdW5kZWZpbmVkLCB0aGVuIGFuIGVycm9yIG9jY3VycmVkXG4gICAqIGFuZCByZXNvdXJjZXMgd2VyZSBub3QgcHJvcGVybHkgY2hlY2tlZCBmb3IgZHJpZnQuXG4gICAqL1xuICByZWFkb25seSBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IG1hbnkgcmVzb3VyY2VzIHdlcmUgbm90IGNoZWNrZWQgZm9yIGRyaWZ0LiBJZiB1bmRlZmluZWQsIHRoZW4gYW5cbiAgICogZXJyb3Igb2NjdXJyZWQgYW5kIHJlc291cmNlcyB3ZXJlIG5vdCBwcm9wZXJseSBjaGVja2VkIGZvciBkcmlmdC5cbiAgICovXG4gIHJlYWRvbmx5IG51bVJlc291cmNlc1VuY2hlY2tlZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBmb3JtYXR0ZWQgZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlZERyaWZ0OiBGb3JtYXR0ZWREcmlmdDtcbn1cbiJdfQ==
@@ -189,7 +189,6 @@ export declare class SDK {
189
189
  private readonly credProvider;
190
190
  readonly currentRegion: string;
191
191
  readonly config: ConfigurationOptions;
192
- protected readonly logger?: ISdkLogger;
193
192
  private readonly accountCache;
194
193
  /**
195
194
  * STS is used to check credential validity, don't do too many retries.
@@ -41,7 +41,6 @@ let SDK = class SDK {
41
41
  credProvider;
42
42
  currentRegion;
43
43
  config;
44
- logger;
45
44
  accountCache;
46
45
  /**
47
46
  * STS is used to check credential validity, don't do too many retries.
@@ -70,9 +69,8 @@ let SDK = class SDK {
70
69
  requestHandler,
71
70
  retryStrategy: new util_retry_1.ConfiguredRetryStrategy(7, (attempt) => 300 * (2 ** attempt)),
72
71
  customUserAgent: (0, user_agent_1.defaultCliUserAgent)(),
73
- logger,
72
+ logger: logger ? makeSdkLoggerSafeByBindingThis(logger) : undefined,
74
73
  };
75
- this.logger = logger;
76
74
  this.currentRegion = region;
77
75
  }
78
76
  appendCustomUserAgent(userAgentData) {
@@ -391,4 +389,24 @@ exports.SDK = SDK = __decorate([
391
389
  tracing_1.traceMemberMethods
392
390
  ], SDK);
393
391
  const CURRENT_ACCOUNT_KEY = Symbol('current_account_key');
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBLDREQVFpQztBQU9qQyxzRUFJc0M7QUFrRXRDLDBFQWtDd0M7QUFPeEMsNEVBSXlDO0FBQ3pDLGdFQUttQztBQUNuQyxvREE2QjZCO0FBcUI3QixvREFXNkI7QUFVN0Isb0RBTTZCO0FBVzdCLGdHQU9tRDtBQUNuRCxvREFXNkI7QUFDN0Isb0RBUTZCO0FBQzdCLDBEQWtCZ0M7QUFDaEMsOERBV2tDO0FBcUJsQyxrREFVNEI7QUFDNUIsNEVBS3lDO0FBS3pDLG9EQUc2QjtBQUM3QixvREFLNkI7QUFDN0Isb0RBQTBFO0FBQzFFLHNEQUE4QztBQUM5QyxxRUFBMEU7QUFDMUUsbURBQTZEO0FBRTdELG1EQUF3RDtBQUV4RCxxQ0FBdUM7QUFHdkMsdUNBQStDO0FBQy9DLDZDQUFtRDtBQUNuRCwrREFBa0U7QUFDbEUscUNBQWdEO0FBZ05oRDs7R0FFRztBQUVJLElBQU0sR0FBRyxHQUFULE1BQU0sR0FBRztJQTZCSztJQTVCSCxhQUFhLENBQVM7SUFFdEIsTUFBTSxDQUF1QjtJQUUxQixNQUFNLENBQWM7SUFFdEIsWUFBWSxDQUFDO0lBRTlCOztPQUVHO0lBQ2MsZ0JBQWdCLEdBQUcsSUFBSSxvQ0FBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHOzs7Ozs7T0FNRztJQUNLLHFCQUFxQixHQUFHLEtBQUssQ0FBQztJQUV0Qzs7T0FFRztJQUNjLEtBQUssQ0FBaUM7SUFFdkQsWUFDbUIsWUFBK0MsRUFDaEUsTUFBYyxFQUNkLGNBQXNDLEVBQ3RDLFFBQWtCLEVBQ2xCLE1BQW1CO1FBSkYsaUJBQVksR0FBWixZQUFZLENBQW1DO1FBTWhFLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQUUsRUFB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QUMsQ0FBQztRQUNwRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7Q0FDRixDQUFBO0FBbGZZLGtCQUFHO2NBQUgsR0FBRztJQURmLDRCQUFrQjtHQUNOLEdBQUcsQ0FrZmY7QUFFRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXIgfSBmcm9tICdAYXdzLWNkay9jbGktcGx1Z2luLWNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHtcbiAgRnVuY3Rpb25Db25maWd1cmF0aW9uLFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCxcbiAgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kT3V0cHV0LFxuICBMaXN0RnVuY3Rpb25zQ29tbWFuZElucHV0LFxuICBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0LFxuICBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQXBpS2V5Q29tbWFuZElucHV0LFxuICBVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVSZXNvbHZlckNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlUmVzb2x2ZXJDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYXBwc3luYyc7XG5pbXBvcnQge1xuICBBcHBTeW5jQ2xpZW50LFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmQsXG4gIHBhZ2luYXRlTGlzdEZ1bmN0aW9ucyxcbiAgU3RhcnRTY2hlbWFDcmVhdGlvbkNvbW1hbmQsXG4gIFVwZGF0ZUFwaUtleUNvbW1hbmQsXG4gIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZCxcbiAgVXBkYXRlUmVzb2x2ZXJDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYXBwc3luYyc7XG5pbXBvcnQgdHlwZSB7XG4gIEdldFJlc291cmNlQ29tbWFuZElucHV0LFxuICBHZXRSZXNvdXJjZUNvbW1hbmRPdXRwdXQsXG4gIExpc3RSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIExpc3RSZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB7XG4gIENsb3VkQ29udHJvbENsaWVudCxcbiAgR2V0UmVzb3VyY2VDb21tYW5kLFxuICBMaXN0UmVzb3VyY2VzQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkY29udHJvbCc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kSW5wdXQsXG4gIENvbnRpbnVlVXBkYXRlUm9sbGJhY2tDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQsXG4gIExpc3RTdGFja3NDb21tYW5kSW5wdXQsXG4gIExpc3RTdGFja3NDb21tYW5kT3V0cHV0LFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0LFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dCxcbiAgU3RhY2tSZXNvdXJjZVN1bW1hcnksXG4gIENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBEZWxldGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgRGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBEZWxldGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlU3RhY2tDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQsXG4gIERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZE91dHB1dCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQsXG4gIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQsXG4gIEdldFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBHZXRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQsXG4gIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRJbnB1dCxcbiAgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZE91dHB1dCxcbiAgTGlzdEV4cG9ydHNDb21tYW5kSW5wdXQsXG4gIExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRPdXRwdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0LFxuICBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRPdXRwdXQsXG4gIExpc3RTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQsXG4gIFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlU3RhY2tDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZElucHV0LFxuICBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kT3V0cHV0LFxuICBTdGFja1N1bW1hcnksXG4gIERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dCxcbiAgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRJbnB1dCxcbiAgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRPdXRwdXQsXG4gIERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRJbnB1dCxcbiAgRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZElucHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHtcbiAgcGFnaW5hdGVMaXN0U3RhY2tzLFxuICBDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmQsXG4gIENyZWF0ZUNoYW5nZVNldENvbW1hbmQsXG4gIENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kLFxuICBEZWxldGVDaGFuZ2VTZXRDb21tYW5kLFxuICBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQsXG4gIERlbGV0ZVN0YWNrQ29tbWFuZCxcbiAgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kLFxuICBEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZCxcbiAgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kLFxuICBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZCxcbiAgRXhlY3V0ZUNoYW5nZVNldENvbW1hbmQsXG4gIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZCxcbiAgR2V0VGVtcGxhdGVDb21tYW5kLFxuICBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kLFxuICBMaXN0RXhwb3J0c0NvbW1hbmQsXG4gIExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZCxcbiAgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmQsXG4gIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZCxcbiAgTGlzdFN0YWNrc0NvbW1hbmQsXG4gIHBhZ2luYXRlTGlzdFN0YWNrUmVzb3VyY2VzLFxuICBSb2xsYmFja1N0YWNrQ29tbWFuZCxcbiAgU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kLFxuICBVcGRhdGVTdGFja0NvbW1hbmQsXG4gIFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmQsXG4gIERldGVjdFN0YWNrRHJpZnRDb21tYW5kLFxuICBEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUge1xuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kSW5wdXQsXG4gIEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZHdhdGNoLWxvZ3MnO1xuaW1wb3J0IHtcbiAgQ2xvdWRXYXRjaExvZ3NDbGllbnQsXG4gIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5pbXBvcnQge1xuICBDb2RlQnVpbGRDbGllbnQsXG4gIFVwZGF0ZVByb2plY3RDb21tYW5kLFxuICB0eXBlIFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlUHJvamVjdENvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jb2RlYnVpbGQnO1xuaW1wb3J0IHtcbiAgRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVJbWFnZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVTZWN1cml0eUdyb3Vwc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVN1Ym5ldHNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVWcGNzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwY3NDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVWcGNzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dCxcbiAgRUMyQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWMyJztcbmltcG9ydCB0eXBlIHtcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRJbnB1dCxcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRPdXRwdXQsXG4gIExpc3RJbWFnZXNDb21tYW5kSW5wdXQsXG4gIExpc3RJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBQdXRJbWFnZUNvbW1hbmRJbnB1dCxcbiAgUHV0SW1hZ2VDb21tYW5kT3V0cHV0LFxuICBCYXRjaEdldEltYWdlQ29tbWFuZElucHV0LFxuICBCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dCxcbiAgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0IGFzIEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kT3V0cHV0LFxuICBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQsXG4gIEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQsXG4gIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3InO1xuaW1wb3J0IHtcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsXG4gIENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kLFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kLFxuICBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmQsXG4gIEVDUkNsaWVudCxcbiAgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZCxcbiAgTGlzdEltYWdlc0NvbW1hbmQsXG4gIFB1dEltYWdlQ29tbWFuZCxcbiAgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kLFxuICBCYXRjaEdldEltYWdlQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcic7XG5pbXBvcnQgdHlwZSB7XG4gIERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQsXG4gIFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kSW5wdXQsXG4gIExpc3RDbHVzdGVyc0NvbW1hbmRJbnB1dCxcbiAgTGlzdENsdXN0ZXJzQ29tbWFuZE91dHB1dCxcbiAgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB7XG4gIEVDU0NsaWVudCxcbiAgTGlzdENsdXN0ZXJzQ29tbWFuZCxcbiAgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmQsXG4gIFVwZGF0ZVNlcnZpY2VDb21tYW5kLFxuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcyc7XG5pbXBvcnQgdHlwZSB7XG4gIExpc3RlbmVyLFxuICBMb2FkQmFsYW5jZXIsXG4gIERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVUYWdzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVRhZ3NDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWxhc3RpYy1sb2FkLWJhbGFuY2luZy12Mic7XG5pbXBvcnQge1xuICBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmQsXG4gIERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmQsXG4gIERlc2NyaWJlVGFnc0NvbW1hbmQsXG4gIEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQsXG4gIHBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnMsXG4gIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWxhc3RpYy1sb2FkLWJhbGFuY2luZy12Mic7XG5pbXBvcnQge1xuICBDcmVhdGVQb2xpY3lDb21tYW5kLFxuICB0eXBlIENyZWF0ZVBvbGljeUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBDcmVhdGVQb2xpY3lDb21tYW5kT3V0cHV0LFxuICBHZXRQb2xpY3lDb21tYW5kLFxuICB0eXBlIEdldFBvbGljeUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRQb2xpY3lDb21tYW5kT3V0cHV0LFxuICBHZXRSb2xlQ29tbWFuZCxcbiAgdHlwZSBHZXRSb2xlQ29tbWFuZElucHV0LFxuICB0eXBlIEdldFJvbGVDb21tYW5kT3V0cHV0LFxuICBJQU1DbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHtcbiAgRGVzY3JpYmVLZXlDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlS2V5Q29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlS2V5Q29tbWFuZE91dHB1dCxcbiAgS01TQ2xpZW50LFxuICBMaXN0QWxpYXNlc0NvbW1hbmQsXG4gIHR5cGUgTGlzdEFsaWFzZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQta21zJztcbmltcG9ydCB7XG4gIEludm9rZUNvbW1hbmQsXG4gIHR5cGUgSW52b2tlQ29tbWFuZElucHV0LFxuICB0eXBlIEludm9rZUNvbW1hbmRPdXRwdXQsXG4gIExhbWJkYUNsaWVudCxcbiAgUHVibGlzaFZlcnNpb25Db21tYW5kLFxuICB0eXBlIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZElucHV0LFxuICB0eXBlIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlQWxpYXNDb21tYW5kLFxuICB0eXBlIFVwZGF0ZUFsaWFzQ29tbWFuZElucHV0LFxuICB0eXBlIFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZE91dHB1dCxcbiAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgR2V0SG9zdGVkWm9uZUNvbW1hbmQsXG4gIHR5cGUgR2V0SG9zdGVkWm9uZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRIb3N0ZWRab25lQ29tbWFuZE91dHB1dCxcbiAgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZE91dHB1dCxcbiAgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZE91dHB1dCxcbiAgUm91dGU1M0NsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXJvdXRlLTUzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0LFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0LFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dCxcbiAgUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCxcbiAgUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQsXG4gIENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dCxcbiAgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRJbnB1dCxcbiAgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0LFxuICBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdENvbW1hbmRJbnB1dCxcbiAgR2V0T2JqZWN0Q29tbWFuZE91dHB1dCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmRPdXRwdXQsXG4gIFB1dE9iamVjdENvbW1hbmRJbnB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7XG4gIERlbGV0ZU9iamVjdHNDb21tYW5kLFxuICBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmQsXG4gIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZCxcbiAgR2V0T2JqZWN0Q29tbWFuZCxcbiAgR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsXG4gIExpc3RPYmplY3RzVjJDb21tYW5kLFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgUzNDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge1xuICBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIHR5cGUgR2V0U2VjcmV0VmFsdWVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0LFxuICBTZWNyZXRzTWFuYWdlckNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7XG4gIFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNmbic7XG5pbXBvcnQge1xuICBTRk5DbGllbnQsXG4gIFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZm4nO1xuaW1wb3J0IHtcbiAgR2V0UGFyYW1ldGVyQ29tbWFuZCxcbiAgdHlwZSBHZXRQYXJhbWV0ZXJDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dCxcbiAgU1NNQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3NtJztcbmltcG9ydCB7IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCwgU1RTQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cyc7XG5pbXBvcnQgeyBVcGxvYWQgfSBmcm9tICdAYXdzLXNkay9saWItc3RvcmFnZSc7XG5pbXBvcnQgeyBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMgfSBmcm9tICdAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQnO1xuaW1wb3J0IHsgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgfSBmcm9tICdAc21pdGh5L3V0aWwtcmV0cnknO1xuaW1wb3J0IHR5cGUgeyBXYWl0ZXJSZXN1bHQgfSBmcm9tICdAc21pdGh5L3V0aWwtd2FpdGVyJztcbmltcG9ydCB7IEFjY291bnRBY2Nlc3NLZXlDYWNoZSB9IGZyb20gJy4vYWNjb3VudC1jYWNoZSc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RIYW5kbGVyU2V0dGluZ3MgfSBmcm9tICcuL2Jhc2UtY3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgY2FjaGVkQXN5bmMgfSBmcm9tICcuL2NhY2hlZCc7XG5pbXBvcnQgdHlwZSB7IElTZGtMb2dnZXIgfSBmcm9tICcuL3Nkay1sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBBY2NvdW50IH0gZnJvbSAnLi9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHsgdHJhY2VNZW1iZXJNZXRob2RzIH0gZnJvbSAnLi90cmFjaW5nJztcbmltcG9ydCB7IGRlZmF1bHRDbGlVc2VyQWdlbnQgfSBmcm9tICcuL3VzZXItYWdlbnQnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBTM0NsaWVudE9wdGlvbnMge1xuICAvKipcbiAgICogSWYgQVBJcyBhcmUgdXNlZCB0aGF0IHJlcXVpcmUgTUQ1IGNoZWNrc3Vtcy5cbiAgICpcbiAgICogU29tZSBTMyBBUElzIGluIFNES3YyIGhhdmUgYSBidWcgdGhhdCBhbHdheXMgcmVxdWlyZXMgdGhlbSB0byB1c2UgYSBNRDUgY2hlY2tzdW0uXG4gICAqIFRoZXNlIEFQSXMgYXJlIG5vdCBnb2luZyB0byBiZSBzdXBwb3J0ZWQgaW4gYSBGSVBTIGVudmlyb25tZW50LlxuICAgKi9cbiAgbmVlZHNNZDVDaGVja3N1bXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFkZGl0aW9uYWwgU0RLIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNka09wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBkZXNjcmlwdGl2ZSBzdHJpbmdzIHRoYXQgaW5kaWNhdGUgd2hlcmUgdGhlIFwiQXNzdW1lUm9sZVwiIGNyZWRlbnRpYWxzIGFyZSBjb21pbmcgZnJvbVxuICAgKlxuICAgKiBXaWxsIGJlIHByaW50ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSB0byBoZWxwIHVzZXJzIGRpYWdub3NlIGF1dGggcHJvYmxlbXMuXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVSb2xlQ3JlZGVudGlhbHNTb3VyY2VEZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLy8gVE9ETzogc3RpbGwgc29tZSBjbGVhbnVwIGhlcmUuIE1ha2UgdGhlIHBhZ2luYXRpb24gZnVuY3Rpb25zIGRvIGFsbCB0aGUgd29yayBoZXJlIGluc3RlYWQgb2YgaW4gaW5kaXZpZHVhbCBwYWNrYWdlcy5cbi8vIEFsc28gYWRkIGFzeW5jL2F3YWl0LiBEb2VzIHRoYXQgYWN0dWFsbHkgbWF0dGVyIGluIHRoaXMgY29udGV4dD8gRmluZCBvdXQgYW5kIHVwZGF0ZSBhY2NvcmRpbmdseS5cblxuLy8gQWxzbyBhZGQgbm90ZXMgdG8gdGhlIFBSIGFib3V0IHdoeSB5b3UgaW1wb3J0ZWQgZXZlcnl0aGluZyBpbmRpdmlkdWFsbHkgYW5kIHVzZWQgJ3R5cGUnIHNvIHJldmlld2VycyBkb24ndCBoYXZlIHRvIGFzay5cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWd1cmF0aW9uT3B0aW9ucyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBjcmVkZW50aWFsczogU0RLdjNDb21wYXRpYmxlQ3JlZGVudGlhbFByb3ZpZGVyO1xuICByZXF1ZXN0SGFuZGxlcjogUmVxdWVzdEhhbmRsZXJTZXR0aW5ncztcbiAgcmV0cnlTdHJhdGVneTogQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3k7XG4gIGN1c3RvbVVzZXJBZ2VudDogc3RyaW5nO1xuICBsb2dnZXI/OiBJU2RrTG9nZ2VyO1xuICBzM0Rpc2FibGVCb2R5U2lnbmluZz86IGJvb2xlYW47XG4gIGNvbXB1dGVDaGVja3N1bXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTeW5jQ2xpZW50IHtcbiAgZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXMoaW5wdXQ6IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQ+O1xuICBzdGFydFNjaGVtYUNyZWF0aW9uKGlucHV0OiBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUFwaUtleShpbnB1dDogVXBkYXRlQXBpS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlRnVuY3Rpb24oaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVSZXNvbHZlcihpbnB1dDogVXBkYXRlUmVzb2x2ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVJlc29sdmVyQ29tbWFuZE91dHB1dD47XG4gIC8vIFBhZ2luYXRpb24gZnVuY3Rpb25zXG4gIGxpc3RGdW5jdGlvbnMoaW5wdXQ6IExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEZ1bmN0aW9uQ29uZmlndXJhdGlvbltdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRDb250cm9sQ2xpZW50IHtcbiAgbGlzdFJlc291cmNlcyhpbnB1dDogTGlzdFJlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRSZXNvdXJjZShpbnB1dDogR2V0UmVzb3VyY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFJlc291cmNlQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IHtcbiAgY29udGludWVVcGRhdGVSb2xsYmFjayhpbnB1dDogQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Q29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVDaGFuZ2VTZXQoaW5wdXQ6IENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGNyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlU3RhY2soaW5wdXQ6IENyZWF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVDaGFuZ2VTZXQoaW5wdXQ6IERlbGV0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlKGlucHV0OiBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlU3RhY2soaW5wdXQ6IERlbGV0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUNoYW5nZVNldChpbnB1dDogRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGUoXG4gICAgaW5wdXQ6IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8RGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVJlc291cmNlU2NhbihpbnB1dDogRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1cyhpbnB1dDogRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja3MoaW5wdXQ6IERlc2NyaWJlU3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHMoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3RhY2tSZXNvdXJjZXMoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kT3V0cHV0PjtcbiAgZGV0ZWN0U3RhY2tEcmlmdChpbnB1dDogRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRPdXRwdXQ+O1xuICBkZXRlY3RTdGFja1Jlc291cmNlRHJpZnQoaW5wdXQ6IERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZE91dHB1dD47XG4gIGV4ZWN1dGVDaGFuZ2VTZXQoaW5wdXQ6IEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQpOiBQcm9taXNlPEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PjtcbiAgZ2V0R2VuZXJhdGVkVGVtcGxhdGUoaW5wdXQ6IEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRUZW1wbGF0ZShpbnB1dDogR2V0VGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFRlbXBsYXRlQ29tbWFuZE91dHB1dD47XG4gIGdldFRlbXBsYXRlU3VtbWFyeShpbnB1dDogR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kT3V0cHV0PjtcbiAgbGlzdEV4cG9ydHMoaW5wdXQ6IExpc3RFeHBvcnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0RXhwb3J0c0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlcyhcbiAgICBpbnB1dDogTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFJlc291cmNlU2NhblJlc291cmNlcyhcbiAgICBpbnB1dDogTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RSZXNvdXJjZVNjYW5zKGlucHV0PzogTGlzdFJlc291cmNlU2NhbnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZE91dHB1dD47XG4gIGxpc3RTdGFja3MoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RTdGFja3NDb21tYW5kT3V0cHV0PjtcbiAgcm9sbGJhY2tTdGFjayhpbnB1dDogUm9sbGJhY2tTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Um9sbGJhY2tTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICBzdGFydFJlc291cmNlU2NhbihpbnB1dDogU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0UmVzb3VyY2VTY2FuQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVN0YWNrKGlucHV0OiBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU3RhY2tDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uKFxuICAgIGlucHV0OiBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8VXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZE91dHB1dD47XG4gIC8vIFBhZ2luYXRpb24gZnVuY3Rpb25zXG4gIGRlc2NyaWJlU3RhY2tFdmVudHMoaW5wdXQ6IERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFN0YWNrUmVzb3VyY2VzKGlucHV0OiBMaXN0U3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+O1xuICBwYWdpbmF0ZWRMaXN0U3RhY2tzKGlucHV0OiBMaXN0U3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFja1N1bW1hcnlbXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsb3VkV2F0Y2hMb2dzQ2xpZW50IHtcbiAgZGVzY3JpYmVMb2dHcm91cHMoaW5wdXQ6IERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRPdXRwdXQ+O1xuICBmaWx0ZXJMb2dFdmVudHMoaW5wdXQ6IEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RmlsdGVyTG9nRXZlbnRzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvZGVCdWlsZENsaWVudCB7XG4gIHVwZGF0ZVByb2plY3QoaW5wdXQ6IFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVByb2plY3RDb21tYW5kT3V0cHV0Pjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUVDMkNsaWVudCB7XG4gIGRlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXMoXG4gICAgaW5wdXQ6IERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8RGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUltYWdlcyhpbnB1dDogRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW5zdGFuY2VzKGlucHV0OiBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVSb3V0ZVRhYmxlcyhpbnB1dDogRGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSb3V0ZVRhYmxlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVNlY3VyaXR5R3JvdXBzKGlucHV0OiBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3VibmV0cyhpbnB1dDogRGVzY3JpYmVTdWJuZXRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzKFxuICAgIGlucHV0OiBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8RGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlVnBjcyhpbnB1dDogRGVzY3JpYmVWcGNzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcG5HYXRld2F5cyhpbnB1dDogRGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVWcG5HYXRld2F5c0NvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFQ1JDbGllbnQge1xuICBiYXRjaERlbGV0ZUltYWdlKGlucHV0OiBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaERlbGV0ZUltYWdlQ29tbWFuZE91dHB1dD47XG4gIGJhdGNoR2V0SW1hZ2UoaW5wdXQ6IEJhdGNoR2V0SW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoR2V0SW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlUmVwb3NpdG9yeShpbnB1dDogQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlUmVwb3NpdG9yeUNvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUltYWdlcyhpbnB1dDogRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlUmVwb3NpdG9yaWVzKGlucHV0OiBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXBvc2l0b3JpZXNDb21tYW5kT3V0cHV0PjtcbiAgZ2V0QXV0aG9yaXphdGlvblRva2VuKGlucHV0OiBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0SW1hZ2VzKGlucHV0OiBMaXN0SW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SW1hZ2VzQ29tbWFuZE91dHB1dD47XG4gIHB1dEltYWdlKGlucHV0OiBQdXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0SW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgcHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24oXG4gICAgaW5wdXQ6IFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVDU0NsaWVudCB7XG4gIGxpc3RDbHVzdGVycyhpbnB1dDogTGlzdENsdXN0ZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0Q2x1c3RlcnNDb21tYW5kT3V0cHV0PjtcbiAgcmVnaXN0ZXJUYXNrRGVmaW5pdGlvbihpbnB1dDogUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8UmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVTZXJ2aWNlKGlucHV0OiBVcGRhdGVTZXJ2aWNlQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTZXJ2aWNlQ29tbWFuZE91dHB1dD47XG4gIC8vIFdhaXRlcnNcbiAgd2FpdFVudGlsU2VydmljZXNTdGFibGUoaW5wdXQ6IERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQsIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50IHtcbiAgZGVzY3JpYmVMaXN0ZW5lcnMoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZUxvYWRCYWxhbmNlcnMoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlVGFncyhpbnB1dDogRGVzY3JpYmVUYWdzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVRhZ3NDb21tYW5kT3V0cHV0PjtcbiAgLy8gUGFnaW5hdGlvblxuICBwYWdpbmF0ZURlc2NyaWJlTGlzdGVuZXJzKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdGVuZXJbXT47XG4gIHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzKGlucHV0OiBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExvYWRCYWxhbmNlcltdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSUFNQ2xpZW50IHtcbiAgY3JlYXRlUG9saWN5KGlucHV0OiBDcmVhdGVQb2xpY3lDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVBvbGljeUNvbW1hbmRPdXRwdXQ+O1xuICBnZXRQb2xpY3koaW5wdXQ6IEdldFBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UG9saWN5Q29tbWFuZE91dHB1dD47XG4gIGdldFJvbGUoaW5wdXQ6IEdldFJvbGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFJvbGVDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJS01TQ2xpZW50IHtcbiAgZGVzY3JpYmVLZXkoaW5wdXQ6IERlc2NyaWJlS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUtleUNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0QWxpYXNlcyhpbnB1dDogTGlzdEFsaWFzZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RBbGlhc2VzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxhbWJkYUNsaWVudCB7XG4gIGludm9rZUNvbW1hbmQoaW5wdXQ6IEludm9rZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8SW52b2tlQ29tbWFuZE91dHB1dD47XG4gIHB1Ymxpc2hWZXJzaW9uKGlucHV0OiBQdWJsaXNoVmVyc2lvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHVibGlzaFZlcnNpb25Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlQWxpYXMoaW5wdXQ6IFVwZGF0ZUFsaWFzQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBbGlhc0NvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVGdW5jdGlvbkNvZGUoaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbihcbiAgICBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICAvLyBXYWl0ZXJzXG4gIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZChkZWxheVNlY29uZHM6IG51bWJlciwgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8V2FpdGVyUmVzdWx0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUm91dGU1M0NsaWVudCB7XG4gIGdldEhvc3RlZFpvbmUoaW5wdXQ6IEdldEhvc3RlZFpvbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEhvc3RlZFpvbmVDb21tYW5kT3V0cHV0PjtcbiAgbGlzdEhvc3RlZFpvbmVzKGlucHV0OiBMaXN0SG9zdGVkWm9uZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RIb3N0ZWRab25lc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0SG9zdGVkWm9uZXNCeU5hbWUoaW5wdXQ6IExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVMzQ2xpZW50IHtcbiAgZGVsZXRlT2JqZWN0cyhpbnB1dDogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0c0NvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVPYmplY3RUYWdnaW5nKGlucHV0OiBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD47XG4gIGdldEJ1Y2tldEVuY3J5cHRpb24oaW5wdXQ6IEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kT3V0cHV0PjtcbiAgZ2V0QnVja2V0TG9jYXRpb24oaW5wdXQ6IEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICBnZXRPYmplY3QoaW5wdXQ6IEdldE9iamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0T2JqZWN0Q29tbWFuZE91dHB1dD47XG4gIGdldE9iamVjdFRhZ2dpbmcoaW5wdXQ6IEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PjtcbiAgbGlzdE9iamVjdHNWMihpbnB1dDogTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdE9iamVjdHNWMkNvbW1hbmRPdXRwdXQ+O1xuICBwdXRPYmplY3RUYWdnaW5nKGlucHV0OiBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD47XG4gIHVwbG9hZChpbnB1dDogUHV0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxDb21wbGV0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZWNyZXRzTWFuYWdlckNsaWVudCB7XG4gIGdldFNlY3JldFZhbHVlKGlucHV0OiBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU1NNQ2xpZW50IHtcbiAgZ2V0UGFyYW1ldGVyKGlucHV0OiBHZXRQYXJhbWV0ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdGVwRnVuY3Rpb25zQ2xpZW50IHtcbiAgdXBkYXRlU3RhdGVNYWNoaW5lKGlucHV0OiBVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG4vKipcbiAqIEJhc2UgZnVuY3Rpb25hbGl0eSBvZiBTREsgd2l0aG91dCBjcmVkZW50aWFsIGZldGNoaW5nXG4gKi9cbkB0cmFjZU1lbWJlck1ldGhvZHNcbmV4cG9ydCBjbGFzcyBTREsge1xuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFJlZ2lvbjogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb25PcHRpb25zO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBsb2dnZXI/OiBJU2RrTG9nZ2VyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudENhY2hlO1xuXG4gIC8qKlxuICAgKiBTVFMgaXMgdXNlZCB0byBjaGVjayBjcmVkZW50aWFsIHZhbGlkaXR5LCBkb24ndCBkbyB0b28gbWFueSByZXRyaWVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdHNSZXRyeVN0cmF0ZWd5ID0gbmV3IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5KDMsIChhdHRlbXB0KSA9PiAxMDAgKiAoMiAqKiBhdHRlbXB0KSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2UgaGF2ZSBwcm9vZiB0aGF0IHRoZSBjcmVkZW50aWFscyBoYXZlIG5vdCBleHBpcmVkXG4gICAqXG4gICAqIFdlIG5lZWQgdG8gZG8gc29tZSBtYW51YWwgcGx1bWJpbmcgYXJvdW5kIHRoaXMgYmVjYXVzZSB0aGUgSlMgU0RLdjIgdHJlYXRzIGBFeHBpcmVkVG9rZW5gXG4gICAqIGFzIHJldHJpYWJsZSBhbmQgd2UgaGF2ZSBoZWZ0eSByZXRyaWVzIG9uIENGTiBjYWxscyBtYWtpbmcgdGhlIENMSSBoYW5nIGZvciBhIGdvb2QgMTUgbWludXRlc1xuICAgKiBpZiB0aGUgY3JlZGVudGlhbHMgaGF2ZSBleHBpcmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlZGVudGlhbHNWYWxpZGF0ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBjcmVhdGUgZGVidWcgbWVzc2FnZXNcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVidWc6IChtc2c6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNyZWRQcm92aWRlcjogU0RLdjNDb21wYXRpYmxlQ3JlZGVudGlhbFByb3ZpZGVyLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlclNldHRpbmdzLFxuICAgIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgICBsb2dnZXI/OiBJU2RrTG9nZ2VyLFxuICApIHtcbiAgICBjb25zdCBkZWJ1Z0ZuID0gYXN5bmMgKG1zZzogc3RyaW5nKSA9PiBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1Zyhtc2cpO1xuICAgIHRoaXMuYWNjb3VudENhY2hlID0gbmV3IEFjY291bnRBY2Nlc3NLZXlDYWNoZShBY2NvdW50QWNjZXNzS2V5Q2FjaGUuREVGQVVMVF9QQVRILCBkZWJ1Z0ZuKTtcbiAgICB0aGlzLmRlYnVnID0gZGVidWdGbjtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGNyZWRlbnRpYWxzOiBjcmVkUHJvdmlkZXIsXG4gICAgICByZXF1ZXN0SGFuZGxlcixcbiAgICAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSg3LCAoYXR0ZW1wdCkgPT4gMzAwICogKDIgKiogYXR0ZW1wdCkpLFxuICAgICAgY3VzdG9tVXNlckFnZW50OiBkZWZhdWx0Q2xpVXNlckFnZW50KCksXG4gICAgICBsb2dnZXIsXG4gICAgfTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLmN1cnJlbnRSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBwdWJsaWMgYXBwZW5kQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXVzZXJBZ2VudERhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q3VzdG9tVXNlckFnZW50ID0gdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50O1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IGN1cnJlbnRDdXN0b21Vc2VyQWdlbnQgPyBgJHtjdXJyZW50Q3VzdG9tVXNlckFnZW50fSAke3VzZXJBZ2VudERhdGF9YCA6IHVzZXJBZ2VudERhdGE7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudD8ucmVwbGFjZSh1c2VyQWdlbnREYXRhLCAnJyk7XG4gIH1cblxuICBwdWJsaWMgYXBwc3luYygpOiBJQXBwU3luY0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEFwcFN5bmNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRTY2hlbWFDcmVhdGlvblN0YXR1czogKFxuICAgICAgICBpbnB1dDogR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgc3RhcnRTY2hlbWFDcmVhdGlvbjogKGlucHV0OiBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVBcGlLZXk6IChpbnB1dDogVXBkYXRlQXBpS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlQXBpS2V5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlRnVuY3Rpb246IChpbnB1dDogVXBkYXRlRnVuY3Rpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlUmVzb2x2ZXI6IChpbnB1dDogVXBkYXRlUmVzb2x2ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVJlc29sdmVyQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVJlc29sdmVyQ29tbWFuZChpbnB1dCkpLFxuXG4gICAgICAvLyBQYWdpbmF0aW9uIEZ1bmN0aW9uc1xuICAgICAgbGlzdEZ1bmN0aW9uczogYXN5bmMgKGlucHV0OiBMaXN0RnVuY3Rpb25zQ29tbWFuZElucHV0KTogUHJvbWlzZTxGdW5jdGlvbkNvbmZpZ3VyYXRpb25bXT4gPT4ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbnMgPSBBcnJheTxGdW5jdGlvbkNvbmZpZ3VyYXRpb24+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlTGlzdEZ1bmN0aW9ucyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaCguLi4ocGFnZS5mdW5jdGlvbnMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb25zO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNsb3VkQ29udHJvbCgpOiBJQ2xvdWRDb250cm9sQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRDb250cm9sQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFJlc291cmNlczogKGlucHV0OiBMaXN0UmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RSZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRSZXNvdXJjZTogKGlucHV0OiBHZXRSZXNvdXJjZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UmVzb3VyY2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0UmVzb3VyY2VDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjbG91ZEZvcm1hdGlvbigpOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSgxMSwgKGF0dGVtcHQ6IG51bWJlcikgPT4gMTAwMCAqICgyICoqIGF0dGVtcHQpKSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGludWVVcGRhdGVSb2xsYmFjazogYXN5bmMgKFxuICAgICAgICBpbnB1dDogQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8Q29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgY3JlYXRlQ2hhbmdlU2V0OiAoaW5wdXQ6IENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGNyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8Q3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVTdGFjazogKGlucHV0OiBDcmVhdGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBkZWxldGVDaGFuZ2VTZXQ6IChpbnB1dDogRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVsZXRlR2VuZXJhdGVkVGVtcGxhdGU6IChcbiAgICAgICAgaW5wdXQ6IERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlbGV0ZVN0YWNrOiAoaW5wdXQ6IERlbGV0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVTdGFja0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZWxldGVTdGFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRldGVjdFN0YWNrRHJpZnQ6IChpbnB1dDogRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0OiAoaW5wdXQ6IERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlQ2hhbmdlU2V0OiAoaW5wdXQ6IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGU6IChcbiAgICAgICAgaW5wdXQ6IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlUmVzb3VyY2VTY2FuOiAoaW5wdXQ6IERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1czogKGlucHV0OiBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kSW5wdXQpOlxuICAgICAgUHJvbWlzZTxEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tSZXNvdXJjZXM6IChpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZXhlY3V0ZUNoYW5nZVNldDogKGlucHV0OiBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRHZW5lcmF0ZWRUZW1wbGF0ZTogKGlucHV0OiBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRUZW1wbGF0ZTogKGlucHV0OiBHZXRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0VGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRUZW1wbGF0ZVN1bW1hcnk6IChpbnB1dDogR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEV4cG9ydHM6IChpbnB1dDogTGlzdEV4cG9ydHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RFeHBvcnRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXM6IChcbiAgICAgICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXM6IChcbiAgICAgICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RSZXNvdXJjZVNjYW5zOiAoaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RTdGFja3M6IChpbnB1dDogTGlzdFN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFN0YWNrc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0U3RhY2tzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcm9sbGJhY2tTdGFjazogKGlucHV0OiBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFJvbGxiYWNrU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBzdGFydFJlc291cmNlU2NhbjogKGlucHV0OiBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVTdGFjazogKGlucHV0OiBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb246IChcbiAgICAgICAgaW5wdXQ6IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8VXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tFdmVudHM6IChpbnB1dDogRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRPdXRwdXQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZChpbnB1dCkpO1xuICAgICAgfSxcbiAgICAgIGxpc3RTdGFja1Jlc291cmNlczogYXN5bmMgKGlucHV0OiBMaXN0U3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+ID0+IHtcbiAgICAgICAgY29uc3Qgc3RhY2tSZXNvdXJjZXMgPSBBcnJheTxTdGFja1Jlc291cmNlU3VtbWFyeT4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVMaXN0U3RhY2tSZXNvdXJjZXMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgc3RhY2tSZXNvdXJjZXMucHVzaCguLi4ocGFnZT8uU3RhY2tSZXNvdXJjZVN1bW1hcmllcyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja1Jlc291cmNlcztcbiAgICAgIH0sXG4gICAgICBwYWdpbmF0ZWRMaXN0U3RhY2tzOiBhc3luYyAoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YWNrU3VtbWFyeVtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gQXJyYXk8U3RhY2tTdW1tYXJ5PigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZUxpc3RTdGFja3MoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgc3RhY2tSZXNvdXJjZXMucHVzaCguLi4ocGFnZT8uU3RhY2tTdW1tYXJpZXMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRXYXRjaExvZ3MoKTogSUNsb3VkV2F0Y2hMb2dzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRXYXRjaExvZ3NDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUxvZ0dyb3VwczogKGlucHV0OiBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2dHcm91cHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBmaWx0ZXJMb2dFdmVudHM6IChpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29kZUJ1aWxkKCk6IElDb2RlQnVpbGRDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDb2RlQnVpbGRDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGVQcm9qZWN0OiAoaW5wdXQ6IFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVByb2plY3RDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlUHJvamVjdENvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVjMigpOiBJRUMyQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRUMyQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lczogKFxuICAgICAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbWFnZXM6IChpbnB1dDogRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW1hZ2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbnN0YW5jZXM6IChpbnB1dDogRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVSb3V0ZVRhYmxlczogKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVNlY3VyaXR5R3JvdXBzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN1Ym5ldHM6IChpbnB1dDogRGVzY3JpYmVTdWJuZXRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVZwY3M6IChpbnB1dDogRGVzY3JpYmVWcGNzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVWcGNzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcG5HYXRld2F5czogKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3IoKTogSUVDUkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDUkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhdGNoRGVsZXRlSW1hZ2U6IChpbnB1dDogQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgYmF0Y2hHZXRJbWFnZTogKGlucHV0OiBCYXRjaEdldEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEJhdGNoR2V0SW1hZ2VDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVSZXBvc2l0b3J5OiAoaW5wdXQ6IENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlSW1hZ2VzOiAoaW5wdXQ6IEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlUmVwb3NpdG9yaWVzOiAoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEF1dGhvcml6YXRpb25Ub2tlbjogKGlucHV0OiBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SW1hZ2VzOiAoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlOiAoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRJbWFnZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uOiAoXG4gICAgICAgIGlucHV0OiBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3MoKTogSUVDU0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RDbHVzdGVyczogKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0Q2x1c3RlcnNDb21tYW5kKGlucHV0KSksXG4gICAgICByZWdpc3RlclRhc2tEZWZpbml0aW9uOiAoXG4gICAgICAgIGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVTZXJ2aWNlOiAoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU2VydmljZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFdhaXRlcnNcbiAgICAgIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlOiAoaW5wdXQ6IERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQsIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIG1heFdhaXRUaW1lOiB0aW1lb3V0U2Vjb25kcyA/PyA2MDAsXG4gICAgICAgICAgICBtaW5EZWxheTogNixcbiAgICAgICAgICAgIG1heERlbGF5OiA2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZWxidjIoKTogSUVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVMaXN0ZW5lcnM6IChpbnB1dDogRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVMb2FkQmFsYW5jZXJzOiAoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlVGFnczogKGlucHV0OiBEZXNjcmliZVRhZ3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVGFnc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVRhZ3NDb21tYW5kKGlucHV0KSksXG4gICAgICAvLyBQYWdpbmF0aW9uIEZ1bmN0aW9uc1xuICAgICAgcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVyczogYXN5bmMgKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdGVuZXJbXT4gPT4ge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBBcnJheTxMaXN0ZW5lcj4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVycyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaCguLi4ocGFnZT8uTGlzdGVuZXJzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3RlbmVycztcbiAgICAgIH0sXG4gICAgICBwYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2VyczogYXN5bmMgKGlucHV0OiBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExvYWRCYWxhbmNlcltdPiA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRCYWxhbmNlcnMgPSBBcnJheTxMb2FkQmFsYW5jZXI+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIGxvYWRCYWxhbmNlcnMucHVzaCguLi4ocGFnZT8uTG9hZEJhbGFuY2VycyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2FkQmFsYW5jZXJzO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGlhbSgpOiBJSUFNQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgSUFNQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlUG9saWN5OiAoaW5wdXQ6IENyZWF0ZVBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlUG9saWN5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZVBvbGljeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFBvbGljeTogKGlucHV0OiBHZXRQb2xpY3lDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBvbGljeUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRQb2xpY3lDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRSb2xlOiAoaW5wdXQ6IEdldFJvbGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFJvbGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgR2V0Um9sZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGttcygpOiBJS01TQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgS01TQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVLZXk6IChpbnB1dDogRGVzY3JpYmVLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlS2V5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlS2V5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEFsaWFzZXM6IChpbnB1dDogTGlzdEFsaWFzZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RBbGlhc2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RBbGlhc2VzQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbGFtYmRhKCk6IElMYW1iZGFDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBMYW1iZGFDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnZva2VDb21tYW5kOiAoaW5wdXQ6IEludm9rZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8SW52b2tlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IEludm9rZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1Ymxpc2hWZXJzaW9uOiAoaW5wdXQ6IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdWJsaXNoVmVyc2lvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdWJsaXNoVmVyc2lvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUFsaWFzOiAoaW5wdXQ6IFVwZGF0ZUFsaWFzQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBbGlhc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVBbGlhc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uQ29kZTogKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb246IChcbiAgICAgICAgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFdhaXRlcnNcbiAgICAgIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZDogKFxuICAgICAgICBkZWxheVNlY29uZHM6IG51bWJlcixcbiAgICAgICAgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8V2FpdGVyUmVzdWx0PiA9PiB7XG4gICAgICAgIHJldHVybiB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWRWMihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICBtYXhEZWxheTogZGVsYXlTZWNvbmRzLFxuICAgICAgICAgICAgbWluRGVsYXk6IGRlbGF5U2Vjb25kcyxcbiAgICAgICAgICAgIG1heFdhaXRUaW1lOiBkZWxheVNlY29uZHMgKiA2MCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHJvdXRlNTMoKTogSVJvdXRlNTNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBSb3V0ZTUzQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0SG9zdGVkWm9uZTogKGlucHV0OiBHZXRIb3N0ZWRab25lQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRIb3N0ZWRab25lQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEhvc3RlZFpvbmVDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SG9zdGVkWm9uZXM6IChpbnB1dDogTGlzdEhvc3RlZFpvbmVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEhvc3RlZFpvbmVzQnlOYW1lOiAoaW5wdXQ6IExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHMzKCk6IElTM0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFMzQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVsZXRlT2JqZWN0czogKGlucHV0OiBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZU9iamVjdHNDb21tYW5kKHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicsXG4gICAgICAgIH0pKSxcbiAgICAgIGRlbGV0ZU9iamVjdFRhZ2dpbmc6IChpbnB1dDogRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0QnVja2V0RW5jcnlwdGlvbjogKGlucHV0OiBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICBnZXRCdWNrZXRMb2NhdGlvbjogKGlucHV0OiBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QnVja2V0TG9jYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICBnZXRPYmplY3Q6IChpbnB1dDogR2V0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0T2JqZWN0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0T2JqZWN0VGFnZ2luZzogKGlucHV0OiBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldE9iamVjdFRhZ2dpbmdDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0T2JqZWN0c1YyOiAoaW5wdXQ6IExpc3RPYmplY3RzVjJDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RPYmplY3RzVjJDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdE9iamVjdHNWMkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dE9iamVjdFRhZ2dpbmc6IChpbnB1dDogUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCh7XG4gICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgQ2hlY2tzdW1BbGdvcml0aG06ICdTSEEyNTYnLFxuICAgICAgICB9KSksXG4gICAgICB1cGxvYWQ6IChpbnB1dDogUHV0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxDb21wbGV0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRPdXRwdXQ+ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cGxvYWQgPSBuZXcgVXBsb2FkKHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHBhcmFtczogeyAuLi5pbnB1dCwgQ2hlY2tzdW1BbGdvcml0aG06ICdTSEEyNTYnIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gdXBsb2FkLmRvbmUoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoYFVwbG9hZCBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3JNZXNzYWdlKGUpfWApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc2VjcmV0c01hbmFnZXIoKTogSVNlY3JldHNNYW5hZ2VyQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRTZWNyZXRWYWx1ZTogKGlucHV0OiBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzc20oKTogSVNTTUNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFNTTUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFBhcmFtZXRlcjogKGlucHV0OiBHZXRQYXJhbWV0ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRQYXJhbWV0ZXJDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGVwRnVuY3Rpb25zKCk6IElTdGVwRnVuY3Rpb25zQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU0ZOQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lOiAoaW5wdXQ6IFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgU0RLIHYzIHJlcXVpcmVzIGEgY2xpZW50IGNvbmZpZyBhbmQgYSBjb21tYW5kIGluIG9yZGVyIHRvIGdldCBhbiBlbmRwb2ludCBmb3JcbiAgICogYW55IGdpdmVuIHNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXJsU3VmZml4KHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjZm4gPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoeyByZWdpb24gfSk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMoe30sIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kLCB7IC4uLmNmbi5jb25maWcgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50LnVybC5ob3N0bmFtZS5zcGxpdChgJHtyZWdpb259LmApLnBvcCgpITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjdXJyZW50QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICByZXR1cm4gY2FjaGVkQXN5bmModGhpcywgQ1VSUkVOVF9BQ0NPVU5UX0tFWSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCB0aGlzLmNyZWRQcm92aWRlcigpO1xuICAgICAgcmV0dXJuIHRoaXMuYWNjb3VudENhY2hlLmZldGNoKGNyZWRzLmFjY2Vzc0tleUlkLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgb25lLCByZXNvbHZlIGZyb20gU1RTIGFuZCBzdG9yZSBpbiBjYWNoZS5cbiAgICAgICAgYXdhaXQgdGhpcy5kZWJ1ZygnTG9va2luZyB1cCBkZWZhdWx0IGFjY291bnQgSUQgZnJvbSBTVFMnKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFNUU0NsaWVudCh7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgcmV0cnlTdHJhdGVneTogdGhpcy5zdHNSZXRyeVN0cmF0ZWd5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuc2VuZChjb21tYW5kKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gcmVzdWx0LkFjY291bnQ7XG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IHJlc3VsdC5Bcm4hLnNwbGl0KCc6JylbMV07XG4gICAgICAgIGlmICghYWNjb3VudElkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoXCJTVFMgZGlkbid0IHJldHVybiBhbiBhY2NvdW50IElEXCIpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZGVidWcoYERlZmF1bHQgYWNjb3VudCBJRDogJHthY2NvdW50SWR9YCk7XG5cbiAgICAgICAgLy8gU2F2ZSBhbm90aGVyIFNUUyBjYWxsIGxhdGVyIGlmIHRoaXMgb25lIGFscmVhZHkgc3VjY2VlZGVkXG4gICAgICAgIHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHsgYWNjb3VudElkLCBwYXJ0aXRpb24gfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB0aGUgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIG5vdCBleHBpcmVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDcmVkZW50aWFscygpIHtcbiAgICBpZiAodGhpcy5fY3JlZGVudGlhbHNWYWxpZGF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU1RTQ2xpZW50KHsgLi4udGhpcy5jb25maWcsIHJldHJ5U3RyYXRlZ3k6IHRoaXMuc3RzUmV0cnlTdHJhdGVneSB9KTtcbiAgICBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKHt9KSk7XG4gICAgdGhpcy5fY3JlZGVudGlhbHNWYWxpZGF0ZWQgPSB0cnVlO1xuICB9XG59XG5cbmNvbnN0IENVUlJFTlRfQUNDT1VOVF9LRVkgPSBTeW1ib2woJ2N1cnJlbnRfYWNjb3VudF9rZXknKTtcbiJdfQ==
392
+ /**
393
+ * Make the SDK logger safe against raw function invocations
394
+ *
395
+ * The SDK expects the logger to be an object with a number of functions, but it
396
+ * doesn't necessarily keep 'this' bound all the time; sometimes it will copy
397
+ * functions off of the object and call them from a variable.
398
+ *
399
+ * By how JavaScript works, this drops the 'this' reference. Make sure 'this' is
400
+ * bound at all times.
401
+ *
402
+ * @see https://github.com/aws/aws-sdk-js-v3/issues/7297
403
+ */
404
+ function makeSdkLoggerSafeByBindingThis(logger) {
405
+ return {
406
+ debug: logger.debug.bind(logger),
407
+ info: logger.info.bind(logger),
408
+ warn: logger.warn.bind(logger),
409
+ error: logger.error.bind(logger),
410
+ };
411
+ }
412
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2RrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBLDREQVFpQztBQU9qQyxzRUFJc0M7QUFrRXRDLDBFQWtDd0M7QUFPeEMsNEVBSXlDO0FBQ3pDLGdFQUttQztBQUNuQyxvREE2QjZCO0FBcUI3QixvREFXNkI7QUFVN0Isb0RBTTZCO0FBVzdCLGdHQU9tRDtBQUNuRCxvREFXNkI7QUFDN0Isb0RBUTZCO0FBQzdCLDBEQWtCZ0M7QUFDaEMsOERBV2tDO0FBcUJsQyxrREFVNEI7QUFDNUIsNEVBS3lDO0FBS3pDLG9EQUc2QjtBQUM3QixvREFLNkI7QUFDN0Isb0RBQTBFO0FBQzFFLHNEQUE4QztBQUM5QyxxRUFBMEU7QUFDMUUsbURBQTZEO0FBRTdELG1EQUF3RDtBQUV4RCxxQ0FBdUM7QUFHdkMsdUNBQStDO0FBQy9DLDZDQUFtRDtBQUNuRCwrREFBa0U7QUFDbEUscUNBQWdEO0FBZ05oRDs7R0FFRztBQUVJLElBQU0sR0FBRyxHQUFULE1BQU0sR0FBRztJQTJCSztJQTFCSCxhQUFhLENBQVM7SUFFdEIsTUFBTSxDQUF1QjtJQUU1QixZQUFZLENBQUM7SUFFOUI7O09BRUc7SUFDYyxnQkFBZ0IsR0FBRyxJQUFJLG9DQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFdEc7Ozs7OztPQU1HO0lBQ0sscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBRXRDOztPQUVHO0lBQ2MsS0FBSyxDQUFpQztJQUV2RCxZQUNtQixZQUErQyxFQUNoRSxNQUFjLEVBQ2QsY0FBc0MsRUFDdEMsUUFBa0IsRUFDbEIsTUFBbUI7UUFKRixpQkFBWSxHQUFaLFlBQVksQ0FBbUM7UUFNaEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFD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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDO0NBQ0YsQ0FBQTtBQS9lWSxrQkFBRztjQUFILEdBQUc7SUFEZiw0QkFBa0I7R0FDTixHQUFHLENBK2VmO0FBRUQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUxRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsOEJBQThCLENBQUMsTUFBa0I7SUFDeEQsT0FBTztRQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDakMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNES3YzQ29tcGF0aWJsZUNyZWRlbnRpYWxQcm92aWRlciB9IGZyb20gJ0Bhd3MtY2RrL2NsaS1wbHVnaW4tY29udHJhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBGdW5jdGlvbkNvbmZpZ3VyYXRpb24sXG4gIEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZElucHV0LFxuICBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQsXG4gIExpc3RGdW5jdGlvbnNDb21tYW5kSW5wdXQsXG4gIFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kSW5wdXQsXG4gIFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQsXG4gIFVwZGF0ZUFwaUtleUNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZElucHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvbW1hbmRPdXRwdXQsXG4gIFVwZGF0ZVJlc29sdmVyQ29tbWFuZElucHV0LFxuICBVcGRhdGVSZXNvbHZlckNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1hcHBzeW5jJztcbmltcG9ydCB7XG4gIEFwcFN5bmNDbGllbnQsXG4gIEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZCxcbiAgcGFnaW5hdGVMaXN0RnVuY3Rpb25zLFxuICBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZCxcbiAgVXBkYXRlQXBpS2V5Q29tbWFuZCxcbiAgVXBkYXRlRnVuY3Rpb25Db21tYW5kLFxuICBVcGRhdGVSZXNvbHZlckNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1hcHBzeW5jJztcbmltcG9ydCB0eXBlIHtcbiAgR2V0UmVzb3VyY2VDb21tYW5kSW5wdXQsXG4gIEdldFJlc291cmNlQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdFJlc291cmNlc0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGNvbnRyb2wnO1xuaW1wb3J0IHtcbiAgQ2xvdWRDb250cm9sQ2xpZW50LFxuICBHZXRSZXNvdXJjZUNvbW1hbmQsXG4gIExpc3RSZXNvdXJjZXNDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRjb250cm9sJztcbmltcG9ydCB0eXBlIHtcbiAgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRJbnB1dCxcbiAgQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFN0YWNrc0NvbW1hbmRJbnB1dCxcbiAgTGlzdFN0YWNrc0NvbW1hbmRPdXRwdXQsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kSW5wdXQsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kT3V0cHV0LFxuICBTdGFja1Jlc291cmNlU3VtbWFyeSxcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBDcmVhdGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgQ3JlYXRlU3RhY2tDb21tYW5kT3V0cHV0LFxuICBEZWxldGVDaGFuZ2VTZXRDb21tYW5kSW5wdXQsXG4gIERlbGV0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZVN0YWNrQ29tbWFuZElucHV0LFxuICBEZWxldGVTdGFja0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVN0YWNrc0NvbW1hbmRJbnB1dCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kT3V0cHV0LFxuICBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0LFxuICBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCxcbiAgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgR2V0VGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gIEdldFRlbXBsYXRlQ29tbWFuZE91dHB1dCxcbiAgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZElucHV0LFxuICBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kT3V0cHV0LFxuICBMaXN0RXhwb3J0c0NvbW1hbmRJbnB1dCxcbiAgTGlzdEV4cG9ydHNDb21tYW5kT3V0cHV0LFxuICBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kT3V0cHV0LFxuICBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZE91dHB1dCxcbiAgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kSW5wdXQsXG4gIExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZE91dHB1dCxcbiAgTGlzdFN0YWNrUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCxcbiAgU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCxcbiAgVXBkYXRlU3RhY2tDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kSW5wdXQsXG4gIFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRPdXRwdXQsXG4gIFN0YWNrU3VtbWFyeSxcbiAgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0LFxuICBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZElucHV0LFxuICBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZE91dHB1dCxcbiAgRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZElucHV0LFxuICBEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kSW5wdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQge1xuICBwYWdpbmF0ZUxpc3RTdGFja3MsXG4gIENsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZCxcbiAgQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICBDcmVhdGVTdGFja0NvbW1hbmQsXG4gIERlbGV0ZUNoYW5nZVNldENvbW1hbmQsXG4gIERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZCxcbiAgRGVsZXRlU3RhY2tDb21tYW5kLFxuICBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQsXG4gIERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tFdmVudHNDb21tYW5kLFxuICBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZCxcbiAgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kLFxuICBHZXRUZW1wbGF0ZUNvbW1hbmQsXG4gIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQsXG4gIExpc3RFeHBvcnRzQ29tbWFuZCxcbiAgTGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXNDb21tYW5kLFxuICBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZCxcbiAgTGlzdFJlc291cmNlU2NhbnNDb21tYW5kLFxuICBMaXN0U3RhY2tzQ29tbWFuZCxcbiAgcGFnaW5hdGVMaXN0U3RhY2tSZXNvdXJjZXMsXG4gIFJvbGxiYWNrU3RhY2tDb21tYW5kLFxuICBTdGFydFJlc291cmNlU2NhbkNvbW1hbmQsXG4gIFVwZGF0ZVN0YWNrQ29tbWFuZCxcbiAgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZCxcbiAgRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmQsXG4gIERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7XG4gIEZpbHRlckxvZ0V2ZW50c0NvbW1hbmRJbnB1dCxcbiAgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3Vkd2F0Y2gtbG9ncyc7XG5pbXBvcnQge1xuICBDbG91ZFdhdGNoTG9nc0NsaWVudCxcbiAgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kLFxuICBGaWx0ZXJMb2dFdmVudHNDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWR3YXRjaC1sb2dzJztcbmltcG9ydCB7XG4gIENvZGVCdWlsZENsaWVudCxcbiAgVXBkYXRlUHJvamVjdENvbW1hbmQsXG4gIHR5cGUgVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVQcm9qZWN0Q29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNvZGVidWlsZCc7XG5pbXBvcnQge1xuICBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVN1Ym5ldHNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlU3VibmV0c0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwY3NDb21tYW5kLFxuICB0eXBlIERlc2NyaWJlVnBjc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZCxcbiAgdHlwZSBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0LFxuICB0eXBlIERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kT3V0cHV0LFxuICBFQzJDbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lYzInO1xuaW1wb3J0IHR5cGUge1xuICBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZElucHV0LFxuICBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZE91dHB1dCxcbiAgTGlzdEltYWdlc0NvbW1hbmRJbnB1dCxcbiAgTGlzdEltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIFB1dEltYWdlQ29tbWFuZElucHV0LFxuICBQdXRJbWFnZUNvbW1hbmRPdXRwdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kSW5wdXQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kT3V0cHV0LFxuICBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0LFxuICBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQgYXMgRUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dCBhcyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQsXG4gIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQsXG4gIEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCxcbiAgR2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dCxcbiAgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gIFB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uQ29tbWFuZE91dHB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcic7XG5pbXBvcnQge1xuICBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZCxcbiAgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmQsXG4gIERlc2NyaWJlSW1hZ2VzQ29tbWFuZCBhcyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZCxcbiAgRUNSQ2xpZW50LFxuICBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kLFxuICBMaXN0SW1hZ2VzQ29tbWFuZCxcbiAgUHV0SW1hZ2VDb21tYW5kLFxuICBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNyJztcbmltcG9ydCB0eXBlIHtcbiAgRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbkNvbW1hbmRJbnB1dCxcbiAgTGlzdENsdXN0ZXJzQ29tbWFuZElucHV0LFxuICBMaXN0Q2x1c3RlcnNDb21tYW5kT3V0cHV0LFxuICBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dCxcbiAgVXBkYXRlU2VydmljZUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlU2VydmljZUNvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3MnO1xuaW1wb3J0IHtcbiAgRUNTQ2xpZW50LFxuICBMaXN0Q2x1c3RlcnNDb21tYW5kLFxuICBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZCxcbiAgVXBkYXRlU2VydmljZUNvbW1hbmQsXG4gIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNzJztcbmltcG9ydCB0eXBlIHtcbiAgTGlzdGVuZXIsXG4gIExvYWRCYWxhbmNlcixcbiAgRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZE91dHB1dCxcbiAgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0LFxuICBEZXNjcmliZVRhZ3NDb21tYW5kSW5wdXQsXG4gIERlc2NyaWJlVGFnc0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lbGFzdGljLWxvYWQtYmFsYW5jaW5nLXYyJztcbmltcG9ydCB7XG4gIERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZCxcbiAgRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZCxcbiAgRGVzY3JpYmVUYWdzQ29tbWFuZCxcbiAgRWxhc3RpY0xvYWRCYWxhbmNpbmdWMkNsaWVudCxcbiAgcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVycyxcbiAgcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lbGFzdGljLWxvYWQtYmFsYW5jaW5nLXYyJztcbmltcG9ydCB7XG4gIENyZWF0ZVBvbGljeUNvbW1hbmQsXG4gIHR5cGUgQ3JlYXRlUG9saWN5Q29tbWFuZElucHV0LFxuICB0eXBlIENyZWF0ZVBvbGljeUNvbW1hbmRPdXRwdXQsXG4gIEdldFBvbGljeUNvbW1hbmQsXG4gIHR5cGUgR2V0UG9saWN5Q29tbWFuZElucHV0LFxuICB0eXBlIEdldFBvbGljeUNvbW1hbmRPdXRwdXQsXG4gIEdldFJvbGVDb21tYW5kLFxuICB0eXBlIEdldFJvbGVDb21tYW5kSW5wdXQsXG4gIHR5cGUgR2V0Um9sZUNvbW1hbmRPdXRwdXQsXG4gIElBTUNsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWlhbSc7XG5pbXBvcnQge1xuICBEZXNjcmliZUtleUNvbW1hbmQsXG4gIHR5cGUgRGVzY3JpYmVLZXlDb21tYW5kSW5wdXQsXG4gIHR5cGUgRGVzY3JpYmVLZXlDb21tYW5kT3V0cHV0LFxuICBLTVNDbGllbnQsXG4gIExpc3RBbGlhc2VzQ29tbWFuZCxcbiAgdHlwZSBMaXN0QWxpYXNlc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0QWxpYXNlc0NvbW1hbmRPdXRwdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1rbXMnO1xuaW1wb3J0IHtcbiAgSW52b2tlQ29tbWFuZCxcbiAgdHlwZSBJbnZva2VDb21tYW5kSW5wdXQsXG4gIHR5cGUgSW52b2tlQ29tbWFuZE91dHB1dCxcbiAgTGFtYmRhQ2xpZW50LFxuICBQdWJsaXNoVmVyc2lvbkNvbW1hbmQsXG4gIHR5cGUgUHVibGlzaFZlcnNpb25Db21tYW5kSW5wdXQsXG4gIHR5cGUgUHVibGlzaFZlcnNpb25Db21tYW5kT3V0cHV0LFxuICBVcGRhdGVBbGlhc0NvbW1hbmQsXG4gIHR5cGUgVXBkYXRlQWxpYXNDb21tYW5kSW5wdXQsXG4gIHR5cGUgVXBkYXRlQWxpYXNDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kLFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kLFxuICB0eXBlIFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgdHlwZSBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0LFxuICB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWRWMixcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQge1xuICBHZXRIb3N0ZWRab25lQ29tbWFuZCxcbiAgdHlwZSBHZXRIb3N0ZWRab25lQ29tbWFuZElucHV0LFxuICB0eXBlIEdldEhvc3RlZFpvbmVDb21tYW5kT3V0cHV0LFxuICBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kLFxuICB0eXBlIExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kT3V0cHV0LFxuICBMaXN0SG9zdGVkWm9uZXNDb21tYW5kLFxuICB0eXBlIExpc3RIb3N0ZWRab25lc0NvbW1hbmRJbnB1dCxcbiAgdHlwZSBMaXN0SG9zdGVkWm9uZXNDb21tYW5kT3V0cHV0LFxuICBSb3V0ZTUzQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtcm91dGUtNTMnO1xuaW1wb3J0IHR5cGUge1xuICBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LFxuICBEZWxldGVPYmplY3RzQ29tbWFuZE91dHB1dCxcbiAgRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCxcbiAgRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQsXG4gIEdldE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQsXG4gIEdldE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0LFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0LFxuICBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dCxcbiAgQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRDb21tYW5kT3V0cHV0LFxuICBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZElucHV0LFxuICBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dCxcbiAgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kSW5wdXQsXG4gIEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZE91dHB1dCxcbiAgR2V0T2JqZWN0Q29tbWFuZElucHV0LFxuICBHZXRPYmplY3RDb21tYW5kT3V0cHV0LFxuICBMaXN0T2JqZWN0c1YyQ29tbWFuZElucHV0LFxuICBMaXN0T2JqZWN0c1YyQ29tbWFuZE91dHB1dCxcbiAgUHV0T2JqZWN0Q29tbWFuZElucHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZCxcbiAgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kLFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmQsXG4gIFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBTM0NsaWVudCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7XG4gIEdldFNlY3JldFZhbHVlQ29tbWFuZCxcbiAgdHlwZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQsXG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB0eXBlIHtcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZElucHV0LFxuICBVcGRhdGVTdGF0ZU1hY2hpbmVDb21tYW5kT3V0cHV0LFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2ZuJztcbmltcG9ydCB7XG4gIFNGTkNsaWVudCxcbiAgVXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNmbic7XG5pbXBvcnQge1xuICBHZXRQYXJhbWV0ZXJDb21tYW5kLFxuICB0eXBlIEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCxcbiAgdHlwZSBHZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0LFxuICBTU01DbGllbnQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kLCBTVFNDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3RzJztcbmltcG9ydCB7IFVwbG9hZCB9IGZyb20gJ0Bhd3Mtc2RrL2xpYi1zdG9yYWdlJztcbmltcG9ydCB7IGdldEVuZHBvaW50RnJvbUluc3RydWN0aW9ucyB9IGZyb20gJ0BzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludCc7XG5pbXBvcnQgeyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSB9IGZyb20gJ0BzbWl0aHkvdXRpbC1yZXRyeSc7XG5pbXBvcnQgdHlwZSB7IFdhaXRlclJlc3VsdCB9IGZyb20gJ0BzbWl0aHkvdXRpbC13YWl0ZXInO1xuaW1wb3J0IHsgQWNjb3VudEFjY2Vzc0tleUNhY2hlIH0gZnJvbSAnLi9hY2NvdW50LWNhY2hlJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdEhhbmRsZXJTZXR0aW5ncyB9IGZyb20gJy4vYmFzZS1jcmVkZW50aWFscyc7XG5pbXBvcnQgeyBjYWNoZWRBc3luYyB9IGZyb20gJy4vY2FjaGVkJztcbmltcG9ydCB0eXBlIHsgSVNka0xvZ2dlciB9IGZyb20gJy4vc2RrLWxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEFjY291bnQgfSBmcm9tICcuL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgeyB0cmFjZU1lbWJlck1ldGhvZHMgfSBmcm9tICcuL3RyYWNpbmcnO1xuaW1wb3J0IHsgZGVmYXVsdENsaVVzZXJBZ2VudCB9IGZyb20gJy4vdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZvcm1hdEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFMzQ2xpZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiBBUElzIGFyZSB1c2VkIHRoYXQgcmVxdWlyZSBNRDUgY2hlY2tzdW1zLlxuICAgKlxuICAgKiBTb21lIFMzIEFQSXMgaW4gU0RLdjIgaGF2ZSBhIGJ1ZyB0aGF0IGFsd2F5cyByZXF1aXJlcyB0aGVtIHRvIHVzZSBhIE1ENSBjaGVja3N1bS5cbiAgICogVGhlc2UgQVBJcyBhcmUgbm90IGdvaW5nIHRvIGJlIHN1cHBvcnRlZCBpbiBhIEZJUFMgZW52aXJvbm1lbnQuXG4gICAqL1xuICBuZWVkc01kNUNoZWNrc3Vtcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQWRkaXRpb25hbCBTREsgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2RrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGRlc2NyaXB0aXZlIHN0cmluZ3MgdGhhdCBpbmRpY2F0ZSB3aGVyZSB0aGUgXCJBc3N1bWVSb2xlXCIgY3JlZGVudGlhbHMgYXJlIGNvbWluZyBmcm9tXG4gICAqXG4gICAqIFdpbGwgYmUgcHJpbnRlZCBpbiBhbiBlcnJvciBtZXNzYWdlIHRvIGhlbHAgdXNlcnMgZGlhZ25vc2UgYXV0aCBwcm9ibGVtcy5cbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVDcmVkZW50aWFsc1NvdXJjZURlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vLyBUT0RPOiBzdGlsbCBzb21lIGNsZWFudXAgaGVyZS4gTWFrZSB0aGUgcGFnaW5hdGlvbiBmdW5jdGlvbnMgZG8gYWxsIHRoZSB3b3JrIGhlcmUgaW5zdGVhZCBvZiBpbiBpbmRpdmlkdWFsIHBhY2thZ2VzLlxuLy8gQWxzbyBhZGQgYXN5bmMvYXdhaXQuIERvZXMgdGhhdCBhY3R1YWxseSBtYXR0ZXIgaW4gdGhpcyBjb250ZXh0PyBGaW5kIG91dCBhbmQgdXBkYXRlIGFjY29yZGluZ2x5LlxuXG4vLyBBbHNvIGFkZCBub3RlcyB0byB0aGUgUFIgYWJvdXQgd2h5IHlvdSBpbXBvcnRlZCBldmVyeXRoaW5nIGluZGl2aWR1YWxseSBhbmQgdXNlZCAndHlwZScgc28gcmV2aWV3ZXJzIGRvbid0IGhhdmUgdG8gYXNrLlxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyYXRpb25PcHRpb25zIHtcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGNyZWRlbnRpYWxzOiBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXI7XG4gIHJlcXVlc3RIYW5kbGVyOiBSZXF1ZXN0SGFuZGxlclNldHRpbmdzO1xuICByZXRyeVN0cmF0ZWd5OiBDb25maWd1cmVkUmV0cnlTdHJhdGVneTtcbiAgY3VzdG9tVXNlckFnZW50OiBzdHJpbmc7XG4gIGxvZ2dlcj86IElTZGtMb2dnZXI7XG4gIHMzRGlzYWJsZUJvZHlTaWduaW5nPzogYm9vbGVhbjtcbiAgY29tcHV0ZUNoZWNrc3Vtcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcFN5bmNDbGllbnQge1xuICBnZXRTY2hlbWFDcmVhdGlvblN0YXR1cyhpbnB1dDogR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dD47XG4gIHN0YXJ0U2NoZW1hQ3JlYXRpb24oaW5wdXQ6IFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlQXBpS2V5KGlucHV0OiBVcGRhdGVBcGlLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFwaUtleUNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVGdW5jdGlvbihpbnB1dDogVXBkYXRlRnVuY3Rpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVJlc29sdmVyKGlucHV0OiBVcGRhdGVSZXNvbHZlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUmVzb2x2ZXJDb21tYW5kT3V0cHV0PjtcbiAgLy8gUGFnaW5hdGlvbiBmdW5jdGlvbnNcbiAgbGlzdEZ1bmN0aW9ucyhpbnB1dDogTGlzdEZ1bmN0aW9uc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RnVuY3Rpb25Db25maWd1cmF0aW9uW10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDbG91ZENvbnRyb2xDbGllbnQge1xuICBsaXN0UmVzb3VyY2VzKGlucHV0OiBMaXN0UmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VzQ29tbWFuZE91dHB1dD47XG4gIGdldFJlc291cmNlKGlucHV0OiBHZXRSZXNvdXJjZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UmVzb3VyY2VDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRGb3JtYXRpb25DbGllbnQge1xuICBjb250aW51ZVVwZGF0ZVJvbGxiYWNrKGlucHV0OiBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZE91dHB1dD47XG4gIGNyZWF0ZUNoYW5nZVNldChpbnB1dDogQ3JlYXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PjtcbiAgY3JlYXRlR2VuZXJhdGVkVGVtcGxhdGUoaW5wdXQ6IENyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVTdGFjayhpbnB1dDogQ3JlYXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVN0YWNrQ29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZUNoYW5nZVNldChpbnB1dDogRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PjtcbiAgZGVsZXRlR2VuZXJhdGVkVGVtcGxhdGUoaW5wdXQ6IERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBkZWxldGVTdGFjayhpbnB1dDogRGVsZXRlU3RhY2tDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZVN0YWNrQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlQ2hhbmdlU2V0KGlucHV0OiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZShcbiAgICBpbnB1dDogRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlUmVzb3VyY2VTY2FuKGlucHV0OiBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzKGlucHV0OiBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVN0YWNrcyhpbnB1dDogRGVzY3JpYmVTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3RhY2tzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0cyhpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdGFja1Jlc291cmNlcyhpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXRlY3RTdGFja0RyaWZ0KGlucHV0OiBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZE91dHB1dD47XG4gIGRldGVjdFN0YWNrUmVzb3VyY2VEcmlmdChpbnB1dDogRGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXRlY3RTdGFja1Jlc291cmNlRHJpZnRDb21tYW5kT3V0cHV0PjtcbiAgZXhlY3V0ZUNoYW5nZVNldChpbnB1dDogRXhlY3V0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8RXhlY3V0ZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+O1xuICBnZXRHZW5lcmF0ZWRUZW1wbGF0ZShpbnB1dDogR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZE91dHB1dD47XG4gIGdldFRlbXBsYXRlKGlucHV0OiBHZXRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVDb21tYW5kT3V0cHV0PjtcbiAgZ2V0VGVtcGxhdGVTdW1tYXJ5KGlucHV0OiBHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0RXhwb3J0cyhpbnB1dDogTGlzdEV4cG9ydHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzKFxuICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzKFxuICAgIGlucHV0OiBMaXN0UmVzb3VyY2VTY2FuUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFJlc291cmNlU2NhbnMoaW5wdXQ/OiBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFJlc291cmNlU2NhbnNDb21tYW5kT3V0cHV0PjtcbiAgbGlzdFN0YWNrcyhpbnB1dDogTGlzdFN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFN0YWNrc0NvbW1hbmRPdXRwdXQ+O1xuICByb2xsYmFja1N0YWNrKGlucHV0OiBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dD47XG4gIHN0YXJ0UmVzb3VyY2VTY2FuKGlucHV0OiBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlU3RhY2soaW5wdXQ6IFVwZGF0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVTdGFja0NvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb24oXG4gICAgaW5wdXQ6IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kT3V0cHV0PjtcbiAgLy8gUGFnaW5hdGlvbiBmdW5jdGlvbnNcbiAgZGVzY3JpYmVTdGFja0V2ZW50cyhpbnB1dDogRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0U3RhY2tSZXNvdXJjZXMoaW5wdXQ6IExpc3RTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhY2tSZXNvdXJjZVN1bW1hcnlbXT47XG4gIHBhZ2luYXRlZExpc3RTdGFja3MoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YWNrU3VtbWFyeVtdPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xvdWRXYXRjaExvZ3NDbGllbnQge1xuICBkZXNjcmliZUxvZ0dyb3VwcyhpbnB1dDogRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTG9nR3JvdXBzQ29tbWFuZE91dHB1dD47XG4gIGZpbHRlckxvZ0V2ZW50cyhpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29kZUJ1aWxkQ2xpZW50IHtcbiAgdXBkYXRlUHJvamVjdChpbnB1dDogVXBkYXRlUHJvamVjdENvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlUHJvamVjdENvbW1hbmRPdXRwdXQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBJRUMyQ2xpZW50IHtcbiAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lcyhcbiAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVJbnN0YW5jZXMoaW5wdXQ6IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUluc3RhbmNlc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVJvdXRlVGFibGVzKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlU2VjdXJpdHlHcm91cHMoaW5wdXQ6IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVTdWJuZXRzKGlucHV0OiBEZXNjcmliZVN1Ym5ldHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlU3VibmV0c0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXMoXG4gICAgaW5wdXQ6IERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRJbnB1dCxcbiAgKTogUHJvbWlzZTxEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVWcGNzKGlucHV0OiBEZXNjcmliZVZwY3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVnBjc0NvbW1hbmRPdXRwdXQ+O1xuICBkZXNjcmliZVZwbkdhdGV3YXlzKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVDUkNsaWVudCB7XG4gIGJhdGNoRGVsZXRlSW1hZ2UoaW5wdXQ6IEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kT3V0cHV0PjtcbiAgYmF0Y2hHZXRJbWFnZShpbnB1dDogQmF0Y2hHZXRJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hHZXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBjcmVhdGVSZXBvc2l0b3J5KGlucHV0OiBDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZElucHV0KTogUHJvbWlzZTxDcmVhdGVSZXBvc2l0b3J5Q29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlSW1hZ2VzKGlucHV0OiBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RUNSRGVzY3JpYmVJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVSZXBvc2l0b3JpZXMoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+O1xuICBnZXRBdXRob3JpemF0aW9uVG9rZW4oaW5wdXQ6IEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QXV0aG9yaXphdGlvblRva2VuQ29tbWFuZE91dHB1dD47XG4gIGxpc3RJbWFnZXMoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PjtcbiAgcHV0SW1hZ2UoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+O1xuICBwdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbihcbiAgICBpbnB1dDogUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRUNTQ2xpZW50IHtcbiAgbGlzdENsdXN0ZXJzKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+O1xuICByZWdpc3RlclRhc2tEZWZpbml0aW9uKGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZVNlcnZpY2UoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PjtcbiAgLy8gV2FpdGVyc1xuICB3YWl0VW50aWxTZXJ2aWNlc1N0YWJsZShpbnB1dDogRGVzY3JpYmVTZXJ2aWNlc0NvbW1hbmRJbnB1dCwgdGltZW91dFNlY29uZHM/OiBudW1iZXIpOiBQcm9taXNlPFdhaXRlclJlc3VsdD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQge1xuICBkZXNjcmliZUxpc3RlbmVycyhpbnB1dDogRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZE91dHB1dD47XG4gIGRlc2NyaWJlTG9hZEJhbGFuY2VycyhpbnB1dDogRGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kT3V0cHV0PjtcbiAgZGVzY3JpYmVUYWdzKGlucHV0OiBEZXNjcmliZVRhZ3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVGFnc0NvbW1hbmRPdXRwdXQ+O1xuICAvLyBQYWdpbmF0aW9uXG4gIHBhZ2luYXRlRGVzY3JpYmVMaXN0ZW5lcnMoaW5wdXQ6IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0ZW5lcltdPjtcbiAgcGFnaW5hdGVEZXNjcmliZUxvYWRCYWxhbmNlcnMoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TG9hZEJhbGFuY2VyW10+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElJQU1DbGllbnQge1xuICBjcmVhdGVQb2xpY3koaW5wdXQ6IENyZWF0ZVBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlUG9saWN5Q29tbWFuZE91dHB1dD47XG4gIGdldFBvbGljeShpbnB1dDogR2V0UG9saWN5Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRQb2xpY3lDb21tYW5kT3V0cHV0PjtcbiAgZ2V0Um9sZShpbnB1dDogR2V0Um9sZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0Um9sZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElLTVNDbGllbnQge1xuICBkZXNjcmliZUtleShpbnB1dDogRGVzY3JpYmVLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlS2V5Q29tbWFuZE91dHB1dD47XG4gIGxpc3RBbGlhc2VzKGlucHV0OiBMaXN0QWxpYXNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEFsaWFzZXNDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGFtYmRhQ2xpZW50IHtcbiAgaW52b2tlQ29tbWFuZChpbnB1dDogSW52b2tlQ29tbWFuZElucHV0KTogUHJvbWlzZTxJbnZva2VDb21tYW5kT3V0cHV0PjtcbiAgcHVibGlzaFZlcnNpb24oaW5wdXQ6IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdWJsaXNoVmVyc2lvbkNvbW1hbmRPdXRwdXQ+O1xuICB1cGRhdGVBbGlhcyhpbnB1dDogVXBkYXRlQWxpYXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUFsaWFzQ29tbWFuZE91dHB1dD47XG4gIHVwZGF0ZUZ1bmN0aW9uQ29kZShpbnB1dDogVXBkYXRlRnVuY3Rpb25Db2RlQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kT3V0cHV0PjtcbiAgdXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uKFxuICAgIGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kSW5wdXQsXG4gICk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZE91dHB1dD47XG4gIC8vIFdhaXRlcnNcbiAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkKGRlbGF5U2Vjb25kczogbnVtYmVyLCBpbnB1dDogVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZTUzQ2xpZW50IHtcbiAgZ2V0SG9zdGVkWm9uZShpbnB1dDogR2V0SG9zdGVkWm9uZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SG9zdGVkWm9uZUNvbW1hbmRPdXRwdXQ+O1xuICBsaXN0SG9zdGVkWm9uZXMoaW5wdXQ6IExpc3RIb3N0ZWRab25lc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEhvc3RlZFpvbmVzQ29tbWFuZE91dHB1dD47XG4gIGxpc3RIb3N0ZWRab25lc0J5TmFtZShpbnB1dDogTGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNCeU5hbWVDb21tYW5kT3V0cHV0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUzNDbGllbnQge1xuICBkZWxldGVPYmplY3RzKGlucHV0OiBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RzQ29tbWFuZE91dHB1dD47XG4gIGRlbGV0ZU9iamVjdFRhZ2dpbmcoaW5wdXQ6IERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PjtcbiAgZ2V0QnVja2V0RW5jcnlwdGlvbihpbnB1dDogR2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QnVja2V0RW5jcnlwdGlvbkNvbW1hbmRPdXRwdXQ+O1xuICBnZXRCdWNrZXRMb2NhdGlvbihpbnB1dDogR2V0QnVja2V0TG9jYXRpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEJ1Y2tldExvY2F0aW9uQ29tbWFuZE91dHB1dD47XG4gIGdldE9iamVjdChpbnB1dDogR2V0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RDb21tYW5kT3V0cHV0PjtcbiAgZ2V0T2JqZWN0VGFnZ2luZyhpbnB1dDogR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+O1xuICBsaXN0T2JqZWN0c1YyKGlucHV0OiBMaXN0T2JqZWN0c1YyQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0T2JqZWN0c1YyQ29tbWFuZE91dHB1dD47XG4gIHB1dE9iamVjdFRhZ2dpbmcoaW5wdXQ6IFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kSW5wdXQpOiBQcm9taXNlPFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kT3V0cHV0PjtcbiAgdXBsb2FkKGlucHV0OiBQdXRPYmplY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPENvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlY3JldHNNYW5hZ2VyQ2xpZW50IHtcbiAgZ2V0U2VjcmV0VmFsdWUoaW5wdXQ6IEdldFNlY3JldFZhbHVlQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTU01DbGllbnQge1xuICBnZXRQYXJhbWV0ZXIoaW5wdXQ6IEdldFBhcmFtZXRlckNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0ZXBGdW5jdGlvbnNDbGllbnQge1xuICB1cGRhdGVTdGF0ZU1hY2hpbmUoaW5wdXQ6IFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZE91dHB1dD47XG59XG5cbi8qKlxuICogQmFzZSBmdW5jdGlvbmFsaXR5IG9mIFNESyB3aXRob3V0IGNyZWRlbnRpYWwgZmV0Y2hpbmdcbiAqL1xuQHRyYWNlTWVtYmVyTWV0aG9kc1xuZXhwb3J0IGNsYXNzIFNESyB7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50UmVnaW9uOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbk9wdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY2NvdW50Q2FjaGU7XG5cbiAgLyoqXG4gICAqIFNUUyBpcyB1c2VkIHRvIGNoZWNrIGNyZWRlbnRpYWwgdmFsaWRpdHksIGRvbid0IGRvIHRvbyBtYW55IHJldHJpZXMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0c1JldHJ5U3RyYXRlZ3kgPSBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koMywgKGF0dGVtcHQpID0+IDEwMCAqICgyICoqIGF0dGVtcHQpKTtcblxuICAvKipcbiAgICogV2hldGhlciB3ZSBoYXZlIHByb29mIHRoYXQgdGhlIGNyZWRlbnRpYWxzIGhhdmUgbm90IGV4cGlyZWRcbiAgICpcbiAgICogV2UgbmVlZCB0byBkbyBzb21lIG1hbnVhbCBwbHVtYmluZyBhcm91bmQgdGhpcyBiZWNhdXNlIHRoZSBKUyBTREt2MiB0cmVhdHMgYEV4cGlyZWRUb2tlbmBcbiAgICogYXMgcmV0cmlhYmxlIGFuZCB3ZSBoYXZlIGhlZnR5IHJldHJpZXMgb24gQ0ZOIGNhbGxzIG1ha2luZyB0aGUgQ0xJIGhhbmcgZm9yIGEgZ29vZCAxNSBtaW51dGVzXG4gICAqIGlmIHRoZSBjcmVkZW50aWFscyBoYXZlIGV4cGlyZWQuXG4gICAqL1xuICBwcml2YXRlIF9jcmVkZW50aWFsc1ZhbGlkYXRlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGNyZWF0ZSBkZWJ1ZyBtZXNzYWdlc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWJ1ZzogKG1zZzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlZFByb3ZpZGVyOiBTREt2M0NvbXBhdGlibGVDcmVkZW50aWFsUHJvdmlkZXIsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcmVxdWVzdEhhbmRsZXI6IFJlcXVlc3RIYW5kbGVyU2V0dGluZ3MsXG4gICAgaW9IZWxwZXI6IElvSGVscGVyLFxuICAgIGxvZ2dlcj86IElTZGtMb2dnZXIsXG4gICkge1xuICAgIGNvbnN0IGRlYnVnRm4gPSBhc3luYyAobXNnOiBzdHJpbmcpID0+IGlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKG1zZyk7XG4gICAgdGhpcy5hY2NvdW50Q2FjaGUgPSBuZXcgQWNjb3VudEFjY2Vzc0tleUNhY2hlKEFjY291bnRBY2Nlc3NLZXlDYWNoZS5ERUZBVUxUX1BBVEgsIGRlYnVnRm4pO1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1Z0ZuO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgcmVnaW9uLFxuICAgICAgY3JlZGVudGlhbHM6IGNyZWRQcm92aWRlcixcbiAgICAgIHJlcXVlc3RIYW5kbGVyLFxuICAgICAgcmV0cnlTdHJhdGVneTogbmV3IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5KDcsIChhdHRlbXB0KSA9PiAzMDAgKiAoMiAqKiBhdHRlbXB0KSksXG4gICAgICBjdXN0b21Vc2VyQWdlbnQ6IGRlZmF1bHRDbGlVc2VyQWdlbnQoKSxcbiAgICAgIGxvZ2dlcjogbG9nZ2VyID8gbWFrZVNka0xvZ2dlclNhZmVCeUJpbmRpbmdUaGlzKGxvZ2dlcikgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRSZWdpb24gPSByZWdpb247XG4gIH1cblxuICBwdWJsaWMgYXBwZW5kQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXVzZXJBZ2VudERhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q3VzdG9tVXNlckFnZW50ID0gdGhpcy5jb25maWcuY3VzdG9tVXNlckFnZW50O1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IGN1cnJlbnRDdXN0b21Vc2VyQWdlbnQgPyBgJHtjdXJyZW50Q3VzdG9tVXNlckFnZW50fSAke3VzZXJBZ2VudERhdGF9YCA6IHVzZXJBZ2VudERhdGE7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ3VzdG9tVXNlckFnZW50KHVzZXJBZ2VudERhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuY29uZmlnLmN1c3RvbVVzZXJBZ2VudD8ucmVwbGFjZSh1c2VyQWdlbnREYXRhLCAnJyk7XG4gIH1cblxuICBwdWJsaWMgYXBwc3luYygpOiBJQXBwU3luY0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEFwcFN5bmNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRTY2hlbWFDcmVhdGlvblN0YXR1czogKFxuICAgICAgICBpbnB1dDogR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgc3RhcnRTY2hlbWFDcmVhdGlvbjogKGlucHV0OiBTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxTdGFydFNjaGVtYUNyZWF0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFN0YXJ0U2NoZW1hQ3JlYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVBcGlLZXk6IChpbnB1dDogVXBkYXRlQXBpS2V5Q29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBcGlLZXlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlQXBpS2V5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlRnVuY3Rpb246IChpbnB1dDogVXBkYXRlRnVuY3Rpb25Db21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29tbWFuZChpbnB1dCkpLFxuICAgICAgdXBkYXRlUmVzb2x2ZXI6IChpbnB1dDogVXBkYXRlUmVzb2x2ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVJlc29sdmVyQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVJlc29sdmVyQ29tbWFuZChpbnB1dCkpLFxuXG4gICAgICAvLyBQYWdpbmF0aW9uIEZ1bmN0aW9uc1xuICAgICAgbGlzdEZ1bmN0aW9uczogYXN5bmMgKGlucHV0OiBMaXN0RnVuY3Rpb25zQ29tbWFuZElucHV0KTogUHJvbWlzZTxGdW5jdGlvbkNvbmZpZ3VyYXRpb25bXT4gPT4ge1xuICAgICAgICBjb25zdCBmdW5jdGlvbnMgPSBBcnJheTxGdW5jdGlvbkNvbmZpZ3VyYXRpb24+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlTGlzdEZ1bmN0aW9ucyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBmdW5jdGlvbnMucHVzaCguLi4ocGFnZS5mdW5jdGlvbnMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb25zO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGNsb3VkQ29udHJvbCgpOiBJQ2xvdWRDb250cm9sQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRDb250cm9sQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFJlc291cmNlczogKGlucHV0OiBMaXN0UmVzb3VyY2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RSZXNvdXJjZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRSZXNvdXJjZTogKGlucHV0OiBHZXRSZXNvdXJjZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0UmVzb3VyY2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0UmVzb3VyY2VDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBjbG91ZEZvcm1hdGlvbigpOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSgxMSwgKGF0dGVtcHQ6IG51bWJlcikgPT4gMTAwMCAqICgyICoqIGF0dGVtcHQpKSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGludWVVcGRhdGVSb2xsYmFjazogYXN5bmMgKFxuICAgICAgICBpbnB1dDogQ29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8Q29udGludWVVcGRhdGVSb2xsYmFja0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBDb250aW51ZVVwZGF0ZVJvbGxiYWNrQ29tbWFuZChpbnB1dCkpLFxuICAgICAgY3JlYXRlQ2hhbmdlU2V0OiAoaW5wdXQ6IENyZWF0ZUNoYW5nZVNldENvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGNyZWF0ZUdlbmVyYXRlZFRlbXBsYXRlOiAoXG4gICAgICAgIGlucHV0OiBDcmVhdGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8Q3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgQ3JlYXRlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVTdGFjazogKGlucHV0OiBDcmVhdGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBkZWxldGVDaGFuZ2VTZXQ6IChpbnB1dDogRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVsZXRlQ2hhbmdlU2V0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVsZXRlR2VuZXJhdGVkVGVtcGxhdGU6IChcbiAgICAgICAgaW5wdXQ6IERlbGV0ZUdlbmVyYXRlZFRlbXBsYXRlQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZWxldGVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlbGV0ZVN0YWNrOiAoaW5wdXQ6IERlbGV0ZVN0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVTdGFja0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZWxldGVTdGFja0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRldGVjdFN0YWNrRHJpZnQ6IChpbnB1dDogRGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGV0ZWN0U3RhY2tEcmlmdENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXRlY3RTdGFja0RyaWZ0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0OiAoaW5wdXQ6IERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmRJbnB1dCk6IFByb21pc2U8RGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERldGVjdFN0YWNrUmVzb3VyY2VEcmlmdENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlQ2hhbmdlU2V0OiAoaW5wdXQ6IERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUNoYW5nZVNldENvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGU6IChcbiAgICAgICAgaW5wdXQ6IERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlR2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlUmVzb3VyY2VTY2FuOiAoaW5wdXQ6IERlc2NyaWJlUmVzb3VyY2VTY2FuQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVJlc291cmNlU2NhbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1czogKGlucHV0OiBEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kSW5wdXQpOlxuICAgICAgUHJvbWlzZTxEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tzOiAoaW5wdXQ6IERlc2NyaWJlU3RhY2tzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN0YWNrc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tSZXNvdXJjZXM6IChpbnB1dDogRGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja1Jlc291cmNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrUmVzb3VyY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZXhlY3V0ZUNoYW5nZVNldDogKGlucHV0OiBFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZElucHV0KTogUHJvbWlzZTxFeGVjdXRlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEV4ZWN1dGVDaGFuZ2VTZXRDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRHZW5lcmF0ZWRUZW1wbGF0ZTogKGlucHV0OiBHZXRHZW5lcmF0ZWRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0R2VuZXJhdGVkVGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRUZW1wbGF0ZTogKGlucHV0OiBHZXRUZW1wbGF0ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0VGVtcGxhdGVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0VGVtcGxhdGVDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRUZW1wbGF0ZVN1bW1hcnk6IChpbnB1dDogR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEV4cG9ydHM6IChpbnB1dDogTGlzdEV4cG9ydHNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RFeHBvcnRzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RFeHBvcnRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdFJlc291cmNlU2NhblJlbGF0ZWRSZXNvdXJjZXM6IChcbiAgICAgICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZWxhdGVkUmVzb3VyY2VzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0UmVzb3VyY2VTY2FuUmVsYXRlZFJlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXM6IChcbiAgICAgICAgaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPExpc3RSZXNvdXJjZVNjYW5SZXNvdXJjZXNDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgTGlzdFJlc291cmNlU2NhblJlc291cmNlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RSZXNvdXJjZVNjYW5zOiAoaW5wdXQ6IExpc3RSZXNvdXJjZVNjYW5zQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0UmVzb3VyY2VTY2Fuc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGxpc3RTdGFja3M6IChpbnB1dDogTGlzdFN0YWNrc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdFN0YWNrc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0U3RhY2tzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgcm9sbGJhY2tTdGFjazogKGlucHV0OiBSb2xsYmFja1N0YWNrQ29tbWFuZElucHV0KTogUHJvbWlzZTxSb2xsYmFja1N0YWNrQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFJvbGxiYWNrU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICBzdGFydFJlc291cmNlU2NhbjogKGlucHV0OiBTdGFydFJlc291cmNlU2NhbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8U3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgU3RhcnRSZXNvdXJjZVNjYW5Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVTdGFjazogKGlucHV0OiBVcGRhdGVTdGFja0NvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU3RhY2tDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU3RhY2tDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb246IChcbiAgICAgICAgaW5wdXQ6IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8VXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlU3RhY2tFdmVudHM6IChpbnB1dDogRGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVTdGFja0V2ZW50c0NvbW1hbmRPdXRwdXQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVN0YWNrRXZlbnRzQ29tbWFuZChpbnB1dCkpO1xuICAgICAgfSxcbiAgICAgIGxpc3RTdGFja1Jlc291cmNlczogYXN5bmMgKGlucHV0OiBMaXN0U3RhY2tSZXNvdXJjZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+ID0+IHtcbiAgICAgICAgY29uc3Qgc3RhY2tSZXNvdXJjZXMgPSBBcnJheTxTdGFja1Jlc291cmNlU3VtbWFyeT4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVMaXN0U3RhY2tSZXNvdXJjZXMoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgc3RhY2tSZXNvdXJjZXMucHVzaCguLi4ocGFnZT8uU3RhY2tSZXNvdXJjZVN1bW1hcmllcyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja1Jlc291cmNlcztcbiAgICAgIH0sXG4gICAgICBwYWdpbmF0ZWRMaXN0U3RhY2tzOiBhc3luYyAoaW5wdXQ6IExpc3RTdGFja3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPFN0YWNrU3VtbWFyeVtdPiA9PiB7XG4gICAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gQXJyYXk8U3RhY2tTdW1tYXJ5PigpO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBwYWdpbmF0ZUxpc3RTdGFja3MoeyBjbGllbnQgfSwgaW5wdXQpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgcGFnaW5hdG9yKSB7XG4gICAgICAgICAgc3RhY2tSZXNvdXJjZXMucHVzaCguLi4ocGFnZT8uU3RhY2tTdW1tYXJpZXMgfHwgW10pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXM7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvdWRXYXRjaExvZ3MoKTogSUNsb3VkV2F0Y2hMb2dzQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xvdWRXYXRjaExvZ3NDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmliZUxvZ0dyb3VwczogKGlucHV0OiBEZXNjcmliZUxvZ0dyb3Vwc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2dHcm91cHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVMb2dHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBmaWx0ZXJMb2dFdmVudHM6IChpbnB1dDogRmlsdGVyTG9nRXZlbnRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxGaWx0ZXJMb2dFdmVudHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRmlsdGVyTG9nRXZlbnRzQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29kZUJ1aWxkKCk6IElDb2RlQnVpbGRDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDb2RlQnVpbGRDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGVQcm9qZWN0OiAoaW5wdXQ6IFVwZGF0ZVByb2plY3RDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVByb2plY3RDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlUHJvamVjdENvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGVjMigpOiBJRUMyQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRUMyQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVBdmFpbGFiaWxpdHlab25lczogKFxuICAgICAgICBpbnB1dDogRGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8RGVzY3JpYmVBdmFpbGFiaWxpdHlab25lc0NvbW1hbmRPdXRwdXQ+ID0+IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUF2YWlsYWJpbGl0eVpvbmVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbWFnZXM6IChpbnB1dDogRGVzY3JpYmVJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW1hZ2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW1hZ2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVJbnN0YW5jZXM6IChpbnB1dDogRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVSb3V0ZVRhYmxlczogKGlucHV0OiBEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJvdXRlVGFibGVzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlUm91dGVUYWJsZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVNlY3VyaXR5R3JvdXBzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxEZXNjcmliZVNlY3VyaXR5R3JvdXBzQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU2VjdXJpdHlHcm91cHNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVN1Ym5ldHM6IChpbnB1dDogRGVzY3JpYmVTdWJuZXRzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVN1Ym5ldHNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVTdWJuZXRzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcGNFbmRwb2ludFNlcnZpY2VzOiAoXG4gICAgICAgIGlucHV0OiBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kSW5wdXQsXG4gICAgICApOiBQcm9taXNlPERlc2NyaWJlVnBjRW5kcG9pbnRTZXJ2aWNlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVZwY0VuZHBvaW50U2VydmljZXNDb21tYW5kKGlucHV0KSksXG4gICAgICBkZXNjcmliZVZwY3M6IChpbnB1dDogRGVzY3JpYmVWcGNzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwY3NDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVWcGNzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVWcG5HYXRld2F5czogKGlucHV0OiBEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVZwbkdhdGV3YXlzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlVnBuR2F0ZXdheXNDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3IoKTogSUVDUkNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDUkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhdGNoRGVsZXRlSW1hZ2U6IChpbnB1dDogQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hEZWxldGVJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBCYXRjaERlbGV0ZUltYWdlQ29tbWFuZChpbnB1dCkpLFxuICAgICAgYmF0Y2hHZXRJbWFnZTogKGlucHV0OiBCYXRjaEdldEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaEdldEltYWdlQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEJhdGNoR2V0SW1hZ2VDb21tYW5kKGlucHV0KSksXG4gICAgICBjcmVhdGVSZXBvc2l0b3J5OiAoaW5wdXQ6IENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kSW5wdXQpOiBQcm9taXNlPENyZWF0ZVJlcG9zaXRvcnlDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgQ3JlYXRlUmVwb3NpdG9yeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlSW1hZ2VzOiAoaW5wdXQ6IEVDUkRlc2NyaWJlSW1hZ2VzQ29tbWFuZElucHV0KTogUHJvbWlzZTxFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBFQ1JEZXNjcmliZUltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlUmVwb3NpdG9yaWVzOiAoaW5wdXQ6IERlc2NyaWJlUmVwb3NpdG9yaWVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVJlcG9zaXRvcmllc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldEF1dGhvcml6YXRpb25Ub2tlbjogKGlucHV0OiBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kSW5wdXQpOiBQcm9taXNlPEdldEF1dGhvcml6YXRpb25Ub2tlbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRBdXRob3JpemF0aW9uVG9rZW5Db21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SW1hZ2VzOiAoaW5wdXQ6IExpc3RJbWFnZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RJbWFnZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEltYWdlc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlOiAoaW5wdXQ6IFB1dEltYWdlQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJbWFnZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRJbWFnZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uOiAoXG4gICAgICAgIGlucHV0OiBQdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8UHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgUHV0SW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlY3MoKTogSUVDU0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEVDU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RDbHVzdGVyczogKGlucHV0OiBMaXN0Q2x1c3RlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RDbHVzdGVyc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBMaXN0Q2x1c3RlcnNDb21tYW5kKGlucHV0KSksXG4gICAgICByZWdpc3RlclRhc2tEZWZpbml0aW9uOiAoXG4gICAgICAgIGlucHV0OiBSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZElucHV0LFxuICAgICAgKTogUHJvbWlzZTxSZWdpc3RlclRhc2tEZWZpbml0aW9uQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IFJlZ2lzdGVyVGFza0RlZmluaXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVTZXJ2aWNlOiAoaW5wdXQ6IFVwZGF0ZVNlcnZpY2VDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZVNlcnZpY2VDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgVXBkYXRlU2VydmljZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFdhaXRlcnNcbiAgICAgIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlOiAoaW5wdXQ6IERlc2NyaWJlU2VydmljZXNDb21tYW5kSW5wdXQsIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTxXYWl0ZXJSZXN1bHQ+ID0+IHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbFNlcnZpY2VzU3RhYmxlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIG1heFdhaXRUaW1lOiB0aW1lb3V0U2Vjb25kcyA/PyA2MDAsXG4gICAgICAgICAgICBtaW5EZWxheTogNixcbiAgICAgICAgICAgIG1heERlbGF5OiA2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZWxidjIoKTogSUVsYXN0aWNMb2FkQmFsYW5jaW5nVjJDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVMaXN0ZW5lcnM6IChpbnB1dDogRGVzY3JpYmVMaXN0ZW5lcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlTGlzdGVuZXJzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZGVzY3JpYmVMb2FkQmFsYW5jZXJzOiAoaW5wdXQ6IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVzY3JpYmVMb2FkQmFsYW5jZXJzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlTG9hZEJhbGFuY2Vyc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGRlc2NyaWJlVGFnczogKGlucHV0OiBEZXNjcmliZVRhZ3NDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlVGFnc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZVRhZ3NDb21tYW5kKGlucHV0KSksXG4gICAgICAvLyBQYWdpbmF0aW9uIEZ1bmN0aW9uc1xuICAgICAgcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVyczogYXN5bmMgKGlucHV0OiBEZXNjcmliZUxpc3RlbmVyc0NvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdGVuZXJbXT4gPT4ge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBBcnJheTxMaXN0ZW5lcj4oKTtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gcGFnaW5hdGVEZXNjcmliZUxpc3RlbmVycyh7IGNsaWVudCB9LCBpbnB1dCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcGFnZSBvZiBwYWdpbmF0b3IpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaCguLi4ocGFnZT8uTGlzdGVuZXJzIHx8IFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3RlbmVycztcbiAgICAgIH0sXG4gICAgICBwYWdpbmF0ZURlc2NyaWJlTG9hZEJhbGFuY2VyczogYXN5bmMgKGlucHV0OiBEZXNjcmliZUxvYWRCYWxhbmNlcnNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExvYWRCYWxhbmNlcltdPiA9PiB7XG4gICAgICAgIGNvbnN0IGxvYWRCYWxhbmNlcnMgPSBBcnJheTxMb2FkQmFsYW5jZXI+KCk7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvciA9IHBhZ2luYXRlRGVzY3JpYmVMb2FkQmFsYW5jZXJzKHsgY2xpZW50IH0sIGlucHV0KTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHBhZ2luYXRvcikge1xuICAgICAgICAgIGxvYWRCYWxhbmNlcnMucHVzaCguLi4ocGFnZT8uTG9hZEJhbGFuY2VycyB8fCBbXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2FkQmFsYW5jZXJzO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGlhbSgpOiBJSUFNQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgSUFNQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlUG9saWN5OiAoaW5wdXQ6IENyZWF0ZVBvbGljeUNvbW1hbmRJbnB1dCk6IFByb21pc2U8Q3JlYXRlUG9saWN5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IENyZWF0ZVBvbGljeUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIGdldFBvbGljeTogKGlucHV0OiBHZXRQb2xpY3lDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBvbGljeUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRQb2xpY3lDb21tYW5kKGlucHV0KSksXG4gICAgICBnZXRSb2xlOiAoaW5wdXQ6IEdldFJvbGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFJvbGVDb21tYW5kT3V0cHV0PiA9PiBjbGllbnQuc2VuZChuZXcgR2V0Um9sZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGttcygpOiBJS01TQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgS01TQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpYmVLZXk6IChpbnB1dDogRGVzY3JpYmVLZXlDb21tYW5kSW5wdXQpOiBQcm9taXNlPERlc2NyaWJlS2V5Q29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlS2V5Q29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEFsaWFzZXM6IChpbnB1dDogTGlzdEFsaWFzZXNDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RBbGlhc2VzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RBbGlhc2VzQ29tbWFuZChpbnB1dCkpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbGFtYmRhKCk6IElMYW1iZGFDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBMYW1iZGFDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBpbnZva2VDb21tYW5kOiAoaW5wdXQ6IEludm9rZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8SW52b2tlQ29tbWFuZE91dHB1dD4gPT4gY2xpZW50LnNlbmQobmV3IEludm9rZUNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1Ymxpc2hWZXJzaW9uOiAoaW5wdXQ6IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdWJsaXNoVmVyc2lvbkNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdWJsaXNoVmVyc2lvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUFsaWFzOiAoaW5wdXQ6IFVwZGF0ZUFsaWFzQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVBbGlhc0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVBbGlhc0NvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHVwZGF0ZUZ1bmN0aW9uQ29kZTogKGlucHV0OiBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUZ1bmN0aW9uQ29kZUNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBVcGRhdGVGdW5jdGlvbkNvZGVDb21tYW5kKGlucHV0KSksXG4gICAgICB1cGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb246IChcbiAgICAgICAgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8VXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIC8vIFdhaXRlcnNcbiAgICAgIHdhaXRVbnRpbEZ1bmN0aW9uVXBkYXRlZDogKFxuICAgICAgICBkZWxheVNlY29uZHM6IG51bWJlcixcbiAgICAgICAgaW5wdXQ6IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmRJbnB1dCxcbiAgICAgICk6IFByb21pc2U8V2FpdGVyUmVzdWx0PiA9PiB7XG4gICAgICAgIHJldHVybiB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWRWMihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICBtYXhEZWxheTogZGVsYXlTZWNvbmRzLFxuICAgICAgICAgICAgbWluRGVsYXk6IGRlbGF5U2Vjb25kcyxcbiAgICAgICAgICAgIG1heFdhaXRUaW1lOiBkZWxheVNlY29uZHMgKiA2MCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHJvdXRlNTMoKTogSVJvdXRlNTNDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBSb3V0ZTUzQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0SG9zdGVkWm9uZTogKGlucHV0OiBHZXRIb3N0ZWRab25lQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRIb3N0ZWRab25lQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEhvc3RlZFpvbmVDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0SG9zdGVkWm9uZXM6IChpbnB1dDogTGlzdEhvc3RlZFpvbmVzQ29tbWFuZElucHV0KTogUHJvbWlzZTxMaXN0SG9zdGVkWm9uZXNDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdEhvc3RlZFpvbmVzQ29tbWFuZChpbnB1dCkpLFxuICAgICAgbGlzdEhvc3RlZFpvbmVzQnlOYW1lOiAoaW5wdXQ6IExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8TGlzdEhvc3RlZFpvbmVzQnlOYW1lQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IExpc3RIb3N0ZWRab25lc0J5TmFtZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHMzKCk6IElTM0NsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFMzQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVsZXRlT2JqZWN0czogKGlucHV0OiBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVPYmplY3RzQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IERlbGV0ZU9iamVjdHNDb21tYW5kKHtcbiAgICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgICBDaGVja3N1bUFsZ29yaXRobTogJ1NIQTI1NicsXG4gICAgICAgIH0pKSxcbiAgICAgIGRlbGV0ZU9iamVjdFRhZ2dpbmc6IChpbnB1dDogRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0QnVja2V0RW5jcnlwdGlvbjogKGlucHV0OiBHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRCdWNrZXRFbmNyeXB0aW9uQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldEJ1Y2tldEVuY3J5cHRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICBnZXRCdWNrZXRMb2NhdGlvbjogKGlucHV0OiBHZXRCdWNrZXRMb2NhdGlvbkNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0QnVja2V0TG9jYXRpb25Db21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0QnVja2V0TG9jYXRpb25Db21tYW5kKGlucHV0KSksXG4gICAgICBnZXRPYmplY3Q6IChpbnB1dDogR2V0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0T2JqZWN0Q29tbWFuZChpbnB1dCkpLFxuICAgICAgZ2V0T2JqZWN0VGFnZ2luZzogKGlucHV0OiBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZElucHV0KTogUHJvbWlzZTxHZXRPYmplY3RUYWdnaW5nQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IEdldE9iamVjdFRhZ2dpbmdDb21tYW5kKGlucHV0KSksXG4gICAgICBsaXN0T2JqZWN0c1YyOiAoaW5wdXQ6IExpc3RPYmplY3RzVjJDb21tYW5kSW5wdXQpOiBQcm9taXNlPExpc3RPYmplY3RzVjJDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgTGlzdE9iamVjdHNWMkNvbW1hbmQoaW5wdXQpKSxcbiAgICAgIHB1dE9iamVjdFRhZ2dpbmc6IChpbnB1dDogUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCh7XG4gICAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgICAgQ2hlY2tzdW1BbGdvcml0aG06ICdTSEEyNTYnLFxuICAgICAgICB9KSksXG4gICAgICB1cGxvYWQ6IChpbnB1dDogUHV0T2JqZWN0Q29tbWFuZElucHV0KTogUHJvbWlzZTxDb21wbGV0ZU11bHRpcGFydFVwbG9hZENvbW1hbmRPdXRwdXQ+ID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cGxvYWQgPSBuZXcgVXBsb2FkKHtcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHBhcmFtczogeyAuLi5pbnB1dCwgQ2hlY2tzdW1BbGdvcml0aG06ICdTSEEyNTYnIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gdXBsb2FkLmRvbmUoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoYFVwbG9hZCBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3JNZXNzYWdlKGUpfWApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc2VjcmV0c01hbmFnZXIoKTogSVNlY3JldHNNYW5hZ2VyQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB7XG4gICAgICBnZXRTZWNyZXRWYWx1ZTogKGlucHV0OiBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0PiA9PlxuICAgICAgICBjbGllbnQuc2VuZChuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzc20oKTogSVNTTUNsaWVudCB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFNTTUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFBhcmFtZXRlcjogKGlucHV0OiBHZXRQYXJhbWV0ZXJDb21tYW5kSW5wdXQpOiBQcm9taXNlPEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQ+ID0+XG4gICAgICAgIGNsaWVudC5zZW5kKG5ldyBHZXRQYXJhbWV0ZXJDb21tYW5kKGlucHV0KSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGVwRnVuY3Rpb25zKCk6IElTdGVwRnVuY3Rpb25zQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU0ZOQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lOiAoaW5wdXQ6IFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlU3RhdGVNYWNoaW5lQ29tbWFuZE91dHB1dD4gPT5cbiAgICAgICAgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVN0YXRlTWFjaGluZUNvbW1hbmQoaW5wdXQpKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgU0RLIHYzIHJlcXVpcmVzIGEgY2xpZW50IGNvbmZpZyBhbmQgYSBjb21tYW5kIGluIG9yZGVyIHRvIGdldCBhbiBlbmRwb2ludCBmb3JcbiAgICogYW55IGdpdmVuIHNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXJsU3VmZml4KHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjZm4gPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQoeyByZWdpb24gfSk7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRFbmRwb2ludEZyb21JbnN0cnVjdGlvbnMoe30sIERlc2NyaWJlU3RhY2tSZXNvdXJjZXNDb21tYW5kLCB7IC4uLmNmbi5jb25maWcgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50LnVybC5ob3N0bmFtZS5zcGxpdChgJHtyZWdpb259LmApLnBvcCgpITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjdXJyZW50QWNjb3VudCgpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICByZXR1cm4gY2FjaGVkQXN5bmModGhpcywgQ1VSUkVOVF9BQ0NPVU5UX0tFWSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3JlZHMgPSBhd2FpdCB0aGlzLmNyZWRQcm92aWRlcigpO1xuICAgICAgcmV0dXJuIHRoaXMuYWNjb3VudENhY2hlLmZldGNoKGNyZWRzLmFjY2Vzc0tleUlkLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgb25lLCByZXNvbHZlIGZyb20gU1RTIGFuZCBzdG9yZSBpbiBjYWNoZS5cbiAgICAgICAgYXdhaXQgdGhpcy5kZWJ1ZygnTG9va2luZyB1cCBkZWZhdWx0IGFjY291bnQgSUQgZnJvbSBTVFMnKTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFNUU0NsaWVudCh7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgcmV0cnlTdHJhdGVneTogdGhpcy5zdHNSZXRyeVN0cmF0ZWd5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuc2VuZChjb21tYW5kKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gcmVzdWx0LkFjY291bnQ7XG4gICAgICAgIGNvbnN0IHBhcnRpdGlvbiA9IHJlc3VsdC5Bcm4hLnNwbGl0KCc6JylbMV07XG4gICAgICAgIGlmICghYWNjb3VudElkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IoXCJTVFMgZGlkbid0IHJldHVybiBhbiBhY2NvdW50IElEXCIpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZGVidWcoYERlZmF1bHQgYWNjb3VudCBJRDogJHthY2NvdW50SWR9YCk7XG5cbiAgICAgICAgLy8gU2F2ZSBhbm90aGVyIFNUUyBjYWxsIGxhdGVyIGlmIHRoaXMgb25lIGFscmVhZHkgc3VjY2VlZGVkXG4gICAgICAgIHRoaXMuX2NyZWRlbnRpYWxzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHsgYWNjb3VudElkLCBwYXJ0aXRpb24gfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2Ugc3VyZSB0aGUgdGhlIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIG5vdCBleHBpcmVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDcmVkZW50aWFscygpIHtcbiAgICBpZiAodGhpcy5fY3JlZGVudGlhbHNWYWxpZGF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU1RTQ2xpZW50KHsgLi4udGhpcy5jb25maWcsIHJldHJ5U3RyYXRlZ3k6IHRoaXMuc3RzUmV0cnlTdHJhdGVneSB9KTtcbiAgICBhd2FpdCBjbGllbnQuc2VuZChuZXcgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kKHt9KSk7XG4gICAgdGhpcy5fY3JlZGVudGlhbHNWYWxpZGF0ZWQgPSB0cnVlO1xuICB9XG59XG5cbmNvbnN0IENVUlJFTlRfQUNDT1VOVF9LRVkgPSBTeW1ib2woJ2N1cnJlbnRfYWNjb3VudF9rZXknKTtcblxuLyoqXG4gKiBNYWtlIHRoZSBTREsgbG9nZ2VyIHNhZmUgYWdhaW5zdCByYXcgZnVuY3Rpb24gaW52b2NhdGlvbnNcbiAqXG4gKiBUaGUgU0RLIGV4cGVjdHMgdGhlIGxvZ2dlciB0byBiZSBhbiBvYmplY3Qgd2l0aCBhIG51bWJlciBvZiBmdW5jdGlvbnMsIGJ1dCBpdFxuICogZG9lc24ndCBuZWNlc3NhcmlseSBrZWVwICd0aGlzJyBib3VuZCBhbGwgdGhlIHRpbWU7IHNvbWV0aW1lcyBpdCB3aWxsIGNvcHlcbiAqIGZ1bmN0aW9ucyBvZmYgb2YgdGhlIG9iamVjdCBhbmQgY2FsbCB0aGVtIGZyb20gYSB2YXJpYWJsZS5cbiAqXG4gKiBCeSBob3cgSmF2YVNjcmlwdCB3b3JrcywgdGhpcyBkcm9wcyB0aGUgJ3RoaXMnIHJlZmVyZW5jZS4gTWFrZSBzdXJlICd0aGlzJyBpc1xuICogYm91bmQgYXQgYWxsIHRpbWVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzLXYzL2lzc3Vlcy83Mjk3XG4gKi9cbmZ1bmN0aW9uIG1ha2VTZGtMb2dnZXJTYWZlQnlCaW5kaW5nVGhpcyhsb2dnZXI6IElTZGtMb2dnZXIpOiBJU2RrTG9nZ2VyIHtcbiAgcmV0dXJuIHtcbiAgICBkZWJ1ZzogbG9nZ2VyLmRlYnVnLmJpbmQobG9nZ2VyKSxcbiAgICBpbmZvOiBsb2dnZXIuaW5mby5iaW5kKGxvZ2dlciksXG4gICAgd2FybjogbG9nZ2VyLndhcm4uYmluZChsb2dnZXIpLFxuICAgIGVycm9yOiBsb2dnZXIuZXJyb3IuYmluZChsb2dnZXIpLFxuICB9O1xufVxuIl19
@@ -29,7 +29,7 @@ interface DriftFormatterOutput {
29
29
  */
30
30
  readonly unchanged?: string;
31
31
  /**
32
- * Resources that were not checked for drift
32
+ * Resources that were not checked for drift or have an UNKNOWN drift status
33
33
  */
34
34
  readonly unchecked?: string;
35
35
  /**
@@ -64,16 +64,12 @@ export declare class DriftFormatter {
64
64
  formatStackDrift(): DriftFormatterOutput;
65
65
  private buildLogicalToPathMap;
66
66
  /**
67
- * Renders stack drift information to the given stream
67
+ * Renders stack drift information
68
68
  *
69
- * @param driftResults - The stack resource drifts from CloudFormation
70
- * @param allStackResources - A map of all stack resources
71
- * @param verbose - Whether to output more verbose text (include undrifted resources)
72
69
  * @param logicalToPathMap - A map from logical ID to construct path
73
70
  */
74
71
  private formatStackDriftChanges;
75
72
  private formatLogicalId;
76
- private formatValue;
77
73
  private printSectionHeader;
78
74
  private printSectionFooter;
79
75
  private formatTreeDiff;
@@ -33,10 +33,9 @@ class DriftFormatter {
33
33
  */
34
34
  formatStackDrift() {
35
35
  const formatterOutput = this.formatStackDriftChanges(this.buildLogicalToPathMap());
36
- // we are only interested in actual drifts and always ignore the metadata resource
37
- const actualDrifts = this.resourceDriftResults.filter(d => d.StackResourceDriftStatus === 'MODIFIED' ||
38
- d.StackResourceDriftStatus === 'DELETED' ||
39
- d.ResourceType === 'AWS::CDK::Metadata');
36
+ // we are only interested in actual drifts (and ignore the metadata resource)
37
+ const actualDrifts = this.resourceDriftResults.filter(d => (d.StackResourceDriftStatus === 'MODIFIED' || d.StackResourceDriftStatus === 'DELETED')
38
+ && d.ResourceType !== 'AWS::CDK::Metadata');
40
39
  // must output the stack name if there are drifts
41
40
  const stackHeader = (0, node_util_1.format)(`Stack ${chalk.bold(this.stackName)}\n`);
42
41
  if (actualDrifts.length === 0) {
@@ -45,6 +44,7 @@ class DriftFormatter {
45
44
  numResourcesWithDrift: 0,
46
45
  numResourcesUnchecked: this.allStackResources.size - this.resourceDriftResults.length,
47
46
  stackHeader,
47
+ unchecked: formatterOutput.unchecked,
48
48
  summary: finalResult,
49
49
  };
50
50
  }
@@ -68,11 +68,8 @@ class DriftFormatter {
68
68
  return map;
69
69
  }
70
70
  /**
71
- * Renders stack drift information to the given stream
71
+ * Renders stack drift information
72
72
  *
73
- * @param driftResults - The stack resource drifts from CloudFormation
74
- * @param allStackResources - A map of all stack resources
75
- * @param verbose - Whether to output more verbose text (include undrifted resources)
76
73
  * @param logicalToPathMap - A map from logical ID to construct path
77
74
  */
78
75
  formatStackDriftChanges(logicalToPathMap = {}) {
@@ -91,34 +88,32 @@ class DriftFormatter {
91
88
  for (const drift of unchangedResources) {
92
89
  if (!drift.LogicalResourceId || !drift.ResourceType)
93
90
  continue;
94
- unchanged += `${CONTEXT} ${this.formatValue(drift.ResourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
91
+ unchanged += `${CONTEXT} ${chalk.cyan(drift.ResourceType)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
95
92
  }
96
93
  unchanged += this.printSectionFooter();
97
94
  }
98
- // Process all unchecked resources
99
- if (this.allStackResources) {
100
- const uncheckedResources = Array.from(this.allStackResources.keys()).filter((logicalId) => {
101
- return !drifts.find((drift) => drift.LogicalResourceId === logicalId);
102
- });
103
- if (uncheckedResources.length > 0) {
104
- unchecked = this.printSectionHeader('Unchecked Resources');
105
- for (const logicalId of uncheckedResources) {
106
- const resourceType = this.allStackResources.get(logicalId);
107
- unchecked += `${CONTEXT} ${this.formatValue(resourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, logicalId)}\n`;
108
- }
109
- unchecked += this.printSectionFooter();
95
+ // Process all unchecked and unknown resources
96
+ const uncheckedResources = Array.from(this.allStackResources.keys()).filter((logicalId) => {
97
+ const drift = drifts.find((d) => d.LogicalResourceId === logicalId);
98
+ return !drift || drift.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.UNKNOWN;
99
+ });
100
+ if (uncheckedResources.length > 0) {
101
+ unchecked = this.printSectionHeader('Unchecked Resources');
102
+ for (const logicalId of uncheckedResources) {
103
+ const resourceType = this.allStackResources.get(logicalId);
104
+ unchecked += `${CONTEXT} ${chalk.cyan(resourceType)} ${this.formatLogicalId(logicalToPathMap, logicalId)}\n`;
110
105
  }
106
+ unchecked += this.printSectionFooter();
111
107
  }
112
- // Process modified resources
113
- const modifiedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.MODIFIED);
108
+ // Process modified resources (exclude AWS::CDK::Metadata)
109
+ const modifiedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.MODIFIED
110
+ && d.ResourceType !== 'AWS::CDK::Metadata');
114
111
  if (modifiedResources.length > 0) {
115
112
  modified = this.printSectionHeader('Modified Resources');
116
113
  for (const drift of modifiedResources) {
117
114
  if (!drift.LogicalResourceId || !drift.ResourceType)
118
115
  continue;
119
- if (modified === undefined)
120
- modified = '';
121
- modified += `${UPDATE} ${this.formatValue(drift.ResourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
116
+ modified += `${UPDATE} ${chalk.cyan(drift.ResourceType)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
122
117
  if (drift.PropertyDifferences) {
123
118
  const propDiffs = drift.PropertyDifferences;
124
119
  for (let i = 0; i < propDiffs.length; i++) {
@@ -132,14 +127,15 @@ class DriftFormatter {
132
127
  }
133
128
  modified += this.printSectionFooter();
134
129
  }
135
- // Process deleted resources
136
- const deletedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.DELETED);
130
+ // Process deleted resources (exclude AWS::CDK::Metadata)
131
+ const deletedResources = drifts.filter(d => d.StackResourceDriftStatus === client_cloudformation_1.StackResourceDriftStatus.DELETED
132
+ && d.ResourceType !== 'AWS::CDK::Metadata');
137
133
  if (deletedResources.length > 0) {
138
134
  deleted = this.printSectionHeader('Deleted Resources');
139
135
  for (const drift of deletedResources) {
140
136
  if (!drift.LogicalResourceId || !drift.ResourceType)
141
137
  continue;
142
- deleted += `${REMOVAL} ${this.formatValue(drift.ResourceType, chalk.cyan)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
138
+ deleted += `${REMOVAL} ${chalk.cyan(drift.ResourceType)} ${this.formatLogicalId(logicalToPathMap, drift.LogicalResourceId)}\n`;
143
139
  }
144
140
  deleted += this.printSectionFooter();
145
141
  }
@@ -167,15 +163,6 @@ class DriftFormatter {
167
163
  }
168
164
  return `${normalizedPath} ${chalk.gray(logicalId)}`;
169
165
  }
170
- formatValue(value, colorFn) {
171
- if (value == null) {
172
- return '';
173
- }
174
- if (typeof value === 'string') {
175
- return colorFn(value);
176
- }
177
- return colorFn(JSON.stringify(value));
178
- }
179
166
  printSectionHeader(title) {
180
167
  return `${chalk.underline(chalk.bold(title))}\n`;
181
168
  }
@@ -187,8 +174,8 @@ class DriftFormatter {
187
174
  difference.isRemoval ? REMOVAL :
188
175
  UPDATE, propertyPath);
189
176
  if (difference.isUpdate) {
190
- result += (0, node_util_1.format)(' ├─ %s %s\n', REMOVAL, this.formatValue(difference.oldValue, chalk.red));
191
- result += (0, node_util_1.format)(' └─ %s %s\n', ADDITION, this.formatValue(difference.newValue, chalk.green));
177
+ result += (0, node_util_1.format)(' ├─ %s %s\n', REMOVAL, chalk.red(difference.oldValue));
178
+ result += (0, node_util_1.format)(' └─ %s %s\n', ADDITION, chalk.green(difference.newValue));
192
179
  }
193
180
  return result;
194
181
  }
@@ -198,4 +185,4 @@ const ADDITION = chalk.green('[+]');
198
185
  const CONTEXT = chalk.grey('[ ]');
199
186
  const UPDATE = chalk.yellow('[~]');
200
187
  const REMOVAL = chalk.red('[-]');
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQywyREFBMkQ7QUFDM0Qsc0VBQTBEO0FBRzFELDBFQUEwRTtBQUMxRSwrQkFBK0I7QUE4RC9COztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09B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LElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvRixNQUFNLElBQUksSUFBQSxrQkFBTSxFQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQXBORCx3Q0FvTkM7QUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBEaWZmZXJlbmNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrUmVzb3VyY2VEcmlmdCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBGb3JtYXR0ZWREcmlmdCB9IGZyb20gJy4uLy4uL2FjdGlvbnMvZHJpZnQnO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgRHJpZnQgRm9ybWF0dGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgYXJ0aWZhY3RcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSByZXN1bHRzIG9mIHN0YWNrIGRyaWZ0IGRldGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xufVxuXG5pbnRlcmZhY2UgRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAvKipcbiAgICogTnVtYmVyIG9mIHJlc291cmNlcyB3aXRoIGRyaWZ0LiBJZiB1bmRlZmluZWQsIHRoZW4gYW4gZXJyb3Igb2NjdXJyZWRcbiAgICogYW5kIHJlc291cmNlcyB3ZXJlIG5vdCBwcm9wZXJseSBjaGVja2VkIGZvciBkcmlmdC5cbiAgICovXG4gIHJlYWRvbmx5IG51bVJlc291cmNlc1dpdGhEcmlmdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSByZXNvdXJjZXMgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhblxuICAgKiBlcnJvciBvY2N1cnJlZCBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGF0IGhhdmUgbm90IGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgY2hlY2tlZCBmb3IgZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IHVuY2hlY2tlZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHdpdGggZHJpZnRcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCAoZHJpZnQpXG4gICAqL1xuICByZWFkb25seSBkZWxldGVkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyLCBjb250YWluaW5nIHRoZSBzdGFjayBuYW1lXG4gICAqL1xuICByZWFkb25seSBzdGFja0hlYWRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmluYWwgcmVzdWx0cyAoc3VtbWFyeSkgb2YgdGhlIGRyaWZ0IHJlc3VsdHNcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgZm9ybWF0dGluZyBkcmlmdCBkZXRlY3Rpb24gb3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBEcmlmdEZvcm1hdHRlciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VEcmlmdFJlc3VsdHM6IFN0YWNrUmVzb3VyY2VEcmlmdFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbFN0YWNrUmVzb3VyY2VzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBEcmlmdEZvcm1hdHRlclByb3BzKSB7XG4gICAgdGhpcy5zdGFjayA9IHByb3BzLnN0YWNrO1xuICAgIHRoaXMuc3RhY2tOYW1lID0gcHJvcHMuc3RhY2suZGlzcGxheU5hbWUgPz8gcHJvcHMuc3RhY2suc3RhY2tOYW1lO1xuICAgIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMgPSBwcm9wcy5yZXNvdXJjZURyaWZ0cztcblxuICAgIHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzIHx8IHt9KS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5zdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXNbaWRdO1xuICAgICAgLy8gYWx3YXlzIGlnbm9yZSB0aGUgbWV0YWRhdGEgcmVzb3VyY2VcbiAgICAgIGlmIChyZXNvdXJjZS5UeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNldChpZCwgcmVzb3VyY2UuVHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBzdGFjayBkcmlmdCBkZXRlY3Rpb24gcmVzdWx0c1xuICAgKi9cbiAgcHVibGljIGZvcm1hdFN0YWNrRHJpZnQoKTogRHJpZnRGb3JtYXR0ZXJPdXRwdXQge1xuICAgIGNvbnN0IGZvcm1hdHRlck91dHB1dCA9IHRoaXMuZm9ybWF0U3RhY2tEcmlmdENoYW5nZXModGhpcy5idWlsZExvZ2ljYWxUb1BhdGhNYXAoKSk7XG5cbiAgICAvLyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGFjdHVhbCBkcmlmdHMgYW5kIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgY29uc3QgYWN0dWFsRHJpZnRzID0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5maWx0ZXIoZCA9PlxuICAgICAgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHxcbiAgICAgIGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSAnREVMRVRFRCcgfHxcbiAgICAgIGQuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyxcbiAgICApO1xuXG4gICAgLy8gbXVzdCBvdXRwdXQgdGhlIHN0YWNrIG5hbWUgaWYgdGhlcmUgYXJlIGRyaWZ0c1xuICAgIGNvbnN0IHN0YWNrSGVhZGVyID0gZm9ybWF0KGBTdGFjayAke2NoYWxrLmJvbGQodGhpcy5zdGFja05hbWUpfVxcbmApO1xuXG4gICAgaWYgKGFjdHVhbERyaWZ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsuZ3JlZW4oJ05vIGRyaWZ0IGRldGVjdGVkXFxuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IDAsXG4gICAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICAgIHN0YWNrSGVhZGVyLFxuICAgICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay55ZWxsb3coYFxcbiR7YWN0dWFsRHJpZnRzLmxlbmd0aH0gcmVzb3VyY2Uke2FjdHVhbERyaWZ0cy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJ30gJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJ2hhcycgOiAnaGF2ZSd9IGRyaWZ0ZWQgZnJvbSB0aGVpciBleHBlY3RlZCBjb25maWd1cmF0aW9uXFxuYCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogYWN0dWFsRHJpZnRzLmxlbmd0aCxcbiAgICAgIG51bVJlc291cmNlc1VuY2hlY2tlZDogdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zaXplIC0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGgsXG4gICAgICBzdGFja0hlYWRlcixcbiAgICAgIHVuY2hhbmdlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hhbmdlZCxcbiAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgIG1vZGlmaWVkOiBmb3JtYXR0ZXJPdXRwdXQubW9kaWZpZWQsXG4gICAgICBkZWxldGVkOiBmb3JtYXR0ZXJPdXRwdXQuZGVsZXRlZCxcbiAgICAgIHN1bW1hcnk6IGZpbmFsUmVzdWx0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTG9naWNhbFRvUGF0aE1hcCgpIHtcbiAgICBjb25zdCBtYXA6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgbWQgb2YgdGhpcy5zdGFjay5maW5kTWV0YWRhdGFCeVR5cGUoY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKSkge1xuICAgICAgbWFwW21kLmRhdGEgYXMgc3RyaW5nXSA9IG1kLnBhdGg7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBzdGFjayBkcmlmdCBpbmZvcm1hdGlvbiB0byB0aGUgZ2l2ZW4gc3RyZWFtXG4gICAqXG4gICAqIEBwYXJhbSBkcmlmdFJlc3VsdHMgLSBUaGUgc3RhY2sgcmVzb3VyY2UgZHJpZnRzIGZyb20gQ2xvdWRGb3JtYXRpb25cbiAgICogQHBhcmFtIGFsbFN0YWNrUmVzb3VyY2VzIC0gQSBtYXAgb2YgYWxsIHN0YWNrIHJlc291cmNlc1xuICAgKiBAcGFyYW0gdmVyYm9zZSAtIFdoZXRoZXIgdG8gb3V0cHV0IG1vcmUgdmVyYm9zZSB0ZXh0IChpbmNsdWRlIHVuZHJpZnRlZCByZXNvdXJjZXMpXG4gICAqIEBwYXJhbSBsb2dpY2FsVG9QYXRoTWFwIC0gQSBtYXAgZnJvbSBsb2dpY2FsIElEIHRvIGNvbnN0cnVjdCBwYXRoXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFN0YWNrRHJpZnRDaGFuZ2VzKFxuICAgIGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IEZvcm1hdHRlZERyaWZ0IHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBsZXQgdW5jaGFuZ2VkO1xuICAgIGxldCB1bmNoZWNrZWQ7XG4gICAgbGV0IG1vZGlmaWVkO1xuICAgIGxldCBkZWxldGVkO1xuXG4gICAgY29uc3QgZHJpZnRzID0gdGhpcy5yZXNvdXJjZURyaWZ0UmVzdWx0cztcblxuICAgIC8vIFByb2Nlc3MgdW5jaGFuZ2VkIHJlc291cmNlc1xuICAgIGNvbnN0IHVuY2hhbmdlZFJlc291cmNlcyA9IGRyaWZ0cy5maWx0ZXIoZCA9PiBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLklOX1NZTkMpO1xuICAgIGlmICh1bmNoYW5nZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgdW5jaGFuZ2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1Jlc291cmNlcyBJbiBTeW5jJyk7XG5cbiAgICAgIGZvciAoY29uc3QgZHJpZnQgb2YgdW5jaGFuZ2VkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIHVuY2hhbmdlZCArPSBgJHtDT05URVhUfSAke3RoaXMuZm9ybWF0VmFsdWUoZHJpZnQuUmVzb3VyY2VUeXBlLCBjaGFsay5jeWFuKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwLCBkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCl9XFxuYDtcbiAgICAgIH1cbiAgICAgIHVuY2hhbmdlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgYWxsIHVuY2hlY2tlZCByZXNvdXJjZXNcbiAgICBpZiAodGhpcy5hbGxTdGFja1Jlc291cmNlcykge1xuICAgICAgY29uc3QgdW5jaGVja2VkUmVzb3VyY2VzID0gQXJyYXkuZnJvbSh0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLmtleXMoKSkuZmlsdGVyKChsb2dpY2FsSWQpID0+IHtcbiAgICAgICAgcmV0dXJuICFkcmlmdHMuZmluZCgoZHJpZnQpID0+IGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgfSk7XG4gICAgICBpZiAodW5jaGVja2VkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdW5jaGVja2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1VuY2hlY2tlZCBSZXNvdXJjZXMnKTtcbiAgICAgICAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgdW5jaGVja2VkUmVzb3VyY2VzKSB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy5hbGxTdGFja1Jlc291cmNlcy5nZXQobG9naWNhbElkKTtcbiAgICAgICAgICB1bmNoZWNrZWQgKz0gYCR7Q09OVEVYVH0gJHt0aGlzLmZvcm1hdFZhbHVlKHJlc291cmNlVHlwZSwgY2hhbGsuY3lhbil9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgbG9naWNhbElkKX1cXG5gO1xuICAgICAgICB9XG4gICAgICAgIHVuY2hlY2tlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgbW9kaWZpZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgbW9kaWZpZWRSZXNvdXJjZXMgPSBkcmlmdHMuZmlsdGVyKGQgPT4gZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5NT0RJRklFRCk7XG4gICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1vZGlmaWVkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ01vZGlmaWVkIFJlc291cmNlcycpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRyaWZ0IG9mIG1vZGlmaWVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKSBtb2RpZmllZCA9ICcnO1xuICAgICAgICBtb2RpZmllZCArPSBgJHtVUERBVEV9ICR7dGhpcy5mb3JtYXRWYWx1ZShkcmlmdC5SZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgICBpZiAoZHJpZnQuUHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnN0IHByb3BEaWZmcyA9IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wRGlmZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcm9wRGlmZnNbaV07XG4gICAgICAgICAgICBpZiAoIWRpZmYuUHJvcGVydHlQYXRoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgRGlmZmVyZW5jZShkaWZmLkV4cGVjdGVkVmFsdWUsIGRpZmYuQWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgbW9kaWZpZWQgKz0gdGhpcy5mb3JtYXRUcmVlRGlmZihkaWZmLlByb3BlcnR5UGF0aCwgZGlmZmVyZW5jZSwgaSA9PT0gcHJvcERpZmZzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbW9kaWZpZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGRlbGV0ZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgZGVsZXRlZFJlc291cmNlcyA9IGRyaWZ0cy5maWx0ZXIoZCA9PiBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLkRFTEVURUQpO1xuICAgIGlmIChkZWxldGVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlbGV0ZWQgPSB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignRGVsZXRlZCBSZXNvdXJjZXMnKTtcbiAgICAgIGZvciAoY29uc3QgZHJpZnQgb2YgZGVsZXRlZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBkZWxldGVkICs9IGAke1JFTU9WQUx9ICR7dGhpcy5mb3JtYXRWYWx1ZShkcmlmdC5SZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgfVxuICAgICAgZGVsZXRlZCArPSB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICAgIH1cblxuICAgIHJldHVybiB7IHVuY2hhbmdlZCwgdW5jaGVja2VkLCBtb2RpZmllZCwgZGVsZXRlZCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSwgbG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGggPSBsb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF07XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gbG9naWNhbElkO1xuXG4gICAgbGV0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aDtcbiAgICBpZiAobm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgaWYgaXQncyBcIlJlc291cmNlXCIgb3IgXCJEZWZhdWx0XCIgKGlmIHdlIGhhdmUgbW9yZSB0aGFuIGEgc2luZ2xlIGNvbXBvbmVudClcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKGxhc3QgPT09ICdSZXNvdXJjZScgfHwgbGFzdCA9PT0gJ0RlZmF1bHQnKSB7XG4gICAgICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub3JtYWxpemVkUGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7bm9ybWFsaXplZFBhdGh9ICR7Y2hhbGsuZ3JheShsb2dpY2FsSWQpfWA7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnksIGNvbG9yRm46IChzdHI6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNvbG9yRm4odmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3JGbihKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmludFNlY3Rpb25IZWFkZXIodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NoYWxrLnVuZGVybGluZShjaGFsay5ib2xkKHRpdGxlKSl9XFxuYDtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uRm9vdGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdcXG4nO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUcmVlRGlmZihwcm9wZXJ0eVBhdGg6IHN0cmluZywgZGlmZmVyZW5jZTogRGlmZmVyZW5jZTxhbnk+LCBpc0xhc3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSBmb3JtYXQoJyAlc+KUgCAlcyAlc1xcbicsIGlzTGFzdCA/ICfilJQnIDogJ+KUnCcsXG4gICAgICBkaWZmZXJlbmNlLmlzQWRkaXRpb24gPyBBRERJVElPTiA6XG4gICAgICAgIGRpZmZlcmVuY2UuaXNSZW1vdmFsID8gUkVNT1ZBTCA6XG4gICAgICAgICAgVVBEQVRFLFxuICAgICAgcHJvcGVydHlQYXRoLFxuICAgICk7XG4gICAgaWYgKGRpZmZlcmVuY2UuaXNVcGRhdGUpIHtcbiAgICAgIHJlc3VsdCArPSBmb3JtYXQoJyAgICAg4pSc4pSAICVzICVzXFxuJywgUkVNT1ZBTCwgdGhpcy5mb3JtYXRWYWx1ZShkaWZmZXJlbmNlLm9sZFZhbHVlLCBjaGFsay5yZWQpKTtcbiAgICAgIHJlc3VsdCArPSBmb3JtYXQoJyAgICAg4pSU4pSAICVzICVzXFxuJywgQURESVRJT04sIHRoaXMuZm9ybWF0VmFsdWUoZGlmZmVyZW5jZS5uZXdWYWx1ZSwgY2hhbGsuZ3JlZW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jb25zdCBBRERJVElPTiA9IGNoYWxrLmdyZWVuKCdbK10nKTtcbmNvbnN0IENPTlRFWFQgPSBjaGFsay5ncmV5KCdbIF0nKTtcbmNvbnN0IFVQREFURSA9IGNoYWxrLnllbGxvdygnW35dJyk7XG5jb25zdCBSRU1PVkFMID0gY2hhbGsucmVkKCdbLV0nKTtcbiJdfQ==
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQywyREFBMkQ7QUFDM0Qsc0VBQTBEO0FBRzFELDBFQUEwRTtBQUMxRSwrQkFBK0I7QUE4RC9COztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09B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QUFDLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IERpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB0eXBlIHsgU3RhY2tSZXNvdXJjZURyaWZ0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlZERyaWZ0IH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9kcmlmdCc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBEcmlmdCBGb3JtYXR0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmlmdEZvcm1hdHRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjayBhcnRpZmFjdFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdHMgb2Ygc3RhY2sgZHJpZnQgZGV0ZWN0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZURyaWZ0czogU3RhY2tSZXNvdXJjZURyaWZ0W107XG59XG5cbmludGVyZmFjZSBEcmlmdEZvcm1hdHRlck91dHB1dCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIHdpdGggZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhbiBlcnJvciBvY2N1cnJlZFxuICAgKiBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzV2l0aERyaWZ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IHJlc291cmNlcyB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdC4gSWYgdW5kZWZpbmVkLCB0aGVuIGFuXG4gICAqIGVycm9yIG9jY3VycmVkIGFuZCByZXNvdXJjZXMgd2VyZSBub3QgcHJvcGVybHkgY2hlY2tlZCBmb3IgZHJpZnQuXG4gICAqL1xuICByZWFkb25seSBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBub3QgY2hhbmdlZFxuICAgKi9cbiAgcmVhZG9ubHkgdW5jaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdCBvciBoYXZlIGFuIFVOS05PV04gZHJpZnQgc3RhdHVzXG4gICAqL1xuICByZWFkb25seSB1bmNoZWNrZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB3aXRoIGRyaWZ0XG4gICAqL1xuICByZWFkb25seSBtb2RpZmllZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQgKGRyaWZ0KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhlYWRlciwgY29udGFpbmluZyB0aGUgc3RhY2sgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tIZWFkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbmFsIHJlc3VsdHMgKHN1bW1hcnkpIG9mIHRoZSBkcmlmdCByZXN1bHRzXG4gICAqL1xuICByZWFkb25seSBzdW1tYXJ5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIGZvcm1hdHRpbmcgZHJpZnQgZGV0ZWN0aW9uIG91dHB1dFxuICovXG5leHBvcnQgY2xhc3MgRHJpZnRGb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlRHJpZnRSZXN1bHRzOiBTdGFja1Jlc291cmNlRHJpZnRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxTdGFja1Jlc291cmNlczogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRHJpZnRGb3JtYXR0ZXJQcm9wcykge1xuICAgIHRoaXMuc3RhY2sgPSBwcm9wcy5zdGFjaztcbiAgICB0aGlzLnN0YWNrTmFtZSA9IHByb3BzLnN0YWNrLmRpc3BsYXlOYW1lID8/IHByb3BzLnN0YWNrLnN0YWNrTmFtZTtcbiAgICB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzID0gcHJvcHMucmVzb3VyY2VEcmlmdHM7XG5cbiAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyB8fCB7fSkuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzW2lkXTtcbiAgICAgIC8vIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgICBpZiAocmVzb3VyY2UuVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zZXQoaWQsIHJlc291cmNlLlR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc3RhY2sgZHJpZnQgZGV0ZWN0aW9uIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBmb3JtYXRTdGFja0RyaWZ0KCk6IERyaWZ0Rm9ybWF0dGVyT3V0cHV0IHtcbiAgICBjb25zdCBmb3JtYXR0ZXJPdXRwdXQgPSB0aGlzLmZvcm1hdFN0YWNrRHJpZnRDaGFuZ2VzKHRoaXMuYnVpbGRMb2dpY2FsVG9QYXRoTWFwKCkpO1xuXG4gICAgLy8gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhY3R1YWwgZHJpZnRzIChhbmQgaWdub3JlIHRoZSBtZXRhZGF0YSByZXNvdXJjZSlcbiAgICBjb25zdCBhY3R1YWxEcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmZpbHRlcihkID0+XG4gICAgICAoZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHwgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdERUxFVEVEJylcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG5cbiAgICAvLyBtdXN0IG91dHB1dCB0aGUgc3RhY2sgbmFtZSBpZiB0aGVyZSBhcmUgZHJpZnRzXG4gICAgY29uc3Qgc3RhY2tIZWFkZXIgPSBmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSl9XFxuYCk7XG5cbiAgICBpZiAoYWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay5ncmVlbignTm8gZHJpZnQgZGV0ZWN0ZWRcXG4nKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogMCxcbiAgICAgICAgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNpemUgLSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCxcbiAgICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgICAgc3VtbWFyeTogZmluYWxSZXN1bHQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsueWVsbG93KGBcXG4ke2FjdHVhbERyaWZ0cy5sZW5ndGh9IHJlc291cmNlJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9ICR7YWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMSA/ICdoYXMnIDogJ2hhdmUnfSBkcmlmdGVkIGZyb20gdGhlaXIgZXhwZWN0ZWQgY29uZmlndXJhdGlvblxcbmApO1xuICAgIHJldHVybiB7XG4gICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IGFjdHVhbERyaWZ0cy5sZW5ndGgsXG4gICAgICBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMuc2l6ZSAtIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMubGVuZ3RoLFxuICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICB1bmNoYW5nZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoYW5nZWQsXG4gICAgICB1bmNoZWNrZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoZWNrZWQsXG4gICAgICBtb2RpZmllZDogZm9ybWF0dGVyT3V0cHV0Lm1vZGlmaWVkLFxuICAgICAgZGVsZXRlZDogZm9ybWF0dGVyT3V0cHV0LmRlbGV0ZWQsXG4gICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExvZ2ljYWxUb1BhdGhNYXAoKSB7XG4gICAgY29uc3QgbWFwOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IG1kIG9mIHRoaXMuc3RhY2suZmluZE1ldGFkYXRhQnlUeXBlKGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRCkpIHtcbiAgICAgIG1hcFttZC5kYXRhIGFzIHN0cmluZ10gPSBtZC5wYXRoO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgc3RhY2sgZHJpZnQgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxUb1BhdGhNYXAgLSBBIG1hcCBmcm9tIGxvZ2ljYWwgSUQgdG8gY29uc3RydWN0IHBhdGhcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0U3RhY2tEcmlmdENoYW5nZXMoXG4gICAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogRm9ybWF0dGVkRHJpZnQge1xuICAgIGlmICh0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGxldCB1bmNoYW5nZWQ7XG4gICAgbGV0IHVuY2hlY2tlZDtcbiAgICBsZXQgbW9kaWZpZWQ7XG4gICAgbGV0IGRlbGV0ZWQ7XG5cbiAgICBjb25zdCBkcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzO1xuXG4gICAgLy8gUHJvY2VzcyB1bmNoYW5nZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgdW5jaGFuZ2VkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+IGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMuSU5fU1lOQyk7XG4gICAgaWYgKHVuY2hhbmdlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICB1bmNoYW5nZWQgPSB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignUmVzb3VyY2VzIEluIFN5bmMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiB1bmNoYW5nZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKCFkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCB8fCAhZHJpZnQuUmVzb3VyY2VUeXBlKSBjb250aW51ZTtcbiAgICAgICAgdW5jaGFuZ2VkICs9IGAke0NPTlRFWFR9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGFuZ2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhbGwgdW5jaGVja2VkIGFuZCB1bmtub3duIHJlc291cmNlc1xuICAgIGNvbnN0IHVuY2hlY2tlZFJlc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5hbGxTdGFja1Jlc291cmNlcy5rZXlzKCkpLmZpbHRlcigobG9naWNhbElkKSA9PiB7XG4gICAgICBjb25zdCBkcmlmdCA9IGRyaWZ0cy5maW5kKChkKSA9PiBkLkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgcmV0dXJuICFkcmlmdCB8fCBkcmlmdC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5VTktOT1dOO1xuICAgIH0pO1xuICAgIGlmICh1bmNoZWNrZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgdW5jaGVja2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1VuY2hlY2tlZCBSZXNvdXJjZXMnKTtcbiAgICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIHVuY2hlY2tlZFJlc291cmNlcykge1xuICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLmdldChsb2dpY2FsSWQpO1xuICAgICAgICB1bmNoZWNrZWQgKz0gYCR7Q09OVEVYVH0gJHtjaGFsay5jeWFuKHJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgbG9naWNhbElkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGVja2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBtb2RpZmllZCByZXNvdXJjZXMgKGV4Y2x1ZGUgQVdTOjpDREs6Ok1ldGFkYXRhKVxuICAgIGNvbnN0IG1vZGlmaWVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLk1PRElGSUVEXG4gICAgICAmJiBkLlJlc291cmNlVHlwZSAhPT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpO1xuICAgIGlmIChtb2RpZmllZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtb2RpZmllZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdNb2RpZmllZCBSZXNvdXJjZXMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBtb2RpZmllZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBtb2RpZmllZCArPSBgJHtVUERBVEV9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgICBpZiAoZHJpZnQuUHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnN0IHByb3BEaWZmcyA9IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wRGlmZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcm9wRGlmZnNbaV07XG4gICAgICAgICAgICBpZiAoIWRpZmYuUHJvcGVydHlQYXRoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgRGlmZmVyZW5jZShkaWZmLkV4cGVjdGVkVmFsdWUsIGRpZmYuQWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgbW9kaWZpZWQgKz0gdGhpcy5mb3JtYXRUcmVlRGlmZihkaWZmLlByb3BlcnR5UGF0aCwgZGlmZmVyZW5jZSwgaSA9PT0gcHJvcERpZmZzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbW9kaWZpZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGRlbGV0ZWQgcmVzb3VyY2VzIChleGNsdWRlIEFXUzo6Q0RLOjpNZXRhZGF0YSlcbiAgICBjb25zdCBkZWxldGVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLkRFTEVURURcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG4gICAgaWYgKGRlbGV0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgZGVsZXRlZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdEZWxldGVkIFJlc291cmNlcycpO1xuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBkZWxldGVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIGRlbGV0ZWQgKz0gYCR7UkVNT1ZBTH0gJHtjaGFsay5jeWFuKGRyaWZ0LlJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgZHJpZnQuTG9naWNhbFJlc291cmNlSWQpfVxcbmA7XG4gICAgICB9XG4gICAgICBkZWxldGVkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdW5jaGFuZ2VkLCB1bmNoZWNrZWQsIG1vZGlmaWVkLCBkZWxldGVkIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9LCBsb2dpY2FsSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aCA9IGxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXTtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBsb2dpY2FsSWQ7XG5cbiAgICBsZXQgbm9ybWFsaXplZFBhdGggPSBwYXRoO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcblxuICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBpZiBpdCdzIFwiUmVzb3VyY2VcIiBvciBcIkRlZmF1bHRcIiAoaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgY29tcG9uZW50KVxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobGFzdCA9PT0gJ1Jlc291cmNlJyB8fCBsYXN0ID09PSAnRGVmYXVsdCcpIHtcbiAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gcGFydHMuam9pbignLycpO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtub3JtYWxpemVkUGF0aH0gJHtjaGFsay5ncmF5KGxvZ2ljYWxJZCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjaGFsay51bmRlcmxpbmUoY2hhbGsuYm9sZCh0aXRsZSkpfVxcbmA7XG4gIH1cblxuICBwcml2YXRlIHByaW50U2VjdGlvbkZvb3RlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFxuJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VHJlZURpZmYocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRpZmZlcmVuY2U6IERpZmZlcmVuY2U8c3RyaW5nPiwgaXNMYXN0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gZm9ybWF0KCcgJXPilIAgJXMgJXNcXG4nLCBpc0xhc3QgPyAn4pSUJyA6ICfilJwnLFxuICAgICAgZGlmZmVyZW5jZS5pc0FkZGl0aW9uID8gQURESVRJT04gOlxuICAgICAgICBkaWZmZXJlbmNlLmlzUmVtb3ZhbCA/IFJFTU9WQUwgOlxuICAgICAgICAgIFVQREFURSxcbiAgICAgIHByb3BlcnR5UGF0aCxcbiAgICApO1xuICAgIGlmIChkaWZmZXJlbmNlLmlzVXBkYXRlKSB7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUnOKUgCAlcyAlc1xcbicsIFJFTU9WQUwsIGNoYWxrLnJlZChkaWZmZXJlbmNlLm9sZFZhbHVlKSk7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUlOKUgCAlcyAlc1xcbicsIEFERElUSU9OLCBjaGFsay5ncmVlbihkaWZmZXJlbmNlLm5ld1ZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY29uc3QgQURESVRJT04gPSBjaGFsay5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUID0gY2hhbGsuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgPSBjaGFsay55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCA9IGNoYWxrLnJlZCgnWy1dJyk7XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.detectStackDrift = detectStackDrift;
4
- const util_1 = require("util");
4
+ const node_util_1 = require("node:util");
5
5
  const toolkit_error_1 = require("../../toolkit/toolkit-error");
6
+ const string_manipulation_1 = require("../../util/string-manipulation");
6
7
  /**
7
8
  * Detect drift for a CloudFormation stack and wait for the detection to complete
8
9
  *
@@ -16,19 +17,25 @@ async function detectStackDrift(cfn, ioHelper, stackName) {
16
17
  const driftDetection = await cfn.detectStackDrift({
17
18
  StackName: stackName,
18
19
  });
19
- await ioHelper.defaults.trace((0, util_1.format)('Detecting drift with ID %s for stack %s...', driftDetection.StackDriftDetectionId, stackName));
20
+ await ioHelper.defaults.trace((0, node_util_1.format)('Detecting drift with ID %s for stack %s...', driftDetection.StackDriftDetectionId, stackName));
20
21
  // Wait for drift detection to complete
21
22
  const driftStatus = await waitForDriftDetection(cfn, ioHelper, driftDetection.StackDriftDetectionId);
22
- if (!driftStatus) {
23
- throw new toolkit_error_1.ToolkitError('Drift detection took too long to complete. Aborting');
23
+ // Handle UNKNOWN stack drift status
24
+ if (driftStatus?.StackDriftStatus === 'UNKNOWN') {
25
+ await ioHelper.defaults.trace('Stack drift status is UNKNOWN. This may occur when CloudFormation is unable to detect drift for at least one resource and all other resources are IN_SYNC.\n' +
26
+ `Reason: ${(0, string_manipulation_1.formatReason)(driftStatus.DetectionStatusReason)}`);
24
27
  }
25
- if (driftStatus?.DetectionStatus === 'DETECTION_FAILED') {
26
- throw new toolkit_error_1.ToolkitError(`Failed to detect drift: ${driftStatus.DetectionStatusReason || 'No reason provided'}`);
27
- }
28
- // Get the drift results
29
- return cfn.describeStackResourceDrifts({
28
+ // Get the drift results, including resources with UNKNOWN status
29
+ const driftResults = await cfn.describeStackResourceDrifts({
30
30
  StackName: stackName,
31
31
  });
32
+ // Log warning for any resources with UNKNOWN status
33
+ const unknownResources = driftResults.StackResourceDrifts?.filter(drift => drift.StackResourceDriftStatus === 'UNKNOWN');
34
+ if (unknownResources && unknownResources.length > 0) {
35
+ await ioHelper.defaults.trace('Some resources have UNKNOWN drift status. This may be due to insufficient permissions or throttling:\n' +
36
+ unknownResources.map(r => ` - ${r.LogicalResourceId}: ${(0, string_manipulation_1.formatReason)(r.DriftStatusReason)}`).join('\n'));
37
+ }
38
+ return driftResults;
32
39
  }
33
40
  /**
34
41
  * Wait for a drift detection operation to complete
@@ -47,7 +54,7 @@ async function waitForDriftDetection(cfn, ioHelper, driftDetectionId) {
47
54
  return response;
48
55
  }
49
56
  if (response.DetectionStatus === 'DETECTION_FAILED') {
50
- throw new toolkit_error_1.ToolkitError(`Drift detection failed: ${response.DetectionStatusReason}`);
57
+ throw new toolkit_error_1.ToolkitError(`Drift detection failed: ${(0, string_manipulation_1.formatReason)(response.DetectionStatusReason)}`);
51
58
  }
52
59
  if (Date.now() > deadline) {
53
60
  throw new toolkit_error_1.ToolkitError(`Drift detection failed: Timed out after ${maxWaitForDrift / 1000} seconds.`);
@@ -60,4 +67,4 @@ async function waitForDriftDetection(cfn, ioHelper, driftDetectionId) {
60
67
  await new Promise(resolve => setTimeout(resolve, timeBetweenApiCalls));
61
68
  }
62
69
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkcmlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLDRDQStCQztBQTdDRCwrQkFBOEI7QUFFOUIsK0RBQTJEO0FBSTNEOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEdBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLFNBQWlCO0lBRWpCLHdCQUF3QjtJQUN4QixNQUFNLGNBQWMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQUM7SUFFSCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUMzQixJQUFBLGFBQU0sRUFBQyw0Q0FBNEMsRUFBRSxjQUFjLENBQUMscUJBQXFCLEVBQUUsU0FBUyxDQUFDLENBQ3RHLENBQUM7SUFFRix1Q0FBdUM7SUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxxQkFBc0IsQ0FBQyxDQUFDO0lBRXRHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksNEJBQVksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFJLFdBQVcsRUFBRSxlQUFlLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUksNEJBQVksQ0FDcEIsMkJBQTJCLFdBQVcsQ0FBQyxxQkFBcUIsSUFBSSxvQkFBb0IsRUFBRSxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QjtJQUN4QixPQUFPLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztRQUNyQyxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUscUJBQXFCLENBQ2xDLEdBQTBCLEVBQzFCLFFBQWtCLEVBQ2xCLGdCQUF3QjtJQUV4QixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxrQ0FBa0M7SUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsQ0FBQyw0REFBNEQ7SUFDL0YsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7SUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGVBQWUsQ0FBQztJQUM5QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLENBQUM7SUFFOUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGlDQUFpQyxDQUFDO1lBQzNELHFCQUFxQixFQUFFLGdCQUFnQjtTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztZQUN0RCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLGtCQUFrQixFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLDRCQUFZLENBQUMsMkJBQTJCLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSw0QkFBWSxDQUFDLDJDQUEyQyxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDekIsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLENBQUM7UUFDNUMsQ0FBQztRQUVELGtFQUFrRTtRQUNsRSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB0eXBlIHsgRGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCwgRGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzQ29tbWFuZE91dHB1dCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuLyoqXG4gKiBEZXRlY3QgZHJpZnQgZm9yIGEgQ2xvdWRGb3JtYXRpb24gc3RhY2sgYW5kIHdhaXQgZm9yIHRoZSBkZXRlY3Rpb24gdG8gY29tcGxldGVcbiAqXG4gKiBAcGFyYW0gY2ZuIC0gYSBDbG91ZEZvcm1hdGlvbiBjbGllbnRcbiAqIEBwYXJhbSBpb0hlbHBlciAtIGhlbHBlciBmb3IgSU8gb3BlcmF0aW9uc1xuICogQHBhcmFtIHN0YWNrTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byBjaGVjayBmb3IgZHJpZnRcbiAqIEByZXR1cm5zIHRoZSBDbG91ZEZvcm1hdGlvbiBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpZnQgZGV0ZWN0aW9uIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVjdFN0YWNrRHJpZnQoXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxEZXNjcmliZVN0YWNrUmVzb3VyY2VEcmlmdHNDb21tYW5kT3V0cHV0PiB7XG4gIC8vIFN0YXJ0IGRyaWZ0IGRldGVjdGlvblxuICBjb25zdCBkcmlmdERldGVjdGlvbiA9IGF3YWl0IGNmbi5kZXRlY3RTdGFja0RyaWZ0KHtcbiAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgfSk7XG5cbiAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoXG4gICAgZm9ybWF0KCdEZXRlY3RpbmcgZHJpZnQgd2l0aCBJRCAlcyBmb3Igc3RhY2sgJXMuLi4nLCBkcmlmdERldGVjdGlvbi5TdGFja0RyaWZ0RGV0ZWN0aW9uSWQsIHN0YWNrTmFtZSksXG4gICk7XG5cbiAgLy8gV2FpdCBmb3IgZHJpZnQgZGV0ZWN0aW9uIHRvIGNvbXBsZXRlXG4gIGNvbnN0IGRyaWZ0U3RhdHVzID0gYXdhaXQgd2FpdEZvckRyaWZ0RGV0ZWN0aW9uKGNmbiwgaW9IZWxwZXIsIGRyaWZ0RGV0ZWN0aW9uLlN0YWNrRHJpZnREZXRlY3Rpb25JZCEpO1xuXG4gIGlmICghZHJpZnRTdGF0dXMpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdEcmlmdCBkZXRlY3Rpb24gdG9vayB0b28gbG9uZyB0byBjb21wbGV0ZS4gQWJvcnRpbmcnKTtcbiAgfVxuXG4gIGlmIChkcmlmdFN0YXR1cz8uRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0ZBSUxFRCcpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBkZXRlY3QgZHJpZnQ6ICR7ZHJpZnRTdGF0dXMuRGV0ZWN0aW9uU3RhdHVzUmVhc29uIHx8ICdObyByZWFzb24gcHJvdmlkZWQnfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZHJpZnQgcmVzdWx0c1xuICByZXR1cm4gY2ZuLmRlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0cyh7XG4gICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gIH0pO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGEgZHJpZnQgZGV0ZWN0aW9uIG9wZXJhdGlvbiB0byBjb21wbGV0ZVxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yRHJpZnREZXRlY3Rpb24oXG4gIGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIGRyaWZ0RGV0ZWN0aW9uSWQ6IHN0cmluZyxcbik6IFByb21pc2U8RGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBtYXhXYWl0Rm9yRHJpZnQgPSAzMDBfMDAwOyAvLyBpZiB0YWtlcyBsb25nZXIgdGhhbiA1bWluLCBmYWlsXG4gIGNvbnN0IHRpbWVCZXR3ZWVuT3V0cHV0cyA9IDEwXzAwMDsgLy8gaG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgdGVsbGluZyB1c2VyIHdlJ3JlIHN0aWxsIGNoZWNraW5nXG4gIGNvbnN0IHRpbWVCZXR3ZWVuQXBpQ2FsbHMgPSAyXzAwMDsgLy8gd2FpdCAycyBwZXIgQVBJIGNhbGxcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgbWF4V2FpdEZvckRyaWZ0O1xuICBsZXQgY2hlY2tJbiA9IERhdGUubm93KCkgKyB0aW1lQmV0d2Vlbk91dHB1dHM7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNmbi5kZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXMoe1xuICAgICAgU3RhY2tEcmlmdERldGVjdGlvbklkOiBkcmlmdERldGVjdGlvbklkLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLkRldGVjdGlvblN0YXR1cyA9PT0gJ0RFVEVDVElPTl9DT01QTEVURScpIHtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0ZBSUxFRCcpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYERyaWZ0IGRldGVjdGlvbiBmYWlsZWQ6ICR7cmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzUmVhc29ufWApO1xuICAgIH1cblxuICAgIGlmIChEYXRlLm5vdygpID4gZGVhZGxpbmUpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYERyaWZ0IGRldGVjdGlvbiBmYWlsZWQ6IFRpbWVkIG91dCBhZnRlciAke21heFdhaXRGb3JEcmlmdCAvIDEwMDB9IHNlY29uZHMuYCk7XG4gICAgfVxuXG4gICAgaWYgKERhdGUubm93KCkgPiBjaGVja0luKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZSgnV2FpdGluZyBmb3IgZHJpZnQgZGV0ZWN0aW9uIHRvIGNvbXBsZXRlLi4uJyk7XG4gICAgICBjaGVja0luID0gRGF0ZS5ub3coKSArIHRpbWVCZXR3ZWVuT3V0cHV0cztcbiAgICB9XG5cbiAgICAvLyBXYWl0IGEgc2hvcnQgd2hpbGUgYmV0d2VlbiBBUEkgY2FsbHMgc28gd2UgZG9uJ3QgY3JlYXRlIGEgZmxvb2RcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZUJldHdlZW5BcGlDYWxscykpO1xuICB9XG59XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkcmlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWVBLDRDQTZDQztBQTVERCx5Q0FBbUM7QUFFbkMsK0RBQTJEO0FBQzNELHdFQUE4RDtBQUk5RDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxHQUEwQixFQUMxQixRQUFrQixFQUNsQixTQUFpQjtJQUVqQix3QkFBd0I7SUFDeEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsU0FBUyxFQUFFLFNBQVM7S0FDckIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FDM0IsSUFBQSxrQkFBTSxFQUFDLDRDQUE0QyxFQUFFLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FDdEcsQ0FBQztJQUVGLHVDQUF1QztJQUN2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLHFCQUFzQixDQUFDLENBQUM7SUFFdEcsb0NBQW9DO0lBQ3BDLElBQUksV0FBVyxFQUFFLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQzNCLDhKQUE4SjtZQUM5SixXQUFXLElBQUEsa0NBQVksRUFBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUM3RCxDQUFDO0lBQ0osQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxNQUFNLFlBQVksR0FBRyxNQUFNLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztRQUN6RCxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQUM7SUFFSCxvREFBb0Q7SUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUMvRCxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLENBQ3RELENBQUM7SUFFRixJQUFJLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUMzQix3R0FBd0c7WUFDeEcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3ZCLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixLQUFLLElBQUEsa0NBQVksRUFBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUNuRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxxQkFBcUIsQ0FDbEMsR0FBMEIsRUFDMUIsUUFBa0IsRUFDbEIsZ0JBQXdCO0lBRXhCLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxDQUFDLGtDQUFrQztJQUNuRSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDLDREQUE0RDtJQUMvRixNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxDQUFDLHVCQUF1QjtJQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsZUFBZSxDQUFDO0lBQzlDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztJQUU5QyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsaUNBQWlDLENBQUM7WUFDM0QscUJBQXFCLEVBQUUsZ0JBQWdCO1NBQ3hDLENBQUMsQ0FBQztRQUVILElBQUksUUFBUSxDQUFDLGVBQWUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3RELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksNEJBQVksQ0FBQywyQkFBMkIsSUFBQSxrQ0FBWSxFQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLDRCQUFZLENBQUMsMkNBQTJDLGVBQWUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDNUUsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztRQUM1QyxDQUFDO1FBRUQsa0VBQWtFO1FBQ2xFLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgdHlwZSB7IERlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1c0NvbW1hbmRPdXRwdXQsIERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGZvcm1hdFJlYXNvbiB9IGZyb20gJy4uLy4uL3V0aWwvc3RyaW5nLW1hbmlwdWxhdGlvbic7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEZvcm1hdGlvbkNsaWVudCB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuXG4vKipcbiAqIERldGVjdCBkcmlmdCBmb3IgYSBDbG91ZEZvcm1hdGlvbiBzdGFjayBhbmQgd2FpdCBmb3IgdGhlIGRldGVjdGlvbiB0byBjb21wbGV0ZVxuICpcbiAqIEBwYXJhbSBjZm4gLSBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIGlvSGVscGVyIC0gaGVscGVyIGZvciBJTyBvcGVyYXRpb25zXG4gKiBAcGFyYW0gc3RhY2tOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIGNoZWNrIGZvciBkcmlmdFxuICogQHJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIGRlc2NyaXB0aW9uIG9mIHRoZSBkcmlmdCBkZXRlY3Rpb24gcmVzdWx0c1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV0ZWN0U3RhY2tEcmlmdChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPERlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0c0NvbW1hbmRPdXRwdXQ+IHtcbiAgLy8gU3RhcnQgZHJpZnQgZGV0ZWN0aW9uXG4gIGNvbnN0IGRyaWZ0RGV0ZWN0aW9uID0gYXdhaXQgY2ZuLmRldGVjdFN0YWNrRHJpZnQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICB9KTtcblxuICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZShcbiAgICBmb3JtYXQoJ0RldGVjdGluZyBkcmlmdCB3aXRoIElEICVzIGZvciBzdGFjayAlcy4uLicsIGRyaWZ0RGV0ZWN0aW9uLlN0YWNrRHJpZnREZXRlY3Rpb25JZCwgc3RhY2tOYW1lKSxcbiAgKTtcblxuICAvLyBXYWl0IGZvciBkcmlmdCBkZXRlY3Rpb24gdG8gY29tcGxldGVcbiAgY29uc3QgZHJpZnRTdGF0dXMgPSBhd2FpdCB3YWl0Rm9yRHJpZnREZXRlY3Rpb24oY2ZuLCBpb0hlbHBlciwgZHJpZnREZXRlY3Rpb24uU3RhY2tEcmlmdERldGVjdGlvbklkISk7XG5cbiAgLy8gSGFuZGxlIFVOS05PV04gc3RhY2sgZHJpZnQgc3RhdHVzXG4gIGlmIChkcmlmdFN0YXR1cz8uU3RhY2tEcmlmdFN0YXR1cyA9PT0gJ1VOS05PV04nKSB7XG4gICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoXG4gICAgICAnU3RhY2sgZHJpZnQgc3RhdHVzIGlzIFVOS05PV04uIFRoaXMgbWF5IG9jY3VyIHdoZW4gQ2xvdWRGb3JtYXRpb24gaXMgdW5hYmxlIHRvIGRldGVjdCBkcmlmdCBmb3IgYXQgbGVhc3Qgb25lIHJlc291cmNlIGFuZCBhbGwgb3RoZXIgcmVzb3VyY2VzIGFyZSBJTl9TWU5DLlxcbicgK1xuICAgICAgYFJlYXNvbjogJHtmb3JtYXRSZWFzb24oZHJpZnRTdGF0dXMuRGV0ZWN0aW9uU3RhdHVzUmVhc29uKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBHZXQgdGhlIGRyaWZ0IHJlc3VsdHMsIGluY2x1ZGluZyByZXNvdXJjZXMgd2l0aCBVTktOT1dOIHN0YXR1c1xuICBjb25zdCBkcmlmdFJlc3VsdHMgPSBhd2FpdCBjZm4uZGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzKHtcbiAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgfSk7XG5cbiAgLy8gTG9nIHdhcm5pbmcgZm9yIGFueSByZXNvdXJjZXMgd2l0aCBVTktOT1dOIHN0YXR1c1xuICBjb25zdCB1bmtub3duUmVzb3VyY2VzID0gZHJpZnRSZXN1bHRzLlN0YWNrUmVzb3VyY2VEcmlmdHM/LmZpbHRlcihcbiAgICBkcmlmdCA9PiBkcmlmdC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdVTktOT1dOJyxcbiAgKTtcblxuICBpZiAodW5rbm93blJlc291cmNlcyAmJiB1bmtub3duUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZShcbiAgICAgICdTb21lIHJlc291cmNlcyBoYXZlIFVOS05PV04gZHJpZnQgc3RhdHVzLiBUaGlzIG1heSBiZSBkdWUgdG8gaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIG9yIHRocm90dGxpbmc6XFxuJyArXG4gICAgICB1bmtub3duUmVzb3VyY2VzLm1hcChyID0+XG4gICAgICAgIGAgIC0gJHtyLkxvZ2ljYWxSZXNvdXJjZUlkfTogJHtmb3JtYXRSZWFzb24oci5EcmlmdFN0YXR1c1JlYXNvbil9YCxcbiAgICAgICkuam9pbignXFxuJyksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBkcmlmdFJlc3VsdHM7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBkcmlmdCBkZXRlY3Rpb24gb3BlcmF0aW9uIHRvIGNvbXBsZXRlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JEcmlmdERldGVjdGlvbihcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgZHJpZnREZXRlY3Rpb25JZDogc3RyaW5nLFxuKTogUHJvbWlzZTxEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXNDb21tYW5kT3V0cHV0IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IG1heFdhaXRGb3JEcmlmdCA9IDMwMF8wMDA7IC8vIGlmIHRha2VzIGxvbmdlciB0aGFuIDVtaW4sIGZhaWxcbiAgY29uc3QgdGltZUJldHdlZW5PdXRwdXRzID0gMTBfMDAwOyAvLyBob3cgbG9uZyB0byB3YWl0IGJlZm9yZSB0ZWxsaW5nIHVzZXIgd2UncmUgc3RpbGwgY2hlY2tpbmdcbiAgY29uc3QgdGltZUJldHdlZW5BcGlDYWxscyA9IDJfMDAwOyAvLyB3YWl0IDJzIHBlciBBUEkgY2FsbFxuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBtYXhXYWl0Rm9yRHJpZnQ7XG4gIGxldCBjaGVja0luID0gRGF0ZS5ub3coKSArIHRpbWVCZXR3ZWVuT3V0cHV0cztcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2ZuLmRlc2NyaWJlU3RhY2tEcmlmdERldGVjdGlvblN0YXR1cyh7XG4gICAgICBTdGFja0RyaWZ0RGV0ZWN0aW9uSWQ6IGRyaWZ0RGV0ZWN0aW9uSWQsXG4gICAgfSk7XG5cbiAgICBpZiAocmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0NPTVBMRVRFJykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5EZXRlY3Rpb25TdGF0dXMgPT09ICdERVRFQ1RJT05fRkFJTEVEJykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgRHJpZnQgZGV0ZWN0aW9uIGZhaWxlZDogJHtmb3JtYXRSZWFzb24ocmVzcG9uc2UuRGV0ZWN0aW9uU3RhdHVzUmVhc29uKX1gKTtcbiAgICB9XG5cbiAgICBpZiAoRGF0ZS5ub3coKSA+IGRlYWRsaW5lKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBEcmlmdCBkZXRlY3Rpb24gZmFpbGVkOiBUaW1lZCBvdXQgYWZ0ZXIgJHttYXhXYWl0Rm9yRHJpZnQgLyAxMDAwfSBzZWNvbmRzLmApO1xuICAgIH1cblxuICAgIGlmIChEYXRlLm5vdygpID4gY2hlY2tJbikge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoJ1dhaXRpbmcgZm9yIGRyaWZ0IGRldGVjdGlvbiB0byBjb21wbGV0ZS4uLicpO1xuICAgICAgY2hlY2tJbiA9IERhdGUubm93KCkgKyB0aW1lQmV0d2Vlbk91dHB1dHM7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBhIHNob3J0IHdoaWxlIGJldHdlZW4gQVBJIGNhbGxzIHNvIHdlIGRvbid0IGNyZWF0ZSBhIGZsb29kXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVCZXR3ZWVuQXBpQ2FsbHMpKTtcbiAgfVxufVxuIl19
package/lib/index_bg.wasm CHANGED
Binary file
@@ -16,4 +16,9 @@ export declare function formatTime(num: number): number;
16
16
  * This function lower cases the first character of the string provided.
17
17
  */
18
18
  export declare function lowerCaseFirstCharacter(str: string): string;
19
+ /**
20
+ * Returns the provided reason or a default fallback message if the reason is undefined, null, or empty.
21
+ * This is commonly used for AWS API responses that may not always provide a reason field.
22
+ */
23
+ export declare function formatReason(reason: string | undefined | null, fallback?: string): string;
19
24
  //# sourceMappingURL=string-manipulation.d.ts.map
@@ -4,6 +4,7 @@ exports.padLeft = padLeft;
4
4
  exports.padRight = padRight;
5
5
  exports.formatTime = formatTime;
6
6
  exports.lowerCaseFirstCharacter = lowerCaseFirstCharacter;
7
+ exports.formatReason = formatReason;
7
8
  /**
8
9
  * Pad 's' on the left with 'char' until it is n characters wide
9
10
  */
@@ -43,4 +44,11 @@ function millisecondsToSeconds(num) {
43
44
  function lowerCaseFirstCharacter(str) {
44
45
  return str.length > 0 ? `${str[0].toLowerCase()}${str.slice(1)}` : str;
45
46
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLW1hbmlwdWxhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0cmluZy1tYW5pcHVsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwwQkFFQztBQUtELDRCQUVDO0FBT0QsZ0NBRUM7QUFvQkQsMERBRUM7QUEzQ0Q7O0dBRUc7QUFDSCxTQUFnQixPQUFPLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxPQUFlLEdBQUc7SUFDOUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBZSxHQUFHO0lBQy9ELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEdBQVc7SUFDcEMsT0FBTyxlQUFlLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxlQUFlLENBQUMsR0FBVztJQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLEdBQVc7SUFDeEMsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEdBQVc7SUFDakQsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFkICdzJyBvbiB0aGUgbGVmdCB3aXRoICdjaGFyJyB1bnRpbCBpdCBpcyBuIGNoYXJhY3RlcnMgd2lkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkTGVmdChuOiBudW1iZXIsIHg6IHN0cmluZywgY2hhcjogc3RyaW5nID0gJyAnKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoYXIucmVwZWF0KE1hdGgubWF4KDAsIG4gLSB4Lmxlbmd0aCkpICsgeDtcbn1cblxuLyoqXG4gKiBQYWQgJ3MnIG9uIHRoZSByaWdodCB3aXRoICdjaGFyJyB1bnRpbCBpdCBpcyBuIGNoYXJhY3RlcnMgd2lkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkUmlnaHQobjogbnVtYmVyLCB4OiBzdHJpbmcsIGNoYXI6IHN0cmluZyA9ICcgJyk6IHN0cmluZyB7XG4gIHJldHVybiB4ICsgY2hhci5yZXBlYXQoTWF0aC5tYXgoMCwgbiAtIHgubGVuZ3RoKSk7XG59XG5cbi8qKlxuICogRm9ybWF0cyB0aW1lIGluIG1pbGxpc2Vjb25kcyAod2hpY2ggd2UgZ2V0IGZyb20gJ0RhdGUuZ2V0VGltZSgpJylcbiAqIHRvIGEgaHVtYW4tcmVhZGFibGUgdGltZTsgcmV0dXJucyB0aW1lIGluIHNlY29uZHMgcm91bmRlZCB0byAyXG4gKiBkZWNpbWFsIHBsYWNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRpbWUobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gcm91bmRQZXJjZW50YWdlKG1pbGxpc2Vjb25kc1RvU2Vjb25kcyhudW0pKTtcbn1cblxuLyoqXG4gKiBSb3VuZHMgYSBkZWNpbWFsIG51bWJlciB0byB0d28gZGVjaW1hbCBwb2ludHMuXG4gKiBUaGUgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBmcmFjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIG91dHB1dHRlZCBhcyBwZXJjZW50YWdlcy5cbiAqL1xuZnVuY3Rpb24gcm91bmRQZXJjZW50YWdlKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgucm91bmQoMTAwICogbnVtKSAvIDEwMDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIHRpbWUgaW4gbWlsbGlzZWNvbmRzLCByZXR1cm4gYW4gZXF1aXZhbGVudCBhbW91bnQgaW4gc2Vjb25kcy5cbiAqL1xuZnVuY3Rpb24gbWlsbGlzZWNvbmRzVG9TZWNvbmRzKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIG51bSAvIDEwMDA7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBsb3dlciBjYXNlcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb3dlckNhc2VGaXJzdENoYXJhY3RlcihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIubGVuZ3RoID4gMCA/IGAke3N0clswXS50b0xvd2VyQ2FzZSgpfSR7c3RyLnNsaWNlKDEpfWAgOiBzdHI7XG59XG4iXX0=
47
+ /**
48
+ * Returns the provided reason or a default fallback message if the reason is undefined, null, or empty.
49
+ * This is commonly used for AWS API responses that may not always provide a reason field.
50
+ */
51
+ function formatReason(reason, fallback = 'No reason provided') {
52
+ return reason?.trim() || fallback;
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLW1hbmlwdWxhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0cmluZy1tYW5pcHVsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSwwQkFFQztBQUtELDRCQUVDO0FBT0QsZ0NBRUM7QUFvQkQsMERBRUM7QUFNRCxvQ0FFQztBQW5ERDs7R0FFRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLE9BQWUsR0FBRztJQUM5RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxPQUFlLEdBQUc7SUFDL0QsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixVQUFVLENBQUMsR0FBVztJQUNwQyxPQUFPLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxHQUFXO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMscUJBQXFCLENBQUMsR0FBVztJQUN4QyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDcEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsR0FBVztJQUNqRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6RSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWlDLEVBQUUsV0FBbUIsb0JBQW9CO0lBQ3JHLE9BQU8sTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVEsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYWQgJ3MnIG9uIHRoZSBsZWZ0IHdpdGggJ2NoYXInIHVudGlsIGl0IGlzIG4gY2hhcmFjdGVycyB3aWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWRMZWZ0KG46IG51bWJlciwgeDogc3RyaW5nLCBjaGFyOiBzdHJpbmcgPSAnICcpOiBzdHJpbmcge1xuICByZXR1cm4gY2hhci5yZXBlYXQoTWF0aC5tYXgoMCwgbiAtIHgubGVuZ3RoKSkgKyB4O1xufVxuXG4vKipcbiAqIFBhZCAncycgb24gdGhlIHJpZ2h0IHdpdGggJ2NoYXInIHVudGlsIGl0IGlzIG4gY2hhcmFjdGVycyB3aWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWRSaWdodChuOiBudW1iZXIsIHg6IHN0cmluZywgY2hhcjogc3RyaW5nID0gJyAnKTogc3RyaW5nIHtcbiAgcmV0dXJuIHggKyBjaGFyLnJlcGVhdChNYXRoLm1heCgwLCBuIC0geC5sZW5ndGgpKTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRpbWUgaW4gbWlsbGlzZWNvbmRzICh3aGljaCB3ZSBnZXQgZnJvbSAnRGF0ZS5nZXRUaW1lKCknKVxuICogdG8gYSBodW1hbi1yZWFkYWJsZSB0aW1lOyByZXR1cm5zIHRpbWUgaW4gc2Vjb25kcyByb3VuZGVkIHRvIDJcbiAqIGRlY2ltYWwgcGxhY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGltZShudW06IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiByb3VuZFBlcmNlbnRhZ2UobWlsbGlzZWNvbmRzVG9TZWNvbmRzKG51bSkpO1xufVxuXG4vKipcbiAqIFJvdW5kcyBhIGRlY2ltYWwgbnVtYmVyIHRvIHR3byBkZWNpbWFsIHBvaW50cy5cbiAqIFRoZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGZyYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgb3V0cHV0dGVkIGFzIHBlcmNlbnRhZ2VzLlxuICovXG5mdW5jdGlvbiByb3VuZFBlcmNlbnRhZ2UobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5yb3VuZCgxMDAgKiBudW0pIC8gMTAwO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgdGltZSBpbiBtaWxsaXNlY29uZHMsIHJldHVybiBhbiBlcXVpdmFsZW50IGFtb3VudCBpbiBzZWNvbmRzLlxuICovXG5mdW5jdGlvbiBtaWxsaXNlY29uZHNUb1NlY29uZHMobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbnVtIC8gMTAwMDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGxvd2VyIGNhc2VzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvd2VyQ2FzZUZpcnN0Q2hhcmFjdGVyKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiAwID8gYCR7c3RyWzBdLnRvTG93ZXJDYXNlKCl9JHtzdHIuc2xpY2UoMSl9YCA6IHN0cjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm92aWRlZCByZWFzb24gb3IgYSBkZWZhdWx0IGZhbGxiYWNrIG1lc3NhZ2UgaWYgdGhlIHJlYXNvbiBpcyB1bmRlZmluZWQsIG51bGwsIG9yIGVtcHR5LlxuICogVGhpcyBpcyBjb21tb25seSB1c2VkIGZvciBBV1MgQVBJIHJlc3BvbnNlcyB0aGF0IG1heSBub3QgYWx3YXlzIHByb3ZpZGUgYSByZWFzb24gZmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRSZWFzb24ocmVhc29uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBmYWxsYmFjazogc3RyaW5nID0gJ05vIHJlYXNvbiBwcm92aWRlZCcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVhc29uPy50cmltKCkgfHwgZmFsbGJhY2s7XG59XG4iXX0=
package/package.json CHANGED
@@ -34,13 +34,13 @@
34
34
  "organization": true
35
35
  },
36
36
  "devDependencies": {
37
- "@aws-cdk/aws-service-spec": "^0.1.92",
37
+ "@aws-cdk/aws-service-spec": "^0.1.94",
38
38
  "@aws-cdk/cli-plugin-contract": "2.181.1",
39
- "@cdklabs/eslint-plugin": "^1.3.3",
39
+ "@cdklabs/eslint-plugin": "^1.3.4",
40
40
  "@jest/environment": "^29.7.0",
41
41
  "@jest/globals": "^29.7.0",
42
42
  "@jest/types": "^29.6.3",
43
- "@microsoft/api-extractor": "^7.52.10",
43
+ "@microsoft/api-extractor": "^7.52.11",
44
44
  "@smithy/util-stream": "^4.2.4",
45
45
  "@stylistic/eslint-plugin": "^3",
46
46
  "@types/fs-extra": "^11.0.4",
@@ -50,7 +50,7 @@
50
50
  "@types/split2": "^4.2.3",
51
51
  "@typescript-eslint/eslint-plugin": "^8",
52
52
  "@typescript-eslint/parser": "^8",
53
- "aws-cdk-lib": "2.211.0",
53
+ "aws-cdk-lib": "2.213.0",
54
54
  "aws-sdk-client-mock": "^4.1.0",
55
55
  "aws-sdk-client-mock-jest": "^4.1.0",
56
56
  "commit-and-tag-version": "^12",
@@ -62,7 +62,7 @@
62
62
  "eslint-plugin-jest": "^28.14.0",
63
63
  "eslint-plugin-jsdoc": "^50.8.0",
64
64
  "eslint-plugin-prettier": "^5.5.4",
65
- "fast-check": "^4.2.0",
65
+ "fast-check": "^4.3.0",
66
66
  "jest": "^29.7.0",
67
67
  "jest-environment-node": "^29.7.0",
68
68
  "jest-junit": "^16",
@@ -79,7 +79,7 @@
79
79
  },
80
80
  "dependencies": {
81
81
  "@aws-cdk/cdk-assets-lib": "^1",
82
- "@aws-cdk/cloud-assembly-schema": ">=48.6.0",
82
+ "@aws-cdk/cloud-assembly-schema": ">=48.7.0",
83
83
  "@aws-cdk/cloudformation-diff": "^2",
84
84
  "@aws-cdk/cx-api": "^2",
85
85
  "@aws-sdk/client-appsync": "^3",
@@ -109,7 +109,7 @@
109
109
  "@smithy/util-retry": "^4",
110
110
  "@smithy/util-waiter": "^4",
111
111
  "archiver": "^7.0.1",
112
- "cdk-from-cfn": "^0.236.0",
112
+ "cdk-from-cfn": "^0.242.0",
113
113
  "chalk": "^4",
114
114
  "chokidar": "^3",
115
115
  "fs-extra": "^9",
@@ -135,7 +135,7 @@
135
135
  "publishConfig": {
136
136
  "access": "public"
137
137
  },
138
- "version": "1.6.1",
138
+ "version": "1.7.0",
139
139
  "types": "lib/index.d.ts",
140
140
  "exports": {
141
141
  ".": {