cdk8s-aws-cdk 0.0.5

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.
Files changed (94) hide show
  1. package/.gitattributes +21 -0
  2. package/.jsii +4392 -0
  3. package/API.md +2204 -0
  4. package/LICENSE +202 -0
  5. package/README.md +201 -0
  6. package/changelog.md +2 -0
  7. package/examples/rds-db-instance/README.md +0 -0
  8. package/examples/rds-db-instance/cdk.out/RdsDBInstanceStack.assets.json +19 -0
  9. package/examples/rds-db-instance/cdk.out/RdsDBInstanceStack.template.json +86 -0
  10. package/examples/rds-db-instance/cdk.out/cdk.out +1 -0
  11. package/examples/rds-db-instance/cdk.out/manifest.json +230 -0
  12. package/examples/rds-db-instance/cdk.out/tree.json +171 -0
  13. package/examples/rds-db-instance/main.ts +136 -0
  14. package/lib/adapter.d.ts +37 -0
  15. package/lib/adapter.d.ts.map +1 -0
  16. package/lib/adapter.js +196 -0
  17. package/lib/chart.d.ts +19 -0
  18. package/lib/chart.d.ts.map +1 -0
  19. package/lib/chart.js +63 -0
  20. package/lib/imports/cloudcontrol.services.k8s.aws.d.ts +106 -0
  21. package/lib/imports/cloudcontrol.services.k8s.aws.d.ts.map +1 -0
  22. package/lib/imports/cloudcontrol.services.k8s.aws.js +92 -0
  23. package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts +430 -0
  24. package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts.map +1 -0
  25. package/lib/imports/dynamotables-dynamodb.services.k8s.aws.js +314 -0
  26. package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts +173 -0
  27. package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts.map +1 -0
  28. package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.js +156 -0
  29. package/lib/imports/fieldexports-services.k8s.aws.d.ts +159 -0
  30. package/lib/imports/fieldexports-services.k8s.aws.d.ts.map +1 -0
  31. package/lib/imports/fieldexports-services.k8s.aws.js +151 -0
  32. package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts +135 -0
  33. package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts.map +1 -0
  34. package/lib/imports/iampolicies-iam.services.k8s.aws.js +109 -0
  35. package/lib/imports/iamroles-iam.services.k8s.aws.d.ts +143 -0
  36. package/lib/imports/iamroles-iam.services.k8s.aws.d.ts.map +1 -0
  37. package/lib/imports/iamroles-iam.services.k8s.aws.js +112 -0
  38. package/lib/imports/k8s.d.ts +18619 -0
  39. package/lib/imports/k8s.d.ts.map +1 -0
  40. package/lib/imports/k8s.js +14701 -0
  41. package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts +280 -0
  42. package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts.map +1 -0
  43. package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.js +183 -0
  44. package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts +343 -0
  45. package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts.map +1 -0
  46. package/lib/imports/lambdafunctions-lambda.services.k8s.aws.js +225 -0
  47. package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts +790 -0
  48. package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts.map +1 -0
  49. package/lib/imports/rdsdbinstances-rds.services.k8s.aws.js +217 -0
  50. package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts +114 -0
  51. package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts.map +1 -0
  52. package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.js +108 -0
  53. package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts +2253 -0
  54. package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts.map +1 -0
  55. package/lib/imports/s3buckets-s3.services.k8s.aws.js +1672 -0
  56. package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts +203 -0
  57. package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts.map +1 -0
  58. package/lib/imports/sfnmachines-sfn.services.k8s.aws.js +174 -0
  59. package/lib/imports/snstopics-sns.services.k8s.aws.d.ts +106 -0
  60. package/lib/imports/snstopics-sns.services.k8s.aws.d.ts.map +1 -0
  61. package/lib/imports/snstopics-sns.services.k8s.aws.js +110 -0
  62. package/lib/index.d.ts +4 -0
  63. package/lib/index.d.ts.map +1 -0
  64. package/lib/index.js +16 -0
  65. package/lib/mappers/base.d.ts +23 -0
  66. package/lib/mappers/base.d.ts.map +1 -0
  67. package/lib/mappers/base.js +20 -0
  68. package/lib/mappers/ec2-security-group.d.ts +9 -0
  69. package/lib/mappers/ec2-security-group.d.ts.map +1 -0
  70. package/lib/mappers/ec2-security-group.js +33 -0
  71. package/lib/mappers/iam-policy.d.ts +9 -0
  72. package/lib/mappers/iam-policy.d.ts.map +1 -0
  73. package/lib/mappers/iam-policy.js +32 -0
  74. package/lib/mappers/iam-role.d.ts +9 -0
  75. package/lib/mappers/iam-role.d.ts.map +1 -0
  76. package/lib/mappers/iam-role.js +34 -0
  77. package/lib/mappers/index.d.ts +9 -0
  78. package/lib/mappers/index.d.ts.map +1 -0
  79. package/lib/mappers/index.js +21 -0
  80. package/lib/mappers/lambda-function.d.ts +9 -0
  81. package/lib/mappers/lambda-function.d.ts.map +1 -0
  82. package/lib/mappers/lambda-function.js +37 -0
  83. package/lib/mappers/rds-db-instance.d.ts +10 -0
  84. package/lib/mappers/rds-db-instance.d.ts.map +1 -0
  85. package/lib/mappers/rds-db-instance.js +65 -0
  86. package/lib/mappers/rds-db-subnet-group.d.ts +9 -0
  87. package/lib/mappers/rds-db-subnet-group.d.ts.map +1 -0
  88. package/lib/mappers/rds-db-subnet-group.js +34 -0
  89. package/lib/mappers/s3-bucket.d.ts +9 -0
  90. package/lib/mappers/s3-bucket.d.ts.map +1 -0
  91. package/lib/mappers/s3-bucket.js +53 -0
  92. package/package.json +129 -0
  93. package/releasetag.txt +1 -0
  94. package/version.txt +1 -0
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toJson_TableSpecLocalSecondaryIndexesProjection = exports.toJson_TableSpecLocalSecondaryIndexesKeySchema = exports.toJson_TableSpecGlobalSecondaryIndexesProvisionedThroughput = exports.toJson_TableSpecGlobalSecondaryIndexesProjection = exports.toJson_TableSpecGlobalSecondaryIndexesKeySchema = exports.toJson_TableSpecTags = exports.toJson_TableSpecStreamSpecification = exports.toJson_TableSpecSseSpecification = exports.toJson_TableSpecProvisionedThroughput = exports.toJson_TableSpecLocalSecondaryIndexes = exports.toJson_TableSpecKeySchema = exports.toJson_TableSpecGlobalSecondaryIndexes = exports.toJson_TableSpecAttributeDefinitions = exports.toJson_TableSpec = exports.toJson_TableProps = exports.Table = void 0;
4
+ // generated by cdk8s
5
+ const cdk8s_1 = require("cdk8s");
6
+ /**
7
+ * Table is the Schema for the Tables API
8
+ *
9
+ * @schema Table
10
+ */
11
+ class Table extends cdk8s_1.ApiObject {
12
+ /**
13
+ * Defines a "Table" API object
14
+ * @param scope the scope in which to define this object
15
+ * @param id a scope-local name for the object
16
+ * @param props initialization props
17
+ */
18
+ constructor(scope, id, props = {}) {
19
+ super(scope, id, {
20
+ ...Table.GVK,
21
+ ...props,
22
+ });
23
+ }
24
+ /**
25
+ * Renders a Kubernetes manifest for "Table".
26
+ *
27
+ * This can be used to inline resource manifests inside other objects (e.g. as templates).
28
+ *
29
+ * @param props initialization props
30
+ */
31
+ static manifest(props = {}) {
32
+ return {
33
+ ...Table.GVK,
34
+ ...toJson_TableProps(props),
35
+ };
36
+ }
37
+ /**
38
+ * Renders the object to Kubernetes JSON.
39
+ */
40
+ toJson() {
41
+ const resolved = super.toJson();
42
+ return {
43
+ ...Table.GVK,
44
+ ...toJson_TableProps(resolved),
45
+ };
46
+ }
47
+ }
48
+ exports.Table = Table;
49
+ /**
50
+ * Returns the apiVersion and kind for "Table"
51
+ */
52
+ Table.GVK = {
53
+ apiVersion: 'dynamodb.services.k8s.aws/v1alpha1',
54
+ kind: 'Table',
55
+ };
56
+ /**
57
+ * Converts an object of type 'TableProps' to JSON representation.
58
+ */
59
+ /* eslint-disable max-len, quote-props */
60
+ function toJson_TableProps(obj) {
61
+ if (obj === undefined) {
62
+ return undefined;
63
+ }
64
+ const result = {
65
+ 'metadata': obj.metadata,
66
+ 'spec': toJson_TableSpec(obj.spec),
67
+ };
68
+ // filter undefined values
69
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
70
+ }
71
+ exports.toJson_TableProps = toJson_TableProps;
72
+ /**
73
+ * Converts an object of type 'TableSpec' to JSON representation.
74
+ */
75
+ /* eslint-disable max-len, quote-props */
76
+ function toJson_TableSpec(obj) {
77
+ var _a, _b, _c, _d, _e;
78
+ if (obj === undefined) {
79
+ return undefined;
80
+ }
81
+ const result = {
82
+ 'attributeDefinitions': (_a = obj.attributeDefinitions) === null || _a === void 0 ? void 0 : _a.map(y => toJson_TableSpecAttributeDefinitions(y)),
83
+ 'billingMode': obj.billingMode,
84
+ 'globalSecondaryIndexes': (_b = obj.globalSecondaryIndexes) === null || _b === void 0 ? void 0 : _b.map(y => toJson_TableSpecGlobalSecondaryIndexes(y)),
85
+ 'keySchema': (_c = obj.keySchema) === null || _c === void 0 ? void 0 : _c.map(y => toJson_TableSpecKeySchema(y)),
86
+ 'localSecondaryIndexes': (_d = obj.localSecondaryIndexes) === null || _d === void 0 ? void 0 : _d.map(y => toJson_TableSpecLocalSecondaryIndexes(y)),
87
+ 'provisionedThroughput': toJson_TableSpecProvisionedThroughput(obj.provisionedThroughput),
88
+ 'sseSpecification': toJson_TableSpecSseSpecification(obj.sseSpecification),
89
+ 'streamSpecification': toJson_TableSpecStreamSpecification(obj.streamSpecification),
90
+ 'tableName': obj.tableName,
91
+ 'tags': (_e = obj.tags) === null || _e === void 0 ? void 0 : _e.map(y => toJson_TableSpecTags(y)),
92
+ };
93
+ // filter undefined values
94
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
95
+ }
96
+ exports.toJson_TableSpec = toJson_TableSpec;
97
+ /**
98
+ * Converts an object of type 'TableSpecAttributeDefinitions' to JSON representation.
99
+ */
100
+ /* eslint-disable max-len, quote-props */
101
+ function toJson_TableSpecAttributeDefinitions(obj) {
102
+ if (obj === undefined) {
103
+ return undefined;
104
+ }
105
+ const result = {
106
+ 'attributeName': obj.attributeName,
107
+ 'attributeType': obj.attributeType,
108
+ };
109
+ // filter undefined values
110
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
111
+ }
112
+ exports.toJson_TableSpecAttributeDefinitions = toJson_TableSpecAttributeDefinitions;
113
+ /**
114
+ * Converts an object of type 'TableSpecGlobalSecondaryIndexes' to JSON representation.
115
+ */
116
+ /* eslint-disable max-len, quote-props */
117
+ function toJson_TableSpecGlobalSecondaryIndexes(obj) {
118
+ var _a;
119
+ if (obj === undefined) {
120
+ return undefined;
121
+ }
122
+ const result = {
123
+ 'indexName': obj.indexName,
124
+ 'keySchema': (_a = obj.keySchema) === null || _a === void 0 ? void 0 : _a.map(y => toJson_TableSpecGlobalSecondaryIndexesKeySchema(y)),
125
+ 'projection': toJson_TableSpecGlobalSecondaryIndexesProjection(obj.projection),
126
+ 'provisionedThroughput': toJson_TableSpecGlobalSecondaryIndexesProvisionedThroughput(obj.provisionedThroughput),
127
+ };
128
+ // filter undefined values
129
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
130
+ }
131
+ exports.toJson_TableSpecGlobalSecondaryIndexes = toJson_TableSpecGlobalSecondaryIndexes;
132
+ /**
133
+ * Converts an object of type 'TableSpecKeySchema' to JSON representation.
134
+ */
135
+ /* eslint-disable max-len, quote-props */
136
+ function toJson_TableSpecKeySchema(obj) {
137
+ if (obj === undefined) {
138
+ return undefined;
139
+ }
140
+ const result = {
141
+ 'attributeName': obj.attributeName,
142
+ 'keyType': obj.keyType,
143
+ };
144
+ // filter undefined values
145
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
146
+ }
147
+ exports.toJson_TableSpecKeySchema = toJson_TableSpecKeySchema;
148
+ /**
149
+ * Converts an object of type 'TableSpecLocalSecondaryIndexes' to JSON representation.
150
+ */
151
+ /* eslint-disable max-len, quote-props */
152
+ function toJson_TableSpecLocalSecondaryIndexes(obj) {
153
+ var _a;
154
+ if (obj === undefined) {
155
+ return undefined;
156
+ }
157
+ const result = {
158
+ 'indexName': obj.indexName,
159
+ 'keySchema': (_a = obj.keySchema) === null || _a === void 0 ? void 0 : _a.map(y => toJson_TableSpecLocalSecondaryIndexesKeySchema(y)),
160
+ 'projection': toJson_TableSpecLocalSecondaryIndexesProjection(obj.projection),
161
+ };
162
+ // filter undefined values
163
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
164
+ }
165
+ exports.toJson_TableSpecLocalSecondaryIndexes = toJson_TableSpecLocalSecondaryIndexes;
166
+ /**
167
+ * Converts an object of type 'TableSpecProvisionedThroughput' to JSON representation.
168
+ */
169
+ /* eslint-disable max-len, quote-props */
170
+ function toJson_TableSpecProvisionedThroughput(obj) {
171
+ if (obj === undefined) {
172
+ return undefined;
173
+ }
174
+ const result = {
175
+ 'readCapacityUnits': obj.readCapacityUnits,
176
+ 'writeCapacityUnits': obj.writeCapacityUnits,
177
+ };
178
+ // filter undefined values
179
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
180
+ }
181
+ exports.toJson_TableSpecProvisionedThroughput = toJson_TableSpecProvisionedThroughput;
182
+ /**
183
+ * Converts an object of type 'TableSpecSseSpecification' to JSON representation.
184
+ */
185
+ /* eslint-disable max-len, quote-props */
186
+ function toJson_TableSpecSseSpecification(obj) {
187
+ if (obj === undefined) {
188
+ return undefined;
189
+ }
190
+ const result = {
191
+ 'enabled': obj.enabled,
192
+ 'kmsMasterKeyID': obj.kmsMasterKeyId,
193
+ 'sseType': obj.sseType,
194
+ };
195
+ // filter undefined values
196
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
197
+ }
198
+ exports.toJson_TableSpecSseSpecification = toJson_TableSpecSseSpecification;
199
+ /**
200
+ * Converts an object of type 'TableSpecStreamSpecification' to JSON representation.
201
+ */
202
+ /* eslint-disable max-len, quote-props */
203
+ function toJson_TableSpecStreamSpecification(obj) {
204
+ if (obj === undefined) {
205
+ return undefined;
206
+ }
207
+ const result = {
208
+ 'streamEnabled': obj.streamEnabled,
209
+ 'streamViewType': obj.streamViewType,
210
+ };
211
+ // filter undefined values
212
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
213
+ }
214
+ exports.toJson_TableSpecStreamSpecification = toJson_TableSpecStreamSpecification;
215
+ /**
216
+ * Converts an object of type 'TableSpecTags' to JSON representation.
217
+ */
218
+ /* eslint-disable max-len, quote-props */
219
+ function toJson_TableSpecTags(obj) {
220
+ if (obj === undefined) {
221
+ return undefined;
222
+ }
223
+ const result = {
224
+ 'key': obj.key,
225
+ 'value': obj.value,
226
+ };
227
+ // filter undefined values
228
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
229
+ }
230
+ exports.toJson_TableSpecTags = toJson_TableSpecTags;
231
+ /**
232
+ * Converts an object of type 'TableSpecGlobalSecondaryIndexesKeySchema' to JSON representation.
233
+ */
234
+ /* eslint-disable max-len, quote-props */
235
+ function toJson_TableSpecGlobalSecondaryIndexesKeySchema(obj) {
236
+ if (obj === undefined) {
237
+ return undefined;
238
+ }
239
+ const result = {
240
+ 'attributeName': obj.attributeName,
241
+ 'keyType': obj.keyType,
242
+ };
243
+ // filter undefined values
244
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
245
+ }
246
+ exports.toJson_TableSpecGlobalSecondaryIndexesKeySchema = toJson_TableSpecGlobalSecondaryIndexesKeySchema;
247
+ /**
248
+ * Converts an object of type 'TableSpecGlobalSecondaryIndexesProjection' to JSON representation.
249
+ */
250
+ /* eslint-disable max-len, quote-props */
251
+ function toJson_TableSpecGlobalSecondaryIndexesProjection(obj) {
252
+ var _a;
253
+ if (obj === undefined) {
254
+ return undefined;
255
+ }
256
+ const result = {
257
+ 'nonKeyAttributes': (_a = obj.nonKeyAttributes) === null || _a === void 0 ? void 0 : _a.map(y => y),
258
+ 'projectionType': obj.projectionType,
259
+ };
260
+ // filter undefined values
261
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
262
+ }
263
+ exports.toJson_TableSpecGlobalSecondaryIndexesProjection = toJson_TableSpecGlobalSecondaryIndexesProjection;
264
+ /**
265
+ * Converts an object of type 'TableSpecGlobalSecondaryIndexesProvisionedThroughput' to JSON representation.
266
+ */
267
+ /* eslint-disable max-len, quote-props */
268
+ function toJson_TableSpecGlobalSecondaryIndexesProvisionedThroughput(obj) {
269
+ if (obj === undefined) {
270
+ return undefined;
271
+ }
272
+ const result = {
273
+ 'readCapacityUnits': obj.readCapacityUnits,
274
+ 'writeCapacityUnits': obj.writeCapacityUnits,
275
+ };
276
+ // filter undefined values
277
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
278
+ }
279
+ exports.toJson_TableSpecGlobalSecondaryIndexesProvisionedThroughput = toJson_TableSpecGlobalSecondaryIndexesProvisionedThroughput;
280
+ /**
281
+ * Converts an object of type 'TableSpecLocalSecondaryIndexesKeySchema' to JSON representation.
282
+ */
283
+ /* eslint-disable max-len, quote-props */
284
+ function toJson_TableSpecLocalSecondaryIndexesKeySchema(obj) {
285
+ if (obj === undefined) {
286
+ return undefined;
287
+ }
288
+ const result = {
289
+ 'attributeName': obj.attributeName,
290
+ 'keyType': obj.keyType,
291
+ };
292
+ // filter undefined values
293
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
294
+ }
295
+ exports.toJson_TableSpecLocalSecondaryIndexesKeySchema = toJson_TableSpecLocalSecondaryIndexesKeySchema;
296
+ /**
297
+ * Converts an object of type 'TableSpecLocalSecondaryIndexesProjection' to JSON representation.
298
+ */
299
+ /* eslint-disable max-len, quote-props */
300
+ function toJson_TableSpecLocalSecondaryIndexesProjection(obj) {
301
+ var _a;
302
+ if (obj === undefined) {
303
+ return undefined;
304
+ }
305
+ const result = {
306
+ 'nonKeyAttributes': (_a = obj.nonKeyAttributes) === null || _a === void 0 ? void 0 : _a.map(y => y),
307
+ 'projectionType': obj.projectionType,
308
+ };
309
+ // filter undefined values
310
+ return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
311
+ }
312
+ exports.toJson_TableSpecLocalSecondaryIndexesProjection = toJson_TableSpecLocalSecondaryIndexesProjection;
313
+ /* eslint-enable max-len, quote-props */
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1vdGFibGVzLWR5bmFtb2RiLnNlcnZpY2VzLms4cy5hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wb3J0cy9keW5hbW90YWJsZXMtZHluYW1vZGIuc2VydmljZXMuazhzLmF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQkFBcUI7QUFDckIsaUNBQXVFO0FBSXZFOzs7O0dBSUc7QUFDSCxNQUFhLEtBQU0sU0FBUSxpQkFBUztJQXVCbEM7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFvQixFQUFFO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLLENBQUMsR0FBRztZQUNaLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUF6QkQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFvQixFQUFFO1FBQzNDLE9BQU87WUFDTCxHQUFHLEtBQUssQ0FBQyxHQUFHO1lBQ1osR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFlRDs7T0FFRztJQUNJLE1BQU07UUFDWCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEMsT0FBTztZQUNMLEdBQUcsS0FBSyxDQUFDLEdBQUc7WUFDWixHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztTQUMvQixDQUFDO0lBQ0osQ0FBQzs7QUE5Q0gsc0JBK0NDO0FBOUNDOztHQUVHO0FBQ29CLFNBQUcsR0FBcUI7SUFDN0MsVUFBVSxFQUFFLG9DQUFvQztJQUNoRCxJQUFJLEVBQUUsT0FBTztDQUNkLENBQUM7QUE4REo7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0IsaUJBQWlCLENBQUMsR0FBMkI7SUFDM0QsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENB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LENBQUM7QUFSRCx3R0FRQztBQXFCRDs7R0FFRztBQUNILHlDQUF5QztBQUN6QyxTQUFnQiwrQ0FBK0MsQ0FBQyxHQUF5RDs7SUFDdkgsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7S0FBRTtJQUM1QyxNQUFNLE1BQU0sR0FBRztRQUNiLGtCQUFrQixRQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsMENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JELGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxjQUFjO0tBQ3JDLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQVJELDBHQVFDO0FBQ0Qsd0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZ2VuZXJhdGVkIGJ5IGNkazhzXG5pbXBvcnQgeyBBcGlPYmplY3QsIEFwaU9iamVjdE1ldGFkYXRhLCBHcm91cFZlcnNpb25LaW5kIH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cblxuLyoqXG4gKiBUYWJsZSBpcyB0aGUgU2NoZW1hIGZvciB0aGUgVGFibGVzIEFQSVxuICpcbiAqIEBzY2hlbWEgVGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiVGFibGVcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2R5bmFtb2RiLnNlcnZpY2VzLms4cy5hd3MvdjFhbHBoYTEnLFxuICAgIGtpbmQ6ICdUYWJsZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIlRhYmxlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IFRhYmxlUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlRhYmxlLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9UYWJsZVByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIlRhYmxlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUYWJsZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLlRhYmxlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5UYWJsZS5HVkssXG4gICAgICAuLi50b0pzb25fVGFibGVQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFRhYmxlIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBUYWJsZXMgQVBJXG4gKlxuICogQHNjaGVtYSBUYWJsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBUYWJsZSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogVGFibGVTcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgVGFibGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVGFibGUjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFRhYmxlU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUYWJsZVByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UYWJsZVByb3BzKG9iajogVGFibGVQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX1RhYmxlU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGFibGVTcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgVGFibGUuXG4gKlxuICogQHNjaGVtYSBUYWJsZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZVNwZWMge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgYXR0cmlidXRlcyB0aGF0IGRlc2NyaWJlIHRoZSBrZXkgc2NoZW1hIGZvciB0aGUgdGFibGUgYW5kIGluZGV4ZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjI2F0dHJpYnV0ZURlZmluaXRpb25zXG4gICAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVEZWZpbml0aW9uczogVGFibGVTcGVjQXR0cmlidXRlRGVmaW5pdGlvbnNbXTtcblxuICAvKipcbiAgICogQ29udHJvbHMgaG93IHlvdSBhcmUgY2hhcmdlZCBmb3IgcmVhZCBhbmQgd3JpdGUgdGhyb3VnaHB1dCBhbmQgaG93IHlvdSBtYW5hZ2UgY2FwYWNpdHkuIFRoaXMgc2V0dGluZyBjYW4gYmUgY2hhbmdlZCBsYXRlci5cbiAgICogKiBQUk9WSVNJT05FRCAtIFdlIHJlY29tbWVuZCB1c2luZyBQUk9WSVNJT05FRCBmb3IgcHJlZGljdGFibGUgd29ya2xvYWRzLiAgICBQUk9WSVNJT05FRCBzZXRzIHRoZSBiaWxsaW5nIG1vZGUgdG8gUHJvdmlzaW9uZWQgTW9kZSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sI0hvd0l0V29ya3MuUHJvdmlzaW9uZWRUaHJvdWdocHV0Lk1hbnVhbCkuXG4gICAqICogUEFZX1BFUl9SRVFVRVNUIC0gV2UgcmVjb21tZW5kIHVzaW5nIFBBWV9QRVJfUkVRVUVTVCBmb3IgdW5wcmVkaWN0YWJsZSAgICB3b3JrbG9hZHMuIFBBWV9QRVJfUkVRVUVTVCBzZXRzIHRoZSBiaWxsaW5nIG1vZGUgdG8gT24tRGVtYW5kIE1vZGUgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5SZWFkV3JpdGVDYXBhY2l0eU1vZGUuaHRtbCNIb3dJdFdvcmtzLk9uRGVtYW5kKS5cbiAgICpcbiAgICogQHNjaGVtYSBUYWJsZVNwZWMjYmlsbGluZ01vZGVcbiAgICovXG4gIHJlYWRvbmx5IGJpbGxpbmdNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPbmUgb3IgbW9yZSBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4ZXMgKHRoZSBtYXhpbXVtIGlzIDIwKSB0byBiZSBjcmVhdGVkIG9uIHRoZSB0YWJsZS4gRWFjaCBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4IGluIHRoZSBhcnJheSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nOlxuICAgKiAqIEluZGV4TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4LiBNdXN0IGJlIHVuaXF1ZSBvbmx5ICAgIGZvciB0aGlzIHRhYmxlLlxuICAgKiAqIEtleVNjaGVtYSAtIFNwZWNpZmllcyB0aGUga2V5IHNjaGVtYSBmb3IgdGhlIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXguXG4gICAqICogUHJvamVjdGlvbiAtIFNwZWNpZmllcyBhdHRyaWJ1dGVzIHRoYXQgYXJlIGNvcGllZCAocHJvamVjdGVkKSBmcm9tIHRoZSAgICB0YWJsZSBpbnRvIHRoZSBpbmRleC4gVGhlc2UgYXJlIGluIGFkZGl0aW9uIHRvIHRoZSBwcmltYXJ5IGtleSBhdHRyaWJ1dGVzICAgIGFuZCBpbmRleCBrZXkgYXR0cmlidXRlcywgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgcHJvamVjdGVkLiBFYWNoIGF0dHJpYnV0ZSAgICBzcGVjaWZpY2F0aW9uIGlzIGNvbXBvc2VkIG9mOiBQcm9qZWN0aW9uVHlwZSAtIE9uZSBvZiB0aGUgZm9sbG93aW5nOiBLRVlTX09OTFkgICAgLSBPbmx5IHRoZSBpbmRleCBhbmQgcHJpbWFyeSBrZXlzIGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgaW5kZXguIElOQ0xVREUgICAgLSBPbmx5IHRoZSBzcGVjaWZpZWQgdGFibGUgYXR0cmlidXRlcyBhcmUgcHJvamVjdGVkIGludG8gdGhlIGluZGV4LiBUaGUgICAgbGlzdCBvZiBwcm9qZWN0ZWQgYXR0cmlidXRlcyBpcyBpbiBOb25LZXlBdHRyaWJ1dGVzLiBBTEwgLSBBbGwgb2YgdGhlICAgIHRhYmxlIGF0dHJpYnV0ZXMgYXJlIHByb2plY3RlZCBpbnRvIHRoZSBpbmRleC4gTm9uS2V5QXR0cmlidXRlcyAtIEEgbGlzdCAgICBvZiBvbmUgb3IgbW9yZSBub24ta2V5IGF0dHJpYnV0ZSBuYW1lcyB0aGF0IGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgc2Vjb25kYXJ5ICAgIGluZGV4LiBUaGUgdG90YWwgY291bnQgb2YgYXR0cmlidXRlcyBwcm92aWRlZCBpbiBOb25LZXlBdHRyaWJ1dGVzLCBzdW1tZWQgICAgYWNyb3NzIGFsbCBvZiB0aGUgc2Vjb25kYXJ5IGluZGV4ZXMsIG11c3Qgbm90IGV4Y2VlZCAxMDAuIElmIHlvdSBwcm9qZWN0ICAgIHRoZSBzYW1lIGF0dHJpYnV0ZSBpbnRvIHR3byBkaWZmZXJlbnQgaW5kZXhlcywgdGhpcyBjb3VudHMgYXMgdHdvIGRpc3RpbmN0ICAgIGF0dHJpYnV0ZXMgd2hlbiBkZXRlcm1pbmluZyB0aGUgdG90YWwuXG4gICAqICogUHJvdmlzaW9uZWRUaHJvdWdocHV0IC0gVGhlIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgc2V0dGluZ3MgZm9yIHRoZSAgICBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4LCBjb25zaXN0aW5nIG9mIHJlYWQgYW5kIHdyaXRlIGNhcGFjaXR5IHVuaXRzLlxuICAgKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlYyNnbG9iYWxTZWNvbmRhcnlJbmRleGVzXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxTZWNvbmRhcnlJbmRleGVzPzogVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGF0dHJpYnV0ZXMgdGhhdCBtYWtlIHVwIHRoZSBwcmltYXJ5IGtleSBmb3IgYSB0YWJsZSBvciBhbiBpbmRleC4gVGhlIGF0dHJpYnV0ZXMgaW4gS2V5U2NoZW1hIG11c3QgYWxzbyBiZSBkZWZpbmVkIGluIHRoZSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBhcnJheS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEYXRhIE1vZGVsIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0RhdGFNb2RlbC5odG1sKSBpbiB0aGUgQW1hem9uIER5bmFtb0RCIERldmVsb3BlciBHdWlkZS5cbiAgICogRWFjaCBLZXlTY2hlbWFFbGVtZW50IGluIHRoZSBhcnJheSBpcyBjb21wb3NlZCBvZjpcbiAgICogKiBBdHRyaWJ1dGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhpcyBrZXkgYXR0cmlidXRlLlxuICAgKiAqIEtleVR5cGUgLSBUaGUgcm9sZSB0aGF0IHRoZSBrZXkgYXR0cmlidXRlIHdpbGwgYXNzdW1lOiBIQVNIIC0gcGFydGl0aW9uICAgIGtleSBSQU5HRSAtIHNvcnQga2V5XG4gICAqIFRoZSBwYXJ0aXRpb24ga2V5IG9mIGFuIGl0ZW0gaXMgYWxzbyBrbm93biBhcyBpdHMgaGFzaCBhdHRyaWJ1dGUuIFRoZSB0ZXJtIFwiaGFzaCBhdHRyaWJ1dGVcIiBkZXJpdmVzIGZyb20gdGhlIER5bmFtb0RCIHVzYWdlIG9mIGFuIGludGVybmFsIGhhc2ggZnVuY3Rpb24gdG8gZXZlbmx5IGRpc3RyaWJ1dGUgZGF0YSBpdGVtcyBhY3Jvc3MgcGFydGl0aW9ucywgYmFzZWQgb24gdGhlaXIgcGFydGl0aW9uIGtleSB2YWx1ZXMuXG4gICAqIFRoZSBzb3J0IGtleSBvZiBhbiBpdGVtIGlzIGFsc28ga25vd24gYXMgaXRzIHJhbmdlIGF0dHJpYnV0ZS4gVGhlIHRlcm0gXCJyYW5nZSBhdHRyaWJ1dGVcIiBkZXJpdmVzIGZyb20gdGhlIHdheSBEeW5hbW9EQiBzdG9yZXMgaXRlbXMgd2l0aCB0aGUgc2FtZSBwYXJ0aXRpb24ga2V5IHBoeXNpY2FsbHkgY2xvc2UgdG9nZXRoZXIsIGluIHNvcnRlZCBvcmRlciBieSB0aGUgc29ydCBrZXkgdmFsdWUuXG4gICAqIEZvciBhIHNpbXBsZSBwcmltYXJ5IGtleSAocGFydGl0aW9uIGtleSksIHlvdSBtdXN0IHByb3ZpZGUgZXhhY3RseSBvbmUgZWxlbWVudCB3aXRoIGEgS2V5VHlwZSBvZiBIQVNILlxuICAgKiBGb3IgYSBjb21wb3NpdGUgcHJpbWFyeSBrZXkgKHBhcnRpdGlvbiBrZXkgYW5kIHNvcnQga2V5KSwgeW91IG11c3QgcHJvdmlkZSBleGFjdGx5IHR3byBlbGVtZW50cywgaW4gdGhpcyBvcmRlcjogVGhlIGZpcnN0IGVsZW1lbnQgbXVzdCBoYXZlIGEgS2V5VHlwZSBvZiBIQVNILCBhbmQgdGhlIHNlY29uZCBlbGVtZW50IG11c3QgaGF2ZSBhIEtleVR5cGUgb2YgUkFOR0UuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgV29ya2luZyB3aXRoIFRhYmxlcyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Xb3JraW5nV2l0aFRhYmxlcy5odG1sI1dvcmtpbmdXaXRoVGFibGVzLnByaW1hcnkua2V5KSBpbiB0aGUgQW1hem9uIER5bmFtb0RCIERldmVsb3BlciBHdWlkZS5cbiAgICpcbiAgICogQHNjaGVtYSBUYWJsZVNwZWMja2V5U2NoZW1hXG4gICAqL1xuICByZWFkb25seSBrZXlTY2hlbWE6IFRhYmxlU3BlY0tleVNjaGVtYVtdO1xuXG4gIC8qKlxuICAgKiBPbmUgb3IgbW9yZSBsb2NhbCBzZWNvbmRhcnkgaW5kZXhlcyAodGhlIG1heGltdW0gaXMgNSkgdG8gYmUgY3JlYXRlZCBvbiB0aGUgdGFibGUuIEVhY2ggaW5kZXggaXMgc2NvcGVkIHRvIGEgZ2l2ZW4gcGFydGl0aW9uIGtleSB2YWx1ZS4gVGhlcmUgaXMgYSAxMCBHQiBzaXplIGxpbWl0IHBlciBwYXJ0aXRpb24ga2V5IHZhbHVlOyBvdGhlcndpc2UsIHRoZSBzaXplIG9mIGEgbG9jYWwgc2Vjb25kYXJ5IGluZGV4IGlzIHVuY29uc3RyYWluZWQuXG4gICAqIEVhY2ggbG9jYWwgc2Vjb25kYXJ5IGluZGV4IGluIHRoZSBhcnJheSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nOlxuICAgKiAqIEluZGV4TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBsb2NhbCBzZWNvbmRhcnkgaW5kZXguIE11c3QgYmUgdW5pcXVlIG9ubHkgICAgZm9yIHRoaXMgdGFibGUuXG4gICAqICogS2V5U2NoZW1hIC0gU3BlY2lmaWVzIHRoZSBrZXkgc2NoZW1hIGZvciB0aGUgbG9jYWwgc2Vjb25kYXJ5IGluZGV4LiAgICBUaGUga2V5IHNjaGVtYSBtdXN0IGJlZ2luIHdpdGggdGhlIHNhbWUgcGFydGl0aW9uIGtleSBhcyB0aGUgdGFibGUuXG4gICAqICogUHJvamVjdGlvbiAtIFNwZWNpZmllcyBhdHRyaWJ1dGVzIHRoYXQgYXJlIGNvcGllZCAocHJvamVjdGVkKSBmcm9tIHRoZSAgICB0YWJsZSBpbnRvIHRoZSBpbmRleC4gVGhlc2UgYXJlIGluIGFkZGl0aW9uIHRvIHRoZSBwcmltYXJ5IGtleSBhdHRyaWJ1dGVzICAgIGFuZCBpbmRleCBrZXkgYXR0cmlidXRlcywgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgcHJvamVjdGVkLiBFYWNoIGF0dHJpYnV0ZSAgICBzcGVjaWZpY2F0aW9uIGlzIGNvbXBvc2VkIG9mOiBQcm9qZWN0aW9uVHlwZSAtIE9uZSBvZiB0aGUgZm9sbG93aW5nOiBLRVlTX09OTFkgICAgLSBPbmx5IHRoZSBpbmRleCBhbmQgcHJpbWFyeSBrZXlzIGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgaW5kZXguIElOQ0xVREUgICAgLSBPbmx5IHRoZSBzcGVjaWZpZWQgdGFibGUgYXR0cmlidXRlcyBhcmUgcHJvamVjdGVkIGludG8gdGhlIGluZGV4LiBUaGUgICAgbGlzdCBvZiBwcm9qZWN0ZWQgYXR0cmlidXRlcyBpcyBpbiBOb25LZXlBdHRyaWJ1dGVzLiBBTEwgLSBBbGwgb2YgdGhlICAgIHRhYmxlIGF0dHJpYnV0ZXMgYXJlIHByb2plY3RlZCBpbnRvIHRoZSBpbmRleC4gTm9uS2V5QXR0cmlidXRlcyAtIEEgbGlzdCAgICBvZiBvbmUgb3IgbW9yZSBub24ta2V5IGF0dHJpYnV0ZSBuYW1lcyB0aGF0IGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgc2Vjb25kYXJ5ICAgIGluZGV4LiBUaGUgdG90YWwgY291bnQgb2YgYXR0cmlidXRlcyBwcm92aWRlZCBpbiBOb25LZXlBdHRyaWJ1dGVzLCBzdW1tZWQgICAgYWNyb3NzIGFsbCBvZiB0aGUgc2Vjb25kYXJ5IGluZGV4ZXMsIG11c3Qgbm90IGV4Y2VlZCAxMDAuIElmIHlvdSBwcm9qZWN0ICAgIHRoZSBzYW1lIGF0dHJpYnV0ZSBpbnRvIHR3byBkaWZmZXJlbnQgaW5kZXhlcywgdGhpcyBjb3VudHMgYXMgdHdvIGRpc3RpbmN0ICAgIGF0dHJpYnV0ZXMgd2hlbiBkZXRlcm1pbmluZyB0aGUgdG90YWwuXG4gICAqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjI2xvY2FsU2Vjb25kYXJ5SW5kZXhlc1xuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWxTZWNvbmRhcnlJbmRleGVzPzogVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzW107XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgc2V0dGluZ3MgZm9yIGEgc3BlY2lmaWVkIHRhYmxlIG9yIGluZGV4LiBUaGUgc2V0dGluZ3MgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoZSBVcGRhdGVUYWJsZSBvcGVyYXRpb24uXG4gICAqIElmIHlvdSBzZXQgQmlsbGluZ01vZGUgYXMgUFJPVklTSU9ORUQsIHlvdSBtdXN0IHNwZWNpZnkgdGhpcyBwcm9wZXJ0eS4gSWYgeW91IHNldCBCaWxsaW5nTW9kZSBhcyBQQVlfUEVSX1JFUVVFU1QsIHlvdSBjYW5ub3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LlxuICAgKiBGb3IgY3VycmVudCBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgdmFsdWVzLCBzZWUgU2VydmljZSwgQWNjb3VudCwgYW5kIFRhYmxlIFF1b3RhcyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9MaW1pdHMuaHRtbCkgaW4gdGhlIEFtYXpvbiBEeW5hbW9EQiBEZXZlbG9wZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjI3Byb3Zpc2lvbmVkVGhyb3VnaHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlzaW9uZWRUaHJvdWdocHV0PzogVGFibGVTcGVjUHJvdmlzaW9uZWRUaHJvdWdocHV0O1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBzZXR0aW5ncyB1c2VkIHRvIGVuYWJsZSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlYyNzc2VTcGVjaWZpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBzc2VTcGVjaWZpY2F0aW9uPzogVGFibGVTcGVjU3NlU3BlY2lmaWNhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIGZvciBEeW5hbW9EQiBTdHJlYW1zIG9uIHRoZSB0YWJsZS4gVGhlc2Ugc2V0dGluZ3MgY29uc2lzdCBvZjpcbiAgICogKiBTdHJlYW1FbmFibGVkIC0gSW5kaWNhdGVzIHdoZXRoZXIgRHluYW1vREIgU3RyZWFtcyBpcyB0byBiZSBlbmFibGVkICAgICh0cnVlKSBvciBkaXNhYmxlZCAoZmFsc2UpLlxuICAgKiAqIFN0cmVhbVZpZXdUeXBlIC0gV2hlbiBhbiBpdGVtIGluIHRoZSB0YWJsZSBpcyBtb2RpZmllZCwgU3RyZWFtVmlld1R5cGUgICAgZGV0ZXJtaW5lcyB3aGF0IGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlIHRhYmxlJ3Mgc3RyZWFtLiBWYWxpZCB2YWx1ZXMgICAgZm9yIFN0cmVhbVZpZXdUeXBlIGFyZTogS0VZU19PTkxZIC0gT25seSB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGlmaWVkICAgIGl0ZW0gYXJlIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS4gTkVXX0lNQUdFIC0gVGhlIGVudGlyZSBpdGVtLCBhcyBpdCBhcHBlYXJzICAgIGFmdGVyIGl0IHdhcyBtb2RpZmllZCwgaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtLiBPTERfSU1BR0UgLSBUaGUgZW50aXJlICAgIGl0ZW0sIGFzIGl0IGFwcGVhcmVkIGJlZm9yZSBpdCB3YXMgbW9kaWZpZWQsIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS4gICAgTkVXX0FORF9PTERfSU1BR0VTIC0gQm90aCB0aGUgbmV3IGFuZCB0aGUgb2xkIGl0ZW0gaW1hZ2VzIG9mIHRoZSBpdGVtICAgIGFyZSB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gICAqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjI3N0cmVhbVNwZWNpZmljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0cmVhbVNwZWNpZmljYXRpb24/OiBUYWJsZVNwZWNTdHJlYW1TcGVjaWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gY3JlYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlYyN0YWJsZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGxhYmVsIHRoZSB0YWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBUYWdnaW5nIGZvciBEeW5hbW9EQiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9UYWdnaW5nLmh0bWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlYyN0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogVGFibGVTcGVjVGFnc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1RhYmxlU3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjKG9iajogVGFibGVTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXR0cmlidXRlRGVmaW5pdGlvbnMnOiBvYmouYXR0cmlidXRlRGVmaW5pdGlvbnM/Lm1hcCh5ID0+IHRvSnNvbl9UYWJsZVNwZWNBdHRyaWJ1dGVEZWZpbml0aW9ucyh5KSksXG4gICAgJ2JpbGxpbmdNb2RlJzogb2JqLmJpbGxpbmdNb2RlLFxuICAgICdnbG9iYWxTZWNvbmRhcnlJbmRleGVzJzogb2JqLmdsb2JhbFNlY29uZGFyeUluZGV4ZXM/Lm1hcCh5ID0+IHRvSnNvbl9UYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzKHkpKSxcbiAgICAna2V5U2NoZW1hJzogb2JqLmtleVNjaGVtYT8ubWFwKHkgPT4gdG9Kc29uX1RhYmxlU3BlY0tleVNjaGVtYSh5KSksXG4gICAgJ2xvY2FsU2Vjb25kYXJ5SW5kZXhlcyc6IG9iai5sb2NhbFNlY29uZGFyeUluZGV4ZXM/Lm1hcCh5ID0+IHRvSnNvbl9UYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXMoeSkpLFxuICAgICdwcm92aXNpb25lZFRocm91Z2hwdXQnOiB0b0pzb25fVGFibGVTcGVjUHJvdmlzaW9uZWRUaHJvdWdocHV0KG9iai5wcm92aXNpb25lZFRocm91Z2hwdXQpLFxuICAgICdzc2VTcGVjaWZpY2F0aW9uJzogdG9Kc29uX1RhYmxlU3BlY1NzZVNwZWNpZmljYXRpb24ob2JqLnNzZVNwZWNpZmljYXRpb24pLFxuICAgICdzdHJlYW1TcGVjaWZpY2F0aW9uJzogdG9Kc29uX1RhYmxlU3BlY1N0cmVhbVNwZWNpZmljYXRpb24ob2JqLnN0cmVhbVNwZWNpZmljYXRpb24pLFxuICAgICd0YWJsZU5hbWUnOiBvYmoudGFibGVOYW1lLFxuICAgICd0YWdzJzogb2JqLnRhZ3M/Lm1hcCh5ID0+IHRvSnNvbl9UYWJsZVNwZWNUYWdzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGF0dHJpYnV0ZSBmb3IgZGVzY3JpYmluZyB0aGUga2V5IHNjaGVtYSBmb3IgdGhlIHRhYmxlIGFuZCBpbmRleGVzLlxuICpcbiAqIEBzY2hlbWEgVGFibGVTcGVjQXR0cmlidXRlRGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZVNwZWNBdHRyaWJ1dGVEZWZpbml0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY0F0dHJpYnV0ZURlZmluaXRpb25zI2F0dHJpYnV0ZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjQXR0cmlidXRlRGVmaW5pdGlvbnMjYXR0cmlidXRlVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlVHlwZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUYWJsZVNwZWNBdHRyaWJ1dGVEZWZpbml0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjQXR0cmlidXRlRGVmaW5pdGlvbnMob2JqOiBUYWJsZVNwZWNBdHRyaWJ1dGVEZWZpbml0aW9ucyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZU5hbWUnOiBvYmouYXR0cmlidXRlTmFtZSxcbiAgICAnYXR0cmlidXRlVHlwZSc6IG9iai5hdHRyaWJ1dGVUeXBlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHByb3BlcnRpZXMgb2YgYSBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4LlxuICpcbiAqIEBzY2hlbWEgVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzI2luZGV4TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXMja2V5U2NoZW1hXG4gICAqL1xuICByZWFkb25seSBrZXlTY2hlbWE/OiBUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hW107XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYXR0cmlidXRlcyB0aGF0IGFyZSBjb3BpZWQgKHByb2plY3RlZCkgZnJvbSB0aGUgdGFibGUgaW50byBhbiBpbmRleC4gVGhlc2UgYXJlIGluIGFkZGl0aW9uIHRvIHRoZSBwcmltYXJ5IGtleSBhdHRyaWJ1dGVzIGFuZCBpbmRleCBrZXkgYXR0cmlidXRlcywgd2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgcHJvamVjdGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXMjcHJvamVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdGlvbj86IFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNQcm9qZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBwcm92aXNpb25lZCB0aHJvdWdocHV0IHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCB0YWJsZSBvciBpbmRleC4gVGhlIHNldHRpbmdzIGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUgVXBkYXRlVGFibGUgb3BlcmF0aW9uLlxuICAgKiBGb3IgY3VycmVudCBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgdmFsdWVzLCBzZWUgU2VydmljZSwgQWNjb3VudCwgYW5kIFRhYmxlIFF1b3RhcyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9MaW1pdHMuaHRtbCkgaW4gdGhlIEFtYXpvbiBEeW5hbW9EQiBEZXZlbG9wZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyNwcm92aXNpb25lZFRocm91Z2hwdXRcbiAgICovXG4gIHJlYWRvbmx5IHByb3Zpc2lvbmVkVGhyb3VnaHB1dD86IFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNQcm92aXNpb25lZFRocm91Z2hwdXQ7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyhvYmo6IFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdpbmRleE5hbWUnOiBvYmouaW5kZXhOYW1lLFxuICAgICdrZXlTY2hlbWEnOiBvYmoua2V5U2NoZW1hPy5tYXAoeSA9PiB0b0pzb25fVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc0tleVNjaGVtYSh5KSksXG4gICAgJ3Byb2plY3Rpb24nOiB0b0pzb25fVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1Byb2plY3Rpb24ob2JqLnByb2plY3Rpb24pLFxuICAgICdwcm92aXNpb25lZFRocm91Z2hwdXQnOiB0b0pzb25fVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1Byb3Zpc2lvbmVkVGhyb3VnaHB1dChvYmoucHJvdmlzaW9uZWRUaHJvdWdocHV0KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGVsZW1lbnQgb2YgYSBrZXkgc2NoZW1hLiBBIGtleSBzY2hlbWEgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGVzIHRoYXQgbWFrZSB1cCB0aGUgcHJpbWFyeSBrZXkgb2YgYSB0YWJsZSwgb3IgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIGFuIGluZGV4LlxuICogQSBLZXlTY2hlbWFFbGVtZW50IHJlcHJlc2VudHMgZXhhY3RseSBvbmUgYXR0cmlidXRlIG9mIHRoZSBwcmltYXJ5IGtleS4gRm9yIGV4YW1wbGUsIGEgc2ltcGxlIHByaW1hcnkga2V5IHdvdWxkIGJlIHJlcHJlc2VudGVkIGJ5IG9uZSBLZXlTY2hlbWFFbGVtZW50IChmb3IgdGhlIHBhcnRpdGlvbiBrZXkpLiBBIGNvbXBvc2l0ZSBwcmltYXJ5IGtleSB3b3VsZCByZXF1aXJlIG9uZSBLZXlTY2hlbWFFbGVtZW50IGZvciB0aGUgcGFydGl0aW9uIGtleSwgYW5kIGFub3RoZXIgS2V5U2NoZW1hRWxlbWVudCBmb3IgdGhlIHNvcnQga2V5LlxuICogQSBLZXlTY2hlbWFFbGVtZW50IG11c3QgYmUgYSBzY2FsYXIsIHRvcC1sZXZlbCBhdHRyaWJ1dGUgKG5vdCBhIG5lc3RlZCBhdHRyaWJ1dGUpLiBUaGUgZGF0YSB0eXBlIG11c3QgYmUgb25lIG9mIFN0cmluZywgTnVtYmVyLCBvciBCaW5hcnkuIFRoZSBhdHRyaWJ1dGUgY2Fubm90IGJlIG5lc3RlZCB3aXRoaW4gYSBMaXN0IG9yIGEgTWFwLlxuICpcbiAqIEBzY2hlbWEgVGFibGVTcGVjS2V5U2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTcGVjS2V5U2NoZW1hIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjS2V5U2NoZW1hI2F0dHJpYnV0ZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjS2V5U2NoZW1hI2tleVR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGtleVR5cGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjS2V5U2NoZW1hJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UYWJsZVNwZWNLZXlTY2hlbWEob2JqOiBUYWJsZVNwZWNLZXlTY2hlbWEgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdHRyaWJ1dGVOYW1lJzogb2JqLmF0dHJpYnV0ZU5hbWUsXG4gICAgJ2tleVR5cGUnOiBvYmoua2V5VHlwZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbG9jYWwgc2Vjb25kYXJ5IGluZGV4LlxuICpcbiAqIEBzY2hlbWEgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzI2luZGV4TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY0xvY2FsU2Vjb25kYXJ5SW5kZXhlcyNrZXlTY2hlbWFcbiAgICovXG4gIHJlYWRvbmx5IGtleVNjaGVtYT86IFRhYmxlU3BlY0xvY2FsU2Vjb25kYXJ5SW5kZXhlc0tleVNjaGVtYVtdO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGF0dHJpYnV0ZXMgdGhhdCBhcmUgY29waWVkIChwcm9qZWN0ZWQpIGZyb20gdGhlIHRhYmxlIGludG8gYW4gaW5kZXguIFRoZXNlIGFyZSBpbiBhZGRpdGlvbiB0byB0aGUgcHJpbWFyeSBrZXkgYXR0cmlidXRlcyBhbmQgaW5kZXgga2V5IGF0dHJpYnV0ZXMsIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IHByb2plY3RlZC5cbiAgICpcbiAgICogQHNjaGVtYSBUYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXMjcHJvamVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdGlvbj86IFRhYmxlU3BlY0xvY2FsU2Vjb25kYXJ5SW5kZXhlc1Byb2plY3Rpb247XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXMob2JqOiBUYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdpbmRleE5hbWUnOiBvYmouaW5kZXhOYW1lLFxuICAgICdrZXlTY2hlbWEnOiBvYmoua2V5U2NoZW1hPy5tYXAoeSA9PiB0b0pzb25fVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hKHkpKSxcbiAgICAncHJvamVjdGlvbic6IHRvSnNvbl9UYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXNQcm9qZWN0aW9uKG9iai5wcm9qZWN0aW9uKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBwcm92aXNpb25lZCB0aHJvdWdocHV0IHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCB0YWJsZSBvciBpbmRleC4gVGhlIHNldHRpbmdzIGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUgVXBkYXRlVGFibGUgb3BlcmF0aW9uLlxuICogSWYgeW91IHNldCBCaWxsaW5nTW9kZSBhcyBQUk9WSVNJT05FRCwgeW91IG11c3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBJZiB5b3Ugc2V0IEJpbGxpbmdNb2RlIGFzIFBBWV9QRVJfUkVRVUVTVCwgeW91IGNhbm5vdCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkuXG4gKiBGb3IgY3VycmVudCBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgdmFsdWVzLCBzZWUgU2VydmljZSwgQWNjb3VudCwgYW5kIFRhYmxlIFF1b3RhcyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9MaW1pdHMuaHRtbCkgaW4gdGhlIEFtYXpvbiBEeW5hbW9EQiBEZXZlbG9wZXIgR3VpZGUuXG4gKlxuICogQHNjaGVtYSBUYWJsZVNwZWNQcm92aXNpb25lZFRocm91Z2hwdXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZVNwZWNQcm92aXNpb25lZFRocm91Z2hwdXQge1xuICAvKipcbiAgICogQHNjaGVtYSBUYWJsZVNwZWNQcm92aXNpb25lZFRocm91Z2hwdXQjcmVhZENhcGFjaXR5VW5pdHNcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRDYXBhY2l0eVVuaXRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY1Byb3Zpc2lvbmVkVGhyb3VnaHB1dCN3cml0ZUNhcGFjaXR5VW5pdHNcbiAgICovXG4gIHJlYWRvbmx5IHdyaXRlQ2FwYWNpdHlVbml0cz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUYWJsZVNwZWNQcm92aXNpb25lZFRocm91Z2hwdXQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1RhYmxlU3BlY1Byb3Zpc2lvbmVkVGhyb3VnaHB1dChvYmo6IFRhYmxlU3BlY1Byb3Zpc2lvbmVkVGhyb3VnaHB1dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlYWRDYXBhY2l0eVVuaXRzJzogb2JqLnJlYWRDYXBhY2l0eVVuaXRzLFxuICAgICd3cml0ZUNhcGFjaXR5VW5pdHMnOiBvYmoud3JpdGVDYXBhY2l0eVVuaXRzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHNldHRpbmdzIHVzZWQgdG8gZW5hYmxlIHNlcnZlci1zaWRlIGVuY3J5cHRpb24uXG4gKlxuICogQHNjaGVtYSBUYWJsZVNwZWNTc2VTcGVjaWZpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTcGVjU3NlU3BlY2lmaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY1NzZVNwZWNpZmljYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjU3NlU3BlY2lmaWNhdGlvbiNrbXNNYXN0ZXJLZXlJRFxuICAgKi9cbiAgcmVhZG9ubHkga21zTWFzdGVyS2V5SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjU3NlU3BlY2lmaWNhdGlvbiNzc2VUeXBlXG4gICAqL1xuICByZWFkb25seSBzc2VUeXBlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1RhYmxlU3BlY1NzZVNwZWNpZmljYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1RhYmxlU3BlY1NzZVNwZWNpZmljYXRpb24ob2JqOiBUYWJsZVNwZWNTc2VTcGVjaWZpY2F0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdrbXNNYXN0ZXJLZXlJRCc6IG9iai5rbXNNYXN0ZXJLZXlJZCxcbiAgICAnc3NlVHlwZSc6IG9iai5zc2VUeXBlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyBmb3IgRHluYW1vREIgU3RyZWFtcyBvbiB0aGUgdGFibGUuIFRoZXNlIHNldHRpbmdzIGNvbnNpc3Qgb2Y6XG4gKiAqIFN0cmVhbUVuYWJsZWQgLSBJbmRpY2F0ZXMgd2hldGhlciBEeW5hbW9EQiBTdHJlYW1zIGlzIHRvIGJlIGVuYWJsZWQgICAgKHRydWUpIG9yIGRpc2FibGVkIChmYWxzZSkuXG4gKiAqIFN0cmVhbVZpZXdUeXBlIC0gV2hlbiBhbiBpdGVtIGluIHRoZSB0YWJsZSBpcyBtb2RpZmllZCwgU3RyZWFtVmlld1R5cGUgICAgZGV0ZXJtaW5lcyB3aGF0IGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlIHRhYmxlJ3Mgc3RyZWFtLiBWYWxpZCB2YWx1ZXMgICAgZm9yIFN0cmVhbVZpZXdUeXBlIGFyZTogS0VZU19PTkxZIC0gT25seSB0aGUga2V5IGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGlmaWVkICAgIGl0ZW0gYXJlIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS4gTkVXX0lNQUdFIC0gVGhlIGVudGlyZSBpdGVtLCBhcyBpdCBhcHBlYXJzICAgIGFmdGVyIGl0IHdhcyBtb2RpZmllZCwgaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtLiBPTERfSU1BR0UgLSBUaGUgZW50aXJlICAgIGl0ZW0sIGFzIGl0IGFwcGVhcmVkIGJlZm9yZSBpdCB3YXMgbW9kaWZpZWQsIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS4gICAgTkVXX0FORF9PTERfSU1BR0VTIC0gQm90aCB0aGUgbmV3IGFuZCB0aGUgb2xkIGl0ZW0gaW1hZ2VzIG9mIHRoZSBpdGVtICAgIGFyZSB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gKlxuICogQHNjaGVtYSBUYWJsZVNwZWNTdHJlYW1TcGVjaWZpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTcGVjU3RyZWFtU3BlY2lmaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY1N0cmVhbVNwZWNpZmljYXRpb24jc3RyZWFtRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZWFtRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjU3RyZWFtU3BlY2lmaWNhdGlvbiNzdHJlYW1WaWV3VHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZWFtVmlld1R5cGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjU3RyZWFtU3BlY2lmaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjU3RyZWFtU3BlY2lmaWNhdGlvbihvYmo6IFRhYmxlU3BlY1N0cmVhbVNwZWNpZmljYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdHJlYW1FbmFibGVkJzogb2JqLnN0cmVhbUVuYWJsZWQsXG4gICAgJ3N0cmVhbVZpZXdUeXBlJzogb2JqLnN0cmVhbVZpZXdUeXBlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIERlc2NyaWJlcyBhIHRhZy4gQSB0YWcgaXMgYSBrZXktdmFsdWUgcGFpci4gWW91IGNhbiBhZGQgdXAgdG8gNTAgdGFncyB0byBhIHNpbmdsZSBEeW5hbW9EQiB0YWJsZS5cbiAqIEFXUy1hc3NpZ25lZCB0YWcgbmFtZXMgYW5kIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0aGUgYXdzOiBwcmVmaXgsIHdoaWNoIHRoZSB1c2VyIGNhbm5vdCBhc3NpZ24uIEFXUy1hc3NpZ25lZCB0YWcgbmFtZXMgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHRhZyBsaW1pdCBvZiA1MC4gVXNlci1hc3NpZ25lZCB0YWcgbmFtZXMgaGF2ZSB0aGUgcHJlZml4IHVzZXI6IGluIHRoZSBDb3N0IEFsbG9jYXRpb24gUmVwb3J0LiBZb3UgY2Fubm90IGJhY2tkYXRlIHRoZSBhcHBsaWNhdGlvbiBvZiBhIHRhZy5cbiAqIEZvciBhbiBvdmVydmlldyBvbiB0YWdnaW5nIER5bmFtb0RCIHJlc291cmNlcywgc2VlIFRhZ2dpbmcgZm9yIER5bmFtb0RCIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL1RhZ2dpbmcuaHRtbCkgaW4gdGhlIEFtYXpvbiBEeW5hbW9EQiBEZXZlbG9wZXIgR3VpZGUuXG4gKlxuICogQHNjaGVtYSBUYWJsZVNwZWNUYWdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTcGVjVGFncyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY1RhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjVGFncyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjVGFncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjVGFncyhvYmo6IFRhYmxlU3BlY1RhZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGVsZW1lbnQgb2YgYSBrZXkgc2NoZW1hLiBBIGtleSBzY2hlbWEgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGVzIHRoYXQgbWFrZSB1cCB0aGUgcHJpbWFyeSBrZXkgb2YgYSB0YWJsZSwgb3IgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIGFuIGluZGV4LlxuICogQSBLZXlTY2hlbWFFbGVtZW50IHJlcHJlc2VudHMgZXhhY3RseSBvbmUgYXR0cmlidXRlIG9mIHRoZSBwcmltYXJ5IGtleS4gRm9yIGV4YW1wbGUsIGEgc2ltcGxlIHByaW1hcnkga2V5IHdvdWxkIGJlIHJlcHJlc2VudGVkIGJ5IG9uZSBLZXlTY2hlbWFFbGVtZW50IChmb3IgdGhlIHBhcnRpdGlvbiBrZXkpLiBBIGNvbXBvc2l0ZSBwcmltYXJ5IGtleSB3b3VsZCByZXF1aXJlIG9uZSBLZXlTY2hlbWFFbGVtZW50IGZvciB0aGUgcGFydGl0aW9uIGtleSwgYW5kIGFub3RoZXIgS2V5U2NoZW1hRWxlbWVudCBmb3IgdGhlIHNvcnQga2V5LlxuICogQSBLZXlTY2hlbWFFbGVtZW50IG11c3QgYmUgYSBzY2FsYXIsIHRvcC1sZXZlbCBhdHRyaWJ1dGUgKG5vdCBhIG5lc3RlZCBhdHRyaWJ1dGUpLiBUaGUgZGF0YSB0eXBlIG11c3QgYmUgb25lIG9mIFN0cmluZywgTnVtYmVyLCBvciBCaW5hcnkuIFRoZSBhdHRyaWJ1dGUgY2Fubm90IGJlIG5lc3RlZCB3aXRoaW4gYSBMaXN0IG9yIGEgTWFwLlxuICpcbiAqIEBzY2hlbWEgVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc0tleVNjaGVtYVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNLZXlTY2hlbWEge1xuICAvKipcbiAgICogQHNjaGVtYSBUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hI2F0dHJpYnV0ZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc0tleVNjaGVtYSNrZXlUeXBlXG4gICAqL1xuICByZWFkb25seSBrZXlUeXBlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1RhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNLZXlTY2hlbWEnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1RhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNLZXlTY2hlbWEob2JqOiBUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXR0cmlidXRlTmFtZSc6IG9iai5hdHRyaWJ1dGVOYW1lLFxuICAgICdrZXlUeXBlJzogb2JqLmtleVR5cGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogUmVwcmVzZW50cyBhdHRyaWJ1dGVzIHRoYXQgYXJlIGNvcGllZCAocHJvamVjdGVkKSBmcm9tIHRoZSB0YWJsZSBpbnRvIGFuIGluZGV4LiBUaGVzZSBhcmUgaW4gYWRkaXRpb24gdG8gdGhlIHByaW1hcnkga2V5IGF0dHJpYnV0ZXMgYW5kIGluZGV4IGtleSBhdHRyaWJ1dGVzLCB3aGljaCBhcmUgYXV0b21hdGljYWxseSBwcm9qZWN0ZWQuXG4gKlxuICogQHNjaGVtYSBUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzUHJvamVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNQcm9qZWN0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1Byb2plY3Rpb24jbm9uS2V5QXR0cmlidXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9uS2V5QXR0cmlidXRlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNQcm9qZWN0aW9uI3Byb2plY3Rpb25UeXBlXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0aW9uVHlwZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzUHJvamVjdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1Byb2plY3Rpb24ob2JqOiBUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzUHJvamVjdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25vbktleUF0dHJpYnV0ZXMnOiBvYmoubm9uS2V5QXR0cmlidXRlcz8ubWFwKHkgPT4geSksXG4gICAgJ3Byb2plY3Rpb25UeXBlJzogb2JqLnByb2plY3Rpb25UeXBlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgc2V0dGluZ3MgZm9yIGEgc3BlY2lmaWVkIHRhYmxlIG9yIGluZGV4LiBUaGUgc2V0dGluZ3MgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIHRoZSBVcGRhdGVUYWJsZSBvcGVyYXRpb24uXG4gKiBGb3IgY3VycmVudCBtaW5pbXVtIGFuZCBtYXhpbXVtIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQgdmFsdWVzLCBzZWUgU2VydmljZSwgQWNjb3VudCwgYW5kIFRhYmxlIFF1b3RhcyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9MaW1pdHMuaHRtbCkgaW4gdGhlIEFtYXpvbiBEeW5hbW9EQiBEZXZlbG9wZXIgR3VpZGUuXG4gKlxuICogQHNjaGVtYSBUYWJsZVNwZWNHbG9iYWxTZWNvbmRhcnlJbmRleGVzUHJvdmlzaW9uZWRUaHJvdWdocHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1Byb3Zpc2lvbmVkVGhyb3VnaHB1dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNQcm92aXNpb25lZFRocm91Z2hwdXQjcmVhZENhcGFjaXR5VW5pdHNcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRDYXBhY2l0eVVuaXRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNQcm92aXNpb25lZFRocm91Z2hwdXQjd3JpdGVDYXBhY2l0eVVuaXRzXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNhcGFjaXR5VW5pdHM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1Byb3Zpc2lvbmVkVGhyb3VnaHB1dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1Byb3Zpc2lvbmVkVGhyb3VnaHB1dChvYmo6IFRhYmxlU3BlY0dsb2JhbFNlY29uZGFyeUluZGV4ZXNQcm92aXNpb25lZFRocm91Z2hwdXQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWFkQ2FwYWNpdHlVbml0cyc6IG9iai5yZWFkQ2FwYWNpdHlVbml0cyxcbiAgICAnd3JpdGVDYXBhY2l0eVVuaXRzJzogb2JqLndyaXRlQ2FwYWNpdHlVbml0cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGVsZW1lbnQgb2YgYSBrZXkgc2NoZW1hLiBBIGtleSBzY2hlbWEgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGVzIHRoYXQgbWFrZSB1cCB0aGUgcHJpbWFyeSBrZXkgb2YgYSB0YWJsZSwgb3IgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIGFuIGluZGV4LlxuICogQSBLZXlTY2hlbWFFbGVtZW50IHJlcHJlc2VudHMgZXhhY3RseSBvbmUgYXR0cmlidXRlIG9mIHRoZSBwcmltYXJ5IGtleS4gRm9yIGV4YW1wbGUsIGEgc2ltcGxlIHByaW1hcnkga2V5IHdvdWxkIGJlIHJlcHJlc2VudGVkIGJ5IG9uZSBLZXlTY2hlbWFFbGVtZW50IChmb3IgdGhlIHBhcnRpdGlvbiBrZXkpLiBBIGNvbXBvc2l0ZSBwcmltYXJ5IGtleSB3b3VsZCByZXF1aXJlIG9uZSBLZXlTY2hlbWFFbGVtZW50IGZvciB0aGUgcGFydGl0aW9uIGtleSwgYW5kIGFub3RoZXIgS2V5U2NoZW1hRWxlbWVudCBmb3IgdGhlIHNvcnQga2V5LlxuICogQSBLZXlTY2hlbWFFbGVtZW50IG11c3QgYmUgYSBzY2FsYXIsIHRvcC1sZXZlbCBhdHRyaWJ1dGUgKG5vdCBhIG5lc3RlZCBhdHRyaWJ1dGUpLiBUaGUgZGF0YSB0eXBlIG11c3QgYmUgb25lIG9mIFN0cmluZywgTnVtYmVyLCBvciBCaW5hcnkuIFRoZSBhdHRyaWJ1dGUgY2Fubm90IGJlIG5lc3RlZCB3aXRoaW4gYSBMaXN0IG9yIGEgTWFwLlxuICpcbiAqIEBzY2hlbWEgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hI2F0dHJpYnV0ZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hI2tleVR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGtleVR5cGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzS2V5U2NoZW1hJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXNLZXlTY2hlbWEob2JqOiBUYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXNLZXlTY2hlbWEgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdHRyaWJ1dGVOYW1lJzogb2JqLmF0dHJpYnV0ZU5hbWUsXG4gICAgJ2tleVR5cGUnOiBvYmoua2V5VHlwZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXByZXNlbnRzIGF0dHJpYnV0ZXMgdGhhdCBhcmUgY29waWVkIChwcm9qZWN0ZWQpIGZyb20gdGhlIHRhYmxlIGludG8gYW4gaW5kZXguIFRoZXNlIGFyZSBpbiBhZGRpdGlvbiB0byB0aGUgcHJpbWFyeSBrZXkgYXR0cmlidXRlcyBhbmQgaW5kZXgga2V5IGF0dHJpYnV0ZXMsIHdoaWNoIGFyZSBhdXRvbWF0aWNhbGx5IHByb2plY3RlZC5cbiAqXG4gKiBAc2NoZW1hIFRhYmxlU3BlY0xvY2FsU2Vjb25kYXJ5SW5kZXhlc1Byb2plY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZVNwZWNMb2NhbFNlY29uZGFyeUluZGV4ZXNQcm9qZWN0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzUHJvamVjdGlvbiNub25LZXlBdHRyaWJ1dGVzXG4gICAqL1xuICByZWFkb25seSBub25LZXlBdHRyaWJ1dGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzUHJvamVjdGlvbiNwcm9qZWN0aW9uVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdGlvblR5cGU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzUHJvamVjdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGFibGVTcGVjTG9jYWxTZWNvbmRhcnlJbmRleGVzUHJvamVjdGlvbihvYmo6IFRhYmxlU3BlY0xvY2FsU2Vjb25kYXJ5SW5kZXhlc1Byb2plY3Rpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdub25LZXlBdHRyaWJ1dGVzJzogb2JqLm5vbktleUF0dHJpYnV0ZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdwcm9qZWN0aW9uVHlwZSc6IG9iai5wcm9qZWN0aW9uVHlwZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuIl19
@@ -0,0 +1,173 @@
1
+ import { ApiObject, ApiObjectMetadata, GroupVersionKind } from 'cdk8s';
2
+ import { Construct } from 'constructs';
3
+ /**
4
+ * SecurityGroup is the Schema for the SecurityGroups API
5
+ *
6
+ * @schema SecurityGroup
7
+ */
8
+ export declare class SecurityGroup extends ApiObject {
9
+ /**
10
+ * Returns the apiVersion and kind for "SecurityGroup"
11
+ */
12
+ static readonly GVK: GroupVersionKind;
13
+ /**
14
+ * Renders a Kubernetes manifest for "SecurityGroup".
15
+ *
16
+ * This can be used to inline resource manifests inside other objects (e.g. as templates).
17
+ *
18
+ * @param props initialization props
19
+ */
20
+ static manifest(props?: SecurityGroupProps): any;
21
+ /**
22
+ * Defines a "SecurityGroup" API object
23
+ * @param scope the scope in which to define this object
24
+ * @param id a scope-local name for the object
25
+ * @param props initialization props
26
+ */
27
+ constructor(scope: Construct, id: string, props?: SecurityGroupProps);
28
+ /**
29
+ * Renders the object to Kubernetes JSON.
30
+ */
31
+ toJson(): any;
32
+ }
33
+ /**
34
+ * SecurityGroup is the Schema for the SecurityGroups API
35
+ *
36
+ * @schema SecurityGroup
37
+ */
38
+ export interface SecurityGroupProps {
39
+ /**
40
+ * @schema SecurityGroup#metadata
41
+ */
42
+ readonly metadata?: ApiObjectMetadata;
43
+ /**
44
+ * SecurityGroupSpec defines the desired state of SecurityGroup.
45
+ * Describes a security group.
46
+ *
47
+ * @schema SecurityGroup#spec
48
+ */
49
+ readonly spec?: SecurityGroupSpec;
50
+ }
51
+ /**
52
+ * Converts an object of type 'SecurityGroupProps' to JSON representation.
53
+ */
54
+ export declare function toJson_SecurityGroupProps(obj: SecurityGroupProps | undefined): Record<string, any> | undefined;
55
+ /**
56
+ * SecurityGroupSpec defines the desired state of SecurityGroup.
57
+ * Describes a security group.
58
+ *
59
+ * @schema SecurityGroupSpec
60
+ */
61
+ export interface SecurityGroupSpec {
62
+ /**
63
+ * A description for the security group. This is informational only.
64
+ * Constraints: Up to 255 characters in length
65
+ * Constraints for EC2-Classic: ASCII characters
66
+ * Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
67
+ *
68
+ * @schema SecurityGroupSpec#description
69
+ */
70
+ readonly description: string;
71
+ /**
72
+ * The name of the security group.
73
+ * Constraints: Up to 255 characters in length. Cannot start with sg-.
74
+ * Constraints for EC2-Classic: ASCII characters
75
+ * Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
76
+ *
77
+ * @schema SecurityGroupSpec#name
78
+ */
79
+ readonly name: string;
80
+ /**
81
+ * The tags to assign to the security group.
82
+ *
83
+ * @schema SecurityGroupSpec#tagSpecifications
84
+ */
85
+ readonly tagSpecifications?: SecurityGroupSpecTagSpecifications[];
86
+ /**
87
+ * [EC2-VPC] The ID of the VPC. Required for EC2-VPC.
88
+ *
89
+ * @schema SecurityGroupSpec#vpcID
90
+ */
91
+ readonly vpcId?: string;
92
+ /**
93
+ * AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference type to provide more user friendly syntax for references using 'from' field Ex: APIIDRef: from: name: my-api
94
+ *
95
+ * @schema SecurityGroupSpec#vpcRef
96
+ */
97
+ readonly vpcRef?: SecurityGroupSpecVpcRef;
98
+ }
99
+ /**
100
+ * Converts an object of type 'SecurityGroupSpec' to JSON representation.
101
+ */
102
+ export declare function toJson_SecurityGroupSpec(obj: SecurityGroupSpec | undefined): Record<string, any> | undefined;
103
+ /**
104
+ * The tags to apply to a resource when the resource is being created.
105
+ *
106
+ * @schema SecurityGroupSpecTagSpecifications
107
+ */
108
+ export interface SecurityGroupSpecTagSpecifications {
109
+ /**
110
+ * @schema SecurityGroupSpecTagSpecifications#resourceType
111
+ */
112
+ readonly resourceType?: string;
113
+ /**
114
+ * @schema SecurityGroupSpecTagSpecifications#tags
115
+ */
116
+ readonly tags?: SecurityGroupSpecTagSpecificationsTags[];
117
+ }
118
+ /**
119
+ * Converts an object of type 'SecurityGroupSpecTagSpecifications' to JSON representation.
120
+ */
121
+ export declare function toJson_SecurityGroupSpecTagSpecifications(obj: SecurityGroupSpecTagSpecifications | undefined): Record<string, any> | undefined;
122
+ /**
123
+ * AWSResourceReferenceWrapper provides a wrapper around *AWSResourceReference type to provide more user friendly syntax for references using 'from' field Ex: APIIDRef: from: name: my-api
124
+ *
125
+ * @schema SecurityGroupSpecVpcRef
126
+ */
127
+ export interface SecurityGroupSpecVpcRef {
128
+ /**
129
+ * AWSResourceReference provides all the values necessary to reference another k8s resource for finding the identifier(Id/ARN/Name)
130
+ *
131
+ * @schema SecurityGroupSpecVpcRef#from
132
+ */
133
+ readonly from?: SecurityGroupSpecVpcRefFrom;
134
+ }
135
+ /**
136
+ * Converts an object of type 'SecurityGroupSpecVpcRef' to JSON representation.
137
+ */
138
+ export declare function toJson_SecurityGroupSpecVpcRef(obj: SecurityGroupSpecVpcRef | undefined): Record<string, any> | undefined;
139
+ /**
140
+ * Describes a tag.
141
+ *
142
+ * @schema SecurityGroupSpecTagSpecificationsTags
143
+ */
144
+ export interface SecurityGroupSpecTagSpecificationsTags {
145
+ /**
146
+ * @schema SecurityGroupSpecTagSpecificationsTags#key
147
+ */
148
+ readonly key?: string;
149
+ /**
150
+ * @schema SecurityGroupSpecTagSpecificationsTags#value
151
+ */
152
+ readonly value?: string;
153
+ }
154
+ /**
155
+ * Converts an object of type 'SecurityGroupSpecTagSpecificationsTags' to JSON representation.
156
+ */
157
+ export declare function toJson_SecurityGroupSpecTagSpecificationsTags(obj: SecurityGroupSpecTagSpecificationsTags | undefined): Record<string, any> | undefined;
158
+ /**
159
+ * AWSResourceReference provides all the values necessary to reference another k8s resource for finding the identifier(Id/ARN/Name)
160
+ *
161
+ * @schema SecurityGroupSpecVpcRefFrom
162
+ */
163
+ export interface SecurityGroupSpecVpcRefFrom {
164
+ /**
165
+ * @schema SecurityGroupSpecVpcRefFrom#name
166
+ */
167
+ readonly name?: string;
168
+ }
169
+ /**
170
+ * Converts an object of type 'SecurityGroupSpecVpcRefFrom' to JSON representation.
171
+ */
172
+ export declare function toJson_SecurityGroupSpecVpcRefFrom(obj: SecurityGroupSpecVpcRefFrom | undefined): Record<string, any> | undefined;
173
+ //# sourceMappingURL=ec2securitygroups-ec2.services.k8s.aws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ec2securitygroups-ec2.services.k8s.aws.d.ts","sourceRoot":"","sources":["../../src/imports/ec2securitygroups-ec2.services.k8s.aws.ts"],"names":[],"mappings":"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"}