@tsi-developpement/tsi-shared-ui 1.8.37 → 1.8.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/consts/business-class-names.mjs +3 -1
- package/esm2022/lib/end-points/endpoints.mjs +7 -2
- package/esm2022/lib/models/actionErp/actionErp.mjs +7 -1
- package/esm2022/lib/models/actionErp/nature-action.mjs +6 -0
- package/esm2022/lib/models/tsi-card/tsi-card.mjs +1 -1
- package/esm2022/lib/services/actionErp/nature-action-service.service.mjs +23 -0
- package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +9 -1
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +18 -3
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +1 -1
- package/esm2022/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.mjs +182 -25
- package/esm2022/lib/tsi-components/tsi-calender/context-menu/context-menu.component.mjs +16 -4
- package/esm2022/lib/tsi-components/tsi-calender/tsi-calender.component.mjs +30 -3
- package/esm2022/lib/tsi-components/tsi-card/tsi-card.component.mjs +50 -23
- package/esm2022/lib/tsi-components/tsi-card-list/tsi-card-list.component.mjs +14 -4
- package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +17 -5
- package/esm2022/lib/tsi-components/tsi-kanban/tsi-kanban.component.mjs +48 -22
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +395 -84
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/business-class-names.d.ts +2 -0
- package/lib/end-points/endpoints.d.ts +5 -0
- package/lib/models/actionErp/actionErp.d.ts +10 -0
- package/lib/models/actionErp/nature-action.d.ts +12 -0
- package/lib/models/tsi-card/tsi-card.d.ts +1 -0
- package/lib/providers/shared-ui-tsi.provider.d.ts +1 -1
- package/lib/services/actionErp/nature-action-service.service.d.ts +12 -0
- package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +3 -0
- package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +6 -1
- package/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.d.ts +19 -4
- package/lib/tsi-components/tsi-calender/context-menu/context-menu.component.d.ts +5 -1
- package/lib/tsi-components/tsi-calender/tsi-calender.component.d.ts +6 -1
- package/lib/tsi-components/tsi-card/tsi-card.component.d.ts +15 -5
- package/lib/tsi-components/tsi-card-list/tsi-card-list.component.d.ts +5 -1
- package/lib/tsi-components/tsi-kanban/tsi-kanban.component.d.ts +14 -6
- package/package.json +1 -1
|
@@ -820,8 +820,20 @@ export class TsiGenericCrudComponent {
|
|
|
820
820
|
case Component_Modes.EDIT:
|
|
821
821
|
this._editRow(item.id);
|
|
822
822
|
break;
|
|
823
|
-
case
|
|
824
|
-
|
|
823
|
+
case 'info':
|
|
824
|
+
this.handleButtonColumnClicked({ field: 'info', key: item.id, selectKeyOnly: true });
|
|
825
|
+
break;
|
|
826
|
+
case 'download':
|
|
827
|
+
this.handleButtonColumnClicked({ field: 'download', key: item.id, selectKeyOnly: true });
|
|
828
|
+
break;
|
|
829
|
+
case 'upload':
|
|
830
|
+
this.handleButtonColumnClicked({ field: 'upload', key: item.id, selectKeyOnly: true });
|
|
831
|
+
break;
|
|
832
|
+
case 'notes':
|
|
833
|
+
this.handleButtonColumnClicked({ field: 'notes', key: item.id, selectKeyOnly: true });
|
|
834
|
+
break;
|
|
835
|
+
case 'ActionERP':
|
|
836
|
+
this.handleButtonColumnClicked({ field: 'ActionERP', key: item.id, selectKeyOnly: true });
|
|
825
837
|
break;
|
|
826
838
|
}
|
|
827
839
|
}
|
|
@@ -951,11 +963,11 @@ export class TsiGenericCrudComponent {
|
|
|
951
963
|
return null;
|
|
952
964
|
}
|
|
953
965
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericCrudComponent, deps: [{ token: i1.TsiNotificationService }, { token: i2.MessageService }, { token: i3.TsiModalService }, { token: i0.ChangeDetectorRef }, { token: i4.LocalizePipe }, { token: i5.DialogDataService }, { token: i6.FichierUploadService }, { token: i7.RecordInfoPopupService }, { token: i8.WorkflowConfigurationService }, { token: i9.EntityConfigurationService }, { token: i10.NoteService }, { token: i0.EnvironmentInjector }, { token: i11.DiscriminatorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
954
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: { entityInfo: "entityInfo", modalData: "modalData", columns: "columns", gridConfiguration: "gridConfiguration", cudComponent: "cudComponent", crudService: "crudService", header: "header", modalSize: "modalSize", descriminatorValue: "descriminatorValue", presentationSettings: "presentationSettings", preventAddEvent: "preventAddEvent", formEndpoint: "formEndpoint", formName: "formName", isSearchButtonDisabled: "isSearchButtonDisabled", showHeaderFilters: "showHeaderFilters", showEditButton: "showEditButton", showDeleteButton: "showDeleteButton", showAddButton: "showAddButton", showConsultButton: "showConsultButton", showUploadButton: "showUploadButton", showNoteButton: "showNoteButton", showDownloadButton: "showDownloadButton", showInfoButton: "showInfoButton", showDuplicateButton: "showDuplicateButton", showFormButton: "showFormButton", showCalenderView: "showCalenderView", showCardView: "showCardView", showImportFromOutlookButton: "showImportFromOutlookButton", showKanbanView: "showKanbanView", showKanbanViewOfWorkFlowEtat: "showKanbanViewOfWorkFlowEtat", showSearchField: "showSearchField", searchFields: "searchFields", calenderSchema: "calenderSchema", showActionButton: "showActionButton", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", selectedItems: "selectedItems", key: "key", id: "id", businessClass: "businessClass", searchOnInit: "searchOnInit", showGlobalSearch: "showGlobalSearch", showExportButton: "showExportButton", showReporting: "showReporting" }, outputs: { selectedItemsChange: "selectedItemsChange", searchFieldsValueChanged: "searchFieldsValueChanged", buttonColumnClicked: "buttonColumnClicked", onImportFromOutlookClicked: "onImportFromOutlookClicked" }, host: { listeners: { "window:keydown": "handleKeyDown($event)" } }, providers: [TsiNotificationService], viewQueries: [{ propertyName: "genericGridComponent", first: true, predicate: TsiGenericGridComponent, descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n \r\n <p-toolbar styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2 no-pad\" \r\n *ngIf=\"(showAddButton || searchFields || formEndpoint || businessClass) && showReporting\">\r\n\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 mx-2\">\r\n <div *ngIf=\"showAddButton\" presentationDesignerBase=\"add_button\">\r\n <Tsi-Button icon=\"pi pi-plus\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_add_view\" \r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"openNew()\">\r\n </Tsi-Button>\r\n </div>\r\n <div *ngIf=\"searchFields\" presentationDesignerBase=\"show_search_fields_button\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n tooltipText=\"shared_tsi_component_menu\"\r\n styleClass=\"h-2rem p-button-icon-only hover:shadow-6 {{ showSearchField ? 'p-button-secondary' : 'p-button-success' }}\"\r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div *ngIf=\"showImportFromOutlookButton\" presentationDesignerBase=\"importFromOutlook_button\">\r\n <Tsi-Button icon=\"pi pi-envelope\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_import_from_outlook\" \r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"onImportClicked()\"> \r\n </Tsi-Button>\r\n </div>\r\n\r\n <div presentationDesignerBase=\"toggle_actions_view_button\">\r\n <p-splitButton\r\n [icon]=\"currentIcon\"\r\n [model]=\"viewOptions\"\r\n (onClick)=\"handleActionViewClick()\"\r\n [tooltip]=\"currentTooltip | localize\"\r\n class=\"p-button-icon-only p-button-rounded p-button-primary h-2rem hover:shadow-6\"\r\n />\r\n <!-- <Tsi-Button\r\n [icon]=\"currentIcon\"\r\n styleClass=\"p-element p-button-primary h-2rem p-button p-component p-button-icon-only\"\r\n (click)=\"handleActionViewClick()\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n [tooltipText]=\"currentTooltip | localize\">\r\n </Tsi-Button> -->\r\n </div>\r\n\r\n \r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"(formEndpoint || businessClass)\" \r\n [formEndpoint]=\"formEndpoint\" \r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\" \r\n [isFormEndpointPaged]=\"true\"\r\n [businessClass]=\"businessClass\"\r\n [reportDiscriminator]=\"descriminatorValue\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [cudComponent]=\"cudComponent\" \r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <div>\r\n\r\n <Tsi-Generic-Grid\r\n [formName]=\"formName\"\r\n [crudService]=\"crudService\"\r\n [showSearchField]=\"showSearchField\"\r\n [searchFields]=\"searchFields\"\r\n [descriminatorValue]=\"descriminatorValue\"\r\n [header]=\"header\"\r\n [page]=\"page\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [columns]=\"selectedColumns\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [presentationSettings]=\"presentationSettings\"\r\n (load)=\"load($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [key]=\"key\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldValueChanges($event)\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n [showCardView]=\"showCardView\"\r\n [showKanbanView]=\"showKanbanView\"\r\n [showKanbanViewOfWorkFlowEtat]=\"showKanbanViewOfWorkFlowEtat\"\r\n [businessClass]=\"businessClass\"\r\n [cudComponent]=\"cudComponent\" \r\n [modalSize]=\"modalSize\" \r\n [id]=\"id\"\r\n [page$]=\"page$\"\r\n [entityInfo]=\"entityInfo\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n (statusFilterChanged)=\"onStatusFilterChanged($event)\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n \r\n</div>\r\n", styles: [".p-button{padding:.1rem!important}.tlbar{border:1px solid gainsboro;padding:2px;background:#f8f9fa}.hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}::ng-deep .no-pad{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i13.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i14.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "component", type: i15.TsiGenericGridComponent, selector: "Tsi-Generic-Grid", inputs: ["cudComponent", "modalSize", "formName", "id", "pagedRequest", "configuration", "page", "key", "columns", "isSearchButtonDisabled", "filteredColumns", "gridData", "isTableLoading", "parent", "showSearchBox", "showActionColumn", "showHeaderFilters", "showFilterButton", "isGridDataPagedInApi", "header", "ShowFilterColumns", "showImportExportButton", "crudService", "searchFields", "sortMode", "filtersHtmlTemplate", "presentationSettings", "selectKeyOnly", "selectionMode", "selectedItems", "searchOnInit", "showGlobalSearch", "showExportButton", "showSearchField", "showCalenderView", "calenderSchema", "showCardView", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "page$", "checkedByField", "selectAll", "targetBusinessClass", "descriminatorValue", "businessClass", "entityInfo"], outputs: ["onSave", "editRow", "deleteRow", "load", "buttonColumnClicked", "filtersHtmlTemplateChange", "selectedItemsChange", "searchFieldsValueChanged", "calendarEventClick", "statusFilterChanged"] }, { kind: "component", type: i16.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i17.ReportingComponent, selector: "app-reporting", inputs: ["showImportExportButton", "showNoteButton", "showInfoButton", "showUploadButton", "showActionButton", "isReportingToolbarDisabled", "formName", "formEndpoint", "formEndpointBody", "isFormEndpointPaged", "filtersHtmlTemplate", "optionalEndpoints", "businessClass", "cudComponent", "httpMethodType", "requestData", "customReportingMode", "pagedRequest", "reportDiscriminator", "nombreDocumentsJoints", "id", "configModeButtonId", "selectedItemUids", "fromTsiForm", "customSendMailMode", "reportingInformation"], outputs: ["onSave", "refreshData", "closedModalFileUpload", "toggleDesignMode"] }, { kind: "directive", type: i18.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]", inputs: ["presentationDesigner", "presentationDesignerBase"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }] }); }
|
|
966
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiGenericCrudComponent, selector: "Tsi-Generic-Crud", inputs: { entityInfo: "entityInfo", modalData: "modalData", columns: "columns", gridConfiguration: "gridConfiguration", cudComponent: "cudComponent", crudService: "crudService", header: "header", modalSize: "modalSize", descriminatorValue: "descriminatorValue", presentationSettings: "presentationSettings", preventAddEvent: "preventAddEvent", formEndpoint: "formEndpoint", formName: "formName", isSearchButtonDisabled: "isSearchButtonDisabled", showHeaderFilters: "showHeaderFilters", showEditButton: "showEditButton", showDeleteButton: "showDeleteButton", showAddButton: "showAddButton", showConsultButton: "showConsultButton", showUploadButton: "showUploadButton", showNoteButton: "showNoteButton", showDownloadButton: "showDownloadButton", showInfoButton: "showInfoButton", showDuplicateButton: "showDuplicateButton", showFormButton: "showFormButton", showCalenderView: "showCalenderView", showCardView: "showCardView", showImportFromOutlookButton: "showImportFromOutlookButton", showKanbanView: "showKanbanView", showKanbanViewOfWorkFlowEtat: "showKanbanViewOfWorkFlowEtat", showSearchField: "showSearchField", searchFields: "searchFields", calenderSchema: "calenderSchema", showActionButton: "showActionButton", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", selectedItems: "selectedItems", key: "key", id: "id", businessClass: "businessClass", searchOnInit: "searchOnInit", showGlobalSearch: "showGlobalSearch", showExportButton: "showExportButton", showReporting: "showReporting" }, outputs: { selectedItemsChange: "selectedItemsChange", searchFieldsValueChanged: "searchFieldsValueChanged", buttonColumnClicked: "buttonColumnClicked", onImportFromOutlookClicked: "onImportFromOutlookClicked" }, host: { listeners: { "window:keydown": "handleKeyDown($event)" } }, providers: [TsiNotificationService], viewQueries: [{ propertyName: "genericGridComponent", first: true, predicate: TsiGenericGridComponent, descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n \r\n <p-toolbar styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2 no-pad\" \r\n *ngIf=\"(showAddButton || searchFields || formEndpoint || businessClass) && showReporting\">\r\n\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 mx-2\">\r\n <div *ngIf=\"showAddButton\" presentationDesignerBase=\"add_button\">\r\n <Tsi-Button icon=\"pi pi-plus\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_add_view\" \r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"openNew()\">\r\n </Tsi-Button>\r\n </div>\r\n <div *ngIf=\"searchFields\" presentationDesignerBase=\"show_search_fields_button\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n tooltipText=\"shared_tsi_component_menu\"\r\n styleClass=\"h-2rem p-button-icon-only hover:shadow-6 {{ showSearchField ? 'p-button-secondary' : 'p-button-success' }}\"\r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div *ngIf=\"showImportFromOutlookButton\" presentationDesignerBase=\"importFromOutlook_button\">\r\n <Tsi-Button icon=\"pi pi-envelope\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_import_from_outlook\" \r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"onImportClicked()\"> \r\n </Tsi-Button>\r\n </div>\r\n\r\n <div presentationDesignerBase=\"toggle_actions_view_button\">\r\n <p-splitButton\r\n [icon]=\"currentIcon\"\r\n [model]=\"viewOptions\"\r\n (onClick)=\"handleActionViewClick()\"\r\n [tooltip]=\"currentTooltip | localize\"\r\n class=\"p-button-icon-only p-button-rounded p-button-primary h-2rem hover:shadow-6\"\r\n />\r\n <!-- <Tsi-Button\r\n [icon]=\"currentIcon\"\r\n styleClass=\"p-element p-button-primary h-2rem p-button p-component p-button-icon-only\"\r\n (click)=\"handleActionViewClick()\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n [tooltipText]=\"currentTooltip | localize\">\r\n </Tsi-Button> -->\r\n </div>\r\n\r\n \r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"(formEndpoint || businessClass)\" \r\n [formEndpoint]=\"formEndpoint\" \r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\" \r\n [isFormEndpointPaged]=\"true\"\r\n [businessClass]=\"businessClass\"\r\n [reportDiscriminator]=\"descriminatorValue\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [cudComponent]=\"cudComponent\" \r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <div>\r\n\r\n <Tsi-Generic-Grid\r\n [formName]=\"formName\"\r\n [crudService]=\"crudService\"\r\n [showSearchField]=\"showSearchField\"\r\n [searchFields]=\"searchFields\"\r\n [descriminatorValue]=\"descriminatorValue\"\r\n [header]=\"header\"\r\n [page]=\"page\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [columns]=\"selectedColumns\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [presentationSettings]=\"presentationSettings\"\r\n (load)=\"load($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [key]=\"key\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldValueChanges($event)\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n [showCardView]=\"showCardView\"\r\n [showKanbanView]=\"showKanbanView\"\r\n [showKanbanViewOfWorkFlowEtat]=\"showKanbanViewOfWorkFlowEtat\"\r\n [businessClass]=\"businessClass\"\r\n [cudComponent]=\"cudComponent\" \r\n [modalSize]=\"modalSize\" \r\n [id]=\"id\"\r\n [page$]=\"page$\"\r\n [entityInfo]=\"entityInfo\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n (statusFilterChanged)=\"onStatusFilterChanged($event)\"\r\n [showInfoButton]=\"true\"\r\n [showDownloadButton]=\"true\"\r\n [showUploadButton]=\"true\"\r\n [showNoteButton]=\"true\"\r\n [showActionButton]=\"true\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n \r\n</div>\r\n", styles: [".p-button{padding:.1rem!important}.tlbar{border:1px solid gainsboro;padding:2px;background:#f8f9fa}.hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}::ng-deep .no-pad{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i13.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i14.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "component", type: i15.TsiGenericGridComponent, selector: "Tsi-Generic-Grid", inputs: ["cudComponent", "modalSize", "showInfoButton", "showDownloadButton", "showUploadButton", "showNoteButton", "showActionButton", "formName", "id", "pagedRequest", "configuration", "page", "key", "columns", "isSearchButtonDisabled", "filteredColumns", "gridData", "isTableLoading", "parent", "showSearchBox", "showActionColumn", "showHeaderFilters", "showFilterButton", "isGridDataPagedInApi", "header", "ShowFilterColumns", "showImportExportButton", "crudService", "searchFields", "sortMode", "filtersHtmlTemplate", "presentationSettings", "selectKeyOnly", "selectionMode", "selectedItems", "searchOnInit", "showGlobalSearch", "showExportButton", "showSearchField", "showCalenderView", "calenderSchema", "showCardView", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "page$", "checkedByField", "selectAll", "targetBusinessClass", "descriminatorValue", "businessClass", "entityInfo"], outputs: ["onSave", "editRow", "deleteRow", "load", "buttonColumnClicked", "filtersHtmlTemplateChange", "selectedItemsChange", "searchFieldsValueChanged", "calendarEventClick", "statusFilterChanged"] }, { kind: "component", type: i16.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i17.ReportingComponent, selector: "app-reporting", inputs: ["showImportExportButton", "showNoteButton", "showInfoButton", "showUploadButton", "showActionButton", "isReportingToolbarDisabled", "formName", "formEndpoint", "formEndpointBody", "isFormEndpointPaged", "filtersHtmlTemplate", "optionalEndpoints", "businessClass", "cudComponent", "httpMethodType", "requestData", "customReportingMode", "pagedRequest", "reportDiscriminator", "nombreDocumentsJoints", "id", "configModeButtonId", "selectedItemUids", "fromTsiForm", "customSendMailMode", "reportingInformation"], outputs: ["onSave", "refreshData", "closedModalFileUpload", "toggleDesignMode"] }, { kind: "directive", type: i18.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]", inputs: ["presentationDesigner", "presentationDesignerBase"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }] }); }
|
|
955
967
|
}
|
|
956
968
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericCrudComponent, decorators: [{
|
|
957
969
|
type: Component,
|
|
958
|
-
args: [{ selector: 'Tsi-Generic-Crud', providers: [TsiNotificationService], template: "<div class=\"card\">\r\n \r\n <p-toolbar styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2 no-pad\" \r\n *ngIf=\"(showAddButton || searchFields || formEndpoint || businessClass) && showReporting\">\r\n\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 mx-2\">\r\n <div *ngIf=\"showAddButton\" presentationDesignerBase=\"add_button\">\r\n <Tsi-Button icon=\"pi pi-plus\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_add_view\" \r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"openNew()\">\r\n </Tsi-Button>\r\n </div>\r\n <div *ngIf=\"searchFields\" presentationDesignerBase=\"show_search_fields_button\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n tooltipText=\"shared_tsi_component_menu\"\r\n styleClass=\"h-2rem p-button-icon-only hover:shadow-6 {{ showSearchField ? 'p-button-secondary' : 'p-button-success' }}\"\r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div *ngIf=\"showImportFromOutlookButton\" presentationDesignerBase=\"importFromOutlook_button\">\r\n <Tsi-Button icon=\"pi pi-envelope\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_import_from_outlook\" \r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"onImportClicked()\"> \r\n </Tsi-Button>\r\n </div>\r\n\r\n <div presentationDesignerBase=\"toggle_actions_view_button\">\r\n <p-splitButton\r\n [icon]=\"currentIcon\"\r\n [model]=\"viewOptions\"\r\n (onClick)=\"handleActionViewClick()\"\r\n [tooltip]=\"currentTooltip | localize\"\r\n class=\"p-button-icon-only p-button-rounded p-button-primary h-2rem hover:shadow-6\"\r\n />\r\n <!-- <Tsi-Button\r\n [icon]=\"currentIcon\"\r\n styleClass=\"p-element p-button-primary h-2rem p-button p-component p-button-icon-only\"\r\n (click)=\"handleActionViewClick()\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n [tooltipText]=\"currentTooltip | localize\">\r\n </Tsi-Button> -->\r\n </div>\r\n\r\n \r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"(formEndpoint || businessClass)\" \r\n [formEndpoint]=\"formEndpoint\" \r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\" \r\n [isFormEndpointPaged]=\"true\"\r\n [businessClass]=\"businessClass\"\r\n [reportDiscriminator]=\"descriminatorValue\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [cudComponent]=\"cudComponent\" \r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <div>\r\n\r\n <Tsi-Generic-Grid\r\n [formName]=\"formName\"\r\n [crudService]=\"crudService\"\r\n [showSearchField]=\"showSearchField\"\r\n [searchFields]=\"searchFields\"\r\n [descriminatorValue]=\"descriminatorValue\"\r\n [header]=\"header\"\r\n [page]=\"page\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [columns]=\"selectedColumns\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [presentationSettings]=\"presentationSettings\"\r\n (load)=\"load($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [key]=\"key\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldValueChanges($event)\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n [showCardView]=\"showCardView\"\r\n [showKanbanView]=\"showKanbanView\"\r\n [showKanbanViewOfWorkFlowEtat]=\"showKanbanViewOfWorkFlowEtat\"\r\n [businessClass]=\"businessClass\"\r\n [cudComponent]=\"cudComponent\" \r\n [modalSize]=\"modalSize\" \r\n [id]=\"id\"\r\n [page$]=\"page$\"\r\n [entityInfo]=\"entityInfo\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n (statusFilterChanged)=\"onStatusFilterChanged($event)\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n \r\n</div>\r\n", styles: [".p-button{padding:.1rem!important}.tlbar{border:1px solid gainsboro;padding:2px;background:#f8f9fa}.hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}::ng-deep .no-pad{padding:0!important}\n"] }]
|
|
970
|
+
args: [{ selector: 'Tsi-Generic-Crud', providers: [TsiNotificationService], template: "<div class=\"card\">\r\n \r\n <p-toolbar styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2 no-pad\" \r\n *ngIf=\"(showAddButton || searchFields || formEndpoint || businessClass) && showReporting\">\r\n\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 mx-2\">\r\n <div *ngIf=\"showAddButton\" presentationDesignerBase=\"add_button\">\r\n <Tsi-Button icon=\"pi pi-plus\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_add_view\" \r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"openNew()\">\r\n </Tsi-Button>\r\n </div>\r\n <div *ngIf=\"searchFields\" presentationDesignerBase=\"show_search_fields_button\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n tooltipText=\"shared_tsi_component_menu\"\r\n styleClass=\"h-2rem p-button-icon-only hover:shadow-6 {{ showSearchField ? 'p-button-secondary' : 'p-button-success' }}\"\r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div *ngIf=\"showImportFromOutlookButton\" presentationDesignerBase=\"importFromOutlook_button\">\r\n <Tsi-Button icon=\"pi pi-envelope\" \r\n [tooltipPosition]=\"tooltipPosition.Top\" \r\n tooltipText=\"shared_tsi_component_import_from_outlook\" \r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only\" \r\n (click)=\"onImportClicked()\"> \r\n </Tsi-Button>\r\n </div>\r\n\r\n <div presentationDesignerBase=\"toggle_actions_view_button\">\r\n <p-splitButton\r\n [icon]=\"currentIcon\"\r\n [model]=\"viewOptions\"\r\n (onClick)=\"handleActionViewClick()\"\r\n [tooltip]=\"currentTooltip | localize\"\r\n class=\"p-button-icon-only p-button-rounded p-button-primary h-2rem hover:shadow-6\"\r\n />\r\n <!-- <Tsi-Button\r\n [icon]=\"currentIcon\"\r\n styleClass=\"p-element p-button-primary h-2rem p-button p-component p-button-icon-only\"\r\n (click)=\"handleActionViewClick()\"\r\n [tooltipPosition]=\"tooltipPosition.Top\"\r\n [tooltipText]=\"currentTooltip | localize\">\r\n </Tsi-Button> -->\r\n </div>\r\n\r\n \r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"(formEndpoint || businessClass)\" \r\n [formEndpoint]=\"formEndpoint\" \r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\" \r\n [isFormEndpointPaged]=\"true\"\r\n [businessClass]=\"businessClass\"\r\n [reportDiscriminator]=\"descriminatorValue\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [cudComponent]=\"cudComponent\" \r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n\r\n <div>\r\n\r\n <Tsi-Generic-Grid\r\n [formName]=\"formName\"\r\n [crudService]=\"crudService\"\r\n [showSearchField]=\"showSearchField\"\r\n [searchFields]=\"searchFields\"\r\n [descriminatorValue]=\"descriminatorValue\"\r\n [header]=\"header\"\r\n [page]=\"page\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [columns]=\"selectedColumns\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [presentationSettings]=\"presentationSettings\"\r\n (load)=\"load($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [key]=\"key\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldValueChanges($event)\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n [showCardView]=\"showCardView\"\r\n [showKanbanView]=\"showKanbanView\"\r\n [showKanbanViewOfWorkFlowEtat]=\"showKanbanViewOfWorkFlowEtat\"\r\n [businessClass]=\"businessClass\"\r\n [cudComponent]=\"cudComponent\" \r\n [modalSize]=\"modalSize\" \r\n [id]=\"id\"\r\n [page$]=\"page$\"\r\n [entityInfo]=\"entityInfo\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n (statusFilterChanged)=\"onStatusFilterChanged($event)\"\r\n [showInfoButton]=\"true\"\r\n [showDownloadButton]=\"true\"\r\n [showUploadButton]=\"true\"\r\n [showNoteButton]=\"true\"\r\n [showActionButton]=\"true\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n \r\n</div>\r\n", styles: [".p-button{padding:.1rem!important}.tlbar{border:1px solid gainsboro;padding:2px;background:#f8f9fa}.hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}::ng-deep .no-pad{padding:0!important}\n"] }]
|
|
959
971
|
}], ctorParameters: () => [{ type: i1.TsiNotificationService }, { type: i2.MessageService }, { type: i3.TsiModalService }, { type: i0.ChangeDetectorRef }, { type: i4.LocalizePipe }, { type: i5.DialogDataService }, { type: i6.FichierUploadService }, { type: i7.RecordInfoPopupService }, { type: i8.WorkflowConfigurationService }, { type: i9.EntityConfigurationService }, { type: i10.NoteService }, { type: i0.EnvironmentInjector }, { type: i11.DiscriminatorService }], propDecorators: { entityInfo: [{
|
|
960
972
|
type: Input
|
|
961
973
|
}], genericGridComponent: [{
|
|
@@ -1059,4 +1071,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1059
1071
|
type: HostListener,
|
|
1060
1072
|
args: ['window:keydown', ['$event']]
|
|
1061
1073
|
}] } });
|
|
1062
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXhJLE9BQU8sRUFBRSxxQ0FBcUMsRUFBb0QsTUFBTSxjQUFjLENBQUM7QUFldkgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFHOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFF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O2dCQVlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFLSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBbzBCUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBNb2RhbFNpemVFbnVtLCBNb2RlcyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQWN0aW9uUGxhY2VtZW50IH0gZnJvbSAnLi4vLi4vZW51bXMvYWN0aW9uLXBsYWNlbWVudCc7XHJcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9idXR0b24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9lbnVtcy9ncmlkLXNlbGVjdGlvbi1tb2RlJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvdG9vbHRpcFBvc2l0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBvcGVuQWN0aW9uTGlzdCwgb3BlbkR5bmFtaWNGb3JtTW9kYWxDb21wb25lbnQsIG9wZW5Nb2RhbFVwbG9hZEdyaWQsIG9wZW5Ob3Rlc0xpc3QgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvbW9kYWwtb3Blbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IEJ1dHRvbkNsaWNrUmVzdWx0LCBHcmlkQ29sdW1uLCBJR3JpZENvbmZpZ3VyYXRpb24sIElNb2RhbFNpemUsIElQYWdlLCBJUGFnZWRSZXF1ZXN0LCBJUGFnZWRSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0LCBTZWFyY2hGaWVsZCwgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBvY2N1cmVuY2VJbmZvcyB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb25FcnAvYWN0aW9uRXJwJztcclxuaW1wb3J0IHsgRXZlbnRTY2hlbWEgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tbW9uL2V2ZW50LXNjaGVtYSc7XHJcbmltcG9ydCB7IEVudGl0eUluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZW50aXR5LWluZm8vZW50aXR5LWluZm8nO1xyXG5pbXBvcnQgeyBOb3Rlc0dyb3VwZWRCeVVzZXJSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9Ob3Rlcy9Ob3RlJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uU2V0dGluZyB9IGZyb20gJy4uLy4uL21vZGVscy9wcmVzZW50YXRpb24tc2V0dGluZ3MvcHJlc2VudGF0aW9uLXNldHRpbmdzJztcclxuaW1wb3J0IHsgRGlzY3JpbWluYXRvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NoYXJlZC9kaXNjcmltaW5hdG9yLXJlc3BvbnNlJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IENydWRCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2UvY3J1ZC1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaXNjcmltaW5hdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24vZGlzY3JpbWluYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWNoaWVyVXBsb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZmljaGllci11cGxvYWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9Ob3RlL05vdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVjb3JkSW5mb1BvcHVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY29yZC1pbmZvLXBvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3cvd29ya2Zsb3ctY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5SGVscGVyIH0gZnJvbSAnLi4vLi4vdHNpLWhlbHBlcnMvdHlwZS1yZWdpc3RyeS5oZWxwZXInO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktZm9ybS1tb2RhbC1mb290ZXIvdHNpLWZvcm0tbW9kYWwtZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1ub3Rlcy1hdmVydGlyL3RzaS1ub3Rlcy1hdmVydGlyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1wb3B1cC10ZXh0LXZpZXdlci90c2ktcG9wdXAtdGV4dC12aWV3ZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLUdlbmVyaWMtQ3J1ZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtUc2lOb3RpZmljYXRpb25TZXJ2aWNlXSxcclxufSkgLyosIE9uQ2hhbmdlcyovXHJcbmV4cG9ydCBjbGFzcyBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBwcml2YXRlIF9kaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xyXG4gIHByaXZhdGUgX2Zvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJJY29uID0gJ3BpIHBpLWZpbHRlcic7XHJcbiAgcHJvdGVjdGVkIGZpbHRlclRvb2x0aXAgPSAnc2hvd19maWx0ZXInO1xyXG4gIHByaXZhdGUgX2lzV29ya2Zsb3dFdGF0Rm9ybUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgYnV0dG9uVHlwZSA9IEJ1dHRvblR5cGU7XHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uO1xyXG4gIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gXCJjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3RcIlxyXG4gIHNhdmVQcm9wZXJ0aWVzQnV0dG9uQ2xhc3NOYW1lID0gXCJjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3Qtc2F2ZS1wcm9wZXJ0aWVzXCI7XHJcbiAgQElucHV0KCkgZW50aXR5SW5mbzogRW50aXR5SW5mbyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG5cclxuICBpdGVtcz86IGFueVtdO1xyXG5cclxuICBwYWdlZFJlcXVlc3Q6IElQYWdlZFJlcXVlc3QgPSB7fTtcclxuXHJcbiAgcGFnZTogSVBhZ2U8YW55PiA9IHtcclxuICAgIGl0ZW1zOiBbXSxcclxuICAgIHBhZ2VTaXplOiAxMCxcclxuICAgIHBhZ2VOdW1iZXI6IDEsXHJcbiAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgdG90YWxQYWdlczogMCxcclxuICAgIHN1bW1hcmllczogW10sXHJcbiAgICBsb2FkaW5nOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICBmaXJzdDogbnVtYmVyID0gMDtcclxuICByb3dzID0gMTtcclxuICBmb3JtRW5kcG9pbnRCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZmlsdGVyc0h0bWxUZW1wbGF0ZT86IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkQ29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgX3NlYXJjaE9uSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgX21vZGFsRGF0YTogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KSBnZW5lcmljR3JpZENvbXBvbmVudD86IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50O1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIHNldCBtb2RhbERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fbW9kYWxEYXRhID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBjb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICBASW5wdXQoKSBncmlkQ29uZmlndXJhdGlvbj86IElHcmlkQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBjdWRDb21wb25lbnQ6IGFueTtcclxuICBASW5wdXQoKSBjcnVkU2VydmljZT86IENydWRCYXNlU2VydmljZTxhbnksIGFueSwgYW55LCBhbnk+O1xyXG4gIEBJbnB1dCgpIGhlYWRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgbW9kYWxTaXplPzogSU1vZGFsU2l6ZTtcclxuICBASW5wdXQoKSBkZXNjcmltaW5hdG9yVmFsdWU/OiBzdHJpbmdcclxuICBASW5wdXQoKSBwcmVzZW50YXRpb25TZXR0aW5ncz86IFByZXNlbnRhdGlvblNldHRpbmdcclxuICBASW5wdXQoKSBwcmV2ZW50QWRkRXZlbnQ/OiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBzZXQgZm9ybUVuZHBvaW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9mb3JtRW5kcG9pbnQgPSBgJHt2YWx1ZX0vZ2V0YWxscGFnZWRgO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9ybUVuZHBvaW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1FbmRwb2ludDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zvcm1OYW1lPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBmb3JtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1OYW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1OYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2Zvcm1OYW1lID0gdmFsdWU7XHJcbiAgICAvLyB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8gQElucHV0KCkgZm9ybU5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0hlYWRlckZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93RWRpdEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0RlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0FkZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0NvbnN1bHRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VXBsb2FkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Tm90ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Rvd25sb2FkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0luZm9CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dEdXBsaWNhdGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dGb3JtQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Q2FsZW5kZXJWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0NhcmRWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEZyb21PdXRsb29rQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0thbmJhblZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEZpZWxkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZHM6IFNlYXJjaEZpZWxkW10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgY2FsZW5kZXJTY2hlbWE6IEV2ZW50U2NoZW1hIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvL2dyaWQgc2VsZWN0aW9uXHJcbiAgQElucHV0KCkgc2VsZWN0S2V5T25seTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogR3JpZFNlbGVjdGlvbk1vZGUgPSBHcmlkU2VsZWN0aW9uTW9kZS5Ob25lO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBrZXk6IHN0cmluZyA9ICd1aWQnO1xyXG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xyXG5cclxuICBfYnVzaW5lc3NDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGdldCBidXNpbmVzc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50QnVzaW5lc3NDbGFzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBASW5wdXQoKSBzZXQgc2VhcmNoT25Jbml0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaE9uSW5pdCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2VhcmNoT25Jbml0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaE9uSW5pdDtcclxuICB9XHJcblxyXG5cclxuICBASW5wdXQoKSBzaG93R2xvYmFsU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93UmVwb3J0aW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIEBPdXRwdXQoKSBidXR0b25Db2x1bW5DbGlja2VkOiBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4oKTtcclxuICBAT3V0cHV0KCkgb25JbXBvcnRGcm9tT3V0bG9va0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLy8jZW5kcmVnaW9uIE91dHB1dHNcclxuICBpc0N1c3RvbUNvbHVtblJlbmRlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xpY2tDb3VudCA9IDE7XHJcbiAgY3VycmVudEljb24gPSBcInBpIHBpLWFsaWduLWp1c3RpZnlcIjtcclxuICBjdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXdcIjtcclxuXHJcbiAgdmlld09wdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgcGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1zZ1NlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGxvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcml2YXRlIGRpYWxvZ0RhdGFTZXJ2aWNlOiBEaWFsb2dEYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgZmljaGllclNlcnZpY2U6IEZpY2hpZXJVcGxvYWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWNvcmRJbmZvUG9wdXBTZXJ2aWNlOiBSZWNvcmRJbmZvUG9wdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZTogV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VudGl0eUNvbmZpZ1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3Rlc1NlcnZpY2U6IE5vdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9kaXNjcmltaW5hdG9yU2VydmljZTogRGlzY3JpbWluYXRvclNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBncmlkIHN0YXRlXHJcblxyXG4gIGdldFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQuZ2V0U3RhdGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXN0b3JlU3RhdGUoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LnJlc3RvcmVTdGF0ZShjb25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0U2VsZWN0ZWRDb2x1bW5zKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5yZXNldFNlbGVjdGVkQ29sdW1ucyhjb25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgLy8gbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIC8vIH1cclxuXHJcbiAgYXN5bmMgZ2V0V29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRCdXNpbmVzc0NsYXNzKCkge1xyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiAhdGhpcy5faXNXb3JrZmxvd0V0YXRGb3JtTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuX2lzV29ya2Zsb3dFdGF0Rm9ybUxvYWRlZCA9IHRydWVcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdvcmtmbG93RXRhdEZvcm1CeUNsYXNzTmFtZSh0aGlzLmJ1c2luZXNzQ2xhc3MpKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50Rm9ybSA9IHJlc3VsdFxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHdvcmtmbG93IHN0YXRlIGZvcm06JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgdWlkT2JqZWN0Pzogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzdWx0OiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHJlcXVlc3Q6IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QgPSBuZXcgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCgpO1xyXG4gICAgICByZXF1ZXN0LmNsYXNzTmFtZSA9IGJ1c2luZXNzQ2xhc3NcclxuICAgICAgcmVxdWVzdC51aWRPYmpldCA9IHVpZE9iamVjdDtcclxuICAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZVxyXG4gICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0Q3VycmVudEVudGl0eVdvcmtsZm93SW5zdGFuY2VJbmZvcm1hdGlvbihyZXF1ZXN0KSlcclxuICAgICAgLy8gaWYgKHJlc3VsdCkge1xyXG4gICAgICAvLyAgIGxldCB3b3JrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEZvcm1cclxuICAgICAgLy8gICAgID8uZmluZCh4ID0+IHgudWlkID09IHJlc3VsdD8ud29ya2Zsb3dFdGF0KVxyXG4gICAgICAvLyAgIGlmICh3b3JrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgIC8vICAgICAvLyB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvckZvckN1cnJlbnRFbnRpdHlGb3JtID1cclxuICAgICAgLy8gICAgIC8vICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5tYXBXb3JrZmxvd0V0YXRGb3JtVG9QcmVzZW50YXRpb25TZXR0aW5nKHdvcmtmbG93RXRhdEZvcm0ud29ya2Zsb3dFdGF0c0Zvcm1zKVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG5cclxuICBzZWFyY2hGaWVsZFZhbHVlQ2hhbmdlcyhuZXdTZWFyY2hGaWVsZFZhbHVlczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZC5lbWl0KG5ld1NlYXJjaEZpZWxkVmFsdWVzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0RW50aXR5SW5mbygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXNlU2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9ICdoaWRlX2ZpbHRlcic7XHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXItc2xhc2gnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gJ3Nob3dfZmlsdGVyJztcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gJ3BpIHBpLWZpbHRlcic7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmNvbHVtbnMgPT0gbnVsbCAmJiB0aGlzLmNvbHVtbnMgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnY29sdW1ucyBjYW50IGJlIG51bGwgb3IgdW5kZWZpbmVkLCBkZXZlbG9wcGVyIG11c3Qgc2V0IGNvbHVtbnMgb2YgZ3JpZCAhJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gWy4uLnRoaXMuY29sdW1uc107XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0luZm9CdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19pbmZvJyxcclxuICAgICAgICAgIGZpZWxkOiAnaW5mbycsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1pbmZvJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDMsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2luZm8nLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0Rvd25sb2FkQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZG93bmxvYWQnLFxyXG4gICAgICAgICAgZmllbGQ6ICdkb3dubG9hZCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1kb3dubG9hZCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAyLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdUw6lsw6ljaGFyZ2VyJyxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dVcGxvYWRCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50JyxcclxuICAgICAgICAgIGZpZWxkOiAndXBsb2FkJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiA0LFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50JyxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dOb3RlQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX25vdGVzJyxcclxuICAgICAgICAgIGJ1dHRvbkxhYmVsOiAnJyxcclxuICAgICAgICAgIGZpZWxkOiAnbm90ZXMnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktY29tbWVudCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiA1LFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19ub3RlcycsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93QWN0aW9uQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2FjdGlvbicsXHJcbiAgICAgICAgICBidXR0b25MYWJlbDogJycsXHJcbiAgICAgICAgICBmaWVsZDogJ0FjdGlvbkVSUCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1ib2x0JyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDEwLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19hY3Rpb24nLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgIGlmICh0aGlzLnNob3dGb3JtQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2Zvcm0nLFxyXG4gICAgICAgICAgZmllbGQ6ICdmb3JtJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2snLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LWluZGlnby01MDAnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogOCxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfZm9ybScsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RGVsZXRlQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZGVsZXRlJyxcclxuICAgICAgICAgIGZpZWxkOiAnZGVsZXRlJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtcmVkLTUwMCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAxLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdEZWxldGUnLFxyXG4gICAgICAgICAgYnV0dG9uVHlwZTogQnV0dG9uVHlwZS5TdWJtaXQsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RWRpdEJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2VkaXQnLFxyXG4gICAgICAgICAgZmllbGQ6ICdlZGl0JyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBlbmNpbCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiA2LFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19lZGl0JyxcclxuICAgICAgICAgIGJ1dHRvblR5cGU6IEJ1dHRvblR5cGUuU3VibWl0LFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50LklubGluZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19jb25zdWx0JyxcclxuICAgICAgICAgIGZpZWxkOiAnY29uc3VsdCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LWJsdWUtNTAwJyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDAsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ0NvbnN1bHRlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RHVwbGljYXRlQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZHVwbGljYXRlJyxcclxuICAgICAgICAgIGZpZWxkOiAnZHVwbGljYXRlJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNsb25lJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGljb25TdHlsZUNsYXNzOiAndGV4dC1wdXJwbGUtNTAwJyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDcsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ0R1cGxpcXVlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuIFxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLm9yZGVyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIhIC0gYi5vcmRlciEpLFxyXG4gICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5vcmRlciA9PT0gdW5kZWZpbmVkKSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKFxyXG4gICAgICAoY29sdW1uKSA9PlxyXG4gICAgICAoY29sdW1uLnRyYW5zbGF0ZWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyXHJcbiAgICAgICAgPyB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShjb2x1bW4uaGVhZGVyKVxyXG4gICAgICAgIDogY29sdW1uLmhlYWRlcilcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52aWV3T3B0aW9ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktYWxpZ24tanVzdGlmeScsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy50b2dnbGVMaXN0VmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2NhbGVuZGVyX3ZpZXdcIiksXHJcbiAgICAgICAgaWNvbjogJ3BpIHBpLWNhbGVuZGFyJyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUNhbGVuZGVyVmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FyZF92aWV3JyksXHJcbiAgICAgICAgaWNvbjogJ3BpIHBpLWlkLWNhcmQnLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlQ2FyZFZpZXcoKVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl92aWV3JyksXHJcbiAgICAgICAgaWNvbjogJ3BpIHBpLXRoLWxhcmdlJyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUthbmJhblZpZXcoKVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuX2luaXRNb2RlbHMoKTtcclxuICB9XHJcblxyXG5cclxuICAvKiB0b2dnbGVIZWFkZXJGaWx0ZXJzKCl7XHJcbiAgICBpZih0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKXtcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlclwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcInNob3dfZmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHsgLy90aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSBmYWxzZVxyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXItc2xhc2hcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJoaWRlX2ZpbHRlclwiO1xyXG5cclxuICAgIH1cclxuICB9ICovXHJcbiAgICBcclxuICBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZVxyXG4gICAgICA/IHRoaXMucGFnZS5wYWdlTnVtYmVyID09PSB0aGlzLnBhZ2UudG90YWxDb3VudCAtIHRoaXMucGFnZS5wYWdlU2l6ZVxyXG4gICAgICA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBpc0ZpcnN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2UgPyB0aGlzLnBhZ2UucGFnZU51bWJlciA9PT0gMCA6IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXp5TG9hZFxyXG4gICAqL1xyXG4gIC8vZmlyc3QgPT0+IHBhZ2UucGFnZU51bWJlclxyXG4gIC8vcm93cyA9PT4gcGFnZS5wYWdlU2l6ZVxyXG4gIC8vdGhpcy5wYWdlLml0ZW1zLmxlbmd0aCA9PT4gdG90YWwgY291bnRcclxuXHJcbiAgb3Blbk5ldygpIHtcclxuICAgIGlmICghdGhpcy5wcmV2ZW50QWRkRXZlbnQpIHtcclxuICAgICAgdGhpcy5fb3Blbk1vZGFsKENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUsIG51bGwsIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idXR0b25Db2x1bW5DbGlja2VkLmVtaXQoe1xyXG4gICAgICBrZXk6IHVuZGVmaW5lZCxcclxuICAgICAgZmllbGQ6ICdhZGQnLFxyXG4gICAgICBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoZXZlbnQ6IEJ1dHRvbkNsaWNrUmVzdWx0KSB7XHJcblxyXG4gICAgbGV0IGl0ZW1LZXk6IGFueSA9IGV2ZW50LnNlbGVjdEtleU9ubHkgPyBldmVudC5rZXkgOiBldmVudC5rZXlbdGhpcy5rZXldO1xyXG5cclxuICAgIGNvbnN0IGV4Y2x1ZGVkID0gW1wiTm90ZXNcIixcIkFjdGlvbkVSUFwiLCBcIkZpY2hpZXJcIl07XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmICFleGNsdWRlZC5pbmNsdWRlcyh0aGlzLmJ1c2luZXNzQ2xhc3MpKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YVNlcnZpY2Uuc2V0RGF0YSh7IGlkOiBpdGVtS2V5LCBjbGFzczogdGhpcy5idXNpbmVzc0NsYXNzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5maWVsZCA9PSAnZWRpdCcpIHtcclxuICAgICAgdGhpcy5fZWRpdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2RlbGV0ZScpIHtcclxuICAgICAgdGhpcy5fZGVsZXRlUm93KGl0ZW1LZXkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnY29uc3VsdCcpIHtcclxuICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2R1cGxpY2F0ZScpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJCdXNzaW5lc3MgY2xhc3MgaXMgbm90IGRlZmluZWQgIVwiKTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgdGhpcy5fZHVwbGljYXRlUm93KGl0ZW1LZXkpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ3VwbG9hZCcpIHtcclxuICAgICAgY29uc3QgY29uZiA9IHtcclxuICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUhLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUhLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTW9kYWxVcGxvYWRHcmlkKHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdub3RlcycpIHtcclxuXHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Ob3Rlc0xpc3QodGhpcy5faW5qZWN0b3IpO1xyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdkb3dubG9hZCcpIHtcclxuXHJcbiAgICAgIHRoaXMuZmljaGllclNlcnZpY2UuZ2V0QnlJZChpdGVtS2V5KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2ZUZpbGUoZGF0YS5jb250ZW51LCBkYXRhLm5vbUZpY2hpZXJDb21wbGV0ISk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnaW5mbycpIHtcclxuXHJcbiAgICAgIHRoaXMucmVjb3JkSW5mb1BvcHVwU2VydmljZVxyXG4gICAgICAgIC5nZXRJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcyEsIGl0ZW1LZXkpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkV4dHJhTGFyZ2U7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0ID1cclxuICAgICAgICAgICAgICAnVUlEIDogICcgK1xyXG4gICAgICAgICAgICAgIGl0ZW1LZXkgK1xyXG4gICAgICAgICAgICAgICc8QlI+Q3JlYXRlZCBieSA6ICAnICtcclxuICAgICAgICAgICAgICBkYXRhLmNyZWF0aW9uVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5Nb2RpZmllZCBieSA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEubW9kaWZVc2VyICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgb24gOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLmRhdGVTYWlzaWUgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgb24gOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLmRhdGVNb2RpZjtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIFVpZDogaXRlbUtleSxcclxuICAgICAgICAgICAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgICAgIGNyZWF0aW9uVXNlcjogZGF0YS5jcmVhdGlvblVzZXIsXHJcbiAgICAgICAgICAgICAgICBtb2RpZlVzZXI6IGRhdGEubW9kaWZVc2VyLFxyXG4gICAgICAgICAgICAgICAgZGF0ZVNhaXNpZTogZGF0YS5kYXRlU2Fpc2llLFxyXG4gICAgICAgICAgICAgICAgZGF0ZU1vZGlmOiBkYXRhLmRhdGVNb2RpZixcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnOTByZW0nLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzgwcmVtJyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgIFRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICBjb25mXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0gXHJcbiAgICBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnZm9ybScpe1xyXG4gICAgICBpZighdGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZm9ybURlc2NyaW1pbmF0b3JWYWx1ZTogYW55ID0gbnVsbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAge1xyXG4gICAgICAgIGZvcm1EZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFmb3JtRGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgICB7XHJcbiAgICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RGlzY3JpbWluYXRvcih0aGlzLmJ1c2luZXNzQ2xhc3MsIGl0ZW1LZXkpO1xyXG4gICAgICAgIGZvcm1EZXNjcmltaW5hdG9yVmFsdWUgPSBkaXNjcmltaW5hdG9yUmVzcG9uc2U/LmRpc2NyaW1pbmF0b3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICBjb25zdCBtb2RhbENvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBzb3VyY2VCdXNpbmVzc0NsYXNzOiB7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgZGlzY3JpbWluYXRvclZhbHVlOiBmb3JtRGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUhLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUhLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuRHluYW1pY0Zvcm1Nb2RhbENvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgbW9kYWxDb25maWcpXHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH1lbHNlIGlmIChldmVudC5maWVsZCA9PSAnQWN0aW9uRVJQJykge1xyXG5cclxuICAgICAgbGV0IG9jY3VyZW5jZUluZm9zOiBvY2N1cmVuY2VJbmZvcyA9IHtcclxuICAgICAgICBidXNpbmVzc2NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MgPz8gJycsXHJcbiAgICAgICAgb2NjdXJlbmNlOiBpdGVtS2V5XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5BY3Rpb25MaXN0KHRoaXMuX2luamVjdG9yLCB7IG9jY3VyZW5jZUluZm9zOiBvY2N1cmVuY2VJbmZvcyB9KTtcclxuXHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgICBrZXk6IGV2ZW50LmtleSxcclxuICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXHJcbiAgICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVGaWxlKGJhc2U2NERhdGE6IGFueSwgZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGJhc2U2NERhdGEpO1xyXG4gICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xyXG5cclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG4gICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgYS5jbGljaygpO1xyXG5cclxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICBsb2FkKGV2ZW50OiB7IHJlcXVlc3Q6IElQYWdlZFJlcXVlc3Q7IGlzRm9yQ2FsZW5kYXI6IGJvb2xlYW4gfSkge1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xyXG4gICAgdGhpcy5fc2V0Zm9ybUVuZHBvaW50Qm9keSgpO1xyXG4gICAgdGhpcy5fbG9hZERTKGV2ZW50LmlzRm9yQ2FsZW5kYXIpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZEl0ZW1zQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfc2V0Zm9ybUVuZHBvaW50Qm9keSgpOiB2b2lkIHtcclxuICAgIGxldCBveDogYW55ID0gdGhpcy5fY2xvbmVQYWdlZFJlcXVlc3QodGhpcy5wYWdlZFJlcXVlc3QpO1xyXG4gICAgb3hbJ2dldEFsbERhdGEnXSA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludEJvZHkgPSBKU09OLnN0cmluZ2lmeShveCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TW9kZWxzKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLnBhZ2UgPSB7XHJcbiAgICAgIGl0ZW1zOiBbXSxcclxuICAgICAgcGFnZVNpemU6IDEwLFxyXG4gICAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgICBzdW1tYXJpZXM6IFtdLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiAxMCxcclxuICAgICAgc2tpcENvdW50OiAwLFxyXG4gICAgICBzb3J0aW5nOiBbXSxcclxuICAgICAga2V5d29yZDogJycsXHJcbiAgICAgIGZpbHRlcnM6IFtdLFxyXG4gICAgICBnZXRBbGxEYXRhOiBmYWxzZSxcclxuICAgICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkRFMoaXNGb3JDYWxlbmRlcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBcclxuICAgIHRoaXMucGFnZS5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZSQubmV4dCh0aGlzLnBhZ2UpO1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIC4uLnRoaXMucGFnZWRSZXF1ZXN0LFxyXG4gICAgICBnZXRBbGxEYXRhOiBpc0ZvckNhbGVuZGVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jcnVkU2VydmljZSAhPSBudWxsICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEFsbFBhZ2VkKHRoaXMucGFnZWRSZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogSVBhZ2VkUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgaXRlbXMgOiB2YWx1ZS5pdGVtcyxcclxuICAgICAgICAgICAgICB0b3RhbENvdW50IDogdmFsdWUudG90YWxDb3VudCxcclxuICAgICAgICAgICAgICBzdW1tYXJpZXMgOiB2YWx1ZS5zdW1tYXJpZXMgPyB2YWx1ZS5zdW1tYXJpZXMgOiBbXSxcclxuICAgICAgICAgICAgICB0b3RhbFBhZ2VzIDogKHRoaXMucGFnZS50b3RhbENvdW50IC0gICh0aGlzLnBhZ2UudG90YWxDb3VudCAlIHRoaXMucGFnZS5wYWdlU2l6ZSkpIC8gdGhpcy5wYWdlLnBhZ2VTaXplICsgMSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dOb3RlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkTm90ZXNDb3VudHMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5pc0N1c3RvbUNvbHVtblJlbmRlcmVkID09IGZhbHNlICYmIHZhbHVlLmN1c3RvbUNvbHVtblNjaGVtYSAmJiB2YWx1ZS5jdXN0b21Db2x1bW5TY2hlbWEubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIC8vIEFkZCBjdXN0b20gY29sdW1ucyB0byB0aGUgZ3JpZFxyXG4gICAgICAgICAgICAgICAgdmFsdWUuY3VzdG9tQ29sdW1uU2NoZW1hLmZvckVhY2goY2NzID0+IHtcclxuICAgICAgICAgICAgICAgICAgbGV0IGN1c3RvbUNvbHVtbkdyaWQ6IEdyaWRDb2x1bW4gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjY3MuY29sdW1uTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogY2NzLmNvbHVtbk5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVySW5wdXRUeXBlOiBjY3MudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbUNvbHVtbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnB1c2goY3VzdG9tQ29sdW1uR3JpZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3VzdG9tQ29sdW1uUmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMucGFnZS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWROb3Rlc0NvdW50cygpIHtcclxuICAgIGNvbnN0IGlkcyA9IHRoaXMucGFnZS5pdGVtcy5tYXAoeCA9PiB4W3RoaXMua2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKHggPT4gU3RyaW5nKHgpKTtcclxuXHJcbiAgICBpZiAoIWlkcy5sZW5ndGggfHwgIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub3Rlc1NlcnZpY2VcclxuICAgICAgLmdldE5vdGVzQ291bnRCeVJvd3ModGhpcy5idXNpbmVzc0NsYXNzLCBpZHMpXHJcbiAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPihcclxuICAgICAgICByZXN1bHQubWFwKHggPT4gW3gucm93VWlkLCB4LmNvdW50XSlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMucGFnZS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhpdGVtW3RoaXMua2V5XSk7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBtYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgKGl0ZW0gYXMgYW55KS5ub3Rlc0NvdW50ID0gdHlwZW9mIGNvdW50ID09PSAnbnVtYmVyJyA/IGNvdW50IDogMDtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VkaXRSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuRURJVCwgaXRlbUtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWxldGVSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuREVMRVRFLCBpdGVtS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbnN1bHRSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuQ09OU1VMVCwgaXRlbUtleSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2R1cGxpY2F0ZVJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEUsIGl0ZW1LZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlJbmZvKCkge1xyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLmVudGl0eUluZm8gPSBhd2FpdCB0aGlzLl9lbnRpdHlDb25maWdTZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKTtcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eUluZm8pIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYE5vIGVudGl0eSBpbmZvIGZvdW5kIGZvciAke3RoaXMuYnVzaW5lc3NDbGFzc31gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb3Blbk1vZGFsKG1vZGU6IHN0cmluZywgaXRlbUtleTogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuY3J1ZFNlcnZpY2UhLmlzRHVwbGljYXRlID0gbW9kZSA9PT0gTW9kZXMuZHVwbGljYXRlO1xyXG4gICAgbGV0IHdvcmtmbG93RW50aXR5SW5mb3JtYXRpb246IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcblxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgICAgd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbiA9IGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbih0aGlzLmJ1c2luZXNzQ2xhc3MsIGl0ZW1LZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlcnJvcil7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGFsU2l6ZSAhPSBudWxsICYmIHRoaXMubW9kYWxTaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25mID0ge1xyXG4gICAgICAgIGRhdGE6IHsgaWQ6IGl0ZW1LZXksIG1vZGU6IG1vZGUsIGN1c3RvbURhdGE6IGRhdGEsIHdvcmtmbG93SW5mb3JtYXRpb246IHdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24sIGVudGl0eUluZm86IHRoaXMuZW50aXR5SW5mbyB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB0ZW1wbGF0ZXM6IHtcclxuICAgICAgICAgIGZvb3RlcjogVHNpRm9ybU1vZGFsRm9vdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YTogeyBpZDogaXRlbUtleSwgbW9kZTogbW9kZSwgY3VzdG9tRGF0YTogZGF0YSwgd29ya2Zsb3dJbmZvcm1hdGlvbjogd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbiB9LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5jdWRDb21wb25lbnQgPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5jdWRDb21wb25lbnQgPSBUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZSh0aGlzLmN1ZENvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5jdWRDb21wb25lbnQsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKGNvbmYpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwoY29uZj86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmYgJiYgY29uZj8uZGF0YT8ucmVmcmVzaExpc3QpIHtcclxuICAgICAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvbmVQYWdlZFJlcXVlc3QocmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgbGV0IGNsb25lOiBJUGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogcmVxdWVzdC5tYXhSZXN1bHRDb3VudCxcclxuICAgICAgc2tpcENvdW50OiByZXF1ZXN0LnNraXBDb3VudCxcclxuICAgICAgc29ydGluZzogcmVxdWVzdC5zb3J0aW5nLFxyXG4gICAgICBrZXl3b3JkOiByZXF1ZXN0LmtleXdvcmQsXHJcbiAgICAgIGZpbHRlcnM6IHJlcXVlc3QuZmlsdGVycyxcclxuICAgICAgZ2V0QWxsRGF0YTogcmVxdWVzdC5nZXRBbGxEYXRhLFxyXG4gICAgICBzdW1tYXJpZXM6IHJlcXVlc3Quc3VtbWFyaWVzLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgZGlzcGxheVNlYXJjaEZpZWxkcygpIHtcclxuICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkID0gIXRoaXMuc2hvd1NlYXJjaEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGNhbGVuZGVyXHJcbiAgaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKGl0ZW06IGFueSkge1xyXG4gICAgc3dpdGNoIChpdGVtLm1vZGUpIHtcclxuICAgICAgY2FzZSBDb21wb25lbnRfTW9kZXMuQ09OU1VMVDpcclxuICAgICAgICB0aGlzLl9jb25zdWx0Um93KGl0ZW0uaWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbXBvbmVudF9Nb2Rlcy5DUkVBVEU6XHJcbiAgICAgICAgdGhpcy5fb3Blbk1vZGFsKENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUsIG51bGwsIGl0ZW0uZGF0ZURlYnV0KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21wb25lbnRfTW9kZXMuRURJVDpcclxuICAgICAgICB0aGlzLl9lZGl0Um93KGl0ZW0uaWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU6XHJcbiAgICAgICAgLy8gdG9kb1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVMaXN0VmlldygpIHtcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0thbmJhblZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktYWxpZ24tanVzdGlmeVwiO1xyXG4gICAgdGhpcy5jdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FsZW5kZXJWaWV3KCkge1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gIXRoaXMuc2hvd0NhbGVuZGVyVmlldztcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb2FkRFModGhpcy5zaG93Q2FsZW5kZXJWaWV3KTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLWNhbGVuZGFyXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2NhbGVuZGVyX3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FyZFZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9ICF0aGlzLnNob3dDYXJkVmlldztcclxuICAgIHRoaXMuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93S2FuYmFuVmlldyA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5fbG9hZERTKHRoaXMuc2hvd0NhcmRWaWV3KTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLWlkLWNhcmRcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FyZF92aWV3XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUthbmJhblZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gIXRoaXMuc2hvd0thbmJhblZpZXc7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLXRoLWxhcmdlXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl92aWV3XCI7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Y0Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wZW5OZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVBY3Rpb25WaWV3Q2xpY2soKSB7XHJcbiAgICB0aGlzLmNsaWNrQ291bnQrKztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuY2xpY2tDb3VudCkge1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgdGhpcy50b2dnbGVMaXN0VmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy50b2dnbGVDYXJkVmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHRoaXMudG9nZ2xlS2FuYmFuVmlldygpO1xyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2sobW9kZTogQ29tcG9uZW50X01vZGVzLCBpdGVtS2V5OiBhbnkpIHtcclxuICAgIC8vIFRPRE8gQE1lZEFsaSB0byBiZSBmaXhlZFxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLmJ1c2luZXNzQ2xhc3MgIT09IFwiTm90ZXNcIikge1xyXG4gICAgICB0aGlzLm5vdGVzU2VydmljZS5nZXRBbGVydE5vdGVzKGl0ZW1LZXk/LnRvU3RyaW5nKCksIHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IE5vdGVzR3JvdXBlZEJ5VXNlclJlc3BvbnNlW10pID0+IHtcclxuICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHsgZ3JvdXBlZE5vdGVzOiByZXNwb25zZSB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLlNtYWxsLndpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5TbWFsbC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbm90ZXMgZm9yIGFsZXJ0JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN0YXR1c0ZpbHRlckNoYW5nZWQoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dClcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0Q2xpY2tlZCgpe1xyXG4gICAgdGhpcy5vbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZVNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQoKVxyXG4gIHtcclxuICAgIGlmKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IodGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZihkYXRhICE9IG51bGwgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXREaXNjcmltaW5hdG9yKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8RGlzY3JpbWluYXRvclJlc3BvbnNlIHwgbnVsbD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Rpc2NyaW1pbmF0b3JTZXJ2aWNlLmdldERpc2NyaW1pbmF0b3IoYnVzaW5lc3NDbGFzcywgaWQpKVxyXG4gICAgXHJcbiAgICAgIGlmIChkaXNjcmltaW5hdG9yUmVzcG9uc2UpIHtcclxuICAgICAgICByZXR1cm4gZGlzY3JpbWluYXRvclJlc3BvbnNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY2F0Y2goZXJyb3IpXHJcbiAgICB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgXHJcbiAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwiYm9yZGVyLXJhZGl1cy03IG1iLTEgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbm8tcGFkXCIgXHJcbiAgICAqbmdJZj1cIihzaG93QWRkQnV0dG9uIHx8IHNlYXJjaEZpZWxkcyB8fCBmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgc2hvd1JlcG9ydGluZ1wiPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsZWZ0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIG14LTJcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkZEJ1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImFkZF9idXR0b25cIj5cclxuICAgICAgICAgIDxUc2ktQnV0dG9uIGljb249XCJwaSBwaS1wbHVzXCIgXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X2FkZF92aWV3XCIgXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiBcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5OZXcoKVwiPlxyXG4gICAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hGaWVsZHNcIiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaG93X3NlYXJjaF9maWVsZHNfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8VHNpLUJ1dHRvbiBpY29uPVwicGkgcGktc2xpZGVycy1oXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCJcclxuICAgICAgICAgICAgdG9vbHRpcFRleHQ9XCJzaGFyZWRfdHNpX2NvbXBvbmVudF9tZW51XCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cImgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHkgaG92ZXI6c2hhZG93LTYge3sgc2hvd1NlYXJjaEZpZWxkID8gJ3AtYnV0dG9uLXNlY29uZGFyeScgOiAncC1idXR0b24tc3VjY2VzcycgfX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheVNlYXJjaEZpZWxkcygpXCI+XHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93SW1wb3J0RnJvbU91dGxvb2tCdXR0b25cIiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJpbXBvcnRGcm9tT3V0bG9va19idXR0b25cIj5cclxuICAgICAgICAgIDxUc2ktQnV0dG9uIGljb249XCJwaSBwaS1lbnZlbG9wZVwiIFxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiBcclxuICAgICAgICAgICAgdG9vbHRpcFRleHQ9XCJzaGFyZWRfdHNpX2NvbXBvbmVudF9pbXBvcnRfZnJvbV9vdXRsb29rXCIgXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1pbmZvIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIiBcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uSW1wb3J0Q2xpY2tlZCgpXCI+IFxyXG4gICAgICAgICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJ0b2dnbGVfYWN0aW9uc192aWV3X2J1dHRvblwiPlxyXG4gICAgICAgICAgPHAtc3BsaXRCdXR0b25cclxuICAgICAgICAgICAgW2ljb25dPVwiY3VycmVudEljb25cIlxyXG4gICAgICAgICAgICBbbW9kZWxdPVwidmlld09wdGlvbnNcIlxyXG4gICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVBY3Rpb25WaWV3Q2xpY2soKVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwXT1cImN1cnJlbnRUb29sdGlwIHwgbG9jYWxpemVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLWljb24tb25seSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXByaW1hcnkgaC0ycmVtIGhvdmVyOnNoYWRvdy02XCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8IS0tIDxUc2ktQnV0dG9uXHJcbiAgICAgICAgICAgIFtpY29uXT1cImN1cnJlbnRJY29uXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1wcmltYXJ5ICBoLTJyZW0gcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvblZpZXdDbGljaygpXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cImN1cnJlbnRUb29sdGlwIHwgbG9jYWxpemVcIj5cclxuICAgICAgICAgIDwvVHNpLUJ1dHRvbj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxyXG4gICAgICAgIDxhcHAtcmVwb3J0aW5nICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKVwiIFxyXG4gICAgICAgICAgW2Zvcm1FbmRwb2ludF09XCJmb3JtRW5kcG9pbnRcIiBcclxuICAgICAgICAgIFtmb3JtTmFtZV09XCJmb3JtTmFtZVwiXHJcbiAgICAgICAgICBbZm9ybUVuZHBvaW50Qm9keV09XCJmb3JtRW5kcG9pbnRCb2R5XCIgXHJcbiAgICAgICAgICBbaXNGb3JtRW5kcG9pbnRQYWdlZF09XCJ0cnVlXCJcclxuICAgICAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICAgICAgW3JlcG9ydERpc2NyaW1pbmF0b3JdPVwiZGVzY3JpbWluYXRvclZhbHVlXCJcclxuICAgICAgICAgIChyZWZyZXNoRGF0YSk9XCJyZWZyZXNoKCRldmVudClcIlxyXG4gICAgICAgICAgW2ZpbHRlcnNIdG1sVGVtcGxhdGVdPVwiZmlsdGVyc0h0bWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbcGFnZWRSZXF1ZXN0XT1cInBhZ2VkUmVxdWVzdFwiXHJcbiAgICAgICAgICBbY3VkQ29tcG9uZW50XT1cImN1ZENvbXBvbmVudFwiIFxyXG4gICAgICAgICAgW2NvbmZpZ01vZGVCdXR0b25JZF09XCJjb25maWdNb2RlQnV0dG9uSWRcIlxyXG4gICAgICAgICAgW3Nob3dOb3RlQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93QWN0aW9uQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93SW5mb0J1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgPjwvYXBwLXJlcG9ydGluZz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcblxyXG4gIDxkaXY+XHJcblxyXG4gICAgPFRzaS1HZW5lcmljLUdyaWRcclxuICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCJcclxuICAgICAgW2NydWRTZXJ2aWNlXT1cImNydWRTZXJ2aWNlXCJcclxuICAgICAgW3Nob3dTZWFyY2hGaWVsZF09XCJzaG93U2VhcmNoRmllbGRcIlxyXG4gICAgICBbc2VhcmNoRmllbGRzXT1cInNlYXJjaEZpZWxkc1wiXHJcbiAgICAgIFtkZXNjcmltaW5hdG9yVmFsdWVdPVwiZGVzY3JpbWluYXRvclZhbHVlXCJcclxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxyXG4gICAgICBbcGFnZV09XCJwYWdlXCJcclxuICAgICAgW3BhZ2VkUmVxdWVzdF09XCJwYWdlZFJlcXVlc3RcIlxyXG4gICAgICBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIlxyXG4gICAgICBbc2hvd0hlYWRlckZpbHRlcnNdPVwic2hvd0hlYWRlckZpbHRlcnNcIlxyXG4gICAgICBbKGZpbHRlcnNIdG1sVGVtcGxhdGUpXT1cImZpbHRlcnNIdG1sVGVtcGxhdGVcIlxyXG4gICAgICBbcHJlc2VudGF0aW9uU2V0dGluZ3NdPVwicHJlc2VudGF0aW9uU2V0dGluZ3NcIlxyXG4gICAgICAobG9hZCk9XCJsb2FkKCRldmVudClcIlxyXG4gICAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbc2VsZWN0S2V5T25seV09XCJzZWxlY3RLZXlPbmx5XCJcclxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgIFtrZXldPVwia2V5XCJcclxuICAgICAgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgICAgKHNlbGVjdGVkSXRlbXNDaGFuZ2UpPVwib25TZWxlY3RlZEl0ZW1zQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkKT1cInNlYXJjaEZpZWxkVmFsdWVDaGFuZ2VzKCRldmVudClcIlxyXG4gICAgICBbc2VhcmNoT25Jbml0XT1cInNlYXJjaE9uSW5pdFwiXHJcbiAgICAgIFtzaG93RXhwb3J0QnV0dG9uXT1cInNob3dFeHBvcnRCdXR0b25cIlxyXG4gICAgICBbc2hvd0dsb2JhbFNlYXJjaF09XCJzaG93R2xvYmFsU2VhcmNoXCJcclxuICAgICAgW2lzU2VhcmNoQnV0dG9uRGlzYWJsZWRdPVwiaXNTZWFyY2hCdXR0b25EaXNhYmxlZFwiXHJcbiAgICAgIFtzaG93Q2FsZW5kZXJWaWV3XT1cInNob3dDYWxlbmRlclZpZXdcIlxyXG4gICAgICBbc2hvd0NhcmRWaWV3XT1cInNob3dDYXJkVmlld1wiXHJcbiAgICAgIFtzaG93S2FuYmFuVmlld109XCJzaG93S2FuYmFuVmlld1wiXHJcbiAgICAgIFtzaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0XT1cInNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXRcIlxyXG4gICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCJcclxuICAgICAgW2N1ZENvbXBvbmVudF09XCJjdWRDb21wb25lbnRcIiBcclxuICAgICAgW21vZGFsU2l6ZV09XCJtb2RhbFNpemVcIiBcclxuICAgICAgW2lkXT1cImlkXCJcclxuICAgICAgW3BhZ2UkXT1cInBhZ2UkXCJcclxuICAgICAgW2VudGl0eUluZm9dPVwiZW50aXR5SW5mb1wiXHJcbiAgICAgIChjYWxlbmRhckV2ZW50Q2xpY2spPVwiaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKCRldmVudClcIlxyXG4gICAgICAoc3RhdHVzRmlsdGVyQ2hhbmdlZCk9XCJvblN0YXR1c0ZpbHRlckNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICA+PC9Uc2ktR2VuZXJpYy1HcmlkPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG48L2Rpdj5cclxuIl19
|
|
1074
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXhJLE9BQU8sRUFBRSxxQ0FBcUMsRUFBb0QsTUFBTSxjQUFjLENBQUM7QUFldkgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFHOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFF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OlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgTW9kYWxTaXplRW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEFjdGlvblBsYWNlbWVudCB9IGZyb20gJy4uLy4uL2VudW1zL2FjdGlvbi1wbGFjZW1lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYnV0dG9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvZ3JpZC1zZWxlY3Rpb24tbW9kZSc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgb3BlbkFjdGlvbkxpc3QsIG9wZW5EeW5hbWljRm9ybU1vZGFsQ29tcG9uZW50LCBvcGVuTW9kYWxVcGxvYWRHcmlkLCBvcGVuTm90ZXNMaXN0IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBCdXR0b25DbGlja1Jlc3VsdCwgR3JpZENvbHVtbiwgSUdyaWRDb25maWd1cmF0aW9uLCBJTW9kYWxTaXplLCBJUGFnZSwgSVBhZ2VkUmVxdWVzdCwgSVBhZ2VkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCwgU2VhcmNoRmllbGQsIHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgb2NjdXJlbmNlSW5mb3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uRXJwL2FjdGlvbkVycCc7XHJcbmltcG9ydCB7IEV2ZW50U2NoZW1hIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbi9ldmVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBFbnRpdHlJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvJztcclxuaW1wb3J0IHsgTm90ZXNHcm91cGVkQnlVc2VyUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvTm90ZXMvTm90ZSc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvblNldHRpbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJlc2VudGF0aW9uLXNldHRpbmdzL3ByZXNlbnRhdGlvbi1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IERpc2NyaW1pbmF0b3JSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9zaGFyZWQvZGlzY3JpbWluYXRvci1yZXNwb25zZSc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlL2NydWQtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlzY3JpbWluYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2Rpc2NyaW1pbmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2ctZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmljaGllclVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXItdXBsb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvTm90ZS9Ob3RlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNvcmQtaW5mby1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93L3dvcmtmbG93LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFR5cGVSZWdpc3RyeUhlbHBlciB9IGZyb20gJy4uLy4uL3RzaS1oZWxwZXJzL3R5cGUtcmVnaXN0cnkuaGVscGVyJztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpRm9ybU1vZGFsRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vdHNpLWZvcm0tbW9kYWwtZm9vdGVyL3RzaS1mb3JtLW1vZGFsLWZvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lOb3Rlc0F2ZXJ0aXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktbm90ZXMtYXZlcnRpci90c2ktbm90ZXMtYXZlcnRpci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktcG9wdXAtdGV4dC12aWV3ZXIvdHNpLXBvcHVwLXRleHQtdmlld2VyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RzaS1HZW5lcmljLUNydWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbVHNpTm90aWZpY2F0aW9uU2VydmljZV0sXHJcbn0pIC8qLCBPbkNoYW5nZXMqL1xyXG5leHBvcnQgY2xhc3MgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9mb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXInO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJUb29sdGlwID0gJ3Nob3dfZmlsdGVyJztcclxuICBwcml2YXRlIF9pc1dvcmtmbG93RXRhdEZvcm1Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGJ1dHRvblR5cGUgPSBCdXR0b25UeXBlO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbjtcclxuICBjb25maWdNb2RlQnV0dG9uSWQ6IHN0cmluZyA9IFwiY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0XCJcclxuICBzYXZlUHJvcGVydGllc0J1dHRvbkNsYXNzTmFtZSA9IFwiY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0LXNhdmUtcHJvcGVydGllc1wiO1xyXG4gIEBJbnB1dCgpIGVudGl0eUluZm86IEVudGl0eUluZm8gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuXHJcbiAgaXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgcGFnZWRSZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0ID0ge307XHJcblxyXG4gIHBhZ2U6IElQYWdlPGFueT4gPSB7XHJcbiAgICBpdGVtczogW10sXHJcbiAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgdG90YWxDb3VudDogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICBzdW1tYXJpZXM6IFtdLFxyXG4gICAgbG9hZGluZzogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgZmlyc3Q6IG51bWJlciA9IDA7XHJcbiAgcm93cyA9IDE7XHJcbiAgZm9ybUVuZHBvaW50Qm9keTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGZpbHRlcnNIdG1sVGVtcGxhdGU/OiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RlZENvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIF9zZWFyY2hPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIF9tb2RhbERhdGE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZChUc2lHZW5lcmljR3JpZENvbXBvbmVudCkgZ2VuZXJpY0dyaWRDb21wb25lbnQ/OiBUc2lHZW5lcmljR3JpZENvbXBvbmVudDtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBzZXQgbW9kYWxEYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX21vZGFsRGF0YSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgY29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgQElucHV0KCkgZ3JpZENvbmZpZ3VyYXRpb24/OiBJR3JpZENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgY3VkQ29tcG9uZW50OiBhbnk7XHJcbiAgQElucHV0KCkgY3J1ZFNlcnZpY2U/OiBDcnVkQmFzZVNlcnZpY2U8YW55LCBhbnksIGFueSwgYW55PjtcclxuICBASW5wdXQoKSBoZWFkZXI6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1vZGFsU2l6ZT86IElNb2RhbFNpemU7XHJcbiAgQElucHV0KCkgZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgcHJlc2VudGF0aW9uU2V0dGluZ3M/OiBQcmVzZW50YXRpb25TZXR0aW5nXHJcbiAgQElucHV0KCkgcHJldmVudEFkZEV2ZW50PzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KCkgc2V0IGZvcm1FbmRwb2ludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5fZm9ybUVuZHBvaW50ID0gYCR7dmFsdWV9L2dldGFsbHBhZ2VkYDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZvcm1FbmRwb2ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtRW5kcG9pbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtTmFtZT86IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZm9ybU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtTmFtZTtcclxuICB9XHJcblxyXG4gIHNldCBmb3JtTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9mb3JtTmFtZSA9IHZhbHVlO1xyXG4gICAgLy8gdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHNldCBpc1NlYXJjaEJ1dHRvbkRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8vIEBJbnB1dCgpIGZvcm1OYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dIZWFkZXJGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0VkaXRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dEZWxldGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dBZGRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDb25zdWx0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1VwbG9hZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd05vdGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dEb3dubG9hZEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dJbmZvQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RHVwbGljYXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Rm9ybUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0NhbGVuZGVyVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dDYXJkVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dJbXBvcnRGcm9tT3V0bG9va0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dLYW5iYW5WaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hGaWVsZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRzOiBTZWFyY2hGaWVsZFtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGNhbGVuZGVyU2NoZW1hOiBFdmVudFNjaGVtYSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy9ncmlkIHNlbGVjdGlvblxyXG4gIEBJbnB1dCgpIHNlbGVjdEtleU9ubHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgQElucHV0KCkga2V5OiBzdHJpbmcgPSAndWlkJztcclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuXHJcbiAgX2J1c2luZXNzQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX2J1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEJ1c2luZXNzQ2xhc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZWFyY2hPbkluaXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hPbkluaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzZWFyY2hPbkluaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoT25Jbml0O1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIHNob3dHbG9iYWxTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dSZXBvcnRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+KCk7XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNvbHVtbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PigpO1xyXG4gIEBPdXRwdXQoKSBvbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNlbmRyZWdpb24gT3V0cHV0c1xyXG4gIGlzQ3VzdG9tQ29sdW1uUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjbGlja0NvdW50ID0gMTtcclxuICBjdXJyZW50SWNvbiA9IFwicGkgcGktYWxpZ24tanVzdGlmeVwiO1xyXG4gIGN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3Rfdmlld1wiO1xyXG5cclxuICB2aWV3T3B0aW9uczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICBwYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbXNnU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgIHByaXZhdGUgZGlhbG9nRGF0YVNlcnZpY2U6IERpYWxvZ0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWNoaWVyU2VydmljZTogRmljaGllclVwbG9hZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY29yZEluZm9Qb3B1cFNlcnZpY2U6IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZW50aXR5Q29uZmlnU2VydmljZTogRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGVzU2VydmljZTogTm90ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcclxuICAgIHByaXZhdGUgX2Rpc2NyaW1pbmF0b3JTZXJ2aWNlOiBEaXNjcmltaW5hdG9yU2VydmljZSxcclxuICApIHsgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIGdyaWQgc3RhdGVcclxuXHJcbiAgZ2V0U3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZENvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5nZXRTdGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHJlc3RvcmVTdGF0ZShjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQucmVzdG9yZVN0YXRlKGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWxlY3RlZENvbHVtbnMoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LnJlc2V0U2VsZWN0ZWRDb2x1bW5zKGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgLy8gfVxyXG5cclxuICBhc3luYyBnZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmICF0aGlzLl9pc1dvcmtmbG93RXRhdEZvcm1Mb2FkZWQpIHtcclxuICAgICAgdGhpcy5faXNXb3JrZmxvd0V0YXRGb3JtTG9hZGVkID0gdHJ1ZVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0V29ya2Zsb3dFdGF0Rm9ybUJ5Q2xhc3NOYW1lKHRoaXMuYnVzaW5lc3NDbGFzcykpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRGb3JtID0gcmVzdWx0XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgd29ya2Zsb3cgc3RhdGUgZm9ybTonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24oYnVzaW5lc3NDbGFzczogc3RyaW5nLCB1aWRPYmplY3Q/OiBzdHJpbmcpIHtcclxuICAgIGxldCByZXN1bHQ6IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcmVxdWVzdDogR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCA9IG5ldyBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0KCk7XHJcbiAgICAgIHJlcXVlc3QuY2xhc3NOYW1lID0gYnVzaW5lc3NDbGFzc1xyXG4gICAgICByZXF1ZXN0LnVpZE9iamV0ID0gdWlkT2JqZWN0O1xyXG4gICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUgPSB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWVcclxuICAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lXHJcbiAgICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRDdXJyZW50RW50aXR5V29ya2xmb3dJbnN0YW5jZUluZm9ybWF0aW9uKHJlcXVlc3QpKVxyXG4gICAgICAvLyBpZiAocmVzdWx0KSB7XHJcbiAgICAgIC8vICAgbGV0IHdvcmtmbG93RXRhdEZvcm0gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50Rm9ybVxyXG4gICAgICAvLyAgICAgPy5maW5kKHggPT4geC51aWQgPT0gcmVzdWx0Py53b3JrZmxvd0V0YXQpXHJcbiAgICAgIC8vICAgaWYgKHdvcmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgLy8gICAgIC8vIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9yRm9yQ3VycmVudEVudGl0eUZvcm0gPVxyXG4gICAgICAvLyAgICAgLy8gICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLm1hcFdvcmtmbG93RXRhdEZvcm1Ub1ByZXNlbnRhdGlvblNldHRpbmcod29ya2Zsb3dFdGF0Rm9ybS53b3JrZmxvd0V0YXRzRm9ybXMpXHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRcclxuICB9XHJcblxyXG4gIHNlYXJjaEZpZWxkVmFsdWVDaGFuZ2VzKG5ld1NlYXJjaEZpZWxkVmFsdWVzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkLmVtaXQobmV3U2VhcmNoRmllbGRWYWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRFbnRpdHlJbmZvKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpc2VTaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gJ2hpZGVfZmlsdGVyJztcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gJ3BpIHBpLWZpbHRlci1zbGFzaCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSAnc2hvd19maWx0ZXInO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSAncGkgcGktZmlsdGVyJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb2x1bW5zID09IG51bGwgJiYgdGhpcy5jb2x1bW5zID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ2NvbHVtbnMgY2FudCBiZSBudWxsIG9yIHVuZGVmaW5lZCwgZGV2ZWxvcHBlciBtdXN0IHNldCBjb2x1bW5zIG9mIGdyaWQgISdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dJbmZvQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfaW5mbycsXHJcbiAgICAgICAgICBmaWVsZDogJ2luZm8nLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktaW5mbycsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAzLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19pbmZvJyxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dEb3dubG9hZEJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2Rvd25sb2FkJyxcclxuICAgICAgICAgIGZpZWxkOiAnZG93bmxvYWQnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktZG93bmxvYWQnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogMixcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnVMOpbMOpY2hhcmdlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93VXBsb2FkQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfYXR0YWNobWVudCcsXHJcbiAgICAgICAgICBmaWVsZDogJ3VwbG9hZCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wYXBlcmNsaXAnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogNCxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfYXR0YWNobWVudCcsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93Tm90ZUJ1dHRvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19ub3RlcycsXHJcbiAgICAgICAgICBidXR0b25MYWJlbDogJycsXHJcbiAgICAgICAgICBmaWVsZDogJ25vdGVzJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNvbW1lbnQnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogNSxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfbm90ZXMnLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0FjdGlvbkJ1dHRvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19hY3Rpb24nLFxyXG4gICAgICAgICAgYnV0dG9uTGFiZWw6ICcnLFxyXG4gICAgICAgICAgZmllbGQ6ICdBY3Rpb25FUlAnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9sdCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAxMCxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfYWN0aW9uJyxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dGb3JtQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2Zvcm0nLFxyXG4gICAgICAgICAgZmllbGQ6ICdmb3JtJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2snLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LWluZGlnby01MDAnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogOCxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfZm9ybScsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RGVsZXRlQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZGVsZXRlJyxcclxuICAgICAgICAgIGZpZWxkOiAnZGVsZXRlJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtcmVkLTUwMCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAxLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdEZWxldGUnLFxyXG4gICAgICAgICAgYnV0dG9uVHlwZTogQnV0dG9uVHlwZS5TdWJtaXQsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RWRpdEJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2VkaXQnLFxyXG4gICAgICAgICAgZmllbGQ6ICdlZGl0JyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBlbmNpbCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiA2LFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19lZGl0JyxcclxuICAgICAgICAgIGJ1dHRvblR5cGU6IEJ1dHRvblR5cGUuU3VibWl0LFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50LklubGluZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19jb25zdWx0JyxcclxuICAgICAgICAgIGZpZWxkOiAnY29uc3VsdCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LWJsdWUtNTAwJyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDAsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ0NvbnN1bHRlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RHVwbGljYXRlQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZHVwbGljYXRlJyxcclxuICAgICAgICAgIGZpZWxkOiAnZHVwbGljYXRlJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNsb25lJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGljb25TdHlsZUNsYXNzOiAndGV4dC1wdXJwbGUtNTAwJyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDcsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ0R1cGxpcXVlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wub3JkZXIgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5vcmRlciEgLSBiLm9yZGVyISksXHJcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLm9yZGVyID09PSB1bmRlZmluZWQpLFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoXHJcbiAgICAgIChjb2x1bW4pID0+XHJcbiAgICAgIChjb2x1bW4udHJhbnNsYXRlZEhlYWRlciA9IGNvbHVtbi5oZWFkZXJcclxuICAgICAgICA/IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGNvbHVtbi5oZWFkZXIpXHJcbiAgICAgICAgOiBjb2x1bW4uaGVhZGVyKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZpZXdPcHRpb25zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3RfdmlldycpLFxyXG4gICAgICAgIGljb246ICdwaSBwaS1hbGlnbi1qdXN0aWZ5JyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUxpc3RWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FsZW5kZXJfdmlld1wiKSxcclxuICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9jYXJkX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktaWQtY2FyZCcsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy50b2dnbGVDYXJkVmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktdGgtbGFyZ2UnLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlS2FuYmFuVmlldygpXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5faW5pdE1vZGVscygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qIHRvZ2dsZUhlYWRlckZpbHRlcnMoKXtcclxuICAgIGlmKHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IHRydWUpe1xyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyXCI7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9IFwic2hvd19maWx0ZXJcIjtcclxuICAgIH1cclxuICAgIGVsc2UgeyAvL3RoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IGZhbHNlXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlci1zbGFzaFwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcImhpZGVfZmlsdGVyXCI7XHJcblxyXG4gICAgfVxyXG4gIH0gKi9cclxuXHJcbiAgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2VcclxuICAgICAgPyB0aGlzLnBhZ2UucGFnZU51bWJlciA9PT0gdGhpcy5wYWdlLnRvdGFsQ291bnQgLSB0aGlzLnBhZ2UucGFnZVNpemVcclxuICAgICAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IDAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGF6eUxvYWRcclxuICAgKi9cclxuICAvL2ZpcnN0ID09PiBwYWdlLnBhZ2VOdW1iZXJcclxuICAvL3Jvd3MgPT0+IHBhZ2UucGFnZVNpemVcclxuICAvL3RoaXMucGFnZS5pdGVtcy5sZW5ndGggPT0+IHRvdGFsIGNvdW50XHJcblxyXG4gIG9wZW5OZXcoKSB7XHJcbiAgICBpZiAoIXRoaXMucHJldmVudEFkZEV2ZW50KSB7XHJcbiAgICAgIHRoaXMuX29wZW5Nb2RhbChDb21wb25lbnRfTW9kZXMuQ1JFQVRFLCBudWxsLCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHtcclxuICAgICAga2V5OiB1bmRlZmluZWQsXHJcbiAgICAgIGZpZWxkOiAnYWRkJyxcclxuICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKGV2ZW50OiBCdXR0b25DbGlja1Jlc3VsdCkge1xyXG5cclxuICAgIGxldCBpdGVtS2V5OiBhbnkgPSBldmVudC5zZWxlY3RLZXlPbmx5ID8gZXZlbnQua2V5IDogZXZlbnQua2V5W3RoaXMua2V5XTtcclxuXHJcbiAgICBjb25zdCBleGNsdWRlZCA9IFtcIk5vdGVzXCIsXCJBY3Rpb25FUlBcIiwgXCJGaWNoaWVyXCJdO1xyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiAhZXhjbHVkZWQuaW5jbHVkZXModGhpcy5idXNpbmVzc0NsYXNzKSkge1xyXG4gICAgICB0aGlzLmRpYWxvZ0RhdGFTZXJ2aWNlLnNldERhdGEoeyBpZDogaXRlbUtleSwgY2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQuZmllbGQgPT0gJ2VkaXQnKSB7XHJcbiAgICAgIHRoaXMuX2VkaXRSb3coaXRlbUtleSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdkZWxldGUnKSB7XHJcbiAgICAgIHRoaXMuX2RlbGV0ZVJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2NvbnN1bHQnKSB7XHJcbiAgICAgIHRoaXMuX2NvbnN1bHRSb3coaXRlbUtleSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdkdXBsaWNhdGUnKSB7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIHRocm93IEVycm9yKFwiQnVzc2luZXNzIGNsYXNzIGlzIG5vdCBkZWZpbmVkICFcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2R1cGxpY2F0ZVJvdyhpdGVtS2V5KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICd1cGxvYWQnKSB7XHJcbiAgICAgIGNvbnN0IGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YToge30sXHJcbiAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplIS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplIS5oZWlnaHQsXHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgb3Blbk1vZGFsVXBsb2FkR3JpZCh0aGlzLl9pbmplY3RvciwgY29uZilcclxuXHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnbm90ZXMnKSB7XHJcblxyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTm90ZXNMaXN0KHRoaXMuX2luamVjdG9yKTtcclxuXHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnZG93bmxvYWQnKSB7XHJcblxyXG4gICAgICB0aGlzLmZpY2hpZXJTZXJ2aWNlLmdldEJ5SWQoaXRlbUtleSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVGaWxlKGRhdGEuY29udGVudSwgZGF0YS5ub21GaWNoaWVyQ29tcGxldCEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2luZm8nKSB7XHJcblxyXG4gICAgICB0aGlzLnJlY29yZEluZm9Qb3B1cFNlcnZpY2VcclxuICAgICAgICAuZ2V0SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MhLCBpdGVtS2V5KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9XHJcbiAgICAgICAgICAgICAgJ1VJRCA6ICAnICtcclxuICAgICAgICAgICAgICBpdGVtS2V5ICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgYnkgOiAgJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5jcmVhdGlvblVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgYnkgOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLm1vZGlmVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlU2Fpc2llICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlTW9kaWY7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBVaWQ6IGl0ZW1LZXksXHJcbiAgICAgICAgICAgICAgICBidXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvblVzZXI6IGRhdGEuY3JlYXRpb25Vc2VyLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZVc2VyOiBkYXRhLm1vZGlmVXNlcixcclxuICAgICAgICAgICAgICAgIGRhdGVTYWlzaWU6IGRhdGEuZGF0ZVNhaXNpZSxcclxuICAgICAgICAgICAgICAgIGRhdGVNb2RpZjogZGF0YS5kYXRlTW9kaWYsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzkwcmVtJyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHJlbScsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgICBUc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgY29uZlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT5cclxuICAgICAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnZm9ybScpe1xyXG4gICAgICBpZighdGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgICB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgZm9ybURlc2NyaW1pbmF0b3JWYWx1ZTogYW55ID0gbnVsbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAge1xyXG4gICAgICAgIGZvcm1EZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFmb3JtRGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgICB7XHJcbiAgICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RGlzY3JpbWluYXRvcih0aGlzLmJ1c2luZXNzQ2xhc3MsIGl0ZW1LZXkpO1xyXG4gICAgICAgIGZvcm1EZXNjcmltaW5hdG9yVmFsdWUgPSBkaXNjcmltaW5hdG9yUmVzcG9uc2U/LmRpc2NyaW1pbmF0b3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1vZGFsQ29uZmlnID0ge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHNvdXJjZUJ1c2luZXNzQ2xhc3M6IHtcclxuICAgICAgICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yVmFsdWU6IGZvcm1EZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZSEud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZSEuaGVpZ2h0LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5EeW5hbWljRm9ybU1vZGFsQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBtb2RhbENvbmZpZylcclxuXHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gICAgfWVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdBY3Rpb25FUlAnKSB7XHJcblxyXG4gICAgICBsZXQgb2NjdXJlbmNlSW5mb3M6IG9jY3VyZW5jZUluZm9zID0ge1xyXG4gICAgICAgIGJ1c2luZXNzY2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyA/PyAnJyxcclxuICAgICAgICBvY2N1cmVuY2U6IGl0ZW1LZXlcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgb3BlbkFjdGlvbkxpc3QodGhpcy5faW5qZWN0b3IsIHsgb2NjdXJlbmNlSW5mb3M6IG9jY3VyZW5jZUluZm9zIH0pO1xyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Db2x1bW5DbGlja2VkLmVtaXQoe1xyXG4gICAgICAgIGtleTogZXZlbnQua2V5LFxyXG4gICAgICAgIGZpZWxkOiBldmVudC5maWVsZCxcclxuICAgICAgICBzZWxlY3RLZXlPbmx5OiB0aGlzLnNlbGVjdEtleU9ubHksXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUZpbGUoYmFzZTY0RGF0YTogYW55LCBmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XHJcbiAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBieXRlTnVtYmVyc1tpXSA9IGJ5dGVDaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICBhLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBhLmNsaWNrKCk7XHJcblxyXG4gICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcblxyXG4gIGxvYWQoZXZlbnQ6IHsgcmVxdWVzdDogSVBhZ2VkUmVxdWVzdDsgaXNGb3JDYWxlbmRhcjogYm9vbGVhbiB9KSB7XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdCA9IGV2ZW50LnJlcXVlc3Q7XHJcbiAgICB0aGlzLl9zZXRmb3JtRW5kcG9pbnRCb2R5KCk7XHJcbiAgICB0aGlzLl9sb2FkRFMoZXZlbnQuaXNGb3JDYWxlbmRhcik7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSXRlbXNDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9zZXRmb3JtRW5kcG9pbnRCb2R5KCk6IHZvaWQge1xyXG4gICAgbGV0IG94OiBhbnkgPSB0aGlzLl9jbG9uZVBhZ2VkUmVxdWVzdCh0aGlzLnBhZ2VkUmVxdWVzdCk7XHJcbiAgICBveFsnZ2V0QWxsRGF0YSddID0gdHJ1ZTtcclxuICAgIHRoaXMuZm9ybUVuZHBvaW50Qm9keSA9IEpTT04uc3RyaW5naWZ5KG94KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RlbHMoKSB7XHJcblxyXG4gICAgdGhpcy5wYWdlID0ge1xyXG4gICAgICBpdGVtczogW10sXHJcbiAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgcGFnZU51bWJlcjogMSxcclxuICAgICAgdG90YWxDb3VudDogMCxcclxuICAgICAgdG90YWxQYWdlczogMCxcclxuICAgICAgc3VtbWFyaWVzOiBbXSxcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogMTAsXHJcbiAgICAgIHNraXBDb3VudDogMCxcclxuICAgICAgc29ydGluZzogW10sXHJcbiAgICAgIGtleXdvcmQ6ICcnLFxyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgZ2V0QWxsRGF0YTogZmFsc2UsXHJcbiAgICAgIHN1bW1hcmllczogW10sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZERTKGlzRm9yQ2FsZW5kZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgIHRoaXMucGFnZS5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZSQubmV4dCh0aGlzLnBhZ2UpO1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIC4uLnRoaXMucGFnZWRSZXF1ZXN0LFxyXG4gICAgICBnZXRBbGxEYXRhOiBpc0ZvckNhbGVuZGVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jcnVkU2VydmljZSAhPSBudWxsICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEFsbFBhZ2VkKHRoaXMucGFnZWRSZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogSVBhZ2VkUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgaXRlbXMgOiB2YWx1ZS5pdGVtcyxcclxuICAgICAgICAgICAgICB0b3RhbENvdW50IDogdmFsdWUudG90YWxDb3VudCxcclxuICAgICAgICAgICAgICBzdW1tYXJpZXMgOiB2YWx1ZS5zdW1tYXJpZXMgPyB2YWx1ZS5zdW1tYXJpZXMgOiBbXSxcclxuICAgICAgICAgICAgICB0b3RhbFBhZ2VzIDogKHRoaXMucGFnZS50b3RhbENvdW50IC0gICh0aGlzLnBhZ2UudG90YWxDb3VudCAlIHRoaXMucGFnZS5wYWdlU2l6ZSkpIC8gdGhpcy5wYWdlLnBhZ2VTaXplICsgMSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dOb3RlQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkTm90ZXNDb3VudHMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5pc0N1c3RvbUNvbHVtblJlbmRlcmVkID09IGZhbHNlICYmIHZhbHVlLmN1c3RvbUNvbHVtblNjaGVtYSAmJiB2YWx1ZS5jdXN0b21Db2x1bW5TY2hlbWEubGVuZ3RoID4gMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIC8vIEFkZCBjdXN0b20gY29sdW1ucyB0byB0aGUgZ3JpZFxyXG4gICAgICAgICAgICAgIHZhbHVlLmN1c3RvbUNvbHVtblNjaGVtYS5mb3JFYWNoKGNjcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VzdG9tQ29sdW1uR3JpZDogR3JpZENvbHVtbiA9IHtcclxuICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjY3MuY29sdW1uTmFtZSxcclxuICAgICAgICAgICAgICAgICAgZmllbGQ6IGNjcy5jb2x1bW5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJJbnB1dFR5cGU6IGNjcy50eXBlLFxyXG4gICAgICAgICAgICAgICAgICBpc0N1c3RvbUNvbHVtbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaChjdXN0b21Db2x1bW5HcmlkKVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgdGhpcy5pc0N1c3RvbUNvbHVtblJlbmRlcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wYWdlLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucGFnZSQubmV4dCh2YWx1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTm90ZXNDb3VudHMoKSB7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLnBhZ2UuaXRlbXMubWFwKHggPT4geFt0aGlzLmtleV0pXHJcbiAgICAgIC5maWx0ZXIoeCA9PiB4ICE9PSBudWxsICYmIHggIT09IHVuZGVmaW5lZClcclxuICAgICAgLm1hcCh4ID0+IFN0cmluZyh4KSk7XHJcblxyXG4gICAgaWYgKCFpZHMubGVuZ3RoIHx8ICF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubm90ZXNTZXJ2aWNlXHJcbiAgICAgIC5nZXROb3Rlc0NvdW50QnlSb3dzKHRoaXMuYnVzaW5lc3NDbGFzcywgaWRzKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFxyXG4gICAgICAgICAgcmVzdWx0Lm1hcCh4ID0+IFt4LnJvd1VpZCwgeC5jb3VudF0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdlLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcoaXRlbVt0aGlzLmtleV0pO1xyXG4gICAgICAgICAgY29uc3QgY291bnQgPSBtYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgICAoaXRlbSBhcyBhbnkpLm5vdGVzQ291bnQgPSB0eXBlb2YgY291bnQgPT09ICdudW1iZXInID8gY291bnQgOiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VkaXRSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuRURJVCwgaXRlbUtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWxldGVSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuREVMRVRFLCBpdGVtS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbnN1bHRSb3coaXRlbUtleTogYW55KSB7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3Rpb25XaXRoQWxlcnRDaGVjayhDb21wb25lbnRfTW9kZXMuQ09OU1VMVCwgaXRlbUtleSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2R1cGxpY2F0ZVJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEUsIGl0ZW1LZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlJbmZvKCkge1xyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLmVudGl0eUluZm8gPSBhd2FpdCB0aGlzLl9lbnRpdHlDb25maWdTZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKTtcclxuICAgICAgaWYgKCF0aGlzLmVudGl0eUluZm8pIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oYE5vIGVudGl0eSBpbmZvIGZvdW5kIGZvciAke3RoaXMuYnVzaW5lc3NDbGFzc31gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb3Blbk1vZGFsKG1vZGU6IHN0cmluZywgaXRlbUtleTogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuY3J1ZFNlcnZpY2UhLmlzRHVwbGljYXRlID0gbW9kZSA9PT0gTW9kZXMuZHVwbGljYXRlO1xyXG4gICAgbGV0IHdvcmtmbG93RW50aXR5SW5mb3JtYXRpb246IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcblxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgICAgd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbiA9IGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbih0aGlzLmJ1c2luZXNzQ2xhc3MsIGl0ZW1LZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlcnJvcil7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGFsU2l6ZSAhPSBudWxsICYmIHRoaXMubW9kYWxTaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25mID0ge1xyXG4gICAgICAgIGRhdGE6IHsgaWQ6IGl0ZW1LZXksIG1vZGU6IG1vZGUsIGN1c3RvbURhdGE6IGRhdGEsIHdvcmtmbG93SW5mb3JtYXRpb246IHdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24sIGVudGl0eUluZm86IHRoaXMuZW50aXR5SW5mbyB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB0ZW1wbGF0ZXM6IHtcclxuICAgICAgICAgIGZvb3RlcjogVHNpRm9ybU1vZGFsRm9vdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YTogeyBpZDogaXRlbUtleSwgbW9kZTogbW9kZSwgY3VzdG9tRGF0YTogZGF0YSwgd29ya2Zsb3dJbmZvcm1hdGlvbjogd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbiB9LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGhpcy5jdWRDb21wb25lbnQgPT0gJ3N0cmluZycpIHtcclxuICAgICAgdGhpcy5jdWRDb21wb25lbnQgPSBUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZSh0aGlzLmN1ZENvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5jdWRDb21wb25lbnQsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKGNvbmYpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwoY29uZj86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmYgJiYgY29uZj8uZGF0YT8ucmVmcmVzaExpc3QpIHtcclxuICAgICAgdGhpcy5fbG9hZERTKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb25lUGFnZWRSZXF1ZXN0KHJlcXVlc3Q6IElQYWdlZFJlcXVlc3QpOiBJUGFnZWRSZXF1ZXN0IHtcclxuICAgIGxldCBjbG9uZTogSVBhZ2VkUmVxdWVzdCA9IHtcclxuICAgICAgbWF4UmVzdWx0Q291bnQ6IHJlcXVlc3QubWF4UmVzdWx0Q291bnQsXHJcbiAgICAgIHNraXBDb3VudDogcmVxdWVzdC5za2lwQ291bnQsXHJcbiAgICAgIHNvcnRpbmc6IHJlcXVlc3Quc29ydGluZyxcclxuICAgICAga2V5d29yZDogcmVxdWVzdC5rZXl3b3JkLFxyXG4gICAgICBmaWx0ZXJzOiByZXF1ZXN0LmZpbHRlcnMsXHJcbiAgICAgIGdldEFsbERhdGE6IHJlcXVlc3QuZ2V0QWxsRGF0YSxcclxuICAgICAgc3VtbWFyaWVzOiByZXF1ZXN0LnN1bW1hcmllcyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGRpc3BsYXlTZWFyY2hGaWVsZHMoKSB7XHJcbiAgICB0aGlzLnNob3dTZWFyY2hGaWVsZCA9ICF0aGlzLnNob3dTZWFyY2hGaWVsZDtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBjYWxlbmRlclxyXG4gIGhhbmRsZUNhbGVuZGFyRXZlbnRDbGljayhpdGVtOiBhbnkpIHtcclxuICAgIHN3aXRjaCAoaXRlbS5tb2RlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ6XHJcbiAgICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtLmlkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFOlxyXG4gICAgICAgIHRoaXMuX29wZW5Nb2RhbChDb21wb25lbnRfTW9kZXMuQ1JFQVRFLCBudWxsLCBpdGVtLmRhdGVEZWJ1dCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50X01vZGVzLkVESVQ6XHJcbiAgICAgICAgdGhpcy5fZWRpdFJvdyhpdGVtLmlkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2luZm8nOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnaW5mbycsIGtleTogaXRlbS5pZCwgc2VsZWN0S2V5T25seTogdHJ1ZSB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZG93bmxvYWQnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnZG93bmxvYWQnLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKHsgZmllbGQ6ICd1cGxvYWQnLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25vdGVzJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ25vdGVzJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBY3Rpb25FUlAnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnQWN0aW9uRVJQJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVMaXN0VmlldygpIHtcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0thbmJhblZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktYWxpZ24tanVzdGlmeVwiO1xyXG4gICAgdGhpcy5jdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FsZW5kZXJWaWV3KCkge1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gIXRoaXMuc2hvd0NhbGVuZGVyVmlldztcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb2FkRFModGhpcy5zaG93Q2FsZW5kZXJWaWV3KTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLWNhbGVuZGFyXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2NhbGVuZGVyX3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FyZFZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9ICF0aGlzLnNob3dDYXJkVmlldztcclxuICAgIHRoaXMuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93S2FuYmFuVmlldyA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5fbG9hZERTKHRoaXMuc2hvd0NhcmRWaWV3KTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLWlkLWNhcmRcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FyZF92aWV3XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUthbmJhblZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gIXRoaXMuc2hvd0thbmJhblZpZXc7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLXRoLWxhcmdlXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl92aWV3XCI7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Y0Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wZW5OZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVBY3Rpb25WaWV3Q2xpY2soKSB7XHJcbiAgICB0aGlzLmNsaWNrQ291bnQrKztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuY2xpY2tDb3VudCkge1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgdGhpcy50b2dnbGVMaXN0VmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy50b2dnbGVDYXJkVmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHRoaXMudG9nZ2xlS2FuYmFuVmlldygpO1xyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2sobW9kZTogQ29tcG9uZW50X01vZGVzLCBpdGVtS2V5OiBhbnkpIHtcclxuICAgIC8vIFRPRE8gQE1lZEFsaSB0byBiZSBmaXhlZFxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLmJ1c2luZXNzQ2xhc3MgIT09IFwiTm90ZXNcIikge1xyXG4gICAgICB0aGlzLm5vdGVzU2VydmljZS5nZXRBbGVydE5vdGVzKGl0ZW1LZXk/LnRvU3RyaW5nKCksIHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IE5vdGVzR3JvdXBlZEJ5VXNlclJlc3BvbnNlW10pID0+IHtcclxuICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHsgZ3JvdXBlZE5vdGVzOiByZXNwb25zZSB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLlNtYWxsLndpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5TbWFsbC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbm90ZXMgZm9yIGFsZXJ0JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN0YXR1c0ZpbHRlckNoYW5nZWQoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dClcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0Q2xpY2tlZCgpe1xyXG4gICAgdGhpcy5vbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZVNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQoKVxyXG4gIHtcclxuICAgIGlmKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IodGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZihkYXRhICE9IG51bGwgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdCA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXREaXNjcmltaW5hdG9yKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8RGlzY3JpbWluYXRvclJlc3BvbnNlIHwgbnVsbD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Rpc2NyaW1pbmF0b3JTZXJ2aWNlLmdldERpc2NyaW1pbmF0b3IoYnVzaW5lc3NDbGFzcywgaWQpKVxyXG5cclxuICAgICAgaWYgKGRpc2NyaW1pbmF0b3JSZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yUmVzcG9uc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjYXRjaChlcnJvcilcclxuICAgIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICBcclxuICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJib3JkZXItcmFkaXVzLTcgbWItMSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBuby1wYWRcIiBcclxuICAgICpuZ0lmPVwiKHNob3dBZGRCdXR0b24gfHwgc2VhcmNoRmllbGRzIHx8IGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBzaG93UmVwb3J0aW5nXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYWRkX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgXHJcbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PVwic2hhcmVkX3RzaV9jb21wb25lbnRfYWRkX3ZpZXdcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbk5ldygpXCI+XHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEZpZWxkc1wiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNob3dfc2VhcmNoX2ZpZWxkc19idXR0b25cIj5cclxuICAgICAgICAgIDxUc2ktQnV0dG9uIGljb249XCJwaSBwaS1zbGlkZXJzLWhcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X21lbnVcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSBob3ZlcjpzaGFkb3ctNiB7eyBzaG93U2VhcmNoRmllbGQgPyAncC1idXR0b24tc2Vjb25kYXJ5JyA6ICdwLWJ1dHRvbi1zdWNjZXNzJyB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5U2VhcmNoRmllbGRzKClcIj5cclxuICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJbXBvcnRGcm9tT3V0bG9va0J1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImltcG9ydEZyb21PdXRsb29rX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLWVudmVsb3BlXCIgXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X2ltcG9ydF9mcm9tX291dGxvb2tcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbXBvcnRDbGlja2VkKClcIj4gXHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInRvZ2dsZV9hY3Rpb25zX3ZpZXdfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8cC1zcGxpdEJ1dHRvblxyXG4gICAgICAgICAgICBbaWNvbl09XCJjdXJyZW50SWNvblwiXHJcbiAgICAgICAgICAgIFttb2RlbF09XCJ2aWV3T3B0aW9uc1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUFjdGlvblZpZXdDbGljaygpXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24taWNvbi1vbmx5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tcHJpbWFyeSBoLTJyZW0gaG92ZXI6c2hhZG93LTZcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDwhLS0gPFRzaS1CdXR0b25cclxuICAgICAgICAgICAgW2ljb25dPVwiY3VycmVudEljb25cIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXByaW1hcnkgIGgtMnJlbSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uVmlld0NsaWNrKClcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgPC9Uc2ktQnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGFwcC1yZXBvcnRpbmcgKm5nSWY9XCIoZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3MpXCIgXHJcbiAgICAgICAgICBbZm9ybUVuZHBvaW50XT1cImZvcm1FbmRwb2ludFwiIFxyXG4gICAgICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCJcclxuICAgICAgICAgIFtmb3JtRW5kcG9pbnRCb2R5XT1cImZvcm1FbmRwb2ludEJvZHlcIiBcclxuICAgICAgICAgIFtpc0Zvcm1FbmRwb2ludFBhZ2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgICAgICBbcmVwb3J0RGlzY3JpbWluYXRvcl09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICAgICAgKHJlZnJlc2hEYXRhKT1cInJlZnJlc2goJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZmlsdGVyc0h0bWxUZW1wbGF0ZV09XCJmaWx0ZXJzSHRtbFRlbXBsYXRlXCJcclxuICAgICAgICAgIFtwYWdlZFJlcXVlc3RdPVwicGFnZWRSZXF1ZXN0XCJcclxuICAgICAgICAgIFtjdWRDb21wb25lbnRdPVwiY3VkQ29tcG9uZW50XCIgXHJcbiAgICAgICAgICBbY29uZmlnTW9kZUJ1dHRvbklkXT1cImNvbmZpZ01vZGVCdXR0b25JZFwiXHJcbiAgICAgICAgICBbc2hvd05vdGVCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dBY3Rpb25CdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICA+PC9hcHAtcmVwb3J0aW5nPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPGRpdj5cclxuXHJcbiAgICA8VHNpLUdlbmVyaWMtR3JpZFxyXG4gICAgICBbZm9ybU5hbWVdPVwiZm9ybU5hbWVcIlxyXG4gICAgICBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIlxyXG4gICAgICBbc2hvd1NlYXJjaEZpZWxkXT1cInNob3dTZWFyY2hGaWVsZFwiXHJcbiAgICAgIFtzZWFyY2hGaWVsZHNdPVwic2VhcmNoRmllbGRzXCJcclxuICAgICAgW2Rlc2NyaW1pbmF0b3JWYWx1ZV09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXHJcbiAgICAgIFtwYWdlXT1cInBhZ2VcIlxyXG4gICAgICBbcGFnZWRSZXF1ZXN0XT1cInBhZ2VkUmVxdWVzdFwiXHJcbiAgICAgIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXHJcbiAgICAgIFtzaG93SGVhZGVyRmlsdGVyc109XCJzaG93SGVhZGVyRmlsdGVyc1wiXHJcbiAgICAgIFsoZmlsdGVyc0h0bWxUZW1wbGF0ZSldPVwiZmlsdGVyc0h0bWxUZW1wbGF0ZVwiXHJcbiAgICAgIFtwcmVzZW50YXRpb25TZXR0aW5nc109XCJwcmVzZW50YXRpb25TZXR0aW5nc1wiXHJcbiAgICAgIChsb2FkKT1cImxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWxlY3RLZXlPbmx5XT1cInNlbGVjdEtleU9ubHlcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgW2tleV09XCJrZXlcIlxyXG4gICAgICBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgICAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJvblNlbGVjdGVkSXRlbXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQpPVwic2VhcmNoRmllbGRWYWx1ZUNoYW5nZXMoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWFyY2hPbkluaXRdPVwic2VhcmNoT25Jbml0XCJcclxuICAgICAgW3Nob3dFeHBvcnRCdXR0b25dPVwic2hvd0V4cG9ydEJ1dHRvblwiXHJcbiAgICAgIFtzaG93R2xvYmFsU2VhcmNoXT1cInNob3dHbG9iYWxTZWFyY2hcIlxyXG4gICAgICBbaXNTZWFyY2hCdXR0b25EaXNhYmxlZF09XCJpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXCJcclxuICAgICAgW3Nob3dDYWxlbmRlclZpZXddPVwic2hvd0NhbGVuZGVyVmlld1wiXHJcbiAgICAgIFtzaG93Q2FyZFZpZXddPVwic2hvd0NhcmRWaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3XT1cInNob3dLYW5iYW5WaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXRdPVwic2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdFwiXHJcbiAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICBbY3VkQ29tcG9uZW50XT1cImN1ZENvbXBvbmVudFwiIFxyXG4gICAgICBbbW9kYWxTaXplXT1cIm1vZGFsU2l6ZVwiIFxyXG4gICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICBbcGFnZSRdPVwicGFnZSRcIlxyXG4gICAgICBbZW50aXR5SW5mb109XCJlbnRpdHlJbmZvXCJcclxuICAgICAgKGNhbGVuZGFyRXZlbnRDbGljayk9XCJoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgIChzdGF0dXNGaWx0ZXJDaGFuZ2VkKT1cIm9uU3RhdHVzRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgW3Nob3dOb3RlQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0FjdGlvbkJ1dHRvbl09XCJ0cnVlXCJcclxuICAgID48L1RzaS1HZW5lcmljLUdyaWQ+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbjwvZGl2PlxyXG4iXX0=
|