imm-element-ui 2.4.7 → 2.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/form/form/form.component.mjs +17 -6
- package/esm2022/lib/form/form-type/codemirror.type.mjs +3 -3
- package/esm2022/lib/grid/cell-render/async-link-renderer.mjs +45 -0
- package/esm2022/lib/grid/grid/grid.component.mjs +4 -3
- package/esm2022/lib/grid/mock-data.mjs +4 -2
- package/esm2022/lib/page-form/page-form.component.mjs +3 -3
- package/esm2022/lib/share/utils.mjs +1 -1
- package/fesm2022/imm-element-ui.mjs +65 -12
- package/fesm2022/imm-element-ui.mjs.map +1 -1
- package/lib/crumb-action/crumb-action.component.d.ts +1 -1
- package/lib/form/form/form.component.d.ts +2 -0
- package/lib/grid/cell-render/async-link-renderer.d.ts +14 -0
- package/lib/grid/grid/grid.component.d.ts +3 -1
- package/lib/grid/mock-data.d.ts +2 -0
- package/package.json +1 -1
|
@@ -265,7 +265,7 @@ export class PageFormComponent extends AmComponent {
|
|
|
265
265
|
return;
|
|
266
266
|
}
|
|
267
267
|
this.leftPanelInitialized = true;
|
|
268
|
-
this.baseGridListSnapshot =
|
|
268
|
+
this.baseGridListSnapshot = this.gridList().map((item) => item);
|
|
269
269
|
const dataSource = panel.list?.dataSource;
|
|
270
270
|
this.runLeftPanelEvent('onInit');
|
|
271
271
|
const items = await this.loadLeftPanelItems(dataSource);
|
|
@@ -711,7 +711,7 @@ export class PageFormComponent extends AmComponent {
|
|
|
711
711
|
dataSourceShow() {
|
|
712
712
|
const grid = this.resolvedGridList()[this.indexValue];
|
|
713
713
|
this.currentSelectModelCode = grid?.selectModelCode || null;
|
|
714
|
-
console.log(`dataSourceShow`,
|
|
714
|
+
console.log(`dataSourceShow`, this.gridList(), this.resolvedGridList());
|
|
715
715
|
this.dialogSearchPrm = {};
|
|
716
716
|
this.selectOptions = this.resolvedGridList()[this.indexValue]['selectOptions'];
|
|
717
717
|
if (this.selectOptions?.searchPrm) {
|
|
@@ -1200,4 +1200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1200
1200
|
type: HostListener,
|
|
1201
1201
|
args: ['window:resize']
|
|
1202
1202
|
}] } });
|
|
1203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFDTixlQUFlLEdBVWYsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFNLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUVOLDRCQUE0QixFQUM1QixNQUFNLDBEQUEwRCxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7O0FBeUI1RCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQXdFakQsSUFBSSxVQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLDZCQUE2QjtRQUNoQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUMzRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsc0JBQXNCLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksNEJBQTRCO1FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHVCQUF1QjtRQUN0QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3BELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBNEIsRUFBRTtRQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztZQUM5QixHQUFHLElBQUk7U0FDUCxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBWTtRQUNyQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGdCQUFnQjtRQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBRU8sa0JBQWtCO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTthQUMxQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUNOLE9BQU8sSUFBSTtnQkFDVixZQUFZO2dCQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BFLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRTtnQkFDakIsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFO2dCQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTO2FBQ2hHLENBQ0QsQ0FBQztRQUNILENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxPQUFPLENBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUdELFFBQVE7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0Q7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQTdKVCxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0gsZUFBVSxHQUFHLEtBQUssRUFBVyxDQUFDO1FBQzlCLGFBQVEsR0FBRyxLQUFLLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUIsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQWMsRUFBRSxDQUFDLENBQUM7UUFDdkMsZ0JBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLGdCQUFXLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxLQUFLLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUMzQixlQUFVLEdBQUcsS0FBSyxDQUFrQixFQUFFLENBQUMsQ0FBQztRQUN4QyxhQUFRLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsTUFBTSxDQUFtQixPQUFPLENBQUMsQ0FBQztRQUNoRCxpQkFBWSxHQUFHLEtBQUssRUFBWSxDQUFDO1FBQ2pDLGVBQVUsR0FBRyxLQUFLLEVBQU8sQ0FBQztRQUMxQixlQUFVLEdBQUcsS0FBSyxFQUFPLENBQUM7UUFDMUIsYUFBUSxHQUFHLEtBQUssRUFBTyxDQUFDO1FBQ3hCLHVCQUFrQixHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUMxQyxrQkFBYSxHQUFHLEtBQUssRUFBTyxDQUFDO1FBQzdCLHdCQUFtQixHQUFHLEtBQUssQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUNyQyxvQkFBZSxHQUFHLEtBQUssQ0FBMEIsSUFBSSxDQUFDLENBQUM7UUFDdkQsOEJBQXlCLEdBQUcsS0FBSyxDQUFvRSxJQUFJLENBQUMsQ0FBQztRQUMzRyw4QkFBeUIsR0FBRyxLQUFLLENBQXNELElBQUksQ0FBQyxDQUFDO1FBQzdGLGNBQVMsR0FBRyxLQUFLLENBQTZCLElBQUksQ0FBQyxDQUFDO1FBQ3BELHNCQUFpQixHQUFHLEtBQUssQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUNuQyxtQkFBYyxHQUF3QixFQUFFLENBQUM7UUFFakMsMEJBQXFCLEdBQW9DLEVBQUUsQ0FBQztRQUVwRSx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDUCxxQkFBZ0IsR0FBRyxNQUFNLENBQVEsRUFBRSxDQUFDLENBQUM7UUFDOUMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHaEIsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQUN2QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGNBQVMsR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixVQUFLLEdBQVUsRUFBRSxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFDMUIsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFDM0IsMkJBQXNCLEdBQVEsSUFBSSxDQUFDO1FBQ25DLDBCQUFxQixHQUFRLElBQUksQ0FBQztRQUNsQyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDckIseUJBQW9CLEdBQVUsRUFBRSxDQUFDO1FBRXpDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ1osYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdEIsWUFBTyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO1FBQ25ELG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFDekUsMkJBQXNCLEdBQWtCLElBQUksQ0FBQztRQUM3QyxxQkFBZ0IsR0FHWCxFQUFFLENBQUM7UUE4RlAsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRzthQUNwQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNULE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQztRQUNuQyxNQUFNLENBQ0wsR0FBRyxFQUFFO1lBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBVSxDQUFDO1lBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzdELE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RixDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNyQyxDQUFDO2dCQUNGLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzNCLENBQUM7UUFFRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUNMLEdBQUcsRUFBRTtZQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3hELENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUMzQixDQUFDO1FBQ0YsTUFBTSxDQUNMLEdBQUcsRUFBRTtZQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzNCLENBQUM7UUFDRixNQUFNLENBQ0wsR0FBRyxFQUFFO1lBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRTtvQkFDeEQsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2lCQUNsRCxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNGLENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUMzQixDQUFDO1FBQ0YsTUFBTSxDQUNMLEdBQUcsRUFBRTtZQUNKLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsQ0FBQztRQUNGLENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUMzQixDQUFDO1FBQ0YsTUFBTSxDQUNMLEdBQUcsRUFBRTtZQUNKLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzlCLGlDQUFpQztnQkFDakMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzNCLENBQUM7UUFDRixNQUFNLENBQ0wsR0FBRyxFQUFFO1lBQ0osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsT0FBTztZQUNSLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUMvQixPQUFPO1lBQ1IsQ0FBQztZQUNELGNBQWMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUM5QyxPQUFPLFVBQVUsRUFBRSxhQUFhLEtBQUssVUFBVTtZQUM5QyxDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUM1QixDQUFDO1FBQ0YsSUFBSSxZQUFZLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEQsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksWUFBWSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RILFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDekQsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzFILE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQW9DO1FBQ3BFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQixPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FDVCxPQUFPLFVBQVUsQ0FBQyxNQUFNLEtBQUssVUFBVTtZQUN0QyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksT0FBTyxVQUFVLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2hELE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUgsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFVO1FBQ3pDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxNQUFNLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLFlBQVksT0FBTyxFQUFFLENBQUM7WUFDOUIsT0FBTyxNQUFNLEtBQUssQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsUUFBNkIsRUFBRTtRQUNsRSxPQUFPO1lBQ04sUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUk7WUFDNUIsWUFBWSxFQUFFLElBQUksQ0FBQyxxQkFBcUI7WUFDeEMsYUFBYSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDMUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ2pDLFlBQVksRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQ3ZDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7WUFDN0MsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxLQUFVLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsQ0FBQztnQkFDRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsR0FBRyxLQUFLO1NBQ1IsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUEyRCxFQUFFLFFBQTZCLEVBQUU7UUFDckgsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNSLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsTUFBVztRQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsSUFBSSxPQUFPLENBQUM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sTUFBTSxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxLQUFxQztRQUNyRSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDekIsT0FBTztRQUNSLENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLEtBQVUsRUFBRSxNQUFZO1FBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE9BQU87UUFDUixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3RILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFlBQVksQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEYsT0FBTztRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyx1QkFBdUI7UUFDOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRU8sd0JBQXdCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNSLENBQUM7UUFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7YUFDN0MsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO2FBQ3BDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxnQkFBZ0I7UUFDdkIsSUFBSSxDQUFDO1lBQ0osTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9CLE1BQU0sVUFBVSxHQUFHLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDakcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN4RCxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBaUIsQ0FBQztZQUNsQyxNQUFNLFdBQVcsR0FBRztnQkFDbkIsR0FBRyxVQUFVO2dCQUNiLE1BQU0sRUFBRSxVQUFVO2FBQ2xCLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUN6RCxNQUFNLFNBQVMsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3BCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNGLENBQUM7SUFFTyw0QkFBNEI7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLFlBQVksQ0FBQztRQUNwRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkIsT0FBTyxFQUFFLENBQUM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0osTUFBTSxNQUFNLEdBQUcsT0FBTyxZQUFZLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ3BILE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDNUMsR0FBRyxJQUFJO29CQUNQLEtBQUssRUFBRTt3QkFDTixHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ3RCLFdBQVcsRUFBRSxJQUFJO3FCQUNqQjtpQkFDRCxDQUFDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsT0FBTyxFQUFFLENBQUM7UUFDWCxDQUFDO0lBQ0YsQ0FBQztJQUVPLHdCQUF3QixDQUFDLE1BQVc7UUFDM0MsTUFBTSxZQUFZLEdBQUc7WUFDcEIsR0FBRyxNQUFNO1lBQ1QsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztTQUNyQyxDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDakUsQ0FBQztJQUVPLG1CQUFtQjtRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xGLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDakcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFzQixDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDckQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hELENBQUM7cUJBQU0sSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztnQkFDL0MsQ0FBQztZQUNGLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMvRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCxnQkFBZ0I7SUFDUixXQUFXLENBQUMsT0FBc0I7UUFDekMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3hHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3JCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUN4QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVksR0FBRyxLQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDN0YsQ0FBQztRQUNGLENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQU0sQ0FBQztZQUNYLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFZLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFZLENBQUMsQ0FBQztnQkFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFZLEdBQUcsS0FBTSxFQUFFO2dCQUN6QyxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNkLEtBQUssRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBWSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFZLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLElBQUksR0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBWSxHQUFHLEtBQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBWSxHQUFHLEtBQU0sQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDRixDQUFDO1FBQ0QsSUFBSSxFQUFFLEdBQVUsRUFBRSxDQUFDO1FBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsR0FBUSxFQUFFLEVBQUU7WUFDL0MsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxlQUFlO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDVCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RyxDQUFDO0lBQ0YsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFNO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLElBQUksR0FBRyxHQUFHO1lBQ1QsU0FBUyxFQUFFLFFBQVE7WUFDbkIsR0FBRztTQUNILENBQUM7UUFDRixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU87WUFDUixDQUFDO1lBQ0QsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxFQUFFLENBQUM7WUFDUixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztJQUNELElBQUksQ0FBQyxHQUFTO1FBQ2IsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RixDQUFDO2FBQU0sQ0FBQztZQUNQLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsSUFBSSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0Qsb0JBQW9CO0lBQ3BCLElBQUksQ0FBQyxDQUFNO1FBQ1YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXpELElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVO3FCQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBRTtxQkFDckIsT0FBTyxFQUFFO3FCQUNULEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRTtxQkFDdEIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLHNDQUFzQztnQkFDdEMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBWSxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBQ0QsNkNBQTZDO1lBQzdDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO2dCQUNwRSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzNFLE9BQU87Z0JBQ1IsQ0FBQztnQkFDRCxJQUFJLENBQUMsVUFBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsa0NBQWtDO1FBQ25DLENBQUM7SUFDRixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsQ0FBTTtRQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVTtpQkFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUU7aUJBQ3JCLE9BQU8sRUFBRTtpQkFDVCxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7aUJBQ3RCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCx5Q0FBeUM7WUFDekMsTUFBTSxXQUFXLEdBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVO2lCQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFFO2lCQUNyQixPQUFPLEVBQUU7aUJBQ1QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUM5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztZQUNKLDZCQUE2QjtZQUM3Qiw0QkFBNEI7WUFDNUIsV0FBVztZQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyRSxJQUFJO1FBQ0wsQ0FBQztJQUNGLENBQUM7SUFDRCxTQUFTLENBQUMsS0FBYztRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELFNBQVM7SUFDVCxRQUFRLENBQUMsR0FBUTtRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsWUFBWTtRQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUMvRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQkFDakQsSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7d0JBQ25DLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNyQyxDQUFDO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUN4RCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNKLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCxXQUFXLENBQUMsR0FBUTtRQUNuQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFVLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxjQUFjO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEVBQUUsZUFBZSxJQUFJLElBQUksQ0FBQztRQUM1RCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGVBQWUsQ0FBRSxDQUFDO1FBQ2hGLElBQUssSUFBSSxDQUFDLGFBQXFCLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDNUMsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFFLElBQUksQ0FBQyxhQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RSxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDbEMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7WUFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDcEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7WUFDM0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUc7b0JBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVTtvQkFDN0UsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTO2lCQUM5RCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUM3QyxDQUFDO1FBQ0YsQ0FBQztRQUNELHdGQUF3RjtRQUN4RixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVTtpQkFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUU7aUJBQ3JCLE9BQU8sRUFBRTtpQkFDVCxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7aUJBQ3RCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRiwyREFBMkQ7WUFDM0QsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDdkQsSUFBSSxJQUFJLEdBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksRUFBRTt3QkFDL0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQVEsQ0FBQyxDQUFDO3dCQUMzRixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNwRSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQ3JCLE9BQU8sS0FBSyxDQUFDO29CQUNkLENBQUM7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2IsQ0FBQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUc7b0JBQ2pDLElBQUksRUFBRSxVQUFVO29CQUNoQixVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxJQUFJLEdBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksRUFBRTs0QkFDL0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQVEsQ0FBQyxDQUFDOzRCQUMzRixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNwRSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7NEJBQ3JCLE9BQU8sS0FBSyxDQUFDO3dCQUNkLENBQUM7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2IsQ0FBQztpQkFDRCxDQUFDO1lBQ0gsQ0FBQztRQUNGLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBUztRQUNkLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0YsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFRO1FBQ2pCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0YsQ0FBQztJQUNELFlBQVksQ0FBQyxLQUFVLEVBQUUsV0FBMkI7UUFDbkQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQy9ELElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxLQUFLLEdBQVE7Z0JBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7YUFDaEQsQ0FBQztZQUNGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDO2dCQUN4QyxLQUFLLENBQUMsR0FBRyxHQUFHO29CQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDWixPQUFPLEVBQUUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUU7aUJBQ2xFLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRTtnQkFDeEQsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLO2FBQ3pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsT0FBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEIsNkJBQTZCO1FBQzlCLENBQUM7SUFDRixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQWdCO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3RDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztnQkFDakUsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO3FCQUFNLENBQUM7b0JBQ1AsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDMUYsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsYUFBYSxDQUFDLFFBQWlCO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUM5QyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUN2QixDQUFDO29CQUNELCtCQUErQjtvQkFDL0IsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUN0QixDQUFDO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsT0FBTyxJQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlKLENBQUM7aUJBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO3dCQUM5QixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7d0JBQ2pFLElBQUksUUFBUSxFQUFFLENBQUM7NEJBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFhLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7NEJBQzdGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsWUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN2RixDQUFDOzZCQUFNLENBQUM7NEJBQ1AsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDMUYsQ0FBQztvQkFDRixDQUFDLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNKLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQVUsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ3ZGLENBQUMsQ0FBQyxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNELFFBQVE7UUFDUCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxTQUFTO1FBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sY0FBYztRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0YsQ0FBQztJQUNGLENBQUM7SUFFTyx1QkFBdUI7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsT0FBTztnQkFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDckQsT0FBTyxFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQzthQUNsRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sOEJBQThCLENBQUMsSUFBYyxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBQ3BGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2QsT0FBTyxHQUFHLEVBQXlCLENBQUM7WUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUM1QixPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUMxQixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUN0QixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUE0QixDQUFDO1FBQ25FLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEgsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUM7UUFDM0MsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBYztRQUNwQyxPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBYyxFQUFFLEtBQWE7UUFDckQsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBRUQsY0FBYztRQUNiLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzNELENBQUM7SUFFTyxzQkFBc0I7UUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO0lBQzdHLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFpQztRQUN6RCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2hHLENBQUM7SUFFTyxZQUFZLENBQUMsT0FBWTtRQUNoQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFDRCxPQUFPO1lBQ04sR0FBRyxPQUFPO1lBQ1YsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hHLE1BQU0sRUFBRSxJQUFJLEdBQUcsQ0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RyxNQUFNLEVBQUUsSUFBSSxHQUFHLENBQVcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDdkcsQ0FBQztJQUNILENBQUM7SUFFTyx1QkFBdUI7UUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FDZCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7YUFDckIsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQzthQUM3QixNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMxRCxPQUFPLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RSxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBc0I7UUFDM0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDO0lBQ2hILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFzQjtRQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xELE9BQU8sV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO0lBQzVDLENBQUM7SUFFTyxxQkFBcUI7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVPLHdCQUF3QixDQUFDLE9BQVk7UUFDNUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FDUixDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLDRCQUE0QjtRQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pJLE1BQU0sUUFBUSxHQUF3QixFQUFFLENBQUM7UUFDekMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLFdBQTRCO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ25DLE9BQU87WUFDUixDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsT0FBTztZQUNSLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakksQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNsQixDQUFDO0lBRU8scUJBQXFCLENBQUMsZ0JBQXFDLEVBQUUsZ0JBQWtDO1FBQ3RHLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pELFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBQ0gsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ3ZHLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8scUJBQXFCLENBQUMsV0FBNEI7UUFDekQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakQsT0FBTztRQUNSLENBQUM7UUFDRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQzdELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sMEJBQTBCLENBQUMsSUFBcUI7UUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDUixDQUFDO1FBQ0QsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8scUJBQXFCO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxxQkFBcUI7UUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFRO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUU7Z0JBQ1IsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7YUFDakM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVDLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxHQUFHLEdBQUc7Z0JBQ2IsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO2FBQ1osQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNoQixDQUFDO0lBRU8sMkJBQTJCLENBQUMsV0FBNEIsRUFBRSxFQUFhLEVBQUUsR0FBUztRQUN6RixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFhO1FBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqRixPQUFPO1FBQ1IsQ0FBQztRQUNELElBQUksV0FBVyxFQUFFLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNuRCxJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxPQUFPO1lBQ1IsQ0FBQztRQUNGLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNGLElBQUksT0FBTyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxRCxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM3RCxPQUFPO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ3RCLElBQUksQ0FDSixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUNGO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQWM7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hELE9BQU87UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQWM7UUFDaEMsTUFBTSxVQUFVLEdBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckUsSUFBSSxHQUFHLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM5QixHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQzthQUFNLENBQUM7WUFDUCxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqRixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9GLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNGLENBQUM7K0dBM3NDVyxpQkFBaUI7bUdBQWpCLGlCQUFpQixxekdBRmxCLEVBQUUsd0RBT0kscUJBQXFCLDhLQUQzQixvQkFBb0IsNk5DcEZoQywralRBcU9BLG1vQkR4S0UsWUFBWSxxTUFDWixZQUFZLGliQUNaLFdBQVcsbW1CQUNYLG1CQUFtQixnTEFDbkIsYUFBYSxnR0FDYixZQUFZLCtFQUNaLG9CQUFvQix1VUFDcEIsY0FBYyxxS0FDZCxhQUFhLDhVQUNiLFVBQVUsNFhBQ1Ysb0JBQW9CLHNTQUNwQixhQUFhLGtEQUNiLG9CQUFvQixxR0FDcEIsNEJBQTRCOzs0RkFNakIsaUJBQWlCO2tCQXZCN0IsU0FBUzsrQkFDQyxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNSLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLFVBQVU7d0JBQ1Ysb0JBQW9CO3dCQUNwQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3FCQUM1QixhQUdVLEVBQUU7d0RBR08sS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNVLFVBQVU7c0JBQXJDLFlBQVk7dUJBQUMsWUFBWTtnQkFDRCxPQUFPO3NCQUEvQixZQUFZO3VCQUFDLFNBQVM7Z0JBQ1UsV0FBVztzQkFBM0MsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ2dDLGFBQWE7c0JBQTNFLGVBQWU7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQTBKN0QsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VySGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3VzZXJIaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHtcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRDb250ZW50Q2hpbGRyZW4sXG5cdGVmZmVjdCxcblx0SG9zdExpc3RlbmVyLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0UXVlcnlMaXN0LFxuXHRzaWduYWwsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGQsXG5cdFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50LCBGb3JtT3B0aW9ucyB9IGZyb20gJy4uL2Zvcm0vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSb3dTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL3Jvdy1zZWxlY3Rvci9yb3ctc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IExvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2xvZy9sb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IENydW1iQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RlcCwgU3RlcHNDb21wb25lbnQgfSBmcm9tICcuLi9zdGVwcy9zdGVwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCwgR3JpZE9wdGlvbnMgfSBmcm9tICcuLi9ncmlkL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFic01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFicyc7XG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0LCBTZWFyY2ggfSBmcm9tICcuLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0Zm9ybVR5cGVUb1Byb3BzLFxuXHRHcmlkTGlzdCxcblx0SHJlZkJ0bkxpc3QsXG5cdFBhZ2VGb3JtU2xvdENvbnRleHQsXG5cdFBhZ2VMZWZ0UGFuZWxDb25maWcsXG5cdFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlLFxuXHRQYXlsb2FkVXBzZXJ0LFxuXHRQZXJtaXNzaW9uQnRuLFxuXHRDdXN0b21MaXN0RGlhbG9nLFxuXHRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhyZWZCdG5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vaHJlZi1idG4tbGlzdC9ocmVmLWJ0bi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi9zaGFyZS91dGlscyc7XG5pbXBvcnQgeyBQYWdlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3BhZ2UtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSB9IGZyb20gJy4vcGFnZS1mb3JtLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbmFsaXplLCBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuXHRTaW5nbGVTZWxlY3RMaXN0Ym94Q2hhbmdlRXZlbnQsXG5cdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnRcbn0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC1saXN0Ym94L3NpbmdsZS1zZWxlY3QtbGlzdGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmllbGRVdGlscyB9IGZyb20gJy4uL2Zvcm0vZm9ybS1maWVsZC9maWVsZC11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1wYWdlLWZvcm0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdEJ1dHRvbk1vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXHRcdEZvcm1Db21wb25lbnQsXG5cdFx0TG9nQ29tcG9uZW50LFxuXHRcdENydW1iQWN0aW9uQ29tcG9uZW50LFxuXHRcdFN0ZXBzQ29tcG9uZW50LFxuXHRcdEdyaWRDb21wb25lbnQsXG5cdFx0VGFic01vZHVsZSxcblx0XHRSb3dTZWxlY3RvckNvbXBvbmVudCxcblx0XHRUcmFuc2xhdGVQaXBlLFxuXHRcdEhyZWZCdG5MaXN0Q29tcG9uZW50LFxuXHRcdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnQsXG5cdF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vcGFnZS1mb3JtLmNvbXBvbmVudC5zY3NzJyxcblx0cHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgUGFnZUZvcm1Db21wb25lbnQgZXh0ZW5kcyBBbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcblx0QFZpZXdDaGlsZCgnY0Zvcm0nKSBjRm9ybSE6IEZvcm1Db21wb25lbnQ7XG5cdEBWaWV3Q2hpbGRyZW4oJ2N1c3RvbUdyaWQnKSBjdXN0b21HcmlkITogUXVlcnlMaXN0PEdyaWRDb21wb25lbnQ+O1xuXHRAVmlld0NoaWxkcmVuKCd0YWJGb3JtJykgdGFiRm9ybSE6IFF1ZXJ5TGlzdDxGb3JtQ29tcG9uZW50Pjtcblx0QFZpZXdDaGlsZChSb3dTZWxlY3RvckNvbXBvbmVudCkgcm93U2VsZWN0b3I/OiBSb3dTZWxlY3RvckNvbXBvbmVudDtcblx0QENvbnRlbnRDaGlsZHJlbihQYWdlRm9ybVNsb3REaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcGFnZUZvcm1TbG90cyE6IFF1ZXJ5TGlzdDxQYWdlRm9ybVNsb3REaXJlY3RpdmU+O1xuXHRzaG93TG9nID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vZGVsTG9nKCkgJiYgdGhpcy5zaWRlYmFyTW9kZSgpID09PSAncmlnaHQnO1xuXHR9KTtcblx0YWRkVmlzaWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cdGdyaWRMaXN0ID0gaW5wdXQ8YW55W10+KFtdKTtcblx0Zm9ybSA9IGlucHV0LnJlcXVpcmVkPEZvcm1PcHRpb25zPih7fSk7XG5cdGdldFBybUlucHV0ID0gaW5wdXQucmVxdWlyZWQ8R2V0Pih7fSk7XG5cdHN0YXR1c1N0ZXBzID0gaW5wdXQ8U3RlcFtdPihbXSk7XG5cdHN0YXR1c0tleSA9IGlucHV0KCdzdGF0dXMnKTtcblx0aHJlZkJ0bkxpc3QgPSBpbnB1dDxIcmVmQnRuTGlzdFtdPihbXSk7XG5cdHNldFRpdGxlID0gaW5wdXQ8c3RyaW5nPigpO1xuXHRhY3Rpb25MaXN0ID0gaW5wdXQ8UGVybWlzc2lvbkJ0bltdPihbXSk7XG5cdG1vZGVsTG9nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXHRzaWRlYmFyTW9kZSA9IHNpZ25hbDwnbGVmdCcgfCAncmlnaHQnPigncmlnaHQnKTtcblx0Zm9ybURpc2FibGVkID0gaW5wdXQ8RnVuY3Rpb24+KCk7XG5cdHN0YXR1c0NvbmYgPSBpbnB1dDxhbnk+KCk7XG5cdGZvcm1EZXRhaWwgPSBpbnB1dDxhbnk+KCk7XG5cdHNhdmVGdW5jID0gaW5wdXQ8YW55PigpO1xuXHRzaG93TWFpblNhdmVCdXR0b24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblx0Y29uZmlnTmV3UGF0aCA9IGlucHV0PGFueT4oKTtcblx0cnVudGltZUNvbnRleHRJbnB1dCA9IGlucHV0PGFueT4oe30pO1xuXHRjdXN0b21MZWZ0UGFuZWwgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4obnVsbCk7XG5cdGN1c3RvbUxpc3RGb3JtVGVtcGxhdGVNYXAgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVJlZjxDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dD4+IHwgbnVsbD4obnVsbCk7XG5cdGN1c3RvbUxpc3RGb3JtSW5zdGFuY2VNYXAgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBDdXN0b21MaXN0RGlhbG9nIHwgdW5kZWZpbmVkPiB8IG51bGw+KG51bGwpO1xuXHRsZWZ0UGFuZWwgPSBpbnB1dDxQYWdlTGVmdFBhbmVsQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cdHBhbmVsU2VsZWN0ZWREYXRhID0gaW5wdXQ8YW55Pih7fSk7XG5cdHJ1bnRpbWVDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cblx0cHJpdmF0ZSBjdXJyZW50SWRBbmRNb2RlbE5hbWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7fTtcblxuXHR1c2VySGlzdG9yeVNlcnZpY2UgPSBpbmplY3QoVXNlckhpc3RvcnlTZXJ2aWNlKTtcblx0cGFnZUZvcm1TZXJ2aWNlID0gaW5qZWN0KFBhZ2VGb3JtU2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblx0cHJpdmF0ZSBfaW5kZXhWYWx1ZSA9IDA7XG5cdHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxHcmlkTGlzdCA9IHNpZ25hbDxhbnlbXT4oW10pO1xuXHRwcml2YXRlIGdyaWRMaXN0T3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHR2aXNpYmxlID0gZmFsc2U7XG5cdGRpYWxvZ1NlYXJjaFBybSE6IFNlYXJjaDtcblx0c2VsZWN0T3B0aW9ucyE6IEdyaWRPcHRpb25zO1xuXHRzZWxlY3REYXRhOiBhbnlbXSA9IFtdO1xuXHRwYWdlVXJsID0gJyc7XG5cdG5ld1VybCA9ICcnO1xuXHRhdXRoTGV2ZWwgPSBpbnB1dDxudW1iZXI+KC0xKTtcblx0aHJlZnM6IGFueVtdID0gW107XG5cdGFjdGlvbiA9IGluamVjdChBY3Rpb25TZXJ2aWNlKTtcblx0c3ViRm9ybU1vZGVsOiBhbnkgPSB7fTtcblx0c2F2ZUJ0bkRpc2FibGUgPSBmYWxzZTtcblx0Z3JpZERpc2FibGUgPSBmYWxzZTtcblx0c2VsZWN0aW9uS2V5czogYW55W10gPSBbXTtcblx0c3ViRGVsZXRlSWRzOiBhbnlbXSA9IFtdO1xuXHRsZWZ0UGFuZWxJdGVtczogYW55W10gPSBbXTtcblx0bGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZTogYW55ID0gbnVsbDtcblx0bGVmdFBhbmVsU2VsZWN0ZWRJdGVtOiBhbnkgPSBudWxsO1xuXHRsZWZ0UGFuZWxJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRwcml2YXRlIGJhc2VHcmlkTGlzdFNuYXBzaG90OiBhbnlbXSA9IFtdO1xuXG5cdHN0ZXBzVmlzaWJsZSA9IHRydWU7XG5cdHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RNYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUZvcm1TbG90RGlyZWN0aXZlPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RDb250ZXh0TWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VGb3JtU2xvdENvbnRleHQ+KCk7XG5cdGN1cnJlbnRTZWxlY3RNb2RlbENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRzbG90UmVuZGVyU3RhdGVzOiBBcnJheTx7XG5cdFx0c2xvdD86IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZTtcblx0XHRjb250ZXh0OiBQYWdlRm9ybVNsb3RDb250ZXh0O1xuXHR9PiA9IFtdO1xuXG5cdGdldCBpbmRleFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmRleFZhbHVlO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRTZWxlY3RNb2RlbENvZGUgPSB0aGlzLmN1cnJlbnRTZWxlY3RNb2RlbENvZGU7XG5cdFx0aWYgKCFjdXJyZW50U2VsZWN0TW9kZWxDb2RlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwKCk/LltjdXJyZW50U2VsZWN0TW9kZWxDb2RlXSA/PyBudWxsO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybUNvbnRleHQoKTogQ3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQge1xuXHRcdHJldHVybiB7IHBhZ2VGb3JtOiB0aGlzIH07XG5cdH1cblxuXHRnZXREaWFsb2dTZWxlY3RlZFJlc3VsdCgpIHtcblx0XHRjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLnJvd1NlbGVjdG9yPy5nZXRTZWxlY3RlZERhdGEoKSA/PyBbXTtcblx0XHRyZXR1cm4gc2VsZWN0ZWREYXRhLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucz8uY29sdW1uRGVmcz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcblx0XHRcdFx0cmVzdWx0W2NvbC5maWVsZF0gPSBpdGVtW2NvbC5maWVsZF07XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cdH1cblxuXHRzZXRSdW50aW1lQ29udGV4dChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHR0aGlzLnJ1bnRpbWVDb250ZXh0ID0ge1xuXHRcdFx0Li4uKHRoaXMucnVudGltZUNvbnRleHQgfHwge30pLFxuXHRcdFx0Li4uZGF0YSxcblx0XHR9O1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0c2V0IGluZGV4VmFsdWUodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMuX2luZGV4VmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5zZXRTZWxlY3RlZFJvd3MoW10pO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0fVxuXG5cdGdldCBncmlkcygpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk7XG5cdH1cblxuXHRzZXQgZ3JpZHModmFsdWU6IGFueVtdKSB7XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSB0cnVlO1xuXHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodmFsdWUgPz8gW10pO1xuXHRcdHRoaXMuc3luY1Vwc2VydFN1YnNlcnRzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlZEdyaWRMaXN0KCkge1xuXHRcdGlmICh0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbEdyaWRMaXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA/IHRoaXMuaW50ZXJuYWxHcmlkTGlzdCgpIDogdGhpcy5ncmlkTGlzdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVXBzZXJ0U3Vic2VydHMoKSB7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnRzID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXTtcblx0XHRjb25zdCBzdWJzZXJ0TWFwID0gbmV3IE1hcChjdXJyZW50U3Vic2VydHMubWFwKChpdGVtKSA9PiBbaXRlbS5zdWJNb2RlbE5hbWUsIGl0ZW1dKSk7XG5cdFx0Y29uc3QgbmV4dFN1YnNlcnRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGl0ZW1bJ21vZGVsTmFtZSddO1xuXHRcdFx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzdWJzZXJ0TWFwLmdldChzdWJNb2RlbE5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGN1cnJlbnQgfHwge1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0Zms6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8uZmsgfHwgaXRlbS5mayA6IGl0ZW0uZmssXG5cdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdFx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2U6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8ucmVmZXJlbmNlIHx8IGl0ZW0ucmVmZXJlbmNlIDogaXRlbS5yZWZlcmVuY2UsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgYW55W107XG5cdFx0dGhpcy51cHNlcnRQcm0uc3Vic2VydCA9IG5leHRTdWJzZXJ0cztcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQgPyAnbGVmdCcgOiAncmlnaHQnKTtcblx0fVxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykpO1xuXHRcdHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsXG5cdFx0XHQubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG5cdFx0XHQuam9pbignLycpXG5cdFx0XHQucmVwbGFjZSgvKFteXFwvXSopJC8sICcnKTtcblx0XHR0aGlzLm5ld1VybCA9IGAke3RoaXMucGFnZVVybH1uZXdgO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lITtcblx0XHRcdFx0dGhpcy5nZXRQcm0gPSB7IC4uLnRoaXMuZ2V0UHJtSW5wdXQoKSB9O1xuXHRcdFx0XHR0aGlzLmlkICYmICh0aGlzLmdldFBybS5pZCA9IHRoaXMuaWQpO1xuXHRcdFx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSAmJiAhdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgxKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVt2LnN1YkRhdGFLZXldID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVDb250ZXh0SW5wdXQoKSB8fCB7fTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc3RhdHVzU3RlcHMoKS5sZW5ndGggPiAwICYmICF0aGlzLmlkKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ107XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ10sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDMpIHtcblx0XHRcdFx0XHR0aGlzLnNldERpc2FibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlucHV0R3JpZExpc3QgPSB0aGlzLmdyaWRMaXN0KCk7XG5cdFx0XHRcdGlmICghdGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4pIHtcblx0XHRcdFx0XHQvLyB0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KFtdKTtcblx0XHRcdFx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUoaW5wdXRHcmlkTGlzdCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0XHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgcGFuZWwubW9kZSAhPT0gJ2xpc3QnKSB7XG5cdFx0XHRcdFx0dGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMubGVmdFBhbmVsSXRlbXMgPSBbXTtcblx0XHRcdFx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSBudWxsO1xuXHRcdFx0XHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtID0gbnVsbDtcblx0XHRcdFx0XHR0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA9IGZhbHNlO1xuXHRcdFx0XHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodGhpcy5ncmlkTGlzdCgpKTtcblx0XHRcdFx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHR0aGlzLnBhZ2VGb3JtU2xvdHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHRcdHRoaXMuYmluZFBhZ2VGb3JtU2VydmljZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBpbml0aWFsaXplTGVmdFBhbmVsKCkge1xuXHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRpZiAoIXBhbmVsPy5lbmFibGVkIHx8IHBhbmVsLm1vZGUgIT09ICdsaXN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLmJhc2VHcmlkTGlzdFNuYXBzaG90ID0gZGVlcENsb25lKHRoaXMuZ3JpZExpc3QoKSwgdGhpcyk7XG5cdFx0Y29uc3QgZGF0YVNvdXJjZSA9IHBhbmVsLmxpc3Q/LmRhdGFTb3VyY2U7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25Jbml0Jyk7XG5cdFx0Y29uc3QgaXRlbXMgPSBhd2FpdCB0aGlzLmxvYWRMZWZ0UGFuZWxJdGVtcyhkYXRhU291cmNlKTtcblx0XHR0aGlzLmxlZnRQYW5lbEl0ZW1zID0gaXRlbXM7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25JdGVtc0xvYWRlZCcpO1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlTGVmdFBhbmVsVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBkZWZhdWx0VmFsdWUgPT09IG51bGwpICYmIHBhbmVsLmxpc3Q/LmFsbG93RGVzZWxlY3QgPT09IGZhbHNlICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZUxlZnRQYW5lbFZhbHVlKGl0ZW1zWzBdKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihkZWZhdWx0VmFsdWUsIGl0ZW1zLmZpbmQoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZUxlZnRQYW5lbFZhbHVlKGl0ZW0pID09PSBkZWZhdWx0VmFsdWUpKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGxvYWRMZWZ0UGFuZWxJdGVtcyhkYXRhU291cmNlPzogUGFnZUxlZnRQYW5lbERhdGFTb3VyY2UpIHtcblx0XHRpZiAoIWRhdGFTb3VyY2UpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IHJlc3VsdCA9XG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZS5sb2FkZXIgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmxvYWRlcih0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCgpKVxuXHRcdFx0XHQ6IChkYXRhU291cmNlLmxvYWRlciA/PyBkYXRhU291cmNlLm9wdGlvbnMgPz8gW10pO1xuXHRcdHJlc3VsdCA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMocmVzdWx0KTtcblx0XHRpZiAoZGF0YVNvdXJjZS5yZXN1bHRQYXRoKSB7XG5cdFx0XHRyZXN1bHQgPSBmaWVsZFV0aWxzLmdldE1vZGVsKHJlc3VsdCwgZGF0YVNvdXJjZS5yZXN1bHRQYXRoKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBkYXRhU291cmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhkYXRhU291cmNlLnRyYW5zZm9ybShyZXN1bHQsIHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KHsgaXRlbXM6IHJlc3VsdCB9KSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogW107XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJlc29sdmVNYXliZUFzeW5jKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dChleHRyYTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhZ2VGb3JtOiB0aGlzLFxuXHRcdFx0bW9kZTogdGhpcy5sZWZ0UGFuZWwoKT8ubW9kZSxcblx0XHRcdHNlbGVjdGVkSXRlbTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRzZWxlY3RlZFZhbHVlOiB0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUsXG5cdFx0XHRpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyxcblx0XHRcdGdldFBybTogdGhpcy5nZXRQcm0sXG5cdFx0XHRncmlkTGlzdDogdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCksXG5cdFx0XHRiYXNlR3JpZExpc3Q6IHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QsXG5cdFx0XHRwYW5lbFNlbGVjdGVkRGF0YTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRydW50aW1lQ29udGV4dDogdGhpcy5ydW50aW1lQ29udGV4dCxcblx0XHRcdHNldFN0YXRlOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0Li4uZXh0cmEsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcnVuTGVmdFBhbmVsRXZlbnQoZXZlbnROYW1lOiBrZXlvZiBOb25OdWxsYWJsZTxQYWdlTGVmdFBhbmVsQ29uZmlnWydldmVudHMnXT4sIGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRjb25zdCBoYW5kbGVyID0gdGhpcy5sZWZ0UGFuZWwoKT8uZXZlbnRzPy5bZXZlbnROYW1lXTtcblx0XHRpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmV0dXJuIGhhbmRsZXIodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoZXh0cmEpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZUxlZnRQYW5lbFZhbHVlKG9wdGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuXHRcdGlmICghb3B0aW9uVmFsdWUpIHtcblx0XHRcdHJldHVybiBvcHRpb247XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKG9wdGlvbiwgb3B0aW9uVmFsdWUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFNpbmdsZVNlbGVjdExpc3Rib3hDaGFuZ2VFdmVudCkge1xuXHRcdGlmIChldmVudC52YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24oZXZlbnQudmFsdWUsIGV2ZW50Lm9wdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFwcGx5TGVmdFBhbmVsU2VsZWN0aW9uKHZhbHVlOiBhbnksIG9wdGlvbj86IGFueSkge1xuXHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRpZiAoIXBhbmVsPy5lbmFibGVkIHx8IHBhbmVsLm1vZGUgIT09ICdsaXN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzZWxlY3RlZEl0ZW0gPSBvcHRpb24gPz8gdGhpcy5sZWZ0UGFuZWxJdGVtcy5maW5kKChpdGVtKSA9PiB0aGlzLnJlc29sdmVMZWZ0UGFuZWxWYWx1ZShpdGVtKSA9PT0gdmFsdWUpID8/IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XG5cdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChwYW5lbC5zdGF0ZUtleSkge1xuXHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBwYW5lbC5zdGF0ZUtleSwgdmFsdWUpO1xuXHRcdH1cblx0XHRpZiAocGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXkpIHtcblx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgcGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXksIHNlbGVjdGVkSXRlbSk7XG5cdFx0fVxuXHRcdHRoaXMuaW5kZXhWYWx1ZSA9IDA7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25TZWxlY3Rpb25DaGFuZ2UnLCB7IHNlbGVjdGVkSXRlbSwgc2VsZWN0ZWRWYWx1ZTogdmFsdWUgfSk7XG5cdFx0dGhpcy5zeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpO1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9ybU9wdGlvbnMoKTtcblx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCkge1xuXHRcdGNvbnN0IGZpdGVyUHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mbGF0TWFwKChpdGVtOiBhbnkpID0+IChBcnJheS5pc0FycmF5KGl0ZW0/LmZpdGVyUHJlbG9hZHMpID8gaXRlbS5maXRlclByZWxvYWRzIDogW10pKTtcblx0XHR0aGlzLmdldFBybS5maXRlclByZWxvYWRzID0gZml0ZXJQcmVsb2Fkcztcblx0fVxuXG5cdHByaXZhdGUgc3luY0dldFBybUZvckN1cnJlbnRWaWV3KCkge1xuXHRcdGlmICghdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50UHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5zdWJEYXRhS2V5KVxuXHRcdFx0LmZpbHRlcigoaXRlbTogYW55KSA9PiAhIWl0ZW0pO1xuXHRcdGlmIChjdXJyZW50UHJlbG9hZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5nZXRQcm0ucHJlbG9hZHMgPSBjdXJyZW50UHJlbG9hZHM7XG5cdFx0fVxuXHRcdHRoaXMuc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtT3B0aW9ucygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc291cmNlRm9ybSA9IHRoaXMuZm9ybSgpO1xuXHRcdFx0Y29uc3QgZm9ybUZpZWxkcyA9IHNvdXJjZUZvcm0/LmZpZWxkcyA/IFsuLi5zb3VyY2VGb3JtLmZpZWxkc10gOiBbXTtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmb3JtRmllbGRzWzBdXG5cdFx0XHRcdD8geyAuLi5mb3JtRmllbGRzWzBdLCBncm91cDogQXJyYXkuaXNBcnJheShmb3JtRmllbGRzWzBdLmdyb3VwKSA/IFsuLi5mb3JtRmllbGRzWzBdLmdyb3VwXSA6IFtdIH1cblx0XHRcdFx0OiB7IGdyb3VwQ2xhc3M6ICdmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCcsIGdyb3VwOiBbXSB9O1xuXHRcdFx0Zm9ybUZpZWxkc1swXSA9IGZpcnN0RmllbGQgYXMgYW55O1xuXHRcdFx0Y29uc3QgZm9ybU9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLnNvdXJjZUZvcm0sXG5cdFx0XHRcdGZpZWxkczogZm9ybUZpZWxkcyxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLnJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKTtcblx0XHRcdGNvbnN0IG1haW5Hcm91cCA9IGZvcm1PcHRpb25zPy5maWVsZHM/LlswXT8uZ3JvdXA7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYWluR3JvdXApICYmIGFwcGVuZEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvcm1PcHRpb25zLmZpZWxkc1swXS5ncm91cCA9IFsuLi5tYWluR3JvdXAsIC4uLmFwcGVuZEdyb3Vwc107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybU9wdGlvbnM7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2J1aWxkRm9ybU9wdGlvbnMg5omn6KGM5aSx6LSl77yM5Zue6YCA5Yiw5Y6f5aeL6KGo5Y2V6YWN572uOicsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmZvcm0oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKSB7XG5cdFx0Y29uc3QgYXBwZW5kR3JvdXBzID0gdGhpcy5sZWZ0UGFuZWwoKT8uYXBwZW5kR3JvdXBzO1xuXHRcdGlmICghYXBwZW5kR3JvdXBzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0eXBlb2YgYXBwZW5kR3JvdXBzID09PSAnZnVuY3Rpb24nID8gYXBwZW5kR3JvdXBzKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpIDogYXBwZW5kR3JvdXBzO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuXHRcdFx0XHQ/IGRlZXBDbG9uZShwYXJzZWQsIHRoaXMpLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFx0XHRcdC4uLihpdGVtPy5leHRyYSB8fCB7fSksXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlPbmx5OiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0OiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignbGVmdFBhbmVsLmFwcGVuZEdyb3VwcyDmiafooYzlpLHotKU6JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKGRldGFpbDogYW55KSB7XG5cdFx0Y29uc3QgbWVyZ2VkRGV0YWlsID0ge1xuXHRcdFx0Li4uZGV0YWlsLFxuXHRcdFx0Li4uKHRoaXMucGFuZWxTZWxlY3RlZERhdGEoKSB8fCB7fSksXG5cdFx0XHQuLi4odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gfHwge30pLFxuXHRcdH07XG5cdFx0Y29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25EZXRhaWxNZXJnZScsIHsgZGV0YWlsLCBtZXJnZWREZXRhaWwgfSk7XG5cdFx0cmV0dXJuIG1lcmdlZFJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWVyZ2VkRGV0YWlsIDogbWVyZ2VkUmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGFCeUtleSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcblx0XHRcdHRoaXMubWVyZ2VVcHNlcnQodmFsdWUgYXMgUGF5bG9hZFVwc2VydCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCkge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKGdyaWQpID0+IHtcblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdGNvbnN0IGZvcm1EYXRhID0gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGZvcm1EYXRhKSkge1xuXHRcdFx0XHRcdHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gPSBmb3JtRGF0YVswXSA/PyB7fTtcblx0XHRcdFx0fSBlbHNlIGlmIChmb3JtRGF0YSAmJiB0eXBlb2YgZm9ybURhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JpZC50eXBlID09ICdncmlkJyAmJiAhdGhpcy5nZXRQcm0uZGF0YT8uaGFzT3duUHJvcGVydHkoZ3JpZC5zdWJEYXRhS2V5KSkge1xuXHRcdFx0XHR0aGlzLmdldFBybS5kYXRhW2dyaWQuc3ViRGF0YUtleV0gPSBbXTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyDmj5Lmp73nu4Tku7Yg5pu05pawdXBzZXJ0XG5cdHByaXZhdGUgbWVyZ2VVcHNlcnQocGF5bG9hZDogUGF5bG9hZFVwc2VydCkge1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBmaWVsZCwgaGVhZGVyTmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlLCByZWNvcmRJbmRleCwgaW5kZXgsIGRhdGEsIHNlbGVjdE5hbWUgfSA9IHBheWxvYWQ7XG5cdFx0bGV0IHN1YiA9IHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQhW2luZGV4XTtcblx0XHRpZiAoYWN0aW9uID09ICdhZGQnKSB7XG5cdFx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbaW5kZXhdWydncmlkT3B0aW9ucyddWydtYWluRmllbGQnXTtcblx0XHRcdHN1YlsnbWFwdG1wJ10/LnNldChyZWNvcmRJbmRleCwgeyAuLi5kYXRhIH0pO1xuXHRcdFx0aWYgKGZpZWxkID09IG1haW5GaWVsZCkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgaWQ6IDAsIGxhYmVsOiBoZWFkZXJOYW1lIH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcblx0XHRcdGxldCBvOiBhbnk7XG5cdFx0XHRpZiAoc3ViWydtYXB0bXAnXT8uaGFzKHJlY29yZEluZGV4ISkpIHtcblx0XHRcdFx0byA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG8sIHsgW2ZpZWxkXTogbmV3VmFsdWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvID0geyBpZDogZGF0YVsnaWQnXSwgW2ZpZWxkXTogbmV3VmFsdWUgfTtcblx0XHRcdH1cblx0XHRcdGlmIChzZWxlY3ROYW1lKSB7XG5cdFx0XHRcdG9bc2VsZWN0TmFtZV0gPSBkYXRhW3NlbGVjdE5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4ISwgbyk7XG5cdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdG5ld1ZhbHVlOiBuZXdWYWx1ZSxcblx0XHRcdFx0b2xkVmFsdWU6IG9sZFZhbHVlLFxuXHRcdFx0XHRpZDogZGF0YVsnaWQnXSxcblx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRsZXQgZGF0YSA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRkYXRhW2ZpZWxkXSAmJiBkZWxldGUgZGF0YVtmaWVsZF07XG5cdFx0XHRcdGxldCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRcdFx0XHRrZXlzLmxlbmd0aCA9PSAwICYmIHN1YlsnbWFwdG1wJ10/LmRlbGV0ZShyZWNvcmRJbmRleCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViWydsb2d0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISArIGZpZWxkISkpIHtcblx0XHRcdFx0c3ViWydsb2d0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4ISArIGZpZWxkISk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHRzdWJbJ21hcHRtcCddPy5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0c3ViWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0fVxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LCAxMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpOiBhbnkge1xuXHRcdGxldCBzdWJGb3JtID0gdHJ1ZTtcblx0XHRpZiAodGhpcy50YWJGb3JtLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMudGFiRm9ybS5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmICghaXRlbS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdFx0c3ViRm9ybSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY0Zvcm0udmFsaWRhdGUoKSAmJiBzdWJGb3JtKSB7XG5cdFx0XHRsZXQgY2I6IGFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiO1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0eXBlb2YgdGhpcy5zYXZlRnVuYygpID09ICdmdW5jdGlvbicgPyB0aGlzLnNhdmVGdW5jKCkodGhpcy51cHNlcnRQcm0sIHRoaXMuaWQsIGNiKSA6IHRoaXMudXBzZXJ0KG51bGwsIGNiKTtcblx0XHR9XG5cdH1cblxuXHRkZWxSb3dzKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWRUYWIgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmM7XG5cdFx0Y29uc3Qgc3ViVGFibGUgPSBncmlkVGFiLmdyaWRPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGUpID8gZSA6IFtlXTtcblxuXHRcdGxldCBwcm0gPSB7XG5cdFx0XHRtb2RlbE5hbWU6IHN1YlRhYmxlLFxuXHRcdFx0aWRzLFxuXHRcdH07XG5cdFx0bGV0IGRvbmVDYWxsZWQgPSBmYWxzZTtcblx0XHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdFx0aWYgKGRvbmVDYWxsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZG9uZUNhbGxlZCA9IHRydWU7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNCk7XG5cdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2RlbGV0ZScsIGRhdGE6IGlkcyB9KTtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHR9O1xuXHRcdGlmICghZGVsZXRlRnVuYykge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0aGlzLndlYl9yZW1vdmUocHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRkb25lKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGdW5jKGlkcywgZ3JpZFRhYiwgZG9uZSk7XG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR1cENiKHJlcz86IGFueSkge1xuXHRcdGlmIChyZXMuaWQgPT0gMCkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0bGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YDtcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2VkaXRVcmxdKTtcblx0XHRcdH0sIDE1MDApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldChmYWxzZSk7XG5cdFx0dGhpcy5jRm9ybS5maW5hbGl6ZSgpO1xuXHR9XG5cdC8vIFRPRE8g5piv5ZCm6ZyA6KaB5pWw5o2u6L2s5o2i5Zue6LCD5Ye95pWwXG5cdG9uT2soZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXS5zZWxlY3REYXRhID0gW107XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgdW5pcXVlS2V5cyA9IFtdO1xuXHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygncm93RGF0YS0tLS0tJyxyb3dEYXRhKVxuXHRcdFx0XHR1bmlxdWVLZXlzID0gcm93RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3VuaXF1ZUtleXMtLS0tLScsdW5pcXVlS2V5cywpXG5cdFx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgb2JqID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyBncmlkLnNlbGVjdERhdGFDYihpdGVtKSA6IHsgLi4uaXRlbSB9O1xuXHRcdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCAmJiB1bmlxdWVLZXlzLmluY2x1ZGVzKG9ialtncmlkLnVuaXF1ZUZpZWxkIV0gfHwgJycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdyaWQuc2VsZWN0RGF0YSEucHVzaChvYmopO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdhZGQnLCBkYXRhOiBncmlkLnNlbGVjdERhdGEgfSk7XG5cdFx0aWYgKCEhZ3JpZC5zbG90S2V5KSB7XG5cdFx0XHRjb25zdCB7IHN1YkRhdGFLZXkgfSA9IGdyaWQ7XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIGdyaWQuc2VsZWN0RGF0YSk7XG5cdFx0XHQvLyB0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0fVxuXHR9XG5cblx0b25DYW5jZWxTZWxlY3RlZChlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRsZXQgZGF0YXM6IGFueSA9IFtdO1xuXHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyB7IC4uLmdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIH0gOiBpdGVtO1xuXHRcdFx0ZGF0YXMucHVzaChkYXRhKTtcblx0XHR9KTtcblx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IGRhdGFzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGRdKTtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRsZXQgZGVsZXRlZFJvd3MgPSByb3dEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBrZXlzLmluY2x1ZGVzKGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pKTtcblx0XHRcdHRoaXMuc3ViRGVsZXRlSWRzID0gZGVsZXRlZFJvd3MubWFwKCh2OiBhbnkpID0+IHYuaWQpLmZpbHRlcigodjogYW55KSA9PiB2KTtcblx0XHRcdGNvbnN0IGlkTm90Um93cyA9IGRlbGV0ZWRSb3dzLmZpbHRlcigodjogYW55KSA9PiAhdi5pZCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnaWROb3RSb3dzLS0tLScsaWROb3RSb3dzKVxuXHRcdFx0Y29uc3QgZGVsZXRlTm9kZXM6IGFueSA9IFtdO1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmZvckVhY2hOb2RlKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgbWFpbiA9IG5vZGUuZGF0YVtncmlkLnVuaXF1ZUZpZWxkXTtcblx0XHRcdFx0XHRsZXQgaXNFeGl0ID0gaWROb3RSb3dzLmZpbmRJbmRleCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IG1haW4pO1xuXHRcdFx0XHRcdGlmIChpc0V4aXQgPiAtMSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlTm9kZXMucHVzaChub2RlLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBpZihkZWxldGVkSWRzLmxlbmd0aCA+IDApe1xuXHRcdFx0Ly8gXHR0aGlzLmRlbFJvd3MoZGVsZXRlZElkcylcblx0XHRcdC8vIH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZU5vZGVzKTtcblx0XHRcdC8vIH1cblx0XHR9XG5cdH1cblx0Z2V0RGV0YWlsKGluZGV4PzogbnVtYmVyKSB7XG5cdFx0Y29uc29sZS5sb2coYGdldERldGFpbDogJHtpbmRleH1gKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0fSk7XG5cdH1cblx0Ly8g6I635Y+W6K+m5oOF5Zue6LCDXG5cdGRldGFpbENiKHJlczogYW55KSB7XG5cdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHJlcztcblx0XHR0aGlzLnVwZGF0ZVRpdGxlKHJlcyk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHRpZiAodHlwZW9mIHRoaXMuZm9ybURpc2FibGVkKCkgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5mb3JtRGlzRnVuYygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ocmVmQnRuTGlzdCgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0SHJlZlZhbHVlKCk7XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXHRzZXRIcmVmVmFsdWUoKSB7XG5cdFx0dGhpcy5ocmVmQnRuTGlzdCgpLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoQ291bnQnKSAmJiB0eXBlb2YgaXRlbS5zZWFyY2hDb3VudCA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpdGVtLnNlYXJjaENvdW50LmNvbHVtbkZpbHRlcnMuZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcih0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLndlYl9zZWFyY2hDb3VudChpdGVtLnNlYXJjaENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGl0ZW0udmFsdWUgPSByZXMudG90YWxOdW0gfHwgMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlVGl0bGUocmVzOiBhbnkpIHtcblx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5mb3JtKCkubWFpbkZpZWxkO1xuXHRcdGxldCB0aXRsZSA9IHJlc1ttYWluRmllbGQhXTtcblx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpO1xuXHR9XG5cdGRhdGFTb3VyY2VTaG93KCkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IGdyaWQ/LnNlbGVjdE1vZGVsQ29kZSB8fCBudWxsO1xuXHRcdGNvbnNvbGUubG9nKGBkYXRhU291cmNlU2hvd2AsIGdyaWQpXG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0gPSB7fTtcblx0XHR0aGlzLnNlbGVjdE9wdGlvbnMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdWydzZWxlY3RPcHRpb25zJ10hO1xuXHRcdGlmICgodGhpcy5zZWxlY3RPcHRpb25zIGFzIGFueSk/LnNlYXJjaFBybSkge1xuXHRcdFx0bGV0IHNlYXJjaFBybSA9IGRlZXBDbG9uZSgodGhpcy5zZWxlY3RPcHRpb25zIGFzIGFueSkuc2VhcmNoUHJtLCB0aGlzKTtcblx0XHRcdHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzPy5mb3JFYWNoKCh2OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcihudWxsLCB0aGlzLmdldFBybS5kYXRhIHx8IHRoaXMuY0Zvcm0ubW9kZWwoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0gPSBzZWFyY2hQcm07XG5cdFx0fVxuXHRcdHRoaXMuZGlhbG9nU2VhcmNoUHJtLm1vZGVsTmFtZSA9IHRoaXMuc2VsZWN0T3B0aW9ucy5tb2RlbE5hbWU7XG5cdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlKSB7XG5cdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMuc3VwcHJlc3NSb3dEZXNlbGVjdGlvbiA9IHRydWU7XG5cdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlO1xuXHRcdFx0Y29uc3QgaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RPcHRpb25zLmlzUm93U2VsZWN0YWJsZTtcblx0XHRcdGlmICh0aGlzLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9uTW9kZSAhPSAnbm9uZScpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiB0aGlzLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9uTW9kZSA9PSAnc2luZ2xlJyA/ICdzaW5nbGVSb3cnIDogJ211bHRpUm93Jyxcblx0XHRcdFx0XHRpc1Jvd1NlbGVjdGFibGU6IGlzUm93U2VsZWN0YWJsZSA/IGlzUm93U2VsZWN0YWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGNvbnNvbGUubG9nKCchdGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi0tLS0tJywhdGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbilcblx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhXG5cdFx0XHRcdC5nZXRHcmlkKClcblx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0Lm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IHJvd0RhdGE/Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGQhXSkgfHwgW107XG5cdFx0XHQvLyBjb25zb2xlLmxvZygndGhpcy5zZWxlY3Rpb25LZXlzLS0tLScsdGhpcy5zZWxlY3Rpb25LZXlzKVxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID09ICdvYmplY3QnKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24uY2hlY2tib3hlcyA9IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRsZXQgaXRlbSA9XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMuZGF0YUtleSAhPSAnJ1xuXHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdDogcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGEuaWQpO1xuXHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0uaWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPSB7XG5cdFx0XHRcdFx0bW9kZTogJ211bHRpUm93Jyxcblx0XHRcdFx0XHRjaGVja2JveGVzOiAocGFyYW1zKSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQgaXRlbSA9XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdFx0PyByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YVt0aGlzLnNlbGVjdE9wdGlvbnMuZGF0YUtleSFdKVxuXHRcdFx0XHRcdFx0XHRcdDogcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGEuaWQpO1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNlbGVjdGlvbktleXMgPSBbXTtcblx0XHR9XG5cdFx0dGhpcy52aXNpYmxlID0gdHJ1ZTtcblx0fVxuXG5cdGdvUnVuKGRhdGE6IGFueSkge1xuXHRcdGlmICh0eXBlb2YgZGF0YS51cmwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGxldCB1cmwgPSBkYXRhLnVybCh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnV2FybicsIGRldGFpbDogJ+ivt+mFjee9rui3s+i9rOmTvuaOpScgfSk7XG5cdFx0fVxuXHR9XG5cblx0YXV0aENsaWNrKGJ0bjogYW55KSB7XG5cdFx0aWYgKGJ0bi5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpKSB7XG5cdFx0XHRidG4ub25DbGljayh0aGlzLmdldFBybS5kYXRhKTtcblx0XHR9XG5cdH1cblx0c3RhdHVzQ2hhbmdlKHZhbHVlOiBhbnksIGN1c3RvbVN0ZXBzOiBTdGVwc0NvbXBvbmVudCkge1xuXHRcdGlmICh0aGlzLmF1dGhMZXZlbCgpIDwgNCB8fCAhdGhpcy5zdGF0dXNDb25mKCkuaXNDbGljaykgcmV0dXJuO1xuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRsZXQgcGFyYW06IGFueSA9IHtcblx0XHRcdFx0bW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcblx0XHRcdFx0ZGF0YTogeyBpZDogdGhpcy5pZCwgW3RoaXMuc3RhdHVzS2V5KCldOiB2YWx1ZSB9LFxuXHRcdFx0fTtcblx0XHRcdGlmICh0aGlzLmlzTG9nKSB7XG5cdFx0XHRcdHBhcmFtLmxvZ01vZGVsID0gYCR7dGhpcy5tb2RlbE5hbWV9TG9nYDtcblx0XHRcdFx0cGFyYW0ubG9nID0ge1xuXHRcdFx0XHRcdHBpZDogdGhpcy5pZCxcblx0XHRcdFx0XHRjb250ZW50OiBgW+eKtuaAgV0gJHt0aGlzLmdldFBybS5kYXRhIVt0aGlzLnN0YXR1c0tleSgpXX0gLT4gJHt2YWx1ZX1gLFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy53ZWJfd3JpdGUocGFyYW0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RGV0YWlsKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlLFxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnVwc2VydFBybS5hZGREYXRhIVt0aGlzLnN0YXR1c0tleSgpXSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5jRm9ybS50cmlnZ2VyTW9kZWxFZmZlY3QoeyBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0pO1xuXHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHQvLyBjdXN0b21TdGVwcy5yZWZyZXNoU3RlcHMoKVxuXHRcdH1cblx0fVxuXG5cdGZvcm1EaXNGdW5jKCkge1xuXHRcdGxldCBkYXRhID0gdGhpcy5mb3JtRGlzYWJsZWQoKSEodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHRoaXMuc2F2ZUJ0bkRpc2FibGUgPSBkYXRhO1xuXHRcdFx0dGhpcy5ncmlkRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRhdGEpO1xuXHRcdFx0dGhpcy5kaXNhYmxlZENoaWxkKGRhdGEpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRjb25zdCBkaXNhYmVsZCA9IGRhdGEuZGlzYWJsZWQ7XG5cdFx0XHRjb25zdCBmaWx0ZXJzID0gZGF0YS5maWx0ZXJzIHx8IFtdO1xuXHRcdFx0aWYgKCFmaWx0ZXJzLmluY2x1ZGVzKCdmb3JtJykpIHtcblx0XHRcdFx0dGhpcy5kaXNhYmxlRm9ybShkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2dyaWQnKSkge1xuXHRcdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGlzYWJlbGQ7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZWRDaGlsZChkaXNhYmVsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGRpc2FibGVGb3JtKGRpc2FibGU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmZvcm1PcHRpb25zLmZpZWxkcz8uZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0di5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdGlmIChkaXNhYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEubWFya0FzUHJpc3RpbmUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdGRpc2FibGVkQ2hpbGQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZiAodi50eXBlID09ICdncmlkJykge1xuXHRcdFx0XHR2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGRpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8g5ZCM5LiA5Liq6aG16Z2iZGlzYWJsZWQgZmFsc2UgID0+IHRydWVcblx0XHRcdFx0XHRpZiAoIWRpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgJiYgIWl0ZW0uZWRpdGFibGUgJiYgdHlwZW9mIGl0ZW0uZWRpdGFibGUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdFx0aXRlbS5lZGl0YWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dHlwZW9mIHRoaXMuY3VzdG9tR3JpZD8uZ2V0KGluZGV4KSEuZ2V0R3JpZCA9PSdmdW5jdGlvbicgJiYgdGhpcy5jdXN0b21HcmlkPy5nZXQoaW5kZXgpIS5nZXRHcmlkKCkuYXBpLnNldEdyaWRPcHRpb24oJ2NvbHVtbkRlZnMnLCB2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMpO1xuXHRcdFx0fSBlbHNlIGlmICh2LnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdHYuZmllbGRzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpdGVtLmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAoZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQhZmllbGREaXNhYmxlZCAmJiB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRzZXREaXNhYmxlZCgpIHtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZiAodi50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHR2LmZpZWxkcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR0YWJDbGljaygpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMudGFiRm9ybS5nZXQodGhpcy5pbmRleFZhbHVlKSAmJiB0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnJlQ2FsY0xhYmVsU2l6ZSgpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSwgMCk7XG5cdH1cblx0dG9nZ2xlTG9nKCkge1xuXHRcdHRoaXMuc2lkZWJhck1vZGUuc2V0KHRoaXMuc2lkZWJhck1vZGUoKSA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7XG5cdH1cblxuXHRwcml2YXRlIHJlYnVpbGRTbG90TWFwKCkge1xuXHRcdHRoaXMuc2xvdE1hcC5jbGVhcigpO1xuXHRcdGZvciAoY29uc3Qgc2xvdCBvZiB0aGlzLnBhZ2VGb3JtU2xvdHM/LnRvQXJyYXkoKSA/PyBbXSkge1xuXHRcdFx0Y29uc3Qgc2xvdEtleSA9IHNsb3Quc2xvdEtleSgpO1xuXHRcdFx0aWYgKCF0aGlzLnNsb3RNYXAuaGFzKHNsb3RLZXkpKSB7XG5cdFx0XHRcdHRoaXMuc2xvdE1hcC5zZXQoc2xvdEtleSwgc2xvdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpIHtcblx0XHR0aGlzLnNsb3RSZW5kZXJTdGF0ZXMgPSAodGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkgPz8gW10pLm1hcCgoZ3JpZCwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IHNsb3RLZXkgPSB0aGlzLnJlc29sdmVTbG90S2V5KGdyaWQpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2xvdDogc2xvdEtleSA/IHRoaXMuc2xvdE1hcC5nZXQoc2xvdEtleSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRleHQ6IHRoaXMuZ2V0T3JDcmVhdGVQYWdlRm9ybVNsb3RDb250ZXh0KGdyaWQsIGluZGV4LCBzbG90S2V5KSxcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldE9yQ3JlYXRlUGFnZUZvcm1TbG90Q29udGV4dChncmlkOiBHcmlkTGlzdCwgaW5kZXg6IG51bWJlciwgc2xvdEtleTogc3RyaW5nKTogUGFnZUZvcm1TbG90Q29udGV4dCB7XG5cdFx0Y29uc3QgcmVuZGVyS2V5ID0gdGhpcy5nZXRHcmlkUmVuZGVyS2V5KGdyaWQsIGluZGV4KTtcblx0XHRsZXQgY29udGV4dCA9IHRoaXMuc2xvdENvbnRleHRNYXAuZ2V0KHJlbmRlcktleSk7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHRjb250ZXh0ID0ge30gYXMgUGFnZUZvcm1TbG90Q29udGV4dDtcblx0XHRcdHRoaXMuc2xvdENvbnRleHRNYXAuc2V0KHJlbmRlcktleSwgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dC4kaW1wbGljaXQgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQuc2xvdEtleSA9IHNsb3RLZXk7XG5cdFx0Y29udGV4dC5ncmlkID0gZ3JpZDtcblx0XHRjb250ZXh0LmluZGV4ID0gaW5kZXg7XG5cdFx0Y29udGV4dC5wYWdlRm9ybSA9IHRoaXM7XG5cdFx0Y29udGV4dC5kYXRhID0gKHRoaXMuZ2V0UHJtLmRhdGEgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnRleHQubW9kZWwgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IHRoaXMuZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXkhXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleSFdIHx8IHt9O1xuXHRcdGNvbnRleHQudXBzZXJ0ID0gdGhpcy51cHNlcnRQcm07XG5cdFx0Y29udGV4dC5hY3RpdmUgPSB0aGlzLmluZGV4VmFsdWUgPT09IGluZGV4O1xuXHRcdGNvbnRleHQuZ3JpZERpc2FibGUgPSB0aGlzLmdyaWREaXNhYmxlO1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlU2xvdEtleShncmlkOiBHcmlkTGlzdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdyaWQuc2xvdEtleSB8fCBncmlkLnN1YkRhdGFLZXk7XG5cdH1cblxuXHRwcml2YXRlIGdldEdyaWRSZW5kZXJLZXkoZ3JpZDogR3JpZExpc3QsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgZ3JpZC5zdWJEYXRhS2V5IHx8IGdyaWQuc2xvdEtleSB8fCBgJHtpbmRleH1gO1xuXHR9XG5cblx0Z2V0Q3VycmVudEdyaWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpPy5bdGhpcy5pbmRleFZhbHVlXSA/PyBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDdXJyZW50U3ViTW9kZWxOYW1lKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRHcmlkLnR5cGUgPT09ICdncmlkJyA/IGN1cnJlbnRHcmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgJycgOiBjdXJyZW50R3JpZC5tb2RlbE5hbWUgfHwgJyc7XG5cdH1cblxuXHRwcml2YXRlIGdldFN1YnNlcnRCeUdyaWQoZ3JpZDogR3JpZExpc3QgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG5cdFx0aWYgKCFncmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc3ViTW9kZWxOYW1lID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgOiBncmlkWydtb2RlbE5hbWUnXTtcblx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnVwc2VydFBybS5zdWJzZXJ0Py5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uc3ViTW9kZWxOYW1lID09PSBzdWJNb2RlbE5hbWUpID8/IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGNsb25lU3Vic2VydChzdWJzZXJ0OiBhbnkpIHtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3Vic2VydCxcblx0XHRcdHN1YkRhdGE6IEFycmF5LmlzQXJyYXkoc3Vic2VydC5zdWJEYXRhKSA/IHN1YnNlcnQuc3ViRGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiBbXSxcblx0XHRcdG1hcHRtcDogbmV3IE1hcDxhbnksIGFueT4oc3Vic2VydC5tYXB0bXAgPyAoQXJyYXkuZnJvbShzdWJzZXJ0Lm1hcHRtcC5lbnRyaWVzKCkpIGFzIFthbnksIGFueV1bXSkgOiBbXSksXG5cdFx0XHRsb2d0bXA6IG5ldyBNYXA8YW55LCBhbnk+KHN1YnNlcnQubG9ndG1wID8gKEFycmF5LmZyb20oc3Vic2VydC5sb2d0bXAuZW50cmllcygpKSBhcyBbYW55LCBhbnldW10pIDogW10pLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgY3VycmVudEdyaWQudHlwZSA9PT0gJ2dyaWQnKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgZm9ybUluZGV4ID1cblx0XHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHRcdC5zbGljZSgwLCB0aGlzLmluZGV4VmFsdWUgKyAxKVxuXHRcdFx0XHQuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSAhPT0gJ2dyaWQnKS5sZW5ndGggLSAxO1xuXHRcdHJldHVybiBmb3JtSW5kZXggPj0gMCA/ICh0aGlzLnRhYkZvcm0uZ2V0KGZvcm1JbmRleCkgPz8gbnVsbCkgOiBudWxsO1xuXHR9XG5cblx0Y2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYXV0aExldmVsKCkgPj0gMyAmJiBjdXJyZW50R3JpZCA9PT0gdGhpcy5nZXRDdXJyZW50R3JpZCgpICYmIGN1cnJlbnRHcmlkLnN1YlNhdmU/LmVuYWJsZWQgPT09IHRydWU7XG5cdH1cblxuXHRnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8ubGFiZWwgfHwgJ+S/neWtmCc7XG5cdH1cblxuXHRwcml2YXRlIGhhc01haW5QZW5kaW5nQ2hhbmdlcygpIHtcblx0XHRjb25zdCBhZGREYXRhID0gdGhpcy51cHNlcnRQcm0uYWRkRGF0YSB8fCB7fTtcblx0XHRjb25zdCB1cGREYXRhID0gdGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYWRkRGF0YSkubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyh1cGREYXRhKS5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhIShcblx0XHRcdChzdWJzZXJ0LnN1YkRhdGEgJiYgc3Vic2VydC5zdWJEYXRhLmxlbmd0aCA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5tYXB0bXAgJiYgc3Vic2VydC5tYXB0bXAuc2l6ZSA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5sb2d0bXAgJiYgc3Vic2VydC5sb2d0bXAuc2l6ZSA+IDApXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpIHtcblx0XHRjb25zdCBkaXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9KSwgLi4uT2JqZWN0LmtleXModGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fSldKTtcblx0XHRjb25zdCBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGRpcnR5UGF0aHMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRzbmFwc2hvdFtrZXldID0gZmllbGRVdGlscy5nZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBrZXkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdDtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQ6IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IHNuYXBzaG90cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKCFncmlkIHx8IGdyaWQgPT09IGN1cnJlbnRHcmlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoZ3JpZCk7XG5cdFx0XHRpZiAoIXRoaXMuaGFzU3Vic2VydFBlbmRpbmdDaGFuZ2VzKHN1YnNlcnQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGN1cnJlbnREYXRhID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XSB8fCBbXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gfHwge307XG5cdFx0XHRzbmFwc2hvdHMuc2V0KGdyaWQuc3ViRGF0YUtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50RGF0YSkgPyBjdXJyZW50RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLmN1cnJlbnREYXRhIH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdHM7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzdWJEYXRhU25hcHNob3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmVudHJpZXMobWFpbkRhdGFTbmFwc2hvdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHRcdHN1YkRhdGFTbmFwc2hvdHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLnZhbHVlIH07XG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhdGhpcy5pZCB8fCAhdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFpbkRhdGFTbmFwc2hvdCA9IHRoaXMuY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpO1xuXHRcdGNvbnN0IG90aGVyRGlydHlTbmFwc2hvdHMgPSB0aGlzLmNvbGxlY3RPdGhlckRpcnR5U3ViRGF0YVNuYXBzaG90KGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0XHR0aGlzLnJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90LCBvdGhlckRpcnR5U25hcHNob3RzKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRDdXJyZW50VGFiVXBzZXJ0U3RhdGUoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3Vic2VydC5tYXB0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5sb2d0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5zdWJEYXRhID0gW107XG5cdH1cblxuXHRwcml2YXRlIHJlY2FsY3VsYXRlU2F2ZVNpZ25hbCgpIHtcblx0XHRjb25zdCBoYXNEaXJ0eVN1YnNlcnRzID0gKHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgfHwgW10pLnNvbWUoKHN1YnNlcnQ6IGFueSkgPT4gdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpO1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRoaXMuaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkgfHwgaGFzRGlydHlTdWJzZXJ0cyk7XG5cdH1cblxuXHRidWlsZEN1cnJlbnRUYWJVcHNlcnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoY3VycmVudEdyaWQpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgIWN1cnJlbnRTdWJzZXJ0IHx8ICF0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgcGF5bG9hZDogYW55ID0ge1xuXHRcdFx0bW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcblx0XHRcdHVwZERhdGE6IHtcblx0XHRcdFx0aWQ6IHRoaXMuaWQsXG5cdFx0XHRcdC4uLih0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9KSxcblx0XHRcdH0sXG5cdFx0XHRzdWJzZXJ0OiBbdGhpcy5jbG9uZVN1YnNlcnQoY3VycmVudFN1YnNlcnQpXSxcblx0XHR9O1xuXHRcdGlmICh0aGlzLmlzTG9nKSB7XG5cdFx0XHRwYXlsb2FkLmxvZ01vZGVsID0gYCR7dGhpcy5tb2RlbE5hbWV9TG9nYDtcblx0XHRcdHBheWxvYWQubG9nID0ge1xuXHRcdFx0XHQuLi4odGhpcy51cHNlcnRQcm0ubG9nIHx8IHt9KSxcblx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsLCBjYj86IEZ1bmN0aW9uLCByZXM/OiBhbnkpIHtcblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0dGhpcy5yZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWZyZXNoQ3VycmVudFRhYkRhdGEoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMucmVjYWxjdWxhdGVTYXZlU2lnbmFsKCk7XG5cdFx0Y2IgJiYgY2IocmVzKTtcblx0fVxuXG5cdHNhdmVDdXJyZW50VGFiKGNiPzogRnVuY3Rpb24pIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBwYXlsb2FkID0gdGhpcy5idWlsZEN1cnJlbnRUYWJVcHNlcnQoKTtcblx0XHRpZiAoIXBheWxvYWQpIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7flhYjkv53lrZjkuLvooagnIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudEdyaWQ/LnR5cGUgIT09ICdncmlkJykge1xuXHRcdFx0Y29uc3QgY3VycmVudEZvcm0gPSB0aGlzLmdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCk7XG5cdFx0XHRpZiAoY3VycmVudEZvcm0gJiYgIWN1cnJlbnRGb3JtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRjb25zdCBmaW5hbGl6ZVNhdmUgPSAocmVzPzogYW55KSA9PiB0aGlzLmhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZCwgY2IsIHJlcyk7XG5cdFx0aWYgKHR5cGVvZiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uc2F2ZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGN1cnJlbnRHcmlkLnN1YlNhdmUuc2F2ZUZ1bmMocGF5bG9hZCwgdGhpcy5pZCwgZmluYWxpemVTYXZlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy53ZWJfdXBzZXJ0KHBheWxvYWQpXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZmluYWxpemVTYXZlKHJlcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFkZFJvd0NsaWNrSGFuZGxlcihncmlkOiBHcmlkTGlzdCkge1xuXHRcdGNvbnN0IHN1YkRhdGFLZXkgPSBncmlkLnN1YkRhdGFLZXk7XG5cblx0XHRpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSA9PT0gJ2hhbmRsZScpIHtcblx0XHRcdGNvbnN0IGFkZEl0ZW0gPSBncmlkLmdyaWRPcHRpb25zPy5hZGREYXRhQ2I/LigpID8/IHt9O1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBhZGRJdGVtLCBncmlkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIHVuZGVmaW5lZCwgZ3JpZCk7XG5cdFx0dGhpcy5kYXRhU291cmNlU2hvdygpO1xuXHR9XG5cblx0ZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc2VsZWN0SXRlbTogYW55ID0gdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCkgfHwgW107XG5cdFx0bGV0IGlkczogbnVtYmVyW10gPSBbXTtcblx0XHRpZiAoZ3JpZC5zbG90S2V5ID09PSAnZ2FudHQnKSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkICYmIHR5cGVvZiB2LmlkID09PSAnbnVtYmVyJykubWFwKCh2OiBhbnkpID0+IHYuaWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fVxuXHRcdGlmIChpZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHsgbW9kZWxOYW1lOiBncmlkLmdyaWRPcHRpb25zLm1vZGVsTmFtZSwgaWRzIH0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWQ6b3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDwhLS0g5L+d5a2Y5paw5bu65pON5L2c5Yy6IC0tPlxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBtZDpmbGV4LXdyYXAgbGc6ZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBweS0xIHB4LTEgYm9yZGVyLWItWzFweF0gYm9yZGVyLVsjZGJkYmRiXSBiZy13aGl0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsZzpiYXNpcy0xLzMgb3JkZXItMVwiPlxuXHRcdFx0PGFwcC1jcnVtYi1hY3Rpb25cblx0XHRcdFx0W2FkZFZpc2libGVdPVwiYWRkVmlzaWJsZSgpXCJcblx0XHRcdFx0W25ld1VybF09XCJuZXdVcmxcIlxuXHRcdFx0XHRbaXNTaG93Q29nXT1cInRydWVcIlxuXHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRbYWN0aW9uTGlzdF09XCJhY3Rpb25MaXN0KClcIlxuXHRcdFx0XHRbY29uZmlnTmV3UGF0aF09XCJjb25maWdOZXdQYXRoKClcIlxuXHRcdFx0XHRbZGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG5cdFx0XHRcdFtzYXZlQnRuRGlzYWJsZV09XCJzYXZlQnRuRGlzYWJsZVwiXG5cdFx0XHRcdFtzaG93U2F2ZUJ1dHRvbl09XCJzaG93TWFpblNhdmVCdXR0b24oKVwiXG5cdFx0XHRcdChhY3Rpb25FdmVudCk9XCJhdXRoQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdChzYXZlRXZlbnQpPVwic3VibWl0Rm9ybSgpXCI+XG5cdFx0XHQ8L2FwcC1jcnVtYi1hY3Rpb24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS81IGxnOmJhc2lzLTIvMyBvcmRlci0yIGxnOm9yZGVyLTIgbWQ6b3JkZXItbGFzdCBtZDpiYXNpcy1mdWxsIG1kOm10LVs2cHhdXCI+XG5cdFx0XHQ8aHJlZi1idG4tbGlzdFxuXHRcdFx0XHRbaHJlZnNdPVwiaHJlZkJ0bkxpc3QoKVwiXG5cdFx0XHRcdChocmVmQ2xpY2spPVwiZ29SdW4oJGV2ZW50KVwiPjwvaHJlZi1idG4tbGlzdD5cblx0XHRcdDwhLS0gQGlmIChpZCkge1xuXHRcdFx0XHRAZm9yIChidG4gb2YgaHJlZkJ0bkxpc3QoKTsgdHJhY2sgYnRuKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxuXHRcdFx0XHRcdFx0W3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtci1bNnB4XVwiXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiYnRuPy5pY29uXCJcblx0XHRcdFx0XHRcdGxhYmVsPVwie3sgYnRuLmkxOG5LZXkgPyBpMThuLmZhbnlpKGJ0bi5pMThuS2V5KSA6IGJ0bi5sYWJlbCB9fVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiZ29SdW4oYnRuKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdH0gLS0+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvMyBvcmRlci0zIGZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuXHRcdFx0QGlmIChtb2RlbExvZygpKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIj5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidpY29uZm9udCBpY29uLXNpZGViYXIgaWNvbi1zaWRlYmFyLScgKyBzaWRlYmFyTW9kZSgpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVMb2coKVwiPjwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiZmxleFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJweC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBmbGV4LTFcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXJvdyBvcmRlci0xXCI+XG5cdFx0XHRcdEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25MaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBhY3Rpb24pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJnZXRQcm0uZGF0YT8uaWNvblwiXG5cdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb24ubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbbGFiZWxdPVwiYWN0aW9uLmkxOG5LZXkgPyAoYWN0aW9uLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uYnRuRGlzYWJsZWQgPyBhY3Rpb24uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxuXHRcdFx0XHRcdFx0W3N0eWxlQ2xhc3NdPVwiXG5cdFx0XHRcdFx0XHRcdChhY3Rpb24uYXV0aCB8fCAwKSA+IChhdXRoTGV2ZWwoKSB8fCAwKSB8fCAhIWFjdGlvbi5idG5IaWRkZW4/LihnZXRQcm0uZGF0YSlcblx0XHRcdFx0XHRcdFx0XHQ/ICdmb3JtLWFjdGlvbiBoaWRkZW4nXG5cdFx0XHRcdFx0XHRcdFx0OiAnZm9ybS1hY3Rpb24gYmxvY2sgbXItWy41cmVtXSdcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJhY3Rpb24ub25DbGljayAhPSAnJyAmJiBhY3Rpb24ub25DbGljaz8uKGdldFBybS5kYXRhLCBhY3Rpb24pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3Qgdy1mdWxsXCI+XG5cdFx0XHRcdEBpZiAoc3RlcHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0PGN1c3RvbS1zdGVwc1xuXHRcdFx0XHRcdFx0I2N1c3RvbVN0ZXBzXG5cdFx0XHRcdFx0XHRjbGFzcz1cInctZnVsbFwiXG5cdFx0XHRcdFx0XHRbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXG5cdFx0XHRcdFx0XHRbbW9kZWxMb2ddPVwic2hvd0xvZygpXCJcblx0XHRcdFx0XHRcdFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXG5cdFx0XHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0XHRcdFtpc0NsaWNrXT1cInRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2tcIlxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzdGF0dXNDaGFuZ2UoJGV2ZW50LCBjdXN0b21TdGVwcylcIj5cblx0XHRcdFx0XHQ8L2N1c3RvbS1zdGVwcz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIGhpZGRlbiBtZDpibG9ja1wiPjwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG4gIDwhLS0gIGZvcm0g5Li75Yy65Z+fLS0+XG4gIEBpZih0aGlzLmZvcm0oKS5mb3JtKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1haW4gZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgIEBpZiAoY3VzdG9tTGVmdFBhbmVsKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9jayBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIG1kOmZsZXgtbm9uZSBtZDp3LWZpdCBtZDptYXgtdy1mdWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUxlZnRQYW5lbCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobGVmdFBhbmVsKCk/LmVuYWJsZWQgJiYgbGVmdFBhbmVsKCk/Lm1vZGUgPT09ICdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctWzIyMHB4XSBtZDptYXgtdy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1mb3JtLWxlZnQtcGFuZWxcIj5cbiAgICAgICAgICAgIDxhbS1zaW5nbGUtc2VsZWN0LWxpc3Rib3hcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwibGVmdFBhbmVsSXRlbXNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwibGVmdFBhbmVsKCk/Lmxpc3Q/Lm9wdGlvblZhbHVlIHx8ICd2YWx1ZSdcIlxuICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwibGVmdFBhbmVsKCk/Lmxpc3Q/Lm9wdGlvbkxhYmVsIHx8ICdsYWJlbCdcIlxuICAgICAgICAgICAgICBbZW1wdHlNZXNzYWdlXT1cImxlZnRQYW5lbCgpPy5saXN0Py5lbXB0eU1lc3NhZ2UgfHwgJ+aaguaXoOaVsOaNridcIlxuICAgICAgICAgICAgICBbYWxsb3dEZXNlbGVjdF09XCJsZWZ0UGFuZWwoKT8ubGlzdD8uYWxsb3dEZXNlbGVjdCA/PyB0cnVlXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOm1pbi13LTAgbWQ6ZmxleC0xIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleC0xXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxuICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAjY0Zvcm1cbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJnZXRQcm0uZGF0YSA/PyB7fVwiPjwvY3VzdG9tLWZvcm0+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChncmlkcyAmJiBncmlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItMlwiPlxuICAgICAgICAgICAgICA8cC10YWJzIFsodmFsdWUpXT1cImluZGV4VmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsaXN0PlxuICAgICAgICAgICAgICAgICAgQGZvciAoZmNoaWxkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZmNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLXRhYlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFiQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZjaGlsZC5pMThuS2V5ID8gaTE4bi5mYW55aShmY2hpbGQuaTE4bktleSkgOiBmY2hpbGQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wLXRhYj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3AtdGFibGlzdD5cbiAgICAgICAgICAgICAgPC9wLXRhYnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGZvciAoZ3JpZCBvZiBncmlkczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGdyaWQpIHtcbiAgICAgICAgICAgIEBsZXQgc2xvdFN0YXRlID0gc2xvdFJlbmRlclN0YXRlc1tpXTtcbiAgICAgICAgICAgIEBsZXQgc2xvdCA9IHNsb3RTdGF0ZT8uc2xvdDtcbiAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJpbmRleFZhbHVlICE9IGlcIiBbc3R5bGUuaGVpZ2h0XT1cInNsb3QgPyBncmlkLmdyaWRPcHRpb25zLnNjcm9sbEhlaWdodCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgQGlmIChzbG90KSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNsb3QudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHNsb3RTdGF0ZS5jb250ZXh0XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB5LVs1cHhdIHByLVs4cHhdIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKSkge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2F2ZUN1cnJlbnRUYWIoKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGdyaWQuc3ViVGFibGVTb3VyY2UgIT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wbHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cInN1Y2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWRkUm93Q2xpY2tIYW5kbGVyKGdyaWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC5zaG93RGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgI2N1c3RvbUdyaWQ+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC50eXBlID09ICdncmlkJykge1xuICAgICAgICAgICAgICAgICAgPGN1c3RvbS1ncmlkXG4gICAgICAgICAgICAgICAgICAgICNjdXN0b21HcmlkXG4gICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cImdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV1cIlxuICAgICAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVFbWl0KT1cImRlbFJvd3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFthZGRUeXBlXT1cImdyaWQuc3ViVGFibGVTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkRW1pdCk9XCJkYXRhU291cmNlU2hvdygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWQuZ3JpZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZERpc2FibGVdPVwiZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwiZ3JpZC5zaG93RGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVWaXNpYmxlXT1cImNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlTGFiZWxdPVwiZ2V0Q3VycmVudFRhYlNhdmVMYWJlbChncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlRGlzYWJsZWRdPVwiZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0RGF0YV09XCJncmlkLnNlbGVjdERhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbYWRkU29ydF09XCJncmlkLmFkZFNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAoc3ViU2F2ZUVtaXQpPVwic2F2ZUN1cnJlbnRUYWIoKVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZ3JpZD5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB4LTIgcHQtMiBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2F2ZUN1cnJlbnRUYWIoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGN1c3RvbS1mb3JtXG4gICAgICAgICAgICAgICAgICAgICN0YWJGb3JtXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJzdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5IV0gfHwge31cIj5cbiAgICAgICAgICAgICAgICAgIDwvY3VzdG9tLWZvcm0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKHNob3dMb2coKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGxnOnctWzQwMHB4XSBtZDp3LVszMDBweF0gbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBoaWRkZW4gbWQ6YmxvY2tcIj5cbiAgICAgICAgICA8Y3VzdG9tLWxvZyBbbG9nc109XCJnZXRQcm0uZGF0YT8ubG9nID8/IFtdXCI+PC9jdXN0b20tbG9nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG48cm93LXNlbGVjdG9yXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG5cdFtzZWFyY2hQcm1dPVwiZGlhbG9nU2VhcmNoUHJtXCJcblx0W2dyaWRPcHRpb25zXT1cInNlbGVjdE9wdGlvbnNcIlxuXHRbc2VsZWN0aW9uS2V5c109XCJzZWxlY3Rpb25LZXlzXCJcblx0W3NlbGVjdE1vZGVsQ29kZV09XCJjdXJyZW50U2VsZWN0TW9kZWxDb2RlIHx8IHVuZGVmaW5lZFwiXG5cdFtjdXN0b21MaXN0Rm9ybUJ5RGlhbG9nXT1cImN1cnJlbnRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlXCJcblx0W2N1c3RvbUxpc3RGb3JtQnlEaWFsb2dDb250ZXh0XT1cImN1cnJlbnRDdXN0b21MaXN0Rm9ybUNvbnRleHRcIlxuXHRbY3VzdG9tTGlzdERpYWxvZ01hcF09XCJjdXN0b21MaXN0Rm9ybUluc3RhbmNlTWFwKClcIlxuXHQob25Payk9XCJvbk9rKCRldmVudClcIlxuXHQoY2FuY2VsU2VsZWN0KT1cIm9uQ2FuY2VsU2VsZWN0ZWQoJGV2ZW50KVwiPlxuPC9yb3ctc2VsZWN0b3I+XG4iXX0=
|
|
1203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMs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QUFxQiw4S0FEM0Isb0JBQW9CLDZOQ3BGaEMsK2pUQXFPQSxtb0JEeEtFLFlBQVkscU1BQ1osWUFBWSxpYkFDWixXQUFXLG1tQkFDWCxtQkFBbUIsZ0xBQ25CLGFBQWEsZ0dBQ2IsWUFBWSwrRUFDWixvQkFBb0IsdVVBQ3BCLGNBQWMscUtBQ2QsYUFBYSw4VUFDYixVQUFVLDRYQUNWLG9CQUFvQixzU0FDcEIsYUFBYSxrREFDYixvQkFBb0IscUdBQ3BCLDRCQUE0Qjs7NEZBTWpCLGlCQUFpQjtrQkF2QjdCLFNBQVM7K0JBQ0MsZUFBZSxjQUNiLElBQUksV0FDUDt3QkFDUixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixVQUFVO3dCQUNWLG9CQUFvQjt3QkFDcEIsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLDRCQUE0QjtxQkFDNUIsYUFHVSxFQUFFO3dEQUdPLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDVSxVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVk7Z0JBQ0QsT0FBTztzQkFBL0IsWUFBWTt1QkFBQyxTQUFTO2dCQUNVLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNnQyxhQUFhO3NCQUEzRSxlQUFlO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkEwSjdELFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckhpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS91c2VySGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7XG5cdEFmdGVyQ29udGVudEluaXQsXG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q29udGVudENoaWxkcmVuLFxuXHRlZmZlY3QsXG5cdEhvc3RMaXN0ZW5lcixcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdFF1ZXJ5TGlzdCxcblx0c2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCwgRm9ybU9wdGlvbnMgfSBmcm9tICcuLi9mb3JtL2Zvcm0vZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm93U2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9yb3ctc2VsZWN0b3Ivcm93LXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2dDb21wb25lbnQgfSBmcm9tICcuLi9sb2cvbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBDcnVtYkFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFN0ZXAsIFN0ZXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RlcHMvc3RlcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRDb21wb25lbnQsIEdyaWRPcHRpb25zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xuaW1wb3J0IHsgQW1Db21wb25lbnQsIEdldCwgU2VhcmNoIH0gZnJvbSAnLi4vYW0vYW0uY29tcG9uZW50JztcbmltcG9ydCB7XG5cdGZvcm1UeXBlVG9Qcm9wcyxcblx0R3JpZExpc3QsXG5cdEhyZWZCdG5MaXN0LFxuXHRQYWdlRm9ybVNsb3RDb250ZXh0LFxuXHRQYWdlTGVmdFBhbmVsQ29uZmlnLFxuXHRQYWdlTGVmdFBhbmVsRGF0YVNvdXJjZSxcblx0UGF5bG9hZFVwc2VydCxcblx0UGVybWlzc2lvbkJ0bixcblx0Q3VzdG9tTGlzdERpYWxvZyxcblx0Q3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQsXG59IGZyb20gJy4vcGFnZS1mb3JtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBIcmVmQnRuTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL2hyZWYtYnRuLWxpc3QvaHJlZi1idG4tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnLi4vc2hhcmUvdXRpbHMnO1xuaW1wb3J0IHsgUGFnZUZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9wYWdlLWZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlRm9ybVNsb3REaXJlY3RpdmUgfSBmcm9tICcuL3BhZ2UtZm9ybS1zbG90LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcblx0U2luZ2xlU2VsZWN0TGlzdGJveENoYW5nZUV2ZW50LFxuXHRTaW5nbGVTZWxlY3RMaXN0Ym94Q29tcG9uZW50XG59IGZyb20gJy4uL3NpbmdsZS1zZWxlY3QtbGlzdGJveC9zaW5nbGUtc2VsZWN0LWxpc3Rib3guY29tcG9uZW50JztcbmltcG9ydCB7IGZpZWxkVXRpbHMgfSBmcm9tICcuLi9mb3JtL2Zvcm0tZmllbGQvZmllbGQtdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtcGFnZS1mb3JtJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW1xuXHRcdENvbW1vbk1vZHVsZSxcblx0XHRCdXR0b25Nb2R1bGUsXG5cdFx0Rm9ybXNNb2R1bGUsXG5cdFx0UmVhY3RpdmVGb3Jtc01vZHVsZSxcblx0XHRGb3JtQ29tcG9uZW50LFxuXHRcdExvZ0NvbXBvbmVudCxcblx0XHRDcnVtYkFjdGlvbkNvbXBvbmVudCxcblx0XHRTdGVwc0NvbXBvbmVudCxcblx0XHRHcmlkQ29tcG9uZW50LFxuXHRcdFRhYnNNb2R1bGUsXG5cdFx0Um93U2VsZWN0b3JDb21wb25lbnQsXG5cdFx0VHJhbnNsYXRlUGlwZSxcblx0XHRIcmVmQnRuTGlzdENvbXBvbmVudCxcblx0XHRTaW5nbGVTZWxlY3RMaXN0Ym94Q29tcG9uZW50LFxuXHRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vcGFnZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuc2NzcycsXG5cdHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VGb3JtQ29tcG9uZW50IGV4dGVuZHMgQW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG5cdEBWaWV3Q2hpbGQoJ2NGb3JtJykgY0Zvcm0hOiBGb3JtQ29tcG9uZW50O1xuXHRAVmlld0NoaWxkcmVuKCdjdXN0b21HcmlkJykgY3VzdG9tR3JpZCE6IFF1ZXJ5TGlzdDxHcmlkQ29tcG9uZW50Pjtcblx0QFZpZXdDaGlsZHJlbigndGFiRm9ybScpIHRhYkZvcm0hOiBRdWVyeUxpc3Q8Rm9ybUNvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGQoUm93U2VsZWN0b3JDb21wb25lbnQpIHJvd1NlbGVjdG9yPzogUm93U2VsZWN0b3JDb21wb25lbnQ7XG5cdEBDb250ZW50Q2hpbGRyZW4oUGFnZUZvcm1TbG90RGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHBhZ2VGb3JtU2xvdHMhOiBRdWVyeUxpc3Q8UGFnZUZvcm1TbG90RGlyZWN0aXZlPjtcblx0c2hvd0xvZyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2RlbExvZygpICYmIHRoaXMuc2lkZWJhck1vZGUoKSA9PT0gJ3JpZ2h0Jztcblx0fSk7XG5cdGFkZFZpc2libGUgPSBpbnB1dDxib29sZWFuPigpO1xuXHRncmlkTGlzdCA9IGlucHV0PGFueVtdPihbXSk7XG5cdGZvcm0gPSBpbnB1dC5yZXF1aXJlZDxGb3JtT3B0aW9ucz4oe30pO1xuXHRnZXRQcm1JbnB1dCA9IGlucHV0LnJlcXVpcmVkPEdldD4oe30pO1xuXHRzdGF0dXNTdGVwcyA9IGlucHV0PFN0ZXBbXT4oW10pO1xuXHRzdGF0dXNLZXkgPSBpbnB1dCgnc3RhdHVzJyk7XG5cdGhyZWZCdG5MaXN0ID0gaW5wdXQ8SHJlZkJ0bkxpc3RbXT4oW10pO1xuXHRzZXRUaXRsZSA9IGlucHV0PHN0cmluZz4oKTtcblx0YWN0aW9uTGlzdCA9IGlucHV0PFBlcm1pc3Npb25CdG5bXT4oW10pO1xuXHRtb2RlbExvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0c2lkZWJhck1vZGUgPSBzaWduYWw8J2xlZnQnIHwgJ3JpZ2h0Jz4oJ3JpZ2h0Jyk7XG5cdGZvcm1EaXNhYmxlZCA9IGlucHV0PEZ1bmN0aW9uPigpO1xuXHRzdGF0dXNDb25mID0gaW5wdXQ8YW55PigpO1xuXHRmb3JtRGV0YWlsID0gaW5wdXQ8YW55PigpO1xuXHRzYXZlRnVuYyA9IGlucHV0PGFueT4oKTtcblx0c2hvd01haW5TYXZlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cdGNvbmZpZ05ld1BhdGggPSBpbnB1dDxhbnk+KCk7XG5cdHJ1bnRpbWVDb250ZXh0SW5wdXQgPSBpbnB1dDxhbnk+KHt9KTtcblx0Y3VzdG9tTGVmdFBhbmVsID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgVGVtcGxhdGVSZWY8Q3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQ+PiB8IG51bGw+KG51bGwpO1xuXHRjdXN0b21MaXN0Rm9ybUluc3RhbmNlTWFwID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgQ3VzdG9tTGlzdERpYWxvZyB8IHVuZGVmaW5lZD4gfCBudWxsPihudWxsKTtcblx0bGVmdFBhbmVsID0gaW5wdXQ8UGFnZUxlZnRQYW5lbENvbmZpZyB8IG51bGw+KG51bGwpO1xuXHRwYW5lbFNlbGVjdGVkRGF0YSA9IGlucHV0PGFueT4oe30pO1xuXHRydW50aW1lQ29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG5cdHByaXZhdGUgY3VycmVudElkQW5kTW9kZWxOYW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ID0ge307XG5cblx0dXNlckhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KFVzZXJIaXN0b3J5U2VydmljZSk7XG5cdHBhZ2VGb3JtU2VydmljZSA9IGluamVjdChQYWdlRm9ybVNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdHByaXZhdGUgX2luZGV4VmFsdWUgPSAwO1xuXHRwcml2YXRlIHJlYWRvbmx5IGludGVybmFsR3JpZExpc3QgPSBzaWduYWw8YW55W10+KFtdKTtcblx0cHJpdmF0ZSBncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0dmlzaWJsZSA9IGZhbHNlO1xuXHRkaWFsb2dTZWFyY2hQcm0hOiBTZWFyY2g7XG5cdHNlbGVjdE9wdGlvbnMhOiBHcmlkT3B0aW9ucztcblx0c2VsZWN0RGF0YTogYW55W10gPSBbXTtcblx0cGFnZVVybCA9ICcnO1xuXHRuZXdVcmwgPSAnJztcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XG5cdGhyZWZzOiBhbnlbXSA9IFtdO1xuXHRhY3Rpb24gPSBpbmplY3QoQWN0aW9uU2VydmljZSk7XG5cdHN1YkZvcm1Nb2RlbDogYW55ID0ge307XG5cdHNhdmVCdG5EaXNhYmxlID0gZmFsc2U7XG5cdGdyaWREaXNhYmxlID0gZmFsc2U7XG5cdHNlbGVjdGlvbktleXM6IGFueVtdID0gW107XG5cdHN1YkRlbGV0ZUlkczogYW55W10gPSBbXTtcblx0bGVmdFBhbmVsSXRlbXM6IGFueVtdID0gW107XG5cdGxlZnRQYW5lbFNlbGVjdGVkVmFsdWU6IGFueSA9IG51bGw7XG5cdGxlZnRQYW5lbFNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcblx0bGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBiYXNlR3JpZExpc3RTbmFwc2hvdDogYW55W10gPSBbXTtcblxuXHRzdGVwc1Zpc2libGUgPSB0cnVlO1xuXHRwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBzbG90TWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VGb3JtU2xvdERpcmVjdGl2ZT4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBzbG90Q29udGV4dE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlRm9ybVNsb3RDb250ZXh0PigpO1xuXHRjdXJyZW50U2VsZWN0TW9kZWxDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0c2xvdFJlbmRlclN0YXRlczogQXJyYXk8e1xuXHRcdHNsb3Q/OiBQYWdlRm9ybVNsb3REaXJlY3RpdmU7XG5cdFx0Y29udGV4dDogUGFnZUZvcm1TbG90Q29udGV4dDtcblx0fT4gPSBbXTtcblxuXHRnZXQgaW5kZXhWYWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5kZXhWYWx1ZTtcblx0fVxuXG5cdGdldCBjdXJyZW50Q3VzdG9tTGlzdEZvcm1UZW1wbGF0ZSgpIHtcblx0XHRjb25zdCBjdXJyZW50U2VsZWN0TW9kZWxDb2RlID0gdGhpcy5jdXJyZW50U2VsZWN0TW9kZWxDb2RlO1xuXHRcdGlmICghY3VycmVudFNlbGVjdE1vZGVsQ29kZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuY3VzdG9tTGlzdEZvcm1UZW1wbGF0ZU1hcCgpPy5bY3VycmVudFNlbGVjdE1vZGVsQ29kZV0gPz8gbnVsbDtcblx0fVxuXG5cdGdldCBjdXJyZW50Q3VzdG9tTGlzdEZvcm1Db250ZXh0KCk6IEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVDb250ZXh0IHtcblx0XHRyZXR1cm4geyBwYWdlRm9ybTogdGhpcyB9O1xuXHR9XG5cblx0Z2V0RGlhbG9nU2VsZWN0ZWRSZXN1bHQoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWREYXRhID0gdGhpcy5yb3dTZWxlY3Rvcj8uZ2V0U2VsZWN0ZWREYXRhKCkgPz8gW107XG5cdFx0cmV0dXJuIHNlbGVjdGVkRGF0YS5tYXAoKGl0ZW0pID0+IHtcblx0XHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XG5cdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnM/LmNvbHVtbkRlZnM/LmZvckVhY2goKGNvbDogYW55KSA9PiB7XG5cdFx0XHRcdHJlc3VsdFtjb2wuZmllbGRdID0gaXRlbVtjb2wuZmllbGRdO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXHR9XG5cblx0c2V0UnVudGltZUNvbnRleHQoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XG5cdFx0dGhpcy5ydW50aW1lQ29udGV4dCA9IHtcblx0XHRcdC4uLih0aGlzLnJ1bnRpbWVDb250ZXh0IHx8IHt9KSxcblx0XHRcdC4uLmRhdGEsXG5cdFx0fTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHNldCBpbmRleFZhbHVlKHZhbHVlOiBudW1iZXIpIHtcblx0XHR0aGlzLl9pbmRleFZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2Uuc2V0U2VsZWN0ZWRSb3dzKFtdKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdH1cblxuXHRnZXQgZ3JpZHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpO1xuXHR9XG5cblx0c2V0IGdyaWRzKHZhbHVlOiBhbnlbXSkge1xuXHRcdHRoaXMuZ3JpZExpc3RPdmVycmlkZGVuID0gdHJ1ZTtcblx0XHR0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KHZhbHVlID8/IFtdKTtcblx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZWRHcmlkTGlzdCgpIHtcblx0XHRpZiAodGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuaW50ZXJuYWxHcmlkTGlzdCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPyB0aGlzLmludGVybmFsR3JpZExpc3QoKSA6IHRoaXMuZ3JpZExpc3QoKTtcblx0fVxuXG5cdHByaXZhdGUgc3luY1Vwc2VydFN1YnNlcnRzKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRTdWJzZXJ0cyA9IHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgfHwgW107XG5cdFx0Y29uc3Qgc3Vic2VydE1hcCA9IG5ldyBNYXAoY3VycmVudFN1YnNlcnRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0uc3ViTW9kZWxOYW1lLCBpdGVtXSkpO1xuXHRcdGNvbnN0IG5leHRTdWJzZXJ0cyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHQubWFwKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgc3ViTW9kZWxOYW1lID0gaXRlbS50eXBlID09PSAnZ3JpZCcgPyBpdGVtLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgOiBpdGVtWydtb2RlbE5hbWUnXTtcblx0XHRcdFx0aWYgKCFzdWJNb2RlbE5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBjdXJyZW50ID0gc3Vic2VydE1hcC5nZXQoc3ViTW9kZWxOYW1lKTtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRjdXJyZW50IHx8IHtcblx0XHRcdFx0XHRcdHN1Yk1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdGZrOiBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/LmZrIHx8IGl0ZW0uZmsgOiBpdGVtLmZrLFxuXHRcdFx0XHRcdFx0c3ViRGF0YTogW10sXG5cdFx0XHRcdFx0XHRtYXB0bXA6IG5ldyBNYXAoKSxcblx0XHRcdFx0XHRcdGxvZ3RtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlOiBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/LnJlZmVyZW5jZSB8fCBpdGVtLnJlZmVyZW5jZSA6IGl0ZW0ucmVmZXJlbmNlLFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIGFueVtdO1xuXHRcdHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgPSBuZXh0U3Vic2VydHM7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcblx0b25SZXNpemUoKSB7XG5cdFx0dGhpcy5zaWRlYmFyTW9kZS5zZXQod2luZG93LmlubmVyV2lkdGggPCAxMDI0ID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7XG5cdH1cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmlkID0gTnVtYmVyKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpKTtcblx0XHR0aGlzLnBhZ2VVcmwgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnVybFxuXHRcdFx0Lm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5wYXRoKVxuXHRcdFx0LmpvaW4oJy8nKVxuXHRcdFx0LnJlcGxhY2UoLyhbXlxcL10qKSQvLCAnJyk7XG5cdFx0dGhpcy5uZXdVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9bmV3YDtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lID0gdGhpcy5nZXRQcm1JbnB1dCgpLm1vZGVsTmFtZSE7XG5cdFx0XHRcdHRoaXMuZ2V0UHJtID0geyAuLi50aGlzLmdldFBybUlucHV0KCkgfTtcblx0XHRcdFx0dGhpcy5pZCAmJiAodGhpcy5nZXRQcm0uaWQgPSB0aGlzLmlkKTtcblx0XHRcdFx0aWYgKHRoaXMuaWQgJiYgdGhpcy5tb2RlbE5hbWUgJiYgIXRoaXMubGVmdFBhbmVsKCk/LmVuYWJsZWQpIHtcblx0XHRcdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKHYpID0+IHtcblx0XHRcdFx0XHRcdGlmICh2LnR5cGUgPT0gJ2dyaWQnKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGFbdi5zdWJEYXRhS2V5XSA9IFtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJ1bnRpbWVDb250ZXh0ID0gdGhpcy5ydW50aW1lQ29udGV4dElucHV0KCkgfHwge307XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLmlzTG9nID0gdGhpcy5tb2RlbExvZygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnN0YXR1c1N0ZXBzKCkubGVuZ3RoID4gMCAmJiAhdGhpcy5pZCkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdGhpcy5zdGF0dXNTdGVwcygpWzBdWyd2YWx1ZSddO1xuXHRcdFx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSBPYmplY3QuYXNzaWduKHRoaXMuZ2V0UHJtLmRhdGEgfHwge30sIHtcblx0XHRcdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdGhpcy5zdGF0dXNTdGVwcygpWzBdWyd2YWx1ZSddLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCAzKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXREaXNhYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbnB1dEdyaWRMaXN0ID0gdGhpcy5ncmlkTGlzdCgpO1xuXHRcdFx0XHRpZiAoIXRoaXMuZ3JpZExpc3RPdmVycmlkZGVuKSB7XG5cdFx0XHRcdFx0Ly8gdGhpcy5pbnRlcm5hbEdyaWRMaXN0LnNldChbXSk7XG5cdFx0XHRcdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmJhc2VHcmlkTGlzdFNuYXBzaG90ID0gZGVlcENsb25lKGlucHV0R3JpZExpc3QsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdFx0XHRpZiAoIXBhbmVsPy5lbmFibGVkIHx8IHBhbmVsLm1vZGUgIT09ICdsaXN0Jykge1xuXHRcdFx0XHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR0aGlzLmxlZnRQYW5lbEl0ZW1zID0gW107XG5cdFx0XHRcdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlID0gbnVsbDtcblx0XHRcdFx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSA9IG51bGw7XG5cdFx0XHRcdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0XHRcdFx0XHR0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KHRoaXMuZ3JpZExpc3QoKSk7XG5cdFx0XHRcdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuaW5pdGlhbGl6ZUxlZnRQYW5lbCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0fVxuXG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnJlYnVpbGRTbG90TWFwKCk7XG5cdFx0dGhpcy5wYWdlRm9ybVNsb3RzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnJlYnVpbGRTbG90TWFwKCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMudXBDYiA9IHRoaXMudXBDYi5iaW5kKHRoaXMpO1xuXHRcdHRoaXMub25SZXNpemUoKTtcblx0XHR0aGlzLmJpbmRQYWdlRm9ybVNlcnZpY2UoKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuZGVzdHJveSQubmV4dCgpO1xuXHRcdHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUxlZnRQYW5lbCgpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCB8fCBwYW5lbC5tb2RlICE9PSAnbGlzdCcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0dGhpcy5iYXNlR3JpZExpc3RTbmFwc2hvdCA9IHRoaXMuZ3JpZExpc3QoKS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbSk7XG5cdFx0Y29uc3QgZGF0YVNvdXJjZSA9IHBhbmVsLmxpc3Q/LmRhdGFTb3VyY2U7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25Jbml0Jyk7XG5cdFx0Y29uc3QgaXRlbXMgPSBhd2FpdCB0aGlzLmxvYWRMZWZ0UGFuZWxJdGVtcyhkYXRhU291cmNlKTtcblx0XHR0aGlzLmxlZnRQYW5lbEl0ZW1zID0gaXRlbXM7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25JdGVtc0xvYWRlZCcpO1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlTGVmdFBhbmVsVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKChkZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBkZWZhdWx0VmFsdWUgPT09IG51bGwpICYmIHBhbmVsLmxpc3Q/LmFsbG93RGVzZWxlY3QgPT09IGZhbHNlICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZUxlZnRQYW5lbFZhbHVlKGl0ZW1zWzBdKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihkZWZhdWx0VmFsdWUsIGl0ZW1zLmZpbmQoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZUxlZnRQYW5lbFZhbHVlKGl0ZW0pID09PSBkZWZhdWx0VmFsdWUpKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGxvYWRMZWZ0UGFuZWxJdGVtcyhkYXRhU291cmNlPzogUGFnZUxlZnRQYW5lbERhdGFTb3VyY2UpIHtcblx0XHRpZiAoIWRhdGFTb3VyY2UpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0bGV0IHJlc3VsdCA9XG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZS5sb2FkZXIgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmxvYWRlcih0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCgpKVxuXHRcdFx0XHQ6IChkYXRhU291cmNlLmxvYWRlciA/PyBkYXRhU291cmNlLm9wdGlvbnMgPz8gW10pO1xuXHRcdHJlc3VsdCA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMocmVzdWx0KTtcblx0XHRpZiAoZGF0YVNvdXJjZS5yZXN1bHRQYXRoKSB7XG5cdFx0XHRyZXN1bHQgPSBmaWVsZFV0aWxzLmdldE1vZGVsKHJlc3VsdCwgZGF0YVNvdXJjZS5yZXN1bHRQYXRoKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBkYXRhU291cmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhkYXRhU291cmNlLnRyYW5zZm9ybShyZXN1bHQsIHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KHsgaXRlbXM6IHJlc3VsdCB9KSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogW107XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJlc29sdmVNYXliZUFzeW5jKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZhbHVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dChleHRyYTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhZ2VGb3JtOiB0aGlzLFxuXHRcdFx0bW9kZTogdGhpcy5sZWZ0UGFuZWwoKT8ubW9kZSxcblx0XHRcdHNlbGVjdGVkSXRlbTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRzZWxlY3RlZFZhbHVlOiB0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUsXG5cdFx0XHRpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyxcblx0XHRcdGdldFBybTogdGhpcy5nZXRQcm0sXG5cdFx0XHRncmlkTGlzdDogdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCksXG5cdFx0XHRiYXNlR3JpZExpc3Q6IHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QsXG5cdFx0XHRwYW5lbFNlbGVjdGVkRGF0YTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRydW50aW1lQ29udGV4dDogdGhpcy5ydW50aW1lQ29udGV4dCxcblx0XHRcdHNldFN0YXRlOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0Li4uZXh0cmEsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcnVuTGVmdFBhbmVsRXZlbnQoZXZlbnROYW1lOiBrZXlvZiBOb25OdWxsYWJsZTxQYWdlTGVmdFBhbmVsQ29uZmlnWydldmVudHMnXT4sIGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRjb25zdCBoYW5kbGVyID0gdGhpcy5sZWZ0UGFuZWwoKT8uZXZlbnRzPy5bZXZlbnROYW1lXTtcblx0XHRpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmV0dXJuIGhhbmRsZXIodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoZXh0cmEpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZUxlZnRQYW5lbFZhbHVlKG9wdGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuXHRcdGlmICghb3B0aW9uVmFsdWUpIHtcblx0XHRcdHJldHVybiBvcHRpb247XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKG9wdGlvbiwgb3B0aW9uVmFsdWUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFNpbmdsZVNlbGVjdExpc3Rib3hDaGFuZ2VFdmVudCkge1xuXHRcdGlmIChldmVudC52YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGF3YWl0IHRoaXMuYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24oZXZlbnQudmFsdWUsIGV2ZW50Lm9wdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFwcGx5TGVmdFBhbmVsU2VsZWN0aW9uKHZhbHVlOiBhbnksIG9wdGlvbj86IGFueSkge1xuXHRcdGNvbnN0IHBhbmVsID0gdGhpcy5sZWZ0UGFuZWwoKTtcblx0XHRpZiAoIXBhbmVsPy5lbmFibGVkIHx8IHBhbmVsLm1vZGUgIT09ICdsaXN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzZWxlY3RlZEl0ZW0gPSBvcHRpb24gPz8gdGhpcy5sZWZ0UGFuZWxJdGVtcy5maW5kKChpdGVtKSA9PiB0aGlzLnJlc29sdmVMZWZ0UGFuZWxWYWx1ZShpdGVtKSA9PT0gdmFsdWUpID8/IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZEl0ZW07XG5cdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChwYW5lbC5zdGF0ZUtleSkge1xuXHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBwYW5lbC5zdGF0ZUtleSwgdmFsdWUpO1xuXHRcdH1cblx0XHRpZiAocGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXkpIHtcblx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgcGFuZWwucGFuZWxTZWxlY3RlZERhdGFLZXksIHNlbGVjdGVkSXRlbSk7XG5cdFx0fVxuXHRcdHRoaXMuaW5kZXhWYWx1ZSA9IDA7XG5cdFx0dGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25TZWxlY3Rpb25DaGFuZ2UnLCB7IHNlbGVjdGVkSXRlbSwgc2VsZWN0ZWRWYWx1ZTogdmFsdWUgfSk7XG5cdFx0dGhpcy5zeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpO1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMgPSB0aGlzLmJ1aWxkRm9ybU9wdGlvbnMoKTtcblx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCkge1xuXHRcdGNvbnN0IGZpdGVyUHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mbGF0TWFwKChpdGVtOiBhbnkpID0+IChBcnJheS5pc0FycmF5KGl0ZW0/LmZpdGVyUHJlbG9hZHMpID8gaXRlbS5maXRlclByZWxvYWRzIDogW10pKTtcblx0XHR0aGlzLmdldFBybS5maXRlclByZWxvYWRzID0gZml0ZXJQcmVsb2Fkcztcblx0fVxuXG5cdHByaXZhdGUgc3luY0dldFBybUZvckN1cnJlbnRWaWV3KCkge1xuXHRcdGlmICghdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjdXJyZW50UHJlbG9hZHMgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVxuXHRcdFx0Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5zdWJEYXRhS2V5KVxuXHRcdFx0LmZpbHRlcigoaXRlbTogYW55KSA9PiAhIWl0ZW0pO1xuXHRcdGlmIChjdXJyZW50UHJlbG9hZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5nZXRQcm0ucHJlbG9hZHMgPSBjdXJyZW50UHJlbG9hZHM7XG5cdFx0fVxuXHRcdHRoaXMuc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtT3B0aW9ucygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc291cmNlRm9ybSA9IHRoaXMuZm9ybSgpO1xuXHRcdFx0Y29uc3QgZm9ybUZpZWxkcyA9IHNvdXJjZUZvcm0/LmZpZWxkcyA/IFsuLi5zb3VyY2VGb3JtLmZpZWxkc10gOiBbXTtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmb3JtRmllbGRzWzBdXG5cdFx0XHRcdD8geyAuLi5mb3JtRmllbGRzWzBdLCBncm91cDogQXJyYXkuaXNBcnJheShmb3JtRmllbGRzWzBdLmdyb3VwKSA/IFsuLi5mb3JtRmllbGRzWzBdLmdyb3VwXSA6IFtdIH1cblx0XHRcdFx0OiB7IGdyb3VwQ2xhc3M6ICdmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCcsIGdyb3VwOiBbXSB9O1xuXHRcdFx0Zm9ybUZpZWxkc1swXSA9IGZpcnN0RmllbGQgYXMgYW55O1xuXHRcdFx0Y29uc3QgZm9ybU9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLnNvdXJjZUZvcm0sXG5cdFx0XHRcdGZpZWxkczogZm9ybUZpZWxkcyxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLnJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKTtcblx0XHRcdGNvbnN0IG1haW5Hcm91cCA9IGZvcm1PcHRpb25zPy5maWVsZHM/LlswXT8uZ3JvdXA7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYWluR3JvdXApICYmIGFwcGVuZEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvcm1PcHRpb25zLmZpZWxkc1swXS5ncm91cCA9IFsuLi5tYWluR3JvdXAsIC4uLmFwcGVuZEdyb3Vwc107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybU9wdGlvbnM7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2J1aWxkRm9ybU9wdGlvbnMg5omn6KGM5aSx6LSl77yM5Zue6YCA5Yiw5Y6f5aeL6KGo5Y2V6YWN572uOicsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmZvcm0oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKSB7XG5cdFx0Y29uc3QgYXBwZW5kR3JvdXBzID0gdGhpcy5sZWZ0UGFuZWwoKT8uYXBwZW5kR3JvdXBzO1xuXHRcdGlmICghYXBwZW5kR3JvdXBzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0eXBlb2YgYXBwZW5kR3JvdXBzID09PSAnZnVuY3Rpb24nID8gYXBwZW5kR3JvdXBzKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpIDogYXBwZW5kR3JvdXBzO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuXHRcdFx0XHQ/IGRlZXBDbG9uZShwYXJzZWQsIHRoaXMpLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFx0XHRcdC4uLihpdGVtPy5leHRyYSB8fCB7fSksXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlPbmx5OiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0OiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignbGVmdFBhbmVsLmFwcGVuZEdyb3VwcyDmiafooYzlpLHotKU6JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKGRldGFpbDogYW55KSB7XG5cdFx0Y29uc3QgbWVyZ2VkRGV0YWlsID0ge1xuXHRcdFx0Li4uZGV0YWlsLFxuXHRcdFx0Li4uKHRoaXMucGFuZWxTZWxlY3RlZERhdGEoKSB8fCB7fSksXG5cdFx0XHQuLi4odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gfHwge30pLFxuXHRcdH07XG5cdFx0Y29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25EZXRhaWxNZXJnZScsIHsgZGV0YWlsLCBtZXJnZWREZXRhaWwgfSk7XG5cdFx0cmV0dXJuIG1lcmdlZFJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWVyZ2VkRGV0YWlsIDogbWVyZ2VkUmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGFCeUtleSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcblx0XHRcdHRoaXMubWVyZ2VVcHNlcnQodmFsdWUgYXMgUGF5bG9hZFVwc2VydCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCkge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKGdyaWQpID0+IHtcblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdGNvbnN0IGZvcm1EYXRhID0gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGZvcm1EYXRhKSkge1xuXHRcdFx0XHRcdHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gPSBmb3JtRGF0YVswXSA/PyB7fTtcblx0XHRcdFx0fSBlbHNlIGlmIChmb3JtRGF0YSAmJiB0eXBlb2YgZm9ybURhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JpZC50eXBlID09ICdncmlkJyAmJiAhdGhpcy5nZXRQcm0uZGF0YT8uaGFzT3duUHJvcGVydHkoZ3JpZC5zdWJEYXRhS2V5KSkge1xuXHRcdFx0XHR0aGlzLmdldFBybS5kYXRhW2dyaWQuc3ViRGF0YUtleV0gPSBbXTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyDmj5Lmp73nu4Tku7Yg5pu05pawdXBzZXJ0XG5cdHByaXZhdGUgbWVyZ2VVcHNlcnQocGF5bG9hZDogUGF5bG9hZFVwc2VydCkge1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBmaWVsZCwgaGVhZGVyTmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlLCByZWNvcmRJbmRleCwgaW5kZXgsIGRhdGEsIHNlbGVjdE5hbWUgfSA9IHBheWxvYWQ7XG5cdFx0bGV0IHN1YiA9IHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQhW2luZGV4XTtcblx0XHRpZiAoYWN0aW9uID09ICdhZGQnKSB7XG5cdFx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbaW5kZXhdWydncmlkT3B0aW9ucyddWydtYWluRmllbGQnXTtcblx0XHRcdHN1YlsnbWFwdG1wJ10/LnNldChyZWNvcmRJbmRleCwgeyAuLi5kYXRhIH0pO1xuXHRcdFx0aWYgKGZpZWxkID09IG1haW5GaWVsZCkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgaWQ6IDAsIGxhYmVsOiBoZWFkZXJOYW1lIH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcblx0XHRcdGxldCBvOiBhbnk7XG5cdFx0XHRpZiAoc3ViWydtYXB0bXAnXT8uaGFzKHJlY29yZEluZGV4ISkpIHtcblx0XHRcdFx0byA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG8sIHsgW2ZpZWxkXTogbmV3VmFsdWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvID0geyBpZDogZGF0YVsnaWQnXSwgW2ZpZWxkXTogbmV3VmFsdWUgfTtcblx0XHRcdH1cblx0XHRcdGlmIChzZWxlY3ROYW1lKSB7XG5cdFx0XHRcdG9bc2VsZWN0TmFtZV0gPSBkYXRhW3NlbGVjdE5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4ISwgbyk7XG5cdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdG5ld1ZhbHVlOiBuZXdWYWx1ZSxcblx0XHRcdFx0b2xkVmFsdWU6IG9sZFZhbHVlLFxuXHRcdFx0XHRpZDogZGF0YVsnaWQnXSxcblx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRsZXQgZGF0YSA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRkYXRhW2ZpZWxkXSAmJiBkZWxldGUgZGF0YVtmaWVsZF07XG5cdFx0XHRcdGxldCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRcdFx0XHRrZXlzLmxlbmd0aCA9PSAwICYmIHN1YlsnbWFwdG1wJ10/LmRlbGV0ZShyZWNvcmRJbmRleCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViWydsb2d0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISArIGZpZWxkISkpIHtcblx0XHRcdFx0c3ViWydsb2d0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4ISArIGZpZWxkISk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHRzdWJbJ21hcHRtcCddPy5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0c3ViWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0fVxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LCAxMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpOiBhbnkge1xuXHRcdGxldCBzdWJGb3JtID0gdHJ1ZTtcblx0XHRpZiAodGhpcy50YWJGb3JtLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMudGFiRm9ybS5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmICghaXRlbS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdFx0c3ViRm9ybSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY0Zvcm0udmFsaWRhdGUoKSAmJiBzdWJGb3JtKSB7XG5cdFx0XHRsZXQgY2I6IGFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiO1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0eXBlb2YgdGhpcy5zYXZlRnVuYygpID09ICdmdW5jdGlvbicgPyB0aGlzLnNhdmVGdW5jKCkodGhpcy51cHNlcnRQcm0sIHRoaXMuaWQsIGNiKSA6IHRoaXMudXBzZXJ0KG51bGwsIGNiKTtcblx0XHR9XG5cdH1cblxuXHRkZWxSb3dzKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWRUYWIgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmM7XG5cdFx0Y29uc3Qgc3ViVGFibGUgPSBncmlkVGFiLmdyaWRPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGUpID8gZSA6IFtlXTtcblxuXHRcdGxldCBwcm0gPSB7XG5cdFx0XHRtb2RlbE5hbWU6IHN1YlRhYmxlLFxuXHRcdFx0aWRzLFxuXHRcdH07XG5cdFx0bGV0IGRvbmVDYWxsZWQgPSBmYWxzZTtcblx0XHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdFx0aWYgKGRvbmVDYWxsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZG9uZUNhbGxlZCA9IHRydWU7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNCk7XG5cdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2RlbGV0ZScsIGRhdGE6IGlkcyB9KTtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHR9O1xuXHRcdGlmICghZGVsZXRlRnVuYykge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0aGlzLndlYl9yZW1vdmUocHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRkb25lKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGdW5jKGlkcywgZ3JpZFRhYiwgZG9uZSk7XG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR1cENiKHJlcz86IGFueSkge1xuXHRcdGlmIChyZXMuaWQgPT0gMCkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0bGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YDtcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2VkaXRVcmxdKTtcblx0XHRcdH0sIDE1MDApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldChmYWxzZSk7XG5cdFx0dGhpcy5jRm9ybS5maW5hbGl6ZSgpO1xuXHR9XG5cdC8vIFRPRE8g5piv5ZCm6ZyA6KaB5pWw5o2u6L2s5o2i5Zue6LCD5Ye95pWwXG5cdG9uT2soZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXS5zZWxlY3REYXRhID0gW107XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgdW5pcXVlS2V5cyA9IFtdO1xuXHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygncm93RGF0YS0tLS0tJyxyb3dEYXRhKVxuXHRcdFx0XHR1bmlxdWVLZXlzID0gcm93RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3VuaXF1ZUtleXMtLS0tLScsdW5pcXVlS2V5cywpXG5cdFx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgb2JqID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyBncmlkLnNlbGVjdERhdGFDYihpdGVtKSA6IHsgLi4uaXRlbSB9O1xuXHRcdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCAmJiB1bmlxdWVLZXlzLmluY2x1ZGVzKG9ialtncmlkLnVuaXF1ZUZpZWxkIV0gfHwgJycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdyaWQuc2VsZWN0RGF0YSEucHVzaChvYmopO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdhZGQnLCBkYXRhOiBncmlkLnNlbGVjdERhdGEgfSk7XG5cdFx0aWYgKCEhZ3JpZC5zbG90S2V5KSB7XG5cdFx0XHRjb25zdCB7IHN1YkRhdGFLZXkgfSA9IGdyaWQ7XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIGdyaWQuc2VsZWN0RGF0YSk7XG5cdFx0XHQvLyB0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0fVxuXHR9XG5cblx0b25DYW5jZWxTZWxlY3RlZChlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRsZXQgZGF0YXM6IGFueSA9IFtdO1xuXHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyB7IC4uLmdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIH0gOiBpdGVtO1xuXHRcdFx0ZGF0YXMucHVzaChkYXRhKTtcblx0XHR9KTtcblx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IGRhdGFzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGRdKTtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRsZXQgZGVsZXRlZFJvd3MgPSByb3dEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBrZXlzLmluY2x1ZGVzKGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pKTtcblx0XHRcdHRoaXMuc3ViRGVsZXRlSWRzID0gZGVsZXRlZFJvd3MubWFwKCh2OiBhbnkpID0+IHYuaWQpLmZpbHRlcigodjogYW55KSA9PiB2KTtcblx0XHRcdGNvbnN0IGlkTm90Um93cyA9IGRlbGV0ZWRSb3dzLmZpbHRlcigodjogYW55KSA9PiAhdi5pZCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnaWROb3RSb3dzLS0tLScsaWROb3RSb3dzKVxuXHRcdFx0Y29uc3QgZGVsZXRlTm9kZXM6IGFueSA9IFtdO1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmZvckVhY2hOb2RlKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgbWFpbiA9IG5vZGUuZGF0YVtncmlkLnVuaXF1ZUZpZWxkXTtcblx0XHRcdFx0XHRsZXQgaXNFeGl0ID0gaWROb3RSb3dzLmZpbmRJbmRleCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IG1haW4pO1xuXHRcdFx0XHRcdGlmIChpc0V4aXQgPiAtMSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlTm9kZXMucHVzaChub2RlLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBpZihkZWxldGVkSWRzLmxlbmd0aCA+IDApe1xuXHRcdFx0Ly8gXHR0aGlzLmRlbFJvd3MoZGVsZXRlZElkcylcblx0XHRcdC8vIH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZU5vZGVzKTtcblx0XHRcdC8vIH1cblx0XHR9XG5cdH1cblx0Z2V0RGV0YWlsKGluZGV4PzogbnVtYmVyKSB7XG5cdFx0Y29uc29sZS5sb2coYGdldERldGFpbDogJHtpbmRleH1gKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0fSk7XG5cdH1cblx0Ly8g6I635Y+W6K+m5oOF5Zue6LCDXG5cdGRldGFpbENiKHJlczogYW55KSB7XG5cdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHJlcztcblx0XHR0aGlzLnVwZGF0ZVRpdGxlKHJlcyk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHRpZiAodHlwZW9mIHRoaXMuZm9ybURpc2FibGVkKCkgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5mb3JtRGlzRnVuYygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ocmVmQnRuTGlzdCgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0SHJlZlZhbHVlKCk7XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXHRzZXRIcmVmVmFsdWUoKSB7XG5cdFx0dGhpcy5ocmVmQnRuTGlzdCgpLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoQ291bnQnKSAmJiB0eXBlb2YgaXRlbS5zZWFyY2hDb3VudCA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpdGVtLnNlYXJjaENvdW50LmNvbHVtbkZpbHRlcnMuZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcih0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLndlYl9zZWFyY2hDb3VudChpdGVtLnNlYXJjaENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGl0ZW0udmFsdWUgPSByZXMudG90YWxOdW0gfHwgMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlVGl0bGUocmVzOiBhbnkpIHtcblx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5mb3JtKCkubWFpbkZpZWxkO1xuXHRcdGxldCB0aXRsZSA9IHJlc1ttYWluRmllbGQhXTtcblx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpO1xuXHR9XG5cdGRhdGFTb3VyY2VTaG93KCkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IGdyaWQ/LnNlbGVjdE1vZGVsQ29kZSB8fCBudWxsO1xuXHRcdGNvbnNvbGUubG9nKGBkYXRhU291cmNlU2hvd2AsIHRoaXMuZ3JpZExpc3QoKSx0aGlzLnJlc29sdmVkR3JpZExpc3QoKSlcblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHt9O1xuXHRcdHRoaXMuc2VsZWN0T3B0aW9ucyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSE7XG5cdFx0aWYgKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KT8uc2VhcmNoUHJtKSB7XG5cdFx0XHRsZXQgc2VhcmNoUHJtID0gZGVlcENsb25lKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KS5zZWFyY2hQcm0sIHRoaXMpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnM/LmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKG51bGwsIHRoaXMuZ2V0UHJtLmRhdGEgfHwgdGhpcy5jRm9ybS5tb2RlbCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHNlYXJjaFBybTtcblx0XHR9XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zdXBwcmVzc1Jvd0Rlc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRjb25zdCBpc1Jvd1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuaXNSb3dTZWxlY3RhYmxlO1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlICE9ICdub25lJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnID8gJ3NpbmdsZVJvdycgOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGlzUm93U2VsZWN0YWJsZTogaXNSb3dTZWxlY3RhYmxlID8gaXNSb3dTZWxlY3RhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coJyF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLS0tLS0nLCF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uKVxuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gcm93RGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKSB8fCBbXTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGlvbktleXMtLS0tJyx0aGlzLnNlbGVjdGlvbktleXMpXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi5jaGVja2JveGVzID0gKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGNoZWNrYm94ZXM6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0Z29SdW4oZGF0YTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhLnVybCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IHVybCA9IGRhdGEudXJsKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdXYXJuJywgZGV0YWlsOiAn6K+36YWN572u6Lez6L2s6ZO+5o6lJyB9KTtcblx0XHR9XG5cdH1cblxuXHRhdXRoQ2xpY2soYnRuOiBhbnkpIHtcblx0XHRpZiAoYnRuLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpIHtcblx0XHRcdGJ0bi5vbkNsaWNrKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdH1cblx0fVxuXHRzdGF0dXNDaGFuZ2UodmFsdWU6IGFueSwgY3VzdG9tU3RlcHM6IFN0ZXBzQ29tcG9uZW50KSB7XG5cdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCA0IHx8ICF0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGxldCBwYXJhbTogYW55ID0ge1xuXHRcdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHRkYXRhOiB7IGlkOiB0aGlzLmlkLCBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0sXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdFx0cGFyYW0ubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0XHRwYXJhbS5sb2cgPSB7XG5cdFx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGBb54q25oCBXSAke3RoaXMuZ2V0UHJtLmRhdGEhW3RoaXMuc3RhdHVzS2V5KCldfSAtPiAke3ZhbHVlfWAsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdmFsdWU7XG5cdFx0XHR0aGlzLmNGb3JtLnRyaWdnZXJNb2RlbEVmZmVjdCh7IFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdC8vIGN1c3RvbVN0ZXBzLnJlZnJlc2hTdGVwcygpXG5cdFx0fVxuXHR9XG5cblx0Zm9ybURpc0Z1bmMoKSB7XG5cdFx0bGV0IGRhdGEgPSB0aGlzLmZvcm1EaXNhYmxlZCgpISh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuXHRcdFx0dGhpcy5zYXZlQnRuRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGF0YTtcblx0XHRcdHRoaXMuZGlzYWJsZUZvcm0oZGF0YSk7XG5cdFx0XHR0aGlzLmRpc2FibGVkQ2hpbGQoZGF0YSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGNvbnN0IGRpc2FiZWxkID0gZGF0YS5kaXNhYmxlZDtcblx0XHRcdGNvbnN0IGZpbHRlcnMgPSBkYXRhLmZpbHRlcnMgfHwgW107XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2Zvcm0nKSkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHRcdGlmICghZmlsdGVycy5pbmNsdWRlcygnZ3JpZCcpKSB7XG5cdFx0XHRcdHRoaXMuZ3JpZERpc2FibGUgPSBkaXNhYmVsZDtcblx0XHRcdFx0dGhpcy5kaXNhYmxlZENoaWxkKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZGlzYWJsZUZvcm0oZGlzYWJsZTogYm9vbGVhbikge1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMuZmllbGRzPy5mb3JFYWNoKCh2KSA9PiB7XG5cdFx0XHR2Lmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0aWYgKGRpc2FibGUpIHtcblx0XHRcdFx0XHR0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0IWZpZWxkRGlzYWJsZWQgJiYgdGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0ZGlzYWJsZWRDaGlsZChkaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKHYsIGluZGV4OiBhbnkpID0+IHtcblx0XHRcdGlmICh2LnR5cGUgPT0gJ2dyaWQnKSB7XG5cdFx0XHRcdHYuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAoZGlzYWJsZWQgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSkge1xuXHRcdFx0XHRcdFx0aXRlbS5lZGl0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyDlkIzkuIDkuKrpobXpnaJkaXNhYmxlZCBmYWxzZSAgPT4gdHJ1ZVxuXHRcdFx0XHRcdGlmICghZGlzYWJsZWQgJiYgaXRlbS5oYXNPd25Qcm9wZXJ0eSgnZWRpdGFibGUnKSAmJiAhaXRlbS5lZGl0YWJsZSAmJiB0eXBlb2YgaXRlbS5lZGl0YWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmVkaXRhYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0eXBlb2YgdGhpcy5jdXN0b21HcmlkPy5nZXQoaW5kZXgpIS5nZXRHcmlkID09J2Z1bmN0aW9uJyAmJiB0aGlzLmN1c3RvbUdyaWQ/LmdldChpbmRleCkhLmdldEdyaWQoKS5hcGkuc2V0R3JpZE9wdGlvbignY29sdW1uRGVmcycsIHYuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyk7XG5cdFx0XHR9IGVsc2UgaWYgKHYudHlwZSA9PSAnZm9ybScpIHtcblx0XHRcdFx0di5maWVsZHM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGl0ZW0uZ3JvdXA/LmZvckVhY2goKGc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0XHRcdGlmIChkaXNhYmxlZCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLm1hcmtBc1ByaXN0aW5lKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdCFmaWVsZERpc2FibGVkICYmIHRoaXMuY0Zvcm0uZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHNldERpc2FibGVkKCkge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKHYsIGluZGV4OiBhbnkpID0+IHtcblx0XHRcdGlmICh2LnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdHYuZmllbGRzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpdGVtLmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHRhYkNsaWNrKCkge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy50YWJGb3JtLmdldCh0aGlzLmluZGV4VmFsdWUpICYmIHRoaXMudGFiRm9ybS5nZXQodGhpcy5pbmRleFZhbHVlKSEucmVDYWxjTGFiZWxTaXplKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9LCAwKTtcblx0fVxuXHR0b2dnbGVMb2coKSB7XG5cdFx0dGhpcy5zaWRlYmFyTW9kZS5zZXQodGhpcy5zaWRlYmFyTW9kZSgpID09PSAnbGVmdCcgPyAncmlnaHQnIDogJ2xlZnQnKTtcblx0fVxuXG5cdHByaXZhdGUgcmVidWlsZFNsb3RNYXAoKSB7XG5cdFx0dGhpcy5zbG90TWFwLmNsZWFyKCk7XG5cdFx0Zm9yIChjb25zdCBzbG90IG9mIHRoaXMucGFnZUZvcm1TbG90cz8udG9BcnJheSgpID8/IFtdKSB7XG5cdFx0XHRjb25zdCBzbG90S2V5ID0gc2xvdC5zbG90S2V5KCk7XG5cdFx0XHRpZiAoIXRoaXMuc2xvdE1hcC5oYXMoc2xvdEtleSkpIHtcblx0XHRcdFx0dGhpcy5zbG90TWFwLnNldChzbG90S2V5LCBzbG90KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCkge1xuXHRcdHRoaXMuc2xvdFJlbmRlclN0YXRlcyA9ICh0aGlzLnJlc29sdmVkR3JpZExpc3QoKSA/PyBbXSkubWFwKChncmlkLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2xvdEtleSA9IHRoaXMucmVzb2x2ZVNsb3RLZXkoZ3JpZCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzbG90OiBzbG90S2V5ID8gdGhpcy5zbG90TWFwLmdldChzbG90S2V5KSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29udGV4dDogdGhpcy5nZXRPckNyZWF0ZVBhZ2VGb3JtU2xvdENvbnRleHQoZ3JpZCwgaW5kZXgsIHNsb3RLZXkpLFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0T3JDcmVhdGVQYWdlRm9ybVNsb3RDb250ZXh0KGdyaWQ6IEdyaWRMaXN0LCBpbmRleDogbnVtYmVyLCBzbG90S2V5OiBzdHJpbmcpOiBQYWdlRm9ybVNsb3RDb250ZXh0IHtcblx0XHRjb25zdCByZW5kZXJLZXkgPSB0aGlzLmdldEdyaWRSZW5kZXJLZXkoZ3JpZCwgaW5kZXgpO1xuXHRcdGxldCBjb250ZXh0ID0gdGhpcy5zbG90Q29udGV4dE1hcC5nZXQocmVuZGVyS2V5KTtcblx0XHRpZiAoIWNvbnRleHQpIHtcblx0XHRcdGNvbnRleHQgPSB7fSBhcyBQYWdlRm9ybVNsb3RDb250ZXh0O1xuXHRcdFx0dGhpcy5zbG90Q29udGV4dE1hcC5zZXQocmVuZGVyS2V5LCBjb250ZXh0KTtcblx0XHR9XG5cblx0XHRjb250ZXh0LiRpbXBsaWNpdCA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dC5zbG90S2V5ID0gc2xvdEtleTtcblx0XHRjb250ZXh0LmdyaWQgPSBncmlkO1xuXHRcdGNvbnRleHQuaW5kZXggPSBpbmRleDtcblx0XHRjb250ZXh0LnBhZ2VGb3JtID0gdGhpcztcblx0XHRjb250ZXh0LmRhdGEgPSAodGhpcy5nZXRQcm0uZGF0YSA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29udGV4dC5tb2RlbCA9IGdyaWQudHlwZSA9PT0gJ2dyaWQnID8gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleSFdIDogdGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5IV0gfHwge307XG5cdFx0Y29udGV4dC51cHNlcnQgPSB0aGlzLnVwc2VydFBybTtcblx0XHRjb250ZXh0LmFjdGl2ZSA9IHRoaXMuaW5kZXhWYWx1ZSA9PT0gaW5kZXg7XG5cdFx0Y29udGV4dC5ncmlkRGlzYWJsZSA9IHRoaXMuZ3JpZERpc2FibGU7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVTbG90S2V5KGdyaWQ6IEdyaWRMaXN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gZ3JpZC5zbG90S2V5IHx8IGdyaWQuc3ViRGF0YUtleTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0R3JpZFJlbmRlcktleShncmlkOiBHcmlkTGlzdCwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdyaWQuZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSB8fCBncmlkLnN1YkRhdGFLZXkgfHwgZ3JpZC5zbG90S2V5IHx8IGAke2luZGV4fWA7XG5cdH1cblxuXHRnZXRDdXJyZW50R3JpZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk/Llt0aGlzLmluZGV4VmFsdWVdID8/IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnRTdWJNb2RlbE5hbWUoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudEdyaWQudHlwZSA9PT0gJ2dyaWQnID8gY3VycmVudEdyaWQuZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSB8fCAnJyA6IGN1cnJlbnRHcmlkLm1vZGVsTmFtZSB8fCAnJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0U3Vic2VydEJ5R3JpZChncmlkOiBHcmlkTGlzdCB8IG51bGwgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoIWdyaWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IGdyaWQuZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGdyaWRbJ21vZGVsTmFtZSddO1xuXHRcdGlmICghc3ViTW9kZWxOYW1lKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQ/LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5zdWJNb2RlbE5hbWUgPT09IHN1Yk1vZGVsTmFtZSkgPz8gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgY2xvbmVTdWJzZXJ0KHN1YnNlcnQ6IGFueSkge1xuXHRcdGlmICghc3Vic2VydCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5zdWJzZXJ0LFxuXHRcdFx0c3ViRGF0YTogQXJyYXkuaXNBcnJheShzdWJzZXJ0LnN1YkRhdGEpID8gc3Vic2VydC5zdWJEYXRhLm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKSA6IFtdLFxuXHRcdFx0bWFwdG1wOiBuZXcgTWFwPGFueSwgYW55PihzdWJzZXJ0Lm1hcHRtcCA/IChBcnJheS5mcm9tKHN1YnNlcnQubWFwdG1wLmVudHJpZXMoKSkgYXMgW2FueSwgYW55XVtdKSA6IFtdKSxcblx0XHRcdGxvZ3RtcDogbmV3IE1hcDxhbnksIGFueT4oc3Vic2VydC5sb2d0bXAgPyAoQXJyYXkuZnJvbShzdWJzZXJ0LmxvZ3RtcC5lbnRyaWVzKCkpIGFzIFthbnksIGFueV1bXSkgOiBbXSksXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q3VycmVudEZvcm1Db21wb25lbnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCBjdXJyZW50R3JpZC50eXBlID09PSAnZ3JpZCcpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBmb3JtSW5kZXggPVxuXHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdFx0LnNsaWNlKDAsIHRoaXMuaW5kZXhWYWx1ZSArIDEpXG5cdFx0XHRcdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS50eXBlICE9PSAnZ3JpZCcpLmxlbmd0aCAtIDE7XG5cdFx0cmV0dXJuIGZvcm1JbmRleCA+PSAwID8gKHRoaXMudGFiRm9ybS5nZXQoZm9ybUluZGV4KSA/PyBudWxsKSA6IG51bGw7XG5cdH1cblxuXHRjYW5TaG93Q3VycmVudFRhYlNhdmUoZ3JpZD86IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gZ3JpZCA/PyB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hdXRoTGV2ZWwoKSA+PSAzICYmIGN1cnJlbnRHcmlkID09PSB0aGlzLmdldEN1cnJlbnRHcmlkKCkgJiYgY3VycmVudEdyaWQuc3ViU2F2ZT8uZW5hYmxlZCA9PT0gdHJ1ZTtcblx0fVxuXG5cdGdldEN1cnJlbnRUYWJTYXZlTGFiZWwoZ3JpZD86IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gZ3JpZCA/PyB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0cmV0dXJuIGN1cnJlbnRHcmlkPy5zdWJTYXZlPy5sYWJlbCB8fCAn5L+d5a2YJztcblx0fVxuXG5cdHByaXZhdGUgaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkge1xuXHRcdGNvbnN0IGFkZERhdGEgPSB0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9O1xuXHRcdGNvbnN0IHVwZERhdGEgPSB0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9O1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhhZGREYXRhKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHVwZERhdGEpLmxlbmd0aCA+IDA7XG5cdH1cblxuXHRwcml2YXRlIGhhc1N1YnNlcnRQZW5kaW5nQ2hhbmdlcyhzdWJzZXJ0OiBhbnkpIHtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuICEhKFxuXHRcdFx0KHN1YnNlcnQuc3ViRGF0YSAmJiBzdWJzZXJ0LnN1YkRhdGEubGVuZ3RoID4gMCkgfHxcblx0XHRcdChzdWJzZXJ0Lm1hcHRtcCAmJiBzdWJzZXJ0Lm1hcHRtcC5zaXplID4gMCkgfHxcblx0XHRcdChzdWJzZXJ0LmxvZ3RtcCAmJiBzdWJzZXJ0LmxvZ3RtcC5zaXplID4gMClcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0RGlydHlNYWluRGF0YVNuYXBzaG90KCkge1xuXHRcdGNvbnN0IGRpcnR5UGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oWy4uLk9iamVjdC5rZXlzKHRoaXMudXBzZXJ0UHJtLmFkZERhdGEgfHwge30pLCAuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9KV0pO1xuXHRcdGNvbnN0IHNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cdFx0ZGlydHlQYXRocy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdHNuYXBzaG90W2tleV0gPSBmaWVsZFV0aWxzLmdldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNuYXBzaG90O1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsZWN0T3RoZXJEaXJ0eVN1YkRhdGFTbmFwc2hvdChjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc25hcHNob3RzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKChncmlkKSA9PiB7XG5cdFx0XHRpZiAoIWdyaWQgfHwgZ3JpZCA9PT0gY3VycmVudEdyaWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRcdGlmICghdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY3VycmVudERhdGEgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IHRoaXMuZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXldIHx8IFtdIDogdGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSB8fCB7fTtcblx0XHRcdHNuYXBzaG90cy5zZXQoZ3JpZC5zdWJEYXRhS2V5LCBBcnJheS5pc0FycmF5KGN1cnJlbnREYXRhKSA/IGN1cnJlbnREYXRhLm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKSA6IHsgLi4uY3VycmVudERhdGEgfSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHNuYXBzaG90cztcblx0fVxuXG5cdHByaXZhdGUgcmVzdG9yZURpcnR5U25hcHNob3RzKG1haW5EYXRhU25hcHNob3Q6IFJlY29yZDxzdHJpbmcsIGFueT4sIHN1YkRhdGFTbmFwc2hvdHM6IE1hcDxzdHJpbmcsIGFueT4pIHtcblx0XHRPYmplY3QuZW50cmllcyhtYWluRGF0YVNuYXBzaG90KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwga2V5LCB2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0c3ViRGF0YVNuYXBzaG90cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhW2tleV0gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiAoeyAuLi5pdGVtIH0pKSA6IHsgLi4udmFsdWUgfTtcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNTdWJGb3JtTW9kZWxGcm9tRGF0YSgpO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgcmVmcmVzaEN1cnJlbnRUYWJEYXRhKGN1cnJlbnRHcmlkOiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRpZiAoIWN1cnJlbnRHcmlkIHx8ICF0aGlzLmlkIHx8ICF0aGlzLm1vZGVsTmFtZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBtYWluRGF0YVNuYXBzaG90ID0gdGhpcy5jb2xsZWN0RGlydHlNYWluRGF0YVNuYXBzaG90KCk7XG5cdFx0Y29uc3Qgb3RoZXJEaXJ0eVNuYXBzaG90cyA9IHRoaXMuY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMuc3luY0dldFBybUZvckN1cnJlbnRWaWV3KCk7XG5cdFx0dGhpcy53ZWJfZ2V0KHRoaXMuZ2V0UHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5kZXRhaWxDYih0aGlzLm1lcmdlRGV0YWlsV2l0aExlZnRQYW5lbChyZXMpKTtcblx0XHRcdHRoaXMucmVzdG9yZURpcnR5U25hcHNob3RzKG1haW5EYXRhU25hcHNob3QsIG90aGVyRGlydHlTbmFwc2hvdHMpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShncmlkOiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBzdWJzZXJ0ID0gdGhpcy5nZXRTdWJzZXJ0QnlHcmlkKGdyaWQpO1xuXHRcdGlmICghc3Vic2VydCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRzdWJzZXJ0Lm1hcHRtcCA9IG5ldyBNYXAoKTtcblx0XHRzdWJzZXJ0LmxvZ3RtcCA9IG5ldyBNYXAoKTtcblx0XHRzdWJzZXJ0LnN1YkRhdGEgPSBbXTtcblx0fVxuXG5cdHByaXZhdGUgcmVjYWxjdWxhdGVTYXZlU2lnbmFsKCkge1xuXHRcdGNvbnN0IGhhc0RpcnR5U3Vic2VydHMgPSAodGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXSkuc29tZSgoc3Vic2VydDogYW55KSA9PiB0aGlzLmhhc1N1YnNlcnRQZW5kaW5nQ2hhbmdlcyhzdWJzZXJ0KSk7XG5cdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQodGhpcy5oYXNNYWluUGVuZGluZ0NoYW5nZXMoKSB8fCBoYXNEaXJ0eVN1YnNlcnRzKTtcblx0fVxuXG5cdGJ1aWxkQ3VycmVudFRhYlVwc2VydCgpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBjdXJyZW50U3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChjdXJyZW50R3JpZCk7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhY3VycmVudFN1YnNlcnQgfHwgIXRoaXMuaWQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG5cdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0dXBkRGF0YToge1xuXHRcdFx0XHRpZDogdGhpcy5pZCxcblx0XHRcdFx0Li4uKHRoaXMudXBzZXJ0UHJtLnVwZERhdGEgfHwge30pLFxuXHRcdFx0fSxcblx0XHRcdHN1YnNlcnQ6IFt0aGlzLmNsb25lU3Vic2VydChjdXJyZW50U3Vic2VydCldLFxuXHRcdH07XG5cdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdHBheWxvYWQubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0cGF5bG9hZC5sb2cgPSB7XG5cdFx0XHRcdC4uLih0aGlzLnVwc2VydFBybS5sb2cgfHwge30pLFxuXHRcdFx0XHRwaWQ6IHRoaXMuaWQsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlQ3VycmVudFRhYlNhdmVTdWNjZXNzKGN1cnJlbnRHcmlkOiBHcmlkTGlzdCB8IG51bGwsIGNiPzogRnVuY3Rpb24sIHJlcz86IGFueSkge1xuXHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHR0aGlzLnJlc2V0Q3VycmVudFRhYlVwc2VydFN0YXRlKGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWNhbGN1bGF0ZVNhdmVTaWduYWwoKTtcblx0XHRjYiAmJiBjYihyZXMpO1xuXHR9XG5cblx0c2F2ZUN1cnJlbnRUYWIoY2I/OiBGdW5jdGlvbikge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGNvbnN0IHBheWxvYWQgPSB0aGlzLmJ1aWxkQ3VycmVudFRhYlVwc2VydCgpO1xuXHRcdGlmICghcGF5bG9hZCkge1xuXHRcdFx0dGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3dhcm4nLCBzdW1tYXJ5OiAnV2FybicsIGRldGFpbDogJ+ivt+WFiOS/neWtmOS4u+ihqCcgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50R3JpZD8udHlwZSAhPT0gJ2dyaWQnKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Rm9ybSA9IHRoaXMuZ2V0Q3VycmVudEZvcm1Db21wb25lbnQoKTtcblx0XHRcdGlmIChjdXJyZW50Rm9ybSAmJiAhY3VycmVudEZvcm0udmFsaWRhdGUoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KHRydWUpO1xuXHRcdGNvbnN0IGZpbmFsaXplU2F2ZSA9IChyZXM/OiBhbnkpID0+IHRoaXMuaGFuZGxlQ3VycmVudFRhYlNhdmVTdWNjZXNzKGN1cnJlbnRHcmlkLCBjYiwgcmVzKTtcblx0XHRpZiAodHlwZW9mIGN1cnJlbnRHcmlkPy5zdWJTYXZlPy5zYXZlRnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y3VycmVudEdyaWQuc3ViU2F2ZS5zYXZlRnVuYyhwYXlsb2FkLCB0aGlzLmlkLCBmaW5hbGl6ZVNhdmUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLndlYl91cHNlcnQocGF5bG9hZClcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQoZmFsc2UpO1xuXHRcdFx0XHR9KSxcblx0XHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRmaW5hbGl6ZVNhdmUocmVzKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0YWRkUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc3ViRGF0YUtleSA9IGdyaWQuc3ViRGF0YUtleTtcblxuXHRcdGlmIChncmlkLnN1YlRhYmxlU291cmNlID09PSAnaGFuZGxlJykge1xuXHRcdFx0Y29uc3QgYWRkSXRlbSA9IGdyaWQuZ3JpZE9wdGlvbnM/LmFkZERhdGFDYj8uKCkgPz8ge307XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIGFkZEl0ZW0sIGdyaWQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLmFkZERhdGEoc3ViRGF0YUtleSwgdW5kZWZpbmVkLCBncmlkKTtcblx0XHR0aGlzLmRhdGFTb3VyY2VTaG93KCk7XG5cdH1cblxuXHRkZWxSb3dDbGlja0hhbmRsZXIoZ3JpZDogR3JpZExpc3QpIHtcblx0XHRjb25zdCBzZWxlY3RJdGVtOiBhbnkgPSB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSB8fCBbXTtcblx0XHRsZXQgaWRzOiBudW1iZXJbXSA9IFtdO1xuXHRcdGlmIChncmlkLnNsb3RLZXkgPT09ICdnYW50dCcpIHtcblx0XHRcdGlkcyA9IHNlbGVjdEl0ZW0uZmlsdGVyKCh2OiBhbnkpID0+IHYuaWQgJiYgdHlwZW9mIHYuaWQgPT09ICdudW1iZXInKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlkcyA9IHNlbGVjdEl0ZW0uZmlsdGVyKCh2OiBhbnkpID0+IHYuaWQpLm1hcCgodjogYW55KSA9PiB2LmlkKTtcblx0XHR9XG5cdFx0aWYgKGlkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLndlYl9yZW1vdmUoeyBtb2RlbE5hbWU6IGdyaWQuZ3JpZE9wdGlvbnMubW9kZWxOYW1lLCBpZHMgfSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2Uuc2V0U2VsZWN0ZWRSb3dzKFtdKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5yZW1vdmVEYXRhKGdyaWQuc3ViRGF0YUtleSwgdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCksIGdyaWQpO1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2Uuc2V0U2VsZWN0ZWRSb3dzKFtdKTtcblx0XHR9XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZDpvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPCEtLSDkv53lrZjmlrDlu7rmk43kvZzljLogLS0+XG5cdDxkaXYgY2xhc3M9XCJmbGV4IG1kOmZsZXgtd3JhcCBsZzpmbGV4LW5vd3JhcCBpdGVtcy1jZW50ZXIgbWQ6anVzdGlmeS1iZXR3ZWVuIHB5LTEgcHgtMSBib3JkZXItYi1bMXB4XSBib3JkZXItWyNkYmRiZGJdIGJnLXdoaXRlXCI+XG5cdFx0PGRpdiBjbGFzcz1cImxnOmJhc2lzLTEvMyBvcmRlci0xXCI+XG5cdFx0XHQ8YXBwLWNydW1iLWFjdGlvblxuXHRcdFx0XHRbYWRkVmlzaWJsZV09XCJhZGRWaXNpYmxlKClcIlxuXHRcdFx0XHRbbmV3VXJsXT1cIm5ld1VybFwiXG5cdFx0XHRcdFtpc1Nob3dDb2ddPVwidHJ1ZVwiXG5cdFx0XHRcdFtvdXRsaW5lZF09XCJ0cnVlXCJcblx0XHRcdFx0W2F1dGhMZXZlbF09XCJhdXRoTGV2ZWwoKVwiXG5cdFx0XHRcdFthY3Rpb25MaXN0XT1cImFjdGlvbkxpc3QoKVwiXG5cdFx0XHRcdFtjb25maWdOZXdQYXRoXT1cImNvbmZpZ05ld1BhdGgoKVwiXG5cdFx0XHRcdFtkYXRhXT1cImdldFBybS5kYXRhID8/IHt9XCJcblx0XHRcdFx0W3NhdmVCdG5EaXNhYmxlXT1cInNhdmVCdG5EaXNhYmxlXCJcblx0XHRcdFx0W3Nob3dTYXZlQnV0dG9uXT1cInNob3dNYWluU2F2ZUJ1dHRvbigpXCJcblx0XHRcdFx0KGFjdGlvbkV2ZW50KT1cImF1dGhDbGljaygkZXZlbnQpXCJcblx0XHRcdFx0KHNhdmVFdmVudCk9XCJzdWJtaXRGb3JtKClcIj5cblx0XHRcdDwvYXBwLWNydW1iLWFjdGlvbj5cblx0XHQ8L2Rpdj5cblxuXHRcdDxkaXYgY2xhc3M9XCJiYXNpcy0xLzUgbGc6YmFzaXMtMi8zIG9yZGVyLTIgbGc6b3JkZXItMiBtZDpvcmRlci1sYXN0IG1kOmJhc2lzLWZ1bGwgbWQ6bXQtWzZweF1cIj5cblx0XHRcdDxocmVmLWJ0bi1saXN0XG5cdFx0XHRcdFtocmVmc109XCJocmVmQnRuTGlzdCgpXCJcblx0XHRcdFx0KGhyZWZDbGljayk9XCJnb1J1bigkZXZlbnQpXCI+PC9ocmVmLWJ0bi1saXN0PlxuXHRcdFx0PCEtLSBAaWYgKGlkKSB7XG5cdFx0XHRcdEBmb3IgKGJ0biBvZiBocmVmQnRuTGlzdCgpOyB0cmFjayBidG4pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdFt2YXJpYW50XT1cImJ0bj8udmFyaWFudFwiXG5cdFx0XHRcdFx0XHRbc2V2ZXJpdHldPVwiYnRuPy5zZXZlcml0eVwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cIm1yLVs2cHhdXCJcblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJidG4/Lmljb25cIlxuXHRcdFx0XHRcdFx0bGFiZWw9XCJ7eyBidG4uaTE4bktleSA/IGkxOG4uZmFueWkoYnRuLmkxOG5LZXkpIDogYnRuLmxhYmVsIH19XCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJnb1J1bihidG4pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0fSAtLT5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS8zIG9yZGVyLTMgZmxleCBmbGV4LXJvdy1yZXZlcnNlXCI+XG5cdFx0XHRAaWYgKG1vZGVsTG9nKCkpIHtcblx0XHRcdFx0PGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9ja1wiPlxuXHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRbY2xhc3NdPVwiJ2ljb25mb250IGljb24tc2lkZWJhciBpY29uLXNpZGViYXItJyArIHNpZGViYXJNb2RlKClcIlxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cInRvZ2dsZUxvZygpXCI+PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJmbGV4XCI+XG5cdFx0PGRpdiBjbGFzcz1cInB4LTIgZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGZsZXgtMVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImhpZGRlbiBtZDpiYXNpcy0xLzMgcHktMSBiYXNpcy1mdWxsIG1kOmZsZXggaXRlbXMtY2VudGVyIGZsZXgtcm93IG9yZGVyLTFcIj5cblx0XHRcdFx0QGZvciAoYWN0aW9uIG9mIGFjdGlvbkxpc3QoKTsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGFjdGlvbikge1xuXHRcdFx0XHRcdDxwLWJ1dHRvblxuXHRcdFx0XHRcdFx0c2l6ZT1cInNtYWxsXCJcblx0XHRcdFx0XHRcdFtpY29uXT1cImdldFBybS5kYXRhPy5pY29uXCJcblx0XHRcdFx0XHRcdFtsb2FkaW5nXT1cImFjdGlvbi5sb2FkaW5nXCJcblx0XHRcdFx0XHRcdFtsYWJlbF09XCJhY3Rpb24uaTE4bktleSA/IChhY3Rpb24uaTE4bktleSB8IHRyYW5zbGF0ZSkgOiBhY3Rpb24ubGFiZWxcIlxuXHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cImFjdGlvbi5idG5EaXNhYmxlZCA/IGFjdGlvbi5idG5EaXNhYmxlZChnZXRQcm0uZGF0YSkgOiBmYWxzZVwiXG5cdFx0XHRcdFx0XHRbc3R5bGVDbGFzc109XCJcblx0XHRcdFx0XHRcdFx0KGFjdGlvbi5hdXRoIHx8IDApID4gKGF1dGhMZXZlbCgpIHx8IDApIHx8ICEhYWN0aW9uLmJ0bkhpZGRlbj8uKGdldFBybS5kYXRhKVxuXHRcdFx0XHRcdFx0XHRcdD8gJ2Zvcm0tYWN0aW9uIGhpZGRlbidcblx0XHRcdFx0XHRcdFx0XHQ6ICdmb3JtLWFjdGlvbiBibG9jayBtci1bLjVyZW1dJ1xuXHRcdFx0XHRcdFx0XCJcblx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImFjdGlvbi5vbkNsaWNrICE9ICcnICYmIGFjdGlvbi5vbkNsaWNrPy4oZ2V0UHJtLmRhdGEsIGFjdGlvbilcIj5cblx0XHRcdFx0XHQ8L3AtYnV0dG9uPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJtZDpiYXNpcy0yLzMgYmFzaXMtZnVsbCBmbGV4IG1kOmZsZXgtcm93LXJldmVyc2UgZmxleC1yb3cgbWQ6b3JkZXItMiBvcmRlci1maXJzdCB3LWZ1bGxcIj5cblx0XHRcdFx0QGlmIChzdGVwc1Zpc2libGUpIHtcblx0XHRcdFx0XHQ8Y3VzdG9tLXN0ZXBzXG5cdFx0XHRcdFx0XHQjY3VzdG9tU3RlcHNcblx0XHRcdFx0XHRcdGNsYXNzPVwidy1mdWxsXCJcblx0XHRcdFx0XHRcdFtzdGVwc109XCJzdGF0dXNTdGVwcygpXCJcblx0XHRcdFx0XHRcdFttb2RlbExvZ109XCJzaG93TG9nKClcIlxuXHRcdFx0XHRcdFx0W2N1cnJlbnRdPVwiZ2V0UHJtLmRhdGEgJiYgZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldICE9PSB1bmRlZmluZWQgPyBnZXRQcm0uZGF0YVtzdGF0dXNLZXkoKV0gOiAwXCJcblx0XHRcdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRcdFx0W2lzQ2xpY2tdPVwidGhpcy5zdGF0dXNDb25mKCkuaXNDbGlja1wiXG5cdFx0XHRcdFx0XHQoY2hhbmdlKT1cInN0YXR1c0NoYW5nZSgkZXZlbnQsIGN1c3RvbVN0ZXBzKVwiPlxuXHRcdFx0XHRcdDwvY3VzdG9tLXN0ZXBzPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHRAaWYgKHNob3dMb2coKSkge1xuXHRcdFx0PGRpdiBjbGFzcz1cImxnOnctWzQwMHB4XSBtZDp3LVszMDBweF0gaGlkZGVuIG1kOmJsb2NrXCI+PC9kaXY+XG5cdFx0fVxuXHQ8L2Rpdj5cbiAgPCEtLSAgZm9ybSDkuLvljLrln58tLT5cbiAgQGlmKHRoaXMuZm9ybSgpLmZvcm0pIHtcbiAgICA8ZGl2IGNsYXNzPVwibWFpbiBmbGV4IGZsZXgtd3JhcFwiPlxuICAgICAgQGlmIChjdXN0b21MZWZ0UGFuZWwoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctZml0IG1kOm1heC13LWZ1bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tTGVmdFBhbmVsKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsZWZ0UGFuZWwoKT8uZW5hYmxlZCAmJiBsZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ2xpc3QnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2sgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBtZDpmbGV4LW5vbmUgbWQ6dy1bMjIwcHhdIG1kOm1heC13LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbFwiPlxuICAgICAgICAgICAgPGFtLXNpbmdsZS1zZWxlY3QtbGlzdGJveFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJsZWZ0UGFuZWxJdGVtc1wiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxlZnRQYW5lbFNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25MZWZ0UGFuZWxTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJsZWZ0UGFuZWwoKT8ubGlzdD8ub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJ1wiXG4gICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJsZWZ0UGFuZWwoKT8ubGlzdD8ub3B0aW9uTGFiZWwgfHwgJ2xhYmVsJ1wiXG4gICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwibGVmdFBhbmVsKCk/Lmxpc3Q/LmVtcHR5TWVzc2FnZSB8fCAn5pqC5peg5pWw5o2uJ1wiXG4gICAgICAgICAgICAgIFthbGxvd0Rlc2VsZWN0XT1cImxlZnRQYW5lbCgpPy5saXN0Py5hbGxvd0Rlc2VsZWN0ID8/IHRydWVcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWQ6bWluLXctMCBtZDpmbGV4LTEgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgbXgtMiBmb3JtLXBhbmVsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiBmbGV4LTFcIj5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybSgpLmZvcm0hXCI+XG4gICAgICAgICAgICAgIDxjdXN0b20tZm9ybVxuICAgICAgICAgICAgICAgICNjRm9ybVxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1PcHRpb25zXCJcbiAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImdldFBybS5kYXRhID8/IHt9XCI+PC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGdyaWRzICYmIGdyaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBtYi0yXCI+XG4gICAgICAgICAgICAgIDxwLXRhYnMgWyh2YWx1ZSldPVwiaW5kZXhWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxwLXRhYmxpc3Q+XG4gICAgICAgICAgICAgICAgICBAZm9yIChmY2hpbGQgb2YgZ3JpZHM7IGxldCBpID0gJGluZGV4OyB0cmFjayBmY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtdGFiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZmNoaWxkLmkxOG5LZXkgPyBpMThuLmZhbnlpKGZjaGlsZC5pMThuS2V5KSA6IGZjaGlsZC50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3AtdGFiPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvcC10YWJsaXN0PlxuICAgICAgICAgICAgICA8L3AtdGFicz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChncmlkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZ3JpZCkge1xuICAgICAgICAgICAgQGxldCBzbG90U3RhdGUgPSBzbG90UmVuZGVyU3RhdGVzW2ldO1xuICAgICAgICAgICAgQGxldCBzbG90ID0gc2xvdFN0YXRlPy5zbG90O1xuICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cImluZGV4VmFsdWUgIT0gaVwiIFtzdHlsZS5oZWlnaHRdPVwic2xvdCA/IGdyaWQuZ3JpZE9wdGlvbnMuc2Nyb2xsSGVpZ2h0IDogbnVsbFwiPlxuICAgICAgICAgICAgICBAaWYgKHNsb3QpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2xvdC50ZW1wbGF0ZVJlZjsgY29udGV4dDogc2xvdFN0YXRlLmNvbnRleHRcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcHktWzVweF0gcHItWzhweF0gYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG91ZC11cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSAhPSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhZGRSb3dDbGlja0hhbmRsZXIoZ3JpZClcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmIChncmlkLnNob3dEZWxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cImRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJkZWxSb3dDbGlja0hhbmRsZXIoZ3JpZClcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiAjY3VzdG9tR3JpZD48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQGlmIChncmlkLnR5cGUgPT0gJ2dyaWQnKSB7XG4gICAgICAgICAgICAgICAgICA8Y3VzdG9tLWdyaWRcbiAgICAgICAgICAgICAgICAgICAgI2N1c3RvbUdyaWRcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXkhXVwiXG4gICAgICAgICAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUVtaXQpPVwiZGVsUm93cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZFR5cGVdPVwiZ3JpZC5zdWJUYWJsZVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgIChhZGRFbWl0KT1cImRhdGFTb3VyY2VTaG93KClcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ3JpZC5ncmlkT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncmlkRGlzYWJsZV09XCJncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJncmlkLnNob3dEZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICBbc3ViU2F2ZVZpc2libGVdPVwiY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVMYWJlbF09XCJnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVEaXNhYmxlZF09XCJncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3REYXRhXT1cImdyaWQuc2VsZWN0RGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFthZGRTb3J0XT1cImdyaWQuYWRkU29ydFwiXG4gICAgICAgICAgICAgICAgICAgIChzdWJTYXZlRW1pdCk9XCJzYXZlQ3VycmVudFRhYigpXCI+XG4gICAgICAgICAgICAgICAgICA8L2N1c3RvbS1ncmlkPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGlmIChjYW5TaG93Q3VycmVudFRhYlNhdmUoZ3JpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgcHgtMiBwdC0yIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAgICAgI3RhYkZvcm1cbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ3JpZFwiXG4gICAgICAgICAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cInN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoc2hvd0xvZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbGc6dy1bNDAwcHhdIG1kOnctWzMwMHB4XSBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIGhpZGRlbiBtZDpibG9ja1wiPlxuICAgICAgICAgIDxjdXN0b20tbG9nIFtsb2dzXT1cImdldFBybS5kYXRhPy5sb2cgPz8gW11cIj48L2N1c3RvbS1sb2c+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbjxyb3ctc2VsZWN0b3Jcblx0Wyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcblx0W3NlYXJjaFBybV09XCJkaWFsb2dTZWFyY2hQcm1cIlxuXHRbZ3JpZE9wdGlvbnNdPVwic2VsZWN0T3B0aW9uc1wiXG5cdFtzZWxlY3Rpb25LZXlzXT1cInNlbGVjdGlvbktleXNcIlxuXHRbc2VsZWN0TW9kZWxDb2RlXT1cImN1cnJlbnRTZWxlY3RNb2RlbENvZGUgfHwgdW5kZWZpbmVkXCJcblx0W2N1c3RvbUxpc3RGb3JtQnlEaWFsb2ddPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVcIlxuXHRbY3VzdG9tTGlzdEZvcm1CeURpYWxvZ0NvbnRleHRdPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtQ29udGV4dFwiXG5cdFtjdXN0b21MaXN0RGlhbG9nTWFwXT1cImN1c3RvbUxpc3RGb3JtSW5zdGFuY2VNYXAoKVwiXG5cdChvbk9rKT1cIm9uT2soJGV2ZW50KVwiXG5cdChjYW5jZWxTZWxlY3QpPVwib25DYW5jZWxTZWxlY3RlZCgkZXZlbnQpXCI+XG48L3Jvdy1zZWxlY3Rvcj5cbiJdfQ==
|