@cdktn/provider-helm 12.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +13145 -0
- package/LICENSE +355 -0
- package/README.md +94 -0
- package/lib/data-helm-template/index.d.ts +823 -0
- package/lib/data-helm-template/index.js +1820 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +12 -0
- package/lib/lazy-index.d.ts +4 -0
- package/lib/lazy-index.js +10 -0
- package/lib/provider/index.d.ts +330 -0
- package/lib/provider/index.js +582 -0
- package/lib/release/index.d.ts +866 -0
- package/lib/release/index.js +1979 -0
- package/package.json +155 -0
|
@@ -0,0 +1,1820 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DataHelmTemplate = exports.DataHelmTemplateTimeoutsOutputReference = exports.DataHelmTemplateSetWoList = exports.DataHelmTemplateSetWoOutputReference = exports.DataHelmTemplateSetSensitiveList = exports.DataHelmTemplateSetSensitiveOutputReference = exports.DataHelmTemplateSetListStructList = exports.DataHelmTemplateSetListStructOutputReference = exports.DataHelmTemplateSetList = exports.DataHelmTemplateSetOutputReference = exports.DataHelmTemplatePostrenderOutputReference = void 0;
|
|
5
|
+
exports.dataHelmTemplatePostrenderToTerraform = dataHelmTemplatePostrenderToTerraform;
|
|
6
|
+
exports.dataHelmTemplatePostrenderToHclTerraform = dataHelmTemplatePostrenderToHclTerraform;
|
|
7
|
+
exports.dataHelmTemplateSetToTerraform = dataHelmTemplateSetToTerraform;
|
|
8
|
+
exports.dataHelmTemplateSetToHclTerraform = dataHelmTemplateSetToHclTerraform;
|
|
9
|
+
exports.dataHelmTemplateSetListStructToTerraform = dataHelmTemplateSetListStructToTerraform;
|
|
10
|
+
exports.dataHelmTemplateSetListStructToHclTerraform = dataHelmTemplateSetListStructToHclTerraform;
|
|
11
|
+
exports.dataHelmTemplateSetSensitiveToTerraform = dataHelmTemplateSetSensitiveToTerraform;
|
|
12
|
+
exports.dataHelmTemplateSetSensitiveToHclTerraform = dataHelmTemplateSetSensitiveToHclTerraform;
|
|
13
|
+
exports.dataHelmTemplateSetWoToTerraform = dataHelmTemplateSetWoToTerraform;
|
|
14
|
+
exports.dataHelmTemplateSetWoToHclTerraform = dataHelmTemplateSetWoToHclTerraform;
|
|
15
|
+
exports.dataHelmTemplateTimeoutsToTerraform = dataHelmTemplateTimeoutsToTerraform;
|
|
16
|
+
exports.dataHelmTemplateTimeoutsToHclTerraform = dataHelmTemplateTimeoutsToHclTerraform;
|
|
17
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
18
|
+
const cdktn = require("cdktn");
|
|
19
|
+
function dataHelmTemplatePostrenderToTerraform(struct) {
|
|
20
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
21
|
+
return struct;
|
|
22
|
+
}
|
|
23
|
+
if (cdktn.isComplexElement(struct)) {
|
|
24
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
args: cdktn.listMapper(cdktn.stringToTerraform, false)(struct.args),
|
|
28
|
+
binary_path: cdktn.stringToTerraform(struct.binaryPath),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function dataHelmTemplatePostrenderToHclTerraform(struct) {
|
|
32
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
33
|
+
return struct;
|
|
34
|
+
}
|
|
35
|
+
if (cdktn.isComplexElement(struct)) {
|
|
36
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
37
|
+
}
|
|
38
|
+
const attrs = {
|
|
39
|
+
args: {
|
|
40
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(struct.args),
|
|
41
|
+
isBlock: false,
|
|
42
|
+
type: "list",
|
|
43
|
+
storageClassType: "stringList",
|
|
44
|
+
},
|
|
45
|
+
binary_path: {
|
|
46
|
+
value: cdktn.stringToHclTerraform(struct.binaryPath),
|
|
47
|
+
isBlock: false,
|
|
48
|
+
type: "simple",
|
|
49
|
+
storageClassType: "string",
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
// remove undefined attributes
|
|
53
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
54
|
+
}
|
|
55
|
+
class DataHelmTemplatePostrenderOutputReference extends cdktn.ComplexObject {
|
|
56
|
+
/**
|
|
57
|
+
* @param terraformResource The parent resource
|
|
58
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
59
|
+
*/
|
|
60
|
+
constructor(terraformResource, terraformAttribute) {
|
|
61
|
+
super(terraformResource, terraformAttribute, false);
|
|
62
|
+
this.isEmptyObject = false;
|
|
63
|
+
}
|
|
64
|
+
get internalValue() {
|
|
65
|
+
if (this.resolvableValue) {
|
|
66
|
+
return this.resolvableValue;
|
|
67
|
+
}
|
|
68
|
+
let hasAnyValues = this.isEmptyObject;
|
|
69
|
+
const internalValueResult = {};
|
|
70
|
+
if (this._args !== undefined) {
|
|
71
|
+
hasAnyValues = true;
|
|
72
|
+
internalValueResult.args = this._args;
|
|
73
|
+
}
|
|
74
|
+
if (this._binaryPath !== undefined) {
|
|
75
|
+
hasAnyValues = true;
|
|
76
|
+
internalValueResult.binaryPath = this._binaryPath;
|
|
77
|
+
}
|
|
78
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
79
|
+
}
|
|
80
|
+
set internalValue(value) {
|
|
81
|
+
if (value === undefined) {
|
|
82
|
+
this.isEmptyObject = false;
|
|
83
|
+
this.resolvableValue = undefined;
|
|
84
|
+
this._args = undefined;
|
|
85
|
+
this._binaryPath = undefined;
|
|
86
|
+
}
|
|
87
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
88
|
+
this.isEmptyObject = false;
|
|
89
|
+
this.resolvableValue = value;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
93
|
+
this.resolvableValue = undefined;
|
|
94
|
+
this._args = value.args;
|
|
95
|
+
this._binaryPath = value.binaryPath;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
get args() {
|
|
99
|
+
return this.getListAttribute('args');
|
|
100
|
+
}
|
|
101
|
+
set args(value) {
|
|
102
|
+
this._args = value;
|
|
103
|
+
}
|
|
104
|
+
resetArgs() {
|
|
105
|
+
this._args = undefined;
|
|
106
|
+
}
|
|
107
|
+
// Temporarily expose input value. Use with caution.
|
|
108
|
+
get argsInput() {
|
|
109
|
+
return this._args;
|
|
110
|
+
}
|
|
111
|
+
get binaryPath() {
|
|
112
|
+
return this.getStringAttribute('binary_path');
|
|
113
|
+
}
|
|
114
|
+
set binaryPath(value) {
|
|
115
|
+
this._binaryPath = value;
|
|
116
|
+
}
|
|
117
|
+
// Temporarily expose input value. Use with caution.
|
|
118
|
+
get binaryPathInput() {
|
|
119
|
+
return this._binaryPath;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.DataHelmTemplatePostrenderOutputReference = DataHelmTemplatePostrenderOutputReference;
|
|
123
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
124
|
+
DataHelmTemplatePostrenderOutputReference[_a] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplatePostrenderOutputReference", version: "12.2.0" };
|
|
125
|
+
function dataHelmTemplateSetToTerraform(struct) {
|
|
126
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
127
|
+
return struct;
|
|
128
|
+
}
|
|
129
|
+
if (cdktn.isComplexElement(struct)) {
|
|
130
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
name: cdktn.stringToTerraform(struct.name),
|
|
134
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
135
|
+
value: cdktn.stringToTerraform(struct.value),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function dataHelmTemplateSetToHclTerraform(struct) {
|
|
139
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
140
|
+
return struct;
|
|
141
|
+
}
|
|
142
|
+
if (cdktn.isComplexElement(struct)) {
|
|
143
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
144
|
+
}
|
|
145
|
+
const attrs = {
|
|
146
|
+
name: {
|
|
147
|
+
value: cdktn.stringToHclTerraform(struct.name),
|
|
148
|
+
isBlock: false,
|
|
149
|
+
type: "simple",
|
|
150
|
+
storageClassType: "string",
|
|
151
|
+
},
|
|
152
|
+
type: {
|
|
153
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
154
|
+
isBlock: false,
|
|
155
|
+
type: "simple",
|
|
156
|
+
storageClassType: "string",
|
|
157
|
+
},
|
|
158
|
+
value: {
|
|
159
|
+
value: cdktn.stringToHclTerraform(struct.value),
|
|
160
|
+
isBlock: false,
|
|
161
|
+
type: "simple",
|
|
162
|
+
storageClassType: "string",
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
// remove undefined attributes
|
|
166
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
167
|
+
}
|
|
168
|
+
class DataHelmTemplateSetOutputReference extends cdktn.ComplexObject {
|
|
169
|
+
/**
|
|
170
|
+
* @param terraformResource The parent resource
|
|
171
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
172
|
+
* @param complexObjectIndex the index of this item in the list
|
|
173
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
174
|
+
*/
|
|
175
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
176
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
177
|
+
this.isEmptyObject = false;
|
|
178
|
+
}
|
|
179
|
+
get internalValue() {
|
|
180
|
+
if (this.resolvableValue) {
|
|
181
|
+
return this.resolvableValue;
|
|
182
|
+
}
|
|
183
|
+
let hasAnyValues = this.isEmptyObject;
|
|
184
|
+
const internalValueResult = {};
|
|
185
|
+
if (this._name !== undefined) {
|
|
186
|
+
hasAnyValues = true;
|
|
187
|
+
internalValueResult.name = this._name;
|
|
188
|
+
}
|
|
189
|
+
if (this._type !== undefined) {
|
|
190
|
+
hasAnyValues = true;
|
|
191
|
+
internalValueResult.type = this._type;
|
|
192
|
+
}
|
|
193
|
+
if (this._value !== undefined) {
|
|
194
|
+
hasAnyValues = true;
|
|
195
|
+
internalValueResult.value = this._value;
|
|
196
|
+
}
|
|
197
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
198
|
+
}
|
|
199
|
+
set internalValue(value) {
|
|
200
|
+
if (value === undefined) {
|
|
201
|
+
this.isEmptyObject = false;
|
|
202
|
+
this.resolvableValue = undefined;
|
|
203
|
+
this._name = undefined;
|
|
204
|
+
this._type = undefined;
|
|
205
|
+
this._value = undefined;
|
|
206
|
+
}
|
|
207
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
208
|
+
this.isEmptyObject = false;
|
|
209
|
+
this.resolvableValue = value;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
213
|
+
this.resolvableValue = undefined;
|
|
214
|
+
this._name = value.name;
|
|
215
|
+
this._type = value.type;
|
|
216
|
+
this._value = value.value;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
get name() {
|
|
220
|
+
return this.getStringAttribute('name');
|
|
221
|
+
}
|
|
222
|
+
set name(value) {
|
|
223
|
+
this._name = value;
|
|
224
|
+
}
|
|
225
|
+
// Temporarily expose input value. Use with caution.
|
|
226
|
+
get nameInput() {
|
|
227
|
+
return this._name;
|
|
228
|
+
}
|
|
229
|
+
get type() {
|
|
230
|
+
return this.getStringAttribute('type');
|
|
231
|
+
}
|
|
232
|
+
set type(value) {
|
|
233
|
+
this._type = value;
|
|
234
|
+
}
|
|
235
|
+
resetType() {
|
|
236
|
+
this._type = undefined;
|
|
237
|
+
}
|
|
238
|
+
// Temporarily expose input value. Use with caution.
|
|
239
|
+
get typeInput() {
|
|
240
|
+
return this._type;
|
|
241
|
+
}
|
|
242
|
+
get value() {
|
|
243
|
+
return this.getStringAttribute('value');
|
|
244
|
+
}
|
|
245
|
+
set value(value) {
|
|
246
|
+
this._value = value;
|
|
247
|
+
}
|
|
248
|
+
resetValue() {
|
|
249
|
+
this._value = undefined;
|
|
250
|
+
}
|
|
251
|
+
// Temporarily expose input value. Use with caution.
|
|
252
|
+
get valueInput() {
|
|
253
|
+
return this._value;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.DataHelmTemplateSetOutputReference = DataHelmTemplateSetOutputReference;
|
|
257
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
258
|
+
DataHelmTemplateSetOutputReference[_b] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetOutputReference", version: "12.2.0" };
|
|
259
|
+
class DataHelmTemplateSetList extends cdktn.ComplexList {
|
|
260
|
+
/**
|
|
261
|
+
* @param terraformResource The parent resource
|
|
262
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
263
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
264
|
+
*/
|
|
265
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
266
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
267
|
+
this.terraformResource = terraformResource;
|
|
268
|
+
this.terraformAttribute = terraformAttribute;
|
|
269
|
+
this.wrapsSet = wrapsSet;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* @param index the index of the item to return
|
|
273
|
+
*/
|
|
274
|
+
get(index) {
|
|
275
|
+
return new DataHelmTemplateSetOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
exports.DataHelmTemplateSetList = DataHelmTemplateSetList;
|
|
279
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
280
|
+
DataHelmTemplateSetList[_c] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetList", version: "12.2.0" };
|
|
281
|
+
function dataHelmTemplateSetListStructToTerraform(struct) {
|
|
282
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
283
|
+
return struct;
|
|
284
|
+
}
|
|
285
|
+
if (cdktn.isComplexElement(struct)) {
|
|
286
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
name: cdktn.stringToTerraform(struct.name),
|
|
290
|
+
value: cdktn.listMapper(cdktn.stringToTerraform, false)(struct.value),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
function dataHelmTemplateSetListStructToHclTerraform(struct) {
|
|
294
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
295
|
+
return struct;
|
|
296
|
+
}
|
|
297
|
+
if (cdktn.isComplexElement(struct)) {
|
|
298
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
299
|
+
}
|
|
300
|
+
const attrs = {
|
|
301
|
+
name: {
|
|
302
|
+
value: cdktn.stringToHclTerraform(struct.name),
|
|
303
|
+
isBlock: false,
|
|
304
|
+
type: "simple",
|
|
305
|
+
storageClassType: "string",
|
|
306
|
+
},
|
|
307
|
+
value: {
|
|
308
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(struct.value),
|
|
309
|
+
isBlock: false,
|
|
310
|
+
type: "list",
|
|
311
|
+
storageClassType: "stringList",
|
|
312
|
+
},
|
|
313
|
+
};
|
|
314
|
+
// remove undefined attributes
|
|
315
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
316
|
+
}
|
|
317
|
+
class DataHelmTemplateSetListStructOutputReference extends cdktn.ComplexObject {
|
|
318
|
+
/**
|
|
319
|
+
* @param terraformResource The parent resource
|
|
320
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
321
|
+
* @param complexObjectIndex the index of this item in the list
|
|
322
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
323
|
+
*/
|
|
324
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
325
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
326
|
+
this.isEmptyObject = false;
|
|
327
|
+
}
|
|
328
|
+
get internalValue() {
|
|
329
|
+
if (this.resolvableValue) {
|
|
330
|
+
return this.resolvableValue;
|
|
331
|
+
}
|
|
332
|
+
let hasAnyValues = this.isEmptyObject;
|
|
333
|
+
const internalValueResult = {};
|
|
334
|
+
if (this._name !== undefined) {
|
|
335
|
+
hasAnyValues = true;
|
|
336
|
+
internalValueResult.name = this._name;
|
|
337
|
+
}
|
|
338
|
+
if (this._value !== undefined) {
|
|
339
|
+
hasAnyValues = true;
|
|
340
|
+
internalValueResult.value = this._value;
|
|
341
|
+
}
|
|
342
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
343
|
+
}
|
|
344
|
+
set internalValue(value) {
|
|
345
|
+
if (value === undefined) {
|
|
346
|
+
this.isEmptyObject = false;
|
|
347
|
+
this.resolvableValue = undefined;
|
|
348
|
+
this._name = undefined;
|
|
349
|
+
this._value = undefined;
|
|
350
|
+
}
|
|
351
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
352
|
+
this.isEmptyObject = false;
|
|
353
|
+
this.resolvableValue = value;
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
357
|
+
this.resolvableValue = undefined;
|
|
358
|
+
this._name = value.name;
|
|
359
|
+
this._value = value.value;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
get name() {
|
|
363
|
+
return this.getStringAttribute('name');
|
|
364
|
+
}
|
|
365
|
+
set name(value) {
|
|
366
|
+
this._name = value;
|
|
367
|
+
}
|
|
368
|
+
resetName() {
|
|
369
|
+
this._name = undefined;
|
|
370
|
+
}
|
|
371
|
+
// Temporarily expose input value. Use with caution.
|
|
372
|
+
get nameInput() {
|
|
373
|
+
return this._name;
|
|
374
|
+
}
|
|
375
|
+
get value() {
|
|
376
|
+
return this.getListAttribute('value');
|
|
377
|
+
}
|
|
378
|
+
set value(value) {
|
|
379
|
+
this._value = value;
|
|
380
|
+
}
|
|
381
|
+
// Temporarily expose input value. Use with caution.
|
|
382
|
+
get valueInput() {
|
|
383
|
+
return this._value;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
exports.DataHelmTemplateSetListStructOutputReference = DataHelmTemplateSetListStructOutputReference;
|
|
387
|
+
_d = JSII_RTTI_SYMBOL_1;
|
|
388
|
+
DataHelmTemplateSetListStructOutputReference[_d] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetListStructOutputReference", version: "12.2.0" };
|
|
389
|
+
class DataHelmTemplateSetListStructList extends cdktn.ComplexList {
|
|
390
|
+
/**
|
|
391
|
+
* @param terraformResource The parent resource
|
|
392
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
393
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
394
|
+
*/
|
|
395
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
396
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
397
|
+
this.terraformResource = terraformResource;
|
|
398
|
+
this.terraformAttribute = terraformAttribute;
|
|
399
|
+
this.wrapsSet = wrapsSet;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* @param index the index of the item to return
|
|
403
|
+
*/
|
|
404
|
+
get(index) {
|
|
405
|
+
return new DataHelmTemplateSetListStructOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
exports.DataHelmTemplateSetListStructList = DataHelmTemplateSetListStructList;
|
|
409
|
+
_e = JSII_RTTI_SYMBOL_1;
|
|
410
|
+
DataHelmTemplateSetListStructList[_e] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetListStructList", version: "12.2.0" };
|
|
411
|
+
function dataHelmTemplateSetSensitiveToTerraform(struct) {
|
|
412
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
413
|
+
return struct;
|
|
414
|
+
}
|
|
415
|
+
if (cdktn.isComplexElement(struct)) {
|
|
416
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
name: cdktn.stringToTerraform(struct.name),
|
|
420
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
421
|
+
value: cdktn.stringToTerraform(struct.value),
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
function dataHelmTemplateSetSensitiveToHclTerraform(struct) {
|
|
425
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
426
|
+
return struct;
|
|
427
|
+
}
|
|
428
|
+
if (cdktn.isComplexElement(struct)) {
|
|
429
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
430
|
+
}
|
|
431
|
+
const attrs = {
|
|
432
|
+
name: {
|
|
433
|
+
value: cdktn.stringToHclTerraform(struct.name),
|
|
434
|
+
isBlock: false,
|
|
435
|
+
type: "simple",
|
|
436
|
+
storageClassType: "string",
|
|
437
|
+
},
|
|
438
|
+
type: {
|
|
439
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
440
|
+
isBlock: false,
|
|
441
|
+
type: "simple",
|
|
442
|
+
storageClassType: "string",
|
|
443
|
+
},
|
|
444
|
+
value: {
|
|
445
|
+
value: cdktn.stringToHclTerraform(struct.value),
|
|
446
|
+
isBlock: false,
|
|
447
|
+
type: "simple",
|
|
448
|
+
storageClassType: "string",
|
|
449
|
+
},
|
|
450
|
+
};
|
|
451
|
+
// remove undefined attributes
|
|
452
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
453
|
+
}
|
|
454
|
+
class DataHelmTemplateSetSensitiveOutputReference extends cdktn.ComplexObject {
|
|
455
|
+
/**
|
|
456
|
+
* @param terraformResource The parent resource
|
|
457
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
458
|
+
* @param complexObjectIndex the index of this item in the list
|
|
459
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
460
|
+
*/
|
|
461
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
462
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
463
|
+
this.isEmptyObject = false;
|
|
464
|
+
}
|
|
465
|
+
get internalValue() {
|
|
466
|
+
if (this.resolvableValue) {
|
|
467
|
+
return this.resolvableValue;
|
|
468
|
+
}
|
|
469
|
+
let hasAnyValues = this.isEmptyObject;
|
|
470
|
+
const internalValueResult = {};
|
|
471
|
+
if (this._name !== undefined) {
|
|
472
|
+
hasAnyValues = true;
|
|
473
|
+
internalValueResult.name = this._name;
|
|
474
|
+
}
|
|
475
|
+
if (this._type !== undefined) {
|
|
476
|
+
hasAnyValues = true;
|
|
477
|
+
internalValueResult.type = this._type;
|
|
478
|
+
}
|
|
479
|
+
if (this._value !== undefined) {
|
|
480
|
+
hasAnyValues = true;
|
|
481
|
+
internalValueResult.value = this._value;
|
|
482
|
+
}
|
|
483
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
484
|
+
}
|
|
485
|
+
set internalValue(value) {
|
|
486
|
+
if (value === undefined) {
|
|
487
|
+
this.isEmptyObject = false;
|
|
488
|
+
this.resolvableValue = undefined;
|
|
489
|
+
this._name = undefined;
|
|
490
|
+
this._type = undefined;
|
|
491
|
+
this._value = undefined;
|
|
492
|
+
}
|
|
493
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
494
|
+
this.isEmptyObject = false;
|
|
495
|
+
this.resolvableValue = value;
|
|
496
|
+
}
|
|
497
|
+
else {
|
|
498
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
499
|
+
this.resolvableValue = undefined;
|
|
500
|
+
this._name = value.name;
|
|
501
|
+
this._type = value.type;
|
|
502
|
+
this._value = value.value;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
get name() {
|
|
506
|
+
return this.getStringAttribute('name');
|
|
507
|
+
}
|
|
508
|
+
set name(value) {
|
|
509
|
+
this._name = value;
|
|
510
|
+
}
|
|
511
|
+
// Temporarily expose input value. Use with caution.
|
|
512
|
+
get nameInput() {
|
|
513
|
+
return this._name;
|
|
514
|
+
}
|
|
515
|
+
get type() {
|
|
516
|
+
return this.getStringAttribute('type');
|
|
517
|
+
}
|
|
518
|
+
set type(value) {
|
|
519
|
+
this._type = value;
|
|
520
|
+
}
|
|
521
|
+
resetType() {
|
|
522
|
+
this._type = undefined;
|
|
523
|
+
}
|
|
524
|
+
// Temporarily expose input value. Use with caution.
|
|
525
|
+
get typeInput() {
|
|
526
|
+
return this._type;
|
|
527
|
+
}
|
|
528
|
+
get value() {
|
|
529
|
+
return this.getStringAttribute('value');
|
|
530
|
+
}
|
|
531
|
+
set value(value) {
|
|
532
|
+
this._value = value;
|
|
533
|
+
}
|
|
534
|
+
// Temporarily expose input value. Use with caution.
|
|
535
|
+
get valueInput() {
|
|
536
|
+
return this._value;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
exports.DataHelmTemplateSetSensitiveOutputReference = DataHelmTemplateSetSensitiveOutputReference;
|
|
540
|
+
_f = JSII_RTTI_SYMBOL_1;
|
|
541
|
+
DataHelmTemplateSetSensitiveOutputReference[_f] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetSensitiveOutputReference", version: "12.2.0" };
|
|
542
|
+
class DataHelmTemplateSetSensitiveList extends cdktn.ComplexList {
|
|
543
|
+
/**
|
|
544
|
+
* @param terraformResource The parent resource
|
|
545
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
546
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
547
|
+
*/
|
|
548
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
549
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
550
|
+
this.terraformResource = terraformResource;
|
|
551
|
+
this.terraformAttribute = terraformAttribute;
|
|
552
|
+
this.wrapsSet = wrapsSet;
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* @param index the index of the item to return
|
|
556
|
+
*/
|
|
557
|
+
get(index) {
|
|
558
|
+
return new DataHelmTemplateSetSensitiveOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
exports.DataHelmTemplateSetSensitiveList = DataHelmTemplateSetSensitiveList;
|
|
562
|
+
_g = JSII_RTTI_SYMBOL_1;
|
|
563
|
+
DataHelmTemplateSetSensitiveList[_g] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetSensitiveList", version: "12.2.0" };
|
|
564
|
+
function dataHelmTemplateSetWoToTerraform(struct) {
|
|
565
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
566
|
+
return struct;
|
|
567
|
+
}
|
|
568
|
+
if (cdktn.isComplexElement(struct)) {
|
|
569
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
570
|
+
}
|
|
571
|
+
return {
|
|
572
|
+
name: cdktn.stringToTerraform(struct.name),
|
|
573
|
+
type: cdktn.stringToTerraform(struct.type),
|
|
574
|
+
value: cdktn.stringToTerraform(struct.value),
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
function dataHelmTemplateSetWoToHclTerraform(struct) {
|
|
578
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
579
|
+
return struct;
|
|
580
|
+
}
|
|
581
|
+
if (cdktn.isComplexElement(struct)) {
|
|
582
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
583
|
+
}
|
|
584
|
+
const attrs = {
|
|
585
|
+
name: {
|
|
586
|
+
value: cdktn.stringToHclTerraform(struct.name),
|
|
587
|
+
isBlock: false,
|
|
588
|
+
type: "simple",
|
|
589
|
+
storageClassType: "string",
|
|
590
|
+
},
|
|
591
|
+
type: {
|
|
592
|
+
value: cdktn.stringToHclTerraform(struct.type),
|
|
593
|
+
isBlock: false,
|
|
594
|
+
type: "simple",
|
|
595
|
+
storageClassType: "string",
|
|
596
|
+
},
|
|
597
|
+
value: {
|
|
598
|
+
value: cdktn.stringToHclTerraform(struct.value),
|
|
599
|
+
isBlock: false,
|
|
600
|
+
type: "simple",
|
|
601
|
+
storageClassType: "string",
|
|
602
|
+
},
|
|
603
|
+
};
|
|
604
|
+
// remove undefined attributes
|
|
605
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
606
|
+
}
|
|
607
|
+
class DataHelmTemplateSetWoOutputReference extends cdktn.ComplexObject {
|
|
608
|
+
/**
|
|
609
|
+
* @param terraformResource The parent resource
|
|
610
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
611
|
+
* @param complexObjectIndex the index of this item in the list
|
|
612
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
613
|
+
*/
|
|
614
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
615
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
616
|
+
this.isEmptyObject = false;
|
|
617
|
+
}
|
|
618
|
+
get internalValue() {
|
|
619
|
+
if (this.resolvableValue) {
|
|
620
|
+
return this.resolvableValue;
|
|
621
|
+
}
|
|
622
|
+
let hasAnyValues = this.isEmptyObject;
|
|
623
|
+
const internalValueResult = {};
|
|
624
|
+
if (this._name !== undefined) {
|
|
625
|
+
hasAnyValues = true;
|
|
626
|
+
internalValueResult.name = this._name;
|
|
627
|
+
}
|
|
628
|
+
if (this._type !== undefined) {
|
|
629
|
+
hasAnyValues = true;
|
|
630
|
+
internalValueResult.type = this._type;
|
|
631
|
+
}
|
|
632
|
+
if (this._value !== undefined) {
|
|
633
|
+
hasAnyValues = true;
|
|
634
|
+
internalValueResult.value = this._value;
|
|
635
|
+
}
|
|
636
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
637
|
+
}
|
|
638
|
+
set internalValue(value) {
|
|
639
|
+
if (value === undefined) {
|
|
640
|
+
this.isEmptyObject = false;
|
|
641
|
+
this.resolvableValue = undefined;
|
|
642
|
+
this._name = undefined;
|
|
643
|
+
this._type = undefined;
|
|
644
|
+
this._value = undefined;
|
|
645
|
+
}
|
|
646
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
647
|
+
this.isEmptyObject = false;
|
|
648
|
+
this.resolvableValue = value;
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
652
|
+
this.resolvableValue = undefined;
|
|
653
|
+
this._name = value.name;
|
|
654
|
+
this._type = value.type;
|
|
655
|
+
this._value = value.value;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
get name() {
|
|
659
|
+
return this.getStringAttribute('name');
|
|
660
|
+
}
|
|
661
|
+
set name(value) {
|
|
662
|
+
this._name = value;
|
|
663
|
+
}
|
|
664
|
+
// Temporarily expose input value. Use with caution.
|
|
665
|
+
get nameInput() {
|
|
666
|
+
return this._name;
|
|
667
|
+
}
|
|
668
|
+
get type() {
|
|
669
|
+
return this.getStringAttribute('type');
|
|
670
|
+
}
|
|
671
|
+
set type(value) {
|
|
672
|
+
this._type = value;
|
|
673
|
+
}
|
|
674
|
+
resetType() {
|
|
675
|
+
this._type = undefined;
|
|
676
|
+
}
|
|
677
|
+
// Temporarily expose input value. Use with caution.
|
|
678
|
+
get typeInput() {
|
|
679
|
+
return this._type;
|
|
680
|
+
}
|
|
681
|
+
get value() {
|
|
682
|
+
return this.getStringAttribute('value');
|
|
683
|
+
}
|
|
684
|
+
set value(value) {
|
|
685
|
+
this._value = value;
|
|
686
|
+
}
|
|
687
|
+
// Temporarily expose input value. Use with caution.
|
|
688
|
+
get valueInput() {
|
|
689
|
+
return this._value;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
exports.DataHelmTemplateSetWoOutputReference = DataHelmTemplateSetWoOutputReference;
|
|
693
|
+
_h = JSII_RTTI_SYMBOL_1;
|
|
694
|
+
DataHelmTemplateSetWoOutputReference[_h] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetWoOutputReference", version: "12.2.0" };
|
|
695
|
+
class DataHelmTemplateSetWoList extends cdktn.ComplexList {
|
|
696
|
+
/**
|
|
697
|
+
* @param terraformResource The parent resource
|
|
698
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
699
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
700
|
+
*/
|
|
701
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
702
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
703
|
+
this.terraformResource = terraformResource;
|
|
704
|
+
this.terraformAttribute = terraformAttribute;
|
|
705
|
+
this.wrapsSet = wrapsSet;
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* @param index the index of the item to return
|
|
709
|
+
*/
|
|
710
|
+
get(index) {
|
|
711
|
+
return new DataHelmTemplateSetWoOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
exports.DataHelmTemplateSetWoList = DataHelmTemplateSetWoList;
|
|
715
|
+
_j = JSII_RTTI_SYMBOL_1;
|
|
716
|
+
DataHelmTemplateSetWoList[_j] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateSetWoList", version: "12.2.0" };
|
|
717
|
+
function dataHelmTemplateTimeoutsToTerraform(struct) {
|
|
718
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
719
|
+
return struct;
|
|
720
|
+
}
|
|
721
|
+
if (cdktn.isComplexElement(struct)) {
|
|
722
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
723
|
+
}
|
|
724
|
+
return {
|
|
725
|
+
read: cdktn.stringToTerraform(struct.read),
|
|
726
|
+
};
|
|
727
|
+
}
|
|
728
|
+
function dataHelmTemplateTimeoutsToHclTerraform(struct) {
|
|
729
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
730
|
+
return struct;
|
|
731
|
+
}
|
|
732
|
+
if (cdktn.isComplexElement(struct)) {
|
|
733
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
734
|
+
}
|
|
735
|
+
const attrs = {
|
|
736
|
+
read: {
|
|
737
|
+
value: cdktn.stringToHclTerraform(struct.read),
|
|
738
|
+
isBlock: false,
|
|
739
|
+
type: "simple",
|
|
740
|
+
storageClassType: "string",
|
|
741
|
+
},
|
|
742
|
+
};
|
|
743
|
+
// remove undefined attributes
|
|
744
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
745
|
+
}
|
|
746
|
+
class DataHelmTemplateTimeoutsOutputReference extends cdktn.ComplexObject {
|
|
747
|
+
/**
|
|
748
|
+
* @param terraformResource The parent resource
|
|
749
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
750
|
+
*/
|
|
751
|
+
constructor(terraformResource, terraformAttribute) {
|
|
752
|
+
super(terraformResource, terraformAttribute, false);
|
|
753
|
+
this.isEmptyObject = false;
|
|
754
|
+
}
|
|
755
|
+
get internalValue() {
|
|
756
|
+
if (this.resolvableValue) {
|
|
757
|
+
return this.resolvableValue;
|
|
758
|
+
}
|
|
759
|
+
let hasAnyValues = this.isEmptyObject;
|
|
760
|
+
const internalValueResult = {};
|
|
761
|
+
if (this._read !== undefined) {
|
|
762
|
+
hasAnyValues = true;
|
|
763
|
+
internalValueResult.read = this._read;
|
|
764
|
+
}
|
|
765
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
766
|
+
}
|
|
767
|
+
set internalValue(value) {
|
|
768
|
+
if (value === undefined) {
|
|
769
|
+
this.isEmptyObject = false;
|
|
770
|
+
this.resolvableValue = undefined;
|
|
771
|
+
this._read = undefined;
|
|
772
|
+
}
|
|
773
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
774
|
+
this.isEmptyObject = false;
|
|
775
|
+
this.resolvableValue = value;
|
|
776
|
+
}
|
|
777
|
+
else {
|
|
778
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
779
|
+
this.resolvableValue = undefined;
|
|
780
|
+
this._read = value.read;
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
get read() {
|
|
784
|
+
return this.getStringAttribute('read');
|
|
785
|
+
}
|
|
786
|
+
set read(value) {
|
|
787
|
+
this._read = value;
|
|
788
|
+
}
|
|
789
|
+
resetRead() {
|
|
790
|
+
this._read = undefined;
|
|
791
|
+
}
|
|
792
|
+
// Temporarily expose input value. Use with caution.
|
|
793
|
+
get readInput() {
|
|
794
|
+
return this._read;
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
exports.DataHelmTemplateTimeoutsOutputReference = DataHelmTemplateTimeoutsOutputReference;
|
|
798
|
+
_k = JSII_RTTI_SYMBOL_1;
|
|
799
|
+
DataHelmTemplateTimeoutsOutputReference[_k] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplateTimeoutsOutputReference", version: "12.2.0" };
|
|
800
|
+
/**
|
|
801
|
+
* Represents a {@link https://registry.terraform.io/providers/hashicorp/helm/3.1.1/docs/data-sources/template helm_template}
|
|
802
|
+
*/
|
|
803
|
+
class DataHelmTemplate extends cdktn.TerraformDataSource {
|
|
804
|
+
// ==============
|
|
805
|
+
// STATIC Methods
|
|
806
|
+
// ==============
|
|
807
|
+
/**
|
|
808
|
+
* Generates CDKTN code for importing a DataHelmTemplate resource upon running "cdktn plan <stack-name>"
|
|
809
|
+
* @param scope The scope in which to define this construct
|
|
810
|
+
* @param importToId The construct id used in the generated config for the DataHelmTemplate to import
|
|
811
|
+
* @param importFromId The id of the existing DataHelmTemplate that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/helm/3.1.1/docs/data-sources/template#import import section} in the documentation of this resource for the id to use
|
|
812
|
+
* @param provider? Optional instance of the provider where the DataHelmTemplate to import is found
|
|
813
|
+
*/
|
|
814
|
+
static generateConfigForImport(scope, importToId, importFromId, provider) {
|
|
815
|
+
return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "helm_template", importId: importFromId, provider });
|
|
816
|
+
}
|
|
817
|
+
// ===========
|
|
818
|
+
// INITIALIZER
|
|
819
|
+
// ===========
|
|
820
|
+
/**
|
|
821
|
+
* Create a new {@link https://registry.terraform.io/providers/hashicorp/helm/3.1.1/docs/data-sources/template helm_template} Data Source
|
|
822
|
+
*
|
|
823
|
+
* @param scope The scope in which to define this construct
|
|
824
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
|
825
|
+
* @param options DataHelmTemplateConfig
|
|
826
|
+
*/
|
|
827
|
+
constructor(scope, id, config) {
|
|
828
|
+
super(scope, id, {
|
|
829
|
+
terraformResourceType: 'helm_template',
|
|
830
|
+
terraformGeneratorMetadata: {
|
|
831
|
+
providerName: 'helm',
|
|
832
|
+
providerVersion: '3.1.1',
|
|
833
|
+
providerVersionConstraint: '~> 3.0'
|
|
834
|
+
},
|
|
835
|
+
provider: config.provider,
|
|
836
|
+
dependsOn: config.dependsOn,
|
|
837
|
+
count: config.count,
|
|
838
|
+
lifecycle: config.lifecycle,
|
|
839
|
+
provisioners: config.provisioners,
|
|
840
|
+
connection: config.connection,
|
|
841
|
+
forEach: config.forEach
|
|
842
|
+
});
|
|
843
|
+
// postrender - computed: false, optional: true, required: false
|
|
844
|
+
this._postrender = new DataHelmTemplatePostrenderOutputReference(this, "postrender");
|
|
845
|
+
// set - computed: false, optional: true, required: false
|
|
846
|
+
this._set = new DataHelmTemplateSetList(this, "set", true);
|
|
847
|
+
// set_list - computed: false, optional: true, required: false
|
|
848
|
+
this._setList = new DataHelmTemplateSetListStructList(this, "set_list", false);
|
|
849
|
+
// set_sensitive - computed: false, optional: true, required: false
|
|
850
|
+
this._setSensitive = new DataHelmTemplateSetSensitiveList(this, "set_sensitive", true);
|
|
851
|
+
// set_wo - computed: false, optional: true, required: false
|
|
852
|
+
this._setWo = new DataHelmTemplateSetWoList(this, "set_wo", false);
|
|
853
|
+
// timeouts - computed: false, optional: true, required: false
|
|
854
|
+
this._timeouts = new DataHelmTemplateTimeoutsOutputReference(this, "timeouts");
|
|
855
|
+
this._apiVersions = config.apiVersions;
|
|
856
|
+
this._atomic = config.atomic;
|
|
857
|
+
this._chart = config.chart;
|
|
858
|
+
this._crds = config.crds;
|
|
859
|
+
this._createNamespace = config.createNamespace;
|
|
860
|
+
this._dependencyUpdate = config.dependencyUpdate;
|
|
861
|
+
this._description = config.description;
|
|
862
|
+
this._devel = config.devel;
|
|
863
|
+
this._disableOpenapiValidation = config.disableOpenapiValidation;
|
|
864
|
+
this._disableWebhooks = config.disableWebhooks;
|
|
865
|
+
this._includeCrds = config.includeCrds;
|
|
866
|
+
this._isUpgrade = config.isUpgrade;
|
|
867
|
+
this._keyring = config.keyring;
|
|
868
|
+
this._kubeVersion = config.kubeVersion;
|
|
869
|
+
this._manifest = config.manifest;
|
|
870
|
+
this._manifests = config.manifests;
|
|
871
|
+
this._name = config.name;
|
|
872
|
+
this._namespace = config.namespace;
|
|
873
|
+
this._notes = config.notes;
|
|
874
|
+
this._passCredentials = config.passCredentials;
|
|
875
|
+
this._postrender.internalValue = config.postrender;
|
|
876
|
+
this._renderSubchartNotes = config.renderSubchartNotes;
|
|
877
|
+
this._replace = config.replace;
|
|
878
|
+
this._repository = config.repository;
|
|
879
|
+
this._repositoryCaFile = config.repositoryCaFile;
|
|
880
|
+
this._repositoryCertFile = config.repositoryCertFile;
|
|
881
|
+
this._repositoryKeyFile = config.repositoryKeyFile;
|
|
882
|
+
this._repositoryPassword = config.repositoryPassword;
|
|
883
|
+
this._repositoryUsername = config.repositoryUsername;
|
|
884
|
+
this._resetValues = config.resetValues;
|
|
885
|
+
this._reuseValues = config.reuseValues;
|
|
886
|
+
this._set.internalValue = config.set;
|
|
887
|
+
this._setList.internalValue = config.setList;
|
|
888
|
+
this._setSensitive.internalValue = config.setSensitive;
|
|
889
|
+
this._setWo.internalValue = config.setWo;
|
|
890
|
+
this._showOnly = config.showOnly;
|
|
891
|
+
this._skipCrds = config.skipCrds;
|
|
892
|
+
this._skipTests = config.skipTests;
|
|
893
|
+
this._timeout = config.timeout;
|
|
894
|
+
this._timeouts.internalValue = config.timeouts;
|
|
895
|
+
this._validate = config.validate;
|
|
896
|
+
this._values = config.values;
|
|
897
|
+
this._verify = config.verify;
|
|
898
|
+
this._version = config.version;
|
|
899
|
+
this._wait = config.wait;
|
|
900
|
+
}
|
|
901
|
+
get apiVersions() {
|
|
902
|
+
return this.getListAttribute('api_versions');
|
|
903
|
+
}
|
|
904
|
+
set apiVersions(value) {
|
|
905
|
+
this._apiVersions = value;
|
|
906
|
+
}
|
|
907
|
+
resetApiVersions() {
|
|
908
|
+
this._apiVersions = undefined;
|
|
909
|
+
}
|
|
910
|
+
// Temporarily expose input value. Use with caution.
|
|
911
|
+
get apiVersionsInput() {
|
|
912
|
+
return this._apiVersions;
|
|
913
|
+
}
|
|
914
|
+
get atomic() {
|
|
915
|
+
return this.getBooleanAttribute('atomic');
|
|
916
|
+
}
|
|
917
|
+
set atomic(value) {
|
|
918
|
+
this._atomic = value;
|
|
919
|
+
}
|
|
920
|
+
resetAtomic() {
|
|
921
|
+
this._atomic = undefined;
|
|
922
|
+
}
|
|
923
|
+
// Temporarily expose input value. Use with caution.
|
|
924
|
+
get atomicInput() {
|
|
925
|
+
return this._atomic;
|
|
926
|
+
}
|
|
927
|
+
get chart() {
|
|
928
|
+
return this.getStringAttribute('chart');
|
|
929
|
+
}
|
|
930
|
+
set chart(value) {
|
|
931
|
+
this._chart = value;
|
|
932
|
+
}
|
|
933
|
+
// Temporarily expose input value. Use with caution.
|
|
934
|
+
get chartInput() {
|
|
935
|
+
return this._chart;
|
|
936
|
+
}
|
|
937
|
+
get crds() {
|
|
938
|
+
return this.getListAttribute('crds');
|
|
939
|
+
}
|
|
940
|
+
set crds(value) {
|
|
941
|
+
this._crds = value;
|
|
942
|
+
}
|
|
943
|
+
resetCrds() {
|
|
944
|
+
this._crds = undefined;
|
|
945
|
+
}
|
|
946
|
+
// Temporarily expose input value. Use with caution.
|
|
947
|
+
get crdsInput() {
|
|
948
|
+
return this._crds;
|
|
949
|
+
}
|
|
950
|
+
get createNamespace() {
|
|
951
|
+
return this.getBooleanAttribute('create_namespace');
|
|
952
|
+
}
|
|
953
|
+
set createNamespace(value) {
|
|
954
|
+
this._createNamespace = value;
|
|
955
|
+
}
|
|
956
|
+
resetCreateNamespace() {
|
|
957
|
+
this._createNamespace = undefined;
|
|
958
|
+
}
|
|
959
|
+
// Temporarily expose input value. Use with caution.
|
|
960
|
+
get createNamespaceInput() {
|
|
961
|
+
return this._createNamespace;
|
|
962
|
+
}
|
|
963
|
+
get dependencyUpdate() {
|
|
964
|
+
return this.getBooleanAttribute('dependency_update');
|
|
965
|
+
}
|
|
966
|
+
set dependencyUpdate(value) {
|
|
967
|
+
this._dependencyUpdate = value;
|
|
968
|
+
}
|
|
969
|
+
resetDependencyUpdate() {
|
|
970
|
+
this._dependencyUpdate = undefined;
|
|
971
|
+
}
|
|
972
|
+
// Temporarily expose input value. Use with caution.
|
|
973
|
+
get dependencyUpdateInput() {
|
|
974
|
+
return this._dependencyUpdate;
|
|
975
|
+
}
|
|
976
|
+
get description() {
|
|
977
|
+
return this.getStringAttribute('description');
|
|
978
|
+
}
|
|
979
|
+
set description(value) {
|
|
980
|
+
this._description = value;
|
|
981
|
+
}
|
|
982
|
+
resetDescription() {
|
|
983
|
+
this._description = undefined;
|
|
984
|
+
}
|
|
985
|
+
// Temporarily expose input value. Use with caution.
|
|
986
|
+
get descriptionInput() {
|
|
987
|
+
return this._description;
|
|
988
|
+
}
|
|
989
|
+
get devel() {
|
|
990
|
+
return this.getBooleanAttribute('devel');
|
|
991
|
+
}
|
|
992
|
+
set devel(value) {
|
|
993
|
+
this._devel = value;
|
|
994
|
+
}
|
|
995
|
+
resetDevel() {
|
|
996
|
+
this._devel = undefined;
|
|
997
|
+
}
|
|
998
|
+
// Temporarily expose input value. Use with caution.
|
|
999
|
+
get develInput() {
|
|
1000
|
+
return this._devel;
|
|
1001
|
+
}
|
|
1002
|
+
get disableOpenapiValidation() {
|
|
1003
|
+
return this.getBooleanAttribute('disable_openapi_validation');
|
|
1004
|
+
}
|
|
1005
|
+
set disableOpenapiValidation(value) {
|
|
1006
|
+
this._disableOpenapiValidation = value;
|
|
1007
|
+
}
|
|
1008
|
+
resetDisableOpenapiValidation() {
|
|
1009
|
+
this._disableOpenapiValidation = undefined;
|
|
1010
|
+
}
|
|
1011
|
+
// Temporarily expose input value. Use with caution.
|
|
1012
|
+
get disableOpenapiValidationInput() {
|
|
1013
|
+
return this._disableOpenapiValidation;
|
|
1014
|
+
}
|
|
1015
|
+
get disableWebhooks() {
|
|
1016
|
+
return this.getBooleanAttribute('disable_webhooks');
|
|
1017
|
+
}
|
|
1018
|
+
set disableWebhooks(value) {
|
|
1019
|
+
this._disableWebhooks = value;
|
|
1020
|
+
}
|
|
1021
|
+
resetDisableWebhooks() {
|
|
1022
|
+
this._disableWebhooks = undefined;
|
|
1023
|
+
}
|
|
1024
|
+
// Temporarily expose input value. Use with caution.
|
|
1025
|
+
get disableWebhooksInput() {
|
|
1026
|
+
return this._disableWebhooks;
|
|
1027
|
+
}
|
|
1028
|
+
// id - computed: true, optional: false, required: false
|
|
1029
|
+
get id() {
|
|
1030
|
+
return this.getStringAttribute('id');
|
|
1031
|
+
}
|
|
1032
|
+
get includeCrds() {
|
|
1033
|
+
return this.getBooleanAttribute('include_crds');
|
|
1034
|
+
}
|
|
1035
|
+
set includeCrds(value) {
|
|
1036
|
+
this._includeCrds = value;
|
|
1037
|
+
}
|
|
1038
|
+
resetIncludeCrds() {
|
|
1039
|
+
this._includeCrds = undefined;
|
|
1040
|
+
}
|
|
1041
|
+
// Temporarily expose input value. Use with caution.
|
|
1042
|
+
get includeCrdsInput() {
|
|
1043
|
+
return this._includeCrds;
|
|
1044
|
+
}
|
|
1045
|
+
get isUpgrade() {
|
|
1046
|
+
return this.getBooleanAttribute('is_upgrade');
|
|
1047
|
+
}
|
|
1048
|
+
set isUpgrade(value) {
|
|
1049
|
+
this._isUpgrade = value;
|
|
1050
|
+
}
|
|
1051
|
+
resetIsUpgrade() {
|
|
1052
|
+
this._isUpgrade = undefined;
|
|
1053
|
+
}
|
|
1054
|
+
// Temporarily expose input value. Use with caution.
|
|
1055
|
+
get isUpgradeInput() {
|
|
1056
|
+
return this._isUpgrade;
|
|
1057
|
+
}
|
|
1058
|
+
get keyring() {
|
|
1059
|
+
return this.getStringAttribute('keyring');
|
|
1060
|
+
}
|
|
1061
|
+
set keyring(value) {
|
|
1062
|
+
this._keyring = value;
|
|
1063
|
+
}
|
|
1064
|
+
resetKeyring() {
|
|
1065
|
+
this._keyring = undefined;
|
|
1066
|
+
}
|
|
1067
|
+
// Temporarily expose input value. Use with caution.
|
|
1068
|
+
get keyringInput() {
|
|
1069
|
+
return this._keyring;
|
|
1070
|
+
}
|
|
1071
|
+
get kubeVersion() {
|
|
1072
|
+
return this.getStringAttribute('kube_version');
|
|
1073
|
+
}
|
|
1074
|
+
set kubeVersion(value) {
|
|
1075
|
+
this._kubeVersion = value;
|
|
1076
|
+
}
|
|
1077
|
+
resetKubeVersion() {
|
|
1078
|
+
this._kubeVersion = undefined;
|
|
1079
|
+
}
|
|
1080
|
+
// Temporarily expose input value. Use with caution.
|
|
1081
|
+
get kubeVersionInput() {
|
|
1082
|
+
return this._kubeVersion;
|
|
1083
|
+
}
|
|
1084
|
+
get manifest() {
|
|
1085
|
+
return this.getStringAttribute('manifest');
|
|
1086
|
+
}
|
|
1087
|
+
set manifest(value) {
|
|
1088
|
+
this._manifest = value;
|
|
1089
|
+
}
|
|
1090
|
+
resetManifest() {
|
|
1091
|
+
this._manifest = undefined;
|
|
1092
|
+
}
|
|
1093
|
+
// Temporarily expose input value. Use with caution.
|
|
1094
|
+
get manifestInput() {
|
|
1095
|
+
return this._manifest;
|
|
1096
|
+
}
|
|
1097
|
+
get manifests() {
|
|
1098
|
+
return this.getStringMapAttribute('manifests');
|
|
1099
|
+
}
|
|
1100
|
+
set manifests(value) {
|
|
1101
|
+
this._manifests = value;
|
|
1102
|
+
}
|
|
1103
|
+
resetManifests() {
|
|
1104
|
+
this._manifests = undefined;
|
|
1105
|
+
}
|
|
1106
|
+
// Temporarily expose input value. Use with caution.
|
|
1107
|
+
get manifestsInput() {
|
|
1108
|
+
return this._manifests;
|
|
1109
|
+
}
|
|
1110
|
+
get name() {
|
|
1111
|
+
return this.getStringAttribute('name');
|
|
1112
|
+
}
|
|
1113
|
+
set name(value) {
|
|
1114
|
+
this._name = value;
|
|
1115
|
+
}
|
|
1116
|
+
// Temporarily expose input value. Use with caution.
|
|
1117
|
+
get nameInput() {
|
|
1118
|
+
return this._name;
|
|
1119
|
+
}
|
|
1120
|
+
get namespace() {
|
|
1121
|
+
return this.getStringAttribute('namespace');
|
|
1122
|
+
}
|
|
1123
|
+
set namespace(value) {
|
|
1124
|
+
this._namespace = value;
|
|
1125
|
+
}
|
|
1126
|
+
resetNamespace() {
|
|
1127
|
+
this._namespace = undefined;
|
|
1128
|
+
}
|
|
1129
|
+
// Temporarily expose input value. Use with caution.
|
|
1130
|
+
get namespaceInput() {
|
|
1131
|
+
return this._namespace;
|
|
1132
|
+
}
|
|
1133
|
+
get notes() {
|
|
1134
|
+
return this.getStringAttribute('notes');
|
|
1135
|
+
}
|
|
1136
|
+
set notes(value) {
|
|
1137
|
+
this._notes = value;
|
|
1138
|
+
}
|
|
1139
|
+
resetNotes() {
|
|
1140
|
+
this._notes = undefined;
|
|
1141
|
+
}
|
|
1142
|
+
// Temporarily expose input value. Use with caution.
|
|
1143
|
+
get notesInput() {
|
|
1144
|
+
return this._notes;
|
|
1145
|
+
}
|
|
1146
|
+
get passCredentials() {
|
|
1147
|
+
return this.getBooleanAttribute('pass_credentials');
|
|
1148
|
+
}
|
|
1149
|
+
set passCredentials(value) {
|
|
1150
|
+
this._passCredentials = value;
|
|
1151
|
+
}
|
|
1152
|
+
resetPassCredentials() {
|
|
1153
|
+
this._passCredentials = undefined;
|
|
1154
|
+
}
|
|
1155
|
+
// Temporarily expose input value. Use with caution.
|
|
1156
|
+
get passCredentialsInput() {
|
|
1157
|
+
return this._passCredentials;
|
|
1158
|
+
}
|
|
1159
|
+
get postrender() {
|
|
1160
|
+
return this._postrender;
|
|
1161
|
+
}
|
|
1162
|
+
putPostrender(value) {
|
|
1163
|
+
this._postrender.internalValue = value;
|
|
1164
|
+
}
|
|
1165
|
+
resetPostrender() {
|
|
1166
|
+
this._postrender.internalValue = undefined;
|
|
1167
|
+
}
|
|
1168
|
+
// Temporarily expose input value. Use with caution.
|
|
1169
|
+
get postrenderInput() {
|
|
1170
|
+
return this._postrender.internalValue;
|
|
1171
|
+
}
|
|
1172
|
+
get renderSubchartNotes() {
|
|
1173
|
+
return this.getBooleanAttribute('render_subchart_notes');
|
|
1174
|
+
}
|
|
1175
|
+
set renderSubchartNotes(value) {
|
|
1176
|
+
this._renderSubchartNotes = value;
|
|
1177
|
+
}
|
|
1178
|
+
resetRenderSubchartNotes() {
|
|
1179
|
+
this._renderSubchartNotes = undefined;
|
|
1180
|
+
}
|
|
1181
|
+
// Temporarily expose input value. Use with caution.
|
|
1182
|
+
get renderSubchartNotesInput() {
|
|
1183
|
+
return this._renderSubchartNotes;
|
|
1184
|
+
}
|
|
1185
|
+
get replace() {
|
|
1186
|
+
return this.getBooleanAttribute('replace');
|
|
1187
|
+
}
|
|
1188
|
+
set replace(value) {
|
|
1189
|
+
this._replace = value;
|
|
1190
|
+
}
|
|
1191
|
+
resetReplace() {
|
|
1192
|
+
this._replace = undefined;
|
|
1193
|
+
}
|
|
1194
|
+
// Temporarily expose input value. Use with caution.
|
|
1195
|
+
get replaceInput() {
|
|
1196
|
+
return this._replace;
|
|
1197
|
+
}
|
|
1198
|
+
get repository() {
|
|
1199
|
+
return this.getStringAttribute('repository');
|
|
1200
|
+
}
|
|
1201
|
+
set repository(value) {
|
|
1202
|
+
this._repository = value;
|
|
1203
|
+
}
|
|
1204
|
+
resetRepository() {
|
|
1205
|
+
this._repository = undefined;
|
|
1206
|
+
}
|
|
1207
|
+
// Temporarily expose input value. Use with caution.
|
|
1208
|
+
get repositoryInput() {
|
|
1209
|
+
return this._repository;
|
|
1210
|
+
}
|
|
1211
|
+
get repositoryCaFile() {
|
|
1212
|
+
return this.getStringAttribute('repository_ca_file');
|
|
1213
|
+
}
|
|
1214
|
+
set repositoryCaFile(value) {
|
|
1215
|
+
this._repositoryCaFile = value;
|
|
1216
|
+
}
|
|
1217
|
+
resetRepositoryCaFile() {
|
|
1218
|
+
this._repositoryCaFile = undefined;
|
|
1219
|
+
}
|
|
1220
|
+
// Temporarily expose input value. Use with caution.
|
|
1221
|
+
get repositoryCaFileInput() {
|
|
1222
|
+
return this._repositoryCaFile;
|
|
1223
|
+
}
|
|
1224
|
+
get repositoryCertFile() {
|
|
1225
|
+
return this.getStringAttribute('repository_cert_file');
|
|
1226
|
+
}
|
|
1227
|
+
set repositoryCertFile(value) {
|
|
1228
|
+
this._repositoryCertFile = value;
|
|
1229
|
+
}
|
|
1230
|
+
resetRepositoryCertFile() {
|
|
1231
|
+
this._repositoryCertFile = undefined;
|
|
1232
|
+
}
|
|
1233
|
+
// Temporarily expose input value. Use with caution.
|
|
1234
|
+
get repositoryCertFileInput() {
|
|
1235
|
+
return this._repositoryCertFile;
|
|
1236
|
+
}
|
|
1237
|
+
get repositoryKeyFile() {
|
|
1238
|
+
return this.getStringAttribute('repository_key_file');
|
|
1239
|
+
}
|
|
1240
|
+
set repositoryKeyFile(value) {
|
|
1241
|
+
this._repositoryKeyFile = value;
|
|
1242
|
+
}
|
|
1243
|
+
resetRepositoryKeyFile() {
|
|
1244
|
+
this._repositoryKeyFile = undefined;
|
|
1245
|
+
}
|
|
1246
|
+
// Temporarily expose input value. Use with caution.
|
|
1247
|
+
get repositoryKeyFileInput() {
|
|
1248
|
+
return this._repositoryKeyFile;
|
|
1249
|
+
}
|
|
1250
|
+
get repositoryPassword() {
|
|
1251
|
+
return this.getStringAttribute('repository_password');
|
|
1252
|
+
}
|
|
1253
|
+
set repositoryPassword(value) {
|
|
1254
|
+
this._repositoryPassword = value;
|
|
1255
|
+
}
|
|
1256
|
+
resetRepositoryPassword() {
|
|
1257
|
+
this._repositoryPassword = undefined;
|
|
1258
|
+
}
|
|
1259
|
+
// Temporarily expose input value. Use with caution.
|
|
1260
|
+
get repositoryPasswordInput() {
|
|
1261
|
+
return this._repositoryPassword;
|
|
1262
|
+
}
|
|
1263
|
+
get repositoryUsername() {
|
|
1264
|
+
return this.getStringAttribute('repository_username');
|
|
1265
|
+
}
|
|
1266
|
+
set repositoryUsername(value) {
|
|
1267
|
+
this._repositoryUsername = value;
|
|
1268
|
+
}
|
|
1269
|
+
resetRepositoryUsername() {
|
|
1270
|
+
this._repositoryUsername = undefined;
|
|
1271
|
+
}
|
|
1272
|
+
// Temporarily expose input value. Use with caution.
|
|
1273
|
+
get repositoryUsernameInput() {
|
|
1274
|
+
return this._repositoryUsername;
|
|
1275
|
+
}
|
|
1276
|
+
get resetValues() {
|
|
1277
|
+
return this.getBooleanAttribute('reset_values');
|
|
1278
|
+
}
|
|
1279
|
+
set resetValues(value) {
|
|
1280
|
+
this._resetValues = value;
|
|
1281
|
+
}
|
|
1282
|
+
resetResetValues() {
|
|
1283
|
+
this._resetValues = undefined;
|
|
1284
|
+
}
|
|
1285
|
+
// Temporarily expose input value. Use with caution.
|
|
1286
|
+
get resetValuesInput() {
|
|
1287
|
+
return this._resetValues;
|
|
1288
|
+
}
|
|
1289
|
+
get reuseValues() {
|
|
1290
|
+
return this.getBooleanAttribute('reuse_values');
|
|
1291
|
+
}
|
|
1292
|
+
set reuseValues(value) {
|
|
1293
|
+
this._reuseValues = value;
|
|
1294
|
+
}
|
|
1295
|
+
resetReuseValues() {
|
|
1296
|
+
this._reuseValues = undefined;
|
|
1297
|
+
}
|
|
1298
|
+
// Temporarily expose input value. Use with caution.
|
|
1299
|
+
get reuseValuesInput() {
|
|
1300
|
+
return this._reuseValues;
|
|
1301
|
+
}
|
|
1302
|
+
get set() {
|
|
1303
|
+
return this._set;
|
|
1304
|
+
}
|
|
1305
|
+
putSet(value) {
|
|
1306
|
+
this._set.internalValue = value;
|
|
1307
|
+
}
|
|
1308
|
+
resetSet() {
|
|
1309
|
+
this._set.internalValue = undefined;
|
|
1310
|
+
}
|
|
1311
|
+
// Temporarily expose input value. Use with caution.
|
|
1312
|
+
get setInput() {
|
|
1313
|
+
return this._set.internalValue;
|
|
1314
|
+
}
|
|
1315
|
+
get setList() {
|
|
1316
|
+
return this._setList;
|
|
1317
|
+
}
|
|
1318
|
+
putSetList(value) {
|
|
1319
|
+
this._setList.internalValue = value;
|
|
1320
|
+
}
|
|
1321
|
+
resetSetList() {
|
|
1322
|
+
this._setList.internalValue = undefined;
|
|
1323
|
+
}
|
|
1324
|
+
// Temporarily expose input value. Use with caution.
|
|
1325
|
+
get setListInput() {
|
|
1326
|
+
return this._setList.internalValue;
|
|
1327
|
+
}
|
|
1328
|
+
get setSensitive() {
|
|
1329
|
+
return this._setSensitive;
|
|
1330
|
+
}
|
|
1331
|
+
putSetSensitive(value) {
|
|
1332
|
+
this._setSensitive.internalValue = value;
|
|
1333
|
+
}
|
|
1334
|
+
resetSetSensitive() {
|
|
1335
|
+
this._setSensitive.internalValue = undefined;
|
|
1336
|
+
}
|
|
1337
|
+
// Temporarily expose input value. Use with caution.
|
|
1338
|
+
get setSensitiveInput() {
|
|
1339
|
+
return this._setSensitive.internalValue;
|
|
1340
|
+
}
|
|
1341
|
+
get setWo() {
|
|
1342
|
+
return this._setWo;
|
|
1343
|
+
}
|
|
1344
|
+
putSetWo(value) {
|
|
1345
|
+
this._setWo.internalValue = value;
|
|
1346
|
+
}
|
|
1347
|
+
resetSetWo() {
|
|
1348
|
+
this._setWo.internalValue = undefined;
|
|
1349
|
+
}
|
|
1350
|
+
// Temporarily expose input value. Use with caution.
|
|
1351
|
+
get setWoInput() {
|
|
1352
|
+
return this._setWo.internalValue;
|
|
1353
|
+
}
|
|
1354
|
+
get showOnly() {
|
|
1355
|
+
return this.getListAttribute('show_only');
|
|
1356
|
+
}
|
|
1357
|
+
set showOnly(value) {
|
|
1358
|
+
this._showOnly = value;
|
|
1359
|
+
}
|
|
1360
|
+
resetShowOnly() {
|
|
1361
|
+
this._showOnly = undefined;
|
|
1362
|
+
}
|
|
1363
|
+
// Temporarily expose input value. Use with caution.
|
|
1364
|
+
get showOnlyInput() {
|
|
1365
|
+
return this._showOnly;
|
|
1366
|
+
}
|
|
1367
|
+
get skipCrds() {
|
|
1368
|
+
return this.getBooleanAttribute('skip_crds');
|
|
1369
|
+
}
|
|
1370
|
+
set skipCrds(value) {
|
|
1371
|
+
this._skipCrds = value;
|
|
1372
|
+
}
|
|
1373
|
+
resetSkipCrds() {
|
|
1374
|
+
this._skipCrds = undefined;
|
|
1375
|
+
}
|
|
1376
|
+
// Temporarily expose input value. Use with caution.
|
|
1377
|
+
get skipCrdsInput() {
|
|
1378
|
+
return this._skipCrds;
|
|
1379
|
+
}
|
|
1380
|
+
get skipTests() {
|
|
1381
|
+
return this.getBooleanAttribute('skip_tests');
|
|
1382
|
+
}
|
|
1383
|
+
set skipTests(value) {
|
|
1384
|
+
this._skipTests = value;
|
|
1385
|
+
}
|
|
1386
|
+
resetSkipTests() {
|
|
1387
|
+
this._skipTests = undefined;
|
|
1388
|
+
}
|
|
1389
|
+
// Temporarily expose input value. Use with caution.
|
|
1390
|
+
get skipTestsInput() {
|
|
1391
|
+
return this._skipTests;
|
|
1392
|
+
}
|
|
1393
|
+
get timeout() {
|
|
1394
|
+
return this.getNumberAttribute('timeout');
|
|
1395
|
+
}
|
|
1396
|
+
set timeout(value) {
|
|
1397
|
+
this._timeout = value;
|
|
1398
|
+
}
|
|
1399
|
+
resetTimeout() {
|
|
1400
|
+
this._timeout = undefined;
|
|
1401
|
+
}
|
|
1402
|
+
// Temporarily expose input value. Use with caution.
|
|
1403
|
+
get timeoutInput() {
|
|
1404
|
+
return this._timeout;
|
|
1405
|
+
}
|
|
1406
|
+
get timeouts() {
|
|
1407
|
+
return this._timeouts;
|
|
1408
|
+
}
|
|
1409
|
+
putTimeouts(value) {
|
|
1410
|
+
this._timeouts.internalValue = value;
|
|
1411
|
+
}
|
|
1412
|
+
resetTimeouts() {
|
|
1413
|
+
this._timeouts.internalValue = undefined;
|
|
1414
|
+
}
|
|
1415
|
+
// Temporarily expose input value. Use with caution.
|
|
1416
|
+
get timeoutsInput() {
|
|
1417
|
+
return this._timeouts.internalValue;
|
|
1418
|
+
}
|
|
1419
|
+
get validate() {
|
|
1420
|
+
return this.getBooleanAttribute('validate');
|
|
1421
|
+
}
|
|
1422
|
+
set validate(value) {
|
|
1423
|
+
this._validate = value;
|
|
1424
|
+
}
|
|
1425
|
+
resetValidate() {
|
|
1426
|
+
this._validate = undefined;
|
|
1427
|
+
}
|
|
1428
|
+
// Temporarily expose input value. Use with caution.
|
|
1429
|
+
get validateInput() {
|
|
1430
|
+
return this._validate;
|
|
1431
|
+
}
|
|
1432
|
+
get values() {
|
|
1433
|
+
return this.getListAttribute('values');
|
|
1434
|
+
}
|
|
1435
|
+
set values(value) {
|
|
1436
|
+
this._values = value;
|
|
1437
|
+
}
|
|
1438
|
+
resetTfValues() {
|
|
1439
|
+
this._values = undefined;
|
|
1440
|
+
}
|
|
1441
|
+
// Temporarily expose input value. Use with caution.
|
|
1442
|
+
get valuesInput() {
|
|
1443
|
+
return this._values;
|
|
1444
|
+
}
|
|
1445
|
+
get verify() {
|
|
1446
|
+
return this.getBooleanAttribute('verify');
|
|
1447
|
+
}
|
|
1448
|
+
set verify(value) {
|
|
1449
|
+
this._verify = value;
|
|
1450
|
+
}
|
|
1451
|
+
resetVerify() {
|
|
1452
|
+
this._verify = undefined;
|
|
1453
|
+
}
|
|
1454
|
+
// Temporarily expose input value. Use with caution.
|
|
1455
|
+
get verifyInput() {
|
|
1456
|
+
return this._verify;
|
|
1457
|
+
}
|
|
1458
|
+
get version() {
|
|
1459
|
+
return this.getStringAttribute('version');
|
|
1460
|
+
}
|
|
1461
|
+
set version(value) {
|
|
1462
|
+
this._version = value;
|
|
1463
|
+
}
|
|
1464
|
+
resetVersion() {
|
|
1465
|
+
this._version = undefined;
|
|
1466
|
+
}
|
|
1467
|
+
// Temporarily expose input value. Use with caution.
|
|
1468
|
+
get versionInput() {
|
|
1469
|
+
return this._version;
|
|
1470
|
+
}
|
|
1471
|
+
get wait() {
|
|
1472
|
+
return this.getBooleanAttribute('wait');
|
|
1473
|
+
}
|
|
1474
|
+
set wait(value) {
|
|
1475
|
+
this._wait = value;
|
|
1476
|
+
}
|
|
1477
|
+
resetWait() {
|
|
1478
|
+
this._wait = undefined;
|
|
1479
|
+
}
|
|
1480
|
+
// Temporarily expose input value. Use with caution.
|
|
1481
|
+
get waitInput() {
|
|
1482
|
+
return this._wait;
|
|
1483
|
+
}
|
|
1484
|
+
// =========
|
|
1485
|
+
// SYNTHESIS
|
|
1486
|
+
// =========
|
|
1487
|
+
synthesizeAttributes() {
|
|
1488
|
+
return {
|
|
1489
|
+
api_versions: cdktn.listMapper(cdktn.stringToTerraform, false)(this._apiVersions),
|
|
1490
|
+
atomic: cdktn.booleanToTerraform(this._atomic),
|
|
1491
|
+
chart: cdktn.stringToTerraform(this._chart),
|
|
1492
|
+
crds: cdktn.listMapper(cdktn.stringToTerraform, false)(this._crds),
|
|
1493
|
+
create_namespace: cdktn.booleanToTerraform(this._createNamespace),
|
|
1494
|
+
dependency_update: cdktn.booleanToTerraform(this._dependencyUpdate),
|
|
1495
|
+
description: cdktn.stringToTerraform(this._description),
|
|
1496
|
+
devel: cdktn.booleanToTerraform(this._devel),
|
|
1497
|
+
disable_openapi_validation: cdktn.booleanToTerraform(this._disableOpenapiValidation),
|
|
1498
|
+
disable_webhooks: cdktn.booleanToTerraform(this._disableWebhooks),
|
|
1499
|
+
include_crds: cdktn.booleanToTerraform(this._includeCrds),
|
|
1500
|
+
is_upgrade: cdktn.booleanToTerraform(this._isUpgrade),
|
|
1501
|
+
keyring: cdktn.stringToTerraform(this._keyring),
|
|
1502
|
+
kube_version: cdktn.stringToTerraform(this._kubeVersion),
|
|
1503
|
+
manifest: cdktn.stringToTerraform(this._manifest),
|
|
1504
|
+
manifests: cdktn.hashMapper(cdktn.stringToTerraform)(this._manifests),
|
|
1505
|
+
name: cdktn.stringToTerraform(this._name),
|
|
1506
|
+
namespace: cdktn.stringToTerraform(this._namespace),
|
|
1507
|
+
notes: cdktn.stringToTerraform(this._notes),
|
|
1508
|
+
pass_credentials: cdktn.booleanToTerraform(this._passCredentials),
|
|
1509
|
+
postrender: dataHelmTemplatePostrenderToTerraform(this._postrender.internalValue),
|
|
1510
|
+
render_subchart_notes: cdktn.booleanToTerraform(this._renderSubchartNotes),
|
|
1511
|
+
replace: cdktn.booleanToTerraform(this._replace),
|
|
1512
|
+
repository: cdktn.stringToTerraform(this._repository),
|
|
1513
|
+
repository_ca_file: cdktn.stringToTerraform(this._repositoryCaFile),
|
|
1514
|
+
repository_cert_file: cdktn.stringToTerraform(this._repositoryCertFile),
|
|
1515
|
+
repository_key_file: cdktn.stringToTerraform(this._repositoryKeyFile),
|
|
1516
|
+
repository_password: cdktn.stringToTerraform(this._repositoryPassword),
|
|
1517
|
+
repository_username: cdktn.stringToTerraform(this._repositoryUsername),
|
|
1518
|
+
reset_values: cdktn.booleanToTerraform(this._resetValues),
|
|
1519
|
+
reuse_values: cdktn.booleanToTerraform(this._reuseValues),
|
|
1520
|
+
set: cdktn.listMapper(dataHelmTemplateSetToTerraform, false)(this._set.internalValue),
|
|
1521
|
+
set_list: cdktn.listMapper(dataHelmTemplateSetListStructToTerraform, false)(this._setList.internalValue),
|
|
1522
|
+
set_sensitive: cdktn.listMapper(dataHelmTemplateSetSensitiveToTerraform, false)(this._setSensitive.internalValue),
|
|
1523
|
+
set_wo: cdktn.listMapper(dataHelmTemplateSetWoToTerraform, false)(this._setWo.internalValue),
|
|
1524
|
+
show_only: cdktn.listMapper(cdktn.stringToTerraform, false)(this._showOnly),
|
|
1525
|
+
skip_crds: cdktn.booleanToTerraform(this._skipCrds),
|
|
1526
|
+
skip_tests: cdktn.booleanToTerraform(this._skipTests),
|
|
1527
|
+
timeout: cdktn.numberToTerraform(this._timeout),
|
|
1528
|
+
timeouts: dataHelmTemplateTimeoutsToTerraform(this._timeouts.internalValue),
|
|
1529
|
+
validate: cdktn.booleanToTerraform(this._validate),
|
|
1530
|
+
values: cdktn.listMapper(cdktn.stringToTerraform, false)(this._values),
|
|
1531
|
+
verify: cdktn.booleanToTerraform(this._verify),
|
|
1532
|
+
version: cdktn.stringToTerraform(this._version),
|
|
1533
|
+
wait: cdktn.booleanToTerraform(this._wait),
|
|
1534
|
+
};
|
|
1535
|
+
}
|
|
1536
|
+
synthesizeHclAttributes() {
|
|
1537
|
+
const attrs = {
|
|
1538
|
+
api_versions: {
|
|
1539
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._apiVersions),
|
|
1540
|
+
isBlock: false,
|
|
1541
|
+
type: "list",
|
|
1542
|
+
storageClassType: "stringList",
|
|
1543
|
+
},
|
|
1544
|
+
atomic: {
|
|
1545
|
+
value: cdktn.booleanToHclTerraform(this._atomic),
|
|
1546
|
+
isBlock: false,
|
|
1547
|
+
type: "simple",
|
|
1548
|
+
storageClassType: "boolean",
|
|
1549
|
+
},
|
|
1550
|
+
chart: {
|
|
1551
|
+
value: cdktn.stringToHclTerraform(this._chart),
|
|
1552
|
+
isBlock: false,
|
|
1553
|
+
type: "simple",
|
|
1554
|
+
storageClassType: "string",
|
|
1555
|
+
},
|
|
1556
|
+
crds: {
|
|
1557
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._crds),
|
|
1558
|
+
isBlock: false,
|
|
1559
|
+
type: "list",
|
|
1560
|
+
storageClassType: "stringList",
|
|
1561
|
+
},
|
|
1562
|
+
create_namespace: {
|
|
1563
|
+
value: cdktn.booleanToHclTerraform(this._createNamespace),
|
|
1564
|
+
isBlock: false,
|
|
1565
|
+
type: "simple",
|
|
1566
|
+
storageClassType: "boolean",
|
|
1567
|
+
},
|
|
1568
|
+
dependency_update: {
|
|
1569
|
+
value: cdktn.booleanToHclTerraform(this._dependencyUpdate),
|
|
1570
|
+
isBlock: false,
|
|
1571
|
+
type: "simple",
|
|
1572
|
+
storageClassType: "boolean",
|
|
1573
|
+
},
|
|
1574
|
+
description: {
|
|
1575
|
+
value: cdktn.stringToHclTerraform(this._description),
|
|
1576
|
+
isBlock: false,
|
|
1577
|
+
type: "simple",
|
|
1578
|
+
storageClassType: "string",
|
|
1579
|
+
},
|
|
1580
|
+
devel: {
|
|
1581
|
+
value: cdktn.booleanToHclTerraform(this._devel),
|
|
1582
|
+
isBlock: false,
|
|
1583
|
+
type: "simple",
|
|
1584
|
+
storageClassType: "boolean",
|
|
1585
|
+
},
|
|
1586
|
+
disable_openapi_validation: {
|
|
1587
|
+
value: cdktn.booleanToHclTerraform(this._disableOpenapiValidation),
|
|
1588
|
+
isBlock: false,
|
|
1589
|
+
type: "simple",
|
|
1590
|
+
storageClassType: "boolean",
|
|
1591
|
+
},
|
|
1592
|
+
disable_webhooks: {
|
|
1593
|
+
value: cdktn.booleanToHclTerraform(this._disableWebhooks),
|
|
1594
|
+
isBlock: false,
|
|
1595
|
+
type: "simple",
|
|
1596
|
+
storageClassType: "boolean",
|
|
1597
|
+
},
|
|
1598
|
+
include_crds: {
|
|
1599
|
+
value: cdktn.booleanToHclTerraform(this._includeCrds),
|
|
1600
|
+
isBlock: false,
|
|
1601
|
+
type: "simple",
|
|
1602
|
+
storageClassType: "boolean",
|
|
1603
|
+
},
|
|
1604
|
+
is_upgrade: {
|
|
1605
|
+
value: cdktn.booleanToHclTerraform(this._isUpgrade),
|
|
1606
|
+
isBlock: false,
|
|
1607
|
+
type: "simple",
|
|
1608
|
+
storageClassType: "boolean",
|
|
1609
|
+
},
|
|
1610
|
+
keyring: {
|
|
1611
|
+
value: cdktn.stringToHclTerraform(this._keyring),
|
|
1612
|
+
isBlock: false,
|
|
1613
|
+
type: "simple",
|
|
1614
|
+
storageClassType: "string",
|
|
1615
|
+
},
|
|
1616
|
+
kube_version: {
|
|
1617
|
+
value: cdktn.stringToHclTerraform(this._kubeVersion),
|
|
1618
|
+
isBlock: false,
|
|
1619
|
+
type: "simple",
|
|
1620
|
+
storageClassType: "string",
|
|
1621
|
+
},
|
|
1622
|
+
manifest: {
|
|
1623
|
+
value: cdktn.stringToHclTerraform(this._manifest),
|
|
1624
|
+
isBlock: false,
|
|
1625
|
+
type: "simple",
|
|
1626
|
+
storageClassType: "string",
|
|
1627
|
+
},
|
|
1628
|
+
manifests: {
|
|
1629
|
+
value: cdktn.hashMapperHcl(cdktn.stringToHclTerraform)(this._manifests),
|
|
1630
|
+
isBlock: false,
|
|
1631
|
+
type: "map",
|
|
1632
|
+
storageClassType: "stringMap",
|
|
1633
|
+
},
|
|
1634
|
+
name: {
|
|
1635
|
+
value: cdktn.stringToHclTerraform(this._name),
|
|
1636
|
+
isBlock: false,
|
|
1637
|
+
type: "simple",
|
|
1638
|
+
storageClassType: "string",
|
|
1639
|
+
},
|
|
1640
|
+
namespace: {
|
|
1641
|
+
value: cdktn.stringToHclTerraform(this._namespace),
|
|
1642
|
+
isBlock: false,
|
|
1643
|
+
type: "simple",
|
|
1644
|
+
storageClassType: "string",
|
|
1645
|
+
},
|
|
1646
|
+
notes: {
|
|
1647
|
+
value: cdktn.stringToHclTerraform(this._notes),
|
|
1648
|
+
isBlock: false,
|
|
1649
|
+
type: "simple",
|
|
1650
|
+
storageClassType: "string",
|
|
1651
|
+
},
|
|
1652
|
+
pass_credentials: {
|
|
1653
|
+
value: cdktn.booleanToHclTerraform(this._passCredentials),
|
|
1654
|
+
isBlock: false,
|
|
1655
|
+
type: "simple",
|
|
1656
|
+
storageClassType: "boolean",
|
|
1657
|
+
},
|
|
1658
|
+
postrender: {
|
|
1659
|
+
value: dataHelmTemplatePostrenderToHclTerraform(this._postrender.internalValue),
|
|
1660
|
+
isBlock: true,
|
|
1661
|
+
type: "struct",
|
|
1662
|
+
storageClassType: "DataHelmTemplatePostrender",
|
|
1663
|
+
},
|
|
1664
|
+
render_subchart_notes: {
|
|
1665
|
+
value: cdktn.booleanToHclTerraform(this._renderSubchartNotes),
|
|
1666
|
+
isBlock: false,
|
|
1667
|
+
type: "simple",
|
|
1668
|
+
storageClassType: "boolean",
|
|
1669
|
+
},
|
|
1670
|
+
replace: {
|
|
1671
|
+
value: cdktn.booleanToHclTerraform(this._replace),
|
|
1672
|
+
isBlock: false,
|
|
1673
|
+
type: "simple",
|
|
1674
|
+
storageClassType: "boolean",
|
|
1675
|
+
},
|
|
1676
|
+
repository: {
|
|
1677
|
+
value: cdktn.stringToHclTerraform(this._repository),
|
|
1678
|
+
isBlock: false,
|
|
1679
|
+
type: "simple",
|
|
1680
|
+
storageClassType: "string",
|
|
1681
|
+
},
|
|
1682
|
+
repository_ca_file: {
|
|
1683
|
+
value: cdktn.stringToHclTerraform(this._repositoryCaFile),
|
|
1684
|
+
isBlock: false,
|
|
1685
|
+
type: "simple",
|
|
1686
|
+
storageClassType: "string",
|
|
1687
|
+
},
|
|
1688
|
+
repository_cert_file: {
|
|
1689
|
+
value: cdktn.stringToHclTerraform(this._repositoryCertFile),
|
|
1690
|
+
isBlock: false,
|
|
1691
|
+
type: "simple",
|
|
1692
|
+
storageClassType: "string",
|
|
1693
|
+
},
|
|
1694
|
+
repository_key_file: {
|
|
1695
|
+
value: cdktn.stringToHclTerraform(this._repositoryKeyFile),
|
|
1696
|
+
isBlock: false,
|
|
1697
|
+
type: "simple",
|
|
1698
|
+
storageClassType: "string",
|
|
1699
|
+
},
|
|
1700
|
+
repository_password: {
|
|
1701
|
+
value: cdktn.stringToHclTerraform(this._repositoryPassword),
|
|
1702
|
+
isBlock: false,
|
|
1703
|
+
type: "simple",
|
|
1704
|
+
storageClassType: "string",
|
|
1705
|
+
},
|
|
1706
|
+
repository_username: {
|
|
1707
|
+
value: cdktn.stringToHclTerraform(this._repositoryUsername),
|
|
1708
|
+
isBlock: false,
|
|
1709
|
+
type: "simple",
|
|
1710
|
+
storageClassType: "string",
|
|
1711
|
+
},
|
|
1712
|
+
reset_values: {
|
|
1713
|
+
value: cdktn.booleanToHclTerraform(this._resetValues),
|
|
1714
|
+
isBlock: false,
|
|
1715
|
+
type: "simple",
|
|
1716
|
+
storageClassType: "boolean",
|
|
1717
|
+
},
|
|
1718
|
+
reuse_values: {
|
|
1719
|
+
value: cdktn.booleanToHclTerraform(this._reuseValues),
|
|
1720
|
+
isBlock: false,
|
|
1721
|
+
type: "simple",
|
|
1722
|
+
storageClassType: "boolean",
|
|
1723
|
+
},
|
|
1724
|
+
set: {
|
|
1725
|
+
value: cdktn.listMapperHcl(dataHelmTemplateSetToHclTerraform, false)(this._set.internalValue),
|
|
1726
|
+
isBlock: true,
|
|
1727
|
+
type: "set",
|
|
1728
|
+
storageClassType: "DataHelmTemplateSetList",
|
|
1729
|
+
},
|
|
1730
|
+
set_list: {
|
|
1731
|
+
value: cdktn.listMapperHcl(dataHelmTemplateSetListStructToHclTerraform, false)(this._setList.internalValue),
|
|
1732
|
+
isBlock: true,
|
|
1733
|
+
type: "list",
|
|
1734
|
+
storageClassType: "DataHelmTemplateSetListStructList",
|
|
1735
|
+
},
|
|
1736
|
+
set_sensitive: {
|
|
1737
|
+
value: cdktn.listMapperHcl(dataHelmTemplateSetSensitiveToHclTerraform, false)(this._setSensitive.internalValue),
|
|
1738
|
+
isBlock: true,
|
|
1739
|
+
type: "set",
|
|
1740
|
+
storageClassType: "DataHelmTemplateSetSensitiveList",
|
|
1741
|
+
},
|
|
1742
|
+
set_wo: {
|
|
1743
|
+
value: cdktn.listMapperHcl(dataHelmTemplateSetWoToHclTerraform, false)(this._setWo.internalValue),
|
|
1744
|
+
isBlock: true,
|
|
1745
|
+
type: "list",
|
|
1746
|
+
storageClassType: "DataHelmTemplateSetWoList",
|
|
1747
|
+
},
|
|
1748
|
+
show_only: {
|
|
1749
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._showOnly),
|
|
1750
|
+
isBlock: false,
|
|
1751
|
+
type: "list",
|
|
1752
|
+
storageClassType: "stringList",
|
|
1753
|
+
},
|
|
1754
|
+
skip_crds: {
|
|
1755
|
+
value: cdktn.booleanToHclTerraform(this._skipCrds),
|
|
1756
|
+
isBlock: false,
|
|
1757
|
+
type: "simple",
|
|
1758
|
+
storageClassType: "boolean",
|
|
1759
|
+
},
|
|
1760
|
+
skip_tests: {
|
|
1761
|
+
value: cdktn.booleanToHclTerraform(this._skipTests),
|
|
1762
|
+
isBlock: false,
|
|
1763
|
+
type: "simple",
|
|
1764
|
+
storageClassType: "boolean",
|
|
1765
|
+
},
|
|
1766
|
+
timeout: {
|
|
1767
|
+
value: cdktn.numberToHclTerraform(this._timeout),
|
|
1768
|
+
isBlock: false,
|
|
1769
|
+
type: "simple",
|
|
1770
|
+
storageClassType: "number",
|
|
1771
|
+
},
|
|
1772
|
+
timeouts: {
|
|
1773
|
+
value: dataHelmTemplateTimeoutsToHclTerraform(this._timeouts.internalValue),
|
|
1774
|
+
isBlock: true,
|
|
1775
|
+
type: "struct",
|
|
1776
|
+
storageClassType: "DataHelmTemplateTimeouts",
|
|
1777
|
+
},
|
|
1778
|
+
validate: {
|
|
1779
|
+
value: cdktn.booleanToHclTerraform(this._validate),
|
|
1780
|
+
isBlock: false,
|
|
1781
|
+
type: "simple",
|
|
1782
|
+
storageClassType: "boolean",
|
|
1783
|
+
},
|
|
1784
|
+
values: {
|
|
1785
|
+
value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._values),
|
|
1786
|
+
isBlock: false,
|
|
1787
|
+
type: "list",
|
|
1788
|
+
storageClassType: "stringList",
|
|
1789
|
+
},
|
|
1790
|
+
verify: {
|
|
1791
|
+
value: cdktn.booleanToHclTerraform(this._verify),
|
|
1792
|
+
isBlock: false,
|
|
1793
|
+
type: "simple",
|
|
1794
|
+
storageClassType: "boolean",
|
|
1795
|
+
},
|
|
1796
|
+
version: {
|
|
1797
|
+
value: cdktn.stringToHclTerraform(this._version),
|
|
1798
|
+
isBlock: false,
|
|
1799
|
+
type: "simple",
|
|
1800
|
+
storageClassType: "string",
|
|
1801
|
+
},
|
|
1802
|
+
wait: {
|
|
1803
|
+
value: cdktn.booleanToHclTerraform(this._wait),
|
|
1804
|
+
isBlock: false,
|
|
1805
|
+
type: "simple",
|
|
1806
|
+
storageClassType: "boolean",
|
|
1807
|
+
},
|
|
1808
|
+
};
|
|
1809
|
+
// remove undefined attributes
|
|
1810
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
1811
|
+
}
|
|
1812
|
+
}
|
|
1813
|
+
exports.DataHelmTemplate = DataHelmTemplate;
|
|
1814
|
+
_l = JSII_RTTI_SYMBOL_1;
|
|
1815
|
+
DataHelmTemplate[_l] = { fqn: "@cdktn/provider-helm.dataHelmTemplate.DataHelmTemplate", version: "12.2.0" };
|
|
1816
|
+
// =================
|
|
1817
|
+
// STATIC PROPERTIES
|
|
1818
|
+
// =================
|
|
1819
|
+
DataHelmTemplate.tfResourceType = "helm_template";
|
|
1820
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS1oZWxtLXRlbXBsYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUEwU0Esc0ZBU0M7QUFHRCw0RkFzQkM7QUE4RkQsd0VBVUM7QUFHRCw4RUE0QkM7QUFzSUQsNEZBU0M7QUFHRCxrR0FzQkM7QUFvSEQsMEZBVUM7QUFHRCxnR0E0QkM7QUF1SUQsNEVBVUM7QUFHRCxrRkE0QkM7QUFpSUQsa0ZBUUM7QUFHRCx3RkFnQkM7O0FBM2xDRCwrQkFBK0I7QUFpUy9CLFNBQWdCLHFDQUFxQyxDQUFDLE1BQXVEO0lBQzNHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE9BQU87UUFDTCxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTyxDQUFDLElBQUksQ0FBQztRQUNwRSxXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU8sQ0FBQyxVQUFVLENBQUM7S0FDekQsQ0FBQTtBQUNILENBQUM7QUFHRCxTQUFnQix3Q0FBd0MsQ0FBQyxNQUF1RDtJQUM5RyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxNQUFNLENBQUM7SUFBQyxDQUFDO0lBQzVG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QUUsWUFBWTthQUMvQjtZQUNELE1BQU0sRUFBRTtnQkFDTixLQUFLLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ2hELE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFNBQVM7YUFDNUI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxPQUFPLEVBQUUsS0FBSztnQkFDZCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxnQkFBZ0IsRUFBRSxRQUFRO2FBQzNCO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDOUMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsZ0JBQWdCLEVBQUUsU0FBUzthQUM1QjtTQUNGLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUUsQ0FBQyxDQUFBO0lBQzVILENBQUM7O0FBNW5DSCw0Q0E2bkNDOzs7QUEzbkNDLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ0csK0JBQWMsR0FBRyxlQUFlLEFBQWxCLENBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMjEsIDIwMjZcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuLy8gaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlXG4vLyBnZW5lcmF0ZWQgZnJvbSB0ZXJyYWZvcm0gcmVzb3VyY2Ugc2NoZW1hXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgY2RrdG4gZnJvbSAnY2RrdG4nO1xuXG4vLyBDb25maWd1cmF0aW9uXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUhlbG1UZW1wbGF0ZUNvbmZpZyBleHRlbmRzIGNka3RuLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgKiBLdWJlcm5ldGVzIGFwaSB2ZXJzaW9ucyB1c2VkIGZvciBDYXBhYmlsaXRpZXMuQVBJVmVyc2lvbnMuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNhcGlfdmVyc2lvbnMgRGF0YUhlbG1UZW1wbGF0ZSNhcGlfdmVyc2lvbnN9XG4gICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb25zPzogc3RyaW5nW107XG4gIC8qKlxuICAqIElmIHNldCwgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzIHB1cmdlcyB0aGUgY2hhcnQgb24gZmFpbC4gVGhlICd3YWl0JyBmbGFnIHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgaWYgJ2F0b21pYycgaXMgdXNlZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI2F0b21pYyBEYXRhSGVsbVRlbXBsYXRlI2F0b21pY31cbiAgKi9cbiAgcmVhZG9ubHkgYXRvbWljPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBDaGFydCBuYW1lIHRvIGJlIGluc3RhbGxlZC4gQSBwYXRoIG1heSBiZSB1c2VkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjY2hhcnQgRGF0YUhlbG1UZW1wbGF0ZSNjaGFydH1cbiAgKi9cbiAgcmVhZG9ubHkgY2hhcnQ6IHN0cmluZztcbiAgLyoqXG4gICogTGlzdCBvZiByZW5kZXJlZCBDUkRzIGZyb20gdGhlIGNoYXJ0LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjY3JkcyBEYXRhSGVsbVRlbXBsYXRlI2NyZHN9XG4gICovXG4gIHJlYWRvbmx5IGNyZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICogQ3JlYXRlIHRoZSBuYW1lc3BhY2UgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNjcmVhdGVfbmFtZXNwYWNlIERhdGFIZWxtVGVtcGxhdGUjY3JlYXRlX25hbWVzcGFjZX1cbiAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlTmFtZXNwYWNlPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBSdW4gaGVsbSBkZXBlbmRlbmN5IHVwZGF0ZSBiZWZvcmUgaW5zdGFsbGluZyB0aGUgY2hhcnQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNkZXBlbmRlbmN5X3VwZGF0ZSBEYXRhSGVsbVRlbXBsYXRlI2RlcGVuZGVuY3lfdXBkYXRlfVxuICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5VXBkYXRlPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBBZGQgYSBjdXN0b20gZGVzY3JpcHRpb24uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNkZXNjcmlwdGlvbiBEYXRhSGVsbVRlbXBsYXRlI2Rlc2NyaXB0aW9ufVxuICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICogVXNlIGNoYXJ0IGRldmVsb3BtZW50IHZlcnNpb25zLCB0b28uIEVxdWl2YWxlbnQgdG8gdmVyc2lvbiAnPjAuMC4wLTAnLiBJZiBgdmVyc2lvbmAgaXMgc2V0LCB0aGlzIGlzIGlnbm9yZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNkZXZlbCBEYXRhSGVsbVRlbXBsYXRlI2RldmVsfVxuICAqL1xuICByZWFkb25seSBkZXZlbD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogSWYgc2V0LCB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdmFsaWRhdGUgcmVuZGVyZWQgdGVtcGxhdGVzIGFnYWluc3QgdGhlIEt1YmVybmV0ZXMgT3BlbkFQSSBTY2hlbWEuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNkaXNhYmxlX29wZW5hcGlfdmFsaWRhdGlvbiBEYXRhSGVsbVRlbXBsYXRlI2Rpc2FibGVfb3BlbmFwaV92YWxpZGF0aW9ufVxuICAqL1xuICByZWFkb25seSBkaXNhYmxlT3BlbmFwaVZhbGlkYXRpb24/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFByZXZlbnQgaG9va3MgZnJvbSBydW5uaW5nLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjZGlzYWJsZV93ZWJob29rcyBEYXRhSGVsbVRlbXBsYXRlI2Rpc2FibGVfd2ViaG9va3N9XG4gICovXG4gIHJlYWRvbmx5IGRpc2FibGVXZWJob29rcz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogSW5jbHVkZSBDUkRzIGluIHRoZSB0ZW1wbGF0ZWQgb3V0cHV0LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjaW5jbHVkZV9jcmRzIERhdGFIZWxtVGVtcGxhdGUjaW5jbHVkZV9jcmRzfVxuICAqL1xuICByZWFkb25seSBpbmNsdWRlQ3Jkcz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogU2V0IC5SZWxlYXNlLklzVXBncmFkZSBpbnN0ZWFkIG9mIC5SZWxlYXNlLklzSW5zdGFsbC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI2lzX3VwZ3JhZGUgRGF0YUhlbG1UZW1wbGF0ZSNpc191cGdyYWRlfVxuICAqL1xuICByZWFkb25seSBpc1VwZ3JhZGU/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIExvY2F0aW9uIG9mIHB1YmxpYyBrZXlzIHVzZWQgZm9yIHZlcmlmaWNhdGlvbi4gVXNlZCBvbmx5IGlmIGB2ZXJpZnlgIGlzIHRydWUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNrZXlyaW5nIERhdGFIZWxtVGVtcGxhdGUja2V5cmluZ31cbiAgKi9cbiAgcmVhZG9ubHkga2V5cmluZz86IHN0cmluZztcbiAgLyoqXG4gICogS3ViZXJuZXRlcyB2ZXJzaW9uIHVzZWQgZm9yIENhcGFiaWxpdGllcy5LdWJlVmVyc2lvbi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI2t1YmVfdmVyc2lvbiBEYXRhSGVsbVRlbXBsYXRlI2t1YmVfdmVyc2lvbn1cbiAgKi9cbiAgcmVhZG9ubHkga3ViZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAqIENvbmNhdGVuYXRlZCByZW5kZXJlZCBjaGFydCB0ZW1wbGF0ZXMuIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIG91dHB1dCBvZiB0aGUgYGhlbG0gdGVtcGxhdGVgIGNvbW1hbmQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNtYW5pZmVzdCBEYXRhSGVsbVRlbXBsYXRlI21hbmlmZXN0fVxuICAqL1xuICByZWFkb25seSBtYW5pZmVzdD86IHN0cmluZztcbiAgLyoqXG4gICogTWFwIG9mIHJlbmRlcmVkIGNoYXJ0IHRlbXBsYXRlcyBpbmRleGVkIGJ5IHRoZSB0ZW1wbGF0ZSBuYW1lLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjbWFuaWZlc3RzIERhdGFIZWxtVGVtcGxhdGUjbWFuaWZlc3RzfVxuICAqL1xuICByZWFkb25seSBtYW5pZmVzdHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgKiBSZWxlYXNlIG5hbWVcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI25hbWUgRGF0YUhlbG1UZW1wbGF0ZSNuYW1lfVxuICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAqIE5hbWVzcGFjZSB0byBpbnN0YWxsIHRoZSByZWxlYXNlIGludG8uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNuYW1lc3BhY2UgRGF0YUhlbG1UZW1wbGF0ZSNuYW1lc3BhY2V9XG4gICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICogUmVuZGVyZWQgbm90ZXMgaWYgdGhlIGNoYXJ0IGNvbnRhaW5zIGEgYE5PVEVTLnR4dGAuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNub3RlcyBEYXRhSGVsbVRlbXBsYXRlI25vdGVzfVxuICAqL1xuICByZWFkb25seSBub3Rlcz86IHN0cmluZztcbiAgLyoqXG4gICogUGFzcyBjcmVkZW50aWFscyB0byBhbGwgZG9tYWluc1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjcGFzc19jcmVkZW50aWFscyBEYXRhSGVsbVRlbXBsYXRlI3Bhc3NfY3JlZGVudGlhbHN9XG4gICovXG4gIHJlYWRvbmx5IHBhc3NDcmVkZW50aWFscz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogUG9zdHJlbmRlciBjb21tYW5kIGNvbmZpZ1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjcG9zdHJlbmRlciBEYXRhSGVsbVRlbXBsYXRlI3Bvc3RyZW5kZXJ9XG4gICovXG4gIHJlYWRvbmx5IHBvc3RyZW5kZXI/OiBEYXRhSGVsbVRlbXBsYXRlUG9zdHJlbmRlcjtcbiAgLyoqXG4gICogSWYgc2V0LCByZW5kZXIgc3ViY2hhcnQgbm90ZXMgYWxvbmcgd2l0aCB0aGUgcGFyZW50LlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjcmVuZGVyX3N1YmNoYXJ0X25vdGVzIERhdGFIZWxtVGVtcGxhdGUjcmVuZGVyX3N1YmNoYXJ0X25vdGVzfVxuICAqL1xuICByZWFkb25seSByZW5kZXJTdWJjaGFydE5vdGVzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBSZS11c2UgdGhlIGdpdmVuIG5hbWUsIGV2ZW4gaWYgdGhhdCBuYW1lIGlzIGFscmVhZHkgdXNlZC4gVGhpcyBpcyB1bnNhZmUgaW4gcHJvZHVjdGlvbi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3JlcGxhY2UgRGF0YUhlbG1UZW1wbGF0ZSNyZXBsYWNlfVxuICAqL1xuICByZWFkb25seSByZXBsYWNlPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBSZXBvc2l0b3J5IHdoZXJlIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGNoYXJ0LiBJZiBpdCBpcyBhIFVSTCB0aGUgY2hhcnQgaXMgaW5zdGFsbGVkIHdpdGhvdXQgaW5zdGFsbGluZyB0aGUgcmVwb3NpdG9yeS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3JlcG9zaXRvcnkgRGF0YUhlbG1UZW1wbGF0ZSNyZXBvc2l0b3J5fVxuICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgcmVwb3NpdG9yeSdzIENBIGZpbGVcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3JlcG9zaXRvcnlfY2FfZmlsZSBEYXRhSGVsbVRlbXBsYXRlI3JlcG9zaXRvcnlfY2FfZmlsZX1cbiAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeUNhRmlsZT86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIHJlcG9zaXRvcnkncyBjZXJ0IGZpbGVcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3JlcG9zaXRvcnlfY2VydF9maWxlIERhdGFIZWxtVGVtcGxhdGUjcmVwb3NpdG9yeV9jZXJ0X2ZpbGV9XG4gICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlDZXJ0RmlsZT86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIHJlcG9zaXRvcnkncyBjZXJ0IGtleSBmaWxlXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNyZXBvc2l0b3J5X2tleV9maWxlIERhdGFIZWxtVGVtcGxhdGUjcmVwb3NpdG9yeV9rZXlfZmlsZX1cbiAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeUtleUZpbGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFBhc3N3b3JkIGZvciBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNyZXBvc2l0b3J5X3Bhc3N3b3JkIERhdGFIZWxtVGVtcGxhdGUjcmVwb3NpdG9yeV9wYXNzd29yZH1cbiAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeVBhc3N3b3JkPzogc3RyaW5nO1xuICAvKipcbiAgKiBVc2VybmFtZSBmb3IgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjcmVwb3NpdG9yeV91c2VybmFtZSBEYXRhSGVsbVRlbXBsYXRlI3JlcG9zaXRvcnlfdXNlcm5hbWV9XG4gICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlVc2VybmFtZT86IHN0cmluZztcbiAgLyoqXG4gICogV2hlbiB1cGdyYWRpbmcsIHJlc2V0IHRoZSB2YWx1ZXMgdG8gdGhlIG9uZXMgYnVpbHQgaW50byB0aGUgY2hhcnQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNyZXNldF92YWx1ZXMgRGF0YUhlbG1UZW1wbGF0ZSNyZXNldF92YWx1ZXN9XG4gICovXG4gIHJlYWRvbmx5IHJlc2V0VmFsdWVzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBXaGVuIHVwZ3JhZGluZywgcmV1c2UgdGhlIGxhc3QgcmVsZWFzZSdzIHZhbHVlcyBhbmQgbWVyZ2UgaW4gYW55IG92ZXJyaWRlcy4gSWYgJ3Jlc2V0X3ZhbHVlcycgaXMgc3BlY2lmaWVkLCB0aGlzIGlzIGlnbm9yZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNyZXVzZV92YWx1ZXMgRGF0YUhlbG1UZW1wbGF0ZSNyZXVzZV92YWx1ZXN9XG4gICovXG4gIHJlYWRvbmx5IHJldXNlVmFsdWVzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBDdXN0b20gdmFsdWVzIHRvIGJlIG1lcmdlZCB3aXRoIHRoZSB2YWx1ZXNcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3NldCBEYXRhSGVsbVRlbXBsYXRlI3NldH1cbiAgKi9cbiAgcmVhZG9ubHkgc2V0PzogRGF0YUhlbG1UZW1wbGF0ZVNldFtdIHwgY2RrdG4uSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIEN1c3RvbSBzZW5zaXRpdmUgdmFsdWVzIHRvIGJlIG1lcmdlZCB3aXRoIHRoZSB2YWx1ZXNcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3NldF9saXN0IERhdGFIZWxtVGVtcGxhdGUjc2V0X2xpc3R9XG4gICovXG4gIHJlYWRvbmx5IHNldExpc3Q/OiBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdFtdIHwgY2RrdG4uSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIEN1c3RvbSBzZW5zaXRpdmUgdmFsdWVzIHRvIGJlIG1lcmdlZCB3aXRoIHRoZSB2YWx1ZXNcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3NldF9zZW5zaXRpdmUgRGF0YUhlbG1UZW1wbGF0ZSNzZXRfc2Vuc2l0aXZlfVxuICAqL1xuICByZWFkb25seSBzZXRTZW5zaXRpdmU/OiBEYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlW10gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogV3JpdGUtb25seSBjdXN0b20gdmFsdWVzIHRvIGJlIG1lcmdlZCB3aXRoIHRoZSB2YWx1ZXMuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNzZXRfd28gRGF0YUhlbG1UZW1wbGF0ZSNzZXRfd299XG4gICovXG4gIHJlYWRvbmx5IHNldFdvPzogRGF0YUhlbG1UZW1wbGF0ZVNldFdvW10gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogT25seSBzaG93IG1hbmlmZXN0cyByZW5kZXJlZCBmcm9tIHRoZSBnaXZlbiB0ZW1wbGF0ZXMuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNzaG93X29ubHkgRGF0YUhlbG1UZW1wbGF0ZSNzaG93X29ubHl9XG4gICovXG4gIHJlYWRvbmx5IHNob3dPbmx5Pzogc3RyaW5nW107XG4gIC8qKlxuICAqIElmIHNldCwgbm8gQ1JEcyB3aWxsIGJlIGluc3RhbGxlZC4gQnkgZGVmYXVsdCwgQ1JEcyBhcmUgaW5zdGFsbGVkIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNza2lwX2NyZHMgRGF0YUhlbG1UZW1wbGF0ZSNza2lwX2NyZHN9XG4gICovXG4gIHJlYWRvbmx5IHNraXBDcmRzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBJZiBzZXQsIHRlc3RzIHdpbGwgbm90IGJlIHJlbmRlcmVkLiBCeSBkZWZhdWx0LCB0ZXN0cyBhcmUgcmVuZGVyZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNza2lwX3Rlc3RzIERhdGFIZWxtVGVtcGxhdGUjc2tpcF90ZXN0c31cbiAgKi9cbiAgcmVhZG9ubHkgc2tpcFRlc3RzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBUaW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgYW55IGluZGl2aWR1YWwgS3ViZXJuZXRlcyBvcGVyYXRpb24uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSN0aW1lb3V0IERhdGFIZWxtVGVtcGxhdGUjdGltZW91dH1cbiAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjdGltZW91dHMgRGF0YUhlbG1UZW1wbGF0ZSN0aW1lb3V0c31cbiAgKi9cbiAgcmVhZG9ubHkgdGltZW91dHM/OiBEYXRhSGVsbVRlbXBsYXRlVGltZW91dHM7XG4gIC8qKlxuICAqIFZhbGlkYXRlIHlvdXIgbWFuaWZlc3RzIGFnYWluc3QgdGhlIEt1YmVybmV0ZXMgY2x1c3RlciB5b3UgYXJlIGN1cnJlbnRseSBwb2ludGluZyBhdC4gVGhpcyBpcyB0aGUgc2FtZSB2YWxpZGF0aW9uIHBlcmZvcm1lZCBvbiBhbiBpbnN0YWxsLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjdmFsaWRhdGUgRGF0YUhlbG1UZW1wbGF0ZSN2YWxpZGF0ZX1cbiAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGU/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIExpc3Qgb2YgdmFsdWVzIGluIHJhdyB5YW1sIGZvcm1hdCB0byBwYXNzIHRvIGhlbG0uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSN2YWx1ZXMgRGF0YUhlbG1UZW1wbGF0ZSN2YWx1ZXN9XG4gICovXG4gIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZ1tdO1xuICAvKipcbiAgKiBWZXJpZnkgdGhlIHBhY2thZ2UgYmVmb3JlIGluc3RhbGxpbmcgaXQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSN2ZXJpZnkgRGF0YUhlbG1UZW1wbGF0ZSN2ZXJpZnl9XG4gICovXG4gIHJlYWRvbmx5IHZlcmlmeT86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogU3BlY2lmeSB0aGUgZXhhY3QgY2hhcnQgdmVyc2lvbiB0byBpbnN0YWxsLiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiBpcyBpbnN0YWxsZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSN2ZXJzaW9uIERhdGFIZWxtVGVtcGxhdGUjdmVyc2lvbn1cbiAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICogV2lsbCB3YWl0IHVudGlsIGFsbCByZXNvdXJjZXMgYXJlIGluIGEgcmVhZHkgc3RhdGUgYmVmb3JlIG1hcmtpbmcgdGhlIHJlbGVhc2UgYXMgc3VjY2Vzc2Z1bC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3dhaXQgRGF0YUhlbG1UZW1wbGF0ZSN3YWl0fVxuICAqL1xuICByZWFkb25seSB3YWl0PzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlO1xufVxuZXhwb3J0IGludGVyZmFjZSBEYXRhSGVsbVRlbXBsYXRlUG9zdHJlbmRlciB7XG4gIC8qKlxuICAqIEFuIGFyZ3VtZW50IHRvIHRoZSBwb3N0LXJlbmRlcmVyIChjYW4gc3BlY2lmeSBtdWx0aXBsZSlcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI2FyZ3MgRGF0YUhlbG1UZW1wbGF0ZSNhcmdzfVxuICAqL1xuICByZWFkb25seSBhcmdzPzogc3RyaW5nW107XG4gIC8qKlxuICAqIFRoZSBjb21tb24gYmluYXJ5IHBhdGhcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI2JpbmFyeV9wYXRoIERhdGFIZWxtVGVtcGxhdGUjYmluYXJ5X3BhdGh9XG4gICovXG4gIHJlYWRvbmx5IGJpbmFyeVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFIZWxtVGVtcGxhdGVQb3N0cmVuZGVyVG9UZXJyYWZvcm0oc3RydWN0PzogRGF0YUhlbG1UZW1wbGF0ZVBvc3RyZW5kZXIgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhcmdzOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkoc3RydWN0IS5hcmdzKSxcbiAgICBiaW5hcnlfcGF0aDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5iaW5hcnlQYXRoKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhSGVsbVRlbXBsYXRlUG9zdHJlbmRlclRvSGNsVGVycmFmb3JtKHN0cnVjdD86IERhdGFIZWxtVGVtcGxhdGVQb3N0cmVuZGVyIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGFyZ3M6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5saXN0TWFwcGVySGNsKGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtLCBmYWxzZSkoc3RydWN0IS5hcmdzKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICB9LFxuICAgIGJpbmFyeV9wYXRoOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5iaW5hcnlQYXRoKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFIZWxtVGVtcGxhdGVQb3N0cmVuZGVyT3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdG4uQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICBwcml2YXRlIHJlc29sdmFibGVWYWx1ZT86IGNka3RuLklSZXNvbHZhYmxlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBEYXRhSGVsbVRlbXBsYXRlUG9zdHJlbmRlciB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5yZXNvbHZhYmxlVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmFibGVWYWx1ZTtcbiAgICB9XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fYXJncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5hcmdzID0gdGhpcy5fYXJncztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2JpbmFyeVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuYmluYXJ5UGF0aCA9IHRoaXMuX2JpbmFyeVBhdGg7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBEYXRhSGVsbVRlbXBsYXRlUG9zdHJlbmRlciB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9hcmdzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYmluYXJ5UGF0aCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9hcmdzID0gdmFsdWUuYXJncztcbiAgICAgIHRoaXMuX2JpbmFyeVBhdGggPSB2YWx1ZS5iaW5hcnlQYXRoO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFyZ3MgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYXJncz86IHN0cmluZ1tdOyBcbiAgcHVibGljIGdldCBhcmdzKCkge1xuICAgIHJldHVybiB0aGlzLmdldExpc3RBdHRyaWJ1dGUoJ2FyZ3MnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFyZ3ModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fYXJncyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEFyZ3MoKSB7XG4gICAgdGhpcy5fYXJncyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYXJnc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hcmdzO1xuICB9XG5cbiAgLy8gYmluYXJ5X3BhdGggLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfYmluYXJ5UGF0aD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYmluYXJ5UGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2JpbmFyeV9wYXRoJyk7XG4gIH1cbiAgcHVibGljIHNldCBiaW5hcnlQYXRoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9iaW5hcnlQYXRoID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGJpbmFyeVBhdGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmluYXJ5UGF0aDtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBEYXRhSGVsbVRlbXBsYXRlU2V0IHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjbmFtZSBEYXRhSGVsbVRlbXBsYXRlI25hbWV9XG4gICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjdHlwZSBEYXRhSGVsbVRlbXBsYXRlI3R5cGV9XG4gICovXG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI3ZhbHVlIERhdGFIZWxtVGVtcGxhdGUjdmFsdWV9XG4gICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YUhlbG1UZW1wbGF0ZVNldFRvVGVycmFmb3JtKHN0cnVjdD86IERhdGFIZWxtVGVtcGxhdGVTZXQgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLm5hbWUpLFxuICAgIHR5cGU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudHlwZSksXG4gICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudmFsdWUpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFIZWxtVGVtcGxhdGVTZXRUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBEYXRhSGVsbVRlbXBsYXRlU2V0IHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm5hbWUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHR5cGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnR5cGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHZhbHVlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS52YWx1ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhSGVsbVRlbXBsYXRlU2V0T3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdG4uQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICBwcml2YXRlIHJlc29sdmFibGVWYWx1ZT86IGNka3RuLklSZXNvbHZhYmxlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqIEBwYXJhbSBjb21wbGV4T2JqZWN0SW5kZXggdGhlIGluZGV4IG9mIHRoaXMgaXRlbSBpbiB0aGUgbGlzdFxuICAqIEBwYXJhbSBjb21wbGV4T2JqZWN0SXNGcm9tU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KVxuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgY29tcGxleE9iamVjdEluZGV4OiBudW1iZXIsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQ6IGJvb2xlYW4pIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBjb21wbGV4T2JqZWN0SXNGcm9tU2V0LCBjb21wbGV4T2JqZWN0SW5kZXgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IERhdGFIZWxtVGVtcGxhdGVTZXQgfCBjZGt0bi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2YWJsZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZhYmxlVmFsdWU7XG4gICAgfVxuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX25hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubmFtZSA9IHRoaXMuX25hbWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl90eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnR5cGUgPSB0aGlzLl90eXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQudmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IERhdGFIZWxtVGVtcGxhdGVTZXQgfCBjZGt0bi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZS50eXBlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBuYW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX25hbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCduYW1lJyk7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8vIHR5cGUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90eXBlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndHlwZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFR5cGUoKSB7XG4gICAgdGhpcy5fdHlwZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdHlwZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLy8gdmFsdWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdmFsdWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndmFsdWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFZhbHVlKCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB2YWx1ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUhlbG1UZW1wbGF0ZVNldExpc3QgZXh0ZW5kcyBjZGt0bi5Db21wbGV4TGlzdCB7XG4gIHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6IERhdGFIZWxtVGVtcGxhdGVTZXRbXSB8IGNka3RuLklSZXNvbHZhYmxlXG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICogQHBhcmFtIHdyYXBzU2V0IHdoZXRoZXIgdGhlIGxpc3QgaXMgd3JhcHBpbmcgYSBzZXQgKHdpbGwgYWRkIHRvbGlzdCgpIHRvIGJlIGFibGUgdG8gYWNjZXNzIGFuIGl0ZW0gdmlhIGFuIGluZGV4KVxuICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCBwcm90ZWN0ZWQgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIHByb3RlY3RlZCB3cmFwc1NldDogYm9vbGVhbikge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIHdyYXBzU2V0KVxuICB9XG5cbiAgLyoqXG4gICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byByZXR1cm5cbiAgKi9cbiAgcHVibGljIGdldChpbmRleDogbnVtYmVyKTogRGF0YUhlbG1UZW1wbGF0ZVNldE91dHB1dFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRhSGVsbVRlbXBsYXRlU2V0T3V0cHV0UmVmZXJlbmNlKHRoaXMudGVycmFmb3JtUmVzb3VyY2UsIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLCBpbmRleCwgdGhpcy53cmFwc1NldCk7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUhlbG1UZW1wbGF0ZVNldExpc3RTdHJ1Y3Qge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNuYW1lIERhdGFIZWxtVGVtcGxhdGUjbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjdmFsdWUgRGF0YUhlbG1UZW1wbGF0ZSN2YWx1ZX1cbiAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YUhlbG1UZW1wbGF0ZVNldExpc3RTdHJ1Y3RUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdCB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEubmFtZSksXG4gICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXIoY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKShzdHJ1Y3QhLnZhbHVlKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdFRvSGNsVGVycmFmb3JtKHN0cnVjdD86IERhdGFIZWxtVGVtcGxhdGVTZXRMaXN0U3RydWN0IHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm5hbWUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHZhbHVlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHN0cnVjdCEudmFsdWUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdE91dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNvbHZhYmxlVmFsdWU/OiBjZGt0bi5JUmVzb2x2YWJsZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gaW4gdGhlIGxpc3RcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdElzRnJvbVNldCB3aGV0aGVyIHRoZSBsaXN0IGlzIHdyYXBwaW5nIGEgc2V0ICh3aWxsIGFkZCB0b2xpc3QoKSB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbiBpdGVtIHZpYSBhbiBpbmRleClcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIGNvbXBsZXhPYmplY3RJbmRleDogbnVtYmVyLCBjb21wbGV4T2JqZWN0SXNGcm9tU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgY29tcGxleE9iamVjdElzRnJvbVNldCwgY29tcGxleE9iamVjdEluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdCB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5yZXNvbHZhYmxlVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmFibGVWYWx1ZTtcbiAgICB9XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5uYW1lID0gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdCB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9uYW1lID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5hbWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbmFtZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ25hbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROYW1lKCkge1xuICAgIHRoaXMuX25hbWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8vIHZhbHVlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3ZhbHVlPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldExpc3RBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB2YWx1ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUhlbG1UZW1wbGF0ZVNldExpc3RTdHJ1Y3RMaXN0IGV4dGVuZHMgY2RrdG4uQ29tcGxleExpc3Qge1xuICBwdWJsaWMgaW50ZXJuYWxWYWx1ZT8gOiBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdFtdIHwgY2RrdG4uSVJlc29sdmFibGVcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpXG4gIH1cblxuICAvKipcbiAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVyblxuICAqL1xuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdE91dHB1dFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdE91dHB1dFJlZmVyZW5jZSh0aGlzLnRlcnJhZm9ybVJlc291cmNlLCB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSwgaW5kZXgsIHRoaXMud3JhcHNTZXQpO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIERhdGFIZWxtVGVtcGxhdGVTZXRTZW5zaXRpdmUge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNuYW1lIERhdGFIZWxtVGVtcGxhdGUjbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSN0eXBlIERhdGFIZWxtVGVtcGxhdGUjdHlwZX1cbiAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjdmFsdWUgRGF0YUhlbG1UZW1wbGF0ZSN2YWx1ZX1cbiAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFIZWxtVGVtcGxhdGVTZXRTZW5zaXRpdmVUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBEYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5uYW1lKSxcbiAgICB0eXBlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnR5cGUpLFxuICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnZhbHVlKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogRGF0YUhlbG1UZW1wbGF0ZVNldFNlbnNpdGl2ZSB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBuYW1lOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5uYW1lKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB0eXBlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICB2YWx1ZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudmFsdWUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUhlbG1UZW1wbGF0ZVNldFNlbnNpdGl2ZU91dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNvbHZhYmxlVmFsdWU/OiBjZGt0bi5JUmVzb2x2YWJsZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gaW4gdGhlIGxpc3RcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdElzRnJvbVNldCB3aGV0aGVyIHRoZSBsaXN0IGlzIHdyYXBwaW5nIGEgc2V0ICh3aWxsIGFkZCB0b2xpc3QoKSB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbiBpdGVtIHZpYSBhbiBpbmRleClcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIGNvbXBsZXhPYmplY3RJbmRleDogbnVtYmVyLCBjb21wbGV4T2JqZWN0SXNGcm9tU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgY29tcGxleE9iamVjdElzRnJvbVNldCwgY29tcGxleE9iamVjdEluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBEYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm5hbWUgPSB0aGlzLl9uYW1lO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50eXBlID0gdGhpcy5fdHlwZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBEYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX25hbWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICB0aGlzLl90eXBlID0gdmFsdWUudHlwZTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gbmFtZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9uYW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbmFtZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBuYW1lSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3R5cGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VHlwZSgpIHtcbiAgICB0aGlzLl90eXBlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0eXBlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICAvLyB2YWx1ZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF92YWx1ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd2YWx1ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHZhbHVlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlTGlzdCBleHRlbmRzIGNka3RuLkNvbXBsZXhMaXN0IHtcbiAgcHVibGljIGludGVybmFsVmFsdWU/IDogRGF0YUhlbG1UZW1wbGF0ZVNldFNlbnNpdGl2ZVtdIHwgY2RrdG4uSVJlc29sdmFibGVcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpXG4gIH1cblxuICAvKipcbiAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVyblxuICAqL1xuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBEYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlT3V0cHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IERhdGFIZWxtVGVtcGxhdGVTZXRTZW5zaXRpdmVPdXRwdXRSZWZlcmVuY2UodGhpcy50ZXJyYWZvcm1SZXNvdXJjZSwgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsIGluZGV4LCB0aGlzLndyYXBzU2V0KTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBEYXRhSGVsbVRlbXBsYXRlU2V0V28ge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSNuYW1lIERhdGFIZWxtVGVtcGxhdGUjbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSN0eXBlIERhdGFIZWxtVGVtcGxhdGUjdHlwZX1cbiAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjdmFsdWUgRGF0YUhlbG1UZW1wbGF0ZSN2YWx1ZX1cbiAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFIZWxtVGVtcGxhdGVTZXRXb1RvVGVycmFmb3JtKHN0cnVjdD86IERhdGFIZWxtVGVtcGxhdGVTZXRXbyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEubmFtZSksXG4gICAgdHlwZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50eXBlKSxcbiAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS52YWx1ZSksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZGF0YUhlbG1UZW1wbGF0ZVNldFdvVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogRGF0YUhlbG1UZW1wbGF0ZVNldFdvIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm5hbWUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHR5cGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnR5cGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHZhbHVlOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS52YWx1ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhSGVsbVRlbXBsYXRlU2V0V29PdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdG4uSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBpdGVtIGluIHRoZSBsaXN0XG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCBjb21wbGV4T2JqZWN0SW5kZXg6IG51bWJlciwgY29tcGxleE9iamVjdElzRnJvbVNldDogYm9vbGVhbikge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQsIGNvbXBsZXhPYmplY3RJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogRGF0YUhlbG1UZW1wbGF0ZVNldFdvIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm5hbWUgPSB0aGlzLl9uYW1lO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50eXBlID0gdGhpcy5fdHlwZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBEYXRhSGVsbVRlbXBsYXRlU2V0V28gfCBjZGt0bi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZS50eXBlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBuYW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX25hbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCduYW1lJyk7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8vIHR5cGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdHlwZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3R5cGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3R5cGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUeXBlKCkge1xuICAgIHRoaXMuX3R5cGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHR5cGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8vIHZhbHVlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3ZhbHVlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdmFsdWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFIZWxtVGVtcGxhdGVTZXRXb0xpc3QgZXh0ZW5kcyBjZGt0bi5Db21wbGV4TGlzdCB7XG4gIHB1YmxpYyBpbnRlcm5hbFZhbHVlPyA6IERhdGFIZWxtVGVtcGxhdGVTZXRXb1tdIHwgY2RrdG4uSVJlc29sdmFibGVcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpXG4gIH1cblxuICAvKipcbiAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVyblxuICAqL1xuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBEYXRhSGVsbVRlbXBsYXRlU2V0V29PdXRwdXRSZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgRGF0YUhlbG1UZW1wbGF0ZVNldFdvT3V0cHV0UmVmZXJlbmNlKHRoaXMudGVycmFmb3JtUmVzb3VyY2UsIHRoaXMudGVycmFmb3JtQXR0cmlidXRlLCBpbmRleCwgdGhpcy53cmFwc1NldCk7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUhlbG1UZW1wbGF0ZVRpbWVvdXRzIHtcbiAgLyoqXG4gICogQSBzdHJpbmcgdGhhdCBjYW4gYmUgW3BhcnNlZCBhcyBhIGR1cmF0aW9uXShodHRwczovL3BrZy5nby5kZXYvdGltZSNQYXJzZUR1cmF0aW9uKSBjb25zaXN0aW5nIG9mIG51bWJlcnMgYW5kIHVuaXQgc3VmZml4ZXMsIHN1Y2ggYXMgXCIzMHNcIiBvciBcIjJoNDVtXCIuIFZhbGlkIHRpbWUgdW5pdHMgYXJlIFwic1wiIChzZWNvbmRzKSwgXCJtXCIgKG1pbnV0ZXMpLCBcImhcIiAoaG91cnMpLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2hlbG0vMy4xLjEvZG9jcy9kYXRhLXNvdXJjZXMvdGVtcGxhdGUjcmVhZCBEYXRhSGVsbVRlbXBsYXRlI3JlYWR9XG4gICovXG4gIHJlYWRvbmx5IHJlYWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhSGVsbVRlbXBsYXRlVGltZW91dHNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBEYXRhSGVsbVRlbXBsYXRlVGltZW91dHMgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZWFkOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnJlYWQpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFIZWxtVGVtcGxhdGVUaW1lb3V0c1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IERhdGFIZWxtVGVtcGxhdGVUaW1lb3V0cyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICByZWFkOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5yZWFkKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFIZWxtVGVtcGxhdGVUaW1lb3V0c091dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNvbHZhYmxlVmFsdWU/OiBjZGt0bi5JUmVzb2x2YWJsZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogRGF0YUhlbG1UZW1wbGF0ZVRpbWVvdXRzIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9yZWFkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnJlYWQgPSB0aGlzLl9yZWFkO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogRGF0YUhlbG1UZW1wbGF0ZVRpbWVvdXRzIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3JlYWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcmVhZCA9IHZhbHVlLnJlYWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVhZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZWFkPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCByZWFkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncmVhZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVhZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVhZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlYWQoKSB7XG4gICAgdGhpcy5fcmVhZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVhZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkO1xuICB9XG59XG5cbi8qKlxuKiBSZXByZXNlbnRzIGEge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSBoZWxtX3RlbXBsYXRlfVxuKi9cbmV4cG9ydCBjbGFzcyBEYXRhSGVsbVRlbXBsYXRlIGV4dGVuZHMgY2RrdG4uVGVycmFmb3JtRGF0YVNvdXJjZSB7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0ZlJlc291cmNlVHlwZSA9IFwiaGVsbV90ZW1wbGF0ZVwiO1xuXG4gIC8vID09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09XG4gIC8qKlxuICAqIEdlbmVyYXRlcyBDREtUTiBjb2RlIGZvciBpbXBvcnRpbmcgYSBEYXRhSGVsbVRlbXBsYXRlIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RuIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIERhdGFIZWxtVGVtcGxhdGUgdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIERhdGFIZWxtVGVtcGxhdGUgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9oZWxtLzMuMS4xL2RvY3MvZGF0YS1zb3VyY2VzL3RlbXBsYXRlI2ltcG9ydCBpbXBvcnQgc2VjdGlvbn0gaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyByZXNvdXJjZSBmb3IgdGhlIGlkIHRvIHVzZVxuICAqIEBwYXJhbSBwcm92aWRlcj8gT3B0aW9uYWwgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdoZXJlIHRoZSBEYXRhSGVsbVRlbXBsYXRlIHRvIGltcG9ydCBpcyBmb3VuZFxuICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdG4uVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjZGt0bi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcImhlbG1fdGVtcGxhdGVcIiwgaW1wb3J0SWQ6IGltcG9ydEZyb21JZCwgcHJvdmlkZXIgfSk7XG4gICAgICB9XG5cbiAgLy8gPT09PT09PT09PT1cbiAgLy8gSU5JVElBTElaRVJcbiAgLy8gPT09PT09PT09PT1cblxuICAvKipcbiAgKiBDcmVhdGUgYSBuZXcge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvaGVsbS8zLjEuMS9kb2NzL2RhdGEtc291cmNlcy90ZW1wbGF0ZSBoZWxtX3RlbXBsYXRlfSBEYXRhIFNvdXJjZVxuICAqXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuIE11c3QgYmUgdW5pcXVlIGFtb25nc3Qgc2libGluZ3MgaW4gdGhlIHNhbWUgc2NvcGVcbiAgKiBAcGFyYW0gb3B0aW9ucyBEYXRhSGVsbVRlbXBsYXRlQ29uZmlnXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IERhdGFIZWxtVGVtcGxhdGVDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHRlcnJhZm9ybVJlc291cmNlVHlwZTogJ2hlbG1fdGVtcGxhdGUnLFxuICAgICAgdGVycmFmb3JtR2VuZXJhdG9yTWV0YWRhdGE6IHtcbiAgICAgICAgcHJvdmlkZXJOYW1lOiAnaGVsbScsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzMuMS4xJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJ34+IDMuMCdcbiAgICAgIH0sXG4gICAgICBwcm92aWRlcjogY29uZmlnLnByb3ZpZGVyLFxuICAgICAgZGVwZW5kc09uOiBjb25maWcuZGVwZW5kc09uLFxuICAgICAgY291bnQ6IGNvbmZpZy5jb3VudCxcbiAgICAgIGxpZmVjeWNsZTogY29uZmlnLmxpZmVjeWNsZSxcbiAgICAgIHByb3Zpc2lvbmVyczogY29uZmlnLnByb3Zpc2lvbmVycyxcbiAgICAgIGNvbm5lY3Rpb246IGNvbmZpZy5jb25uZWN0aW9uLFxuICAgICAgZm9yRWFjaDogY29uZmlnLmZvckVhY2hcbiAgICB9KTtcbiAgICB0aGlzLl9hcGlWZXJzaW9ucyA9IGNvbmZpZy5hcGlWZXJzaW9ucztcbiAgICB0aGlzLl9hdG9taWMgPSBjb25maWcuYXRvbWljO1xuICAgIHRoaXMuX2NoYXJ0ID0gY29uZmlnLmNoYXJ0O1xuICAgIHRoaXMuX2NyZHMgPSBjb25maWcuY3JkcztcbiAgICB0aGlzLl9jcmVhdGVOYW1lc3BhY2UgPSBjb25maWcuY3JlYXRlTmFtZXNwYWNlO1xuICAgIHRoaXMuX2RlcGVuZGVuY3lVcGRhdGUgPSBjb25maWcuZGVwZW5kZW5jeVVwZGF0ZTtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IGNvbmZpZy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9kZXZlbCA9IGNvbmZpZy5kZXZlbDtcbiAgICB0aGlzLl9kaXNhYmxlT3BlbmFwaVZhbGlkYXRpb24gPSBjb25maWcuZGlzYWJsZU9wZW5hcGlWYWxpZGF0aW9uO1xuICAgIHRoaXMuX2Rpc2FibGVXZWJob29rcyA9IGNvbmZpZy5kaXNhYmxlV2ViaG9va3M7XG4gICAgdGhpcy5faW5jbHVkZUNyZHMgPSBjb25maWcuaW5jbHVkZUNyZHM7XG4gICAgdGhpcy5faXNVcGdyYWRlID0gY29uZmlnLmlzVXBncmFkZTtcbiAgICB0aGlzLl9rZXlyaW5nID0gY29uZmlnLmtleXJpbmc7XG4gICAgdGhpcy5fa3ViZVZlcnNpb24gPSBjb25maWcua3ViZVZlcnNpb247XG4gICAgdGhpcy5fbWFuaWZlc3QgPSBjb25maWcubWFuaWZlc3Q7XG4gICAgdGhpcy5fbWFuaWZlc3RzID0gY29uZmlnLm1hbmlmZXN0cztcbiAgICB0aGlzLl9uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgdGhpcy5fbmFtZXNwYWNlID0gY29uZmlnLm5hbWVzcGFjZTtcbiAgICB0aGlzLl9ub3RlcyA9IGNvbmZpZy5ub3RlcztcbiAgICB0aGlzLl9wYXNzQ3JlZGVudGlhbHMgPSBjb25maWcucGFzc0NyZWRlbnRpYWxzO1xuICAgIHRoaXMuX3Bvc3RyZW5kZXIuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5wb3N0cmVuZGVyO1xuICAgIHRoaXMuX3JlbmRlclN1YmNoYXJ0Tm90ZXMgPSBjb25maWcucmVuZGVyU3ViY2hhcnROb3RlcztcbiAgICB0aGlzLl9yZXBsYWNlID0gY29uZmlnLnJlcGxhY2U7XG4gICAgdGhpcy5fcmVwb3NpdG9yeSA9IGNvbmZpZy5yZXBvc2l0b3J5O1xuICAgIHRoaXMuX3JlcG9zaXRvcnlDYUZpbGUgPSBjb25maWcucmVwb3NpdG9yeUNhRmlsZTtcbiAgICB0aGlzLl9yZXBvc2l0b3J5Q2VydEZpbGUgPSBjb25maWcucmVwb3NpdG9yeUNlcnRGaWxlO1xuICAgIHRoaXMuX3JlcG9zaXRvcnlLZXlGaWxlID0gY29uZmlnLnJlcG9zaXRvcnlLZXlGaWxlO1xuICAgIHRoaXMuX3JlcG9zaXRvcnlQYXNzd29yZCA9IGNvbmZpZy5yZXBvc2l0b3J5UGFzc3dvcmQ7XG4gICAgdGhpcy5fcmVwb3NpdG9yeVVzZXJuYW1lID0gY29uZmlnLnJlcG9zaXRvcnlVc2VybmFtZTtcbiAgICB0aGlzLl9yZXNldFZhbHVlcyA9IGNvbmZpZy5yZXNldFZhbHVlcztcbiAgICB0aGlzLl9yZXVzZVZhbHVlcyA9IGNvbmZpZy5yZXVzZVZhbHVlcztcbiAgICB0aGlzLl9zZXQuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5zZXQ7XG4gICAgdGhpcy5fc2V0TGlzdC5pbnRlcm5hbFZhbHVlID0gY29uZmlnLnNldExpc3Q7XG4gICAgdGhpcy5fc2V0U2Vuc2l0aXZlLmludGVybmFsVmFsdWUgPSBjb25maWcuc2V0U2Vuc2l0aXZlO1xuICAgIHRoaXMuX3NldFdvLmludGVybmFsVmFsdWUgPSBjb25maWcuc2V0V287XG4gICAgdGhpcy5fc2hvd09ubHkgPSBjb25maWcuc2hvd09ubHk7XG4gICAgdGhpcy5fc2tpcENyZHMgPSBjb25maWcuc2tpcENyZHM7XG4gICAgdGhpcy5fc2tpcFRlc3RzID0gY29uZmlnLnNraXBUZXN0cztcbiAgICB0aGlzLl90aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG4gICAgdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy50aW1lb3V0cztcbiAgICB0aGlzLl92YWxpZGF0ZSA9IGNvbmZpZy52YWxpZGF0ZTtcbiAgICB0aGlzLl92YWx1ZXMgPSBjb25maWcudmFsdWVzO1xuICAgIHRoaXMuX3ZlcmlmeSA9IGNvbmZpZy52ZXJpZnk7XG4gICAgdGhpcy5fdmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uO1xuICAgIHRoaXMuX3dhaXQgPSBjb25maWcud2FpdDtcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gYXBpX3ZlcnNpb25zIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2FwaVZlcnNpb25zPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IGFwaVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldExpc3RBdHRyaWJ1dGUoJ2FwaV92ZXJzaW9ucycpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXBpVmVyc2lvbnModmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fYXBpVmVyc2lvbnMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBcGlWZXJzaW9ucygpIHtcbiAgICB0aGlzLl9hcGlWZXJzaW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYXBpVmVyc2lvbnNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBpVmVyc2lvbnM7XG4gIH1cblxuICAvLyBhdG9taWMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYXRvbWljPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBhdG9taWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnYXRvbWljJyk7XG4gIH1cbiAgcHVibGljIHNldCBhdG9taWModmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2F0b21pYyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEF0b21pYygpIHtcbiAgICB0aGlzLl9hdG9taWMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGF0b21pY0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hdG9taWM7XG4gIH1cblxuICAvLyBjaGFydCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9jaGFydD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgY2hhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdjaGFydCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hhcnQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NoYXJ0ID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNoYXJ0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYXJ0O1xuICB9XG5cbiAgLy8gY3JkcyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NyZHM/OiBzdHJpbmdbXTsgXG4gIHB1YmxpYyBnZXQgY3JkcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0QXR0cmlidXRlKCdjcmRzJyk7XG4gIH1cbiAgcHVibGljIHNldCBjcmRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX2NyZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDcmRzKCkge1xuICAgIHRoaXMuX2NyZHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNyZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JkcztcbiAgfVxuXG4gIC8vIGNyZWF0ZV9uYW1lc3BhY2UgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY3JlYXRlTmFtZXNwYWNlPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBjcmVhdGVOYW1lc3BhY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnY3JlYXRlX25hbWVzcGFjZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgY3JlYXRlTmFtZXNwYWNlKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9jcmVhdGVOYW1lc3BhY2UgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDcmVhdGVOYW1lc3BhY2UoKSB7XG4gICAgdGhpcy5fY3JlYXRlTmFtZXNwYWNlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjcmVhdGVOYW1lc3BhY2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlTmFtZXNwYWNlO1xuICB9XG5cbiAgLy8gZGVwZW5kZW5jeV91cGRhdGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGVwZW5kZW5jeVVwZGF0ZT86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZGVwZW5kZW5jeVVwZGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdkZXBlbmRlbmN5X3VwZGF0ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVwZW5kZW5jeVVwZGF0ZSh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fZGVwZW5kZW5jeVVwZGF0ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERlcGVuZGVuY3lVcGRhdGUoKSB7XG4gICAgdGhpcy5fZGVwZW5kZW5jeVVwZGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVwZW5kZW5jeVVwZGF0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZXBlbmRlbmN5VXBkYXRlO1xuICB9XG5cbiAgLy8gZGVzY3JpcHRpb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGVzY3JpcHRpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGVzY3JpcHRpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlc2NyaXB0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERlc2NyaXB0aW9uKCkge1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8vIGRldmVsIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RldmVsPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBkZXZlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdkZXZlbCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGV2ZWwodmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2RldmVsID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGV2ZWwoKSB7XG4gICAgdGhpcy5fZGV2ZWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRldmVsSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RldmVsO1xuICB9XG5cbiAgLy8gZGlzYWJsZV9vcGVuYXBpX3ZhbGlkYXRpb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGlzYWJsZU9wZW5hcGlWYWxpZGF0aW9uPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBkaXNhYmxlT3BlbmFwaVZhbGlkYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZGlzYWJsZV9vcGVuYXBpX3ZhbGlkYXRpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRpc2FibGVPcGVuYXBpVmFsaWRhdGlvbih2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fZGlzYWJsZU9wZW5hcGlWYWxpZGF0aW9uID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGlzYWJsZU9wZW5hcGlWYWxpZGF0aW9uKCkge1xuICAgIHRoaXMuX2Rpc2FibGVPcGVuYXBpVmFsaWRhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzYWJsZU9wZW5hcGlWYWxpZGF0aW9uSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVPcGVuYXBpVmFsaWRhdGlvbjtcbiAgfVxuXG4gIC8vIGRpc2FibGVfd2ViaG9va3MgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGlzYWJsZVdlYmhvb2tzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBkaXNhYmxlV2ViaG9va3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZGlzYWJsZV93ZWJob29rcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzYWJsZVdlYmhvb2tzKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9kaXNhYmxlV2ViaG9va3MgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREaXNhYmxlV2ViaG9va3MoKSB7XG4gICAgdGhpcy5fZGlzYWJsZVdlYmhvb2tzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkaXNhYmxlV2ViaG9va3NJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZVdlYmhvb2tzO1xuICB9XG5cbiAgLy8gaWQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogZmFsc2VcbiAgcHVibGljIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2lkJyk7XG4gIH1cblxuICAvLyBpbmNsdWRlX2NyZHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5jbHVkZUNyZHM/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGluY2x1ZGVDcmRzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2luY2x1ZGVfY3JkcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5jbHVkZUNyZHModmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2luY2x1ZGVDcmRzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SW5jbHVkZUNyZHMoKSB7XG4gICAgdGhpcy5faW5jbHVkZUNyZHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGluY2x1ZGVDcmRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVDcmRzO1xuICB9XG5cbiAgLy8gaXNfdXBncmFkZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pc1VwZ3JhZGU/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGlzVXBncmFkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdpc191cGdyYWRlJyk7XG4gIH1cbiAgcHVibGljIHNldCBpc1VwZ3JhZGUodmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2lzVXBncmFkZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElzVXBncmFkZSgpIHtcbiAgICB0aGlzLl9pc1VwZ3JhZGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlzVXBncmFkZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pc1VwZ3JhZGU7XG4gIH1cblxuICAvLyBrZXlyaW5nIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2tleXJpbmc/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGtleXJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdrZXlyaW5nJyk7XG4gIH1cbiAgcHVibGljIHNldCBrZXlyaW5nKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9rZXlyaW5nID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0S2V5cmluZygpIHtcbiAgICB0aGlzLl9rZXlyaW5nID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBrZXlyaW5nSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2tleXJpbmc7XG4gIH1cblxuICAvLyBrdWJlX3ZlcnNpb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfa3ViZVZlcnNpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGt1YmVWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgna3ViZV92ZXJzaW9uJyk7XG4gIH1cbiAgcHVibGljIHNldCBrdWJlVmVyc2lvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fa3ViZVZlcnNpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRLdWJlVmVyc2lvbigpIHtcbiAgICB0aGlzLl9rdWJlVmVyc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQga3ViZVZlcnNpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fa3ViZVZlcnNpb247XG4gIH1cblxuICAvLyBtYW5pZmVzdCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX21hbmlmZXN0Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBtYW5pZmVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ21hbmlmZXN0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBtYW5pZmVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWFuaWZlc3QgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLl9tYW5pZmVzdCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbWFuaWZlc3RJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFuaWZlc3Q7XG4gIH1cblxuICAvLyBtYW5pZmVzdHMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYW5pZmVzdHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9OyBcbiAgcHVibGljIGdldCBtYW5pZmVzdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nTWFwQXR0cmlidXRlKCdtYW5pZmVzdHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1hbmlmZXN0cyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX21hbmlmZXN0cyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1hbmlmZXN0cygpIHtcbiAgICB0aGlzLl9tYW5pZmVzdHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1hbmlmZXN0c0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdHM7XG4gIH1cblxuICAvLyBuYW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX25hbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCduYW1lJyk7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8vIG5hbWVzcGFjZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9uYW1lc3BhY2U/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ25hbWVzcGFjZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZXNwYWNlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lc3BhY2UgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROYW1lc3BhY2UoKSB7XG4gICAgdGhpcy5fbmFtZXNwYWNlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBuYW1lc3BhY2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXNwYWNlO1xuICB9XG5cbiAgLy8gbm90ZXMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9ub3Rlcz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbm90ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdub3RlcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgbm90ZXModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX25vdGVzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Tm90ZXMoKSB7XG4gICAgdGhpcy5fbm90ZXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG5vdGVzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vdGVzO1xuICB9XG5cbiAgLy8gcGFzc19jcmVkZW50aWFscyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9wYXNzQ3JlZGVudGlhbHM/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHBhc3NDcmVkZW50aWFscygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdwYXNzX2NyZWRlbnRpYWxzJyk7XG4gIH1cbiAgcHVibGljIHNldCBwYXNzQ3JlZGVudGlhbHModmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX3Bhc3NDcmVkZW50aWFscyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFBhc3NDcmVkZW50aWFscygpIHtcbiAgICB0aGlzLl9wYXNzQ3JlZGVudGlhbHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHBhc3NDcmVkZW50aWFsc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9wYXNzQ3JlZGVudGlhbHM7XG4gIH1cblxuICAvLyBwb3N0cmVuZGVyIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3Bvc3RyZW5kZXIgPSBuZXcgRGF0YUhlbG1UZW1wbGF0ZVBvc3RyZW5kZXJPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJwb3N0cmVuZGVyXCIpO1xuICBwdWJsaWMgZ2V0IHBvc3RyZW5kZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc3RyZW5kZXI7XG4gIH1cbiAgcHVibGljIHB1dFBvc3RyZW5kZXIodmFsdWU6IERhdGFIZWxtVGVtcGxhdGVQb3N0cmVuZGVyKSB7XG4gICAgdGhpcy5fcG9zdHJlbmRlci5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UG9zdHJlbmRlcigpIHtcbiAgICB0aGlzLl9wb3N0cmVuZGVyLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHBvc3RyZW5kZXJJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zdHJlbmRlci5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gcmVuZGVyX3N1YmNoYXJ0X25vdGVzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlbmRlclN1YmNoYXJ0Tm90ZXM/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHJlbmRlclN1YmNoYXJ0Tm90ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgncmVuZGVyX3N1YmNoYXJ0X25vdGVzJyk7XG4gIH1cbiAgcHVibGljIHNldCByZW5kZXJTdWJjaGFydE5vdGVzKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9yZW5kZXJTdWJjaGFydE5vdGVzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVuZGVyU3ViY2hhcnROb3RlcygpIHtcbiAgICB0aGlzLl9yZW5kZXJTdWJjaGFydE5vdGVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByZW5kZXJTdWJjaGFydE5vdGVzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlclN1YmNoYXJ0Tm90ZXM7XG4gIH1cblxuICAvLyByZXBsYWNlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlcGxhY2U/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHJlcGxhY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgncmVwbGFjZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVwbGFjZSh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fcmVwbGFjZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlcGxhY2UoKSB7XG4gICAgdGhpcy5fcmVwbGFjZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVwbGFjZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXBsYWNlO1xuICB9XG5cbiAgLy8gcmVwb3NpdG9yeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZXBvc2l0b3J5Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCByZXBvc2l0b3J5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncmVwb3NpdG9yeScpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVwb3NpdG9yeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVwb3NpdG9yeSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlcG9zaXRvcnkoKSB7XG4gICAgdGhpcy5fcmVwb3NpdG9yeSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXBvc2l0b3J5O1xuICB9XG5cbiAgLy8gcmVwb3NpdG9yeV9jYV9maWxlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlcG9zaXRvcnlDYUZpbGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlDYUZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdyZXBvc2l0b3J5X2NhX2ZpbGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcG9zaXRvcnlDYUZpbGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3JlcG9zaXRvcnlDYUZpbGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRSZXBvc2l0b3J5Q2FGaWxlKCkge1xuICAgIHRoaXMuX3JlcG9zaXRvcnlDYUZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlDYUZpbGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeUNhRmlsZTtcbiAgfVxuXG4gIC8vIHJlcG9zaXRvcnlfY2VydF9maWxlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JlcG9zaXRvcnlDZXJ0RmlsZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeUNlcnRGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncmVwb3NpdG9yeV9jZXJ0X2ZpbGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcG9zaXRvcnlDZXJ0RmlsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVwb3NpdG9yeUNlcnRGaWxlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVwb3NpdG9yeUNlcnRGaWxlKCkge1xuICAgIHRoaXMuX3JlcG9zaXRvcnlDZXJ0RmlsZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeUNlcnRGaWxlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlDZXJ0RmlsZTtcbiAgfVxuXG4gIC8vIHJlcG9zaXRvcnlfa2V5X2ZpbGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcmVwb3NpdG9yeUtleUZpbGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlLZXlGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncmVwb3NpdG9yeV9rZXlfZmlsZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVwb3NpdG9yeUtleUZpbGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3JlcG9zaXRvcnlLZXlGaWxlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVwb3NpdG9yeUtleUZpbGUoKSB7XG4gICAgdGhpcy5fcmVwb3NpdG9yeUtleUZpbGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlLZXlGaWxlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlLZXlGaWxlO1xuICB9XG5cbiAgLy8gcmVwb3NpdG9yeV9wYXNzd29yZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZXBvc2l0b3J5UGFzc3dvcmQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlQYXNzd29yZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3JlcG9zaXRvcnlfcGFzc3dvcmQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcG9zaXRvcnlQYXNzd29yZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVwb3NpdG9yeVBhc3N3b3JkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVwb3NpdG9yeVBhc3N3b3JkKCkge1xuICAgIHRoaXMuX3JlcG9zaXRvcnlQYXNzd29yZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeVBhc3N3b3JkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlQYXNzd29yZDtcbiAgfVxuXG4gIC8vIHJlcG9zaXRvcnlfdXNlcm5hbWUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcmVwb3NpdG9yeVVzZXJuYW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCByZXBvc2l0b3J5VXNlcm5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdyZXBvc2l0b3J5X3VzZXJuYW1lJyk7XG4gIH1cbiAgcHVibGljIHNldCByZXBvc2l0b3J5VXNlcm5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3JlcG9zaXRvcnlVc2VybmFtZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlcG9zaXRvcnlVc2VybmFtZSgpIHtcbiAgICB0aGlzLl9yZXBvc2l0b3J5VXNlcm5hbWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnlVc2VybmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VXNlcm5hbWU7XG4gIH1cblxuICAvLyByZXNldF92YWx1ZXMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcmVzZXRWYWx1ZXM/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHJlc2V0VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ3Jlc2V0X3ZhbHVlcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVzZXRWYWx1ZXModmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX3Jlc2V0VmFsdWVzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UmVzZXRWYWx1ZXMoKSB7XG4gICAgdGhpcy5fcmVzZXRWYWx1ZXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlc2V0VmFsdWVzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0VmFsdWVzO1xuICB9XG5cbiAgLy8gcmV1c2VfdmFsdWVzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3JldXNlVmFsdWVzPzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCByZXVzZVZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdyZXVzZV92YWx1ZXMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJldXNlVmFsdWVzKHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9yZXVzZVZhbHVlcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJldXNlVmFsdWVzKCkge1xuICAgIHRoaXMuX3JldXNlVmFsdWVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByZXVzZVZhbHVlc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXVzZVZhbHVlcztcbiAgfVxuXG4gIC8vIHNldCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zZXQgPSBuZXcgRGF0YUhlbG1UZW1wbGF0ZVNldExpc3QodGhpcywgXCJzZXRcIiwgdHJ1ZSk7XG4gIHB1YmxpYyBnZXQgc2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9zZXQ7XG4gIH1cbiAgcHVibGljIHB1dFNldCh2YWx1ZTogRGF0YUhlbG1UZW1wbGF0ZVNldFtdIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9zZXQuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFNldCgpIHtcbiAgICB0aGlzLl9zZXQuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2V0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gc2V0X2xpc3QgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfc2V0TGlzdCA9IG5ldyBEYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdExpc3QodGhpcywgXCJzZXRfbGlzdFwiLCBmYWxzZSk7XG4gIHB1YmxpYyBnZXQgc2V0TGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0TGlzdDtcbiAgfVxuICBwdWJsaWMgcHV0U2V0TGlzdCh2YWx1ZTogRGF0YUhlbG1UZW1wbGF0ZVNldExpc3RTdHJ1Y3RbXSB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc2V0TGlzdC5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0U2V0TGlzdCgpIHtcbiAgICB0aGlzLl9zZXRMaXN0LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHNldExpc3RJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0TGlzdC5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gc2V0X3NlbnNpdGl2ZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zZXRTZW5zaXRpdmUgPSBuZXcgRGF0YUhlbG1UZW1wbGF0ZVNldFNlbnNpdGl2ZUxpc3QodGhpcywgXCJzZXRfc2Vuc2l0aXZlXCIsIHRydWUpO1xuICBwdWJsaWMgZ2V0IHNldFNlbnNpdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0U2Vuc2l0aXZlO1xuICB9XG4gIHB1YmxpYyBwdXRTZXRTZW5zaXRpdmUodmFsdWU6IERhdGFIZWxtVGVtcGxhdGVTZXRTZW5zaXRpdmVbXSB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc2V0U2Vuc2l0aXZlLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTZXRTZW5zaXRpdmUoKSB7XG4gICAgdGhpcy5fc2V0U2Vuc2l0aXZlLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHNldFNlbnNpdGl2ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zZXRTZW5zaXRpdmUuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIHNldF93byAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zZXRXbyA9IG5ldyBEYXRhSGVsbVRlbXBsYXRlU2V0V29MaXN0KHRoaXMsIFwic2V0X3dvXCIsIGZhbHNlKTtcbiAgcHVibGljIGdldCBzZXRXbygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0V287XG4gIH1cbiAgcHVibGljIHB1dFNldFdvKHZhbHVlOiBEYXRhSGVsbVRlbXBsYXRlU2V0V29bXSB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc2V0V28uaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFNldFdvKCkge1xuICAgIHRoaXMuX3NldFdvLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHNldFdvSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFdvLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBzaG93X29ubHkgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfc2hvd09ubHk/OiBzdHJpbmdbXTsgXG4gIHB1YmxpYyBnZXQgc2hvd09ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnc2hvd19vbmx5Jyk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93T25seSh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9zaG93T25seSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFNob3dPbmx5KCkge1xuICAgIHRoaXMuX3Nob3dPbmx5ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBzaG93T25seUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93T25seTtcbiAgfVxuXG4gIC8vIHNraXBfY3JkcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9za2lwQ3Jkcz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgc2tpcENyZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnc2tpcF9jcmRzJyk7XG4gIH1cbiAgcHVibGljIHNldCBza2lwQ3Jkcyh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc2tpcENyZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTa2lwQ3JkcygpIHtcbiAgICB0aGlzLl9za2lwQ3JkcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2tpcENyZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcENyZHM7XG4gIH1cblxuICAvLyBza2lwX3Rlc3RzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3NraXBUZXN0cz86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgc2tpcFRlc3RzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ3NraXBfdGVzdHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNraXBUZXN0cyh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc2tpcFRlc3RzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0U2tpcFRlc3RzKCkge1xuICAgIHRoaXMuX3NraXBUZXN0cyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2tpcFRlc3RzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBUZXN0cztcbiAgfVxuXG4gIC8vIHRpbWVvdXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgdGltZW91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpbWVvdXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RpbWVvdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUaW1lb3V0KCkge1xuICAgIHRoaXMuX3RpbWVvdXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRpbWVvdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZW91dDtcbiAgfVxuXG4gIC8vIHRpbWVvdXRzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3RpbWVvdXRzID0gbmV3IERhdGFIZWxtVGVtcGxhdGVUaW1lb3V0c091dHB1dFJlZmVyZW5jZSh0aGlzLCBcInRpbWVvdXRzXCIpO1xuICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lb3V0cztcbiAgfVxuICBwdWJsaWMgcHV0VGltZW91dHModmFsdWU6IERhdGFIZWxtVGVtcGxhdGVUaW1lb3V0cykge1xuICAgIHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUaW1lb3V0cygpIHtcbiAgICB0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0aW1lb3V0c0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gdmFsaWRhdGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdmFsaWRhdGU/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHZhbGlkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ3ZhbGlkYXRlJyk7XG4gIH1cbiAgcHVibGljIHNldCB2YWxpZGF0ZSh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fdmFsaWRhdGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRWYWxpZGF0ZSgpIHtcbiAgICB0aGlzLl92YWxpZGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGU7XG4gIH1cblxuICAvLyB2YWx1ZXMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdmFsdWVzPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0QXR0cmlidXRlKCd2YWx1ZXMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUZlZhbHVlcygpIHtcbiAgICB0aGlzLl92YWx1ZXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHZhbHVlc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gIH1cblxuICAvLyB2ZXJpZnkgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdmVyaWZ5PzogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCB2ZXJpZnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgndmVyaWZ5Jyk7XG4gIH1cbiAgcHVibGljIHNldCB2ZXJpZnkodmFsdWU6IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX3ZlcmlmeSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFZlcmlmeSgpIHtcbiAgICB0aGlzLl92ZXJpZnkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHZlcmlmeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl92ZXJpZnk7XG4gIH1cblxuICAvLyB2ZXJzaW9uIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdmVyc2lvbj86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3ZlcnNpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZlcnNpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3ZlcnNpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRWZXJzaW9uKCkge1xuICAgIHRoaXMuX3ZlcnNpb24gPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHZlcnNpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmVyc2lvbjtcbiAgfVxuXG4gIC8vIHdhaXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfd2FpdD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgd2FpdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCd3YWl0Jyk7XG4gIH1cbiAgcHVibGljIHNldCB3YWl0KHZhbHVlOiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl93YWl0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0V2FpdCgpIHtcbiAgICB0aGlzLl93YWl0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB3YWl0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dhaXQ7XG4gIH1cblxuICAvLyA9PT09PT09PT1cbiAgLy8gU1lOVEhFU0lTXG4gIC8vID09PT09PT09PVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaV92ZXJzaW9uczogY2RrdG4ubGlzdE1hcHBlcihjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2FwaVZlcnNpb25zKSxcbiAgICAgIGF0b21pYzogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2F0b21pYyksXG4gICAgICBjaGFydDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY2hhcnQpLFxuICAgICAgY3JkczogY2RrdG4ubGlzdE1hcHBlcihjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2NyZHMpLFxuICAgICAgY3JlYXRlX25hbWVzcGFjZTogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2NyZWF0ZU5hbWVzcGFjZSksXG4gICAgICBkZXBlbmRlbmN5X3VwZGF0ZTogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2RlcGVuZGVuY3lVcGRhdGUpLFxuICAgICAgZGVzY3JpcHRpb246IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2Rlc2NyaXB0aW9uKSxcbiAgICAgIGRldmVsOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fZGV2ZWwpLFxuICAgICAgZGlzYWJsZV9vcGVuYXBpX3ZhbGlkYXRpb246IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9kaXNhYmxlT3BlbmFwaVZhbGlkYXRpb24pLFxuICAgICAgZGlzYWJsZV93ZWJob29rczogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2Rpc2FibGVXZWJob29rcyksXG4gICAgICBpbmNsdWRlX2NyZHM6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9pbmNsdWRlQ3JkcyksXG4gICAgICBpc191cGdyYWRlOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5faXNVcGdyYWRlKSxcbiAgICAgIGtleXJpbmc6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2tleXJpbmcpLFxuICAgICAga3ViZV92ZXJzaW9uOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9rdWJlVmVyc2lvbiksXG4gICAgICBtYW5pZmVzdDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fbWFuaWZlc3QpLFxuICAgICAgbWFuaWZlc3RzOiBjZGt0bi5oYXNoTWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKSh0aGlzLl9tYW5pZmVzdHMpLFxuICAgICAgbmFtZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fbmFtZSksXG4gICAgICBuYW1lc3BhY2U6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX25hbWVzcGFjZSksXG4gICAgICBub3RlczogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fbm90ZXMpLFxuICAgICAgcGFzc19jcmVkZW50aWFsczogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3Bhc3NDcmVkZW50aWFscyksXG4gICAgICBwb3N0cmVuZGVyOiBkYXRhSGVsbVRlbXBsYXRlUG9zdHJlbmRlclRvVGVycmFmb3JtKHRoaXMuX3Bvc3RyZW5kZXIuaW50ZXJuYWxWYWx1ZSksXG4gICAgICByZW5kZXJfc3ViY2hhcnRfbm90ZXM6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9yZW5kZXJTdWJjaGFydE5vdGVzKSxcbiAgICAgIHJlcGxhY2U6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9yZXBsYWNlKSxcbiAgICAgIHJlcG9zaXRvcnk6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3JlcG9zaXRvcnkpLFxuICAgICAgcmVwb3NpdG9yeV9jYV9maWxlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9yZXBvc2l0b3J5Q2FGaWxlKSxcbiAgICAgIHJlcG9zaXRvcnlfY2VydF9maWxlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9yZXBvc2l0b3J5Q2VydEZpbGUpLFxuICAgICAgcmVwb3NpdG9yeV9rZXlfZmlsZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fcmVwb3NpdG9yeUtleUZpbGUpLFxuICAgICAgcmVwb3NpdG9yeV9wYXNzd29yZDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fcmVwb3NpdG9yeVBhc3N3b3JkKSxcbiAgICAgIHJlcG9zaXRvcnlfdXNlcm5hbWU6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3JlcG9zaXRvcnlVc2VybmFtZSksXG4gICAgICByZXNldF92YWx1ZXM6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9yZXNldFZhbHVlcyksXG4gICAgICByZXVzZV92YWx1ZXM6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9yZXVzZVZhbHVlcyksXG4gICAgICBzZXQ6IGNka3RuLmxpc3RNYXBwZXIoZGF0YUhlbG1UZW1wbGF0ZVNldFRvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fc2V0LmludGVybmFsVmFsdWUpLFxuICAgICAgc2V0X2xpc3Q6IGNka3RuLmxpc3RNYXBwZXIoZGF0YUhlbG1UZW1wbGF0ZVNldExpc3RTdHJ1Y3RUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX3NldExpc3QuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBzZXRfc2Vuc2l0aXZlOiBjZGt0bi5saXN0TWFwcGVyKGRhdGFIZWxtVGVtcGxhdGVTZXRTZW5zaXRpdmVUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX3NldFNlbnNpdGl2ZS5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIHNldF93bzogY2RrdG4ubGlzdE1hcHBlcihkYXRhSGVsbVRlbXBsYXRlU2V0V29Ub1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX3NldFdvLmludGVybmFsVmFsdWUpLFxuICAgICAgc2hvd19vbmx5OiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fc2hvd09ubHkpLFxuICAgICAgc2tpcF9jcmRzOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fc2tpcENyZHMpLFxuICAgICAgc2tpcF90ZXN0czogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3NraXBUZXN0cyksXG4gICAgICB0aW1lb3V0OiBjZGt0bi5udW1iZXJUb1RlcnJhZm9ybSh0aGlzLl90aW1lb3V0KSxcbiAgICAgIHRpbWVvdXRzOiBkYXRhSGVsbVRlbXBsYXRlVGltZW91dHNUb1RlcnJhZm9ybSh0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlKSxcbiAgICAgIHZhbGlkYXRlOiBjZGt0bi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fdmFsaWRhdGUpLFxuICAgICAgdmFsdWVzOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLnN0cmluZ1RvVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fdmFsdWVzKSxcbiAgICAgIHZlcmlmeTogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3ZlcmlmeSksXG4gICAgICB2ZXJzaW9uOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl92ZXJzaW9uKSxcbiAgICAgIHdhaXQ6IGNka3RuLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl93YWl0KSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIGFwaV92ZXJzaW9uczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2FwaVZlcnNpb25zKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBhdG9taWM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9hdG9taWMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgY2hhcnQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2NoYXJ0KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgY3Jkczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2NyZHMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGNyZWF0ZV9uYW1lc3BhY2U6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9jcmVhdGVOYW1lc3BhY2UpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZGVwZW5kZW5jeV91cGRhdGU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9kZXBlbmRlbmN5VXBkYXRlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9kZXNjcmlwdGlvbiksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGRldmVsOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fZGV2ZWwpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZV9vcGVuYXBpX3ZhbGlkYXRpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9kaXNhYmxlT3BlbmFwaVZhbGlkYXRpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZV93ZWJob29rczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2Rpc2FibGVXZWJob29rcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBpbmNsdWRlX2NyZHM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9pbmNsdWRlQ3JkcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBpc191cGdyYWRlOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5faXNVcGdyYWRlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGtleXJpbmc6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2tleXJpbmcpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBrdWJlX3ZlcnNpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2t1YmVWZXJzaW9uKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX21hbmlmZXN0KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbWFuaWZlc3RzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5oYXNoTWFwcGVySGNsKGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKSh0aGlzLl9tYW5pZmVzdHMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdNYXBcIixcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9uYW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbmFtZXNwYWNlOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9uYW1lc3BhY2UpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBub3Rlczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fbm90ZXMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBwYXNzX2NyZWRlbnRpYWxzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fcGFzc0NyZWRlbnRpYWxzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIHBvc3RyZW5kZXI6IHtcbiAgICAgICAgdmFsdWU6IGRhdGFIZWxtVGVtcGxhdGVQb3N0cmVuZGVyVG9IY2xUZXJyYWZvcm0odGhpcy5fcG9zdHJlbmRlci5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJzdHJ1Y3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJEYXRhSGVsbVRlbXBsYXRlUG9zdHJlbmRlclwiLFxuICAgICAgfSxcbiAgICAgIHJlbmRlcl9zdWJjaGFydF9ub3Rlczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX3JlbmRlclN1YmNoYXJ0Tm90ZXMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgcmVwbGFjZToge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX3JlcGxhY2UpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgcmVwb3NpdG9yeToge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fcmVwb3NpdG9yeSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlcG9zaXRvcnlfY2FfZmlsZToge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fcmVwb3NpdG9yeUNhRmlsZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlcG9zaXRvcnlfY2VydF9maWxlOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9yZXBvc2l0b3J5Q2VydEZpbGUpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICByZXBvc2l0b3J5X2tleV9maWxlOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9yZXBvc2l0b3J5S2V5RmlsZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlcG9zaXRvcnlfcGFzc3dvcmQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3JlcG9zaXRvcnlQYXNzd29yZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlcG9zaXRvcnlfdXNlcm5hbWU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX3JlcG9zaXRvcnlVc2VybmFtZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHJlc2V0X3ZhbHVlczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX3Jlc2V0VmFsdWVzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIHJldXNlX3ZhbHVlczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX3JldXNlVmFsdWVzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIHNldDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChkYXRhSGVsbVRlbXBsYXRlU2V0VG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9zZXQuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiRGF0YUhlbG1UZW1wbGF0ZVNldExpc3RcIixcbiAgICAgIH0sXG4gICAgICBzZXRfbGlzdDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChkYXRhSGVsbVRlbXBsYXRlU2V0TGlzdFN0cnVjdFRvSGNsVGVycmFmb3JtLCBmYWxzZSkodGhpcy5fc2V0TGlzdC5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiRGF0YUhlbG1UZW1wbGF0ZVNldExpc3RTdHJ1Y3RMaXN0XCIsXG4gICAgICB9LFxuICAgICAgc2V0X3NlbnNpdGl2ZToge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChkYXRhSGVsbVRlbXBsYXRlU2V0U2Vuc2l0aXZlVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9zZXRTZW5zaXRpdmUuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiRGF0YUhlbG1UZW1wbGF0ZVNldFNlbnNpdGl2ZUxpc3RcIixcbiAgICAgIH0sXG4gICAgICBzZXRfd286IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woZGF0YUhlbG1UZW1wbGF0ZVNldFdvVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9zZXRXby5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiRGF0YUhlbG1UZW1wbGF0ZVNldFdvTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHNob3dfb25seToge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX3Nob3dPbmx5KSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBza2lwX2NyZHM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9za2lwQ3JkcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBza2lwX3Rlc3RzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fc2tpcFRlc3RzKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLm51bWJlclRvSGNsVGVycmFmb3JtKHRoaXMuX3RpbWVvdXQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0czoge1xuICAgICAgICB2YWx1ZTogZGF0YUhlbG1UZW1wbGF0ZVRpbWVvdXRzVG9IY2xUZXJyYWZvcm0odGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwic3RydWN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiRGF0YUhlbG1UZW1wbGF0ZVRpbWVvdXRzXCIsXG4gICAgICB9LFxuICAgICAgdmFsaWRhdGU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl92YWxpZGF0ZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl92YWx1ZXMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHZlcmlmeToge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX3ZlcmlmeSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICB2ZXJzaW9uOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl92ZXJzaW9uKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgd2FpdDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX3dhaXQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCApKVxuICB9XG59XG4iXX0=
|