@microsoft/terraform-cdk-constructs 0.0.3-pre.11 → 0.0.3-pre.12
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 +334 -211
- package/API.md +166 -76
- package/README.md +4 -5
- package/docs/testing.md +39 -137
- package/lib/azure-actiongroup/test/AzureActionGroup.integ.js +66 -0
- package/lib/azure-actiongroup/test/AzureActionGroup.spec.js +5 -22
- package/lib/azure-applicationgateway/lib/gateway.js +1 -1
- package/lib/azure-applicationgateway/test/AzureApplicationGateway.integ.d.ts +1 -0
- package/lib/azure-applicationgateway/test/AzureApplicationGateway.integ.js +272 -0
- package/lib/azure-applicationgateway/test/AzureApplicationGateway.spec.js +3 -20
- package/lib/azure-applicationinsights/lib/appinsights.js +1 -1
- package/lib/azure-applicationinsights/test/AzureAppInsights.integ.d.ts +1 -0
- package/lib/azure-applicationinsights/test/AzureAppInsights.integ.js +101 -0
- package/lib/azure-applicationinsights/test/AzureAppInsights.spec.js +4 -21
- package/lib/azure-containerregistry/lib/registry.js +1 -1
- package/lib/azure-containerregistry/test/AzureContainerRegistry.integ.d.ts +1 -0
- package/lib/azure-containerregistry/test/AzureContainerRegistry.integ.js +68 -0
- package/lib/azure-containerregistry/test/AzureContainerRegistry.spec.js +4 -17
- package/lib/azure-datalake/lib/datalake.d.ts +1 -0
- package/lib/azure-datalake/lib/datalake.js +2 -1
- package/lib/azure-datalake/test/AzureDatalake.spec.d.ts +1 -0
- package/lib/azure-datalake/test/AzureDatalake.spec.js +32 -0
- package/lib/azure-datalake/test/AzureStorageAccount.integ.d.ts +1 -0
- package/lib/azure-datalake/test/AzureStorageAccount.integ.js +60 -0
- package/lib/azure-eventhub/lib/authorization.js +1 -1
- package/lib/azure-eventhub/lib/consumer.js +1 -1
- package/lib/azure-eventhub/lib/eventhubcluster.js +1 -1
- package/lib/azure-eventhub/lib/instance.d.ts +1 -0
- package/lib/azure-eventhub/lib/instance.js +5 -4
- package/lib/azure-eventhub/lib/kusto-connection.js +1 -1
- package/lib/azure-eventhub/lib/namespace.js +8 -8
- package/lib/azure-eventhub/test/AzureEventhub.integ.d.ts +1 -0
- package/lib/azure-eventhub/test/AzureEventhub.integ.js +72 -0
- package/lib/azure-eventhub/test/AzureEventhub.spec.js +4 -21
- package/lib/azure-functionapp/lib/functionapplinux.js +1 -1
- package/lib/azure-functionapp/test/AzureLinuxFunctionApp.integ.d.ts +1 -0
- package/lib/azure-functionapp/test/AzureLinuxFunctionApp.integ.js +117 -0
- package/lib/azure-functionapp/test/AzureLinuxFunctionApp.spec.js +4 -21
- package/lib/azure-keyvault/lib/certificate.js +2 -2
- package/lib/azure-keyvault/lib/key.js +1 -1
- package/lib/azure-keyvault/lib/policy.js +1 -1
- package/lib/azure-keyvault/lib/secret.js +1 -1
- package/lib/azure-keyvault/lib/vault.js +1 -1
- package/lib/azure-keyvault/test/AzureKeyVault.integ.d.ts +1 -0
- package/lib/azure-keyvault/test/AzureKeyVault.integ.js +119 -0
- package/lib/azure-keyvault/test/AzureKeyVault.spec.js +4 -29
- package/lib/azure-kubernetes/lib/cluster.js +1 -1
- package/lib/azure-kubernetes/test/AzureKubernetesCluster.integ.d.ts +1 -0
- package/lib/azure-kubernetes/test/AzureKubernetesCluster.integ.js +75 -0
- package/lib/azure-kubernetes/test/AzureKubernetesCluster.spec.js +4 -21
- package/lib/azure-kusto/lib/cluster.d.ts +3 -0
- package/lib/azure-kusto/lib/cluster.js +45 -21
- package/lib/azure-kusto/lib/compute-specification.js +1 -1
- package/lib/azure-kusto/lib/database.d.ts +7 -8
- package/lib/azure-kusto/lib/database.js +23 -25
- package/lib/azure-kusto/test/AzureKusto.integ.d.ts +1 -0
- package/lib/azure-kusto/test/AzureKusto.integ.js +74 -0
- package/lib/azure-kusto/test/AzureKusto.spec.js +3 -16
- package/lib/azure-loganalytics/lib/workspace.d.ts +2 -0
- package/lib/azure-loganalytics/lib/workspace.js +3 -2
- package/lib/azure-loganalytics/test/AzureLogAnalytics.integ.d.ts +1 -0
- package/lib/azure-loganalytics/test/AzureLogAnalytics.integ.js +117 -0
- package/lib/azure-loganalytics/test/AzureLogAnalytics.spec.js +4 -17
- package/lib/azure-metricalert/lib/metric-alert.js +1 -1
- package/lib/azure-metricalert/test/AzureMetricAlert.integ.d.ts +1 -0
- package/lib/azure-metricalert/test/AzureMetricAlert.integ.js +85 -0
- package/lib/azure-metricalert/test/AzureMetricAlert.spec.js +4 -21
- package/lib/azure-networksecuritygroup/lib/preconfigured-rules.js +1 -1
- package/lib/azure-networksecuritygroup/lib/securitygroup.js +2 -2
- package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.integ.d.ts +1 -0
- package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.integ.js +85 -0
- package/lib/azure-networksecuritygroup/test/AzureNetworkSecurityGroup.spec.js +4 -17
- package/lib/azure-queryrulealert/lib/query-rule-alert.js +1 -1
- package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.integ.d.ts +1 -0
- package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.integ.js +63 -0
- package/lib/azure-queryrulealert/test/AzureQueryRuleAlert.spec.js +4 -21
- package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
- package/lib/azure-resourcegroup/test/AzureResourceGroup.integ.d.ts +1 -0
- package/lib/azure-resourcegroup/test/AzureResourceGroup.integ.js +41 -0
- package/lib/azure-resourcegroup/test/AzureResourceGroup.spec.js +4 -17
- package/lib/azure-storageaccount/lib/account.d.ts +5 -0
- package/lib/azure-storageaccount/lib/account.js +3 -2
- package/lib/azure-storageaccount/lib/container.js +2 -2
- package/lib/azure-storageaccount/lib/fileshare.js +2 -2
- package/lib/azure-storageaccount/lib/queue.js +1 -1
- package/lib/azure-storageaccount/lib/table.js +1 -1
- package/lib/azure-storageaccount/test/AzureStorageAccount.integ.d.ts +1 -0
- package/lib/azure-storageaccount/test/AzureStorageAccount.integ.js +84 -0
- package/lib/azure-storageaccount/test/AzureStorageAccount.spec.js +4 -17
- package/lib/azure-virtualmachine/lib/image-references.js +2 -2
- package/lib/azure-virtualmachine/lib/vm.d.ts +21 -0
- package/lib/azure-virtualmachine/lib/vm.js +5 -3
- package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.integ.d.ts +1 -0
- package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.integ.js +109 -0
- package/lib/azure-virtualmachine/test/AzureLinuxVirtualMachine.spec.js +4 -17
- package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.integ.d.ts +1 -0
- package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.integ.js +105 -0
- package/lib/azure-virtualmachine/test/AzureWindowsVirtualMachine.spec.js +4 -17
- package/lib/azure-virtualmachinescaleset/lib/cluster.d.ts +20 -0
- package/lib/azure-virtualmachinescaleset/lib/cluster.js +5 -3
- package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.integ.d.ts +1 -0
- package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.integ.js +113 -0
- package/lib/azure-virtualmachinescaleset/test/AzureLinuxVirtualMachineScaleSet.spec.js +4 -17
- package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.integ.d.ts +1 -0
- package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.integ.js +109 -0
- package/lib/azure-virtualmachinescaleset/test/AzureWindowsVirtualMachineScaleSet.spec.js +4 -17
- package/lib/azure-virtualnetwork/lib/network.js +1 -1
- package/lib/azure-virtualnetwork/lib/peering.js +1 -1
- package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.integ.d.ts +1 -0
- package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.integ.js +92 -0
- package/lib/azure-virtualnetwork/test/AzureVirtualNetwork.spec.js +4 -17
- package/lib/core-azure/lib/diagsettings.d.ts +3 -2
- package/lib/core-azure/lib/diagsettings.js +15 -21
- package/lib/core-azure/lib/rbac.js +1 -1
- package/lib/core-azure/lib/resource.js +5 -3
- package/lib/core-azure/test/AzureResource.integ.d.ts +1 -0
- package/lib/core-azure/test/AzureResource.integ.js +75 -0
- package/lib/testing/index.d.ts +34 -0
- package/lib/testing/index.js +235 -2
- package/package.json +6 -4
- package/cdktf.out/manifest.json +0 -13
- package/cdktf.out/stacks/testAzureActionGroup/cdk.tf.json +0 -111
- package/cdktf.out/stacks/testAzureApplicationGateway/cdk.tf.json +0 -588
- package/cdktf.out/stacks/testAzureApplicationInsights/cdk.tf.json +0 -245
- package/cdktf.out/stacks/testAzureContainerRegistry/cdk.tf.json +0 -179
- package/cdktf.out/stacks/testAzureEventhub/cdk.tf.json +0 -236
- package/cdktf.out/stacks/testAzureKeyVault/cdk.tf.json +0 -436
- package/cdktf.out/stacks/testAzureKubernetesCluster/cdk.tf.json +0 -152
- package/cdktf.out/stacks/testAzureKusto/cdk.tf.json +0 -209
- package/cdktf.out/stacks/testAzureLinuxFunctionApp/cdk.tf.json +0 -439
- package/cdktf.out/stacks/testAzureLinuxVirtualMachineExample/cdk.tf.json +0 -283
- package/cdktf.out/stacks/testAzureLinuxVirtualMachineScaleSetExample/cdk.tf.json +0 -261
- package/cdktf.out/stacks/testAzureLogAnalytics/cdk.tf.json +0 -309
- package/cdktf.out/stacks/testAzureMetricAlert/cdk.tf.json +0 -161
- package/cdktf.out/stacks/testAzureNetworkSecurityGroup/cdk.tf.json +0 -271
- package/cdktf.out/stacks/testAzureQueryRuleAlert/cdk.tf.json +0 -122
- package/cdktf.out/stacks/testAzureResourceGroup/cdk.tf.json +0 -88
- package/cdktf.out/stacks/testAzureStorageAccount/cdk.tf.json +0 -339
- package/cdktf.out/stacks/testAzureVirtualNetwork/cdk.tf.json +0 -264
- package/cdktf.out/stacks/testAzureWindowVirtualMachineScaleSetExample/cdk.tf.json +0 -261
- package/cdktf.out/stacks/testAzureWindowsVirtualMachineExample/cdk.tf.json +0 -280
- package/cdktf.out/stacks/testExampleAzureResource/cdk.tf.json +0 -167
- package/lib/azure-actiongroup/test/ExampleAzureActionGroup.d.ts +0 -5
- package/lib/azure-actiongroup/test/ExampleAzureActionGroup.js +0 -66
- package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.d.ts +0 -5
- package/lib/azure-applicationgateway/test/ExampleAzureApplicationGateway.js +0 -267
- package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.d.ts +0 -5
- package/lib/azure-applicationinsights/test/ExampleAzureApplicationInsights.js +0 -87
- package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.d.ts +0 -5
- package/lib/azure-containerregistry/test/ExampleAzureContainerRegistry.js +0 -57
- package/lib/azure-eventhub/test/ExampleAzureEventhub.d.ts +0 -5
- package/lib/azure-eventhub/test/ExampleAzureEventhub.js +0 -72
- package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.d.ts +0 -5
- package/lib/azure-functionapp/test/ExampleAzureLinuxFunctionApp.js +0 -123
- package/lib/azure-keyvault/test/ExampleAzureKeyVault.d.ts +0 -5
- package/lib/azure-keyvault/test/ExampleAzureKeyVault.js +0 -112
- package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.d.ts +0 -5
- package/lib/azure-kubernetes/test/ExampleAzureKubernetesCluster.js +0 -65
- package/lib/azure-kusto/test/ExampleAzureKusto.d.ts +0 -5
- package/lib/azure-kusto/test/ExampleAzureKusto.js +0 -71
- package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.d.ts +0 -5
- package/lib/azure-loganalytics/test/ExampleAzureLogAnalytics.js +0 -115
- package/lib/azure-metricalert/test/ExampleAzureMetricAlert.d.ts +0 -5
- package/lib/azure-metricalert/test/ExampleAzureMetricAlert.js +0 -81
- package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.d.ts +0 -5
- package/lib/azure-networksecuritygroup/test/ExampleAzureNetworkSecurityGroup.js +0 -97
- package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.d.ts +0 -5
- package/lib/azure-queryrulealert/test/ExampleAzureQueryRuleAlert.js +0 -67
- package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.d.ts +0 -5
- package/lib/azure-resourcegroup/test/ExampleAzureResourceGroup.js +0 -29
- package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.d.ts +0 -5
- package/lib/azure-storageaccount/test/ExampleAzureStorageAccount.js +0 -102
- package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.d.ts +0 -5
- package/lib/azure-virtualmachine/test/ExampleAzureLinuxVirtualMachine.js +0 -106
- package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.d.ts +0 -5
- package/lib/azure-virtualmachine/test/ExampleAzureWindowsVirtualMachine.js +0 -102
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.d.ts +0 -5
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureLinuxVirtualMachineScaleSet.js +0 -107
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.d.ts +0 -5
- package/lib/azure-virtualmachinescaleset/test/ExampleAzureWindowsVirtualMachineScaleSet.js +0 -103
- package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.d.ts +0 -5
- package/lib/azure-virtualnetwork/test/ExampleAzureVirtualNetwork.js +0 -88
- package/lib/core-azure/test/AzureResource.spec.js +0 -19
- package/lib/core-azure/test/ExampleAzureResource.d.ts +0 -5
- package/lib/core-azure/test/ExampleAzureResource.js +0 -67
- package/tfsec.json +0 -4
- /package/lib/{core-azure/test/AzureResource.spec.d.ts → azure-actiongroup/test/AzureActionGroup.integ.d.ts} +0 -0
package/docs/testing.md
CHANGED
|
@@ -18,6 +18,29 @@ The purpose of this document is to provide guidelines for writing tests in the C
|
|
|
18
18
|
- [Randomizing Globally Unique Resource Names](#randomizing-globally-unique-resource-names)
|
|
19
19
|
- [End to End Tests](#end-to-end-tests-1)
|
|
20
20
|
|
|
21
|
+
# How to run tests
|
|
22
|
+
|
|
23
|
+
### How to run any single test:
|
|
24
|
+
1. Must be logged in with Az Login
|
|
25
|
+
2. Run the following command:
|
|
26
|
+
```
|
|
27
|
+
jest ./pathtotestfile/filename.ts
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### How to run all unit tests at same time:
|
|
31
|
+
1. Must be logged in with Az Login
|
|
32
|
+
2. Run the following command:
|
|
33
|
+
```
|
|
34
|
+
npx projen test
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### How to run all integration tests at same time:
|
|
38
|
+
1. Must be logged in with Az Login
|
|
39
|
+
2. Run the following command:
|
|
40
|
+
```
|
|
41
|
+
npm run integration:nostream
|
|
42
|
+
```
|
|
43
|
+
|
|
21
44
|
|
|
22
45
|
## Writing Tests
|
|
23
46
|
|
|
@@ -67,6 +90,7 @@ The tests will use AZ CLI for authentication. Make sure to set the Azure subscri
|
|
|
67
90
|
az account set -s MySubscription
|
|
68
91
|
```
|
|
69
92
|
|
|
93
|
+
|
|
70
94
|
## How to Write Unit Tests
|
|
71
95
|
Unit tests are written in Typescript using Jest. They consist of a `spec` test file within the module folder under the `test` folder:
|
|
72
96
|
|
|
@@ -83,13 +107,13 @@ Below is a spec test for the resource group construct:
|
|
|
83
107
|
|
|
84
108
|
```
|
|
85
109
|
# index.ts
|
|
86
|
-
import {
|
|
87
|
-
import
|
|
88
|
-
import {
|
|
89
|
-
import
|
|
90
|
-
|
|
110
|
+
import { AzurermProvider } from "@cdktf/provider-azurerm/lib/provider";
|
|
111
|
+
import { Testing, TerraformStack } from "cdktf";
|
|
112
|
+
import { TerraformPlan } from "../../testing";
|
|
113
|
+
import "cdktf/lib/testing/adapters/jest";
|
|
114
|
+
import * as rg from "..";
|
|
91
115
|
|
|
92
|
-
describe(
|
|
116
|
+
describe("Resource Group With Defaults", () => {
|
|
93
117
|
let stack: TerraformStack;
|
|
94
118
|
let fullSynthResult: any;
|
|
95
119
|
|
|
@@ -97,24 +121,22 @@ describe('Resource Group With Defaults', () => {
|
|
|
97
121
|
const app = Testing.app();
|
|
98
122
|
stack = new TerraformStack(app, "test");
|
|
99
123
|
|
|
100
|
-
new AzurermProvider(stack, "azureFeature", {features: {}});
|
|
101
|
-
new
|
|
124
|
+
new AzurermProvider(stack, "azureFeature", { features: {} });
|
|
125
|
+
new rg.Group(stack, "testRG");
|
|
102
126
|
|
|
103
|
-
fullSynthResult = Testing.fullSynth(stack);
|
|
127
|
+
fullSynthResult = Testing.fullSynth(stack);
|
|
104
128
|
});
|
|
105
129
|
|
|
106
130
|
it("renders a Resource Group with defaults and checks snapshot", () => {
|
|
107
|
-
expect(
|
|
108
|
-
Testing.synth(stack)
|
|
109
|
-
).toMatchSnapshot(); // Compare the already prepared stack
|
|
131
|
+
expect(Testing.synth(stack)).toMatchSnapshot();
|
|
110
132
|
});
|
|
111
133
|
|
|
112
134
|
it("check if the produced terraform configuration is valid", () => {
|
|
113
|
-
expect(fullSynthResult).toBeValidTerraform();
|
|
135
|
+
expect(fullSynthResult).toBeValidTerraform();
|
|
114
136
|
});
|
|
115
137
|
|
|
116
138
|
it("check if this can be planned", () => {
|
|
117
|
-
|
|
139
|
+
TerraformPlan(fullSynthResult);
|
|
118
140
|
});
|
|
119
141
|
});
|
|
120
142
|
```
|
|
@@ -199,22 +221,21 @@ npm test src/azure-resourcegroup/test/AzureResourceGroup.spec.ts -- -u
|
|
|
199
221
|
|
|
200
222
|
|
|
201
223
|
## Integration Tests
|
|
202
|
-
Integration tests are written in
|
|
224
|
+
Integration tests are written in typescript and end in `.integ.ts`:
|
|
203
225
|
|
|
204
226
|
|
|
205
227
|
```plaintext
|
|
206
228
|
src
|
|
207
229
|
└── azure-resourcegroup
|
|
208
230
|
├── test
|
|
209
|
-
│
|
|
210
|
-
│ └── ExampleAzureResourceGroup.ts
|
|
231
|
+
│ └── AzureResourceGroup.integ.ts
|
|
211
232
|
│
|
|
212
233
|
└── index.ts
|
|
213
234
|
```
|
|
214
235
|
|
|
215
236
|
The integration test will perform the following against the example file:
|
|
216
237
|
|
|
217
|
-
1. **terraform apply**: The integration test starts by executing a terraform apply
|
|
238
|
+
1. **terraform apply**: The integration test starts by executing a terraform apply.
|
|
218
239
|
2. **terraform plan**: After setup, a terraform plan is run to:
|
|
219
240
|
- Confirm there are no additional changes needed.
|
|
220
241
|
- Ensure the setup is stable and consistent (idempotent).
|
|
@@ -223,125 +244,6 @@ The integration test will perform the following against the example file:
|
|
|
223
244
|
- This step removes the test environment and ensures the infrastructure can be cleanly deleted.
|
|
224
245
|
- It's designed to catch common problems that occur when removing infrastructure, especially those related to resource dependencies.
|
|
225
246
|
|
|
226
|
-
You may also checkout the [Terratest](https://github.com/gruntwork-io/terratest/tree/master/test/azure) library for test examples to use against the Azure resources.
|
|
227
|
-
|
|
228
|
-
### Running the Integration Tests
|
|
229
|
-
|
|
230
|
-
To run integration tests, use the following command in the test directory:
|
|
231
|
-
```
|
|
232
|
-
/workspaces/…/azure-resourcegroup/test$ go test -v .
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
This will kick off the integration test to synthesize the example file into Terraform configuration files within the `.tempstacks` folder in the module directory:
|
|
236
|
-
|
|
237
|
-
```plaintext
|
|
238
|
-
src
|
|
239
|
-
└── azure-resourcegroup
|
|
240
|
-
├── test
|
|
241
|
-
│ ├── .tempstacks
|
|
242
|
-
│ │ └── stacks
|
|
243
|
-
│ │ └── testAzureResourceGroup
|
|
244
|
-
│ │ └── cdk.tf.json
|
|
245
|
-
│ ├── ExampleAzureResourceGroupStack.ts
|
|
246
|
-
│ └── AzureResourceGroup_test.go
|
|
247
|
-
└── index.ts
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
The test will then run `tfcdk deploy *` to deploy all stacks, then it will run any API checks to validate the deployed resource followed by a `tfcdk destroy` to clean up all the resources.
|
|
251
|
-
|
|
252
|
-
After the test runs, the `.tempstacks` directory is automatically deleted.
|
|
253
|
-
|
|
254
|
-
#### Further Troubleshooting of Tests
|
|
255
|
-
|
|
256
|
-
If there is a need to troubleshoot the stacks, you can comment out the `defer` block within the Go test and re-run the test:
|
|
257
|
-
|
|
258
|
-
```
|
|
259
|
-
// Comment this out to stop .tempstacks from being deleted
|
|
260
|
-
defer func() {
|
|
261
|
-
util.CdkTFDestroyAll(t, terraformOptions, example_file)
|
|
262
|
-
os.RemoveAll("./.tempstacks")
|
|
263
|
-
}()
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
### Randomizing Globally Unique Resource Names
|
|
268
|
-
|
|
269
|
-
**Goal**: Ensure each resource has a unique name to prevent conflicts, especially useful in test environments or when deploying multiple instances of the same infrastructure.
|
|
270
|
-
|
|
271
|
-
**Method**: Use a base class in TypeScript to set up a naming pattern, and then use Golang to generate a random name for each test run.
|
|
272
|
-
|
|
273
|
-
**Step 1**: Create a Base Class in TypeScript
|
|
274
|
-
First, you'll need a base class, BaseTestStack, which includes a variable for the resource name. This class sets up a default name, which you can later override with a random value.
|
|
275
|
-
|
|
276
|
-
```typescript
|
|
277
|
-
import {BaseTestStack} from "../../testing";
|
|
278
|
-
|
|
279
|
-
const app = new App();
|
|
280
|
-
|
|
281
|
-
export class exampleAzureResourceGroup extends BaseTestStack {
|
|
282
|
-
constructor(scope: Construct, id: string) {
|
|
283
|
-
super(scope, id);
|
|
284
|
-
|
|
285
|
-
new AzurermProvider(this, "azure", {
|
|
286
|
-
features: {},
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
new AzureResourceGroup(this, 'testRG', {
|
|
290
|
-
name: `rg-${this.name}`,
|
|
291
|
-
location: 'eastus',
|
|
292
|
-
tags: {
|
|
293
|
-
name: 'test',
|
|
294
|
-
Env: "NonProd",
|
|
295
|
-
},
|
|
296
|
-
ignoreChanges: ['tags["Environment"]'],
|
|
297
|
-
|
|
298
|
-
});
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
```
|
|
304
|
-
**Step 2**: Extend the Base Class for Specific Resources
|
|
305
|
-
When creating specific resources, extend the BaseTestStack class. Use this.name to create a unique name for each resource.
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
```typescript
|
|
309
|
-
import {BaseTestStack} from "../../testing";
|
|
310
|
-
|
|
311
|
-
export class exampleAzureResourceGroup extends BaseTestStack {
|
|
312
|
-
constructor(scope: Construct, id: string) {
|
|
313
|
-
super(scope, id);
|
|
314
|
-
|
|
315
|
-
new AzureResourceGroup(this, 'testRG', {
|
|
316
|
-
name: `rg-${this.name}`, // Unique name for the resource
|
|
317
|
-
// ... other configurations ...
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
**Step 3**: Use Golang to Generate a Random Name During Tests
|
|
324
|
-
In your Golang tests, generate a random string to use as the resource name. This ensures that every test run has a different name for its resources.
|
|
325
|
-
```typescript
|
|
326
|
-
// Randomize System Name
|
|
327
|
-
rndName := strings.ToLower(random.UniqueId())
|
|
328
|
-
|
|
329
|
-
terraformOptions := &terraform.Options{
|
|
330
|
-
TerraformBinary: "cdktf",
|
|
331
|
-
//Terraform Variables
|
|
332
|
-
Vars: map[string]interface{}{
|
|
333
|
-
"name": rndName,
|
|
334
|
-
},
|
|
335
|
-
TerraformDir: "../../../",
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
When the test kicks off it will perform a `terraform -var=name=<RandomString>` to randomize the names of all the resources.
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
247
|
## End to End Tests
|
|
346
248
|
|
|
347
249
|
End to End tests are used when testing a class that contains multiple stacks. The workflow is the same as with integration tests, however the test will take much longer.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const provider_1 = require("@cdktf/provider-azurerm/lib/provider");
|
|
4
|
+
const resource_group_1 = require("@cdktf/provider-azurerm/lib/resource-group");
|
|
5
|
+
const cdktf_1 = require("cdktf");
|
|
6
|
+
const ag = require("..");
|
|
7
|
+
const testing_1 = require("../../testing");
|
|
8
|
+
const randomName_1 = require("../../util/randomName");
|
|
9
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
10
|
+
describe("Example of deploying Action Group", () => {
|
|
11
|
+
let stack;
|
|
12
|
+
let fullSynthResult;
|
|
13
|
+
const streamOutput = process.env.STREAM_OUTPUT !== "false";
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
const app = cdktf_1.Testing.app();
|
|
16
|
+
stack = new cdktf_1.TerraformStack(app, "test");
|
|
17
|
+
const randomName = (0, randomName_1.generateRandomName)(12);
|
|
18
|
+
new provider_1.AzurermProvider(stack, "azureFeature", { features: {} });
|
|
19
|
+
// Create a resource group
|
|
20
|
+
const resourceGroup = new resource_group_1.ResourceGroup(stack, "rg", {
|
|
21
|
+
name: `rg-${randomName}`,
|
|
22
|
+
location: "eastus",
|
|
23
|
+
});
|
|
24
|
+
new ag.ActionGroup(stack, "testAzureActionGroup", {
|
|
25
|
+
name: "testactiongroup",
|
|
26
|
+
location: "global",
|
|
27
|
+
resourceGroup: resourceGroup,
|
|
28
|
+
shortName: "testshortn",
|
|
29
|
+
emailReceivers: [
|
|
30
|
+
{
|
|
31
|
+
name: "testemail1",
|
|
32
|
+
emailAddress: "test1@email.com",
|
|
33
|
+
useCommonAlertSchema: true,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "testemail2",
|
|
37
|
+
emailAddress: "test2@email.com",
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
webhookReceivers: [
|
|
41
|
+
{
|
|
42
|
+
name: "testwebhook1",
|
|
43
|
+
serviceUri: "https://www.example1.com",
|
|
44
|
+
useCommonAlertSchema: true,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: "testwebhook2",
|
|
48
|
+
serviceUri: "https://www.example2.com",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
fullSynthResult = cdktf_1.Testing.fullSynth(stack); // Save the result for reuse
|
|
53
|
+
});
|
|
54
|
+
afterEach(() => {
|
|
55
|
+
try {
|
|
56
|
+
(0, testing_1.TerraformDestroy)(fullSynthResult, streamOutput);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error("Error during Terraform destroy:", error);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
it("check if this can be deployed", () => {
|
|
63
|
+
(0, testing_1.TerraformApplyAndCheckIdempotency)(fullSynthResult, streamOutput); // Set to true to stream output
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVBY3Rpb25Hcm91cC5pbnRlZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1hY3Rpb25ncm91cC90ZXN0L0F6dXJlQWN0aW9uR3JvdXAuaW50ZWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtRUFBdUU7QUFDdkUsK0VBQTJFO0FBQzNFLGlDQUFnRDtBQUNoRCx5QkFBeUI7QUFFekIsMkNBR3VCO0FBQ3ZCLHNEQUEyRDtBQUMzRCwyQ0FBeUM7QUFFekMsUUFBUSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtJQUNqRCxJQUFJLEtBQXFCLENBQUM7SUFDMUIsSUFBSSxlQUFvQixDQUFDO0lBQ3pCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQztJQUUzRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLEtBQUssR0FBRyxJQUFJLHNCQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQWtCLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUMsSUFBSSwwQkFBZSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3RCwwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSw4QkFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbkQsSUFBSSxFQUFFLE1BQU0sVUFBVSxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7WUFDaEQsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixRQUFRLEVBQUUsUUFBUTtZQUNsQixhQUFhLEVBQUUsYUFBYTtZQUM1QixTQUFTLEVBQUUsWUFBWTtZQUN2QixjQUFjLEVBQUU7Z0JBQ2Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFlBQVksRUFBRSxpQkFBaUI7b0JBQy9CLG9CQUFvQixFQUFFLElBQUk7aUJBQzNCO2dCQUNEO29CQUNFLElBQUksRUFBRSxZQUFZO29CQUNsQixZQUFZLEVBQUUsaUJBQWlCO2lCQUNoQzthQUNGO1lBQ0QsZ0JBQWdCLEVBQUU7Z0JBQ2hCO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxvQkFBb0IsRUFBRSxJQUFJO2lCQUMzQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVSxFQUFFLDBCQUEwQjtpQkFDdkM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILGVBQWUsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0lBQzFFLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUk7WUFDRixJQUFBLDBCQUFnQixFQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNqRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUN2QyxJQUFBLDJDQUFpQyxFQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXp1cmVybVByb3ZpZGVyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9wcm92aWRlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2VHcm91cCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcmVzb3VyY2UtZ3JvdXBcIjtcbmltcG9ydCB7IFRlc3RpbmcsIFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBhZyBmcm9tIFwiLi5cIjtcblxuaW1wb3J0IHtcbiAgVGVycmFmb3JtQXBwbHlBbmRDaGVja0lkZW1wb3RlbmN5LFxuICBUZXJyYWZvcm1EZXN0cm95LFxufSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21OYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWwvcmFuZG9tTmFtZVwiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuXG5kZXNjcmliZShcIkV4YW1wbGUgb2YgZGVwbG95aW5nIEFjdGlvbiBHcm91cFwiLCAoKSA9PiB7XG4gIGxldCBzdGFjazogVGVycmFmb3JtU3RhY2s7XG4gIGxldCBmdWxsU3ludGhSZXN1bHQ6IGFueTtcbiAgY29uc3Qgc3RyZWFtT3V0cHV0ID0gcHJvY2Vzcy5lbnYuU1RSRUFNX09VVFBVVCAhPT0gXCJmYWxzZVwiO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgVGVycmFmb3JtU3RhY2soYXBwLCBcInRlc3RcIik7XG4gICAgY29uc3QgcmFuZG9tTmFtZSA9IGdlbmVyYXRlUmFuZG9tTmFtZSgxMik7XG5cbiAgICBuZXcgQXp1cmVybVByb3ZpZGVyKHN0YWNrLCBcImF6dXJlRmVhdHVyZVwiLCB7IGZlYXR1cmVzOiB7fSB9KTtcblxuICAgIC8vIENyZWF0ZSBhIHJlc291cmNlIGdyb3VwXG4gICAgY29uc3QgcmVzb3VyY2VHcm91cCA9IG5ldyBSZXNvdXJjZUdyb3VwKHN0YWNrLCBcInJnXCIsIHtcbiAgICAgIG5hbWU6IGByZy0ke3JhbmRvbU5hbWV9YCxcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgIH0pO1xuXG4gICAgbmV3IGFnLkFjdGlvbkdyb3VwKHN0YWNrLCBcInRlc3RBenVyZUFjdGlvbkdyb3VwXCIsIHtcbiAgICAgIG5hbWU6IFwidGVzdGFjdGlvbmdyb3VwXCIsXG4gICAgICBsb2NhdGlvbjogXCJnbG9iYWxcIixcbiAgICAgIHJlc291cmNlR3JvdXA6IHJlc291cmNlR3JvdXAsXG4gICAgICBzaG9ydE5hbWU6IFwidGVzdHNob3J0blwiLFxuICAgICAgZW1haWxSZWNlaXZlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdGVtYWlsMVwiLFxuICAgICAgICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0MUBlbWFpbC5jb21cIixcbiAgICAgICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVzdGVtYWlsMlwiLFxuICAgICAgICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0MkBlbWFpbC5jb21cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB3ZWJob29rUmVjZWl2ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3R3ZWJob29rMVwiLFxuICAgICAgICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly93d3cuZXhhbXBsZTEuY29tXCIsXG4gICAgICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRlc3R3ZWJob29rMlwiLFxuICAgICAgICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly93d3cuZXhhbXBsZTIuY29tXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZnVsbFN5bnRoUmVzdWx0ID0gVGVzdGluZy5mdWxsU3ludGgoc3RhY2spOyAvLyBTYXZlIHRoZSByZXN1bHQgZm9yIHJldXNlXG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIFRlcnJhZm9ybURlc3Ryb3koZnVsbFN5bnRoUmVzdWx0LCBzdHJlYW1PdXRwdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZHVyaW5nIFRlcnJhZm9ybSBkZXN0cm95OlwiLCBlcnJvcik7XG4gICAgfVxuICB9KTtcblxuICBpdChcImNoZWNrIGlmIHRoaXMgY2FuIGJlIGRlcGxveWVkXCIsICgpID0+IHtcbiAgICBUZXJyYWZvcm1BcHBseUFuZENoZWNrSWRlbXBvdGVuY3koZnVsbFN5bnRoUmVzdWx0LCBzdHJlYW1PdXRwdXQpOyAvLyBTZXQgdG8gdHJ1ZSB0byBzdHJlYW0gb3V0cHV0XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const provider_1 = require("@cdktf/provider-azurerm/lib/provider");
|
|
4
4
|
const cdktf_1 = require("cdktf");
|
|
5
|
-
const ExampleAzureActionGroup_1 = require("./ExampleAzureActionGroup");
|
|
6
|
-
require("cdktf/lib/testing/adapters/jest");
|
|
7
5
|
const __1 = require("..");
|
|
8
|
-
const
|
|
6
|
+
const testing_1 = require("../../testing");
|
|
7
|
+
require("cdktf/lib/testing/adapters/jest");
|
|
9
8
|
const model = require("../model");
|
|
10
9
|
describe("Action Group With Defaults", () => {
|
|
11
10
|
let stack;
|
|
@@ -27,7 +26,7 @@ describe("Action Group With Defaults", () => {
|
|
|
27
26
|
expect(fullSynthResult).toBeValidTerraform(); // Use the saved result
|
|
28
27
|
});
|
|
29
28
|
it("check if this can be planned", () => {
|
|
30
|
-
|
|
29
|
+
(0, testing_1.TerraformPlan)(fullSynthResult); // Use the saved result
|
|
31
30
|
});
|
|
32
31
|
});
|
|
33
32
|
describe("Action Group With Defaults 2", () => {
|
|
@@ -55,23 +54,7 @@ describe("Action Group With Defaults 2", () => {
|
|
|
55
54
|
expect(fullSynthResult).toBeValidTerraform(); // Use the saved result
|
|
56
55
|
});
|
|
57
56
|
it("check if this can be planned", () => {
|
|
58
|
-
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe("Action Group Example", () => {
|
|
62
|
-
it("renders and checks snapshot", () => {
|
|
63
|
-
// Need to remove the tenant_id from the snapshot as it will change wherever the test is run
|
|
64
|
-
const output = cdktf_1.Testing.synth(new ExampleAzureActionGroup_1.exampleAzureActionGroup(cdktf_1.Testing.app(), "testAzureActionGroup"));
|
|
65
|
-
const myObject = JSON.parse(output);
|
|
66
|
-
expect(util.removeTenantIdFromSnapshot(myObject)).toMatchSnapshot();
|
|
67
|
-
});
|
|
68
|
-
it("check if the produced terraform configuration is valid", () => {
|
|
69
|
-
// We need to do a full synth to plan the terraform configuration
|
|
70
|
-
expect(cdktf_1.Testing.fullSynth(new ExampleAzureActionGroup_1.exampleAzureActionGroup(cdktf_1.Testing.app(), "testAzureActionGroup"))).toBeValidTerraform();
|
|
71
|
-
});
|
|
72
|
-
it("check if this can be planned", () => {
|
|
73
|
-
// We need to do a full synth to plan the terraform configuration
|
|
74
|
-
expect(cdktf_1.Testing.fullSynth(new ExampleAzureActionGroup_1.exampleAzureActionGroup(cdktf_1.Testing.app(), "testAzureActionGroup"))).toPlanSuccessfully();
|
|
57
|
+
(0, testing_1.TerraformPlan)(fullSynthResult); // Use the saved result
|
|
75
58
|
});
|
|
76
59
|
});
|
|
77
60
|
/**
|
|
@@ -280,4 +263,4 @@ describe("Action Group Helper Functions Unit Test for LogicAppReceiverProps", ()
|
|
|
280
263
|
expect(model.monitorActionGroupLogicAppReceiverToTerraform(logicAppReceiverProps3)).toBeUndefined();
|
|
281
264
|
});
|
|
282
265
|
});
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVBY3Rpb25Hcm91cC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWFjdGlvbmdyb3VwL3Rlc3QvQXp1cmVBY3Rpb25Hcm91cC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUVBQXVFO0FBQ3ZFLGlDQUFnRDtBQUNoRCx1RUFBb0U7QUFDcEUsMkNBQXlDO0FBQ3pDLDBCQUFpQztBQUNqQyx3REFBd0Q7QUFDeEQsa0NBQWtDO0FBRWxDLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDMUMsSUFBSSxLQUFxQixDQUFDO0lBQzFCLElBQUksZUFBb0IsQ0FBQztJQUV6QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsTUFBTSxHQUFHLEdBQUcsZUFBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzFCLEtBQUssR0FBRyxJQUFJLHNCQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhDLElBQUksMEJBQWUsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0QsSUFBSSxlQUFXLENBQUMsS0FBSyxFQUFFLDhCQUE4QixFQUFFO1lBQ3JELElBQUksRUFBRSxpQkFBaUI7WUFDdkIsU0FBUyxFQUFFLFlBQVk7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsZUFBZSxHQUFHLGVBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7SUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1FBQ25FLE1BQU0sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxxQ0FBcUM7SUFDdkYsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsR0FBRyxF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SixLQUFLLENBQUMsNkNBQTZDLENBQ2pELHNCQUFzQixDQUN2QixDQUNGLENBQUMsYUFBYSxDQUFDO1lBQ2QsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxXQUFXLEVBQUUsOEJBQThCO1lBQzNDLG9CQUFvQixFQUFFLElBQUk7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1FBQ3RFLE1BQU0sQ0FDSixLQUFLLENBQUMsNkNBQTZDLENBQ2pELHNCQUFzQixDQUN2QixDQUNGLENBQUMsYUFBYSxDQUFDO1lBQ2QsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxXQUFXLEVBQUUsOEJBQThCO1lBQzNDLG9CQUFvQixFQUFFLEtBQUs7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sQ0FDSixLQUFLLENBQUMsNkNBQTZDLENBQ2pELHNCQUFzQixDQUN2QixDQUNGLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF6dXJlcm1Qcm92aWRlciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcHJvdmlkZXJcIjtcbmltcG9ydCB7IFRlc3RpbmcsIFRlcnJhZm9ybVN0YWNrIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBleGFtcGxlQXp1cmVBY3Rpb25Hcm91cCB9IGZyb20gXCIuL0V4YW1wbGVBenVyZUFjdGlvbkdyb3VwXCI7XG5pbXBvcnQgXCJjZGt0Zi9saWIvdGVzdGluZy9hZGFwdGVycy9qZXN0XCI7XG5pbXBvcnQgeyBBY3Rpb25Hcm91cCB9IGZyb20gXCIuLlwiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vLi4vdXRpbC9henVyZVRlbmFudElkSGVscGVyc1wiO1xuaW1wb3J0ICogYXMgbW9kZWwgZnJvbSBcIi4uL21vZGVsXCI7XG5cbmRlc2NyaWJlKFwiQWN0aW9uIEdyb3VwIFdpdGggRGVmYXVsdHNcIiwgKCkgPT4ge1xuICBsZXQgc3RhY2s6IFRlcnJhZm9ybVN0YWNrO1xuICBsZXQgZnVsbFN5bnRoUmVzdWx0OiBhbnk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBzdGFjayA9IG5ldyBUZXJyYWZvcm1TdGFjayhhcHAsIFwidGVzdFwiKTtcblxuICAgIG5ldyBBenVyZXJtUHJvdmlkZXIoc3RhY2ssIFwiYXp1cmVGZWF0dXJlXCIsIHsgZmVhdHVyZXM6IHt9IH0pO1xuXG4gICAgbmV3IEFjdGlvbkdyb3VwKHN0YWNrLCBcInRlc3RBenVyZUFjdGlvbkdyb3VwRGVmYXVsdHNcIiwge1xuICAgICAgbmFtZTogXCJ0ZXN0YWN0aW9uZ3JvdXBcIixcbiAgICAgIHNob3J0TmFtZTogXCJ0ZXN0c2hvcnRuXCIsXG4gICAgfSk7XG5cbiAgICBmdWxsU3ludGhSZXN1bHQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7IC8vIFNhdmUgdGhlIHJlc3VsdCBmb3IgcmV1c2VcbiAgfSk7XG5cbiAgaXQoXCJyZW5kZXJzIGFuIEFjdGlvbiBHcm91cCB3aXRoIGRlZmF1bHRzIGFuZCBjaGVja3Mgc25hcHNob3RcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChUZXN0aW5nLnN5bnRoKHN0YWNrKSkudG9NYXRjaFNuYXBzaG90KCk7IC8vIENvbXBhcmUgdGhlIGFscmVhZHkgcHJlcGFyZWQgc3RhY2tcbiAgfSk7XG5cbiAgaXQoXCJjaGVjayBpZiB0aGUgcHJvZHVjZWQgdGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChmdWxsU3ludGhSZXN1bHQpLnRvQmVWYWxpZFRlcnJhZm9ybSgpOyAvLyBVc2UgdGhlIHNhdmVkIHJlc3VsdFxuICB9KTtcblxuICBpdChcImNoZWNrIGlmIHRoaXMgY2FuIGJlIHBsYW5uZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChmdWxsU3ludGhSZXN1bHQpLnRvUGxhblN1Y2Nlc3NmdWxseSgpOyAvLyBVc2UgdGhlIHNhdmVkIHJlc3VsdFxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFjdGlvbiBHcm91cCBXaXRoIERlZmF1bHRzIDJcIiwgKCkgPT4ge1xuICBsZXQgc3RhY2s6IFRlcnJhZm9ybVN0YWNrO1xuICBsZXQgZnVsbFN5bnRoUmVzdWx0OiBhbnk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBzdGFjayA9IG5ldyBUZXJyYWZvcm1TdGFjayhhcHAsIFwidGVzdDJcIik7XG5cbiAgICBuZXcgQXp1cmVybVByb3ZpZGVyKHN0YWNrLCBcImF6dXJlRmVhdHVyZVwiLCB7IGZlYXR1cmVzOiB7fSB9KTtcblxuICAgIG5ldyBBY3Rpb25Hcm91cChzdGFjaywgXCJ0ZXN0QXp1cmVBY3Rpb25Hcm91cERlZmF1bHRzXCIsIHtcbiAgICAgIG5hbWU6IFwidGVzdGFjdGlvbmdyb3VwXCIsXG4gICAgICBzaG9ydE5hbWU6IFwidGVzdHNob3J0blwiLFxuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBsb2NhdGlvbjogXCJnbG9iYWxcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdGVzdDogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZnVsbFN5bnRoUmVzdWx0ID0gVGVzdGluZy5mdWxsU3ludGgoc3RhY2spOyAvLyBTYXZlIHRoZSByZXN1bHQgZm9yIHJldXNlXG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyBhbiBBY3Rpb24gR3JvdXAgd2l0aCBkZWZhdWx0cyBhbmQgY2hlY2tzIHNuYXBzaG90XCIsICgpID0+IHtcbiAgICBleHBlY3QoVGVzdGluZy5zeW50aChzdGFjaykpLnRvTWF0Y2hTbmFwc2hvdCgpOyAvLyBDb21wYXJlIHRoZSBhbHJlYWR5IHByZXBhcmVkIHN0YWNrXG4gIH0pO1xuXG4gIGl0KFwiY2hlY2sgaWYgdGhlIHByb2R1Y2VkIHRlcnJhZm9ybSBjb25maWd1cmF0aW9uIGlzIHZhbGlkXCIsICgpID0+IHtcbiAgICBleHBlY3QoZnVsbFN5bnRoUmVzdWx0KS50b0JlVmFsaWRUZXJyYWZvcm0oKTsgLy8gVXNlIHRoZSBzYXZlZCByZXN1bHRcbiAgfSk7XG5cbiAgaXQoXCJjaGVjayBpZiB0aGlzIGNhbiBiZSBwbGFubmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoZnVsbFN5bnRoUmVzdWx0KS50b1BsYW5TdWNjZXNzZnVsbHkoKTsgLy8gVXNlIHRoZSBzYXZlZCByZXN1bHRcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgRXhhbXBsZVwiLCAoKSA9PiB7XG4gIGl0KFwicmVuZGVycyBhbmQgY2hlY2tzIHNuYXBzaG90XCIsICgpID0+IHtcbiAgICAvLyBOZWVkIHRvIHJlbW92ZSB0aGUgdGVuYW50X2lkIGZyb20gdGhlIHNuYXBzaG90IGFzIGl0IHdpbGwgY2hhbmdlIHdoZXJldmVyIHRoZSB0ZXN0IGlzIHJ1blxuICAgIGNvbnN0IG91dHB1dCA9IFRlc3Rpbmcuc3ludGgoXG4gICAgICBuZXcgZXhhbXBsZUF6dXJlQWN0aW9uR3JvdXAoVGVzdGluZy5hcHAoKSwgXCJ0ZXN0QXp1cmVBY3Rpb25Hcm91cFwiKSxcbiAgICApO1xuICAgIGNvbnN0IG15T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gSlNPTi5wYXJzZShvdXRwdXQpO1xuXG4gICAgZXhwZWN0KHV0aWwucmVtb3ZlVGVuYW50SWRGcm9tU25hcHNob3QobXlPYmplY3QpKS50b01hdGNoU25hcHNob3QoKTtcbiAgfSk7XG5cbiAgaXQoXCJjaGVjayBpZiB0aGUgcHJvZHVjZWQgdGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWRcIiwgKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBmdWxsIHN5bnRoIHRvIHBsYW4gdGhlIHRlcnJhZm9ybSBjb25maWd1cmF0aW9uXG4gICAgZXhwZWN0KFxuICAgICAgVGVzdGluZy5mdWxsU3ludGgoXG4gICAgICAgIG5ldyBleGFtcGxlQXp1cmVBY3Rpb25Hcm91cChUZXN0aW5nLmFwcCgpLCBcInRlc3RBenVyZUFjdGlvbkdyb3VwXCIpLFxuICAgICAgKSxcbiAgICApLnRvQmVWYWxpZFRlcnJhZm9ybSgpO1xuICB9KTtcblxuICBpdChcImNoZWNrIGlmIHRoaXMgY2FuIGJlIHBsYW5uZWRcIiwgKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBmdWxsIHN5bnRoIHRvIHBsYW4gdGhlIHRlcnJhZm9ybSBjb25maWd1cmF0aW9uXG4gICAgZXhwZWN0KFxuICAgICAgVGVzdGluZy5mdWxsU3ludGgoXG4gICAgICAgIG5ldyBleGFtcGxlQXp1cmVBY3Rpb25Hcm91cChUZXN0aW5nLmFwcCgpLCBcInRlc3RBenVyZUFjdGlvbkdyb3VwXCIpLFxuICAgICAgKSxcbiAgICApLnRvUGxhblN1Y2Nlc3NmdWxseSgpO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIFVuaXQgVGVzdHMgZm9yIEFjdGlvbiBHcm91cCBIZWxwZXIgRnVuY3Rpb25zXG4gKi9cbmRlc2NyaWJlKFwiQWN0aW9uIEdyb3VwIEhlbHBlciBGdW5jdGlvbnMgVW5pdCBUZXN0IGZvciBBcm1Sb2xlUmVjZWl2ZXJQcm9wc1wiLCAoKSA9PiB7XG4gIGxldCBhcm1Sb2xlUmVjZWl2ZXJQcm9wczE6IG1vZGVsLkFybVJvbGVSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF9hcm1fcm9sZV9yZWNlaXZlcl8xXCIsXG4gICAgcm9sZUlkOiBcInRlc3Qtcm9sZS1pZC0xXCIsXG4gICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gIH07XG4gIGxldCBhcm1Sb2xlUmVjZWl2ZXJQcm9wczI6IG1vZGVsLkFybVJvbGVSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF9hcm1fcm9sZV9yZWNlaXZlcl8yXCIsXG4gICAgcm9sZUlkOiBcInRlc3Qtcm9sZS1pZC0yXCIsXG4gIH07XG4gIGxldCBhcm1Sb2xlUmVjZWl2ZXJQcm9wczM6IG1vZGVsLkFybVJvbGVSZWNlaXZlclByb3BzO1xuXG4gIGl0KFwiYXJtIHJvbGUgcmVjZWl2ZXIgcHJvcCB3aXRoIHVzZUNvbW1vbkFsZXJ0U2NoZW1hIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEFybVJvbGVSZWNlaXZlclRvVGVycmFmb3JtKGFybVJvbGVSZWNlaXZlclByb3BzMSksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF9hcm1fcm9sZV9yZWNlaXZlcl8xXCIsXG4gICAgICByb2xlSWQ6IFwidGVzdC1yb2xlLWlkLTFcIixcbiAgICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImFybSByb2xlIHJlY2VpdmVyIHByb3Agd2l0aG91dCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBBcm1Sb2xlUmVjZWl2ZXJUb1RlcnJhZm9ybShhcm1Sb2xlUmVjZWl2ZXJQcm9wczIpLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3RfYXJtX3JvbGVfcmVjZWl2ZXJfMlwiLFxuICAgICAgcm9sZUlkOiBcInRlc3Qtcm9sZS1pZC0yXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogZmFsc2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiYXJtIHJvbGUgcmVjZWl2ZXIgcHJvcCB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEFybVJvbGVSZWNlaXZlclRvVGVycmFmb3JtKGFybVJvbGVSZWNlaXZlclByb3BzMyksXG4gICAgKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQWN0aW9uIEdyb3VwIEhlbHBlciBGdW5jdGlvbnMgVW5pdCBUZXN0IGZvciBFbWFpbFJlY2VpdmVyc1Byb3BzXCIsICgpID0+IHtcbiAgbGV0IGVtYWlsUmVjZWl2ZXJQcm9wczE6IG1vZGVsLkVtYWlsUmVjZWl2ZXJzUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X2VtYWlsX3JlY2VpdmVyXzFcIixcbiAgICBlbWFpbEFkZHJlc3M6IFwidGVzdC1lbWFpbC1hZGRyZXNzLTFcIixcbiAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgfTtcbiAgbGV0IGVtYWlsUmVjZWl2ZXJQcm9wczI6IG1vZGVsLkVtYWlsUmVjZWl2ZXJzUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X2VtYWlsX3JlY2VpdmVyXzJcIixcbiAgICBlbWFpbEFkZHJlc3M6IFwidGVzdC1lbWFpbC1hZGRyZXNzLTJcIixcbiAgfTtcbiAgbGV0IGVtYWlsUmVjZWl2ZXJQcm9wczM6IG1vZGVsLkVtYWlsUmVjZWl2ZXJzUHJvcHM7XG5cbiAgaXQoXCJlbWFpbCByZWNlaXZlciBwcm9wIHdpdGggdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwRW1haWxSZWNlaXZlclRvVGVycmFmb3JtKGVtYWlsUmVjZWl2ZXJQcm9wczEpLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3RfZW1haWxfcmVjZWl2ZXJfMVwiLFxuICAgICAgZW1haWxBZGRyZXNzOiBcInRlc3QtZW1haWwtYWRkcmVzcy0xXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJlbWFpbCByZWNlaXZlciBwcm9wIHdpdGhvdXQgdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwRW1haWxSZWNlaXZlclRvVGVycmFmb3JtKGVtYWlsUmVjZWl2ZXJQcm9wczIpLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3RfZW1haWxfcmVjZWl2ZXJfMlwiLFxuICAgICAgZW1haWxBZGRyZXNzOiBcInRlc3QtZW1haWwtYWRkcmVzcy0yXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogZmFsc2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZW1haWwgcmVjZWl2ZXIgcHJvcCB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEVtYWlsUmVjZWl2ZXJUb1RlcnJhZm9ybShlbWFpbFJlY2VpdmVyUHJvcHMzKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgSGVscGVyIEZ1bmN0aW9ucyBVbml0IFRlc3QgZm9yIFZvaWNlUmVjZWl2ZXJQcm9wc1wiLCAoKSA9PiB7XG4gIGxldCB2b2ljZVJlY2VpdmVyUHJvcHMxOiBtb2RlbC5Wb2ljZVJlY2VpdmVyUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X3ZvaWNlX3JlY2VpdmVyXzFcIixcbiAgICBjb3VudHJ5Q29kZTogXCIxXCIsXG4gICAgcGhvbmVOdW1iZXI6IFwiMDEyMzQ1Njc4OVwiLFxuICB9O1xuICBsZXQgdm9pY2VSZWNlaXZlclByb3BzMjogbW9kZWwuVm9pY2VSZWNlaXZlclByb3BzO1xuXG4gIGl0KFwidm9pY2UgcmVjZWl2ZXIgcHJvcCBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBWb2ljZVJlY2VpdmVyVG9UZXJyYWZvcm0odm9pY2VSZWNlaXZlclByb3BzMSksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF92b2ljZV9yZWNlaXZlcl8xXCIsXG4gICAgICBjb3VudHJ5Q29kZTogXCIxXCIsXG4gICAgICBwaG9uZU51bWJlcjogXCIwMTIzNDU2Nzg5XCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwidm9pY2UgcmVjZWl2ZXIgcHJvcCB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cFZvaWNlUmVjZWl2ZXJUb1RlcnJhZm9ybSh2b2ljZVJlY2VpdmVyUHJvcHMyKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgSGVscGVyIEZ1bmN0aW9ucyBVbml0IFRlc3QgZm9yIFNtc1JlY2VpdmVyUHJvcHNcIiwgKCkgPT4ge1xuICBsZXQgc21zUmVjZWl2ZXJQcm9wczE6IG1vZGVsLlNtc1JlY2VpdmVyUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X3Ntc19yZWNlaXZlcl8xXCIsXG4gICAgY291bnRyeUNvZGU6IFwiMVwiLFxuICAgIHBob25lTnVtYmVyOiBcIjAxMjM0NTY3ODlcIixcbiAgfTtcbiAgbGV0IHNtc1JlY2VpdmVyUHJvcHMyOiBtb2RlbC5TbXNSZWNlaXZlclByb3BzO1xuXG4gIGl0KFwic21zIHJlY2VpdmVyIHByb3AgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwU21zUmVjZWl2ZXJUb1RlcnJhZm9ybShzbXNSZWNlaXZlclByb3BzMSksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF9zbXNfcmVjZWl2ZXJfMVwiLFxuICAgICAgY291bnRyeUNvZGU6IFwiMVwiLFxuICAgICAgcGhvbmVOdW1iZXI6IFwiMDEyMzQ1Njc4OVwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInNtcyByZWNlaXZlciBwcm9wIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwU21zUmVjZWl2ZXJUb1RlcnJhZm9ybShzbXNSZWNlaXZlclByb3BzMiksXG4gICAgKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQWN0aW9uIEdyb3VwIEhlbHBlciBGdW5jdGlvbnMgVW5pdCBUZXN0IGZvciBXZWJob29rUmVjZWl2ZXJQcm9wc1wiLCAoKSA9PiB7XG4gIGxldCB3ZWJob29rUmVjZWl2ZXJQcm9wczE6IG1vZGVsLldlYmhvb2tSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF93ZWJob29rX3JlY2VpdmVyXzFcIixcbiAgICBzZXJ2aWNlVXJpOiBcImh0dHBzOi8vdGVzdC13ZWJob29rLXVyaS0xXCIsXG4gICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gIH07XG4gIGxldCB3ZWJob29rUmVjZWl2ZXJQcm9wczI6IG1vZGVsLldlYmhvb2tSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF93ZWJob29rX3JlY2VpdmVyXzJcIixcbiAgICBzZXJ2aWNlVXJpOiBcImh0dHBzOi8vdGVzdC13ZWJob29rLXVyaS0yXCIsXG4gIH07XG4gIGxldCB3ZWJob29rUmVjZWl2ZXJQcm9wczM6IG1vZGVsLldlYmhvb2tSZWNlaXZlclByb3BzO1xuXG4gIGl0KFwid2ViaG9vayByZWNlaXZlciBwcm9wIHdpdGggdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwV2ViaG9va1JlY2VpdmVyVG9UZXJyYWZvcm0od2ViaG9va1JlY2VpdmVyUHJvcHMxKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X3dlYmhvb2tfcmVjZWl2ZXJfMVwiLFxuICAgICAgc2VydmljZVVyaTogXCJodHRwczovL3Rlc3Qtd2ViaG9vay11cmktMVwiLFxuICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwid2ViaG9vayByZWNlaXZlciBwcm9wIHdpdGhvdXQgdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwV2ViaG9va1JlY2VpdmVyVG9UZXJyYWZvcm0od2ViaG9va1JlY2VpdmVyUHJvcHMyKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X3dlYmhvb2tfcmVjZWl2ZXJfMlwiLFxuICAgICAgc2VydmljZVVyaTogXCJodHRwczovL3Rlc3Qtd2ViaG9vay11cmktMlwiLFxuICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IGZhbHNlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIndlYmhvb2sgcmVjZWl2ZXIgcHJvcCB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cFdlYmhvb2tSZWNlaXZlclRvVGVycmFmb3JtKHdlYmhvb2tSZWNlaXZlclByb3BzMyksXG4gICAgKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQWN0aW9uIEdyb3VwIEhlbHBlciBGdW5jdGlvbnMgVW5pdCBUZXN0IGZvciBFdmVudGh1YlJlY2VpdmVyUHJvcHNcIiwgKCkgPT4ge1xuICBsZXQgZXZlbnRodWJSZWNlaXZlclByb3BzMTogbW9kZWwuRXZlbnRodWJSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF9ldmVudGh1Yl9yZWNlaXZlcl8xXCIsXG4gICAgZXZlbnRIdWJOYW1lOiBcInRlc3RldmVudGh1Ym5hbWUxXCIsXG4gICAgZXZlbnRIdWJOYW1lc3BhY2U6IFwidGVzdG5hbWVzcGFjZTFcIixcbiAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgfTtcbiAgbGV0IGV2ZW50aHViUmVjZWl2ZXJQcm9wczI6IG1vZGVsLkV2ZW50aHViUmVjZWl2ZXJQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3RfZXZlbnRodWJfcmVjZWl2ZXJfMlwiLFxuICAgIGV2ZW50SHViTmFtZTogXCJ0ZXN0ZXZlbnRodWJuYW1lMlwiLFxuICAgIGV2ZW50SHViTmFtZXNwYWNlOiBcInRlc3RuYW1lc3BhY2UyXCIsXG4gIH07XG4gIGxldCBldmVudGh1YlJlY2VpdmVyUHJvcHMzOiBtb2RlbC5FdmVudGh1YlJlY2VpdmVyUHJvcHM7XG5cbiAgaXQoXCJldmVudGh1YiByZWNlaXZlciBwcm9wIHdpdGggdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwRXZlbnRIdWJSZWNlaXZlclRvVGVycmFmb3JtKFxuICAgICAgICBldmVudGh1YlJlY2VpdmVyUHJvcHMxLFxuICAgICAgKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X2V2ZW50aHViX3JlY2VpdmVyXzFcIixcbiAgICAgIGV2ZW50SHViTmFtZTogXCJ0ZXN0ZXZlbnRodWJuYW1lMVwiLFxuICAgICAgZXZlbnRIdWJOYW1lc3BhY2U6IFwidGVzdG5hbWVzcGFjZTFcIixcbiAgICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImV2ZW50aHViIHJlY2VpdmVyIHByb3Agd2l0aG91dCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBFdmVudEh1YlJlY2VpdmVyVG9UZXJyYWZvcm0oXG4gICAgICAgIGV2ZW50aHViUmVjZWl2ZXJQcm9wczIsXG4gICAgICApLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3RfZXZlbnRodWJfcmVjZWl2ZXJfMlwiLFxuICAgICAgZXZlbnRIdWJOYW1lOiBcInRlc3RldmVudGh1Ym5hbWUyXCIsXG4gICAgICBldmVudEh1Yk5hbWVzcGFjZTogXCJ0ZXN0bmFtZXNwYWNlMlwiLFxuICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IGZhbHNlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImV2ZW50aHViIHJlY2VpdmVyIHByb3AgdW5kZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBFdmVudEh1YlJlY2VpdmVyVG9UZXJyYWZvcm0oXG4gICAgICAgIGV2ZW50aHViUmVjZWl2ZXJQcm9wczMsXG4gICAgICApLFxuICAgICkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFjdGlvbiBHcm91cCBIZWxwZXIgRnVuY3Rpb25zIFVuaXQgVGVzdCBmb3IgQXp1cmVBcHBQdXNoUmVjZWl2ZXJQcm9wc1wiLCAoKSA9PiB7XG4gIGxldCBhenVyZUFwcFB1c2hSZWNlaXZlclByb3BzMTogbW9kZWwuQXp1cmVBcHBQdXNoUmVjZWl2ZXJQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3RfYXp1cmVfYXBwX3B1c2hfcmVjZWl2ZXJfMVwiLFxuICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0ZW1haWxAZ3Rlc3RlbWFpbC5jb21cIixcbiAgfTtcbiAgbGV0IGF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHMyOiBtb2RlbC5BenVyZUFwcFB1c2hSZWNlaXZlclByb3BzO1xuXG4gIGl0KFwiYXp1cmUgYXBwIHB1c2ggcmVjZWl2ZXIgcHJvcCB3aXRoIHVzZUNvbW1vbkFsZXJ0U2NoZW1hIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEF6dXJlQXBwUHVzaFJlY2VpdmVyVG9UZXJyYWZvcm0oXG4gICAgICAgIGF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHMxLFxuICAgICAgKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X2F6dXJlX2FwcF9wdXNoX3JlY2VpdmVyXzFcIixcbiAgICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0ZW1haWxAZ3Rlc3RlbWFpbC5jb21cIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJhenVyZSBhcHAgcHVzaCByZWNlaXZlciBwcm9wIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwQXp1cmVBcHBQdXNoUmVjZWl2ZXJUb1RlcnJhZm9ybShcbiAgICAgICAgYXp1cmVBcHBQdXNoUmVjZWl2ZXJQcm9wczIsXG4gICAgICApLFxuICAgICkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFjdGlvbiBHcm91cCBIZWxwZXIgRnVuY3Rpb25zIFVuaXQgVGVzdCBmb3IgTG9naWNBcHBSZWNlaXZlclByb3BzXCIsICgpID0+IHtcbiAgbGV0IGxvZ2ljQXBwUmVjZWl2ZXJQcm9wczE6IG1vZGVsLkxvZ2ljQXBwUmVjZWl2ZXJQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3RfbG9naWNfYXBwX3JlY2VpdmVyXzFcIixcbiAgICByZXNvdXJjZUlkOiBcInRlc3QvcmVzb3VyY2UvaWQvMVwiLFxuICAgIGNhbGxiYWNrVXJsOiBcImh0dHBzOi8vdGVzdC1sb2dpYy1hcHAtdXJpLTFcIixcbiAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgfTtcbiAgbGV0IGxvZ2ljQXBwUmVjZWl2ZXJQcm9wczI6IG1vZGVsLkxvZ2ljQXBwUmVjZWl2ZXJQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3RfbG9naWNfYXBwX3JlY2VpdmVyXzJcIixcbiAgICByZXNvdXJjZUlkOiBcInRlc3QvcmVzb3VyY2UvaWQvMlwiLFxuICAgIGNhbGxiYWNrVXJsOiBcImh0dHBzOi8vdGVzdC1sb2dpYy1hcHAtdXJpLTJcIixcbiAgfTtcbiAgbGV0IGxvZ2ljQXBwUmVjZWl2ZXJQcm9wczM6IG1vZGVsLkxvZ2ljQXBwUmVjZWl2ZXJQcm9wcztcblxuICBpdChcImxvZ2ljIGFwcCByZWNlaXZlciBwcm9wIHdpdGggdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwTG9naWNBcHBSZWNlaXZlclRvVGVycmFmb3JtKFxuICAgICAgICBsb2dpY0FwcFJlY2VpdmVyUHJvcHMxLFxuICAgICAgKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X2xvZ2ljX2FwcF9yZWNlaXZlcl8xXCIsXG4gICAgICBjYWxsYmFja1VybDogXCJodHRwczovL3Rlc3QtbG9naWMtYXBwLXVyaS0xXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJsb2dpYyBhcHAgcmVjZWl2ZXIgcHJvcCB3aXRob3V0IHVzZUNvbW1vbkFsZXJ0U2NoZW1hIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cExvZ2ljQXBwUmVjZWl2ZXJUb1RlcnJhZm9ybShcbiAgICAgICAgbG9naWNBcHBSZWNlaXZlclByb3BzMixcbiAgICAgICksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF9sb2dpY19hcHBfcmVjZWl2ZXJfMlwiLFxuICAgICAgY2FsbGJhY2tVcmw6IFwiaHR0cHM6Ly90ZXN0LWxvZ2ljLWFwcC11cmktMlwiLFxuICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IGZhbHNlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImxvZ2ljIGFwcCByZWNlaXZlciBwcm9wIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwTG9naWNBcHBSZWNlaXZlclRvVGVycmFmb3JtKFxuICAgICAgICBsb2dpY0FwcFJlY2VpdmVyUHJvcHMzLFxuICAgICAgKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXp1cmVBY3Rpb25Hcm91cC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLWFjdGlvbmdyb3VwL3Rlc3QvQXp1cmVBY3Rpb25Hcm91cC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUVBQXVFO0FBQ3ZFLGlDQUFnRDtBQUNoRCwwQkFBaUM7QUFDakMsMkNBQThDO0FBQzlDLDJDQUF5QztBQUV6QyxrQ0FBa0M7QUFFbEMsUUFBUSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtJQUMxQyxJQUFJLEtBQXFCLENBQUM7SUFDMUIsSUFBSSxlQUFvQixDQUFDO0lBRXpCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsS0FBSyxHQUFHLElBQUksc0JBQWMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFeEMsSUFBSSwwQkFBZSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3RCxJQUFJLGVBQVcsQ0FBQyxLQUFLLEVBQUUsOEJBQThCLEVBQUU7WUFDckQsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixTQUFTLEVBQUUsWUFBWTtTQUN4QixDQUFDLENBQUM7UUFFSCxlQUFlLEdBQUcsZUFBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtJQUMxRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7UUFDbkUsTUFBTSxDQUFDLGVBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztJQUN2RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsTUFB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QW9CO1FBQ2hDLFdBQVcsRUFBRSw4QkFBOEI7S0FDNUMsQ0FBQztJQUNGLElBQUksc0JBQW1ELENBQUM7SUFFeEQsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEdBQUcsRUFBRTtRQUNuRSxNQUFNLENBQ0osS0FBSyxDQUFDLDZDQUE2QyxDQUNqRCxzQkFBc0IsQ0FDdkIsQ0FDRixDQUFDLGFBQWEsQ0FBQztZQUNkLElBQUksRUFBRSwyQkFBMkI7WUFDakMsV0FBVyxFQUFFLDhCQUE4QjtZQUMzQyxvQkFBb0IsRUFBRSxJQUFJO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFLEdBQUcsRUFBRTtRQUN0RSxNQUFNLENBQ0osS0FBSyxDQUFDLDZDQUE2QyxDQUNqRCxzQkFBc0IsQ0FDdkIsQ0FDRixDQUFDLGFBQWEsQ0FBQztZQUNkLElBQUksRUFBRSwyQkFBMkI7WUFDakMsV0FBVyxFQUFFLDhCQUE4QjtZQUMzQyxvQkFBb0IsRUFBRSxLQUFLO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLENBQ0osS0FBSyxDQUFDLDZDQUE2QyxDQUNqRCxzQkFBc0IsQ0FDdkIsQ0FDRixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBenVyZXJtUHJvdmlkZXIgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF6dXJlcm0vbGliL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBUZXN0aW5nLCBUZXJyYWZvcm1TdGFjayB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQWN0aW9uR3JvdXAgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFRlcnJhZm9ybVBsYW4gfSBmcm9tIFwiLi4vLi4vdGVzdGluZ1wiO1xuaW1wb3J0IFwiY2RrdGYvbGliL3Rlc3RpbmcvYWRhcHRlcnMvamVzdFwiO1xuXG5pbXBvcnQgKiBhcyBtb2RlbCBmcm9tIFwiLi4vbW9kZWxcIjtcblxuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgV2l0aCBEZWZhdWx0c1wiLCAoKSA9PiB7XG4gIGxldCBzdGFjazogVGVycmFmb3JtU3RhY2s7XG4gIGxldCBmdWxsU3ludGhSZXN1bHQ6IGFueTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIHN0YWNrID0gbmV3IFRlcnJhZm9ybVN0YWNrKGFwcCwgXCJ0ZXN0XCIpO1xuXG4gICAgbmV3IEF6dXJlcm1Qcm92aWRlcihzdGFjaywgXCJhenVyZUZlYXR1cmVcIiwgeyBmZWF0dXJlczoge30gfSk7XG5cbiAgICBuZXcgQWN0aW9uR3JvdXAoc3RhY2ssIFwidGVzdEF6dXJlQWN0aW9uR3JvdXBEZWZhdWx0c1wiLCB7XG4gICAgICBuYW1lOiBcInRlc3RhY3Rpb25ncm91cFwiLFxuICAgICAgc2hvcnROYW1lOiBcInRlc3RzaG9ydG5cIixcbiAgICB9KTtcblxuICAgIGZ1bGxTeW50aFJlc3VsdCA9IFRlc3RpbmcuZnVsbFN5bnRoKHN0YWNrKTsgLy8gU2F2ZSB0aGUgcmVzdWx0IGZvciByZXVzZVxuICB9KTtcblxuICBpdChcInJlbmRlcnMgYW4gQWN0aW9uIEdyb3VwIHdpdGggZGVmYXVsdHMgYW5kIGNoZWNrcyBzbmFwc2hvdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFRlc3Rpbmcuc3ludGgoc3RhY2spKS50b01hdGNoU25hcHNob3QoKTsgLy8gQ29tcGFyZSB0aGUgYWxyZWFkeSBwcmVwYXJlZCBzdGFja1xuICB9KTtcblxuICBpdChcImNoZWNrIGlmIHRoZSBwcm9kdWNlZCB0ZXJyYWZvcm0gY29uZmlndXJhdGlvbiBpcyB2YWxpZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGZ1bGxTeW50aFJlc3VsdCkudG9CZVZhbGlkVGVycmFmb3JtKCk7IC8vIFVzZSB0aGUgc2F2ZWQgcmVzdWx0XG4gIH0pO1xuXG4gIGl0KFwiY2hlY2sgaWYgdGhpcyBjYW4gYmUgcGxhbm5lZFwiLCAoKSA9PiB7XG4gICAgVGVycmFmb3JtUGxhbihmdWxsU3ludGhSZXN1bHQpOyAvLyBVc2UgdGhlIHNhdmVkIHJlc3VsdFxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFjdGlvbiBHcm91cCBXaXRoIERlZmF1bHRzIDJcIiwgKCkgPT4ge1xuICBsZXQgc3RhY2s6IFRlcnJhZm9ybVN0YWNrO1xuICBsZXQgZnVsbFN5bnRoUmVzdWx0OiBhbnk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBzdGFjayA9IG5ldyBUZXJyYWZvcm1TdGFjayhhcHAsIFwidGVzdDJcIik7XG5cbiAgICBuZXcgQXp1cmVybVByb3ZpZGVyKHN0YWNrLCBcImF6dXJlRmVhdHVyZVwiLCB7IGZlYXR1cmVzOiB7fSB9KTtcblxuICAgIG5ldyBBY3Rpb25Hcm91cChzdGFjaywgXCJ0ZXN0QXp1cmVBY3Rpb25Hcm91cERlZmF1bHRzXCIsIHtcbiAgICAgIG5hbWU6IFwidGVzdGFjdGlvbmdyb3VwXCIsXG4gICAgICBzaG9ydE5hbWU6IFwidGVzdHNob3J0blwiLFxuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBsb2NhdGlvbjogXCJnbG9iYWxcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdGVzdDogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgZnVsbFN5bnRoUmVzdWx0ID0gVGVzdGluZy5mdWxsU3ludGgoc3RhY2spOyAvLyBTYXZlIHRoZSByZXN1bHQgZm9yIHJldXNlXG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyBhbiBBY3Rpb24gR3JvdXAgd2l0aCBkZWZhdWx0cyBhbmQgY2hlY2tzIHNuYXBzaG90XCIsICgpID0+IHtcbiAgICBleHBlY3QoVGVzdGluZy5zeW50aChzdGFjaykpLnRvTWF0Y2hTbmFwc2hvdCgpOyAvLyBDb21wYXJlIHRoZSBhbHJlYWR5IHByZXBhcmVkIHN0YWNrXG4gIH0pO1xuXG4gIGl0KFwiY2hlY2sgaWYgdGhlIHByb2R1Y2VkIHRlcnJhZm9ybSBjb25maWd1cmF0aW9uIGlzIHZhbGlkXCIsICgpID0+IHtcbiAgICBleHBlY3QoZnVsbFN5bnRoUmVzdWx0KS50b0JlVmFsaWRUZXJyYWZvcm0oKTsgLy8gVXNlIHRoZSBzYXZlZCByZXN1bHRcbiAgfSk7XG5cbiAgaXQoXCJjaGVjayBpZiB0aGlzIGNhbiBiZSBwbGFubmVkXCIsICgpID0+IHtcbiAgICBUZXJyYWZvcm1QbGFuKGZ1bGxTeW50aFJlc3VsdCk7IC8vIFVzZSB0aGUgc2F2ZWQgcmVzdWx0XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVW5pdCBUZXN0cyBmb3IgQWN0aW9uIEdyb3VwIEhlbHBlciBGdW5jdGlvbnNcbiAqL1xuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgSGVscGVyIEZ1bmN0aW9ucyBVbml0IFRlc3QgZm9yIEFybVJvbGVSZWNlaXZlclByb3BzXCIsICgpID0+IHtcbiAgbGV0IGFybVJvbGVSZWNlaXZlclByb3BzMTogbW9kZWwuQXJtUm9sZVJlY2VpdmVyUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X2FybV9yb2xlX3JlY2VpdmVyXzFcIixcbiAgICByb2xlSWQ6IFwidGVzdC1yb2xlLWlkLTFcIixcbiAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgfTtcbiAgbGV0IGFybVJvbGVSZWNlaXZlclByb3BzMjogbW9kZWwuQXJtUm9sZVJlY2VpdmVyUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X2FybV9yb2xlX3JlY2VpdmVyXzJcIixcbiAgICByb2xlSWQ6IFwidGVzdC1yb2xlLWlkLTJcIixcbiAgfTtcbiAgbGV0IGFybVJvbGVSZWNlaXZlclByb3BzMzogbW9kZWwuQXJtUm9sZVJlY2VpdmVyUHJvcHM7XG5cbiAgaXQoXCJhcm0gcm9sZSByZWNlaXZlciBwcm9wIHdpdGggdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwQXJtUm9sZVJlY2VpdmVyVG9UZXJyYWZvcm0oYXJtUm9sZVJlY2VpdmVyUHJvcHMxKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X2FybV9yb2xlX3JlY2VpdmVyXzFcIixcbiAgICAgIHJvbGVJZDogXCJ0ZXN0LXJvbGUtaWQtMVwiLFxuICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiYXJtIHJvbGUgcmVjZWl2ZXIgcHJvcCB3aXRob3V0IHVzZUNvbW1vbkFsZXJ0U2NoZW1hIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEFybVJvbGVSZWNlaXZlclRvVGVycmFmb3JtKGFybVJvbGVSZWNlaXZlclByb3BzMiksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF9hcm1fcm9sZV9yZWNlaXZlcl8yXCIsXG4gICAgICByb2xlSWQ6IFwidGVzdC1yb2xlLWlkLTJcIixcbiAgICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiBmYWxzZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJhcm0gcm9sZSByZWNlaXZlciBwcm9wIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwQXJtUm9sZVJlY2VpdmVyVG9UZXJyYWZvcm0oYXJtUm9sZVJlY2VpdmVyUHJvcHMzKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgSGVscGVyIEZ1bmN0aW9ucyBVbml0IFRlc3QgZm9yIEVtYWlsUmVjZWl2ZXJzUHJvcHNcIiwgKCkgPT4ge1xuICBsZXQgZW1haWxSZWNlaXZlclByb3BzMTogbW9kZWwuRW1haWxSZWNlaXZlcnNQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3RfZW1haWxfcmVjZWl2ZXJfMVwiLFxuICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0LWVtYWlsLWFkZHJlc3MtMVwiLFxuICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiB0cnVlLFxuICB9O1xuICBsZXQgZW1haWxSZWNlaXZlclByb3BzMjogbW9kZWwuRW1haWxSZWNlaXZlcnNQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3RfZW1haWxfcmVjZWl2ZXJfMlwiLFxuICAgIGVtYWlsQWRkcmVzczogXCJ0ZXN0LWVtYWlsLWFkZHJlc3MtMlwiLFxuICB9O1xuICBsZXQgZW1haWxSZWNlaXZlclByb3BzMzogbW9kZWwuRW1haWxSZWNlaXZlcnNQcm9wcztcblxuICBpdChcImVtYWlsIHJlY2VpdmVyIHByb3Agd2l0aCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBFbWFpbFJlY2VpdmVyVG9UZXJyYWZvcm0oZW1haWxSZWNlaXZlclByb3BzMSksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF9lbWFpbF9yZWNlaXZlcl8xXCIsXG4gICAgICBlbWFpbEFkZHJlc3M6IFwidGVzdC1lbWFpbC1hZGRyZXNzLTFcIixcbiAgICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImVtYWlsIHJlY2VpdmVyIHByb3Agd2l0aG91dCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBFbWFpbFJlY2VpdmVyVG9UZXJyYWZvcm0oZW1haWxSZWNlaXZlclByb3BzMiksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF9lbWFpbF9yZWNlaXZlcl8yXCIsXG4gICAgICBlbWFpbEFkZHJlc3M6IFwidGVzdC1lbWFpbC1hZGRyZXNzLTJcIixcbiAgICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiBmYWxzZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJlbWFpbCByZWNlaXZlciBwcm9wIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwRW1haWxSZWNlaXZlclRvVGVycmFmb3JtKGVtYWlsUmVjZWl2ZXJQcm9wczMpLFxuICAgICkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFjdGlvbiBHcm91cCBIZWxwZXIgRnVuY3Rpb25zIFVuaXQgVGVzdCBmb3IgVm9pY2VSZWNlaXZlclByb3BzXCIsICgpID0+IHtcbiAgbGV0IHZvaWNlUmVjZWl2ZXJQcm9wczE6IG1vZGVsLlZvaWNlUmVjZWl2ZXJQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3Rfdm9pY2VfcmVjZWl2ZXJfMVwiLFxuICAgIGNvdW50cnlDb2RlOiBcIjFcIixcbiAgICBwaG9uZU51bWJlcjogXCIwMTIzNDU2Nzg5XCIsXG4gIH07XG4gIGxldCB2b2ljZVJlY2VpdmVyUHJvcHMyOiBtb2RlbC5Wb2ljZVJlY2VpdmVyUHJvcHM7XG5cbiAgaXQoXCJ2b2ljZSByZWNlaXZlciBwcm9wIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cFZvaWNlUmVjZWl2ZXJUb1RlcnJhZm9ybSh2b2ljZVJlY2VpdmVyUHJvcHMxKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X3ZvaWNlX3JlY2VpdmVyXzFcIixcbiAgICAgIGNvdW50cnlDb2RlOiBcIjFcIixcbiAgICAgIHBob25lTnVtYmVyOiBcIjAxMjM0NTY3ODlcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJ2b2ljZSByZWNlaXZlciBwcm9wIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwVm9pY2VSZWNlaXZlclRvVGVycmFmb3JtKHZvaWNlUmVjZWl2ZXJQcm9wczIpLFxuICAgICkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkFjdGlvbiBHcm91cCBIZWxwZXIgRnVuY3Rpb25zIFVuaXQgVGVzdCBmb3IgU21zUmVjZWl2ZXJQcm9wc1wiLCAoKSA9PiB7XG4gIGxldCBzbXNSZWNlaXZlclByb3BzMTogbW9kZWwuU21zUmVjZWl2ZXJQcm9wcyA9IHtcbiAgICBuYW1lOiBcInRlc3Rfc21zX3JlY2VpdmVyXzFcIixcbiAgICBjb3VudHJ5Q29kZTogXCIxXCIsXG4gICAgcGhvbmVOdW1iZXI6IFwiMDEyMzQ1Njc4OVwiLFxuICB9O1xuICBsZXQgc21zUmVjZWl2ZXJQcm9wczI6IG1vZGVsLlNtc1JlY2VpdmVyUHJvcHM7XG5cbiAgaXQoXCJzbXMgcmVjZWl2ZXIgcHJvcCBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBTbXNSZWNlaXZlclRvVGVycmFmb3JtKHNtc1JlY2VpdmVyUHJvcHMxKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X3Ntc19yZWNlaXZlcl8xXCIsXG4gICAgICBjb3VudHJ5Q29kZTogXCIxXCIsXG4gICAgICBwaG9uZU51bWJlcjogXCIwMTIzNDU2Nzg5XCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwic21zIHJlY2VpdmVyIHByb3AgdW5kZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBTbXNSZWNlaXZlclRvVGVycmFmb3JtKHNtc1JlY2VpdmVyUHJvcHMyKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgSGVscGVyIEZ1bmN0aW9ucyBVbml0IFRlc3QgZm9yIFdlYmhvb2tSZWNlaXZlclByb3BzXCIsICgpID0+IHtcbiAgbGV0IHdlYmhvb2tSZWNlaXZlclByb3BzMTogbW9kZWwuV2ViaG9va1JlY2VpdmVyUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X3dlYmhvb2tfcmVjZWl2ZXJfMVwiLFxuICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly90ZXN0LXdlYmhvb2stdXJpLTFcIixcbiAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgfTtcbiAgbGV0IHdlYmhvb2tSZWNlaXZlclByb3BzMjogbW9kZWwuV2ViaG9va1JlY2VpdmVyUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X3dlYmhvb2tfcmVjZWl2ZXJfMlwiLFxuICAgIHNlcnZpY2VVcmk6IFwiaHR0cHM6Ly90ZXN0LXdlYmhvb2stdXJpLTJcIixcbiAgfTtcbiAgbGV0IHdlYmhvb2tSZWNlaXZlclByb3BzMzogbW9kZWwuV2ViaG9va1JlY2VpdmVyUHJvcHM7XG5cbiAgaXQoXCJ3ZWJob29rIHJlY2VpdmVyIHByb3Agd2l0aCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBXZWJob29rUmVjZWl2ZXJUb1RlcnJhZm9ybSh3ZWJob29rUmVjZWl2ZXJQcm9wczEpLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3Rfd2ViaG9va19yZWNlaXZlcl8xXCIsXG4gICAgICBzZXJ2aWNlVXJpOiBcImh0dHBzOi8vdGVzdC13ZWJob29rLXVyaS0xXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJ3ZWJob29rIHJlY2VpdmVyIHByb3Agd2l0aG91dCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBXZWJob29rUmVjZWl2ZXJUb1RlcnJhZm9ybSh3ZWJob29rUmVjZWl2ZXJQcm9wczIpLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3Rfd2ViaG9va19yZWNlaXZlcl8yXCIsXG4gICAgICBzZXJ2aWNlVXJpOiBcImh0dHBzOi8vdGVzdC13ZWJob29rLXVyaS0yXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogZmFsc2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwid2ViaG9vayByZWNlaXZlciBwcm9wIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwV2ViaG9va1JlY2VpdmVyVG9UZXJyYWZvcm0od2ViaG9va1JlY2VpdmVyUHJvcHMzKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJBY3Rpb24gR3JvdXAgSGVscGVyIEZ1bmN0aW9ucyBVbml0IFRlc3QgZm9yIEV2ZW50aHViUmVjZWl2ZXJQcm9wc1wiLCAoKSA9PiB7XG4gIGxldCBldmVudGh1YlJlY2VpdmVyUHJvcHMxOiBtb2RlbC5FdmVudGh1YlJlY2VpdmVyUHJvcHMgPSB7XG4gICAgbmFtZTogXCJ0ZXN0X2V2ZW50aHViX3JlY2VpdmVyXzFcIixcbiAgICBldmVudEh1Yk5hbWU6IFwidGVzdGV2ZW50aHVibmFtZTFcIixcbiAgICBldmVudEh1Yk5hbWVzcGFjZTogXCJ0ZXN0bmFtZXNwYWNlMVwiLFxuICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiB0cnVlLFxuICB9O1xuICBsZXQgZXZlbnRodWJSZWNlaXZlclByb3BzMjogbW9kZWwuRXZlbnRodWJSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF9ldmVudGh1Yl9yZWNlaXZlcl8yXCIsXG4gICAgZXZlbnRIdWJOYW1lOiBcInRlc3RldmVudGh1Ym5hbWUyXCIsXG4gICAgZXZlbnRIdWJOYW1lc3BhY2U6IFwidGVzdG5hbWVzcGFjZTJcIixcbiAgfTtcbiAgbGV0IGV2ZW50aHViUmVjZWl2ZXJQcm9wczM6IG1vZGVsLkV2ZW50aHViUmVjZWl2ZXJQcm9wcztcblxuICBpdChcImV2ZW50aHViIHJlY2VpdmVyIHByb3Agd2l0aCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBFdmVudEh1YlJlY2VpdmVyVG9UZXJyYWZvcm0oXG4gICAgICAgIGV2ZW50aHViUmVjZWl2ZXJQcm9wczEsXG4gICAgICApLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3RfZXZlbnRodWJfcmVjZWl2ZXJfMVwiLFxuICAgICAgZXZlbnRIdWJOYW1lOiBcInRlc3RldmVudGh1Ym5hbWUxXCIsXG4gICAgICBldmVudEh1Yk5hbWVzcGFjZTogXCJ0ZXN0bmFtZXNwYWNlMVwiLFxuICAgICAgdXNlQ29tbW9uQWxlcnRTY2hlbWE6IHRydWUsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZXZlbnRodWIgcmVjZWl2ZXIgcHJvcCB3aXRob3V0IHVzZUNvbW1vbkFsZXJ0U2NoZW1hIGRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEV2ZW50SHViUmVjZWl2ZXJUb1RlcnJhZm9ybShcbiAgICAgICAgZXZlbnRodWJSZWNlaXZlclByb3BzMixcbiAgICAgICksXG4gICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5hbWU6IFwidGVzdF9ldmVudGh1Yl9yZWNlaXZlcl8yXCIsXG4gICAgICBldmVudEh1Yk5hbWU6IFwidGVzdGV2ZW50aHVibmFtZTJcIixcbiAgICAgIGV2ZW50SHViTmFtZXNwYWNlOiBcInRlc3RuYW1lc3BhY2UyXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogZmFsc2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZXZlbnRodWIgcmVjZWl2ZXIgcHJvcCB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIG1vZGVsLm1vbml0b3JBY3Rpb25Hcm91cEV2ZW50SHViUmVjZWl2ZXJUb1RlcnJhZm9ybShcbiAgICAgICAgZXZlbnRodWJSZWNlaXZlclByb3BzMyxcbiAgICAgICksXG4gICAgKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQWN0aW9uIEdyb3VwIEhlbHBlciBGdW5jdGlvbnMgVW5pdCBUZXN0IGZvciBBenVyZUFwcFB1c2hSZWNlaXZlclByb3BzXCIsICgpID0+IHtcbiAgbGV0IGF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHMxOiBtb2RlbC5BenVyZUFwcFB1c2hSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF9henVyZV9hcHBfcHVzaF9yZWNlaXZlcl8xXCIsXG4gICAgZW1haWxBZGRyZXNzOiBcInRlc3RlbWFpbEBndGVzdGVtYWlsLmNvbVwiLFxuICB9O1xuICBsZXQgYXp1cmVBcHBQdXNoUmVjZWl2ZXJQcm9wczI6IG1vZGVsLkF6dXJlQXBwUHVzaFJlY2VpdmVyUHJvcHM7XG5cbiAgaXQoXCJhenVyZSBhcHAgcHVzaCByZWNlaXZlciBwcm9wIHdpdGggdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwQXp1cmVBcHBQdXNoUmVjZWl2ZXJUb1RlcnJhZm9ybShcbiAgICAgICAgYXp1cmVBcHBQdXNoUmVjZWl2ZXJQcm9wczEsXG4gICAgICApLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3RfYXp1cmVfYXBwX3B1c2hfcmVjZWl2ZXJfMVwiLFxuICAgICAgZW1haWxBZGRyZXNzOiBcInRlc3RlbWFpbEBndGVzdGVtYWlsLmNvbVwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImF6dXJlIGFwcCBwdXNoIHJlY2VpdmVyIHByb3AgdW5kZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBBenVyZUFwcFB1c2hSZWNlaXZlclRvVGVycmFmb3JtKFxuICAgICAgICBhenVyZUFwcFB1c2hSZWNlaXZlclByb3BzMixcbiAgICAgICksXG4gICAgKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiQWN0aW9uIEdyb3VwIEhlbHBlciBGdW5jdGlvbnMgVW5pdCBUZXN0IGZvciBMb2dpY0FwcFJlY2VpdmVyUHJvcHNcIiwgKCkgPT4ge1xuICBsZXQgbG9naWNBcHBSZWNlaXZlclByb3BzMTogbW9kZWwuTG9naWNBcHBSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF9sb2dpY19hcHBfcmVjZWl2ZXJfMVwiLFxuICAgIHJlc291cmNlSWQ6IFwidGVzdC9yZXNvdXJjZS9pZC8xXCIsXG4gICAgY2FsbGJhY2tVcmw6IFwiaHR0cHM6Ly90ZXN0LWxvZ2ljLWFwcC11cmktMVwiLFxuICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiB0cnVlLFxuICB9O1xuICBsZXQgbG9naWNBcHBSZWNlaXZlclByb3BzMjogbW9kZWwuTG9naWNBcHBSZWNlaXZlclByb3BzID0ge1xuICAgIG5hbWU6IFwidGVzdF9sb2dpY19hcHBfcmVjZWl2ZXJfMlwiLFxuICAgIHJlc291cmNlSWQ6IFwidGVzdC9yZXNvdXJjZS9pZC8yXCIsXG4gICAgY2FsbGJhY2tVcmw6IFwiaHR0cHM6Ly90ZXN0LWxvZ2ljLWFwcC11cmktMlwiLFxuICB9O1xuICBsZXQgbG9naWNBcHBSZWNlaXZlclByb3BzMzogbW9kZWwuTG9naWNBcHBSZWNlaXZlclByb3BzO1xuXG4gIGl0KFwibG9naWMgYXBwIHJlY2VpdmVyIHByb3Agd2l0aCB1c2VDb21tb25BbGVydFNjaGVtYSBkZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBMb2dpY0FwcFJlY2VpdmVyVG9UZXJyYWZvcm0oXG4gICAgICAgIGxvZ2ljQXBwUmVjZWl2ZXJQcm9wczEsXG4gICAgICApLFxuICAgICkudG9NYXRjaE9iamVjdCh7XG4gICAgICBuYW1lOiBcInRlc3RfbG9naWNfYXBwX3JlY2VpdmVyXzFcIixcbiAgICAgIGNhbGxiYWNrVXJsOiBcImh0dHBzOi8vdGVzdC1sb2dpYy1hcHAtdXJpLTFcIixcbiAgICAgIHVzZUNvbW1vbkFsZXJ0U2NoZW1hOiB0cnVlLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImxvZ2ljIGFwcCByZWNlaXZlciBwcm9wIHdpdGhvdXQgdXNlQ29tbW9uQWxlcnRTY2hlbWEgZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgbW9kZWwubW9uaXRvckFjdGlvbkdyb3VwTG9naWNBcHBSZWNlaXZlclRvVGVycmFmb3JtKFxuICAgICAgICBsb2dpY0FwcFJlY2VpdmVyUHJvcHMyLFxuICAgICAgKSxcbiAgICApLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgbmFtZTogXCJ0ZXN0X2xvZ2ljX2FwcF9yZWNlaXZlcl8yXCIsXG4gICAgICBjYWxsYmFja1VybDogXCJodHRwczovL3Rlc3QtbG9naWMtYXBwLXVyaS0yXCIsXG4gICAgICB1c2VDb21tb25BbGVydFNjaGVtYTogZmFsc2UsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwibG9naWMgYXBwIHJlY2VpdmVyIHByb3AgdW5kZWZpbmVkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBtb2RlbC5tb25pdG9yQWN0aW9uR3JvdXBMb2dpY0FwcFJlY2VpdmVyVG9UZXJyYWZvcm0oXG4gICAgICAgIGxvZ2ljQXBwUmVjZWl2ZXJQcm9wczMsXG4gICAgICApLFxuICAgICkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -202,5 +202,5 @@ class Gateway extends core_azure_1.AzureResource {
|
|
|
202
202
|
}
|
|
203
203
|
exports.Gateway = Gateway;
|
|
204
204
|
_a = JSII_RTTI_SYMBOL_1;
|
|
205
|
-
Gateway[_a] = { fqn: "@microsoft/terraform-cdk-constructs.azure_applicationgateway.Gateway", version: "0.0.3-pre.
|
|
205
|
+
Gateway[_a] = { fqn: "@microsoft/terraform-cdk-constructs.azure_applicationgateway.Gateway", version: "0.0.3-pre.12" };
|
|
206
206
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1hcHBsaWNhdGlvbmdhdGV3YXkvbGliL2dhdGV3YXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5RkFBcUY7QUFHckYsaUdBQTRGO0FBSTVGLCtGQUEwRjtBQUUxRixtREFBbUQ7QUFDbkQsaURBQWlEO0FBeU1qRCxpREFBaUQ7QUFDakQsTUFBYSxPQUFRLFNBQVEsMEJBQWE7SUFLeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTJFRztJQUVILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRCxzQkFBc0I7UUFDdEIsSUFBSSxRQUFRLENBQUM7UUFFYiwrREFBK0Q7UUFDL0QsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNyQyxzREFBc0Q7WUFDdEQsTUFBTSxlQUFlLEdBQUcsSUFBSSw2Q0FBb0IsQ0FDOUMsSUFBSSxFQUNKLGlCQUFpQixFQUNqQjtnQkFDRSxJQUFJLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUN4QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUk7Z0JBQzFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTthQUN6QixDQUNGLENBQUM7WUFFRixRQUFRLEdBQUc7Z0JBQ1QsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxFQUFFLGNBQWM7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UUFFSCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7QUF4TkgsMEJBeU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwbGljYXRpb25HYXRld2F5IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9hcHBsaWNhdGlvbi1nYXRld2F5XCI7XG5pbXBvcnQgKiBhcyBhemFwZ3cgZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9hcHBsaWNhdGlvbi1nYXRld2F5XCI7XG5pbXBvcnQgeyBLZXlWYXVsdCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIva2V5LXZhdWx0XCI7XG5pbXBvcnQgeyBLZXlWYXVsdEFjY2Vzc1BvbGljeUEgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF6dXJlcm0vbGliL2tleS12YXVsdC1hY2Nlc3MtcG9saWN5XCI7XG5pbXBvcnQgeyBQdWJsaWNJcCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXp1cmVybS9saWIvcHVibGljLWlwXCI7XG5pbXBvcnQgeyBSZXNvdXJjZUdyb3VwIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9yZXNvdXJjZS1ncm91cFwiO1xuaW1wb3J0IHsgU3VibmV0IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi9zdWJuZXRcIjtcbmltcG9ydCB7IFVzZXJBc3NpZ25lZElkZW50aXR5IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1henVyZXJtL2xpYi91c2VyLWFzc2lnbmVkLWlkZW50aXR5XCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgdm5ldCBmcm9tIFwiLi4vLi4vYXp1cmUtdmlydHVhbG5ldHdvcmtcIjtcbmltcG9ydCB7IEF6dXJlUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZVwiO1xuXG4vLyBEZWZpbmUgdGhlIGludGVyZmFjZSBmb3IgQXBwbGljYXRpb24gR2F0ZXdheSBwcm9wZXJ0aWVzXG5leHBvcnQgaW50ZXJmYWNlIElHYXRld2F5UHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgcHVibGljIElQIGFkZHJlc3MgZm9yIHRoZSBmcm9udGVuZCBvZiB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICovXG4gIHB1YmxpY0lwQWRkcmVzcz86IFB1YmxpY0lwO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwcml2YXRlIElQIGFkZHJlc3MgZm9yIHRoZSBmcm9udGVuZCBvZiB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICovXG4gIHByaXZhdGVJcEFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG9jYXRpb24gbWV0aG9kIGZvciB0aGUgcHJpdmF0ZSBJUCBhZGRyZXNzIChlLmcuLCBTdGF0aWMsIER5bmFtaWMpLlxuICAgKi9cbiAgcHJpdmF0ZUlwQWRkcmVzc0FsbG9jYXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkgd2lsbCBiZSBkZXBsb3llZCAoZS5nLiwgcmVnaW9uKS5cbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHJlZmVyZW5jZSB0byB0aGUgcmVzb3VyY2UgZ3JvdXAgaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5IHdpbGwgYmUgZGVwbG95ZWQgaW4gdGhlIGRlZmF1bHQgcmVzb3VyY2UgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUdyb3VwPzogUmVzb3VyY2VHcm91cDtcblxuICAvKipcbiAgICogVGhlIFNLVSB0aWVyIG9mIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5IChlLmcuLCBTdGFuZGFyZCwgV0FGKS5cbiAgICovXG4gIHJlYWRvbmx5IHNrdVRpZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIFNLVSBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBza3VTaXplOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjYXBhY2l0eSAoaW5zdGFuY2UgY291bnQpIG9mIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWNpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGJhY2tlbmQgYWRkcmVzcyBwb29scyBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kQWRkcmVzc1Bvb2xzOiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5QmFja2VuZEFkZHJlc3NQb29sW107XG5cbiAgLyoqXG4gICAqIFRoZSBiYWNrZW5kIEhUVFAgc2V0dGluZ3MgZm9yIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZEh0dHBTZXR0aW5nczogYXphcGd3LkFwcGxpY2F0aW9uR2F0ZXdheUJhY2tlbmRIdHRwU2V0dGluZ3NbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZnJvbnRlbmQgcG9ydHMgZm9yIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRlbmRQb3J0cz86IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlGcm9udGVuZFBvcnRbXTtcblxuICAvKipcbiAgICogVGhlIEhUVFAgbGlzdGVuZXJzIGZvciB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGh0dHBMaXN0ZW5lcnM6IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlIdHRwTGlzdGVuZXJbXTtcblxuICAvKipcbiAgICogVGhlIHJlcXVlc3Qgcm91dGluZyBydWxlcyBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0Um91dGluZ1J1bGVzOiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5UmVxdWVzdFJvdXRpbmdSdWxlW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN1Ym5ldCBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXQ/OiBTdWJuZXQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRlbmFudCBJRCBmb3IgdXNlIHdpdGggS2V5IFZhdWx0LCBpZiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVuYW50SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gZW5hYmxlIEhUVFAyLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSHR0cDI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGVuYWJsZSBGSVBTLWNvbXBsaWFudCBhbGdvcml0aG1zLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlwc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBJRCBvZiB0aGUgZmlyZXdhbGwgcG9saWN5LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXdhbGxQb2xpY3lJZD86IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0byBlbmZvcmNlIGFzc29jaWF0aW9uIG9mIHRoZSBmaXJld2FsbCBwb2xpY3kuXG4gICAqL1xuICByZWFkb25seSBmb3JjZUZpcmV3YWxsUG9saWN5QXNzb2NpYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0YWdzIGZvciB0aGUgQXBwbGljYXRpb24gR2F0ZXdheSByZXNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhdmFpbGFiaWxpdHkgem9uZXMgZm9yIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgem9uZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgS2V5IFZhdWx0IHJlc291cmNlIGZvciBzdG9yaW5nIFNTTCBjZXJ0aWZpY2F0ZXMuXG4gICAqL1xuICByZWFkb25seSBrZXlWYXVsdD86IEtleVZhdWx0O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhdXRoZW50aWNhdGlvbiBjZXJ0aWZpY2F0ZXMgZm9yIG11dHVhbCBhdXRoZW50aWNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uQ2VydGlmaWNhdGU/OiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5QXV0aGVudGljYXRpb25DZXJ0aWZpY2F0ZVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBhdXRvc2NhbGUgY29uZmlndXJhdGlvbiBmb3IgZHluYW1pY2FsbHkgYWRqdXN0aW5nIHRoZSBjYXBhY2l0eSBvZiB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9zY2FsZUNvbmZpZ3VyYXRpb24/OiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5QXV0b3NjYWxlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIGVycm9yIGNvbmZpZ3VyYXRpb25zIHRvIHNwZWNpZnkgY3VzdG9tIGVycm9yIHBhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRXJyb3JDb25maWd1cmF0aW9uPzogYXphcGd3LkFwcGxpY2F0aW9uR2F0ZXdheUN1c3RvbUVycm9yQ29uZmlndXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBpZGVudGl0eSBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXksIHVzZWQgZm9yIGFjY2Vzc2luZyBvdGhlciBBenVyZSByZXNvdXJjZXMuXG4gICAqL1xuICByZWFkb25seSBpZGVudGl0eT86IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlJZGVudGl0eTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY29uZmlndXJhdGlvbnMgZm9yIGVuYWJsaW5nIFByaXZhdGUgTGluayBvbiB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVMaW5rQ29uZmlndXJhdGlvbj86IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlQcml2YXRlTGlua0NvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgcHJvYmVzIGZvciBoZWFsdGggY2hlY2tzIG9mIHRoZSBiYWNrZW5kIEhUVFAgc2V0dGluZ3MuXG4gICAqL1xuICByZWFkb25seSBwcm9iZT86IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlQcm9iZVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9ucyBmb3IgcmVkaXJlY3QgcnVsZXMuXG4gICAqL1xuICByZWFkb25seSByZWRpcmVjdENvbmZpZ3VyYXRpb24/OiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5UmVkaXJlY3RDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJld3JpdGUgcnVsZSBzZXRzIGZvciBtb2RpZnlpbmcgSFRUUCByZXF1ZXN0IGFuZCByZXNwb25zZSBoZWFkZXJzIGFuZCBib2RpZXMuXG4gICAqL1xuICByZWFkb25seSByZXdyaXRlUnVsZVNldD86IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlSZXdyaXRlUnVsZVNldFtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBTU0wgY2VydGlmaWNhdGVzIGZvciBlbmFibGluZyBIVFRQUyBvbiB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHNzbENlcnRpZmljYXRlPzogYXphcGd3LkFwcGxpY2F0aW9uR2F0ZXdheVNzbENlcnRpZmljYXRlW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIFNTTCBwb2xpY3kgY29uZmlndXJhdGlvbnMsIGRlZmluaW5nIHRoZSBwcm90b2NvbCBhbmQgY2lwaGVyIHN1aXRlcyB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3NsUG9saWN5PzogYXphcGd3LkFwcGxpY2F0aW9uR2F0ZXdheVNzbFBvbGljeTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgU1NMIHByb2ZpbGVzIGZvciBtYW5hZ2luZyBTU0wgdGVybWluYXRpb24gYW5kIHBvbGljeSBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IHNzbFByb2ZpbGU/OiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5U3NsUHJvZmlsZVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0aW1lb3V0IHNldHRpbmdzIGZvciB0aGUgQXBwbGljYXRpb24gR2F0ZXdheSByZXNvdXJjZXMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0cz86IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlUaW1lb3V0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgdHJ1c3RlZCBjbGllbnQgY2VydGlmaWNhdGVzIGZvciBtdXR1YWwgYXV0aGVudGljYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0cnVzdGVkQ2xpZW50Q2VydGlmaWNhdGU/OiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5VHJ1c3RlZENsaWVudENlcnRpZmljYXRlW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHRydXN0ZWQgcm9vdCBjZXJ0aWZpY2F0ZXMgZm9yIGJhY2tlbmQgYXV0aGVudGljYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0cnVzdGVkUm9vdENlcnRpZmljYXRlPzogYXphcGd3LkFwcGxpY2F0aW9uR2F0ZXdheVRydXN0ZWRSb290Q2VydGlmaWNhdGVbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgVVJMIHBhdGggbWFwIGZvciByb3V0aW5nIGJhc2VkIG9uIFVSTCBwYXRocy5cbiAgICovXG4gIHJlYWRvbmx5IHVybFBhdGhNYXA/OiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5VXJsUGF0aE1hcFtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBXZWIgQXBwbGljYXRpb24gRmlyZXdhbGwgKFdBRikgY29uZmlndXJhdGlvbiB0byBwcm92aWRlIGVuaGFuY2VkIHNlY3VyaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgd2FmQ29uZmlndXJhdGlvbj86IGF6YXBndy5BcHBsaWNhdGlvbkdhdGV3YXlXYWZDb25maWd1cmF0aW9uO1xufVxuXG4vLyBEZWZpbmUgdGhlIGNsYXNzIGZvciBBenVyZSBBcHBsaWNhdGlvbiBHYXRld2F5XG5leHBvcnQgY2xhc3MgR2F0ZXdheSBleHRlbmRzIEF6dXJlUmVzb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IElHYXRld2F5UHJvcHM7XG4gIHB1YmxpYyByZXNvdXJjZUdyb3VwOiBSZXNvdXJjZUdyb3VwO1xuICBwdWJsaWMgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBBenVyZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhpcyBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIGZvciBjb25maWd1cmluZyB0aGUgQXp1cmUgQXBwbGljYXRpb24gR2F0ZXdheS4gVGhlIHByb3BlcnRpZXMgaW5jbHVkZTpcbiAgICogICAgICAgICAgICAgICAgLSBgbmFtZWA6IFJlcXVpcmVkLiBVbmlxdWUgbmFtZSBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkgd2l0aGluIEF6dXJlLlxuICAgKiAgICAgICAgICAgICAgICAtIGBsb2NhdGlvbmA6IFJlcXVpcmVkLiBBenVyZSBSZWdpb24gZm9yIGRlcGxveW1lbnQuXG4gICAqICAgICAgICAgICAgICAgIC0gYHJlc291cmNlR3JvdXBgOiBPcHRpb25hbC4gUmVmZXJlbmNlIHRvIHRoZSByZXNvdXJjZSBncm91cCBmb3IgZGVwbG95bWVudC5cbiAgICogICAgICAgICAgICAgICAgLSBgc2t1VGllcmA6IFJlcXVpcmVkLiBTS1UgdGllciBvZiB0aGUgQXBwbGljYXRpb24gR2F0ZXdheSAoZS5nLiwgU3RhbmRhcmQsIFdBRikuXG4gICAqICAgICAgICAgICAgICAgIC0gYHNrdVNpemVgOiBSZXF1aXJlZC4gU2l6ZSBvZiB0aGUgU0tVIGZvciB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICogICAgICAgICAgICAgICAgLSBgY2FwYWNpdHlgOiBSZXF1aXJlZC4gQ2FwYWNpdHkgKGluc3RhbmNlIGNvdW50KSBvZiB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICogICAgICAgICAgICAgICAgLSBgYmFja2VuZEFkZHJlc3NQb29sc2A6IFJlcXVpcmVkLiBCYWNrZW5kIGFkZHJlc3MgcG9vbHMgZm9yIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKiAgICAgICAgICAgICAgICAtIGBiYWNrZW5kSHR0cFNldHRpbmdzYDogUmVxdWlyZWQuIEJhY2tlbmQgSFRUUCBzZXR0aW5ncyBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkuXG4gICAqICAgICAgICAgICAgICAgIC0gYGh0dHBMaXN0ZW5lcnNgOiBSZXF1aXJlZC4gSFRUUCBsaXN0ZW5lcnMgZm9yIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKiAgICAgICAgICAgICAgICAtIGByZXF1ZXN0Um91dGluZ1J1bGVzYDogUmVxdWlyZWQuIFJlcXVlc3Qgcm91dGluZyBydWxlcyBmb3IgdGhlIEFwcGxpY2F0aW9uIEdhdGV3YXkuXG4gICAqICAgICAgICAgICAgICAgIC0gYHB1YmxpY0lwQWRkcmVzc2A6IE9wdGlvbmFsLiBQdWJsaWMgSVAgYWRkcmVzcyBmb3IgdGhlIGZyb250ZW5kLlxuICAgKiAgICAgICAgICAgICAgICAtIGBwcml2YXRlSXBBZGRyZXNzYDogT3B0aW9uYWwuIFByaXZhdGUgSVAgYWRkcmVzcyBmb3IgdGhlIGZyb250ZW5kLlxuICAgKiAgICAgICAgICAgICAgICAtIGBwcml2YXRlSXBBZGRyZXNzQWxsb2NhdGlvbmA6IE9wdGlvbmFsLiBBbGxvY2F0aW9uIG1ldGhvZCBmb3IgdGhlIHByaXZhdGUgSVAgKFN0YXRpYywgRHluYW1pYykuXG4gICAqICAgICAgICAgICAgICAgIC0gYGZyb250ZW5kUG9ydHNgOiBPcHRpb25hbC4gRnJvbnRlbmQgcG9ydHMgZm9yIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5LlxuICAgKiAgICAgICAgICAgICAgICAtIGBzdWJuZXRgOiBPcHRpb25hbC4gU3VibmV0IGZvciB0aGUgQXBwbGljYXRpb24gR2F0ZXdheS5cbiAgICogICAgICAgICAgICAgICAgLSBgZW5hYmxlSHR0cDJgOiBPcHRpb25hbC4gRmxhZyB0byBlbmFibGUgSFRUUDIuXG4gICAqICAgICAgICAgICAgICAgIC0gYGZpcHNFbmFibGVkYDogT3B0aW9uYWwuIEZsYWcgdG8gZW5hYmxlIEZJUFMtY29tcGxpYW50IGFsZ29yaXRobXMuXG4gICAqICAgICAgICAgICAgICAgIC0gYGZpcmV3YWxsUG9saWN5SWRgOiBPcHRpb25hbC4gSUQgb2YgdGhlIGZpcmV3YWxsIHBvbGljeS5cbiAgICogICAgICAgICAgICAgICAgLSBgZm9yY2VGaXJld2FsbFBvbGljeUFzc29jaWF0aW9uYDogT3B0aW9uYWwuIEZsYWcgdG8gZW5mb3JjZSBhc3NvY2lhdGlvbiBvZiB0aGUgZmlyZXdhbGwgcG9saWN5LlxuICAgKiAgICAgICAgICAgICAgICAtIGB0YWdzYDogT3B0aW9uYWwuIFRhZ3MgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgIC0gQWRkaXRpb25hbCBvcHRpb25hbCBwcm9wZXJ0aWVzIGFzIGRlc2NyaWJlZCBpbiBgSUdhdGV3YXlQcm9wc2AgaW50ZXJmYWNlLlxuICAgKlxuICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG5ldyBHYXRld2F5KHRoaXMsICdhcHBHYXRld2F5MScsIHtcbiAgICogICBuYW1lOiAnZ2F0ZXdheUVhc3QnLFxuICAgKiAgIHJlc291cmNlR3JvdXA6IHJlc291cmNlR3JvdXAsXG4gICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIHNrdVRpZXI6IFwiU3RhbmRhcmRfdjJcIixcbiAgICAgIHNrdVNpemU6IFwiU3RhbmRhcmRfdjJcIixcbiAgICAgIGNhcGFjaXR5OiAyLFxuICAgICAgcHVibGljSXBBZGRyZXNzOiBwdWJsaWNJcCxcbiAgICAgIHN1Ym5ldDogc3VibmV0LFxuICAgICAgYmFja2VuZEFkZHJlc3NQb29sczogW1xuICAgICAgICB7IG5hbWU6IFwiYmFja2VuZC1hZGRyZXNzLXBvb2wtMVwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImJhY2tlbmQtYWRkcmVzcy1wb29sLTJcIixcbiAgICAgICAgICBpcEFkZHJlc3NlczogW1wiMTAuMS4wLjRcIiwgXCIxMC4xLjAuNVwiLCBcIjEwLjEuMC42XCJdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGh0dHBMaXN0ZW5lcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaHR0cC1saXN0ZW5lclwiLFxuICAgICAgICAgIGZyb250ZW5kUG9ydE5hbWU6IFwiODBcIixcbiAgICAgICAgICBmcm9udGVuZElwQ29uZmlndXJhdGlvbk5hbWU6IFwiUHVibGljLWZyb250ZW5kLWlwLWNvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgICBwcm90b2NvbDogXCJIdHRwXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYmFja2VuZEh0dHBTZXR0aW5nczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJiYWNrZW5kLWh0dHAtc2V0dGluZ1wiLFxuICAgICAgICAgIHBvcnQ6IDgwLFxuICAgICAgICAgIHByb3RvY29sOiBcIkh0dHBcIixcbiAgICAgICAgICByZXF1ZXN0VGltZW91dDogMjAsXG4gICAgICAgICAgY29va2llQmFzZWRBZmZpbml0eTogXCJEaXNhYmxlZFwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHJlcXVlc3RSb3V0aW5nUnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicmVxdWVzdC1yb3V0aW5nLXJ1bGUtMVwiLFxuICAgICAgICAgIGh0dHBMaXN0ZW5lck5hbWU6IFwiaHR0cC1saXN0ZW5lclwiLFxuICAgICAgICAgIHByaW9yaXR5OiAxLFxuICAgICAgICAgIGJhY2tlbmRBZGRyZXNzUG9vbE5hbWU6IFwiYmFja2VuZC1hZGRyZXNzLXBvb2wtMVwiLFxuICAgICAgICAgIGJhY2tlbmRIdHRwU2V0dGluZ3NOYW1lOiBcImJhY2tlbmQtaHR0cC1zZXR0aW5nXCIsXG4gICAgICAgICAgcnVsZVR5cGU6IFwiQmFzaWNcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMucmVzb3VyY2VHcm91cCA9IHRoaXMuc2V0dXBSZXNvdXJjZUdyb3VwKHByb3BzKTtcblxuICAgIC8vIERlZmluZSB0aGUgaWRlbnRpdHlcbiAgICBsZXQgaWRlbnRpdHk7XG5cbiAgICAvLyBDaGVjayBpZiBBenVyZSBLZXkgVmF1bHQgaXMgdXNlZCBhbmQgbm8gaWRlbnRpdHkgaXMgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMua2V5VmF1bHQgJiYgIXByb3BzLmlkZW50aXR5KSB7XG4gICAgICAvLyBDcmVhdGUgYSBtYW5hZ2VkIGlkZW50aXR5IGFuZCBhZGQgaXQgdG8gaWRlbnRpdHlJZHNcbiAgICAgIGNvbnN0IG1hbmFnZWRJZGVudGl0eSA9IG5ldyBVc2VyQXNzaWduZWRJZGVudGl0eShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJNYW5hZ2VkSWRlbnRpdHlcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGBtaS0ke3Byb3BzLm5hbWV9YCxcbiAgICAgICAgICByZXNvdXJjZUdyb3VwTmFtZTogdGhpcy5yZXNvdXJjZUdyb3VwLm5hbWUsXG4gICAgICAgICAgbG9jYXRpb246IHByb3BzLmxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgaWRlbnRpdHkgPSB7XG4gICAgICAgIGlkZW50aXR5SWRzOiBbbWFuYWdlZElkZW50aXR5LmlkXSxcbiAgICAgICAgdHlwZTogXCJVc2VyQXNzaWduZWRcIixcbiAgICAgIH07XG5cbiAgICAgIG5ldyBLZXlWYXVsdEFjY2Vzc1BvbGljeUEodGhpcywgXCJwb2xpY3lcIiwge1xuICAgICAgICBrZXlWYXVsdElkOiBwcm9wcy5rZXlWYXVsdC5pZCxcbiAgICAgICAgdGVuYW50SWQ6IHByb3BzLnRlbmFudElkIHx8IFwiXCIsXG4gICAgICAgIG9iamVjdElkOiBtYW5hZ2VkSWRlbnRpdHkucHJpbmNpcGFsSWQsXG4gICAgICAgIHNlY3JldFBlcm1pc3Npb25zOiBbXCJHZXRcIiwgXCJMaXN0XCJdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICBzdWJuZXRJZDpcbiAgICAgICAgcHJvcHMuc3VibmV0Py5pZCB8fFxuICAgICAgICBuZXcgdm5ldC5OZXR3b3JrKHRoaXMsIFwidm5ldFwiLCB7XG4gICAgICAgICAgcmVzb3VyY2VHcm91cDogdGhpcy5yZXNvdXJjZUdyb3VwLFxuICAgICAgICB9KS5zdWJuZXRzLmRlZmF1bHQuaWQsXG4gICAgICBpZGVudGl0eTogcHJvcHMuaWRlbnRpdHkgfHwgaWRlbnRpdHksXG4gICAgfTtcblxuICAgIC8vIFdBRiBjb25maWd1cmF0aW9uXG4gICAgbGV0IHdhZkNvbmZpZ3VyYXRpb24gPSBwcm9wcy53YWZDb25maWd1cmF0aW9uXG4gICAgICA/IHtcbiAgICAgICAgICBlbmFibGVkOiBwcm9wcy53YWZDb25maWd1cmF0aW9uLmVuYWJsZWQsXG4gICAgICAgICAgZmlyZXdhbGxNb2RlOiBwcm9wcy53YWZDb25maWd1cmF0aW9uLmZpcmV3YWxsTW9kZSB8fCBcIkRldGVjdGlvblwiLFxuICAgICAgICAgIHJ1bGVTZXRWZXJzaW9uOiBwcm9wcy53YWZDb25maWd1cmF0aW9uLnJ1bGVTZXRWZXJzaW9uIHx8IFwiMy4wXCIsXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gRHluYW1pY2FsbHkgY3JlYXRlIGZyb250ZW5kIElQIGNvbmZpZ3VyYXRpb25zXG4gICAgbGV0IGZyb250ZW5kSXBDb25maWdzOiBhemFwZ3cuQXBwbGljYXRpb25HYXRld2F5RnJvbnRlbmRJcENvbmZpZ3VyYXRpb25bXSA9XG4gICAgICBbXTtcblxuICAgIC8vIFB1YmxpYyBJUCBjb25maWd1cmF0aW9uXG4gICAgaWYgKHByb3BzLnB1YmxpY0lwQWRkcmVzcykge1xuICAgICAgZnJvbnRlbmRJcENvbmZpZ3MucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiUHVibGljLWZyb250ZW5kLWlwLWNvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgcHVibGljSXBBZGRyZXNzSWQ6IHByb3BzLnB1YmxpY0lwQWRkcmVzcy5pZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGUgSVAgY29uZmlndXJhdGlvblxuICAgIGlmIChwcm9wcy5wcml2YXRlSXBBZGRyZXNzIHx8IHByb3BzLnByaXZhdGVJcEFkZHJlc3NBbGxvY2F0aW9uKSB7XG4gICAgICBmcm9udGVuZElwQ29uZmlncy5wdXNoKHtcbiAgICAgICAgbmFtZTogXCJQcml2YXRlLWZyb250ZW5kLWlwLWNvbmZpZ3VyYXRpb25cIixcbiAgICAgICAgc3VibmV0SWQ6IGRlZmF1bHRzLnN1Ym5ldElkLFxuICAgICAgICBwcml2YXRlSXBBZGRyZXNzOiBwcm9wcy5wcml2YXRlSXBBZGRyZXNzLFxuICAgICAgICBwcml2YXRlSXBBZGRyZXNzQWxsb2NhdGlvbjogcHJvcHMucHJpdmF0ZUlwQWRkcmVzc0FsbG9jYXRpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBmcm9udGVuZCBwb3J0cyBhcmUgcHJvdmlkZWQsIHVzZSBkZWZhdWx0IGR1bW15IGZyb250ZW5kIGlwIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAoZnJvbnRlbmRJcENvbmZpZ3MubGVuZ3RoID09IDApIHtcbiAgICAgIGZyb250ZW5kSXBDb25maWdzLnB1c2goe1xuICAgICAgICBuYW1lOiBcIkR1bW15LWZyb250ZW5kLWlwLWNvbmZpZ3VyYXRpb25cIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGZyb250ZW5kIHBvcnRzIGlmIG5vdCBwcm92aWRlZFxuICAgIGNvbnN0IGRlZmF1bHRGcm9udGVuZFBvcnRzID0gW1xuICAgICAgeyBuYW1lOiBcIjgwXCIsIHBvcnQ6IDgwIH0sXG4gICAgICB7IG5hbWU6IFwiNDQzXCIsIHBvcnQ6IDQ0MyB9LFxuICAgIF07XG5cbiAgICBjb25zdCBmcm9udGVuZFBvcnRzID1cbiAgICAgIHByb3BzLmZyb250ZW5kUG9ydHMgJiYgcHJvcHMuZnJvbnRlbmRQb3J0cy5sZW5ndGggPiAwXG4gICAgICAgID8gcHJvcHMuZnJvbnRlbmRQb3J0c1xuICAgICAgICA6IGRlZmF1bHRGcm9udGVuZFBvcnRzO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBBcHBsaWNhdGlvbiBHYXRld2F5XG4gICAgY29uc3QgYXBndyA9IG5ldyBBcHBsaWNhdGlvbkdhdGV3YXkodGhpcywgXCJBcHBsaWNhdGlvbkdhdGV3YXlcIiwge1xuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIHJlc291cmNlR3JvdXBOYW1lOiB0aGlzLnJlc291cmNlR3JvdXAubmFtZSxcbiAgICAgIGxvY2F0aW9uOiBwcm9wcy5sb2NhdGlvbixcbiAgICAgIHNzbENlcnRpZmljYXRlOiBwcm9wcy5zc2xDZXJ0aWZpY2F0ZSxcbiAgICAgIHNzbFBvbGljeTogcHJvcHMuc3NsUG9saWN5LFxuICAgICAgc3NsUHJvZmlsZTogcHJvcHMuc3NsUHJvZmlsZSxcbiAgICAgIGF1dGhlbnRpY2F0aW9uQ2VydGlmaWNhdGU6IHByb3BzLmF1dGhlbnRpY2F0aW9uQ2VydGlmaWNhdGUsXG4gICAgICBhdXRvc2NhbGVDb25maWd1cmF0aW9uOiBwcm9wcy5hdXRvc2NhbGVDb25maWd1cmF0aW9uLFxuICAgICAgY3VzdG9tRXJyb3JDb25maWd1cmF0aW9uOiBwcm9wcy5jdXN0b21FcnJvckNvbmZpZ3VyYXRpb24sXG4gICAgICByZWRpcmVjdENvbmZpZ3VyYXRpb246IHByb3BzLnJlZGlyZWN0Q29uZmlndXJhdGlvbixcbiAgICAgIHJld3JpdGVSdWxlU2V0OiBwcm9wcy5yZXdyaXRlUnVsZVNldCxcbiAgICAgIHByaXZhdGVMaW5rQ29uZmlndXJhdGlvbjogcHJvcHMucHJpdmF0ZUxpbmtDb25maWd1cmF0aW9uLFxuICAgICAgd2FmQ29uZmlndXJhdGlvbjogd2FmQ29uZmlndXJhdGlvbixcbiAgICAgIHNrdToge1xuICAgICAgICBuYW1lOiBwcm9wcy5za3VTaXplLFxuICAgICAgICB0aWVyOiBwcm9wcy5za3VUaWVyLFxuICAgICAgICBjYXBhY2l0eTogcHJvcHMuY2FwYWNpdHksXG4gICAgICB9LFxuICAgICAgZ2F0ZXdheUlwQ29uZmlndXJhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgc3VibmV0SWQ6IGRlZmF1bHRzLnN1Ym5ldElkLFxuICAgICAgICAgIG5hbWU6IGAke3Byb3BzLm5hbWV9LWNvbmZpZ3VyYXRpb25gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGZyb250ZW5kUG9ydDogZnJvbnRlbmRQb3J0cyxcbiAgICAgIGZyb250ZW5kSXBDb25maWd1cmF0aW9uOiBmcm9udGVuZElwQ29uZmlncyxcbiAgICAgIGJhY2tlbmRBZGRyZXNzUG9vbDogcHJvcHMuYmFja2VuZEFkZHJlc3NQb29scyxcbiAgICAgIGJhY2tlbmRIdHRwU2V0dGluZ3M6IHByb3BzLmJhY2tlbmRIdHRwU2V0dGluZ3MsXG4gICAgICBodHRwTGlzdGVuZXI6IHByb3BzLmh0dHBMaXN0ZW5lcnMsXG4gICAgICB1cmxQYXRoTWFwOiBwcm9wcy51cmxQYXRoTWFwLFxuICAgICAgdHJ1c3RlZFJvb3RDZXJ0aWZpY2F0ZTogcHJvcHMudHJ1c3RlZFJvb3RDZXJ0aWZpY2F0ZSxcbiAgICAgIHJlcXVlc3RSb3V0aW5nUnVsZTogcHJvcHMucmVxdWVzdFJvdXRpbmdSdWxlcyxcbiAgICAgIHByb2JlOiBwcm9wcy5wcm9iZSxcbiAgICAgIGlkZW50aXR5OiBkZWZhdWx0cy5pZGVudGl0eSxcbiAgICAgIHpvbmVzOiBwcm9wcy56b25lcyxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkID0gYXBndy5pZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "cdktf/lib/testing/adapters/jest";
|