cdktn 0.26.0-pre.20 → 0.26.0-pre.21
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/.jsii +1200 -1116
- package/eslint.config.mjs +18 -7
- package/jest.config.js +0 -1
- package/lib/_tokens.d.ts +7 -0
- package/lib/_tokens.js +8 -2
- package/lib/annotations.js +1 -1
- package/lib/app.js +8 -4
- package/lib/aspect.js +1 -1
- package/lib/asset-hash.js +1 -1
- package/lib/asset-staging.js +1 -1
- package/lib/assets.js +4 -4
- package/lib/backends/azurerm-backend.d.ts +6 -0
- package/lib/backends/azurerm-backend.js +9 -5
- package/lib/backends/cloud-backend.js +4 -4
- package/lib/backends/consul-backend.d.ts +6 -0
- package/lib/backends/consul-backend.js +9 -5
- package/lib/backends/cos-backend.d.ts +6 -0
- package/lib/backends/cos-backend.js +9 -5
- package/lib/backends/gcs-backend.d.ts +6 -0
- package/lib/backends/gcs-backend.js +9 -5
- package/lib/backends/http-backend.d.ts +6 -0
- package/lib/backends/http-backend.js +9 -5
- package/lib/backends/local-backend.d.ts +6 -0
- package/lib/backends/local-backend.js +9 -5
- package/lib/backends/oss-backend.d.ts +6 -0
- package/lib/backends/oss-backend.js +9 -5
- package/lib/backends/pg-backend.d.ts +6 -0
- package/lib/backends/pg-backend.js +9 -5
- package/lib/backends/remote-backend.d.ts +12 -0
- package/lib/backends/remote-backend.js +17 -9
- package/lib/backends/s3-backend.d.ts +6 -0
- package/lib/backends/s3-backend.js +9 -5
- package/lib/backends/swift-backend.js +2 -2
- package/lib/complex-computed-list.d.ts +85 -0
- package/lib/complex-computed-list.js +112 -54
- package/lib/functions/helpers.d.ts +72 -0
- package/lib/functions/helpers.js +73 -14
- package/lib/functions/provider-function.js +1 -1
- package/lib/functions/terraform-functions.generated.d.ts +3 -0
- package/lib/functions/terraform-functions.generated.js +5 -3
- package/lib/hcl/render.js +30 -6
- package/lib/ignore-strategy.js +1 -1
- package/lib/importable-resource.js +1 -1
- package/lib/manifest.d.ts +4 -0
- package/lib/manifest.js +6 -3
- package/lib/private/unique.js +11 -3
- package/lib/resource.js +1 -1
- package/lib/runtime.d.ts +6 -0
- package/lib/runtime.js +12 -3
- package/lib/synthesize/required-version.d.ts +32 -0
- package/lib/synthesize/required-version.js +205 -0
- package/lib/synthesize/synthesizer.d.ts +13 -0
- package/lib/synthesize/synthesizer.js +42 -8
- package/lib/terraform-asset.d.ts +4 -0
- package/lib/terraform-asset.js +6 -3
- package/lib/terraform-backend.d.ts +3 -0
- package/lib/terraform-backend.js +5 -3
- package/lib/terraform-conditions.js +1 -2
- package/lib/terraform-count.js +1 -1
- package/lib/terraform-data-resource.js +1 -1
- package/lib/terraform-data-source.d.ts +4 -0
- package/lib/terraform-data-source.js +8 -6
- package/lib/terraform-dependable.js +1 -1
- package/lib/terraform-dynamic-block.d.ts +4 -0
- package/lib/terraform-dynamic-block.js +5 -2
- package/lib/terraform-element.d.ts +4 -0
- package/lib/terraform-element.js +6 -3
- package/lib/terraform-ephemeral-resource.d.ts +4 -0
- package/lib/terraform-ephemeral-resource.js +8 -6
- package/lib/terraform-functions.d.ts +4 -0
- package/lib/terraform-functions.js +6 -3
- package/lib/terraform-hcl-module.d.ts +4 -0
- package/lib/terraform-hcl-module.js +6 -3
- package/lib/terraform-iterator.d.ts +19 -0
- package/lib/terraform-iterator.js +25 -11
- package/lib/terraform-local.d.ts +4 -0
- package/lib/terraform-local.js +6 -3
- package/lib/terraform-module.js +1 -1
- package/lib/terraform-operators.js +1 -1
- package/lib/terraform-output.d.ts +4 -0
- package/lib/terraform-output.js +6 -3
- package/lib/terraform-provider.d.ts +4 -0
- package/lib/terraform-provider.js +6 -3
- package/lib/terraform-provisioner.js +1 -1
- package/lib/terraform-remote-state.d.ts +3 -0
- package/lib/terraform-remote-state.js +5 -3
- package/lib/terraform-resource-targets.js +1 -1
- package/lib/terraform-resource.d.ts +5 -1
- package/lib/terraform-resource.js +16 -9
- package/lib/terraform-stack.d.ts +4 -0
- package/lib/terraform-stack.js +28 -9
- package/lib/terraform-variable.d.ts +7 -0
- package/lib/terraform-variable.js +16 -7
- package/lib/testing/adapters/jest.d.ts +3 -0
- package/lib/testing/adapters/jest.js +10 -1
- package/lib/testing/index.js +14 -4
- package/lib/testing/matchers.js +61 -19
- package/lib/tfExpression.d.ts +48 -0
- package/lib/tfExpression.js +53 -15
- package/lib/tokens/lazy.d.ts +4 -0
- package/lib/tokens/lazy.js +21 -8
- package/lib/tokens/private/dependency.js +2 -6
- package/lib/tokens/private/resolve.js +3 -3
- package/lib/tokens/private/stack-trace.d.ts +1 -1
- package/lib/tokens/private/stack-trace.js +1 -2
- package/lib/tokens/resolvable.js +2 -2
- package/lib/tokens/string-fragments.js +4 -4
- package/lib/tokens/token.js +2 -2
- package/lib/upgrade-id-aspect.js +1 -1
- package/lib/util.d.ts +0 -1
- package/lib/util.js +4 -4
- package/lib/validations/target-versions.d.ts +12 -0
- package/lib/validations/target-versions.js +40 -1
- package/package.json +112 -109
|
@@ -6,11 +6,13 @@ const terraform_element_1 = require("./terraform-element");
|
|
|
6
6
|
const tokens_1 = require("./tokens");
|
|
7
7
|
const util_1 = require("./util");
|
|
8
8
|
const tfExpression_1 = require("./tfExpression");
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Base class for `terraform_remote_state` data sources, which read the outputs of another Terraform state.
|
|
11
|
+
*/
|
|
10
12
|
class TerraformRemoteState extends terraform_element_1.TerraformElement {
|
|
11
13
|
backend;
|
|
12
14
|
config;
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformRemoteState", version: "0.26.0-pre.
|
|
15
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformRemoteState", version: "0.26.0-pre.21" };
|
|
14
16
|
static tfResourceType = "terraform_remote_state";
|
|
15
17
|
constructor(scope, id, backend, config) {
|
|
16
18
|
super(scope, id, "data.terraform_remote_state");
|
|
@@ -87,4 +89,4 @@ class TerraformRemoteState extends terraform_element_1.TerraformElement {
|
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
exports.TerraformRemoteState = TerraformRemoteState;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXJlbW90ZS1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXJyYWZvcm0tcmVtb3RlLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSwyREFBdUQ7QUFDdkQscUNBQWlDO0FBQ2pDLGlDQUFvRDtBQUNwRCxpREFBcUM7QUFTckM7O0dBRUc7QUFDSCxNQUFzQixvQkFDcEIsU0FBUSxvQ0FBZ0I7SUFRTDtJQUNBOztJQU5aLE1BQU0sQ0FBVSxjQUFjLEdBQUcsd0JBQXdCLENBQUM7SUFFakUsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ08sT0FBZSxFQUNmLE1BQXNDO1FBRXZELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFIL0IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQWdDO0lBR3pELENBQUM7SUFFTSxTQUFTLENBQUMsTUFBYztRQUM3QixPQUFPLGNBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLFNBQVMsQ0FBQyxNQUFjO1FBQzdCLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sT0FBTyxDQUFDLE1BQWM7UUFDM0IsT0FBTyxjQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxVQUFVLENBQUMsTUFBYztRQUM5QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sR0FBRyxDQUFDLE1BQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLHlCQUF5QixDQUFDLGtCQUEwQjtRQUMxRCxPQUFPLElBQUEsa0JBQUcsRUFDUiwrQkFBK0IsSUFBSSxDQUFDLGdCQUFnQixZQUFZLGtCQUFrQixFQUFFLEVBQ3BGLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFBLHNCQUFlLEVBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUMzQixPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNuQixPQUFPO1lBQ0wsSUFBSSxFQUFFO2dCQUNKLHNCQUFzQixFQUFFO29CQUN0QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUEsZ0JBQVMsRUFDaEM7d0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO3dCQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO3dCQUNoQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO3dCQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtxQkFDN0IsRUFDRCxJQUFJLENBQUMsWUFBWSxDQUNsQjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDaEIsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixzQkFBc0IsRUFBRTtvQkFDdEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFBLGdCQUFTLEVBQ2hDO3dCQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzt3QkFDckIsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUzt3QkFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTt3QkFDOUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7cUJBQzdCLEVBQ0QsSUFBSSxDQUFDLFlBQVksQ0FDbEI7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBQ00sVUFBVTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPO1lBQ0wsU0FBUyxFQUFFO2dCQUNULHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUN2RDtTQUNGLENBQUM7SUFDSixDQUFDOztBQXBHSCxvREFxR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUVsZW1lbnQgfSBmcm9tIFwiLi90ZXJyYWZvcm0tZWxlbWVudFwiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiLi90b2tlbnNcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSwga2V5c1RvU25ha2VDYXNlIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSBcIi4vdGZFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJUmVzb2x2YWJsZSB9IGZyb20gXCIuL3Rva2Vucy9yZXNvbHZhYmxlXCI7XG5pbXBvcnQgeyBJVGVycmFmb3JtQWRkcmVzc2FibGUgfSBmcm9tIFwiLi90ZXJyYWZvcm0tYWRkcmVzc2FibGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhVGVycmFmb3JtUmVtb3RlU3RhdGVDb25maWcge1xuICByZWFkb25seSB3b3Jrc3BhY2U/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlZmF1bHRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBgdGVycmFmb3JtX3JlbW90ZV9zdGF0ZWAgZGF0YSBzb3VyY2VzLCB3aGljaCByZWFkIHRoZSBvdXRwdXRzIG9mIGFub3RoZXIgVGVycmFmb3JtIHN0YXRlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGVycmFmb3JtUmVtb3RlU3RhdGVcbiAgZXh0ZW5kcyBUZXJyYWZvcm1FbGVtZW50XG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybUFkZHJlc3NhYmxlXG57XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdGZSZXNvdXJjZVR5cGUgPSBcInRlcnJhZm9ybV9yZW1vdGVfc3RhdGVcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYWNrZW5kOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IERhdGFUZXJyYWZvcm1SZW1vdGVTdGF0ZUNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBcImRhdGEudGVycmFmb3JtX3JlbW90ZV9zdGF0ZVwiKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdHJpbmcob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUob3V0cHV0KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyKG91dHB1dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXIodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKG91dHB1dCkpO1xuICB9XG5cbiAgcHVibGljIGdldExpc3Qob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTGlzdCh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUob3V0cHV0KSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9vbGVhbihvdXRwdXQ6IHN0cmluZyk6IElSZXNvbHZhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKG91dHB1dCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0KG91dHB1dDogc3RyaW5nKTogSVJlc29sdmFibGUge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUob3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZyk6IElSZXNvbHZhYmxlIHtcbiAgICByZXR1cm4gcmVmKFxuICAgICAgYGRhdGEudGVycmFmb3JtX3JlbW90ZV9zdGF0ZS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH0ub3V0cHV0cy4ke3RlcnJhZm9ybUF0dHJpYnV0ZX1gLFxuICAgICAgdGhpcy5jZGt0ZlN0YWNrLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RDb25maWcoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGNvbmZpZ09iaiA9IGtleXNUb1NuYWtlQ2FzZSh7IC4uLnRoaXMuY29uZmlnIH0pO1xuICAgIGRlbGV0ZSBjb25maWdPYmoud29ya3NwYWNlO1xuICAgIGRlbGV0ZSBjb25maWdPYmouZGVmYXVsdHM7XG4gICAgcmV0dXJuIGNvbmZpZ09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoaXMgcmVzb3VyY2UgdG8gdGhlIHRlcnJhZm9ybSBKU09OIG91dHB1dC5cbiAgICovXG4gIHB1YmxpYyB0b0hjbFRlcnJhZm9ybSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRlcnJhZm9ybV9yZW1vdGVfc3RhdGU6IHtcbiAgICAgICAgICBbdGhpcy5mcmllbmRseVVuaXF1ZUlkXTogZGVlcE1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiYWNrZW5kOiB0aGlzLmJhY2tlbmQsXG4gICAgICAgICAgICAgIHdvcmtzcGFjZTogdGhpcy5jb25maWcud29ya3NwYWNlLFxuICAgICAgICAgICAgICBkZWZhdWx0czogdGhpcy5jb25maWcuZGVmYXVsdHMsXG4gICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5leHRyYWN0Q29uZmlnKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5yYXdPdmVycmlkZXMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoaXMgcmVzb3VyY2UgdG8gdGhlIHRlcnJhZm9ybSBKU09OIG91dHB1dC5cbiAgICovXG4gIHB1YmxpYyB0b1RlcnJhZm9ybSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRlcnJhZm9ybV9yZW1vdGVfc3RhdGU6IHtcbiAgICAgICAgICBbdGhpcy5mcmllbmRseVVuaXF1ZUlkXTogZGVlcE1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiYWNrZW5kOiB0aGlzLmJhY2tlbmQsXG4gICAgICAgICAgICAgIHdvcmtzcGFjZTogdGhpcy5jb25maWcud29ya3NwYWNlLFxuICAgICAgICAgICAgICBkZWZhdWx0czogdGhpcy5jb25maWcuZGVmYXVsdHMsXG4gICAgICAgICAgICAgIGNvbmZpZzogdGhpcy5leHRyYWN0Q29uZmlnKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5yYXdPdmVycmlkZXMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgdG9NZXRhZGF0YSgpOiBhbnkge1xuICAgIGlmICghT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgdGVycmFmb3JtX3JlbW90ZV9zdGF0ZTogT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -11,7 +11,7 @@ const errors_1 = require("./errors");
|
|
|
11
11
|
*
|
|
12
12
|
*/
|
|
13
13
|
class TerraformResourceTargets {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformResourceTargets", version: "0.26.0-pre.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformResourceTargets", version: "0.26.0-pre.21" };
|
|
15
15
|
_resourceTargetMap = new Map();
|
|
16
16
|
prettyPrintEntries() {
|
|
17
17
|
return [...this._resourceTargetMap.entries()].reduce((accum, curr) => accum + "\n" + `${curr[0]}: ${curr[1].friendlyUniqueId}`, "");
|
|
@@ -31,7 +31,7 @@ export interface TerraformResourceLifecycle {
|
|
|
31
31
|
/**
|
|
32
32
|
* prepares a lifecycle object for being rendered as JSON
|
|
33
33
|
* currently this function:
|
|
34
|
-
* - converts all replaceTriggeredBy items
|
|
34
|
+
* - converts all replaceTriggeredBy items to plain references (without the ${} wrapper, like dependsOn)
|
|
35
35
|
*/
|
|
36
36
|
export declare function lifecycleToTerraform(lifecycle?: TerraformResourceLifecycle): TerraformResourceLifecycle | undefined;
|
|
37
37
|
export interface TerraformMetaArguments {
|
|
@@ -64,6 +64,10 @@ export interface TerraformResourceImport {
|
|
|
64
64
|
readonly id: string;
|
|
65
65
|
readonly provider?: TerraformProvider;
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* A Terraform managed resource (`resource` block): an infrastructure object whose lifecycle Terraform manages
|
|
69
|
+
* through a provider and tracks in state.
|
|
70
|
+
*/
|
|
67
71
|
export declare class TerraformResource extends TerraformElement implements ITerraformResource, ITerraformDependable, IInterpolatingParent {
|
|
68
72
|
readonly terraformResourceType: string;
|
|
69
73
|
readonly terraformGeneratorMetadata?: TerraformProviderGeneratorMetadata;
|
|
@@ -10,8 +10,7 @@ const tfExpression_1 = require("./tfExpression");
|
|
|
10
10
|
const stack_trace_1 = require("./tokens/private/stack-trace");
|
|
11
11
|
const provider_feature_constraints_1 = require("./provider-feature-constraints");
|
|
12
12
|
const terraform_count_1 = require("./terraform-count");
|
|
13
|
-
|
|
14
|
-
const assert = require("assert");
|
|
13
|
+
const assert_1 = require("assert");
|
|
15
14
|
const target_versions_1 = require("./validations/target-versions");
|
|
16
15
|
const terraform_stack_1 = require("./terraform-stack");
|
|
17
16
|
const errors_1 = require("./errors");
|
|
@@ -19,7 +18,7 @@ const TERRAFORM_RESOURCE_SYMBOL = Symbol.for("cdktf/TerraformResource");
|
|
|
19
18
|
/**
|
|
20
19
|
* prepares a lifecycle object for being rendered as JSON
|
|
21
20
|
* currently this function:
|
|
22
|
-
* - converts all replaceTriggeredBy items
|
|
21
|
+
* - converts all replaceTriggeredBy items to plain references (without the ${} wrapper, like dependsOn)
|
|
23
22
|
*/
|
|
24
23
|
function lifecycleToTerraform(lifecycle) {
|
|
25
24
|
if (!lifecycle) {
|
|
@@ -31,19 +30,27 @@ function lifecycleToTerraform(lifecycle) {
|
|
|
31
30
|
? {
|
|
32
31
|
replaceTriggeredBy: lifecycle?.replaceTriggeredBy?.map((x) => {
|
|
33
32
|
if (typeof x === "string") {
|
|
34
|
-
return
|
|
33
|
+
return tokens_1.Lazy.stringValue({
|
|
34
|
+
produce: (context) => {
|
|
35
|
+
context.suppressBraces = true;
|
|
36
|
+
return x;
|
|
37
|
+
},
|
|
38
|
+
});
|
|
35
39
|
}
|
|
36
40
|
else {
|
|
37
|
-
return x
|
|
41
|
+
return (0, tfExpression_1.dependable)(x);
|
|
38
42
|
}
|
|
39
43
|
}),
|
|
40
44
|
}
|
|
41
45
|
: undefined),
|
|
42
46
|
};
|
|
43
47
|
}
|
|
44
|
-
|
|
48
|
+
/**
|
|
49
|
+
* A Terraform managed resource (`resource` block): an infrastructure object whose lifecycle Terraform manages
|
|
50
|
+
* through a provider and tracks in state.
|
|
51
|
+
*/
|
|
45
52
|
class TerraformResource extends terraform_element_1.TerraformElement {
|
|
46
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformResource", version: "0.26.0-pre.
|
|
53
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.TerraformResource", version: "0.26.0-pre.21" };
|
|
47
54
|
terraformResourceType;
|
|
48
55
|
terraformGeneratorMetadata;
|
|
49
56
|
// TerraformMetaArguments
|
|
@@ -107,7 +114,7 @@ class TerraformResource extends terraform_element_1.TerraformElement {
|
|
|
107
114
|
return tokens_1.Token.asAnyMap(this.interpolationForAttribute(terraformAttribute));
|
|
108
115
|
}
|
|
109
116
|
get terraformMetaArguments() {
|
|
110
|
-
|
|
117
|
+
(0, assert_1.ok)(!this.forEach || typeof this.count === "undefined", `forEach and count are both set, but they are mutually exclusive. You can only use either of them. Check the resource at path: ${this.node.path}`);
|
|
111
118
|
return {
|
|
112
119
|
dependsOn: this.dependsOn,
|
|
113
120
|
count: terraform_count_1.TerraformCount.isTerraformCount(this.count)
|
|
@@ -417,4 +424,4 @@ class TerraformResource extends terraform_element_1.TerraformElement {
|
|
|
417
424
|
}
|
|
418
425
|
}
|
|
419
426
|
exports.TerraformResource = TerraformResource;
|
|
420
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1RUEsb0RBcUJDOztBQXpGRCxxQ0FBaUM7QUFDakMsMkRBQXVEO0FBRXZELGlDQUtnQjtBQUVoQixpREFBaUQ7QUFFakQsOERBQW9FO0FBQ3BFLGlGQUFpRTtBQUlqRSx1REFBbUQ7QUFLbkQsaUVBQWlFO0FBQ2pFLGlDQUFrQztBQU1sQyxtRUFBNkU7QUFDN0UsdURBQW1EO0FBQ25ELHFDQUtrQjtBQUVsQixNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQXlCeEU7Ozs7R0FJRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxTQUFzQztJQUV0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTztRQUNMLEdBQUcsU0FBUztRQUNaLEdBQUcsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTTtZQUN2QyxDQUFDLENBQUM7Z0JBQ0Usa0JBQWtCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUMzRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUMxQixPQUFPLENBQUMsQ0FBQztvQkFDWCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUNmLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO2FBQ0g7WUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUF3Q0QsK0NBQStDO0FBQy9DLE1BQWEsaUJBQ1gsU0FBUSxvQ0FBZ0I7O0lBR1IscUJBQXFCLENBQVM7SUFDOUIsMEJBQTBCLENBQXNDO0lBRWhGLHlC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QUMsVUFBVSxHQUFHO1lBQ2hCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDNUQsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFDO0lBQ0osQ0FBQzs7QUF6ZEgsOENBMGRDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCIuL3Rva2Vuc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtRWxlbWVudCB9IGZyb20gXCIuL3RlcnJhZm9ybS1lbGVtZW50XCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlciB9IGZyb20gXCIuL3RlcnJhZm9ybS1wcm92aWRlclwiO1xuaW1wb3J0IHtcbiAga2V5c1RvU25ha2VDYXNlLFxuICBkZWVwTWVyZ2UsXG4gIHByb2Nlc3NEeW5hbWljQXR0cmlidXRlcyxcbiAgcHJvY2Vzc0R5bmFtaWNBdHRyaWJ1dGVzRm9ySGNsLFxufSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBJVGVycmFmb3JtRGVwZW5kYWJsZSB9IGZyb20gXCIuL3RlcnJhZm9ybS1kZXBlbmRhYmxlXCI7XG5pbXBvcnQgeyByZWYsIGRlcGVuZGFibGUgfSBmcm9tIFwiLi90ZkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IElSZXNvbHZhYmxlLCBJUmVzb2x2ZUNvbnRleHQgfSBmcm9tIFwiLi90b2tlbnMvcmVzb2x2YWJsZVwiO1xuaW1wb3J0IHsgY2FwdHVyZUNyZWF0aW9uU3RhY2sgfSBmcm9tIFwiLi90b2tlbnMvcHJpdmF0ZS9zdGFjay10cmFjZVwiO1xuaW1wb3J0IHsgUHJvdmlkZXJGZWF0dXJlIH0gZnJvbSBcIi4vcHJvdmlkZXItZmVhdHVyZS1jb25zdHJhaW50c1wiO1xuaW1wb3J0IHsgSUludGVycG9sYXRpbmdQYXJlbnQgfSBmcm9tIFwiLi90ZXJyYWZvcm0tYWRkcmVzc2FibGVcIjtcbmltcG9ydCB7IElUZXJyYWZvcm1JdGVyYXRvciB9IGZyb20gXCIuL3RlcnJhZm9ybS1pdGVyYXRvclwiO1xuaW1wb3J0IHsgUHJlY29uZGl0aW9uLCBQb3N0Y29uZGl0aW9uIH0gZnJvbSBcIi4vdGVycmFmb3JtLWNvbmRpdGlvbnNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUNvdW50IH0gZnJvbSBcIi4vdGVycmFmb3JtLWNvdW50XCI7XG5pbXBvcnQge1xuICBTU0hQcm92aXNpb25lckNvbm5lY3Rpb24sXG4gIFdpbnJtUHJvdmlzaW9uZXJDb25uZWN0aW9uLFxufSBmcm9tIFwiLi90ZXJyYWZvcm0tcHJvdmlzaW9uZXJcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5pbXBvcnQgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmltcG9ydCB7XG4gIEZpbGVQcm92aXNpb25lcixcbiAgTG9jYWxFeGVjUHJvdmlzaW9uZXIsXG4gIFJlbW90ZUV4ZWNQcm92aXNpb25lcixcbn0gZnJvbSBcIi4vdGVycmFmb3JtLXByb3Zpc2lvbmVyXCI7XG5pbXBvcnQgeyBWYWxpZGF0ZUZlYXR1cmVUYXJnZXRTdXBwb3J0IH0gZnJvbSBcIi4vdmFsaWRhdGlvbnMvdGFyZ2V0LXZlcnNpb25zXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCIuL3RlcnJhZm9ybS1zdGFja1wiO1xuaW1wb3J0IHtcbiAgbW92ZWRUb1Jlc291cmNlT2ZEaWZmZXJlbnRUeXBlLFxuICByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeUlkLFxuICByZXNvdXJjZUdpdmVuVHdvTW92ZU9wZXJhdGlvbnNCeVRhcmdldCxcbiAgcmVzb3VyY2VHaXZlblR3b01vdmVPcGVyYXRpb25zQnlUYXJnZXRBbmRJZCxcbn0gZnJvbSBcIi4vZXJyb3JzXCI7XG5cbmNvbnN0IFRFUlJBRk9STV9SRVNPVVJDRV9TWU1CT0wgPSBTeW1ib2wuZm9yKFwiY2RrdGYvVGVycmFmb3JtUmVzb3VyY2VcIik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlcnJhZm9ybVJlc291cmNlIHtcbiAgcmVhZG9ubHkgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSBmcmllbmRseVVuaXF1ZUlkOiBzdHJpbmc7XG5cbiAgZGVwZW5kc09uPzogc3RyaW5nW107XG4gIGNvdW50PzogbnVtYmVyIHwgVGVycmFmb3JtQ291bnQ7XG4gIHByb3ZpZGVyPzogVGVycmFmb3JtUHJvdmlkZXI7XG4gIGxpZmVjeWNsZT86IFRlcnJhZm9ybVJlc291cmNlTGlmZWN5Y2xlO1xuICBmb3JFYWNoPzogSVRlcnJhZm9ybUl0ZXJhdG9yO1xuXG4gIGludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpOiBJUmVzb2x2YWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1SZXNvdXJjZUxpZmVjeWNsZSB7XG4gIHJlYWRvbmx5IGNyZWF0ZUJlZm9yZURlc3Ryb3k/OiBib29sZWFuO1xuICByZWFkb25seSBwcmV2ZW50RGVzdHJveT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXSB8IFwiYWxsXCI7XG4gIHJlYWRvbmx5IHJlcGxhY2VUcmlnZ2VyZWRCeT86IEFycmF5PElUZXJyYWZvcm1EZXBlbmRhYmxlIHwgc3RyaW5nPjtcbiAgcmVhZG9ubHkgcHJlY29uZGl0aW9uPzogUHJlY29uZGl0aW9uW107XG4gIHJlYWRvbmx5IHBvc3Rjb25kaXRpb24/OiBQb3N0Y29uZGl0aW9uW107XG59XG5cbi8qKlxuICogcHJlcGFyZXMgYSBsaWZlY3ljbGUgb2JqZWN0IGZvciBiZWluZyByZW5kZXJlZCBhcyBKU09OXG4gKiBjdXJyZW50bHkgdGhpcyBmdW5jdGlvbjpcbiAqICAtIGNvbnZlcnRzIGFsbCByZXBsYWNlVHJpZ2dlcmVkQnkgaXRlbXMgdGhhdCBhcmUgSVRlcnJhZm9ybURlcGVuZGFibGVzIHRvIHN0cmluZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpZmVjeWNsZVRvVGVycmFmb3JtKFxuICBsaWZlY3ljbGU/OiBUZXJyYWZvcm1SZXNvdXJjZUxpZmVjeWNsZSxcbik6IFRlcnJhZm9ybVJlc291cmNlTGlmZWN5Y2xlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFsaWZlY3ljbGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5saWZlY3ljbGUsXG4gICAgLi4uKGxpZmVjeWNsZT8ucmVwbGFjZVRyaWdnZXJlZEJ5Py5sZW5ndGhcbiAgICAgID8ge1xuICAgICAgICAgIHJlcGxhY2VUcmlnZ2VyZWRCeTogbGlmZWN5Y2xlPy5yZXBsYWNlVHJpZ2dlcmVkQnk/Lm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHguZnFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZCksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtTWV0YUFyZ3VtZW50cyB7XG4gIHJlYWRvbmx5IGRlcGVuZHNPbj86IElUZXJyYWZvcm1EZXBlbmRhYmxlW107XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyIHwgVGVycmFmb3JtQ291bnQ7XG4gIHJlYWRvbmx5IHByb3ZpZGVyPzogVGVycmFmb3JtUHJvdmlkZXI7XG4gIHJlYWRvbmx5IGxpZmVjeWNsZT86IFRlcnJhZm9ybVJlc291cmNlTGlmZWN5Y2xlO1xuICByZWFkb25seSBmb3JFYWNoPzogSVRlcnJhZm9ybUl0ZXJhdG9yO1xuICByZWFkb25seSBwcm92aXNpb25lcnM/OiBBcnJheTxcbiAgICBGaWxlUHJvdmlzaW9uZXIgfCBMb2NhbEV4ZWNQcm92aXNpb25lciB8IFJlbW90ZUV4ZWNQcm92aXNpb25lclxuICA+O1xuICByZWFkb25seSBjb25uZWN0aW9uPzogU1NIUHJvdmlzaW9uZXJDb25uZWN0aW9uIHwgV2lucm1Qcm92aXNpb25lckNvbm5lY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3JNZXRhZGF0YSB7XG4gIHJlYWRvbmx5IHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwcm92aWRlclZlcnNpb25Db25zdHJhaW50Pzogc3RyaW5nO1xuICByZWFkb25seSBwcm92aWRlclZlcnNpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUmVzb3VyY2VDb25maWcgZXh0ZW5kcyBUZXJyYWZvcm1NZXRhQXJndW1lbnRzIHtcbiAgcmVhZG9ubHkgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhPzogVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3JNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1SZXNvdXJjZU1vdmVCeVRhcmdldCB7XG4gIHJlYWRvbmx5IG1vdmVUYXJnZXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5kZXg/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUmVzb3VyY2VNb3ZlQnlJZCB7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1SZXNvdXJjZUltcG9ydCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3ZpZGVyPzogVGVycmFmb3JtUHJvdmlkZXI7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUmVzb3VyY2VcbiAgZXh0ZW5kcyBUZXJyYWZvcm1FbGVtZW50XG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybVJlc291cmNlLCBJVGVycmFmb3JtRGVwZW5kYWJsZSwgSUludGVycG9sYXRpbmdQYXJlbnRcbntcbiAgcHVibGljIHJlYWRvbmx5IHRlcnJhZm9ybVJlc291cmNlVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE/OiBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck1ldGFkYXRhO1xuXG4gIC8vIFRlcnJhZm9ybU1ldGFBcmd1bWVudHNcblxuICBwdWJsaWMgZGVwZW5kc09uPzogc3RyaW5nW107XG4gIHB1YmxpYyBjb3VudD86IG51bWJlciB8IFRlcnJhZm9ybUNvdW50O1xuICBwdWJsaWMgcHJvdmlkZXI/OiBUZXJyYWZvcm1Qcm92aWRlcjtcbiAgcHVibGljIGxpZmVjeWNsZT86IFRlcnJhZm9ybVJlc291cmNlTGlmZWN5Y2xlO1xuICBwdWJsaWMgZm9yRWFjaD86IElUZXJyYWZvcm1JdGVyYXRvcjtcbiAgcHVibGljIGNvbm5lY3Rpb24/OiBTU0hQcm92aXNpb25lckNvbm5lY3Rpb24gfCBXaW5ybVByb3Zpc2lvbmVyQ29ubmVjdGlvbjtcbiAgcHVibGljIHByb3Zpc2lvbmVycz86IEFycmF5PFxuICAgIEZpbGVQcm92aXNpb25lciB8IExvY2FsRXhlY1Byb3Zpc2lvbmVyIHwgUmVtb3RlRXhlY1Byb3Zpc2lvbmVyXG4gID47XG4gIHByaXZhdGUgX2ltcG9ydGVkPzogVGVycmFmb3JtUmVzb3VyY2VJbXBvcnQ7XG4gIHByaXZhdGUgX21vdmVkQnlUYXJnZXQ/OiBUZXJyYWZvcm1SZXNvdXJjZU1vdmVCeVRhcmdldDtcbiAgcHJpdmF0ZSBfbW92ZWRCeUlkPzogVGVycmFmb3JtUmVzb3VyY2VNb3ZlQnlJZDtcbiAgcHJpdmF0ZSBfaGFzTW92ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IFRlcnJhZm9ybVJlc291cmNlQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBjb25maWcudGVycmFmb3JtUmVzb3VyY2VUeXBlKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgVEVSUkFGT1JNX1JFU09VUkNFX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlID0gY29uZmlnLnRlcnJhZm9ybVJlc291cmNlVHlwZTtcbiAgICB0aGlzLnRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhID0gY29uZmlnLnRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5kZXBlbmRzT24pKSB7XG4gICAgICB0aGlzLmRlcGVuZHNPbiA9IGNvbmZpZy5kZXBlbmRzT24ubWFwKChkZXBlbmRlbmN5KSA9PlxuICAgICAgICBkZXBlbmRhYmxlKGRlcGVuZGVuY3kpLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb3VudCA9IGNvbmZpZy5jb3VudDtcbiAgICB0aGlzLnByb3ZpZGVyID0gY29uZmlnLnByb3ZpZGVyO1xuICAgIHRoaXMubGlmZWN5Y2xlID0gY29uZmlnLmxpZmVjeWNsZTtcbiAgICB0aGlzLmZvckVhY2ggPSBjb25maWcuZm9yRWFjaDtcbiAgICB0aGlzLnByb3Zpc2lvbmVycyA9IGNvbmZpZy5wcm92aXNpb25lcnM7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29uZmlnLmNvbm5lY3Rpb247XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzVGVycmFmb3JtUmVzb3VyY2UoeDogYW55KTogeCBpcyBUZXJyYWZvcm1SZXNvdXJjZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgVEVSUkFGT1JNX1JFU09VUkNFX1NZTUJPTCBpbiB4XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNSZXNvdXJjZU1vdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vdmVkQnlJZCB8fCB0aGlzLl9tb3ZlZEJ5VGFyZ2V0O1xuICB9XG5cbiAgcHVibGljIGdldFN0cmluZ0F0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMaXN0QXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTGlzdCh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9vbGVhbkF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1iZXJMaXN0QXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyTGlzdChcbiAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RyaW5nTWFwQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nTWFwKFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1iZXJNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJNYXAoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEJvb2xlYW5NYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNCb29sZWFuTWFwKFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbnlNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNBbnlNYXAodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCB0ZXJyYWZvcm1NZXRhQXJndW1lbnRzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBhc3NlcnQoXG4gICAgICAhdGhpcy5mb3JFYWNoIHx8IHR5cGVvZiB0aGlzLmNvdW50ID09PSBcInVuZGVmaW5lZFwiLFxuICAgICAgYGZvckVhY2ggYW5kIGNvdW50IGFyZSBib3RoIHNldCwgYnV0IHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gWW91IGNhbiBvbmx5IHVzZSBlaXRoZXIgb2YgdGhlbS4gQ2hlY2sgdGhlIHJlc291cmNlIGF0IHBhdGg6ICR7dGhpcy5ub2RlLnBhdGh9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5kZXBlbmRzT24sXG4gICAgICBjb3VudDogVGVycmFmb3JtQ291bnQuaXNUZXJyYWZvcm1Db3VudCh0aGlzLmNvdW50KVxuICAgICAgICA/IHRoaXMuY291bnQudG9UZXJyYWZvcm0oKVxuICAgICAgICA6IHRoaXMuY291bnQsXG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcj8uZnFuLFxuICAgICAgbGlmZWN5Y2xlOiBsaWZlY3ljbGVUb1RlcnJhZm9ybSh0aGlzLmxpZmVjeWNsZSksXG4gICAgICBmb3JFYWNoOiB0aGlzLmZvckVhY2g/Ll9nZXRGb3JFYWNoRXhwcmVzc2lvbigpLFxuICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uLFxuICAgIH07XG4gIH1cblxuICAvLyBqc2lpIGNhbid0IGhhbmRsZSBhYnN0cmFjdCBjbGFzc2VzP1xuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhIHdyaXRlLW9ubHkgYXR0cmlidXRlJ3MgYWxyZWFkeS1tYXBwZWQgdmFsdWUgc28gdGhhdFxuICAgKiBgUHJvdmlkZXJGZWF0dXJlLldSSVRFX09OTFlfQVRUUklCVVRFU2AgdXNhZ2UgaXMgcmVnaXN0ZXJlZCBhdFxuICAgKiAqcmVzb2x2ZSogdGltZSBpbnN0ZWFkIG9mIGF0IG11dGF0aW9uIHRpbWUgKHNldHRlci9jb25zdHJ1Y3RvcikuXG4gICAqIENhbGxlZCBieSBnZW5lcmF0ZWQgYmluZGluZ3MgZnJvbSBgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKWAgYW5kXG4gICAqIGBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpYCwgZS5nLlxuICAgKiBgc2VjcmV0X2tleV93bzogdGhpcy5tYXJrV3JpdGVPbmx5QXR0cmlidXRlKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3NlY3JldEtleVdvKSlgO1xuICAgKiBub3QgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKlxuICAgKiBgdW5kZWZpbmVkYCBwYXNzZXMgdGhyb3VnaCBjb21wbGV0ZWx5IHVuY2hhbmdlZCwgc28gdGhlIGV4aXN0aW5nXG4gICAqIHVuZGVmaW5lZC1maWx0ZXJpbmcgdGhhdCBvbWl0cyB1bnNldCBhdHRyaWJ1dGVzIGZyb20gc3ludGhlc2l6ZWRcbiAgICogb3V0cHV0IChzZWUgYHJlc29sdmUoKWAgaW4gYHRva2Vucy9wcml2YXRlL3Jlc29sdmUudHNgLCBhbmQgdGhlXG4gICAqIGB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkYCBmaWx0ZXIgaW4gZ2VuZXJhdGVkXG4gICAqIGBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpYCkga2VlcHMgd29ya2luZyB1bnRvdWNoZWQuIGBudWxsYCBpcyBhbHNvXG4gICAqIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZDogaXQgYWxyZWFkeSByZW5kZXJzIGFzIGFuIGV4cGxpY2l0XG4gICAqIG51bGwtb3V0IGFuZCBtdXN0IG5vdCBhcm0gdGhlIHZhbGlkYXRpb24gZWl0aGVyLlxuICAgKlxuICAgKiBBbnkgb3RoZXIgdmFsdWUgLSBpbmNsdWRpbmcgb25lIHRoYXQgd2lsbCBpdHNlbGYgcmVzb2x2ZSB0byBub3RoaW5nXG4gICAqIChlLmcuIGEgYExhenlgL2BJUmVzb2x2YWJsZWAgcHJvZHVjZXIgd2l0aCBubyB2YWx1ZSB0byBjb250cmlidXRlKSAtXG4gICAqIGlzIHdyYXBwZWQgaW4gYSB0b2tlbiB3aG9zZSBgcmVzb2x2ZSgpYCBkZWZlcnMgdG8gdGhlIHJlYWwgcmVzb2x2ZXJcbiAgICogZmlyc3QgYW5kIHJlZ2lzdGVycyB1c2FnZSBvbmx5IGlmIHdoYXQgY29tZXMgYmFjayBpcyBub3RcbiAgICogYG51bGxgL2B1bmRlZmluZWRgOyB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgdGhlbiByZXR1cm5lZCB1bmNoYW5nZWQsXG4gICAqIHNvIHdoYXQgYWN0dWFsbHkgcmVuZGVycyBpcyB1bnRvdWNoZWQgYnkgdGhpcyB3cmFwcGVyLiBBIHByb2R1Y2VyXG4gICAqIHRoYXQgcmVzb2x2ZXMgdG8gYHVuZGVmaW5lZGAgdGhlcmVmb3JlIG5laXRoZXIgcmVnaXN0ZXJzIHVzYWdlIG5vclxuICAgKiBsZWF2ZXMgYW55dGhpbmcgYmVoaW5kIGluIHRoZSBzeW50aGVzaXplZCBhdHRyaWJ1dGUgLSB0aGUgb21pc3Npb25cbiAgICogYmVoYXZlcyBleGFjdGx5IGFzIGlmIHRoZSBhdHRyaWJ1dGUgaGFkIG5ldmVyIGJlZW4gc2V0LlxuICAgKlxuICAgKiBSZWdpc3RyYXRpb24gZ29lcyB0aHJvdWdoIGBfcmVnaXN0ZXJSZXNvbHZlRGlzY292ZXJlZFByb3ZpZGVyRmVhdHVyZVVzYWdlYFxuICAgKiByYXRoZXIgdGhhbiBgcmVnaXN0ZXJQcm92aWRlckZlYXR1cmVVc2FnZWA6IHVzYWdlIGhlcmUgaXMgb25seSBrbm93biBhdFxuICAgKiByZXNvbHZlIHRpbWUsIGFuZCBhIGdpdmVuIGVsZW1lbnQgY2FuIGJlIHJlc29sdmVkIGFjcm9zcyBtYW55XG4gICAqIHN5bnRoZXNpcyBwYXNzZXMgb3ZlciBpdHMgbGlmZXRpbWUgKHJlcGVhdGVkIGBhcHAuc3ludGgoKWAgY2FsbHMsXG4gICAqIHRlc3RzIHJldXNpbmcgYSBjb25zdHJ1Y3QgdHJlZSksIHNvIGl0IG11c3QgcmVwcmVzZW50IG9ubHkgdGhlIENVUlJFTlRcbiAgICogcGFzcyByYXRoZXIgdGhhbiBhY2N1bXVsYXRlIGZvcmV2ZXIuIEV2ZXJ5IHZhbGlkYXRpb24tZW5hYmxlZCBlbnRyeVxuICAgKiBwb2ludCAoYEFwcC5zeW50aGA7IGBUZXN0aW5nLnN5bnRoYC9gc3ludGhIY2xgIHdpdGggdmFsaWRhdGlvbnM7XG4gICAqIGBTdGFja1N5bnRoZXNpemVyLnN5bnRoZXNpemVgKSBydW5zIGEgcHJlcGFyZSBzdGVwIHRoYXQgZGVhY3RpdmF0ZXMgYW55XG4gICAqIHN0YWxlIHJlZ2lzdHJhdGlvbiBhbmQgdGhlbiByZXNvbHZlcyBldmVyeSBlbGVtZW50J3MgYHRvVGVycmFmb3JtKClgXG4gICAqIGJlZm9yZSB0aGF0IHNhbWUgZW50cnkgcG9pbnQncyB2YWxpZGF0aW9ucyBydW4gLSBzZWVcbiAgICogYFRlcnJhZm9ybVN0YWNrLl9ydW5QcmVwYXJpbmdSZXNvbHZlYCAtIHNvIHdoYXRldmVyIHRoaXMgY2xvc3VyZVxuICAgKiAocmUtKXJlZ2lzdGVycyBkdXJpbmcgdGhhdCBwcmVwYXJlIHN0ZXAgaXMgYWx3YXlzIHZpc2libGUgdG8gdGhlXG4gICAqIHZhbGlkYXRpb24gdGhhdCByZWFkcyBpdCBhZnRlcndhcmRzLCBhbmQgbm90aGluZyBsZWZ0IG92ZXIgZnJvbSBhblxuICAgKiBlYXJsaWVyIHBhc3MgbGVha3MgaW50byB0aGUgY3VycmVudCBvbmUuXG4gICAqL1xuICBwcm90ZWN0ZWQgbWFya1dyaXRlT25seUF0dHJpYnV0ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGlvblN0YWNrOiBjYXB0dXJlQ3JlYXRpb25TdGFjaygpLFxuICAgICAgLy8gQXJyb3cgZnVuY3Rpb246IGB0aGlzYCBzdGF5cyB0aGUgcmVzb3VyY2UgbGV4aWNhbGx5LiBgdG9TdHJpbmcoKWBcbiAgICAgIC8vIGJlbG93IG11c3QgcmVtYWluIGEgc2hvcnRoYW5kIG1ldGhvZCBpbnN0ZWFkIC0gaXRzIGB0aGlzYCBpcyB0aGVcbiAgICAgIC8vIHdyYXBwZXIgdG9rZW4gb2JqZWN0IGJlaW5nIHN0cmluZ2lmaWVkLlxuICAgICAgcmVzb2x2ZTogKGNvbnRleHQ6IElSZXNvbHZlQ29udGV4dCk6IGFueSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gY29udGV4dC5yZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgaWYgKHJlc29sdmVkICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9yZWdpc3RlclJlc29sdmVEaXNjb3ZlcmVkUHJvdmlkZXJGZWF0dXJlVXNhZ2UoXG4gICAgICAgICAgICBQcm92aWRlckZlYXR1cmUuV1JJVEVfT05MWV9BVFRSSUJVVEVTLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgfSxcbiAgICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSBhcyBJUmVzb2x2YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoaXMgcmVzb3VyY2UgdG8gdGhlIHRlcnJhZm9ybSBKU09OIG91dHB1dC5cbiAgICovXG4gIHB1YmxpYyB0b1RlcnJhZm9ybSgpOiBhbnkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkZWVwTWVyZ2UoXG4gICAgICBwcm9jZXNzRHluYW1pY0F0dHJpYnV0ZXModGhpcy5zeW50aGVzaXplQXR0cmlidXRlcygpKSxcbiAgICAgIGtleXNUb1NuYWtlQ2FzZSh0aGlzLnRlcnJhZm9ybU1ldGFBcmd1bWVudHMpLFxuICAgICAge1xuICAgICAgICBwcm92aXNpb25lcjogdGhpcy5wcm92aXNpb25lcnM/Lm1hcCgoeyB0eXBlLCAuLi5wcm9wcyB9KSA9PiAoe1xuICAgICAgICAgIFt0eXBlXToga2V5c1RvU25ha2VDYXNlKHByb3BzKSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICAgIHRoaXMucmF3T3ZlcnJpZGVzLFxuICAgICk7XG5cbiAgICBhdHRyaWJ1dGVzW1wiLy9cIl0gPSB7XG4gICAgICAuLi4oYXR0cmlidXRlc1tcIi8vXCJdID8/IHt9KSxcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0Tm9kZU1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjb25zdCBtb3ZlZEJsb2NrID0gdGhpcy5fYnVpbGRNb3ZlZEJsb2NrKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc291cmNlOiB0aGlzLl9oYXNNb3ZlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIFt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZV06IHtcbiAgICAgICAgICAgICAgW3RoaXMuZnJpZW5kbHlVbmlxdWVJZF06IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICBtb3ZlZDogbW92ZWRCbG9ja1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdG86IG1vdmVkQmxvY2sudG8sXG4gICAgICAgICAgICAgIGZyb206IG1vdmVkQmxvY2suZnJvbSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGltcG9ydDogdGhpcy5faW1wb3J0ZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLl9pbXBvcnRlZC5wcm92aWRlcj8uZnFuLFxuICAgICAgICAgICAgICBpZDogdGhpcy5faW1wb3J0ZWQuaWQsXG4gICAgICAgICAgICAgIHRvOiBgJHt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZX0uJHt0aGlzLmZyaWVuZGx5VW5pcXVlSWR9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHRvSGNsVGVycmFmb3JtKCk6IGFueSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGRlZXBNZXJnZShcbiAgICAgIHByb2Nlc3NEeW5hbWljQXR0cmlidXRlc0ZvckhjbCh0aGlzLnN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCkpLFxuICAgICAga2V5c1RvU25ha2VDYXNlKHRoaXMudGVycmFmb3JtTWV0YUFyZ3VtZW50cyksXG4gICAgICB7XG4gICAgICAgIHByb3Zpc2lvbmVyOiB0aGlzLnByb3Zpc2lvbmVycz8ubWFwKCh7IHR5cGUsIC4uLnByb3BzIH0pID0+ICh7XG4gICAgICAgICAgW3R5cGVdOiB7XG4gICAgICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgdmFsdWU6IGtleXNUb1NuYWtlQ2FzZShwcm9wcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICAgIHRoaXMucmF3T3ZlcnJpZGVzLFxuICAgICk7XG5cbiAgICBhdHRyaWJ1dGVzW1wiLy9cIl0gPSB7XG4gICAgICAuLi4oYXR0cmlidXRlc1tcIi8vXCJdID8/IHt9KSxcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0Tm9kZU1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjb25zdCBtb3ZlZEJsb2NrID0gdGhpcy5fYnVpbGRNb3ZlZEJsb2NrKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc291cmNlOiB0aGlzLl9oYXNNb3ZlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIFt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZV06IHtcbiAgICAgICAgICAgICAgW3RoaXMuZnJpZW5kbHlVbmlxdWVJZF06IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICBtb3ZlZDogbW92ZWRCbG9ja1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdG86IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbW92ZWRCbG9jay50byxcbiAgICAgICAgICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwicmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbW92ZWRCbG9jay5mcm9tLFxuICAgICAgICAgICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgICAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGltcG9ydDogdGhpcy5faW1wb3J0ZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRvOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgICAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5faW1wb3J0ZWQuaWQsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwcm92aWRlcjogdGhpcy5faW1wb3J0ZWQucHJvdmlkZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2ltcG9ydGVkLnByb3ZpZGVyLmZxbixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHRvTWV0YWRhdGEoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgb3ZlcnJpZGVzOiBPYmplY3Qua2V5cyh0aGlzLnJhd092ZXJyaWRlcykubGVuZ3RoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgW3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlXTogT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBpbXBvcnRzOiB0aGlzLl9pbXBvcnRlZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZV06IFt0aGlzLmZyaWVuZGx5VW5pcXVlSWRdLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBtb3ZlZDpcbiAgICAgICAgdGhpcy5fbW92ZWRCeVRhcmdldCB8fCB0aGlzLl9tb3ZlZEJ5SWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgW3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlXTogW3RoaXMuZnJpZW5kbHlVbmlxdWVJZF0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlZihcbiAgICAgIGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH0ke1xuICAgICAgICB0aGlzLmZvckVhY2ggPyBcIi4qXCIgOiBcIlwiXG4gICAgICB9LiR7dGVycmFmb3JtQXR0cmlidXRlfWAsXG4gICAgICB0aGlzLmNka3RmU3RhY2ssXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpbXBvcnRGcm9tKGlkOiBzdHJpbmcsIHByb3ZpZGVyPzogVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICBpZiAoIXRoaXMuX2ltcG9ydGVkKSB7XG4gICAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihcbiAgICAgICAgbmV3IFZhbGlkYXRlRmVhdHVyZVRhcmdldFN1cHBvcnQodGhpcywgXCJUaGUgaW1wb3J0IGJsb2NrXCIsIHtcbiAgICAgICAgICB0ZXJyYWZvcm06IFwiPj0xLjUuMFwiLFxuICAgICAgICAgIG9wZW50b2Z1OiBcIj49MS42LjBcIixcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9pbXBvcnRlZCA9IHsgaWQsIHByb3ZpZGVyIH07XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZXNvdXJjZVRhcmdldChtb3ZlVGFyZ2V0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVGVycmFmb3JtU3RhY2sub2YodGhpcykubW92ZVRhcmdldHMuZ2V0UmVzb3VyY2VCeVRhcmdldChtb3ZlVGFyZ2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFJlc291cmNlVGFyZ2V0KG1vdmVUYXJnZXQ6IHN0cmluZykge1xuICAgIHJldHVybiBUZXJyYWZvcm1TdGFjay5vZih0aGlzKS5tb3ZlVGFyZ2V0cy5hZGRSZXNvdXJjZVRhcmdldChcbiAgICAgIHRoaXMsXG4gICAgICBtb3ZlVGFyZ2V0LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZE1vdmVkQmxvY2tCeVRhcmdldChcbiAgICBtb3ZlZFRhcmdldDogVGVycmFmb3JtUmVzb3VyY2VNb3ZlQnlUYXJnZXQsXG4gICk6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHsgbW92ZVRhcmdldCwgaW5kZXggfSA9IG1vdmVkVGFyZ2V0O1xuICAgIGNvbnN0IHJlc291cmNlVG9Nb3ZlVG8gPSB0aGlzLl9nZXRSZXNvdXJjZVRhcmdldChtb3ZlVGFyZ2V0KTtcbiAgICBpZiAodGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGUgIT09IHJlc291cmNlVG9Nb3ZlVG8udGVycmFmb3JtUmVzb3VyY2VUeXBlKSB7XG4gICAgICB0aHJvdyBtb3ZlZFRvUmVzb3VyY2VPZkRpZmZlcmVudFR5cGUoXG4gICAgICAgIG1vdmVUYXJnZXQsXG4gICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLFxuICAgICAgICByZXNvdXJjZVRvTW92ZVRvLnRlcnJhZm9ybVJlc291cmNlVHlwZSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHRvID0gaW5kZXhcbiAgICAgID8gdHlwZW9mIGluZGV4ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gYCR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9LiR7cmVzb3VyY2VUb01vdmVUby5mcmllbmRseVVuaXF1ZUlkfVtcIiR7aW5kZXh9XCJdYFxuICAgICAgICA6IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3Jlc291cmNlVG9Nb3ZlVG8uZnJpZW5kbHlVbmlxdWVJZH1bJHtpbmRleH1dYFxuICAgICAgOiBgJHt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZX0uJHtyZXNvdXJjZVRvTW92ZVRvLmZyaWVuZGx5VW5pcXVlSWR9YDtcbiAgICBjb25zdCBmcm9tID0gYCR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9LiR7dGhpcy5mcmllbmRseVVuaXF1ZUlkfWA7XG4gICAgcmV0dXJuIHsgdG8sIGZyb20gfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkTW92ZWRCbG9jaygpOiB7IHRvOiBzdHJpbmc7IGZyb206IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fbW92ZWRCeVRhcmdldCAmJiB0aGlzLl9tb3ZlZEJ5SWQpIHtcbiAgICAgIHRocm93IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5VGFyZ2V0QW5kSWQoXG4gICAgICAgIHRoaXMubm9kZS5pZCxcbiAgICAgICAgdGhpcy5fbW92ZWRCeVRhcmdldC5tb3ZlVGFyZ2V0LFxuICAgICAgICB7IHRvOiB0aGlzLl9tb3ZlZEJ5SWQudG8sIGZyb206IHRoaXMuX21vdmVkQnlJZC5mcm9tIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbW92ZWRCeVRhcmdldCkge1xuICAgICAgY29uc3QgbW92ZWRCbG9ja0J5VGFyZ2V0ID0gdGhpcy5fYnVpbGRNb3ZlZEJsb2NrQnlUYXJnZXQoXG4gICAgICAgIHRoaXMuX21vdmVkQnlUYXJnZXQsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgdG86IG1vdmVkQmxvY2tCeVRhcmdldC50bywgZnJvbTogbW92ZWRCbG9ja0J5VGFyZ2V0LmZyb20gfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX21vdmVkQnlJZCkge1xuICAgICAgcmV0dXJuIHsgdG86IHRoaXMuX21vdmVkQnlJZC50bywgZnJvbTogdGhpcy5fbW92ZWRCeUlkLmZyb20gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgdGhpcyByZXNvdXJjZSB0byB0aGUgdGFyZ2V0IHJlc291cmNlIGdpdmVuIGJ5IG1vdmVUYXJnZXQuXG4gICAqIEBwYXJhbSBtb3ZlVGFyZ2V0IFRoZSBwcmV2aW91c2x5IHNldCB1c2VyIGRlZmluZWQgc3RyaW5nIHNldCBieSAuYWRkTW92ZVRhcmdldCgpIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc291cmNlIHRvIG1vdmUgdG8uXG4gICAqIEBwYXJhbSBpbmRleCBPcHRpb25hbCBUaGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUga2V5IHRoZSByZXNvdXJjZSBpcyB0byBhcHBlYXIgaW4gdGhlIGZvcmVhY2ggb2YgYSByZXNvdXJjZSB0byBtb3ZlIHRvXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKG1vdmVUYXJnZXQ6IHN0cmluZywgaW5kZXg/OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fbW92ZWRCeVRhcmdldCkge1xuICAgICAgdGhyb3cgcmVzb3VyY2VHaXZlblR3b01vdmVPcGVyYXRpb25zQnlUYXJnZXQoXG4gICAgICAgIHRoaXMuZnJpZW5kbHlVbmlxdWVJZCxcbiAgICAgICAgdGhpcy5fbW92ZWRCeVRhcmdldC5tb3ZlVGFyZ2V0LFxuICAgICAgICBtb3ZlVGFyZ2V0LFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbW92ZWRCeVRhcmdldCA9IHsgbW92ZVRhcmdldCwgaW5kZXggfTtcbiAgICB0aGlzLl9oYXNNb3ZlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXIgZGVmaW5lZCBtb3ZlVGFyZ2V0IHN0cmluZyB0byB0aGlzIHJlc291cmNlIHRvIGJlIGxhdGVyIHVzZWQgaW4gLm1vdmVUbyhtb3ZlVGFyZ2V0KSB0byByZXNvbHZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbW92ZS5cbiAgICogQHBhcmFtIG1vdmVUYXJnZXQgVGhlIHN0cmluZyBtb3ZlIHRhcmdldCB0aGF0IHdpbGwgY29ycmVzcG9uZCB0byB0aGlzIHJlc291cmNlXG4gICAqL1xuICBwdWJsaWMgYWRkTW92ZVRhcmdldChtb3ZlVGFyZ2V0OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hZGRSZXNvdXJjZVRhcmdldChtb3ZlVGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGlzIHJlc291cmNlIHRvIHRoZSByZXNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIFwiaWRcIlxuICAgKiBAcGFyYW0gaWQgRnVsbCBpZCBvZiByZXNvdXJjZSB0byBtb3ZlIHRvLCBlLmcuIFwiYXdzX3MzX2J1Y2tldC5leGFtcGxlXCJcbiAgICovXG4gIHB1YmxpYyBtb3ZlVG9JZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuX21vdmVkQnlJZCkge1xuICAgICAgdGhyb3cgcmVzb3VyY2VHaXZlblR3b01vdmVPcGVyYXRpb25zQnlJZChcbiAgICAgICAgdGhpcy5ub2RlLmlkLFxuICAgICAgICB7IHRvOiB0aGlzLl9tb3ZlZEJ5SWQuZnJvbSwgZnJvbTogdGhpcy5fbW92ZWRCeUlkLnRvIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0bzogaWQsXG4gICAgICAgICAgZnJvbTogYCR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9LiR7dGhpcy5mcmllbmRseVVuaXF1ZUlkfWAsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX21vdmVkQnlJZCA9IHtcbiAgICAgIHRvOiBpZCxcbiAgICAgIGZyb206IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgIH07XG4gICAgdGhpcy5faGFzTW92ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIHJlc291cmNlIGNvcnJlc3BvbmRpbmcgdG8gXCJpZFwiIHRvIHRoaXMgcmVzb3VyY2UuIE5vdGUgdGhhdCB0aGUgcmVzb3VyY2UgYmVpbmcgbW92ZWQgZnJvbSBtdXN0IGJlIG1hcmtlZCBhcyBtb3ZlZCB1c2luZyBpdHMgaW5zdGFuY2UgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBpZCBGdWxsIGlkIG9mIHJlc291cmNlIGJlaW5nIG1vdmVkIGZyb20sIGUuZy4gXCJhd3NfczNfYnVja2V0LmV4YW1wbGVcIlxuICAgKi9cbiAgcHVibGljIG1vdmVGcm9tSWQoaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl9tb3ZlZEJ5SWQpIHtcbiAgICAgIHRocm93IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5SWQoXG4gICAgICAgIHRoaXMubm9kZS5pZCxcbiAgICAgICAgeyB0bzogdGhpcy5fbW92ZWRCeUlkLmZyb20sIGZyb206IHRoaXMuX21vdmVkQnlJZC50byB9LFxuICAgICAgICB7XG4gICAgICAgICAgdG86IGlkLFxuICAgICAgICAgIGZyb206IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbW92ZWRCeUlkID0ge1xuICAgICAgdG86IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgICAgZnJvbTogaWQsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS1yZXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzRUEsb0RBMEJDOztBQTdGRCxxQ0FBdUM7QUFDdkMsMkRBQXVEO0FBRXZELGlDQUtnQjtBQUVoQixpREFBaUQ7QUFFakQsOERBQW9FO0FBQ3BFLGlGQUFpRTtBQUlqRSx1REFBbUQ7QUFLbkQsbUNBQXNDO0FBTXRDLG1FQUE2RTtBQUM3RSx1REFBbUQ7QUFDbkQscUNBS2tCO0FBRWxCLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBeUJ4RTs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLFNBQXNDO0lBRXRDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPO1FBQ0wsR0FBRyxTQUFTO1FBQ1osR0FBRyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNO1lBQ3ZDLENBQUMsQ0FBQztnQkFDRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQzNELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzFCLE9BQU8sYUFBSSxDQUFDLFdBQVcsQ0FBQzs0QkFDdEIsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0NBQ25CLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dDQUM5QixPQUFPLENBQUMsQ0FBQzs0QkFDWCxDQUFDO3lCQUNGLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxJQUFBLHlCQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO2FBQ0g7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LEVBQUUsRUFDdEQ7Z0JBQ0UsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTthQUMvRCxDQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzVELElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztJQUNKLENBQUM7O0FBemRILDhDQTBkQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTGF6eSwgVG9rZW4gfSBmcm9tIFwiLi90b2tlbnNcIjtcbmltcG9ydCB7IFRlcnJhZm9ybUVsZW1lbnQgfSBmcm9tIFwiLi90ZXJyYWZvcm0tZWxlbWVudFwiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXIgfSBmcm9tIFwiLi90ZXJyYWZvcm0tcHJvdmlkZXJcIjtcbmltcG9ydCB7XG4gIGtleXNUb1NuYWtlQ2FzZSxcbiAgZGVlcE1lcmdlLFxuICBwcm9jZXNzRHluYW1pY0F0dHJpYnV0ZXMsXG4gIHByb2Nlc3NEeW5hbWljQXR0cmlidXRlc0ZvckhjbCxcbn0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgSVRlcnJhZm9ybURlcGVuZGFibGUgfSBmcm9tIFwiLi90ZXJyYWZvcm0tZGVwZW5kYWJsZVwiO1xuaW1wb3J0IHsgcmVmLCBkZXBlbmRhYmxlIH0gZnJvbSBcIi4vdGZFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJUmVzb2x2YWJsZSwgSVJlc29sdmVDb250ZXh0IH0gZnJvbSBcIi4vdG9rZW5zL3Jlc29sdmFibGVcIjtcbmltcG9ydCB7IGNhcHR1cmVDcmVhdGlvblN0YWNrIH0gZnJvbSBcIi4vdG9rZW5zL3ByaXZhdGUvc3RhY2stdHJhY2VcIjtcbmltcG9ydCB7IFByb3ZpZGVyRmVhdHVyZSB9IGZyb20gXCIuL3Byb3ZpZGVyLWZlYXR1cmUtY29uc3RyYWludHNcIjtcbmltcG9ydCB7IElJbnRlcnBvbGF0aW5nUGFyZW50IH0gZnJvbSBcIi4vdGVycmFmb3JtLWFkZHJlc3NhYmxlXCI7XG5pbXBvcnQgeyBJVGVycmFmb3JtSXRlcmF0b3IgfSBmcm9tIFwiLi90ZXJyYWZvcm0taXRlcmF0b3JcIjtcbmltcG9ydCB7IFByZWNvbmRpdGlvbiwgUG9zdGNvbmRpdGlvbiB9IGZyb20gXCIuL3RlcnJhZm9ybS1jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Db3VudCB9IGZyb20gXCIuL3RlcnJhZm9ybS1jb3VudFwiO1xuaW1wb3J0IHtcbiAgU1NIUHJvdmlzaW9uZXJDb25uZWN0aW9uLFxuICBXaW5ybVByb3Zpc2lvbmVyQ29ubmVjdGlvbixcbn0gZnJvbSBcIi4vdGVycmFmb3JtLXByb3Zpc2lvbmVyXCI7XG5pbXBvcnQgeyBvayBhcyBhc3NlcnQgfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQge1xuICBGaWxlUHJvdmlzaW9uZXIsXG4gIExvY2FsRXhlY1Byb3Zpc2lvbmVyLFxuICBSZW1vdGVFeGVjUHJvdmlzaW9uZXIsXG59IGZyb20gXCIuL3RlcnJhZm9ybS1wcm92aXNpb25lclwiO1xuaW1wb3J0IHsgVmFsaWRhdGVGZWF0dXJlVGFyZ2V0U3VwcG9ydCB9IGZyb20gXCIuL3ZhbGlkYXRpb25zL3RhcmdldC12ZXJzaW9uc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiLi90ZXJyYWZvcm0tc3RhY2tcIjtcbmltcG9ydCB7XG4gIG1vdmVkVG9SZXNvdXJjZU9mRGlmZmVyZW50VHlwZSxcbiAgcmVzb3VyY2VHaXZlblR3b01vdmVPcGVyYXRpb25zQnlJZCxcbiAgcmVzb3VyY2VHaXZlblR3b01vdmVPcGVyYXRpb25zQnlUYXJnZXQsXG4gIHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5VGFyZ2V0QW5kSWQsXG59IGZyb20gXCIuL2Vycm9yc1wiO1xuXG5jb25zdCBURVJSQUZPUk1fUkVTT1VSQ0VfU1lNQk9MID0gU3ltYm9sLmZvcihcImNka3RmL1RlcnJhZm9ybVJlc291cmNlXCIpO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUZXJyYWZvcm1SZXNvdXJjZSB7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybVJlc291cmNlVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBmcW46IHN0cmluZztcbiAgcmVhZG9ubHkgZnJpZW5kbHlVbmlxdWVJZDogc3RyaW5nO1xuXG4gIGRlcGVuZHNPbj86IHN0cmluZ1tdO1xuICBjb3VudD86IG51bWJlciB8IFRlcnJhZm9ybUNvdW50O1xuICBwcm92aWRlcj86IFRlcnJhZm9ybVByb3ZpZGVyO1xuICBsaWZlY3ljbGU/OiBUZXJyYWZvcm1SZXNvdXJjZUxpZmVjeWNsZTtcbiAgZm9yRWFjaD86IElUZXJyYWZvcm1JdGVyYXRvcjtcblxuICBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKTogSVJlc29sdmFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUmVzb3VyY2VMaWZlY3ljbGUge1xuICByZWFkb25seSBjcmVhdGVCZWZvcmVEZXN0cm95PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHJldmVudERlc3Ryb3k/OiBib29sZWFuO1xuICByZWFkb25seSBpZ25vcmVDaGFuZ2VzPzogc3RyaW5nW10gfCBcImFsbFwiO1xuICByZWFkb25seSByZXBsYWNlVHJpZ2dlcmVkQnk/OiBBcnJheTxJVGVycmFmb3JtRGVwZW5kYWJsZSB8IHN0cmluZz47XG4gIHJlYWRvbmx5IHByZWNvbmRpdGlvbj86IFByZWNvbmRpdGlvbltdO1xuICByZWFkb25seSBwb3N0Y29uZGl0aW9uPzogUG9zdGNvbmRpdGlvbltdO1xufVxuXG4vKipcbiAqIHByZXBhcmVzIGEgbGlmZWN5Y2xlIG9iamVjdCBmb3IgYmVpbmcgcmVuZGVyZWQgYXMgSlNPTlxuICogY3VycmVudGx5IHRoaXMgZnVuY3Rpb246XG4gKiAgLSBjb252ZXJ0cyBhbGwgcmVwbGFjZVRyaWdnZXJlZEJ5IGl0ZW1zIHRvIHBsYWluIHJlZmVyZW5jZXMgKHdpdGhvdXQgdGhlICR7fSB3cmFwcGVyLCBsaWtlIGRlcGVuZHNPbilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpZmVjeWNsZVRvVGVycmFmb3JtKFxuICBsaWZlY3ljbGU/OiBUZXJyYWZvcm1SZXNvdXJjZUxpZmVjeWNsZSxcbik6IFRlcnJhZm9ybVJlc291cmNlTGlmZWN5Y2xlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFsaWZlY3ljbGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5saWZlY3ljbGUsXG4gICAgLi4uKGxpZmVjeWNsZT8ucmVwbGFjZVRyaWdnZXJlZEJ5Py5sZW5ndGhcbiAgICAgID8ge1xuICAgICAgICAgIHJlcGxhY2VUcmlnZ2VyZWRCeTogbGlmZWN5Y2xlPy5yZXBsYWNlVHJpZ2dlcmVkQnk/Lm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgICAgICAgICAgICAgICBwcm9kdWNlOiAoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29udGV4dC5zdXBwcmVzc0JyYWNlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXBlbmRhYmxlKHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZCksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtTWV0YUFyZ3VtZW50cyB7XG4gIHJlYWRvbmx5IGRlcGVuZHNPbj86IElUZXJyYWZvcm1EZXBlbmRhYmxlW107XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyIHwgVGVycmFmb3JtQ291bnQ7XG4gIHJlYWRvbmx5IHByb3ZpZGVyPzogVGVycmFmb3JtUHJvdmlkZXI7XG4gIHJlYWRvbmx5IGxpZmVjeWNsZT86IFRlcnJhZm9ybVJlc291cmNlTGlmZWN5Y2xlO1xuICByZWFkb25seSBmb3JFYWNoPzogSVRlcnJhZm9ybUl0ZXJhdG9yO1xuICByZWFkb25seSBwcm92aXNpb25lcnM/OiBBcnJheTxcbiAgICBGaWxlUHJvdmlzaW9uZXIgfCBMb2NhbEV4ZWNQcm92aXNpb25lciB8IFJlbW90ZUV4ZWNQcm92aXNpb25lclxuICA+O1xuICByZWFkb25seSBjb25uZWN0aW9uPzogU1NIUHJvdmlzaW9uZXJDb25uZWN0aW9uIHwgV2lucm1Qcm92aXNpb25lckNvbm5lY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3JNZXRhZGF0YSB7XG4gIHJlYWRvbmx5IHByb3ZpZGVyTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwcm92aWRlclZlcnNpb25Db25zdHJhaW50Pzogc3RyaW5nO1xuICByZWFkb25seSBwcm92aWRlclZlcnNpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUmVzb3VyY2VDb25maWcgZXh0ZW5kcyBUZXJyYWZvcm1NZXRhQXJndW1lbnRzIHtcbiAgcmVhZG9ubHkgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhPzogVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3JNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1SZXNvdXJjZU1vdmVCeVRhcmdldCB7XG4gIHJlYWRvbmx5IG1vdmVUYXJnZXQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5kZXg/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtUmVzb3VyY2VNb3ZlQnlJZCB7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1SZXNvdXJjZUltcG9ydCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3ZpZGVyPzogVGVycmFmb3JtUHJvdmlkZXI7XG59XG5cbi8qKlxuICogQSBUZXJyYWZvcm0gbWFuYWdlZCByZXNvdXJjZSAoYHJlc291cmNlYCBibG9jayk6IGFuIGluZnJhc3RydWN0dXJlIG9iamVjdCB3aG9zZSBsaWZlY3ljbGUgVGVycmFmb3JtIG1hbmFnZXNcbiAqIHRocm91Z2ggYSBwcm92aWRlciBhbmQgdHJhY2tzIGluIHN0YXRlLlxuICovXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUmVzb3VyY2VcbiAgZXh0ZW5kcyBUZXJyYWZvcm1FbGVtZW50XG4gIGltcGxlbWVudHMgSVRlcnJhZm9ybVJlc291cmNlLCBJVGVycmFmb3JtRGVwZW5kYWJsZSwgSUludGVycG9sYXRpbmdQYXJlbnRcbntcbiAgcHVibGljIHJlYWRvbmx5IHRlcnJhZm9ybVJlc291cmNlVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE/OiBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvck1ldGFkYXRhO1xuXG4gIC8vIFRlcnJhZm9ybU1ldGFBcmd1bWVudHNcblxuICBwdWJsaWMgZGVwZW5kc09uPzogc3RyaW5nW107XG4gIHB1YmxpYyBjb3VudD86IG51bWJlciB8IFRlcnJhZm9ybUNvdW50O1xuICBwdWJsaWMgcHJvdmlkZXI/OiBUZXJyYWZvcm1Qcm92aWRlcjtcbiAgcHVibGljIGxpZmVjeWNsZT86IFRlcnJhZm9ybVJlc291cmNlTGlmZWN5Y2xlO1xuICBwdWJsaWMgZm9yRWFjaD86IElUZXJyYWZvcm1JdGVyYXRvcjtcbiAgcHVibGljIGNvbm5lY3Rpb24/OiBTU0hQcm92aXNpb25lckNvbm5lY3Rpb24gfCBXaW5ybVByb3Zpc2lvbmVyQ29ubmVjdGlvbjtcbiAgcHVibGljIHByb3Zpc2lvbmVycz86IEFycmF5PFxuICAgIEZpbGVQcm92aXNpb25lciB8IExvY2FsRXhlY1Byb3Zpc2lvbmVyIHwgUmVtb3RlRXhlY1Byb3Zpc2lvbmVyXG4gID47XG4gIHByaXZhdGUgX2ltcG9ydGVkPzogVGVycmFmb3JtUmVzb3VyY2VJbXBvcnQ7XG4gIHByaXZhdGUgX21vdmVkQnlUYXJnZXQ/OiBUZXJyYWZvcm1SZXNvdXJjZU1vdmVCeVRhcmdldDtcbiAgcHJpdmF0ZSBfbW92ZWRCeUlkPzogVGVycmFmb3JtUmVzb3VyY2VNb3ZlQnlJZDtcbiAgcHJpdmF0ZSBfaGFzTW92ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IFRlcnJhZm9ybVJlc291cmNlQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBjb25maWcudGVycmFmb3JtUmVzb3VyY2VUeXBlKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgVEVSUkFGT1JNX1JFU09VUkNFX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlID0gY29uZmlnLnRlcnJhZm9ybVJlc291cmNlVHlwZTtcbiAgICB0aGlzLnRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhID0gY29uZmlnLnRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZy5kZXBlbmRzT24pKSB7XG4gICAgICB0aGlzLmRlcGVuZHNPbiA9IGNvbmZpZy5kZXBlbmRzT24ubWFwKChkZXBlbmRlbmN5KSA9PlxuICAgICAgICBkZXBlbmRhYmxlKGRlcGVuZGVuY3kpLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb3VudCA9IGNvbmZpZy5jb3VudDtcbiAgICB0aGlzLnByb3ZpZGVyID0gY29uZmlnLnByb3ZpZGVyO1xuICAgIHRoaXMubGlmZWN5Y2xlID0gY29uZmlnLmxpZmVjeWNsZTtcbiAgICB0aGlzLmZvckVhY2ggPSBjb25maWcuZm9yRWFjaDtcbiAgICB0aGlzLnByb3Zpc2lvbmVycyA9IGNvbmZpZy5wcm92aXNpb25lcnM7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29uZmlnLmNvbm5lY3Rpb247XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzVGVycmFmb3JtUmVzb3VyY2UoeDogYW55KTogeCBpcyBUZXJyYWZvcm1SZXNvdXJjZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgVEVSUkFGT1JNX1JFU09VUkNFX1NZTUJPTCBpbiB4XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNSZXNvdXJjZU1vdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vdmVkQnlJZCB8fCB0aGlzLl9tb3ZlZEJ5VGFyZ2V0O1xuICB9XG5cbiAgcHVibGljIGdldFN0cmluZ0F0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMaXN0QXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTGlzdCh0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm9vbGVhbkF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1iZXJMaXN0QXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyTGlzdChcbiAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSh0ZXJyYWZvcm1BdHRyaWJ1dGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RyaW5nTWFwQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFRva2VuLmFzU3RyaW5nTWFwKFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1iZXJNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXJNYXAoXG4gICAgICB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEJvb2xlYW5NYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNCb29sZWFuTWFwKFxuICAgICAgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbnlNYXBBdHRyaWJ1dGUodGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVG9rZW4uYXNBbnlNYXAodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCB0ZXJyYWZvcm1NZXRhQXJndW1lbnRzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBhc3NlcnQoXG4gICAgICAhdGhpcy5mb3JFYWNoIHx8IHR5cGVvZiB0aGlzLmNvdW50ID09PSBcInVuZGVmaW5lZFwiLFxuICAgICAgYGZvckVhY2ggYW5kIGNvdW50IGFyZSBib3RoIHNldCwgYnV0IHRoZXkgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gWW91IGNhbiBvbmx5IHVzZSBlaXRoZXIgb2YgdGhlbS4gQ2hlY2sgdGhlIHJlc291cmNlIGF0IHBhdGg6ICR7dGhpcy5ub2RlLnBhdGh9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5kZXBlbmRzT24sXG4gICAgICBjb3VudDogVGVycmFmb3JtQ291bnQuaXNUZXJyYWZvcm1Db3VudCh0aGlzLmNvdW50KVxuICAgICAgICA/IHRoaXMuY291bnQudG9UZXJyYWZvcm0oKVxuICAgICAgICA6IHRoaXMuY291bnQsXG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcj8uZnFuLFxuICAgICAgbGlmZWN5Y2xlOiBsaWZlY3ljbGVUb1RlcnJhZm9ybSh0aGlzLmxpZmVjeWNsZSksXG4gICAgICBmb3JFYWNoOiB0aGlzLmZvckVhY2g/Ll9nZXRGb3JFYWNoRXhwcmVzc2lvbigpLFxuICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uLFxuICAgIH07XG4gIH1cblxuICAvLyBqc2lpIGNhbid0IGhhbmRsZSBhYnN0cmFjdCBjbGFzc2VzP1xuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhIHdyaXRlLW9ubHkgYXR0cmlidXRlJ3MgYWxyZWFkeS1tYXBwZWQgdmFsdWUgc28gdGhhdFxuICAgKiBgUHJvdmlkZXJGZWF0dXJlLldSSVRFX09OTFlfQVRUUklCVVRFU2AgdXNhZ2UgaXMgcmVnaXN0ZXJlZCBhdFxuICAgKiAqcmVzb2x2ZSogdGltZSBpbnN0ZWFkIG9mIGF0IG11dGF0aW9uIHRpbWUgKHNldHRlci9jb25zdHJ1Y3RvcikuXG4gICAqIENhbGxlZCBieSBnZW5lcmF0ZWQgYmluZGluZ3MgZnJvbSBgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKWAgYW5kXG4gICAqIGBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpYCwgZS5nLlxuICAgKiBgc2VjcmV0X2tleV93bzogdGhpcy5tYXJrV3JpdGVPbmx5QXR0cmlidXRlKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3NlY3JldEtleVdvKSlgO1xuICAgKiBub3QgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuICAgKlxuICAgKiBgdW5kZWZpbmVkYCBwYXNzZXMgdGhyb3VnaCBjb21wbGV0ZWx5IHVuY2hhbmdlZCwgc28gdGhlIGV4aXN0aW5nXG4gICAqIHVuZGVmaW5lZC1maWx0ZXJpbmcgdGhhdCBvbWl0cyB1bnNldCBhdHRyaWJ1dGVzIGZyb20gc3ludGhlc2l6ZWRcbiAgICogb3V0cHV0IChzZWUgYHJlc29sdmUoKWAgaW4gYHRva2Vucy9wcml2YXRlL3Jlc29sdmUudHNgLCBhbmQgdGhlXG4gICAqIGB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkYCBmaWx0ZXIgaW4gZ2VuZXJhdGVkXG4gICAqIGBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpYCkga2VlcHMgd29ya2luZyB1bnRvdWNoZWQuIGBudWxsYCBpcyBhbHNvXG4gICAqIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZDogaXQgYWxyZWFkeSByZW5kZXJzIGFzIGFuIGV4cGxpY2l0XG4gICAqIG51bGwtb3V0IGFuZCBtdXN0IG5vdCBhcm0gdGhlIHZhbGlkYXRpb24gZWl0aGVyLlxuICAgKlxuICAgKiBBbnkgb3RoZXIgdmFsdWUgLSBpbmNsdWRpbmcgb25lIHRoYXQgd2lsbCBpdHNlbGYgcmVzb2x2ZSB0byBub3RoaW5nXG4gICAqIChlLmcuIGEgYExhenlgL2BJUmVzb2x2YWJsZWAgcHJvZHVjZXIgd2l0aCBubyB2YWx1ZSB0byBjb250cmlidXRlKSAtXG4gICAqIGlzIHdyYXBwZWQgaW4gYSB0b2tlbiB3aG9zZSBgcmVzb2x2ZSgpYCBkZWZlcnMgdG8gdGhlIHJlYWwgcmVzb2x2ZXJcbiAgICogZmlyc3QgYW5kIHJlZ2lzdGVycyB1c2FnZSBvbmx5IGlmIHdoYXQgY29tZXMgYmFjayBpcyBub3RcbiAgICogYG51bGxgL2B1bmRlZmluZWRgOyB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgdGhlbiByZXR1cm5lZCB1bmNoYW5nZWQsXG4gICAqIHNvIHdoYXQgYWN0dWFsbHkgcmVuZGVycyBpcyB1bnRvdWNoZWQgYnkgdGhpcyB3cmFwcGVyLiBBIHByb2R1Y2VyXG4gICAqIHRoYXQgcmVzb2x2ZXMgdG8gYHVuZGVmaW5lZGAgdGhlcmVmb3JlIG5laXRoZXIgcmVnaXN0ZXJzIHVzYWdlIG5vclxuICAgKiBsZWF2ZXMgYW55dGhpbmcgYmVoaW5kIGluIHRoZSBzeW50aGVzaXplZCBhdHRyaWJ1dGUgLSB0aGUgb21pc3Npb25cbiAgICogYmVoYXZlcyBleGFjdGx5IGFzIGlmIHRoZSBhdHRyaWJ1dGUgaGFkIG5ldmVyIGJlZW4gc2V0LlxuICAgKlxuICAgKiBSZWdpc3RyYXRpb24gZ29lcyB0aHJvdWdoIGBfcmVnaXN0ZXJSZXNvbHZlRGlzY292ZXJlZFByb3ZpZGVyRmVhdHVyZVVzYWdlYFxuICAgKiByYXRoZXIgdGhhbiBgcmVnaXN0ZXJQcm92aWRlckZlYXR1cmVVc2FnZWA6IHVzYWdlIGhlcmUgaXMgb25seSBrbm93biBhdFxuICAgKiByZXNvbHZlIHRpbWUsIGFuZCBhIGdpdmVuIGVsZW1lbnQgY2FuIGJlIHJlc29sdmVkIGFjcm9zcyBtYW55XG4gICAqIHN5bnRoZXNpcyBwYXNzZXMgb3ZlciBpdHMgbGlmZXRpbWUgKHJlcGVhdGVkIGBhcHAuc3ludGgoKWAgY2FsbHMsXG4gICAqIHRlc3RzIHJldXNpbmcgYSBjb25zdHJ1Y3QgdHJlZSksIHNvIGl0IG11c3QgcmVwcmVzZW50IG9ubHkgdGhlIENVUlJFTlRcbiAgICogcGFzcyByYXRoZXIgdGhhbiBhY2N1bXVsYXRlIGZvcmV2ZXIuIEV2ZXJ5IHZhbGlkYXRpb24tZW5hYmxlZCBlbnRyeVxuICAgKiBwb2ludCAoYEFwcC5zeW50aGA7IGBUZXN0aW5nLnN5bnRoYC9gc3ludGhIY2xgIHdpdGggdmFsaWRhdGlvbnM7XG4gICAqIGBTdGFja1N5bnRoZXNpemVyLnN5bnRoZXNpemVgKSBydW5zIGEgcHJlcGFyZSBzdGVwIHRoYXQgZGVhY3RpdmF0ZXMgYW55XG4gICAqIHN0YWxlIHJlZ2lzdHJhdGlvbiBhbmQgdGhlbiByZXNvbHZlcyBldmVyeSBlbGVtZW50J3MgYHRvVGVycmFmb3JtKClgXG4gICAqIGJlZm9yZSB0aGF0IHNhbWUgZW50cnkgcG9pbnQncyB2YWxpZGF0aW9ucyBydW4gLSBzZWVcbiAgICogYFRlcnJhZm9ybVN0YWNrLl9ydW5QcmVwYXJpbmdSZXNvbHZlYCAtIHNvIHdoYXRldmVyIHRoaXMgY2xvc3VyZVxuICAgKiAocmUtKXJlZ2lzdGVycyBkdXJpbmcgdGhhdCBwcmVwYXJlIHN0ZXAgaXMgYWx3YXlzIHZpc2libGUgdG8gdGhlXG4gICAqIHZhbGlkYXRpb24gdGhhdCByZWFkcyBpdCBhZnRlcndhcmRzLCBhbmQgbm90aGluZyBsZWZ0IG92ZXIgZnJvbSBhblxuICAgKiBlYXJsaWVyIHBhc3MgbGVha3MgaW50byB0aGUgY3VycmVudCBvbmUuXG4gICAqL1xuICBwcm90ZWN0ZWQgbWFya1dyaXRlT25seUF0dHJpYnV0ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGlvblN0YWNrOiBjYXB0dXJlQ3JlYXRpb25TdGFjaygpLFxuICAgICAgLy8gQXJyb3cgZnVuY3Rpb246IGB0aGlzYCBzdGF5cyB0aGUgcmVzb3VyY2UgbGV4aWNhbGx5LiBgdG9TdHJpbmcoKWBcbiAgICAgIC8vIGJlbG93IG11c3QgcmVtYWluIGEgc2hvcnRoYW5kIG1ldGhvZCBpbnN0ZWFkIC0gaXRzIGB0aGlzYCBpcyB0aGVcbiAgICAgIC8vIHdyYXBwZXIgdG9rZW4gb2JqZWN0IGJlaW5nIHN0cmluZ2lmaWVkLlxuICAgICAgcmVzb2x2ZTogKGNvbnRleHQ6IElSZXNvbHZlQ29udGV4dCk6IGFueSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gY29udGV4dC5yZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgaWYgKHJlc29sdmVkICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9yZWdpc3RlclJlc29sdmVEaXNjb3ZlcmVkUHJvdmlkZXJGZWF0dXJlVXNhZ2UoXG4gICAgICAgICAgICBQcm92aWRlckZlYXR1cmUuV1JJVEVfT05MWV9BVFRSSUJVVEVTLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgfSxcbiAgICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBUb2tlbi5hc1N0cmluZyh0aGlzKTtcbiAgICAgIH0sXG4gICAgfSBhcyBJUmVzb2x2YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoaXMgcmVzb3VyY2UgdG8gdGhlIHRlcnJhZm9ybSBKU09OIG91dHB1dC5cbiAgICovXG4gIHB1YmxpYyB0b1RlcnJhZm9ybSgpOiBhbnkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkZWVwTWVyZ2UoXG4gICAgICBwcm9jZXNzRHluYW1pY0F0dHJpYnV0ZXModGhpcy5zeW50aGVzaXplQXR0cmlidXRlcygpKSxcbiAgICAgIGtleXNUb1NuYWtlQ2FzZSh0aGlzLnRlcnJhZm9ybU1ldGFBcmd1bWVudHMpLFxuICAgICAge1xuICAgICAgICBwcm92aXNpb25lcjogdGhpcy5wcm92aXNpb25lcnM/Lm1hcCgoeyB0eXBlLCAuLi5wcm9wcyB9KSA9PiAoe1xuICAgICAgICAgIFt0eXBlXToga2V5c1RvU25ha2VDYXNlKHByb3BzKSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICAgIHRoaXMucmF3T3ZlcnJpZGVzLFxuICAgICk7XG5cbiAgICBhdHRyaWJ1dGVzW1wiLy9cIl0gPSB7XG4gICAgICAuLi4oYXR0cmlidXRlc1tcIi8vXCJdID8/IHt9KSxcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0Tm9kZU1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjb25zdCBtb3ZlZEJsb2NrID0gdGhpcy5fYnVpbGRNb3ZlZEJsb2NrKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc291cmNlOiB0aGlzLl9oYXNNb3ZlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIFt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZV06IHtcbiAgICAgICAgICAgICAgW3RoaXMuZnJpZW5kbHlVbmlxdWVJZF06IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICBtb3ZlZDogbW92ZWRCbG9ja1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdG86IG1vdmVkQmxvY2sudG8sXG4gICAgICAgICAgICAgIGZyb206IG1vdmVkQmxvY2suZnJvbSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGltcG9ydDogdGhpcy5faW1wb3J0ZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLl9pbXBvcnRlZC5wcm92aWRlcj8uZnFuLFxuICAgICAgICAgICAgICBpZDogdGhpcy5faW1wb3J0ZWQuaWQsXG4gICAgICAgICAgICAgIHRvOiBgJHt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZX0uJHt0aGlzLmZyaWVuZGx5VW5pcXVlSWR9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHRvSGNsVGVycmFmb3JtKCk6IGFueSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGRlZXBNZXJnZShcbiAgICAgIHByb2Nlc3NEeW5hbWljQXR0cmlidXRlc0ZvckhjbCh0aGlzLnN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCkpLFxuICAgICAga2V5c1RvU25ha2VDYXNlKHRoaXMudGVycmFmb3JtTWV0YUFyZ3VtZW50cyksXG4gICAgICB7XG4gICAgICAgIHByb3Zpc2lvbmVyOiB0aGlzLnByb3Zpc2lvbmVycz8ubWFwKCh7IHR5cGUsIC4uLnByb3BzIH0pID0+ICh7XG4gICAgICAgICAgW3R5cGVdOiB7XG4gICAgICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgdmFsdWU6IGtleXNUb1NuYWtlQ2FzZShwcm9wcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICAgIHRoaXMucmF3T3ZlcnJpZGVzLFxuICAgICk7XG5cbiAgICBhdHRyaWJ1dGVzW1wiLy9cIl0gPSB7XG4gICAgICAuLi4oYXR0cmlidXRlc1tcIi8vXCJdID8/IHt9KSxcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0Tm9kZU1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjb25zdCBtb3ZlZEJsb2NrID0gdGhpcy5fYnVpbGRNb3ZlZEJsb2NrKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc291cmNlOiB0aGlzLl9oYXNNb3ZlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIFt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZV06IHtcbiAgICAgICAgICAgICAgW3RoaXMuZnJpZW5kbHlVbmlxdWVJZF06IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICBtb3ZlZDogbW92ZWRCbG9ja1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdG86IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbW92ZWRCbG9jay50byxcbiAgICAgICAgICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICAgICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwicmVmZXJlbmNlXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZyb206IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbW92ZWRCbG9jay5mcm9tLFxuICAgICAgICAgICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgICAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGltcG9ydDogdGhpcy5faW1wb3J0ZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRvOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgICAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5faW1wb3J0ZWQuaWQsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwcm92aWRlcjogdGhpcy5faW1wb3J0ZWQucHJvdmlkZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2ltcG9ydGVkLnByb3ZpZGVyLmZxbixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHRvTWV0YWRhdGEoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgb3ZlcnJpZGVzOiBPYmplY3Qua2V5cyh0aGlzLnJhd092ZXJyaWRlcykubGVuZ3RoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgW3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlXTogT2JqZWN0LmtleXModGhpcy5yYXdPdmVycmlkZXMpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBpbXBvcnRzOiB0aGlzLl9pbXBvcnRlZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZV06IFt0aGlzLmZyaWVuZGx5VW5pcXVlSWRdLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBtb3ZlZDpcbiAgICAgICAgdGhpcy5fbW92ZWRCeVRhcmdldCB8fCB0aGlzLl9tb3ZlZEJ5SWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgW3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlXTogW3RoaXMuZnJpZW5kbHlVbmlxdWVJZF0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlZihcbiAgICAgIGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH0ke1xuICAgICAgICB0aGlzLmZvckVhY2ggPyBcIi4qXCIgOiBcIlwiXG4gICAgICB9LiR7dGVycmFmb3JtQXR0cmlidXRlfWAsXG4gICAgICB0aGlzLmNka3RmU3RhY2ssXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpbXBvcnRGcm9tKGlkOiBzdHJpbmcsIHByb3ZpZGVyPzogVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICBpZiAoIXRoaXMuX2ltcG9ydGVkKSB7XG4gICAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihcbiAgICAgICAgbmV3IFZhbGlkYXRlRmVhdHVyZVRhcmdldFN1cHBvcnQodGhpcywgXCJUaGUgaW1wb3J0IGJsb2NrXCIsIHtcbiAgICAgICAgICB0ZXJyYWZvcm06IFwiPj0xLjUuMFwiLFxuICAgICAgICAgIG9wZW50b2Z1OiBcIj49MS42LjBcIixcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9pbXBvcnRlZCA9IHsgaWQsIHByb3ZpZGVyIH07XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZXNvdXJjZVRhcmdldChtb3ZlVGFyZ2V0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gVGVycmFmb3JtU3RhY2sub2YodGhpcykubW92ZVRhcmdldHMuZ2V0UmVzb3VyY2VCeVRhcmdldChtb3ZlVGFyZ2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZFJlc291cmNlVGFyZ2V0KG1vdmVUYXJnZXQ6IHN0cmluZykge1xuICAgIHJldHVybiBUZXJyYWZvcm1TdGFjay5vZih0aGlzKS5tb3ZlVGFyZ2V0cy5hZGRSZXNvdXJjZVRhcmdldChcbiAgICAgIHRoaXMsXG4gICAgICBtb3ZlVGFyZ2V0LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZE1vdmVkQmxvY2tCeVRhcmdldChcbiAgICBtb3ZlZFRhcmdldDogVGVycmFmb3JtUmVzb3VyY2VNb3ZlQnlUYXJnZXQsXG4gICk6IHsgdG86IHN0cmluZzsgZnJvbTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHsgbW92ZVRhcmdldCwgaW5kZXggfSA9IG1vdmVkVGFyZ2V0O1xuICAgIGNvbnN0IHJlc291cmNlVG9Nb3ZlVG8gPSB0aGlzLl9nZXRSZXNvdXJjZVRhcmdldChtb3ZlVGFyZ2V0KTtcbiAgICBpZiAodGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGUgIT09IHJlc291cmNlVG9Nb3ZlVG8udGVycmFmb3JtUmVzb3VyY2VUeXBlKSB7XG4gICAgICB0aHJvdyBtb3ZlZFRvUmVzb3VyY2VPZkRpZmZlcmVudFR5cGUoXG4gICAgICAgIG1vdmVUYXJnZXQsXG4gICAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlLFxuICAgICAgICByZXNvdXJjZVRvTW92ZVRvLnRlcnJhZm9ybVJlc291cmNlVHlwZSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHRvID0gaW5kZXhcbiAgICAgID8gdHlwZW9mIGluZGV4ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gYCR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9LiR7cmVzb3VyY2VUb01vdmVUby5mcmllbmRseVVuaXF1ZUlkfVtcIiR7aW5kZXh9XCJdYFxuICAgICAgICA6IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3Jlc291cmNlVG9Nb3ZlVG8uZnJpZW5kbHlVbmlxdWVJZH1bJHtpbmRleH1dYFxuICAgICAgOiBgJHt0aGlzLnRlcnJhZm9ybVJlc291cmNlVHlwZX0uJHtyZXNvdXJjZVRvTW92ZVRvLmZyaWVuZGx5VW5pcXVlSWR9YDtcbiAgICBjb25zdCBmcm9tID0gYCR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9LiR7dGhpcy5mcmllbmRseVVuaXF1ZUlkfWA7XG4gICAgcmV0dXJuIHsgdG8sIGZyb20gfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkTW92ZWRCbG9jaygpOiB7IHRvOiBzdHJpbmc7IGZyb206IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fbW92ZWRCeVRhcmdldCAmJiB0aGlzLl9tb3ZlZEJ5SWQpIHtcbiAgICAgIHRocm93IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5VGFyZ2V0QW5kSWQoXG4gICAgICAgIHRoaXMubm9kZS5pZCxcbiAgICAgICAgdGhpcy5fbW92ZWRCeVRhcmdldC5tb3ZlVGFyZ2V0LFxuICAgICAgICB7IHRvOiB0aGlzLl9tb3ZlZEJ5SWQudG8sIGZyb206IHRoaXMuX21vdmVkQnlJZC5mcm9tIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbW92ZWRCeVRhcmdldCkge1xuICAgICAgY29uc3QgbW92ZWRCbG9ja0J5VGFyZ2V0ID0gdGhpcy5fYnVpbGRNb3ZlZEJsb2NrQnlUYXJnZXQoXG4gICAgICAgIHRoaXMuX21vdmVkQnlUYXJnZXQsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgdG86IG1vdmVkQmxvY2tCeVRhcmdldC50bywgZnJvbTogbW92ZWRCbG9ja0J5VGFyZ2V0LmZyb20gfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX21vdmVkQnlJZCkge1xuICAgICAgcmV0dXJuIHsgdG86IHRoaXMuX21vdmVkQnlJZC50bywgZnJvbTogdGhpcy5fbW92ZWRCeUlkLmZyb20gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgdGhpcyByZXNvdXJjZSB0byB0aGUgdGFyZ2V0IHJlc291cmNlIGdpdmVuIGJ5IG1vdmVUYXJnZXQuXG4gICAqIEBwYXJhbSBtb3ZlVGFyZ2V0IFRoZSBwcmV2aW91c2x5IHNldCB1c2VyIGRlZmluZWQgc3RyaW5nIHNldCBieSAuYWRkTW92ZVRhcmdldCgpIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlc291cmNlIHRvIG1vdmUgdG8uXG4gICAqIEBwYXJhbSBpbmRleCBPcHRpb25hbCBUaGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUga2V5IHRoZSByZXNvdXJjZSBpcyB0byBhcHBlYXIgaW4gdGhlIGZvcmVhY2ggb2YgYSByZXNvdXJjZSB0byBtb3ZlIHRvXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKG1vdmVUYXJnZXQ6IHN0cmluZywgaW5kZXg/OiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fbW92ZWRCeVRhcmdldCkge1xuICAgICAgdGhyb3cgcmVzb3VyY2VHaXZlblR3b01vdmVPcGVyYXRpb25zQnlUYXJnZXQoXG4gICAgICAgIHRoaXMuZnJpZW5kbHlVbmlxdWVJZCxcbiAgICAgICAgdGhpcy5fbW92ZWRCeVRhcmdldC5tb3ZlVGFyZ2V0LFxuICAgICAgICBtb3ZlVGFyZ2V0LFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbW92ZWRCeVRhcmdldCA9IHsgbW92ZVRhcmdldCwgaW5kZXggfTtcbiAgICB0aGlzLl9oYXNNb3ZlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXIgZGVmaW5lZCBtb3ZlVGFyZ2V0IHN0cmluZyB0byB0aGlzIHJlc291cmNlIHRvIGJlIGxhdGVyIHVzZWQgaW4gLm1vdmVUbyhtb3ZlVGFyZ2V0KSB0byByZXNvbHZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgbW92ZS5cbiAgICogQHBhcmFtIG1vdmVUYXJnZXQgVGhlIHN0cmluZyBtb3ZlIHRhcmdldCB0aGF0IHdpbGwgY29ycmVzcG9uZCB0byB0aGlzIHJlc291cmNlXG4gICAqL1xuICBwdWJsaWMgYWRkTW92ZVRhcmdldChtb3ZlVGFyZ2V0OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hZGRSZXNvdXJjZVRhcmdldChtb3ZlVGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGlzIHJlc291cmNlIHRvIHRoZSByZXNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIFwiaWRcIlxuICAgKiBAcGFyYW0gaWQgRnVsbCBpZCBvZiByZXNvdXJjZSB0byBtb3ZlIHRvLCBlLmcuIFwiYXdzX3MzX2J1Y2tldC5leGFtcGxlXCJcbiAgICovXG4gIHB1YmxpYyBtb3ZlVG9JZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuX21vdmVkQnlJZCkge1xuICAgICAgdGhyb3cgcmVzb3VyY2VHaXZlblR3b01vdmVPcGVyYXRpb25zQnlJZChcbiAgICAgICAgdGhpcy5ub2RlLmlkLFxuICAgICAgICB7IHRvOiB0aGlzLl9tb3ZlZEJ5SWQuZnJvbSwgZnJvbTogdGhpcy5fbW92ZWRCeUlkLnRvIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0bzogaWQsXG4gICAgICAgICAgZnJvbTogYCR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZVR5cGV9LiR7dGhpcy5mcmllbmRseVVuaXF1ZUlkfWAsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX21vdmVkQnlJZCA9IHtcbiAgICAgIHRvOiBpZCxcbiAgICAgIGZyb206IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgIH07XG4gICAgdGhpcy5faGFzTW92ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIHJlc291cmNlIGNvcnJlc3BvbmRpbmcgdG8gXCJpZFwiIHRvIHRoaXMgcmVzb3VyY2UuIE5vdGUgdGhhdCB0aGUgcmVzb3VyY2UgYmVpbmcgbW92ZWQgZnJvbSBtdXN0IGJlIG1hcmtlZCBhcyBtb3ZlZCB1c2luZyBpdHMgaW5zdGFuY2UgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBpZCBGdWxsIGlkIG9mIHJlc291cmNlIGJlaW5nIG1vdmVkIGZyb20sIGUuZy4gXCJhd3NfczNfYnVja2V0LmV4YW1wbGVcIlxuICAgKi9cbiAgcHVibGljIG1vdmVGcm9tSWQoaWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLl9tb3ZlZEJ5SWQpIHtcbiAgICAgIHRocm93IHJlc291cmNlR2l2ZW5Ud29Nb3ZlT3BlcmF0aW9uc0J5SWQoXG4gICAgICAgIHRoaXMubm9kZS5pZCxcbiAgICAgICAgeyB0bzogdGhpcy5fbW92ZWRCeUlkLmZyb20sIGZyb206IHRoaXMuX21vdmVkQnlJZC50byB9LFxuICAgICAgICB7XG4gICAgICAgICAgdG86IGlkLFxuICAgICAgICAgIGZyb206IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbW92ZWRCeUlkID0ge1xuICAgICAgdG86IGAke3RoaXMudGVycmFmb3JtUmVzb3VyY2VUeXBlfS4ke3RoaXMuZnJpZW5kbHlVbmlxdWVJZH1gLFxuICAgICAgZnJvbTogaWQsXG4gICAgfTtcbiAgfVxufVxuIl19
|
package/lib/terraform-stack.d.ts
CHANGED
|
@@ -12,6 +12,10 @@ export interface TerraformStackMetadata {
|
|
|
12
12
|
readonly backend: string;
|
|
13
13
|
readonly cloud?: string;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* A unit of deployment that synthesizes to its own Terraform configuration and working directory, with its own
|
|
17
|
+
* backend and state. Resources, providers and other Terraform elements are defined within a stack.
|
|
18
|
+
*/
|
|
15
19
|
export declare class TerraformStack extends Construct {
|
|
16
20
|
private readonly rawOverrides;
|
|
17
21
|
private readonly cdktfVersion;
|