angular-odata 0.123.0 → 0.124.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/esm2022/lib/api.mjs +1 -1
- package/esm2022/lib/cache/cache.mjs +4 -2
- package/esm2022/lib/cache/storage.mjs +1 -1
- package/esm2022/lib/client.mjs +5 -6
- package/esm2022/lib/helper.mjs +1 -1
- package/esm2022/lib/loaders.mjs +1 -1
- package/esm2022/lib/models/collection.mjs +8 -5
- package/esm2022/lib/models/model.mjs +32 -16
- package/esm2022/lib/models/options.mjs +21 -14
- package/esm2022/lib/module.mjs +6 -7
- package/esm2022/lib/resources/path/segments.mjs +6 -6
- package/esm2022/lib/resources/query/builder.mjs +11 -6
- package/esm2022/lib/resources/query/expressions/base.mjs +1 -1
- package/esm2022/lib/resources/query/expressions/compute.mjs +5 -5
- package/esm2022/lib/resources/query/expressions/count.mjs +19 -9
- package/esm2022/lib/resources/query/expressions/expand.mjs +15 -9
- package/esm2022/lib/resources/query/expressions/filter.mjs +7 -7
- package/esm2022/lib/resources/query/expressions/orderby.mjs +7 -7
- package/esm2022/lib/resources/query/expressions/search.mjs +5 -5
- package/esm2022/lib/resources/query/expressions/select.mjs +5 -5
- package/esm2022/lib/resources/query/expressions/syntax.mjs +80 -45
- package/esm2022/lib/resources/query/handlers.mjs +1 -1
- package/esm2022/lib/resources/query/options.mjs +6 -6
- package/esm2022/lib/resources/request.mjs +1 -1
- package/esm2022/lib/resources/resource.mjs +11 -5
- package/esm2022/lib/resources/responses/annotations.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-entity-container.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-entity-set.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-enum-type.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-function-action.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-reference.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-schema.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-singleton.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-structural-property.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-structured-type.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-type-definition.mjs +1 -1
- package/esm2022/lib/resources/responses/metadata.mjs +2 -3
- package/esm2022/lib/resources/responses/response.mjs +1 -1
- package/esm2022/lib/resources/types/action.mjs +1 -1
- package/esm2022/lib/resources/types/batch.mjs +1 -1
- package/esm2022/lib/resources/types/count.mjs +1 -1
- package/esm2022/lib/resources/types/entity-set.mjs +1 -1
- package/esm2022/lib/resources/types/entity.mjs +1 -1
- package/esm2022/lib/resources/types/function.mjs +1 -1
- package/esm2022/lib/resources/types/media.mjs +1 -1
- package/esm2022/lib/resources/types/navigation-property.mjs +1 -1
- package/esm2022/lib/resources/types/property.mjs +1 -1
- package/esm2022/lib/resources/types/reference.mjs +1 -1
- package/esm2022/lib/resources/types/singleton.mjs +1 -1
- package/esm2022/lib/resources/types/value.mjs +1 -1
- package/esm2022/lib/schema/annotation.mjs +1 -1
- package/esm2022/lib/schema/callable.mjs +1 -1
- package/esm2022/lib/schema/element.mjs +1 -1
- package/esm2022/lib/schema/entity-container.mjs +1 -1
- package/esm2022/lib/schema/enum-type.mjs +1 -1
- package/esm2022/lib/schema/parsers/callable.mjs +1 -1
- package/esm2022/lib/schema/parsers/edm.mjs +1 -1
- package/esm2022/lib/schema/parsers/enum-type.mjs +1 -1
- package/esm2022/lib/schema/parsers/structured-type.mjs +14 -2
- package/esm2022/lib/schema/schema.mjs +1 -1
- package/esm2022/lib/schema/structured-type.mjs +9 -4
- package/esm2022/lib/services/base.mjs +1 -1
- package/esm2022/lib/services/entity-set.mjs +1 -1
- package/esm2022/lib/services/factory.mjs +5 -6
- package/esm2022/lib/services/singleton.mjs +1 -1
- package/esm2022/lib/settings.mjs +1 -1
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/arrays.mjs +1 -1
- package/esm2022/lib/utils/durations.mjs +1 -1
- package/esm2022/lib/utils/enums.mjs +1 -1
- package/esm2022/lib/utils/http.mjs +1 -1
- package/esm2022/lib/utils/objects.mjs +1 -1
- package/esm2022/lib/utils/odata.mjs +1 -1
- package/esm2022/lib/utils/types.mjs +4 -1
- package/fesm2022/angular-odata.mjs +251 -138
- package/fesm2022/angular-odata.mjs.map +1 -1
- package/lib/models/model.d.ts +1 -1
- package/lib/models/options.d.ts +3 -4
- package/lib/resources/path/segments.d.ts +14 -5
- package/lib/resources/query/expressions/base.d.ts +3 -1
- package/lib/resources/query/expressions/compute.d.ts +8 -6
- package/lib/resources/query/expressions/count.d.ts +11 -8
- package/lib/resources/query/expressions/expand.d.ts +15 -12
- package/lib/resources/query/expressions/filter.d.ts +7 -5
- package/lib/resources/query/expressions/orderby.d.ts +9 -6
- package/lib/resources/query/expressions/search.d.ts +9 -6
- package/lib/resources/query/expressions/select.d.ts +7 -5
- package/lib/resources/query/expressions/syntax.d.ts +16 -13
- package/lib/resources/query/options.d.ts +14 -5
- package/lib/resources/resource.d.ts +1 -1
- package/lib/schema/parsers/structured-type.d.ts +3 -0
- package/lib/schema/structured-type.d.ts +2 -1
- package/lib/utils/types.d.ts +1 -0
- package/package.json +1 -1
|
@@ -56,12 +56,12 @@ export class ODataModelEvent {
|
|
|
56
56
|
}
|
|
57
57
|
get path() {
|
|
58
58
|
return this.chain
|
|
59
|
-
.map(([,
|
|
60
|
-
? `[${
|
|
61
|
-
:
|
|
59
|
+
.map(([, attr], index) => typeof attr === 'number'
|
|
60
|
+
? `[${attr}]`
|
|
61
|
+
: attr instanceof ODataModelAttribute
|
|
62
62
|
? index === 0
|
|
63
|
-
?
|
|
64
|
-
: `.${
|
|
63
|
+
? attr.name
|
|
64
|
+
: `.${attr.name}`
|
|
65
65
|
: '')
|
|
66
66
|
.join('');
|
|
67
67
|
}
|
|
@@ -106,7 +106,9 @@ export function Model({ cid = CID_FIELD_NAME } = {}) {
|
|
|
106
106
|
return (constructor) => {
|
|
107
107
|
const Klass = constructor;
|
|
108
108
|
if (!Klass.hasOwnProperty('options'))
|
|
109
|
-
Klass.options = {
|
|
109
|
+
Klass.options = {
|
|
110
|
+
fields: new Map(),
|
|
111
|
+
};
|
|
110
112
|
Klass.options.cid = cid;
|
|
111
113
|
return constructor;
|
|
112
114
|
};
|
|
@@ -115,9 +117,11 @@ export function ModelField({ name, ...options } = {}) {
|
|
|
115
117
|
return (target, key) => {
|
|
116
118
|
const Klass = target.constructor;
|
|
117
119
|
if (!Klass.hasOwnProperty('options'))
|
|
118
|
-
Klass.options = {
|
|
120
|
+
Klass.options = {
|
|
121
|
+
fields: new Map(),
|
|
122
|
+
};
|
|
119
123
|
options.field = name || key;
|
|
120
|
-
Klass.options.fields
|
|
124
|
+
Klass.options.fields.set(key, options);
|
|
121
125
|
};
|
|
122
126
|
}
|
|
123
127
|
export class ODataModelField {
|
|
@@ -340,9 +344,7 @@ export class ODataModelAttribute {
|
|
|
340
344
|
const current = this.get();
|
|
341
345
|
if (ODataModelOptions.isModel(current) ||
|
|
342
346
|
ODataModelOptions.isCollection(current))
|
|
343
|
-
this.unlink(current
|
|
344
|
-
//this.value !== current
|
|
345
|
-
);
|
|
347
|
+
this.unlink(current);
|
|
346
348
|
const changed = ODataModelOptions.isModel(current) && ODataModelOptions.isModel(value)
|
|
347
349
|
? !current.equals(value)
|
|
348
350
|
: ODataModelOptions.isCollection(current) &&
|
|
@@ -407,10 +409,9 @@ export class ODataModelOptions {
|
|
|
407
409
|
};
|
|
408
410
|
this.name = schema.name;
|
|
409
411
|
this.base = schema.base;
|
|
410
|
-
this.open = schema.open;
|
|
411
412
|
this.schema = schema;
|
|
412
413
|
this.cid = options?.cid || CID_FIELD_NAME;
|
|
413
|
-
|
|
414
|
+
options.fields.forEach((value, key) => this.addField(key, value));
|
|
414
415
|
}
|
|
415
416
|
get api() {
|
|
416
417
|
return this.schema.api;
|
|
@@ -421,6 +422,12 @@ export class ODataModelOptions {
|
|
|
421
422
|
isOpenType() {
|
|
422
423
|
return this.schema.isOpenType();
|
|
423
424
|
}
|
|
425
|
+
isEntityType() {
|
|
426
|
+
return this.schema.isEntityType();
|
|
427
|
+
}
|
|
428
|
+
isComplexType() {
|
|
429
|
+
return this.schema.isComplexType();
|
|
430
|
+
}
|
|
424
431
|
isTypeOf(type) {
|
|
425
432
|
return this.schema.isTypeOf(type);
|
|
426
433
|
}
|
|
@@ -1107,4 +1114,4 @@ export class ODataModelOptions {
|
|
|
1107
1114
|
});
|
|
1108
1115
|
}
|
|
1109
1116
|
}
|
|
1110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9tb2RlbHMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxFQUNmLHNCQUFzQixHQUN2QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IscUJBQXFCLEdBS3RCLE1BQU0sY0FBYyxDQUFDO0FBTXRCLE9BQU8sRUFBRSxPQUFPLEVBQXlCLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0MsTUFBTSxDQUFOLElBQVksbUJBV1g7QUFYRCxXQUFZLG1CQUFtQjtJQUM3Qix3Q0FBaUIsQ0FBQTtJQUNqQixzQ0FBZSxDQUFBO0lBQ2Ysd0NBQWlCLENBQUE7SUFDakIsMENBQW1CLENBQUE7SUFDbkIsa0NBQVcsQ0FBQTtJQUNYLHdDQUFpQixDQUFBO0lBQ2pCLDBDQUFtQixDQUFBO0lBQ25CLDBDQUFtQixDQUFBO0lBQ25CLG9DQUFhLENBQUE7SUFDYix3Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBWFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVc5QjtBQUVELE1BQU0sT0FBTyxlQUFlO0lBTTFCLFlBQ0UsSUFBeUIsRUFDekIsRUFDRSxLQUFLLEVBQ0wsVUFB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QUNIO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBSSxJQUFtQixFQUFFLElBQTRCO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBMkIsRUFBRSxFQUFFO1lBQ3JELElBQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQyxLQUFLLENBQUMsUUFBUTtnQkFDZCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQ3BCO2dCQUNBLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQzlCLElBQ0UsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO3dCQUN2QixJQUFJLENBQUMsVUFBVTt3QkFDZixLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFDbEI7d0JBQ0EsSUFBSSxHQUFHLEdBQUksSUFBSSxDQUFDLEdBQUcsRUFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzVELElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFOzRCQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzt5QkFDMUI7cUJBQ0Y7aUJBQ0Y7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENJRF9GSUVMRF9OQU1FLFxuICBDT01QVVRFRCxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBPUFRJTUlTVElDX0NPTkNVUlJFTkNZLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXInO1xuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5QW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5UmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UsXG4gIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UsXG4gIE9EYXRhUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcixcbiAgT0RhdGFSZXNvdXJjZSxcbiAgT0RhdGFTaW5nbGV0b25SZXNvdXJjZSxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7XG4gIE9EYXRhRW50aXR5U2V0LFxuICBPRGF0YVN0cnVjdHVyZWRUeXBlLFxuICBPRGF0YVN0cnVjdHVyZWRUeXBlRmllbGRQYXJzZXIsXG59IGZyb20gJy4uL3NjaGVtYSc7XG5pbXBvcnQgeyBFZG1UeXBlLCBQYXJzZXIsIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE9EYXRhQ29sbGVjdGlvbiB9IGZyb20gJy4vY29sbGVjdGlvbic7XG5pbXBvcnQgdHlwZSB7IE9EYXRhTW9kZWwgfSBmcm9tICcuL21vZGVsJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgZW51bSBPRGF0YU1vZGVsRXZlbnRUeXBlIHtcbiAgQ2hhbmdlID0gJ2NoYW5nZScsXG4gIFJlc2V0ID0gJ3Jlc2V0JyxcbiAgVXBkYXRlID0gJ3VwZGF0ZScsXG4gIERlc3Ryb3kgPSAnZGVzdHJveScsXG4gIEFkZCA9ICdhZGQnLFxuICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgSW52YWxpZCA9ICdpbnZhbGlkJyxcbiAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgU3luYyA9ICdzeW5jJyxcbiAgQXR0YWNoID0gJ2F0dGFjaCcsXG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU1vZGVsRXZlbnQ8VD4ge1xuICBuYW1lOiBPRGF0YU1vZGVsRXZlbnRUeXBlO1xuICB2YWx1ZT86IGFueTtcbiAgcHJldmlvdXM/OiBhbnk7XG4gIG9wdGlvbnM/OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogT0RhdGFNb2RlbEV2ZW50VHlwZSxcbiAgICB7XG4gICAgICBtb2RlbCxcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBwcmV2aW91cyxcbiAgICAgIHZhbHVlLFxuICAgICAgYXR0cixcbiAgICAgIG9wdGlvbnMsXG4gICAgfToge1xuICAgICAgbW9kZWw/OiBPRGF0YU1vZGVsPFQ+O1xuICAgICAgY29sbGVjdGlvbj86IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PjtcbiAgICAgIGF0dHI/OiBPRGF0YU1vZGVsQXR0cmlidXRlPGFueT4gfCBudW1iZXI7XG4gICAgICBwcmV2aW91cz86IGFueTtcbiAgICAgIHZhbHVlPzogYW55O1xuICAgICAgb3B0aW9ucz86IGFueTtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgICB0aGlzLnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFpbiA9IFtcbiAgICAgIFtcbiAgICAgICAgKHRoaXMuY29sbGVjdGlvbiB8fCB0aGlzLm1vZGVsKSBhc1xuICAgICAgICAgIHwgT0RhdGFNb2RlbDxhbnk+XG4gICAgICAgICAgfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICBhdHRyIHx8IG51bGwsXG4gICAgICBdLFxuICAgIF07XG4gIH1cblxuICBidWJibGluZzogYm9vbGVhbiA9IHRydWU7XG4gIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICB0aGlzLmJ1YmJsaW5nID0gZmFsc2U7XG4gIH1cblxuICBjaGFpbjogW1xuICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgT0RhdGFNb2RlbEF0dHJpYnV0ZTxhbnk+IHwgbnVtYmVyIHwgbnVsbFxuICBdW107XG5cbiAgcHVzaChcbiAgICBtb2RlbDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICBhdHRyOiBPRGF0YU1vZGVsQXR0cmlidXRlPGFueT4gfCBudW1iZXJcbiAgKSB7XG4gICAgbGV0IGV2ZW50ID0gbmV3IE9EYXRhTW9kZWxFdmVudCh0aGlzLm5hbWUsIHtcbiAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgcHJldmlvdXM6IHRoaXMucHJldmlvdXMsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICB9KTtcbiAgICBldmVudC5jaGFpbiA9IFsuLi50aGlzLmNoYWluXTtcbiAgICBldmVudC5jaGFpbi5zcGxpY2UoMCwgMCwgW21vZGVsLCBhdHRyXSk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgdmlzaXRlZChtb2RlbDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+Pikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNoYWluLnNvbWUoKGMpID0+IGNbMF0gPT09IG1vZGVsKSAmJlxuICAgICAgdGhpcy5jaGFpblt0aGlzLmNoYWluLmxlbmd0aCAtIDFdWzBdICE9PSBtb2RlbFxuICAgICk7XG4gIH1cblxuICBnZXQgcGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFpblxuICAgICAgLm1hcCgoWywgZmllbGRdLCBpbmRleCkgPT5cbiAgICAgICAgdHlwZW9mIGZpZWxkID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYFske2ZpZWxkfV1gXG4gICAgICAgICAgOiBmaWVsZCBpbnN0YW5jZW9mIE9EYXRhTW9kZWxGaWVsZFxuICAgICAgICAgID8gaW5kZXggPT09IDBcbiAgICAgICAgICAgID8gZmllbGQubmFtZVxuICAgICAgICAgICAgOiBgLiR7ZmllbGQubmFtZX1gXG4gICAgICAgICAgOiAnJ1xuICAgICAgKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG5cbiAgLy9SZWZlcmVuY2UgdG8gdGhlIG1vZGVsIHdoaWNoIHRoZSBldmVudCB3YXMgZGlzcGF0Y2hlZFxuICBtb2RlbD86IE9EYXRhTW9kZWw8VD47XG4gIC8vSWRlbnRpZmllcyB0aGUgY3VycmVudCBtb2RlbCBmb3IgdGhlIGV2ZW50XG4gIGdldCBjdXJyZW50TW9kZWwoKTogT0RhdGFNb2RlbDxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5jaGFpbi5maW5kKChjKSA9PiBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGNbMF0pKTtcbiAgICByZXR1cm4gbGluayAhPT0gdW5kZWZpbmVkID8gKGxpbmtbMF0gYXMgT0RhdGFNb2RlbDxhbnk+KSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vUmVmZXJlbmNlIHRvIHRoZSBjb2xsZWN0aW9uIHdoaWNoIHRoZSBldmVudCB3YXMgZGlzcGF0Y2hlZFxuICBjb2xsZWN0aW9uPzogT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+O1xuICAvL0lkZW50aWZpZXMgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBmb3IgdGhlIGV2ZW50XG4gIGdldCBjdXJyZW50Q29sbGVjdGlvbigpOiBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5jaGFpbi5maW5kKChjKSA9PiBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24oY1swXSkpO1xuICAgIHJldHVybiBsaW5rICE9PSB1bmRlZmluZWRcbiAgICAgID8gKGxpbmtbMF0gYXMgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PilcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBCVUJCTElORyA9IFtcbiAgT0RhdGFNb2RlbEV2ZW50VHlwZS5DaGFuZ2UsXG4gIE9EYXRhTW9kZWxFdmVudFR5cGUuUmVzZXQsXG4gIE9EYXRhTW9kZWxFdmVudFR5cGUuVXBkYXRlLFxuICBPRGF0YU1vZGVsRXZlbnRUeXBlLkRlc3Ryb3ksXG4gIE9EYXRhTW9kZWxFdmVudFR5cGUuQWRkLFxuICBPRGF0YU1vZGVsRXZlbnRUeXBlLlJlbW92ZSxcbl07XG5cbmV4cG9ydCBjb25zdCBJTkNMVURFX1NIQUxMT1cgPSB7XG4gIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gIGluY2x1ZGVfY29tcHV0ZWQ6IHRydWUsXG4gIGluY2x1ZGVfa2V5OiB0cnVlLFxufTtcblxuZXhwb3J0IGNvbnN0IElOQ0xVREVfREVFUCA9IHtcbiAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICBpbmNsdWRlX25vbl9maWVsZDogdHJ1ZSxcbiAgLi4uSU5DTFVERV9TSEFMTE9XLFxufTtcblxuZXhwb3J0IGVudW0gT0RhdGFNb2RlbFN0YXRlIHtcbiAgQWRkZWQsXG4gIFJlbW92ZWQsXG4gIFVuY2hhbmdlZCxcbn1cblxuZXhwb3J0IHR5cGUgTW9kZWxPcHRpb25zID0ge1xuICBjaWQ/OiBzdHJpbmc7XG4gIGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogTW9kZWxGaWVsZE9wdGlvbnMgfTtcbn07XG5cbmV4cG9ydCB0eXBlIE1vZGVsRmllbGRPcHRpb25zID0ge1xuICBmaWVsZD86IHN0cmluZztcbiAgcGFyc2VyPzogT0RhdGFTdHJ1Y3R1cmVkVHlwZUZpZWxkUGFyc2VyPGFueT47XG4gIGRlZmF1bHQ/OiBhbnk7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgY29uY3VycmVuY3k/OiBib29sZWFuO1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHBhdHRlcm4/OiBSZWdFeHA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gTW9kZWwoeyBjaWQgPSBDSURfRklFTERfTkFNRSB9OiB7IGNpZD86IHN0cmluZyB9ID0ge30pIHtcbiAgcmV0dXJuIDxUIGV4dGVuZHMgeyBuZXcgKC4uLmFyZ3M6IGFueVtdKToge30gfT4oY29uc3RydWN0b3I6IFQpID0+IHtcbiAgICBjb25zdCBLbGFzcyA9IDxhbnk+Y29uc3RydWN0b3I7XG4gICAgaWYgKCFLbGFzcy5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKVxuICAgICAgS2xhc3Mub3B0aW9ucyA9IHsgZmllbGRzOiB7fSB9IGFzIE1vZGVsT3B0aW9ucztcbiAgICBLbGFzcy5vcHRpb25zLmNpZCA9IGNpZDtcbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbEZpZWxkKHtcbiAgbmFtZSxcbiAgLi4ub3B0aW9uc1xufTogeyBuYW1lPzogc3RyaW5nIH0gJiBNb2RlbEZpZWxkT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgY29uc3QgS2xhc3MgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gICAgaWYgKCFLbGFzcy5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKVxuICAgICAgS2xhc3Mub3B0aW9ucyA9IHsgZmllbGRzOiB7fSB9IGFzIE1vZGVsT3B0aW9ucztcbiAgICBvcHRpb25zLmZpZWxkID0gbmFtZSB8fCBrZXk7XG4gICAgS2xhc3Mub3B0aW9ucy5maWVsZHNba2V5XSA9IG9wdGlvbnM7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9EYXRhTW9kZWxGaWVsZE9wdGlvbnM8Rj4gPSBNb2RlbEZpZWxkT3B0aW9ucyAmIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmaWVsZDogc3RyaW5nO1xuICBwYXJzZXI6IE9EYXRhU3RydWN0dXJlZFR5cGVGaWVsZFBhcnNlcjxGPjtcbn07XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU1vZGVsRmllbGQ8Rj4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHBhcnNlcjogT0RhdGFTdHJ1Y3R1cmVkVHlwZUZpZWxkUGFyc2VyPEY+O1xuICBvcHRpb25zOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICBtZXRhPzogT0RhdGFNb2RlbE9wdGlvbnM8YW55PjtcbiAgZGVmYXVsdD86IGFueTtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIGNvbmN1cnJlbmN5OiBib29sZWFuO1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHBhdHRlcm4/OiBSZWdFeHA7XG4gIHBhcnNlck9wdGlvbnM/OiBQYXJzZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IE9EYXRhTW9kZWxPcHRpb25zPGFueT4sXG4gICAgeyBuYW1lLCBmaWVsZCwgcGFyc2VyLCAuLi5vcHRzIH06IE9EYXRhTW9kZWxGaWVsZE9wdGlvbnM8Rj5cbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZmllbGQgPSBmaWVsZDtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLmRlZmF1bHQgPSBvcHRzLmRlZmF1bHQgfHwgcGFyc2VyLmRlZmF1bHQ7XG4gICAgdGhpcy5yZXF1aXJlZCA9IEJvb2xlYW4ob3B0cy5yZXF1aXJlZCB8fCAhcGFyc2VyLm51bGxhYmxlKTtcbiAgICB0aGlzLmNvbmN1cnJlbmN5ID0gQm9vbGVhbihvcHRzLmNvbmN1cnJlbmN5KTtcbiAgICB0aGlzLm1heExlbmd0aCA9IG9wdHMubWF4TGVuZ3RoIHx8IHBhcnNlci5tYXhMZW5ndGg7XG4gICAgdGhpcy5taW5MZW5ndGggPSBvcHRzLm1pbkxlbmd0aDtcbiAgICB0aGlzLm1pbiA9IG9wdHMubWluO1xuICAgIHRoaXMubWF4ID0gb3B0cy5tYXg7XG4gICAgdGhpcy5wYXR0ZXJuID0gb3B0cy5wYXR0ZXJuO1xuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFwaTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci50eXBlO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb24oKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5wYXJzZXIubmF2aWdhdGlvbik7XG4gIH1cblxuICBnZXQgY29sbGVjdGlvbigpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcnNlci5jb2xsZWN0aW9uKTtcbiAgfVxuXG4gIGFubm90YXRlZFZhbHVlPFQ+KHRlcm06IHN0cmluZyB8IFJlZ0V4cCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5hbm5vdGF0ZWRWYWx1ZTxUPih0ZXJtKTtcbiAgfVxuXG4gIGNvbmZpZ3VyZSh7XG4gICAgZmluZE9wdGlvbnNGb3JUeXBlLFxuICAgIGNvbmN1cnJlbmN5LFxuICAgIG9wdGlvbnMsXG4gIH06IHtcbiAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgY29uY3VycmVuY3k6IGJvb2xlYW47XG4gICAgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcbiAgfSkge1xuICAgIHRoaXMubWV0YSA9IGZpbmRPcHRpb25zRm9yVHlwZSh0aGlzLnBhcnNlci50eXBlKTtcbiAgICB0aGlzLnBhcnNlck9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChjb25jdXJyZW5jeSkgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgIGlmICh0aGlzLmRlZmF1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVzZXJpYWxpemUodGhpcy5kZWZhdWx0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlzS2V5KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5pc0tleSgpO1xuICB9XG5cbiAgaGFzUmVmZXJlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5oYXNSZWZlcmVudGlhbHMoKTtcbiAgfVxuXG4gIGdldCByZWZlcmVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnJlZmVyZW50aWFscztcbiAgfVxuXG4gIGlzU3RydWN0dXJlZFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmlzU3RydWN0dXJlZFR5cGUoKTtcbiAgfVxuXG4gIHN0cnVjdHVyZWQoKSB7XG4gICAgbGV0IHN0cnVjdHVyZWRUeXBlID0gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxGPihcbiAgICAgIHRoaXMucGFyc2VyLnR5cGVcbiAgICApO1xuICAgIC8vVGhyb3cgZXJyb3IgaWYgbm90IGZvdW5kXG4gICAgaWYgKCFzdHJ1Y3R1cmVkVHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3RydWN0dXJlZCB0eXBlIGZvciAke3RoaXMucGFyc2VyLnR5cGV9YCk7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRUeXBlO1xuICB9XG5cbiAgaXNFbnVtVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaXNFbnVtVHlwZSgpO1xuICB9XG5cbiAgZW51bSgpIHtcbiAgICBsZXQgZW51bVR5cGUgPSB0aGlzLmFwaS5maW5kRW51bVR5cGVGb3JUeXBlPEY+KHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIC8vVGhyb3cgZXJyb3IgaWYgbm90IGZvdW5kXG4gICAgaWYgKCFlbnVtVHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgZW51bSB0eXBlIGZvciAke3RoaXMucGFyc2VyLnR5cGV9YCk7XG4gICAgcmV0dXJuIGVudW1UeXBlO1xuICB9XG5cbiAgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICB7XG4gICAgICBtZXRob2QsXG4gICAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgICAgbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICF2YWx1ZS5pc1ZhbGlkKHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pID8gdmFsdWUuX2Vycm9ycyA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAubW9kZWxzKClcbiAgICAgICAgLnNvbWUoKG06IE9EYXRhTW9kZWw8YW55PikgPT4gIW0uaXNWYWxpZCh7IG1ldGhvZCwgbmF2aWdhdGlvbiB9KSlcbiAgICAgICAgPyB2YWx1ZS5tb2RlbHMoKS5tYXAoKG06IE9EYXRhTW9kZWw8YW55PikgPT4gbS5fZXJyb3JzKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcHV0ZWQgPSB0aGlzLmFubm90YXRlZFZhbHVlPGJvb2xlYW4+KENPTVBVVEVEKTtcbiAgICAgIGxldCBlcnJvcnMgPSB0aGlzLnBhcnNlcj8udmFsaWRhdGUodmFsdWUsIHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pIHx8IFtdO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnJlcXVpcmVkICYmXG4gICAgICAgICh2YWx1ZSA9PT0gbnVsbCB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBtZXRob2QgIT09ICdtb2RpZnknKSkgJiYgLy8gSXMgbnVsbCBvciB1bmRlZmluZWQgd2l0aG91dCBwYXRjaD9cbiAgICAgICAgIShjb21wdXRlZCAmJiBtZXRob2QgPT09ICdjcmVhdGUnKSAvLyBOb3QgKElzIENvbXB1dGVkIGZpZWxkIGFuZCBjcmVhdGUpID9cbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgcmVxdWlyZWRgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgZXJyb3JzWydwdXNoJ10oYG1heGxlbmd0aGApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoIDwgdGhpcy5taW5MZW5ndGhcbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgbWlubGVuZ3RoYCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubWluICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA8IHRoaXMubWluXG4gICAgICApIHtcbiAgICAgICAgZXJyb3JzWydwdXNoJ10oYG1pbmApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm1heCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgdmFsdWUgPiB0aGlzLm1heFxuICAgICAgKSB7XG4gICAgICAgIGVycm9yc1sncHVzaCddKGBtYXhgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5wYXR0ZXJuICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAhdGhpcy5wYXR0ZXJuLnRlc3QodmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3JzWydwdXNoJ10oYHBhdHRlcm5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eShlcnJvcnMpID8gZXJyb3JzIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGRlZmF1bHRzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdHJ1Y3R1cmVkVHlwZSgpICYmIHRoaXMubWV0YSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMubWV0YS5kZWZhdWx0cygpXG4gICAgICA6IHRoaXMuZGVmYXVsdDtcbiAgfVxuXG4gIGRlc2VyaWFsaXplKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKTogRiB7XG4gICAgY29uc3QgcGFyc2VyT3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5wYXJzZXJPcHRpb25zO1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5kZXNlcmlhbGl6ZSh2YWx1ZSwgcGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICBzZXJpYWxpemUodmFsdWU6IEYsIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCBwYXJzZXJPcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLnBhcnNlck9wdGlvbnM7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnNlcmlhbGl6ZSh2YWx1ZSwgcGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICBlbmNvZGUodmFsdWU6IEYsIG9wdGlvbnM/OiBQYXJzZXJPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCBwYXJzZXJPcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLnBhcnNlck9wdGlvbnM7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmVuY29kZSh2YWx1ZSwgcGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICByZXNvdXJjZUZhY3Rvcnk8VCwgRj4oXG4gICAgYmFzZTogT0RhdGFSZXNvdXJjZTxUPlxuICApOiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPEY+IHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPEY+IHtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICBiYXNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSB8fFxuICAgICAgICBiYXNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSB8fFxuICAgICAgICBiYXNlIGluc3RhbmNlb2YgT0RhdGFQcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgYnVpbGQgcmVzb3VyY2UgZm9yIG5vbiBjb21wYXRpYmxlIGJhc2UgdHlwZVwiKTtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uXG4gICAgICA/IChiYXNlIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD4pLm5hdmlnYXRpb25Qcm9wZXJ0eTxGPih0aGlzLnBhcnNlci5uYW1lKVxuICAgICAgOiAoYmFzZSBhcyBPRGF0YUVudGl0eVJlc291cmNlPFQ+KS5wcm9wZXJ0eTxGPih0aGlzLnBhcnNlci5uYW1lKTtcbiAgfVxuXG4gIGFubm90YXRpb25zRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YUVudGl0eUFubm90YXRpb25zPFQ+XG4gICk6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8Rj4gfCBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8Rj4ge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5jb2xsZWN0aW9uXG4gICAgICA/IGJhc2UucHJvcGVydHkodGhpcy5wYXJzZXIubmFtZSBhcyBrZXlvZiBULCAnY29sbGVjdGlvbicpXG4gICAgICA6IGJhc2UucHJvcGVydHkodGhpcy5wYXJzZXIubmFtZSBhcyBrZXlvZiBULCAnc2luZ2xlJyk7XG4gIH1cblxuICBzY2hlbWFGYWN0b3J5PFQsIEY+KFxuICAgIGJhc2U6IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgKTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxGPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGUodGhpcy5wYXJzZXIudHlwZSk7XG4gIH1cblxuICBtb2RlbEZhY3Rvcnk8Rj4oe1xuICAgIHBhcmVudCxcbiAgICB2YWx1ZSxcbiAgICByZXNldCxcbiAgfToge1xuICAgIHBhcmVudDogT0RhdGFNb2RlbDxhbnk+O1xuICAgIHZhbHVlPzogUGFydGlhbDxGPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgfSk6IE9EYXRhTW9kZWw8Rj4ge1xuICAgIC8vIE1vZGVsXG4gICAgY29uc3QgYW5ub3RzID0gdGhpcy5hbm5vdGF0aW9uc0ZhY3RvcnkoXG4gICAgICBwYXJlbnQuYW5ub3RzKClcbiAgICApIGFzIE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8Rj47XG4gICAgbGV0IE1vZGVsID0gdGhpcy5hcGkubW9kZWxGb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIGlmIChNb2RlbCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgTm8gTW9kZWwgdHlwZSBmb3IgJHt0aGlzLm5hbWV9YCk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFubm90cy51cGRhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChhbm5vdHM/LnR5cGUgIT09IHVuZGVmaW5lZCAmJiBNb2RlbC5tZXRhICE9PSBudWxsKSB7XG4gICAgICBsZXQgc2NoZW1hID0gTW9kZWwubWV0YS5maW5kQ2hpbGRPcHRpb25zKChvKSA9PlxuICAgICAgICBvLmlzVHlwZU9mKGFubm90cy50eXBlIGFzIHN0cmluZylcbiAgICAgICk/LnNjaGVtYTtcbiAgICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBzY2hlbWEubW9kZWwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLy8gQ2hhbmdlIHRvIGNoaWxkIG1vZGVsXG4gICAgICAgIE1vZGVsID0gc2NoZW1hLm1vZGVsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTW9kZWwoKHZhbHVlIHx8IHt9KSBhcyBQYXJ0aWFsPEY+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sIHtcbiAgICAgIGFubm90cyxcbiAgICAgIHJlc2V0LFxuICAgICAgcGFyZW50OiBbcGFyZW50LCB0aGlzXSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbGxlY3Rpb25GYWN0b3J5PEY+KHtcbiAgICBwYXJlbnQsXG4gICAgdmFsdWUsXG4gICAgcmVzZXQsXG4gIH06IHtcbiAgICBwYXJlbnQ6IE9EYXRhTW9kZWw8YW55PjtcbiAgICB2YWx1ZT86IFBhcnRpYWw8Rj5bXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W107XG4gICAgcmVzZXQ/OiBib29sZWFuO1xuICB9KTogT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+IHtcbiAgICAvLyBDb2xsZWN0aW9uIEZhY3RvcnlcbiAgICBjb25zdCBhbm5vdHMgPSB0aGlzLmFubm90YXRpb25zRmFjdG9yeShcbiAgICAgIHBhcmVudC5hbm5vdHMoKVxuICAgICkgYXMgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPEY+O1xuICAgIGNvbnN0IENvbGxlY3Rpb24gPSB0aGlzLmFwaS5jb2xsZWN0aW9uRm9yVHlwZSh0aGlzLnBhcnNlci50eXBlKTtcbiAgICBpZiAoQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgRXJyb3IoYE5vIENvbGxlY3Rpb24gdHlwZSBmb3IgJHt0aGlzLm5hbWV9YCk7XG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKFxuICAgICAgKHZhbHVlIHx8IFtdKSBhcyBQYXJ0aWFsPEY+W10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLFxuICAgICAge1xuICAgICAgICBhbm5vdHM6IGFubm90cyxcbiAgICAgICAgcmVzZXQsXG4gICAgICAgIHBhcmVudDogW3BhcmVudCwgdGhpc10sXG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbEF0dHJpYnV0ZTxUPiB7XG4gIHByaXZhdGUgdmFsdWU/OiBUIHwgT0RhdGFNb2RlbDxUPiB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PiB8IG51bGw7XG4gIHByaXZhdGUgY2hhbmdlPzogVCB8IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj4gfCBudWxsO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgZXZlbnRzJCA9IG5ldyBFdmVudEVtaXR0ZXI8T0RhdGFNb2RlbEV2ZW50PFQ+PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX21vZGVsOiBPRGF0YU1vZGVsPGFueT4sXG4gICAgcHJpdmF0ZSBfZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxUPlxuICApIHt9XG5cbiAgZ2V0IG5hdmlnYXRpb24oKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZmllbGQubmF2aWdhdGlvbik7XG4gIH1cblxuICBnZXQgY29tcHV0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkLmFubm90YXRlZFZhbHVlPGJvb2xlYW4+KENPTVBVVEVEKTtcbiAgfVxuXG4gIGdldCBjb25jdXJyZW5jeSgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maWVsZC5jb25jdXJyZW5jeSk7XG4gIH1cblxuICBnZXQgcmVmZXJlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZC5yZWZlcmVudGlhbHM7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGQub3B0aW9ucztcbiAgfVxuXG4gIGdldCBtZXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZC5tZXRhO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkLm5hbWU7XG4gIH1cblxuICBnZXQgZmllbGROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZC5maWVsZDtcbiAgfVxuXG4gIGdldCgpOlxuICAgIHwgVFxuICAgIHwgT0RhdGFNb2RlbDxUPlxuICAgIHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5jaGFuZ2UgOiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgc2V0KFxuICAgIHZhbHVlOlxuICAgICAgfCBUXG4gICAgICB8IE9EYXRhTW9kZWw8VD5cbiAgICAgIHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+XG4gICAgICB8IG51bGxcbiAgICAgIHwgdW5kZWZpbmVkLFxuICAgIHJlc2V0OiBib29sZWFuID0gZmFsc2UsXG4gICAgcmVwYXJlbnQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXQoKTtcblxuICAgIGlmIChcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwoY3VycmVudCkgfHxcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihjdXJyZW50KVxuICAgIClcbiAgICAgIHRoaXMudW5saW5rKFxuICAgICAgICBjdXJyZW50IGFzIE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj5cbiAgICAgICAgLy90aGlzLnZhbHVlICE9PSBjdXJyZW50XG4gICAgICApO1xuXG4gICAgY29uc3QgY2hhbmdlZCA9XG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGN1cnJlbnQpICYmIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpXG4gICAgICAgID8gIShjdXJyZW50IGFzIE9EYXRhTW9kZWw8VD4pLmVxdWFscyh2YWx1ZSBhcyBPRGF0YU1vZGVsPFQ+KVxuICAgICAgICA6IE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihjdXJyZW50KSAmJlxuICAgICAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih2YWx1ZSlcbiAgICAgICAgPyAhKGN1cnJlbnQgYXMgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+KS5lcXVhbHMoXG4gICAgICAgICAgICB2YWx1ZSBhcyBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj5cbiAgICAgICAgICApXG4gICAgICAgIDogIVR5cGVzLmlzRXF1YWwoY3VycmVudCwgdmFsdWUpO1xuICAgIGlmIChyZXNldCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChUeXBlcy5pc0VxdWFsKHZhbHVlLCB0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy5jaGFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLmNoYW5nZSA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSB8fFxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5saW5rKFxuICAgICAgICB2YWx1ZSBhcyBPRGF0YU1vZGVsPFQ+IHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+LFxuICAgICAgICByZXBhcmVudFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG4gIH1cblxuICBpc0NoYW5nZWQoe1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbiA9IGZhbHNlLFxuICB9OiB7IGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW4gfSA9IHt9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0KCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2hhbmdlICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICgoT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbChjdXJyZW50KSB8fFxuICAgICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24oY3VycmVudCkpICYmXG4gICAgICAgIChcbiAgICAgICAgICBjdXJyZW50IGFzIE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj5cbiAgICAgICAgKS5oYXNDaGFuZ2VkKHsgaW5jbHVkZV9uYXZpZ2F0aW9uIH0pKVxuICAgICk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICBpZiAoXG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHRoaXMuY2hhbmdlKSB8fFxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHRoaXMuY2hhbmdlKVxuICAgIClcbiAgICAgIHRoaXMudW5saW5rKFxuICAgICAgICB0aGlzLmNoYW5nZSBhcyBPRGF0YU1vZGVsPFQ+IHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+XG4gICAgICApO1xuICAgIHRoaXMuY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodGhpcy52YWx1ZSkgfHxcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih0aGlzLnZhbHVlKVxuICAgIClcbiAgICAgIHRoaXMubGluayhcbiAgICAgICAgdGhpcy52YWx1ZSBhcyBPRGF0YU1vZGVsPFQ+IHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsaW5rKFxuICAgIHZhbHVlOiBPRGF0YU1vZGVsPFQ+IHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+LFxuICAgIHJlcGFyZW50OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB2YWx1ZS5ldmVudHMkLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5ldmVudHMkLmVtaXQoZSkpO1xuICAgIGlmIChyZXBhcmVudCkge1xuICAgICAgdmFsdWUuX3BhcmVudCA9IFt0aGlzLl9tb2RlbCwgdGhpcy5fZmllbGRdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5saW5rKFxuICAgIHZhbHVlOiBPRGF0YU1vZGVsPFQ+IHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+LFxuICAgIHJlcGFyZW50OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJlcGFyZW50KSB7XG4gICAgICB2YWx1ZS5fcGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbEVudHJ5PFQsIE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PiA9IHtcbiAgc3RhdGU6IE9EYXRhTW9kZWxTdGF0ZTtcbiAgbW9kZWw6IE07XG4gIGtleT86IEVudGl0eUtleTxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG59O1xuXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbE9wdGlvbnM8VD4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNpZDogc3RyaW5nO1xuICBiYXNlPzogc3RyaW5nO1xuICBvcGVuPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmllbGRzOiBPRGF0YU1vZGVsRmllbGQ8YW55PltdID0gW107XG4gIHNjaGVtYTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPjtcbiAgZW50aXR5U2V0PzogT0RhdGFFbnRpdHlTZXQ7XG4gIC8vIEhpZXJhcmNoeVxuICBwYXJlbnQ/OiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICBjaGlsZHJlbjogT0RhdGFNb2RlbE9wdGlvbnM8YW55PltdID0gW107XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIG9wdGlvbnMsXG4gICAgc2NoZW1hLFxuICB9OiB7XG4gICAgb3B0aW9uczogTW9kZWxPcHRpb25zO1xuICAgIHNjaGVtYTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPjtcbiAgfSkge1xuICAgIHRoaXMubmFtZSA9IHNjaGVtYS5uYW1lO1xuICAgIHRoaXMuYmFzZSA9IHNjaGVtYS5iYXNlO1xuICAgIHRoaXMub3BlbiA9IHNjaGVtYS5vcGVuO1xuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMuY2lkID0gb3B0aW9ucz8uY2lkIHx8IENJRF9GSUVMRF9OQU1FO1xuICAgIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuZmllbGRzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9uc10pID0+XG4gICAgICB0aGlzLmFkZEZpZWxkPGFueT4obmFtZSwgb3B0aW9ucylcbiAgICApO1xuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEuYXBpO1xuICB9XG5cbiAgdHlwZSh7IGFsaWFzID0gZmFsc2UgfTogeyBhbGlhcz86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGUoeyBhbGlhcyB9KTtcbiAgfVxuXG4gIGlzT3BlblR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLmlzT3BlblR5cGUoKTtcbiAgfVxuXG4gIGlzVHlwZU9mKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS5pc1R5cGVPZih0eXBlKTtcbiAgfVxuXG4gIGlzTW9kZWxGb3IoZW50aXR5OiBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICAvLyBSZXNvbHZlIEJ5IFR5cGVcbiAgICBsZXQgdHlwZSA9IHRoaXMuYXBpLm9wdGlvbnMuaGVscGVyLnR5cGUoZW50aXR5IGFzIHsgW25hbWU6IHN0cmluZ106IGFueSB9KTtcbiAgICBpZiAodHlwZSAmJiB0aGlzLmlzVHlwZU9mKHR5cGUpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBSZXNvbHZlIEJ5IGZpZWxkc1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoZW50aXR5IGFzIHsgW25hbWU6IHN0cmluZ106IGFueSB9KTtcbiAgICBsZXQgbmFtZXMgPSB0aGlzLmZpZWxkcyh7XG4gICAgICBpbmNsdWRlX25hdmlnYXRpb246IHRydWUsXG4gICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgfSkubWFwKChmKSA9PiBmLm5hbWUpO1xuICAgIHJldHVybiBrZXlzLmV2ZXJ5KChrZXkpID0+IG5hbWVzLmluY2x1ZGVzKGtleSkpO1xuICB9XG5cbiAgZmluZENoaWxkT3B0aW9ucyhcbiAgICBwcmVkaWNhdGU6IChvcHRpb25zOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+KSA9PiBib29sZWFuXG4gICk6IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGlmIChwcmVkaWNhdGUodGhpcykpIHJldHVybiB0aGlzO1xuICAgIGxldCBtYXRjaDogT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBjaCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBtYXRjaCA9IGNoLmZpbmRDaGlsZE9wdGlvbnMocHJlZGljYXRlKTtcbiAgICAgIGlmIChtYXRjaCAhPT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uZmlndXJlKHtcbiAgICBvcHRpb25zLFxuICAgIHBhcnNlckZvclR5cGUsXG4gICAgZmluZE9wdGlvbnNGb3JUeXBlLFxuICB9OiB7XG4gICAgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcbiAgICBwYXJzZXJGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiBQYXJzZXI8YW55PjtcbiAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ7XG4gIH0pIHtcbiAgICBpZiAodGhpcy5iYXNlKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBmaW5kT3B0aW9uc0ZvclR5cGUodGhpcy5iYXNlKSBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2godGhpcyk7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdGhpcy5lbnRpdHlTZXQgPSB0aGlzLmFwaS5maW5kRW50aXR5U2V0Rm9yRW50aXR5VHlwZSh0aGlzLnR5cGUoKSk7XG4gICAgbGV0IGNvbmN1cnJlbmN5RmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLmVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25jdXJyZW5jeUZpZWxkcyA9XG4gICAgICAgIHRoaXMuZW50aXR5U2V0LmFubm90YXRlZFZhbHVlPHN0cmluZ1tdPihPUFRJTUlTVElDX0NPTkNVUlJFTkNZKSB8fCBbXTtcbiAgICB9XG4gICAgdGhpcy5fZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBsZXQgY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeUZpZWxkcy5pbmRleE9mKGZpZWxkLmZpZWxkKSAhPT0gLTE7XG4gICAgICBmaWVsZC5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGUsXG4gICAgICAgIGNvbmN1cnJlbmN5LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmaWVsZHMoe1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbixcbiAgICBpbmNsdWRlX3BhcmVudHMsXG4gIH06IHtcbiAgICBpbmNsdWRlX3BhcmVudHM6IGJvb2xlYW47XG4gICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiBib29sZWFuO1xuICB9KTogT0RhdGFNb2RlbEZpZWxkPGFueT5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLihpbmNsdWRlX3BhcmVudHMgJiYgdGhpcy5wYXJlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMucGFyZW50LmZpZWxkcyh7IGluY2x1ZGVfbmF2aWdhdGlvbiwgaW5jbHVkZV9wYXJlbnRzIH0pXG4gICAgICAgIDogW10pLFxuICAgICAgLi4udGhpcy5fZmllbGRzLmZpbHRlcihcbiAgICAgICAgKGZpZWxkKSA9PiBpbmNsdWRlX25hdmlnYXRpb24gfHwgIWZpZWxkLm5hdmlnYXRpb25cbiAgICAgICksXG4gICAgXTtcbiAgfVxuXG4gIGZpZWxkPEY+KG5hbWU6IGtleW9mIFQgfCBzdHJpbmcpIHtcbiAgICBsZXQgZmllbGQgPSB0aGlzLmZpbmRGaWVsZDxGPihuYW1lKTtcbiAgICAvL1Rocm93IGVycm9yIGlmIG5vdCBmb3VuZFxuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWVsZCB3aXRoIG5hbWUgJHtuYW1lIGFzIHN0cmluZ31gKTtcbiAgICByZXR1cm4gZmllbGQgYXMgT0RhdGFNb2RlbEZpZWxkPEY+O1xuICB9XG5cbiAgZmluZEZpZWxkPEY+KG5hbWU6IGtleW9mIFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZHMoe1xuICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICAgIH0pLmZpbmQoXG4gICAgICAobW9kZWxGaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+KSA9PlxuICAgICAgICBtb2RlbEZpZWxkLm5hbWUgPT09IG5hbWUgfHwgbW9kZWxGaWVsZC5maWVsZCA9PT0gbmFtZVxuICAgICkgYXMgT0RhdGFNb2RlbEZpZWxkPEY+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYWRkRmllbGQ8Rj4obmFtZTogc3RyaW5nLCBvcHRpb25zOiBNb2RlbEZpZWxkT3B0aW9ucykge1xuICAgIGNvbnN0IHsgZmllbGQsIHBhcnNlciwgLi4ub3B0cyB9ID0gb3B0aW9ucztcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIFByb3BlcnRpZXMgbmVlZCBuYW1lIGFuZCBmaWVsZCcpO1xuICAgIGNvbnN0IGZpZWxkUGFyc2VyID0gcGFyc2VyID8/IHRoaXMuc2NoZW1hLmZpZWxkPEY+KGZpZWxkIGFzIGtleW9mIFQpO1xuICAgIGlmIChmaWVsZFBhcnNlciA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBwYXJzZXIgZm9yICR7ZmllbGR9IHdpdGggbmFtZSA9ICR7bmFtZX1gKTtcbiAgICBjb25zdCBtb2RlbEZpZWxkID0gbmV3IE9EYXRhTW9kZWxGaWVsZDxGPih0aGlzLCB7XG4gICAgICBuYW1lLFxuICAgICAgZmllbGQsXG4gICAgICBwYXJzZXI6IGZpZWxkUGFyc2VyLFxuICAgICAgLi4ub3B0cyxcbiAgICB9KTtcbiAgICB0aGlzLl9maWVsZHMucHVzaChtb2RlbEZpZWxkKTtcbiAgICByZXR1cm4gbW9kZWxGaWVsZDtcbiAgfVxuXG4gIHRzVG9FZG06IFJlY29yZDxzdHJpbmcsIEVkbVR5cGU+ID0ge1xuICAgIHN0cmluZzogRWRtVHlwZS5TdHJpbmcsXG4gICAgbnVtYmVyOiBFZG1UeXBlLkludDMyLFxuICAgIGJpZ2ludDogRWRtVHlwZS5JbnQ2NCxcbiAgICBib29sZWFuOiBFZG1UeXBlLkJvb2xlYW4sXG4gIH07XG4gIHByaXZhdGUgbW9kZWxGaWVsZEZhY3Rvcnk8Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nIHwgRWRtVHlwZVxuICApIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmVkRmllbGRQYXJzZXIgPSB0aGlzLnNjaGVtYS5hZGRGaWVsZDxGPihuYW1lLCB7IHR5cGUgfSk7XG4gICAgc3RydWN0dXJlZEZpZWxkUGFyc2VyLmNvbmZpZ3VyZSh7XG4gICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuYXBpLmZpbmRPcHRpb25zRm9yVHlwZSh0eXBlKSxcbiAgICAgIHBhcnNlckZvclR5cGU6ICh0eXBlOiBzdHJpbmcgfCBFZG1UeXBlKSA9PiB0aGlzLmFwaS5wYXJzZXJGb3JUeXBlKHR5cGUpLFxuICAgICAgb3B0aW9uczogdGhpcy5hcGkub3B0aW9ucyxcbiAgICB9KTtcbiAgICBjb25zdCBtb2RlbEZpZWxkID0gdGhpcy5hZGRGaWVsZDxGPihuYW1lLCB7XG4gICAgICBmaWVsZDogbmFtZSxcbiAgICAgIHBhcnNlcjogc3RydWN0dXJlZEZpZWxkUGFyc2VyLFxuICAgIH0pO1xuICAgIG1vZGVsRmllbGQuY29uZmlndXJlKHtcbiAgICAgIGZpbmRPcHRpb25zRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gdGhpcy5hcGkuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgb3B0aW9uczogdGhpcy5hcGkub3B0aW9ucyxcbiAgICAgIGNvbmN1cnJlbmN5OiBmYWxzZSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgbW9kZWxGaWVsZC5uYW1lLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6ICgpID0+IHRoaXMuZ2V0KHNlbGYsIG1vZGVsRmllbGQgYXMgT0RhdGFNb2RlbEZpZWxkPGFueT4pLFxuICAgICAgc2V0OiAodmFsdWU6IGFueSkgPT5cbiAgICAgICAgdGhpcy5zZXQoc2VsZiwgbW9kZWxGaWVsZCBhcyBPRGF0YU1vZGVsRmllbGQ8YW55PiwgdmFsdWUpLFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbEZpZWxkO1xuICB9XG5cbiAgYXR0YWNoKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgcmVzb3VyY2U6XG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPlxuICApIHtcbiAgICBpZiAoXG4gICAgICBzZWxmLl9yZXNvdXJjZSAhPT0gbnVsbCAmJlxuICAgICAgcmVzb3VyY2UudHlwZSgpICE9PSBzZWxmLl9yZXNvdXJjZS50eXBlKCkgJiZcbiAgICAgICFzZWxmLl9yZXNvdXJjZS5pc1N1YnR5cGVPZihyZXNvdXJjZSlcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW4ndCBhdHRhY2ggJHtyZXNvdXJjZS50eXBlKCl9IHRvICR7c2VsZi5fcmVzb3VyY2UudHlwZSgpfWBcbiAgICAgICk7XG5cbiAgICBjb25zdCBjdXJyZW50ID0gc2VsZi5fcmVzb3VyY2U7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgIWN1cnJlbnQuaXNFcXVhbFRvKHJlc291cmNlKSkge1xuICAgICAgc2VsZi5fcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KE9EYXRhTW9kZWxFdmVudFR5cGUuQXR0YWNoLCB7XG4gICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgcHJldmlvdXM6IGN1cnJlbnQsXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyMgcmVnaW9uIFJlc291cmNlXG4gIHN0YXRpYyBjaGFpbihcbiAgICBjaGlsZDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PlxuICApOiBbXG4gICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgXVtdIHtcbiAgICBjb25zdCBjaGFpbiA9IFtdIGFzIGFueVtdO1xuICAgIGxldCB0dXBsZTpcbiAgICAgIHwgW1xuICAgICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICAgIF1cbiAgICAgIHwgbnVsbCA9IFtjaGlsZCwgbnVsbF07XG4gICAgd2hpbGUgKHR1cGxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0dXBsZSBhcyBbXG4gICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgIE9EYXRhTW9kZWxGaWVsZDxhbnk+IHwgbnVsbFxuICAgICAgXTtcbiAgICAgIGlmIChjaGFpbi5zb21lKChwKSA9PiBwWzBdID09PSBwYXJlbnRbMF0pKSBicmVhaztcbiAgICAgIGNoYWluLnNwbGljZSgwLCAwLCBwYXJlbnQpO1xuICAgICAgdHVwbGUgPSB0dXBsZVswXS5fcGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gY2hhaW47XG4gIH1cblxuICBzdGF0aWMgcmVzb3VyY2U8VD4oXG4gICAgY2hpbGQ6IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj5cbiAgKTogT0RhdGFSZXNvdXJjZTxUPiB7XG4gICAgbGV0IHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcHJldkZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGwgPSBudWxsO1xuICAgIGZvciAobGV0IFttb2RlbCwgZmllbGRdIG9mIE9EYXRhTW9kZWxPcHRpb25zLmNoYWluKGNoaWxkKSkge1xuICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCAobW9kZWwuX3Jlc291cmNlIGFzIE9EYXRhUmVzb3VyY2U8VD4pO1xuICAgICAgaWYgKHJlc291cmNlID09PSBudWxsKSBicmVhaztcbiAgICAgIGlmIChcbiAgICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbChtb2RlbCkgJiZcbiAgICAgICAgKHByZXZGaWVsZCA9PT0gbnVsbCB8fCBwcmV2RmllbGQuY29sbGVjdGlvbilcbiAgICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIGtleVxuICAgICAgICBsZXQgbW9kZWxLZXkgPSAobW9kZWwgYXMgT0RhdGFNb2RlbDxhbnk+KS5rZXkoe1xuICAgICAgICAgIGZpZWxkX21hcHBpbmc6IHRydWUsXG4gICAgICAgIH0pIGFzIEVudGl0eUtleTxhbnk+O1xuICAgICAgICBpZiAobW9kZWxLZXkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICByZXNvdXJjZSA9XG4gICAgICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5U2V0UmVzb3VyY2VcbiAgICAgICAgICAgICAgPyByZXNvdXJjZS5lbnRpdHkobW9kZWxLZXkpXG4gICAgICAgICAgICAgIDogKHJlc291cmNlIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD4pLmtleShtb2RlbEtleSk7XG4gICAgICB9XG4gICAgICBwcmV2RmllbGQgPSBmaWVsZDtcbiAgICAgIGlmIChmaWVsZCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBBcHBseSB0aGUgcXVlcnkgZnJvbSBtb2RlbCB0byBuZXcgcmVzb3VyY2VcbiAgICAgICAgY29uc3QgcXVlcnkgPSBtb2RlbC5fcmVzb3VyY2U/LmNsb25lUXVlcnk8VD4oKS50b1F1ZXJ5QXJndW1lbnRzKCk7XG4gICAgICAgIGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSByZXNvdXJjZS5xdWVyeSgocSkgPT4gcS5hcHBseShxdWVyeSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc291cmNlID0gZmllbGQucmVzb3VyY2VGYWN0b3J5PGFueSwgYW55PihyZXNvdXJjZSk7XG4gICAgfVxuICAgIGlmIChyZXNvdXJjZSA9PT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVzb3VyY2U6IENhbid0IGJ1aWxkIHJlc291cmNlIGZvciAke2NoaWxkfWApO1xuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoXG4gICAgcXVlcnk/OiBPRGF0YVF1ZXJ5T3B0aW9uczxUPlxuICApOlxuICAgIHwgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmVudGl0eVNldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBPRGF0YUVudGl0eVNldFJlc291cmNlLmZhY3Rvcnk8VD4odGhpcy5hcGksIHtcbiAgICAgIHBhdGg6IHRoaXMuZW50aXR5U2V0Lm5hbWUsXG4gICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgcXVlcnksXG4gICAgfSk7XG4gIH1cblxuICBtb2RlbFJlc291cmNlRmFjdG9yeShcbiAgICBxdWVyeT86IE9EYXRhUXVlcnlPcHRpb25zPFQ+XG4gICk6XG4gICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD5cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkocXVlcnkpO1xuICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UpIHJldHVybiByZXNvdXJjZS5lbnRpdHkoKTtcbiAgICByZXR1cm4gcmVzb3VyY2UgYXNcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVudGl0eVJlc291cmNlKHNlbGY6IE9EYXRhTW9kZWw8VD4pOiBPRGF0YVJlc291cmNlPFQ+IHtcbiAgICBsZXQgcmVzb3VyY2UgPSB0aGlzLm1vZGVsUmVzb3VyY2VGYWN0b3J5KFxuICAgICAgc2VsZi5fcmVzb3VyY2UgIT09IG51bGwgPyBzZWxmLl9yZXNvdXJjZS5jbG9uZVF1ZXJ5KCkgOiB1bmRlZmluZWRcbiAgICApO1xuICAgIGlmIChyZXNvdXJjZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBlbnRpdHlSZXNvdXJjZTogQ2FuJ3QgYnVpbGQgcmVzb3VyY2UgZm9yICR7c2VsZn1gKTtcbiAgICBjb25zdCBrZXkgPSBzZWxmLmtleSh7IGZpZWxkX21hcHBpbmc6IHRydWUgfSkgYXMgRW50aXR5S2V5PFQ+O1xuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc291cmNlLmtleShrZXkpO1xuICAgIHJldHVybiByZXNvdXJjZSBhcyBPRGF0YVJlc291cmNlPFQ+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGJpbmQoXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICB7XG4gICAgICBwYXJlbnQsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGFubm90cyxcbiAgICB9OiB7XG4gICAgICBwYXJlbnQ/OiBbXG4gICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgIE9EYXRhTW9kZWxGaWVsZDxhbnk+IHwgbnVsbFxuICAgICAgXTtcbiAgICAgIHJlc291cmNlPzogT0RhdGFSZXNvdXJjZTxUPjtcbiAgICAgIGFubm90cz86IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8VD47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFBhcmVudFxuICAgIGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VsZi5fcGFyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIC8vIFJlc291cmNlXG4gICAgaWYgKHNlbGYuX3BhcmVudCA9PT0gbnVsbCAmJiByZXNvdXJjZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmVzb3VyY2UgPSB0aGlzLm1vZGVsUmVzb3VyY2VGYWN0b3J5KCk7XG4gICAgaWYgKHJlc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYXR0YWNoKFxuICAgICAgICBzZWxmLFxuICAgICAgICByZXNvdXJjZSBhc1xuICAgICAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgICAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFubm90YXRpb25zXG4gICAgc2VsZi5fYW5ub3RhdGlvbnMgPVxuICAgICAgYW5ub3RzIHx8IG5ldyBPRGF0YUVudGl0eUFubm90YXRpb25zKE9EYXRhSGVscGVyW0RFRkFVTFRfVkVSU0lPTl0pO1xuXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5maWVsZHMoe1xuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgIH0pO1xuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIGZpZWxkLm5hbWUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMuZ2V0KHNlbGYsIGZpZWxkIGFzIE9EYXRhTW9kZWxGaWVsZDxhbnk+KSxcbiAgICAgICAgc2V0OiAodmFsdWU6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLnNldChzZWxmLCBmaWVsZCBhcyBPRGF0YU1vZGVsRmllbGQ8YW55PiwgdmFsdWUpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcXVlcnkoXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICByZXNvdXJjZTpcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+LFxuICAgIGZ1bmM6IChxOiBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4sIHM/OiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+KSA9PiB2b2lkXG4gICkge1xuICAgIHJlc291cmNlLnF1ZXJ5KGZ1bmMpO1xuICAgIHRoaXMuYXR0YWNoKHNlbGYsIHJlc291cmNlKTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIHJlc29sdmVLZXkoXG4gICAgdmFsdWU6IE9EYXRhTW9kZWw8VD4gfCBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAge1xuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgICAgcmVzb2x2ZSA9IHRydWUsXG4gICAgICBzaW5nbGUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuOyBzaW5nbGU/OiBib29sZWFuIH0gPSB7fVxuICApOiBFbnRpdHlLZXk8VD4gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5VHlwZXMgPSB0aGlzLnNjaGVtYS5rZXlzKHsgaW5jbHVkZV9wYXJlbnRzOiB0cnVlIH0pO1xuICAgIGNvbnN0IGtleSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgZm9yIChsZXQga3Qgb2Yga2V5VHlwZXMpIHtcbiAgICAgIGxldCB2ID0gdmFsdWUgYXMgYW55O1xuICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzIGFzIE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gICAgICBsZXQgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+IHwgdW5kZWZpbmVkO1xuICAgICAgZm9yIChsZXQgbmFtZSBvZiBrdC5uYW1lLnNwbGl0KCcvJykpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICAgIGZpZWxkID0gb3B0aW9uc1xuICAgICAgICAgIC5maWVsZHMoeyBpbmNsdWRlX25hdmlnYXRpb246IGZhbHNlLCBpbmNsdWRlX3BhcmVudHM6IHRydWUgfSlcbiAgICAgICAgICAuZmluZCgoZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+KSA9PiBmaWVsZC5maWVsZCA9PT0gbmFtZSk7XG4gICAgICAgIGlmIChmaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdiA9XG4gICAgICAgICAgICBUeXBlcy5pc1BsYWluT2JqZWN0KHYpIHx8IE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodilcbiAgICAgICAgICAgICAgPyB2W2ZpZWxkLm5hbWVdXG4gICAgICAgICAgICAgIDogdjtcbiAgICAgICAgICBvcHRpb25zID0gZmllbGQubWV0YSBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGxldCBuYW1lID0gZmllbGRfbWFwcGluZyA/IGZpZWxkLmZpZWxkIDogZmllbGQubmFtZTtcbiAgICAgIGlmIChrdC5hbGlhcyAhPT0gdW5kZWZpbmVkKSBuYW1lID0ga3QuYWxpYXM7XG4gICAgICBrZXkuc2V0KG5hbWUsIHYpO1xuICAgIH1cbiAgICBpZiAoa2V5LnNpemUgPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVcbiAgICAgID8gT2JqZWN0cy5yZXNvbHZlS2V5KGtleSwgeyBzaW5nbGUgfSlcbiAgICAgIDogT2JqZWN0LmZyb21FbnRyaWVzKGtleSk7XG4gIH1cblxuICByZXNvbHZlUmVmZXJlbnRpYWwoXG4gICAgdmFsdWU6IE9EYXRhTW9kZWw8VD4gfCBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsLFxuICAgIGF0dHI6IE9EYXRhTW9kZWxBdHRyaWJ1dGU8YW55PiB8IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgICAgc2luZ2xlID0gZmFsc2UsXG4gICAgfTogeyBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjsgcmVzb2x2ZT86IGJvb2xlYW47IHNpbmdsZT86IGJvb2xlYW4gfSA9IHt9XG4gICk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVmZXJlbnRpYWwgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIGZvciAobGV0IHJlZiBvZiBhdHRyLnJlZmVyZW50aWFscykge1xuICAgICAgbGV0IGZyb20gPSB0aGlzLmZpZWxkcyh7XG4gICAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICAgIH0pLmZpbmQoKHA6IGFueSkgPT4gcC5maWVsZCA9PT0gcmVmLnJlZmVyZW5jZWRQcm9wZXJ0eSk7XG4gICAgICBsZXQgdG8gPSBhdHRyLm9wdGlvbnNcbiAgICAgICAgLmZpZWxkcyh7IGluY2x1ZGVfbmF2aWdhdGlvbjogZmFsc2UsIGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KVxuICAgICAgICAuZmluZCgoZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+KSA9PiBmaWVsZC5maWVsZCA9PT0gcmVmLnByb3BlcnR5KTtcbiAgICAgIGlmIChmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyB0by5maWVsZCA6IHRvLm5hbWU7XG4gICAgICAgIHJlZmVyZW50aWFsLnNldChuYW1lLCB2YWx1ZSAmJiAodmFsdWUgYXMgYW55KVtmcm9tLm5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlZmVyZW50aWFsLnNpemUgPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHJlZmVyZW50aWFsLnNpemUgPT09IDEgJiYgQXJyYXkuZnJvbShyZWZlcmVudGlhbC52YWx1ZXMoKSlbMF0gPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVzb2x2ZVxuICAgICAgPyBPYmplY3RzLnJlc29sdmVLZXkocmVmZXJlbnRpYWwsIHsgc2luZ2xlIH0pXG4gICAgICA6IE9iamVjdC5mcm9tRW50cmllcyhyZWZlcmVudGlhbCk7XG4gIH1cblxuICByZXNvbHZlUmVmZXJlbmNlZChcbiAgICB2YWx1ZTogT0RhdGFNb2RlbDxUPiB8IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwsXG4gICAgYXR0cjogT0RhdGFNb2RlbEF0dHJpYnV0ZTxhbnk+IHwgT0RhdGFNb2RlbEZpZWxkPGFueT4sXG4gICAge1xuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgICAgcmVzb2x2ZSA9IHRydWUsXG4gICAgICBzaW5nbGUgPSBmYWxzZSxcbiAgICB9OiB7IGZpZWxkX21hcHBpbmc/OiBib29sZWFuOyByZXNvbHZlPzogYm9vbGVhbjsgc2luZ2xlPzogYm9vbGVhbiB9ID0ge31cbiAgKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWZlcmVuY2VkID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBmb3IgKGxldCByZWYgb2YgYXR0ci5yZWZlcmVudGlhbHMpIHtcbiAgICAgIGxldCBmcm9tID0gdGhpcy5maWVsZHMoe1xuICAgICAgICBpbmNsdWRlX25hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgICB9KS5maW5kKChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+IGZpZWxkLmZpZWxkID09PSByZWYucHJvcGVydHkpO1xuICAgICAgbGV0IHRvID0gKGF0dHIubWV0YSBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+KVxuICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9uYXZpZ2F0aW9uOiBmYWxzZSwgaW5jbHVkZV9wYXJlbnRzOiB0cnVlIH0pXG4gICAgICAgIC5maW5kKFxuICAgICAgICAgIChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+XG4gICAgICAgICAgICBmaWVsZC5maWVsZCA9PT0gcmVmLnJlZmVyZW5jZWRQcm9wZXJ0eVxuICAgICAgICApO1xuICAgICAgaWYgKGZyb20gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBuYW1lID0gZmllbGRfbWFwcGluZyA/IHRvLmZpZWxkIDogdG8ubmFtZTtcbiAgICAgICAgcmVmZXJlbmNlZC5zZXQobmFtZSwgdmFsdWUgJiYgKHZhbHVlIGFzIGFueSlbZnJvbS5uYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWZlcmVuY2VkLnNpemUgPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHJlZmVyZW5jZWQuc2l6ZSA9PT0gMSAmJiBBcnJheS5mcm9tKHJlZmVyZW5jZWQudmFsdWVzKCkpWzBdID09PSBudWxsKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlc29sdmVcbiAgICAgID8gT2JqZWN0cy5yZXNvbHZlS2V5KHJlZmVyZW5jZWQsIHsgc2luZ2xlIH0pXG4gICAgICA6IE9iamVjdC5mcm9tRW50cmllcyhyZWZlcmVuY2VkKTtcbiAgfVxuXG4gIHZhbGlkYXRlKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAge1xuICAgICAgbWV0aG9kLFxuICAgICAgbmF2aWdhdGlvbiA9IGZhbHNlLFxuICAgIH06IHtcbiAgICAgIG1ldGhvZD86ICdjcmVhdGUnIHwgJ3VwZGF0ZScgfCAnbW9kaWZ5JztcbiAgICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmdbXSB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmZpZWxkcyh7XG4gICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgICBpbmNsdWRlX25hdmlnYXRpb246IG5hdmlnYXRpb24sXG4gICAgfSkucmVkdWNlKChhY2MsIGZpZWxkKSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSAoc2VsZiBhcyBhbnkpW2ZpZWxkLm5hbWVdO1xuICAgICAgbGV0IGVycnMgPSBmaWVsZC52YWxpZGF0ZSh2YWx1ZSwgeyBtZXRob2QgfSk7XG4gICAgICByZXR1cm4gZXJycyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2ZpZWxkLm5hbWVdOiBlcnJzIH0pXG4gICAgICAgIDogYWNjO1xuICAgIH0sIHt9KTtcbiAgICByZXR1cm4gIVR5cGVzLmlzRW1wdHkoZXJyb3JzKSA/IGVycm9ycyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRlZmF1bHRzKCk6IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGVmcyA9IHRoaXMuZmllbGRzKHtcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgfSkucmVkdWNlKChhY2MsIGZpZWxkKSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBmaWVsZC5kZWZhdWx0cygpO1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKGFjYywgeyBbZmllbGQubmFtZV06IHZhbHVlIH0pXG4gICAgICAgIDogYWNjO1xuICAgIH0sIHt9KTtcbiAgICByZXR1cm4gIVR5cGVzLmlzRW1wdHkoZGVmcykgPyBkZWZzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFzQ2hhbmdlZChcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHsgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UgfTogeyBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuIH0gPSB7fVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gWy4uLnNlbGYuX2F0dHJpYnV0ZXMudmFsdWVzKCldXG4gICAgICAuZmlsdGVyKChhdHRyKSA9PiAhYXR0ci5uYXZpZ2F0aW9uIHx8IGluY2x1ZGVfbmF2aWdhdGlvbilcbiAgICAgIC5zb21lKFxuICAgICAgICAoYXR0cikgPT5cbiAgICAgICAgICAoIWluY2x1ZGVfbmF2aWdhdGlvbiB8fCBhdHRyLm5hdmlnYXRpb24pICYmXG4gICAgICAgICAgYXR0ci5pc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb24gfSlcbiAgICAgICk7XG4gIH1cblxuICBoYXNLZXkoc2VsZjogT0RhdGFNb2RlbDxUPikge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVLZXkoc2VsZikgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHdpdGhSZXNvdXJjZTxSLCBNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPj4oXG4gICAgc2VsZjogTSxcbiAgICByZXNvdXJjZTpcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+LFxuICAgIGN0eDogKG1vZGVsOiBNKSA9PiBSXG4gICk6IFIge1xuICAgIC8vIFB1c2hcbiAgICBzZWxmLnB1c2hSZXNvdXJjZShyZXNvdXJjZSk7XG4gICAgLy8gRXhlY3V0ZSBmdW5jdGlvblxuICAgIGNvbnN0IHJlc3VsdCA9IGN0eChzZWxmKTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgcmV0dXJuIChyZXN1bHQgYXMgYW55KS5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgLy8gUG9wXG4gICAgICAgICAgc2VsZi5wb3BSZXNvdXJjZSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUG9wXG4gICAgICBzZWxmLnBvcFJlc291cmNlKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBhc0VudGl0eTxSLCBNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPj4oc2VsZjogTSwgY3R4OiAobW9kZWw6IE0pID0+IFIpOiBSIHtcbiAgICAvLyBCdWlsZCBuZXcgcmVzb3VyY2VcbiAgICBjb25zdCBxdWVyeSA9IHNlbGYuX3Jlc291cmNlPy5jbG9uZVF1ZXJ5PFQ+KCk7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5tb2RlbFJlc291cmNlRmFjdG9yeShxdWVyeSk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIGRvZXMgbm90IGhhdmUgYXNzb2NpYXRlZCBFbnRpdHkgZW5kcG9pbnQnKTtcbiAgICByZXR1cm4gdGhpcy53aXRoUmVzb3VyY2Uoc2VsZiwgcmVzb3VyY2UsIGN0eCk7XG4gIH1cblxuICB0b0VudGl0eShcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHtcbiAgICAgIGNsaWVudF9pZCA9IGZhbHNlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2tleSA9IHRydWUsXG4gICAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgICAgY2hhbmdlc19vbmx5ID0gZmFsc2UsXG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICBjaGFpbiA9IFtdLFxuICAgIH06IHtcbiAgICAgIGNsaWVudF9pZD86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeT86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX2NvbXB1dGVkPzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfa2V5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkPzogYm9vbGVhbjtcbiAgICAgIGNoYW5nZXNfb25seT86IGJvb2xlYW47XG4gICAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgICAgIGNoYWluPzogKE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pW107XG4gICAgfSA9IHt9XG4gICk6IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgbGV0IGVudGl0eTogYW55ID0gWy4uLnNlbGYuX2F0dHJpYnV0ZXMudmFsdWVzKCldXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAvLyBDaGFpblxuICAgICAgICAoYXR0cikgPT4gY2hhaW4uZXZlcnkoKGMpID0+IGMgIT09IGF0dHIuZ2V0KCkpXG4gICAgICApXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAvLyBDaGFuZ2VzIG9ubHlcbiAgICAgICAgKGF0dHIpID0+XG4gICAgICAgICAgIWNoYW5nZXNfb25seSB8fFxuICAgICAgICAgIChjaGFuZ2VzX29ubHkgJiYgYXR0ci5pc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb24gfSkpXG4gICAgICApXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoYXR0cikgPT5cbiAgICAgICAgICAvLyBOYXZpZ2F0aW9uXG4gICAgICAgICAgKGluY2x1ZGVfbmF2aWdhdGlvbiAmJiBhdHRyLm5hdmlnYXRpb24gJiYgYXR0ci5nZXQoKSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAhYXR0ci5uYXZpZ2F0aW9uXG4gICAgICApXG4gICAgICAucmVkdWNlKChhY2MsIGF0dHIpID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyBhdHRyLmZpZWxkTmFtZSA6IGF0dHIubmFtZTtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBhdHRyLmdldCgpO1xuICAgICAgICBjb25zdCBjb21wdXRlZCA9IGF0dHIuY29tcHV0ZWQ7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb24gPSBhdHRyLm5hdmlnYXRpb247XG4gICAgICAgIGNvbnN0IGNvbmN1cnJlbmN5ID0gYXR0ci5jb25jdXJyZW5jeTtcbiAgICAgICAgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSAodmFsdWUgYXMgT0RhdGFNb2RlbDxhbnk+KS50b0VudGl0eSh7XG4gICAgICAgICAgICBjbGllbnRfaWQsXG4gICAgICAgICAgICBpbmNsdWRlX25hdmlnYXRpb24sXG4gICAgICAgICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5LFxuICAgICAgICAgICAgaW5jbHVkZV9jb21wdXRlZCxcbiAgICAgICAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgICAgICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgICAgICAgIGNoYW5nZXNfb25seTogY2hhbmdlc19vbmx5ICYmICEhbmF2aWdhdGlvbixcbiAgICAgICAgICAgIGluY2x1ZGVfa2V5OiBpbmNsdWRlX2tleSAmJiAhIW5hdmlnYXRpb24sXG4gICAgICAgICAgICBjaGFpbjogW3NlbGYsIC4uLmNoYWluXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSAodmFsdWUgYXMgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PikudG9FbnRpdGllcyh7XG4gICAgICAgICAgICBjbGllbnRfaWQsXG4gICAgICAgICAgICBpbmNsdWRlX25hdmlnYXRpb24sXG4gICAgICAgICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5LFxuICAgICAgICAgICAgaW5jbHVkZV9jb21wdXRlZCxcbiAgICAgICAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgICAgICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgICAgICAgIGNoYW5nZXNfb25seTogY2hhbmdlc19vbmx5ICYmICEhbmF2aWdhdGlvbixcbiAgICAgICAgICAgIGluY2x1ZGVfa2V5OiBpbmNsdWRlX2tleSAmJiAhIW5hdmlnYXRpb24sXG4gICAgICAgICAgICBjaGFpbjogW3NlbGYsIC4uLmNoYWluXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5jbHVkZV9jb25jdXJyZW5jeSAmJiBjb25jdXJyZW5jeSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGluY2x1ZGVfY29tcHV0ZWQgJiYgY29tcHV0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzX29ubHkgJiYgYXR0ci5pc0NoYW5nZWQoKSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFjaGFuZ2VzX29ubHkgJiYgIWNvbmN1cnJlbmN5ICYmICFjb21wdXRlZCkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG5cbiAgICBpZiAoaW5jbHVkZV9ub25fZmllbGQpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoZW50aXR5KTtcbiAgICAgIC8vIEF0dHJpYnV0ZXMgZnJvbSBvYmplY3QgKGF0dHJpYnV0ZXMgZm9yIG9iamVjdClcbiAgICAgIGNvbnN0IG5vbkZpZWxkQXR0cnMgPSBPYmplY3QuZW50cmllcyhzZWxmKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChba10pID0+XG4gICAgICAgICAgICBuYW1lcy5pbmRleE9mKGspID09PSAtMSAmJiAhay5zdGFydHNXaXRoKCdfJykgJiYgIWsuZW5kc1dpdGgoJyQnKVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgW2ssIHZdKSA9PiBPYmplY3QuYXNzaWduKGFjYywgeyBba106IHYgfSksIHt9KTtcbiAgICAgIGVudGl0eSA9IHsgLi4uZW50aXR5LCAuLi5ub25GaWVsZEF0dHJzIH07XG4gICAgfVxuXG4gICAgLy8gQWRkIGNsaWVudF9pZFxuICAgIGlmIChjbGllbnRfaWQpIHtcbiAgICAgICg8YW55PmVudGl0eSlbdGhpcy5jaWRdID0gKDxhbnk+c2VsZilbdGhpcy5jaWRdO1xuICAgIH1cblxuICAgIC8vIEFkZCBrZXlcbiAgICBpZiAoaW5jbHVkZV9rZXkpIHtcbiAgICAgIGVudGl0eSA9IHtcbiAgICAgICAgLi4uZW50aXR5LFxuICAgICAgICAuLi4odGhpcy5yZXNvbHZlS2V5KHNlbGYsIHsgZmllbGRfbWFwcGluZywgcmVzb2x2ZTogZmFsc2UgfSkgYXMge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdHlwZVxuICAgIGlmIChcbiAgICAgIHNlbGYuX3BhcmVudCAhPT0gbnVsbCAmJlxuICAgICAgKChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHNlbGYuX3BhcmVudFswXSkgJiZcbiAgICAgICAgKHNlbGYuX3BhcmVudFsxXSBhcyBPRGF0YU1vZGVsRmllbGQ8YW55PikubWV0YSAhPT0gc2VsZi5fbWV0YSkgfHxcbiAgICAgICAgKE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihzZWxmLl9wYXJlbnRbMF0pICYmXG4gICAgICAgICAgKHNlbGYuX3BhcmVudFswXSBhcyBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KS5fbW9kZWxcbiAgICAgICAgICAgIC5tZXRhICE9PSBzZWxmLl9tZXRhKSlcbiAgICApIHtcbiAgICAgIGVudGl0eVt0aGlzLmFwaS5vcHRpb25zLmhlbHBlci5PREFUQV9UWVBFXSA9IGAjJHt0aGlzLnNjaGVtYS50eXBlKCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5IGFzIFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfVxuXG4gIHJlc2V0KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgeyBuYW1lLCBzaWxlbnQgPSBmYWxzZSB9OiB7IG5hbWU/OiBzdHJpbmc7IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIGxldCBjaGFuZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFJlc2V0IHZhbHVlXG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBzZWxmLl9hdHRyaWJ1dGVzLmdldChuYW1lKTtcbiAgICAgIGlmIChcbiAgICAgICAgYXR0cmlidXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYXR0cmlidXRlLmlzQ2hhbmdlZCh7IGluY2x1ZGVfbmF2aWdhdGlvbjogdHJ1ZSB9KVxuICAgICAgKSB7XG4gICAgICAgIGF0dHJpYnV0ZS5yZXNldCgpO1xuICAgICAgICBjaGFuZ2VzID0gW25hbWVdO1xuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGU/LmlzQ2hhbmdlZCgpKSB7XG4gICAgICAgIGF0dHJpYnV0ZS5yZXNldCgpO1xuICAgICAgICBjaGFuZ2VzID0gW25hbWVdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCBhbGxcbiAgICAgIGNoYW5nZXMgPSBbLi4uc2VsZi5fYXR0cmlidXRlcy5rZXlzKCldO1xuICAgICAgLy9zZWxmLl9jaGFuZ2VzLmNsZWFyKCk7XG4gICAgICBzZWxmLl9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIsIGtleSkgPT4ge1xuICAgICAgICBpZiAoYXR0ci5pc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb246IHRydWUgfSkpIHtcbiAgICAgICAgICBhdHRyLnJlc2V0KCk7XG4gICAgICAgICAgY2hhbmdlcy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXNpbGVudCAmJiBjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KE9EYXRhTW9kZWxFdmVudFR5cGUuUmVzZXQsIHtcbiAgICAgICAgICBtb2RlbDogc2VsZixcbiAgICAgICAgICBvcHRpb25zOiB7IGNoYW5nZXMgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXNzaWduKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZW50aXR5OiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAge1xuICAgICAgcmVzZXQgPSBmYWxzZSxcbiAgICAgIHJlcGFyZW50ID0gZmFsc2UsXG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICB9OiB7XG4gICAgICByZXNldD86IGJvb2xlYW47XG4gICAgICByZXBhcmVudD86IGJvb2xlYW47XG4gICAgICBzaWxlbnQ/OiBib29sZWFuO1xuICAgIH0gPSB7fVxuICApIHtcbiAgICBzZWxmLl9yZXNldCA9IHJlc2V0O1xuICAgIHNlbGYuX3JlcGFyZW50ID0gcmVwYXJlbnQ7XG4gICAgc2VsZi5fc2lsZW50ID0gc2lsZW50O1xuXG4gICAgY29uc3QgY2hhbmdlczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEFwcGx5IGVudGl0eVxuICAgIGNvbnN0IG1vZGVsID0gc2VsZiBhcyBhbnk7XG4gICAgT2JqZWN0LmVudHJpZXMoZW50aXR5KVxuICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSAvLyBGaWx0ZXIgdW5kZWZpbmVkXG4gICAgICAuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMoe1xuICAgICAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICAgICAgICBpbmNsdWRlX25hdmlnYXRpb246IHRydWUsXG4gICAgICAgIH0pLmZpbmQoXG4gICAgICAgICAgKGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PikgPT5cbiAgICAgICAgICAgIChzZWxmLl9yZXNldCAmJiBmaWVsZC5maWVsZCA9PT0ga2V5KSB8fCBmaWVsZC5uYW1lID09PSBrZXlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIERlbGVnYXRlZCB0byBwcml2YXRlIHNldHRlclxuICAgICAgICAgIGlmICh0aGlzLnNldChzZWxmLCBmaWVsZCwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLnB1c2goZmllbGQubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEJhc2ljIGFzc2lnbm1lbnRcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbW9kZWxba2V5XTtcbiAgICAgICAgICBtb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IHZhbHVlKSBjaGFuZ2VzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAoKCFzZWxmLl9zaWxlbnQgJiYgY2hhbmdlcy5sZW5ndGggPiAwKSB8fCBzZWxmLl9yZXNldCkge1xuICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoXG4gICAgICAgICAgc2VsZi5fcmVzZXQgPyBPRGF0YU1vZGVsRXZlbnRUeXBlLlJlc2V0IDogT0RhdGFNb2RlbEV2ZW50VHlwZS5VcGRhdGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgICBvcHRpb25zOiB7IGNoYW5nZXMgfSxcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHNlbGYuX3Jlc2V0ID0gZmFsc2U7XG4gICAgc2VsZi5fcmVwYXJlbnQgPSBmYWxzZTtcbiAgICBzZWxmLl9zaWxlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc01vZGVsKG9iajogYW55KSB7XG4gICAgcmV0dXJuIFR5cGVzLnJhd1R5cGUob2JqKSA9PT0gJ01vZGVsJztcbiAgfVxuXG4gIHN0YXRpYyBpc0NvbGxlY3Rpb24ob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gVHlwZXMucmF3VHlwZShvYmopID09PSAnQ29sbGVjdGlvbic7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDb2xsZWN0aW9uPEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPixcbiAgICBjb2xsZWN0aW9uOiBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4sXG4gICAgdmFsdWU6IFBhcnRpYWw8VD5bXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W11cbiAgKSB7XG4gICAgY29sbGVjdGlvbi5fYW5ub3RhdGlvbnMgPSBmaWVsZC5hbm5vdGF0aW9uc0ZhY3RvcnkoXG4gICAgICBzZWxmLmFubm90cygpXG4gICAgKSBhcyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8Rj47XG4gICAgY29sbGVjdGlvbi5hc3NpZ24odmFsdWUgYXMgUGFydGlhbDxUPltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSwge1xuICAgICAgcmVzZXQ6IHNlbGYuX3Jlc2V0LFxuICAgICAgcmVwYXJlbnQ6IHNlbGYuX3JlcGFyZW50LFxuICAgICAgc2lsZW50OiBzZWxmLl9zaWxlbnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uaGFzQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTW9kZWw8Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+LFxuICAgIG1vZGVsOiBPRGF0YU1vZGVsPEY+LFxuICAgIHZhbHVlOiBGIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbiAgKSB7XG4gICAgbW9kZWwuX2Fubm90YXRpb25zID0gZmllbGQuYW5ub3RhdGlvbnNGYWN0b3J5KFxuICAgICAgc2VsZi5hbm5vdHMoKVxuICAgICkgYXMgT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxGPjtcbiAgICBtb2RlbC5hc3NpZ24odmFsdWUgYXMgRiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCB7XG4gICAgICByZXNldDogc2VsZi5fcmVzZXQsXG4gICAgICByZXBhcmVudDogc2VsZi5fcmVwYXJlbnQsXG4gICAgICBzaWxlbnQ6IHNlbGYuX3NpbGVudCxcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kZWwuaGFzQ2hhbmdlZCgpO1xuICB9XG5cbiAgZ2V0PEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPiB8IHN0cmluZ1xuICApOiBGIHwgT0RhdGFNb2RlbDxGPiB8IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PiB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGF0dHIgPSBzZWxmLl9hdHRyaWJ1dGVzLmdldChcbiAgICAgIGZpZWxkIGluc3RhbmNlb2YgT0RhdGFNb2RlbEZpZWxkID8gZmllbGQubmFtZSA6IGZpZWxkXG4gICAgKTtcbiAgICBpZiAoYXR0ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF0dHIuZ2V0KCk7XG4gICAgICBpZiAoXG4gICAgICAgIChhdHRyLm5hdmlnYXRpb24gJiYgdmFsdWUgPT09IG51bGwpIHx8XG4gICAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHJlZmVyZW5jZVxuICAgICAgICBjb25zdCByZWZlcmVuY2VkID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlZChzZWxmLCBhdHRyKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHJlZmVyZW5jZWQgIT09IG51bGwgJiYgcmVmZXJlbmNlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgKHZhbHVlIGFzIE9EYXRhTW9kZWw8Rj4pLmFzc2lnbihyZWZlcmVuY2VkIGFzIFBhcnRpYWw8Rj4sIHtcbiAgICAgICAgICAgIHNpbGVudDogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiByZWZlcmVuY2VkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gTmV3IHZhbHVlIGlzIG51bGxcbiAgICAgICAgICAoYXR0ciBhcyBPRGF0YU1vZGVsQXR0cmlidXRlPEY+KS5zZXQobnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwgJiYgcmVmZXJlbmNlZCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIE5ldyB2YWx1ZSBpcyB1bmRlZmluZWRcbiAgICAgICAgICAoYXR0ciBhcyBPRGF0YU1vZGVsQXR0cmlidXRlPEY+KS5zZXQodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnICYmXG4gICAgICAhZmllbGQuc3RhcnRzV2l0aCgnXycpICYmXG4gICAgICAhZmllbGQuZW5kc1dpdGgoJyQnKVxuICAgICkge1xuICAgICAgcmV0dXJuIChzZWxmIGFzIGFueSlbZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc2V0PEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPiB8IHN0cmluZyxcbiAgICB2YWx1ZTpcbiAgICAgIHwgRlxuICAgICAgfCBGW11cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXVxuICAgICAgfCBPRGF0YU1vZGVsPEY+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PlxuICAgICAgfCBudWxsLFxuICAgIHsgdHlwZSB9OiB7IHR5cGU/OiBzdHJpbmcgfSA9IHt9XG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBtb2RlbEZpZWxkID1cbiAgICAgIGZpZWxkIGluc3RhbmNlb2YgT0RhdGFNb2RlbEZpZWxkID8gZmllbGQgOiB0aGlzLmZpbmRGaWVsZDxGPihmaWVsZCk7XG4gICAgaWYgKFxuICAgICAgbW9kZWxGaWVsZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmlzT3BlblR5cGUoKSAmJlxuICAgICAgdHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgdHlwZSA9IHR5cGUgPz8gKHRoaXMudHNUb0VkbVt0eXBlb2YgdmFsdWVdIGFzIEVkbVR5cGUpID8/ICcnO1xuICAgICAgbW9kZWxGaWVsZCA9IHRoaXMubW9kZWxGaWVsZEZhY3Rvcnk8Rj4oc2VsZiwgZmllbGQsIHR5cGUpO1xuICAgIH1cbiAgICBpZiAobW9kZWxGaWVsZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWVsZCB3aXRoIG5hbWUgJHtmaWVsZCBhcyBzdHJpbmd9YCk7XG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBhdHRyID0gc2VsZi5fYXR0cmlidXRlcy5nZXQobW9kZWxGaWVsZC5uYW1lKTtcblxuICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0c1xuICAgIGlmIChhdHRyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGF0dHIgPSBuZXcgT0RhdGFNb2RlbEF0dHJpYnV0ZShzZWxmLCBtb2RlbEZpZWxkKTtcbiAgICAgIHRoaXMuX2xpbmsoc2VsZiwgYXR0cik7XG4gICAgICBzZWxmLl9hdHRyaWJ1dGVzLnNldChtb2RlbEZpZWxkLm5hbWUsIGF0dHIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBhdHRyLmdldCgpO1xuXG4gICAgaWYgKG1vZGVsRmllbGQuaXNTdHJ1Y3R1cmVkVHlwZSgpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV3IHZhbHVlIGlzIG51bGxcbiAgICAgICAgY2hhbmdlZCA9IGF0dHIuc2V0KHZhbHVlIGFzIG51bGwsIHNlbGYuX3Jlc2V0LCBzZWxmLl9yZXBhcmVudCk7XG4gICAgICB9IGVsc2UgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihjdXJyZW50KSkge1xuICAgICAgICAvLyBDdXJyZW50IGlzIGNvbGxlY3Rpb25cbiAgICAgICAgbGV0IGN1cnJlbnRDb2xsZWN0aW9uID0gY3VycmVudCBhcyBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj47XG4gICAgICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgLy8gTmV3IHZhbHVlIGlzIGNvbGxlY3Rpb25cbiAgICAgICAgICBjaGFuZ2VkID0gYXR0ci5zZXQoXG4gICAgICAgICAgICB2YWx1ZSBhcyBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4sXG4gICAgICAgICAgICBzZWxmLl9yZXNldCxcbiAgICAgICAgICAgIHNlbGYuX3JlcGFyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChUeXBlcy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIE5ldyB2YWx1ZSBpcyBhcnJheVxuICAgICAgICAgIGNoYW5nZWQgPSB0aGlzLl91cGRhdGVDb2xsZWN0aW9uPEY+KFxuICAgICAgICAgICAgc2VsZixcbiAgICAgICAgICAgIG1vZGVsRmllbGQsXG4gICAgICAgICAgICBjdXJyZW50Q29sbGVjdGlvbixcbiAgICAgICAgICAgIHZhbHVlIGFzIFRbXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W11cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwoY3VycmVudCkpIHtcbiAgICAgICAgLy8gQ3VycmVudCBpcyBtb2RlbFxuICAgICAgICBsZXQgY3VycmVudE1vZGVsID0gY3VycmVudCBhcyBPRGF0YU1vZGVsPEY+O1xuICAgICAgICBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBOZXcgdmFsdWUgaXMgbW9kZWxcbiAgICAgICAgICBjaGFuZ2VkID0gYXR0ci5zZXQoXG4gICAgICAgICAgICB2YWx1ZSBhcyBPRGF0YU1vZGVsPEY+LFxuICAgICAgICAgICAgc2VsZi5fcmVzZXQsXG4gICAgICAgICAgICBzZWxmLl9yZXBhcmVudFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoVHlwZXMuaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjaGFuZ2VkID0gdGhpcy5fdXBkYXRlTW9kZWw8Rj4oXG4gICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgbW9kZWxGaWVsZCxcbiAgICAgICAgICAgIGN1cnJlbnRNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlIGFzIEYgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEN1cnJlbnQgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBtb2RlbC9jb2xsZWN0aW9uIGZvciBnaXZlbiB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gYXR0ci5zZXQoXG4gICAgICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKSB8fFxuICAgICAgICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSlcbiAgICAgICAgICAgID8gKHZhbHVlIGFzIE9EYXRhTW9kZWw8Rj4gfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4pXG4gICAgICAgICAgICA6IG1vZGVsRmllbGQuY29sbGVjdGlvblxuICAgICAgICAgICAgPyBtb2RlbEZpZWxkLmNvbGxlY3Rpb25GYWN0b3J5PEY+KHtcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHNlbGYsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlIGFzIEZbXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10sXG4gICAgICAgICAgICAgICAgcmVzZXQ6IHNlbGYuX3Jlc2V0LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBtb2RlbEZpZWxkLm1vZGVsRmFjdG9yeTxGPih7XG4gICAgICAgICAgICAgICAgcGFyZW50OiBzZWxmLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICByZXNldDogc2VsZi5fcmVzZXQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgIHNlbGYuX3Jlc2V0LFxuICAgICAgICAgIHNlbGYuX3JlcGFyZW50XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc29sdmUgcmVmZXJlbnRpYWxzXG4gICAgICBpZiAoIU9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihhdHRyLmdldCgpKSkge1xuICAgICAgICBsZXQgcmVmID0gbW9kZWxGaWVsZC5tZXRhPy5yZXNvbHZlUmVmZXJlbnRpYWwoYXR0ci5nZXQoKSwgYXR0cik7XG4gICAgICAgIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYsIHJlZik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hhbmdlZCA9IGF0dHIuc2V0KHZhbHVlLCBzZWxmLl9yZXNldCwgc2VsZi5fcmVwYXJlbnQpO1xuICAgIH1cblxuICAgIGlmICghc2VsZi5fc2lsZW50ICYmIGNoYW5nZWQpIHtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KE9EYXRhTW9kZWxFdmVudFR5cGUuQ2hhbmdlLCB7XG4gICAgICAgICAgYXR0cixcbiAgICAgICAgICBtb2RlbDogc2VsZixcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogY3VycmVudCxcbiAgICAgICAgICBvcHRpb25zOiB7IGtleTogbW9kZWxGaWVsZC5pc0tleSgpIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGluazxGPihzZWxmOiBPRGF0YU1vZGVsPFQ+LCBhdHRyOiBPRGF0YU1vZGVsQXR0cmlidXRlPEY+KSB7XG4gICAgYXR0ci5ldmVudHMkLnN1YnNjcmliZSgoZXZlbnQ6IE9EYXRhTW9kZWxFdmVudDxhbnk+KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIEJVQkJMSU5HLmluZGV4T2YoZXZlbnQubmFtZSkgIT09IC0xICYmXG4gICAgICAgIGV2ZW50LmJ1YmJsaW5nICYmXG4gICAgICAgICFldmVudC52aXNpdGVkKHNlbGYpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGV2ZW50Lm1vZGVsID09PSBhdHRyLmdldCgpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQubmFtZSA9PT0gJ2NoYW5nZScgJiZcbiAgICAgICAgICAgIGF0dHIubmF2aWdhdGlvbiAmJlxuICAgICAgICAgICAgZXZlbnQub3B0aW9ucz8ua2V5XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgcmVmID0gKGF0dHIuZ2V0KCkgYXMgT0RhdGFNb2RlbDxhbnk+KS5yZWZlcmVudGlhbChhdHRyKTtcbiAgICAgICAgICAgIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxmLCByZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KGV2ZW50LnB1c2goc2VsZiwgYXR0cikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
1117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9tb2RlbHMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxFQUNmLHNCQUFzQixHQUN2QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFHTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IscUJBQXFCLEdBS3RCLE1BQU0sY0FBYyxDQUFDO0FBTXRCLE9BQU8sRUFBRSxPQUFPLEVBQXlCLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0MsTUFBTSxDQUFOLElBQVksbUJBV1g7QUFYRCxXQUFZLG1CQUFtQjtJQUM3Qix3Q0FBaUIsQ0FBQTtJQUNqQixzQ0FBZSxDQUFBO0lBQ2Ysd0NBQWlCLENBQUE7SUFDakIsMENBQW1CLENBQUE7SUFDbkIsa0NBQVcsQ0FBQTtJQUNYLHdDQUFpQixDQUFBO0lBQ2pCLDBDQUFtQixDQUFBO0lBQ25CLDBDQUFtQixDQUFBO0lBQ25CLG9DQUFhLENBQUE7SUFDYix3Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBWFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVc5QjtBQUVELE1BQU0sT0FBTyxlQUFlO0lBTTFCLFlBQ0UsSUFBeUIsRUFDekIsRUFDRSxLQUFLLEVBQ0wsVUFB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LE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUU7YUFDckMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUksSUFBbUIsRUFBRSxJQUE0QjtRQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQTJCLEVBQUUsRUFBRTtZQUNyRCxJQUNFLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxDQUFDLFFBQVE7Z0JBQ2QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUNwQjtnQkFDQSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUM5QixJQUNFLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTt3QkFDdkIsSUFBSSxDQUFDLFVBQVU7d0JBQ2YsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQ2xCO3dCQUNBLElBQUksR0FBRyxHQUFJLElBQUksQ0FBQyxHQUFHLEVBQXNCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM1RCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTs0QkFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7eUJBQzFCO3FCQUNGO2lCQUNGO2dCQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDSURfRklFTERfTkFNRSxcbiAgQ09NUFVURUQsXG4gIERFRkFVTFRfVkVSU0lPTixcbiAgT1BUSU1JU1RJQ19DT05DVVJSRU5DWSxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhSGVscGVyIH0gZnJvbSAnLi4vaGVscGVyJztcbmltcG9ydCB7XG4gIEVudGl0eUtleSxcbiAgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zLFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YUVudGl0eVNldFJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVByb3BlcnR5UmVzb3VyY2UsXG4gIE9EYXRhUXVlcnlPcHRpb25zLFxuICBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXIsXG4gIE9EYXRhUmVzb3VyY2UsXG4gIE9EYXRhU2luZ2xldG9uUmVzb3VyY2UsXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0eVNldCxcbiAgT0RhdGFTdHJ1Y3R1cmVkVHlwZSxcbiAgT0RhdGFTdHJ1Y3R1cmVkVHlwZUZpZWxkUGFyc2VyLFxufSBmcm9tICcuLi9zY2hlbWEnO1xuaW1wb3J0IHsgRWRtVHlwZSwgUGFyc2VyLCBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBPRGF0YU1vZGVsIH0gZnJvbSAnLi9tb2RlbCc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGVudW0gT0RhdGFNb2RlbEV2ZW50VHlwZSB7XG4gIENoYW5nZSA9ICdjaGFuZ2UnLFxuICBSZXNldCA9ICdyZXNldCcsXG4gIFVwZGF0ZSA9ICd1cGRhdGUnLFxuICBEZXN0cm95ID0gJ2Rlc3Ryb3knLFxuICBBZGQgPSAnYWRkJyxcbiAgUmVtb3ZlID0gJ3JlbW92ZScsXG4gIEludmFsaWQgPSAnaW52YWxpZCcsXG4gIFJlcXVlc3QgPSAncmVxdWVzdCcsXG4gIFN5bmMgPSAnc3luYycsXG4gIEF0dGFjaCA9ICdhdHRhY2gnLFxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbEV2ZW50PFQ+IHtcbiAgbmFtZTogT0RhdGFNb2RlbEV2ZW50VHlwZTtcbiAgdmFsdWU/OiBhbnk7XG4gIHByZXZpb3VzPzogYW55O1xuICBvcHRpb25zPzogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IE9EYXRhTW9kZWxFdmVudFR5cGUsXG4gICAge1xuICAgICAgbW9kZWwsXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgcHJldmlvdXMsXG4gICAgICB2YWx1ZSxcbiAgICAgIGF0dHIsXG4gICAgICBvcHRpb25zLFxuICAgIH06IHtcbiAgICAgIG1vZGVsPzogT0RhdGFNb2RlbDxUPjtcbiAgICAgIGNvbGxlY3Rpb24/OiBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj47XG4gICAgICBhdHRyPzogT0RhdGFNb2RlbEF0dHJpYnV0ZTxhbnk+IHwgbnVtYmVyO1xuICAgICAgcHJldmlvdXM/OiBhbnk7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICAgIG9wdGlvbnM/OiBhbnk7XG4gICAgfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xuICAgIHRoaXMucHJldmlvdXMgPSBwcmV2aW91cztcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmNoYWluID0gW1xuICAgICAgW1xuICAgICAgICAodGhpcy5jb2xsZWN0aW9uIHx8IHRoaXMubW9kZWwpIGFzXG4gICAgICAgICAgfCBPRGF0YU1vZGVsPGFueT5cbiAgICAgICAgICB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgIGF0dHIgfHwgbnVsbCxcbiAgICAgIF0sXG4gICAgXTtcbiAgfVxuXG4gIGJ1YmJsaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuYnViYmxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGNoYWluOiBbXG4gICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICBPRGF0YU1vZGVsQXR0cmlidXRlPGFueT4gfCBudW1iZXIgfCBudWxsLFxuICBdW107XG5cbiAgcHVzaChcbiAgICBtb2RlbDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICBhdHRyOiBPRGF0YU1vZGVsQXR0cmlidXRlPGFueT4gfCBudW1iZXIsXG4gICkge1xuICAgIGxldCBldmVudCA9IG5ldyBPRGF0YU1vZGVsRXZlbnQodGhpcy5uYW1lLCB7XG4gICAgICBtb2RlbDogdGhpcy5tb2RlbCxcbiAgICAgIGNvbGxlY3Rpb246IHRoaXMuY29sbGVjdGlvbixcbiAgICAgIHByZXZpb3VzOiB0aGlzLnByZXZpb3VzLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgfSk7XG4gICAgZXZlbnQuY2hhaW4gPSBbLi4udGhpcy5jaGFpbl07XG4gICAgZXZlbnQuY2hhaW4uc3BsaWNlKDAsIDAsIFttb2RlbCwgYXR0cl0pO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHZpc2l0ZWQobW9kZWw6IE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jaGFpbi5zb21lKChjKSA9PiBjWzBdID09PSBtb2RlbCkgJiZcbiAgICAgIHRoaXMuY2hhaW5bdGhpcy5jaGFpbi5sZW5ndGggLSAxXVswXSAhPT0gbW9kZWxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhaW5cbiAgICAgIC5tYXAoKFssIGF0dHJdLCBpbmRleCkgPT5cbiAgICAgICAgdHlwZW9mIGF0dHIgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBgWyR7YXR0cn1dYFxuICAgICAgICAgIDogYXR0ciBpbnN0YW5jZW9mIE9EYXRhTW9kZWxBdHRyaWJ1dGVcbiAgICAgICAgICA/IGluZGV4ID09PSAwXG4gICAgICAgICAgICA/IGF0dHIubmFtZVxuICAgICAgICAgICAgOiBgLiR7YXR0ci5uYW1lfWBcbiAgICAgICAgICA6ICcnLFxuICAgICAgKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG5cbiAgLy9SZWZlcmVuY2UgdG8gdGhlIG1vZGVsIHdoaWNoIHRoZSBldmVudCB3YXMgZGlzcGF0Y2hlZFxuICBtb2RlbD86IE9EYXRhTW9kZWw8VD47XG4gIC8vSWRlbnRpZmllcyB0aGUgY3VycmVudCBtb2RlbCBmb3IgdGhlIGV2ZW50XG4gIGdldCBjdXJyZW50TW9kZWwoKTogT0RhdGFNb2RlbDxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5jaGFpbi5maW5kKChjKSA9PiBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGNbMF0pKTtcbiAgICByZXR1cm4gbGluayAhPT0gdW5kZWZpbmVkID8gKGxpbmtbMF0gYXMgT0RhdGFNb2RlbDxhbnk+KSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vUmVmZXJlbmNlIHRvIHRoZSBjb2xsZWN0aW9uIHdoaWNoIHRoZSBldmVudCB3YXMgZGlzcGF0Y2hlZFxuICBjb2xsZWN0aW9uPzogT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+O1xuICAvL0lkZW50aWZpZXMgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBmb3IgdGhlIGV2ZW50XG4gIGdldCBjdXJyZW50Q29sbGVjdGlvbigpOiBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5jaGFpbi5maW5kKChjKSA9PiBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24oY1swXSkpO1xuICAgIHJldHVybiBsaW5rICE9PSB1bmRlZmluZWRcbiAgICAgID8gKGxpbmtbMF0gYXMgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PilcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBCVUJCTElORyA9IFtcbiAgT0RhdGFNb2RlbEV2ZW50VHlwZS5DaGFuZ2UsXG4gIE9EYXRhTW9kZWxFdmVudFR5cGUuUmVzZXQsXG4gIE9EYXRhTW9kZWxFdmVudFR5cGUuVXBkYXRlLFxuICBPRGF0YU1vZGVsRXZlbnRUeXBlLkRlc3Ryb3ksXG4gIE9EYXRhTW9kZWxFdmVudFR5cGUuQWRkLFxuICBPRGF0YU1vZGVsRXZlbnRUeXBlLlJlbW92ZSxcbl07XG5cbmV4cG9ydCBjb25zdCBJTkNMVURFX1NIQUxMT1cgPSB7XG4gIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gIGluY2x1ZGVfY29tcHV0ZWQ6IHRydWUsXG4gIGluY2x1ZGVfa2V5OiB0cnVlLFxufTtcblxuZXhwb3J0IGNvbnN0IElOQ0xVREVfREVFUCA9IHtcbiAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICBpbmNsdWRlX25vbl9maWVsZDogdHJ1ZSxcbiAgLi4uSU5DTFVERV9TSEFMTE9XLFxufTtcblxuZXhwb3J0IGVudW0gT0RhdGFNb2RlbFN0YXRlIHtcbiAgQWRkZWQsXG4gIFJlbW92ZWQsXG4gIFVuY2hhbmdlZCxcbn1cblxuZXhwb3J0IHR5cGUgTW9kZWxPcHRpb25zID0ge1xuICBjaWQ/OiBzdHJpbmc7XG4gIGZpZWxkczogTWFwPHN0cmluZywgTW9kZWxGaWVsZE9wdGlvbnM+O1xufTtcblxuZXhwb3J0IHR5cGUgTW9kZWxGaWVsZE9wdGlvbnMgPSB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBwYXJzZXI/OiBPRGF0YVN0cnVjdHVyZWRUeXBlRmllbGRQYXJzZXI8YW55PjtcbiAgZGVmYXVsdD86IGFueTtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBjb25jdXJyZW5jeT86IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbCh7IGNpZCA9IENJRF9GSUVMRF9OQU1FIH06IHsgY2lkPzogc3RyaW5nIH0gPSB7fSkge1xuICByZXR1cm4gPFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiB7fSB9Pihjb25zdHJ1Y3RvcjogVCkgPT4ge1xuICAgIGNvbnN0IEtsYXNzID0gPGFueT5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoIUtsYXNzLmhhc093blByb3BlcnR5KCdvcHRpb25zJykpXG4gICAgICBLbGFzcy5vcHRpb25zID0ge1xuICAgICAgICBmaWVsZHM6IG5ldyBNYXA8c3RyaW5nLCBNb2RlbEZpZWxkT3B0aW9ucz4oKSxcbiAgICAgIH0gYXMgTW9kZWxPcHRpb25zO1xuICAgIEtsYXNzLm9wdGlvbnMuY2lkID0gY2lkO1xuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsRmllbGQoe1xuICBuYW1lLFxuICAuLi5vcHRpb25zXG59OiB7IG5hbWU/OiBzdHJpbmcgfSAmIE1vZGVsRmllbGRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBjb25zdCBLbGFzcyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoIUtsYXNzLmhhc093blByb3BlcnR5KCdvcHRpb25zJykpXG4gICAgICBLbGFzcy5vcHRpb25zID0ge1xuICAgICAgICBmaWVsZHM6IG5ldyBNYXA8c3RyaW5nLCBNb2RlbEZpZWxkT3B0aW9ucz4oKSxcbiAgICAgIH0gYXMgTW9kZWxPcHRpb25zO1xuICAgIG9wdGlvbnMuZmllbGQgPSBuYW1lIHx8IGtleTtcbiAgICBLbGFzcy5vcHRpb25zLmZpZWxkcy5zZXQoa2V5LCBvcHRpb25zKTtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbEZpZWxkT3B0aW9uczxGPiA9IE1vZGVsRmllbGRPcHRpb25zICYge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHBhcnNlcjogT0RhdGFTdHJ1Y3R1cmVkVHlwZUZpZWxkUGFyc2VyPEY+O1xufTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhTW9kZWxGaWVsZDxGPiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgcGFyc2VyOiBPRGF0YVN0cnVjdHVyZWRUeXBlRmllbGRQYXJzZXI8Rj47XG4gIG9wdGlvbnM6IE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gIG1ldGE/OiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICBkZWZhdWx0PzogYW55O1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgY29uY3VycmVuY3k6IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbiAgcGFyc2VyT3B0aW9ucz86IFBhcnNlck9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogT0RhdGFNb2RlbE9wdGlvbnM8YW55PixcbiAgICB7IG5hbWUsIGZpZWxkLCBwYXJzZXIsIC4uLm9wdHMgfTogT0RhdGFNb2RlbEZpZWxkT3B0aW9uczxGPixcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZmllbGQgPSBmaWVsZDtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLmRlZmF1bHQgPSBvcHRzLmRlZmF1bHQgfHwgcGFyc2VyLmRlZmF1bHQ7XG4gICAgdGhpcy5yZXF1aXJlZCA9IEJvb2xlYW4ob3B0cy5yZXF1aXJlZCB8fCAhcGFyc2VyLm51bGxhYmxlKTtcbiAgICB0aGlzLmNvbmN1cnJlbmN5ID0gQm9vbGVhbihvcHRzLmNvbmN1cnJlbmN5KTtcbiAgICB0aGlzLm1heExlbmd0aCA9IG9wdHMubWF4TGVuZ3RoIHx8IHBhcnNlci5tYXhMZW5ndGg7XG4gICAgdGhpcy5taW5MZW5ndGggPSBvcHRzLm1pbkxlbmd0aDtcbiAgICB0aGlzLm1pbiA9IG9wdHMubWluO1xuICAgIHRoaXMubWF4ID0gb3B0cy5tYXg7XG4gICAgdGhpcy5wYXR0ZXJuID0gb3B0cy5wYXR0ZXJuO1xuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmFwaTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci50eXBlO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb24oKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5wYXJzZXIubmF2aWdhdGlvbik7XG4gIH1cblxuICBnZXQgY29sbGVjdGlvbigpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcnNlci5jb2xsZWN0aW9uKTtcbiAgfVxuXG4gIGFubm90YXRlZFZhbHVlPFQ+KHRlcm06IHN0cmluZyB8IFJlZ0V4cCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5hbm5vdGF0ZWRWYWx1ZTxUPih0ZXJtKTtcbiAgfVxuXG4gIGNvbmZpZ3VyZSh7XG4gICAgZmluZE9wdGlvbnNGb3JUeXBlLFxuICAgIGNvbmN1cnJlbmN5LFxuICAgIG9wdGlvbnMsXG4gIH06IHtcbiAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgY29uY3VycmVuY3k6IGJvb2xlYW47XG4gICAgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcbiAgfSkge1xuICAgIHRoaXMubWV0YSA9IGZpbmRPcHRpb25zRm9yVHlwZSh0aGlzLnBhcnNlci50eXBlKTtcbiAgICB0aGlzLnBhcnNlck9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChjb25jdXJyZW5jeSkgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgIGlmICh0aGlzLmRlZmF1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVzZXJpYWxpemUodGhpcy5kZWZhdWx0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlzS2V5KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5pc0tleSgpO1xuICB9XG5cbiAgaGFzUmVmZXJlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5oYXNSZWZlcmVudGlhbHMoKTtcbiAgfVxuXG4gIGdldCByZWZlcmVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnJlZmVyZW50aWFscztcbiAgfVxuXG4gIGlzU3RydWN0dXJlZFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmlzU3RydWN0dXJlZFR5cGUoKTtcbiAgfVxuXG4gIHN0cnVjdHVyZWQoKSB7XG4gICAgbGV0IHN0cnVjdHVyZWRUeXBlID0gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxGPihcbiAgICAgIHRoaXMucGFyc2VyLnR5cGUsXG4gICAgKTtcbiAgICAvL1Rocm93IGVycm9yIGlmIG5vdCBmb3VuZFxuICAgIGlmICghc3RydWN0dXJlZFR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHN0cnVjdHVyZWQgdHlwZSBmb3IgJHt0aGlzLnBhcnNlci50eXBlfWApO1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkVHlwZTtcbiAgfVxuXG4gIGlzRW51bVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmlzRW51bVR5cGUoKTtcbiAgfVxuXG4gIGVudW0oKSB7XG4gICAgbGV0IGVudW1UeXBlID0gdGhpcy5hcGkuZmluZEVudW1UeXBlRm9yVHlwZTxGPih0aGlzLnBhcnNlci50eXBlKTtcbiAgICAvL1Rocm93IGVycm9yIGlmIG5vdCBmb3VuZFxuICAgIGlmICghZW51bVR5cGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGVudW0gdHlwZSBmb3IgJHt0aGlzLnBhcnNlci50eXBlfWApO1xuICAgIHJldHVybiBlbnVtVHlwZTtcbiAgfVxuXG4gIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAge1xuICAgICAgbWV0aG9kLFxuICAgICAgbmF2aWdhdGlvbiA9IGZhbHNlLFxuICAgIH06IHtcbiAgICAgIG1ldGhvZD86ICdjcmVhdGUnIHwgJ3VwZGF0ZScgfCAnbW9kaWZ5JztcbiAgICAgIG5hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIH0gPSB7fSxcbiAgKSB7XG4gICAgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gIXZhbHVlLmlzVmFsaWQoeyBtZXRob2QsIG5hdmlnYXRpb24gfSkgPyB2YWx1ZS5fZXJyb3JzIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5tb2RlbHMoKVxuICAgICAgICAuc29tZSgobTogT0RhdGFNb2RlbDxhbnk+KSA9PiAhbS5pc1ZhbGlkKHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pKVxuICAgICAgICA/IHZhbHVlLm1vZGVscygpLm1hcCgobTogT0RhdGFNb2RlbDxhbnk+KSA9PiBtLl9lcnJvcnMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wdXRlZCA9IHRoaXMuYW5ub3RhdGVkVmFsdWU8Ym9vbGVhbj4oQ09NUFVURUQpO1xuICAgICAgbGV0IGVycm9ycyA9IHRoaXMucGFyc2VyPy52YWxpZGF0ZSh2YWx1ZSwgeyBtZXRob2QsIG5hdmlnYXRpb24gfSkgfHwgW107XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucmVxdWlyZWQgJiZcbiAgICAgICAgKHZhbHVlID09PSBudWxsIHx8ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG1ldGhvZCAhPT0gJ21vZGlmeScpKSAmJiAvLyBJcyBudWxsIG9yIHVuZGVmaW5lZCB3aXRob3V0IHBhdGNoP1xuICAgICAgICAhKGNvbXB1dGVkICYmIG1ldGhvZCA9PT0gJ2NyZWF0ZScpIC8vIE5vdCAoSXMgQ29tcHV0ZWQgZmllbGQgYW5kIGNyZWF0ZSkgP1xuICAgICAgKSB7XG4gICAgICAgIGVycm9yc1sncHVzaCddKGByZXF1aXJlZGApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGhcbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgbWF4bGVuZ3RoYCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGVycm9yc1sncHVzaCddKGBtaW5sZW5ndGhgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5taW4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgIHZhbHVlIDwgdGhpcy5taW5cbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgbWluYCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA+IHRoaXMubWF4XG4gICAgICApIHtcbiAgICAgICAgZXJyb3JzWydwdXNoJ10oYG1heGApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBhdHRlcm4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICF0aGlzLnBhdHRlcm4udGVzdCh2YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgcGF0dGVybmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KGVycm9ycykgPyBlcnJvcnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdHMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc1N0cnVjdHVyZWRUeXBlKCkgJiYgdGhpcy5tZXRhICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5tZXRhLmRlZmF1bHRzKClcbiAgICAgIDogdGhpcy5kZWZhdWx0O1xuICB9XG5cbiAgZGVzZXJpYWxpemUodmFsdWU6IGFueSwgb3B0aW9ucz86IFBhcnNlck9wdGlvbnMpOiBGIHtcbiAgICBjb25zdCBwYXJzZXJPcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLnBhcnNlck9wdGlvbnM7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmRlc2VyaWFsaXplKHZhbHVlLCBwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIHNlcmlhbGl6ZSh2YWx1ZTogRiwgb3B0aW9ucz86IFBhcnNlck9wdGlvbnMpOiBhbnkge1xuICAgIGNvbnN0IHBhcnNlck9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMucGFyc2VyT3B0aW9ucztcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuc2VyaWFsaXplKHZhbHVlLCBwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIGVuY29kZSh2YWx1ZTogRiwgb3B0aW9ucz86IFBhcnNlck9wdGlvbnMpOiBhbnkge1xuICAgIGNvbnN0IHBhcnNlck9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMucGFyc2VyT3B0aW9ucztcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuZW5jb2RlKHZhbHVlLCBwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJlc291cmNlRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YVJlc291cmNlPFQ+LFxuICApOiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPEY+IHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPEY+IHtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICBiYXNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlSZXNvdXJjZSB8fFxuICAgICAgICBiYXNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSB8fFxuICAgICAgICBiYXNlIGluc3RhbmNlb2YgT0RhdGFQcm9wZXJ0eVJlc291cmNlXG4gICAgICApXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgYnVpbGQgcmVzb3VyY2UgZm9yIG5vbiBjb21wYXRpYmxlIGJhc2UgdHlwZVwiKTtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uXG4gICAgICA/IChiYXNlIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD4pLm5hdmlnYXRpb25Qcm9wZXJ0eTxGPih0aGlzLnBhcnNlci5uYW1lKVxuICAgICAgOiAoYmFzZSBhcyBPRGF0YUVudGl0eVJlc291cmNlPFQ+KS5wcm9wZXJ0eTxGPih0aGlzLnBhcnNlci5uYW1lKTtcbiAgfVxuXG4gIGFubm90YXRpb25zRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YUVudGl0eUFubm90YXRpb25zPFQ+LFxuICApOiBPRGF0YUVudGl0eUFubm90YXRpb25zPEY+IHwgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPEY+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuY29sbGVjdGlvblxuICAgICAgPyBiYXNlLnByb3BlcnR5KHRoaXMucGFyc2VyLm5hbWUgYXMga2V5b2YgVCwgJ2NvbGxlY3Rpb24nKVxuICAgICAgOiBiYXNlLnByb3BlcnR5KHRoaXMucGFyc2VyLm5hbWUgYXMga2V5b2YgVCwgJ3NpbmdsZScpO1xuICB9XG5cbiAgc2NoZW1hRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+LFxuICApOiBPRGF0YVN0cnVjdHVyZWRUeXBlPEY+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZSh0aGlzLnBhcnNlci50eXBlKTtcbiAgfVxuXG4gIG1vZGVsRmFjdG9yeTxGPih7XG4gICAgcGFyZW50LFxuICAgIHZhbHVlLFxuICAgIHJlc2V0LFxuICB9OiB7XG4gICAgcGFyZW50OiBPRGF0YU1vZGVsPGFueT47XG4gICAgdmFsdWU/OiBQYXJ0aWFsPEY+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gICAgcmVzZXQ/OiBib29sZWFuO1xuICB9KTogT0RhdGFNb2RlbDxGPiB7XG4gICAgLy8gTW9kZWxcbiAgICBjb25zdCBhbm5vdHMgPSB0aGlzLmFubm90YXRpb25zRmFjdG9yeShcbiAgICAgIHBhcmVudC5hbm5vdHMoKSxcbiAgICApIGFzIE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8Rj47XG4gICAgbGV0IE1vZGVsID0gdGhpcy5hcGkubW9kZWxGb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIGlmIChNb2RlbCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgTm8gTW9kZWwgdHlwZSBmb3IgJHt0aGlzLm5hbWV9YCk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFubm90cy51cGRhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChhbm5vdHM/LnR5cGUgIT09IHVuZGVmaW5lZCAmJiBNb2RlbC5tZXRhICE9PSBudWxsKSB7XG4gICAgICBsZXQgc2NoZW1hID0gTW9kZWwubWV0YS5maW5kQ2hpbGRPcHRpb25zKChvKSA9PlxuICAgICAgICBvLmlzVHlwZU9mKGFubm90cy50eXBlIGFzIHN0cmluZyksXG4gICAgICApPy5zY2hlbWE7XG4gICAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQgJiYgc2NoZW1hLm1vZGVsICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC8vIENoYW5nZSB0byBjaGlsZCBtb2RlbFxuICAgICAgICBNb2RlbCA9IHNjaGVtYS5tb2RlbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vZGVsKCh2YWx1ZSB8fCB7fSkgYXMgUGFydGlhbDxGPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCB7XG4gICAgICBhbm5vdHMsXG4gICAgICByZXNldCxcbiAgICAgIHBhcmVudDogW3BhcmVudCwgdGhpc10sXG4gICAgfSk7XG4gIH1cblxuICBjb2xsZWN0aW9uRmFjdG9yeTxGPih7XG4gICAgcGFyZW50LFxuICAgIHZhbHVlLFxuICAgIHJlc2V0LFxuICB9OiB7XG4gICAgcGFyZW50OiBPRGF0YU1vZGVsPGFueT47XG4gICAgdmFsdWU/OiBQYXJ0aWFsPEY+W10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdO1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgfSk6IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PiB7XG4gICAgLy8gQ29sbGVjdGlvbiBGYWN0b3J5XG4gICAgY29uc3QgYW5ub3RzID0gdGhpcy5hbm5vdGF0aW9uc0ZhY3RvcnkoXG4gICAgICBwYXJlbnQuYW5ub3RzKCksXG4gICAgKSBhcyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8Rj47XG4gICAgY29uc3QgQ29sbGVjdGlvbiA9IHRoaXMuYXBpLmNvbGxlY3Rpb25Gb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIGlmIChDb2xsZWN0aW9uID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBFcnJvcihgTm8gQ29sbGVjdGlvbiB0eXBlIGZvciAke3RoaXMubmFtZX1gKTtcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24oXG4gICAgICAodmFsdWUgfHwgW10pIGFzIFBhcnRpYWw8Rj5bXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10sXG4gICAgICB7XG4gICAgICAgIGFubm90czogYW5ub3RzLFxuICAgICAgICByZXNldCxcbiAgICAgICAgcGFyZW50OiBbcGFyZW50LCB0aGlzXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbEF0dHJpYnV0ZTxUPiB7XG4gIHByaXZhdGUgdmFsdWU/OiBUIHwgT0RhdGFNb2RlbDxUPiB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PiB8IG51bGw7XG4gIHByaXZhdGUgY2hhbmdlPzogVCB8IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj4gfCBudWxsO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgZXZlbnRzJCA9IG5ldyBFdmVudEVtaXR0ZXI8T0RhdGFNb2RlbEV2ZW50PFQ+PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX21vZGVsOiBPRGF0YU1vZGVsPGFueT4sXG4gICAgcHJpdmF0ZSBfZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxUPixcbiAgKSB7fVxuXG4gIGdldCBuYXZpZ2F0aW9uKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2ZpZWxkLm5hdmlnYXRpb24pO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZC5hbm5vdGF0ZWRWYWx1ZTxib29sZWFuPihDT01QVVRFRCk7XG4gIH1cblxuICBnZXQgY29uY3VycmVuY3koKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZmllbGQuY29uY3VycmVuY3kpO1xuICB9XG5cbiAgZ2V0IHJlZmVyZW50aWFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGQucmVmZXJlbnRpYWxzO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkLm9wdGlvbnM7XG4gIH1cblxuICBnZXQgbWV0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGQubWV0YTtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZC5uYW1lO1xuICB9XG5cbiAgZ2V0IGZpZWxkTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGQuZmllbGQ7XG4gIH1cblxuICBnZXQoKTpcbiAgICB8IFRcbiAgICB8IE9EYXRhTW9kZWw8VD5cbiAgICB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PlxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2UgIT09IHVuZGVmaW5lZCA/IHRoaXMuY2hhbmdlIDogdGhpcy52YWx1ZTtcbiAgfVxuXG4gIHNldChcbiAgICB2YWx1ZTpcbiAgICAgIHwgVFxuICAgICAgfCBPRGF0YU1vZGVsPFQ+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PlxuICAgICAgfCBudWxsXG4gICAgICB8IHVuZGVmaW5lZCxcbiAgICByZXNldDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHJlcGFyZW50OiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldCgpO1xuXG4gICAgaWYgKFxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbChjdXJyZW50KSB8fFxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKGN1cnJlbnQpXG4gICAgKVxuICAgICAgdGhpcy51bmxpbmsoXG4gICAgICAgIGN1cnJlbnQgYXMgT0RhdGFNb2RlbDxUPiB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PixcbiAgICAgICAgLy90aGlzLnZhbHVlICE9PSBjdXJyZW50XG4gICAgICApO1xuXG4gICAgY29uc3QgY2hhbmdlZCA9XG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGN1cnJlbnQpICYmIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpXG4gICAgICAgID8gIShjdXJyZW50IGFzIE9EYXRhTW9kZWw8VD4pLmVxdWFscyh2YWx1ZSBhcyBPRGF0YU1vZGVsPFQ+KVxuICAgICAgICA6IE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihjdXJyZW50KSAmJlxuICAgICAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih2YWx1ZSlcbiAgICAgICAgPyAhKGN1cnJlbnQgYXMgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+KS5lcXVhbHMoXG4gICAgICAgICAgICB2YWx1ZSBhcyBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj4sXG4gICAgICAgICAgKVxuICAgICAgICA6ICFUeXBlcy5pc0VxdWFsKGN1cnJlbnQsIHZhbHVlKTtcbiAgICBpZiAocmVzZXQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoVHlwZXMuaXNFcXVhbCh2YWx1ZSwgdGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5jaGFuZ2UgPSB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSkgfHxcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih2YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMubGluayhcbiAgICAgICAgdmFsdWUgYXMgT0RhdGFNb2RlbDxUPiB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PixcbiAgICAgICAgcmVwYXJlbnQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbiAgfVxuXG4gIGlzQ2hhbmdlZCh7XG4gICAgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UsXG4gIH06IHsgaW5jbHVkZV9uYXZpZ2F0aW9uPzogYm9vbGVhbiB9ID0ge30pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jaGFuZ2UgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgKChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGN1cnJlbnQpIHx8XG4gICAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihjdXJyZW50KSkgJiZcbiAgICAgICAgKFxuICAgICAgICAgIGN1cnJlbnQgYXMgT0RhdGFNb2RlbDxUPiB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PlxuICAgICAgICApLmhhc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb24gfSkpXG4gICAgKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIGlmIChcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodGhpcy5jaGFuZ2UpIHx8XG4gICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odGhpcy5jaGFuZ2UpXG4gICAgKVxuICAgICAgdGhpcy51bmxpbmsoXG4gICAgICAgIHRoaXMuY2hhbmdlIGFzIE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj4sXG4gICAgICApO1xuICAgIHRoaXMuY2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodGhpcy52YWx1ZSkgfHxcbiAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih0aGlzLnZhbHVlKVxuICAgIClcbiAgICAgIHRoaXMubGluayhcbiAgICAgICAgdGhpcy52YWx1ZSBhcyBPRGF0YU1vZGVsPFQ+IHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbGluayhcbiAgICB2YWx1ZTogT0RhdGFNb2RlbDxUPiB8IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PixcbiAgICByZXBhcmVudDogYm9vbGVhbiA9IGZhbHNlLFxuICApIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHZhbHVlLmV2ZW50cyQuc3Vic2NyaWJlKChlKSA9PiB0aGlzLmV2ZW50cyQuZW1pdChlKSk7XG4gICAgaWYgKHJlcGFyZW50KSB7XG4gICAgICB2YWx1ZS5fcGFyZW50ID0gW3RoaXMuX21vZGVsLCB0aGlzLl9maWVsZF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1bmxpbmsoXG4gICAgdmFsdWU6IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj4sXG4gICAgcmVwYXJlbnQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJlcGFyZW50KSB7XG4gICAgICB2YWx1ZS5fcGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbEVudHJ5PFQsIE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PiA9IHtcbiAgc3RhdGU6IE9EYXRhTW9kZWxTdGF0ZTtcbiAgbW9kZWw6IE07XG4gIGtleT86IEVudGl0eUtleTxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG59O1xuXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbE9wdGlvbnM8VD4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNpZDogc3RyaW5nO1xuICBiYXNlPzogc3RyaW5nO1xuICBwcml2YXRlIF9maWVsZHM6IE9EYXRhTW9kZWxGaWVsZDxhbnk+W10gPSBbXTtcbiAgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+O1xuICBlbnRpdHlTZXQ/OiBPRGF0YUVudGl0eVNldDtcbiAgLy8gSGllcmFyY2h5XG4gIHBhcmVudD86IE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gIGNoaWxkcmVuOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgb3B0aW9ucyxcbiAgICBzY2hlbWEsXG4gIH06IHtcbiAgICBvcHRpb25zOiBNb2RlbE9wdGlvbnM7XG4gICAgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+O1xuICB9KSB7XG4gICAgdGhpcy5uYW1lID0gc2NoZW1hLm5hbWU7XG4gICAgdGhpcy5iYXNlID0gc2NoZW1hLmJhc2U7XG4gICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XG4gICAgdGhpcy5jaWQgPSBvcHRpb25zPy5jaWQgfHwgQ0lEX0ZJRUxEX05BTUU7XG4gICAgb3B0aW9ucy5maWVsZHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gdGhpcy5hZGRGaWVsZDxhbnk+KGtleSwgdmFsdWUpKTtcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLmFwaTtcbiAgfVxuXG4gIHR5cGUoeyBhbGlhcyA9IGZhbHNlIH06IHsgYWxpYXM/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlKHsgYWxpYXMgfSk7XG4gIH1cblxuICBpc09wZW5UeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS5pc09wZW5UeXBlKCk7XG4gIH1cblxuICBpc0VudGl0eVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLmlzRW50aXR5VHlwZSgpO1xuICB9XG5cbiAgaXNDb21wbGV4VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEuaXNDb21wbGV4VHlwZSgpO1xuICB9XG5cbiAgaXNUeXBlT2YodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hLmlzVHlwZU9mKHR5cGUpO1xuICB9XG5cbiAgaXNNb2RlbEZvcihlbnRpdHk6IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIC8vIFJlc29sdmUgQnkgVHlwZVxuICAgIGxldCB0eXBlID0gdGhpcy5hcGkub3B0aW9ucy5oZWxwZXIudHlwZShlbnRpdHkgYXMgeyBbbmFtZTogc3RyaW5nXTogYW55IH0pO1xuICAgIGlmICh0eXBlICYmIHRoaXMuaXNUeXBlT2YodHlwZSkpIHJldHVybiB0cnVlO1xuICAgIC8vIFJlc29sdmUgQnkgZmllbGRzXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkgYXMgeyBbbmFtZTogc3RyaW5nXTogYW55IH0pO1xuICAgIGxldCBuYW1lcyA9IHRoaXMuZmllbGRzKHtcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICB9KS5tYXAoKGYpID0+IGYubmFtZSk7XG4gICAgcmV0dXJuIGtleXMuZXZlcnkoKGtleSkgPT4gbmFtZXMuaW5jbHVkZXMoa2V5KSk7XG4gIH1cblxuICBmaW5kQ2hpbGRPcHRpb25zKFxuICAgIHByZWRpY2F0ZTogKG9wdGlvbnM6IE9EYXRhTW9kZWxPcHRpb25zPGFueT4pID0+IGJvb2xlYW4sXG4gICk6IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGlmIChwcmVkaWNhdGUodGhpcykpIHJldHVybiB0aGlzO1xuICAgIGxldCBtYXRjaDogT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBjaCBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBtYXRjaCA9IGNoLmZpbmRDaGlsZE9wdGlvbnMocHJlZGljYXRlKTtcbiAgICAgIGlmIChtYXRjaCAhPT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9XG5cbiAgY29uZmlndXJlKHtcbiAgICBvcHRpb25zLFxuICAgIHBhcnNlckZvclR5cGUsXG4gICAgZmluZE9wdGlvbnNGb3JUeXBlLFxuICB9OiB7XG4gICAgb3B0aW9uczogUGFyc2VyT3B0aW9ucztcbiAgICBwYXJzZXJGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiBQYXJzZXI8YW55PjtcbiAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ7XG4gIH0pIHtcbiAgICBpZiAodGhpcy5iYXNlKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBmaW5kT3B0aW9uc0ZvclR5cGUodGhpcy5iYXNlKSBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2godGhpcyk7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdGhpcy5lbnRpdHlTZXQgPSB0aGlzLmFwaS5maW5kRW50aXR5U2V0Rm9yRW50aXR5VHlwZSh0aGlzLnR5cGUoKSk7XG4gICAgbGV0IGNvbmN1cnJlbmN5RmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLmVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25jdXJyZW5jeUZpZWxkcyA9XG4gICAgICAgIHRoaXMuZW50aXR5U2V0LmFubm90YXRlZFZhbHVlPHN0cmluZ1tdPihPUFRJTUlTVElDX0NPTkNVUlJFTkNZKSB8fCBbXTtcbiAgICB9XG4gICAgdGhpcy5fZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBsZXQgY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeUZpZWxkcy5pbmRleE9mKGZpZWxkLmZpZWxkKSAhPT0gLTE7XG4gICAgICBmaWVsZC5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGUsXG4gICAgICAgIGNvbmN1cnJlbmN5LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmaWVsZHMoe1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbixcbiAgICBpbmNsdWRlX3BhcmVudHMsXG4gIH06IHtcbiAgICBpbmNsdWRlX3BhcmVudHM6IGJvb2xlYW47XG4gICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiBib29sZWFuO1xuICB9KTogT0RhdGFNb2RlbEZpZWxkPGFueT5bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLihpbmNsdWRlX3BhcmVudHMgJiYgdGhpcy5wYXJlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMucGFyZW50LmZpZWxkcyh7IGluY2x1ZGVfbmF2aWdhdGlvbiwgaW5jbHVkZV9wYXJlbnRzIH0pXG4gICAgICAgIDogW10pLFxuICAgICAgLi4udGhpcy5fZmllbGRzLmZpbHRlcihcbiAgICAgICAgKGZpZWxkKSA9PiBpbmNsdWRlX25hdmlnYXRpb24gfHwgIWZpZWxkLm5hdmlnYXRpb24sXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICBmaWVsZDxGPihuYW1lOiBrZXlvZiBUIHwgc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gdGhpcy5maW5kRmllbGQ8Rj4obmFtZSk7XG4gICAgLy9UaHJvdyBlcnJvciBpZiBub3QgZm91bmRcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZmllbGQgd2l0aCBuYW1lICR7bmFtZSBhcyBzdHJpbmd9YCk7XG4gICAgcmV0dXJuIGZpZWxkIGFzIE9EYXRhTW9kZWxGaWVsZDxGPjtcbiAgfVxuXG4gIGZpbmRGaWVsZDxGPihuYW1lOiBrZXlvZiBUIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzKHtcbiAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogdHJ1ZSxcbiAgICB9KS5maW5kKFxuICAgICAgKG1vZGVsRmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPikgPT5cbiAgICAgICAgbW9kZWxGaWVsZC5uYW1lID09PSBuYW1lIHx8IG1vZGVsRmllbGQuZmllbGQgPT09IG5hbWUsXG4gICAgKSBhcyBPRGF0YU1vZGVsRmllbGQ8Rj4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBhZGRGaWVsZDxGPihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGVsRmllbGRPcHRpb25zKSB7XG4gICAgY29uc3QgeyBmaWVsZCwgcGFyc2VyLCAuLi5vcHRzIH0gPSBvcHRpb25zO1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8IG5hbWUgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgUHJvcGVydGllcyBuZWVkIG5hbWUgYW5kIGZpZWxkJyk7XG4gICAgY29uc3QgZmllbGRQYXJzZXIgPSBwYXJzZXIgPz8gdGhpcy5zY2hlbWEuZmllbGQ8Rj4oZmllbGQgYXMga2V5b2YgVCk7XG4gICAgaWYgKGZpZWxkUGFyc2VyID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHBhcnNlciBmb3IgJHtmaWVsZH0gd2l0aCBuYW1lID0gJHtuYW1lfWApO1xuICAgIGNvbnN0IG1vZGVsRmllbGQgPSBuZXcgT0RhdGFNb2RlbEZpZWxkPEY+KHRoaXMsIHtcbiAgICAgIG5hbWUsXG4gICAgICBmaWVsZCxcbiAgICAgIHBhcnNlcjogZmllbGRQYXJzZXIsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuICAgIHRoaXMuX2ZpZWxkcy5wdXNoKG1vZGVsRmllbGQpO1xuICAgIHJldHVybiBtb2RlbEZpZWxkO1xuICB9XG5cbiAgdHNUb0VkbTogUmVjb3JkPHN0cmluZywgRWRtVHlwZT4gPSB7XG4gICAgc3RyaW5nOiBFZG1UeXBlLlN0cmluZyxcbiAgICBudW1iZXI6IEVkbVR5cGUuSW50MzIsXG4gICAgYmlnaW50OiBFZG1UeXBlLkludDY0LFxuICAgIGJvb2xlYW46IEVkbVR5cGUuQm9vbGVhbixcbiAgfTtcbiAgcHJpdmF0ZSBtb2RlbEZpZWxkRmFjdG9yeTxGPihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcgfCBFZG1UeXBlLFxuICApIHtcbiAgICBjb25zdCBzdHJ1Y3R1cmVkRmllbGRQYXJzZXIgPSB0aGlzLnNjaGVtYS5hZGRGaWVsZDxGPihuYW1lLCB7IHR5cGUgfSk7XG4gICAgc3RydWN0dXJlZEZpZWxkUGFyc2VyLmNvbmZpZ3VyZSh7XG4gICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuYXBpLmZpbmRPcHRpb25zRm9yVHlwZSh0eXBlKSxcbiAgICAgIHBhcnNlckZvclR5cGU6ICh0eXBlOiBzdHJpbmcgfCBFZG1UeXBlKSA9PiB0aGlzLmFwaS5wYXJzZXJGb3JUeXBlKHR5cGUpLFxuICAgICAgb3B0aW9uczogdGhpcy5hcGkub3B0aW9ucyxcbiAgICB9KTtcbiAgICBjb25zdCBtb2RlbEZpZWxkID0gdGhpcy5hZGRGaWVsZDxGPihuYW1lLCB7XG4gICAgICBmaWVsZDogbmFtZSxcbiAgICAgIHBhcnNlcjogc3RydWN0dXJlZEZpZWxkUGFyc2VyLFxuICAgIH0pO1xuICAgIG1vZGVsRmllbGQuY29uZmlndXJlKHtcbiAgICAgIGZpbmRPcHRpb25zRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gdGhpcy5hcGkuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgb3B0aW9uczogdGhpcy5hcGkub3B0aW9ucyxcbiAgICAgIGNvbmN1cnJlbmN5OiBmYWxzZSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgbW9kZWxGaWVsZC5uYW1lLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6ICgpID0+IHRoaXMuZ2V0KHNlbGYsIG1vZGVsRmllbGQgYXMgT0RhdGFNb2RlbEZpZWxkPGFueT4pLFxuICAgICAgc2V0OiAodmFsdWU6IGFueSkgPT5cbiAgICAgICAgdGhpcy5zZXQoc2VsZiwgbW9kZWxGaWVsZCBhcyBPRGF0YU1vZGVsRmllbGQ8YW55PiwgdmFsdWUpLFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbEZpZWxkO1xuICB9XG5cbiAgYXR0YWNoKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgcmVzb3VyY2U6XG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPixcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgc2VsZi5fcmVzb3VyY2UgIT09IG51bGwgJiZcbiAgICAgIHJlc291cmNlLnR5cGUoKSAhPT0gc2VsZi5fcmVzb3VyY2UudHlwZSgpICYmXG4gICAgICAhc2VsZi5fcmVzb3VyY2UuaXNTdWJ0eXBlT2YocmVzb3VyY2UpXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FuJ3QgYXR0YWNoICR7cmVzb3VyY2UudHlwZSgpfSB0byAke3NlbGYuX3Jlc291cmNlLnR5cGUoKX1gLFxuICAgICAgKTtcblxuICAgIGNvbnN0IGN1cnJlbnQgPSBzZWxmLl9yZXNvdXJjZTtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCAhY3VycmVudC5pc0VxdWFsVG8ocmVzb3VyY2UpKSB7XG4gICAgICBzZWxmLl9yZXNvdXJjZSA9IHJlc291cmNlO1xuICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoT0RhdGFNb2RlbEV2ZW50VHlwZS5BdHRhY2gsIHtcbiAgICAgICAgICBtb2RlbDogc2VsZixcbiAgICAgICAgICBwcmV2aW91czogY3VycmVudCxcbiAgICAgICAgICB2YWx1ZTogcmVzb3VyY2UsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyMgcmVnaW9uIFJlc291cmNlXG4gIHN0YXRpYyBjaGFpbihcbiAgICBjaGlsZDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgKTogW1xuICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsLFxuICBdW10ge1xuICAgIGNvbnN0IGNoYWluID0gW10gYXMgYW55W107XG4gICAgbGV0IHR1cGxlOlxuICAgICAgfCBbXG4gICAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGwsXG4gICAgICAgIF1cbiAgICAgIHwgbnVsbCA9IFtjaGlsZCwgbnVsbF07XG4gICAgd2hpbGUgKHR1cGxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0dXBsZSBhcyBbXG4gICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgIE9EYXRhTW9kZWxGaWVsZDxhbnk+IHwgbnVsbCxcbiAgICAgIF07XG4gICAgICBpZiAoY2hhaW4uc29tZSgocCkgPT4gcFswXSA9PT0gcGFyZW50WzBdKSkgYnJlYWs7XG4gICAgICBjaGFpbi5zcGxpY2UoMCwgMCwgcGFyZW50KTtcbiAgICAgIHR1cGxlID0gdHVwbGVbMF0uX3BhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGNoYWluO1xuICB9XG5cbiAgc3RhdGljIHJlc291cmNlPFQ+KFxuICAgIGNoaWxkOiBPRGF0YU1vZGVsPFQ+IHwgT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+LFxuICApOiBPRGF0YVJlc291cmNlPFQ+IHtcbiAgICBsZXQgcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8YW55PiB8IG51bGwgPSBudWxsO1xuICAgIGxldCBwcmV2RmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChsZXQgW21vZGVsLCBmaWVsZF0gb2YgT0RhdGFNb2RlbE9wdGlvbnMuY2hhaW4oY2hpbGQpKSB7XG4gICAgICByZXNvdXJjZSA9IHJlc291cmNlIHx8IChtb2RlbC5fcmVzb3VyY2UgYXMgT0RhdGFSZXNvdXJjZTxUPik7XG4gICAgICBpZiAocmVzb3VyY2UgPT09IG51bGwpIGJyZWFrO1xuICAgICAgaWYgKFxuICAgICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKG1vZGVsKSAmJlxuICAgICAgICAocHJldkZpZWxkID09PSBudWxsIHx8IHByZXZGaWVsZC5jb2xsZWN0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFJlc29sdmUga2V5XG4gICAgICAgIGxldCBtb2RlbEtleSA9IChtb2RlbCBhcyBPRGF0YU1vZGVsPGFueT4pLmtleSh7XG4gICAgICAgICAgZmllbGRfbWFwcGluZzogdHJ1ZSxcbiAgICAgICAgfSkgYXMgRW50aXR5S2V5PGFueT47XG4gICAgICAgIGlmIChtb2RlbEtleSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHJlc291cmNlID1cbiAgICAgICAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZVxuICAgICAgICAgICAgICA/IHJlc291cmNlLmVudGl0eShtb2RlbEtleSlcbiAgICAgICAgICAgICAgOiAocmVzb3VyY2UgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPikua2V5KG1vZGVsS2V5KTtcbiAgICAgIH1cbiAgICAgIHByZXZGaWVsZCA9IGZpZWxkO1xuICAgICAgaWYgKGZpZWxkID09PSBudWxsKSB7XG4gICAgICAgIC8vIEFwcGx5IHRoZSBxdWVyeSBmcm9tIG1vZGVsIHRvIG5ldyByZXNvdXJjZVxuICAgICAgICBjb25zdCBxdWVyeSA9IG1vZGVsLl9yZXNvdXJjZT8uY2xvbmVRdWVyeTxUPigpLnRvUXVlcnlBcmd1bWVudHMoKTtcbiAgICAgICAgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHJlc291cmNlLnF1ZXJ5KChxKSA9PiBxLmFwcGx5KHF1ZXJ5KSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzb3VyY2UgPSBmaWVsZC5yZXNvdXJjZUZhY3Rvcnk8YW55LCBhbnk+KHJlc291cmNlKTtcbiAgICB9XG4gICAgaWYgKHJlc291cmNlID09PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXNvdXJjZTogQ2FuJ3QgYnVpbGQgcmVzb3VyY2UgZm9yICR7Y2hpbGR9YCk7XG4gICAgcmV0dXJuIHJlc291cmNlO1xuICB9XG5cbiAgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcbiAgICBxdWVyeT86IE9EYXRhUXVlcnlPcHRpb25zPFQ+LFxuICApOlxuICAgIHwgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmVudGl0eVNldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBPRGF0YUVudGl0eVNldFJlc291cmNlLmZhY3Rvcnk8VD4odGhpcy5hcGksIHtcbiAgICAgIHBhdGg6IHRoaXMuZW50aXR5U2V0Lm5hbWUsXG4gICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgcXVlcnksXG4gICAgfSk7XG4gIH1cblxuICBtb2RlbFJlc291cmNlRmFjdG9yeShcbiAgICBxdWVyeT86IE9EYXRhUXVlcnlPcHRpb25zPFQ+LFxuICApOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+XG4gICAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KHF1ZXJ5KTtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVNldFJlc291cmNlKSByZXR1cm4gcmVzb3VyY2UuZW50aXR5KCk7XG4gICAgcmV0dXJuIHJlc291cmNlIGFzXG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPlxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBlbnRpdHlSZXNvdXJjZShzZWxmOiBPRGF0YU1vZGVsPFQ+KTogT0RhdGFSZXNvdXJjZTxUPiB7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5tb2RlbFJlc291cmNlRmFjdG9yeShcbiAgICAgIHNlbGYuX3Jlc291cmNlICE9PSBudWxsID8gc2VsZi5fcmVzb3VyY2UuY2xvbmVRdWVyeSgpIDogdW5kZWZpbmVkLFxuICAgICk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGVudGl0eVJlc291cmNlOiBDYW4ndCBidWlsZCByZXNvdXJjZSBmb3IgJHtzZWxmfWApO1xuICAgIGNvbnN0IGtleSA9IHNlbGYua2V5KHsgZmllbGRfbWFwcGluZzogdHJ1ZSB9KSBhcyBFbnRpdHlLZXk8VD47XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzb3VyY2Uua2V5KGtleSk7XG4gICAgcmV0dXJuIHJlc291cmNlIGFzIE9EYXRhUmVzb3VyY2U8VD47XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgYmluZChcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHtcbiAgICAgIHBhcmVudCxcbiAgICAgIHJlc291cmNlLFxuICAgICAgYW5ub3RzLFxuICAgIH06IHtcbiAgICAgIHBhcmVudD86IFtcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsLFxuICAgICAgXTtcbiAgICAgIHJlc291cmNlPzogT0RhdGFSZXNvdXJjZTxUPjtcbiAgICAgIGFubm90cz86IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8VD47XG4gICAgfSA9IHt9LFxuICApIHtcbiAgICAvLyBQYXJlbnRcbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlbGYuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICAvLyBSZXNvdXJjZVxuICAgIGlmIChzZWxmLl9wYXJlbnQgPT09IG51bGwgJiYgcmVzb3VyY2UgPT09IHVuZGVmaW5lZClcbiAgICAgIHJlc291cmNlID0gdGhpcy5tb2RlbFJlc291cmNlRmFjdG9yeSgpO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmF0dGFjaChcbiAgICAgICAgc2VsZixcbiAgICAgICAgcmVzb3VyY2UgYXNcbiAgICAgICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQW5ub3RhdGlvbnNcbiAgICBzZWxmLl9hbm5vdGF0aW9ucyA9XG4gICAgICBhbm5vdHMgfHwgbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnMoT0RhdGFIZWxwZXJbREVGQVVMVF9WRVJTSU9OXSk7XG5cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcyh7XG4gICAgICBpbmNsdWRlX25hdmlnYXRpb246IHRydWUsXG4gICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgfSk7XG4gICAgZm9yIChsZXQgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgZmllbGQubmFtZSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5nZXQoc2VsZiwgZmllbGQgYXMgT0RhdGFNb2RlbEZpZWxkPGFueT4pLFxuICAgICAgICBzZXQ6ICh2YWx1ZTogYW55KSA9PlxuICAgICAgICAgIHRoaXMuc2V0KHNlbGYsIGZpZWxkIGFzIE9EYXRhTW9kZWxGaWVsZDxhbnk+LCB2YWx1ZSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBxdWVyeShcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHJlc291cmNlOlxuICAgICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD4sXG4gICAgZnVuYzogKHE6IE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPiwgcz86IE9EYXRhU3RydWN0dXJlZFR5cGU8VD4pID0+IHZvaWQsXG4gICkge1xuICAgIHJlc291cmNlLnF1ZXJ5KGZ1bmMpO1xuICAgIHRoaXMuYXR0YWNoKHNlbGYsIHJlc291cmNlKTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIHJlc29sdmVLZXkoXG4gICAgdmFsdWU6IE9EYXRhTW9kZWw8VD4gfCBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAge1xuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgICAgcmVzb2x2ZSA9IHRydWUsXG4gICAgICBzaW5nbGUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuOyBzaW5nbGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogRW50aXR5S2V5PFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGtleVR5cGVzID0gdGhpcy5zY2hlbWEua2V5cyh7IGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KTtcbiAgICBjb25zdCBrZXkgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIGZvciAobGV0IGt0IG9mIGtleVR5cGVzKSB7XG4gICAgICBsZXQgdiA9IHZhbHVlIGFzIGFueTtcbiAgICAgIGxldCBvcHRpb25zID0gdGhpcyBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICAgICAgbGV0IGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IG5hbWUgb2Yga3QubmFtZS5zcGxpdCgnLycpKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgICBmaWVsZCA9IG9wdGlvbnNcbiAgICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9uYXZpZ2F0aW9uOiBmYWxzZSwgaW5jbHVkZV9wYXJlbnRzOiB0cnVlIH0pXG4gICAgICAgICAgLmZpbmQoKGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PikgPT4gZmllbGQuZmllbGQgPT09IG5hbWUpO1xuICAgICAgICBpZiAoZmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHYgPVxuICAgICAgICAgICAgVHlwZXMuaXNQbGFpbk9iamVjdCh2KSB8fCBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHYpXG4gICAgICAgICAgICAgID8gdltmaWVsZC5uYW1lXVxuICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgb3B0aW9ucyA9IGZpZWxkLm1ldGEgYXMgT0RhdGFNb2RlbE9wdGlvbnM8YW55PjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBsZXQgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyBmaWVsZC5maWVsZCA6IGZpZWxkLm5hbWU7XG4gICAgICBpZiAoa3QuYWxpYXMgIT09IHVuZGVmaW5lZCkgbmFtZSA9IGt0LmFsaWFzO1xuICAgICAga2V5LnNldChuYW1lLCB2KTtcbiAgICB9XG4gICAgaWYgKGtleS5zaXplID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXNvbHZlXG4gICAgICA/IE9iamVjdHMucmVzb2x2ZUtleShrZXksIHsgc2luZ2xlIH0pXG4gICAgICA6IE9iamVjdC5mcm9tRW50cmllcyhrZXkpO1xuICB9XG5cbiAgcmVzb2x2ZVJlZmVyZW50aWFsKFxuICAgIHZhbHVlOiBPRGF0YU1vZGVsPFQ+IHwgVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCxcbiAgICBhdHRyOiBPRGF0YU1vZGVsQXR0cmlidXRlPGFueT4gfCBPRGF0YU1vZGVsRmllbGQ8YW55PixcbiAgICB7XG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICByZXNvbHZlID0gdHJ1ZSxcbiAgICAgIHNpbmdsZSA9IGZhbHNlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuOyBzaW5nbGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWZlcmVudGlhbCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgZm9yIChsZXQgcmVmIG9mIGF0dHIucmVmZXJlbnRpYWxzKSB7XG4gICAgICBsZXQgZnJvbSA9IHRoaXMuZmllbGRzKHtcbiAgICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgICAgfSkuZmluZCgocDogYW55KSA9PiBwLmZpZWxkID09PSByZWYucmVmZXJlbmNlZFByb3BlcnR5KTtcbiAgICAgIGxldCB0byA9IGF0dHIub3B0aW9uc1xuICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9uYXZpZ2F0aW9uOiBmYWxzZSwgaW5jbHVkZV9wYXJlbnRzOiB0cnVlIH0pXG4gICAgICAgIC5maW5kKChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+IGZpZWxkLmZpZWxkID09PSByZWYucHJvcGVydHkpO1xuICAgICAgaWYgKGZyb20gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBuYW1lID0gZmllbGRfbWFwcGluZyA/IHRvLmZpZWxkIDogdG8ubmFtZTtcbiAgICAgICAgcmVmZXJlbnRpYWwuc2V0KG5hbWUsIHZhbHVlICYmICh2YWx1ZSBhcyBhbnkpW2Zyb20ubmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVmZXJlbnRpYWwuc2l6ZSA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAocmVmZXJlbnRpYWwuc2l6ZSA9PT0gMSAmJiBBcnJheS5mcm9tKHJlZmVyZW50aWFsLnZhbHVlcygpKVswXSA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiByZXNvbHZlXG4gICAgICA/IE9iamVjdHMucmVzb2x2ZUtleShyZWZlcmVudGlhbCwgeyBzaW5nbGUgfSlcbiAgICAgIDogT2JqZWN0LmZyb21FbnRyaWVzKHJlZmVyZW50aWFsKTtcbiAgfVxuXG4gIHJlc29sdmVSZWZlcmVuY2VkKFxuICAgIHZhbHVlOiBPRGF0YU1vZGVsPFQ+IHwgVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCxcbiAgICBhdHRyOiBPRGF0YU1vZGVsQXR0cmlidXRlPGFueT4gfCBPRGF0YU1vZGVsRmllbGQ8YW55PixcbiAgICB7XG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICByZXNvbHZlID0gdHJ1ZSxcbiAgICAgIHNpbmdsZSA9IGZhbHNlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuOyBzaW5nbGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWZlcmVuY2VkID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICBmb3IgKGxldCByZWYgb2YgYXR0ci5yZWZlcmVudGlhbHMpIHtcbiAgICAgIGxldCBmcm9tID0gdGhpcy5maWVsZHMoe1xuICAgICAgICBpbmNsdWRlX25hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgICB9KS5maW5kKChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+IGZpZWxkLmZpZWxkID09PSByZWYucHJvcGVydHkpO1xuICAgICAgbGV0IHRvID0gKGF0dHIubWV0YSBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+KVxuICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9uYXZpZ2F0aW9uOiBmYWxzZSwgaW5jbHVkZV9wYXJlbnRzOiB0cnVlIH0pXG4gICAgICAgIC5maW5kKFxuICAgICAgICAgIChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+XG4gICAgICAgICAgICBmaWVsZC5maWVsZCA9PT0gcmVmLnJlZmVyZW5jZWRQcm9wZXJ0eSxcbiAgICAgICAgKTtcbiAgICAgIGlmIChmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyB0by5maWVsZCA6IHRvLm5hbWU7XG4gICAgICAgIHJlZmVyZW5jZWQuc2V0KG5hbWUsIHZhbHVlICYmICh2YWx1ZSBhcyBhbnkpW2Zyb20ubmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVmZXJlbmNlZC5zaXplID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChyZWZlcmVuY2VkLnNpemUgPT09IDEgJiYgQXJyYXkuZnJvbShyZWZlcmVuY2VkLnZhbHVlcygpKVswXSA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiByZXNvbHZlXG4gICAgICA/IE9iamVjdHMucmVzb2x2ZUtleShyZWZlcmVuY2VkLCB7IHNpbmdsZSB9KVxuICAgICAgOiBPYmplY3QuZnJvbUVudHJpZXMocmVmZXJlbmNlZCk7XG4gIH1cblxuICB2YWxpZGF0ZShcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIG5hdmlnYXRpb24gPSBmYWxzZSxcbiAgICB9OiB7XG4gICAgICBtZXRob2Q/OiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgJ21vZGlmeSc7XG4gICAgICBuYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ1tdIH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZmllbGRzKHtcbiAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogbmF2aWdhdGlvbixcbiAgICB9KS5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IChzZWxmIGFzIGFueSlbZmllbGQubmFtZV07XG4gICAgICBsZXQgZXJycyA9IGZpZWxkLnZhbGlkYXRlKHZhbHVlLCB7IG1ldGhvZCB9KTtcbiAgICAgIHJldHVybiBlcnJzICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKGFjYywgeyBbZmllbGQubmFtZV06IGVycnMgfSlcbiAgICAgICAgOiBhY2M7XG4gICAgfSwge30pO1xuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eShlcnJvcnMpID8gZXJyb3JzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZGVmYXVsdHMoKTogVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkZWZzID0gdGhpcy5maWVsZHMoe1xuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICB9KS5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGZpZWxkLmRlZmF1bHRzKCk7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtmaWVsZC5uYW1lXTogdmFsdWUgfSlcbiAgICAgICAgOiBhY2M7XG4gICAgfSwge30pO1xuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eShkZWZzKSA/IGRlZnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBoYXNDaGFuZ2VkKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgeyBpbmNsdWRlX25hdmlnYXRpb24gPSBmYWxzZSB9OiB7IGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gWy4uLnNlbGYuX2F0dHJpYnV0ZXMudmFsdWVzKCldXG4gICAgICAuZmlsdGVyKChhdHRyKSA9PiAhYXR0ci5uYXZpZ2F0aW9uIHx8IGluY2x1ZGVfbmF2aWdhdGlvbilcbiAgICAgIC5zb21lKFxuICAgICAgICAoYXR0cikgPT5cbiAgICAgICAgICAoIWluY2x1ZGVfbmF2aWdhdGlvbiB8fCBhdHRyLm5hdmlnYXRpb24pICYmXG4gICAgICAgICAgYXR0ci5pc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb24gfSksXG4gICAgICApO1xuICB9XG5cbiAgaGFzS2V5KHNlbGY6IE9EYXRhTW9kZWw8VD4pIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlS2V5KHNlbGYpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICB3aXRoUmVzb3VyY2U8UiwgTSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIHNlbGY6IE0sXG4gICAgcmVzb3VyY2U6XG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPixcbiAgICBjdHg6IChtb2RlbDogTSkgPT4gUixcbiAgKTogUiB7XG4gICAgLy8gUHVzaFxuICAgIHNlbGYucHVzaFJlc291cmNlKHJlc291cmNlKTtcbiAgICAvLyBFeGVjdXRlIGZ1bmN0aW9uXG4gICAgY29uc3QgcmVzdWx0ID0gY3R4KHNlbGYpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICByZXR1cm4gKHJlc3VsdCBhcyBhbnkpLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAvLyBQb3BcbiAgICAgICAgICBzZWxmLnBvcFJlc291cmNlKCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUG9wXG4gICAgICBzZWxmLnBvcFJlc291cmNlKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBhc0VudGl0eTxSLCBNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPj4oc2VsZjogTSwgY3R4OiAobW9kZWw6IE0pID0+IFIpOiBSIHtcbiAgICAvLyBCdWlsZCBuZXcgcmVzb3VyY2VcbiAgICBjb25zdCBxdWVyeSA9IHNlbGYuX3Jlc291cmNlPy5jbG9uZVF1ZXJ5PFQ+KCk7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5tb2RlbFJlc291cmNlRmFjdG9yeShxdWVyeSk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIGRvZXMgbm90IGhhdmUgYXNzb2NpYXRlZCBFbnRpdHkgZW5kcG9pbnQnKTtcbiAgICByZXR1cm4gdGhpcy53aXRoUmVzb3VyY2Uoc2VsZiwgcmVzb3VyY2UsIGN0eCk7XG4gIH1cblxuICB0b0VudGl0eShcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHtcbiAgICAgIGNsaWVudF9pZCA9IGZhbHNlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2tleSA9IHRydWUsXG4gICAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgICAgY2hhbmdlc19vbmx5ID0gZmFsc2UsXG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICBjaGFpbiA9IFtdLFxuICAgIH06IHtcbiAgICAgIGNsaWVudF9pZD86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeT86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX2NvbXB1dGVkPzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfa2V5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkPzogYm9vbGVhbjtcbiAgICAgIGNoYW5nZXNfb25seT86IGJvb2xlYW47XG4gICAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgICAgIGNoYWluPzogKE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pW107XG4gICAgfSA9IHt9LFxuICApOiBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGxldCBlbnRpdHk6IGFueSA9IFsuLi5zZWxmLl9hdHRyaWJ1dGVzLnZhbHVlcygpXVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgLy8gQ2hhaW5cbiAgICAgICAgKGF0dHIpID0+IGNoYWluLmV2ZXJ5KChjKSA9PiBjICE9PSBhdHRyLmdldCgpKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIC8vIENoYW5nZXMgb25seVxuICAgICAgICAoYXR0cikgPT5cbiAgICAgICAgICAhY2hhbmdlc19vbmx5IHx8XG4gICAgICAgICAgKGNoYW5nZXNfb25seSAmJiBhdHRyLmlzQ2hhbmdlZCh7IGluY2x1ZGVfbmF2aWdhdGlvbiB9KSksXG4gICAgICApXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoYXR0cikgPT5cbiAgICAgICAgICAvLyBOYXZpZ2F0aW9uXG4gICAgICAgICAgKGluY2x1ZGVfbmF2aWdhdGlvbiAmJiBhdHRyLm5hdmlnYXRpb24gJiYgYXR0ci5nZXQoKSAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAhYXR0ci5uYXZpZ2F0aW9uLFxuICAgICAgKVxuICAgICAgLnJlZHVjZSgoYWNjLCBhdHRyKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWVsZF9tYXBwaW5nID8gYXR0ci5maWVsZE5hbWUgOiBhdHRyLm5hbWU7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gYXR0ci5nZXQoKTtcbiAgICAgICAgY29uc3QgY29tcHV0ZWQgPSBhdHRyLmNvbXB1dGVkO1xuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uID0gYXR0ci5uYXZpZ2F0aW9uO1xuICAgICAgICBjb25zdCBjb25jdXJyZW5jeSA9IGF0dHIuY29uY3VycmVuY3k7XG4gICAgICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gKHZhbHVlIGFzIE9EYXRhTW9kZWw8YW55PikudG9FbnRpdHkoe1xuICAgICAgICAgICAgY2xpZW50X2lkLFxuICAgICAgICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uLFxuICAgICAgICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeSxcbiAgICAgICAgICAgIGluY2x1ZGVfY29tcHV0ZWQsXG4gICAgICAgICAgICBpbmNsdWRlX25vbl9maWVsZCxcbiAgICAgICAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgICAgICAgICBjaGFuZ2VzX29ubHk6IGNoYW5nZXNfb25seSAmJiAhIW5hdmlnYXRpb24sXG4gICAgICAgICAgICBpbmNsdWRlX2tleTogaW5jbHVkZV9rZXkgJiYgISFuYXZpZ2F0aW9uLFxuICAgICAgICAgICAgY2hhaW46IFtzZWxmLCAuLi5jaGFpbl0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gKHZhbHVlIGFzIE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pLnRvRW50aXRpZXMoe1xuICAgICAgICAgICAgY2xpZW50X2lkLFxuICAgICAgICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uLFxuICAgICAgICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeSxcbiAgICAgICAgICAgIGluY2x1ZGVfY29tcHV0ZWQsXG4gICAgICAgICAgICBpbmNsdWRlX25vbl9maWVsZCxcbiAgICAgICAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgICAgICAgICBjaGFuZ2VzX29ubHk6IGNoYW5nZXNfb25seSAmJiAhIW5hdmlnYXRpb24sXG4gICAgICAgICAgICBpbmNsdWRlX2tleTogaW5jbHVkZV9rZXkgJiYgISFuYXZpZ2F0aW9uLFxuICAgICAgICAgICAgY2hhaW46IFtzZWxmLCAuLi5jaGFpbl0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVfY29uY3VycmVuY3kgJiYgY29uY3VycmVuY3kpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmNsdWRlX2NvbXB1dGVkICYmIGNvbXB1dGVkKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlc19vbmx5ICYmIGF0dHIuaXNDaGFuZ2VkKCkpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICghY2hhbmdlc19vbmx5ICYmICFjb25jdXJyZW5jeSAmJiAhY29tcHV0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuXG4gICAgaWYgKGluY2x1ZGVfbm9uX2ZpZWxkKSB7XG4gICAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGVudGl0eSk7XG4gICAgICAvLyBBdHRyaWJ1dGVzIGZyb20gb2JqZWN0IChhdHRyaWJ1dGVzIGZvciBvYmplY3QpXG4gICAgICBjb25zdCBub25GaWVsZEF0dHJzID0gT2JqZWN0LmVudHJpZXMoc2VsZilcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoW2tdKSA9PlxuICAgICAgICAgICAgbmFtZXMuaW5kZXhPZihrKSA9PT0gLTEgJiYgIWsuc3RhcnRzV2l0aCgnXycpICYmICFrLmVuZHNXaXRoKCckJyksXG4gICAgICAgIClcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBbaywgdl0pID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrXTogdiB9KSwge30pO1xuICAgICAgZW50aXR5ID0geyAuLi5lbnRpdHksIC4uLm5vbkZpZWxkQXR0cnMgfTtcbiAgICB9XG5cbiAgICAvLyBBZGQgY2xpZW50X2lkXG4gICAgaWYgKGNsaWVudF9pZCkge1xuICAgICAgKDxhbnk+ZW50aXR5KVt0aGlzLmNpZF0gPSAoPGFueT5zZWxmKVt0aGlzLmNpZF07XG4gICAgfVxuXG4gICAgLy8gQWRkIGtleVxuICAgIGlmIChpbmNsdWRlX2tleSkge1xuICAgICAgZW50aXR5ID0ge1xuICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgIC4uLih0aGlzLnJlc29sdmVLZXkoc2VsZiwgeyBmaWVsZF9tYXBwaW5nLCByZXNvbHZlOiBmYWxzZSB9KSBhcyB7fSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCB0eXBlXG4gICAgaWYgKFxuICAgICAgc2VsZi5fcGFyZW50ICE9PSBudWxsICYmXG4gICAgICAoKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwoc2VsZi5fcGFyZW50WzBdKSAmJlxuICAgICAgICAoc2VsZi5fcGFyZW50WzFdIGFzIE9EYXRhTW9kZWxGaWVsZDxhbnk+KS5tZXRhICE9PSBzZWxmLl9tZXRhKSB8fFxuICAgICAgICAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHNlbGYuX3BhcmVudFswXSkgJiZcbiAgICAgICAgICAoc2VsZi5fcGFyZW50WzBdIGFzIE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pLl9tb2RlbFxuICAgICAgICAgICAgLm1ldGEgIT09IHNlbGYuX21ldGEpKVxuICAgICkge1xuICAgICAgZW50aXR5W3RoaXMuYXBpLm9wdGlvbnMuaGVscGVyLk9EQVRBX1RZUEVdID0gYCMke3RoaXMuc2NoZW1hLnR5cGUoKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHkgYXMgVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICB9XG5cbiAgcmVzZXQoXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICB7IG5hbWUsIHNpbGVudCA9IGZhbHNlIH06IHsgbmFtZT86IHN0cmluZzsgc2lsZW50PzogYm9vbGVhbiB9ID0ge30sXG4gICkge1xuICAgIGxldCBjaGFuZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFJlc2V0IHZhbHVlXG4gICAgICBjb25zdCBhdHRyaWJ1dGUgPSBzZWxmLl9hdHRyaWJ1dGVzLmdldChuYW1lKTtcbiAgICAgIGlmIChcbiAgICAgICAgYXR0cmlidXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYXR0cmlidXRlLmlzQ2hhbmdlZCh7IGluY2x1ZGVfbmF2aWdhdGlvbjogdHJ1ZSB9KVxuICAgICAgKSB7XG4gICAgICAgIGF0dHJpYnV0ZS5yZXNldCgpO1xuICAgICAgICBjaGFuZ2VzID0gW25hbWVdO1xuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGU/LmlzQ2hhbmdlZCgpKSB7XG4gICAgICAgIGF0dHJpYnV0ZS5yZXNldCgpO1xuICAgICAgICBjaGFuZ2VzID0gW25hbWVdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCBhbGxcbiAgICAgIGNoYW5nZXMgPSBbLi4uc2VsZi5fYXR0cmlidXRlcy5rZXlzKCldO1xuICAgICAgLy9zZWxmLl9jaGFuZ2VzLmNsZWFyKCk7XG4gICAgICBzZWxmLl9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIsIGtleSkgPT4ge1xuICAgICAgICBpZiAoYXR0ci5pc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb246IHRydWUgfSkpIHtcbiAgICAgICAgICBhdHRyLnJlc2V0KCk7XG4gICAgICAgICAgY2hhbmdlcy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXNpbGVudCAmJiBjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KE9EYXRhTW9kZWxFdmVudFR5cGUuUmVzZXQsIHtcbiAgICAgICAgICBtb2RlbDogc2VsZixcbiAgICAgICAgICBvcHRpb25zOiB7IGNoYW5nZXMgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzc2lnbihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIGVudGl0eTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICAgIHtcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgcmVzZXQ/OiBib29sZWFuO1xuICAgICAgcmVwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgc2lsZW50PzogYm9vbGVhbjtcbiAgICB9ID0ge30sXG4gICkge1xuICAgIHNlbGYuX3Jlc2V0ID0gcmVzZXQ7XG4gICAgc2VsZi5fcmVwYXJlbnQgPSByZXBhcmVudDtcbiAgICBzZWxmLl9zaWxlbnQgPSBzaWxlbnQ7XG5cbiAgICBjb25zdCBjaGFuZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQXBwbHkgZW50aXR5XG4gICAgY29uc3QgbW9kZWwgPSBzZWxmIGFzIGFueTtcbiAgICBPYmplY3QuZW50cmllcyhlbnRpdHkpXG4gICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpIC8vIEZpbHRlciB1bmRlZmluZWRcbiAgICAgIC5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcyh7XG4gICAgICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSkuZmluZChcbiAgICAgICAgICAoZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+KSA9PlxuICAgICAgICAgICAgKHNlbGYuX3Jlc2V0ICYmIGZpZWxkLmZpZWxkID09PSBrZXkpIHx8IGZpZWxkLm5hbWUgPT09IGtleSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIERlbGVnYXRlZCB0byBwcml2YXRlIHNldHRlclxuICAgICAgICAgIGlmICh0aGlzLnNldChzZWxmLCBmaWVsZCwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLnB1c2goZmllbGQubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEJhc2ljIGFzc2lnbm1lbnRcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbW9kZWxba2V5XTtcbiAgICAgICAgICBtb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IHZhbHVlKSBjaGFuZ2VzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAoKCFzZWxmLl9zaWxlbnQgJiYgY2hhbmdlcy5sZW5ndGggPiAwKSB8fCBzZWxmLl9yZXNldCkge1xuICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoXG4gICAgICAgICAgc2VsZi5fcmVzZXQgPyBPRGF0YU1vZGVsRXZlbnRUeXBlLlJlc2V0IDogT0RhdGFNb2RlbEV2ZW50VHlwZS5VcGRhdGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgICBvcHRpb25zOiB7IGNoYW5nZXMgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VsZi5fcmVzZXQgPSBmYWxzZTtcbiAgICBzZWxmLl9yZXBhcmVudCA9IGZhbHNlO1xuICAgIHNlbGYuX3NpbGVudCA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzTW9kZWwob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gVHlwZXMucmF3VHlwZShvYmopID09PSAnTW9kZWwnO1xuICB9XG5cbiAgc3RhdGljIGlzQ29sbGVjdGlvbihvYmo6IGFueSkge1xuICAgIHJldHVybiBUeXBlcy5yYXdUeXBlKG9iaikgPT09ICdDb2xsZWN0aW9uJztcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNvbGxlY3Rpb248Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+LFxuICAgIGNvbGxlY3Rpb246IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PixcbiAgICB2YWx1ZTogUGFydGlhbDxUPltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSxcbiAgKSB7XG4gICAgY29sbGVjdGlvbi5fYW5ub3RhdGlvbnMgPSBmaWVsZC5hbm5vdGF0aW9uc0ZhY3RvcnkoXG4gICAgICBzZWxmLmFubm90cygpLFxuICAgICkgYXMgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPEY+O1xuICAgIGNvbGxlY3Rpb24uYXNzaWduKHZhbHVlIGFzIFBhcnRpYWw8VD5bXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10sIHtcbiAgICAgIHJlc2V0OiBzZWxmLl9yZXNldCxcbiAgICAgIHJlcGFyZW50OiBzZWxmLl9yZXBhcmVudCxcbiAgICAgIHNpbGVudDogc2VsZi5fc2lsZW50LFxuICAgIH0pO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmhhc0NoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZU1vZGVsPEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPixcbiAgICBtb2RlbDogT0RhdGFNb2RlbDxGPixcbiAgICB2YWx1ZTogRiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICApIHtcbiAgICBtb2RlbC5fYW5ub3RhdGlvbnMgPSBmaWVsZC5hbm5vdGF0aW9uc0ZhY3RvcnkoXG4gICAgICBzZWxmLmFubm90cygpLFxuICAgICkgYXMgT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxGPjtcbiAgICBtb2RlbC5hc3NpZ24odmFsdWUgYXMgRiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LCB7XG4gICAgICByZXNldDogc2VsZi5fcmVzZXQsXG4gICAgICByZXBhcmVudDogc2VsZi5fcmVwYXJlbnQsXG4gICAgICBzaWxlbnQ6IHNlbGYuX3NpbGVudCxcbiAgICB9KTtcbiAgICByZXR1cm4gbW9kZWwuaGFzQ2hhbmdlZCgpO1xuICB9XG5cbiAgZ2V0PEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPiB8IHN0cmluZyxcbiAgKTogRiB8IE9EYXRhTW9kZWw8Rj4gfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdHRyID0gc2VsZi5fYXR0cmlidXRlcy5nZXQoXG4gICAgICBmaWVsZCBpbnN0YW5jZW9mIE9EYXRhTW9kZWxGaWVsZCA/IGZpZWxkLm5hbWUgOiBmaWVsZCxcbiAgICApO1xuICAgIGlmIChhdHRyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXR0ci5nZXQoKTtcbiAgICAgIGlmIChcbiAgICAgICAgKGF0dHIubmF2aWdhdGlvbiAmJiB2YWx1ZSA9PT0gbnVsbCkgfHxcbiAgICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSlcbiAgICAgICkge1xuICAgICAgICAvLyBDaGVjayBmb3IgcmVmZXJlbmNlXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZWQgPSB0aGlzLnJlc29sdmVSZWZlcmVuY2VkKHNlbGYsIGF0dHIpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcmVmZXJlbmNlZCAhPT0gbnVsbCAmJiByZWZlcmVuY2VkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAodmFsdWUgYXMgT0RhdGFNb2RlbDxGPikuYXNzaWduKHJlZmVyZW5jZWQgYXMgUGFydGlhbDxGPiwge1xuICAgICAgICAgICAgc2lsZW50OiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSBudWxsICYmIHJlZmVyZW5jZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBOZXcgdmFsdWUgaXMgbnVsbFxuICAgICAgICAgIChhdHRyIGFzIE9EYXRhTW9kZWxBdHRyaWJ1dGU8Rj4pLnNldChudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiByZWZlcmVuY2VkICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gTmV3IHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIChhdHRyIGFzIE9EYXRhTW9kZWxBdHRyaWJ1dGU8Rj4pLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVvZiBmaWVsZCA9PT0gJ3N0cmluZycgJiZcbiAgICAgICFmaWVsZC5zdGFydHNXaXRoKCdfJykgJiZcbiAgICAgICFmaWVsZC5lbmRzV2l0aCgnJCcpXG4gICAgKSB7XG4gICAgICByZXR1cm4gKHNlbGYgYXMgYW55KVtmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzZXQ8Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+IHwgc3RyaW5nLFxuICAgIHZhbHVlOlxuICAgICAgfCBGXG4gICAgICB8IEZbXVxuICAgICAgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVxuICAgICAgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdXG4gICAgICB8IE9EYXRhTW9kZWw8Rj5cbiAgICAgIHwgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+XG4gICAgICB8IG51bGwsXG4gICAgeyB0eXBlIH06IHsgdHlwZT86IHN0cmluZyB9ID0ge30sXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBtb2RlbEZpZWxkID1cbiAgICAgIGZpZWxkIGluc3RhbmNlb2YgT0RhdGFNb2RlbEZpZWxkID8gZmllbGQgOiB0aGlzLmZpbmRGaWVsZDxGPihmaWVsZCk7XG4gICAgaWYgKFxuICAgICAgbW9kZWxGaWVsZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmlzT3BlblR5cGUoKSAmJlxuICAgICAgdHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgdHlwZSA9IHR5cGUgPz8gKHRoaXMudHNUb0VkbVt0eXBlb2YgdmFsdWVdIGFzIEVkbVR5cGUpID8/ICcnO1xuICAgICAgbW9kZWxGaWVsZCA9IHRoaXMubW9kZWxGaWVsZEZhY3Rvcnk8Rj4oc2VsZiwgZmllbGQsIHR5cGUpO1xuICAgIH1cbiAgICBpZiAobW9kZWxGaWVsZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWVsZCB3aXRoIG5hbWUgJHtmaWVsZCBhcyBzdHJpbmd9YCk7XG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBhdHRyID0gc2VsZi5fYXR0cmlidXRlcy5nZXQobW9kZWxGaWVsZC5uYW1lKTtcblxuICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgYXR0cmlidXRlIGV4aXN0c1xuICAgIGlmIChhdHRyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGF0dHIgPSBuZXcgT0RhdGFNb2RlbEF0dHJpYnV0ZShzZWxmLCBtb2RlbEZpZWxkKTtcbiAgICAgIHRoaXMuX2xpbmsoc2VsZiwgYXR0cik7XG4gICAgICBzZWxmLl9hdHRyaWJ1dGVzLnNldChtb2RlbEZpZWxkLm5hbWUsIGF0dHIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBhdHRyLmdldCgpO1xuXG4gICAgaWYgKG1vZGVsRmllbGQuaXNTdHJ1Y3R1cmVkVHlwZSgpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV3IHZhbHVlIGlzIG51bGxcbiAgICAgICAgY2hhbmdlZCA9IGF0dHIuc2V0KHZhbHVlIGFzIG51bGwsIHNlbGYuX3Jlc2V0LCBzZWxmLl9yZXBhcmVudCk7XG4gICAgICB9IGVsc2UgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihjdXJyZW50KSkge1xuICAgICAgICAvLyBDdXJyZW50IGlzIGNvbGxlY3Rpb25cbiAgICAgICAgbGV0IGN1cnJlbnRDb2xsZWN0aW9uID0gY3VycmVudCBhcyBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj47XG4gICAgICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgLy8gTmV3IHZhbHVlIGlzIGNvbGxlY3Rpb25cbiAgICAgICAgICBjaGFuZ2VkID0gYXR0ci5zZXQoXG4gICAgICAgICAgICB2YWx1ZSBhcyBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4sXG4gICAgICAgICAgICBzZWxmLl9yZXNldCxcbiAgICAgICAgICAgIHNlbGYuX3JlcGFyZW50LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoVHlwZXMuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBOZXcgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgICBjaGFuZ2VkID0gdGhpcy5fdXBkYXRlQ29sbGVjdGlvbjxGPihcbiAgICAgICAgICAgIHNlbGYsXG4gICAgICAgICAgICBtb2RlbEZpZWxkLFxuICAgICAgICAgICAgY3VycmVudENvbGxlY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZSBhcyBUW10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbChjdXJyZW50KSkge1xuICAgICAgICAvLyBDdXJyZW50IGlzIG1vZGVsXG4gICAgICAgIGxldCBjdXJyZW50TW9kZWwgPSBjdXJyZW50IGFzIE9EYXRhTW9kZWw8Rj47XG4gICAgICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSkge1xuICAgICAgICAgIC8vIE5ldyB2YWx1ZSBpcyBtb2RlbFxuICAgICAgICAgIGNoYW5nZWQgPSBhdHRyLnNldChcbiAgICAgICAgICAgIHZhbHVlIGFzIE9EYXRhTW9kZWw8Rj4sXG4gICAgICAgICAgICBzZWxmLl9yZXNldCxcbiAgICAgICAgICAgIHNlbGYuX3JlcGFyZW50LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoVHlwZXMuaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjaGFuZ2VkID0gdGhpcy5fdXBkYXRlTW9kZWw8Rj4oXG4gICAgICAgICAgICBzZWxmLFxuICAgICAgICAgICAgbW9kZWxGaWVsZCxcbiAgICAgICAgICAgIGN1cnJlbnRNb2RlbCxcbiAgICAgICAgICAgIHZhbHVlIGFzIEYgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDdXJyZW50IGlzIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgbW9kZWwvY29sbGVjdGlvbiBmb3IgZ2l2ZW4gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IGF0dHIuc2V0KFxuICAgICAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih2YWx1ZSkgfHxcbiAgICAgICAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpXG4gICAgICAgICAgICA/ICh2YWx1ZSBhcyBPRGF0YU1vZGVsPEY+IHwgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+KVxuICAgICAgICAgICAgOiBtb2RlbEZpZWxkLmNvbGxlY3Rpb25cbiAgICAgICAgICAgID8gbW9kZWxGaWVsZC5jb2xsZWN0aW9uRmFjdG9yeTxGPih7XG4gICAgICAgICAgICAgICAgcGFyZW50OiBzZWxmLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSBhcyBGW10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLFxuICAgICAgICAgICAgICAgIHJlc2V0OiBzZWxmLl9yZXNldCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogbW9kZWxGaWVsZC5tb2RlbEZhY3Rvcnk8Rj4oe1xuICAgICAgICAgICAgICAgIHBhcmVudDogc2VsZixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgcmVzZXQ6IHNlbGYuX3Jlc2V0LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICBzZWxmLl9yZXNldCxcbiAgICAgICAgICBzZWxmLl9yZXBhcmVudCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzb2x2ZSByZWZlcmVudGlhbHNcbiAgICAgIGlmICghT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKGF0dHIuZ2V0KCkpKSB7XG4gICAgICAgIGxldCByZWYgPSBtb2RlbEZpZWxkLm1ldGE/LnJlc29sdmVSZWZlcmVudGlhbChhdHRyLmdldCgpLCBhdHRyKTtcbiAgICAgICAgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZiwgcmVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VkID0gYXR0ci5zZXQodmFsdWUsIHNlbGYuX3Jlc2V0LCBzZWxmLl9yZXBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKCFzZWxmLl9zaWxlbnQgJiYgY2hhbmdlZCkge1xuICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoT0RhdGFNb2RlbEV2ZW50VHlwZS5DaGFuZ2UsIHtcbiAgICAgICAgICBhdHRyLFxuICAgICAgICAgIG1vZGVsOiBzZWxmLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBjdXJyZW50LFxuICAgICAgICAgIG9wdGlvbnM6IHsga2V5OiBtb2RlbEZpZWxkLmlzS2V5KCkgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGluazxGPihzZWxmOiBPRGF0YU1vZGVsPFQ+LCBhdHRyOiBPRGF0YU1vZGVsQXR0cmlidXRlPEY+KSB7XG4gICAgYXR0ci5ldmVudHMkLnN1YnNjcmliZSgoZXZlbnQ6IE9EYXRhTW9kZWxFdmVudDxhbnk+KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIEJVQkJMSU5HLmluZGV4T2YoZXZlbnQubmFtZSkgIT09IC0xICYmXG4gICAgICAgIGV2ZW50LmJ1YmJsaW5nICYmXG4gICAgICAgICFldmVudC52aXNpdGVkKHNlbGYpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGV2ZW50Lm1vZGVsID09PSBhdHRyLmdldCgpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQubmFtZSA9PT0gJ2NoYW5nZScgJiZcbiAgICAgICAgICAgIGF0dHIubmF2aWdhdGlvbiAmJlxuICAgICAgICAgICAgZXZlbnQub3B0aW9ucz8ua2V5XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgcmVmID0gKGF0dHIuZ2V0KCkgYXMgT0RhdGFNb2RlbDxhbnk+KS5yZWZlcmVudGlhbChhdHRyKTtcbiAgICAgICAgICAgIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxmLCByZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KGV2ZW50LnB1c2goc2VsZiwgYXR0cikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|