gamma-app-controller 1.2.0 → 1.2.2
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/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +1 -5
- package/esm2020/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.mjs +1 -8
- package/esm2020/lib/application-controller/page-controller/page-config/page-config.component.mjs +1 -2
- package/esm2020/lib/application-controller/page-controller/page-config-multi-layout/page-config-multi-layout.component.mjs +1 -2
- package/esm2020/lib/application-controller/tokenStorage.servce.mjs +36 -0
- package/esm2020/lib/shared/advanced-component/app-advance-header/app-header.component.mjs +20 -18
- package/esm2020/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +1 -2
- package/esm2020/lib/template-module/bookmarked-template/bookmarked-template.component.mjs +10 -9
- package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +10 -9
- package/esm2020/lib/template-module/kpiWithMultiLayout/dynamin-modal-multi.component.mjs +1 -2
- package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.mjs +16 -15
- package/esm2020/lib/template-module/kpiWithSingleLayout/dynamin-modal.component.mjs +1 -2
- package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +47 -29
- package/esm2020/lib/template-module/kpiWithSingleLayout/single-layout-dataset-call.service.mjs +6 -4
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/gamma-app-controller.mjs +101 -63
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +97 -61
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.d.ts +0 -1
- package/lib/application-controller/tokenStorage.servce.d.ts +12 -0
- package/lib/shared/advanced-component/app-advance-header/app-header.component.d.ts +3 -1
- package/lib/template-module/bookmarked-template/bookmarked-template.component.d.ts +3 -1
- package/lib/template-module/defaulLandingComponent/landing-component.component.d.ts +3 -1
- package/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.d.ts +3 -1
- package/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.d.ts +12 -1
- package/lib/template-module/kpiWithSingleLayout/single-layout-dataset-call.service.d.ts +3 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -702,7 +702,6 @@ export class PageConfigMultilayoutComponent {
|
|
|
702
702
|
containerElement.appendChild(this.CompRefs.location.nativeElement);
|
|
703
703
|
}
|
|
704
704
|
loadWidgetFilterComponent(indexObj, containerElement, filterItems) {
|
|
705
|
-
let userName = localStorage.getItem('user_name');
|
|
706
705
|
let selectedDates = { startDate: this.defaultStartDate, endDate: this.defaultEndDate };
|
|
707
706
|
const componentClass = this.componentClassMap['AdvanceWidgetHeaderFilterComponent'];
|
|
708
707
|
this.CompRefs = this.viewContainerRef.createComponent(componentClass);
|
|
@@ -981,4 +980,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
981
980
|
type: ViewChild,
|
|
982
981
|
args: [DxScrollViewComponent, { static: false }]
|
|
983
982
|
}] } });
|
|
984
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1jb25maWctbXVsdGktbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9wYWdlLWNvbnRyb2xsZXIvcGFnZS1jb25maWctbXVsdGktbGF5b3V0L3BhZ2UtY29uZmlnLW11bHRpLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvcGFnZS1jb250cm9sbGVyL3BhZ2UtY29uZmlnLW11bHRpLWxheW91dC9wYWdlLWNvbmZpZy1tdWx0aS1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWtHLFNBQVMsRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJcE0sT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNELE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQ3JJLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHNHQUFzRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhGQUE4RixDQUFDO0FBQzdJLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHdHQUF3RyxDQUFDO0FBQzVKLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHdHQUF3RyxDQUFDO0FBRTVKLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNGQUFzRixDQUFDO0FBQ2xJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhFQUE4RSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU90SCxNQUFNLE9BQU8sOEJBQThCO0lBMEh6QyxZQUNTLGFBQTRCLEVBQzNCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyx3QkFBa0QsRUFDbEQsT0FBa0MsRUFDbEMsTUFBcUIsRUFDckIsTUFBYyxFQUNkLGNBQXVDO1FBUHhDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQXlCO1FBaklqRCx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFFN0IsaUJBQVksR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzFHLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRzdCLGVBQVUsR0FBRyxXQUFXLENBQUM7UUFPekIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBSTdCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBa0JoQyx5QkFBb0IsR0FBd0IsRUFBRSxDQUFDO1FBSy9DLHNCQUFpQixHQUFHO1lBQ2xCLDBCQUEwQjtZQUMxQiwyQkFBMkI7WUFDM0IseUJBQXlCO1lBQ3pCLGlDQUFpQztZQUNqQyw2QkFBNkI7WUFDN0Isa0NBQWtDO1lBQ2xDLGtDQUFrQztZQUNsQyxzQkFBc0I7U0FDdkIsQ0FBQztRQUNGLHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLDhCQUF5QixHQUFRLEVBQUUsQ0FBQztRQUVwQyxvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQix1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFcEMsOEJBQXlCLEdBQVEsRUFBRSxDQUFDO1FBQ3BDLHNCQUFpQixHQUFHO1lBQ2xCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLEVBQUU7WUFDakIsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFLEtBQUs7U0FDeEIsQ0FBQTtRQUVELDBCQUFxQixHQUFRLEVBQzVCLENBQUM7UUFLRiw2QkFBd0IsR0FBUSxFQUFFLENBQUM7UUFDbkMsb0NBQStCLEdBQVEsRUFBRSxDQUFDO1FBRTFDLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUl6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUloQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUs5QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQiw0QkFBdUIsR0FBVSxFQUFFLENBQUM7UUFFcEMsNEJBQXVCLEdBQVEsRUFBRSxDQUFDO1FBRWxDLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQUc1Qix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFJN0IsMEJBQXFCLEdBQVEsRUFBRSxDQUFDO1FBWWhDLDZCQUF3QixHQUFRLEVBQUUsQ0FBQztRQSsvQm5DLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMzQiwyQkFBc0IsR0FBUSxFQUFFLENBQUM7SUFsL0I3QixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQywwQkFBMEIsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN6QyxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztnQkFDdEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztZQUNoRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2hHLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDM0MsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUUxRixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELDhCQUE4QjtRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekQsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUM3QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtpQkFDN0I7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7aUJBQzNCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUUxRixDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUdELHFCQUFxQjtRQUNuQixJQUFJLGNBQWMsR0FBRyxFQUFFLGVBQWUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzNDLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7d0JBRXRFLElBQUksT0FBTyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssRUFBRSxFQUFFOzRCQUNoSixJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzFELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7Z0NBQ2pDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtvQ0FDbkIsY0FBYyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUM5SCxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztpQ0FDNUc7NkJBQ0Y7NEJBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtnQ0FDbkMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDOzZCQUNqSTt5QkFDRjs2QkFBTSxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLGtCQUFrQixLQUFLLEVBQUUsRUFBRTs0QkFDdEYsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtnQ0FDakMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO29DQUNuQixjQUFjLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7b0NBQ3BFLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2lDQUNsRDs2QkFDRjs0QkFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO2dDQUNuQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7Z0NBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7NkJBQ3BEO3lCQUNGO3FCQUNGO3lCQUFNO3dCQUNMLElBQ0UsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxxQkFBcUIsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLHFCQUFxQixLQUFLLEVBQUUsQ0FBQzs0QkFDM0YsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQzFGOzRCQUNBLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxFQUFFLEVBQUU7Z0NBQy9CLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDO29DQUNqRyxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQjtvQ0FDL0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7NkJBQ3JDO2lDQUFNO2dDQUNMLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NkJBQzNGO3lCQUNGO3FCQUNGO2dCQUVILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFFSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsY0FBYyxDQUFDO1FBRTNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUU5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsV0FBVztJQUVYLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1lBRXBHLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBS0Qsa0JBQWtCLENBQUMsS0FBSztRQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFHRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLEVBQUU7WUFDakIsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFLEtBQUs7U0FDeEIsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQztRQUNQLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUyxDQUFDLENBQUM7UUFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLFVBQVUsR0FBRztZQUNmLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUMxQyxTQUFTLEVBQUUsRUFBRTtZQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQy9CLGNBQWMsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3RDLFVBQVUsRUFBRTtnQkFDVixvQkFBb0IsRUFBRSxFQUFFO2dCQUN4QixVQUFVLEVBQUUsRUFBRTthQUNmO1NBQ0YsQ0FBQTtRQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxFQUFFO1lBQ3RFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckY7YUFBTTtZQUNMLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNyRjtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBSUQsb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDdEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQixNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFFNUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUM7UUFFRixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNoRixhQUFhLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNMLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN4RTtRQUVELE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xJLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3pELElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQTtnQkFDckMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLGlCQUFpQixDQUFDLENBQUE7WUFDbkcsQ0FBQztTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLEdBQUcsR0FBRztZQUNSLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNoRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDeEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQy9CLFVBQVUsRUFBRSxFQUVYO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLG9CQUFvQixFQUFFLEVBQUU7Z0JBQ3hCLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7U0FDRixDQUFBO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDaEQsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUUxQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQTtZQUV2QyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUUxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1lBQ25HLENBQUM7U0FDRixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUk1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLEVBQUU7WUFDakIsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFLEtBQUs7U0FDeEIsQ0FBQTtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGdCQUFnQjtRQUV6QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLCtCQUErQixHQUFHLGdCQUFnQixDQUFDO1FBQ3hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUk7UUFJOUIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3JHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFJbEMsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVztRQUM5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ2hGLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRztRQUN6QixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pMLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsRixTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRzFCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDNUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFO1lBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdEUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxZQUFZLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUNsQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2xILElBQUksQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLENBQUM7WUFFekMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDM0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUNsQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUMzQjtvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNoQyxJQUFJLEdBQUcsR0FBRzt3QkFDUixVQUFVLEVBQUUsT0FBTzt3QkFDbkIsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLFFBQVEsRUFBRSxFQUFFO3dCQUNaLEtBQUssRUFBRSxFQUFFO3FCQUNWLENBQUE7b0JBQ0QsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUM1QyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsOEJBQThCLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDekQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUV6RCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3ZELElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNsQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFFdkIsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25GLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMvQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ2hELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxNQUFNLEVBQUU7b0JBQ2hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2hELE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUN0QixPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNyRCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO29CQUNoSixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxZQUFZLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztvQkFDbEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztvQkFDbEgsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEQsZUFBZSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7b0JBQ2hDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUMxQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO3dCQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUM5RCxDQUFDLENBQUMsQ0FBQztvQkFDSCxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMvQixTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNwQyxTQUFTLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2lCQUN4QztnQkFFRCxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDM0M7UUFFRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUV0QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0csSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0SixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUNoRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUdELGtCQUFrQixDQUFDLEtBQUs7UUFDdEIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNyRCxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQzNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO3FCQUNoRTt5QkFBTTt3QkFDTCxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3FCQUN4RTtvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dCQUN2QyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLGVBQWUsQ0FBQyxDQUFBO2dCQUVqRyxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBR0QsaUJBQWlCLENBQUMsV0FBVztRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBRXRELFNBQVMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXpCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBR2xFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEgsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ3JELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUMxRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyRSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWhELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRWpFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUl0RSxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBSTdCLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ3pFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFFcEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqQztZQUVELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFFbEgsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxlQUFlLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDO1lBQ2hELGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQ3pGLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUU3QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBR0gsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxZQUFZLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztZQUN6QyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUNyRixZQUFZLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFHMUMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7b0JBQzNCLElBQUksWUFBWSxFQUFFO3dCQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdkcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO3dCQUVmLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDOzRCQUNuRSxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQ0FDbEIsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUE7NEJBQ3ZDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQ0FDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0NBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLGlCQUFpQixDQUFDLENBQUE7NEJBQ25HLENBQUM7eUJBQ0YsQ0FBQyxDQUFBO3dCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO3dCQUNoQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO3dCQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztxQkFFM0I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsY0FBYyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztZQUM1QyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUMxRixjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDNUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUUvRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUU5QixDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4QyxVQUFVLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXJDLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7Z0JBQ3BDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEM7WUFDRCxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVEsRUFBRSxXQUFnQixFQUFFLFdBQWdCO1FBQzFELEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFTLEVBQUUsZ0JBQTZCLEVBQUUsV0FBZ0IsRUFBRSxHQUFHO1FBQ2xGLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUN4RyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQ3ZGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWxKLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDckIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzVELElBQUksRUFBRSxDQUFDLE9BQVksRUFBRSxFQUFFO3dCQUNyQixJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFOzRCQUM3RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDeEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3lCQUNoSTs2QkFBTTs0QkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQzt5QkFFOUc7d0JBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUM5QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDOzRCQUN4RSxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7NEJBQzdFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ3JGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUMzRCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBRXZCLENBQUM7aUJBQ0YsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFHckMsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRy9DLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV0RyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELFlBQVksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQ3BDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZGLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFHSCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUN0QyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3pGLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDOUMsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzNHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7b0JBQ25FLElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQy9ELElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7d0JBQzFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQ3JGLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO3dCQUM1QyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzVDO29CQUNELFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDdEYsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzlCLFdBQVcsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO29CQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDdEQsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7NEJBQ2xCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFBO3dCQUN2QyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7NEJBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDOzRCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO3dCQUNuRyxDQUFDO3FCQUNGLENBQUMsQ0FBQTtvQkFDRixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztvQkFDaEMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFNSCxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0MsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFHL0MsYUFBYSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7U0FDckM7UUFDRCxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBR25DLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUl2QyxDQUFDO0lBSUQsY0FBYyxDQUFDLE9BQWMsRUFBRSxFQUFVO1FBQ3ZDLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzVCLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BCLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELElBQUksS0FBSyxFQUFFO29CQUNULE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFjLEVBQUUsRUFBVTtRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEI7aUJBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDbEQ7U0FDRjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGdCQUFnQjtRQUNuRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RSxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3hELHdCQUF3QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDaEQsd0JBQXdCLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUV2QyxRQUFRLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjO1FBRXpFLElBQUksYUFBYSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3RGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RSxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3hELHdCQUF3QixDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDdkQsd0JBQXdCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUVuRCx3QkFBd0IsQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLENBQUM7UUFDN0Qsd0JBQXdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEQsd0JBQXdCLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUM5Qyx3QkFBd0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRWhELFFBQVEsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVztRQUMvRCxJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2hELElBQUksYUFBYSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3RGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RSxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3hELHdCQUF3QixDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDdkQsd0JBQXdCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNuRCx3QkFBd0IsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFLO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWEsRUFBRSxTQUF3QjtRQUV6RCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM1RyxNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRS9ELElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBR3hILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUNELGtCQUFrQixDQUFDLEtBQWEsRUFBRSxTQUF3QjtRQUV4RCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwRSxNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRS9ELElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU07WUFBRSxPQUFPO1FBR2hGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWEsRUFBRSxTQUF3QjtRQUV2RCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDNUUsTUFBTSxXQUFXLEdBQUcsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUUvRCxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU87UUFHeEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUs7UUFFL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDOUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqRCxDQUFDO0lBR0QsY0FBYztRQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN0RSxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7U0FDL0Q7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBSTtRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FFVDthQUFNO1lBQ0wsSUFBSSxVQUFVLEdBQXFCO2dCQUNqQyxXQUFXLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3RCO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsdURBQXVELENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUM3RjtJQUNILENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxJQUFJO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztnQkFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBRVQ7YUFBTTtZQUNMLElBQUksVUFBVSxHQUFxQjtnQkFDakMsV0FBVyxFQUFFO29CQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUN0QjthQUNGLENBQUM7WUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHVEQUF1RCxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDN0Y7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMkRBQTJELENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxZQUFZO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVuQixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1gsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO2dCQUN4QixPQUFPLEVBQUUsSUFBSTtnQkFDYixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87YUFDckIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBR0Qsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxpQkFBaUI7UUFFZixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUdELHFCQUFxQixDQUFDLEtBQUs7UUFDekIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUV0RCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2pFLElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1lBQ2pELENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUUsZUFBZSxDQUFDLENBQUE7WUFDakcsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxnQkFBZ0IsR0FBcUI7WUFDdkMsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTthQUN0QjtTQUNGLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBRXhELENBQUM7SUFHRCw2QkFBNkI7UUFDM0IsSUFBSSxHQUFHLEdBQUc7WUFDUixVQUFVLEVBQUUsTUFBTTtZQUNsQixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsRUFBRTtZQUNoQixpQkFBaUIsRUFBRSxFQUFFO1NBQ3RCLENBQUE7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFPO1FBQ3RCLElBQUksS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELG1CQUFtQixDQUFDLENBQUM7SUFFckIsQ0FBQztJQUVELFlBQVk7SUFFWixDQUFDO0lBRUQsMEJBQTBCLENBQUMsS0FBSztRQUM5QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsRCxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFDNUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUM5QyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEYsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25GLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25ELElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO2dCQUNsRCxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQTtZQUN2QyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO1lBQ25HLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBUUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkgsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXpCLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFFaEMsSUFBSSxHQUFHLEdBQUc7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxXQUFXLEVBQUUsRUFBRTtnQkFDZixZQUFZLEVBQUU7b0JBQ1osc0JBQXNCLEVBQUUsRUFBRTtvQkFDMUIsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUN4QjtnQkFDRCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsZ0JBQWdCLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRSxJQUFJO29CQUNmLGFBQWEsRUFBRSxFQUFFO29CQUNqQixPQUFPLEVBQUUsRUFBRTtvQkFDWCxRQUFRLEVBQUUsRUFBRTtvQkFDWixnQkFBZ0IsRUFBRSxLQUFLO2lCQUN4QjthQUNGLENBQUE7WUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLEtBQUs7UUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekosSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUM5SzthQUFNO1lBQ0wsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztTQUNsRztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFJRCxVQUFVLENBQUMsQ0FBQztJQUVaLENBQUM7OzJIQTFxQ1UsOEJBQThCOytHQUE5Qiw4QkFBOEIsOEtBaUNPLGdCQUFnQixvR0FFaEMsZ0JBQWdCLCtLQW1GckMscUJBQXFCLGdEQzlJbEMsKy95QkFpY1c7MkZEemFFLDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDRSxxQkFBcUI7c1VBc0MvQix5QkFBeUI7c0JBRHhCLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBR2xFLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRUQsZ0JBQWdCO3NCQUFoRSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFpRk0sVUFBVTtzQkFBOUQsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9kaWFsb2cnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBEeFNjcm9sbFZpZXdDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EYXRzc2V0c0NhbGwgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1kYXRhc2V0LWNhbGwuc2VydmljZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10b2RheS1wcmV2aW91cy9nYW1tYS10b2RheS1wcmV2aW91cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwQWR2YW5jZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvYXBwLWFkdmFuY2UtaGVhZGVyL2FwcC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlL2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbVNpbmdsZU51bWJlckNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW0tc2luZ2xlLW51bWJlci1jYXJkL2dhbW0tc2luZ2xlLW51bWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlL2dhbW1hLWFkdmFuY2Utb3BlcmF0b3ItdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2FkdmFuY2Utd2lkZ2V0LWhlYWRlci1maWx0ZXIvYWR2YW5jZS13aWRnZXQtaGVhZGVyLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBHYW1tYUFkdmFuY2VDaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYUdlb0NoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kYXNoYm9yZC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFnZS1jb25maWctbXVsdGktbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnZS1jb25maWctbXVsdGktbGF5b3V0LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQYWdlQ29uZmlnTXVsdGlsYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGRhc2hib3JkX2NvbnRhaW5lcjogYW55ID0gW107XG4gIHNlbGVjdGVkX3dpZHRoOiBhbnk7XG4gIHdpZGdldF93aWR0aCA9IFsndy1mdWxsJywgJ3ctMS8yJywgJ3ctMS8zJywgJ3ctMi8zJywgJ3ctMS80JywgJ3ctMy80JywgJ3ctMS81JywgJ3ctNC81JywgJ3ctMS82JywgJ3ctNS82J11cbiAgbG9hZGluZ01vZGFsOiBib29sZWFuID0gdHJ1ZTtcbiAgY3VzdG9tZXJzOiBhbnk7XG4gIHBhZ2VIZWFkZXJzRGF0YTogYW55O1xuICBwYWdlX3RpdGxlID0gJ0Rhc2hib2FyZCc7XG4gIGlzU3J2VHlwZU9wZXJhdG9yOiBib29sZWFuO1xuICBkZWZhdWx0U3RhcnREYXRlO1xuICBkZWZhdWx0RW5kRGF0ZTtcbiAgcGFnZV9jb25maWc7XG4gIG9wZXJhdGlvbkxldmVsczogYW55O1xuICBmaWx0ZXJfdmFsdWU7XG4gIGlzVG9nZ2xlU3dpY2g6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0RhdGVQaWNrZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNUb2dnbGVFdmVudFN0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VkaXRDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbmZpZ1ZpZXc6IGJvb2xlYW47XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuICBjb21wb25lbnROYW1lOiBhbnk7XG4gIGlzVXBkYXRlV2lkZ2V0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgaXNDaGFydEJ1dHRvbkNsaWNrOiBib29sZWFuO1xuICBjaGFydEFjY2VzczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgZGFzaENoYXJ0Q29tU291cmNlOiBhbnk7XG4gIGlzR2VuZXJhdGU6IGJvb2xlYW5cbiAgaXNGaWx0ZXJJbnB1dHM6IGJvb2xlYW5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqL1xuXG4gIEBWaWV3Q2hpbGQoJ2R5bmFtaWNDb21wb25lbnRDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGR5bmFtaWNDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgZHluYW1pY0NvbXBvbmVudFJlZnM6IENvbXBvbmVudFJlZjxhbnk+W10gPSBbXTtcbiAgLy8gZHluYW1pY0NvbXBvbmVudFJlZnM6IENvbXBvbmVudFJlZjxhbnk+W10gPSBbXTtcblxuICBDb21wUmVmczogQ29tcG9uZW50UmVmPGFueT47XG5cbiAgY29tcG9uZW50Q2xhc3NNYXAgPSB7XG4gICAgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQsXG4gICAgR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50LFxuICAgIEFwcEFkdmFuY2VIZWFkZXJDb21wb25lbnQsXG4gICAgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50LFxuICAgIEdhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50LFxuICAgIEdhbW1hQWR2YW5jZU9wZXJhdG9yVGFibGVDb21wb25lbnQsXG4gICAgQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudCxcbiAgICBHYW1tYUdlb0NoYXJ0Q29tcG9uZW50XG4gIH07XG4gIGRhdGFTb3VyY2VNYXRhRGF0YTogYW55ID0gW107XG4gIHF1ZXJ5VHlwZSA9IFwibW9uZ29cIjtcbiAgZGF0YVNldE1vZGFsOiBhbnkgPSBbXTtcbiAgY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZTogYW55ID0gW107XG4gIHNlbGVzY2VkRGF0YVNvdXJjZTogYW55O1xuICBkYXRhU291cmNlTW9kYWw6IGFueSA9IHt9O1xuICBpc0Rhc2hCb2FyZENvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZWxlY3RlZFZpZXdGb3JtQ29tcG9uZW50OiBhbnkgPSB7fTtcbiAgYWRkZWR3aWRHZXRDb25maWcgPSB7XG4gICAgXCJkaXNwbGF5XCI6IHRydWUsXG4gICAgXCJ3aWRnZXRUaXRsZVwiOiBcIlwiLFxuICAgIFwid2lkdGhcIjogXCJcIixcbiAgICBcImhlaWdodFwiOiBcIlwiLFxuICAgIFwiaXNXaWRnZXRGaWx0ZXJcIjogZmFsc2VcbiAgfVxuXG4gIGRhc2hCb2FyZFdpZGdldENvbmZpZzogYW55ID0gW1xuICBdO1xuICBpc1dpZGdldENyZWF0aW9uQ29udGVudDogYm9vbGVhbjtcbiAgc2VsZWN0ZWRXaWR0aDogYW55O1xuICBzZWxlY3RlZEhlaWdodDogYW55O1xuICBuZXdXaWRnZXRJbmRleDogYW55O1xuICBzZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQ6IGFueSA9IHt9O1xuICBzZWxlY3RlZENvbnRhaW5lck9iamVjdEZvckNoYXJ0OiBhbnkgPSB7fTtcbiAgZGF0YVNldHRhYmxlRGF0YVNvdXJjZTogYW55O1xuICB1bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG5cbiAgaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXc6IGJvb2xlYW47XG4gIHBhZ2VJZDogYW55O1xuICBpc2xheW91dENyZWF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICB3aWRnZXROYW1lOiBhbnk7XG4gIHdpZGdldFRpdGxlOiBhbnk7XG4gIGFsbFdpZGdldElubmVyQ29udGVudDogYW55O1xuICBpc0RlZmF1bHRWaWV3OiBCb29sZWFuID0gdHJ1ZTtcbiAgaXNFZGl0TWFpbkxheW91dDogQm9vbGVhbjtcbiAgZmlsdGVyRGF0YVNvdXJjZTogYW55O1xuICBzZWxlY3RlZEZpbHRlcklkOiBhbnk7XG5cbiAgdmlld1RvU2VhcmNoOiBzdHJpbmcgPSAnJztcbiAgZmlsdGVyZWRDb21wb25lbnRDb25maWc6IGFueVtdID0gW107XG4gIGlzRWRpdE9wdGlvbkNsaWNrOiBib29sZWFuO1xuICBlZGl0Vmlld2RhdGFTb3VyY2VNb2RhbDogYW55ID0ge307XG5cbiAgZWRpdEl0ZW1Gb3JVcGRhdGU6IGFueSA9IHt9O1xuICBwYWdlVGl0bGU6IGFueTtcbiAgcGFnZVVybDogYW55O1xuICBhbGxXaWRnZXRCeURhdGFzZXQ6IGFueSA9IFtdO1xuXG4gIHNlbGVjdGVkRmlsdGVyc0RlZmF1bHQ6IGFueTtcblxuICBub2RlUHJvcGVydGljZUZpbHRlcnM6IGFueSA9IFtdO1xuXG4gIGlzQ3JlYXRlRGF0YXNldDogYm9vbGVhbjtcbiAgc2VsZWN0ZWREYXRhc2V0SWQ6IGFueTtcbiAgaXNDcmVhdGVEYXRhc2V0V2l0aERhdGFzZXRJZDogYm9vbGVhbjtcblxuICBpc0NyZWF0ZU5ld1ZpZXc6IGJvb2xlYW47XG4gIGlzQ3JlYXRlTmV3Vmlld1dpdGhEZWZhdWx0VmlldzogYm9vbGVhbjtcblxuICBkZWZhdWx0QXBwbHllZEZpbHRlcjogYW55O1xuICBpc1dpZGdldEZpbHRlcnM6IGJvb2xlYW47XG4gIG5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZTogYW55O1xuICBzZWxlY3RlZEZpbHRlckRhdGFzb3VyY2U6IGFueSA9IHt9O1xuICBAVmlld0NoaWxkKER4U2Nyb2xsVmlld0NvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIHNjcm9sbFZpZXc6IER4U2Nyb2xsVmlld0NvbXBvbmVudDtcblxuICBzZWxlY3RlZFZpZXdJZDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgc2VydmljZTogQXBwbGljYXRpb25Db250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZGF0YXNldFNlcnZpY2U6IEFwcGxpY2F0aW9uRGF0c3NldHNDYWxsLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcgPSAodGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snY29udGVudFR5cGUnXSA9PSAndmlldycpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucGFnZUlkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sncGFnZUlkJ107XG5cbiAgICB0aGlzLmdldERhdGFTZXQoKTtcbiAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMTAnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMScsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgdGhpcy5nZXRGaWx0ZXJJdGVtcygpXG4gICAgdGhpcy5nZXRBbGxWaWV3c0l0ZW1zKClcblxuICAgIHRoaXMuZ2V0QXBwUGFnZURldGFpbENvbmZpZ0J5UGFnZUlkKClcbiAgfVxuXG4gIGdldEFsbFZpZXdzSXRlbXMoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcFZpZXdDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRDb25maWdEYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbXBvbmVudENvbmZpZyA9IHRoaXMuY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENvbmZpZycpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXRGaWx0ZXJJdGVtcygpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRmlsdGVyQ29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXJyb3InKTtcblxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGdldEFwcFBhZ2VEZXRhaWxDb25maWdCeVBhZ2VJZCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwUGFnZURldGFpbENvbmZpZyh0aGlzLnBhZ2VJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcgPSBkYXRhO1xuICAgICAgICB0aGlzLnBhZ2VUaXRsZSA9IGRhdGEucGFnZU5hbWU7XG4gICAgICAgIHRoaXMucGFnZVVybCA9IGRhdGEucGFnZVVybDtcbiAgICAgICAgaWYgKGRhdGEud2lkZ2V0cyAmJiBkYXRhLndpZGdldHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRDb25maWdTZXQoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXJyb3InKTtcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuXG4gIGdldENvbXBvbmVudENvbmZpZ1NldCgpIHtcbiAgICBsZXQgZGVmYXVsdEZpbHRlcnMgPSB7IG9wZXJhdGlvbkZpbHRlcjogeyBzdGFydERhdGU6IFwiXCIsIGVuZERhdGU6IFwiXCIgfSB9O1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgaWYgKHdpZGdldC5maWx0ZXJzKSB7XG4gICAgICAgIHdpZGdldC5maWx0ZXJzLmZpbHRlckl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyVHlwZSA9PT0gJ2RhdGUnIHx8IGVsZW1lbnQuZmlsdGVyVHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJkeW5hbWljXCIgJiYgZWxlbWVudC5tb21lbnRGdW5jdGlvbiAhPT0gXCJcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIiAmJiBlbGVtZW50Lm1vbWVudEZvcm1hdCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBsZXQgW2NvdW50LCB1bml0XSA9IGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmVuZERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcInN0YXJ0RGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLnN0YXJ0RGF0ZSA9IG1vbWVudCgpW2VsZW1lbnQubW9tZW50RnVuY3Rpb25dKHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmRlZmF1bHRGaWx0ZXJUeXBlID09PSBcInN0YXRpY1wiICYmIGVsZW1lbnQuZGVmYXVsdEZpbHRlclZhbHVlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwiZW5kRGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheSkge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmVuZERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUgIT09IFwiXCIpIHx8XG4gICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKSAmJiBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50Lm9wZXJhdG9yTmFtZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltlbGVtZW50Lm9wZXJhdG9yTmFtZV0gPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgPyBlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZVxuICAgICAgICAgICAgICAgICAgOiBbZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltlbGVtZW50LmFwaU5hbWVdID0gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUuam9pbihcIixcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICB0aGlzLmRlZmF1bHRBcHBseWVkRmlsdGVyID0gZGVmYXVsdEZpbHRlcnM7XG5cbiAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAvLyB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QgPSB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldFVuaXF1ZURhdGFTZXRPYmplY3QoKTtcbiAgICAgIHRoaXMuY3JlYXRlRGl2RWxlbWVudHModGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0KTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gIH1cblxuICBnZXREYXRhU2V0KCkge1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBEYXRhc2V0Q29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdEYXRhc2V0IENyZWF0aW9uJylcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuXG5cblxuICBnZXRDb21wb25lbnRDb25maWcoZXZlbnQpIHtcbiAgICBjb25zdCBmb3VuZE9iamVjdCA9IHRoaXMuY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZS5maW5kKHZpZXcgPT4gdmlldy52aWV3SWQgPT09IGV2ZW50LnZpZXdJZCk7XG4gICAgdGhpcy5nZXRFbWl0TmV3Q2hhcnRDb25maWcoZm91bmRPYmplY3QpO1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgfVxuXG4gIGFkZE5ld2NoYXJ0KCkge1xuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDaGFydEJ1dHRvbkNsaWNrID0gdHJ1ZTtcbiAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5pc0RlZmF1bHRWaWV3ID0gZmFsc2U7XG4gIH1cblxuXG4gIGFkZFdpZGdldCgpIHtcbiAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQgPSB0cnVlO1xuICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IGZhbHNlO1xuICAgIHRoaXMuaXNFZGl0TWFpbkxheW91dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNDaGFydEJ1dHRvbkNsaWNrID0gZmFsc2U7XG4gICAgdGhpcy5pc1VwZGF0ZVdpZGdldCA9IGZhbHNlO1xuICAgIHRoaXMud2lkZ2V0TmFtZSA9ICcnO1xuICAgIHRoaXMud2lkZ2V0VGl0bGUgPSAnJztcbiAgICB0aGlzLmFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgICAgXCJkaXNwbGF5XCI6IHRydWUsXG4gICAgICBcIndpZGdldFRpdGxlXCI6IFwiXCIsXG4gICAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgICBcImhlaWdodFwiOiBcIlwiLFxuICAgICAgXCJpc1dpZGdldEZpbHRlclwiOiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGdldFdpdGgoZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRXaWR0aCA9IGUudmFsdWU7XG4gIH1cblxuICBnZXRIZWlnaHQoZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRIZWlnaHQgPSBlLnZhbHVlO1xuICB9XG5cbiAgYWRkTGF5b3V0VE92aWV3KCkge1xuICAgIGxldCBpbm5lcl9ub2RlID0ge1xuICAgICAgaWQ6IHRoaXMuY29tbW9uU2VydmljZS5wcmltZXJ5UmVuZG9tZUlkKDUpLFxuICAgICAgbm9kZVRpdGxlOiBcIlwiLFxuICAgICAgZmlsdGVySWQ6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJJZCxcbiAgICAgIG5vZGVQcm9wZXJ0aWVzOiB0aGlzLmFkZGVkd2lkR2V0Q29uZmlnLFxuICAgICAgY29tcENvbmZpZzoge1xuICAgICAgICBkeW5hbWljQ29tcG9uZW50UmVmczogW10sXG4gICAgICAgIHZpZXdDb25maWc6IFtdXG4gICAgICB9LFxuICAgIH1cbiAgICBpZiAodGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlKSB7XG4gICAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUucHVzaChpbm5lcl9ub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlID0gW107XG4gICAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUucHVzaChpbm5lcl9ub2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVXaWRnZXQoKTtcbiAgfVxuXG5cblxuICByZWZvcm1hdFdpZGdldENvbmZpZyhkYXNoQm9hcmRXaWRnZXRDb25maWcsIGluZGV4ID0gbnVsbCkge1xuICAgIGNvbnN0IHByb2Nlc3NXaWRnZXQgPSAod2lkZ2V0KSA9PiB7XG4gICAgICB3aWRnZXQuY29tcENvbmZpZy52aWV3Q29uZmlnID0gd2lkZ2V0LmNvbXBDb25maWcudmlld0NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52aWV3SWQpO1xuICAgICAgd2lkZ2V0LmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMgPSBbXTtcblxuICAgICAgaWYgKHdpZGdldC53aWRnZXROb2RlICYmIHdpZGdldC53aWRnZXROb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd2lkZ2V0LndpZGdldE5vZGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZyA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZpZXdJZCk7XG4gICAgICAgICAgbm9kZS5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzID0gW107XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8IGRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmxlbmd0aCkge1xuICAgICAgcHJvY2Vzc1dpZGdldChkYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1tpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKHdpZGdldCA9PiBwcm9jZXNzV2lkZ2V0KHdpZGdldCkpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1tpbmRleF07XG4gIH1cblxuICB1cGRhdGVXaWRnZXQoKSB7XG4gICAgbGV0IG1vZGlmaWVkQ29uZmlnID0gdGhpcy5yZWZvcm1hdFdpZGdldENvbmZpZyh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZywgdGhpcy5uZXdXaWRnZXRJbmRleCk7XG4gICAgbW9kaWZpZWRDb25maWdbJ2ZpbHRlcklkJ10gPSAobW9kaWZpZWRDb25maWcuZmlsdGVycyAmJiBtb2RpZmllZENvbmZpZy5maWx0ZXJzLmZpbHRlcklkKSA/IG1vZGlmaWVkQ29uZmlnLmZpbHRlcnMuZmlsdGVySWQgOiBudWxsO1xuICAgIGRlbGV0ZSBtb2RpZmllZENvbmZpZ1snZmlsdGVycyddO1xuICAgIHRoaXMuc2VydmljZS5lZGl0QXBwV2lkZ2V0Q29uZmlnKG1vZGlmaWVkQ29uZmlnKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmdldEFwcFBhZ2VEZXRhaWxDb25maWdCeVBhZ2VJZCgpXG4gICAgICAgIHRoaXMuYmFja1RvTWFpblZpZXcoKTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdXaWRnZXQgQ3JlYXRpb24nKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5uZXdXaWRnZXRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5pc0RlZmF1bHRWaWV3ID0gdHJ1ZTtcbiAgfVxuXG4gIHVwZGF0ZUxheW91dFdpZGdldFRPdmlldygpIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVXaWRnZXQoKTtcbiAgfVxuXG4gIGFkZFdpZGdldFRPdmlldygpIHtcbiAgICBsZXQgb2JqID0ge1xuICAgICAgd2lkZ2V0SWQ6IHRoaXMuY29tbW9uU2VydmljZS5wcmltZXJ5UmVuZG9tZUlkKDUpLFxuICAgICAgd2lkZ2V0TmFtZTogdGhpcy53aWRnZXROYW1lLFxuICAgICAgd2lkZ2V0VGl0bGU6IHRoaXMud2lkZ2V0VGl0bGUsXG4gICAgICB3aWRnZXRQcm9wZXJ0aWVzOiB0aGlzLmFkZGVkd2lkR2V0Q29uZmlnLFxuICAgICAgcGFnZUlkOiB0aGlzLnBhZ2VJZCxcbiAgICAgIGZpbHRlcklkOiB0aGlzLnNlbGVjdGVkRmlsdGVySWQsXG4gICAgICB3aWRnZXROb2RlOiBbXG4gICAgICAgIFxuICAgICAgXSxcbiAgICAgIGNvbXBDb25maWc6IHtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudFJlZnM6IFtdLFxuICAgICAgICB2aWV3Q29uZmlnOiBbXVxuICAgICAgfSxcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZS5jcmVhdGVBcHBXaWRnZXRDb25maWcob2JqKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAvLyB0aGlzLmNyZWF0ZURpdkVsZW1lbnRzKHRoaXMudW5pcXVlRGF0YVNldE9iamVjdClcbiAgICAgICAgdGhpcy5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnQnlQYWdlSWQoKVxuXG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdXaWRnZXQgQ3JlYXRpb24nKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5wdXNoKG9iailcbiAgICAvLyB0aGlzLmluc2VydER5bmFtaWNDb21wb25lbnRzKCk7XG5cblxuICAgIHRoaXMuZHluYW1pY0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuXG4gICAgdGhpcy5pc1dpZGdldENyZWF0aW9uQ29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IHRydWU7XG4gIH1cblxuICBpbnNlcnROZXdXaWdldChpbmRleCkge1xuICAgIHRoaXMuYWRkZWR3aWRHZXRDb25maWcgPSB7XG4gICAgICBcImRpc3BsYXlcIjogdHJ1ZSxcbiAgICAgIFwid2lkZ2V0VGl0bGVcIjogXCJcIixcbiAgICAgIFwid2lkdGhcIjogXCJcIixcbiAgICAgIFwiaGVpZ2h0XCI6IFwiXCIsXG4gICAgICBcImlzV2lkZ2V0RmlsdGVyXCI6IGZhbHNlXG4gICAgfVxuICAgIHRoaXMuaXNVcGRhdGVXaWRnZXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hhcnRCdXR0b25DbGljayA9IGZhbHNlO1xuICAgIHRoaXMuaXNsYXlvdXRDcmVhdGUgPSB0cnVlO1xuICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSBpbmRleDtcbiAgfVxuICBpbnNlcnRDaGFydFdpZ2V0KGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50KSB7XG5cbiAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hhcnRCdXR0b25DbGljayA9IHRydWU7XG4gICAgdGhpcy5pc1dpZGdldENyZWF0aW9uQ29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRDb250YWluZXJPYmplY3RGb3JDaGFydCA9IGNvbnRhaW5lckVsZW1lbnQ7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQgPSBpbmRleE9iajtcbiAgICB0aGlzLnNlbGVjdGVkVmlld0Zvcm1Db21wb25lbnQgPSB7fTtcbiAgfVxuXG4gIGFzeW5jIGdldEVtaXROZXdDaGFydENvbmZpZyhkYXRhKSB7XG4gICAgLy8gbGV0IGRhdGFzZXRfY29uZmlnID0gdGhpcy5kYXRhU2V0TW9kYWwuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09IGRhdGEuZGF0YXNldElkKTtcbiAgICAvLyBhd2FpdCB0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChkYXRhc2V0X2NvbmZpZywgZGF0YXNldF9jb25maWcuZGF0YXNldElkLCB0aGlzLnNlbGVjdGVkRmlsdGVyc0RlZmF1bHQpXG4gICAgLy8gZGF0YS5rcGlDb25maWdbJ2RhdGFTb3VyY2UnXSA9IHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0X2NvbmZpZy5kYXRhc2V0SWRdO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleE9iakZvckNoYXJ0LmNvbXBDb25maWcudmlld0NvbmZpZy5wdXNoKGRhdGEpXG4gICAgdGhpcy5sb2FkRHluYW1pY0NvbXBvbmVudChkYXRhLCB0aGlzLnNlbGVjdGVkSW5kZXhPYmpGb3JDaGFydCwgdGhpcy5zZWxlY3RlZENvbnRhaW5lck9iamVjdEZvckNoYXJ0KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZylcbiAgICB0aGlzLnVwZGF0ZVdpZGdldCgpO1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgdGhpcy5pc0NoYXJ0QnV0dG9uQ2xpY2sgPSBmYWxzZTtcblxuICAgIC8vIH1cblxuICB9XG5cbiAgdXBkYXRlVG9WaWV3KCkge1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZVdpZGdldCgpO1xuICB9XG5cbiAgZGVsZXRlV2lkZ2V0KGl0ZW0sIGluZGV4KSB7XG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgdGhpcy5uZXdXaWRnZXRJbmRleCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRlbGV0ZUluc2VydFdpZGdldChpdGVtLCBjaGlsZEluZGV4LCBwYXJlbnRJbmRleCkge1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbcGFyZW50SW5kZXhdLndpZGdldE5vZGUuc3BsaWNlKGNoaWxkSW5kZXgsIDEpXG4gICAgdGhpcy5uZXdXaWRnZXRJbmRleCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFdpZGdldFRpdGxlRGl2KGl0ZW0sIGRpdikge1xuICAgIGNvbnN0IHdpZGdldERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHdpZGdldERpdi5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ2l0ZW1zLWNlbnRlcicsICdqdXN0aWZ5LWJldHdlZW4nLCAnZm9udC1ib2xkJywgJ3RleHQtbWQnLCAndGV4dC1ncmF5LTkwMCcsICdkYXJrOnRleHQtd2hpdGUnLCAnYm9yZGVyLWInLCAncC0zJywgJ2JnLWdyYXktODAwJywgJ214LTInLCAncm91bmRlZC10LWxnJyk7XG4gICAgY29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aXRsZURpdi5pbm5lclRleHQgPSAoaXRlbS5ub2RlUHJvcGVydGllcykgPyBpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlIDogXCJcIjtcbiAgICB3aWRnZXREaXYuYXBwZW5kKHRpdGxlRGl2KVxuXG4gICAgLy8gQWRkIEZvbnRBd2Vzb21lIGVkaXQgaWNvblxuICAgIGNvbnN0IGVkaXRJY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpO1xuICAgIGVkaXRJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhJywgJ2ZhLXBlbmNpbCcsICdtbC0yJywgJ2N1cnNvci1wb2ludGVyJywgJ3RleHQtYmx1ZS00MDAnLCAnaG92ZXI6dGV4dC1ibHVlLTcwMCcpO1xuICAgIHdpZGdldERpdi5hcHBlbmQoZWRpdEljb24pO1xuXG4gICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMuaXNXaWRnZXRGaWx0ZXIpIHtcbiAgICAgIGNvbnN0IHNlYXJjaENvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmNsYXNzTGlzdC5hZGQoJ2ZsZXgnLCAnaXRlbXMtY2VudGVyJywgJ3NwYWNlLXgtMicpO1xuICAgICAgY29uc3Qgc2VhcmNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBzZWFyY2hCdXR0b24uaW5uZXJUZXh0ID0gJ0ZpbHRlcic7XG4gICAgICBzZWFyY2hCdXR0b24uY2xhc3NMaXN0LmFkZCgncHgtMycsICdweS0xLjUnLCAnYmctYmx1ZS02MDAnLCAnbXItMicsICd0ZXh0LXdoaXRlJywgJ3JvdW5kZWQnLCAnaG92ZXI6YmctYmx1ZS03MDAnKTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlID0gW107XG5cbiAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1dpZGdldEZpbHRlcnMgPSB0cnVlO1xuICAgICAgICBsZXQgZmlsdGVQcm9wZXJ0aWNlID0gW107XG4gICAgICAgIGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IGtleV9uYW1lID0gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2VsZW1lbnQuZGF0YXNldElkXVswXTtcbiAgICAgICAgICBPYmplY3Qua2V5cyhrZXlfbmFtZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWx0ZVByb3BlcnRpY2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICBmaWx0ZVByb3BlcnRpY2UucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWx0ZVByb3BlcnRpY2UuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogZWxlbWVudCxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBcImZsb2F0XCIsXG4gICAgICAgICAgICBvcGVyYXRvcjogXCJcIixcbiAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZS5wdXNoKG9iailcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHNlYXJjaENvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChzZWFyY2hCdXR0b24pXG4gICAgICB3aWRnZXREaXYuYXBwZW5kQ2hpbGQodGl0bGVEaXYpO1xuICAgICAgd2lkZ2V0RGl2LmFwcGVuZENoaWxkKHNlYXJjaENvbnRhaW5lckRpdik7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0uZmlsdGVySWQpIHtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlID0ge307XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsndmlld0NvbmZpZyddID0gaXRlbTtcbiAgICAgIHRoaXMubm9kZXByb3BlcnRpY2VGaWx0ZXJEYXRhU291cmNlWydoYXZpbmdDb25maWcnXSA9IFtdO1xuXG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRmlsdGVyQ29uZmlnKGl0ZW0uZmlsdGVySWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICB0aGlzLmxvYWRXaWRnZXRGaWx0ZXJDb21wb25lbnQoaXRlbSwgd2lkZ2V0RGl2LCBkYXRhLmZpbHRlckl0ZW1zKTtcbiAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycyAmJiBpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgY29uc3Qgc2VhcmNoQ29udGFpbmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzZWFyY2hDb250YWluZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnc3BhY2UteC0yJyk7XG4gICAgICBpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGZpbHRlckRpdi5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ2l0ZW1zLWNlbnRlcicpO1xuICAgICAgICBpZiAoZmlsdGVyLmlucHV0X3R5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgIHRleHRCb3gudHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICB0ZXh0Qm94LnBsYWNlaG9sZGVyID0gYEVudGVyICR7ZmlsdGVyLmxvY2FsX2NvbHVtbn1gO1xuICAgICAgICAgIHRleHRCb3guY2xhc3NMaXN0LmFkZCgncHgtMicsICdweS0xLjUnLCAncm91bmRlZCcsICdib3JkZXInLCAnbXItMScsICdib3JkZXItZ3JheS01MDAnLCAndGV4dC1ncmF5LTkwMCcsICdkYXJrOmJnLWdyYXktNzAwJywgJ2Rhcms6dGV4dC13aGl0ZScpO1xuICAgICAgICAgIGNvbnN0IHNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgIHNlYXJjaEJ1dHRvbi5pbm5lclRleHQgPSAnU2VhcmNoJztcbiAgICAgICAgICBzZWFyY2hCdXR0b24uY2xhc3NMaXN0LmFkZCgncHgtMycsICdweS0xLjUnLCAnYmctYmx1ZS02MDAnLCAnbXItMicsICd0ZXh0LXdoaXRlJywgJ3JvdW5kZWQnLCAnaG92ZXI6YmctYmx1ZS03MDAnKTtcbiAgICAgICAgICBjb25zdCBzZXBhcmVyb3RCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBzZXBhcmVyb3RCdXR0b24uaW5uZXJIVE1MID0gJ3wnO1xuICAgICAgICAgIHNlYXJjaEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0ZXh0Qm94LnZhbHVlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RleHQgc2VhcmNoIGJ1dHRvbiBjbGlja2VkIHdpdGg6Jywgc2VhcmNoVGVybSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZmlsdGVyRGl2LmFwcGVuZENoaWxkKHRleHRCb3gpO1xuICAgICAgICAgIGZpbHRlckRpdi5hcHBlbmRDaGlsZChzZWFyY2hCdXR0b24pO1xuICAgICAgICAgIGZpbHRlckRpdi5hcHBlbmRDaGlsZChzZXBhcmVyb3RCdXR0b24pO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmFwcGVuZENoaWxkKGZpbHRlckRpdik7XG4gICAgICB9KTtcbiAgICAgIHdpZGdldERpdi5hcHBlbmRDaGlsZChzZWFyY2hDb250YWluZXJEaXYpO1xuICAgIH1cblxuICAgIGVkaXRJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuXG4gICAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5maW5kSW5kZXgob2JqZWN0ID0+IG9iamVjdC53aWRnZXRJZCA9PT0gZGl2LndpZGdldElkKTtcbiAgICAgIHRoaXMuaXNVcGRhdGVXaWRnZXQgPSB0cnVlO1xuICAgICAgdGhpcy5pc2xheW91dENyZWF0ZSA9IHRydWU7XG4gICAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0NoYXJ0QnV0dG9uQ2xpY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMubm9kZVByb3BlcnRpY2VGaWx0ZXJzID0gKGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMgJiYgaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycy5sZW5ndGggIT09IDApID8gaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycyA6IFtdO1xuICAgICAgaXRlbS5ub2RlUHJvcGVydGllc1snbm9kZWZpbHRlcnMnXSA9IHRoaXMubm9kZVByb3BlcnRpY2VGaWx0ZXJzO1xuICAgICAgdGhpcy5hZGRlZHdpZEdldENvbmZpZyA9IGl0ZW0ubm9kZVByb3BlcnRpZXM7XG4gICAgICB0aGlzLmFsbFdpZGdldElubmVyQ29udGVudCA9IGl0ZW0uY29tcENvbmZpZy52aWV3Q29uZmlnO1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcklkID0gKGl0ZW0uZmlsdGVySWQpID8gaXRlbS5maWx0ZXJJZCA6IFwiXCI7XG4gICAgICB0aGlzLmVkaXRWaWV3ZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyRGF0YXNvdXJjZSA9IGl0ZW07XG4gICAgfSk7XG4gICAgcmV0dXJuIHdpZGdldERpdjtcbiAgfVxuXG5cbiAgZ2V0RmlsdGVyVmFsdWVCeUlkKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmV2ZW50KSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRmlsdGVyQ29uZmlnKGV2ZW50LnZhbHVlKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRGaWx0ZXJEYXRhc291cmNlKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJEYXRhc291cmNlLmZpbHRlcklkID0gdGhpcy5zZWxlY3RlZEZpbHRlcklkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLmZpbHRlcnMgPSBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFwiRmlsdGVyIENoYW5nZWRcIilcbiAgICAgICAgfSwgZXJyb2U6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRmlsdGVyIFVwZGF0ZScpXG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuXG4gIGNyZWF0ZURpdkVsZW1lbnRzKGRhdGFzZXRCeUlkKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5keW5hbWljQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgIGNvbnN0IG11bHRpSXRlbURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIG11bHRpSXRlbURpdi5jbGFzc0xpc3QuYWRkKFwiZmxleFwiLCBcImZsZXgtcm93XCIsIFwianVzdGlmeS1iZXR3ZWVuXCIpO1xuICAgIC8vIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtdWx0aUl0ZW1EaXYpXG4gICAgXG4gICAgY29uc3QgY29udGV4dF9maWx0ZXIgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy5maWx0ZXJzID8gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcuZmlsdGVycy5maWx0ZXJJdGVtcyA6IG51bGw7XG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5mb3JFYWNoKGFzeW5jIGRpdiA9PiB7XG4gICAgICBjb25zdCByb3dEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGxldCB3X2hlaWdodCA9IChkaXYud2lkZ2V0UHJvcGVydGllcy5oZWlnaHQgPT0gXCJcIikgPyBcImgtYXV0b1wiIDogJ2gtWycgKyBkaXYud2lkZ2V0UHJvcGVydGllcy5oZWlnaHQgKyAnXSc7XG4gICAgICByb3dEaXYuY2xhc3NMaXN0LmFkZChkaXYud2lkZ2V0UHJvcGVydGllcy53aWR0aCwgd19oZWlnaHQsICdib3JkZXInKTtcbiAgICAgIGNvbnN0IGZpbHRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBjb25zdCBmaWx0ZXJJdGVtcyA9IChkaXYuZmlsdGVycykgPyBkaXYuZmlsdGVycy5maWx0ZXJJdGVtcyA6IFtdO1xuICAgICAgLy8gaWYgKGRpdi5maWx0ZXJzKSB7XG4gICAgICB0aGlzLmxvYWRGaWx0ZXJDb21wb25lbnQoZGl2LCBmaWx0ZXJEaXYsIGZpbHRlckl0ZW1zLCBjb250ZXh0X2ZpbHRlcik7XG5cbiAgICAgIC8vIH1cblxuICAgICAgcm93RGl2LmFwcGVuZENoaWxkKGZpbHRlckRpdilcbiAgICAgIC8vZm9yIG11bHRpcGxlIHZpZXdcbiAgICAgXG5cbiAgICAgIGlmIChkaXYud2lkZ2V0Tm9kZSAmJiBkaXYud2lkZ2V0Tm9kZS5sZW5ndGggJiYgZGl2LndpZGdldE5vZGUubGVuZ3RoICE9IDApIHtcbiAgICAgICAgY29uc3QgbWFpbkl0ZW1EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbWFpbkl0ZW1EaXYuY2xhc3NMaXN0LmFkZChcImZsZXhcIiwgXCJmbGV4LXdyYXBcIixcInctZnVsbFwiKTtcbiAgICAgICAgdGhpcy5sb2FkV2lkZ2V0Tm9kZXMoZGl2LCBtYWluSXRlbURpdiwgZGF0YXNldEJ5SWQpO1xuICAgICAgICAvLyBmb3IgbG9vcCBvbiB3aWRnZXRcbiAgICAgICAgcm93RGl2LmFwcGVuZENoaWxkKG1haW5JdGVtRGl2KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcF9pbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcF9pbm5lckRpdi5jbGFzc0xpc3QuYWRkKCdyb3VuZGVkJywgJ2p1c3RpZnktY2VudGVyJywgJ2l0ZW1zLWNlbnRlcicsICdib3JkZXInLCAncC0xJywgJ20tMScsICdmbGV4JywgJ2ZsZXgtcm93Jyk7XG4gICAgICAvLyBhZGQgd2lkZ2V0IGJ1dHRvblxuICAgICAgY29uc3QgcF9idXR0b25fd2lkZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBwX2J1dHRvbl93aWRnZXQuaW5uZXJUZXh0ID0gJ0FkZCBTaW5nbGUgTGF5b3V0JztcbiAgICAgIHBfYnV0dG9uX3dpZGdldC5jbGFzc0xpc3QuYWRkKCdiZy1ibHVlLTcwMCcsIFwicC0xXCIsIFwidy1maXRcIiwgXCJjdXJzb3ItcG9pbnRlclwiLCAndGV4dC14cycpXG4gICAgICBwX2J1dHRvbl93aWRnZXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5maW5kSW5kZXgob2JqZWN0ID0+IG9iamVjdC53aWRnZXRJZCA9PT0gZGl2LndpZGdldElkKTtcbiAgICAgICAgdGhpcy5pbnNlcnROZXdXaWdldChpbmRleCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZGVsZXRlIHdpZGdldCBidXR0b25cbiAgICAgIGNvbnN0IHBfZGVsX2J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcF9kZWxfYnV0dG9uLmlubmVyVGV4dCA9ICdEZXRldGUgbGF5b3V0JztcbiAgICAgIHBfZGVsX2J1dHRvbi5jbGFzc0xpc3QuYWRkKCdiZy1yZWQtNzAwJywgXCJwLTFcIiwgXCJ3LWZpdFwiLCBcImN1cnNvci1wb2ludGVyXCIsICd0ZXh0LXhzJylcbiAgICAgIHBfZGVsX2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblxuXG4gICAgICAgIGxldCByZXN1bHQgPSBjb25maXJtKFwiPGk+QXJlIFlvdSBTdXJlPzwvaT5cIiwgXCJEZWxldGUgTGF5b3V0XCIpO1xuICAgICAgICByZXN1bHQudGhlbigoZGlhbG9nUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cyA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMubWFwKGNvbmZpZyA9PiBjb25maWcud2lkZ2V0SWQpO1xuICAgICAgICAgICAgcm93RGl2LnJlbW92ZSgpXG5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5lZGl0QXBwUGFnZUNvbmZpZyh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXBwUGFnZURldGFpbENvbmZpZ0J5UGFnZUlkKClcbiAgICAgICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdXaWRnZXQgQ3JlYXRpb24nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdGhpcy5uZXdXaWRnZXRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IHRydWU7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAvLyBhZHZhbmNlZCBidXR0b25cbiAgICAgIGNvbnN0IGFkdmFuY2VfYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBhZHZhbmNlX2J1dHRvbi5pbm5lclRleHQgPSAnQWR2YW5jZSBMYXlvdXQnO1xuICAgICAgYWR2YW5jZV9idXR0b24uY2xhc3NMaXN0LmFkZCgnYmcteWVsbG93LTcwMCcsIFwicC0xXCIsIFwidy1maXRcIiwgXCJjdXJzb3ItcG9pbnRlclwiLCAndGV4dC14cycpXG4gICAgICBhZHZhbmNlX2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY29tcF9vYmplY3QgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMsIGRpdi53aWRnZXRJZCk7XG4gICAgICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZpbmRJbmRleChvYmplY3QgPT4gb2JqZWN0LndpZGdldElkID09PSBkaXYud2lkZ2V0SWQpO1xuXG4gICAgICAgIHRoaXMuaXNBZHZhbmNlTGF5b3V0ID0gdHJ1ZTtcblxuICAgICAgfSk7XG5cbiAgICAgIHBfaW5uZXJEaXYuYXBwZW5kQ2hpbGQoYWR2YW5jZV9idXR0b24pO1xuICAgICAgcF9pbm5lckRpdi5hcHBlbmRDaGlsZChwX2J1dHRvbl93aWRnZXQpO1xuICAgICAgcF9pbm5lckRpdi5hcHBlbmRDaGlsZChwX2RlbF9idXR0b24pO1xuXG4gICAgICBpZiAoIXRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcpIHtcbiAgICAgICAgcm93RGl2LmFwcGVuZENoaWxkKHBfaW5uZXJEaXYpO1xuICAgICAgfVxuICAgICAgbXVsdGlJdGVtRGl2LmFwcGVuZENoaWxkKHJvd0Rpdik7XG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobXVsdGlJdGVtRGl2KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRXaWRnZXROb2RlcyhkaXY6IGFueSwgbWFpbkl0ZW1EaXY6IGFueSwgZGF0YXNldEJ5SWQ6IGFueSkge1xuICAgIGRpdi53aWRnZXROb2RlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICB0aGlzLmxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW0sIG1haW5JdGVtRGl2LCBkYXRhc2V0QnlJZCwgZGl2KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRTaW5nbGVXaWRnZXROb2RlKGl0ZW06IGFueSwgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQsIGRhdGFzZXRCeUlkOiBhbnksIGRpdikge1xuICAgIGxldCB3X2hlaWdodCA9IChpdGVtLm5vZGVQcm9wZXJ0aWVzLmhlaWdodCA9PSBcIlwiKSA/IFwiaC1hdXRvXCIgOiAnaC1bJyArIGl0ZW0ubm9kZVByb3BlcnRpZXMuaGVpZ2h0ICsgJ10nO1xuICAgIGxldCB3X3dpZHRoID0gKGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkdGggPT0gXCJcIikgPyBcInctZnVsbFwiIDogaXRlbS5ub2RlUHJvcGVydGllcy53aWR0aDtcbiAgICBjb25zdCBpdGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaXRlbURpdi5jbGFzc0xpc3QuYWRkKHdfd2lkdGgsIHdfaGVpZ2h0LCAnYm9yZGVyJywgJ3AtMScpO1xuXG4gICAgY29uc3QgZmxleENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGZsZXhDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdqdXN0aWZ5LWJldHdlZW4nLCAnaXRlbXMtY2VudGVyJywgJ3RleHQtZ3JheS05MDAnLCAnZGFyazp0ZXh0LXdoaXRlJywgJ2JnLWdyYXktODAwJywgJ214LTInLCAncm91bmRlZC10LWxnJyk7IC8vIEZsZXhib3ggY29udGFpbmVyXG5cbiAgICBjb25zdCB3aWRnZXREaXYgPSB0aGlzLmdldFdpZGdldFRpdGxlRGl2KGl0ZW0sIGRpdilcbiAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQua3BpQ29uZmlnKSB7XG4gICAgICAgIGxldCBhcGlDYWxscyA9IFtdO1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZyhlbGVtZW50LmRhdGFzZXRJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YXNldDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5kYXRhc2V0VHlwZSAhPT0gXCJzcWxRdWVyeVwiICYmIGRhdGFzZXQuZGF0YXNldFR5cGUgIT09IFwicGxhaW5qc29uXCIpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YXNldFdpdGhMaW1pdCA9IHRoaXMuc2V0RGF0YVNldHNMaW1pdChkYXRhc2V0KTtcbiAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChkYXRhc2V0V2l0aExpbWl0LCBkYXRhc2V0V2l0aExpbWl0LmRhdGFzZXRJZCwgdGhpcy5kZWZhdWx0QXBwbHllZEZpbHRlcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXBpQ2FsbHMucHVzaCh0aGlzLmRhdGFzZXRTZXJ2aWNlLmdldERhdGFGcm9tRGF0YVNldChkYXRhc2V0LCBkYXRhc2V0LmRhdGFzZXRJZCwgdGhpcy5kZWZhdWx0QXBwbHllZEZpbHRlcikpO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKGFwaUNhbGxzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICAgICAgICAgIGVsZW1lbnQua3BpQ29uZmlnWydkYXRhU291cmNlJ10gPSB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZWxlbWVudC5kYXRhc2V0SWRdXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkRHluYW1pY0NvbXBvbmVudChlbGVtZW50LCBjb21wX29iamVjdCwgaXRlbURpdik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgZmxleENvbnRhaW5lci5hcHBlbmRDaGlsZCh3aWRnZXREaXYpO1xuXG4gICAgLy8gQ3JlYXRlIGJ1dHRvbnMgY29udGFpbmVyIGZvciBhbGlnbm1lbnRcbiAgICBjb25zdCBidXR0b25zQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgYnV0dG9uc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ214LTInKTsgLy8gVG8gYWxpZ24gYnV0dG9ucyBzaWRlIGJ5IHNpZGUgd2l0aCBzb21lIHNwYWNpbmdcblxuXG4gICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBpbm5lckRpdi5jbGFzc0xpc3QuYWRkKCdyb3VuZGVkJywgJ2p1c3RpZnktY2VudGVyJywgJ2l0ZW1zLWNlbnRlcicsICdwLTEnLCAnbS0xJywgJ2ZsZXgnLCAnZmxleC1yb3cnKTtcblxuICAgIGNvbnN0IGJ1dHRvbl9jaGFydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGJ1dHRvbl9jaGFydC5pbm5lclRleHQgPSAnQWRkIFZpZXcnO1xuICAgIGJ1dHRvbl9jaGFydC5jbGFzc0xpc3QuYWRkKCdiZy1ncmVlbi03MDAnLCBcInAtMVwiLCBcInctZml0XCIsIFwiY3Vyc29yLXBvaW50ZXJcIiwgJ3RleHQteHMnKVxuICAgIGJ1dHRvbl9jaGFydC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZpbmRJbmRleChvYmplY3QgPT4gb2JqZWN0LndpZGdldElkID09PSBkaXYud2lkZ2V0SWQpO1xuICAgICAgY29uc3QgY29tcF9vYmplY3QgPSB0aGlzLmZpbmRXaWRnZXRCeUlkKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMsIGl0ZW0uaWQpO1xuICAgICAgdGhpcy5pbnNlcnRDaGFydFdpZ2V0KGNvbXBfb2JqZWN0LCBpdGVtRGl2KTtcbiAgICB9KTtcblxuXG4gICAgY29uc3QgZGVsX2J1dHRvbl9jaGFydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRlbF9idXR0b25fY2hhcnQuaW5uZXJUZXh0ID0gJ0RldGV0ZSc7XG4gICAgZGVsX2J1dHRvbl9jaGFydC5jbGFzc0xpc3QuYWRkKCdiZy1yZWQtNzAwJywgXCJwLTFcIiwgXCJ3LWZpdFwiLCBcImN1cnNvci1wb2ludGVyXCIsICd0ZXh0LXhzJylcbiAgICBkZWxfYnV0dG9uX2NoYXJ0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IGNvbmZpcm0oXCI8aT5BcmUgWW91IFN1cmU/PC9pPlwiLCBcIkRlbGV0ZSBWaWV3XCIpO1xuICAgICAgcmVzdWx0LnRoZW4oKGRpYWxvZ1Jlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoZGlhbG9nUmVzdWx0KSB7XG4gICAgICAgICAgbGV0IHdpZGdldEluZGV4ID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5maW5kSW5kZXgob2JqZWN0ID0+IG9iamVjdC53aWRnZXRJZCA9PT0gZGl2LndpZGdldElkKTtcbiAgICAgICAgICBjb25zdCBtYXBlZE9iamVjdCA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbd2lkZ2V0SW5kZXhdXG4gICAgICAgICAgaWYgKG1hcGVkT2JqZWN0LndpZGdldE5vZGUgJiYgbWFwZWRPYmplY3Qud2lkZ2V0Tm9kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgbWFwSW5kZXggPSBtYXBlZE9iamVjdC53aWRnZXROb2RlLmZpbmRJbmRleChpbmQgPT4gaW5kLmlkID09PSBpdGVtLmlkKVxuICAgICAgICAgICAgbWFwZWRPYmplY3Qud2lkZ2V0Tm9kZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZyA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZpZXdJZCk7XG4gICAgICAgICAgICAgIG5vZGUuY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcyA9IFtdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBtYXBlZE9iamVjdC53aWRnZXROb2RlLnNwbGljZShtYXBJbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcGVkT2JqZWN0WydmaWx0ZXJJZCddID0gKG1hcGVkT2JqZWN0LmZpbHRlcnMpID8gbWFwZWRPYmplY3QuZmlsdGVycy5maWx0ZXJJZCA6IG51bGw7XG4gICAgICAgICAgZGVsZXRlIG1hcGVkT2JqZWN0WydmaWx0ZXJzJ107XG4gICAgICAgICAgbWFwZWRPYmplY3QuY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcyA9IFtdO1xuICAgICAgICAgIHRoaXMuc2VydmljZS5lZGl0QXBwV2lkZ2V0Q29uZmlnKG1hcGVkT2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmdldEFwcFBhZ2VEZXRhaWxDb25maWdCeVBhZ2VJZCgpXG4gICAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnV2lkZ2V0IENyZWF0aW9uJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaXRlbURpdi5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgLy8gaW5uZXJEaXYuYXBwZW5kQ2hpbGQoYnV0dG9uX2NoYXJ0KTtcbiAgICAvLyBpbm5lckRpdi5hcHBlbmRDaGlsZChkZWxfYnV0dG9uX2NoYXJ0KTtcbiAgICAvLyBBcHBlbmQgYnV0dG9ucyB0byBidXR0b25zIGNvbnRhaW5lclxuICAgIGJ1dHRvbnNDb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uX2NoYXJ0KTtcbiAgICBidXR0b25zQ29udGFpbmVyLmFwcGVuZENoaWxkKGRlbF9idXR0b25fY2hhcnQpO1xuXG4gICAgLy8gQWRkIHRoZSBidXR0b25zIGNvbnRhaW5lciB0byB0aGUgZmxleCBjb250YWluZXJcbiAgICBmbGV4Q29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbnNDb250YWluZXIpO1xuICAgIGlmICghdGhpcy5pc0Rhc2hCb2FyZENvbnRlbnRUeXBlVmlldykge1xuICAgIH1cbiAgICBpdGVtRGl2LmFwcGVuZENoaWxkKGZsZXhDb250YWluZXIpO1xuICAgIC8vIGl0ZW1EaXYuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcblxuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbURpdilcblxuXG5cbiAgfVxuXG5cblxuICBmaW5kV2lkZ2V0QnlJZChjb25maWdzOiBhbnlbXSwgaWQ6IHN0cmluZyk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuICAgICAgaWYgKGNvbmZpZy5pZCA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcud2lkZ2V0Tm9kZSAmJiBjb25maWcud2lkZ2V0Tm9kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kV2lkZ2V0QnlJZChjb25maWcud2lkZ2V0Tm9kZSwgaWQpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRlbGV0ZVdpZGdldEJ5SWQoY29uZmlnczogYW55W10sIGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBpID0gY29uZmlncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGNvbmZpZ3NbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgIGNvbmZpZ3Muc3BsaWNlKGksIDEpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWdzW2ldLndpZGdldE5vZGUgJiYgY29uZmlnc1tpXS53aWRnZXROb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXRCeUlkKGNvbmZpZ3NbaV0ud2lkZ2V0Tm9kZSwgaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxvYWREeW5hbWljQ29tcG9uZW50KGRhdGEsIGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50KTogYW55IHtcbiAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuY29tcG9uZW50Q2xhc3NNYXBbZGF0YS5rcGlDb25maWdbJ2NvbXBvbmVudE5hbWUnXV07XG4gICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuQ29tcFJlZnMuaW5zdGFuY2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmNoYXJ0RGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmtwaV9uYW1lID0gXCJcIjtcblxuICAgIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IFwidy1mdWxsXCI7XG4gICAgdGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY3NzQ2xhc3MpO1xuICAgIGNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5Db21wUmVmcy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIGxvYWRGaWx0ZXJDb21wb25lbnQoaW5kZXhPYmosIGNvbnRhaW5lckVsZW1lbnQsIGZpbHRlckl0ZW1zLCBjb250ZXh0X2ZpbHRlcikge1xuICAgIFxuICAgIGxldCBzZWxlY3RlZERhdGVzID0geyBzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5kZWZhdWx0RW5kRGF0ZSB9XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwWydBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50J107XG4gICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuQ29tcFJlZnMuaW5zdGFuY2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuXG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmNvbnRleHRGaWx0ZXJJdGVtcyA9IGNvbnRleHRfZmlsdGVyO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5wYWdlVGl0bGUgPSB0aGlzLnBhZ2VUaXRsZTtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuaXNFZGl0QnV0dG9uID0gZmFsc2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmlzQWR2YW5jZUJ1dHRvbiA9IHRydWU7XG5cbiAgICBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgY29uc3QgY3NzQ2xhc3MgPSBcInctZnVsbFwiO1xuICAgIHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTtcbiAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBsb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50LCBmaWx0ZXJJdGVtcykge1xuICAgIGxldCB1c2VyTmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyX25hbWUnKVxuICAgIGxldCBzZWxlY3RlZERhdGVzID0geyBzdGFydERhdGU6IHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSwgZW5kRGF0ZTogdGhpcy5kZWZhdWx0RW5kRGF0ZSB9XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwWydBZHZhbmNlV2lkZ2V0SGVhZGVyRmlsdGVyQ29tcG9uZW50J107XG4gICAgdGhpcy5Db21wUmVmcyA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuQ29tcFJlZnMuaW5zdGFuY2U7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkRGF0ZXMgPSBzZWxlY3RlZERhdGVzO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5maWx0ZXJJdGVtcyA9IGZpbHRlckl0ZW1zO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5nZXRXaWRnZXRGaWx0ZXJDb25maWcuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLmdldFdpZGdldEZpbHRlckZvclRlbXBsYXRlKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGluZGV4T2JqLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMucHVzaCh0aGlzLkNvbXBSZWZzKTtcbiAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBnZXREZWxldGVWaWV3RnJvbUNvbmZpZyhpbmRleCkge1xuICAgIGNvbnNvbGUubG9nKGluZGV4KTtcbiAgICB0aGlzLmFsbFdpZGdldElubmVyQ29udGVudC5zcGxpY2UoaW5kZXgsIDEpXG4gIH1cblxuICBtb3ZlSXRlbUZvclBhZ2VWaWV3KGluZGV4OiBudW1iZXIsIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJyk6IHZvaWQge1xuICAgIC8vIFByZXZlbnQgbW92aW5nIGJleW9uZCBhcnJheSBib3VuZHNcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGluZGV4IC0gMSA6IGluZGV4ICsgMTtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUubGVuZ3RoKSByZXR1cm47XG5cbiAgICAvLyBNb3ZlIGl0ZW1cbiAgICBjb25zdCBpdGVtVG9Nb3ZlID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlW2luZGV4XTtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUuc3BsaWNlKGluZGV4LCAxKTsgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaXRlbVRvTW92ZSk7IC8vIEluc2VydCBpdGVtIGluIG5ldyBwb3NpdGlvblxuICB9XG4gIG1vdmVJdGVtRm9yQ29sdW1ucyhpbmRleDogbnVtYmVyLCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmFsbFdpZGdldElubmVyQ29udGVudC5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGluZGV4IC0gMSA6IGluZGV4ICsgMTtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLmFsbFdpZGdldElubmVyQ29udGVudC5sZW5ndGgpIHJldHVybjtcblxuICAgIC8vIE1vdmUgaXRlbVxuICAgIGNvbnN0IGl0ZW1Ub01vdmUgPSB0aGlzLmFsbFdpZGdldElubmVyQ29udGVudFtpbmRleF07XG4gICAgdGhpcy5hbGxXaWRnZXRJbm5lckNvbnRlbnQuc3BsaWNlKGluZGV4LCAxKTsgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgdGhpcy5hbGxXaWRnZXRJbm5lckNvbnRlbnQuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpdGVtVG9Nb3ZlKTsgLy8gSW5zZXJ0IGl0ZW0gaW4gbmV3IHBvc2l0aW9uXG4gIH1cblxuICBtb3ZlSXRlbUZvcldpZGdldChpbmRleDogbnVtYmVyLCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlyZWN0aW9uID09PSAndXAnID8gaW5kZXggLSAxIDogaW5kZXggKyAxO1xuICAgIC8vIFByZXZlbnQgbW92aW5nIGJleW9uZCBhcnJheSBib3VuZHNcbiAgICBpZiAobmV3UG9zaXRpb24gPCAwIHx8IG5ld1Bvc2l0aW9uID49IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICAvLyBNb3ZlIGl0ZW1cbiAgICBjb25zdCBpdGVtVG9Nb3ZlID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1tpbmRleF07XG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5zcGxpY2UoaW5kZXgsIDEpOyAvLyBSZW1vdmUgaXRlbSBmcm9tIGN1cnJlbnQgcG9zaXRpb25cbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaXRlbVRvTW92ZSk7IC8vIEluc2VydCBpdGVtIGluIG5ldyBwb3NpdGlvblxuICB9XG5cbiAgZ2V0RWRpdFZpZXdGcm9tTGF5b3V0KGRhdGEsIGluZGV4KSB7XG5cbiAgICB0aGlzLmlzRWRpdE1haW5MYXlvdXQgPSB0cnVlO1xuICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hhcnRCdXR0b25DbGljayA9IGZhbHNlO1xuICAgIHRoaXMuaXNVcGRhdGVXaWRnZXQgPSBmYWxzZTtcbiAgICB0aGlzLndpZGdldE5hbWUgPSBkYXRhLndpZGdldE5hbWU7XG4gICAgdGhpcy53aWRnZXRUaXRsZSA9IGRhdGEud2lkZ2V0VGl0bGU7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcklkID0gZGF0YS5maWx0ZXJzLmZpbHRlcklkO1xuICAgIHRoaXMuYWRkZWR3aWRHZXRDb25maWcgPSBkYXRhLndpZGdldFByb3BlcnRpZXM7XG4gIH1cblxuXG4gIGJhY2tUb01haW5WaWV3KCkge1xuICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IHRydWU7XG4gICAgdGhpcy5pc1VwZGF0ZVdpZGdldCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hhcnRCdXR0b25DbGljayA9IGZhbHNlO1xuICAgIHRoaXMuaXNFZGl0TWFpbkxheW91dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNsYXlvdXRDcmVhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZpbHRlclZpZXdzKCkge1xuICAgIGlmICh0aGlzLnZpZXdUb1NlYXJjaC50cmltKCkgIT09ICcnKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQ29tcG9uZW50Q29uZmlnID0gdGhpcy5jb21wb25lbnRDb25maWdEYXRhU291cmNlLmZpbHRlcigoaXRlbTogYW55KSA9PlxuICAgICAgICBpdGVtLnZpZXdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy52aWV3VG9TZWFyY2gudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRDb21wb25lbnRDb25maWcgPSB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2U7XG4gICAgfVxuICB9XG5cbiAgZWRpdENvbXBvbmVudFZpZXdzKGl0ZW0pIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5lZGl0SXRlbUZvclVwZGF0ZSA9IGl0ZW07XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVXaWRnZXQgJiYgIXRoaXMuaXNDaGFydEJ1dHRvbkNsaWNrKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlld0lkID0gaXRlbS52aWV3SWQ7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0NyZWF0ZU5ld1ZpZXdXaXRoRGVmYXVsdFZpZXcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgfSwgNDAwKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAndmlld0lkJzogaXRlbS52aWV3SWQsXG4gICAgICAgICAgJ3BhZ2VJZCc6IHRoaXMucGFnZUlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uQ29udGVudC9hcHBsaWNhdGlvblZpZXdzJ10sIG5hdmlnYXRpb24pO1xuICAgIH1cbiAgfVxuICBlZGl0Q29tcG9uZW50RGF0YXNldHMoaXRlbSkge1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXRJdGVtRm9yVXBkYXRlID0gaXRlbTtcbiAgICBpZiAodGhpcy5pc1VwZGF0ZVdpZGdldCAmJiAhdGhpcy5pc0NoYXJ0QnV0dG9uQ2xpY2spIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhc2V0SWQgPSBpdGVtLmRhdGFzZXRJZDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzQ3JlYXRlRGF0YXNldFdpdGhEYXRhc2V0SWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgfSwgNDAwKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAndmlld0lkJzogaXRlbS52aWV3SWQsXG4gICAgICAgICAgJ3BhZ2VJZCc6IHRoaXMucGFnZUlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uQ29udGVudC9hcHBsaWNhdGlvblZpZXdzJ10sIG5hdmlnYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbFBhZ2UoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkNvbnRlbnQvYXBwbGljYXRpb25EYXNoYm9hcmQnXSk7XG4gIH1cblxuICB0cmFuc2Zvcm1Db2x1bW5zRm9yQ29sdW1ucyhpbnB1dENvbHVtbnMpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gW107XG5cbiAgICBpbnB1dENvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgZGF0YUZpZWxkOiBjb2wuZGF0YUZpZWxkLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjYXB0aW9uOiBjb2wuY2FwdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuXG4gIGdldENyZWF0ZURhdGFTZXRQYWdlKCkge1xuICAgIHRoaXMuaXNDcmVhdGVEYXRhc2V0ID0gdHJ1ZTtcbiAgfVxuXG4gIGdldENyZWF0ZVZpZXdQYWdlKCkge1xuXG4gICAgdGhpcy5zZWxlY3RlZFZpZXdJZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgIH0sIDQwMCk7XG4gIH1cblxuXG4gIGdldEVtaXROZXdDaGFydENvbmdpZyhldmVudCkge1xuICAgIGRlbGV0ZSBldmVudC5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICB0aGlzLmVkaXRJdGVtRm9yVXBkYXRlWydrcGlDb25maWcnXSA9IGV2ZW50LmtwaUNvbmZpZztcblxuICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdEl0ZW1Gb3JVcGRhdGUpO1xuICAgIHRoaXMuc2VydmljZS51cGRhdGVBcHBWaWV3Q29uZmlnKHRoaXMuZWRpdEl0ZW1Gb3JVcGRhdGUpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNFZGl0T3B0aW9uQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVmlldyBVcGRhdGUgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICBnZXRWaWV3UGFnZSgpIHtcbiAgICBsZXQgbmF2aWdhdGlvbkV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIFwicGFnZUlkXCI6IHRoaXMucGFnZUlkXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnBhZ2VVcmxdLCBuYXZpZ2F0aW9uRXh0cmFzKVxuXG4gIH1cbiAgLy8gbm9kZXByb3BlcnRpY2UgZmlsdGVyIFxuXG4gIGdldE5vZGVQcm9wZXJ0aWNlRmlsdGVyT3B0aW9uKCkge1xuICAgIGxldCBvYmogPSB7XG4gICAgICBpbnB1dF90eXBlOiBcInRleHRcIixcbiAgICAgIHNlcnZlcl9jb2x1bW46IFwiXCIsXG4gICAgICBsb2NhbF9jb2x1bW46IFwiXCIsXG4gICAgICBzZWxlY3RfYm94X29wdGlvbjogXCJcIixcbiAgICB9XG4gICAgdGhpcy5ub2RlUHJvcGVydGljZUZpbHRlcnMucHVzaChvYmopXG4gIH1cblxuICBkZWxldGVOb2RlRmlsdGVyKGluZGV4KSB7XG4gICAgdGhpcy5ub2RlUHJvcGVydGljZUZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKVxuICB9XG5cbiAgc2V0RGF0YVNldHNMaW1pdChkYXRhc2V0KSB7XG4gICAgbGV0IGxpbWl0ID0geyBcImxpbWl0XCI6IFwiMTBcIiB9XG4gICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcucmVxRmllbGRzLnB1c2gobGltaXQpO1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG5cbiAgZ2V0Vmlld1BvcHVwSGlkZShlKSB7XG4gICAgdGhpcy5nZXRBbGxWaWV3c0l0ZW1zKCk7XG4gIH1cblxuICBnZXREYXRhc2V0UG9wdXBIaWRlKGUpIHtcblxuICB9XG5cbiAgc3VibWl0RmlsdGVyKCkge1xuXG4gIH1cblxuICBnZXRXaWRnZXRGaWx0ZXJGb3JUZW1wbGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMuZ2V0RGF0YVNldCgpO1xuICB9XG5cbiAgZ2V0RGVsZXRlVmlld0Zyb21MYXlvdXQoaXRlbSwgaSkge1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuc3BsaWNlKGksIDEpO1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgd2lkZ2V0LmNvbXBDb25maWcudmlld0NvbmZpZyA9IHdpZGdldC5jb21wQ29uZmlnLnZpZXdDb25maWcubWFwKGNvbmZpZyA9PiBjb25maWcudmlld0lkKTtcbiAgICAgIHdpZGdldC5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzID0gW107XG4gICAgICBpZiAod2lkZ2V0LndpZGdldE5vZGUgJiYgd2lkZ2V0LndpZGdldE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICB3aWRnZXQud2lkZ2V0Tm9kZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgIG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnID0gbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcubWFwKGNvbmZpZyA9PiBjb25maWcudmlld0lkKTtcbiAgICAgICAgICBub2RlLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMgPSBbXTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCB3aWRnZXREYXRhID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWc7XG4gICAgd2lkZ2V0RGF0YVsnd2lkZ2V0cyddID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5tYXAoaXRlbSA9PiBpdGVtLndpZGdldElkKTtcbiAgICB3aWRnZXREYXRhWydmaWx0ZXJJZCddID0gKHdpZGdldERhdGEuZmlsdGVycykgPyB3aWRnZXREYXRhLmZpbHRlcnMuZmlsdGVySWQgOiBudWxsO1xuICAgIGRlbGV0ZSB3aWRnZXREYXRhWydmaWx0ZXJzJ107XG5cbiAgICB0aGlzLnNlcnZpY2UuZWRpdEFwcFBhZ2VDb25maWcod2lkZ2V0RGF0YSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkxheW91dCBEZWxldGVkIFN1Y2Nlc3NmdWxseVwiKVxuICAgICAgICB0aGlzLmdldEFwcFBhZ2VEZXRhaWxDb25maWdCeVBhZ2VJZCgpXG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnV2lkZ2V0IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICAvLyBhZHZhbmNlIExheW91dCBcbiAgaXNBZHZhbmNlTGF5b3V0OiBib29sZWFuO1xuICBpc1Byb2NlZWQ6IGJvb2xlYW47XG4gIHNlbGVjdGVkVmlld3NJZHM6IGFueSA9IFtdO1xuICBhZHZhbmNlTGF5b3V0Q29udGFpbmVyOiBhbnkgPSBbXTtcbiAgZ2V0UHJvY2Vzc0ZvckNvbmZpZygpIHtcbiAgICB0aGlzLmFkdmFuY2VMYXlvdXRDb250YWluZXIgPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2UuZmlsdGVyKGNvbHVtbiA9PiB0aGlzLnNlbGVjdGVkVmlld3NJZHMuaW5jbHVkZXMoY29sdW1uLnZpZXdJZCkpO1xuICAgIGNvbnN0IGNvbHVtbkRlZkxpc3QgPSBbXTtcblxuICAgIGZpbHRlcmVkQ29sdW1ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgLy8gY29uc3QgZXhpc3RpbmdDb2x1bW4gPSBmYWxzZTtcbiAgICAgIGxldCBvYmogPSB7XG4gICAgICAgIFwiaWRcIjogdGhpcy5jb21tb25TZXJ2aWNlLnByaW1lcnlSZW5kb21lSWQoNSksXG4gICAgICAgIFwibm9kZVRpdGxlXCI6IFwiXCIsXG4gICAgICAgIFwiY29tcENvbmZpZ1wiOiB7XG4gICAgICAgICAgXCJkeW5hbWljQ29tcG9uZW50UmVmc1wiOiBbXSxcbiAgICAgICAgICBcInZpZXdDb25maWdcIjogW2VsZW1lbnRdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsdGVySWRcIjogbnVsbCxcbiAgICAgICAgXCJub2RlUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgXCJkaXNwbGF5XCI6IHRydWUsXG4gICAgICAgICAgXCJ3aWRnZXRUaXRsZVwiOiBcIlwiLFxuICAgICAgICAgIFwid2lkdGhcIjogXCJcIixcbiAgICAgICAgICBcImhlaWdodFwiOiBcIlwiLFxuICAgICAgICAgIFwiaXNXaWRnZXRGaWx0ZXJcIjogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5hZHZhbmNlTGF5b3V0Q29udGFpbmVyLnB1c2gob2JqKTtcblxuICAgIH0pO1xuXG4gICAgdGhpcy5pc1Byb2NlZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRDb2x1bW5Tb3VyY2UoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3c0lkcyA9IGV2ZW50LnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHN1Ym1pdEFkdmFuY2VWaWV3KCkge1xuICAgIGlmICh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUgJiYgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlID0gWy4uLnRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZSwgLi4udGhpcy5hZHZhbmNlTGF5b3V0Q29udGFpbmVyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlID0gdGhpcy5hZHZhbmNlTGF5b3V0Q29udGFpbmVyO1xuICAgIH1cbiAgICB0aGlzLmlzQWR2YW5jZUxheW91dCA9IGZhbHNlO1xuICAgIHRoaXMuYWR2YW5jZUxheW91dENvbnRhaW5lciA9IFtdO1xuICAgIHRoaXMuaXNQcm9jZWVkID0gZmFsc2U7XG4gICAgdGhpcy51cGRhdGVXaWRnZXQoKTtcbiAgfVxuXG5cblxuICBkZWxldGVWaWV3KGkpIHtcblxuICB9XG59XG4iLCI8YXBwLWxvYWRpbmcgKm5nSWY9XCJsb2FkaW5nTW9kYWxcIj48L2FwcC1sb2FkaW5nPlxuXG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBoLVs5MHZoXSB3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwidy0zLzQgYm9yZGVyLXIgaC1mdWxsIGZsZXggZmxleC1jb2wgcHgtMlwiPlxuICAgICAgICA8IS0tIFNjcm9sbGFibGUgY29udGVudCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3JvdyBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBteS0zXCIgI2R5bmFtaWNDb250YWluZXI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRml4ZWQgYm90dG9tIHNlY3Rpb24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBoLTE2IG0tMiBib3JkZXIgc2hyaW5rLTBcIj5cbiAgICAgICAgICAgIDxsaWItY29tbW9uLWhlYWRlciBbcGFnZVRpdGxlXT1cIicnXCI+PC9saWItY29tbW9uLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fSBtLTJcIiAoY2xpY2spPVwiYWRkV2lkZ2V0KClcIj5BZGQgTGF5b3V0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bk90aGVyc1B1cnBsZX19IG0tMiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJnZXRWaWV3UGFnZSgpXCI+VmlldyBQYWdlPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEvNCBwLTIgaC1mdWxsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Rhc2hCb2FyZENvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuRGFya0JsYWNrfX0gbS0yIHctZml0IHRleHQtY2VudGVyIGN1cnNhci1wb2ludGVyXCIgKGNsaWNrKT1cImJhY2tUb01haW5WaWV3KClcIj5cbiAgICAgICAgICAgICAgICBCYWNrXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGFnZV9jb25maWcuYXBpX2NvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBib3JkZXItYlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBweS0yIGZvbnQtYm9sZCAgdGV4dC13aGl0ZSBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ud2lkR2V0Q29uZmlnLndpZGdldFRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIChjbGljayk9XCJlZGl0U2VsZWN0ZWRXaWRnZXQoaXRlbSwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy04IGgtOCBiZy1za3ktNjAwIGhvdmVyOmJnLWJsdWUtODAwIHRleHQtd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy04IGgtOCBiZy1yZWQtNjAwIGhvdmVyOmJnLXJlZC04MDAgdGV4dC13aGl0ZSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzV2lkZ2V0Q3JlYXRpb25Db250ZW50XCI+XG4gICAgICAgICAgICA8aDYgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LWxnIHRyYWNraW5nLXRpZ2h0IHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJvcmRlci1iIHBiLTNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc2xheW91dENyZWF0ZVwiPldpZGdldCBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzbGF5b3V0Q3JlYXRlXCI+TGF5b3V0IFNldHRpbmdzPC9zcGFuPlxuICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG15LTRcIj5cbiAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IGNsYXNzPVwibWwtYXV0b1wiIFsobmdNb2RlbCldPVwiYWRkZWR3aWRHZXRDb25maWcuZGlzcGxheVwiIHRleHQ9XCJEaXNwbGF5XCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG1iLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW1kIG15LWF1dG8gcHgtMlwiPldpZHRoPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IGNsYXNzPVwidy0xLzJcIiBbaXRlbXNdPVwid2lkZ2V0X3dpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhZGRlZHdpZEdldENvbmZpZy53aWR0aFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbWItMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbWQgbXktYXV0byBweC0yXCI+SGVpZ2h0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBjbGFzcz1cInctMS8yXCIgWyhuZ01vZGVsKV09XCJhZGRlZHdpZEdldENvbmZpZy5oZWlnaHRcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG1iLTIganVzdGlmeS1iZXR3ZWVuXCIgKm5nSWY9XCIhaXNsYXlvdXRDcmVhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBteS1hdXRvIHB4LTJcIj5XaWRnZXQgVGl0bGU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PjxkeC10ZXh0LWJveCBjbGFzcz1cInctMS8yXCIgWyhuZ01vZGVsKV09XCJ3aWRnZXRUaXRsZVwiPjwvZHgtdGV4dC1ib3g+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG1iLTIganVzdGlmeS1iZXR3ZWVuXCIgKm5nSWY9XCIhaXNsYXlvdXRDcmVhdGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbWQgbXktYXV0byBweC0yXCI+V2lkZ2V0IE5hbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGNsYXNzPVwidy0xLzJcIiBbKG5nTW9kZWwpXT1cIndpZGdldE5hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbWItNSBqdXN0aWZ5LWJldHdlZW5cIiAqbmdJZj1cImlzbGF5b3V0Q3JlYXRlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIG15LWF1dG8gcHgtMlwiPkxheW91dCBUaXRsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggY2xhc3M9XCJ3LTEvMlwiIFsobmdNb2RlbCldPVwiYWRkZWR3aWRHZXRDb25maWcud2lkZ2V0VGl0bGVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG1iLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW1kIG15LWF1dG8gcHgtMlwiPkZpbHRlcjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBjbGFzcz1cInctMS8yXCIgW2l0ZW1zXT1cImZpbHRlckRhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cImZpbHRlck5hbWVcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVFeHByPVwiZmlsdGVySWRcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRmlsdGVySWRcIlxuICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0RmlsdGVyVmFsdWVCeUlkKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNVcGRhdGVXaWRnZXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiICpuZ0lmPVwiIWlzbGF5b3V0Q3JlYXRlICYmIGlzRWRpdE1haW5MYXlvdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbbmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGU7bGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGJvcmRlci1iIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIHB5LTIgZm9udC1ib2xkICB0ZXh0LXdoaXRlIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImkgIT09IDBcIiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvclBhZ2VWaWV3KGksICd1cCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImkgIT09ICBkYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1tuZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9yUGFnZVZpZXcoaSwgJ2Rvd24nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTggaC04IGJnLXJlZC02MDAgaG92ZXI6YmctcmVkLTgwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNVcGRhdGVXaWRnZXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBweS0xIGZvbnQtZXh0cmFib2xkIGJvcmRlci1iIGJnLWdyYXktNzAwIHRleHQtd2hpdGUgcHgtMlwiPiBBcHBsaWNhdGlvbiBWaWV3c1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhbGxXaWRnZXRJbm5lckNvbnRlbnQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cCAgdy1mdWxsIGZsZXgganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCAgcHktMiBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0udmlld05hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSAwXCIgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JDb2x1bW5zKGksICd1cCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gYWxsV2lkZ2V0SW5uZXJDb250ZW50Lmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JDb2x1bW5zKGksICdkb3duJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyb3VuZGVkLWZ1bGwgcC0yIHRleHQtd2hpdGUgYmctYmx1ZS01MDAgaG92ZXI6YmctYmx1ZS03MDAgbWItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdENvbXBvbmVudFZpZXdzKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV5ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyb3VuZGVkLWZ1bGwgcC0yIHRleHQtd2hpdGUgYmctYmx1ZS01MDAgaG92ZXI6YmctYmx1ZS03MDAgbWItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdENvbXBvbmVudERhdGFzZXRzKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRhdGFiYXNlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJvdW5kZWQtZnVsbCBwLTIgdGV4dC13aGl0ZSBiZy1yZWQtNTAwIGhvdmVyOmJnLXJlZC03MDAgbWItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0RGVsZXRlVmlld0Zyb21Db25maWcoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVXBkYXRlV2lkZ2V0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gcHktMSBmb250LWV4dHJhYm9sZCBib3JkZXItYiBiZy1ncmF5LTcwMCB0ZXh0LXdoaXRlIHB4LTJcIj4gQWRkIEZpbHRlciBGb3IgVmlld1xuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci14IGJvcmRlci1iIHAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBweS0zIGJvcmRlci1iXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwiYWRkZWR3aWRHZXRDb25maWcuaXNXaWRnZXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJQb3B1cCBDb2x1bW5zIEZpbHRlciBFbmFibGVcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG15LTIgYm9yZGVyLWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygbm9kZVByb3BlcnRpY2VGaWx0ZXJzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGJvcmRlci1iXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIHctMS8zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZFwiPklucHV0IFR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJbJ3RleHQnXVwiIFsobmdNb2RlbCldPVwiaXRlbS5pbnB1dF90eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRleHRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMS0xIHctMi8zXCIgKm5nSWY9XCJpdGVtLmlucHV0X3R5cGUgPT0gJ3RleHQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZFwiPlNlcnZlciBDb2x1bW48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0uc2VydmVyX2NvbHVtblwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMS0xIHctMS8yXCIgKm5nSWY9XCJpdGVtLmlucHV0X3R5cGUgPT0gJ3RleHQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZFwiPkxvY2FsIENvbHVtbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5sb2NhbF9jb2x1bW5cIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEtMSB3LTEvM1wiICpuZ0lmPVwiaXRlbS5pbnB1dF90eXBlID09ICdzZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZFwiPkNvbHVtbnMgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RfYm94X29wdGlvblwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMS0xIHctMS8yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IHctMjQgbXQtNiB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVOb2RlRmlsdGVyKGkpXCI+RGVsZXRlIEZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X3NtfX0gdy1hdXRvIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXROb2RlUHJvcGVydGljZUZpbHRlck9wdGlvbigpXCI+QWRkXG4gICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgaC0xNiBtLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bkRhcmtCbGFja319IG0tMiB3LWZpdCB0ZXh0LWNlbnRlciBjdXJzYXItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiYWNrVG9NYWluVmlldygpXCI+QmFja1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNVcGRhdGVXaWRnZXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzbGF5b3V0Q3JlYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gbS0yIHctZml0IHRleHQtY2VudGVyIGN1cnNhci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRMYXlvdXRUT3ZpZXcoKVwiPkFkZCBWaWV3XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzbGF5b3V0Q3JlYXRlICYmICFpc0VkaXRNYWluTGF5b3V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gbS0yIHctZml0IHRleHQtY2VudGVyIGN1cnNhci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRXaWRnZXRUT3ZpZXcoKVwiPkFkZCBMYXlvdXRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNsYXlvdXRDcmVhdGUgJiYgaXNFZGl0TWFpbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19IG0tMiB3LWZpdCB0ZXh0LWNlbnRlciBjdXJzYXItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlTGF5b3V0V2lkZ2V0VE92aWV3KClcIj5VcGRhdGUgTGF5b3V0XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl93YXJuaW5nX21kfX0gbS0yIHctZml0IHRleHQtY2VudGVyIGN1cnNhci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVRvVmlldygpXCIgKm5nSWY9XCJpc1VwZGF0ZVdpZGdldFwiPlVwZGF0ZSBWaWV3XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDwhLS0gPHByZT48Y29kZT57e2Rhc2hCb2FyZFdpZGdldENvbmZpZyB8IGpzb259fTwvY29kZT48L3ByZT4gLS0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDaGFydEJ1dHRvbkNsaWNrXCI+XG4gICAgICAgICAgICA8aDZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgZm9udC1ib2xkIHRleHQtbWQgdHJhY2tpbmctdGlnaHQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYm9yZGVyLWIgcGItMyBmbGV4ICBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhci1jaGFydC1vIG1yLTJcIj48L2k+IFNlbGVjdCBWaWV3XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5EYXJrQmxhY2t9fSBtLTIgdy1maXQgdGV4dC1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvTWFpblZpZXcoKVwiPkJhY2tcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGgtWzgwdmhdIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBteS0yIFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInZpZXdUb1NlYXJjaFwiIChrZXl1cCk9XCJmaWx0ZXJWaWV3cygpXCIgKGtleWRvd24pPVwiZmlsdGVyVmlld3MoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLWdyYXktODAwIGJvcmRlciBib3JkZXItZ3JheS03MDAgdGV4dC1ncmF5LTIwMCB0ZXh0LXNtIGZvY3VzOnJpbmctZ3JheS00MDAgZm9jdXM6Ym9yZGVyLWdyYXktNTAwIGJsb2NrIHctZnVsbCBwLTQgaC04IHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggVmlld1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQteS0wIHJpZ2h0LTAgZmxleCBpdGVtcy1jZW50ZXIgcHItNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicm90YXRlLTkwIGN1cnNvci1wb2ludGVyXCIgW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnNlYXJjaCdcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkQ29tcG9uZW50Q29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBncm91cCBteS0zIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJdGVtIFZpZXcgTmFtZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCBib3JkZXItYiBweS0yIGN1cnNhci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnZpZXdOYW1lfX08L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIb3ZlciBCdXR0b25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgIHJpZ2h0LTAgZmxleCBzcGFjZS14LTIgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0zMDAgcGItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyb3VuZGVkLWZ1bGwgcC0yIHRleHQtd2hpdGUgYmctYmx1ZS01MDAgaG92ZXI6YmctYmx1ZS03MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRDb21wb25lbnRWaWV3cyhpdGVtKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicm91bmRlZC1mdWxsIHAtMiB0ZXh0LXdoaXRlIGJnLWdyZWVuLTUwMCBob3ZlcjpiZy1ncmVlbi03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Q29tcG9uZW50Q29uZmlnKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEZWZhdWx0Vmlld1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cCBteS0zIHctZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiBib3JkZXItYiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkICBweS0yIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0ud2lkZ2V0VGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSAwXCIgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9yV2lkZ2V0KGksICd1cCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9yV2lkZ2V0KGksICdkb3duJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyb3VuZGVkLWZ1bGwgcC0yIHRleHQtd2hpdGUgYmctYmx1ZS01MDAgaG92ZXI6YmctYmx1ZS03MDAgbWItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdldEVkaXRWaWV3RnJvbUxheW91dChpdGVtLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyb3VuZGVkLWZ1bGwgcC0yIHRleHQtd2hpdGUgYmctcmVkLTUwMCBob3ZlcjpiZy1yZWQtNzAwIG1iLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXREZWxldGVWaWV3RnJvbUxheW91dChpdGVtLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG48IS0tIDwvZGl2PiAtLT5cblxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwiaXNFZGl0T3B0aW9uQ2xpY2tcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiIFtkcmFnRW5hYmxlZF09XCJmYWxzZVwiIFt3aWR0aF09XCIxMjAwXCJcbiAgICBbaGVpZ2h0XT1cIidhdXRvJ1wiIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cInt7ZWRpdFZpZXdkYXRhU291cmNlTW9kYWwudmlld05hbWV9fVwiPlxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCdcIj5cblxuICAgICAgICA8YXBwLWRhc2gtY2hhcnQgW2RhdGFzZXRtb2RhbF09XCJlZGl0Vmlld2RhdGFTb3VyY2VNb2RhbFwiIChnZXRDaGFydENvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3Q2hhcnRDb25naWcoJGV2ZW50KVwiXG4gICAgICAgICAgICAqbmdJZj1cImVkaXRWaWV3ZGF0YVNvdXJjZU1vZGFsLnZpZXdUeXBlID09ICdjaGFydCdcIj48L2FwcC1kYXNoLWNoYXJ0PlxuICAgICAgICA8YXBwLWRhc2gtdGFibGUgW2RhdGFzZXRtb2RhbF09XCJlZGl0Vmlld2RhdGFTb3VyY2VNb2RhbFwiIChnZXRUYWJsZUNvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3Q2hhcnRDb25naWcoJGV2ZW50KVwiXG4gICAgICAgICAgICAqbmdJZj1cImVkaXRWaWV3ZGF0YVNvdXJjZU1vZGFsLnZpZXdUeXBlID09ICd0YWJsZSdcIj48L2FwcC1kYXNoLXRhYmxlPlxuICAgICAgICA8IS0tIDxhcHAtZGFzaC1vdGhlciBbZGF0YXNldG1vZGFsXT1cImVkaXRWaWV3ZGF0YVNvdXJjZU1vZGFsXCIgKm5nSWY9XCJlZGl0Vmlld2RhdGFTb3VyY2VNb2RhbC52aWV3VHlwZSA9PSAnb3RoZXJzJ1wiXG4gICAgICAgICAgICAoY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KT1cImdldEVtaXROZXdDaGFydENvbmdpZygkZXZlbnQpXCI+PC9hcHAtZGFzaC1vdGhlcj4gLS0+XG4gICAgPC9kaXY+XG48L2R4LXBvcHVwPlxuXG5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzQ3JlYXRlRGF0YXNldFwiIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCIgW2RyYWdFbmFibGVkXT1cImZhbHNlXCIgW3dpZHRoXT1cIjEyMDBcIlxuICAgIFtoZWlnaHRdPVwiNjAwXCIgW3Nob3dUaXRsZV09XCJ0cnVlXCIgY2xhc3M9XCJwb3B1cFwiIHRpdGxlPVwiRGF0YXNldCBFZGl0b3JcIj5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG4gICAgICAgIDxkeC1zY3JvbGwtdmlldyBjbGFzcz1cImgtZnVsbFwiIFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIicxMDAlJ1wiPlxuICAgICAgICAgICAgPGFwcC1jcmVhdGUtZGF0YXNldCBbaXNIZWFkZXJdPVwiZmFsc2VcIj48L2FwcC1jcmVhdGUtZGF0YXNldD5cbiAgICAgICAgPC9keC1zY3JvbGwtdmlldz5cbiAgICA8L2Rpdj5cbjwvZHgtcG9wdXA+XG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJpc0NyZWF0ZURhdGFzZXRXaXRoRGF0YXNldElkXCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiMTIwMFwiXG4gICAgW2hlaWdodF09XCI2MDBcIiBbc2hvd1RpdGxlXT1cInRydWVcIiBjbGFzcz1cInBvcHVwXCIgdGl0bGU9XCJEYXRhc2V0IEVkaXRvclwiIChvbkhpZGRlbik9XCJnZXREYXRhc2V0UG9wdXBIaWRlKCRldmVudClcIj5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG4gICAgICAgIDxkeC1zY3JvbGwtdmlldyBjbGFzcz1cImgtZnVsbFwiIFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIicxMDAlJ1wiPlxuICAgICAgICAgICAgPGFwcC1jcmVhdGUtZGF0YXNldCBbc2VsZWN0ZWREYXRhc2V0SWRdPVwic2VsZWN0ZWREYXRhc2V0SWRcIiBbaXNIZWFkZXJdPVwiZmFsc2VcIj48L2FwcC1jcmVhdGUtZGF0YXNldD5cbiAgICAgICAgPC9keC1zY3JvbGwtdmlldz5cbiAgICA8L2Rpdj5cbjwvZHgtcG9wdXA+XG5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzQ3JlYXRlTmV3Vmlld1dpdGhEZWZhdWx0Vmlld1wiIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCIgW2RyYWdFbmFibGVkXT1cImZhbHNlXCJcbiAgICBbd2lkdGhdPVwiMTIwMFwiIFtoZWlnaHRdPVwiNjAwXCIgW3Nob3dUaXRsZV09XCJ0cnVlXCIgY2xhc3M9XCJwb3B1cFwiIHRpdGxlPVwiVmlld3MgRWRpdG9yXCJcbiAgICAob25IaWRkZW4pPVwiZ2V0Vmlld1BvcHVwSGlkZSgkZXZlbnQpXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZHgtc2Nyb2xsLXZpZXcgY2xhc3M9XCJoLWZ1bGxcIiBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInMTAwJSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3JlYXRlLWNvbXAtdmlldyBbc2VsZWN0ZWRWaWV3SWRdPVwic2VsZWN0ZWRWaWV3SWRcIiBbaXNIZWFkZXJdPVwiZmFsc2VcIj48L2FwcC1jcmVhdGUtY29tcC12aWV3PlxuICAgICAgICA8L2R4LXNjcm9sbC12aWV3PlxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzQ3JlYXRlTmV3Vmlld1wiIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCIgW2RyYWdFbmFibGVkXT1cImZhbHNlXCIgW3dpZHRoXT1cIjEyMDBcIlxuICAgIFtoZWlnaHRdPVwiNjAwXCIgW3Nob3dUaXRsZV09XCJ0cnVlXCIgY2xhc3M9XCJwb3B1cFwiIHRpdGxlPVwiVmlld3MgRWRpdG9yXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZHgtc2Nyb2xsLXZpZXcgY2xhc3M9XCJoLWZ1bGxcIiBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInMTAwJSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3JlYXRlLWNvbXAtdmlldyBbaXNIZWFkZXJdPVwiZmFsc2VcIj48L2FwcC1jcmVhdGUtY29tcC12aWV3PlxuICAgICAgICA8L2R4LXNjcm9sbC12aWV3PlxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD5cblxuXG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJpc1dpZGdldEZpbHRlcnNcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiIFtkcmFnRW5hYmxlZF09XCJmYWxzZVwiIFt3aWR0aF09XCI4MDBcIiBbaGVpZ2h0XT1cIjQwMFwiXG4gICAgW3Nob3dUaXRsZV09XCJ0cnVlXCIgY2xhc3M9XCJwb3B1cFwiIHRpdGxlPVwiRGF0YXNldCBGaWx0ZXJcIj5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XG4gICAgICAgICAgICA8ZHgtc2Nyb2xsLXZpZXcgW3dpZHRoXT1cIicxMDAlJ1wiIFtoZWlnaHRdPVwiJzg1JSdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5jb2x1bW5OYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJbJ2dldCcsJ2xldCddXCIgWyhuZ01vZGVsKV09XCJpdGVtLm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJPcGVyYXRvclwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8L2R4LXNjcm9sbC12aWV3PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgbXgtMSBmbGV4LWdyb3dcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGaWx0ZXIoKVwiPlN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbjwvZHgtcG9wdXA+XG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJpc0FkdmFuY2VMYXlvdXRcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiIFtkcmFnRW5hYmxlZF09XCJmYWxzZVwiIFt3aWR0aF09XCIxMjAwXCJcbiAgICBbaGVpZ2h0XT1cIjcwMFwiIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cIkRhdGFzZXQgRmlsdGVyXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBweC0yIG1iLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTIvMyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlNlbGVjdCBWaWV3czwvZGl2PlxuICAgICAgICAgICAgICAgIDxkeC10YWctYm94IFtkYXRhU291cmNlXT1cImNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2VcIiB2YWx1ZUV4cHI9XCJ2aWV3SWRcIiBkaXNwbGF5RXhwcj1cInZpZXdOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW211bHRpbGluZV09XCJ0cnVlXCIgW3Nob3dTZWxlY3Rpb25Db250cm9sc109XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZpZXdzSWRzXCJcbiAgICAgICAgICAgICAgICAgICAgW21heERpc3BsYXllZFRhZ3NdPVwiM1wiIChvblZhbHVlQ2hhbmdlZCk9XCJnZXRTZWxlY3RlZENvbHVtblNvdXJjZSgkZXZlbnQpXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDwvZHgtdGFnLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8zIHB4LTJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gbXQtNlwiIChjbGljayk9XCJnZXRQcm9jZXNzRm9yQ29uZmlnKClcIj5cbiAgICAgICAgICAgICAgICAgICAgQWRkIFRvIFZpZXdcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9tZH19IGN1cnNvci1wb2ludGVyIG10LTZcIiAoY2xpY2spPVwiY2FuY2VsQ2RyQ29uZmlnKClcIj5DYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGR4LXNjcm9sbC12aWV3IFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIic4MCUnXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTIgYm9yZGVyLWJcIiAqbmdJZj1cImlzUHJvY2VlZFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWR2YW5jZUxheW91dENvbnRhaW5lcjsgbGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LTEvMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5WaWV3IE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZ1swXS52aWV3TmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPldpZGdldCBUaXRsZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ubm9kZVByb3BlcnRpZXMud2lkZ2V0VGl0bGVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPldpZGdldCBXaWR0aDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwid2lkZ2V0X3dpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZHRoXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPldpZGdldCBIZWlnaHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLm5vZGVQcm9wZXJ0aWVzLmhlaWdodFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPldpZGdldCBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiZmlsdGVyRGF0YVNvdXJjZVwiIGRpc3BsYXlFeHByPVwiZmlsdGVyTmFtZVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI9XCJmaWx0ZXJJZFwiIFsobmdNb2RlbCldPVwiaXRlbS5maWx0ZXJJZFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtdC04XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLm5vZGVQcm9wZXJ0aWVzLmRpc3BsYXlcIiB0ZXh0PVwiRGlzcGxheVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IGN1cnNvci1wb2ludGVyIG10LThcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlVmlldyhpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2R4LXNjcm9sbC12aWV3PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBteC0xIG15LTIgZmxleC1ncm93XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiIChjbGljayk9XCJzdWJtaXRBZHZhbmNlVmlldygpXCI+QWRkXG4gICAgICAgICAgICAgICAgTGF5b3V0PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD4iXX0=
|
|
983
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1jb25maWctbXVsdGktbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9wYWdlLWNvbnRyb2xsZXIvcGFnZS1jb25maWctbXVsdGktbGF5b3V0L3BhZ2UtY29uZmlnLW11bHRpLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvcGFnZS1jb250cm9sbGVyL3BhZ2UtY29uZmlnLW11bHRpLWxheW91dC9wYWdlLWNvbmZpZy1tdWx0aS1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWtHLFNBQVMsRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJcE0sT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNELE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQ3JJLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHNHQUFzRyxDQUFDO0FBQ3pKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhGQUE4RixDQUFDO0FBQzdJLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHdHQUF3RyxDQUFDO0FBQzVKLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHdHQUF3RyxDQUFDO0FBRTVK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QUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDOUs7YUFBTTtZQUNMLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7U0FDbEc7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBSUQsVUFBVSxDQUFDLENBQUM7SUFFWixDQUFDOzsySEF6cUNVLDhCQUE4QjsrR0FBOUIsOEJBQThCLDhLQWlDTyxnQkFBZ0Isb0dBRWhDLGdCQUFnQiwrS0FtRnJDLHFCQUFxQixnREM5SWxDLCsveUJBaWNXOzJGRHphRSw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UscUJBQXFCO3NVQXNDL0IseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUdsRSxZQUFZO3NCQURYLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUVELGdCQUFnQjtzQkFBaEUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBaUZNLFVBQVU7c0JBQTlELFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ2RldmV4dHJlbWUvdWkvZGlhbG9nJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRHhTY3JvbGxWaWV3Q29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGF0c3NldHNDYWxsIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tZGF0YXNldC1jYWxsLnNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtdG9kYXktcHJldmlvdXMvZ2FtbWEtdG9kYXktcHJldmlvdXMuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcEFkdmFuY2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2FwcC1hZHZhbmNlLWhlYWRlci9hcHAtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLXRhYmxlLXdpdGgtcGVyY2VudGFnZS9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IEdhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tLXNpbmdsZS1udW1iZXItY2FyZC9nYW1tLXNpbmdsZS1udW1iZXItY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFBZHZhbmNlT3BlcmF0b3JUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1vcGVyYXRvci10YWJsZS9nYW1tYS1hZHZhbmNlLW9wZXJhdG9yLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlV2lkZ2V0SGVhZGVyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9hZHZhbmNlLXdpZGdldC1oZWFkZXItZmlsdGVyL2FkdmFuY2Utd2lkZ2V0LWhlYWRlci1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvYWR2YW5jZWQtY29tcG9uZW50L2dhbW1hLWFkdmFuY2UtY2hhcnQvZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR2FtbWFHZW9DaGFydENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtZ2VvLWNoYXJ0L2dhbW1hLWdlby1jaGFydC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGFzaGJvcmQtY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtY29uZmlnLW11bHRpLWxheW91dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BhZ2UtY29uZmlnLW11bHRpLWxheW91dC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUGFnZUNvbmZpZ011bHRpbGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBkYXNoYm9yZF9jb250YWluZXI6IGFueSA9IFtdO1xuICBzZWxlY3RlZF93aWR0aDogYW55O1xuICB3aWRnZXRfd2lkdGggPSBbJ3ctZnVsbCcsICd3LTEvMicsICd3LTEvMycsICd3LTIvMycsICd3LTEvNCcsICd3LTMvNCcsICd3LTEvNScsICd3LTQvNScsICd3LTEvNicsICd3LTUvNiddXG4gIGxvYWRpbmdNb2RhbDogYm9vbGVhbiA9IHRydWU7XG4gIGN1c3RvbWVyczogYW55O1xuICBwYWdlSGVhZGVyc0RhdGE6IGFueTtcbiAgcGFnZV90aXRsZSA9ICdEYXNoYm9hcmQnO1xuICBpc1NydlR5cGVPcGVyYXRvcjogYm9vbGVhbjtcbiAgZGVmYXVsdFN0YXJ0RGF0ZTtcbiAgZGVmYXVsdEVuZERhdGU7XG4gIHBhZ2VfY29uZmlnO1xuICBvcGVyYXRpb25MZXZlbHM6IGFueTtcbiAgZmlsdGVyX3ZhbHVlO1xuICBpc1RvZ2dsZVN3aWNoOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNEYXRlUGlja2VyOiBib29sZWFuID0gZmFsc2U7XG4gIGlzVG9nZ2xlRXZlbnRTdGF0dXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNFZGl0Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDb25maWdWaWV3OiBib29sZWFuO1xuICBpc0xvYWRlcjogYm9vbGVhbjtcbiAgY29tcG9uZW50TmFtZTogYW55O1xuICBpc1VwZGF0ZVdpZGdldDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGlzQ2hhcnRCdXR0b25DbGljazogYm9vbGVhbjtcbiAgY2hhcnRBY2Nlc3M6IGFueTtcbiAgY2hhcnRUeXBlOiBhbnk7XG4gIGRhc2hDaGFydENvbVNvdXJjZTogYW55O1xuICBpc0dlbmVyYXRlOiBib29sZWFuXG4gIGlzRmlsdGVySW5wdXRzOiBib29sZWFuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKi9cblxuICBAVmlld0NoaWxkKCdkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGR5bmFtaWNDb21wb25lbnRDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2R5bmFtaWNDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG4gIC8vIGR5bmFtaWNDb21wb25lbnRSZWZzOiBDb21wb25lbnRSZWY8YW55PltdID0gW107XG5cbiAgQ29tcFJlZnM6IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIGNvbXBvbmVudENsYXNzTWFwID0ge1xuICAgIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50LFxuICAgIEdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudCxcbiAgICBBcHBBZHZhbmNlSGVhZGVyQ29tcG9uZW50LFxuICAgIEdhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCxcbiAgICBHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICBHYW1tYUFkdmFuY2VPcGVyYXRvclRhYmxlQ29tcG9uZW50LFxuICAgIEFkdmFuY2VXaWRnZXRIZWFkZXJGaWx0ZXJDb21wb25lbnQsXG4gICAgR2FtbWFHZW9DaGFydENvbXBvbmVudFxuICB9O1xuICBkYXRhU291cmNlTWF0YURhdGE6IGFueSA9IFtdO1xuICBxdWVyeVR5cGUgPSBcIm1vbmdvXCI7XG4gIGRhdGFTZXRNb2RhbDogYW55ID0gW107XG4gIGNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBzZWxlc2NlZERhdGFTb3VyY2U6IGFueTtcbiAgZGF0YVNvdXJjZU1vZGFsOiBhbnkgPSB7fTtcbiAgaXNEYXNoQm9hcmRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VsZWN0ZWRWaWV3Rm9ybUNvbXBvbmVudDogYW55ID0ge307XG4gIGFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgIFwid2lkZ2V0VGl0bGVcIjogXCJcIixcbiAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgXCJoZWlnaHRcIjogXCJcIixcbiAgICBcImlzV2lkZ2V0RmlsdGVyXCI6IGZhbHNlXG4gIH1cblxuICBkYXNoQm9hcmRXaWRnZXRDb25maWc6IGFueSA9IFtcbiAgXTtcbiAgaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQ6IGJvb2xlYW47XG4gIHNlbGVjdGVkV2lkdGg6IGFueTtcbiAgc2VsZWN0ZWRIZWlnaHQ6IGFueTtcbiAgbmV3V2lkZ2V0SW5kZXg6IGFueTtcbiAgc2VsZWN0ZWRJbmRleE9iakZvckNoYXJ0OiBhbnkgPSB7fTtcbiAgc2VsZWN0ZWRDb250YWluZXJPYmplY3RGb3JDaGFydDogYW55ID0ge307XG4gIGRhdGFTZXR0YWJsZURhdGFTb3VyY2U6IGFueTtcbiAgdW5pcXVlRGF0YVNldE9iamVjdCA9IHt9O1xuXG4gIGlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3OiBib29sZWFuO1xuICBwYWdlSWQ6IGFueTtcbiAgaXNsYXlvdXRDcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgd2lkZ2V0TmFtZTogYW55O1xuICB3aWRnZXRUaXRsZTogYW55O1xuICBhbGxXaWRnZXRJbm5lckNvbnRlbnQ6IGFueTtcbiAgaXNEZWZhdWx0VmlldzogQm9vbGVhbiA9IHRydWU7XG4gIGlzRWRpdE1haW5MYXlvdXQ6IEJvb2xlYW47XG4gIGZpbHRlckRhdGFTb3VyY2U6IGFueTtcbiAgc2VsZWN0ZWRGaWx0ZXJJZDogYW55O1xuXG4gIHZpZXdUb1NlYXJjaDogc3RyaW5nID0gJyc7XG4gIGZpbHRlcmVkQ29tcG9uZW50Q29uZmlnOiBhbnlbXSA9IFtdO1xuICBpc0VkaXRPcHRpb25DbGljazogYm9vbGVhbjtcbiAgZWRpdFZpZXdkYXRhU291cmNlTW9kYWw6IGFueSA9IHt9O1xuXG4gIGVkaXRJdGVtRm9yVXBkYXRlOiBhbnkgPSB7fTtcbiAgcGFnZVRpdGxlOiBhbnk7XG4gIHBhZ2VVcmw6IGFueTtcbiAgYWxsV2lkZ2V0QnlEYXRhc2V0OiBhbnkgPSBbXTtcblxuICBzZWxlY3RlZEZpbHRlcnNEZWZhdWx0OiBhbnk7XG5cbiAgbm9kZVByb3BlcnRpY2VGaWx0ZXJzOiBhbnkgPSBbXTtcblxuICBpc0NyZWF0ZURhdGFzZXQ6IGJvb2xlYW47XG4gIHNlbGVjdGVkRGF0YXNldElkOiBhbnk7XG4gIGlzQ3JlYXRlRGF0YXNldFdpdGhEYXRhc2V0SWQ6IGJvb2xlYW47XG5cbiAgaXNDcmVhdGVOZXdWaWV3OiBib29sZWFuO1xuICBpc0NyZWF0ZU5ld1ZpZXdXaXRoRGVmYXVsdFZpZXc6IGJvb2xlYW47XG5cbiAgZGVmYXVsdEFwcGx5ZWRGaWx0ZXI6IGFueTtcbiAgaXNXaWRnZXRGaWx0ZXJzOiBib29sZWFuO1xuICBub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2U6IGFueTtcbiAgc2VsZWN0ZWRGaWx0ZXJEYXRhc291cmNlOiBhbnkgPSB7fTtcbiAgQFZpZXdDaGlsZChEeFNjcm9sbFZpZXdDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBzY3JvbGxWaWV3OiBEeFNjcm9sbFZpZXdDb21wb25lbnQ7XG5cbiAgc2VsZWN0ZWRWaWV3SWQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHNlcnZpY2U6IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGFzZXRTZXJ2aWNlOiBBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbCxcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3ID0gKHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ2NvbnRlbnRUeXBlJ10gPT0gJ3ZpZXcnKSA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBhZ2VJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3BhZ2VJZCddO1xuXG4gICAgdGhpcy5nZXREYXRhU2V0KCk7XG4gICAgdGhpcy5kZWZhdWx0U3RhcnREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoJzEwJywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoJzEnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIHRoaXMuZ2V0RmlsdGVySXRlbXMoKVxuICAgIHRoaXMuZ2V0QWxsVmlld3NJdGVtcygpXG5cbiAgICB0aGlzLmdldEFwcFBhZ2VEZXRhaWxDb25maWdCeVBhZ2VJZCgpXG4gIH1cblxuICBnZXRBbGxWaWV3c0l0ZW1zKCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBWaWV3Q29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb21wb25lbnRDb25maWcgPSB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2U7XG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDb25maWcnKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RmlsdGVySXRlbXMoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcEZpbHRlckNvbmZpZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlckRhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBnZXRBcHBQYWdlRGV0YWlsQ29uZmlnQnlQYWdlSWQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VEZXRhaWxDb25maWcodGhpcy5wYWdlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnID0gZGF0YTtcbiAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSBkYXRhLnBhZ2VOYW1lO1xuICAgICAgICB0aGlzLnBhZ2VVcmwgPSBkYXRhLnBhZ2VVcmw7XG4gICAgICAgIGlmIChkYXRhLndpZGdldHMgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50Q29uZmlnU2V0KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0Vycm9yJyk7XG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICBnZXRDb21wb25lbnRDb25maWdTZXQoKSB7XG4gICAgbGV0IGRlZmF1bHRGaWx0ZXJzID0geyBvcGVyYXRpb25GaWx0ZXI6IHsgc3RhcnREYXRlOiBcIlwiLCBlbmREYXRlOiBcIlwiIH0gfTtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgIGlmICh3aWRnZXQuZmlsdGVycykge1xuICAgICAgICB3aWRnZXQuZmlsdGVycy5maWx0ZXJJdGVtcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRlJyB8fCBlbGVtZW50LmZpbHRlclR5cGUgPT09ICdkYXRldGltZScpIHtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVmYXVsdEZpbHRlclR5cGUgPT09IFwiZHluYW1pY1wiICYmIGVsZW1lbnQubW9tZW50RnVuY3Rpb24gIT09IFwiXCIgJiYgZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWUgIT09IFwiXCIgJiYgZWxlbWVudC5tb21lbnRGb3JtYXQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgbGV0IFtjb3VudCwgdW5pdF0gPSBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gbW9tZW50KClbZWxlbWVudC5tb21lbnRGdW5jdGlvbl0ocGFyc2VJbnQoY291bnQpLCB1bml0KS5mb3JtYXQoZWxlbWVudC5tb21lbnRGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0RW5kRGF0ZSA9IG1vbWVudCgpW2VsZW1lbnQubW9tZW50RnVuY3Rpb25dKHBhcnNlSW50KGNvdW50KSwgdW5pdCkuZm9ybWF0KGVsZW1lbnQubW9tZW50Rm9ybWF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYXBpTmFtZSA9PT0gXCJzdGFydERhdGVcIikge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5zdGFydERhdGUgPSBtb21lbnQoKVtlbGVtZW50Lm1vbWVudEZ1bmN0aW9uXShwYXJzZUludChjb3VudCksIHVuaXQpLmZvcm1hdChlbGVtZW50Lm1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5kZWZhdWx0RmlsdGVyVHlwZSA9PT0gXCJzdGF0aWNcIiAmJiBlbGVtZW50LmRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hcGlOYW1lID09PSBcImVuZERhdGVcIikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzLm9wZXJhdGlvbkZpbHRlci5lbmREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChlbGVtZW50LmFwaU5hbWUgPT09IFwic3RhcnREYXRlXCIpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuc3RhcnREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U3RhcnREYXRlID0gZWxlbWVudC5kZWZhdWx0RmlsdGVyVmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAodHlwZW9mIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlID09PSBcInN0cmluZ1wiICYmIGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlICE9PSBcIlwiKSB8fFxuICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSkgJiYgZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWUubGVuZ3RoID4gMClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vcGVyYXRvck5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbZWxlbWVudC5vcGVyYXRvck5hbWVdID0gQXJyYXkuaXNBcnJheShlbGVtZW50LmZpbHRlckRhdGFTb3VyY2VWYWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gZWxlbWVudC5maWx0ZXJEYXRhU291cmNlVmFsdWVcbiAgICAgICAgICAgICAgICAgIDogW2VsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbZWxlbWVudC5hcGlOYW1lXSA9IGVsZW1lbnQuZmlsdGVyRGF0YVNvdXJjZVZhbHVlLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgbGV0IGFwaUNhbGxzID0gW107XG4gICAgdGhpcy5kZWZhdWx0QXBwbHllZEZpbHRlciA9IGRlZmF1bHRGaWx0ZXJzO1xuXG4gICAgUHJvbWlzZS5hbGwoYXBpQ2FsbHMpLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0ID0gdGhpcy5kYXRhc2V0U2VydmljZS5nZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCk7XG4gICAgICB0aGlzLmNyZWF0ZURpdkVsZW1lbnRzKHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCk7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICB9XG5cbiAgZ2V0RGF0YVNldCgpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRGF0YXNldCBDcmVhdGlvbicpXG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuXG5cbiAgZ2V0Q29tcG9uZW50Q29uZmlnKGV2ZW50KSB7XG4gICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmNvbXBvbmVudENvbmZpZ0RhdGFTb3VyY2UuZmluZCh2aWV3ID0+IHZpZXcudmlld0lkID09PSBldmVudC52aWV3SWQpO1xuICAgIHRoaXMuZ2V0RW1pdE5ld0NoYXJ0Q29uZmlnKGZvdW5kT2JqZWN0KTtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gIH1cblxuICBhZGROZXdjaGFydCgpIHtcbiAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hhcnRCdXR0b25DbGljayA9IHRydWU7XG4gICAgdGhpcy5pc1dpZGdldENyZWF0aW9uQ29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IGZhbHNlO1xuICB9XG5cblxuICBhZGRXaWRnZXQoKSB7XG4gICAgdGhpcy5uZXdXaWRnZXRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdE1haW5MYXlvdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hhcnRCdXR0b25DbGljayA9IGZhbHNlO1xuICAgIHRoaXMuaXNVcGRhdGVXaWRnZXQgPSBmYWxzZTtcbiAgICB0aGlzLndpZGdldE5hbWUgPSAnJztcbiAgICB0aGlzLndpZGdldFRpdGxlID0gJyc7XG4gICAgdGhpcy5hZGRlZHdpZEdldENvbmZpZyA9IHtcbiAgICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgICAgXCJ3aWRnZXRUaXRsZVwiOiBcIlwiLFxuICAgICAgXCJ3aWR0aFwiOiBcIlwiLFxuICAgICAgXCJoZWlnaHRcIjogXCJcIixcbiAgICAgIFwiaXNXaWRnZXRGaWx0ZXJcIjogZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZXRXaXRoKGUpIHtcbiAgICB0aGlzLnNlbGVjdGVkV2lkdGggPSBlLnZhbHVlO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KGUpIHtcbiAgICB0aGlzLnNlbGVjdGVkSGVpZ2h0ID0gZS52YWx1ZTtcbiAgfVxuXG4gIGFkZExheW91dFRPdmlldygpIHtcbiAgICBsZXQgaW5uZXJfbm9kZSA9IHtcbiAgICAgIGlkOiB0aGlzLmNvbW1vblNlcnZpY2UucHJpbWVyeVJlbmRvbWVJZCg1KSxcbiAgICAgIG5vZGVUaXRsZTogXCJcIixcbiAgICAgIGZpbHRlcklkOiB0aGlzLnNlbGVjdGVkRmlsdGVySWQsXG4gICAgICBub2RlUHJvcGVydGllczogdGhpcy5hZGRlZHdpZEdldENvbmZpZyxcbiAgICAgIGNvbXBDb25maWc6IHtcbiAgICAgICAgZHluYW1pY0NvbXBvbmVudFJlZnM6IFtdLFxuICAgICAgICB2aWV3Q29uZmlnOiBbXVxuICAgICAgfSxcbiAgICB9XG4gICAgaWYgKHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZSkge1xuICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlLnB1c2goaW5uZXJfbm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZSA9IFtdO1xuICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlLnB1c2goaW5uZXJfbm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlV2lkZ2V0KCk7XG4gIH1cblxuXG5cbiAgcmVmb3JtYXRXaWRnZXRDb25maWcoZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLCBpbmRleCA9IG51bGwpIHtcbiAgICBjb25zdCBwcm9jZXNzV2lkZ2V0ID0gKHdpZGdldCkgPT4ge1xuICAgICAgd2lkZ2V0LmNvbXBDb25maWcudmlld0NvbmZpZyA9IHdpZGdldC5jb21wQ29uZmlnLnZpZXdDb25maWcubWFwKGNvbmZpZyA9PiBjb25maWcudmlld0lkKTtcbiAgICAgIHdpZGdldC5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzID0gW107XG5cbiAgICAgIGlmICh3aWRnZXQud2lkZ2V0Tm9kZSAmJiB3aWRnZXQud2lkZ2V0Tm9kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHdpZGdldC53aWRnZXROb2RlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcgPSBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52aWV3SWQpO1xuICAgICAgICAgIG5vZGUuY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcyA9IFtdO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGluZGV4ID49IDAgJiYgaW5kZXggPCBkYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5sZW5ndGgpIHtcbiAgICAgIHByb2Nlc3NXaWRnZXQoZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaCh3aWRnZXQgPT4gcHJvY2Vzc1dpZGdldCh3aWRnZXQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbaW5kZXhdO1xuICB9XG5cbiAgdXBkYXRlV2lkZ2V0KCkge1xuICAgIGxldCBtb2RpZmllZENvbmZpZyA9IHRoaXMucmVmb3JtYXRXaWRnZXRDb25maWcodGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcsIHRoaXMubmV3V2lkZ2V0SW5kZXgpO1xuICAgIG1vZGlmaWVkQ29uZmlnWydmaWx0ZXJJZCddID0gKG1vZGlmaWVkQ29uZmlnLmZpbHRlcnMgJiYgbW9kaWZpZWRDb25maWcuZmlsdGVycy5maWx0ZXJJZCkgPyBtb2RpZmllZENvbmZpZy5maWx0ZXJzLmZpbHRlcklkIDogbnVsbDtcbiAgICBkZWxldGUgbW9kaWZpZWRDb25maWdbJ2ZpbHRlcnMnXTtcbiAgICB0aGlzLnNlcnZpY2UuZWRpdEFwcFdpZGdldENvbmZpZyhtb2RpZmllZENvbmZpZykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnQnlQYWdlSWQoKVxuICAgICAgICB0aGlzLmJhY2tUb01haW5WaWV3KCk7XG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnV2lkZ2V0IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc1dpZGdldENyZWF0aW9uQ29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuaXNEZWZhdWx0VmlldyA9IHRydWU7XG4gIH1cblxuICB1cGRhdGVMYXlvdXRXaWRnZXRUT3ZpZXcoKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMudXBkYXRlV2lkZ2V0KCk7XG4gIH1cblxuICBhZGRXaWRnZXRUT3ZpZXcoKSB7XG4gICAgbGV0IG9iaiA9IHtcbiAgICAgIHdpZGdldElkOiB0aGlzLmNvbW1vblNlcnZpY2UucHJpbWVyeVJlbmRvbWVJZCg1KSxcbiAgICAgIHdpZGdldE5hbWU6IHRoaXMud2lkZ2V0TmFtZSxcbiAgICAgIHdpZGdldFRpdGxlOiB0aGlzLndpZGdldFRpdGxlLFxuICAgICAgd2lkZ2V0UHJvcGVydGllczogdGhpcy5hZGRlZHdpZEdldENvbmZpZyxcbiAgICAgIHBhZ2VJZDogdGhpcy5wYWdlSWQsXG4gICAgICBmaWx0ZXJJZDogdGhpcy5zZWxlY3RlZEZpbHRlcklkLFxuICAgICAgd2lkZ2V0Tm9kZTogW1xuICAgICAgICBcbiAgICAgIF0sXG4gICAgICBjb21wQ29uZmlnOiB7XG4gICAgICAgIGR5bmFtaWNDb21wb25lbnRSZWZzOiBbXSxcbiAgICAgICAgdmlld0NvbmZpZzogW11cbiAgICAgIH0sXG4gICAgfVxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuY3JlYXRlQXBwV2lkZ2V0Q29uZmlnKG9iaikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5jcmVhdGVEaXZFbGVtZW50cyh0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3QpXG4gICAgICAgIHRoaXMuZ2V0QXBwUGFnZURldGFpbENvbmZpZ0J5UGFnZUlkKClcblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnV2lkZ2V0IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMucHVzaChvYmopXG4gICAgLy8gdGhpcy5pbnNlcnREeW5hbWljQ29tcG9uZW50cygpO1xuXG5cbiAgICB0aGlzLmR5bmFtaWNDb250YWluZXIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcblxuICAgIHRoaXMuaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSB0cnVlO1xuICB9XG5cbiAgaW5zZXJ0TmV3V2lnZXQoaW5kZXgpIHtcbiAgICB0aGlzLmFkZGVkd2lkR2V0Q29uZmlnID0ge1xuICAgICAgXCJkaXNwbGF5XCI6IHRydWUsXG4gICAgICBcIndpZGdldFRpdGxlXCI6IFwiXCIsXG4gICAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgICBcImhlaWdodFwiOiBcIlwiLFxuICAgICAgXCJpc1dpZGdldEZpbHRlclwiOiBmYWxzZVxuICAgIH1cbiAgICB0aGlzLmlzVXBkYXRlV2lkZ2V0ID0gZmFsc2U7XG4gICAgdGhpcy5pc1dpZGdldENyZWF0aW9uQ29udGVudCA9IHRydWU7XG4gICAgdGhpcy5pc0RlZmF1bHRWaWV3ID0gZmFsc2U7XG4gICAgdGhpcy5pc0NoYXJ0QnV0dG9uQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLmlzbGF5b3V0Q3JlYXRlID0gdHJ1ZTtcbiAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gaW5kZXg7XG4gIH1cbiAgaW5zZXJ0Q2hhcnRXaWdldChpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCkge1xuXG4gICAgdGhpcy5pc0dlbmVyYXRlID0gZmFsc2U7XG4gICAgdGhpcy5pc0NoYXJ0QnV0dG9uQ2xpY2sgPSB0cnVlO1xuICAgIHRoaXMuaXNXaWRnZXRDcmVhdGlvbkNvbnRlbnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29udGFpbmVyT2JqZWN0Rm9yQ2hhcnQgPSBjb250YWluZXJFbGVtZW50O1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleE9iakZvckNoYXJ0ID0gaW5kZXhPYmo7XG4gICAgdGhpcy5zZWxlY3RlZFZpZXdGb3JtQ29tcG9uZW50ID0ge307XG4gIH1cblxuICBhc3luYyBnZXRFbWl0TmV3Q2hhcnRDb25maWcoZGF0YSkge1xuICAgIC8vIGxldCBkYXRhc2V0X2NvbmZpZyA9IHRoaXMuZGF0YVNldE1vZGFsLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PSBkYXRhLmRhdGFzZXRJZCk7XG4gICAgLy8gYXdhaXQgdGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZGF0YXNldF9jb25maWcsIGRhdGFzZXRfY29uZmlnLmRhdGFzZXRJZCwgdGhpcy5zZWxlY3RlZEZpbHRlcnNEZWZhdWx0KVxuICAgIC8vIGRhdGEua3BpQ29uZmlnWydkYXRhU291cmNlJ10gPSB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldF9jb25maWcuZGF0YXNldElkXTtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXhPYmpGb3JDaGFydC5jb21wQ29uZmlnLnZpZXdDb25maWcucHVzaChkYXRhKVxuICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnQoZGF0YSwgdGhpcy5zZWxlY3RlZEluZGV4T2JqRm9yQ2hhcnQsIHRoaXMuc2VsZWN0ZWRDb250YWluZXJPYmplY3RGb3JDaGFydCk7XG4gICAgY29uc29sZS5sb2codGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcpXG4gICAgdGhpcy51cGRhdGVXaWRnZXQoKTtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgIHRoaXMuaXNDaGFydEJ1dHRvbkNsaWNrID0gZmFsc2U7XG5cbiAgICAvLyB9XG5cbiAgfVxuXG4gIHVwZGF0ZVRvVmlldygpIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVXaWRnZXQoKTtcbiAgfVxuXG4gIGRlbGV0ZVdpZGdldChpdGVtLCBpbmRleCkge1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuc3BsaWNlKGluZGV4LCAxKVxuICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICBkZWxldGVJbnNlcnRXaWRnZXQoaXRlbSwgY2hpbGRJbmRleCwgcGFyZW50SW5kZXgpIHtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3BhcmVudEluZGV4XS53aWRnZXROb2RlLnNwbGljZShjaGlsZEluZGV4LCAxKVxuICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRXaWRnZXRUaXRsZURpdihpdGVtLCBkaXYpIHtcbiAgICBjb25zdCB3aWRnZXREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB3aWRnZXREaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInLCAnanVzdGlmeS1iZXR3ZWVuJywgJ2ZvbnQtYm9sZCcsICd0ZXh0LW1kJywgJ3RleHQtZ3JheS05MDAnLCAnZGFyazp0ZXh0LXdoaXRlJywgJ2JvcmRlci1iJywgJ3AtMycsICdiZy1ncmF5LTgwMCcsICdteC0yJywgJ3JvdW5kZWQtdC1sZycpO1xuICAgIGNvbnN0IHRpdGxlRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGl0bGVEaXYuaW5uZXJUZXh0ID0gKGl0ZW0ubm9kZVByb3BlcnRpZXMpID8gaXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZSA6IFwiXCI7XG4gICAgd2lkZ2V0RGl2LmFwcGVuZCh0aXRsZURpdilcblxuICAgIC8vIEFkZCBGb250QXdlc29tZSBlZGl0IGljb25cbiAgICBjb25zdCBlZGl0SWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcbiAgICBlZGl0SWNvbi5jbGFzc0xpc3QuYWRkKCdmYScsICdmYS1wZW5jaWwnLCAnbWwtMicsICdjdXJzb3ItcG9pbnRlcicsICd0ZXh0LWJsdWUtNDAwJywgJ2hvdmVyOnRleHQtYmx1ZS03MDAnKTtcbiAgICB3aWRnZXREaXYuYXBwZW5kKGVkaXRJY29uKTtcblxuICAgIGlmIChpdGVtLm5vZGVQcm9wZXJ0aWVzLmlzV2lkZ2V0RmlsdGVyKSB7XG4gICAgICBjb25zdCBzZWFyY2hDb250YWluZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHNlYXJjaENvbnRhaW5lckRpdi5jbGFzc0xpc3QuYWRkKCdmbGV4JywgJ2l0ZW1zLWNlbnRlcicsICdzcGFjZS14LTInKTtcbiAgICAgIGNvbnN0IHNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgc2VhcmNoQnV0dG9uLmlubmVyVGV4dCA9ICdGaWx0ZXInO1xuICAgICAgc2VhcmNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3B4LTMnLCAncHktMS41JywgJ2JnLWJsdWUtNjAwJywgJ21yLTInLCAndGV4dC13aGl0ZScsICdyb3VuZGVkJywgJ2hvdmVyOmJnLWJsdWUtNzAwJyk7XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZSA9IFtdO1xuXG4gICAgICBzZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNXaWRnZXRGaWx0ZXJzID0gdHJ1ZTtcbiAgICAgICAgbGV0IGZpbHRlUHJvcGVydGljZSA9IFtdO1xuICAgICAgICBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGxldCBrZXlfbmFtZSA9IHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtlbGVtZW50LmRhdGFzZXRJZF1bMF07XG4gICAgICAgICAgT2JqZWN0LmtleXMoa2V5X25hbWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmICghZmlsdGVQcm9wZXJ0aWNlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmlsdGVQcm9wZXJ0aWNlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGVsZW1lbnQsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJmbG9hdFwiLFxuICAgICAgICAgICAgb3BlcmF0b3I6IFwiXCIsXG4gICAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2UucHVzaChvYmopXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBzZWFyY2hDb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKVxuICAgICAgd2lkZ2V0RGl2LmFwcGVuZENoaWxkKHRpdGxlRGl2KTtcbiAgICAgIHdpZGdldERpdi5hcHBlbmRDaGlsZChzZWFyY2hDb250YWluZXJEaXYpO1xuICAgIH1cblxuICAgIGlmIChpdGVtLmZpbHRlcklkKSB7XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZSA9IHt9O1xuICAgICAgdGhpcy5ub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2VbJ3ZpZXdDb25maWcnXSA9IGl0ZW07XG4gICAgICB0aGlzLm5vZGVwcm9wZXJ0aWNlRmlsdGVyRGF0YVNvdXJjZVsnaGF2aW5nQ29uZmlnJ10gPSBbXTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcEZpbHRlckNvbmZpZyhpdGVtLmZpbHRlcklkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgdGhpcy5sb2FkV2lkZ2V0RmlsdGVyQ29tcG9uZW50KGl0ZW0sIHdpZGdldERpdiwgZGF0YS5maWx0ZXJJdGVtcyk7XG4gICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMgJiYgaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycy5sZW5ndGggIT09IDApIHtcbiAgICAgIGNvbnN0IHNlYXJjaENvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgc2VhcmNoQ29udGFpbmVyRGl2LmNsYXNzTGlzdC5hZGQoJ2ZsZXgnLCAnaXRlbXMtY2VudGVyJywgJ3NwYWNlLXgtMicpO1xuICAgICAgaXRlbS5ub2RlUHJvcGVydGllcy5ub2RlZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBmaWx0ZXJEaXYuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdpdGVtcy1jZW50ZXInKTtcbiAgICAgICAgaWYgKGZpbHRlci5pbnB1dF90eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0Qm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICB0ZXh0Qm94LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgdGV4dEJveC5wbGFjZWhvbGRlciA9IGBFbnRlciAke2ZpbHRlci5sb2NhbF9jb2x1bW59YDtcbiAgICAgICAgICB0ZXh0Qm94LmNsYXNzTGlzdC5hZGQoJ3B4LTInLCAncHktMS41JywgJ3JvdW5kZWQnLCAnYm9yZGVyJywgJ21yLTEnLCAnYm9yZGVyLWdyYXktNTAwJywgJ3RleHQtZ3JheS05MDAnLCAnZGFyazpiZy1ncmF5LTcwMCcsICdkYXJrOnRleHQtd2hpdGUnKTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICBzZWFyY2hCdXR0b24uaW5uZXJUZXh0ID0gJ1NlYXJjaCc7XG4gICAgICAgICAgc2VhcmNoQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3B4LTMnLCAncHktMS41JywgJ2JnLWJsdWUtNjAwJywgJ21yLTInLCAndGV4dC13aGl0ZScsICdyb3VuZGVkJywgJ2hvdmVyOmJnLWJsdWUtNzAwJyk7XG4gICAgICAgICAgY29uc3Qgc2VwYXJlcm90QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgc2VwYXJlcm90QnV0dG9uLmlubmVySFRNTCA9ICd8JztcbiAgICAgICAgICBzZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gdGV4dEJveC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUZXh0IHNlYXJjaCBidXR0b24gY2xpY2tlZCB3aXRoOicsIHNlYXJjaFRlcm0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZpbHRlckRpdi5hcHBlbmRDaGlsZCh0ZXh0Qm94KTtcbiAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQnV0dG9uKTtcbiAgICAgICAgICBmaWx0ZXJEaXYuYXBwZW5kQ2hpbGQoc2VwYXJlcm90QnV0dG9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlYXJjaENvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChmaWx0ZXJEaXYpO1xuICAgICAgfSk7XG4gICAgICB3aWRnZXREaXYuYXBwZW5kQ2hpbGQoc2VhcmNoQ29udGFpbmVyRGl2KTtcbiAgICB9XG5cbiAgICBlZGl0SWNvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcblxuICAgICAgdGhpcy5uZXdXaWRnZXRJbmRleCA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZmluZEluZGV4KG9iamVjdCA9PiBvYmplY3Qud2lkZ2V0SWQgPT09IGRpdi53aWRnZXRJZCk7XG4gICAgICB0aGlzLmlzVXBkYXRlV2lkZ2V0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNsYXlvdXRDcmVhdGUgPSB0cnVlO1xuICAgICAgdGhpcy5pc1dpZGdldENyZWF0aW9uQ29udGVudCA9IHRydWU7XG4gICAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDaGFydEJ1dHRvbkNsaWNrID0gZmFsc2U7XG4gICAgICB0aGlzLm5vZGVQcm9wZXJ0aWNlRmlsdGVycyA9IChpdGVtLm5vZGVQcm9wZXJ0aWVzLm5vZGVmaWx0ZXJzICYmIGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMubGVuZ3RoICE9PSAwKSA/IGl0ZW0ubm9kZVByb3BlcnRpZXMubm9kZWZpbHRlcnMgOiBbXTtcbiAgICAgIGl0ZW0ubm9kZVByb3BlcnRpZXNbJ25vZGVmaWx0ZXJzJ10gPSB0aGlzLm5vZGVQcm9wZXJ0aWNlRmlsdGVycztcbiAgICAgIHRoaXMuYWRkZWR3aWRHZXRDb25maWcgPSBpdGVtLm5vZGVQcm9wZXJ0aWVzO1xuICAgICAgdGhpcy5hbGxXaWRnZXRJbm5lckNvbnRlbnQgPSBpdGVtLmNvbXBDb25maWcudmlld0NvbmZpZztcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJJZCA9IChpdGVtLmZpbHRlcklkKSA/IGl0ZW0uZmlsdGVySWQgOiBcIlwiO1xuICAgICAgdGhpcy5lZGl0Vmlld2RhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlckRhdGFzb3VyY2UgPSBpdGVtO1xuICAgIH0pO1xuICAgIHJldHVybiB3aWRnZXREaXY7XG4gIH1cblxuXG4gIGdldEZpbHRlclZhbHVlQnlJZChldmVudCkge1xuICAgIGlmIChldmVudC5ldmVudCkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcEZpbHRlckNvbmZpZyhldmVudC52YWx1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGVkRmlsdGVyRGF0YXNvdXJjZSkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyRGF0YXNvdXJjZS5maWx0ZXJJZCA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJJZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS5maWx0ZXJzID0gZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkZpbHRlciBDaGFuZ2VkXCIpXG4gICAgICAgIH0sIGVycm9lOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0ZpbHRlciBVcGRhdGUnKVxuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cblxuICBjcmVhdGVEaXZFbGVtZW50cyhkYXRhc2V0QnlJZCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZHluYW1pY0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICBjb25zdCBtdWx0aUl0ZW1EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBtdWx0aUl0ZW1EaXYuY2xhc3NMaXN0LmFkZChcImZsZXhcIiwgXCJmbGV4LXJvd1wiLCBcImp1c3RpZnktYmV0d2VlblwiKTtcbiAgICAvLyBjb250YWluZXIuYXBwZW5kQ2hpbGQobXVsdGlJdGVtRGl2KVxuICAgIFxuICAgIGNvbnN0IGNvbnRleHRfZmlsdGVyID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcuZmlsdGVycyA/IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLmZpbHRlcnMuZmlsdGVySXRlbXMgOiBudWxsO1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZm9yRWFjaChhc3luYyBkaXYgPT4ge1xuICAgICAgY29uc3Qgcm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBsZXQgd19oZWlnaHQgPSAoZGl2LndpZGdldFByb3BlcnRpZXMuaGVpZ2h0ID09IFwiXCIpID8gXCJoLWF1dG9cIiA6ICdoLVsnICsgZGl2LndpZGdldFByb3BlcnRpZXMuaGVpZ2h0ICsgJ10nO1xuICAgICAgcm93RGl2LmNsYXNzTGlzdC5hZGQoZGl2LndpZGdldFByb3BlcnRpZXMud2lkdGgsIHdfaGVpZ2h0LCAnYm9yZGVyJyk7XG4gICAgICBjb25zdCBmaWx0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgY29uc3QgZmlsdGVySXRlbXMgPSAoZGl2LmZpbHRlcnMpID8gZGl2LmZpbHRlcnMuZmlsdGVySXRlbXMgOiBbXTtcbiAgICAgIC8vIGlmIChkaXYuZmlsdGVycykge1xuICAgICAgdGhpcy5sb2FkRmlsdGVyQ29tcG9uZW50KGRpdiwgZmlsdGVyRGl2LCBmaWx0ZXJJdGVtcywgY29udGV4dF9maWx0ZXIpO1xuXG4gICAgICAvLyB9XG5cbiAgICAgIHJvd0Rpdi5hcHBlbmRDaGlsZChmaWx0ZXJEaXYpXG4gICAgICAvL2ZvciBtdWx0aXBsZSB2aWV3XG4gICAgIFxuXG4gICAgICBpZiAoZGl2LndpZGdldE5vZGUgJiYgZGl2LndpZGdldE5vZGUubGVuZ3RoICYmIGRpdi53aWRnZXROb2RlLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgIGNvbnN0IG1haW5JdGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG1haW5JdGVtRGl2LmNsYXNzTGlzdC5hZGQoXCJmbGV4XCIsIFwiZmxleC13cmFwXCIsXCJ3LWZ1bGxcIik7XG4gICAgICAgIHRoaXMubG9hZFdpZGdldE5vZGVzKGRpdiwgbWFpbkl0ZW1EaXYsIGRhdGFzZXRCeUlkKTtcbiAgICAgICAgLy8gZm9yIGxvb3Agb24gd2lkZ2V0XG4gICAgICAgIHJvd0Rpdi5hcHBlbmRDaGlsZChtYWluSXRlbURpdik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBfaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHBfaW5uZXJEaXYuY2xhc3NMaXN0LmFkZCgncm91bmRlZCcsICdqdXN0aWZ5LWNlbnRlcicsICdpdGVtcy1jZW50ZXInLCAnYm9yZGVyJywgJ3AtMScsICdtLTEnLCAnZmxleCcsICdmbGV4LXJvdycpO1xuICAgICAgLy8gYWRkIHdpZGdldCBidXR0b25cbiAgICAgIGNvbnN0IHBfYnV0dG9uX3dpZGdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcF9idXR0b25fd2lkZ2V0LmlubmVyVGV4dCA9ICdBZGQgU2luZ2xlIExheW91dCc7XG4gICAgICBwX2J1dHRvbl93aWRnZXQuY2xhc3NMaXN0LmFkZCgnYmctYmx1ZS03MDAnLCBcInAtMVwiLCBcInctZml0XCIsIFwiY3Vyc29yLXBvaW50ZXJcIiwgJ3RleHQteHMnKVxuICAgICAgcF9idXR0b25fd2lkZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZmluZEluZGV4KG9iamVjdCA9PiBvYmplY3Qud2lkZ2V0SWQgPT09IGRpdi53aWRnZXRJZCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0TmV3V2lnZXQoaW5kZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGRlbGV0ZSB3aWRnZXQgYnV0dG9uXG4gICAgICBjb25zdCBwX2RlbF9idXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHBfZGVsX2J1dHRvbi5pbm5lclRleHQgPSAnRGV0ZXRlIGxheW91dCc7XG4gICAgICBwX2RlbF9idXR0b24uY2xhc3NMaXN0LmFkZCgnYmctcmVkLTcwMCcsIFwicC0xXCIsIFwidy1maXRcIiwgXCJjdXJzb3ItcG9pbnRlclwiLCAndGV4dC14cycpXG4gICAgICBwX2RlbF9idXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG5cblxuICAgICAgICBsZXQgcmVzdWx0ID0gY29uZmlybShcIjxpPkFyZSBZb3UgU3VyZT88L2k+XCIsIFwiRGVsZXRlIExheW91dFwiKTtcbiAgICAgICAgcmVzdWx0LnRoZW4oKGRpYWxvZ1Jlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChkaWFsb2dSZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLm1hcChjb25maWcgPT4gY29uZmlnLndpZGdldElkKTtcbiAgICAgICAgICAgIHJvd0Rpdi5yZW1vdmUoKVxuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UuZWRpdEFwcFBhZ2VDb25maWcodGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFwcFBhZ2VEZXRhaWxDb25maWdCeVBhZ2VJZCgpXG4gICAgICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnV2lkZ2V0IENyZWF0aW9uJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMubmV3V2lkZ2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSB0cnVlO1xuXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLy8gYWR2YW5jZWQgYnV0dG9uXG4gICAgICBjb25zdCBhZHZhbmNlX2J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgYWR2YW5jZV9idXR0b24uaW5uZXJUZXh0ID0gJ0FkdmFuY2UgTGF5b3V0JztcbiAgICAgIGFkdmFuY2VfYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2JnLXllbGxvdy03MDAnLCBcInAtMVwiLCBcInctZml0XCIsIFwiY3Vyc29yLXBvaW50ZXJcIiwgJ3RleHQteHMnKVxuICAgICAgYWR2YW5jZV9idXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBkaXYud2lkZ2V0SWQpO1xuICAgICAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5maW5kSW5kZXgob2JqZWN0ID0+IG9iamVjdC53aWRnZXRJZCA9PT0gZGl2LndpZGdldElkKTtcblxuICAgICAgICB0aGlzLmlzQWR2YW5jZUxheW91dCA9IHRydWU7XG5cbiAgICAgIH0pO1xuXG4gICAgICBwX2lubmVyRGl2LmFwcGVuZENoaWxkKGFkdmFuY2VfYnV0dG9uKTtcbiAgICAgIHBfaW5uZXJEaXYuYXBwZW5kQ2hpbGQocF9idXR0b25fd2lkZ2V0KTtcbiAgICAgIHBfaW5uZXJEaXYuYXBwZW5kQ2hpbGQocF9kZWxfYnV0dG9uKTtcblxuICAgICAgaWYgKCF0aGlzLmlzRGFzaEJvYXJkQ29udGVudFR5cGVWaWV3KSB7XG4gICAgICAgIHJvd0Rpdi5hcHBlbmRDaGlsZChwX2lubmVyRGl2KTtcbiAgICAgIH1cbiAgICAgIG11bHRpSXRlbURpdi5hcHBlbmRDaGlsZChyb3dEaXYpO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG11bHRpSXRlbURpdik7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkV2lkZ2V0Tm9kZXMoZGl2OiBhbnksIG1haW5JdGVtRGl2OiBhbnksIGRhdGFzZXRCeUlkOiBhbnkpIHtcbiAgICBkaXYud2lkZ2V0Tm9kZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgdGhpcy5sb2FkU2luZ2xlV2lkZ2V0Tm9kZShpdGVtLCBtYWluSXRlbURpdiwgZGF0YXNldEJ5SWQsIGRpdik7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkU2luZ2xlV2lkZ2V0Tm9kZShpdGVtOiBhbnksIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBkYXRhc2V0QnlJZDogYW55LCBkaXYpIHtcbiAgICBsZXQgd19oZWlnaHQgPSAoaXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHQgPT0gXCJcIikgPyBcImgtYXV0b1wiIDogJ2gtWycgKyBpdGVtLm5vZGVQcm9wZXJ0aWVzLmhlaWdodCArICddJztcbiAgICBsZXQgd193aWR0aCA9IChpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZHRoID09IFwiXCIpID8gXCJ3LWZ1bGxcIiA6IGl0ZW0ubm9kZVByb3BlcnRpZXMud2lkdGg7XG4gICAgY29uc3QgaXRlbURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGl0ZW1EaXYuY2xhc3NMaXN0LmFkZCh3X3dpZHRoLCB3X2hlaWdodCwgJ2JvcmRlcicsICdwLTEnKTtcblxuICAgIGNvbnN0IGZsZXhDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBmbGV4Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2ZsZXgnLCAnanVzdGlmeS1iZXR3ZWVuJywgJ2l0ZW1zLWNlbnRlcicsICd0ZXh0LWdyYXktOTAwJywgJ2Rhcms6dGV4dC13aGl0ZScsICdiZy1ncmF5LTgwMCcsICdteC0yJywgJ3JvdW5kZWQtdC1sZycpOyAvLyBGbGV4Ym94IGNvbnRhaW5lclxuXG4gICAgY29uc3Qgd2lkZ2V0RGl2ID0gdGhpcy5nZXRXaWRnZXRUaXRsZURpdihpdGVtLCBkaXYpXG4gICAgaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmtwaUNvbmZpZykge1xuICAgICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzZXRDb25maWcoZWxlbWVudC5kYXRhc2V0SWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGFzZXQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgIT09IFwic3FsUXVlcnlcIiAmJiBkYXRhc2V0LmRhdGFzZXRUeXBlICE9PSBcInBsYWluanNvblwiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGFzZXRXaXRoTGltaXQgPSB0aGlzLnNldERhdGFTZXRzTGltaXQoZGF0YXNldCk7XG4gICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZGF0YXNldFdpdGhMaW1pdCwgZGF0YXNldFdpdGhMaW1pdC5kYXRhc2V0SWQsIHRoaXMuZGVmYXVsdEFwcGx5ZWRGaWx0ZXIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5kYXRhc2V0U2VydmljZS5nZXREYXRhRnJvbURhdGFTZXQoZGF0YXNldCwgZGF0YXNldC5kYXRhc2V0SWQsIHRoaXMuZGVmYXVsdEFwcGx5ZWRGaWx0ZXIpKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChhcGlDYWxscykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdCA9IHRoaXMuZGF0YXNldFNlcnZpY2UuZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpO1xuICAgICAgICAgICAgICBlbGVtZW50LmtwaUNvbmZpZ1snZGF0YVNvdXJjZSddID0gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2VsZW1lbnQuZGF0YXNldElkXVxuICAgICAgICAgICAgICBjb25zdCBjb21wX29iamVjdCA9IHRoaXMuZmluZFdpZGdldEJ5SWQodGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cywgaXRlbS5pZCk7XG4gICAgICAgICAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnQoZWxlbWVudCwgY29tcF9vYmplY3QsIGl0ZW1EaXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pO1xuICAgIGZsZXhDb250YWluZXIuYXBwZW5kQ2hpbGQod2lkZ2V0RGl2KTtcblxuICAgIC8vIENyZWF0ZSBidXR0b25zIGNvbnRhaW5lciBmb3IgYWxpZ25tZW50XG4gICAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGJ1dHRvbnNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnZmxleCcsICdteC0yJyk7IC8vIFRvIGFsaWduIGJ1dHRvbnMgc2lkZSBieSBzaWRlIHdpdGggc29tZSBzcGFjaW5nXG5cblxuICAgIGNvbnN0IGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaW5uZXJEaXYuY2xhc3NMaXN0LmFkZCgncm91bmRlZCcsICdqdXN0aWZ5LWNlbnRlcicsICdpdGVtcy1jZW50ZXInLCAncC0xJywgJ20tMScsICdmbGV4JywgJ2ZsZXgtcm93Jyk7XG5cbiAgICBjb25zdCBidXR0b25fY2hhcnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBidXR0b25fY2hhcnQuaW5uZXJUZXh0ID0gJ0FkZCBWaWV3JztcbiAgICBidXR0b25fY2hhcnQuY2xhc3NMaXN0LmFkZCgnYmctZ3JlZW4tNzAwJywgXCJwLTFcIiwgXCJ3LWZpdFwiLCBcImN1cnNvci1wb2ludGVyXCIsICd0ZXh0LXhzJylcbiAgICBidXR0b25fY2hhcnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5maW5kSW5kZXgob2JqZWN0ID0+IG9iamVjdC53aWRnZXRJZCA9PT0gZGl2LndpZGdldElkKTtcbiAgICAgIGNvbnN0IGNvbXBfb2JqZWN0ID0gdGhpcy5maW5kV2lkZ2V0QnlJZCh0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLCBpdGVtLmlkKTtcbiAgICAgIHRoaXMuaW5zZXJ0Q2hhcnRXaWdldChjb21wX29iamVjdCwgaXRlbURpdik7XG4gICAgfSk7XG5cblxuICAgIGNvbnN0IGRlbF9idXR0b25fY2hhcnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkZWxfYnV0dG9uX2NoYXJ0LmlubmVyVGV4dCA9ICdEZXRldGUnO1xuICAgIGRlbF9idXR0b25fY2hhcnQuY2xhc3NMaXN0LmFkZCgnYmctcmVkLTcwMCcsIFwicC0xXCIsIFwidy1maXRcIiwgXCJjdXJzb3ItcG9pbnRlclwiLCAndGV4dC14cycpXG4gICAgZGVsX2J1dHRvbl9jaGFydC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIGxldCByZXN1bHQgPSBjb25maXJtKFwiPGk+QXJlIFlvdSBTdXJlPzwvaT5cIiwgXCJEZWxldGUgVmlld1wiKTtcbiAgICAgIHJlc3VsdC50aGVuKChkaWFsb2dSZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xuICAgICAgICAgIGxldCB3aWRnZXRJbmRleCA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuZmluZEluZGV4KG9iamVjdCA9PiBvYmplY3Qud2lkZ2V0SWQgPT09IGRpdi53aWRnZXRJZCk7XG4gICAgICAgICAgY29uc3QgbWFwZWRPYmplY3QgPSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3dpZGdldEluZGV4XVxuICAgICAgICAgIGlmIChtYXBlZE9iamVjdC53aWRnZXROb2RlICYmIG1hcGVkT2JqZWN0LndpZGdldE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IG1hcEluZGV4ID0gbWFwZWRPYmplY3Qud2lkZ2V0Tm9kZS5maW5kSW5kZXgoaW5kID0+IGluZC5pZCA9PT0gaXRlbS5pZClcbiAgICAgICAgICAgIG1hcGVkT2JqZWN0LndpZGdldE5vZGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgbm9kZS5jb21wQ29uZmlnLnZpZXdDb25maWcgPSBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52aWV3SWQpO1xuICAgICAgICAgICAgICBub2RlLmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMgPSBbXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbWFwZWRPYmplY3Qud2lkZ2V0Tm9kZS5zcGxpY2UobWFwSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBlZE9iamVjdFsnZmlsdGVySWQnXSA9IChtYXBlZE9iamVjdC5maWx0ZXJzKSA/IG1hcGVkT2JqZWN0LmZpbHRlcnMuZmlsdGVySWQgOiBudWxsO1xuICAgICAgICAgIGRlbGV0ZSBtYXBlZE9iamVjdFsnZmlsdGVycyddO1xuICAgICAgICAgIG1hcGVkT2JqZWN0LmNvbXBDb25maWcuZHluYW1pY0NvbXBvbmVudFJlZnMgPSBbXTtcbiAgICAgICAgICB0aGlzLnNlcnZpY2UuZWRpdEFwcFdpZGdldENvbmZpZyhtYXBlZE9iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnQnlQYWdlSWQoKVxuICAgICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1dpZGdldCBDcmVhdGlvbicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGl0ZW1EaXYucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIC8vIGlubmVyRGl2LmFwcGVuZENoaWxkKGJ1dHRvbl9jaGFydCk7XG4gICAgLy8gaW5uZXJEaXYuYXBwZW5kQ2hpbGQoZGVsX2J1dHRvbl9jaGFydCk7XG4gICAgLy8gQXBwZW5kIGJ1dHRvbnMgdG8gYnV0dG9ucyBjb250YWluZXJcbiAgICBidXR0b25zQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbl9jaGFydCk7XG4gICAgYnV0dG9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChkZWxfYnV0dG9uX2NoYXJ0KTtcblxuICAgIC8vIEFkZCB0aGUgYnV0dG9ucyBjb250YWluZXIgdG8gdGhlIGZsZXggY29udGFpbmVyXG4gICAgZmxleENvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b25zQ29udGFpbmVyKTtcbiAgICBpZiAoIXRoaXMuaXNEYXNoQm9hcmRDb250ZW50VHlwZVZpZXcpIHtcbiAgICB9XG4gICAgaXRlbURpdi5hcHBlbmRDaGlsZChmbGV4Q29udGFpbmVyKTtcbiAgICAvLyBpdGVtRGl2LmFwcGVuZENoaWxkKHdpZGdldERpdik7XG5cbiAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGl0ZW1EaXYpXG5cblxuXG4gIH1cblxuXG5cbiAgZmluZFdpZGdldEJ5SWQoY29uZmlnczogYW55W10sIGlkOiBzdHJpbmcpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcbiAgICAgIGlmIChjb25maWcuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLndpZGdldE5vZGUgJiYgY29uZmlnLndpZGdldE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFdpZGdldEJ5SWQoY29uZmlnLndpZGdldE5vZGUsIGlkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBkZWxldGVXaWRnZXRCeUlkKGNvbmZpZ3M6IGFueVtdLCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChsZXQgaSA9IGNvbmZpZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChjb25maWdzW2ldLmlkID09PSBpZCkge1xuICAgICAgICBjb25maWdzLnNwbGljZShpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnc1tpXS53aWRnZXROb2RlICYmIGNvbmZpZ3NbaV0ud2lkZ2V0Tm9kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlV2lkZ2V0QnlJZChjb25maWdzW2ldLndpZGdldE5vZGUsIGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkRHluYW1pY0NvbXBvbmVudChkYXRhLCBpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCk6IGFueSB7XG4gICAgY29uc3QgY29tcG9uZW50Q2xhc3MgPSB0aGlzLmNvbXBvbmVudENsYXNzTWFwW2RhdGEua3BpQ29uZmlnWydjb21wb25lbnROYW1lJ11dO1xuICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5jaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5rcGlfbmFtZSA9IFwiXCI7XG5cbiAgICBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgY29uc3QgY3NzQ2xhc3MgPSBcInctZnVsbFwiO1xuICAgIHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTtcbiAgICBjb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuQ29tcFJlZnMubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBsb2FkRmlsdGVyQ29tcG9uZW50KGluZGV4T2JqLCBjb250YWluZXJFbGVtZW50LCBmaWx0ZXJJdGVtcywgY29udGV4dF9maWx0ZXIpIHtcbiAgICBcbiAgICBsZXQgc2VsZWN0ZWREYXRlcyA9IHsgc3RhcnREYXRlOiB0aGlzLmRlZmF1bHRTdGFydERhdGUsIGVuZERhdGU6IHRoaXMuZGVmYXVsdEVuZERhdGUgfVxuICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5jb21wb25lbnRDbGFzc01hcFsnQXBwQWR2YW5jZUhlYWRlckNvbXBvbmVudCddO1xuICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5zZWxlY3RlZERhdGVzID0gc2VsZWN0ZWREYXRlcztcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZmlsdGVySXRlbXMgPSBmaWx0ZXJJdGVtcztcblxuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5jb250ZXh0RmlsdGVySXRlbXMgPSBjb250ZXh0X2ZpbHRlcjtcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UucGFnZVRpdGxlID0gdGhpcy5wYWdlVGl0bGU7XG4gICAgZHluYW1pY0NvbXBvbmVudEluc3RhbmNlLmlzRWRpdEJ1dHRvbiA9IGZhbHNlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5pc0FkdmFuY2VCdXR0b24gPSB0cnVlO1xuXG4gICAgaW5kZXhPYmouY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcy5wdXNoKHRoaXMuQ29tcFJlZnMpO1xuICAgIGNvbnN0IGNzc0NsYXNzID0gXCJ3LWZ1bGxcIjtcbiAgICB0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjc3NDbGFzcyk7XG4gICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbG9hZFdpZGdldEZpbHRlckNvbXBvbmVudChpbmRleE9iaiwgY29udGFpbmVyRWxlbWVudCwgZmlsdGVySXRlbXMpIHtcbiAgICBsZXQgc2VsZWN0ZWREYXRlcyA9IHsgc3RhcnREYXRlOiB0aGlzLmRlZmF1bHRTdGFydERhdGUsIGVuZERhdGU6IHRoaXMuZGVmYXVsdEVuZERhdGUgfVxuICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5jb21wb25lbnRDbGFzc01hcFsnQWR2YW5jZVdpZGdldEhlYWRlckZpbHRlckNvbXBvbmVudCddO1xuICAgIHRoaXMuQ29tcFJlZnMgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLkNvbXBSZWZzLmluc3RhbmNlO1xuICAgIGR5bmFtaWNDb21wb25lbnRJbnN0YW5jZS5zZWxlY3RlZERhdGVzID0gc2VsZWN0ZWREYXRlcztcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZmlsdGVySXRlbXMgPSBmaWx0ZXJJdGVtcztcbiAgICBkeW5hbWljQ29tcG9uZW50SW5zdGFuY2UuZ2V0V2lkZ2V0RmlsdGVyQ29uZmlnLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5nZXRXaWRnZXRGaWx0ZXJGb3JUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpbmRleE9iai5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzLnB1c2godGhpcy5Db21wUmVmcyk7XG4gICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLkNvbXBSZWZzLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0RGVsZXRlVmlld0Zyb21Db25maWcoaW5kZXgpIHtcbiAgICBjb25zb2xlLmxvZyhpbmRleCk7XG4gICAgdGhpcy5hbGxXaWRnZXRJbm5lckNvbnRlbnQuc3BsaWNlKGluZGV4LCAxKVxuICB9XG5cbiAgbW92ZUl0ZW1Gb3JQYWdlVmlldyhpbmRleDogbnVtYmVyLCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXJlY3Rpb24gPT09ICd1cCcgPyBpbmRleCAtIDEgOiBpbmRleCArIDE7XG4gICAgLy8gUHJldmVudCBtb3ZpbmcgYmV5b25kIGFycmF5IGJvdW5kc1xuICAgIGlmIChuZXdQb3NpdGlvbiA8IDAgfHwgbmV3UG9zaXRpb24gPj0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgLy8gTW92ZSBpdGVtXG4gICAgY29uc3QgaXRlbVRvTW92ZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZVtpbmRleF07XG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlLnNwbGljZShpbmRleCwgMSk7IC8vIFJlbW92ZSBpdGVtIGZyb20gY3VycmVudCBwb3NpdGlvblxuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZS5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGl0ZW1Ub01vdmUpOyAvLyBJbnNlcnQgaXRlbSBpbiBuZXcgcG9zaXRpb25cbiAgfVxuICBtb3ZlSXRlbUZvckNvbHVtbnMoaW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKTogdm9pZCB7XG4gICAgLy8gUHJldmVudCBtb3ZpbmcgYmV5b25kIGFycmF5IGJvdW5kc1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5hbGxXaWRnZXRJbm5lckNvbnRlbnQubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXJlY3Rpb24gPT09ICd1cCcgPyBpbmRleCAtIDEgOiBpbmRleCArIDE7XG4gICAgLy8gUHJldmVudCBtb3ZpbmcgYmV5b25kIGFycmF5IGJvdW5kc1xuICAgIGlmIChuZXdQb3NpdGlvbiA8IDAgfHwgbmV3UG9zaXRpb24gPj0gdGhpcy5hbGxXaWRnZXRJbm5lckNvbnRlbnQubGVuZ3RoKSByZXR1cm47XG5cbiAgICAvLyBNb3ZlIGl0ZW1cbiAgICBjb25zdCBpdGVtVG9Nb3ZlID0gdGhpcy5hbGxXaWRnZXRJbm5lckNvbnRlbnRbaW5kZXhdO1xuICAgIHRoaXMuYWxsV2lkZ2V0SW5uZXJDb250ZW50LnNwbGljZShpbmRleCwgMSk7IC8vIFJlbW92ZSBpdGVtIGZyb20gY3VycmVudCBwb3NpdGlvblxuICAgIHRoaXMuYWxsV2lkZ2V0SW5uZXJDb250ZW50LnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaXRlbVRvTW92ZSk7IC8vIEluc2VydCBpdGVtIGluIG5ldyBwb3NpdGlvblxuICB9XG5cbiAgbW92ZUl0ZW1Gb3JXaWRnZXQoaW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKTogdm9pZCB7XG4gICAgLy8gUHJldmVudCBtb3ZpbmcgYmV5b25kIGFycmF5IGJvdW5kc1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGluZGV4IC0gMSA6IGluZGV4ICsgMTtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgLy8gTW92ZSBpdGVtXG4gICAgY29uc3QgaXRlbVRvTW92ZSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbaW5kZXhdO1xuICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMuc3BsaWNlKGluZGV4LCAxKTsgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgdGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0cy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGl0ZW1Ub01vdmUpOyAvLyBJbnNlcnQgaXRlbSBpbiBuZXcgcG9zaXRpb25cbiAgfVxuXG4gIGdldEVkaXRWaWV3RnJvbUxheW91dChkYXRhLCBpbmRleCkge1xuXG4gICAgdGhpcy5pc0VkaXRNYWluTGF5b3V0ID0gdHJ1ZTtcbiAgICB0aGlzLm5ld1dpZGdldEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5pc1dpZGdldENyZWF0aW9uQ29udGVudCA9IHRydWU7XG4gICAgdGhpcy5pc0RlZmF1bHRWaWV3ID0gZmFsc2U7XG4gICAgdGhpcy5pc0NoYXJ0QnV0dG9uQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLmlzVXBkYXRlV2lkZ2V0ID0gZmFsc2U7XG4gICAgdGhpcy53aWRnZXROYW1lID0gZGF0YS53aWRnZXROYW1lO1xuICAgIHRoaXMud2lkZ2V0VGl0bGUgPSBkYXRhLndpZGdldFRpdGxlO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJJZCA9IGRhdGEuZmlsdGVycy5maWx0ZXJJZDtcbiAgICB0aGlzLmFkZGVkd2lkR2V0Q29uZmlnID0gZGF0YS53aWRnZXRQcm9wZXJ0aWVzO1xuICB9XG5cblxuICBiYWNrVG9NYWluVmlldygpIHtcbiAgICB0aGlzLmlzRGVmYXVsdFZpZXcgPSB0cnVlO1xuICAgIHRoaXMuaXNVcGRhdGVXaWRnZXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzV2lkZ2V0Q3JlYXRpb25Db250ZW50ID0gZmFsc2U7XG4gICAgdGhpcy5pc0NoYXJ0QnV0dG9uQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdE1haW5MYXlvdXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzbGF5b3V0Q3JlYXRlID0gZmFsc2U7XG4gICAgdGhpcy5uZXdXaWRnZXRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmaWx0ZXJWaWV3cygpIHtcbiAgICBpZiAodGhpcy52aWV3VG9TZWFyY2gudHJpbSgpICE9PSAnJykge1xuICAgICAgdGhpcy5maWx0ZXJlZENvbXBvbmVudENvbmZpZyA9IHRoaXMuY29tcG9uZW50Q29uZmlnRGF0YVNvdXJjZS5maWx0ZXIoKGl0ZW06IGFueSkgPT5cbiAgICAgICAgaXRlbS52aWV3TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmlld1RvU2VhcmNoLnRvTG93ZXJDYXNlKCkpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQ29tcG9uZW50Q29uZmlnID0gdGhpcy5jb21wb25lbnRDb25maWdEYXRhU291cmNlO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRDb21wb25lbnRWaWV3cyhpdGVtKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEl0ZW1Gb3JVcGRhdGUgPSBpdGVtO1xuICAgIGlmICh0aGlzLmlzVXBkYXRlV2lkZ2V0ICYmICF0aGlzLmlzQ2hhcnRCdXR0b25DbGljaykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXdJZCA9IGl0ZW0udmlld0lkO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3V2l0aERlZmF1bHRWaWV3ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgIH0sIDQwMCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgJ3ZpZXdJZCc6IGl0ZW0udmlld0lkLFxuICAgICAgICAgICdwYWdlSWQnOiB0aGlzLnBhZ2VJZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkNvbnRlbnQvYXBwbGljYXRpb25WaWV3cyddLCBuYXZpZ2F0aW9uKTtcbiAgICB9XG4gIH1cbiAgZWRpdENvbXBvbmVudERhdGFzZXRzKGl0ZW0pIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5lZGl0SXRlbUZvclVwZGF0ZSA9IGl0ZW07XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVXaWRnZXQgJiYgIXRoaXMuaXNDaGFydEJ1dHRvbkNsaWNrKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YXNldElkID0gaXRlbS5kYXRhc2V0SWQ7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0NyZWF0ZURhdGFzZXRXaXRoRGF0YXNldElkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgIH0sIDQwMCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgJ3ZpZXdJZCc6IGl0ZW0udmlld0lkLFxuICAgICAgICAgICdwYWdlSWQnOiB0aGlzLnBhZ2VJZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkNvbnRlbnQvYXBwbGljYXRpb25WaWV3cyddLCBuYXZpZ2F0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXRBbGxQYWdlKCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25Db250ZW50L2FwcGxpY2F0aW9uRGFzaGJvYXJkJ10pO1xuICB9XG5cbiAgdHJhbnNmb3JtQ29sdW1uc0ZvckNvbHVtbnMoaW5wdXRDb2x1bW5zKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IFtdO1xuXG4gICAgaW5wdXRDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGNvbHVtbnMucHVzaCh7XG4gICAgICAgIGRhdGFGaWVsZDogY29sLmRhdGFGaWVsZCxcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FwdGlvbjogY29sLmNhcHRpb24sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cblxuICBnZXRDcmVhdGVEYXRhU2V0UGFnZSgpIHtcbiAgICB0aGlzLmlzQ3JlYXRlRGF0YXNldCA9IHRydWU7XG4gIH1cblxuICBnZXRDcmVhdGVWaWV3UGFnZSgpIHtcblxuICAgIHRoaXMuc2VsZWN0ZWRWaWV3SWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0NyZWF0ZU5ld1ZpZXcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICB9LCA0MDApO1xuICB9XG5cblxuICBnZXRFbWl0TmV3Q2hhcnRDb25naWcoZXZlbnQpIHtcbiAgICBkZWxldGUgZXZlbnQua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgdGhpcy5lZGl0SXRlbUZvclVwZGF0ZVsna3BpQ29uZmlnJ10gPSBldmVudC5rcGlDb25maWc7XG5cbiAgICBjb25zb2xlLmxvZyh0aGlzLmVkaXRJdGVtRm9yVXBkYXRlKTtcbiAgICB0aGlzLnNlcnZpY2UudXBkYXRlQXBwVmlld0NvbmZpZyh0aGlzLmVkaXRJdGVtRm9yVXBkYXRlKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzRWRpdE9wdGlvbkNsaWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ1ZpZXcgVXBkYXRlIFN1Y2Nlc3NmdWxseScpXG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cbiAgZ2V0Vmlld1BhZ2UoKSB7XG4gICAgbGV0IG5hdmlnYXRpb25FeHRyYXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICBcInBhZ2VJZFwiOiB0aGlzLnBhZ2VJZFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5wYWdlVXJsXSwgbmF2aWdhdGlvbkV4dHJhcylcblxuICB9XG4gIC8vIG5vZGVwcm9wZXJ0aWNlIGZpbHRlciBcblxuICBnZXROb2RlUHJvcGVydGljZUZpbHRlck9wdGlvbigpIHtcbiAgICBsZXQgb2JqID0ge1xuICAgICAgaW5wdXRfdHlwZTogXCJ0ZXh0XCIsXG4gICAgICBzZXJ2ZXJfY29sdW1uOiBcIlwiLFxuICAgICAgbG9jYWxfY29sdW1uOiBcIlwiLFxuICAgICAgc2VsZWN0X2JveF9vcHRpb246IFwiXCIsXG4gICAgfVxuICAgIHRoaXMubm9kZVByb3BlcnRpY2VGaWx0ZXJzLnB1c2gob2JqKVxuICB9XG5cbiAgZGVsZXRlTm9kZUZpbHRlcihpbmRleCkge1xuICAgIHRoaXMubm9kZVByb3BlcnRpY2VGaWx0ZXJzLnNwbGljZShpbmRleCwgMSlcbiAgfVxuXG4gIHNldERhdGFTZXRzTGltaXQoZGF0YXNldCkge1xuICAgIGxldCBsaW1pdCA9IHsgXCJsaW1pdFwiOiBcIjEwXCIgfVxuICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLnJlcUZpZWxkcy5wdXNoKGxpbWl0KTtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuXG4gIGdldFZpZXdQb3B1cEhpZGUoZSkge1xuICAgIHRoaXMuZ2V0QWxsVmlld3NJdGVtcygpO1xuICB9XG5cbiAgZ2V0RGF0YXNldFBvcHVwSGlkZShlKSB7XG5cbiAgfVxuXG4gIHN1Ym1pdEZpbHRlcigpIHtcblxuICB9XG5cbiAgZ2V0V2lkZ2V0RmlsdGVyRm9yVGVtcGxhdGUodmFsdWUpIHtcbiAgICB0aGlzLmdldERhdGFTZXQoKTtcbiAgfVxuXG4gIGdldERlbGV0ZVZpZXdGcm9tTGF5b3V0KGl0ZW0sIGkpIHtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLnNwbGljZShpLCAxKTtcbiAgICB0aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmZvckVhY2god2lkZ2V0ID0+IHtcbiAgICAgIHdpZGdldC5jb21wQ29uZmlnLnZpZXdDb25maWcgPSB3aWRnZXQuY29tcENvbmZpZy52aWV3Q29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZpZXdJZCk7XG4gICAgICB3aWRnZXQuY29tcENvbmZpZy5keW5hbWljQ29tcG9uZW50UmVmcyA9IFtdO1xuICAgICAgaWYgKHdpZGdldC53aWRnZXROb2RlICYmIHdpZGdldC53aWRnZXROb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgd2lkZ2V0LndpZGdldE5vZGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICBub2RlLmNvbXBDb25maWcudmlld0NvbmZpZyA9IG5vZGUuY29tcENvbmZpZy52aWV3Q29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZpZXdJZCk7XG4gICAgICAgICAgbm9kZS5jb21wQ29uZmlnLmR5bmFtaWNDb21wb25lbnRSZWZzID0gW107XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXG4gICAgY29uc3Qgd2lkZ2V0RGF0YSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnO1xuICAgIHdpZGdldERhdGFbJ3dpZGdldHMnXSA9IHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHMubWFwKGl0ZW0gPT4gaXRlbS53aWRnZXRJZCk7XG4gICAgd2lkZ2V0RGF0YVsnZmlsdGVySWQnXSA9ICh3aWRnZXREYXRhLmZpbHRlcnMpID8gd2lkZ2V0RGF0YS5maWx0ZXJzLmZpbHRlcklkIDogbnVsbDtcbiAgICBkZWxldGUgd2lkZ2V0RGF0YVsnZmlsdGVycyddO1xuXG4gICAgdGhpcy5zZXJ2aWNlLmVkaXRBcHBQYWdlQ29uZmlnKHdpZGdldERhdGEpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoXCJMYXlvdXQgRGVsZXRlZCBTdWNjZXNzZnVsbHlcIilcbiAgICAgICAgdGhpcy5nZXRBcHBQYWdlRGV0YWlsQ29uZmlnQnlQYWdlSWQoKVxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1dpZGdldCBDcmVhdGlvbicpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cbiAgLy8gYWR2YW5jZSBMYXlvdXQgXG4gIGlzQWR2YW5jZUxheW91dDogYm9vbGVhbjtcbiAgaXNQcm9jZWVkOiBib29sZWFuO1xuICBzZWxlY3RlZFZpZXdzSWRzOiBhbnkgPSBbXTtcbiAgYWR2YW5jZUxheW91dENvbnRhaW5lcjogYW55ID0gW107XG4gIGdldFByb2Nlc3NGb3JDb25maWcoKSB7XG4gICAgdGhpcy5hZHZhbmNlTGF5b3V0Q29udGFpbmVyID0gW107XG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21wb25lbnRDb25maWdEYXRhU291cmNlLmZpbHRlcihjb2x1bW4gPT4gdGhpcy5zZWxlY3RlZFZpZXdzSWRzLmluY2x1ZGVzKGNvbHVtbi52aWV3SWQpKTtcbiAgICBjb25zdCBjb2x1bW5EZWZMaXN0ID0gW107XG5cbiAgICBmaWx0ZXJlZENvbHVtbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIC8vIGNvbnN0IGV4aXN0aW5nQ29sdW1uID0gZmFsc2U7XG4gICAgICBsZXQgb2JqID0ge1xuICAgICAgICBcImlkXCI6IHRoaXMuY29tbW9uU2VydmljZS5wcmltZXJ5UmVuZG9tZUlkKDUpLFxuICAgICAgICBcIm5vZGVUaXRsZVwiOiBcIlwiLFxuICAgICAgICBcImNvbXBDb25maWdcIjoge1xuICAgICAgICAgIFwiZHluYW1pY0NvbXBvbmVudFJlZnNcIjogW10sXG4gICAgICAgICAgXCJ2aWV3Q29uZmlnXCI6IFtlbGVtZW50XVxuICAgICAgICB9LFxuICAgICAgICBcImZpbHRlcklkXCI6IG51bGwsXG4gICAgICAgIFwibm9kZVByb3BlcnRpZXNcIjoge1xuICAgICAgICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgICAgICAgIFwid2lkZ2V0VGl0bGVcIjogXCJcIixcbiAgICAgICAgICBcIndpZHRoXCI6IFwiXCIsXG4gICAgICAgICAgXCJoZWlnaHRcIjogXCJcIixcbiAgICAgICAgICBcImlzV2lkZ2V0RmlsdGVyXCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYWR2YW5jZUxheW91dENvbnRhaW5lci5wdXNoKG9iaik7XG5cbiAgICB9KTtcblxuICAgIHRoaXMuaXNQcm9jZWVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkQ29sdW1uU291cmNlKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmV2ZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlld3NJZHMgPSBldmVudC52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXRBZHZhbmNlVmlldygpIHtcbiAgICBpZiAodGhpcy5kYXNoQm9hcmRXaWRnZXRDb25maWcud2lkZ2V0c1t0aGlzLm5ld1dpZGdldEluZGV4XS53aWRnZXROb2RlICYmIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZSA9IFsuLi50aGlzLmRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW3RoaXMubmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUsIC4uLnRoaXMuYWR2YW5jZUxheW91dENvbnRhaW5lcl07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbdGhpcy5uZXdXaWRnZXRJbmRleF0ud2lkZ2V0Tm9kZSA9IHRoaXMuYWR2YW5jZUxheW91dENvbnRhaW5lcjtcbiAgICB9XG4gICAgdGhpcy5pc0FkdmFuY2VMYXlvdXQgPSBmYWxzZTtcbiAgICB0aGlzLmFkdmFuY2VMYXlvdXRDb250YWluZXIgPSBbXTtcbiAgICB0aGlzLmlzUHJvY2VlZCA9IGZhbHNlO1xuICAgIHRoaXMudXBkYXRlV2lkZ2V0KCk7XG4gIH1cblxuXG5cbiAgZGVsZXRlVmlldyhpKSB7XG5cbiAgfVxufVxuIiwiPGFwcC1sb2FkaW5nICpuZ0lmPVwibG9hZGluZ01vZGFsXCI+PC9hcHAtbG9hZGluZz5cblxuPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaC1bOTB2aF0gdy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cInctMy80IGJvcmRlci1yIGgtZnVsbCBmbGV4IGZsZXgtY29sIHB4LTJcIj5cbiAgICAgICAgPCEtLSBTY3JvbGxhYmxlIGNvbnRlbnQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3cgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgbXktM1wiICNkeW5hbWljQ29udGFpbmVyPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEZpeGVkIGJvdHRvbSBzZWN0aW9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgaC0xNiBtLTIgYm9yZGVyIHNocmluay0wXCI+XG4gICAgICAgICAgICA8bGliLWNvbW1vbi1oZWFkZXIgW3BhZ2VUaXRsZV09XCInJ1wiPjwvbGliLWNvbW1vbi1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gbS0yXCIgKGNsaWNrKT1cImFkZFdpZGdldCgpXCI+QWRkIExheW91dDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5PdGhlcnNQdXJwbGV9fSBtLTIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZ2V0Vmlld1BhZ2UoKVwiPlZpZXcgUGFnZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidy0xLzQgcC0yIGgtZnVsbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXNoQm9hcmRDb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bkRhcmtCbGFja319IG0tMiB3LWZpdCB0ZXh0LWNlbnRlciBjdXJzYXItcG9pbnRlclwiIChjbGljayk9XCJiYWNrVG9NYWluVmlldygpXCI+XG4gICAgICAgICAgICAgICAgQmFja1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2VfY29uZmlnLmFwaV9jb25maWc7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiBmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgYm9yZGVyLWJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgcHktMiBmb250LWJvbGQgIHRleHQtd2hpdGUgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLndpZEdldENvbmZpZy53aWRnZXRUaXRsZX19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAoY2xpY2spPVwiZWRpdFNlbGVjdGVkV2lkZ2V0KGl0ZW0sIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctOCBoLTggYmctc2t5LTYwMCBob3ZlcjpiZy1ibHVlLTgwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctOCBoLTggYmctcmVkLTYwMCBob3ZlcjpiZy1yZWQtODAwIHRleHQtd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1dpZGdldENyZWF0aW9uQ29udGVudFwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwibWItMiBmb250LWJvbGQgdGV4dC1sZyB0cmFja2luZy10aWdodCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBib3JkZXItYiBwYi0zXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNsYXlvdXRDcmVhdGVcIj5XaWRnZXQgU2V0dGluZ3M8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc2xheW91dENyZWF0ZVwiPkxheW91dCBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBteS00XCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBjbGFzcz1cIm1sLWF1dG9cIiBbKG5nTW9kZWwpXT1cImFkZGVkd2lkR2V0Q29uZmlnLmRpc3BsYXlcIiB0ZXh0PVwiRGlzcGxheVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtYi0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tZCBteS1hdXRvIHB4LTJcIj5XaWR0aDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBjbGFzcz1cInctMS8yXCIgW2l0ZW1zXT1cIndpZGdldF93aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWRkZWR3aWRHZXRDb25maWcud2lkdGhcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG1iLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW1kIG15LWF1dG8gcHgtMlwiPkhlaWdodDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggY2xhc3M9XCJ3LTEvMlwiIFsobmdNb2RlbCldPVwiYWRkZWR3aWRHZXRDb25maWcuaGVpZ2h0XCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtYi0yIGp1c3RpZnktYmV0d2VlblwiICpuZ0lmPVwiIWlzbGF5b3V0Q3JlYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbXktYXV0byBweC0yXCI+V2lkZ2V0IFRpdGxlPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj48ZHgtdGV4dC1ib3ggY2xhc3M9XCJ3LTEvMlwiIFsobmdNb2RlbCldPVwid2lkZ2V0VGl0bGVcIj48L2R4LXRleHQtYm94PjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtYi0yIGp1c3RpZnktYmV0d2VlblwiICpuZ0lmPVwiIWlzbGF5b3V0Q3JlYXRlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW1kIG15LWF1dG8gcHgtMlwiPldpZGdldCBOYW1lPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBjbGFzcz1cInctMS8yXCIgWyhuZ01vZGVsKV09XCJ3aWRnZXROYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG1iLTUganVzdGlmeS1iZXR3ZWVuXCIgKm5nSWY9XCJpc2xheW91dENyZWF0ZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBteS1hdXRvIHB4LTJcIj5MYXlvdXQgVGl0bGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IGNsYXNzPVwidy0xLzJcIiBbKG5nTW9kZWwpXT1cImFkZGVkd2lkR2V0Q29uZmlnLndpZGdldFRpdGxlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtYi0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tZCBteS1hdXRvIHB4LTJcIj5GaWx0ZXI8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggY2xhc3M9XCJ3LTEvMlwiIFtpdGVtc109XCJmaWx0ZXJEYXRhU291cmNlXCIgZGlzcGxheUV4cHI9XCJmaWx0ZXJOYW1lXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRXhwcj1cImZpbHRlcklkXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZpbHRlcklkXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImdldEZpbHRlclZhbHVlQnlJZCgkZXZlbnQpXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVXBkYXRlV2lkZ2V0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTZcIiAqbmdJZj1cIiFpc2xheW91dENyZWF0ZSAmJiBpc0VkaXRNYWluTGF5b3V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzW25ld1dpZGdldEluZGV4XS53aWRnZXROb2RlO2xldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBib3JkZXItYiBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBweS0yIGZvbnQtYm9sZCAgdGV4dC13aGl0ZSBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5ub2RlUHJvcGVydGllcy53aWRnZXRUaXRsZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSAwXCIgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JQYWdlVmlldyhpLCAndXAnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpICE9PSAgZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHNbbmV3V2lkZ2V0SW5kZXhdLndpZGdldE5vZGUubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvclBhZ2VWaWV3KGksICdkb3duJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy04IGgtOCBiZy1yZWQtNjAwIGhvdmVyOmJnLXJlZC04MDAgdGV4dC13aGl0ZSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVXBkYXRlV2lkZ2V0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gcHktMSBmb250LWV4dHJhYm9sZCBib3JkZXItYiBiZy1ncmF5LTcwMCB0ZXh0LXdoaXRlIHB4LTJcIj4gQXBwbGljYXRpb24gVmlld3NcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXggYm9yZGVyLWIgcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWxsV2lkZ2V0SW5uZXJDb250ZW50OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgIHctZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiBib3JkZXItYiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgIHB5LTIgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnZpZXdOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9yQ29sdW1ucyhpLCAndXAnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImkgIT09IGFsbFdpZGdldElubmVyQ29udGVudC5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9yQ29sdW1ucyhpLCAnZG93bicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicm91bmRlZC1mdWxsIHAtMiB0ZXh0LXdoaXRlIGJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwIG1iLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRDb21wb25lbnRWaWV3cyhpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicm91bmRlZC1mdWxsIHAtMiB0ZXh0LXdoaXRlIGJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwIG1iLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRDb21wb25lbnREYXRhc2V0cyhpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyb3VuZGVkLWZ1bGwgcC0yIHRleHQtd2hpdGUgYmctcmVkLTUwMCBob3ZlcjpiZy1yZWQtNzAwIG1iLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdldERlbGV0ZVZpZXdGcm9tQ29uZmlnKGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1VwZGF0ZVdpZGdldFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHB5LTEgZm9udC1leHRyYWJvbGQgYm9yZGVyLWIgYmctZ3JheS03MDAgdGV4dC13aGl0ZSBweC0yXCI+IEFkZCBGaWx0ZXIgRm9yIFZpZXdcblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgcHktMyBib3JkZXItYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImFkZGVkd2lkR2V0Q29uZmlnLmlzV2lkZ2V0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiUG9wdXAgQ29sdW1ucyBGaWx0ZXIgRW5hYmxlXCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBteS0yIGJvcmRlci1iXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5vZGVQcm9wZXJ0aWNlRmlsdGVyczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBib3JkZXItYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSB3LTEvM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWRcIj5JbnB1dCBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWyd0ZXh0J11cIiBbKG5nTW9kZWwpXT1cIml0ZW0uaW5wdXRfdHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ0ZXh0XCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEtMSB3LTIvM1wiICpuZ0lmPVwiaXRlbS5pbnB1dF90eXBlID09ICd0ZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWRcIj5TZXJ2ZXIgQ29sdW1uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLnNlcnZlcl9jb2x1bW5cIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEtMSB3LTEvMlwiICpuZ0lmPVwiaXRlbS5pbnB1dF90eXBlID09ICd0ZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWRcIj5Mb2NhbCBDb2x1bW48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ubG9jYWxfY29sdW1uXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xLTEgdy0xLzNcIiAqbmdJZj1cIml0ZW0uaW5wdXRfdHlwZSA9PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWRcIj5Db2x1bW5zIE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0uc2VsZWN0X2JveF9vcHRpb25cIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEtMSB3LTEvMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfc219fSB3LTI0IG10LTYgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTm9kZUZpbHRlcihpKVwiPkRlbGV0ZSBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9zbX19IHctYXV0byB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Tm9kZVByb3BlcnRpY2VGaWx0ZXJPcHRpb24oKVwiPkFkZFxuICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGgtMTYgbS0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5EYXJrQmxhY2t9fSBtLTIgdy1maXQgdGV4dC1jZW50ZXIgY3Vyc2FyLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvTWFpblZpZXcoKVwiPkJhY2tcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVXBkYXRlV2lkZ2V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc2xheW91dENyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19IG0tMiB3LWZpdCB0ZXh0LWNlbnRlciBjdXJzYXItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTGF5b3V0VE92aWV3KClcIj5BZGQgVmlld1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc2xheW91dENyZWF0ZSAmJiAhaXNFZGl0TWFpbkxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19IG0tMiB3LWZpdCB0ZXh0LWNlbnRlciBjdXJzYXItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkV2lkZ2V0VE92aWV3KClcIj5BZGQgTGF5b3V0XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzbGF5b3V0Q3JlYXRlICYmIGlzRWRpdE1haW5MYXlvdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fSBtLTIgdy1maXQgdGV4dC1jZW50ZXIgY3Vyc2FyLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUxheW91dFdpZGdldFRPdmlldygpXCI+VXBkYXRlIExheW91dFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fd2FybmluZ19tZH19IG0tMiB3LWZpdCB0ZXh0LWNlbnRlciBjdXJzYXItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVUb1ZpZXcoKVwiICpuZ0lmPVwiaXNVcGRhdGVXaWRnZXRcIj5VcGRhdGUgVmlld1xuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8IS0tIDxwcmU+PGNvZGU+e3tkYXNoQm9hcmRXaWRnZXRDb25maWcgfCBqc29ufX08L2NvZGU+PC9wcmU+IC0tPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ2hhcnRCdXR0b25DbGlja1wiPlxuICAgICAgICAgICAgPGg2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LW1kIHRyYWNraW5nLXRpZ2h0IHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJvcmRlci1iIHBiLTMgZmxleCAgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYXItY2hhcnQtbyBtci0yXCI+PC9pPiBTZWxlY3QgVmlld1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuRGFya0JsYWNrfX0gbS0yIHctZml0IHRleHQtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2tUb01haW5WaWV3KClcIj5CYWNrXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBoLVs4MHZoXSBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbXktMiBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJ2aWV3VG9TZWFyY2hcIiAoa2V5dXApPVwiZmlsdGVyVmlld3MoKVwiIChrZXlkb3duKT1cImZpbHRlclZpZXdzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmF5LTgwMCBib3JkZXIgYm9yZGVyLWdyYXktNzAwIHRleHQtZ3JheS0yMDAgdGV4dC1zbSBmb2N1czpyaW5nLWdyYXktNDAwIGZvY3VzOmJvcmRlci1ncmF5LTUwMCBibG9jayB3LWZ1bGwgcC00IGgtOCByb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFZpZXdcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFic29sdXRlIGluc2V0LXktMCByaWdodC0wIGZsZXggaXRlbXMtY2VudGVyIHByLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInJvdGF0ZS05MCBjdXJzb3ItcG9pbnRlclwiIFtzdmdJY29uXT1cIidoZXJvaWNvbnNfb3V0bGluZTpzZWFyY2gnXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZENvbXBvbmVudENvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZ3JvdXAgbXktMyB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSXRlbSBWaWV3IE5hbWUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgYm9yZGVyLWIgcHktMiBjdXJzYXItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS52aWV3TmFtZX19PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSG92ZXIgQnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wICByaWdodC0wIGZsZXggc3BhY2UteC0yIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMzAwIHBiLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicm91bmRlZC1mdWxsIHAtMiB0ZXh0LXdoaXRlIGJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0Q29tcG9uZW50Vmlld3MoaXRlbSlcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJvdW5kZWQtZnVsbCBwLTIgdGV4dC13aGl0ZSBiZy1ncmVlbi01MDAgaG92ZXI6YmctZ3JlZW4tNzAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdldENvbXBvbmVudENvbmZpZyhpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVmYXVsdFZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGFzaEJvYXJkV2lkZ2V0Q29uZmlnLndpZGdldHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAgbXktMyB3LWZ1bGwgZmxleCBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLWIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCAgcHktMiBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLndpZGdldFRpdGxlfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvcldpZGdldChpLCAndXAnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImkgIT09IGRhc2hCb2FyZFdpZGdldENvbmZpZy53aWRnZXRzLmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvcldpZGdldChpLCAnZG93bicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicm91bmRlZC1mdWxsIHAtMiB0ZXh0LXdoaXRlIGJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwIG1iLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRFZGl0Vmlld0Zyb21MYXlvdXQoaXRlbSxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicm91bmRlZC1mdWxsIHAtMiB0ZXh0LXdoaXRlIGJnLXJlZC01MDAgaG92ZXI6YmctcmVkLTcwMCBtYi0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0RGVsZXRlVmlld0Zyb21MYXlvdXQoaXRlbSxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSA8L2Rpdj4gLS0+XG5cbjxkeC1wb3B1cCBbKHZpc2libGUpXT1cImlzRWRpdE9wdGlvbkNsaWNrXCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiMTIwMFwiXG4gICAgW2hlaWdodF09XCInYXV0bydcIiBbc2hvd1RpdGxlXT1cInRydWVcIiBjbGFzcz1cInBvcHVwXCIgdGl0bGU9XCJ7e2VkaXRWaWV3ZGF0YVNvdXJjZU1vZGFsLnZpZXdOYW1lfX1cIj5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XG5cbiAgICAgICAgPGFwcC1kYXNoLWNoYXJ0IFtkYXRhc2V0bW9kYWxdPVwiZWRpdFZpZXdkYXRhU291cmNlTW9kYWxcIiAoZ2V0Q2hhcnRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld0NoYXJ0Q29uZ2lnKCRldmVudClcIlxuICAgICAgICAgICAgKm5nSWY9XCJlZGl0Vmlld2RhdGFTb3VyY2VNb2RhbC52aWV3VHlwZSA9PSAnY2hhcnQnXCI+PC9hcHAtZGFzaC1jaGFydD5cbiAgICAgICAgPGFwcC1kYXNoLXRhYmxlIFtkYXRhc2V0bW9kYWxdPVwiZWRpdFZpZXdkYXRhU291cmNlTW9kYWxcIiAoZ2V0VGFibGVDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld0NoYXJ0Q29uZ2lnKCRldmVudClcIlxuICAgICAgICAgICAgKm5nSWY9XCJlZGl0Vmlld2RhdGFTb3VyY2VNb2RhbC52aWV3VHlwZSA9PSAndGFibGUnXCI+PC9hcHAtZGFzaC10YWJsZT5cbiAgICAgICAgPCEtLSA8YXBwLWRhc2gtb3RoZXIgW2RhdGFzZXRtb2RhbF09XCJlZGl0Vmlld2RhdGFTb3VyY2VNb2RhbFwiICpuZ0lmPVwiZWRpdFZpZXdkYXRhU291cmNlTW9kYWwudmlld1R5cGUgPT0gJ290aGVycydcIlxuICAgICAgICAgICAgKGNyZWF0ZU90aGVyQ29tcG9uZW50Vmlldyk9XCJnZXRFbWl0TmV3Q2hhcnRDb25naWcoJGV2ZW50KVwiPjwvYXBwLWRhc2gtb3RoZXI+IC0tPlxuICAgIDwvZGl2PlxuPC9keC1wb3B1cD5cblxuXG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJpc0NyZWF0ZURhdGFzZXRcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiIFtkcmFnRW5hYmxlZF09XCJmYWxzZVwiIFt3aWR0aF09XCIxMjAwXCJcbiAgICBbaGVpZ2h0XT1cIjYwMFwiIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cIkRhdGFzZXQgRWRpdG9yXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZHgtc2Nyb2xsLXZpZXcgY2xhc3M9XCJoLWZ1bGxcIiBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInMTAwJSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3JlYXRlLWRhdGFzZXQgW2lzSGVhZGVyXT1cImZhbHNlXCI+PC9hcHAtY3JlYXRlLWRhdGFzZXQ+XG4gICAgICAgIDwvZHgtc2Nyb2xsLXZpZXc+XG4gICAgPC9kaXY+XG48L2R4LXBvcHVwPlxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwiaXNDcmVhdGVEYXRhc2V0V2l0aERhdGFzZXRJZFwiIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCIgW2RyYWdFbmFibGVkXT1cImZhbHNlXCIgW3dpZHRoXT1cIjEyMDBcIlxuICAgIFtoZWlnaHRdPVwiNjAwXCIgW3Nob3dUaXRsZV09XCJ0cnVlXCIgY2xhc3M9XCJwb3B1cFwiIHRpdGxlPVwiRGF0YXNldCBFZGl0b3JcIiAob25IaWRkZW4pPVwiZ2V0RGF0YXNldFBvcHVwSGlkZSgkZXZlbnQpXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZHgtc2Nyb2xsLXZpZXcgY2xhc3M9XCJoLWZ1bGxcIiBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInMTAwJSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3JlYXRlLWRhdGFzZXQgW3NlbGVjdGVkRGF0YXNldElkXT1cInNlbGVjdGVkRGF0YXNldElkXCIgW2lzSGVhZGVyXT1cImZhbHNlXCI+PC9hcHAtY3JlYXRlLWRhdGFzZXQ+XG4gICAgICAgIDwvZHgtc2Nyb2xsLXZpZXc+XG4gICAgPC9kaXY+XG48L2R4LXBvcHVwPlxuXG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJpc0NyZWF0ZU5ld1ZpZXdXaXRoRGVmYXVsdFZpZXdcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiIFtkcmFnRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgW3dpZHRoXT1cIjEyMDBcIiBbaGVpZ2h0XT1cIjYwMFwiIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cIlZpZXdzIEVkaXRvclwiXG4gICAgKG9uSGlkZGVuKT1cImdldFZpZXdQb3B1cEhpZGUoJGV2ZW50KVwiPlxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCdcIj5cbiAgICAgICAgPGR4LXNjcm9sbC12aWV3IGNsYXNzPVwiaC1mdWxsXCIgW3dpZHRoXT1cIicxMDAlJ1wiIFtoZWlnaHRdPVwiJzEwMCUnXCI+XG4gICAgICAgICAgICA8YXBwLWNyZWF0ZS1jb21wLXZpZXcgW3NlbGVjdGVkVmlld0lkXT1cInNlbGVjdGVkVmlld0lkXCIgW2lzSGVhZGVyXT1cImZhbHNlXCI+PC9hcHAtY3JlYXRlLWNvbXAtdmlldz5cbiAgICAgICAgPC9keC1zY3JvbGwtdmlldz5cbiAgICA8L2Rpdj5cbjwvZHgtcG9wdXA+XG48ZHgtcG9wdXAgWyh2aXNpYmxlKV09XCJpc0NyZWF0ZU5ld1ZpZXdcIiBbY2xvc2VPbk91dHNpZGVDbGlja109XCJmYWxzZVwiIFtkcmFnRW5hYmxlZF09XCJmYWxzZVwiIFt3aWR0aF09XCIxMjAwXCJcbiAgICBbaGVpZ2h0XT1cIjYwMFwiIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cIlZpZXdzIEVkaXRvclwiPlxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCdcIj5cbiAgICAgICAgPGR4LXNjcm9sbC12aWV3IGNsYXNzPVwiaC1mdWxsXCIgW3dpZHRoXT1cIicxMDAlJ1wiIFtoZWlnaHRdPVwiJzEwMCUnXCI+XG4gICAgICAgICAgICA8YXBwLWNyZWF0ZS1jb21wLXZpZXcgW2lzSGVhZGVyXT1cImZhbHNlXCI+PC9hcHAtY3JlYXRlLWNvbXAtdmlldz5cbiAgICAgICAgPC9keC1zY3JvbGwtdmlldz5cbiAgICA8L2Rpdj5cbjwvZHgtcG9wdXA+XG5cblxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwiaXNXaWRnZXRGaWx0ZXJzXCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiODAwXCIgW2hlaWdodF09XCI0MDBcIlxuICAgIFtzaG93VGl0bGVdPVwidHJ1ZVwiIGNsYXNzPVwicG9wdXBcIiB0aXRsZT1cIkRhdGFzZXQgRmlsdGVyXCI+XG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxuICAgICAgICAgICAgPGR4LXNjcm9sbC12aWV3IFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIic4NSUnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBub2RlcHJvcGVydGljZUZpbHRlckRhdGFTb3VyY2U7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0uY29sdW1uTmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydnZXQnLCdsZXQnXVwiIFsobmdNb2RlbCldPVwiaXRlbS5vcGVyYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiT3BlcmF0b3JcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPC9keC1zY3JvbGwtdmlldz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG14LTEgZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19IGN1cnNvci1wb2ludGVyIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VibWl0RmlsdGVyKClcIj5TdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L2R4LXBvcHVwPlxuPGR4LXBvcHVwIFsodmlzaWJsZSldPVwiaXNBZHZhbmNlTGF5b3V0XCIgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIiBbZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIiBbd2lkdGhdPVwiMTIwMFwiXG4gICAgW2hlaWdodF09XCI3MDBcIiBbc2hvd1RpdGxlXT1cInRydWVcIiBjbGFzcz1cInBvcHVwXCIgdGl0bGU9XCJEYXRhc2V0IEZpbHRlclwiPlxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY29udGVudCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgcHgtMiBtYi0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0yLzMgbWItMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5TZWxlY3QgVmlld3M8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZHgtdGFnLWJveCBbZGF0YVNvdXJjZV09XCJjb21wb25lbnRDb25maWdEYXRhU291cmNlXCIgdmFsdWVFeHByPVwidmlld0lkXCIgZGlzcGxheUV4cHI9XCJ2aWV3TmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFttdWx0aWxpbmVdPVwidHJ1ZVwiIFtzaG93U2VsZWN0aW9uQ29udHJvbHNdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRWaWV3c0lkc1wiXG4gICAgICAgICAgICAgICAgICAgIFttYXhEaXNwbGF5ZWRUYWdzXT1cIjNcIiAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0U2VsZWN0ZWRDb2x1bW5Tb3VyY2UoJGV2ZW50KVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8L2R4LXRhZy1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMyBweC0yXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19IG10LTZcIiAoY2xpY2spPVwiZ2V0UHJvY2Vzc0ZvckNvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgICAgIEFkZCBUbyBWaWV3XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfbWR9fSBjdXJzb3ItcG9pbnRlciBtdC02XCIgKGNsaWNrKT1cImNhbmNlbENkckNvbmZpZygpXCI+Q2FuY2VsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkeC1zY3JvbGwtdmlldyBbd2lkdGhdPVwiJzEwMCUnXCIgW2hlaWdodF09XCInODAlJ1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yIGJvcmRlci1iXCIgKm5nSWY9XCJpc1Byb2NlZWRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFkdmFuY2VMYXlvdXRDb250YWluZXI7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+VmlldyBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5jb21wQ29uZmlnLnZpZXdDb25maWdbMF0udmlld05hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5XaWRnZXQgVGl0bGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLm5vZGVQcm9wZXJ0aWVzLndpZGdldFRpdGxlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5XaWRnZXQgV2lkdGg8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCIgW2l0ZW1zXT1cIndpZGdldF93aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5ub2RlUHJvcGVydGllcy53aWR0aFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5XaWRnZXQgSGVpZ2h0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5ub2RlUHJvcGVydGllcy5oZWlnaHRcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5XaWRnZXQgRmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImZpbHRlckRhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cImZpbHRlck5hbWVcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVFeHByPVwiZmlsdGVySWRcIiBbKG5nTW9kZWwpXT1cIml0ZW0uZmlsdGVySWRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbXQtOFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwiaXRlbS5ub2RlUHJvcGVydGllcy5kaXNwbGF5XCIgdGV4dD1cIkRpc3BsYXlcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfc219fSBjdXJzb3ItcG9pbnRlciBtdC04XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVZpZXcoaSlcIj48aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9keC1zY3JvbGwtdmlldz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgbXgtMSBteS0yIGZsZXgtZ3Jvd1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19IGN1cnNvci1wb2ludGVyIG10LTJcIiAoY2xpY2spPVwic3VibWl0QWR2YW5jZVZpZXcoKVwiPkFkZFxuICAgICAgICAgICAgICAgIExheW91dDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZHgtcG9wdXA+Il19
|