@aws-cdk/aws-iot-alpha 2.219.0-alpha.0 → 2.221.0-alpha.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 +3 -3
- package/.jsii.tabl.json.gz +0 -0
- package/lib/audit-configuration.js +169 -126
- package/lib/iot-sql.js +4 -4
- package/lib/logging.js +127 -84
- package/lib/scheduled-audit.js +163 -115
- package/lib/topic-rule.js +147 -98
- package/package.json +10 -9
package/lib/scheduled-audit.js
CHANGED
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
3
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
4
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
5
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
6
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
7
|
+
var _, done = false;
|
|
8
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
9
|
+
var context = {};
|
|
10
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
11
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
12
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
13
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
14
|
+
if (kind === "accessor") {
|
|
15
|
+
if (result === void 0) continue;
|
|
16
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
17
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
18
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
19
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
20
|
+
}
|
|
21
|
+
else if (_ = accept(result)) {
|
|
22
|
+
if (kind === "field") initializers.unshift(_);
|
|
23
|
+
else descriptor[key] = _;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
27
|
+
done = true;
|
|
28
|
+
};
|
|
29
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
30
|
+
var useValue = arguments.length > 2;
|
|
31
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
32
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
33
|
+
}
|
|
34
|
+
return useValue ? value : void 0;
|
|
7
35
|
};
|
|
8
|
-
var _a, _b;
|
|
9
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
37
|
exports.ScheduledAudit = exports.Frequency = exports.DayOfMonth = exports.DayOfWeek = exports.AuditCheck = void 0;
|
|
11
38
|
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
@@ -134,6 +161,12 @@ var DayOfWeek;
|
|
|
134
161
|
* The day of the month on which the scheduled audit takes place.
|
|
135
162
|
*/
|
|
136
163
|
class DayOfMonth {
|
|
164
|
+
day;
|
|
165
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-iot-alpha.DayOfMonth", version: "2.221.0-alpha.0" };
|
|
166
|
+
/**
|
|
167
|
+
* The last day of the month
|
|
168
|
+
*/
|
|
169
|
+
static LAST_DAY = new DayOfMonth('LAST');
|
|
137
170
|
/**
|
|
138
171
|
* Custom day of the month
|
|
139
172
|
* @param day the day of the month
|
|
@@ -156,12 +189,6 @@ class DayOfMonth {
|
|
|
156
189
|
}
|
|
157
190
|
}
|
|
158
191
|
exports.DayOfMonth = DayOfMonth;
|
|
159
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
160
|
-
DayOfMonth[_a] = { fqn: "@aws-cdk/aws-iot-alpha.DayOfMonth", version: "2.219.0-alpha.0" };
|
|
161
|
-
/**
|
|
162
|
-
* The last day of the month
|
|
163
|
-
*/
|
|
164
|
-
DayOfMonth.LAST_DAY = new DayOfMonth('LAST');
|
|
165
192
|
/**
|
|
166
193
|
* The frequency at which the scheduled audit takes place.
|
|
167
194
|
*/
|
|
@@ -187,118 +214,139 @@ var Frequency;
|
|
|
187
214
|
/**
|
|
188
215
|
* Defines AWS IoT Scheduled Audit
|
|
189
216
|
*/
|
|
190
|
-
let ScheduledAudit =
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
217
|
+
let ScheduledAudit = (() => {
|
|
218
|
+
let _classDecorators = [prop_injectable_1.propertyInjectable];
|
|
219
|
+
let _classDescriptor;
|
|
220
|
+
let _classExtraInitializers = [];
|
|
221
|
+
let _classThis;
|
|
222
|
+
let _classSuper = core_1.Resource;
|
|
223
|
+
var ScheduledAudit = class extends _classSuper {
|
|
224
|
+
static { _classThis = this; }
|
|
225
|
+
static {
|
|
226
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
227
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
228
|
+
ScheduledAudit = _classThis = _classDescriptor.value;
|
|
229
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
202
230
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
218
|
-
Error.captureStackTrace(error, this.fromScheduledAuditAttributes);
|
|
231
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-iot-alpha.ScheduledAudit", version: "2.221.0-alpha.0" };
|
|
232
|
+
/** Uniquely identifies this class. */
|
|
233
|
+
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-iot-alpha.ScheduledAudit';
|
|
234
|
+
/**
|
|
235
|
+
* Import an existing AWS IoT Scheduled Audit from its ARN.
|
|
236
|
+
*
|
|
237
|
+
* @param scope The parent creating construct (usually `this`)
|
|
238
|
+
* @param id The construct's name
|
|
239
|
+
* @param scheduledAuditArn The ARN of the scheduled audit
|
|
240
|
+
*/
|
|
241
|
+
static fromScheduledAuditArn(scope, id, scheduledAuditArn) {
|
|
242
|
+
const name = core_1.Stack.of(scope).splitArn(scheduledAuditArn, core_1.ArnFormat.SLASH_RESOURCE_NAME).resourceName;
|
|
243
|
+
if (!name) {
|
|
244
|
+
throw new Error(`No scheduled audit name found in ARN: '${scheduledAuditArn}'`);
|
|
219
245
|
}
|
|
220
|
-
|
|
246
|
+
return this.fromScheduledAuditAttributes(scope, id, { scheduledAuditArn: scheduledAuditArn, scheduledAuditName: name });
|
|
221
247
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
248
|
+
/**
|
|
249
|
+
* Import an existing AWS IoT Scheduled Audit from its attributes.
|
|
250
|
+
*
|
|
251
|
+
* @param scope The parent creating construct (usually `this`)
|
|
252
|
+
* @param id The construct's name
|
|
253
|
+
* @param attrs The scheduled audit attributes
|
|
254
|
+
*/
|
|
255
|
+
static fromScheduledAuditAttributes(scope, id, attrs) {
|
|
256
|
+
try {
|
|
257
|
+
jsiiDeprecationWarnings._aws_cdk_aws_iot_alpha_ScheduledAuditAttributes(attrs);
|
|
227
258
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
try {
|
|
234
|
-
jsiiDeprecationWarnings._aws_cdk_aws_iot_alpha_ScheduledAuditProps(props);
|
|
235
|
-
}
|
|
236
|
-
catch (error) {
|
|
237
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
238
|
-
Error.captureStackTrace(error, ScheduledAudit);
|
|
259
|
+
catch (error) {
|
|
260
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
261
|
+
Error.captureStackTrace(error, this.fromScheduledAuditAttributes);
|
|
262
|
+
}
|
|
263
|
+
throw error;
|
|
239
264
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
throw new Error('At least one \'auditChecks\' must be specified.');
|
|
265
|
+
class Import extends core_1.Resource {
|
|
266
|
+
scheduledAuditArn = attrs.scheduledAuditArn;
|
|
267
|
+
scheduledAuditName = attrs.scheduledAuditName;
|
|
268
|
+
}
|
|
269
|
+
return new Import(scope, id);
|
|
246
270
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
271
|
+
/**
|
|
272
|
+
* The scheduled audit name
|
|
273
|
+
* @attribute
|
|
274
|
+
*/
|
|
275
|
+
scheduledAuditName;
|
|
276
|
+
/**
|
|
277
|
+
* The ARN of the scheduled audit
|
|
278
|
+
* @attribute
|
|
279
|
+
*/
|
|
280
|
+
scheduledAuditArn;
|
|
281
|
+
constructor(scope, id, props) {
|
|
282
|
+
super(scope, id);
|
|
283
|
+
try {
|
|
284
|
+
jsiiDeprecationWarnings._aws_cdk_aws_iot_alpha_ScheduledAuditProps(props);
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
288
|
+
Error.captureStackTrace(error, ScheduledAudit);
|
|
263
289
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
290
|
+
throw error;
|
|
291
|
+
}
|
|
292
|
+
// Enhanced CDK Analytics Telemetry
|
|
293
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
294
|
+
if (props.auditChecks.length === 0) {
|
|
295
|
+
throw new Error('At least one \'auditChecks\' must be specified.');
|
|
296
|
+
}
|
|
297
|
+
switch (props.frequency) {
|
|
298
|
+
case Frequency.DAILY:
|
|
299
|
+
if (props.dayOfWeek) {
|
|
300
|
+
throw new Error('Day of the week must not be specified for daily audits.');
|
|
301
|
+
}
|
|
302
|
+
if (props.dayOfMonth) {
|
|
303
|
+
throw new Error('Day of the month must not be specified for daily audits.');
|
|
304
|
+
}
|
|
305
|
+
break;
|
|
306
|
+
case Frequency.WEEKLY:
|
|
307
|
+
case Frequency.BI_WEEKLY:
|
|
308
|
+
if (!props.dayOfWeek) {
|
|
309
|
+
throw new Error('Day of the week must be specified for weekly or bi-weekly audits.');
|
|
310
|
+
}
|
|
311
|
+
if (props.dayOfMonth) {
|
|
312
|
+
throw new Error('Day of the month must not be specified for weekly or bi-weekly audits.');
|
|
313
|
+
}
|
|
314
|
+
break;
|
|
315
|
+
case Frequency.MONTHLY:
|
|
316
|
+
if (!props.dayOfMonth) {
|
|
317
|
+
throw new Error('Day of the month must be specified for monthly audits.');
|
|
318
|
+
}
|
|
319
|
+
if (props.dayOfWeek) {
|
|
320
|
+
throw new Error('Day of the week must not be specified for monthly audits.');
|
|
321
|
+
}
|
|
322
|
+
break;
|
|
323
|
+
default:
|
|
324
|
+
throw new Error('Invalid frequency specified.');
|
|
325
|
+
}
|
|
326
|
+
if (props.scheduledAuditName !== undefined && !core_1.Token.isUnresolved(props.scheduledAuditName)) {
|
|
327
|
+
if (props.scheduledAuditName.length < 1 || props.scheduledAuditName.length > 128) {
|
|
328
|
+
throw new Error(`Scheduled audit name must be between 1 and 128 characters, got: ${props.scheduledAuditName.length}`);
|
|
268
329
|
}
|
|
269
|
-
if (props.
|
|
270
|
-
throw new Error(
|
|
330
|
+
if (!/^[a-zA-Z0-9:_-]+$/.test(props.scheduledAuditName)) {
|
|
331
|
+
throw new Error(`Scheduled audit name must be alphanumeric and may include colons, underscores, and hyphens, got: ${props.scheduledAuditName}`);
|
|
271
332
|
}
|
|
272
|
-
break;
|
|
273
|
-
default:
|
|
274
|
-
throw new Error('Invalid frequency specified.');
|
|
275
|
-
}
|
|
276
|
-
if (props.scheduledAuditName !== undefined && !core_1.Token.isUnresolved(props.scheduledAuditName)) {
|
|
277
|
-
if (props.scheduledAuditName.length < 1 || props.scheduledAuditName.length > 128) {
|
|
278
|
-
throw new Error(`Scheduled audit name must be between 1 and 128 characters, got: ${props.scheduledAuditName.length}`);
|
|
279
|
-
}
|
|
280
|
-
if (!/^[a-zA-Z0-9:_-]+$/.test(props.scheduledAuditName)) {
|
|
281
|
-
throw new Error(`Scheduled audit name must be alphanumeric and may include colons, underscores, and hyphens, got: ${props.scheduledAuditName}`);
|
|
282
333
|
}
|
|
334
|
+
const resource = new iot.CfnScheduledAudit(this, 'Resource', {
|
|
335
|
+
scheduledAuditName: props.scheduledAuditName,
|
|
336
|
+
targetCheckNames: props.auditChecks,
|
|
337
|
+
dayOfWeek: props.dayOfWeek,
|
|
338
|
+
dayOfMonth: props.dayOfMonth?.day,
|
|
339
|
+
frequency: props.frequency,
|
|
340
|
+
});
|
|
341
|
+
this.scheduledAuditName = resource.ref;
|
|
342
|
+
this.scheduledAuditArn = resource.attrScheduledAuditArn;
|
|
343
|
+
resource.node.addDependency(props.accountAuditConfiguration);
|
|
283
344
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
});
|
|
291
|
-
this.scheduledAuditName = resource.ref;
|
|
292
|
-
this.scheduledAuditArn = resource.attrScheduledAuditArn;
|
|
293
|
-
resource.node.addDependency(props.accountAuditConfiguration);
|
|
294
|
-
}
|
|
295
|
-
};
|
|
345
|
+
static {
|
|
346
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
return ScheduledAudit = _classThis;
|
|
350
|
+
})();
|
|
296
351
|
exports.ScheduledAudit = ScheduledAudit;
|
|
297
|
-
_b = JSII_RTTI_SYMBOL_1;
|
|
298
|
-
ScheduledAudit[_b] = { fqn: "@aws-cdk/aws-iot-alpha.ScheduledAudit", version: "2.219.0-alpha.0" };
|
|
299
|
-
/** Uniquely identifies this class. */
|
|
300
|
-
ScheduledAudit.PROPERTY_INJECTION_ID = '@aws-cdk.aws-iot-alpha.ScheduledAudit';
|
|
301
|
-
exports.ScheduledAudit = ScheduledAudit = __decorate([
|
|
302
|
-
prop_injectable_1.propertyInjectable
|
|
303
|
-
], ScheduledAudit);
|
|
304
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVkLWF1ZGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NoZWR1bGVkLWF1ZGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFnRjtBQUVoRiwyQ0FBMkM7QUFFM0MsOEVBQThFO0FBQzlFLDBFQUEwRTtBQWtDMUU7Ozs7R0FJRztBQUNILElBQVksVUFvRlg7QUFwRkQsV0FBWSxVQUFVO0lBQ3BCOzs7OztPQUtHO0lBQ0gsdUhBQXlHLENBQUE7SUFFekc7Ozs7T0FJRztJQUNILDZFQUErRCxDQUFBO0lBRS9EOzs7Ozs7T0FNRztJQUNILG1GQUFxRSxDQUFBO0lBRXJFOztPQUVHO0lBQ0gsMkVBQTZELENBQUE7SUFFN0Q7Ozs7T0FJRztJQUNILHFGQUF1RSxDQUFBO0lBRXZFOzs7OztPQUtHO0lBQ0gsMkZBQTZFLENBQUE7SUFFN0U7O09BRUc7SUFDSCxpRkFBbUUsQ0FBQTtJQUVuRTs7T0FFRztJQUNILHVGQUF5RSxDQUFBO0lBRXpFOztPQUVHO0lBQ0gsNkhBQStHLENBQUE7SUFFL0c7O09BRUc7SUFDSCwrRkFBaUYsQ0FBQTtJQUVqRjs7T0FFRztJQUNILCtEQUFpRCxDQUFBO0lBRWpEOztPQUVHO0lBQ0gscUdBQXVGLENBQUE7SUFFdkY7O09BRUc7SUFDSCw2R0FBK0YsQ0FBQTtJQUUvRjs7T0FFRztJQUNILDJIQUE2RyxDQUFBO0FBQy9HLENBQUMsRUFwRlcsVUFBVSwwQkFBVixVQUFVLFFBb0ZyQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxTQXdDWDtBQXhDRCxXQUFZLFNBQVM7SUFDbkI7O09BRUc7SUFDSCwyQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwyQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCw0QkFBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCw4QkFBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILDZCQUFnQixDQUFBO0lBRWhCOztPQUVHO0lBQ0gsMkJBQWMsQ0FBQTtJQUVkOztP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dXJjZSwgVG9rZW4sIEFybkZvcm1hdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBpb3QgZnJvbSAnYXdzLWNkay1saWIvYXdzLWlvdCc7XG5pbXBvcnQgeyBJQWNjb3VudEF1ZGl0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vYXVkaXQtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBBV1MgSW9UIFNjaGVkdWxlZCBBdWRpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTY2hlZHVsZWRBdWRpdCBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGVkIGF1ZGl0IG5hbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGVkQXVkaXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHNjaGVkdWxlZCBhdWRpdFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZWRBdWRpdEFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIFNjaGVkdWxlZCBBdWRpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlZEF1ZGl0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGVkIGF1ZGl0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZEF1ZGl0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzY2hlZHVsZWQgYXVkaXRcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZEF1ZGl0QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIEFXUyBJb1QgRGV2aWNlIERlZmVuZGVyIGF1ZGl0IGNoZWNrc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2lvdC1kZXZpY2UtZGVmZW5kZXIvbGF0ZXN0L2Rldmd1aWRlL2RldmljZS1kZWZlbmRlci1hdWRpdC1jaGVja3MuaHRtbFxuICovXG5leHBvcnQgZW51bSBBdWRpdENoZWNrIHtcbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgcGVybWlzc2l2ZW5lc3Mgb2YgYW4gYXV0aGVudGljYXRlZCBBbWF6b24gQ29nbml0byBpZGVudGl0eSBwb29sIHJvbGUuXG4gICAqXG4gICAqIEZvciB0aGlzIGNoZWNrLCBBV1MgSW9UIERldmljZSBEZWZlbmRlciBhdWRpdHMgYWxsIEFtYXpvbiBDb2duaXRvIGlkZW50aXR5IHBvb2xzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgQVdTIElvVCBtZXNzYWdlIGJyb2tlclxuICAgKiBkdXJpbmcgdGhlIDMxIGRheXMgYmVmb3JlIHRoZSBhdWRpdCBpcyBwZXJmb3JtZWQuXG4gICAqL1xuICBBVVRIRU5USUNBVEVEX0NPR05JVE9fUk9MRV9PVkVSTFlfUEVSTUlTU0lWRV9DSEVDSyA9ICdBVVRIRU5USUNBVEVEX0NPR05JVE9fUk9MRV9PVkVSTFlfUEVSTUlTU0lWRV9DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIENBIGNlcnRpZmljYXRlIGlzIGV4cGlyaW5nLlxuICAgKlxuICAgKiBUaGlzIGNoZWNrIGFwcGxpZXMgdG8gQ0EgY2VydGlmaWNhdGVzIGV4cGlyaW5nIHdpdGhpbiAzMCBkYXlzIG9yIHRoYXQgaGF2ZSBleHBpcmVkLlxuICAgKi9cbiAgQ0FfQ0VSVElGSUNBVEVfRVhQSVJJTkdfQ0hFQ0sgPSAnQ0FfQ0VSVElGSUNBVEVfRVhQSVJJTkdfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIHF1YWxpdHkgb2YgdGhlIENBIGNlcnRpZmljYXRlIGtleS5cbiAgICpcbiAgICogVGhlIHF1YWxpdHkgY2hlY2tzIGlmIHRoZSBrZXkgaXMgaW4gYSB2YWxpZCBmb3JtYXQsIG5vdCBleHBpcmVkLCBhbmQgaWYgdGhlIGtleSBtZWV0cyBhIG1pbmltdW0gcmVxdWlyZWQgc2l6ZS5cbiAgICpcbiAgICogVGhpcyBjaGVjayBhcHBsaWVzIHRvIENBIGNlcnRpZmljYXRlcyB0aGF0IGFyZSBBQ1RJVkUgb3IgUEVORElOR19UUkFOU0ZFUi5cbiAgICovXG4gIENBX0NFUlRJRklDQVRFX0tFWV9RVUFMSVRZX0NIRUNLID0gJ0NBX0NFUlRJRklDQVRFX0tFWV9RVUFMSVRZX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG11bHRpcGxlIGRldmljZXMgY29ubmVjdCB1c2luZyB0aGUgc2FtZSBjbGllbnQgSUQuXG4gICAqL1xuICBDT05GTElDVElOR19DTElFTlRfSURTX0NIRUNLID0gJ0NPTkZMSUNUSU5HX0NMSUVOVF9JRFNfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBkZXZpY2UgY2VydGlmaWNhdGUgaXMgZXhwaXJpbmcuXG4gICAqXG4gICAqIFRoaXMgY2hlY2sgYXBwbGllcyB0byBkZXZpY2UgY2VydGlmaWNhdGVzIGV4cGlyaW5nIHdpdGhpbiAzMCBkYXlzIG9yIHRoYXQgaGF2ZSBleHBpcmVkLlxuICAgKi9cbiAgREVWSUNFX0NFUlRJRklDQVRFX0VYUElSSU5HX0NIRUNLID0gJ0RFVklDRV9DRVJUSUZJQ0FURV9FWFBJUklOR19DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgcXVhbGl0eSBvZiB0aGUgZGV2aWNlIGNlcnRpZmljYXRlIGtleS5cbiAgICpcbiAgICogVGhlIHF1YWxpdHkgY2hlY2tzIGlmIHRoZSBrZXkgaXMgaW4gYSB2YWxpZCBmb3JtYXQsIG5vdCBleHBpcmVkLCBzaWduZWQgYnkgYSByZWdpc3RlcmVkIGNlcnRpZmljYXRlIGF1dGhvcml0eSxcbiAgICogYW5kIGlmIHRoZSBrZXkgbWVldHMgYSBtaW5pbXVtIHJlcXVpcmVkIHNpemUuXG4gICAqL1xuICBERVZJQ0VfQ0VSVElGSUNBVEVfS0VZX1FVQUxJVFlfQ0hFQ0sgPSAnREVWSUNFX0NFUlRJRklDQVRFX0tFWV9RVUFMSVRZX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG11bHRpcGxlIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgdXNlIHRoZSBzYW1lIFguNTA5IGNlcnRpZmljYXRlIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIEFXUyBJb1QuXG4gICAqL1xuICBERVZJQ0VfQ0VSVElGSUNBVEVfU0hBUkVEX0NIRUNLID0gJ0RFVklDRV9DRVJUSUZJQ0FURV9TSEFSRURfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIHBlcm1pc3NpdmVuZXNzIG9mIGEgcG9saWN5IGF0dGFjaGVkIHRvIGFuIGF1dGhlbnRpY2F0ZWQgQW1hem9uIENvZ25pdG8gaWRlbnRpdHkgcG9vbCByb2xlLlxuICAgKi9cbiAgSU9UX1BPTElDWV9PVkVSTFlfUEVSTUlTU0lWRV9DSEVDSyA9ICdJT1RfUE9MSUNZX09WRVJMWV9QRVJNSVNTSVZFX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgcm9sZSBhbGlhcyBoYXMgYWNjZXNzIHRvIHNlcnZpY2VzIHRoYXQgaGF2ZW4ndCBiZWVuIHVzZWQgZm9yIHRoZSBBV1MgSW9UIGRldmljZSBpbiB0aGUgbGFzdCB5ZWFyLlxuICAgKi9cbiAgSU9UX1JPTEVfQUxJQVNfQUxMT1dTX0FDQ0VTU19UT19VTlVTRURfU0VSVklDRVNfQ0hFQ0sgPSAnSU9UX1JPTEVfQUxJQVNfQUxMT1dTX0FDQ0VTU19UT19VTlVTRURfU0VSVklDRVNfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHRlbXBvcmFyeSBjcmVkZW50aWFscyBwcm92aWRlZCBieSBBV1MgSW9UIHJvbGUgYWxpYXNlcyBhcmUgb3Zlcmx5IHBlcm1pc3NpdmUuXG4gICAqL1xuICBJT1RfUk9MRV9BTElBU19PVkVSTFlfUEVSTUlTU0lWRV9DSEVDSyA9ICdJT1RfUk9MRV9BTElBU19PVkVSTFlfUEVSTUlTU0lWRV9DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBBV1MgSW9UIGxvZ3MgYXJlIGRpc2FibGVkLlxuICAgKi9cbiAgTE9HR0lOR19ESVNBQkxFRF9DSEVDSyA9ICdMT0dHSU5HX0RJU0FCTEVEX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgcmV2b2tlZCBDQSBjZXJ0aWZpY2F0ZSBpcyBzdGlsbCBhY3RpdmUuXG4gICAqL1xuICBSRVZPS0VEX0NBX0NFUlRJRklDQVRFX1NUSUxMX0FDVElWRV9DSEVDSyA9ICdSRVZPS0VEX0NBX0NFUlRJRklDQVRFX1NUSUxMX0FDVElWRV9DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHJldm9rZWQgZGV2aWNlIGNlcnRpZmljYXRlIGlzIHN0aWxsIGFjdGl2ZS5cbiAgICovXG4gIFJFVk9LRURfREVWSUNFX0NFUlRJRklDQVRFX1NUSUxMX0FDVElWRV9DSEVDSyA9ICdSRVZPS0VEX0RFVklDRV9DRVJUSUZJQ0FURV9TVElMTF9BQ1RJVkVfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcG9saWN5IGF0dGFjaGVkIHRvIGFuIHVuYXV0aGVudGljYXRlZCBBbWF6b24gQ29nbml0byBpZGVudGl0eSBwb29sIHJvbGUgaXMgdG9vIHBlcm1pc3NpdmUuXG4gICAqL1xuICBVTkFVVEhFTlRJQ0FURURfQ09HTklUT19ST0xFX09WRVJMWV9QRVJNSVNTSVZFX0NIRUNLID0gJ1VOQVVUSEVOVElDQVRFRF9DT0dOSVRPX1JPTEVfT1ZFUkxZX1BFUk1JU1NJVkVfQ0hFQ0snLFxufVxuXG4vKipcbiAqIFRoZSBkYXkgb2YgdGhlIHdlZWsgb24gd2hpY2ggdGhlIHNjaGVkdWxlZCBhdWRpdCB0YWtlcyBwbGFjZS5cbiAqL1xuZXhwb3J0IGVudW0gRGF5T2ZXZWVrIHtcbiAgLyoqXG4gICAqIFN1bmRheVxuICAgKi9cbiAgU1VOREFZID0gJ1NVTicsXG5cbiAgLyoqXG4gICAqIE1vbmRheVxuICAgKi9cbiAgTU9OREFZID0gJ01PTicsXG5cbiAgLyoqXG4gICAqIFR1ZXNkYXlcbiAgICovXG4gIFRVRVNEQVkgPSAnVFVFJyxcblxuICAvKipcbiAgICogV2VkbmVzZGF5XG4gICAqL1xuICBXRURORVNEQVkgPSAnV0VEJyxcblxuICAvKipcbiAgICogVGh1cnNkYXlcbiAgICovXG4gIFRIVVJTREFZID0gJ1RIVScsXG5cbiAgLyoqXG4gICAqIEZyaWRheVxuICAgKi9cbiAgRlJJREFZID0gJ0ZSSScsXG5cbiAgLyoqXG4gICAqIFNhdHVyZGF5XG4gICAqL1xuICBTQVRVUkRBWSA9ICdTQVQnLFxuXG4gIC8qKlxuICAgKiBVTlNFVF9WQUxVRVxuICAgKi9cbiAgVU5TRVRfVkFMVUUgPSAnVU5TRVRfVkFMVUUnLFxufVxuXG4vKipcbiAqIFRoZSBkYXkgb2YgdGhlIG1vbnRoIG9uIHdoaWNoIHRoZSBzY2hlZHVsZWQgYXVkaXQgdGFrZXMgcGxhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXlPZk1vbnRoIHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IGRheSBvZiB0aGUgbW9udGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEFTVF9EQVkgPSBuZXcgRGF5T2ZNb250aCgnTEFTVCcpO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gZGF5IG9mIHRoZSBtb250aFxuICAgKiBAcGFyYW0gZGF5IHRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKGRheTogbnVtYmVyKTogRGF5T2ZNb250aCB7XG4gICAgaWYgKGRheSA8IDEgfHwgZGF5ID4gMzEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGF5IG9mIG1vbnRoIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzMSwgZ290OiAke2RheX1gKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRheSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGF5IG9mIG1vbnRoIG11c3QgYmUgYW4gaW50ZWdlciwgZ290OiAke2RheX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXlPZk1vbnRoKFN0cmluZyhkYXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZGF5IFRoZSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqL1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBkYXk6IHN0cmluZykge31cbn1cblxuLyoqXG4gKiBUaGUgZnJlcXVlbmN5IGF0IHdoaWNoIHRoZSBzY2hlZHVsZWQgYXVkaXQgdGFrZXMgcGxhY2UuXG4gKi9cbmV4cG9ydCBlbnVtIEZyZXF1ZW5jeSB7XG4gIC8qKlxuICAgKiBEYWlseVxuICAgKi9cbiAgREFJTFkgPSAnREFJTFknLFxuXG4gIC8qKlxuICAgKiBXZWVrbHlcbiAgICovXG4gIFdFRUtMWSA9ICdXRUVLTFknLFxuXG4gIC8qKlxuICAgKiBCaS13ZWVrbHlcbiAgICovXG4gIEJJX1dFRUtMWSA9ICdCSVdFRUtMWScsXG5cbiAgLyoqXG4gICAqIE1vbnRobHlcbiAgICovXG4gIE1PTlRITFkgPSAnTU9OVEhMWScsXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgQVdTIElvVCBTY2hlZHVsZWQgQXVkaXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZWRBdWRpdFByb3BzIHtcbiAgLyoqXG4gICAqIFdoaWNoIGNoZWNrcyBhcmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgc2NoZWR1bGVkIGF1ZGl0LlxuICAgKlxuICAgKiBDaGVja3MgbXVzdCBiZSBlbmFibGVkIGZvciB5b3VyIGFjY291bnQuXG4gICAqL1xuICByZWFkb25seSBhdWRpdENoZWNrczogQXVkaXRDaGVja1tdO1xuXG4gIC8qKlxuICAgKiBBY2NvdW50IGF1ZGl0IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFRoZSBhdWRpdCBjaGVja3Mgc3BlY2lmaWVkIGluIGBhdWRpdENoZWNrc2AgbXVzdCBiZSBlbmFibGVkIGluIHRoaXMgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRBdWRpdENvbmZpZ3VyYXRpb246IElBY2NvdW50QXVkaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIHRoZSB3ZWVrIG9uIHdoaWNoIHRoZSBzY2hlZHVsZWQgYXVkaXQgaXMgcnVuIChpZiB0aGUgZnJlcXVlbmN5IGlzIFwiV0VFS0xZXCIgb3IgXCJCSVdFRUtMWVwiKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXF1aXJlZCBpZiBmcmVxdWVuY3kgaXMgXCJXRUVLTFlcIiBvciBcIkJJV0VFS0xZXCIsIG5vdCBhbGxvd2VkIG90aGVyd2lzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF5T2ZXZWVrPzogRGF5T2ZXZWVrO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIHRoZSBtb250aCBvbiB3aGljaCB0aGUgc2NoZWR1bGVkIGF1ZGl0IGlzIHJ1biAoaWYgdGhlIGZyZXF1ZW5jeSBpcyBcIk1PTlRITFlcIikuXG4gICAqXG4gICAqIElmIGRheXMgMjktMzEgYXJlIHNwZWNpZmllZCwgYW5kIHRoZSBtb250aCBkb2VzIG5vdCBoYXZlIHRoYXQgbWFueSBkYXlzLCB0aGUgYXVkaXQgdGFrZXMgcGxhY2Ugb24gdGhlIFwiTEFTVFwiIGRheSBvZiB0aGUgbW9udGguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVxdWlyZWQgaWYgZnJlcXVlbmN5IGlzIFwiTU9OVEhMWVwiLCBub3QgYWxsb3dlZCBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IGRheU9mTW9udGg/OiBEYXlPZk1vbnRoO1xuXG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gdGhlIHNjaGVkdWxlZCBhdWRpdCBvY2N1cnMuXG4gICAqL1xuICByZWFkb25seSBmcmVxdWVuY3k6IEZyZXF1ZW5jeTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNjaGVkdWxlZCBhdWRpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvIGdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZWRBdWRpdE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyBBV1MgSW9UIFNjaGVkdWxlZCBBdWRpdFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVkQXVkaXQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElTY2hlZHVsZWRBdWRpdCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWlvdC1hbHBoYS5TY2hlZHVsZWRBdWRpdCc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBBV1MgSW9UIFNjaGVkdWxlZCBBdWRpdCBmcm9tIGl0cyBBUk4uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZVxuICAgKiBAcGFyYW0gc2NoZWR1bGVkQXVkaXRBcm4gVGhlIEFSTiBvZiB0aGUgc2NoZWR1bGVkIGF1ZGl0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TY2hlZHVsZWRBdWRpdEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBzY2hlZHVsZWRBdWRpdEFybjogc3RyaW5nKTogSVNjaGVkdWxlZEF1ZGl0IHtcbiAgICBjb25zdCBuYW1lID0gU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKHNjaGVkdWxlZEF1ZGl0QXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzY2hlZHVsZWQgYXVkaXQgbmFtZSBmb3VuZCBpbiBBUk46ICcke3NjaGVkdWxlZEF1ZGl0QXJufSdgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tU2NoZWR1bGVkQXVkaXRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBzY2hlZHVsZWRBdWRpdEFybjogc2NoZWR1bGVkQXVkaXRBcm4sIHNjaGVkdWxlZEF1ZGl0TmFtZTogbmFtZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgQVdTIElvVCBTY2hlZHVsZWQgQXVkaXQgZnJvbSBpdHMgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgc2NoZWR1bGVkIGF1ZGl0IGF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNjaGVkdWxlZEF1ZGl0QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogU2NoZWR1bGVkQXVkaXRBdHRyaWJ1dGVzKTogSVNjaGVkdWxlZEF1ZGl0IHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElTY2hlZHVsZWRBdWRpdCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc2NoZWR1bGVkQXVkaXRBcm4gPSBhdHRycy5zY2hlZHVsZWRBdWRpdEFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZWRBdWRpdE5hbWUgPSBhdHRycy5zY2hlZHVsZWRBdWRpdE5hbWU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNjaGVkdWxlZCBhdWRpdCBuYW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZWRBdWRpdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc2NoZWR1bGVkIGF1ZGl0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZWRBdWRpdEFybjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTY2hlZHVsZWRBdWRpdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5hdWRpdENoZWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIFxcJ2F1ZGl0Q2hlY2tzXFwnIG11c3QgYmUgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIHN3aXRjaCAocHJvcHMuZnJlcXVlbmN5KSB7XG4gICAgICBjYXNlIEZyZXF1ZW5jeS5EQUlMWTpcbiAgICAgICAgaWYgKHByb3BzLmRheU9mV2Vlaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGF5IG9mIHRoZSB3ZWVrIG11c3Qgbm90IGJlIHNwZWNpZmllZCBmb3IgZGFpbHkgYXVkaXRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYXlPZk1vbnRoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXkgb2YgdGhlIG1vbnRoIG11c3Qgbm90IGJlIHNwZWNpZmllZCBmb3IgZGFpbHkgYXVkaXRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGcmVxdWVuY3kuV0VFS0xZOlxuICAgICAgY2FzZSBGcmVxdWVuY3kuQklfV0VFS0xZOlxuICAgICAgICBpZiAoIXByb3BzLmRheU9mV2Vlaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGF5IG9mIHRoZSB3ZWVrIG11c3QgYmUgc3BlY2lmaWVkIGZvciB3ZWVrbHkgb3IgYmktd2Vla2x5IGF1ZGl0cy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZGF5T2ZNb250aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGF5IG9mIHRoZSBtb250aCBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgZm9yIHdlZWtseSBvciBiaS13ZWVrbHkgYXVkaXRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGcmVxdWVuY3kuTU9OVEhMWTpcbiAgICAgICAgaWYgKCFwcm9wcy5kYXlPZk1vbnRoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXkgb2YgdGhlIG1vbnRoIG11c3QgYmUgc3BlY2lmaWVkIGZvciBtb250aGx5IGF1ZGl0cy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZGF5T2ZXZWVrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXkgb2YgdGhlIHdlZWsgbXVzdCBub3QgYmUgc3BlY2lmaWVkIGZvciBtb250aGx5IGF1ZGl0cy4nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcmVxdWVuY3kgc3BlY2lmaWVkLicpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zY2hlZHVsZWRBdWRpdE5hbWUgIT09IHVuZGVmaW5lZCAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLnNjaGVkdWxlZEF1ZGl0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5zY2hlZHVsZWRBdWRpdE5hbWUubGVuZ3RoIDwgMSB8fCBwcm9wcy5zY2hlZHVsZWRBdWRpdE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZWR1bGVkIGF1ZGl0IG5hbWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICR7cHJvcHMuc2NoZWR1bGVkQXVkaXROYW1lLmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghL15bYS16QS1aMC05Ol8tXSskLy50ZXN0KHByb3BzLnNjaGVkdWxlZEF1ZGl0TmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlZHVsZWQgYXVkaXQgbmFtZSBtdXN0IGJlIGFscGhhbnVtZXJpYyBhbmQgbWF5IGluY2x1ZGUgY29sb25zLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnMsIGdvdDogJHtwcm9wcy5zY2hlZHVsZWRBdWRpdE5hbWV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgaW90LkNmblNjaGVkdWxlZEF1ZGl0KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIHNjaGVkdWxlZEF1ZGl0TmFtZTogcHJvcHMuc2NoZWR1bGVkQXVkaXROYW1lLFxuICAgICAgdGFyZ2V0Q2hlY2tOYW1lczogcHJvcHMuYXVkaXRDaGVja3MsXG4gICAgICBkYXlPZldlZWs6IHByb3BzLmRheU9mV2VlayxcbiAgICAgIGRheU9mTW9udGg6IHByb3BzLmRheU9mTW9udGg/LmRheSxcbiAgICAgIGZyZXF1ZW5jeTogcHJvcHMuZnJlcXVlbmN5LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY2hlZHVsZWRBdWRpdE5hbWUgPSByZXNvdXJjZS5yZWY7XG4gICAgdGhpcy5zY2hlZHVsZWRBdWRpdEFybiA9IHJlc291cmNlLmF0dHJTY2hlZHVsZWRBdWRpdEFybjtcblxuICAgIHJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5hY2NvdW50QXVkaXRDb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG4iXX0=
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVkLWF1ZGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NoZWR1bGVkLWF1ZGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFnRjtBQUVoRiwyQ0FBMkM7QUFFM0MsOEVBQThFO0FBQzlFLDBFQUEwRTtBQWtDMUU7Ozs7R0FJRztBQUNILElBQVksVUFvRlg7QUFwRkQsV0FBWSxVQUFVO0lBQ3BCOzs7OztPQUtHO0lBQ0gsdUhBQXlHLENBQUE7SUFFekc7Ozs7T0FJRztJQUNILDZFQUErRCxDQUFBO0lBRS9EOzs7Ozs7T0FNRztJQUNILG1GQUFxRSxDQUFBO0lBRXJFOztPQUVHO0lBQ0gsMkVBQTZELENBQUE7SUFFN0Q7Ozs7T0FJRztJQUNILHFGQUF1RSxDQUFBO0lBRXZFOzs7OztPQUtHO0lBQ0gsMkZBQTZFLENBQUE7SUFFN0U7O09BRUc7SUFDSCxpRkFBbUUsQ0FBQTtJQUVuRTs7T0FFRztJQUNILHVGQUF5RSxDQUFBO0lBRXpFOztPQUVHO0lBQ0gsNkhBQStHLENBQUE7SUFFL0c7O09BRUc7SUFDSCwrRkFBaUYsQ0FBQTtJQUVqRjs7T0FFRztJQUNILCtEQUFpRCxDQUFBO0lBRWpEOztPQUVHO0lBQ0gscUdBQXVGLENBQUE7SUFFdkY7O09BRUc7SUFDSCw2R0FBK0YsQ0FBQTtJQUUvRjs7T0FFRztJQUNILDJIQUE2RyxDQUFBO0FBQy9HLENBQUMsRUFwRlcsVUFBVSwwQkFBVixVQUFVLFFBb0ZyQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxTQXdDWDtBQXhDRCxXQUFZLFNBQVM7SUFDbkI7O09BRUc7SUFDSCwyQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwyQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCw0QkFBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCw4QkFBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILDZCQUFnQixDQUFBO0lBRWhCOztP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Q0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzlEOztZQTNHVSx1REFBYzs7Ozs7QUFBZCx3Q0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlLCBTdGFjaywgSVJlc291cmNlLCBUb2tlbiwgQXJuRm9ybWF0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGlvdCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW90JztcbmltcG9ydCB7IElBY2NvdW50QXVkaXRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9hdWRpdC1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIEFXUyBJb1QgU2NoZWR1bGVkIEF1ZGl0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNjaGVkdWxlZEF1ZGl0IGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlZHVsZWQgYXVkaXQgbmFtZVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZWRBdWRpdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc2NoZWR1bGVkIGF1ZGl0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZEF1ZGl0QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgU2NoZWR1bGVkIEF1ZGl0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVkQXVkaXRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlZHVsZWQgYXVkaXQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGVkQXVkaXROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHNjaGVkdWxlZCBhdWRpdFxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGVkQXVkaXRBcm46IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgQVdTIElvVCBEZXZpY2UgRGVmZW5kZXIgYXVkaXQgY2hlY2tzXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW90LWRldmljZS1kZWZlbmRlci9sYXRlc3QvZGV2Z3VpZGUvZGV2aWNlLWRlZmVuZGVyLWF1ZGl0LWNoZWNrcy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIEF1ZGl0Q2hlY2sge1xuICAvKipcbiAgICogQ2hlY2tzIHRoZSBwZXJtaXNzaXZlbmVzcyBvZiBhbiBhdXRoZW50aWNhdGVkIEFtYXpvbiBDb2duaXRvIGlkZW50aXR5IHBvb2wgcm9sZS5cbiAgICpcbiAgICogRm9yIHRoaXMgY2hlY2ssIEFXUyBJb1QgRGV2aWNlIERlZmVuZGVyIGF1ZGl0cyBhbGwgQW1hem9uIENvZ25pdG8gaWRlbnRpdHkgcG9vbHMgdGhhdCBoYXZlIGJlZW4gdXNlZCB0byBjb25uZWN0IHRvIHRoZSBBV1MgSW9UIG1lc3NhZ2UgYnJva2VyXG4gICAqIGR1cmluZyB0aGUgMzEgZGF5cyBiZWZvcmUgdGhlIGF1ZGl0IGlzIHBlcmZvcm1lZC5cbiAgICovXG4gIEFVVEhFTlRJQ0FURURfQ09HTklUT19ST0xFX09WRVJMWV9QRVJNSVNTSVZFX0NIRUNLID0gJ0FVVEhFTlRJQ0FURURfQ09HTklUT19ST0xFX09WRVJMWV9QRVJNSVNTSVZFX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgQ0EgY2VydGlmaWNhdGUgaXMgZXhwaXJpbmcuXG4gICAqXG4gICAqIFRoaXMgY2hlY2sgYXBwbGllcyB0byBDQSBjZXJ0aWZpY2F0ZXMgZXhwaXJpbmcgd2l0aGluIDMwIGRheXMgb3IgdGhhdCBoYXZlIGV4cGlyZWQuXG4gICAqL1xuICBDQV9DRVJUSUZJQ0FURV9FWFBJUklOR19DSEVDSyA9ICdDQV9DRVJUSUZJQ0FURV9FWFBJUklOR19DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgcXVhbGl0eSBvZiB0aGUgQ0EgY2VydGlmaWNhdGUga2V5LlxuICAgKlxuICAgKiBUaGUgcXVhbGl0eSBjaGVja3MgaWYgdGhlIGtleSBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgbm90IGV4cGlyZWQsIGFuZCBpZiB0aGUga2V5IG1lZXRzIGEgbWluaW11bSByZXF1aXJlZCBzaXplLlxuICAgKlxuICAgKiBUaGlzIGNoZWNrIGFwcGxpZXMgdG8gQ0EgY2VydGlmaWNhdGVzIHRoYXQgYXJlIEFDVElWRSBvciBQRU5ESU5HX1RSQU5TRkVSLlxuICAgKi9cbiAgQ0FfQ0VSVElGSUNBVEVfS0VZX1FVQUxJVFlfQ0hFQ0sgPSAnQ0FfQ0VSVElGSUNBVEVfS0VZX1FVQUxJVFlfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbXVsdGlwbGUgZGV2aWNlcyBjb25uZWN0IHVzaW5nIHRoZSBzYW1lIGNsaWVudCBJRC5cbiAgICovXG4gIENPTkZMSUNUSU5HX0NMSUVOVF9JRFNfQ0hFQ0sgPSAnQ09ORkxJQ1RJTkdfQ0xJRU5UX0lEU19DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGRldmljZSBjZXJ0aWZpY2F0ZSBpcyBleHBpcmluZy5cbiAgICpcbiAgICogVGhpcyBjaGVjayBhcHBsaWVzIHRvIGRldmljZSBjZXJ0aWZpY2F0ZXMgZXhwaXJpbmcgd2l0aGluIDMwIGRheXMgb3IgdGhhdCBoYXZlIGV4cGlyZWQuXG4gICAqL1xuICBERVZJQ0VfQ0VSVElGSUNBVEVfRVhQSVJJTkdfQ0hFQ0sgPSAnREVWSUNFX0NFUlRJRklDQVRFX0VYUElSSU5HX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoZSBxdWFsaXR5IG9mIHRoZSBkZXZpY2UgY2VydGlmaWNhdGUga2V5LlxuICAgKlxuICAgKiBUaGUgcXVhbGl0eSBjaGVja3MgaWYgdGhlIGtleSBpcyBpbiBhIHZhbGlkIGZvcm1hdCwgbm90IGV4cGlyZWQsIHNpZ25lZCBieSBhIHJlZ2lzdGVyZWQgY2VydGlmaWNhdGUgYXV0aG9yaXR5LFxuICAgKiBhbmQgaWYgdGhlIGtleSBtZWV0cyBhIG1pbmltdW0gcmVxdWlyZWQgc2l6ZS5cbiAgICovXG4gIERFVklDRV9DRVJUSUZJQ0FURV9LRVlfUVVBTElUWV9DSEVDSyA9ICdERVZJQ0VfQ0VSVElGSUNBVEVfS0VZX1FVQUxJVFlfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgbXVsdGlwbGUgY29uY3VycmVudCBjb25uZWN0aW9ucyB1c2UgdGhlIHNhbWUgWC41MDkgY2VydGlmaWNhdGUgdG8gYXV0aGVudGljYXRlIHdpdGggQVdTIElvVC5cbiAgICovXG4gIERFVklDRV9DRVJUSUZJQ0FURV9TSEFSRURfQ0hFQ0sgPSAnREVWSUNFX0NFUlRJRklDQVRFX1NIQVJFRF9DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGUgcGVybWlzc2l2ZW5lc3Mgb2YgYSBwb2xpY3kgYXR0YWNoZWQgdG8gYW4gYXV0aGVudGljYXRlZCBBbWF6b24gQ29nbml0byBpZGVudGl0eSBwb29sIHJvbGUuXG4gICAqL1xuICBJT1RfUE9MSUNZX09WRVJMWV9QRVJNSVNTSVZFX0NIRUNLID0gJ0lPVF9QT0xJQ1lfT1ZFUkxZX1BFUk1JU1NJVkVfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSByb2xlIGFsaWFzIGhhcyBhY2Nlc3MgdG8gc2VydmljZXMgdGhhdCBoYXZlbid0IGJlZW4gdXNlZCBmb3IgdGhlIEFXUyBJb1QgZGV2aWNlIGluIHRoZSBsYXN0IHllYXIuXG4gICAqL1xuICBJT1RfUk9MRV9BTElBU19BTExPV1NfQUNDRVNTX1RPX1VOVVNFRF9TRVJWSUNFU19DSEVDSyA9ICdJT1RfUk9MRV9BTElBU19BTExPV1NfQUNDRVNTX1RPX1VOVVNFRF9TRVJWSUNFU19DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzIHByb3ZpZGVkIGJ5IEFXUyBJb1Qgcm9sZSBhbGlhc2VzIGFyZSBvdmVybHkgcGVybWlzc2l2ZS5cbiAgICovXG4gIElPVF9ST0xFX0FMSUFTX09WRVJMWV9QRVJNSVNTSVZFX0NIRUNLID0gJ0lPVF9ST0xFX0FMSUFTX09WRVJMWV9QRVJNSVNTSVZFX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIEFXUyBJb1QgbG9ncyBhcmUgZGlzYWJsZWQuXG4gICAqL1xuICBMT0dHSU5HX0RJU0FCTEVEX0NIRUNLID0gJ0xPR0dJTkdfRElTQUJMRURfQ0hFQ0snLFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSByZXZva2VkIENBIGNlcnRpZmljYXRlIGlzIHN0aWxsIGFjdGl2ZS5cbiAgICovXG4gIFJFVk9LRURfQ0FfQ0VSVElGSUNBVEVfU1RJTExfQUNUSVZFX0NIRUNLID0gJ1JFVk9LRURfQ0FfQ0VSVElGSUNBVEVfU1RJTExfQUNUSVZFX0NIRUNLJyxcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgcmV2b2tlZCBkZXZpY2UgY2VydGlmaWNhdGUgaXMgc3RpbGwgYWN0aXZlLlxuICAgKi9cbiAgUkVWT0tFRF9ERVZJQ0VfQ0VSVElGSUNBVEVfU1RJTExfQUNUSVZFX0NIRUNLID0gJ1JFVk9LRURfREVWSUNFX0NFUlRJRklDQVRFX1NUSUxMX0FDVElWRV9DSEVDSycsXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwb2xpY3kgYXR0YWNoZWQgdG8gYW4gdW5hdXRoZW50aWNhdGVkIEFtYXpvbiBDb2duaXRvIGlkZW50aXR5IHBvb2wgcm9sZSBpcyB0b28gcGVybWlzc2l2ZS5cbiAgICovXG4gIFVOQVVUSEVOVElDQVRFRF9DT0dOSVRPX1JPTEVfT1ZFUkxZX1BFUk1JU1NJVkVfQ0hFQ0sgPSAnVU5BVVRIRU5USUNBVEVEX0NPR05JVE9fUk9MRV9PVkVSTFlfUEVSTUlTU0lWRV9DSEVDSycsXG59XG5cbi8qKlxuICogVGhlIGRheSBvZiB0aGUgd2VlayBvbiB3aGljaCB0aGUgc2NoZWR1bGVkIGF1ZGl0IHRha2VzIHBsYWNlLlxuICovXG5leHBvcnQgZW51bSBEYXlPZldlZWsge1xuICAvKipcbiAgICogU3VuZGF5XG4gICAqL1xuICBTVU5EQVkgPSAnU1VOJyxcblxuICAvKipcbiAgICogTW9uZGF5XG4gICAqL1xuICBNT05EQVkgPSAnTU9OJyxcblxuICAvKipcbiAgICogVHVlc2RheVxuICAgKi9cbiAgVFVFU0RBWSA9ICdUVUUnLFxuXG4gIC8qKlxuICAgKiBXZWRuZXNkYXlcbiAgICovXG4gIFdFRE5FU0RBWSA9ICdXRUQnLFxuXG4gIC8qKlxuICAgKiBUaHVyc2RheVxuICAgKi9cbiAgVEhVUlNEQVkgPSAnVEhVJyxcblxuICAvKipcbiAgICogRnJpZGF5XG4gICAqL1xuICBGUklEQVkgPSAnRlJJJyxcblxuICAvKipcbiAgICogU2F0dXJkYXlcbiAgICovXG4gIFNBVFVSREFZID0gJ1NBVCcsXG5cbiAgLyoqXG4gICAqIFVOU0VUX1ZBTFVFXG4gICAqL1xuICBVTlNFVF9WQUxVRSA9ICdVTlNFVF9WQUxVRScsXG59XG5cbi8qKlxuICogVGhlIGRheSBvZiB0aGUgbW9udGggb24gd2hpY2ggdGhlIHNjaGVkdWxlZCBhdWRpdCB0YWtlcyBwbGFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERheU9mTW9udGgge1xuICAvKipcbiAgICogVGhlIGxhc3QgZGF5IG9mIHRoZSBtb250aFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMQVNUX0RBWSA9IG5ldyBEYXlPZk1vbnRoKCdMQVNUJyk7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBkYXkgb2YgdGhlIG1vbnRoXG4gICAqIEBwYXJhbSBkYXkgdGhlIGRheSBvZiB0aGUgbW9udGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YoZGF5OiBudW1iZXIpOiBEYXlPZk1vbnRoIHtcbiAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXkgb2YgbW9udGggbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMxLCBnb3Q6ICR7ZGF5fWApO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGF5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXkgb2YgbW9udGggbXVzdCBiZSBhbiBpbnRlZ2VyLCBnb3Q6ICR7ZGF5fWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERheU9mTW9udGgoU3RyaW5nKGRheSkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBkYXkgVGhlIGRheSBvZiB0aGUgbW9udGhcbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGRheTogc3RyaW5nKSB7fVxufVxuXG4vKipcbiAqIFRoZSBmcmVxdWVuY3kgYXQgd2hpY2ggdGhlIHNjaGVkdWxlZCBhdWRpdCB0YWtlcyBwbGFjZS5cbiAqL1xuZXhwb3J0IGVudW0gRnJlcXVlbmN5IHtcbiAgLyoqXG4gICAqIERhaWx5XG4gICAqL1xuICBEQUlMWSA9ICdEQUlMWScsXG5cbiAgLyoqXG4gICAqIFdlZWtseVxuICAgKi9cbiAgV0VFS0xZID0gJ1dFRUtMWScsXG5cbiAgLyoqXG4gICAqIEJpLXdlZWtseVxuICAgKi9cbiAgQklfV0VFS0xZID0gJ0JJV0VFS0xZJyxcblxuICAvKipcbiAgICogTW9udGhseVxuICAgKi9cbiAgTU9OVEhMWSA9ICdNT05USExZJyxcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBkZWZpbmluZyBBV1MgSW9UIFNjaGVkdWxlZCBBdWRpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlZEF1ZGl0UHJvcHMge1xuICAvKipcbiAgICogV2hpY2ggY2hlY2tzIGFyZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBzY2hlZHVsZWQgYXVkaXQuXG4gICAqXG4gICAqIENoZWNrcyBtdXN0IGJlIGVuYWJsZWQgZm9yIHlvdXIgYWNjb3VudC5cbiAgICovXG4gIHJlYWRvbmx5IGF1ZGl0Q2hlY2tzOiBBdWRpdENoZWNrW107XG5cbiAgLyoqXG4gICAqIEFjY291bnQgYXVkaXQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogVGhlIGF1ZGl0IGNoZWNrcyBzcGVjaWZpZWQgaW4gYGF1ZGl0Q2hlY2tzYCBtdXN0IGJlIGVuYWJsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEF1ZGl0Q29uZmlndXJhdGlvbjogSUFjY291bnRBdWRpdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBkYXkgb2YgdGhlIHdlZWsgb24gd2hpY2ggdGhlIHNjaGVkdWxlZCBhdWRpdCBpcyBydW4gKGlmIHRoZSBmcmVxdWVuY3kgaXMgXCJXRUVLTFlcIiBvciBcIkJJV0VFS0xZXCIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJlcXVpcmVkIGlmIGZyZXF1ZW5jeSBpcyBcIldFRUtMWVwiIG9yIFwiQklXRUVLTFlcIiwgbm90IGFsbG93ZWQgb3RoZXJ3aXNlXG4gICAqL1xuICByZWFkb25seSBkYXlPZldlZWs/OiBEYXlPZldlZWs7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXkgb2YgdGhlIG1vbnRoIG9uIHdoaWNoIHRoZSBzY2hlZHVsZWQgYXVkaXQgaXMgcnVuIChpZiB0aGUgZnJlcXVlbmN5IGlzIFwiTU9OVEhMWVwiKS5cbiAgICpcbiAgICogSWYgZGF5cyAyOS0zMSBhcmUgc3BlY2lmaWVkLCBhbmQgdGhlIG1vbnRoIGRvZXMgbm90IGhhdmUgdGhhdCBtYW55IGRheXMsIHRoZSBhdWRpdCB0YWtlcyBwbGFjZSBvbiB0aGUgXCJMQVNUXCIgZGF5IG9mIHRoZSBtb250aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXF1aXJlZCBpZiBmcmVxdWVuY3kgaXMgXCJNT05USExZXCIsIG5vdCBhbGxvd2VkIG90aGVyd2lzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF5T2ZNb250aD86IERheU9mTW9udGg7XG5cbiAgLyoqXG4gICAqIEhvdyBvZnRlbiB0aGUgc2NoZWR1bGVkIGF1ZGl0IG9jY3Vycy5cbiAgICovXG4gIHJlYWRvbmx5IGZyZXF1ZW5jeTogRnJlcXVlbmN5O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2NoZWR1bGVkIGF1ZGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVkIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlZEF1ZGl0TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmVzIEFXUyBJb1QgU2NoZWR1bGVkIEF1ZGl0XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBTY2hlZHVsZWRBdWRpdCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVNjaGVkdWxlZEF1ZGl0IHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW90LWFscGhhLlNjaGVkdWxlZEF1ZGl0JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEFXUyBJb1QgU2NoZWR1bGVkIEF1ZGl0IGZyb20gaXRzIEFSTi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYClcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSBzY2hlZHVsZWRBdWRpdEFybiBUaGUgQVJOIG9mIHRoZSBzY2hlZHVsZWQgYXVkaXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNjaGVkdWxlZEF1ZGl0QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHNjaGVkdWxlZEF1ZGl0QXJuOiBzdHJpbmcpOiBJU2NoZWR1bGVkQXVkaXQge1xuICAgIGNvbnN0IG5hbWUgPSBTdGFjay5vZihzY29wZSkuc3BsaXRBcm4oc2NoZWR1bGVkQXVkaXRBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWU7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNjaGVkdWxlZCBhdWRpdCBuYW1lIGZvdW5kIGluIEFSTjogJyR7c2NoZWR1bGVkQXVkaXRBcm59J2ApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZyb21TY2hlZHVsZWRBdWRpdEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IHNjaGVkdWxlZEF1ZGl0QXJuOiBzY2hlZHVsZWRBdWRpdEFybiwgc2NoZWR1bGVkQXVkaXROYW1lOiBuYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBBV1MgSW9UIFNjaGVkdWxlZCBBdWRpdCBmcm9tIGl0cyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIG5hbWVcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBzY2hlZHVsZWQgYXVkaXQgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2NoZWR1bGVkQXVkaXRBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBTY2hlZHVsZWRBdWRpdEF0dHJpYnV0ZXMpOiBJU2NoZWR1bGVkQXVkaXQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVNjaGVkdWxlZEF1ZGl0IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZWRBdWRpdEFybiA9IGF0dHJzLnNjaGVkdWxlZEF1ZGl0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNjaGVkdWxlZEF1ZGl0TmFtZSA9IGF0dHJzLnNjaGVkdWxlZEF1ZGl0TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2NoZWR1bGVkIGF1ZGl0IG5hbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjaGVkdWxlZEF1ZGl0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzY2hlZHVsZWQgYXVkaXRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjaGVkdWxlZEF1ZGl0QXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNjaGVkdWxlZEF1ZGl0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmF1ZGl0Q2hlY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgXFwnYXVkaXRDaGVja3NcXCcgbXVzdCBiZSBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChwcm9wcy5mcmVxdWVuY3kpIHtcbiAgICAgIGNhc2UgRnJlcXVlbmN5LkRBSUxZOlxuICAgICAgICBpZiAocHJvcHMuZGF5T2ZXZWVrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXkgb2YgdGhlIHdlZWsgbXVzdCBub3QgYmUgc3BlY2lmaWVkIGZvciBkYWlseSBhdWRpdHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmRheU9mTW9udGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RheSBvZiB0aGUgbW9udGggbXVzdCBub3QgYmUgc3BlY2lmaWVkIGZvciBkYWlseSBhdWRpdHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZyZXF1ZW5jeS5XRUVLTFk6XG4gICAgICBjYXNlIEZyZXF1ZW5jeS5CSV9XRUVLTFk6XG4gICAgICAgIGlmICghcHJvcHMuZGF5T2ZXZWVrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXkgb2YgdGhlIHdlZWsgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHdlZWtseSBvciBiaS13ZWVrbHkgYXVkaXRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYXlPZk1vbnRoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXkgb2YgdGhlIG1vbnRoIG11c3Qgbm90IGJlIHNwZWNpZmllZCBmb3Igd2Vla2x5IG9yIGJpLXdlZWtseSBhdWRpdHMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZyZXF1ZW5jeS5NT05USExZOlxuICAgICAgICBpZiAoIXByb3BzLmRheU9mTW9udGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RheSBvZiB0aGUgbW9udGggbXVzdCBiZSBzcGVjaWZpZWQgZm9yIG1vbnRobHkgYXVkaXRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYXlPZldlZWspIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RheSBvZiB0aGUgd2VlayBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgZm9yIG1vbnRobHkgYXVkaXRzLicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyZXF1ZW5jeSBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnNjaGVkdWxlZEF1ZGl0TmFtZSAhPT0gdW5kZWZpbmVkICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuc2NoZWR1bGVkQXVkaXROYW1lKSkge1xuICAgICAgaWYgKHByb3BzLnNjaGVkdWxlZEF1ZGl0TmFtZS5sZW5ndGggPCAxIHx8IHByb3BzLnNjaGVkdWxlZEF1ZGl0TmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlZHVsZWQgYXVkaXQgbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTI4IGNoYXJhY3RlcnMsIGdvdDogJHtwcm9wcy5zY2hlZHVsZWRBdWRpdE5hbWUubGVuZ3RofWApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlthLXpBLVowLTk6Xy1dKyQvLnRlc3QocHJvcHMuc2NoZWR1bGVkQXVkaXROYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNjaGVkdWxlZCBhdWRpdCBuYW1lIG11c3QgYmUgYWxwaGFudW1lcmljIGFuZCBtYXkgaW5jbHVkZSBjb2xvbnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucywgZ290OiAke3Byb3BzLnNjaGVkdWxlZEF1ZGl0TmFtZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBpb3QuQ2ZuU2NoZWR1bGVkQXVkaXQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgc2NoZWR1bGVkQXVkaXROYW1lOiBwcm9wcy5zY2hlZHVsZWRBdWRpdE5hbWUsXG4gICAgICB0YXJnZXRDaGVja05hbWVzOiBwcm9wcy5hdWRpdENoZWNrcyxcbiAgICAgIGRheU9mV2VlazogcHJvcHMuZGF5T2ZXZWVrLFxuICAgICAgZGF5T2ZNb250aDogcHJvcHMuZGF5T2ZNb250aD8uZGF5LFxuICAgICAgZnJlcXVlbmN5OiBwcm9wcy5mcmVxdWVuY3ksXG4gICAgfSk7XG5cbiAgICB0aGlzLnNjaGVkdWxlZEF1ZGl0TmFtZSA9IHJlc291cmNlLnJlZjtcbiAgICB0aGlzLnNjaGVkdWxlZEF1ZGl0QXJuID0gcmVzb3VyY2UuYXR0clNjaGVkdWxlZEF1ZGl0QXJuO1xuXG4gICAgcmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLmFjY291bnRBdWRpdENvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbiJdfQ==
|