deployable-awscdk-app-ts 0.1.847 → 0.1.849
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 +73 -14
- package/API.md +44 -1
- package/lib/index.js +1 -1
- package/lib/steps.d.ts +4 -2
- package/lib/steps.js +16 -6
- package/lib/types.d.ts +14 -1
- package/lib/types.js +1 -1
- package/package.json +4 -4
package/.jsii
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"constructs": "^10.6.0",
|
|
14
|
-
"projen": "^0.99.
|
|
14
|
+
"projen": "^0.99.76"
|
|
15
15
|
},
|
|
16
16
|
"dependencyClosure": {
|
|
17
17
|
"constructs": {
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"kind": "interface",
|
|
137
137
|
"locationInModule": {
|
|
138
138
|
"filename": "src/types.ts",
|
|
139
|
-
"line":
|
|
139
|
+
"line": 146
|
|
140
140
|
},
|
|
141
141
|
"name": "AWSCredentials",
|
|
142
142
|
"properties": [
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
"immutable": true,
|
|
151
151
|
"locationInModule": {
|
|
152
152
|
"filename": "src/types.ts",
|
|
153
|
-
"line":
|
|
153
|
+
"line": 174
|
|
154
154
|
},
|
|
155
155
|
"name": "region",
|
|
156
156
|
"type": {
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
"immutable": true,
|
|
168
168
|
"locationInModule": {
|
|
169
169
|
"filename": "src/types.ts",
|
|
170
|
-
"line":
|
|
170
|
+
"line": 151
|
|
171
171
|
},
|
|
172
172
|
"name": "accessKeyIdSecretName",
|
|
173
173
|
"optional": true,
|
|
@@ -185,7 +185,7 @@
|
|
|
185
185
|
"immutable": true,
|
|
186
186
|
"locationInModule": {
|
|
187
187
|
"filename": "src/types.ts",
|
|
188
|
-
"line":
|
|
188
|
+
"line": 168
|
|
189
189
|
},
|
|
190
190
|
"name": "assumeRoleDurationSeconds",
|
|
191
191
|
"optional": true,
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
"immutable": true,
|
|
203
203
|
"locationInModule": {
|
|
204
204
|
"filename": "src/types.ts",
|
|
205
|
-
"line":
|
|
205
|
+
"line": 162
|
|
206
206
|
},
|
|
207
207
|
"name": "roleToAssume",
|
|
208
208
|
"optional": true,
|
|
@@ -220,7 +220,7 @@
|
|
|
220
220
|
"immutable": true,
|
|
221
221
|
"locationInModule": {
|
|
222
222
|
"filename": "src/types.ts",
|
|
223
|
-
"line":
|
|
223
|
+
"line": 157
|
|
224
224
|
},
|
|
225
225
|
"name": "secretAccessKeySecretName",
|
|
226
226
|
"optional": true,
|
|
@@ -914,7 +914,7 @@
|
|
|
914
914
|
},
|
|
915
915
|
"locationInModule": {
|
|
916
916
|
"filename": "src/steps.ts",
|
|
917
|
-
"line":
|
|
917
|
+
"line": 725
|
|
918
918
|
},
|
|
919
919
|
"name": "getAnnotateDiffJob",
|
|
920
920
|
"parameters": [
|
|
@@ -1102,7 +1102,7 @@
|
|
|
1102
1102
|
},
|
|
1103
1103
|
"locationInModule": {
|
|
1104
1104
|
"filename": "src/steps.ts",
|
|
1105
|
-
"line":
|
|
1105
|
+
"line": 795
|
|
1106
1106
|
},
|
|
1107
1107
|
"name": "getDiffAnnotationJobForEnvironment",
|
|
1108
1108
|
"parameters": [
|
|
@@ -1124,6 +1124,26 @@
|
|
|
1124
1124
|
"type": {
|
|
1125
1125
|
"primitive": "string"
|
|
1126
1126
|
}
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
"docs": {
|
|
1130
|
+
"summary": "The type of runner to use for the deployment job, if any."
|
|
1131
|
+
},
|
|
1132
|
+
"name": "runsOn",
|
|
1133
|
+
"optional": true,
|
|
1134
|
+
"type": {
|
|
1135
|
+
"primitive": "string"
|
|
1136
|
+
}
|
|
1137
|
+
},
|
|
1138
|
+
{
|
|
1139
|
+
"docs": {
|
|
1140
|
+
"summary": "The group of runners to use for the deployment job, if any."
|
|
1141
|
+
},
|
|
1142
|
+
"name": "runsOnGroup",
|
|
1143
|
+
"optional": true,
|
|
1144
|
+
"type": {
|
|
1145
|
+
"fqn": "projen.GroupRunnerOptions"
|
|
1146
|
+
}
|
|
1127
1147
|
}
|
|
1128
1148
|
],
|
|
1129
1149
|
"returns": {
|
|
@@ -1140,7 +1160,7 @@
|
|
|
1140
1160
|
},
|
|
1141
1161
|
"locationInModule": {
|
|
1142
1162
|
"filename": "src/steps.ts",
|
|
1143
|
-
"line":
|
|
1163
|
+
"line": 760
|
|
1144
1164
|
},
|
|
1145
1165
|
"name": "getFormattedDiffAnnotationCommentStepForEnvironment",
|
|
1146
1166
|
"parameters": [
|
|
@@ -1591,7 +1611,7 @@
|
|
|
1591
1611
|
"immutable": true,
|
|
1592
1612
|
"locationInModule": {
|
|
1593
1613
|
"filename": "src/steps.ts",
|
|
1594
|
-
"line":
|
|
1614
|
+
"line": 858
|
|
1595
1615
|
},
|
|
1596
1616
|
"name": "diffAnnotationJobs",
|
|
1597
1617
|
"type": {
|
|
@@ -1612,7 +1632,7 @@
|
|
|
1612
1632
|
"immutable": true,
|
|
1613
1633
|
"locationInModule": {
|
|
1614
1634
|
"filename": "src/steps.ts",
|
|
1615
|
-
"line":
|
|
1635
|
+
"line": 712
|
|
1616
1636
|
},
|
|
1617
1637
|
"name": "generateDiffStep",
|
|
1618
1638
|
"type": {
|
|
@@ -1983,11 +2003,50 @@
|
|
|
1983
2003
|
"type": {
|
|
1984
2004
|
"primitive": "string"
|
|
1985
2005
|
}
|
|
2006
|
+
},
|
|
2007
|
+
{
|
|
2008
|
+
"abstract": true,
|
|
2009
|
+
"docs": {
|
|
2010
|
+
"default": "\"ubuntu-latest\"",
|
|
2011
|
+
"stability": "stable",
|
|
2012
|
+
"summary": "The type of runner to use for the deployment jobs in the workflow This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix."
|
|
2013
|
+
},
|
|
2014
|
+
"immutable": true,
|
|
2015
|
+
"locationInModule": {
|
|
2016
|
+
"filename": "src/types.ts",
|
|
2017
|
+
"line": 135
|
|
2018
|
+
},
|
|
2019
|
+
"name": "runsOn",
|
|
2020
|
+
"optional": true,
|
|
2021
|
+
"type": {
|
|
2022
|
+
"primitive": "string"
|
|
2023
|
+
}
|
|
2024
|
+
},
|
|
2025
|
+
{
|
|
2026
|
+
"abstract": true,
|
|
2027
|
+
"docs": {
|
|
2028
|
+
"custom": {
|
|
2029
|
+
"description": "Defines a target Runner Group by name and/or labels",
|
|
2030
|
+
"throws": "{Error} if both `runsOn` and `runsOnGroup` are specified"
|
|
2031
|
+
},
|
|
2032
|
+
"stability": "stable",
|
|
2033
|
+
"summary": "Github Runner Group selection options This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix."
|
|
2034
|
+
},
|
|
2035
|
+
"immutable": true,
|
|
2036
|
+
"locationInModule": {
|
|
2037
|
+
"filename": "src/types.ts",
|
|
2038
|
+
"line": 143
|
|
2039
|
+
},
|
|
2040
|
+
"name": "runsOnGroup",
|
|
2041
|
+
"optional": true,
|
|
2042
|
+
"type": {
|
|
2043
|
+
"fqn": "projen.GroupRunnerOptions"
|
|
2044
|
+
}
|
|
1986
2045
|
}
|
|
1987
2046
|
],
|
|
1988
2047
|
"symbolId": "src/types:EnvironmentOptions"
|
|
1989
2048
|
}
|
|
1990
2049
|
},
|
|
1991
|
-
"version": "0.1.
|
|
1992
|
-
"fingerprint": "
|
|
2050
|
+
"version": "0.1.849",
|
|
2051
|
+
"fingerprint": "ruNrrcGmd2Wr0f/rA+u3HVOfJppCwi1Ref6uMb+lrbY="
|
|
1993
2052
|
}
|
package/API.md
CHANGED
|
@@ -5046,6 +5046,8 @@ const environmentOptions: EnvironmentOptions = { ... }
|
|
|
5046
5046
|
| <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.name">name</a></code> | <code>string</code> | Environment name to deploy to. |
|
|
5047
5047
|
| <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.postDeployWorkflowScript">postDeployWorkflowScript</a></code> | <code>string</code> | The script/task to run after deployment of the environment in the workflow If not present, the workflow will not execute that. |
|
|
5048
5048
|
| <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.preDeployWorkflowScript">preDeployWorkflowScript</a></code> | <code>string</code> | The script/task to run before deployment of the environment in the workflow If not present, the workflow will not execute that. |
|
|
5049
|
+
| <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.runsOn">runsOn</a></code> | <code>string</code> | The type of runner to use for the deployment jobs in the workflow This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix. |
|
|
5050
|
+
| <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.runsOnGroup">runsOnGroup</a></code> | <code>projen.GroupRunnerOptions</code> | Github Runner Group selection options This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix. |
|
|
5049
5051
|
|
|
5050
5052
|
---
|
|
5051
5053
|
|
|
@@ -5111,6 +5113,31 @@ The script/task to run before deployment of the environment in the workflow If n
|
|
|
5111
5113
|
```
|
|
5112
5114
|
|
|
5113
5115
|
|
|
5116
|
+
##### `runsOn`<sup>Optional</sup> <a name="runsOn" id="deployable-awscdk-app-ts.EnvironmentOptions.property.runsOn"></a>
|
|
5117
|
+
|
|
5118
|
+
```typescript
|
|
5119
|
+
public readonly runsOn: string;
|
|
5120
|
+
```
|
|
5121
|
+
|
|
5122
|
+
- *Type:* string
|
|
5123
|
+
- *Default:* "ubuntu-latest"
|
|
5124
|
+
|
|
5125
|
+
The type of runner to use for the deployment jobs in the workflow This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix.
|
|
5126
|
+
|
|
5127
|
+
---
|
|
5128
|
+
|
|
5129
|
+
##### `runsOnGroup`<sup>Optional</sup> <a name="runsOnGroup" id="deployable-awscdk-app-ts.EnvironmentOptions.property.runsOnGroup"></a>
|
|
5130
|
+
|
|
5131
|
+
```typescript
|
|
5132
|
+
public readonly runsOnGroup: GroupRunnerOptions;
|
|
5133
|
+
```
|
|
5134
|
+
|
|
5135
|
+
- *Type:* projen.GroupRunnerOptions
|
|
5136
|
+
|
|
5137
|
+
Github Runner Group selection options This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix.
|
|
5138
|
+
|
|
5139
|
+
---
|
|
5140
|
+
|
|
5114
5141
|
## Classes <a name="Classes" id="Classes"></a>
|
|
5115
5142
|
|
|
5116
5143
|
### DeployableAwsCdkTypeScriptAppStepsFactory <a name="DeployableAwsCdkTypeScriptAppStepsFactory" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory"></a>
|
|
@@ -5275,7 +5302,7 @@ The name of the environment.
|
|
|
5275
5302
|
##### `getDiffAnnotationJobForEnvironment` <a name="getDiffAnnotationJobForEnvironment" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getDiffAnnotationJobForEnvironment"></a>
|
|
5276
5303
|
|
|
5277
5304
|
```typescript
|
|
5278
|
-
public getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName?: string): Job
|
|
5305
|
+
public getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName?: string, runsOn?: string, runsOnGroup?: GroupRunnerOptions): Job
|
|
5279
5306
|
```
|
|
5280
5307
|
|
|
5281
5308
|
Get the deployment method argument for the deploy command.
|
|
@@ -5296,6 +5323,22 @@ The name of the environment variable to set with the environment name, if any.
|
|
|
5296
5323
|
|
|
5297
5324
|
---
|
|
5298
5325
|
|
|
5326
|
+
###### `runsOn`<sup>Optional</sup> <a name="runsOn" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getDiffAnnotationJobForEnvironment.parameter.runsOn"></a>
|
|
5327
|
+
|
|
5328
|
+
- *Type:* string
|
|
5329
|
+
|
|
5330
|
+
The type of runner to use for the deployment job, if any.
|
|
5331
|
+
|
|
5332
|
+
---
|
|
5333
|
+
|
|
5334
|
+
###### `runsOnGroup`<sup>Optional</sup> <a name="runsOnGroup" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getDiffAnnotationJobForEnvironment.parameter.runsOnGroup"></a>
|
|
5335
|
+
|
|
5336
|
+
- *Type:* projen.GroupRunnerOptions
|
|
5337
|
+
|
|
5338
|
+
The group of runners to use for the deployment job, if any.
|
|
5339
|
+
|
|
5340
|
+
---
|
|
5341
|
+
|
|
5299
5342
|
##### `getFormattedDiffAnnotationCommentStepForEnvironment` <a name="getFormattedDiffAnnotationCommentStepForEnvironment" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getFormattedDiffAnnotationCommentStepForEnvironment"></a>
|
|
5300
5343
|
|
|
5301
5344
|
```typescript
|
package/lib/index.js
CHANGED
|
@@ -222,5 +222,5 @@ class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp
|
|
|
222
222
|
}
|
|
223
223
|
exports.DeployableAwsCdkTypeScriptApp = DeployableAwsCdkTypeScriptApp;
|
|
224
224
|
_a = JSII_RTTI_SYMBOL_1;
|
|
225
|
-
DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.
|
|
225
|
+
DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.849" };
|
|
226
226
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBNEQ7QUFFNUQsbUNBQW9FO0FBQ3BFLG1DQUF3TTtBQUN4TSxtQ0FBOEM7QUFFOUMsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUNqQywwQ0FBd0I7QUFFeEIsTUFBYSw2QkFBOEIsU0FBUSxlQUFNLENBQUMsbUJBQW1CO0lBRTNFOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFtQztRQUNuRSxPQUFPLENBQUMsVUFBVSxDQUNoQixzQkFBc0IsRUFDdEIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUVyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELFVBQVUsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUN4RCxVQUFVLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDbkYsVUFBVSxDQUFDLElBQUksQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzdFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMkRBQTJELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWEs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QUcsV0FBVztnQkFDZCx1QkFBdUIsRUFBRSxNQUFNO2FBQ2hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sYUFBYTtRQUVuQixNQUFNLFdBQVcsR0FBRyxJQUFJLGlEQUF5QyxDQUFDLElBQUksRUFBRTtZQUN0RSxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVk7WUFDcEQscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUI7WUFDMUQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0I7WUFDN0QsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDbkMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtTQUN0RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHVDQUF1QyxDQUFDLHVCQUEwRDtRQUN2RyxpREFBeUMsQ0FBQyx5Q0FBeUMsQ0FDakYsSUFBSSxDQUFDLGFBQWEsRUFDbEIsdUJBQXVCLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQzs7QUF2T0gsc0VBd09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGF3c2NkaywgU291cmNlQ29kZSwgVGFzaywgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ29kZUFydGlmYWN0T3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSB9IGZyb20gJy4vc3RlcHMnO1xuaW1wb3J0IHsgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBEaWZmT3V0cHV0T3B0aW9ucywgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zLCBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldE1ham9yTm9kZVZlcnNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RlcHMnO1xuXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHAgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBkaWZmIG91dHB1dCBpcyBlbmFibGVkLCBhZGRzIGEgc2NyaXB0IGFuZCBhIGpvYiBzdGVwIHRvIGdlbmVyYXRlIHRoZSBDREsgZGlmZiBvdXRwdXQgdG8gYSBmaWxlIGluIGNkay5vdXRcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhZGREaWZmT3V0cHV0U2NyaXB0KHByb2plY3Q6IGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwKSB7XG4gICAgcHJvamVjdC5hZGREZXZEZXBzKFxuICAgICAgJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJyxcbiAgICAgICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJyxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oJ3NjcmlwdHMnLCAnZ2VuZXJhdGVEaWZmT3V0cHV0LnRzJyk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gbmV3IFNvdXJjZUNvZGUocHJvamVjdCwgZmlsZVBhdGgpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImltcG9ydCB7Y3JlYXRlV3JpdGVTdHJlYW19IGZyb20gJ2ZzJ1wiKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoXCJpbXBvcnQge2Zvcm1hdERpZmZlcmVuY2VzfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcIik7XG4gICAgc291cmNlQ29kZS5saW5lKFwiaW1wb3J0IHtEaWZmTWV0aG9kLCBUb29sa2l0fSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XCIpO1xuICAgIHNvdXJjZUNvZGUubGluZSgnJyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdjb25zdCBjZGsgPSBuZXcgVG9vbGtpdCh7fSk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCcnKTtcbiAgICBzb3VyY2VDb2RlLm9wZW4oJ2FzeW5jIGZ1bmN0aW9uIG1haW4oKSB7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKGBjb25zdCBjeCA9IGF3YWl0IGNkay5mcm9tQ2RrQXBwKCd0cy1ub2RlLXRyYW5zcGlsZS1vbmx5ICR7cGF0aC5wb3NpeC5qb2luKHByb2plY3Quc3JjZGlyLCBwcm9qZWN0LmFwcEVudHJ5cG9pbnQpfScpO2ApO1xuICAgIHNvdXJjZUNvZGUubGluZSgnY29uc3QgZGlmZnMgPSBhd2FpdCBjZGsuZGlmZihjeCwge21ldGhvZDogRGlmZk1ldGhvZC5UZW1wbGF0ZU9ubHkoKX0pOycpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKCcuL2Nkay5vdXQvZGlmZi5sb2cnKTtcIik7XG4gICAgc291cmNlQ29kZS5vcGVuKCdPYmplY3QuZW50cmllcyhkaWZmcykuZm9yRWFjaCgoW3N0YWNrTmFtZSwgZGlmZl0pID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3N0cmVhbS53cml0ZShgRGlmZmVyZW5jZSBmb3Igc3RhY2sgJHtzdGFja05hbWV9OlxcXFxuYCk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdmb3JtYXREaWZmZXJlbmNlcyhzdHJlYW0sIGRpZmYpOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30pOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30nKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJycpO1xuICAgIHNvdXJjZUNvZGUub3BlbignbWFpbigpLmNhdGNoKChlcnIpID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ2NvbnNvbGUuZXJyb3IoZXJyKTsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3Byb2Nlc3MuZXhpdCgxKTsnKTtcbiAgICBzb3VyY2VDb2RlLmNsb3NlKCd9KTsnKTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnZGlmZjpvdXRwdXQnLCB7XG4gICAgICBleGVjOiBgdHMtbm9kZSAtLXRyYW5zcGlsZS1vbmx5ICR7ZmlsZVBhdGh9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYXNrIHRvIGRlcGxveSB5b3VyIGFwcC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXBsb3lXb3JrZmxvd1Rhc2s6IFRhc2s7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3lhYmxlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlTnZtcmM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93Tm9kZVZlcnNpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZUFydGlmYWN0T3B0aW9ucz86IENvZGVBcnRpZmFjdE9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95Sm9iU3RyYXRlZ3k6IERlcGxveUpvYlN0cmF0ZWd5O1xuICBwcml2YXRlIHJlYWRvbmx5IGRpZmZPdXRwdXRPcHRpb25zOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcERpZmZPdXRwdXRPcHRpb25zO1xuXG4gIHByb3RlY3RlZCBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuICBwcm90ZWN0ZWQgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpIHtcbiAgICBjb25zdCBkZXBsb3lhYmxlID0gb3B0aW9ucy5yZWxlYXNlID8/IHRydWU7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJlbGVhc2U6IGRlcGxveWFibGUsXG4gICAgfSk7XG4gICAgdGhpcy5kZXBsb3lhYmxlID0gZGVwbG95YWJsZTtcbiAgICB0aGlzLmdlbmVyYXRlTnZtcmMgPSBvcHRpb25zLmdlbmVyYXRlTnZtcmMgPz8gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA9IG9wdGlvbnMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8/IGZhbHNlO1xuICAgIHRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbjtcbiAgICB0aGlzLmRlcGxveU9wdGlvbnMgPSBvcHRpb25zLmRlcGxveU9wdGlvbnMgPz8geyBlbnZpcm9ubWVudHM6IFtdIH07XG4gICAgdGhpcy5jb2RlQXJ0aWZhY3RPcHRpb25zID0gb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zO1xuICAgIHRoaXMuZGVwbG95Sm9iU3RyYXRlZ3kgPSB0aGlzLmRlcGxveU9wdGlvbnMuam9iU3RyYXRlZ3kgPz8gRGVwbG95Sm9iU3RyYXRlZ3kuTUFUUklYO1xuICAgIHRoaXMuZGlmZk91dHB1dE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGU6IG9wdGlvbnMuZGlmZk91dHB1dD8uZW5hYmxlID8/IGZhbHNlLFxuICAgICAgYW5ub3RhdGVPbkJ1aWxkOiAob3B0aW9ucy5kaWZmT3V0cHV0Py5hbm5vdGF0ZU9uQnVpbGQgPz8gb3B0aW9ucy5kaWZmT3V0cHV0Py5lbmFibGUgPz8gZmFsc2UpLFxuICAgIH07XG5cbiAgICB0aGlzLmFkZERldkRlcHMoJ2RlcGxveWFibGUtYXdzY2RrLWFwcC10cycpO1xuICAgIHRoaXMuYWRkRGlmZk91dHB1dFNjcmlwdCgpO1xuXG4gICAgaWYgKCFkZXBsb3lhYmxlKSB7dGhpcy5sb2dnZXIud2FybignVGhlIHByb2plY3QgaXMgZXhwbGljaXRseSBzZXQgdG8gbm90IHJlbGVhc2UsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMgJiYgIXRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbikge3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9ICcxNC4xOC4xJzt9XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ICYmIHRoaXMubWFqb3JOb2RlVmVyc2lvbiA+PSAxOCkge3Rocm93IG5ldyBFcnJvcihgbnBtQ29uZmlnRW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSB2ZXJzaW9uIDE4LiBDdXJyZW50IHZlcnNpb24gaXMgJHt0aGlzLm5vZGVWZXJzaW9ufWApO31cblxuICAgIGNvbnN0IGRlcGxveUFyZ3VtZW50ID0gdGhpcy5kZXBsb3lPcHRpb25zLnN0YWNrUGF0dGVybiA/IGAgJHt0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJufWA6ICcnO1xuICAgIGNvbnN0IGRlcGxveUNvbW1hbmQgPSBgY2RrIGRlcGxveSR7ZGVwbG95QXJndW1lbnR9ICR7dGhpcy5nZXRNZXRob2RBcmd1bWVudCgpfSAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXJgO1xuICAgIGNvbnN0IHJlcXVpcmVkRW52ID0gdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ID8gW2BucG1fY29uZmlnXyR7dGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50fWBdIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVwbG95V29ya2Zsb3dUYXNrID0gdGhpcy5hZGRUYXNrKCdkZXBsb3k6d29ya2Zsb3cnLCB7XG4gICAgICByZXF1aXJlZEVudixcbiAgICAgIGV4ZWM6IGRlcGxveUNvbW1hbmQsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdkZXBsb3k6aG90c3dhcCcsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogYCR7ZGVwbG95Q29tbWFuZH0gLS1ob3Rzd2FwYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIG1ham9yIG5vZGUgdmVyc2lvbiBzZXQgZm9yIHRoZSBwcm9qZWN0XG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBnZXQgbWFqb3JOb2RlVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRNYWpvck5vZGVWZXJzaW9uKHRoaXMubm9kZVZlcnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRob2RBcmd1bWVudCgpIHtcbiAgICByZXR1cm4gYC0tbWV0aG9kICR7dGhpcy5kZXBsb3lPcHRpb25zLm1ldGhvZCA/PyAnY2hhbmdlLXNldCd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZGlmZiBvdXRwdXQgaXMgZW5hYmxlZCwgYWRkcyBhIHNjcmlwdCBhbmQgYSBqb2Igc3RlcCB0byBnZW5lcmF0ZSB0aGUgQ0RLIGRpZmYgb3V0cHV0IHRvIGEgZmlsZSBpbiBjZGsub3V0XG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHByaXZhdGUgYWRkRGlmZk91dHB1dFNjcmlwdCgpIHtcbiAgICBpZiAoIXRoaXMuZGlmZk91dHB1dE9wdGlvbnMuZW5hYmxlKSB7cmV0dXJuO31cblxuICAgIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwLmFkZERpZmZPdXRwdXRTY3JpcHQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGRpZmYgb3V0cHV0IGlzIGVuYWJsZWQgd2l0aCBhbm5vdGF0aW9uLCBhZGRzIHRoZSBkaWZmIG91dHB1dCBnZW5lcmF0aW9uIHN0ZXAgYW5kIHRoZSBhbm5vdGF0aW9uIHN0ZXBzIHRvIHRoZSBidWlsZCBqb2JzXG4gICAqIFRoZSBhbm5vdGF0aW9uIHN0ZXBzIHdpbGwgYWRkIGEgY29tbWVudCB0byB0aGUgR2l0SHViIFBSIHdpdGggdGhlIGRpZmYgb3V0cHV0LCBhbmQgYWxzbyBhZGQgYW4gYW5ub3RhdGlvbiB0byB0aGUgbGluZXMgb2YgY29kZSB0aGF0IGFyZSBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgZGVwbG95ZWQgc3RhY2sgYW5kIHRoZSBjaGFuZ2VzIG1hZGUgb24gUFJcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHJpdmF0ZSBhZGREaWZmQW5ub3RhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlmZk91dHB1dE9wdGlvbnMuYW5ub3RhdGVPbkJ1aWxkKSB7cmV0dXJuO31cblxuICAgIGNvbnN0IHN0ZXBGYWN0b3J5ID0gbmV3IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KHRoaXMsIHtcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgICBhdXRoUHJvdmlkZXI6IHRoaXMuY29kZUFydGlmYWN0T3B0aW9ucz8uYXV0aFByb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmVudHJpZXMoc3RlcEZhY3RvcnkuZGlmZkFubm90YXRpb25Kb2JzKS5mb3JFYWNoKChbbmFtZSwgam9iXSkgPT4ge1xuICAgICAgdGhpcy5idWlsZFdvcmtmbG93Py5hZGRQb3N0QnVpbGRKb2IobmFtZSwgam9iKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN5bnRoKCkge1xuICAgIGlmICh0aGlzLmRlcGxveWFibGUpIHt0aGlzLmFkZERlcGxveUpvYnMoKTt9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZU52bXJjKSB7XG4gICAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5udm1yYycsIHtcbiAgICAgICAgbGluZXM6IFt0aGlzLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gJyddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaWZmQW5ub3RhdGlvbigpO1xuXG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGVudmlyb25tZW50cyB0byB0aGUgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIGl0ZW1zIGxpc3Qgb2YgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKi9cbiAgYWRkRW52aXJvbm1lbnRzKC4uLml0ZW1zOiBFbnZpcm9ubWVudE9wdGlvbnNbXSkge1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMucHVzaCguLi5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5kZXBsb3lPcHRpb25zLFxuICAgICAgZW52aXJvbm1lbnRzOiBuZXdFbnZpcm9ubWVudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgZm9yIGVudmlyb25tZW50c1xuICAgKiBAcGFyYW0gc2NyaXB0IHRoZSBzY3JpcHQgdG8gYmUgYWRkZWQsIGZvciBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQ6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudHMobmV3RW52aXJvbm1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICogQHBhcmFtIGVudmlyb25tZW50TmFtZUZpbHRlciB0aGUgbmFtZSBvZiBlbnZpcm9ubWVudHMgdG8gYWRkIHRoZSBzY3JpcHRzIHRvLCBpZiBub3QgcHJvdmlkZWQgb3IgZW1wdHkgd2lsbCB1cGRhdGUgYWxsXG4gICAqL1xuICB1cGRhdGVQcmVEZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBsb3lKb2JzKCkge1xuXG4gICAgY29uc3Qgc3RlcEZhY3RvcnkgPSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkodGhpcywge1xuICAgICAgYXV0aFByb3ZpZGVyOiB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbGVhc2U/LmFkZEpvYnMoc3RlcEZhY3RvcnkuZGVwbG95bWVudEpvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgYW4gb2JqZWN0IGRlZmluaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVudmlyb25tZW50c1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkudmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgICB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llcyxcbiAgICApO1xuXG4gICAgdGhpcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcyA9IGVudmlyb25tZW50RGVwZW5kZW5jaWVzO1xuICB9XG59Il19
|
package/lib/steps.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { javascript } from 'projen';
|
|
1
|
+
import { javascript, GroupRunnerOptions } from 'projen';
|
|
2
2
|
import { JobStep, Job } from 'projen/lib/github/workflows-model';
|
|
3
3
|
import { CodeArtifactAuthProvider } from 'projen/lib/javascript';
|
|
4
4
|
import { DeployJobStrategy, DeployOptions, EnvironmentDeploymentDependencies, EnvironmentOptions } from './types';
|
|
@@ -216,9 +216,11 @@ export declare class DeployableAwsCdkTypeScriptAppStepsFactory {
|
|
|
216
216
|
* Get the deployment method argument for the deploy command
|
|
217
217
|
* @param environmentOptions The environment options
|
|
218
218
|
* @param environmentVariableName The name of the environment variable to set with the environment name, if any
|
|
219
|
+
* @param runsOn The type of runner to use for the deployment job, if any
|
|
220
|
+
* @param runsOnGroup The group of runners to use for the deployment job, if any
|
|
219
221
|
* @returns The diff annotation job for the environment
|
|
220
222
|
*/
|
|
221
|
-
getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName: string | undefined): Job;
|
|
223
|
+
getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName: string | undefined, runsOn?: string, runsOnGroup?: GroupRunnerOptions): Job;
|
|
222
224
|
/**
|
|
223
225
|
* Get diff annotation jobs for all environments
|
|
224
226
|
* @returns Record of jobs
|
package/lib/steps.js
CHANGED
|
@@ -465,12 +465,16 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
|
|
|
465
465
|
* @returns The job definition for the environment
|
|
466
466
|
*/
|
|
467
467
|
getJobForEnvironment(environmentOptions, environmentVariableName) {
|
|
468
|
-
const { name } = environmentOptions;
|
|
468
|
+
const { name, runsOn, runsOnGroup } = environmentOptions;
|
|
469
469
|
const deployJobEnv = environmentVariableName ? {
|
|
470
470
|
[environmentVariableName]: name,
|
|
471
471
|
} : undefined;
|
|
472
|
+
if (runsOn && runsOnGroup) {
|
|
473
|
+
throw new Error('Both `runsOn` and `runsOnGroup` cannot be specified simultaneously.');
|
|
474
|
+
}
|
|
472
475
|
const jobDefinition = {
|
|
473
|
-
runsOn: ['ubuntu-latest'],
|
|
476
|
+
runsOn: runsOnGroup ? undefined : [runsOn ?? 'ubuntu-latest'],
|
|
477
|
+
runsOnGroup: runsOnGroup,
|
|
474
478
|
concurrency: {
|
|
475
479
|
'group': `${name}-deploy`,
|
|
476
480
|
'cancel-in-progress': false,
|
|
@@ -589,15 +593,21 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
|
|
|
589
593
|
* Get the deployment method argument for the deploy command
|
|
590
594
|
* @param environmentOptions The environment options
|
|
591
595
|
* @param environmentVariableName The name of the environment variable to set with the environment name, if any
|
|
596
|
+
* @param runsOn The type of runner to use for the deployment job, if any
|
|
597
|
+
* @param runsOnGroup The group of runners to use for the deployment job, if any
|
|
592
598
|
* @returns The diff annotation job for the environment
|
|
593
599
|
*/
|
|
594
|
-
getDiffAnnotationJobForEnvironment(environmentOptions, environmentVariableName) {
|
|
600
|
+
getDiffAnnotationJobForEnvironment(environmentOptions, environmentVariableName, runsOn, runsOnGroup) {
|
|
595
601
|
const { name } = environmentOptions;
|
|
596
602
|
const deployJobEnv = environmentVariableName ? {
|
|
597
603
|
[environmentVariableName]: name,
|
|
598
604
|
} : undefined;
|
|
605
|
+
if (runsOn && runsOnGroup) {
|
|
606
|
+
throw new Error('Both `runsOn` and `runsOnGroup` cannot be specified simultaneously.');
|
|
607
|
+
}
|
|
599
608
|
const jobDefinition = {
|
|
600
|
-
runsOn: ['ubuntu-latest'],
|
|
609
|
+
runsOn: runsOnGroup ? undefined : [runsOn ?? 'ubuntu-latest'],
|
|
610
|
+
runsOnGroup: runsOnGroup,
|
|
601
611
|
needs: ['build'],
|
|
602
612
|
permissions: {
|
|
603
613
|
contents: workflows_model_1.JobPermission.READ,
|
|
@@ -646,7 +656,7 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
|
|
|
646
656
|
}
|
|
647
657
|
exports.DeployableAwsCdkTypeScriptAppStepsFactory = DeployableAwsCdkTypeScriptAppStepsFactory;
|
|
648
658
|
_a = JSII_RTTI_SYMBOL_1;
|
|
649
|
-
DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.
|
|
659
|
+
DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.849" };
|
|
650
660
|
/**
|
|
651
661
|
* Get the deploy job ID for a specific environment
|
|
652
662
|
* @param environmentName The name of the environment
|
|
@@ -663,4 +673,4 @@ function getDeployJobId(environmentName) {
|
|
|
663
673
|
function getDiffAnnotationJobId(environmentName) {
|
|
664
674
|
return `Diff-Annotation-${environmentName}`;
|
|
665
675
|
}
|
|
666
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTQxQkEsd0NBRUM7QUFPRCx3REFFQzs7QUF2MkJELG1DQUE0QztBQUM1Qyw4Q0FBa0Q7QUFDbEQsdUVBQWdGO0FBQ2hGLHNEQUFpRTtBQUNqRSxtQ0FBa0g7QUFFbEgsTUFBTSwyQkFBMkIsR0FBRyxrQkFBa0IsQ0FBQztBQUN2RCxNQUFNLHNDQUFzQyxHQUFFLFNBQVMsMkJBQTJCLDBDQUEwQyxDQUFDO0FBQzdILE1BQU0sb0NBQW9DLEdBQUcsbUNBQW1DLENBQUM7QUF3Q2pGOzs7R0FHRztBQUNILE1BQWEseUNBQXlDO0lBRXBEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMseUNBQXlDLENBQ3JELGFBQTRCLEVBQzVCLHVCQUEwRDtRQUcxRCxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUsseUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLHdFQUF3RSxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJ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Z0Isc0JBQXNCLENBQUMsZUFBdUI7SUFDNUQsT0FBTyxtQkFBbUIsZUFBZSxFQUFFLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGphdmFzY3JpcHQsIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBXb3JrZmxvd1N0ZXBzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCwgSm9iIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkID0gJ2RlcGxveW1lbnQtY2hlY2snO1xuY29uc3Qgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb249IGBzdGVwcy4ke2NoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZH0ub3V0cHV0cy5oYXNfYWN0aXZlX2RlcGxveW1lbnQgIT0gJ3RydWUnYDtcbmNvbnN0IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCA9ICdmb3JtYXR0ZWRfZGlmZl9hbm5vdGF0aW9uX2NvbW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogRGVwbG95bWVudCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIGZvciBhY3RpdmUgZGVwbG95bWVudHMgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBkZXBsb3ltZW50XG4gICAqL1xuICByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbFRhc2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgZm9yIENvZGVBcnRpZmFjdCwgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBhdXRoUHJvdmlkZXI/OiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBucG0gY29uZmlnIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCB0aGF0IGlzIGJlaW5nIGRlcGxveWVkLCBpZiBhbnlcbiAgICogTm90ZTogVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBub2RlIHZlcnNpb25zIGFib3ZlIDE4XG4gICAqL1xuICByZWFkb25seSBucG1Db25maWdFbnZpcm9ubWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBqb2Igc3RyYXRlZ3ksIHdoZXRoZXIgdG8gdXNlIGEgbWF0cml4IGpvYiBvciBtdWx0aXBsZSBqb2JzIGZvciBlYWNoIGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBqb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50RGVwZW5kZW5jaWVzPzogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gY3JlYXRlIHJldXNhYmxlIHN0ZXBzIGZvciB0aGUgZGVwbG95bWVudCB3b3JrZmxvd1xuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3Rvcnkge1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBwcm92aWRlZCBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyBhcmUgdmFsaWRcbiAgICogQHBhcmFtIGRlcGxveU9wdGlvbnMgVGhlIGRlcGxveW1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgVGhlIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIHRvIHZhbGlkYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKFxuICAgIGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyxcbiAgKTogdm9pZCB7XG5cbiAgICBpZiAoZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSAhPT0gRGVwbG95Sm9iU3RyYXRlZ3kuTVVMVElfSk9CKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgTVVMVElfSk9CIHN0cmF0ZWd5Jyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpLmZvckVhY2goKFtlbnYsIGRlcHNdKSA9PiB7XG4gICAgICBjb25zdCBoYXNFbnZpcm9ubWVudCA9IGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLnNvbWUoZSA9PiBlLm5hbWUgPT09IGVudik7XG4gICAgICBpZiAoIWhhc0Vudmlyb25tZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW52aXJvbm1lbnQgXCIke2Vudn1cIiBkZWZpbmVkIGluIGRlcGVuZGVuY2llcyBkb2VzIG5vdCBleGlzdCBpbiBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50c2ApO1xuICAgICAgfVxuICAgICAgZGVwcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0RlcEVudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZGVwKTtcbiAgICAgICAgaWYgKCFoYXNEZXBFbnZpcm9ubWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSBlbnZpcm9ubWVudCBcIiR7ZGVwfVwiIGZvciBlbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVxuICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGZhY3RvcnkgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiBqYXZhc2NyaXB0Lk5vZGVQcm9qZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMsXG4gICkge31cblxuICAvKipcbiAgICogQ29uZGl0aW9uIHRvIHNraXAgYSBzdGVwIGlmIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGlzIGFscmVhZHkgcHJlc2VudFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIGNvbmRpdGlvbiBvciB1bmRlZmluZWQgaWYgY2hlY2tBY3RpdmVEZXBsb3ltZW50IGlzIGZhbHNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHsgaWY6IGBcXCR7eyAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hlY2tvdXRTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiBXb3JrZmxvd1N0ZXBzLmNoZWNrb3V0KHtcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZmV0Y2hEZXB0aDogMCxcbiAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5zaGEgfX0nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgaWYgZXhpc3RzXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIHByZUluc3RhbGxUYXNrTmFtZSBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUsXG4gICAgICBydW46IGBucHggcHJvamVuICR7dGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gY2hlY2tcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCxcbiAgICAgIHVzZXM6ICdBbWluRmF6bE1vbmRvL2NoZWNrLWRlcGxveWVkLWVudmlyb25tZW50QHYxJyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGVudjoge1xuICAgICAgICBHSVRIVUJfVE9LRU46ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yTWF0cml4KCk6IEpvYlN0ZXBbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgsXG4gICAgICB0aGlzLmFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwcyB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSA9IFtdO1xuXG4gICAgY29uc3QgZnJvbUVudlZhcmlhYmxlU3RlcCA9IHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgKTtcblxuICAgIGlmIChmcm9tRW52VmFyaWFibGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGZyb21FbnZWYXJpYWJsZVN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtZVJvbGVTdGVwID0gdGhpcy5nZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPz8gJycsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyA/PyA5MDAsXG4gICAgKTtcblxuICAgIGlmIChhc3N1bWVSb2xlU3RlcCkge1xuICAgICAgc3RlcHMucHVzaChhc3N1bWVSb2xlU3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRmxhZyBXaGV0aGVyIHRvIGFzc3VtZSBhIHJvbGUsIGNhbiBiZSBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcGFyYW0gYWNjZXNzS2V5SWRTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBhY2Nlc3Mga2V5IElEXG4gICAqIEBwYXJhbSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBzZWNyZXQgYWNjZXNzIGtleVxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb25cbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gQVdTIGNyZWRlbnRpYWxzIGFyZSBwcm92aWRlZCxcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgcmV0dXJuIGEgSm9iU3RlcCBvbmx5IGlmIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmIChhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyB9fWA7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAnZWNobyBcIkFXU19BQ0NFU1NfS0VZX0lEPSRhY2Nlc3NLZXlJZFwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRzZWNyZXRBY2Nlc3NLZXlcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgICAnZWNobyBcIkFXU19SRUdJT049JHJlZ2lvblwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICBdO1xuXG4gICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nICYmIGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0NvbmZpZ3VyZSBBV1MgQ3JlZGVudGlhbHMnLFxuICAgICAgcnVuOiBgJHtjb21tYW5kcy5qb2luKCdcXG4nKX1gLFxuICAgICAgZW52OiB7XG4gICAgICAgIGFjY2Vzc0tleUlkOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5yb2xlVG9Bc3N1bWUgfX0nLFxuICAgICAgJyR7eyBtYXRyaXguYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBhc3N1bWUgYW4gQVdTIHJvbGUgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcGFyYW0gcm9sZVRvQXNzdW1lIFRoZSByb2xlIHRvIGFzc3VtZVxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyBUaGUgZHVyYXRpb24gZm9yIGFzc3VtaW5nIHRoZSByb2xlXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIGFzc3VtZVJvbGVGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHJvbGVUb0Fzc3VtZTogc3RyaW5nLFxuICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM/OiBzdHJpbmcgfCBudW1iZXIsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgIWFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIGNvbnN0IHNlY3JldHNQYXJhbXMgPVxuICAgICAgdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUiA/XG4gICAgICAgIHtcbiAgICAgICAgICAnYXdzLWFjY2Vzcy1rZXktaWQnOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgICAnYXdzLXNlY3JldC1hY2Nlc3Mta2V5JzogYFxcJHt7IHNlY3JldHNbJHtzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0Fzc3VtZSBBV1MgUm9sZScsXG4gICAgICB1c2VzOiAnYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NCcsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIC4uLnNlY3JldHNQYXJhbXMsXG4gICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgJ2F3cy1yZWdpb24nOiByZWdpb24sXG4gICAgICAgICdyb2xlLWR1cmF0aW9uLXNlY29uZHMnOiBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgTlBNIGNvbmZpZyBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBucG1Db25maWcgaXMgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBOcG1Db25maWdGb3JNYXRyaXgoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgcHVibGljIGdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbnBtQ29uZmlnRW52aXJvbm1lbnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFucG1Db25maWdFbnZpcm9ubWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9ICdDT05GSUdfVkFMVUUnO1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogJ1NldHRpbmcgTlBNIENvbmZpZycsXG4gICAgICBlbnY6IHtcbiAgICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgcnVuOiBgbnBtIGNvbmZpZyBzZXQgJHtucG1Db25maWdFbnZpcm9ubWVudH0gJCR7ZW52aXJvbm1lbnRWYXJpYWJsZU5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBydW4gYSBzcGVjaWZpYyBzY3JpcHRcbiAgICogQHBhcmFtIHNjcmlwdE5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW5cbiAgICogQHBhcmFtIHN0ZXBOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGVwIGluIHRoZSB3b3JrZmxvd1xuICAgKiBAcGFyYW0gaGFzU2NyaXB0RmxhZyBXaGV0aGVyIHRoZSBzY3JpcHQgc2hvdWxkIGJlIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UnVuU2NyaXB0U3RlcChcbiAgICBzY3JpcHROYW1lOiBzdHJpbmcsXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBoYXNTY3JpcHRGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFzU2NyaXB0RmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghaGFzU2NyaXB0RmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7aGFzU2NyaXB0RmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicgJiYgIWhhc1NjcmlwdEZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiBgUnVuICR7c3RlcE5hbWV9YCxcbiAgICAgIHJ1bjogYCR7dGhpcy5wcm9qZWN0LnJ1blNjcmlwdENvbW1hbmR9ICR7c2NyaXB0TmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBkZXBsb3kgdGhlIHdvcmtmbG93XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkZXBsb3k6d29ya2Zsb3cnLFxuICAgICAgJ0RlcGxveW1lbnQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4Lmhhc1ByZURlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucHJlRGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmUtZGVwbG95bWVudCBzdGVwIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBoYXNQcmVEZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwcmUtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHByZURlcGxveW1lbnRTY3JpcHQgVGhlIHNjcmlwdCB0byBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgcHJlLWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUHJlRGVwbG95VGFza0ZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgIHByZURlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUHJlIERlcGxveW1lbnQnLFxuICAgICAgaGFzUHJlRGVwbG95VGFza0ZsYWcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvc3REZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUG9zdERlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucG9zdERlcGxveW1lbnRTY3JpcHQgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9zdC1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwb3N0LWRlcGxveW1lbnQgdGFzayBzaG91bGQgYmUgcnVuXG4gICAqIEBwYXJhbSBwb3N0RGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwb3N0LWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQb3N0RGVwbG95VGFza0ZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQb3N0RGVwbG95VGFza0ZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUG9zdCBEZXBsb3ltZW50JyxcbiAgICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZGVwbG95bWVudCBqb2JzIHdoZXRoZXIgZm9yIG1hdHJpeCBzdHJhdGVneSBvciBub3RcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybignVGhlIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhbnkgZW52aXJvbm1lbnQgc2V0LCBtYWtlIHN1cmUgdGhpcyBpcyBkZXNpcmVkIHNldHRpbmcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuam9iU3RyYXRlZ3kgPT09IERlcGxveUpvYlN0cmF0ZWd5Lk1BVFJJWCA/IHRoaXMuZGVwbG95bWVudEpvYnNGb3JNYXRyaXggOiB0aGlzLmRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTWF0cml4KCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuXG4gICAgY29uc3QgeyBlbnZpcm9ubWVudHMsIGVudmlyb25tZW50VmFyaWFibGVOYW1lIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG5cbiAgICBjb25zdCBpbmNsdWRlID0gZW52aXJvbm1lbnRzLm1hcChlbnZpcm9ubWVudE9wdGlvbnMgPT4ge1xuICAgICAgY29uc3QgeyBhd3NDcmVkZW50aWFscyB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZVNldHRpbmdzID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8ge1xuICAgICAgICByb2xlVG9Bc3N1bWU6IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kczogYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB8fCA5MDAsXG4gICAgICB9OiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFjY2Vzc0tleUlkU2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnO1xuICAgICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSc7XG5cbiAgICAgIGNvbnN0IGhhc1Bvc3REZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICBjb25zdCBoYXNQcmVEZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50T3B0aW9ucy5uYW1lLFxuICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWUsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUsXG4gICAgICAgIHJlZ2lvbjogYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgICBhc3N1bWVSb2xlLFxuICAgICAgICBoYXNQb3N0RGVwbG95VGFzayxcbiAgICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIGhhc1ByZURlcGxveVRhc2ssXG4gICAgICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgLi4uYXNzdW1lUm9sZVNldHRpbmdzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0tZGVwbG95JyxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiBbXG4gICAgICAgICdyZWxlYXNlX2dpdGh1YicsXG4gICAgICBdLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgZGVwbG95bWVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHN0cmF0ZWd5OiB7XG4gICAgICAgIG1heFBhcmFsbGVsOiAxLFxuICAgICAgICBtYXRyaXg6IHtcbiAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbmNsdWRlLm1hcChlID0+IGUuZW52aXJvbm1lbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCA9IHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeDtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLnNldHVwTnBtQ29uZmlnRm9yTWF0cml4O1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcblxuICAgIHJldHVybiB7IGRlcGxveTogam9iRGVmaW5pdGlvbiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBqb2JzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQncyBkZXBsb3ltZW50IGpvYlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBqb2IgSURzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5maW5kSW5kZXgoZW52ID0+IGVudi5uYW1lID09PSBlbnZpcm9ubWVudE5hbWUpO1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlRW52aXJvbm1lbnQgPSBpbmRleCA+IDAgPyB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzW2luZGV4IC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQubmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzW2Vudmlyb25tZW50TmFtZV07XG4gICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQoZGVwKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goJ3JlbGVhc2VfZ2l0aHViJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbXVsdGktam9iIHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2IoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9icyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE9wdGlvbnMubmFtZSksIHRoaXMuZ2V0Sm9iRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSldO1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoam9icyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgam9iIGRlZmluaXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldEpvYkZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICAgIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IEpvYiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBuYW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogYCR7bmFtZX0tZGVwbG95YCxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiB0aGlzLmdldERlcGxveW1lbnRKb2JQcmVyZXF1aXNpdGVKb2JJZHMobmFtZSksXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwcmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG5cbiAgICBjb25zdCBwb3N0RGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocG9zdERlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocG9zdERlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGdlbmVyYXRlIHRoZSBkaWZmIG91dHB1dFxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdlbmVyYXRlRGlmZlN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkaWZmOm91dHB1dCcsXG4gICAgICAnR2VuZXJhdGUgRGlmZiBPdXRwdXQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGpvYiB0byBhbm5vdGF0ZSB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXQgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHBhcmFtIGRlcGVuZGVudEpvYk5hbWVzIFRoZSBuYW1lcyBvZiB0aGUgam9icyB0aGF0IHRoZSBhbm5vdGF0aW9uIGpvYiBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIFRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYW5ub3RhdGluZyB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXRcbiAgICovXG4gIHB1YmxpYyBnZXRBbm5vdGF0ZURpZmZKb2IoZGVwZW5kZW50Sm9iTmFtZXM6IHN0cmluZ1tdKTogSm9iIHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBkZXBlbmRlbnRKb2JOYW1lcyxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICBnaXRodWIuV29ya2Zsb3dTdGVwcy5kb3dubG9hZEFydGlmYWN0KHtcbiAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGRpZmYgYXJ0aWZhY3RzJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiAnZGlmZi1vdXRwdXQtKicsXG4gICAgICAgICAgICBwYXRoOiAnZGlmZi1vdXRwdXRzJyxcbiAgICAgICAgICAgIG1lcmdlTXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQW5ub3RhdGUgUFIgd2l0aCBEaWZmIE91dHB1dCcsXG4gICAgICAgICAgdXNlczogJ21zaGljay9hZGQtcHItY29tbWVudEB2MycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgJ21lc3NhZ2UtaWQnOiAnZGlmZi1vdXRwdXQnLFxuICAgICAgICAgICAgJ3JlZnJlc2gtbWVzc2FnZS1wb3NpdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnbWVzc2FnZS1wYXRoJzogJ2RpZmYtb3V0cHV0cy8qLm1kJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBmb3JtYXQgdGhlIGRpZmYgb3V0cHV0IGludG8gYSBHaXRIdWIgYW5ub3RhdGlvbiBjb21tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gZm9ybWF0IHRoZSBkaWZmIGZvclxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0dldCBmb3JtYXR0ZWQgZGlmZiBhbm5vdGF0aW9uIGNvbW1lbnQnLFxuICAgICAgaWQ6IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCxcbiAgICAgIHJ1bjogW1xuICAgICAgICAnbWtkaXIgLXAgZGlmZi1vdXRwdXQnLFxuICAgICAgICBgZWNobyBcIiMjIyBDaGFuZ2VzIGZvciBlbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVwiID4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZGAsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPGRldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPHN1bW1hcnk+U2hvdyBkaWZmPC9zdW1tYXJ5PlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnZWNobyBcIlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICBcImVjaG8gJ1xcYFxcYFxcYCcgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZFwiLFxuICAgICAgICAnZm9yIGZpbGUgaW4gJChmaW5kIC4gLXBhdGggXCIqKi9jZGsub3V0L2RpZmYubG9nXCIgMj4vZGV2L251bGwpOyBkbycsXG4gICAgICAgICcgIGVjaG8gXCI9PT09PT09PT09ICRmaWxlID09PT09PT09PT1cIiA+PiBkaWZmLW91dHB1dC9kaWZmLSR7ZW52aXJvbm1lbnR9Lm1kJyxcbiAgICAgICAgJyAgc2VkIFxcJ3MvXFxcXHgxQlxcXFxbWzAtOTtdKlttR0tIRl0vL2dcXCcgXCIkZmlsZVwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnICBlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgXCJlY2hvICdcXGBcXGBcXGAnID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWRcIixcbiAgICAgICAgJ2VjaG8gXCI8L2RldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgZW52OiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlcGxveW1lbnQgbWV0aG9kIGFyZ3VtZW50IGZvciB0aGUgZGVwbG95IGNvbW1hbmRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldERpZmZBbm5vdGF0aW9uSm9iRm9yRW52aXJvbm1lbnQoXG4gICAgZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBuZWVkczogWydidWlsZCddLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZW5lcmF0ZURpZmZTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZXRGb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSkpO1xuXG4gICAgLy8gVXBsb2FkIHRoZSBkaWZmIG91dHB1dCBhcyBhbiBhcnRpZmFjdFxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChcbiAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLnVwbG9hZEFydGlmYWN0KHtcbiAgICAgICAgbmFtZTogJ1VwbG9hZCBkaWZmIG91dHB1dCcsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBuYW1lOiBgZGlmZi1vdXRwdXQtJHtuYW1lfWAsXG4gICAgICAgICAgcGF0aDogJ2RpZmYtb3V0cHV0LycsXG4gICAgICAgICAgcmV0ZW50aW9uRGF5czogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlmZiBhbm5vdGF0aW9uIGpvYnMgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIGdldCBkaWZmQW5ub3RhdGlvbkpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9iRW50cmllcyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICBjb25zdCBqb2JzID0gT2JqZWN0LmZyb21FbnRyaWVzKGpvYkVudHJpZXMpO1xuICAgIGpvYnNbJ0RpZmYtQW5ub3RhdGlvbi1Db21tZW50J10gPSB0aGlzLmdldEFubm90YXRlRGlmZkpvYihPYmplY3Qua2V5cyhqb2JzKSk7XG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVwbG95IGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkZXBsb3kgam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGVwbG95LSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkaWZmIGFubm90YXRpb24gam9iIElEIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZBbm5vdGF0aW9uSm9iSWQoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERpZmYtQW5ub3RhdGlvbi0ke2Vudmlyb25tZW50TmFtZX1gO1xufVxuIl19
|
|
676
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTAyQkEsd0NBRUM7QUFPRCx3REFFQzs7QUFyM0JELG1DQUFnRTtBQUNoRSw4Q0FBa0Q7QUFDbEQsdUVBQWdGO0FBQ2hGLHNEQUFpRTtBQUNqRSxtQ0FBa0g7QUFFbEgsTUFBTSwyQkFBMkIsR0FBRyxrQkFBa0IsQ0FBQztBQUN2RCxNQUFNLHNDQUFzQyxHQUFFLFNBQVMsMkJBQTJCLDBDQUEwQyxDQUFDO0FBQzdILE1BQU0sb0NBQW9DLEdBQUcsbUNBQW1DLENBQUM7QUF3Q2pGOzs7R0FHRztBQUNILE1BQWEseUNBQXlDO0lBRXBEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMseUNBQXlDLENBQ3JELGFBQTRCLEVBQzVCLHVCQUEwRDtRQUcxRCxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUsseUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLHdFQUF3RSxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJ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QyxDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUNqSixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBN3lCSCw4RkEreUJDOzs7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLGVBQXVCO0lBQ3BELE9BQU8sVUFBVSxlQUFlLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLGVBQXVCO0lBQzVELE9BQU8sbUJBQW1CLGVBQWUsRUFBRSxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqYXZhc2NyaXB0LCBnaXRodWIsIEdyb3VwUnVubmVyT3B0aW9ucyB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBXb3JrZmxvd1N0ZXBzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCwgSm9iIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkID0gJ2RlcGxveW1lbnQtY2hlY2snO1xuY29uc3Qgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb249IGBzdGVwcy4ke2NoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZH0ub3V0cHV0cy5oYXNfYWN0aXZlX2RlcGxveW1lbnQgIT0gJ3RydWUnYDtcbmNvbnN0IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCA9ICdmb3JtYXR0ZWRfZGlmZl9hbm5vdGF0aW9uX2NvbW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogRGVwbG95bWVudCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIGZvciBhY3RpdmUgZGVwbG95bWVudHMgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBkZXBsb3ltZW50XG4gICAqL1xuICByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbFRhc2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgZm9yIENvZGVBcnRpZmFjdCwgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBhdXRoUHJvdmlkZXI/OiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBucG0gY29uZmlnIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCB0aGF0IGlzIGJlaW5nIGRlcGxveWVkLCBpZiBhbnlcbiAgICogTm90ZTogVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBub2RlIHZlcnNpb25zIGFib3ZlIDE4XG4gICAqL1xuICByZWFkb25seSBucG1Db25maWdFbnZpcm9ubWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBqb2Igc3RyYXRlZ3ksIHdoZXRoZXIgdG8gdXNlIGEgbWF0cml4IGpvYiBvciBtdWx0aXBsZSBqb2JzIGZvciBlYWNoIGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBqb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50RGVwZW5kZW5jaWVzPzogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gY3JlYXRlIHJldXNhYmxlIHN0ZXBzIGZvciB0aGUgZGVwbG95bWVudCB3b3JrZmxvd1xuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3Rvcnkge1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBwcm92aWRlZCBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyBhcmUgdmFsaWRcbiAgICogQHBhcmFtIGRlcGxveU9wdGlvbnMgVGhlIGRlcGxveW1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgVGhlIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIHRvIHZhbGlkYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKFxuICAgIGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyxcbiAgKTogdm9pZCB7XG5cbiAgICBpZiAoZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSAhPT0gRGVwbG95Sm9iU3RyYXRlZ3kuTVVMVElfSk9CKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgTVVMVElfSk9CIHN0cmF0ZWd5Jyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpLmZvckVhY2goKFtlbnYsIGRlcHNdKSA9PiB7XG4gICAgICBjb25zdCBoYXNFbnZpcm9ubWVudCA9IGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLnNvbWUoZSA9PiBlLm5hbWUgPT09IGVudik7XG4gICAgICBpZiAoIWhhc0Vudmlyb25tZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW52aXJvbm1lbnQgXCIke2Vudn1cIiBkZWZpbmVkIGluIGRlcGVuZGVuY2llcyBkb2VzIG5vdCBleGlzdCBpbiBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50c2ApO1xuICAgICAgfVxuICAgICAgZGVwcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0RlcEVudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZGVwKTtcbiAgICAgICAgaWYgKCFoYXNEZXBFbnZpcm9ubWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSBlbnZpcm9ubWVudCBcIiR7ZGVwfVwiIGZvciBlbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVxuICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGZhY3RvcnkgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiBqYXZhc2NyaXB0Lk5vZGVQcm9qZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMsXG4gICkge31cblxuICAvKipcbiAgICogQ29uZGl0aW9uIHRvIHNraXAgYSBzdGVwIGlmIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGlzIGFscmVhZHkgcHJlc2VudFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIGNvbmRpdGlvbiBvciB1bmRlZmluZWQgaWYgY2hlY2tBY3RpdmVEZXBsb3ltZW50IGlzIGZhbHNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHsgaWY6IGBcXCR7eyAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hlY2tvdXRTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiBXb3JrZmxvd1N0ZXBzLmNoZWNrb3V0KHtcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZmV0Y2hEZXB0aDogMCxcbiAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5zaGEgfX0nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgaWYgZXhpc3RzXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIHByZUluc3RhbGxUYXNrTmFtZSBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUsXG4gICAgICBydW46IGBucHggcHJvamVuICR7dGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gY2hlY2tcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCxcbiAgICAgIHVzZXM6ICdBbWluRmF6bE1vbmRvL2NoZWNrLWRlcGxveWVkLWVudmlyb25tZW50QHYxJyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGVudjoge1xuICAgICAgICBHSVRIVUJfVE9LRU46ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yTWF0cml4KCk6IEpvYlN0ZXBbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgsXG4gICAgICB0aGlzLmFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwcyB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSA9IFtdO1xuXG4gICAgY29uc3QgZnJvbUVudlZhcmlhYmxlU3RlcCA9IHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgKTtcblxuICAgIGlmIChmcm9tRW52VmFyaWFibGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGZyb21FbnZWYXJpYWJsZVN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtZVJvbGVTdGVwID0gdGhpcy5nZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPz8gJycsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyA/PyA5MDAsXG4gICAgKTtcblxuICAgIGlmIChhc3N1bWVSb2xlU3RlcCkge1xuICAgICAgc3RlcHMucHVzaChhc3N1bWVSb2xlU3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRmxhZyBXaGV0aGVyIHRvIGFzc3VtZSBhIHJvbGUsIGNhbiBiZSBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcGFyYW0gYWNjZXNzS2V5SWRTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBhY2Nlc3Mga2V5IElEXG4gICAqIEBwYXJhbSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBzZWNyZXQgYWNjZXNzIGtleVxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb25cbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gQVdTIGNyZWRlbnRpYWxzIGFyZSBwcm92aWRlZCxcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgcmV0dXJuIGEgSm9iU3RlcCBvbmx5IGlmIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmIChhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyB9fWA7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAnZWNobyBcIkFXU19BQ0NFU1NfS0VZX0lEPSRhY2Nlc3NLZXlJZFwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRzZWNyZXRBY2Nlc3NLZXlcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgICAnZWNobyBcIkFXU19SRUdJT049JHJlZ2lvblwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICBdO1xuXG4gICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nICYmIGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0NvbmZpZ3VyZSBBV1MgQ3JlZGVudGlhbHMnLFxuICAgICAgcnVuOiBgJHtjb21tYW5kcy5qb2luKCdcXG4nKX1gLFxuICAgICAgZW52OiB7XG4gICAgICAgIGFjY2Vzc0tleUlkOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5yb2xlVG9Bc3N1bWUgfX0nLFxuICAgICAgJyR7eyBtYXRyaXguYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBhc3N1bWUgYW4gQVdTIHJvbGUgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcGFyYW0gcm9sZVRvQXNzdW1lIFRoZSByb2xlIHRvIGFzc3VtZVxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyBUaGUgZHVyYXRpb24gZm9yIGFzc3VtaW5nIHRoZSByb2xlXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIGFzc3VtZVJvbGVGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHJvbGVUb0Fzc3VtZTogc3RyaW5nLFxuICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM/OiBzdHJpbmcgfCBudW1iZXIsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgIWFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIGNvbnN0IHNlY3JldHNQYXJhbXMgPVxuICAgICAgdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUiA/XG4gICAgICAgIHtcbiAgICAgICAgICAnYXdzLWFjY2Vzcy1rZXktaWQnOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgICAnYXdzLXNlY3JldC1hY2Nlc3Mta2V5JzogYFxcJHt7IHNlY3JldHNbJHtzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0Fzc3VtZSBBV1MgUm9sZScsXG4gICAgICB1c2VzOiAnYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NCcsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIC4uLnNlY3JldHNQYXJhbXMsXG4gICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgJ2F3cy1yZWdpb24nOiByZWdpb24sXG4gICAgICAgICdyb2xlLWR1cmF0aW9uLXNlY29uZHMnOiBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgTlBNIGNvbmZpZyBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBucG1Db25maWcgaXMgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBOcG1Db25maWdGb3JNYXRyaXgoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgcHVibGljIGdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbnBtQ29uZmlnRW52aXJvbm1lbnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFucG1Db25maWdFbnZpcm9ubWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9ICdDT05GSUdfVkFMVUUnO1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogJ1NldHRpbmcgTlBNIENvbmZpZycsXG4gICAgICBlbnY6IHtcbiAgICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgcnVuOiBgbnBtIGNvbmZpZyBzZXQgJHtucG1Db25maWdFbnZpcm9ubWVudH0gJCR7ZW52aXJvbm1lbnRWYXJpYWJsZU5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBydW4gYSBzcGVjaWZpYyBzY3JpcHRcbiAgICogQHBhcmFtIHNjcmlwdE5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW5cbiAgICogQHBhcmFtIHN0ZXBOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGVwIGluIHRoZSB3b3JrZmxvd1xuICAgKiBAcGFyYW0gaGFzU2NyaXB0RmxhZyBXaGV0aGVyIHRoZSBzY3JpcHQgc2hvdWxkIGJlIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UnVuU2NyaXB0U3RlcChcbiAgICBzY3JpcHROYW1lOiBzdHJpbmcsXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBoYXNTY3JpcHRGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFzU2NyaXB0RmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghaGFzU2NyaXB0RmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7aGFzU2NyaXB0RmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicgJiYgIWhhc1NjcmlwdEZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiBgUnVuICR7c3RlcE5hbWV9YCxcbiAgICAgIHJ1bjogYCR7dGhpcy5wcm9qZWN0LnJ1blNjcmlwdENvbW1hbmR9ICR7c2NyaXB0TmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBkZXBsb3kgdGhlIHdvcmtmbG93XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkZXBsb3k6d29ya2Zsb3cnLFxuICAgICAgJ0RlcGxveW1lbnQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4Lmhhc1ByZURlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucHJlRGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmUtZGVwbG95bWVudCBzdGVwIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBoYXNQcmVEZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwcmUtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHByZURlcGxveW1lbnRTY3JpcHQgVGhlIHNjcmlwdCB0byBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgcHJlLWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUHJlRGVwbG95VGFza0ZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgIHByZURlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUHJlIERlcGxveW1lbnQnLFxuICAgICAgaGFzUHJlRGVwbG95VGFza0ZsYWcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvc3REZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUG9zdERlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucG9zdERlcGxveW1lbnRTY3JpcHQgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9zdC1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwb3N0LWRlcGxveW1lbnQgdGFzayBzaG91bGQgYmUgcnVuXG4gICAqIEBwYXJhbSBwb3N0RGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwb3N0LWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQb3N0RGVwbG95VGFza0ZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQb3N0RGVwbG95VGFza0ZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUG9zdCBEZXBsb3ltZW50JyxcbiAgICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZGVwbG95bWVudCBqb2JzIHdoZXRoZXIgZm9yIG1hdHJpeCBzdHJhdGVneSBvciBub3RcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybignVGhlIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhbnkgZW52aXJvbm1lbnQgc2V0LCBtYWtlIHN1cmUgdGhpcyBpcyBkZXNpcmVkIHNldHRpbmcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuam9iU3RyYXRlZ3kgPT09IERlcGxveUpvYlN0cmF0ZWd5Lk1BVFJJWCA/IHRoaXMuZGVwbG95bWVudEpvYnNGb3JNYXRyaXggOiB0aGlzLmRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTWF0cml4KCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuXG4gICAgY29uc3QgeyBlbnZpcm9ubWVudHMsIGVudmlyb25tZW50VmFyaWFibGVOYW1lIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG5cbiAgICBjb25zdCBpbmNsdWRlID0gZW52aXJvbm1lbnRzLm1hcChlbnZpcm9ubWVudE9wdGlvbnMgPT4ge1xuICAgICAgY29uc3QgeyBhd3NDcmVkZW50aWFscyB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZVNldHRpbmdzID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8ge1xuICAgICAgICByb2xlVG9Bc3N1bWU6IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kczogYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB8fCA5MDAsXG4gICAgICB9OiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFjY2Vzc0tleUlkU2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnO1xuICAgICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSc7XG5cbiAgICAgIGNvbnN0IGhhc1Bvc3REZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICBjb25zdCBoYXNQcmVEZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50T3B0aW9ucy5uYW1lLFxuICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWUsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUsXG4gICAgICAgIHJlZ2lvbjogYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgICBhc3N1bWVSb2xlLFxuICAgICAgICBoYXNQb3N0RGVwbG95VGFzayxcbiAgICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIGhhc1ByZURlcGxveVRhc2ssXG4gICAgICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgLi4uYXNzdW1lUm9sZVNldHRpbmdzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0tZGVwbG95JyxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiBbXG4gICAgICAgICdyZWxlYXNlX2dpdGh1YicsXG4gICAgICBdLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgZGVwbG95bWVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHN0cmF0ZWd5OiB7XG4gICAgICAgIG1heFBhcmFsbGVsOiAxLFxuICAgICAgICBtYXRyaXg6IHtcbiAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbmNsdWRlLm1hcChlID0+IGUuZW52aXJvbm1lbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCA9IHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeDtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLnNldHVwTnBtQ29uZmlnRm9yTWF0cml4O1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcblxuICAgIHJldHVybiB7IGRlcGxveTogam9iRGVmaW5pdGlvbiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBqb2JzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQncyBkZXBsb3ltZW50IGpvYlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBqb2IgSURzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5maW5kSW5kZXgoZW52ID0+IGVudi5uYW1lID09PSBlbnZpcm9ubWVudE5hbWUpO1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlRW52aXJvbm1lbnQgPSBpbmRleCA+IDAgPyB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzW2luZGV4IC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQubmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzW2Vudmlyb25tZW50TmFtZV07XG4gICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQoZGVwKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goJ3JlbGVhc2VfZ2l0aHViJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbXVsdGktam9iIHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2IoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9icyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE9wdGlvbnMubmFtZSksIHRoaXMuZ2V0Sm9iRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSldO1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoam9icyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgam9iIGRlZmluaXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldEpvYkZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICAgIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IEpvYiB7XG4gICAgY29uc3QgeyBuYW1lLCBydW5zT24sIHJ1bnNPbkdyb3VwIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBuYW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAocnVuc09uICYmIHJ1bnNPbkdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgY2Fubm90IGJlIHNwZWNpZmllZCBzaW11bHRhbmVvdXNseS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IHJ1bnNPbkdyb3VwID8gdW5kZWZpbmVkIDogW3J1bnNPbiA/PyAndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcnVuc09uR3JvdXA6IHJ1bnNPbkdyb3VwLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogYCR7bmFtZX0tZGVwbG95YCxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiB0aGlzLmdldERlcGxveW1lbnRKb2JQcmVyZXF1aXNpdGVKb2JJZHMobmFtZSksXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwcmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG5cbiAgICBjb25zdCBwb3N0RGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocG9zdERlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocG9zdERlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGdlbmVyYXRlIHRoZSBkaWZmIG91dHB1dFxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdlbmVyYXRlRGlmZlN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkaWZmOm91dHB1dCcsXG4gICAgICAnR2VuZXJhdGUgRGlmZiBPdXRwdXQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGpvYiB0byBhbm5vdGF0ZSB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXQgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHBhcmFtIGRlcGVuZGVudEpvYk5hbWVzIFRoZSBuYW1lcyBvZiB0aGUgam9icyB0aGF0IHRoZSBhbm5vdGF0aW9uIGpvYiBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIFRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYW5ub3RhdGluZyB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXRcbiAgICovXG4gIHB1YmxpYyBnZXRBbm5vdGF0ZURpZmZKb2IoZGVwZW5kZW50Sm9iTmFtZXM6IHN0cmluZ1tdKTogSm9iIHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBkZXBlbmRlbnRKb2JOYW1lcyxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICBnaXRodWIuV29ya2Zsb3dTdGVwcy5kb3dubG9hZEFydGlmYWN0KHtcbiAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGRpZmYgYXJ0aWZhY3RzJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiAnZGlmZi1vdXRwdXQtKicsXG4gICAgICAgICAgICBwYXRoOiAnZGlmZi1vdXRwdXRzJyxcbiAgICAgICAgICAgIG1lcmdlTXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQW5ub3RhdGUgUFIgd2l0aCBEaWZmIE91dHB1dCcsXG4gICAgICAgICAgdXNlczogJ21zaGljay9hZGQtcHItY29tbWVudEB2MycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgJ21lc3NhZ2UtaWQnOiAnZGlmZi1vdXRwdXQnLFxuICAgICAgICAgICAgJ3JlZnJlc2gtbWVzc2FnZS1wb3NpdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnbWVzc2FnZS1wYXRoJzogJ2RpZmYtb3V0cHV0cy8qLm1kJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBmb3JtYXQgdGhlIGRpZmYgb3V0cHV0IGludG8gYSBHaXRIdWIgYW5ub3RhdGlvbiBjb21tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gZm9ybWF0IHRoZSBkaWZmIGZvclxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0dldCBmb3JtYXR0ZWQgZGlmZiBhbm5vdGF0aW9uIGNvbW1lbnQnLFxuICAgICAgaWQ6IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCxcbiAgICAgIHJ1bjogW1xuICAgICAgICAnbWtkaXIgLXAgZGlmZi1vdXRwdXQnLFxuICAgICAgICBgZWNobyBcIiMjIyBDaGFuZ2VzIGZvciBlbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVwiID4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZGAsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPGRldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPHN1bW1hcnk+U2hvdyBkaWZmPC9zdW1tYXJ5PlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnZWNobyBcIlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICBcImVjaG8gJ1xcYFxcYFxcYCcgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZFwiLFxuICAgICAgICAnZm9yIGZpbGUgaW4gJChmaW5kIC4gLXBhdGggXCIqKi9jZGsub3V0L2RpZmYubG9nXCIgMj4vZGV2L251bGwpOyBkbycsXG4gICAgICAgICcgIGVjaG8gXCI9PT09PT09PT09ICRmaWxlID09PT09PT09PT1cIiA+PiBkaWZmLW91dHB1dC9kaWZmLSR7ZW52aXJvbm1lbnR9Lm1kJyxcbiAgICAgICAgJyAgc2VkIFxcJ3MvXFxcXHgxQlxcXFxbWzAtOTtdKlttR0tIRl0vL2dcXCcgXCIkZmlsZVwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnICBlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgXCJlY2hvICdcXGBcXGBcXGAnID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWRcIixcbiAgICAgICAgJ2VjaG8gXCI8L2RldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgZW52OiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlcGxveW1lbnQgbWV0aG9kIGFyZ3VtZW50IGZvciB0aGUgZGVwbG95IGNvbW1hbmRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHBhcmFtIHJ1bnNPbiBUaGUgdHlwZSBvZiBydW5uZXIgdG8gdXNlIGZvciB0aGUgZGVwbG95bWVudCBqb2IsIGlmIGFueVxuICAgKiBAcGFyYW0gcnVuc09uR3JvdXAgVGhlIGdyb3VwIG9mIHJ1bm5lcnMgdG8gdXNlIGZvciB0aGUgZGVwbG95bWVudCBqb2IsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgZGlmZiBhbm5vdGF0aW9uIGpvYiBmb3IgdGhlIGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlmZkFubm90YXRpb25Kb2JGb3JFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHJ1bnNPbj86IHN0cmluZyxcbiAgICBydW5zT25Hcm91cD86IEdyb3VwUnVubmVyT3B0aW9ucyxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChydW5zT24gJiYgcnVuc09uR3JvdXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBgcnVuc09uYCBhbmQgYHJ1bnNPbkdyb3VwYCBjYW5ub3QgYmUgc3BlY2lmaWVkIHNpbXVsdGFuZW91c2x5LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogcnVuc09uR3JvdXAgPyB1bmRlZmluZWQgOiBbcnVuc09uID8/ICd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBydW5zT25Hcm91cDogcnVuc09uR3JvdXAsXG4gICAgICBuZWVkczogWydidWlsZCddLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZW5lcmF0ZURpZmZTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZXRGb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSkpO1xuXG4gICAgLy8gVXBsb2FkIHRoZSBkaWZmIG91dHB1dCBhcyBhbiBhcnRpZmFjdFxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChcbiAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLnVwbG9hZEFydGlmYWN0KHtcbiAgICAgICAgbmFtZTogJ1VwbG9hZCBkaWZmIG91dHB1dCcsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBuYW1lOiBgZGlmZi1vdXRwdXQtJHtuYW1lfWAsXG4gICAgICAgICAgcGF0aDogJ2RpZmYtb3V0cHV0LycsXG4gICAgICAgICAgcmV0ZW50aW9uRGF5czogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlmZiBhbm5vdGF0aW9uIGpvYnMgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIGdldCBkaWZmQW5ub3RhdGlvbkpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9iRW50cmllcyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICBjb25zdCBqb2JzID0gT2JqZWN0LmZyb21FbnRyaWVzKGpvYkVudHJpZXMpO1xuICAgIGpvYnNbJ0RpZmYtQW5ub3RhdGlvbi1Db21tZW50J10gPSB0aGlzLmdldEFubm90YXRlRGlmZkpvYihPYmplY3Qua2V5cyhqb2JzKSk7XG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVwbG95IGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkZXBsb3kgam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGVwbG95LSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkaWZmIGFubm90YXRpb24gam9iIElEIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZBbm5vdGF0aW9uSm9iSWQoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERpZmYtQW5ub3RhdGlvbi0ke2Vudmlyb25tZW50TmFtZX1gO1xufVxuIl19
|
package/lib/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { awscdk } from 'projen';
|
|
1
|
+
import { awscdk, GroupRunnerOptions } from 'projen';
|
|
2
2
|
export interface DeployableAwsCdkTypeScriptAppDiffOutputOptions {
|
|
3
3
|
/**
|
|
4
4
|
* Whether to enable the diff output to a file in cdk.out
|
|
@@ -107,6 +107,19 @@ export interface EnvironmentOptions {
|
|
|
107
107
|
* @example "pre:deploy"
|
|
108
108
|
*/
|
|
109
109
|
readonly preDeployWorkflowScript?: string;
|
|
110
|
+
/**
|
|
111
|
+
* The type of runner to use for the deployment jobs in the workflow
|
|
112
|
+
* This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix
|
|
113
|
+
* @default "ubuntu-latest"
|
|
114
|
+
*/
|
|
115
|
+
readonly runsOn?: string;
|
|
116
|
+
/**
|
|
117
|
+
* Github Runner Group selection options
|
|
118
|
+
* This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix
|
|
119
|
+
* @description Defines a target Runner Group by name and/or labels
|
|
120
|
+
* @throws {Error} if both `runsOn` and `runsOnGroup` are specified
|
|
121
|
+
*/
|
|
122
|
+
readonly runsOnGroup?: GroupRunnerOptions;
|
|
110
123
|
}
|
|
111
124
|
export interface AWSCredentials {
|
|
112
125
|
/**
|
package/lib/types.js
CHANGED
|
@@ -6,4 +6,4 @@ var DeployJobStrategy;
|
|
|
6
6
|
DeployJobStrategy["MATRIX"] = "matrix";
|
|
7
7
|
DeployJobStrategy["MULTI_JOB"] = "multi-job";
|
|
8
8
|
})(DeployJobStrategy || (exports.DeployJobStrategy = DeployJobStrategy = {}));
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkNBLElBQVksaUJBR1g7QUFIRCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQiw0Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFHNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NjZGssIEdyb3VwUnVubmVyT3B0aW9ucyB9IGZyb20gJ3Byb2plbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBEaWZmT3V0cHV0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZGlmZiBvdXRwdXQgdG8gYSBmaWxlIGluIGNkay5vdXRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbm5vdGF0ZSB0aGUgZGlmZiBvdXRwdXQgaW4gdGhlIEdpdEh1YiBQUiBhcyB3ZWxsXG4gICAqIFRoaXMgY2Fubm90IGJlIHNldCB0byB0cnVlIGlmIHRoZSBkaWZmIG91dHB1dCBpcyBub3QgZW5hYmxlZFxuICAgKiBAZGVmYXVsdCB0cnVlIGlmIHRoZSBkaWZmIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcmVhZG9ubHkgYW5ub3RhdGVPbkJ1aWxkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMge1xuICAvKipcbiAgICogRGVwbG95bWVudCBvcHRpb25zXG4gICAqIEBkZWZhdWx0IFwiY29uZmlnIHdpdGggZW1wdHkgbGlzdCBvZiBlbnZpcm9ubWVudHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T3B0aW9ucz86IERlcGxveU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgbnZtcmMgZmlsZSBmb3IgdGhlIG5vZGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdFxuICAgKiBpZiBzZXQgdG8gdHJ1ZSwgYW5kIG5vIFwid29ya2Zsb3dOb2RlVmVyc2lvblwiIGlzIHNwZWNpZmllZCB3aWxsIHVzZSB2ZXJzaW9uIDE0LjE4LjFcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJhdGVOdm1yYz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2sgYW5kIHNraXAgdGhlIGRlcGxveW1lbnQgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYWN0aXZlIGRlcGxveW1lbnQgb2YgdGhlIHNhbWUgY29tbWl0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDREsgZGlmZiBvdXRwdXQgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCBkaWZmIG91dHB1dCBkaXNhYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlmZk91dHB1dD86IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwRGlmZk91dHB1dE9wdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIERlcGxveU1ldGhvZCA9ICdkaXJlY3QnIHwgJ2NoYW5nZS1zZXQnIHwgJ3ByZXBhcmUtY2hhbmdlLXNldCc7XG5cbmV4cG9ydCBlbnVtIERlcGxveUpvYlN0cmF0ZWd5IHtcbiAgTUFUUklYID0gJ21hdHJpeCcsXG4gIE1VTFRJX0pPQiA9ICdtdWx0aS1qb2InLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveU9wdGlvbnMge1xuICAvKipcbiAgICogRW52aXJvbm1lbnQgc2V0dGluZ3MgdG8gZGVwbG95IHRvXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBSZWdleCBmb3Igc3RhY2tzIHRvIGJlIGRlcGxveWVkXG4gICAqXG4gICAqIGlmIG5vdCBwcm92aWRlZCBtYXRjaGVzIGFsbCBvZiB0aGUgc3RhY2tzIGluIHRoZSBDREsgQXBwLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrUGF0dGVybj86IHN0cmluZztcblxuICAvKipcbiAgICogbnBtIGNvbmZpZyBuYW1lIHRvIHNldCBhcyB0aGUgZW52aXJvbm1lbnQgbmFtZVxuICAgKiBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCBpbiBkZXBsb3ltZW50IHByb2Nlc3NcbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBub2RlIHZlcnNpb25zIGFib3ZlIDE4LlxuICAgKlxuICAgKiBpZiBub3QgcHJvdmlkZWQgd2lsbCBub3Qgc2V0XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgbnBtQ29uZmlnRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHVzZWQgdG8gc2V0IHRoZSBkZXBsb3kgZW52aXJvbm1lbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogdGFzayBuYW1lIHRvIHJ1biBwcmlvciB0byBpbnN0YWxsYXRpb24gaW4gZGVwbG95IGpvYiBvZiB3b3JrZmxvd1xuICAgKiBpZiBub3QgcHJvdmlkZWQgd2lsbCBub3QgYWRkIHRvIHdvcmtmbG93XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdGFza1RvUnVuUHJlSW5zdGFsbD86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IHRvIHBlcmZvcm0gdGhlIGRlcGxveW1lbnQuIERpcmVjdCBpcyBhIGJpdCBmYXN0ZXIgYnV0IGxhY2tzIHByb2dyZXNzIGluZm9ybWF0aW9uXG4gICAqIEBkZWZhdWx0IFwiY2hhbmdlLXNldFwiXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q/OiBEZXBsb3lNZXRob2Q7XG5cbiAgLyoqXG4gICAqIERlcGxveW1lbnQgam9iIHN0cmF0ZWd5LCB3aGV0aGVyIHRvIHVzZSBhIG1hdHJpeCBqb2Igb3IgbXVsdGlwbGUgam9icyBmb3IgZWFjaCBlbnZpcm9ubWVudFxuICAgKiBAZGVmYXVsdCBcIm1hdHJpeFwiXG4gICAqL1xuICByZWFkb25seSBqb2JTdHJhdGVneT86IERlcGxveUpvYlN0cmF0ZWd5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCBuYW1lIHRvIGRlcGxveSB0b1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBV1MgY3JlZGVudGlhbCBkZXRhaWxzIGZvciBkZXBsb3ltZW50XG4gICAqL1xuICByZWFkb25seSBhd3NDcmVkZW50aWFsczogQVdTQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQvdGFzayB0byBydW4gYWZ0ZXIgZGVwbG95bWVudCBvZiB0aGUgZW52aXJvbm1lbnQgaW4gdGhlIHdvcmtmbG93XG4gICAqIElmIG5vdCBwcmVzZW50LCB0aGUgd29ya2Zsb3cgd2lsbCBub3QgZXhlY3V0ZSB0aGF0XG4gICAqXG4gICAqIEBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdERlcGxveVdvcmtmbG93U2NyaXB0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NyaXB0L3Rhc2sgdG8gcnVuIGJlZm9yZSBkZXBsb3ltZW50IG9mIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgd29ya2Zsb3dcbiAgICogSWYgbm90IHByZXNlbnQsIHRoZSB3b3JrZmxvdyB3aWxsIG5vdCBleGVjdXRlIHRoYXRcbiAgICpcbiAgICogQGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICovXG4gIHJlYWRvbmx5IHByZURlcGxveVdvcmtmbG93U2NyaXB0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBydW5uZXIgdG8gdXNlIGZvciB0aGUgZGVwbG95bWVudCBqb2JzIGluIHRoZSB3b3JrZmxvd1xuICAgKiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gTWF0cml4IGpvYiBzdHJhdGVneSBhbmQgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZSBqb2Igc3RyYXRlZ3kgaXMgc2V0IHRvIE1hdHJpeFxuICAgKiBAZGVmYXVsdCBcInVidW50dS1sYXRlc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIEdyb3VwIHNlbGVjdGlvbiBvcHRpb25zXG4gICAqIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBNYXRyaXggam9iIHN0cmF0ZWd5IGFuZCB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlIGpvYiBzdHJhdGVneSBpcyBzZXQgdG8gTWF0cml4XG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgdGFyZ2V0IFJ1bm5lciBHcm91cCBieSBuYW1lIGFuZC9vciBsYWJlbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGJvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgYXJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uR3JvdXA/OiBHcm91cFJ1bm5lck9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVdTQ3JlZGVudGlhbHMge1xuICAvKipcbiAgICogR2l0SHViIFNlY3JldCBuYW1lIGZvciBBV1MgQWNjZXNzIEtleSBJZFxuICAgKiBAZGVmYXVsdCBcIkFXU19BQ0NFU1NfS0VZX0lEXCJcbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc0tleUlkU2VjcmV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIFNlY3JldCBuYW1lIGZvciBBV1MgU2VjcmV0IEFjY2VzcyBLZXlcbiAgICogQGRlZmF1bHQgXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVlcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIEFXUyByb2xlIHRvIGJlIGFzc3VtZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVUb0Fzc3VtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRHVyYXRpb24gb2YgYXNzdW1lIHJvbGUgc2Vzc2lvblxuICAgKiBAZGVmYXVsdCA5MDBcbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgQVdTIHJlZ2lvbiBmb3IgdGhlIGFjY291bnRcbiAgICogQGV4YW1wbGUgXCJ1cy1lYXN0LTJcIlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBtYXAgb2YgZW52aXJvbm1lbnQgbmFtZXMgdG8gdGhlIGxpc3Qgb2YgZW52aXJvbm1lbnQgbmFtZXMgdGhleSBkZXBlbmQgb24gZm9yIGRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuIl19
|
package/package.json
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"jsii-docgen": "^10.5.0",
|
|
32
32
|
"jsii-pacmak": "^1.135.0",
|
|
33
33
|
"jsii-rosetta": "5.9.x",
|
|
34
|
-
"projen": "^0.99.
|
|
34
|
+
"projen": "^0.99.76",
|
|
35
35
|
"ts-jest": "^29.4.11",
|
|
36
36
|
"ts-node": "^10.9.2",
|
|
37
37
|
"typescript": "^5.9.3",
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"constructs": "^10.6.0",
|
|
42
|
-
"projen": "^0.99.
|
|
42
|
+
"projen": "^0.99.76"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"projen": "^0.99.
|
|
45
|
+
"projen": "^0.99.76",
|
|
46
46
|
"semver": "^7.8.4"
|
|
47
47
|
},
|
|
48
48
|
"bundledDependencies": [
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"publishConfig": {
|
|
70
70
|
"access": "public"
|
|
71
71
|
},
|
|
72
|
-
"version": "0.1.
|
|
72
|
+
"version": "0.1.849",
|
|
73
73
|
"jest": {
|
|
74
74
|
"coverageProvider": "v8",
|
|
75
75
|
"testMatch": [
|