mmhglobal-dynamicform 2.31.0 → 2.32.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/README.md +8 -0
- package/esm2020/lib/services/main.service.mjs +12 -7
- package/esm2020/lib/uiheader/uiheader.component.mjs +27 -48
- package/esm2020/lib/uiheader/uiheader.service.mjs +27 -0
- package/esm2020/lib/zgrid/zgrid.component.mjs +13 -3
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +2 -2
- package/fesm2015/mmhglobal-dynamicform.mjs +64 -48
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +64 -48
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/uiheader/uiheader.component.d.ts +4 -7
- package/lib/uiheader/uiheader.service.d.ts +11 -0
- package/lib/zgrid/zgrid.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -88,8 +88,11 @@ export class ZgridComponent extends DataListingFieldBase {
|
|
|
88
88
|
this.gridDefaultStateExist = false;
|
|
89
89
|
this.isNew = true;
|
|
90
90
|
this.rowSelectionKey = (context) => {
|
|
91
|
-
// Generate a unique key using either this.data.UniqueKey or context.dataItem.Id
|
|
92
|
-
const key = (this.data.UniqueKey ?? context.dataItem.Id) + " " + context.index;
|
|
91
|
+
// Generate a unique key using either this.data.UniqueKey or context.dataItem.Id.
|
|
92
|
+
const key = (this.data.UniqueKey ?? context.dataItem.Id); // + " " + context.index;
|
|
93
|
+
if (this.data.UniqueKey && context.dataItem.Id) {
|
|
94
|
+
console.error('A unique column field is required. Ensure either the Id column is present or the UniqueKey property is set for zgrid.');
|
|
95
|
+
}
|
|
93
96
|
// Store the data item in the mySelection map with the generated key.
|
|
94
97
|
this.mySelection.set(key, context.dataItem);
|
|
95
98
|
// Return the generated key.
|
|
@@ -554,9 +557,16 @@ export class ZgridComponent extends DataListingFieldBase {
|
|
|
554
557
|
// Return the array of selected records.
|
|
555
558
|
return selectedRecord;
|
|
556
559
|
}
|
|
560
|
+
clearSelection() {
|
|
561
|
+
// Clear the map that stores selected data items.
|
|
562
|
+
this.mySelection.clear();
|
|
563
|
+
// Clear the array that tracks selected keys.
|
|
564
|
+
this.rowSelection = [];
|
|
565
|
+
}
|
|
557
566
|
getData() {
|
|
558
567
|
if (this.zgrid) {
|
|
559
568
|
this.inlineEditedFormGroups = {};
|
|
569
|
+
this.clearSelection();
|
|
560
570
|
this.zgrid.getDataBinding();
|
|
561
571
|
}
|
|
562
572
|
else {
|
|
@@ -1104,4 +1114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
1104
1114
|
type: ViewChild,
|
|
1105
1115
|
args: [ElementContainerDirective, { static: true }]
|
|
1106
1116
|
}] } });
|
|
1107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXJGLE9BQU8sRUFFRyxNQUFNLEVBQWMsZ0JBQWdCLEVBRTdDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxr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Qix5QkFBeUIscUZDN0R0QywwbjNCQThZQSx5NnZDRHhWYztRQUNWLDRCQUE0QjtLQUM3QjsyRkFHVSxjQUFjO2tCQVQxQixTQUFTOytCQUNFLFdBQVcsY0FHVDt3QkFDViw0QkFBNEI7cUJBQzdCO3NlQUltQyxVQUFVO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDNkIsZ0JBQWdCO3NCQUF2RSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVsYXkgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEV4Y2VsRXhwb3J0RGF0YSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWV4Y2VsLWV4cG9ydCc7XHJcbmltcG9ydCB7IEdyaWRJdGVtLCBTZWxlY3RhYmxlU2V0dGluZ3MsIFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XHJcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yLCBTdGF0ZSwgcHJvY2VzcyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeVwiO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdG9vbHRpcCc7XHJcbmltcG9ydCB7IEdyaWREYXRhUmVzdWx0LCBEYXRhU3RhdGVDaGFuZ2VFdmVudCwgUGFnZUNoYW5nZUV2ZW50LCBDZWxsQ2xpY2tFdmVudCwgR3JpZENvbXBvbmVudCwgUm93QXJncyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IERhdGFMaXN0aW5nRmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uIH0gZnJvbSBcIi4uL2FuaW1hdGlvbnMvY29tcG9uZW50LWFuaW1hdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29uc3RhbnQgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2NvbnN0YW50XCI7XHJcbmltcG9ydCB7IE1haW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL21haW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvZWxlbWVudGNvbnRhaW5lci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSBcIi4vemdyaWQuYmluZGluZy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtcclxuICBXZWJBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvcmVTZXJ2aWNlLCBTdG9yYWdlU2Vzc2lvblNlcnZpY2UsIEZvbnRBd2VTb21lU2VydmljZSxcclxuICBaR3JpZFBvc3RBcGlQYXJhbXMsIFpHcmlkU2V0dGluZ3MsIFpHcmlkQ3VzdG9tQ29sdW1uLCBPZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLCBKc29uQ2FjaGUsIFJlc291cmNlQXBpU2VydmljZVxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IEdyaWRTZXR0aW5nVHlwZSwgR3JpZFN0YXRlTG9naWNUeXBlLCBaR3JpZFNlcnZpY2UgfSBmcm9tIFwiLi96Z3JpZC5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpHcmlkIHtcclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcztcclxuICBzdGF0ZTogU3RhdGU7XHJcbiAgY29sdW1uczogYW55W107XHJcbiAgcGFnaW5hdGlvbkFwaVBvc3RVcmw6IHN0cmluZztcclxuICBkYXRhOiBaRmllbGQ7XHJcbiAgZ3JvdXA6IFpHcm91cDtcclxuICB6Z3JpZDogWkdyaWRCaW5kaW5nRGlyZWN0aXZlO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IEZvcm1Hcm91cDtcclxuICBnZXRHcmlkRGF0YTogKCkgPT4gYW55W107XHJcbiAgZ2V0RGF0YTogKCkgPT4gdm9pZDtcclxuICBjbGVhckRhdGE6ICgpID0+IHZvaWQ7XHJcbiAgc2V0RGF0YTogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuICBzZXRDb2x1bW5zOiAoY29sdW1uRmllbGRzTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pID0+IHZvaWQ7XHJcbiAgJHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16Z3JpZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vemdyaWQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vemdyaWQuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBaZ3JpZENvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0aW5nRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSkgcHVibGljIHRvb2x0aXBEaXI6IFRvb2x0aXBEaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBlbGVtZW50Q29udGFpbmVyITogRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZTtcclxuICAvLyBAVmlld0NoaWxkKFpHcmlkQmluZGluZ0RpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcblxyXG4gIHpncmlkOiBhbnkgPSBudWxsO1xyXG4gIG9hdXRoVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdyaWREYXRhOiBHcmlkRGF0YVJlc3VsdDtcclxuICBzZWxlY3RhYmxlU2V0dGluZ3M6IFNlbGVjdGFibGVTZXR0aW5ncztcclxuICByb3dTZWxlY3Rpb246IHN0cmluZ1tdID0gW107XHJcbiAgbXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgLy8gZm9yIGtlbmRvIGdyaWQgYnVpbHQtaW5cclxuICBwdWJsaWMgcHJldmlvdXNOZXh0OiBib29sZWFuO1xyXG4gIHB1YmxpYyBncmlkQnRuO1xyXG4gIHB1YmxpYyBwYWdlYWJsZTogYW55ID0gZmFsc2U7XHJcbiAgcHVibGljIGZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBhZHZmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgaXNTaG93QWR2RmlsdGVyID0gZmFsc2U7XHJcbiAgcHVibGljIGdyaWRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgcHJpdmF0ZSBpc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGVja2JveENvbHVtblBpbm5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXMgPSB7XHJcbiAgICByZWZlcklkOiBudWxsLFxyXG4gICAgcGFnZU5vOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICBzb3J0T3JkZXI6IFwiXCIsXHJcbiAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgc29ydE9yZGVyczogW10sXHJcbiAgICBmaWx0ZXJQYXJhbXM6IFtdLFxyXG4gICAgcGFyYW1ldGVyczogXCJcIixcclxuICAgIGZpbHRlcnM6IFwiXCIsXHJcbiAgICBjb2x1bW5zOiBcIlwiLFxyXG4gICAgZ3JhbnRUeXBlOiA0XHJcbiAgfTtcclxuXHJcbiAgZ3JpZFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29sdW1uczogYW55W107XHJcbiAgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQ6IGFueVtdO1xyXG4gIGVkaXRhYmxlQ29sdW1uczogYW55W107XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcGFnZVNpemVzOiBib29sZWFuIHwgYW55W107XHJcbiAgZ3JpZFN0b3JhZ2VLZXk6IHN0cmluZztcclxuICBncmlkRGVmYXVsdFN0YXRlRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc05ldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBlZGl0ZWRSb3dJbmRleDogbnVtYmVyO1xyXG4gIHB1YmxpYyBncmlkU2V0dGluZzogWkdyaWRTZXR0aW5ncztcclxuICA7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYWluU2VydmljZTogTWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBaR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9mZmxpbmVEYXRhYmFzZVNlcnZpY2U6IE9mZmxpbmVEYXRhYmFzZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMub2F1dGhVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpLmUxT2F1dGhVcmwgKyBcIi9cIjtcclxuICAgIHRoaXMuYWxsUmVzdWx0cyA9IHRoaXMuYWxsUmVzdWx0cy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuY2xlYXJEYXRhID0gdGhpcy5jbGVhckRhdGEuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLnNldHVwRmlsdGVyRmVhdHVyZSgpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNldHVwR3JpZENvbXBvbmVudEF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcgPSB7IGdyaWRTdGF0ZTogdGhpcy5ncmlkU2VydmljZS5zZXR1cEdyaWRTZXR0aW5nKHRoaXMuZGF0YSkgfTtcclxuXHJcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9uRm9yR3JpZFN1YmplY3QoKTtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVUb29sQmFySXRlbXMoKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZENhbGxiYWNrKHRoaXMuZ3JvdXApO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgaXNCYWNrTmF2aWdhdGVkID0gKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0ZWRSZWxvYWRHcmlkXCIpID09PSAndHJ1ZScpO1xyXG5cclxuICAgIGlmIChpc0JhY2tOYXZpZ2F0ZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIFN0YXRlIChwYWdpbmF0aW9uLCBzb3J0YWJsZSwgZmlsdGVyLCBvcmRlcmluZylcclxuICBwdWJsaWMgZGF0YVN0YXRlQ2hhbmdlKHN0YXRlOiBEYXRhU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy56Z3JpZC5kYXRhU3RhdGVDaGFuZ2Uoc3RhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcmFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0YWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2tlZChjb2xTZXR0aW5nOiBhbnkpIHtcclxuICAgIGlmIChjb2xTZXR0aW5nWydwaW5uZWRMZWZ0J10gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHB1YmxpYyBvbkV4Y2VsRXhwb3J0KGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgY29sUmVxdWlyZWRGb3JtYXQgPSBbXTtcclxuXHJcbiAgICAvLyBDb2xsZWN0IGNvbHVtbnMgdGhhdCBoYXZlIGEgc3BlY2lmaWMgRXhjZWwgY2VsbCBmb3JtYXRcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGlmIChjb2wuRXhjZWxDZWxsRm9ybWF0KSB7XHJcbiAgICAgICAgY29sUmVxdWlyZWRGb3JtYXQucHVzaCh7IGNvbE5hbWU6IGNvbC5EaXNwbGF5TmFtZSA/PyBjb2wuTmFtZSwgY2VsbEZvcm1hdDogY29sLkV4Y2VsQ2VsbEZvcm1hdCwgY29sSW5kZXg6IG51bGwgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChjb2xSZXF1aXJlZEZvcm1hdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGUud29ya2Jvb2suc2hlZXRzWzBdLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICBpZiAocm93LnR5cGUgPT09ICdoZWFkZXInKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaGVhZGVyIGNlbGxzIHRvIGZpbmQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIGFuZCBzdG9yZSB0aGVpciBpbmRleFxyXG4gICAgICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29sUmVxdWlyZWRGb3JtYXQuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2VsbC52YWx1ZSA9PT0gY29sLmNvbE5hbWUpIHtcclxuICAgICAgICAgICAgICBjb2wuY29sSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocm93LnR5cGUgPT09ICdkYXRhJykge1xyXG4gICAgICAgIC8vIEFwcGx5IHRoZSBmb3JtYXQgdG8gY2VsbHMgaW4gZGF0YSByb3dzIGlmIHRoZWlyIGluZGV4IG1hdGNoZXNcclxuICAgICAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjb2wuY29sSW5kZXgpIHtcclxuICAgICAgICAgICAgICBjZWxsLmZvcm1hdCA9IGNvbC5jZWxsRm9ybWF0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBDb2x1bW5zXHJcbiAgcHVibGljIGlzU2VsZWN0T3B0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgIGNoZWNrYm94T25seTogZmFsc2UsXHJcbiAgICAgICAgbW9kZTogKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zPy50b0xvd2VyQ2FzZSgpID09PSBcIm11bHRpcGxlXCIpID8gXCJtdWx0aXBsZVwiIDogXCJzaW5nbGVcIlxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb2x1bW5zKGNvbHVtbk5hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICB0aGlzLmdyb3VwW2NvbHVtbk5hbWVdID0gdGhpcy53cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5zKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljICRzZXRDb2x1bW5zKGNvbHVtbk5hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuZ3JvdXBbY29sdW1uTmFtZV0gPSB0aGlzLndyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbnMpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5MaXN0OiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pIHtcclxuICAgIHJldHVybiBvZihjb2x1bW5MaXN0Lm1hcChjID0+IHtcclxuICAgICAgY29uc3QgaXNIaWRkZW46IGJvb2xlYW4gPSBjLkhpZGRlbjtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBOYW1lOiBjLk5hbWUsXHJcbiAgICAgICAgVmFsdWU6IGMuQ29kZSxcclxuICAgICAgICBUeXBlOiBjLlR5cGUsXHJcbiAgICAgICAgZ3JpZENvbFZpc2libGU6ICFpc0hpZGRlbixcclxuICAgICAgICBFbmFibGVHcmlkVmFsdWU6IGMuRW5hYmxlR3JpZFZhbHVlIHx8IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiAxMDAgKyBjLk5hbWUubGVuZ3RoICogNCxcclxuICAgICAgICBlbmFibGVGaWx0ZXJpbmc6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUGlubmluZzogdHJ1ZSxcclxuICAgICAgICBEaXZDbGFzczogXCJjb2wteHMtMTIgY29sLXNtLTZcIixcclxuICAgICAgICBJc0VkaXRhYmxlSW5HcmlkOiBjLkVkaXRhYmxlXHJcbiAgICAgIH07XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlR3JpZENvbHVtbnMoZ3JpZFNldHRpbmc/OiBaR3JpZFNldHRpbmdzKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbHVtbkZpZWxkcyQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKSB8fCBvZihbXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRhdGEuQ29sdW1uRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGNvbHVtbkZpZWxkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2x1bW5GaWVsZHMkKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGYWlsIHRvIGdlbmVyYXRlIGdyaWQgY29sdW1uIGZpZWxkcy4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhLkNvbHVtbkZpZWxkcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5GaWVsZHMkLnBpcGUoXHJcbiAgICAgIHRhcChjb2x1bW5GaWVsZCA9PiB7XHJcbiAgICAgICAgaWYgKCFjb2x1bW5GaWVsZCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkL0VtcHR5IGdyaWQoJyArIHRoaXMuZGF0YS5OYW1lICsgJykgZGF0YSB0byBnZW5lcmF0ZSBjb2x1bW4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIGNvbnN0IGdlbmVyYXRlSGlkZGVuQ29sdW1ucyA9IFtdO1xyXG5cclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JpZENvbHVtbnMoe1xyXG4gICAgICAgICAgICBjb2x1bW5GaWVsZDogY29sdW1uRmllbGQsXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25zOiBncmlkU2V0dGluZz8uY29sdW1uQ29uZmlndXJhdGlvbnMsXHJcbiAgICAgICAgICAgIGdlbmVyYXRlSGlkZGVuQ29sdW1uczogZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLFxyXG4gICAgICAgICAgICBncmlkQXR0cmlidXRlczogdGhpcy5kYXRhXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IGdlbmVyYXRlSGlkZGVuQ29sdW1ucy5tYXAoZmllbGQgPT4gKHsgZmllbGQ6IGZpZWxkLCBWaXNpYmxlOiB0cnVlLCBJc1JlcXVpcmVkOiBmYWxzZSwgVmFsdWU6IGZpZWxkIH0pKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQucHVzaChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uTmFtZShncmlkQ2VsbFJlcGxhY2VWYWx1ZTogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdKSB7XHJcbiAgICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldEZvbnRBd2Vzb21lKGdyaWRDZWxsUmVwbGFjZVZhbHVlW3ZhbHVlXSwgdGhpcy5mb250QXdlU29tZVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIHN0eWxpbmdcclxuICBwdWJsaWMgY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ0JhY2tncm91bmRDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9ICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gJ2NvbG9yOicgKyBkYXRhWydDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydTdHlsZUV4cHJlc3Npb24nXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gZGF0YVsnU3R5bGVFeHByZXNzaW9uJ107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT25jZWxsIGNsaWNrIGhhbmRsaW5nXHJcbiAgLy8gMS4gaW5DZWxsIEVkaXRcclxuICAvLyAyLiBPbkl0ZW1DbGlja1xyXG4gIC8vIDMuIE5hdmlnYXRlIHRvIEZvcm0gUGFnZVxyXG4gIC8vIDQuIFNob3cgRm9ybSBQYWdlIGluIHRoZSBzYW1lIHBhZ2UgKERFQyBhbmQgRHJhd2VyKVxyXG4gIHB1YmxpYyBjZWxsQ2xpY2tIYW5kbGVyKGV2ZW50OiBDZWxsQ2xpY2tFdmVudCkge1xyXG4gICAgLy8gUmlnaHQgY2xpY2sgaGFuZGxlclxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY29udGV4dG1lbnVcIikge1xyXG4gICAgICB0aGlzLmRhdGFJdGVtQ29udGV4dE1lbnUuc2hvd0NvbnRleHRNZW51TWFudWFsbHkoZXZlbnQsIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyID0gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyID8gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyIDogZmFsc2U7XHJcbiAgICBjb25zdCBpc0NvbW1hbmRDb2x1bW4gPSBldmVudC5jb2x1bW4uY29uc3RydWN0b3IubmFtZSA9PSAnQ29tbWFuZENvbHVtbkNvbXBvbmVudCcgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcERpcikge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIuaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGlzYWJsZUFsbENvbHVtbkNlbGxDbGlja0hhbmRsZXIgJiYgIWlzQ29tbWFuZENvbHVtbikge1xyXG4gICAgICBjb25zdCBpbkNlbGxFZGl0YWJsZSA9IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA/IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA6IGZhbHNlO1xyXG4gICAgICBpZiAoaW5DZWxsRWRpdGFibGUpIHtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgICBpZiAoISF0aGlzLmVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT4gZXZlbnQuc2VuZGVyLmVkaXRDZWxsKGV2ZW50LnJvd0luZGV4LCBldmVudC5jb2x1bW5JbmRleCwgdGhpcy5jcmVhdGVGb3JtR3JvdXAoZXZlbnQuZGF0YUl0ZW0sIHMuZmllbGQpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2VsbENsaWNrIGV2ZW50OiBcIiwgZXZlbnQpO1xyXG4gICAgICAgIC8vdGhpcy5jYWNoZVNlcnZpY2Uuc2V0KCdsYXN0Q2xpY2tlZEdyaWRSZWNvcmQnLCBldmVudCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuT25JdGVtQ2xpY2spIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uSXRlbUNsaWNrKTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBzdG9yZSBjbGlja2VkIGlkIGFuZCBhY3Rpb24gYXMgZWRpdCB0byB0aGUgc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAvLyBPbkl0ZW1DbGljaywgcHJvamVjdCBoYXZlIHRvIHNldCB0aGVtc2VsZi5cclxuICAgICAgICAgIHRoaXMubWFpblNlcnZpY2Uuc2V0TmF2aWdhdGlvblBhcmFtcyhbZXZlbnQuZGF0YUl0ZW0uSWQsICdlZGl0J10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZWwoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdENlbGxDbG9zZUhhbmRsZXIoYXJnczogYW55KSB7XHJcbiAgICBjb25zdCB7IGZvcm1Hcm91cCwgZGF0YUl0ZW0gfSA9IGFyZ3M7XHJcbiAgICBpZiAoIWZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5kaXJ0eSkge1xyXG4gICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT5cclxuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFJdGVtLCB7IFtzLmZpZWxkXTogZm9ybUdyb3VwLnZhbHVlW3MuZmllbGRdIH0pKTtcclxuICAgICAgLy8gdGhpcy5teVNlbGVjdGlvbi5tYXAocyA9PiAocy5JZCA9PT0gZGF0YUl0ZW0uSWQpID8gT2JqZWN0LmFzc2lnbihzLCBkYXRhSXRlbSkgOiBudWxsKTtcclxuICAgICAgdGhpcy5teVNlbGVjdGlvbi5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLklkID09PSBkYXRhSXRlbS5JZCkge1xyXG4gICAgICAgICAgdGhpcy5teVNlbGVjdGlvbi5zZXQoa2V5LCB7IC4uLnZhbHVlLCAuLi5kYXRhSXRlbSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVUbyhldmVudDogYW55LCBjbGlja0FjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGNvbnN0IG4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2xpY2tBY3Rpb24uQ2xpY2spO1xyXG4gICAgaWYgKG4pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgICB0YXJnZXQ6IGNsaWNrQWN0aW9uLkNsaWNrLFxyXG4gICAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gRWRpdCBpbmNlbGwgZmllbGRcclxuICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1jZWxsQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsXHJcbiAgICAgICAgZGF0YTogZGF0YUl0ZW0sXHJcbiAgICAgICAgY29sdW1uRmllbGRzJDogY29sRmllbGRzXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YVsnQ29udGFpbmVyRm9ybSddKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Zvcm1QYWdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgLy9za2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8vLyBXaGVuIGNsaWNrZWQgcm91dGUgdG8gcGFnZVxyXG4gICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWQsICdlZGl0J10sIHtcclxuICAgICAgLy8gIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgLy99KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkJ0bkNsaWNrKGV2ZW50OiBhbnksIGNvbFNldHRpbmc6IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uTmF2aWdhdGVUbyhldmVudCwgY29sU2V0dGluZywgcm93RGF0YSwgY2VsbERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoZGF0YUl0ZW06IGFueSwgZmllbGROYW1lOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBbZmllbGROYW1lXTogZGF0YUl0ZW1bZmllbGROYW1lXVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSGVscGVyIGZ1bmN0aW9uc1xyXG4gIHB1YmxpYyBnZXRDbGFzcyhkYXRhSXRlbTogYW55LCBjb2w6IGFueSkge1xyXG4gICAgbGV0IG5nQ2xhc3MgPSBcImdyaWRDZWxsIFwiO1xyXG4gICAgaWYgKGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJykge1xyXG4gICAgICBuZ0NsYXNzICs9IFwicmlnaHRBbGlnbmVkIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10pIHtcclxuICAgICAgbmdDbGFzcyArPSBkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10gKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLkNsYXNzKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gY29sLkNsYXNzICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5Qb3BPdmVyQ29udGVudCkge1xyXG4gICAgICBuZ0NsYXNzICs9IFwiIHdpdGhQb3BvdmVySW5HcmlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5nQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybWF0KGNvbDogYW55LCBkZWZhdWx0Rm9ybWF0PzogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJcIjtcclxuICAgIGlmIChjb2wuRm9ybWF0T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdCA9IGRlZmF1bHRGb3JtYXQgPyBkZWZhdWx0Rm9ybWF0IDogXCJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdEFyciA9IGNvbC5Gb3JtYXRPcHRpb25zLnNwbGl0KFwiLlwiKVxyXG4gICAgICBsZXQgZHAgPSAwO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZHAgPSBmb3JtYXRBcnJbMV0ubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBcIjEuXCIgKyBkcCArIFwiLVwiICsgZHA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsUmVzdWx0cygpOiBPYnNlcnZhYmxlPEV4Y2VsRXhwb3J0RGF0YT4ge1xyXG4gICAgY29uc3QgZ3JpZENvbnRyb2wgPSB0aGlzLnpncmlkIGFzIFpHcmlkO1xyXG4gICAgY29uc3QgZ3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgZGF0YSA9IGdyaWRDb21wb25lbnQuZGF0YSBhcyBHcmlkRGF0YVJlc3VsdDtcclxuXHJcbiAgICBjb25zdCByZXNvdXJjZVVSTEZvckdlbmVyYXRlRGF0YSA9IHRoaXMuZGF0YS5FeHBvcnREYXRhUmVzb3VyY2VVUkwgPyB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwodGhpcy5kYXRhLkV4cG9ydERhdGFSZXNvdXJjZVVSTCkgOiBncmlkQ29udHJvbC5wYWdpbmF0aW9uQXBpUG9zdFVybDtcclxuXHJcbiAgICAvLyBOZWVkIHRvIGNsb25lLCBpZiBub3Qgd2lsbCBhZmZlY3QgdGhlIGdyaWQgcGFyYW1zLlxyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbXMpO1xyXG4gICAgcGFyYW1zLnBhZ2VObyA9IDA7XHJcbiAgICBwYXJhbXMucGFnZVNpemUgPSBkYXRhLnRvdGFsO1xyXG5cclxuICAgIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9KD86W1RcXHNdXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSw3fSk/KD86WnxbXFwrXFwtXVxcZHsyfTpcXGR7Mn0pPyk/JC87XHJcblxyXG4gICAgLy8gRnVuY3Rpb24gdG8gY29udmVydCBkYXRlIHN0cmluZ3MgdG8gRGF0ZSBvYmplY3RzXHJcbiAgICBjb25zdCBjb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdJdGVtKSB7XHJcbiAgICAgICAgICBpZiAobmV3SXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3SXRlbVtrZXldO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgYW5kIG1hdGNoZXMgdGhlIGRhdGVUaW1lUmVnZXggcGF0dGVyblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBkYXRlVGltZVJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgbmV3SXRlbVtrZXldID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdJdGVtO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQocmVzb3VyY2VVUkxGb3JHZW5lcmF0ZURhdGEsIHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBDb252ZXJ0IGRhdGUgc3RyaW5ncyB0byBEYXRlIG9iamVjdHNcclxuICAgICAgICBkYXRhLmRhdGFTZXQgPSBjb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzKGRhdGEuZGF0YVNldCk7XHJcblxyXG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3VsdCBmb3IgRXhjZWwgZXhwb3J0XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBFeGNlbEV4cG9ydERhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBwcm9jZXNzKGRhdGEuZGF0YVNldCwge30pLmRhdGFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoR3JpZChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvblNlZ21lbnQgPSBldmVudC50YXJnZXQudHJpbSgpLnNwbGl0KCcuJyk7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvbiA9IF9ncmlkT3B0aW9uU2VnbWVudFsxXTtcclxuICAgIGlmIChfZ3JpZE9wdGlvbikge1xyXG4gICAgICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtfZ3JpZE9wdGlvbl0gYXMgWkdyaWQ7XHJcbiAgICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgICB6Z3JpZENvbnRyb2wuZ2V0RGF0YSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gZmluZCBncmlkIHZhbHVlOiAnICsgX2dyaWRPcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnSW52YWxpZCByZWZyZXNoR3JpZCBldmVudDogJywgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hEYXRhKCkge1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRhKCkge1xyXG4gICAgdGhpcy56Z3JpZC5jbGVhckRhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93VG9vbHRpcChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLklzU2hvd1Rvb2xUaXAgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBsZXQgaXNDb21tYW5kQ29sdW1uID0gZmFsc2U7XHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PSAnay1jb21tYW5kLWNlbGwnKSB7XHJcbiAgICAgICAgaXNDb21tYW5kQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFpc0NvbW1hbmRDb2x1bW4gJiZcclxuICAgICAgKFxyXG4gICAgICAgICgoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1REJyB8fCBlbGVtZW50Lm5vZGVOYW1lID09PSAnVEgnKSAmJiBlbGVtZW50Lm9mZnNldFdpZHRoIDwgKGVsZW1lbnQuc2Nyb2xsV2lkdGgpKSB8fFxyXG4gICAgICAgIChlbGVtZW50Lm5vZGVOYW1lID09PSAnU1BBTicgJiYgZWxlbWVudC5jbGFzc0xpc3QgJiYgZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoID4gMCAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZ3JpZC1jZWxsLWRhdGEnKSAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGggPCAoZWxlbWVudC5wYXJlbnRFbGVtZW50LnNjcm9sbFdpZHRoKSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLnRvZ2dsZShlbGVtZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd1NlbGVjdGlvbktleSA9IChjb250ZXh0OiBSb3dBcmdzKTogYW55ID0+IHtcclxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGtleSB1c2luZyBlaXRoZXIgdGhpcy5kYXRhLlVuaXF1ZUtleSBvciBjb250ZXh0LmRhdGFJdGVtLklkLCBhbmQgYXBwZW5kIHRoZSByb3cgaW5kZXguXHJcbiAgICBjb25zdCBrZXkgPSAodGhpcy5kYXRhLlVuaXF1ZUtleSA/PyBjb250ZXh0LmRhdGFJdGVtLklkKSArIFwiIFwiICsgY29udGV4dC5pbmRleDtcclxuXHJcbiAgICAvLyBTdG9yZSB0aGUgZGF0YSBpdGVtIGluIHRoZSBteVNlbGVjdGlvbiBtYXAgd2l0aCB0aGUgZ2VuZXJhdGVkIGtleS5cclxuICAgIHRoaXMubXlTZWxlY3Rpb24uc2V0KGtleSwgY29udGV4dC5kYXRhSXRlbSk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBnZW5lcmF0ZWQga2V5LlxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFZhbHVlcygpOiBhbnkge1xyXG4gICAgLy8gTWFwIGVhY2gga2V5IGluIHJvd1NlbGVjdGlvbiB0byBpdHMgY29ycmVzcG9uZGluZyBkYXRhIGl0ZW0gaW4gdGhlIG15U2VsZWN0aW9uIG1hcC5cclxuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkID0gdGhpcy5yb3dTZWxlY3Rpb24ubWFwKGtleSA9PiB0aGlzLm15U2VsZWN0aW9uLmdldChrZXkpKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIGFycmF5IG9mIHNlbGVjdGVkIHJlY29yZHMuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRSZWNvcmQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gICAgICB0aGlzLnpncmlkLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd0aGlzLnpncmlkIGlzIHVuZGVmaW5lZC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmlzVXNlTG9jYWxEYXRhKCkgPyAodGhpcy56Z3JpZC5kYXRhIHx8IHRoaXMuemdyaWQub3JpZ2luYWxEYXRhKSA6ICh0aGlzLnpncmlkLmdyaWQuZGF0YSAmJiB0aGlzLnpncmlkLmdyaWQuZGF0YS5kYXRhID8gdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA6IFtdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRhID0gKGdEYXRhOiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLnpncmlkLmRhdGEgPSBnRGF0YTtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5ncmlkLmRhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBnRGF0YSxcclxuICAgICAgICAgIHRvdGFsOiBnRGF0YS50b3RhbENvdW50XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnemdyaWQgaXMgbnVsbCBmb3Igc2V0RGF0YS4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWFkZXJUZXh0KGNvbHVtbk5hbWU6IHN0cmluZywgbmV3SGVhZGVyVGl0bGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUpIHtcclxuICAgICAgICBjb2wudGl0bGUgPSBuZXdIZWFkZXJUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHcmlkSXRlbSk6IGFueSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKGl0ZW0uZGF0YVsnSWQnXSB8fCBpbmRleCk7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVXNlTG9jYWxEYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EYXRhU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5kYXRhLlJlc291cmNlVVJMKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIHNldHVwXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCkge1xyXG4gICAgLy8gR3JpZCBkZWZhdWx0IHNldHRpbmdcclxuICAgIHRoaXMuZ3JpZFRpdGxlID0gdGhpcy5kYXRhLlRpdGxlO1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICB0aGlzLnBhZ2VTaXplcyA9IFs1LCAxMCwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTtcclxuICAgIHRoaXMucHJldmlvdXNOZXh0ID0gdGhpcy5kYXRhWydFbmFibGVQcmV2aW91c05leHRCdXR0b24nXSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBbTW9iaWxlXSBEaXNhYmxlIHBhZ2Ugc2l6ZXMgaWYgUGFnZVNpemVzIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIG9yIG9uIGEgbW9iaWxlIHNjcmVlbi5cclxuICAgIGlmICh0aGlzLmRhdGEuUGFnZVNpemVzID09PSBmYWxzZSB8fCB0aGlzLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZXMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb25maWd1cmUgcGFnaW5hdGlvbiBzZXR0aW5ncy5cclxuICAgIHRoaXMucGFnZWFibGUgPSB0aGlzLmRhdGEucGFnZUFibGUgIT0gdW5kZWZpbmVkID8gdGhpcy5kYXRhLnBhZ2VBYmxlIDoge1xyXG4gICAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgICBidXR0b25Db3VudDogMyxcclxuICAgICAgcGFnZVNpemVzOiB0aGlzLnBhZ2VTaXplcyxcclxuICAgICAgcHJldmlvdXNOZXh0OiB0aGlzLnByZXZpb3VzTmV4dCxcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIGdyaWQgc2VsZWN0aW9uIG9wdGlvbnMgaWYgc2V0IFNlbGVjdE9wdGlvbnMgaW4gZmllbGQgZWxlbWVudCBhdHRyaWJ1dGUuXHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBFcnJvcjogZ3JpZCgke3RoaXMuZGF0YS5OYW1lfSksIHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zIHNob3VsZCBiZSBhIHN0cmluZyB3aXRoIHZhbHVlICdzaW5nbGUnIG9yICdtdWx0aXBsZScuYCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICBtb2RlOiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucy50b0xvd2VyQ2FzZSgpID09PSAnc2luZ2xlJyA/ICdzaW5nbGUnIDogJ211bHRpcGxlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBCaW5kIGNvbXBvbmVudCB0byBncm91cCB1c2luZyB0aGUgcHJvdmlkZWQgVmFsdWUgc2V0IGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5WYWx1ZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5WYWx1ZS5zbGljZSg2KV0gPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCkge1xyXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbnkgZXhpc3Rpbmcgc3Vic2NyaXB0aW9ucyB0byBhdm9pZCBtZW1vcnkgbGVha3MuXHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGcm9tIGhlcmUgd2lsbCBjYWxsIHpncmlkLmJpbmRpbmcuZGlyZWN0aXZlLlxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGdldCBmcm9tIGRpcmVjdGl2ZSBhbmQgc2V0IHRvIGNvbXBvbmVudFxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmdyaWRTdWJqZWN0LnBpcGUoXHJcbiAgICAgIHRhcChncmlkRGlyZWN0aXZlID0+IHtcclxuICAgICAgICAvLyBTZXQgdGhlIHpncmlkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBlbWl0dGVkIGdyaWREaXJlY3RpdmUuXHJcbiAgICAgICAgdGhpcy56Z3JpZCA9IGdyaWREaXJlY3RpdmU7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1ucyBwcm9wZXJ0eSB3aXRoIHRoZSBncmlkIGNvbHVtbnMgZnJvbSBncmlkRGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuY29sdW1ucztcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYXV0b21hdGljIGFwcGVuZGluZyBvZiBhIGdyaWQgZGF0ZSBmaWx0ZXIgY29sdW1uIGlzIG5vdCBkaXNhYmxlZC5cclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCB1cCBncmlkIHdpdGggaW5saW5lIGVkaXRpbmcuXHJcbiAgICAgICAgdGhpcy5zZXR1cEdyaWRXaXRoSW5saW5lRWRpdCgpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdXAgYSBwb3BvdmVyIGZlYXR1cmUgYmFzZWQgb24gY29sdW1ucyBhbmQgZ3JpZCBkYXRhLlxyXG4gICAgICAgIHRoaXMuc2V0dXBQb3BvdmVyRmVhdHVyZSh0aGlzLmNvbHVtbnMsIHRoaXMuZ2V0R3JpZERhdGEoKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbHVtbiBoZWFkZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTWFyayBjb2x1bW4gaGVhZGVycyBhcyB0cmFuc2xhdGVkIGFuZCBwZXJmb3JtIHRoZSB0cmFuc2xhdGlvbi5cclxuICAgICAgICB0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKF8gPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hDb2x1bW5QaW5uZWQgPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9uc1Bpbm5lZDtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUdyaWRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyaWRTdGF0ZUxvZ2ljID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVMb2dpYyh0aGlzLmRhdGEpO1xyXG4gICAgY29uc3QgY2FjaGVOYW1lID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVDYWNoZVN0b3JhZ2VLZXkoR3JpZFNldHRpbmdUeXBlLlNhdmVkU2V0dGluZywgdGhpcy5kYXRhKTtcclxuXHJcbiAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmNvbHVtbkNvbmZpZ3VyYXRpb25zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1uc0NvbmZpZyh0aGlzLnpncmlkLmdyaWQuY29sdW1ucyk7XHJcblxyXG4gICAgY29uc3Qgc2V0dGluZ0NvbmZpZzogWkdyaWRTZXR0aW5ncyA9IHtcclxuICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnM6IHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuY29sdW1uQ29uZmlndXJhdGlvbnNcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGdyaWRTdGF0ZUxvZ2ljID09PSBHcmlkU3RhdGVMb2dpY1R5cGUuU2V0dGluZ09ubHkpIHtcclxuICAgICAgc2V0dGluZ0NvbmZpZy5ncmlkU3RhdGUgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncmlkU2V0dGluZyA9IEpTT04uc3RyaW5naWZ5KHNldHRpbmdDb25maWcpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShjYWNoZU5hbWUsIGdyaWRTZXR0aW5nKTtcclxuXHJcbiAgICBjb25zdCBqc29uQ2FjaGU6IEpzb25DYWNoZSA9IHtcclxuICAgICAgRmlsZU5hbWU6IGNhY2hlTmFtZSxcclxuICAgICAgSnNvbkNvbnRlbnQ6IGdyaWRTZXR0aW5nXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnNhdmVKc29uQ2FjaGUoanNvbkNhY2hlKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdHcmlkIFNldHRpbmcgU2F2ZWQnLCBcInRvcFwiLCB0cnVlLCAyMDAwLCAnc3VjY2VzcycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmVHcmlkU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuc29ydCgoYSwgYikgPT4gYS5vcmlnaW5hbE9yZGVySW5kZXggLSBiLm9yaWdpbmFsT3JkZXJJbmRleCk7XHJcbiAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjYWNoZU5hbWUgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUNhY2hlU3RvcmFnZUtleShHcmlkU2V0dGluZ1R5cGUuU2F2ZWRTZXR0aW5nLCB0aGlzLmRhdGEpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShjYWNoZU5hbWUpO1xyXG5cclxuICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuXHJcbiAgICB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UucmVtb3ZlSnNvbkNhY2hlKHtcclxuICAgICAgRmlsZU5hbWU6IGNhY2hlTmFtZVxyXG4gICAgfSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZENhbGxiYWNrKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10pIHtcclxuICAgICAgY29uc3QgbWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLUFmdGVybG9hZENhbGxiYWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10sXHJcbiAgICAgICAgZGF0YTogbWVcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKSB7XHJcbiAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGlmICh0aGlzLmlzVXNlTG9jYWxEYXRhKCkgJiYgZ3JpZERhdGEgJiYgZ3JpZERhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBkYXRlQ29sID0gT2JqZWN0LmtleXMoZ3JpZERhdGFbMF0pLmZpbHRlcih4ID0+IHguaW5jbHVkZXMoXCJEYXRlXCIpICYmICF4LmVuZHNXaXRoKENvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4KSk7XHJcbiAgICAgIGlmIChkYXRlQ29sICYmIGRhdGVDb2wubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICBkYXRlQ29sLmZvckVhY2goY29sTmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGFbYCR7Y29sTmFtZX0ke0NvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4fWBdID0gbmV3IERhdGUoZGF0YVtjb2xOYW1lXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUpIHtcclxuICAgICAgY29uc3Qgc2V0dGluZ0NhY2hlTmFtZSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlQ2FjaGVTdG9yYWdlS2V5KEdyaWRTZXR0aW5nVHlwZS5TYXZlZFNldHRpbmcsIHRoaXMuZGF0YSk7XHJcbiAgICAgIGNvbnN0IHNldHRpbmdDYWNoZVZhbHVlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzZXR0aW5nQ2FjaGVOYW1lKTtcclxuXHJcbiAgICAgIHRoaXMuc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbiA9IHNldHRpbmdDYWNoZVZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgY29uZmlndXJhdGlvbiBmdW5jdGlvblxyXG4gIHB1YmxpYyBncmlkQ3VzdG9tQWRkQ29tbWFuZChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZSA9IHRoaXMuZGF0YS5OYW1lICsgJ19DdXN0b21BZGRCdXR0b25PbkNsaWNrJztcclxuICAgIGlmICghdGhpcy5ncm91cFtncmlkQWRkQnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRBZGRCdXR0b25FdmVudE5hbWVdKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBncmlkQ3VzdG9tUmVzZXRDb21tYW5kKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkUmVzZXRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tUmVzZXRCdXR0b25PbkNsaWNrJztcclxuICAgIGlmICghdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZEN1c3RvbVJlbW92ZUNvbW1hbmQoZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZSA9IHRoaXMuZGF0YS5OYW1lICsgJ19DdXN0b21SZW1vdmVCdXR0b25PbkNsaWNrJztcclxuICAgIGlmICghdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXShkYXRhSXRlbSwgcm93SW5kZXgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElubGluZSBFZGl0XHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbHMoZ3JpZENvbHM6IEFycmF5PGFueT4pIHtcclxuICAgIGxldCBjb3VudGVySW5kZXggPSAwO1xyXG4gICAgLy8gVG8gZm9yY2UgZWxlbWVudCB0byByZWJpbmQgZGF0YVxyXG4gICAgdGhpcy5pc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnpncmlkLmdyaWQubG9hZGluZyA9IHRydWU7XHJcbiAgICBvZihbXSkucGlwZShkZWxheSgwKSwgdGFwKCgpID0+IHtcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzIHx8IHt9O1xyXG4gICAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JpZERhdGEpKSB7XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0ge307XHJcbiAgICAgICAgICBncmlkQ29scy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmlzVmlzaWJsZUZvcm1Db250cm9sKHRoaXMsIGMuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkID0gWkNvbXBvbmVudEhlbHBlci5pc1JlcXVpcmVkRm9ybUNvbnRyb2wodGhpcywgYy5maWVsZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBaQ29tcG9uZW50SGVscGVyLmdldFZhbGlkYXRvcnMoYy5maWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkLCB0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgaXRlbXNbYy5maWVsZF0gPSBuZXcgRm9ybUNvbnRyb2woZFtjLmZpZWxkXSwgdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoaXRlbXMpO1xyXG5cclxuICAgICAgICAgIGlmIChkW1wiSWRcIl0pIHtcclxuICAgICAgICAgICAgaXRlbXNbXCJJZFwiXSA9IGl0ZW1zW1wiSWRcIl0gfHwgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGRbXCJJZFwiXSwgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRbXCJJZFwiXSA9IGNvdW50ZXJJbmRleCsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2RbXCJJZFwiXV0gPSBmb3JtR3JvdXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnpncmlkLmdyaWQubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZpZWxkKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZCh4ID0+IHguVmFsdWUgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGb3JtKGRhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikge1xyXG4gICAgdmFyIGtleSA9IChkYXRhW1wiSWRcIl0gfHwgZGF0YVtcIklkXCJdID09IDApID8gZGF0YVtcIklkXCJdIDogcm93SW5kZXg7XHJcbiAgICBpZiAodGhpcy5pc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trZXldIHx8IHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHNbMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tleV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybUNvbnRyb2xEYXRhKCk6IGFueVtdIHtcclxuICAgIGNvbnN0IGRhdGEgPSBbXTtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMpKSB7XHJcbiAgICAgIGRhdGEucHVzaCh0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNba10/LnZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRXaXRoSW5saW5lRWRpdCgpIHtcclxuICAgIGlmICh0aGlzLmhhc0lubGluZUVkaXRDb2x1bW4odGhpcy5jb2x1bW5zKSkge1xyXG4gICAgICB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzO1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHModGhpcy5jb2x1bW5zLmNvbmNhdCh0aGlzLmdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkIHx8IFtdKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNJbmxpbmVGb3JtR3JvdXBIYXNWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgJiYgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNJbmxpbmVFZGl0Q29sdW1uKGdyaWRDb2xzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZ3JpZENvbHMgJiYgZ3JpZENvbHMuc29tZShjID0+IGMuaXNFZGl0YWJsZUluR3JpZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2VsbFN0eWxlRm9ySW5saW5lRWRpdChjb2x1bW5GaWVsZDogWkZpZWxkLCBkYXRhSXRlbTogYW55LCByb3dJbmRleDogbnVtYmVyKTogYW55IHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldElubGluZUZvcm0oZGF0YUl0ZW0sIHJvd0luZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICBpZiAoIWZvcm0pIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3R5bGUgPSBjb2x1bW5GaWVsZFtgU3R5bGUxMGBdO1xyXG4gICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBzdHlsZSk7XHJcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXR1cm4gY2FsbEZ1bmMoZm9ybS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZnVuYyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gRXZlbnRcclxuICAvLyBTb3VyY2U6IGh0dHBzOi8vd3d3LnRlbGVyaWsuY29tL2ZvcnVtcy9rZW5kby1hbmd1bGFyLWdyaWQtYmxhbmstc3BhY2UtaW4tdGhlLWVuZC13aGVuLXlvdS1yZXNpemUocmVkdWNlKS1hbnktY29sdW1uXHJcbiAgcHVibGljIGFkanVzdFdpZHRoVXBvblJlc2l6ZSgpIHtcclxuICAgIGNvbnN0IHRhYmxlV2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC10YWJsZVwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLWNvbnRlbnRcIilbYG9mZnNldFdpZHRoYF07XHJcbiAgICBpZiAodGFibGVXaWR0aCA8IGNvbnRlbnRXaWR0aCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50TGFzdENvbFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtY29udGVudCAuay1ncmlkLXRhYmxlIHRyIHRkOmxhc3Qtb2YtdHlwZVwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1uc1t0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMV0ud2lkdGggPSBjdXJyZW50TGFzdENvbFdpZHRoICsgKGNvbnRlbnRXaWR0aCAtIHRhYmxlV2lkdGgpIC0gMTA7IC8vIGFjY291bnQgZm9yIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gb25DaGFuZ2UgRXZlbnRzXHJcbiAgcHVibGljIGZpbHRlckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQuZmlsdGVyQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5wYWdlQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0Q2hhbmdlKHNvcnQ6IFNvcnREZXNjcmlwdG9yW10pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5zb3J0Q2hhbmdlKHNvcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluQ2VsbENoZWNrQm94T25DaGFuZ2UoZXZlbnQ6IGFueSwgcm93SW5kZXg6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5jaGVja2VkO1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBnRGF0YVtyb3dJbmRleF1bY29sdW1uLlZhbHVlXSA9IGlzQ2hlY2tlZDtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY29tbWFuZCBoYW5kbGVyXHJcbiAgcHVibGljIGFkZEhhbmRsZXIoeyBzZW5kZXIgfSkge1xyXG4gICAgdGhpcy5pc05ldyA9IHRydWU7XHJcblxyXG4gICAgLy8gY2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbFxyXG4gICAgY29uc3QgY29sRm9ybUNvbnRyb2wgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIGlmIChjb2wuVHlwZSA9PT0gJ3p0ZXh0ZWRpdG9yJykge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzX1RleHRFZGl0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChudWxsLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gYWRkIHRvIGdyaWQgcm93XHJcbiAgICBzZW5kZXIuYWRkUm93KHRoaXMuZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGZvcm1Hcm91cCwgaXNOZXcgfSk6IHZvaWQge1xyXG4gICAgLy8gR2V0IHRoZSBleGlzdGluZyBkYXRhIGZyb20gdGhlIGdyaWRcclxuICAgIGNvbnN0IGdyaWRFeGlzdGluZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWRcclxuICAgIGlmIChmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgLy8gQ2hlY2sgZm9yIGEgdW5pcXVlIGtleSBmaWVsZFxyXG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmRhdGFbJ1VuaXF1ZUtleSddO1xyXG4gICAgICBpZiAodW5pcXVlS2V5KSB7XHJcbiAgICAgICAgLy8gR2V0IHRoZSB1bmlxdWUga2V5IHZhbHVlIGZyb20gdGhlIGZvcm1cclxuICAgICAgICBjb25zdCBmb3JtVW5pcXVlS2V5VmFsdWUgPSBmb3JtR3JvdXAudmFsdWVbdW5pcXVlS2V5XTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWVcclxuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IGdyaWRFeGlzdGluZ0RhdGEuc29tZShkYXRhID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIC8vIElmIGVkaXRpbmcgYW4gZXhpc3Rpbmcgcm93LCBza2lwIHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgIWlzTmV3ICYmXHJcbiAgICAgICAgICAgIHJvd0luZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdyaWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldID09PSBmb3JtVW5pcXVlS2V5VmFsdWUgJiZcclxuICAgICAgICAgICAgLy8gU2tpcCBjaGVja2luZyBhZ2FpbnN0IHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldICE9PSBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XVt1bmlxdWVLZXldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSB2YWx1ZSwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gd2l0aG91dCBzYXZpbmdcclxuICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0Vycm9yIG9jY3VyOiBEdXBsaWNhdGVkIHVuaXF1ZSBmaWVsZCBlbnRyeS4nLCAndG9wJywgdHJ1ZSwgMzAwMCwgJ2RhbmdlcicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzLCBzYXZlIHRoZSBkYXRhXHJcbiAgICAgIGlmIChpc05ldykge1xyXG4gICAgICAgIC8vIEFkZCBhIG5ldyByb3cgdG8gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGEucHVzaChmb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBhbiBleGlzdGluZyByb3cgaW4gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdID0gZm9ybUdyb3VwLnZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcGRhdGUgdGhlIGdyaWQgZGF0YSBhbmQgY2xvc2UgdGhlIHJvdyBlZGl0b3JcclxuICAgICAgdGhpcy5zZXREYXRhKGdyaWRFeGlzdGluZ0RhdGEpO1xyXG4gICAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4IH0pIHtcclxuICAgIC8vIGNhbmNlbCBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCwgZGF0YUl0ZW0gfSkge1xyXG4gICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSByb3cgYmVpbmcgZWRpdGVkIGlzIG5vdCBhIG5ldyByb3dcclxuICAgIHRoaXMuaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBDbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sLCBhcHBlbmQgY3VycmVudCByb3cgdmFsdWVcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICBpZiAoY29sLlR5cGUgPT09ICd6dGV4dGVkaXRvcicpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlc19UZXh0RWRpdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2woZGF0YUl0ZW1bY29sLlZhbHVlXSwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgZm9ybSBncm91cCBvbiB0aGUgcm93IGJlaW5nIGVkaXRlZFxyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHJvd0luZGV4O1xyXG4gICAgc2VuZGVyLmVkaXRSb3cocm93SW5kZXgsIHRoaXMuZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVIYW5kbGVyKHsgc2VuZGVyLCBkYXRhSXRlbSB9KSB7XHJcbiAgICBjb25zdCBnRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgoZGF0YUl0ZW0sIGdEYXRhLCB0aGlzLmRhdGFbJ1VuaXF1ZUtleSddKTtcclxuICAgIGdEYXRhLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBkYXRhIGluIHRoZSBncmlkXHJcbiAgICB0aGlzLnNldERhdGEoZ0RhdGEpO1xyXG5cclxuICAgIHNlbmRlci5jYW5jZWxDZWxsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlRWRpdG9yKGdyaWQsIHJvd0luZGV4ID0gdGhpcy5lZGl0ZWRSb3dJbmRleCkge1xyXG4gICAgZ3JpZC5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgICB0aGlzLmVkaXRlZFJvd0luZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1JbmRleChpdGVtOiBhbnksIGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBkYXRhLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgaWYgKGRhdGFbaWR4XVtrZXldID09PSBpdGVtW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gaWR4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgRmlsdGVyXHJcbiAgcHJpdmF0ZSBzZXR1cEZpbHRlckZlYXR1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmZpbHRlckdyb3VwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmFkdmZpbHRlckdyb3VwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoKCkge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZmlsdGVyR3JvdXAuZm9ybTtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gZm9ybS5jb250cm9scztcclxuXHJcbiAgICBpZiAodGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgY29uc3QgYWR2Zm9ybSA9IHRoaXMuYWR2ZmlsdGVyR3JvdXAuZm9ybTtcclxuICAgICAgY29uc3QgYWR2Y29udHJvbHMgPSBhZHZmb3JtLmNvbnRyb2xzO1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoYWR2Y29udHJvbHMpKSB7XHJcbiAgICAgICAgY29udHJvbHNbY10gPSBhZHZjb250cm9sc1tjXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuRmlsdGVyU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLWZpbHRlcnNlYXJjaFwiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkZpbHRlclNlYXJjaCxcclxuICAgICAgICBkYXRhOiB7IGZvcm1jb250cm9sczogY29udHJvbHMgfSxcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtdO1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5maWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKSB8fCBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5hZHZmaWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKTtcclxuICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiBmaWVsZC5WYWx1ZUV4cHIgfHwgZmllbGQuVmFsdWUsXHJcbiAgICAgICAgICAgIG9wczogdGhpcy5tYXBGaWx0ZXJPcGVyYXRvckJ5RmllbGRUeXBlKGZpZWxkKSxcclxuICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFZGl0KCkge1xyXG4gICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5maWx0ZXJHcm91cCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJGaWx0ZXJEYXRhKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGZvcm0gPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gZm9ybS5jb250cm9scztcclxuICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKGNvbnRyb2xOYW1lLCBudWxsLCBncm91cCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZHZhbmNlZFNlYXJjaCgpIHtcclxuICAgIHRoaXMuaXNTaG93QWR2RmlsdGVyID0gIXRoaXMuaXNTaG93QWR2RmlsdGVyO1xyXG4gICAgaWYgKCF0aGlzLmlzU2hvd0FkdkZpbHRlcikge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkLlR5cGUpIHtcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICBjYXNlIFwibnVtZXJpY1wiOlxyXG4gICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICBjYXNlIFwiZW1haWxcIjpcclxuICAgICAgY2FzZSBcInBhc3N3b3JkXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZWxcIjpcclxuICAgICAgY2FzZSBcInRleHRcIjpcclxuICAgICAgY2FzZSBcInVybFwiOlxyXG4gICAgICBjYXNlIFwiY3VycmVuY3lcIjpcclxuICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgICAgaWYgKCFmaWVsZFsnRmlsdGVyQ29udGFpbnNVc2luZ0VxdWFsJ10pIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbnRhaW5zXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIj09XCI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFwiPVwiO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGdyaWQgY29tbW9uIHNldHRpbmcgZnVuY3Rpb25cclxuICBwdWJsaWMgc2V0IHNldEdyaWRUaXRsZShuZXdUaXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdyaWRUaXRsZSA9IG5ld1RpdGxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZXRHcmlkU3RhdGUoc3RhdGU6IFN0YXRlKSB7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZSA9IHN0YXRlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPSBzdGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmlkVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwID0gMDtcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNraXAgPSAwO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8IS0tXHJcbjxkaXYgc3R5bGU9XCJtYXJnaW46IDEwcHhcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBrLWZvcm1cIj5cclxuICAgICAgICAgIDxmaWVsZHNldD5cclxuICAgICAgICAgICAgPGxlZ2VuZD5CaW5kaW5nIHR5cGVzPC9sZWdlbmQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLWZvcm0tZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPkJpbmQgdGhlIGRhdGEgdG86PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXJyYXlcIiB2YWx1ZT1cImFycmF5XCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFycmF5XCI+QXJyYXkgb2JqZWN0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImdyaWREYXRhUmVzdWx0XCIgdmFsdWU9XCJncmlkRGF0YVJlc3VsdFwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJncmlkRGF0YVJlc3VsdFwiPkdyaWREYXRhUmVzdWx0IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJhc3luY1wiIHZhbHVlPVwiYXN5bmNcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiYXN5bmNcIj5Bc3luY2hyb25vdXMgc291cmNlPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG48ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuXHJcbiAgPCEtLSA8ZGl2ICpuZ0lmPVwiZGF0YS5UaXRsZVwiIGNsYXNzPVwiZ3JpZFRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2Rpdj4gLS0+XHJcbiAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtYW5jaG9yPlxyXG4gICAgPHNwYW4+e3sgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0IH19PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPGtlbmRvLXBvcG92ZXIgI2dyaWRQb3BPdmVyIFtwb3NpdGlvbl09XCJkYXRhLlBvcE92ZXJQb3NpdGlvbiB8fCAnYm90dG9tJ1wiIFt0ZW1wbGF0ZURhdGFdPVwiZ2V0Q29udGV4dERhdGEuYmluZCh0aGlzKVwiPlxyXG4gICAgPCEtLSA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyVGl0bGVUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIiA+XHJcbiAgICAgIDxkaXYgW3N0eWxlXT1cImRhdGEuVGl0bGVTdHlsZVwiICpuZ0lmPVwiZGF0YSAmJiBkYXRhLlRpdGxlXCIgW2lubmVySFRNTF09XCJkYXRhLlRpdGxlXCI+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPiAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1BvcG92ZXJCb2R5VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XHJcbiAgICAgIDxkaXYgW3N0eWxlXT1cImRhdGEuQm9keVN0eWxlXCIgY2xhc3M9XCJwb3BvdmVyYm9keVwiICpuZ0lmPVwiZGF0YSAmJiBkYXRhLkJvZHlcIiBbaW5uZXJIVE1MXT1cImRhdGEuQm9keSB8IGh0bWxTYW5pdGl6ZVwiIFtuZ0NsYXNzXT1cImRhdGEuQm9keUNsYXNzXCIgKG1vdXNlbGVhdmUpPVwiY2xvc2VQb3BPdmVyLmNhbGwodGhpcywgJGV2ZW50KVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLXBvcG92ZXI+XHJcblxyXG4gIDxkaXYga2VuZG9Ub29sdGlwIHNob3dPbj1cIm5vbmVcIiBbdG9vbHRpcFRlbXBsYXRlXT1cInRlbXBsYXRlXCIgZmlsdGVyPVwiLmstZ3JpZCB0ZFwiIChtb3VzZW92ZXIpPVwic2hvd1Rvb2x0aXAoJGV2ZW50KVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiZTF0YWctc3R5bGUxXCI+XHJcbiAgICA8ZGl2IGtlbmRvUG9wb3ZlckNvbnRhaW5lciBbcG9wb3Zlcl09XCJncmlkUG9wT3ZlclwiIGZpbHRlcj1cImRpdi5ncmlkQ2VsbC53aXRoUG9wb3ZlckluR3JpZFwiIHNob3dPbj1cIm5vbmVcIiBrZW5kb1BvcG92ZXJDb250YWluZXIgI3BvcG92ZXJjb250YWluZXI9XCJrZW5kb1BvcG92ZXJDb250YWluZXJcIj5cclxuICAgICAgPGtlbmRvLWdyaWQgW3pncmlkYmluZGluZ109XCJ7ZGF0YTogZGF0YSwgZ3JvdXA6IGdyb3VwLCBwYXJhbXM6IHBhcmFtcywgZ3JpZFN1YmplY3Q6IGdyaWRTdWJqZWN0LCBncmlkU2V0dGluZzogZ3JpZFNldHRpbmd9XCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIGNsYXNzPVwiZGVza3RvcC1ncmlkIGUxdGFnLXN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cImRhdGEuc2Nyb2xsQWJsZSA9PT0gZmFsc2UgPyAnbm9uZScgOiAnc2Nyb2xsYWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwicGFnZWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZW4tcGFnZXJdPVwiIXBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS50YWtlXCJcclxuICAgICAgICAgICAgICAgICAgW3NraXBdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNraXBcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydF09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuc29ydFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJ7YWxsb3dVbnNvcnQ6IHRydWUsbW9kZTogJ211bHRpcGxlJ31cIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLmVuYWJsZUZpbHRlcmluZyAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImRhdGEuRGlzYWJsZUdyaWRDb2x1bW5NZW51ID8gZmFsc2UgOiB7IGZpbHRlcjogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2VsbENsb3NlKT1cImVkaXRDZWxsQ2xvc2VIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZGF0YVN0YXRlQ2hhbmdlKT1cImRhdGFTdGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwic29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJmaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb0dyaWRTZWxlY3RCeV09XCJyb3dTZWxlY3Rpb25LZXlcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkS2V5cyldPVwicm93U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjYW5jZWwpPVwiY2FuY2VsSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGVkaXQpPVwiZWRpdEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGQpPVwiYWRkSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJhZGp1c3RXaWR0aFVwb25SZXNpemUoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChleGNlbEV4cG9ydCk9XCJvbkV4Y2VsRXhwb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2FsbGJhY2suYmluZCh0aGlzKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0IHx8IGRhdGEuQWxsb3dTYXZlU3RhdGUgfHwgZGF0YS5UaXRsZSB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lIHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1sZWZ0LWl0ZW1cIiAqbmdJZj1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGZhLWljb24gKm5nSWY9XCJkYXRhLkljb25cIiBjbGFzcz1cImdyaWRUaXRsZUljb25cIiBbaWNvbl09XCJkYXRhLkljb25cIj48L2ZhLWljb24+IC0tPlxyXG4gICAgICAgICAgICA8a2VuZG8tbGFiZWwgY2xhc3M9XCJncmlkVGl0bGVcIiAqbmdJZj1cImdyaWRUaXRsZVwiPnt7IGdyaWRUaXRsZSB9fTwva2VuZG8tbGFiZWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJSZWZyZXNoXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibGVmdC1idXR0b25zIHJlZnJlc2gtYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cInJlZnJlc2hEYXRhKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWdyaWQtYnV0dG9uIGstaS1yZWZyZXNoLXNtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdC1pdGVtLXNlY29uZC1jb250YWluZXJcIiAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIiBbY2xhc3Mud2l0aC1ncmlkLXRpdGxlXT1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibGVmdC1idXR0b25zIGV4cG9ydC1idXR0b25cIiBrZW5kb0dyaWRFeGNlbENvbW1hbmQgKm5nSWY9XCJkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1maWxlLWV4Y2VsXCI+PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhwb3J0LXRvLWV4Y2VsLWJ1dHRvbi10ZXh0XCI+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0Rvd25sb2FkIGFzIEV4Y2VsJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yaWdodC1pdGVtXCIgKm5nSWY9XCJncmlkQnRuIHx8IGRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUgfHwgZ3JpZERlZmF1bHRTdGF0ZUV4aXN0IHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgIDxhcHAtendvcmtmbG93YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnendvcmtmbG93YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXp3b3JrZmxvd2J1dHRvbnM+XHJcbiAgICAgICAgICAgIDxhcHAtemJ1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3pidXR0b25zJ1wiIFtkYXRhXT1cImdyaWRCdG5cIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCI+PC9hcHAtemJ1dHRvbnM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJzYXZlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cImRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTYXZlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZXN0b3JlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cInNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyLW91dGxpbmVcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1Jlc3RvcmUgU2V0dGluZ3MnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9HcmlkQWRkQ29tbWFuZCAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWU6ICdBZGQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21BZGRDb21tYW5kKGdyb3VwKVwiICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktYWRkXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tUmVzZXRDb21tYW5kKGdyb3VwKVwiICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZXNldENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS10cmFzaFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWU6ICdSZXNldCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vcm1hbC1maWx0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImZpbHRlci1maWVsZHNcIiBbZ3JvdXBdPVwiZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEZpbHRlckJhckZpZWxkXCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1idXR0b25zXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzZWFyY2hcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsIGlvbi10ZXh0LWNhcGl0YWxpemVcIj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2VhcmNoJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIiAqbmdJZj1cImRhdGEuSXNTaG93R3JpZENhbmNlbEZpbHRlckJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwidGltZXNcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBbbmdDbGFzc109XCJpc1Nob3dBZHZGaWx0ZXIgPyAndG9nZ2xlT24nIDogJ3RvZ2dsZU9mZidcIiAoY2xpY2spPVwiYWR2YW5jZWRTZWFyY2goKVwiICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNsaWRlcnMtaFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhcHAtemZvcm0gKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiIGNsYXNzPVwidG8tcHJlbG9hZC10aGUtZmllbGRzXCIgW2dyb3VwXT1cImFkdmZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1jb250YWluZXJcIiAqbmdJZj1cImlzU2hvd0FkdkZpbHRlclwiIFtAaGlkZUFuZFNob3dBbmltYXRpb25dPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtZmlsdGVyLXNlcGVyYXRvclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdBZHZhbmNlZCBTZWFyY2gnKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJhZHZmaWx0ZXItZmllbGRzXCIgW2dyb3VwXT1cImFkdmZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uICpuZ0lmPVwiISFkYXRhLlNlbGVjdE9wdGlvbnNcIiBbd2lkdGhdPVwiNjBcIiBzaG93U2VsZWN0QWxsPVwidHJ1ZVwiIFtjb2x1bW5NZW51XT1cInRydWVcIiBbbG9ja2VkXT1cImNoZWNrYm94Q29sdW1uUGlubmVkXCI+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gW3N0eWxlXT1cImdldEdyaWRDb2x1bW5TdHlsZSgpXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7XCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFt0aXRsZV09XCJjb2wudGl0bGVcIiBbd2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pblJlc2l6YWJsZVdpZHRoXT1cImNvbC5taW5SZXNpemFibGVXaWR0aFwiIFtmaWx0ZXJdPVwiY29sLmZpbHRlclwiIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGUoY29sLmVuYWJsZUZpbHRlcmluZylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCIgW2hlYWRlclN0eWxlXT1cImdldEdyaWRIZWFkZXJTdHlsZSgpXCIgaGVhZGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9vdGVyU3R5bGVdPVwiZ2V0R3JpZEZvb3RlclN0eWxlKClcIiBmb290ZXJDbGFzcz1cImUxdGFnLXN0eWxlOVwiIFtoaWRkZW5dPVwiY29sLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiY29sLmZvcm1hdFwiIFtjbGFzc109XCJjb2wuQ2xhc3NcIiBbbG9ja2VkXT1cImxvY2tlZChjb2wpXCIgZWRpdG9yPVwibnVtZXJpY1wiIFtjb2x1bW5NZW51XT1cIiFjb2wuZGlzYWJsZUNvbHVtbk1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdG9yXT1cImNvbC5lZGl0b3JUeXBlXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PSAnemRhdGUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pkYXRldGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRhdGUtcmFuZ2UtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBbZmllbGRdPVwiY29sLmZpZWxkXCIgW2RhdGFdPVwiZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJlcVwiPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJjb250YWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gR3JpZCBFZGl0IFRlbXBsYXRlIC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEVkaXRUZW1wbGF0ZSAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmQgXCIgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIiBsZXQtY29sdW1uPVwiY29sXCIgbGV0LWZvcm1Hcm91cD1cImZvcm1Hcm91cFwiIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94ICNjZWxsQW5jaG9yIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZClcIj48L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXBvcHVwIFthbmNob3JdPVwiY2VsbEFuY2hvci5udW1lcmljSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLk5hbWUgfX0gcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby10ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXBvcHVwIFthbmNob3JdPVwiY2VsbEFuY2hvci5pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhKGlzTmV3ICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENsYXNzPVwiay13aWRnZXQgay10b29sdGlwIGstdG9vbHRpcC12YWxpZGF0aW9uIGstaW52YWxpZC1tc2dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7IG9wYWNpdHk6IDAuNTtcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS08aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCI+e3sgY29sLk5hbWUgfX0gaXMgcmVxdWlyZWQuPC9pb24tbGFiZWw+LS0+XHJcbiAgICAgICAgICAgICAgICAgIC1sXHJcblxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLk5hbWUgfX0gcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogMXB4IDA7XCIgKm5nSWY9XCIhY29sLmNsaWNrYWJsZUljb25zICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkICE9PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtuZ0NsYXNzXT1cImdldENsYXNzKGRhdGFJdGVtLCBjb2wpXCIgW3N0eWxlXT1cImdldENlbGxTdHlsZShjb2wsIGRhdGFJdGVtKVwiIFthdHRyLmRhdGEtaWRdPVwiZGF0YUl0ZW0uSWRcIiBbYXR0ci5jb2x1bW4tbmFtZV09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNob3dQb3BPdmVyKGNvbCwgJGV2ZW50KVwiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3ZlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6c2hvcnRkYXRlJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLTInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndXJsJ1wiIHN0eWxlPVwiY29sb3I6IGJsdWU7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pICE9PSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtuZ1N3aXRjaF09XCJjZWxsU3R5bGVDb25kaXRpb24oY29sLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPXRydWU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGxTdHlsZUNvbmRpdGlvbkRlZmF1bHRcIiBbc3R5bGVdPVwic2V0Q2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cIiEhY29sLm5hdmlnYXRlVG9cIiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvKCRldmVudCwgY29sLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIHNpemU9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICB7eyBjb2wuQ2xpY2thYmxlSWNvbnMgfX1cclxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9IFwiZW5kXCIgbmFtZT1cImFycm93LWZvcndhcmRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiICpuZ0lmPVwiY29sLmlzRWRpdGFibGVJbkdyaWQgPT09IHRydWUgJiYgaXNJbmxpbmVGb3JtR3JvdXBIYXNWYWx1ZSgpICYmICFpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyAmJiAhY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIGNsYXNzPVwiZTF0YWctc3R5bGU1XCIgW3N0eWxlXT1cImdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sLCBkYXRhSXRlbSwgcm93SW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16aW5wdXQtY29udGFpbmVyIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleClcIiBbY29udGFpbmVyRmllbGRdPVwiY29udGFpbmVyRmllbGRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIiBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXppbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sLmNsaWNrYWJsZUljb25zXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaWNvbi5DbGFzcyA/IGljb24uQ2xhc3MgOiAnJ1wiICpuZ0lmPVwiISFpY29uICYmICghIWRhdGFJdGVtLldGU19TdGF0dXNDb2RlICYmICEhaWNvbilcclxuICAgICAgICAgICAgICA/IGRhdGFJdGVtLldGU19TdGF0dXNDb2RlICE9PSBpY29uLldGU19TdGF0dXNDb2RlXHJcbiAgICAgICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm9uQnRuQ2xpY2soJGV2ZW50LCBpY29uLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgIHt7aWNvbi5OYW1lIHx8IGRhdGFJdGVtW2NvbC5maWVsZF19fSA8ZmEtaWNvbiBbaWNvbl09XCJpY29uLkljb25cIiBzdHlsZT1cInBhZGRpbmc6IDRweCA2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRCdXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIDxzdHJvbmc+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fTwvc3Ryb25nPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gJ2Rpc2NvbnRpbnVlZCcgOiAnYWN0aXZlJ319XCI+XHJcbiAgICAgICAgICAgICAge3tkYXRhSXRlbS5EaXNjb250aW51ZWQgPyBcImRpc2NvbnRpbnVlZFwiIDogXCJhY3RpdmVcIn19XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZvb3RlclRlbXBsYXRlIGxldC1jb2x1bW4gbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIiAqbmdJZj1cImRhdGEuRW5hYmxlQWdncmVnYXRlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU3XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTdcIj5cclxuICAgICAgICAgICAgICB7e2NvbC5hZ2dyZWdhdGVUeXBlfX1cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLjInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkU2F2ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnU2F2ZScgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRDYW5jZWxDb21tYW5kIFtwcmltYXJ5XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICB7eyBpc05ldyA/ICdEaXNjYXJkIGNoYW5nZXMnIDogJ0NhbmNlbCcgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkRWRpdENvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJFZGl0XCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkUmVtb3ZlQ29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIiB3aWR0aD1cIjE4MFwiIFtjb2x1bW5NZW51XT1cImZhbHNlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCIgY2xhc3M9XCJlMXRhZy1zdHlsZThcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWlzTmV3PVwiaXNOZXdcIiBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtLCByb3dJbmRleClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIHt7IFwiUmVtb3ZlXCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1leGNlbCBmaWxlTmFtZT1cIkV4cG9ydC54bHN4XCIgW2ZldGNoRGF0YV09XCJhbGxSZXN1bHRzXCI+PC9rZW5kby1ncmlkLWV4Y2VsPlxyXG4gICAgICA8L2tlbmRvLWdyaWQ+XHJcbiAgICAgIDxhcHAtY29udGV4dC1tZW51IFtkYXRhXT1cImRhdGFcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCIgI2RhdGFpdGVtY29udGV4dG1lbnU+PC9hcHAtY29udGV4dC1tZW51PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBmb3IgREVDIGF1dG8gc2Nyb2xsaW5nIC0tPlxyXG4gIDxkaXYgaWQ9XCJlbmQtb2YtZ3JpZFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
|
|
1117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHbkUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRXJGLE9BQU8sRUFFRyxNQUFNLEVBQWMsZ0JBQWdCLEVBRTdDLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxr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QUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7MkdBOXVDVSxjQUFjOytGQUFkLGNBQWMsNkZBQ2QsZ0JBQWdCLG1GQUNoQix5QkFBeUIscUZDN0R0QywwbjNCQThZQSx5NnZDRHhWYztRQUNWLDRCQUE0QjtLQUM3QjsyRkFHVSxjQUFjO2tCQVQxQixTQUFTOytCQUNFLFdBQVcsY0FHVDt3QkFDViw0QkFBNEI7cUJBQzdCO3NlQUltQyxVQUFVO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDNkIsZ0JBQWdCO3NCQUF2RSxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVsYXkgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEV4Y2VsRXhwb3J0RGF0YSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWV4Y2VsLWV4cG9ydCc7XHJcbmltcG9ydCB7IEdyaWRJdGVtLCBTZWxlY3RhYmxlU2V0dGluZ3MsIFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XHJcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yLCBTdGF0ZSwgcHJvY2VzcyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeVwiO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdG9vbHRpcCc7XHJcbmltcG9ydCB7IEdyaWREYXRhUmVzdWx0LCBEYXRhU3RhdGVDaGFuZ2VFdmVudCwgUGFnZUNoYW5nZUV2ZW50LCBDZWxsQ2xpY2tFdmVudCwgR3JpZENvbXBvbmVudCwgUm93QXJncyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IERhdGFMaXN0aW5nRmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBoaWRlQW5kU2hvd1ZlcnRpY2FsQW5pbWF0aW9uIH0gZnJvbSBcIi4uL2FuaW1hdGlvbnMvY29tcG9uZW50LWFuaW1hdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29uc3RhbnQgfSBmcm9tIFwiLi4vY29uc3RhbnRzL2NvbnN0YW50XCI7XHJcbmltcG9ydCB7IE1haW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL21haW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvZWxlbWVudGNvbnRhaW5lci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSBcIi4vemdyaWQuYmluZGluZy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHtcclxuICBXZWJBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvcmVTZXJ2aWNlLCBTdG9yYWdlU2Vzc2lvblNlcnZpY2UsIEZvbnRBd2VTb21lU2VydmljZSxcclxuICBaR3JpZFBvc3RBcGlQYXJhbXMsIFpHcmlkU2V0dGluZ3MsIFpHcmlkQ3VzdG9tQ29sdW1uLCBPZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLCBKc29uQ2FjaGUsIFJlc291cmNlQXBpU2VydmljZVxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IEdyaWRTZXR0aW5nVHlwZSwgR3JpZFN0YXRlTG9naWNUeXBlLCBaR3JpZFNlcnZpY2UgfSBmcm9tIFwiLi96Z3JpZC5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpHcmlkIHtcclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcztcclxuICBzdGF0ZTogU3RhdGU7XHJcbiAgY29sdW1uczogYW55W107XHJcbiAgcGFnaW5hdGlvbkFwaVBvc3RVcmw6IHN0cmluZztcclxuICBkYXRhOiBaRmllbGQ7XHJcbiAgZ3JvdXA6IFpHcm91cDtcclxuICB6Z3JpZDogWkdyaWRCaW5kaW5nRGlyZWN0aXZlO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IEZvcm1Hcm91cDtcclxuICBnZXRHcmlkRGF0YTogKCkgPT4gYW55W107XHJcbiAgZ2V0RGF0YTogKCkgPT4gdm9pZDtcclxuICBjbGVhckRhdGE6ICgpID0+IHZvaWQ7XHJcbiAgc2V0RGF0YTogKGRhdGE6IGFueSkgPT4gdm9pZDtcclxuICBzZXRDb2x1bW5zOiAoY29sdW1uRmllbGRzTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pID0+IHZvaWQ7XHJcbiAgJHNldENvbHVtbnM6IChjb2x1bW5GaWVsZHNOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIGdldEZvcm1Db250cm9sRGF0YSgpOiBhbnlbXTtcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16Z3JpZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vemdyaWQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vemdyaWQuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBaZ3JpZENvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0aW5nRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSkgcHVibGljIHRvb2x0aXBEaXI6IFRvb2x0aXBEaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZChFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBlbGVtZW50Q29udGFpbmVyITogRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZTtcclxuICAvLyBAVmlld0NoaWxkKFpHcmlkQmluZGluZ0RpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pIHpncmlkOiBaR3JpZEJpbmRpbmdEaXJlY3RpdmU7XHJcblxyXG4gIHpncmlkOiBhbnkgPSBudWxsO1xyXG4gIG9hdXRoVXJsOiBzdHJpbmcgPSBudWxsO1xyXG4gIGdyaWREYXRhOiBHcmlkRGF0YVJlc3VsdDtcclxuICBzZWxlY3RhYmxlU2V0dGluZ3M6IFNlbGVjdGFibGVTZXR0aW5ncztcclxuICByb3dTZWxlY3Rpb246IHN0cmluZ1tdID0gW107XHJcbiAgbXlTZWxlY3Rpb24gPSBuZXcgTWFwKCk7XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgLy8gZm9yIGtlbmRvIGdyaWQgYnVpbHQtaW5cclxuICBwdWJsaWMgcHJldmlvdXNOZXh0OiBib29sZWFuO1xyXG4gIHB1YmxpYyBncmlkQnRuO1xyXG4gIHB1YmxpYyBwYWdlYWJsZTogYW55ID0gZmFsc2U7XHJcbiAgcHVibGljIGZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBhZHZmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgaXNTaG93QWR2RmlsdGVyID0gZmFsc2U7XHJcbiAgcHVibGljIGdyaWRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgcHJpdmF0ZSBpc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjaGVja2JveENvbHVtblBpbm5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXMgPSB7XHJcbiAgICByZWZlcklkOiBudWxsLFxyXG4gICAgcGFnZU5vOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICBzb3J0T3JkZXI6IFwiXCIsXHJcbiAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgc29ydE9yZGVyczogW10sXHJcbiAgICBmaWx0ZXJQYXJhbXM6IFtdLFxyXG4gICAgcGFyYW1ldGVyczogXCJcIixcclxuICAgIGZpbHRlcnM6IFwiXCIsXHJcbiAgICBjb2x1bW5zOiBcIlwiLFxyXG4gICAgZ3JhbnRUeXBlOiA0XHJcbiAgfTtcclxuXHJcbiAgZ3JpZFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29sdW1uczogYW55W107XHJcbiAgZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQ6IGFueVtdO1xyXG4gIGVkaXRhYmxlQ29sdW1uczogYW55W107XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcGFnZVNpemVzOiBib29sZWFuIHwgYW55W107XHJcbiAgZ3JpZFN0b3JhZ2VLZXk6IHN0cmluZztcclxuICBncmlkRGVmYXVsdFN0YXRlRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc05ldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBlZGl0ZWRSb3dJbmRleDogbnVtYmVyO1xyXG4gIHB1YmxpYyBncmlkU2V0dGluZzogWkdyaWRTZXR0aW5ncztcclxuICA7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYWluU2VydmljZTogTWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBaR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9mZmxpbmVEYXRhYmFzZVNlcnZpY2U6IE9mZmxpbmVEYXRhYmFzZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMub2F1dGhVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpLmUxT2F1dGhVcmwgKyBcIi9cIjtcclxuICAgIHRoaXMuYWxsUmVzdWx0cyA9IHRoaXMuYWxsUmVzdWx0cy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuY2xlYXJEYXRhID0gdGhpcy5jbGVhckRhdGEuYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLnNldHVwRmlsdGVyRmVhdHVyZSgpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNldHVwR3JpZENvbXBvbmVudEF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuZ3JpZFNldHRpbmcgPSB7IGdyaWRTdGF0ZTogdGhpcy5ncmlkU2VydmljZS5zZXR1cEdyaWRTZXR0aW5nKHRoaXMuZGF0YSkgfTtcclxuXHJcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9uRm9yR3JpZFN1YmplY3QoKTtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVUb29sQmFySXRlbXMoKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZENhbGxiYWNrKHRoaXMuZ3JvdXApO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgaXNCYWNrTmF2aWdhdGVkID0gKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0ZWRSZWxvYWRHcmlkXCIpID09PSAndHJ1ZScpO1xyXG5cclxuICAgIGlmIChpc0JhY2tOYXZpZ2F0ZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIFN0YXRlIChwYWdpbmF0aW9uLCBzb3J0YWJsZSwgZmlsdGVyLCBvcmRlcmluZylcclxuICBwdWJsaWMgZGF0YVN0YXRlQ2hhbmdlKHN0YXRlOiBEYXRhU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgdGhpcy56Z3JpZC5kYXRhU3RhdGVDaGFuZ2Uoc3RhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcmFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0YWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvY2tlZChjb2xTZXR0aW5nOiBhbnkpIHtcclxuICAgIGlmIChjb2xTZXR0aW5nWydwaW5uZWRMZWZ0J10gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHB1YmxpYyBvbkV4Y2VsRXhwb3J0KGU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgY29sUmVxdWlyZWRGb3JtYXQgPSBbXTtcclxuXHJcbiAgICAvLyBDb2xsZWN0IGNvbHVtbnMgdGhhdCBoYXZlIGEgc3BlY2lmaWMgRXhjZWwgY2VsbCBmb3JtYXRcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGlmIChjb2wuRXhjZWxDZWxsRm9ybWF0KSB7XHJcbiAgICAgICAgY29sUmVxdWlyZWRGb3JtYXQucHVzaCh7IGNvbE5hbWU6IGNvbC5EaXNwbGF5TmFtZSA/PyBjb2wuTmFtZSwgY2VsbEZvcm1hdDogY29sLkV4Y2VsQ2VsbEZvcm1hdCwgY29sSW5kZXg6IG51bGwgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChjb2xSZXF1aXJlZEZvcm1hdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGUud29ya2Jvb2suc2hlZXRzWzBdLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICBpZiAocm93LnR5cGUgPT09ICdoZWFkZXInKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaGVhZGVyIGNlbGxzIHRvIGZpbmQgbWF0Y2hpbmcgY29sdW1uIG5hbWVzIGFuZCBzdG9yZSB0aGVpciBpbmRleFxyXG4gICAgICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29sUmVxdWlyZWRGb3JtYXQuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2VsbC52YWx1ZSA9PT0gY29sLmNvbE5hbWUpIHtcclxuICAgICAgICAgICAgICBjb2wuY29sSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocm93LnR5cGUgPT09ICdkYXRhJykge1xyXG4gICAgICAgIC8vIEFwcGx5IHRoZSBmb3JtYXQgdG8gY2VsbHMgaW4gZGF0YSByb3dzIGlmIHRoZWlyIGluZGV4IG1hdGNoZXNcclxuICAgICAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGNvbFJlcXVpcmVkRm9ybWF0LmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjb2wuY29sSW5kZXgpIHtcclxuICAgICAgICAgICAgICBjZWxsLmZvcm1hdCA9IGNvbC5jZWxsRm9ybWF0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBDb2x1bW5zXHJcbiAgcHVibGljIGlzU2VsZWN0T3B0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgIGNoZWNrYm94T25seTogZmFsc2UsXHJcbiAgICAgICAgbW9kZTogKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zPy50b0xvd2VyQ2FzZSgpID09PSBcIm11bHRpcGxlXCIpID8gXCJtdWx0aXBsZVwiIDogXCJzaW5nbGVcIlxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb2x1bW5zKGNvbHVtbk5hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSB7XHJcbiAgICB0aGlzLmdyb3VwW2NvbHVtbk5hbWVdID0gdGhpcy53cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5zKTtcclxuICAgIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljICRzZXRDb2x1bW5zKGNvbHVtbk5hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuZ3JvdXBbY29sdW1uTmFtZV0gPSB0aGlzLndyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbnMpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcmlkQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3cmFwQ29sdW1uTmFtZXNJbkZpZWxkRWxlbWVudChjb2x1bW5MaXN0OiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pIHtcclxuICAgIHJldHVybiBvZihjb2x1bW5MaXN0Lm1hcChjID0+IHtcclxuICAgICAgY29uc3QgaXNIaWRkZW46IGJvb2xlYW4gPSBjLkhpZGRlbjtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBOYW1lOiBjLk5hbWUsXHJcbiAgICAgICAgVmFsdWU6IGMuQ29kZSxcclxuICAgICAgICBUeXBlOiBjLlR5cGUsXHJcbiAgICAgICAgZ3JpZENvbFZpc2libGU6ICFpc0hpZGRlbixcclxuICAgICAgICBFbmFibGVHcmlkVmFsdWU6IGMuRW5hYmxlR3JpZFZhbHVlIHx8IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiAxMDAgKyBjLk5hbWUubGVuZ3RoICogNCxcclxuICAgICAgICBlbmFibGVGaWx0ZXJpbmc6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUGlubmluZzogdHJ1ZSxcclxuICAgICAgICBEaXZDbGFzczogXCJjb2wteHMtMTIgY29sLXNtLTZcIixcclxuICAgICAgICBJc0VkaXRhYmxlSW5HcmlkOiBjLkVkaXRhYmxlXHJcbiAgICAgIH07XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlR3JpZENvbHVtbnMoZ3JpZFNldHRpbmc/OiBaR3JpZFNldHRpbmdzKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbHVtbkZpZWxkcyQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKSB8fCBvZihbXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRhdGEuQ29sdW1uRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGNvbHVtbkZpZWxkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2x1bW5GaWVsZHMkKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGYWlsIHRvIGdlbmVyYXRlIGdyaWQgY29sdW1uIGZpZWxkcy4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhLkNvbHVtbkZpZWxkcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5GaWVsZHMkLnBpcGUoXHJcbiAgICAgIHRhcChjb2x1bW5GaWVsZCA9PiB7XHJcbiAgICAgICAgaWYgKCFjb2x1bW5GaWVsZCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkL0VtcHR5IGdyaWQoJyArIHRoaXMuZGF0YS5OYW1lICsgJykgZGF0YSB0byBnZW5lcmF0ZSBjb2x1bW4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIGNvbnN0IGdlbmVyYXRlSGlkZGVuQ29sdW1ucyA9IFtdO1xyXG5cclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JpZENvbHVtbnMoe1xyXG4gICAgICAgICAgICBjb2x1bW5GaWVsZDogY29sdW1uRmllbGQsXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXHJcbiAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25zOiBncmlkU2V0dGluZz8uY29sdW1uQ29uZmlndXJhdGlvbnMsXHJcbiAgICAgICAgICAgIGdlbmVyYXRlSGlkZGVuQ29sdW1uczogZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLFxyXG4gICAgICAgICAgICBncmlkQXR0cmlidXRlczogdGhpcy5kYXRhXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoZ2VuZXJhdGVIaWRkZW5Db2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCA9IGdlbmVyYXRlSGlkZGVuQ29sdW1ucy5tYXAoZmllbGQgPT4gKHsgZmllbGQ6IGZpZWxkLCBWaXNpYmxlOiB0cnVlLCBJc1JlcXVpcmVkOiBmYWxzZSwgVmFsdWU6IGZpZWxkIH0pKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBnZW5lcmF0ZUhpZGRlbkNvbHVtbnNGaWVsZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVIaWRkZW5Db2x1bW5zRmllbGQucHVzaChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uTmFtZShncmlkQ2VsbFJlcGxhY2VWYWx1ZTogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdKSB7XHJcbiAgICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldEZvbnRBd2Vzb21lKGdyaWRDZWxsUmVwbGFjZVZhbHVlW3ZhbHVlXSwgdGhpcy5mb250QXdlU29tZVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIHN0eWxpbmdcclxuICBwdWJsaWMgY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICghY29uZGl0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gY29uZGl0aW9uUmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGNvbFZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddKSB7XHJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbkhpZ2hsaWdodGNvbDogW10gPSBjb2xbJ0NlbGxTdHlsZUNvbmRpdGlvbiddO1xyXG4gICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gJyc7XHJcblxyXG4gICAgICBjb25kaXRpb25IaWdobGlnaHRjb2wuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YVsnVmFsdWUnXSA9PSBjb2xWYWx1ZSkge1xyXG4gICAgICAgICAgaWYgKGRhdGFbJ0JhY2tncm91bmRDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9ICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBkYXRhWydCYWNrZ3JvdW5kQ29sb3InXSArICc7JztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGF0YVsnQ29sb3InXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gJ2NvbG9yOicgKyBkYXRhWydDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydTdHlsZUV4cHJlc3Npb24nXSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgKz0gZGF0YVsnU3R5bGVFeHByZXNzaW9uJ107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT25jZWxsIGNsaWNrIGhhbmRsaW5nXHJcbiAgLy8gMS4gaW5DZWxsIEVkaXRcclxuICAvLyAyLiBPbkl0ZW1DbGlja1xyXG4gIC8vIDMuIE5hdmlnYXRlIHRvIEZvcm0gUGFnZVxyXG4gIC8vIDQuIFNob3cgRm9ybSBQYWdlIGluIHRoZSBzYW1lIHBhZ2UgKERFQyBhbmQgRHJhd2VyKVxyXG4gIHB1YmxpYyBjZWxsQ2xpY2tIYW5kbGVyKGV2ZW50OiBDZWxsQ2xpY2tFdmVudCkge1xyXG4gICAgLy8gUmlnaHQgY2xpY2sgaGFuZGxlclxyXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY29udGV4dG1lbnVcIikge1xyXG4gICAgICB0aGlzLmRhdGFJdGVtQ29udGV4dE1lbnUuc2hvd0NvbnRleHRNZW51TWFudWFsbHkoZXZlbnQsIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyID0gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyID8gdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyIDogZmFsc2U7XHJcbiAgICBjb25zdCBpc0NvbW1hbmRDb2x1bW4gPSBldmVudC5jb2x1bW4uY29uc3RydWN0b3IubmFtZSA9PSAnQ29tbWFuZENvbHVtbkNvbXBvbmVudCcgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcERpcikge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIuaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGlzYWJsZUFsbENvbHVtbkNlbGxDbGlja0hhbmRsZXIgJiYgIWlzQ29tbWFuZENvbHVtbikge1xyXG4gICAgICBjb25zdCBpbkNlbGxFZGl0YWJsZSA9IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA/IHRoaXMuZGF0YS5JbkNlbGxFZGl0YWJsZSA6IGZhbHNlO1xyXG4gICAgICBpZiAoaW5DZWxsRWRpdGFibGUpIHtcclxuICAgICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgICBpZiAoISF0aGlzLmVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT4gZXZlbnQuc2VuZGVyLmVkaXRDZWxsKGV2ZW50LnJvd0luZGV4LCBldmVudC5jb2x1bW5JbmRleCwgdGhpcy5jcmVhdGVGb3JtR3JvdXAoZXZlbnQuZGF0YUl0ZW0sIHMuZmllbGQpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2VsbENsaWNrIGV2ZW50OiBcIiwgZXZlbnQpO1xyXG4gICAgICAgIC8vdGhpcy5jYWNoZVNlcnZpY2Uuc2V0KCdsYXN0Q2xpY2tlZEdyaWRSZWNvcmQnLCBldmVudCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuT25JdGVtQ2xpY2spIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uSXRlbUNsaWNrKTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBzdG9yZSBjbGlja2VkIGlkIGFuZCBhY3Rpb24gYXMgZWRpdCB0byB0aGUgc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAvLyBPbkl0ZW1DbGljaywgcHJvamVjdCBoYXZlIHRvIHNldCB0aGVtc2VsZi5cclxuICAgICAgICAgIHRoaXMubWFpblNlcnZpY2Uuc2V0TmF2aWdhdGlvblBhcmFtcyhbZXZlbnQuZGF0YUl0ZW0uSWQsICdlZGl0J10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZWwoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdENlbGxDbG9zZUhhbmRsZXIoYXJnczogYW55KSB7XHJcbiAgICBjb25zdCB7IGZvcm1Hcm91cCwgZGF0YUl0ZW0gfSA9IGFyZ3M7XHJcbiAgICBpZiAoIWZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5kaXJ0eSkge1xyXG4gICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIocyA9PiBzLmlzRWRpdGFibGVJbkRhdGFJdGVtID09PSB0cnVlKTtcclxuICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMubWFwKHMgPT5cclxuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFJdGVtLCB7IFtzLmZpZWxkXTogZm9ybUdyb3VwLnZhbHVlW3MuZmllbGRdIH0pKTtcclxuICAgICAgLy8gdGhpcy5teVNlbGVjdGlvbi5tYXAocyA9PiAocy5JZCA9PT0gZGF0YUl0ZW0uSWQpID8gT2JqZWN0LmFzc2lnbihzLCBkYXRhSXRlbSkgOiBudWxsKTtcclxuICAgICAgdGhpcy5teVNlbGVjdGlvbi5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLklkID09PSBkYXRhSXRlbS5JZCkge1xyXG4gICAgICAgICAgdGhpcy5teVNlbGVjdGlvbi5zZXQoa2V5LCB7IC4uLnZhbHVlLCAuLi5kYXRhSXRlbSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVUbyhldmVudDogYW55LCBjbGlja0FjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGNvbnN0IG4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2xpY2tBY3Rpb24uQ2xpY2spO1xyXG4gICAgaWYgKG4pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgICB0YXJnZXQ6IGNsaWNrQWN0aW9uLkNsaWNrLFxyXG4gICAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gRWRpdCBpbmNlbGwgZmllbGRcclxuICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1jZWxsQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsXHJcbiAgICAgICAgZGF0YTogZGF0YUl0ZW0sXHJcbiAgICAgICAgY29sdW1uRmllbGRzJDogY29sRmllbGRzXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YVsnQ29udGFpbmVyRm9ybSddKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Zvcm1QYWdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgLy9za2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8vLyBXaGVuIGNsaWNrZWQgcm91dGUgdG8gcGFnZVxyXG4gICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWQsICdlZGl0J10sIHtcclxuICAgICAgLy8gIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgLy99KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkJ0bkNsaWNrKGV2ZW50OiBhbnksIGNvbFNldHRpbmc6IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uTmF2aWdhdGVUbyhldmVudCwgY29sU2V0dGluZywgcm93RGF0YSwgY2VsbERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoZGF0YUl0ZW06IGFueSwgZmllbGROYW1lOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBbZmllbGROYW1lXTogZGF0YUl0ZW1bZmllbGROYW1lXVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSGVscGVyIGZ1bmN0aW9uc1xyXG4gIHB1YmxpYyBnZXRDbGFzcyhkYXRhSXRlbTogYW55LCBjb2w6IGFueSkge1xyXG4gICAgbGV0IG5nQ2xhc3MgPSBcImdyaWRDZWxsIFwiO1xyXG4gICAgaWYgKGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJykge1xyXG4gICAgICBuZ0NsYXNzICs9IFwicmlnaHRBbGlnbmVkIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10pIHtcclxuICAgICAgbmdDbGFzcyArPSBkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10gKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLkNsYXNzKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gY29sLkNsYXNzICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5Qb3BPdmVyQ29udGVudCkge1xyXG4gICAgICBuZ0NsYXNzICs9IFwiIHdpdGhQb3BvdmVySW5HcmlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5nQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybWF0KGNvbDogYW55LCBkZWZhdWx0Rm9ybWF0PzogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJcIjtcclxuICAgIGlmIChjb2wuRm9ybWF0T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdCA9IGRlZmF1bHRGb3JtYXQgPyBkZWZhdWx0Rm9ybWF0IDogXCJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdEFyciA9IGNvbC5Gb3JtYXRPcHRpb25zLnNwbGl0KFwiLlwiKVxyXG4gICAgICBsZXQgZHAgPSAwO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZHAgPSBmb3JtYXRBcnJbMV0ubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBcIjEuXCIgKyBkcCArIFwiLVwiICsgZHA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsUmVzdWx0cygpOiBPYnNlcnZhYmxlPEV4Y2VsRXhwb3J0RGF0YT4ge1xyXG4gICAgY29uc3QgZ3JpZENvbnRyb2wgPSB0aGlzLnpncmlkIGFzIFpHcmlkO1xyXG4gICAgY29uc3QgZ3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgZGF0YSA9IGdyaWRDb21wb25lbnQuZGF0YSBhcyBHcmlkRGF0YVJlc3VsdDtcclxuXHJcbiAgICBjb25zdCByZXNvdXJjZVVSTEZvckdlbmVyYXRlRGF0YSA9IHRoaXMuZGF0YS5FeHBvcnREYXRhUmVzb3VyY2VVUkwgPyB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwodGhpcy5kYXRhLkV4cG9ydERhdGFSZXNvdXJjZVVSTCkgOiBncmlkQ29udHJvbC5wYWdpbmF0aW9uQXBpUG9zdFVybDtcclxuXHJcbiAgICAvLyBOZWVkIHRvIGNsb25lLCBpZiBub3Qgd2lsbCBhZmZlY3QgdGhlIGdyaWQgcGFyYW1zLlxyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbXMpO1xyXG4gICAgcGFyYW1zLnBhZ2VObyA9IDA7XHJcbiAgICBwYXJhbXMucGFnZVNpemUgPSBkYXRhLnRvdGFsO1xyXG5cclxuICAgIGNvbnN0IGRhdGVUaW1lUmVnZXggPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9KD86W1RcXHNdXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7MSw3fSk/KD86WnxbXFwrXFwtXVxcZHsyfTpcXGR7Mn0pPyk/JC87XHJcblxyXG4gICAgLy8gRnVuY3Rpb24gdG8gY29udmVydCBkYXRlIHN0cmluZ3MgdG8gRGF0ZSBvYmplY3RzXHJcbiAgICBjb25zdCBjb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdJdGVtKSB7XHJcbiAgICAgICAgICBpZiAobmV3SXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbmV3SXRlbVtrZXldO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgYW5kIG1hdGNoZXMgdGhlIGRhdGVUaW1lUmVnZXggcGF0dGVyblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBkYXRlVGltZVJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgbmV3SXRlbVtrZXldID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdJdGVtO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQocmVzb3VyY2VVUkxGb3JHZW5lcmF0ZURhdGEsIHBhcmFtcykucGlwZShcclxuICAgICAgbWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBDb252ZXJ0IGRhdGUgc3RyaW5ncyB0byBEYXRlIG9iamVjdHNcclxuICAgICAgICBkYXRhLmRhdGFTZXQgPSBjb252ZXJ0RGF0ZVN0cmluZ3NUb0RhdGVzKGRhdGEuZGF0YVNldCk7XHJcblxyXG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3VsdCBmb3IgRXhjZWwgZXhwb3J0XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBFeGNlbEV4cG9ydERhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBwcm9jZXNzKGRhdGEuZGF0YVNldCwge30pLmRhdGFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoR3JpZChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvblNlZ21lbnQgPSBldmVudC50YXJnZXQudHJpbSgpLnNwbGl0KCcuJyk7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvbiA9IF9ncmlkT3B0aW9uU2VnbWVudFsxXTtcclxuICAgIGlmIChfZ3JpZE9wdGlvbikge1xyXG4gICAgICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtfZ3JpZE9wdGlvbl0gYXMgWkdyaWQ7XHJcbiAgICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgICB6Z3JpZENvbnRyb2wuZ2V0RGF0YSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gZmluZCBncmlkIHZhbHVlOiAnICsgX2dyaWRPcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnSW52YWxpZCByZWZyZXNoR3JpZCBldmVudDogJywgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hEYXRhKCkge1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRhKCkge1xyXG4gICAgdGhpcy56Z3JpZC5jbGVhckRhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93VG9vbHRpcChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLklzU2hvd1Rvb2xUaXAgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBsZXQgaXNDb21tYW5kQ29sdW1uID0gZmFsc2U7XHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PSAnay1jb21tYW5kLWNlbGwnKSB7XHJcbiAgICAgICAgaXNDb21tYW5kQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFpc0NvbW1hbmRDb2x1bW4gJiZcclxuICAgICAgKFxyXG4gICAgICAgICgoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1REJyB8fCBlbGVtZW50Lm5vZGVOYW1lID09PSAnVEgnKSAmJiBlbGVtZW50Lm9mZnNldFdpZHRoIDwgKGVsZW1lbnQuc2Nyb2xsV2lkdGgpKSB8fFxyXG4gICAgICAgIChlbGVtZW50Lm5vZGVOYW1lID09PSAnU1BBTicgJiYgZWxlbWVudC5jbGFzc0xpc3QgJiYgZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoID4gMCAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZ3JpZC1jZWxsLWRhdGEnKSAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGggPCAoZWxlbWVudC5wYXJlbnRFbGVtZW50LnNjcm9sbFdpZHRoKSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLnRvZ2dsZShlbGVtZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJvd1NlbGVjdGlvbktleSA9IChjb250ZXh0OiBSb3dBcmdzKTogYW55ID0+IHtcclxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGtleSB1c2luZyBlaXRoZXIgdGhpcy5kYXRhLlVuaXF1ZUtleSBvciBjb250ZXh0LmRhdGFJdGVtLklkLlxyXG4gICAgY29uc3Qga2V5ID0gKHRoaXMuZGF0YS5VbmlxdWVLZXkgPz8gY29udGV4dC5kYXRhSXRlbS5JZCk7Ly8gKyBcIiBcIiArIGNvbnRleHQuaW5kZXg7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5VbmlxdWVLZXkgJiYgY29udGV4dC5kYXRhSXRlbS5JZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdBIHVuaXF1ZSBjb2x1bW4gZmllbGQgaXMgcmVxdWlyZWQuIEVuc3VyZSBlaXRoZXIgdGhlIElkIGNvbHVtbiBpcyBwcmVzZW50IG9yIHRoZSBVbmlxdWVLZXkgcHJvcGVydHkgaXMgc2V0IGZvciB6Z3JpZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdG9yZSB0aGUgZGF0YSBpdGVtIGluIHRoZSBteVNlbGVjdGlvbiBtYXAgd2l0aCB0aGUgZ2VuZXJhdGVkIGtleS5cclxuICAgIHRoaXMubXlTZWxlY3Rpb24uc2V0KGtleSwgY29udGV4dC5kYXRhSXRlbSk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBnZW5lcmF0ZWQga2V5LlxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFZhbHVlcygpOiBhbnkge1xyXG4gICAgLy8gTWFwIGVhY2gga2V5IGluIHJvd1NlbGVjdGlvbiB0byBpdHMgY29ycmVzcG9uZGluZyBkYXRhIGl0ZW0gaW4gdGhlIG15U2VsZWN0aW9uIG1hcC5cclxuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkID0gdGhpcy5yb3dTZWxlY3Rpb24ubWFwKGtleSA9PiB0aGlzLm15U2VsZWN0aW9uLmdldChrZXkpKTtcclxuIFxyXG4gICAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiBzZWxlY3RlZCByZWNvcmRzLlxyXG4gICAgcmV0dXJuIHNlbGVjdGVkUmVjb3JkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgLy8gQ2xlYXIgdGhlIG1hcCB0aGF0IHN0b3JlcyBzZWxlY3RlZCBkYXRhIGl0ZW1zLlxyXG4gICAgdGhpcy5teVNlbGVjdGlvbi5jbGVhcigpO1xyXG4gIFxyXG4gICAgLy8gQ2xlYXIgdGhlIGFycmF5IHRoYXQgdHJhY2tzIHNlbGVjdGVkIGtleXMuXHJcbiAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICB0aGlzLnpncmlkLmdldERhdGFCaW5kaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd0aGlzLnpncmlkIGlzIHVuZGVmaW5lZC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRHcmlkRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLmlzVXNlTG9jYWxEYXRhKCkgPyAodGhpcy56Z3JpZC5kYXRhIHx8IHRoaXMuemdyaWQub3JpZ2luYWxEYXRhKSA6ICh0aGlzLnpncmlkLmdyaWQuZGF0YSAmJiB0aGlzLnpncmlkLmdyaWQuZGF0YS5kYXRhID8gdGhpcy56Z3JpZC5ncmlkLmRhdGEuZGF0YSA6IFtdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRhID0gKGdEYXRhOiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLnpncmlkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLnpncmlkLmRhdGEgPSBnRGF0YTtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy56Z3JpZC5ncmlkLmRhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBnRGF0YSxcclxuICAgICAgICAgIHRvdGFsOiBnRGF0YS50b3RhbENvdW50XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0dXBHcmlkV2l0aElubGluZUVkaXQoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnemdyaWQgaXMgbnVsbCBmb3Igc2V0RGF0YS4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWFkZXJUZXh0KGNvbHVtbk5hbWU6IHN0cmluZywgbmV3SGVhZGVyVGl0bGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUpIHtcclxuICAgICAgICBjb2wudGl0bGUgPSBuZXdIZWFkZXJUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHcmlkSXRlbSk6IGFueSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKGl0ZW0uZGF0YVsnSWQnXSB8fCBpbmRleCk7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVXNlTG9jYWxEYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EYXRhU291cmNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5kYXRhLlJlc291cmNlVVJMKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIHNldHVwXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCkge1xyXG4gICAgLy8gR3JpZCBkZWZhdWx0IHNldHRpbmdcclxuICAgIHRoaXMuZ3JpZFRpdGxlID0gdGhpcy5kYXRhLlRpdGxlO1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICB0aGlzLnBhZ2VTaXplcyA9IFs1LCAxMCwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTtcclxuICAgIHRoaXMucHJldmlvdXNOZXh0ID0gdGhpcy5kYXRhWydFbmFibGVQcmV2aW91c05leHRCdXR0b24nXSB8fCBmYWxzZTtcclxuXHJcbiAgICAvLyBbTW9iaWxlXSBEaXNhYmxlIHBhZ2Ugc2l6ZXMgaWYgUGFnZVNpemVzIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIG9yIG9uIGEgbW9iaWxlIHNjcmVlbi5cclxuICAgIGlmICh0aGlzLmRhdGEuUGFnZVNpemVzID09PSBmYWxzZSB8fCB0aGlzLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZXMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb25maWd1cmUgcGFnaW5hdGlvbiBzZXR0aW5ncy5cclxuICAgIHRoaXMucGFnZWFibGUgPSB0aGlzLmRhdGEucGFnZUFibGUgIT0gdW5kZWZpbmVkID8gdGhpcy5kYXRhLnBhZ2VBYmxlIDoge1xyXG4gICAgICByZXNwb25zaXZlOiB0cnVlLFxyXG4gICAgICBidXR0b25Db3VudDogMyxcclxuICAgICAgcGFnZVNpemVzOiB0aGlzLnBhZ2VTaXplcyxcclxuICAgICAgcHJldmlvdXNOZXh0OiB0aGlzLnByZXZpb3VzTmV4dCxcclxuICAgIH07XHJcblxyXG4gICAgLy8gQ29uZmlndXJlIGdyaWQgc2VsZWN0aW9uIG9wdGlvbnMgaWYgc2V0IFNlbGVjdE9wdGlvbnMgaW4gZmllbGQgZWxlbWVudCBhdHRyaWJ1dGUuXHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBFcnJvcjogZ3JpZCgke3RoaXMuZGF0YS5OYW1lfSksIHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zIHNob3VsZCBiZSBhIHN0cmluZyB3aXRoIHZhbHVlICdzaW5nbGUnIG9yICdtdWx0aXBsZScuYCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgICBtb2RlOiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucy50b0xvd2VyQ2FzZSgpID09PSAnc2luZ2xlJyA/ICdzaW5nbGUnIDogJ211bHRpcGxlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBCaW5kIGNvbXBvbmVudCB0byBncm91cCB1c2luZyB0aGUgcHJvdmlkZWQgVmFsdWUgc2V0IGluIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlLlxyXG4gICAgaWYgKHRoaXMuZGF0YS5WYWx1ZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5WYWx1ZS5zbGljZSg2KV0gPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCkge1xyXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbnkgZXhpc3Rpbmcgc3Vic2NyaXB0aW9ucyB0byBhdm9pZCBtZW1vcnkgbGVha3MuXHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGcm9tIGhlcmUgd2lsbCBjYWxsIHpncmlkLmJpbmRpbmcuZGlyZWN0aXZlLlxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGdldCBmcm9tIGRpcmVjdGl2ZSBhbmQgc2V0IHRvIGNvbXBvbmVudFxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmdyaWRTdWJqZWN0LnBpcGUoXHJcbiAgICAgIHRhcChncmlkRGlyZWN0aXZlID0+IHtcclxuICAgICAgICAvLyBTZXQgdGhlIHpncmlkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBlbWl0dGVkIGdyaWREaXJlY3RpdmUuXHJcbiAgICAgICAgdGhpcy56Z3JpZCA9IGdyaWREaXJlY3RpdmU7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1ucyBwcm9wZXJ0eSB3aXRoIHRoZSBncmlkIGNvbHVtbnMgZnJvbSBncmlkRGlyZWN0aXZlLlxyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuY29sdW1ucztcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYXV0b21hdGljIGFwcGVuZGluZyBvZiBhIGdyaWQgZGF0ZSBmaWx0ZXIgY29sdW1uIGlzIG5vdCBkaXNhYmxlZC5cclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCB1cCBncmlkIHdpdGggaW5saW5lIGVkaXRpbmcuXHJcbiAgICAgICAgdGhpcy5zZXR1cEdyaWRXaXRoSW5saW5lRWRpdCgpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdXAgYSBwb3BvdmVyIGZlYXR1cmUgYmFzZWQgb24gY29sdW1ucyBhbmQgZ3JpZCBkYXRhLlxyXG4gICAgICAgIHRoaXMuc2V0dXBQb3BvdmVyRmVhdHVyZSh0aGlzLmNvbHVtbnMsIHRoaXMuZ2V0R3JpZERhdGEoKSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbHVtbiBoZWFkZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTWFyayBjb2x1bW4gaGVhZGVycyBhcyB0cmFuc2xhdGVkIGFuZCBwZXJmb3JtIHRoZSB0cmFuc2xhdGlvbi5cclxuICAgICAgICB0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKF8gPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hDb2x1bW5QaW5uZWQgPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9uc1Bpbm5lZDtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUdyaWRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyaWRTdGF0ZUxvZ2ljID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVMb2dpYyh0aGlzLmRhdGEpO1xyXG4gICAgY29uc3QgY2FjaGVOYW1lID0gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkU3RhdGVDYWNoZVN0b3JhZ2VLZXkoR3JpZFNldHRpbmdUeXBlLlNhdmVkU2V0dGluZywgdGhpcy5kYXRhKTtcclxuXHJcbiAgICB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmNvbHVtbkNvbmZpZ3VyYXRpb25zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcmlkQ29sdW1uc0NvbmZpZyh0aGlzLnpncmlkLmdyaWQuY29sdW1ucyk7XHJcblxyXG4gICAgY29uc3Qgc2V0dGluZ0NvbmZpZzogWkdyaWRTZXR0aW5ncyA9IHtcclxuICAgICAgY29sdW1uQ29uZmlndXJhdGlvbnM6IHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuY29sdW1uQ29uZmlndXJhdGlvbnNcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGdyaWRTdGF0ZUxvZ2ljID09PSBHcmlkU3RhdGVMb2dpY1R5cGUuU2V0dGluZ09ubHkpIHtcclxuICAgICAgc2V0dGluZ0NvbmZpZy5ncmlkU3RhdGUgPSB0aGlzLnpncmlkLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncmlkU2V0dGluZyA9IEpTT04uc3RyaW5naWZ5KHNldHRpbmdDb25maWcpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShjYWNoZU5hbWUsIGdyaWRTZXR0aW5nKTtcclxuXHJcbiAgICBjb25zdCBqc29uQ2FjaGU6IEpzb25DYWNoZSA9IHtcclxuICAgICAgRmlsZU5hbWU6IGNhY2hlTmFtZSxcclxuICAgICAgSnNvbkNvbnRlbnQ6IGdyaWRTZXR0aW5nXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vZmZsaW5lRGF0YWJhc2VTZXJ2aWNlLnNhdmVKc29uQ2FjaGUoanNvbkNhY2hlKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KCdHcmlkIFNldHRpbmcgU2F2ZWQnLCBcInRvcFwiLCB0cnVlLCAyMDAwLCAnc3VjY2VzcycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmVHcmlkU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuc29ydCgoYSwgYikgPT4gYS5vcmlnaW5hbE9yZGVySW5kZXggLSBiLm9yaWdpbmFsT3JkZXJJbmRleCk7XHJcbiAgICB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjYWNoZU5hbWUgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTdGF0ZUNhY2hlU3RvcmFnZUtleShHcmlkU2V0dGluZ1R5cGUuU2F2ZWRTZXR0aW5nLCB0aGlzLmRhdGEpO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShjYWNoZU5hbWUpO1xyXG5cclxuICAgIHRoaXMuc2hvd0hpZGVSZXN0b3JlR3JpZFNldHRpbmdCdXR0b24oKTtcclxuXHJcbiAgICB0aGlzLm9mZmxpbmVEYXRhYmFzZVNlcnZpY2UucmVtb3ZlSnNvbkNhY2hlKHtcclxuICAgICAgRmlsZU5hbWU6IGNhY2hlTmFtZVxyXG4gICAgfSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZENhbGxiYWNrKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10pIHtcclxuICAgICAgY29uc3QgbWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcclxuXHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLUFmdGVybG9hZENhbGxiYWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFbJ0FmdGVybG9hZENhbGxiYWNrJ10sXHJcbiAgICAgICAgZGF0YTogbWVcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dIaWRlUmVzdG9yZUdyaWRTZXR0aW5nQnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKSB7XHJcbiAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGlmICh0aGlzLmlzVXNlTG9jYWxEYXRhKCkgJiYgZ3JpZERhdGEgJiYgZ3JpZERhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBkYXRlQ29sID0gT2JqZWN0LmtleXMoZ3JpZERhdGFbMF0pLmZpbHRlcih4ID0+IHguaW5jbHVkZXMoXCJEYXRlXCIpICYmICF4LmVuZHNXaXRoKENvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4KSk7XHJcbiAgICAgIGlmIChkYXRlQ29sICYmIGRhdGVDb2wubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGdyaWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICBkYXRlQ29sLmZvckVhY2goY29sTmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGFbYCR7Y29sTmFtZX0ke0NvbXBvbmVudENvbnN0YW50LkdyaWRDb2xEYXRlRmlsdGVyU3VmZml4fWBdID0gbmV3IERhdGUoZGF0YVtjb2xOYW1lXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93SGlkZVJlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUpIHtcclxuICAgICAgY29uc3Qgc2V0dGluZ0NhY2hlTmFtZSA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFN0YXRlQ2FjaGVTdG9yYWdlS2V5KEdyaWRTZXR0aW5nVHlwZS5TYXZlZFNldHRpbmcsIHRoaXMuZGF0YSk7XHJcbiAgICAgIGNvbnN0IHNldHRpbmdDYWNoZVZhbHVlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzZXR0aW5nQ2FjaGVOYW1lKTtcclxuXHJcbiAgICAgIHRoaXMuc2hvd1Jlc3RvcmVHcmlkU2V0dGluZ0J1dHRvbiA9IHNldHRpbmdDYWNoZVZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgY29uZmlndXJhdGlvbiBmdW5jdGlvblxyXG4gIHB1YmxpYyBncmlkQ3VzdG9tQWRkQ29tbWFuZChncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZSA9IHRoaXMuZGF0YS5OYW1lICsgJ19DdXN0b21BZGRCdXR0b25PbkNsaWNrJztcclxuICAgIGlmICghdGhpcy5ncm91cFtncmlkQWRkQnV0dG9uRXZlbnROYW1lXSkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdyb3VwW2dyaWRBZGRCdXR0b25FdmVudE5hbWVdKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBncmlkQ3VzdG9tUmVzZXRDb21tYW5kKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkUmVzZXRCdXR0b25FdmVudE5hbWUgPSB0aGlzLmRhdGEuTmFtZSArICdfQ3VzdG9tUmVzZXRCdXR0b25PbkNsaWNrJztcclxuICAgIGlmICghdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXShncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JpZEN1c3RvbVJlbW92ZUNvbW1hbmQoZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZSA9IHRoaXMuZGF0YS5OYW1lICsgJ19DdXN0b21SZW1vdmVCdXR0b25PbkNsaWNrJztcclxuICAgIGlmICghdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lXShkYXRhSXRlbSwgcm93SW5kZXgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElubGluZSBFZGl0XHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbHMoZ3JpZENvbHM6IEFycmF5PGFueT4pIHtcclxuICAgIGxldCBjb3VudGVySW5kZXggPSAwO1xyXG4gICAgLy8gVG8gZm9yY2UgZWxlbWVudCB0byByZWJpbmQgZGF0YVxyXG4gICAgdGhpcy5pc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnpncmlkLmdyaWQubG9hZGluZyA9IHRydWU7XHJcbiAgICBvZihbXSkucGlwZShkZWxheSgwKSwgdGFwKCgpID0+IHtcclxuICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzIHx8IHt9O1xyXG4gICAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JpZERhdGEpKSB7XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkID0+IHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0ge307XHJcbiAgICAgICAgICBncmlkQ29scy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmlzVmlzaWJsZUZvcm1Db250cm9sKHRoaXMsIGMuZmllbGQpO1xyXG4gICAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkID0gWkNvbXBvbmVudEhlbHBlci5pc1JlcXVpcmVkRm9ybUNvbnRyb2wodGhpcywgYy5maWVsZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBaQ29tcG9uZW50SGVscGVyLmdldFZhbGlkYXRvcnMoYy5maWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkLCB0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgaXRlbXNbYy5maWVsZF0gPSBuZXcgRm9ybUNvbnRyb2woZFtjLmZpZWxkXSwgdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoaXRlbXMpO1xyXG5cclxuICAgICAgICAgIGlmIChkW1wiSWRcIl0pIHtcclxuICAgICAgICAgICAgaXRlbXNbXCJJZFwiXSA9IGl0ZW1zW1wiSWRcIl0gfHwgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGRbXCJJZFwiXSwgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRbXCJJZFwiXSA9IGNvdW50ZXJJbmRleCsrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2RbXCJJZFwiXV0gPSBmb3JtR3JvdXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnpncmlkLmdyaWQubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZpZWxkKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZCh4ID0+IHguVmFsdWUgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbmxpbmVGb3JtKGRhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikge1xyXG4gICAgdmFyIGtleSA9IChkYXRhW1wiSWRcIl0gfHwgZGF0YVtcIklkXCJdID09IDApID8gZGF0YVtcIklkXCJdIDogcm93SW5kZXg7XHJcbiAgICBpZiAodGhpcy5pc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trZXldIHx8IHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHNbMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tleV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybUNvbnRyb2xEYXRhKCk6IGFueVtdIHtcclxuICAgIGNvbnN0IGRhdGEgPSBbXTtcclxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMpKSB7XHJcbiAgICAgIGRhdGEucHVzaCh0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNba10/LnZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRXaXRoSW5saW5lRWRpdCgpIHtcclxuICAgIGlmICh0aGlzLmhhc0lubGluZUVkaXRDb2x1bW4odGhpcy5jb2x1bW5zKSkge1xyXG4gICAgICB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzID0gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzO1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHModGhpcy5jb2x1bW5zLmNvbmNhdCh0aGlzLmdlbmVyYXRlSGlkZGVuQ29sdW1uc0ZpZWxkIHx8IFtdKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNJbmxpbmVGb3JtR3JvdXBIYXNWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgJiYgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNJbmxpbmVFZGl0Q29sdW1uKGdyaWRDb2xzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZ3JpZENvbHMgJiYgZ3JpZENvbHMuc29tZShjID0+IGMuaXNFZGl0YWJsZUluR3JpZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2VsbFN0eWxlRm9ySW5saW5lRWRpdChjb2x1bW5GaWVsZDogWkZpZWxkLCBkYXRhSXRlbTogYW55LCByb3dJbmRleDogbnVtYmVyKTogYW55IHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldElubGluZUZvcm0oZGF0YUl0ZW0sIHJvd0luZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICBpZiAoIWZvcm0pIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3R5bGUgPSBjb2x1bW5GaWVsZFtgU3R5bGUxMGBdO1xyXG4gICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBzdHlsZSk7XHJcbiAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXR1cm4gY2FsbEZ1bmMoZm9ybS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZnVuYyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3R5bGU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gRXZlbnRcclxuICAvLyBTb3VyY2U6IGh0dHBzOi8vd3d3LnRlbGVyaWsuY29tL2ZvcnVtcy9rZW5kby1hbmd1bGFyLWdyaWQtYmxhbmstc3BhY2UtaW4tdGhlLWVuZC13aGVuLXlvdS1yZXNpemUocmVkdWNlKS1hbnktY29sdW1uXHJcbiAgcHVibGljIGFkanVzdFdpZHRoVXBvblJlc2l6ZSgpIHtcclxuICAgIGNvbnN0IHRhYmxlV2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC10YWJsZVwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLWNvbnRlbnRcIilbYG9mZnNldFdpZHRoYF07XHJcbiAgICBpZiAodGFibGVXaWR0aCA8IGNvbnRlbnRXaWR0aCkge1xyXG4gICAgICBjb25zdCBjdXJyZW50TGFzdENvbFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtY29udGVudCAuay1ncmlkLXRhYmxlIHRyIHRkOmxhc3Qtb2YtdHlwZVwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1uc1t0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMV0ud2lkdGggPSBjdXJyZW50TGFzdENvbFdpZHRoICsgKGNvbnRlbnRXaWR0aCAtIHRhYmxlV2lkdGgpIC0gMTA7IC8vIGFjY291bnQgZm9yIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gb25DaGFuZ2UgRXZlbnRzXHJcbiAgcHVibGljIGZpbHRlckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLmdyaWRTZXR0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy56Z3JpZC5ncmlkU2V0dGluZyk7XHJcbiAgICAgIHRoaXMuemdyaWQuZmlsdGVyQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5wYWdlQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0Q2hhbmdlKHNvcnQ6IFNvcnREZXNjcmlwdG9yW10pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNldHRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnpncmlkLmdyaWRTZXR0aW5nKTtcclxuICAgICAgdGhpcy56Z3JpZC5zb3J0Q2hhbmdlKHNvcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGluQ2VsbENoZWNrQm94T25DaGFuZ2UoZXZlbnQ6IGFueSwgcm93SW5kZXg6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5jaGVja2VkO1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBnRGF0YVtyb3dJbmRleF1bY29sdW1uLlZhbHVlXSA9IGlzQ2hlY2tlZDtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY29tbWFuZCBoYW5kbGVyXHJcbiAgcHVibGljIGFkZEhhbmRsZXIoeyBzZW5kZXIgfSkge1xyXG4gICAgdGhpcy5pc05ldyA9IHRydWU7XHJcblxyXG4gICAgLy8gY2xvc2UgYW55IGV4aXN0aW5nIGVkaXRvclxyXG4gICAgdGhpcy5jbG9zZUVkaXRvcihzZW5kZXIpO1xyXG5cclxuICAgIC8vIGxvb3AgYWxsIGNvbHVtbiB0byBnZXQgdmFsaWRhdGlvbiBhbmQgY3JlYXRlIGZvcm0gY29udHJvbFxyXG4gICAgY29uc3QgY29sRm9ybUNvbnRyb2wgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIGlmIChjb2wuVHlwZSA9PT0gJ3p0ZXh0ZWRpdG9yJykge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzX1RleHRFZGl0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChudWxsLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gYWRkIHRvIGdyaWQgcm93XHJcbiAgICBzZW5kZXIuYWRkUm93KHRoaXMuZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGZvcm1Hcm91cCwgaXNOZXcgfSk6IHZvaWQge1xyXG4gICAgLy8gR2V0IHRoZSBleGlzdGluZyBkYXRhIGZyb20gdGhlIGdyaWRcclxuICAgIGNvbnN0IGdyaWRFeGlzdGluZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWRcclxuICAgIGlmIChmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgLy8gQ2hlY2sgZm9yIGEgdW5pcXVlIGtleSBmaWVsZFxyXG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmRhdGFbJ1VuaXF1ZUtleSddO1xyXG4gICAgICBpZiAodW5pcXVlS2V5KSB7XHJcbiAgICAgICAgLy8gR2V0IHRoZSB1bmlxdWUga2V5IHZhbHVlIGZyb20gdGhlIGZvcm1cclxuICAgICAgICBjb25zdCBmb3JtVW5pcXVlS2V5VmFsdWUgPSBmb3JtR3JvdXAudmFsdWVbdW5pcXVlS2V5XTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWVcclxuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IGdyaWRFeGlzdGluZ0RhdGEuc29tZShkYXRhID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIC8vIElmIGVkaXRpbmcgYW4gZXhpc3Rpbmcgcm93LCBza2lwIHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgIWlzTmV3ICYmXHJcbiAgICAgICAgICAgIHJvd0luZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdyaWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldID09PSBmb3JtVW5pcXVlS2V5VmFsdWUgJiZcclxuICAgICAgICAgICAgLy8gU2tpcCBjaGVja2luZyBhZ2FpbnN0IHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldICE9PSBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XVt1bmlxdWVLZXldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSB2YWx1ZSwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gd2l0aG91dCBzYXZpbmdcclxuICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0Vycm9yIG9jY3VyOiBEdXBsaWNhdGVkIHVuaXF1ZSBmaWVsZCBlbnRyeS4nLCAndG9wJywgdHJ1ZSwgMzAwMCwgJ2RhbmdlcicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzLCBzYXZlIHRoZSBkYXRhXHJcbiAgICAgIGlmIChpc05ldykge1xyXG4gICAgICAgIC8vIEFkZCBhIG5ldyByb3cgdG8gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGEucHVzaChmb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBhbiBleGlzdGluZyByb3cgaW4gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdID0gZm9ybUdyb3VwLnZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcGRhdGUgdGhlIGdyaWQgZGF0YSBhbmQgY2xvc2UgdGhlIHJvdyBlZGl0b3JcclxuICAgICAgdGhpcy5zZXREYXRhKGdyaWRFeGlzdGluZ0RhdGEpO1xyXG4gICAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4IH0pIHtcclxuICAgIC8vIGNhbmNlbCBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCwgZGF0YUl0ZW0gfSkge1xyXG4gICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSByb3cgYmVpbmcgZWRpdGVkIGlzIG5vdCBhIG5ldyByb3dcclxuICAgIHRoaXMuaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBDbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sLCBhcHBlbmQgY3VycmVudCByb3cgdmFsdWVcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICAgIGlmIChjb2wuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICBpZiAoY29sLlR5cGUgPT09ICd6dGV4dGVkaXRvcicpIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlc19UZXh0RWRpdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLlZhbGlkYXRvclBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbEZvcm1Db250cm9sW2NvbC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2woZGF0YUl0ZW1bY29sLlZhbHVlXSwgdmFsaWRhdG9ycyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBzZXQgZm9ybSBjb250cm9sIG9iamVjdCB0byBmb3JtIGdyb3VwXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoY29sRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgZm9ybSBncm91cCBvbiB0aGUgcm93IGJlaW5nIGVkaXRlZFxyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHJvd0luZGV4O1xyXG4gICAgc2VuZGVyLmVkaXRSb3cocm93SW5kZXgsIHRoaXMuZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVIYW5kbGVyKHsgc2VuZGVyLCBkYXRhSXRlbSB9KSB7XHJcbiAgICBjb25zdCBnRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgoZGF0YUl0ZW0sIGdEYXRhLCB0aGlzLmRhdGFbJ1VuaXF1ZUtleSddKTtcclxuICAgIGdEYXRhLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBkYXRhIGluIHRoZSBncmlkXHJcbiAgICB0aGlzLnNldERhdGEoZ0RhdGEpO1xyXG5cclxuICAgIHNlbmRlci5jYW5jZWxDZWxsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsb3NlRWRpdG9yKGdyaWQsIHJvd0luZGV4ID0gdGhpcy5lZGl0ZWRSb3dJbmRleCkge1xyXG4gICAgZ3JpZC5jbG9zZVJvdyhyb3dJbmRleCk7XHJcbiAgICB0aGlzLmVkaXRlZFJvd0luZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1JbmRleChpdGVtOiBhbnksIGRhdGE6IGFueVtdLCBrZXk6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBkYXRhLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgaWYgKGRhdGFbaWR4XVtrZXldID09PSBpdGVtW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gaWR4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEdyaWQgRmlsdGVyXHJcbiAgcHJpdmF0ZSBzZXR1cEZpbHRlckZlYXR1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmZpbHRlckdyb3VwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmFkdmZpbHRlckdyb3VwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoKCkge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZmlsdGVyR3JvdXAuZm9ybTtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gZm9ybS5jb250cm9scztcclxuXHJcbiAgICBpZiAodGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgY29uc3QgYWR2Zm9ybSA9IHRoaXMuYWR2ZmlsdGVyR3JvdXAuZm9ybTtcclxuICAgICAgY29uc3QgYWR2Y29udHJvbHMgPSBhZHZmb3JtLmNvbnRyb2xzO1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoYWR2Y29udHJvbHMpKSB7XHJcbiAgICAgICAgY29udHJvbHNbY10gPSBhZHZjb250cm9sc1tjXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuRmlsdGVyU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLWZpbHRlcnNlYXJjaFwiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkZpbHRlclNlYXJjaCxcclxuICAgICAgICBkYXRhOiB7IGZvcm1jb250cm9sczogY29udHJvbHMgfSxcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IFtdO1xyXG4gICAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5maWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKSB8fCBaQ29tcG9uZW50SGVscGVyLmdldEZpZWxkRnJvbUZpZWxkc0J5VmFsdWUodGhpcy5hZHZmaWx0ZXJHcm91cC5maWVsZHMsIGNvbnRyb2xOYW1lKTtcclxuICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiBmaWVsZC5WYWx1ZUV4cHIgfHwgZmllbGQuVmFsdWUsXHJcbiAgICAgICAgICAgIG9wczogdGhpcy5tYXBGaWx0ZXJPcGVyYXRvckJ5RmllbGRUeXBlKGZpZWxkKSxcclxuICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFZGl0KCkge1xyXG4gICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5maWx0ZXJHcm91cCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZCkge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJGaWx0ZXJEYXRhKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGNvbnN0IGZvcm0gPSBncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gZm9ybS5jb250cm9scztcclxuICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGNvbnRyb2xOYW1lID0+IHtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKGNvbnRyb2xOYW1lLCBudWxsLCBncm91cCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZHZhbmNlZFNlYXJjaCgpIHtcclxuICAgIHRoaXMuaXNTaG93QWR2RmlsdGVyID0gIXRoaXMuaXNTaG93QWR2RmlsdGVyO1xyXG4gICAgaWYgKCF0aGlzLmlzU2hvd0FkdkZpbHRlcikge1xyXG4gICAgICB0aGlzLmNsZWFyRmlsdGVyRGF0YSh0aGlzLmFkdmZpbHRlckdyb3VwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBzd2l0Y2ggKGZpZWxkLlR5cGUpIHtcclxuICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICBjYXNlIFwibnVtZXJpY1wiOlxyXG4gICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICBjYXNlIFwiZW1haWxcIjpcclxuICAgICAgY2FzZSBcInBhc3N3b3JkXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZWxcIjpcclxuICAgICAgY2FzZSBcInRleHRcIjpcclxuICAgICAgY2FzZSBcInVybFwiOlxyXG4gICAgICBjYXNlIFwiY3VycmVuY3lcIjpcclxuICAgICAgY2FzZSBcInRleHRhcmVhXCI6XHJcbiAgICAgICAgaWYgKCFmaWVsZFsnRmlsdGVyQ29udGFpbnNVc2luZ0VxdWFsJ10pIHtcclxuICAgICAgICAgIHJldHVybiBcImNvbnRhaW5zXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIj09XCI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFwiPVwiO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGdyaWQgY29tbW9uIHNldHRpbmcgZnVuY3Rpb25cclxuICBwdWJsaWMgc2V0IHNldEdyaWRUaXRsZShuZXdUaXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdyaWRUaXRsZSA9IG5ld1RpdGxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZXRHcmlkU3RhdGUoc3RhdGU6IFN0YXRlKSB7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZSA9IHN0YXRlO1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkU2V0dGluZy5ncmlkU3RhdGUgPSBzdGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmlkVG9GaXJzdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5za2lwID0gMDtcclxuICAgIHRoaXMuemdyaWQuZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNraXAgPSAwO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8IS0tXHJcbjxkaXYgc3R5bGU9XCJtYXJnaW46IDEwcHhcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBrLWZvcm1cIj5cclxuICAgICAgICAgIDxmaWVsZHNldD5cclxuICAgICAgICAgICAgPGxlZ2VuZD5CaW5kaW5nIHR5cGVzPC9sZWdlbmQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLWZvcm0tZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPkJpbmQgdGhlIGRhdGEgdG86PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXJyYXlcIiB2YWx1ZT1cImFycmF5XCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFycmF5XCI+QXJyYXkgb2JqZWN0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImdyaWREYXRhUmVzdWx0XCIgdmFsdWU9XCJncmlkRGF0YVJlc3VsdFwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJncmlkRGF0YVJlc3VsdFwiPkdyaWREYXRhUmVzdWx0IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJhc3luY1wiIHZhbHVlPVwiYXN5bmNcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiYXN5bmNcIj5Bc3luY2hyb25vdXMgc291cmNlPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG48ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuXHJcbiAgPCEtLSA8ZGl2ICpuZ0lmPVwiZGF0YS5UaXRsZVwiIGNsYXNzPVwiZ3JpZFRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2Rpdj4gLS0+XHJcbiAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZSBsZXQtYW5jaG9yPlxyXG4gICAgPHNwYW4+e3sgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0IH19PC9zcGFuPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPGtlbmRvLXBvcG92ZXIgI2dyaWRQb3BPdmVyIFtwb3NpdGlvbl09XCJkYXRhLlBvcE92ZXJQb3NpdGlvbiB8fCAnYm90dG9tJ1wiIFt0ZW1wbGF0ZURhdGFdPVwiZ2V0Q29udGV4dERhdGEuYmluZCh0aGlzKVwiPlxyXG4gICAgPCEtLSA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyVGl0bGVUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIiA+XHJcbiAgICAgIDxkaXYgW3N0eWxlXT1cImRhdGEuVGl0bGVTdHlsZVwiICpuZ0lmPVwiZGF0YSAmJiBkYXRhLlRpdGxlXCIgW2lubmVySFRNTF09XCJkYXRhLlRpdGxlXCI+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPiAtLT5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1BvcG92ZXJCb2R5VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XHJcbiAgICAgIDxkaXYgW3N0eWxlXT1cImRhdGEuQm9keVN0eWxlXCIgY2xhc3M9XCJwb3BvdmVyYm9keVwiICpuZ0lmPVwiZGF0YSAmJiBkYXRhLkJvZHlcIiBbaW5uZXJIVE1MXT1cImRhdGEuQm9keSB8IGh0bWxTYW5pdGl6ZVwiIFtuZ0NsYXNzXT1cImRhdGEuQm9keUNsYXNzXCIgKG1vdXNlbGVhdmUpPVwiY2xvc2VQb3BPdmVyLmNhbGwodGhpcywgJGV2ZW50KVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLXBvcG92ZXI+XHJcblxyXG4gIDxkaXYga2VuZG9Ub29sdGlwIHNob3dPbj1cIm5vbmVcIiBbdG9vbHRpcFRlbXBsYXRlXT1cInRlbXBsYXRlXCIgZmlsdGVyPVwiLmstZ3JpZCB0ZFwiIChtb3VzZW92ZXIpPVwic2hvd1Rvb2x0aXAoJGV2ZW50KVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiZTF0YWctc3R5bGUxXCI+XHJcbiAgICA8ZGl2IGtlbmRvUG9wb3ZlckNvbnRhaW5lciBbcG9wb3Zlcl09XCJncmlkUG9wT3ZlclwiIGZpbHRlcj1cImRpdi5ncmlkQ2VsbC53aXRoUG9wb3ZlckluR3JpZFwiIHNob3dPbj1cIm5vbmVcIiBrZW5kb1BvcG92ZXJDb250YWluZXIgI3BvcG92ZXJjb250YWluZXI9XCJrZW5kb1BvcG92ZXJDb250YWluZXJcIj5cclxuICAgICAgPGtlbmRvLWdyaWQgW3pncmlkYmluZGluZ109XCJ7ZGF0YTogZGF0YSwgZ3JvdXA6IGdyb3VwLCBwYXJhbXM6IHBhcmFtcywgZ3JpZFN1YmplY3Q6IGdyaWRTdWJqZWN0LCBncmlkU2V0dGluZzogZ3JpZFNldHRpbmd9XCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIGNsYXNzPVwiZGVza3RvcC1ncmlkIGUxdGFnLXN0eWxlMlwiXHJcbiAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cImRhdGEuc2Nyb2xsQWJsZSA9PT0gZmFsc2UgPyAnbm9uZScgOiAnc2Nyb2xsYWJsZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwicGFnZWFibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZW4tcGFnZXJdPVwiIXBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS50YWtlXCJcclxuICAgICAgICAgICAgICAgICAgW3NraXBdPVwiZ3JpZFNldHRpbmcuZ3JpZFN0YXRlLnNraXBcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydF09XCJncmlkU2V0dGluZy5ncmlkU3RhdGUuc29ydFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJ7YWxsb3dVbnNvcnQ6IHRydWUsbW9kZTogJ211bHRpcGxlJ31cIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImdyaWRTZXR0aW5nLmdyaWRTdGF0ZS5maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLmVuYWJsZUZpbHRlcmluZyAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImRhdGEuRGlzYWJsZUdyaWRDb2x1bW5NZW51ID8gZmFsc2UgOiB7IGZpbHRlcjogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2VsbENsb3NlKT1cImVkaXRDZWxsQ2xvc2VIYW5kbGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZGF0YVN0YXRlQ2hhbmdlKT1cImRhdGFTdGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwicGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwic29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJmaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb0dyaWRTZWxlY3RCeV09XCJyb3dTZWxlY3Rpb25LZXlcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkS2V5cyldPVwicm93U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjYW5jZWwpPVwiY2FuY2VsSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGVkaXQpPVwiZWRpdEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGQpPVwiYWRkSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJhZGp1c3RXaWR0aFVwb25SZXNpemUoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChleGNlbEV4cG9ydCk9XCJvbkV4Y2VsRXhwb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2FsbGJhY2suYmluZCh0aGlzKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0IHx8IGRhdGEuQWxsb3dTYXZlU3RhdGUgfHwgZGF0YS5UaXRsZSB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lIHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1sZWZ0LWl0ZW1cIiAqbmdJZj1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGZhLWljb24gKm5nSWY9XCJkYXRhLkljb25cIiBjbGFzcz1cImdyaWRUaXRsZUljb25cIiBbaWNvbl09XCJkYXRhLkljb25cIj48L2ZhLWljb24+IC0tPlxyXG4gICAgICAgICAgICA8a2VuZG8tbGFiZWwgY2xhc3M9XCJncmlkVGl0bGVcIiAqbmdJZj1cImdyaWRUaXRsZVwiPnt7IGdyaWRUaXRsZSB9fTwva2VuZG8tbGFiZWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJSZWZyZXNoXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibGVmdC1idXR0b25zIHJlZnJlc2gtYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cInJlZnJlc2hEYXRhKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5BbGxvd1JlZnJlc2hCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWdyaWQtYnV0dG9uIGstaS1yZWZyZXNoLXNtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItbGVmdC1pdGVtLXNlY29uZC1jb250YWluZXJcIiAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIiBbY2xhc3Mud2l0aC1ncmlkLXRpdGxlXT1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibGVmdC1idXR0b25zIGV4cG9ydC1idXR0b25cIiBrZW5kb0dyaWRFeGNlbENvbW1hbmQgKm5nSWY9XCJkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1maWxlLWV4Y2VsXCI+PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXhwb3J0LXRvLWV4Y2VsLWJ1dHRvbi10ZXh0XCI+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0Rvd25sb2FkIGFzIEV4Y2VsJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yaWdodC1pdGVtXCIgKm5nSWY9XCJncmlkQnRuIHx8IGRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGUgfHwgZ3JpZERlZmF1bHRTdGF0ZUV4aXN0IHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgIDxhcHAtendvcmtmbG93YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnendvcmtmbG93YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXp3b3JrZmxvd2J1dHRvbnM+XHJcbiAgICAgICAgICAgIDxhcHAtemJ1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3pidXR0b25zJ1wiIFtkYXRhXT1cImdyaWRCdG5cIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCI+PC9hcHAtemJ1dHRvbnM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJzYXZlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cImRhdGEuQ2FjaGVJbmZvPy5FbmFibGVTYXZlU3RhdGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTYXZlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZXN0b3JlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cInNob3dSZXN0b3JlR3JpZFNldHRpbmdCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyLW91dGxpbmVcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ1Jlc3RvcmUgU2V0dGluZ3MnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9HcmlkQWRkQ29tbWFuZCAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWU6ICdBZGQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21BZGRDb21tYW5kKGdyb3VwKVwiICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLXdpdGgtdGV4dCBrLWktYWRkXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lOiAnQWRkJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tUmVzZXRDb21tYW5kKGdyb3VwKVwiICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZXNldENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS10cmFzaFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWUgPyBkYXRhLlJlc2V0Q29tbWFuZEJ1dHRvbk5hbWU6ICdSZXNldCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vcm1hbC1maWx0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImZpbHRlci1maWVsZHNcIiBbZ3JvdXBdPVwiZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEZpbHRlckJhckZpZWxkXCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1idXR0b25zXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzZWFyY2hcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWxhYmVsIGlvbi10ZXh0LWNhcGl0YWxpemVcIj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnU2VhcmNoJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIiAqbmdJZj1cImRhdGEuSXNTaG93R3JpZENhbmNlbEZpbHRlckJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwidGltZXNcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBbbmdDbGFzc109XCJpc1Nob3dBZHZGaWx0ZXIgPyAndG9nZ2xlT24nIDogJ3RvZ2dsZU9mZidcIiAoY2xpY2spPVwiYWR2YW5jZWRTZWFyY2goKVwiICpuZ0lmPVwiZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNsaWRlcnMtaFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhcHAtemZvcm0gKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiIGNsYXNzPVwidG8tcHJlbG9hZC10aGUtZmllbGRzXCIgW2dyb3VwXT1cImFkdmZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2LWZpbHRlci1jb250YWluZXJcIiAqbmdJZj1cImlzU2hvd0FkdkZpbHRlclwiIFtAaGlkZUFuZFNob3dBbmltYXRpb25dPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtZmlsdGVyLXNlcGVyYXRvclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdBZHZhbmNlZCBTZWFyY2gnKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtemZvcm0gY2xhc3M9XCJhZHZmaWx0ZXItZmllbGRzXCIgW2dyb3VwXT1cImFkdmZpbHRlckdyb3VwXCIgW2ZpZWxkTmFtZV09XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiPjwvYXBwLXpmb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uICpuZ0lmPVwiISFkYXRhLlNlbGVjdE9wdGlvbnNcIiBbd2lkdGhdPVwiNjBcIiBzaG93U2VsZWN0QWxsPVwidHJ1ZVwiIFtjb2x1bW5NZW51XT1cInRydWVcIiBbbG9ja2VkXT1cImNoZWNrYm94Q29sdW1uUGlubmVkXCI+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gW3N0eWxlXT1cImdldEdyaWRDb2x1bW5TdHlsZSgpXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7XCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFt0aXRsZV09XCJjb2wudGl0bGVcIiBbd2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pblJlc2l6YWJsZVdpZHRoXT1cImNvbC5taW5SZXNpemFibGVXaWR0aFwiIFtmaWx0ZXJdPVwiY29sLmZpbHRlclwiIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGUoY29sLmVuYWJsZUZpbHRlcmluZylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCIgW2hlYWRlclN0eWxlXT1cImdldEdyaWRIZWFkZXJTdHlsZSgpXCIgaGVhZGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9vdGVyU3R5bGVdPVwiZ2V0R3JpZEZvb3RlclN0eWxlKClcIiBmb290ZXJDbGFzcz1cImUxdGFnLXN0eWxlOVwiIFtoaWRkZW5dPVwiY29sLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiY29sLmZvcm1hdFwiIFtjbGFzc109XCJjb2wuQ2xhc3NcIiBbbG9ja2VkXT1cImxvY2tlZChjb2wpXCIgZWRpdG9yPVwibnVtZXJpY1wiIFtjb2x1bW5NZW51XT1cIiFjb2wuZGlzYWJsZUNvbHVtbk1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdG9yXT1cImNvbC5lZGl0b3JUeXBlXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PSAnemRhdGUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pkYXRldGltZSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3p1aWRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRhdGUtcmFuZ2UtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBbZmllbGRdPVwiY29sLmZpZWxkXCIgW2RhdGFdPVwiZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGwgW3Nob3dPcGVyYXRvcnNdPVwiZGF0YS5Jc1Nob3dHcmlkRmlsdGVyT3BlcmF0b3JcIiBbY29sdW1uXT1cImNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJlcVwiPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJjb250YWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gR3JpZCBFZGl0IFRlbXBsYXRlIC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEVkaXRUZW1wbGF0ZSAqbmdJZj1cImRhdGEuRW5hYmxlR3JpZENvbW1hbmQgXCIgbGV0LWRhdGFJdGVtPVwiZGF0YUl0ZW1cIiBsZXQtY29sdW1uPVwiY29sXCIgbGV0LWZvcm1Hcm91cD1cImZvcm1Hcm91cFwiIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLW51bWVyaWN0ZXh0Ym94ICNjZWxsQW5jaG9yIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZClcIj48L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXBvcHVwIFthbmNob3JdPVwiY2VsbEFuY2hvci5udW1lcmljSW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLk5hbWUgfX0gcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby10ZXh0Ym94PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXBvcHVwIFthbmNob3JdPVwiY2VsbEFuY2hvci5pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhKGlzTmV3ICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS51bnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cENsYXNzPVwiay13aWRnZXQgay10b29sdGlwIGstdG9vbHRpcC12YWxpZGF0aW9uIGstaW52YWxpZC1tc2dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAycHg7IG9wYWNpdHk6IDAuNTtcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS08aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCI+e3sgY29sLk5hbWUgfX0gaXMgcmVxdWlyZWQuPC9pb24tbGFiZWw+LS0+XHJcbiAgICAgICAgICAgICAgICAgIC1sXHJcblxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLk5hbWUgfX0gcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHN0eWxlPVwicGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1sZWZ0OiAzcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICFmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkICYmIGZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5lcnJvcnM/LnBhdHRlcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA/IGNvbC5WYWxpZGF0b3JNZXNzYWdlIDogXCJQbGVhc2UgY2hlY2sgdGhlIGlucHV0IHZhbHVlLlwiIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1wb3B1cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogMXB4IDA7XCIgKm5nSWY9XCIhY29sLmNsaWNrYWJsZUljb25zICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkICE9PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtuZ0NsYXNzXT1cImdldENsYXNzKGRhdGFJdGVtLCBjb2wpXCIgW3N0eWxlXT1cImdldENlbGxTdHlsZShjb2wsIGRhdGFJdGVtKVwiIFthdHRyLmRhdGEtaWRdPVwiZGF0YUl0ZW0uSWRcIiBbYXR0ci5jb2x1bW4tbmFtZV09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNob3dQb3BPdmVyKGNvbCwgJGV2ZW50KVwiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3ZlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdISDptbScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6c2hvcnRkYXRlJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLTInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6IGdldEZvcm1hdChjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCIndXJsJ1wiIHN0eWxlPVwiY29sb3I6IGJsdWU7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pICE9PSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJnZXRJY29uTmFtZShjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtuZ1N3aXRjaF09XCJjZWxsU3R5bGVDb25kaXRpb24oY29sLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPXRydWU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGxTdHlsZUNvbmRpdGlvbkRlZmF1bHRcIiBbc3R5bGVdPVwic2V0Q2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cIiEhY29sLm5hdmlnYXRlVG9cIiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvKCRldmVudCwgY29sLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIHNpemU9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICB7eyBjb2wuQ2xpY2thYmxlSWNvbnMgfX1cclxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9IFwiZW5kXCIgbmFtZT1cImFycm93LWZvcndhcmRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiICpuZ0lmPVwiY29sLmlzRWRpdGFibGVJbkdyaWQgPT09IHRydWUgJiYgaXNJbmxpbmVGb3JtR3JvdXBIYXNWYWx1ZSgpICYmICFpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyAmJiAhY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIGNsYXNzPVwiZTF0YWctc3R5bGU1XCIgW3N0eWxlXT1cImdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sLCBkYXRhSXRlbSwgcm93SW5kZXgpXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16aW5wdXQtY29udGFpbmVyIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleClcIiBbY29udGFpbmVyRmllbGRdPVwiY29udGFpbmVyRmllbGRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIiBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXppbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sLmNsaWNrYWJsZUljb25zXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaWNvbi5DbGFzcyA/IGljb24uQ2xhc3MgOiAnJ1wiICpuZ0lmPVwiISFpY29uICYmICghIWRhdGFJdGVtLldGU19TdGF0dXNDb2RlICYmICEhaWNvbilcclxuICAgICAgICAgICAgICA/IGRhdGFJdGVtLldGU19TdGF0dXNDb2RlICE9PSBpY29uLldGU19TdGF0dXNDb2RlXHJcbiAgICAgICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGRpc2FibGVkQnV0dG9uXCIgKGNsaWNrKT1cIm9uQnRuQ2xpY2soJGV2ZW50LCBpY29uLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgIHt7aWNvbi5OYW1lIHx8IGRhdGFJdGVtW2NvbC5maWVsZF19fSA8ZmEtaWNvbiBbaWNvbl09XCJpY29uLkljb25cIiBzdHlsZT1cInBhZGRpbmc6IDRweCA2cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRCdXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIDxzdHJvbmc+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fTwvc3Ryb25nPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gJ2Rpc2NvbnRpbnVlZCcgOiAnYWN0aXZlJ319XCI+XHJcbiAgICAgICAgICAgICAge3tkYXRhSXRlbS5EaXNjb250aW51ZWQgPyBcImRpc2NvbnRpbnVlZFwiIDogXCJhY3RpdmVcIn19XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZvb3RlclRlbXBsYXRlIGxldC1jb2x1bW4gbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIiAqbmdJZj1cImRhdGEuRW5hYmxlQWdncmVnYXRlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDVweCAwO1wiIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU3XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTdcIj5cclxuICAgICAgICAgICAgICB7e2NvbC5hZ2dyZWdhdGVUeXBlfX1cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogY29sLkZvcm1hdE9wdGlvbnMgPz8gJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnSEg6bW0nIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiBjb2wuRm9ybWF0T3B0aW9ucyA/PyAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6IGNvbC5Gb3JtYXRPcHRpb25zID8/ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLjInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkU2F2ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnU2F2ZScgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRDYW5jZWxDb21tYW5kIFtwcmltYXJ5XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICB7eyBpc05ldyA/ICdEaXNjYXJkIGNoYW5nZXMnIDogJ0NhbmNlbCcgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkRWRpdENvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJFZGl0XCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkUmVtb3ZlQ29tbWFuZD5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIiB3aWR0aD1cIjE4MFwiIFtjb2x1bW5NZW51XT1cImZhbHNlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCIgY2xhc3M9XCJlMXRhZy1zdHlsZThcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWlzTmV3PVwiaXNOZXdcIiBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21SZW1vdmVDb21tYW5kKGRhdGFJdGVtLCByb3dJbmRleClcIiAqbmdJZj1cImRhdGEuRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIHt7IFwiUmVtb3ZlXCIgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1leGNlbCBmaWxlTmFtZT1cIkV4cG9ydC54bHN4XCIgW2ZldGNoRGF0YV09XCJhbGxSZXN1bHRzXCI+PC9rZW5kby1ncmlkLWV4Y2VsPlxyXG4gICAgICA8L2tlbmRvLWdyaWQ+XHJcbiAgICAgIDxhcHAtY29udGV4dC1tZW51IFtkYXRhXT1cImRhdGFcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbZm9ybV09XCJmb3JtXCIgI2RhdGFpdGVtY29udGV4dG1lbnU+PC9hcHAtY29udGV4dC1tZW51PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBmb3IgREVDIGF1dG8gc2Nyb2xsaW5nIC0tPlxyXG4gIDxkaXYgaWQ9XCJlbmQtb2YtZ3JpZFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
|