@eqproject/eqp-dynamic-module 2.3.13 → 2.3.15
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/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +10 -3
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +1 -1
- package/esm2020/lib/components/private/dynamic-module-field/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +6 -4
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +1 -1
- package/esm2020/lib/models/baseField.model.mjs +25 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +42 -9
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +42 -9
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +3 -1
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +2 -1
- package/lib/models/baseField.model.d.ts +25 -1
- package/package.json +1 -1
|
@@ -88,6 +88,7 @@ export class EqpDynamicModuleComponent {
|
|
|
88
88
|
this.FormTypeEnum = FormTypeEnum;
|
|
89
89
|
this.dynamicModuleViewModeEnum = DynamicModuleViewModeEnum;
|
|
90
90
|
this.loader = false;
|
|
91
|
+
this.isDuplicate = false;
|
|
91
92
|
}
|
|
92
93
|
async ngOnInit() {
|
|
93
94
|
this.onBackTo = (this.onBackTo == null) ? this.starterViewMode : this.onBackTo;
|
|
@@ -267,6 +268,10 @@ export class EqpDynamicModuleComponent {
|
|
|
267
268
|
console.log("success RunEndPointCall", res, this.defaultViewMode);
|
|
268
269
|
this.form = res;
|
|
269
270
|
this.selectedRecord = null;
|
|
271
|
+
if (this.answerToDuplicateId != null) {
|
|
272
|
+
this.selectedRecord = this.answerToDuplicateId;
|
|
273
|
+
this.isDuplicate = true;
|
|
274
|
+
}
|
|
270
275
|
this.onlyView = false;
|
|
271
276
|
this.viewMode = this.defaultViewMode;
|
|
272
277
|
this.loader = true;
|
|
@@ -404,10 +409,10 @@ export class EqpDynamicModuleComponent {
|
|
|
404
409
|
}
|
|
405
410
|
}
|
|
406
411
|
EqpDynamicModuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EqpDynamicModuleComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
407
|
-
EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", externalButtons: "externalButtons", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", prefilterParams: "prefilterParams", showNewSearchButton: "showNewSearchButton" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", duplicateRecord: "duplicateRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", afterDuplicateRecord: "afterDuplicateRecord" }, ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (onAfterDuplicateRecord)=\"onAfterDuplicateRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListFormRecordComponent, selector: "list-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDuplicateRecord", "onAfterDuplicateRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i4.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["debugMode", "configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "form", "defaultListViewFunction", "externalButtons", "onlyView", "records"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "onDuplicateRecord", "saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i5.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i6.ViewFormRecordComponent, selector: "view-form-record", inputs: ["debugMode", "endPointConfiguration", "record", "showBackButton"], outputs: ["goBackEvent"] }, { kind: "component", type: i7.SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: i8.RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["debugMode", "configurations"], outputs: ["onSaveJson"] }, { kind: "component", type: i9.FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "externalButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "afterFilter"] }] });
|
|
412
|
+
EqpDynamicModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EqpDynamicModuleComponent, selector: "eqp-dynamic-module", inputs: { debugMode: "debugMode", configurations: "configurations", formID: "formID", starterViewMode: "starterViewMode", userID: "userID", showTitle: "showTitle", showBackButton: "showBackButton", showSaveButton: "showSaveButton", values: "values", FormJSON: "FormJSON", externalButtons: "externalButtons", defaultListViewFunction: "defaultListViewFunction", defaultListActions: "defaultListActions", onSaveBackToList: "onSaveBackToList", onBackTo: "onBackTo", filterResultViewMode: "filterResultViewMode", additionalParams: "additionalParams", prefilterParams: "prefilterParams", showNewSearchButton: "showNewSearchButton", answerToDuplicateId: "answerToDuplicateId" }, outputs: { saveRecord: "saveRecord", deleteRecord: "deleteRecord", duplicateRecord: "duplicateRecord", SaveJSON: "SaveJSON", afterFilter: "afterFilter", afterSaveRecord: "afterSaveRecord", afterDeleteRecord: "afterDeleteRecord", afterDuplicateRecord: "afterDuplicateRecord" }, ngImport: i0, template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (onAfterDuplicateRecord)=\"onAfterDuplicateRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ListFormRecordComponent, selector: "list-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDuplicateRecord", "onAfterDuplicateRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i4.ListViewFormRecordComponent, selector: "list-view-form-record", inputs: ["debugMode", "configurations", "compileConfigurations", "endPointConfiguration", "userID", "formID", "form", "defaultListViewFunction", "externalButtons", "onlyView", "records"], outputs: ["onAddViewEditRecord", "onDeleteRecord", "onDuplicateRecord", "saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i5.AddFormRecordComponent, selector: "add-form-record", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "formID", "form", "record", "onlyView", "isDuplicate"], outputs: ["saveRecordEvent", "afterSaveRecordEvent"] }, { kind: "component", type: i6.ViewFormRecordComponent, selector: "view-form-record", inputs: ["debugMode", "endPointConfiguration", "record", "showBackButton"], outputs: ["goBackEvent"] }, { kind: "component", type: i7.SpinnerComponent, selector: "eqp-dynamic-module-spinner" }, { kind: "component", type: i8.RepairFormFieldsComponent, selector: "repair-form-fields", inputs: ["debugMode", "configurations"], outputs: ["onSaveJson"] }, { kind: "component", type: i9.FilterFormStatisticComponent, selector: "filter-form-statistic", inputs: ["debugMode", "configurations", "endPointConfiguration", "userID", "externalButtons", "formID", "form", "record", "onlyView", "defaultListActions", "filterResultViewMode"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "afterFilter"] }] });
|
|
408
413
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EqpDynamicModuleComponent, decorators: [{
|
|
409
414
|
type: Component,
|
|
410
|
-
args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (onAfterDuplicateRecord)=\"onAfterDuplicateRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
|
|
415
|
+
args: [{ selector: "eqp-dynamic-module", template: "<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n class=\"dynamic-module-view\"\r\n [debugMode]=\"debugMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [record]=\"selectedRecord.ID\"\r\n (goBackEvent)=\"onGoBack()\"\r\n>\r\n</view-form-record>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.FILTER\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [formID]=\"formID\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [defaultListActions]=\"defaultListActions\"\r\n [filterResultViewMode]=\"filterResultViewMode\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n (afterFilter)=\"onAfterFilter($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n class=\"dynamic-module-compile\"\r\n [debugMode]=\"debugMode\"\r\n [form]=\"form\"\r\n [record]=\"selectedRecord\"\r\n [onlyView]=\"onlyView\"\r\n [isDuplicate]=\"isDuplicate\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n class=\"dynamic-module-list\"\r\n [debugMode]=\"debugMode\"\r\n [formID]=\"formID\"\r\n\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [externalButtons]=\"externalButtons\"\r\n\r\n (onViewRecord)=\"onViewRecord($event)\"\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (onAfterDuplicateRecord)=\"onAfterDuplicateRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<repair-form-fields\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n class=\"dynamic-module-repair\"\r\n [debugMode]=\"debugMode\"\r\n\r\n [configurations]=\"dynamicModuleRepairConfig\"\r\n\r\n (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n class=\"dynamic-module-list-view\"\r\n [debugMode]=\"debugMode\"\r\n [configurations]=\"dynamicModuleListConfig\"\r\n [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [defaultListViewFunction]=\"defaultListViewFunction\"\r\n [externalButtons]=\"externalButtons\"\r\n [onlyView]=\"!defaultListActions.edit\"\r\n\r\n (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n (onDuplicateRecord)=\"onDuplicateRecord($event)\"\r\n (saveRecordEvent)=\"onSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n >\r\n</list-view-form-record>\r\n", styles: ["::ng-deep mat-form-field{width:100%}\n"] }]
|
|
411
416
|
}], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { debugMode: [{
|
|
412
417
|
type: Input
|
|
413
418
|
}], configurations: [{
|
|
@@ -446,6 +451,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
446
451
|
type: Input
|
|
447
452
|
}], showNewSearchButton: [{
|
|
448
453
|
type: Input
|
|
454
|
+
}], answerToDuplicateId: [{
|
|
455
|
+
type: Input
|
|
449
456
|
}], saveRecord: [{
|
|
450
457
|
type: Output
|
|
451
458
|
}], deleteRecord: [{
|
|
@@ -463,4 +470,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
463
470
|
}], afterDuplicateRecord: [{
|
|
464
471
|
type: Output
|
|
465
472
|
}] } });
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHOUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEYsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFdEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFaEYsT0FB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlVmlld01vZGVFbnVtXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZvcm0sIEZvcm1UeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IEZpbHRlclJlc3VsdFR5cGUgfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtZmlsdGVyc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJlcXAtZHluYW1pYy1tb2R1bGVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXBEeW5hbWljTW9kdWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBcclxuICBASW5wdXQoKSBkZWJ1Z01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWJ1Z0xvZyhtZXNzYWdlOiBzdHJpbmcsIGVsZW1lbnQ/OiBhbnkpe1xyXG4gICAgaWYodGhpcy5kZWJ1Z01vZGUpe1xyXG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlLCBlbGVtZW50KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb25maWc7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHN0YXJ0ZXJWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuXHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmcgPSBcIjBcIjtcclxuICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCYWNrQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdmFsdWVzOiBBcnJheTxSZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBGb3JtSlNPTiA9IFwiXCI7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbjogRnVuY3Rpb24gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBASW5wdXQoKSBvblNhdmVCYWNrVG9MaXN0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb25CYWNrVG86IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbHRlclJlc3VsdFZpZXdNb2RlOiBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZUZpbHRlclJlc3VsdFZpZXdNb2RlRW51bS5JTlRFUk5BTF9FUVBUQUJMRTtcclxuICBASW5wdXQoKSBhZGRpdGlvbmFsUGFyYW1zOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHByZWZpbHRlclBhcmFtczogYW55ID0gbnVsbDtcclxuICBASW5wdXQoKSBzaG93TmV3U2VhcmNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcbiAgLyoqXHJcbiAgICogVXJsIGRlbCBzZXJ2ZXIgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUsIHNhbHZhcmUgbyBlbGltaW5hcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBkZWZhdWx0IGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRva2VuIGRhIHVzYXJlIG5lZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBzb2xvIHNlIHZpZW5lIHBvcG9sYXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIuXHJcbiAgICovXHJcbiAgdXNlclRva2VuOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSBkYXRpLlxyXG4gICAqIFB1w7IgZXNzZXJlIGRlZmluaXRhIGRhbGwndXRlbnRlIG9wcHVyZSBsYXNjaWF0YSBudWxsLCB2aWVuZSBwb3BvbGF0YSBjb24gZGVpXHJcbiAgICogdmFsb3JpIGRpIGRlZmF1bHQgc2UgdmllbmUgdmFsb3JpenphdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiBhbHRyaW1lbnRpXHJcbiAgICogdmllbmUgbGFzY2lhdGEgbnVsbCBlIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGFsIHNlcnZlci5cclxuICAgKi9cclxuICBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG51bGw7XHJcblxyXG4gIC8vQElucHV0KCkgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgLy8gZGVmYXVsdExpc3RBY3Rpb25zOiBkeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9IG5ldyBkeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIC8vIEZvcm1KU09OOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudGkgZW1lc3NpIHF1YW5kbyBzaSBzYWx2YSwgZWxpbWluYSBvIGR1cGxpY2EgdW4gcmVjb3JkXHJcbiAgICogc2Ugbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGR1cGxpY2F0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgU2F2ZUpTT046IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRmlsdGVyOiBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PER5blJlY29yZD4+KCk7XHJcbiAgLyoqXHJcbiAgICogRXZlbnRpIGVtZXNzaSBET1BPIGF2ZXIgZXNlZ3VpdG8gdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwZXIgaWwgc2FsdmF0YWdnaW8sXHJcbiAgICogbCdlbGltaW5hemlvbmUgbyBsYSBkdXBsaWNhemlvbmUgZGkgdW4gcmVjb3JkIGFsbCdlbmRwb2ludCBzcGVjaWZpY2F0by5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlckRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRHVwbGljYXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgbGFzdGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuICBzZWxlY3RlZFJlY29yZDogUmVjb3JkO1xyXG4gIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIHZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtO1xyXG4gIGRlZmF1bHRWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuXHJcbiAgZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIGR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnOiBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMub25CYWNrVG8gPSAodGhpcy5vbkJhY2tUbyA9PSBudWxsKSA/IHRoaXMuc3RhcnRlclZpZXdNb2RlIDogdGhpcy5vbkJhY2tUbztcclxuXHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgICB0aGlzLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy5zaG93U2F2ZUJ1dHRvbixcclxuICAgICAgdGhpcy5zaG93QmFja0J1dHRvbixcclxuICAgICAgdGhpcy51c2VySUQsXHJcbiAgICAgIHRoaXMuYWRkaXRpb25hbFBhcmFtcyxcclxuICAgICAgdGhpcy5wcmVmaWx0ZXJQYXJhbXMsXHJcbiAgICAgIHRoaXMuc2hvd05ld1NlYXJjaEJ1dHRvblxyXG4gICAgKTtcclxuICAgIHRoaXMuZHluYW1pY01vZHVsZUxpc3RDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RDb25maWcoXHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlLFxyXG4gICAgICB0aGlzLnZhbHVlcyxcclxuICAgICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMsXHJcbiAgICAgIHRoaXMudXNlcklEXHJcbiAgICApO1xyXG4gICAgdGhpcy5keW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcoXHJcbiAgICAgIHRoaXMuRm9ybUpTT05cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jb25maWd1cmF0aW9ucy5jb250ZXh0O1xyXG4gICAgdGhpcy5iYXNlU2VydmVyVXJsID0gdGhpcy5jb25maWd1cmF0aW9ucy5iYXNlU2VydmVyVXJsO1xyXG4gICAgdGhpcy51c2VyVG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJUb2tlbjtcclxuICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5lbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgICAvL3RoaXMuZm9ybUlEID0gdGhpcy5jb25maWd1cmF0aW9ucy5keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5mb3JtSURcclxuXHJcbiAgICAvLyB0aGlzLnZpZXdNb2RlID0gdGhpcy5zdGFydGVyVmlld01vZGVcclxuICAgIFV0aWxpdHlIZWxwZXJTZXJ2aWNlLlNldENvbnRleHQodGhpcy5jb250ZXh0KTtcclxuICAgIFxyXG4gICAgdGhpcy5jb25maWd1cmVEZWZhdWx0RW5kUG9pbnRzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuRm9ybUpTT04gPT0gXCJcIikge1xyXG4gICAgICAvLyBwcmVuZGUgaWwgZm9ybSBlIGltcG9zdGEgbGEgdmlld21vZGUgY29ycmV0dGFcclxuICAgICAgLy8gYXdhaXQgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRSB8fCB0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkZJTFRFUikge1xyXG4gICAgICAvLyBkYSB2ZWRlcmUgaW4gZ2V0Rm9ybUJ5SURcclxuICAgICAgdGhpcy5kZWZhdWx0Vmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQobnVsbCksIDEwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoXyA9PiB7IHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgLy8gICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAvLyAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAvLyAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgLy8gICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gIC8vICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAvLyAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gIC8vICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgLy8gICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgLy8gICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAvLyAgICAgICB0aGlzLmxhc3Rmb3JtID0gcmVzO1xyXG4gIC8vICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAvLyAgICAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG5cclxuICAvLyAgICAgICAvLyBpZiAodGhpcy5zdGFydGVyVmlld01vZGUgPT0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFKSB7XHJcbiAgLy8gICAgICAgLy8gICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQobnVsbCk7XHJcbiAgLy8gICAgICAgLy8gfVxyXG4gIC8vICAgICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgKGVycikgPT4ge31cclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogU2UgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7ICAgIFxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICAvLyBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgIC8vICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAvLyAgICAge1xyXG4gICAgLy8gICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAvLyAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAvLyAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICBdO1xyXG4gICAgLy8gICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgIC8vICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAvLyAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgIC8vICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICAvLyAgICAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgLy8gICAgICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSByLkFuc3dlckRhdGU7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZHluYW1pY01vZHVsZUxpc3RDb25maWcudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgKTtcclxuICAgIC8vIH1cclxuICAvLyB9XHJcblxyXG4gIG9uR29CYWNrKCl7XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUbyA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUsIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgdW4gcmVjb3JkLlxyXG4gICAqIFNlIGwnZXZlbnRvIMOoIG51bGwgdnVvbCBkaXJlIGNoZSBzdGlhbW8gYWdnaXVuZ2VuZG8gdW4gbnVvdm8gcmVjb3JkIGFsdHJpbWVudGkgc2lhbW8gaW4gbW9kaWZpY2FcclxuICAgKiBvIHZpc3VhbGl6emF6aW9uZS4gSW4gcXVlc3RpIHVsdGltaSBkdWUgY2FzaSwgc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kcG9pbnQgcGVyIGlsIHJlY3VwZXJvXHJcbiAgICogZGVsIHJlY29yZCBjb21wbGV0byBhbGxvcmEgdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyLCBhbHRyaW1lbnRpIHZpZW5lIHVzYXRvIGwnb2dnZXR0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBjb24gZHVlIHByb3ByaWV0w6A6XHJcbiAgICogXCJyZWNvcmRcIiA9IG9nZ2V0dG8gZGEgbW9kaWZpY2FyZS92aXN1YWxpenphcmUsXHJcbiAgICogXCJvbmx5Vmlld1wiID0gYm9vbGVhbm8gKHNlIFRSVUUgc2lhbW8gaW4gdmlzdWFsaXp6YXppb25lIGFsdHJpbWVudGkgaW4gbW9kaWZpY2EpXHJcbiAgICovXHJcbiAgb25BZGRWaWV3RWRpdFJlY29yZChldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwib25BZGRWaWV3RWRpdFJlY29yZFwiLCBldmVudCk7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5vbmx5VmlldyA9IGV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKFwiVmVyc2lvbiBtb2R1bG9cIiwgZXZlbnQucmVjb3JkLlZlcnNpb24pXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJxdWVyeSBwYXJhbXNcIiwgZHluYW1pY01vZHVsZVBhcmFtcylcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZGVidWdMb2coXCJSRVNcIiwgcmVzKVxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuZGVmYXVsdFZpZXdNb2RlO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwic3VjY2VzcyBSdW5FbmRQb2ludENhbGxcIixyZXMsdGhpcy5kZWZhdWx0Vmlld01vZGUpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBxdWFuZG8gc2kgdnVvbGUgYWdnaXVuZ2VyZSwgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSB1biByZWNvcmQuXHJcbiAgICogU2UgbCdldmVudG8gw6ggbnVsbCB2dW9sIGRpcmUgY2hlIHN0aWFtbyBhZ2dpdW5nZW5kbyB1biBudW92byByZWNvcmQgYWx0cmltZW50aSBzaWFtbyBpbiBtb2RpZmljYVxyXG4gICAqIG8gdmlzdWFsaXp6YXppb25lLiBJbiBxdWVzdGkgdWx0aW1pIGR1ZSBjYXNpLCBzZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRwb2ludCBwZXIgaWwgcmVjdXBlcm9cclxuICAgKiBkZWwgcmVjb3JkIGNvbXBsZXRvIGFsbG9yYSB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIsIGFsdHJpbWVudGkgdmllbmUgdXNhdG8gbCdvZ2dldHRvIHNlbGV6aW9uYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGNvbiBkdWUgcHJvcHJpZXTDoDpcclxuICAgKiBcInJlY29yZFwiID0gb2dnZXR0byBkYSBtb2RpZmljYXJlL3Zpc3VhbGl6emFyZSxcclxuICAgKiBcIm9ubHlWaWV3XCIgPSBib29sZWFubyAoc2UgVFJVRSBzaWFtbyBpbiB2aXN1YWxpenphemlvbmUgYWx0cmltZW50aSBpbiBtb2RpZmljYSlcclxuICAgKi9cclxuICBvblZpZXdSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcmVjb3JkXHJcbiAgICAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcclxuICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlXHJcblxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBTQVZFXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBnZXN0aXJlIGlsIGNvbXBvbmVudGUgZG9wbyBjaGUgaWwgcmVjb3JkIMOoIHN0YXRvIGFnZ2l1bnRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkLmVtaXQoZXZlbnQpO1xyXG4gICAgLy8gaWYgKHRoaXMub25TYXZlQmFja1RvTGlzdCkge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTk9ORTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgaWwgY29tcG9uZW50ZSBkb3BvIGNoZSBlIHN0YXRhIHJpY2hpZXN0YSB1bmEgYWdnaXVudG8gbyB1bmEgbW9kaWZpY2EgZGVsIHJlY29yZCBuZWxsJyBhZGQtZm9ybS1yZWNvcmQuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBvbkFmdGVyU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmFmdGVyU2F2ZVJlY29yZC5lbWl0KGV2ZW50KTtcclxuICAgIC8vIGlmICh0aGlzLm9uU2F2ZUJhY2tUb0xpc3QpIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVDtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLk5PTkU7XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUb1xyXG4gIH1cclxuXHJcblxyXG4gIG9uU2F2ZUpzb24ocmVjb3JkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuU2F2ZUpTT04uZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uIFNBVkVcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICByZWxvYWQoKXtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiB0aGlzLmxvYWRlciA9IHRydWUsXHJcbiAgICAgIDUwXHJcbiAgICApXHJcbiAgfVxyXG4gIFxyXG4gIC8vI3JlZ2lvbiBEVVBMSUNBVEUgXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBkdXBsaWNhcmUgdW4gcmVjb3JkIHByZXNlbnRlIG5lbGxhIGxpc3RhLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBsYSBkdXBsaWNhemlvbmUgbGF0byBzZXJ2ZXIgYWxsb3JhIGVmZmV0dHVhIHVuYSBjaGlhbWF0YSBwYXNzYW5kbyBuZWwgYm9keVxyXG4gICAqIHVuIG9nZ2V0dG8gY29udGVuZW50ZSBpbCByZWNvcmQgZGEgZHVwbGljYXJlLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gZGkgb3V0cHV0IFwiZHVwbGljYXRlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIGR1cGxpY2FyZS5cclxuICAgKi9cclxuICBvbkR1cGxpY2F0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkgeyAgICBcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EdXBsaWNhdGVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgICAgXCJEdXBsaWNhcmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogcmVjb3JkLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkR1cGxpY2F0ZUVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyRHVwbGljYXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnJlbG9hZFRhYmxlcygpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25BZnRlckR1cGxpY2F0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nT25Jbml0KCksIDUwIClcclxuICAgIHRoaXMuYWZ0ZXJEdXBsaWNhdGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gRFVQTElDQVRFIFxyXG5cclxuICAvLyNyZWdpb24gREVMRVRFIFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIG9uRGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuRGVsZXRlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZS5Db25maXJtKFxyXG4gICAgICAgIFwiRWxpbWluYXJlIGlsIHJlY29yZCBzZWxlemlvbmF0bz9cIixcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHJlY29yZC5JRCxcclxuICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EZWxldGVFbmRQb2ludCxcclxuICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hZnRlckRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5yZWxvYWRUYWJsZXMoKVxyXG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBcIlJpY2hpZXN0YSBjb25mZXJtYVwiXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQWZ0ZXJEZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uZ09uSW5pdCgpLCA1MCApXHJcbiAgICB0aGlzLmFmdGVyRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZWRucmVnaW9uIERFTEVURSBcclxuXHJcbiAgb25BZnRlckZpbHRlcihldil7XHJcbiAgICB0aGlzLmFmdGVyRmlsdGVyLmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGVxcC1keW5hbWljLW1vZHVsZS1zcGlubmVyPjwvZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+XHJcblxyXG48IS0tIFtyZWNvcmRdPVwiJ2IzZDk0M2MwLTljMDEtNDk3My05NDhiLTdhYTQxODYzNGY3MidcIiAtLT5cclxuPHZpZXctZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlZJRVdcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtdmlld1wiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkLklEXCJcclxuICAoZ29CYWNrRXZlbnQpPVwib25Hb0JhY2soKVwiXHJcbj5cclxuPC92aWV3LWZvcm0tcmVjb3JkPlxyXG5cclxuPGZpbHRlci1mb3JtLXN0YXRpc3RpY1xyXG4qbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkZJTFRFUlwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1jb21waWxlXCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgW2RlZmF1bHRMaXN0QWN0aW9uc109XCJkZWZhdWx0TGlzdEFjdGlvbnNcIlxyXG4gIFtmaWx0ZXJSZXN1bHRWaWV3TW9kZV09XCJmaWx0ZXJSZXN1bHRWaWV3TW9kZVwiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICAoYWZ0ZXJGaWx0ZXIpPVwib25BZnRlckZpbHRlcigkZXZlbnQpXCJcclxuPlxyXG48L2ZpbHRlci1mb3JtLXN0YXRpc3RpYz5cclxuXHJcbjxhZGQtZm9ybS1yZWNvcmRcclxuKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbZm9ybV09XCJmb3JtXCJcclxuICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkXCJcclxuICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG5cclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG5cclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbj5cclxuPC9hZGQtZm9ybS1yZWNvcmQ+XHJcblxyXG48bGlzdC1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVFwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1saXN0XCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG5cclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlTGlzdENvbmZpZ1wiXHJcbiAgW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG5cclxuICAob25WaWV3UmVjb3JkKT1cIm9uVmlld1JlY29yZCgkZXZlbnQpXCJcclxuICAob25BZGRWaWV3RWRpdFJlY29yZCk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkKCRldmVudClcIlxyXG4gIChvbkR1cGxpY2F0ZVJlY29yZCk9XCJvbkR1cGxpY2F0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAob25BZnRlckR1cGxpY2F0ZVJlY29yZCk9XCJvbkFmdGVyRHVwbGljYXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkRlbGV0ZVJlY29yZCk9XCJvbkRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAob25BZnRlckRlbGV0ZVJlY29yZCk9XCJvbkFmdGVyRGVsZXRlUmVjb3JkKCRldmVudClcIlxyXG4+XHJcbjwvbGlzdC1mb3JtLXJlY29yZD5cclxuXHJcbjxyZXBhaXItZm9ybS1maWVsZHNcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLlJFUEFJUlwiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS1yZXBhaXJcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVSZXBhaXJDb25maWdcIlxyXG5cclxuICAob25TYXZlSnNvbik9XCJvblNhdmVKc29uKCRldmVudClcIlxyXG4+XHJcbjwvcmVwYWlyLWZvcm0tZmllbGRzPlxyXG5cclxuPGxpc3Qtdmlldy1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTElTVFdJRVdcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtbGlzdC12aWV3XCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnXCJcclxuICBbY29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuICBbZGVmYXVsdExpc3RWaWV3RnVuY3Rpb25dPVwiZGVmYXVsdExpc3RWaWV3RnVuY3Rpb25cIlxyXG4gIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuICBbb25seVZpZXddPVwiIWRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0XCJcclxuXHJcbiAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdFJlY29yZCgkZXZlbnQpXCJcclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRHVwbGljYXRlUmVjb3JkKT1cIm9uRHVwbGljYXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChzYXZlUmVjb3JkRXZlbnQpPVwib25TYXZlUmVjb3JkKCRldmVudClcIlxyXG4gIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICA+XHJcbjwvbGlzdC12aWV3LWZvcm0tcmVjb3JkPlxyXG4iXX0=
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHOUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDdEYsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFFdEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFaEYsT0FB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K0JJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2NvbnRleHQubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW1cIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgRm9ybSwgRm9ybVR5cGVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRmlsdGVyUmVzdWx0VHlwZSB9IGZyb20gXCJAZXFwcm9qZWN0L2VxcC1maWx0ZXJzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0ubW9kZWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVxcC1keW5hbWljLW1vZHVsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2VxcC1keW5hbWljLW1vZHVsZS5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxcER5bmFtaWNNb2R1bGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIFxyXG4gIEBJbnB1dCgpIGRlYnVnTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRlYnVnTG9nKG1lc3NhZ2U6IHN0cmluZywgZWxlbWVudD86IGFueSl7XHJcbiAgICBpZih0aGlzLmRlYnVnTW9kZSl7XHJcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbmZpZztcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUdlbmVyYWxDb25maWc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhcnRlclZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG5cclxuICBASW5wdXQoKSB1c2VySUQ6IHN0cmluZyA9IFwiMFwiO1xyXG4gIEBJbnB1dCgpIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICBASW5wdXQoKSB2YWx1ZXM6IEFycmF5PFJlY29yZD4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIEZvcm1KU09OID0gXCJcIjtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uOiBGdW5jdGlvbiA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIEBJbnB1dCgpIG9uU2F2ZUJhY2tUb0xpc3QgPSBmYWxzZTtcclxuICBASW5wdXQoKSBvbkJhY2tUbzogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSA9IG51bGw7XHJcbiAgQElucHV0KCkgZmlsdGVyUmVzdWx0Vmlld01vZGU6IER5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0gPSBEeW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLklOVEVSTkFMX0VRUFRBQkxFO1xyXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxQYXJhbXM6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgcHJlZmlsdGVyUGFyYW1zOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNob3dOZXdTZWFyY2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGFuc3dlclRvRHVwbGljYXRlSWQ6IGFueTtcclxuXHJcbiAgY29udGV4dDogQ29udGV4dCA9IG5ldyBDb250ZXh0KCk7XHJcbiAgLyoqXHJcbiAgICogVXJsIGRlbCBzZXJ2ZXIgZGEgY2hpYW1hcmUgcGVyIHJlY3VwZXJhcmUsIHNhbHZhcmUgbyBlbGltaW5hcmUgaSByZWNvcmQuXHJcbiAgICogVXNhdG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBkZWZhdWx0IGRlZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIGJhc2VTZXJ2ZXJVcmw6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRva2VuIGRhIHVzYXJlIG5lZ2xpIGVuZHBvaW50IGRhIGNoaWFtYXJlIHBlciByZWN1cGVyYXJlIG8gc2FsdmFyZSBpIHJlY29yZC5cclxuICAgKiBVc2F0byBzb2xvIHNlIHZpZW5lIHBvcG9sYXRhIGxhIHByb3ByaWV0w6AgXCJiYXNlU2VydmVyVXJsXCIuXHJcbiAgICovXHJcbiAgdXNlclRva2VuOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmF6aW9uZSBkZWdsaSBlbmRwb2ludCBkYSBjaGlhbWFyZSBwZXIgcmVjdXBlcmFyZSBvIHNhbHZhcmUgaSBkYXRpLlxyXG4gICAqIFB1w7IgZXNzZXJlIGRlZmluaXRhIGRhbGwndXRlbnRlIG9wcHVyZSBsYXNjaWF0YSBudWxsLCB2aWVuZSBwb3BvbGF0YSBjb24gZGVpXHJcbiAgICogdmFsb3JpIGRpIGRlZmF1bHQgc2UgdmllbmUgdmFsb3JpenphdGEgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiBhbHRyaW1lbnRpXHJcbiAgICogdmllbmUgbGFzY2lhdGEgbnVsbCBlIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGFsIHNlcnZlci5cclxuICAgKi9cclxuICBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbiA9IG51bGw7XHJcblxyXG4gIC8vQElucHV0KCkgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgLy8gZGVmYXVsdExpc3RBY3Rpb25zOiBkeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9IG5ldyBkeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIC8vIEZvcm1KU09OOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudGkgZW1lc3NpIHF1YW5kbyBzaSBzYWx2YSwgZWxpbWluYSBvIGR1cGxpY2EgdW4gcmVjb3JkXHJcbiAgICogc2Ugbm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIHVuIGVuZHBvaW50IGRhIGNoaWFtYXJlLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGR1cGxpY2F0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgU2F2ZUpTT046IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRmlsdGVyOiBFdmVudEVtaXR0ZXI8QXJyYXk8RHluUmVjb3JkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PER5blJlY29yZD4+KCk7XHJcbiAgLyoqXHJcbiAgICogRXZlbnRpIGVtZXNzaSBET1BPIGF2ZXIgZXNlZ3VpdG8gdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwZXIgaWwgc2FsdmF0YWdnaW8sXHJcbiAgICogbCdlbGltaW5hemlvbmUgbyBsYSBkdXBsaWNhemlvbmUgZGkgdW4gcmVjb3JkIGFsbCdlbmRwb2ludCBzcGVjaWZpY2F0by5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlckRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRHVwbGljYXRlUmVjb3JkOiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgZm9ybTogRm9ybSA9IG5ldyBGb3JtKCk7XHJcbiAgbGFzdGZvcm06IEZvcm0gPSBuZXcgRm9ybSgpO1xyXG4gIEZvcm1UeXBlRW51bSA9IEZvcm1UeXBlRW51bTtcclxuICBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuICBzZWxlY3RlZFJlY29yZDogUmVjb3JkO1xyXG4gIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIHZpZXdNb2RlOiBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtO1xyXG4gIGRlZmF1bHRWaWV3TW9kZTogRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bTtcclxuXHJcbiAgZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIGR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnOiBEeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdXRpbGl0eUhlbHBlclNlcnZpY2U6IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5vbkJhY2tUbyA9ICh0aGlzLm9uQmFja1RvID09IG51bGwpID8gdGhpcy5zdGFydGVyVmlld01vZGUgOiB0aGlzLm9uQmFja1RvO1xyXG5cclxuICAgIHRoaXMuZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlLFxyXG4gICAgICB0aGlzLnNob3dTYXZlQnV0dG9uLFxyXG4gICAgICB0aGlzLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLnVzZXJJRCxcclxuICAgICAgdGhpcy5hZGRpdGlvbmFsUGFyYW1zLFxyXG4gICAgICB0aGlzLnByZWZpbHRlclBhcmFtcyxcclxuICAgICAgdGhpcy5zaG93TmV3U2VhcmNoQnV0dG9uXHJcbiAgICApO1xyXG4gICAgdGhpcy5keW5hbWljTW9kdWxlTGlzdENvbmZpZyA9IG5ldyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyhcclxuICAgICAgdGhpcy5zaG93VGl0bGUsXHJcbiAgICAgIHRoaXMudmFsdWVzLFxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyxcclxuICAgICAgdGhpcy51c2VySURcclxuICAgICk7XHJcbiAgICB0aGlzLmR5bmFtaWNNb2R1bGVSZXBhaXJDb25maWcgPSBuZXcgRHluYW1pY01vZHVsZVJlcGFpckNvbmZpZyhcclxuICAgICAgdGhpcy5Gb3JtSlNPTlxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbnRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmNvbnRleHQ7XHJcbiAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmJhc2VTZXJ2ZXJVcmw7XHJcbiAgICB0aGlzLnVzZXJUb2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbnMudXNlclRva2VuO1xyXG4gICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICAgIC8vdGhpcy5mb3JtSUQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmR5bmFtaWNNb2R1bGVHZW5lcmFsQ29uZmlnLmZvcm1JRFxyXG5cclxuICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZVxyXG4gICAgVXRpbGl0eUhlbHBlclNlcnZpY2UuU2V0Q29udGV4dCh0aGlzLmNvbnRleHQpO1xyXG4gICAgXHJcbiAgICB0aGlzLmNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtSlNPTiA9PSBcIlwiKSB7XHJcbiAgICAgIC8vIHByZW5kZSBpbCBmb3JtIGUgaW1wb3N0YSBsYSB2aWV3bW9kZSBjb3JyZXR0YVxyXG4gICAgICAvLyBhd2FpdCB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhcnRlclZpZXdNb2RlID09IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRSB8fCB0aGlzLnN0YXJ0ZXJWaWV3TW9kZSA9PSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkZJTFRFUikge1xyXG4gICAgICAvLyBkYSB2ZWRlcmUgaW4gZ2V0Rm9ybUJ5SURcclxuICAgICAgdGhpcy5kZWZhdWx0Vmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQobnVsbCksIDEwMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuc3RhcnRlclZpZXdNb2RlO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoXyA9PiB7IHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpIH0sIDApOyAvLyByZWZyZXNoIHVpXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgLy8gICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAvLyAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAvLyAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgLy8gICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gIC8vICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAvLyAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gIC8vICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgLy8gICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgLy8gICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAvLyAgICAgICB0aGlzLmxhc3Rmb3JtID0gcmVzO1xyXG4gIC8vICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAvLyAgICAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG5cclxuICAvLyAgICAgICAvLyBpZiAodGhpcy5zdGFydGVyVmlld01vZGUgPT0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFKSB7XHJcbiAgLy8gICAgICAgLy8gICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQobnVsbCk7XHJcbiAgLy8gICAgICAgLy8gfVxyXG4gIC8vICAgICAgIC8vIHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0ZXJWaWV3TW9kZTtcclxuICAvLyAgICAgfSxcclxuICAvLyAgICAgKGVycikgPT4ge31cclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgKiBhIGN1aSBzaSBkZXZlIGNvbm5ldHRlcmUgZSBhbCB0b2tlbiBkYSBwYXNzYXJlIHBlciBhdXRlbnRpY2Fyc2kuXHJcbiAgICogU2UgbGEgcHJvcHJpZXTDoCBcImJhc2VTZXJ2ZXJVcmxcIiDDqCBudWxsIGUgbm9uIHNvbm8gc3RhdGkgY29uZmlndXJhdGkgaSB2YXJpIGVuZHBvaW50IGFsbG9yYVxyXG4gICAqIG5vbiB2aWVuZSBlc2VndWl0YSBuZXNzdW5hIGNoaWFtYXRhIGh0dHAgcGVyIHJlY3VwZXJhcmUvc2FsdmFyZSBpIGRhdGkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlRGVmYXVsdEVuZFBvaW50cygpIHtcclxuICAgIGlmICghdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiYgdGhpcy5iYXNlU2VydmVyVXJsKSB7XHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uID1cclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLkNvbmZpZ3VyZURlZmF1bHRFbmRQb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmJhc2VTZXJ2ZXJVcmwsXHJcbiAgICAgICAgICB0aGlzLnVzZXJUb2tlblxyXG4gICAgICAgICk7ICAgIFxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICAvLyBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAvLyAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgIC8vICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUZvcm1JREVuZFBvaW50XHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAvLyAgICAge1xyXG4gICAgLy8gICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAvLyAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAvLyAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICBdO1xyXG4gICAgLy8gICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgIC8vICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAvLyAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgIC8vICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLmR5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICAvLyAgICAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgLy8gICAgICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAvLyAgICAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgIC8vICAgICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSByLkFuc3dlckRhdGU7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZHluYW1pY01vZHVsZUxpc3RDb25maWcudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgKTtcclxuICAgIC8vIH1cclxuICAvLyB9XHJcblxyXG4gIG9uR29CYWNrKCl7XHJcbiAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5vbkJhY2tUbyA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUsIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgdW4gcmVjb3JkLlxyXG4gICAqIFNlIGwnZXZlbnRvIMOoIG51bGwgdnVvbCBkaXJlIGNoZSBzdGlhbW8gYWdnaXVuZ2VuZG8gdW4gbnVvdm8gcmVjb3JkIGFsdHJpbWVudGkgc2lhbW8gaW4gbW9kaWZpY2FcclxuICAgKiBvIHZpc3VhbGl6emF6aW9uZS4gSW4gcXVlc3RpIHVsdGltaSBkdWUgY2FzaSwgc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kcG9pbnQgcGVyIGlsIHJlY3VwZXJvXHJcbiAgICogZGVsIHJlY29yZCBjb21wbGV0byBhbGxvcmEgdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyLCBhbHRyaW1lbnRpIHZpZW5lIHVzYXRvIGwnb2dnZXR0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBjb24gZHVlIHByb3ByaWV0w6A6XHJcbiAgICogXCJyZWNvcmRcIiA9IG9nZ2V0dG8gZGEgbW9kaWZpY2FyZS92aXN1YWxpenphcmUsXHJcbiAgICogXCJvbmx5Vmlld1wiID0gYm9vbGVhbm8gKHNlIFRSVUUgc2lhbW8gaW4gdmlzdWFsaXp6YXppb25lIGFsdHJpbWVudGkgaW4gbW9kaWZpY2EpXHJcbiAgICovXHJcbiAgb25BZGRWaWV3RWRpdFJlY29yZChldmVudDogeyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfSkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwib25BZGRWaWV3RWRpdFJlY29yZFwiLCBldmVudCk7XHJcblxyXG4gICAgaWYgKGV2ZW50ICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5vbmx5VmlldyA9IGV2ZW50Lm9ubHlWaWV3O1xyXG4gICAgICB0aGlzLmRlYnVnTG9nKFwiVmVyc2lvbiBtb2R1bG9cIiwgZXZlbnQucmVjb3JkLlZlcnNpb24pXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJxdWVyeSBwYXJhbXNcIiwgZHluYW1pY01vZHVsZVBhcmFtcylcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZGVidWdMb2coXCJSRVNcIiwgcmVzKVxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdNb2RlID0gdGhpcy5kZWZhdWx0Vmlld01vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IHRoaXMuZGVmYXVsdFZpZXdNb2RlO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwic3VjY2VzcyBSdW5FbmRQb2ludENhbGxcIixyZXMsdGhpcy5kZWZhdWx0Vmlld01vZGUpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuYW5zd2VyVG9EdXBsaWNhdGVJZCAhPSBudWxsKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHRoaXMuYW5zd2VyVG9EdXBsaWNhdGVJZDtcclxuICAgICAgICAgICAgdGhpcy5pc0R1cGxpY2F0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudmlld01vZGUgPSB0aGlzLmRlZmF1bHRWaWV3TW9kZTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5vbmx5VmlldyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uVmlld1JlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSByZWNvcmRcclxuICAgICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uVklFV1xyXG4gICAgICB0aGlzLmxvYWRlciA9IHRydWVcclxuXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFNBVkVcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGdlc3RpcmUgaWwgY29tcG9uZW50ZSBkb3BvIGNoZSBpbCByZWNvcmQgw6ggc3RhdG8gYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIHNhbHZhcmUuXHJcbiAgICovXHJcbiAgb25TYXZlUmVjb3JkKGV2ZW50OiBSZWNvcmQpIHtcclxuICAgIC8vIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmQuZW1pdChldmVudCk7XHJcbiAgICAvLyBpZiAodGhpcy5vblNhdmVCYWNrVG9MaXN0KSB7XHJcbiAgICAvLyAgIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1Q7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5OT05FO1xyXG4gICAgLy8gfVxyXG4gICAgdGhpcy52aWV3TW9kZSA9IHRoaXMub25CYWNrVG9cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZ2VzdGlyZSBpbCBjb21wb25lbnRlIGRvcG8gY2hlIGUgc3RhdGEgcmljaGllc3RhIHVuYSBhZ2dpdW50byBvIHVuYSBtb2RpZmljYSBkZWwgcmVjb3JkIG5lbGwnIGFkZC1mb3JtLXJlY29yZC5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uQWZ0ZXJTYXZlUmVjb3JkKGV2ZW50OiBSZWNvcmQpIHtcclxuICAgIHRoaXMuYWZ0ZXJTYXZlUmVjb3JkLmVtaXQoZXZlbnQpO1xyXG4gICAgLy8gaWYgKHRoaXMub25TYXZlQmFja1RvTGlzdCkge1xyXG4gICAgLy8gICB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5MSVNUO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uTk9ORTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMudmlld01vZGUgPSB0aGlzLm9uQmFja1RvXHJcbiAgfVxyXG5cclxuXHJcbiAgb25TYXZlSnNvbihyZWNvcmQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5TYXZlSlNPTi5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gU0FWRVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHJlbG9hZCgpe1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IHRoaXMubG9hZGVyID0gdHJ1ZSxcclxuICAgICAgNTBcclxuICAgIClcclxuICB9XHJcbiAgXHJcbiAgLy8jcmVnaW9uIERVUExJQ0FURSBcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGR1cGxpY2FyZSB1biByZWNvcmQgcHJlc2VudGUgbmVsbGEgbGlzdGEuXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGxhIGR1cGxpY2F6aW9uZSBsYXRvIHNlcnZlciBhbGxvcmEgZWZmZXR0dWEgdW5hIGNoaWFtYXRhIHBhc3NhbmRvIG5lbCBib2R5XHJcbiAgICogdW4gb2dnZXR0byBjb250ZW5lbnRlIGlsIHJlY29yZCBkYSBkdXBsaWNhcmUsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBkaSBvdXRwdXQgXCJkdXBsaWNhdGVSZWNvcmRcIi5cclxuICAgKiBAcGFyYW0gcmVjb3JkIE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgZHVwbGljYXJlLlxyXG4gICAqL1xyXG4gIG9uRHVwbGljYXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7ICAgIFxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkR1cGxpY2F0ZUVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgRXFwRHluYW1pY01vZHVsZURpYWxvZ1NlcnZpY2UuQ29uZmlybShcclxuICAgICAgICBcIkR1cGxpY2FyZSBpbCByZWNvcmQgc2VsZXppb25hdG8/XCIsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICAgICAgICBQYXJhbVZhbHVlOiByZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuRHVwbGljYXRlRW5kUG9pbnQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWZ0ZXJEdXBsaWNhdGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMucmVsb2FkVGFibGVzKClcclxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgXCJSaWNoaWVzdGEgY29uZmVybWFcIlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kdXBsaWNhdGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbkFmdGVyRHVwbGljYXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmdPbkluaXQoKSwgNTAgKVxyXG4gICAgdGhpcy5hZnRlckR1cGxpY2F0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBEVVBMSUNBVEUgXHJcblxyXG4gIC8vI3JlZ2lvbiBERUxFVEUgXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgb25EZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5EZWxldGVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkNvbmZpcm0oXHJcbiAgICAgICAgXCJFbGltaW5hcmUgaWwgcmVjb3JkIHNlbGV6aW9uYXRvP1wiLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogcmVjb3JkLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkRlbGV0ZUVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnJlbG9hZFRhYmxlcygpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIFwiUmljaGllc3RhIGNvbmZlcm1hXCJcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25BZnRlckRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nT25Jbml0KCksIDUwIClcclxuICAgIHRoaXMuYWZ0ZXJEZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlZG5yZWdpb24gREVMRVRFIFxyXG5cclxuICBvbkFmdGVyRmlsdGVyKGV2KXtcclxuICAgIHRoaXMuYWZ0ZXJGaWx0ZXIuZW1pdChldik7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZXFwLWR5bmFtaWMtbW9kdWxlLXNwaW5uZXI+PC9lcXAtZHluYW1pYy1tb2R1bGUtc3Bpbm5lcj5cclxuXHJcbjwhLS0gW3JlY29yZF09XCInYjNkOTQzYzAtOWMwMS00OTczLTk0OGItN2FhNDE4NjM0ZjcyJ1wiIC0tPlxyXG48dmlldy1mb3JtLXJlY29yZFxyXG4gICpuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uVklFV1wiXHJcbiAgY2xhc3M9XCJkeW5hbWljLW1vZHVsZS12aWV3XCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmQuSURcIlxyXG4gIChnb0JhY2tFdmVudCk9XCJvbkdvQmFjaygpXCJcclxuPlxyXG48L3ZpZXctZm9ybS1yZWNvcmQ+XHJcblxyXG48ZmlsdGVyLWZvcm0tc3RhdGlzdGljXHJcbipuZ0lmPVwibG9hZGVyICYmIHZpZXdNb2RlID09IGR5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uRklMVEVSXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gIFtkZWJ1Z01vZGVdPVwiZGVidWdNb2RlXCJcclxuICBbZm9ybV09XCJmb3JtXCJcclxuICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgW3JlY29yZF09XCJzZWxlY3RlZFJlY29yZFwiXHJcbiAgW29ubHlWaWV3XT1cIm9ubHlWaWV3XCJcclxuICBbZGVmYXVsdExpc3RBY3Rpb25zXT1cImRlZmF1bHRMaXN0QWN0aW9uc1wiXHJcbiAgW2ZpbHRlclJlc3VsdFZpZXdNb2RlXT1cImZpbHRlclJlc3VsdFZpZXdNb2RlXCJcclxuICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWdcIlxyXG4gIChhZnRlckZpbHRlcik9XCJvbkFmdGVyRmlsdGVyKCRldmVudClcIlxyXG4+XHJcbjwvZmlsdGVyLWZvcm0tc3RhdGlzdGljPlxyXG5cclxuPGFkZC1mb3JtLXJlY29yZFxyXG4qbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEVcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29tcGlsZVwiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtmb3JtXT1cImZvcm1cIlxyXG4gIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gIFtvbmx5Vmlld109XCJvbmx5Vmlld1wiXHJcbiAgW2lzRHVwbGljYXRlXT1cImlzRHVwbGljYXRlXCJcclxuXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFt1c2VySURdPVwidXNlcklEXCJcclxuXHJcbiAgW2NvbmZpZ3VyYXRpb25zXT1cImR5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnXCJcclxuXHJcbiAgKHNhdmVSZWNvcmRFdmVudCk9XCJvblNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4+XHJcbjwvYWRkLWZvcm0tcmVjb3JkPlxyXG5cclxuPGxpc3QtZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1RcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtbGlzdFwiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5cclxuICBbY29uZmlndXJhdGlvbnNdPVwiZHluYW1pY01vZHVsZUxpc3RDb25maWdcIlxyXG4gIFtleHRlcm5hbEJ1dHRvbnNdPVwiZXh0ZXJuYWxCdXR0b25zXCJcclxuXHJcbiAgKG9uVmlld1JlY29yZCk9XCJvblZpZXdSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWRkVmlld0VkaXRSZWNvcmQpPVwib25BZGRWaWV3RWRpdFJlY29yZCgkZXZlbnQpXCJcclxuICAob25EdXBsaWNhdGVSZWNvcmQpPVwib25EdXBsaWNhdGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWZ0ZXJEdXBsaWNhdGVSZWNvcmQpPVwib25BZnRlckR1cGxpY2F0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAob25EZWxldGVSZWNvcmQpPVwib25EZWxldGVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uQWZ0ZXJEZWxldGVSZWNvcmQpPVwib25BZnRlckRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcclxuPlxyXG48L2xpc3QtZm9ybS1yZWNvcmQ+XHJcblxyXG48cmVwYWlyLWZvcm0tZmllbGRzXHJcbiAgKm5nSWY9XCJsb2FkZXIgJiYgdmlld01vZGUgPT0gZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5SRVBBSVJcIlxyXG4gIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtcmVwYWlyXCJcclxuICBbZGVidWdNb2RlXT1cImRlYnVnTW9kZVwiXHJcblxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnXCJcclxuXHJcbiAgKG9uU2F2ZUpzb24pPVwib25TYXZlSnNvbigkZXZlbnQpXCJcclxuPlxyXG48L3JlcGFpci1mb3JtLWZpZWxkcz5cclxuXHJcbjxsaXN0LXZpZXctZm9ybS1yZWNvcmRcclxuICAqbmdJZj1cImxvYWRlciAmJiB2aWV3TW9kZSA9PSBkeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkxJU1RXSUVXXCJcclxuICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWxpc3Qtdmlld1wiXHJcbiAgW2RlYnVnTW9kZV09XCJkZWJ1Z01vZGVcIlxyXG4gIFtjb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlTGlzdENvbmZpZ1wiXHJcbiAgW2NvbXBpbGVDb25maWd1cmF0aW9uc109XCJkeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZ1wiXHJcbiAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICBbdXNlcklEXT1cInVzZXJJRFwiXHJcbiAgW2RlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uXT1cImRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uXCJcclxuICBbZXh0ZXJuYWxCdXR0b25zXT1cImV4dGVybmFsQnV0dG9uc1wiXHJcbiAgW29ubHlWaWV3XT1cIiFkZWZhdWx0TGlzdEFjdGlvbnMuZWRpdFwiXHJcblxyXG4gIChvbkFkZFZpZXdFZGl0UmVjb3JkKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQoJGV2ZW50KVwiXHJcbiAgKG9uRGVsZXRlUmVjb3JkKT1cIm9uRGVsZXRlUmVjb3JkKCRldmVudClcIlxyXG4gIChvbkR1cGxpY2F0ZVJlY29yZCk9XCJvbkR1cGxpY2F0ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoc2F2ZVJlY29yZEV2ZW50KT1cIm9uU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgPlxyXG48L2xpc3Qtdmlldy1mb3JtLXJlY29yZD5cclxuIl19
|