@tsi-developpement/tsi-shared-ui 1.9.11 → 1.9.13

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.
@@ -679,6 +679,7 @@ export class TsiGenericCrudComponent {
679
679
  items: value.items,
680
680
  totalCount: value.totalCount,
681
681
  summaries: value.summaries ? value.summaries : [],
682
+ groups: value.groups,
682
683
  totalPages: (this.page.totalCount - (this.page.totalCount % this.page.pageSize)) / this.page.pageSize + 1,
683
684
  };
684
685
  if (this.showNoteButton) {
@@ -739,12 +740,19 @@ export class TsiGenericCrudComponent {
739
740
  this._handleActionWithAlertCheck(Component_Modes.DUPLICATE, itemKey);
740
741
  }
741
742
  async getEntityInfo() {
742
- if (this.businessClass) {
743
+ if (!this.businessClass) {
744
+ return;
745
+ }
746
+ try {
743
747
  this.entityInfo = await this._entityConfigService.getEntityInfoFromCache(this.businessClass);
744
748
  if (!this.entityInfo) {
745
749
  console.warn(`No entity info found for ${this.businessClass}`);
746
750
  }
747
751
  }
752
+ catch (error) {
753
+ console.error(error);
754
+ return;
755
+ }
748
756
  }
749
757
  async _openModal(mode, itemKey, data) {
750
758
  this.crudService.isDuplicate = mode === Modes.duplicate;
@@ -798,6 +806,7 @@ export class TsiGenericCrudComponent {
798
806
  filters: request.filters,
799
807
  getAllData: request.getAllData,
800
808
  summaries: request.summaries,
809
+ groupBy: request.groupBy,
801
810
  };
802
811
  return clone;
803
812
  }
@@ -843,6 +852,7 @@ export class TsiGenericCrudComponent {
843
852
  this.showCardView = false;
844
853
  this.showCalenderView = false;
845
854
  this.showKanbanView = false;
855
+ this._clearGroupBy();
846
856
  this._loadDS();
847
857
  this.currentIcon = "pi pi-align-justify";
848
858
  this.currentTooltip = "shared_tsi_component_grid_list_view";
@@ -851,6 +861,7 @@ export class TsiGenericCrudComponent {
851
861
  this.showCalenderView = !this.showCalenderView;
852
862
  this.showCardView = false;
853
863
  this.showKanbanView = false;
864
+ this._clearGroupBy();
854
865
  this._loadDS(this.showCalenderView);
855
866
  this.currentIcon = "pi pi-calendar";
856
867
  this.currentTooltip = "shared_tsi_component_grid_calender_view";
@@ -859,18 +870,33 @@ export class TsiGenericCrudComponent {
859
870
  this.showCardView = !this.showCardView;
860
871
  this.showCalenderView = false;
861
872
  this.showKanbanView = false;
873
+ this._clearGroupBy();
862
874
  // this._loadDS(this.showCardView);
863
875
  this.currentIcon = "pi pi-id-card";
864
876
  this.currentTooltip = "shared_tsi_component_grid_card_view";
865
877
  }
866
- toggleKanbanView() {
878
+ async toggleKanbanView() {
867
879
  this.showKanbanView = !this.showKanbanView;
868
880
  this.showCardView = false;
869
881
  this.showCalenderView = false;
882
+ if (this.showKanbanView) {
883
+ // Group server-side by the entity's status column so each Kanban column
884
+ // gets its own page and its own accurate (unpaged) total count.
885
+ await this.getEntityInfo();
886
+ this.groupBy = this.entityInfo?.statusColumnName;
887
+ }
888
+ else {
889
+ this.groupBy = undefined;
890
+ }
891
+ this.pagedRequest = { ...this.pagedRequest, groupBy: this.groupBy };
870
892
  this._loadDS();
871
893
  this.currentIcon = "pi pi-th-large";
872
894
  this.currentTooltip = "shared_tsi_component_grid_kanban_view";
873
895
  }
896
+ _clearGroupBy() {
897
+ this.groupBy = undefined;
898
+ this.pagedRequest = { ...this.pagedRequest, groupBy: undefined };
899
+ }
874
900
  //#endregion
875
901
  handleKeyDown(event) {
876
902
  if (event.key === 'F4') {
@@ -965,11 +991,11 @@ export class TsiGenericCrudComponent {
965
991
  return null;
966
992
  }
967
993
  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 }); }
968
- 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", sizingMode: "sizingMode", 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 [sizingMode]=\"sizingMode\"\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", "sizingMode", "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]:not(tsi-tab-panel)", inputs: ["presentationDesigner", "presentationDesignerBase"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }] }); }
994
+ 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", sizingMode: "sizingMode", 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 [groupBy]=\"groupBy\"\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 [sizingMode]=\"sizingMode\"\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", "sizingMode", "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", "groupBy", "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]:not(tsi-tab-panel)", inputs: ["presentationDesigner", "presentationDesignerBase"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }] }); }
969
995
  }
970
996
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericCrudComponent, decorators: [{
971
997
  type: Component,
972
- 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 [sizingMode]=\"sizingMode\"\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"] }]
998
+ 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 [groupBy]=\"groupBy\"\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 [sizingMode]=\"sizingMode\"\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"] }]
973
999
  }], 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: [{
974
1000
  type: Input
975
1001
  }], genericGridComponent: [{
@@ -1075,4 +1101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1075
1101
  type: HostListener,
1076
1102
  args: ['window:keydown', ['$event']]
1077
1103
  }] } });
1078
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSw2QkFBNkIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4SSxPQUFPLEVBQUUscUNBQXFDLEVBQW9ELE1BQU0sY0FBYyxDQUFDO0FBZXZILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzNHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVF2RyxNQUFNLE9BQU8sdUJBQXVCO0lBc0NsQyxZQUFZO0lBRVosZ0JBQWdCO0lBQ2hCLElBQWEsU0FBUyxDQUFDLEtBQVU7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQVdELElBQWEsWUFBWSxDQUFDLEtBQXlCO1FBQ2pELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsS0FBSyxjQUFjLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUlELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBeUI7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsOEJBQThCO0lBQ2hDLENBQUM7SUFHRCxJQUFvQixzQkFBc0IsQ0FBQyxLQUFjO1FBQ3ZELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFpQ0QsSUFBYSxhQUFhO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBeUI7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFhLFlBQVksQ0FBQyxLQUFjO1FBQ3RDLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBd0JELFlBQ1UsZUFBdUMsRUFDdkMsVUFBMEIsRUFDMUIsZ0JBQWlDLEVBQ2pDLE1BQXlCLEVBQ3pCLFFBQXNCLEVBQ3RCLGlCQUFvQyxFQUNwQyxjQUFvQyxFQUNwQyxzQkFBOEMsRUFDOUMsNkJBQTJELEVBQzNELG9CQUFnRCxFQUNoRCxZQUF5QixFQUN6QixTQUE4QixFQUM5QixxQkFBMkM7UUFaM0Msb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGtDQUE2QixHQUE3Qiw2QkFBNkIsQ0FBOEI7UUFDM0QseUJBQW9CLEdBQXBCLG9CQUFvQixDQUE0QjtRQUNoRCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUM5QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBeks3QyxrQkFBYSxHQUF1QixTQUFTLENBQUM7UUFDNUMsZUFBVSxHQUFHLGNBQWMsQ0FBQztRQUM1QixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUNoQyw4QkFBeUIsR0FBWSxLQUFLLENBQUE7UUFDbEQsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUNsQyx1QkFBa0IsR0FBVyw2QkFBNkIsQ0FBQTtRQUMxRCxrQ0FBNkIsR0FBRyw2Q0FBNkMsQ0FBQztRQUNyRSxlQUFVLEdBQTJCLFNBQVMsQ0FBQTtRQUl2RCxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFFakMsU0FBSSxHQUFlO1lBQ2pCLEtBQUssRUFBRSxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUVGLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVULHdCQUFtQixHQUFZLEVBQUUsQ0FBQztRQUNsQyxvQkFBZSxHQUFpQixFQUFFLENBQUM7UUFDbkMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFhckIsWUFBTyxHQUFpQixFQUFFLENBQUM7UUFJM0IsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUlwQixvQkFBZSxHQUFhLEtBQUssQ0FBQTtRQXNCbEMsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBU2pELDhCQUE4QjtRQUNyQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ2pDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLHdCQUFtQixHQUFZLElBQUksQ0FBQztRQUNwQyxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZ0NBQTJCLEdBQVksS0FBSyxDQUFDO1FBQzdDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGlDQUE0QixHQUFZLEtBQUssQ0FBQztRQUM5QyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUdoQyxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsZUFBVSxHQUFtQixjQUFjLENBQUMsSUFBSSxDQUFDO1FBRTFELGdCQUFnQjtRQUNQLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGtCQUFhLEdBQXNCLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUMxRCxrQkFBYSxHQUFlLEVBQUUsQ0FBQztRQUMvQixRQUFHLEdBQVcsS0FBSyxDQUFDO1FBMkJwQixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ2pDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRXZDLFlBQVk7UUFFWixpQkFBaUI7UUFDUCx3QkFBbUIsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUMvRSw2QkFBd0IsR0FBcUMsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDcEcsd0JBQW1CLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO1FBQzdGLCtCQUEwQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2xGLG9CQUFvQjtRQUNwQiwyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFDeEMsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGdCQUFXLEdBQUcscUJBQXFCLENBQUM7UUFDcEMsbUJBQWMsR0FBRyxxQ0FBcUMsQ0FBQztRQUV2RCxnQkFBVyxHQUFlLEVBQUUsQ0FBQztRQUU3QixVQUFLLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFnQm5DLENBQUM7SUFFTCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQscUJBQXFCO0lBRXJCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxZQUFZLENBQUMsYUFBcUI7UUFDaEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsYUFBcUI7UUFDeEMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO0lBRWIsOENBQThDO0lBQzlDLElBQUk7SUFFSixrQ0FBa0M7SUFDbEMsaUNBQWlDO0lBQ2pDLElBQUk7SUFFSixLQUFLLENBQUMsMENBQTBDO1FBQzlDLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUE7WUFDckMsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxDQUFDLDZCQUE2QixDQUFDLDhCQUE4QixHQUFHLE1BQU0sQ0FBQTtZQUM1RSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxhQUFxQixFQUFFLFNBQWtCO1FBQzFFLElBQUksTUFBTSxHQUFvRCxTQUFTLENBQUE7UUFDdkUsSUFBSSxDQUFDO1lBQ0gsSUFBSSxPQUFPLEdBQTBDLElBQUkscUNBQXFDLEVBQUUsQ0FBQztZQUNqRyxPQUFPLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQTtZQUNqQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUM3QixPQUFPLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQTtZQUN4RSxPQUFPLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQTtZQUM5RSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFBO1lBQ3BELE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsMkNBQTJDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUN0SCxnQkFBZ0I7WUFDaEIsNkZBQTZGO1lBQzdGLGlEQUFpRDtZQUNqRCw0QkFBNEI7WUFDNUIsa0ZBQWtGO1lBQ2xGLDRIQUE0SDtZQUM1SCxNQUFNO1lBQ04sSUFBSTtRQUNOLENBQUM7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN0QixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQsdUJBQXVCLENBQUMsb0JBQXdDO1FBQzlELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsUUFBUTtRQUVOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsc0NBQXNDLEVBQUUsQ0FBQztRQUU5QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFvQixDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0RCxNQUFNLElBQUksS0FBSyxDQUNiLDBFQUEwRSxDQUMzRSxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckI7b0JBQ0UsTUFBTSxFQUFFLHFCQUFxQjtvQkFDN0IsS0FBSyxFQUFFLE1BQU07b0JBQ2IsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLFlBQVk7b0JBQ3hCLFVBQVUsRUFBRSw4QkFBOEI7b0JBQzFDLFFBQVEsRUFBRSxJQUFJO29CQUNkLEtBQUssRUFBRSxDQUFDO29CQUNSLFdBQVcsRUFBRSxxQkFBcUI7b0JBQ2xDLFlBQVksRUFBRSxJQUFJO29CQUNsQixhQUFhLEVBQUUsZUFBZSxDQUFDLFFBQVE7aUJBQ3hDO2dCQUNELEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQjtvQkFDRSxNQUFNLEVBQUUseUJBQXlCO29CQUNqQyxLQUFLLEVBQUUsVUFBVTtvQkFDakIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLGdCQUFnQjtvQkFDNUIsVUFBVSxFQUFFLDhCQUE4QjtvQkFDMUMsUUFBUSxFQUFFLElBQUk7b0JBQ2QsS0FBSyxFQUFFLENBQUM7b0JBQ1IsV0FBVyxFQUFFLGFBQWE7b0JBQzFCLFlBQVksRUFBRSxJQUFJO29CQUNsQixhQUFhLEVBQUUsZUFBZSxDQUFDLFFBQVE7aUJBQ3hDO2dCQUNELEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQjtvQkFDRSxNQUFNLEVBQUUsMkJBQTJCO29CQUNuQyxLQUFLLEVBQUUsUUFBUTtvQkFDZixRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsaUJBQWlCO29CQUM3QixVQUFVLEVBQUUsOEJBQThCO29CQUMxQyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsQ0FBQztvQkFDUixXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxZQUFZLEVBQUUsSUFBSTtvQkFDbEIsYUFBYSxFQUFFLGVBQWUsQ0FBQyxRQUFRO2lCQUN4QztnQkFDRCxHQUFHLElBQUksQ0FBQyxlQUFlO2FBQ3hCLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckI7b0JBQ0UsTUFBTSxFQUFFLHNCQUFzQjtvQkFDOUIsV0FBVyxFQUFFLEVBQUU7b0JBQ2YsS0FBSyxFQUFFLE9BQU87b0JBQ2QsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLFVBQVUsRUFBRSw4QkFBOEI7b0JBQzFDLFFBQVEsRUFBRSxJQUFJO29CQUNkLEtBQUssRUFBRSxDQUFDO29CQUNSLFdBQVcsRUFBRSxzQkFBc0I7b0JBQ25DLFlBQVksRUFBRSxJQUFJO29CQUNsQixhQUFhLEVBQUUsZUFBZSxDQUFDLFFBQVE7aUJBQ3hDO2dCQUNELEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCO29CQUNFLE1BQU0sRUFBRSx1QkFBdUI7b0JBQy9CLFdBQVcsRUFBRSxFQUFFO29CQUNmLEtBQUssRUFBRSxXQUFXO29CQUNsQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsWUFBWTtvQkFDeEIsVUFBVSxFQUFFLDhCQUE4QjtvQkFDMUMsUUFBUSxFQUFFLElBQUk7b0JBQ2QsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsV0FBVyxFQUFFLHVCQUF1QjtvQkFDcEMsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLGFBQWEsRUFBRSxlQUFlLENBQUMsUUFBUTtpQkFDeEM7Z0JBQ0QsR0FBRyxJQUFJLENBQUMsZUFBZTthQUN4QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCO29CQUNFLE1BQU0sRUFBRSxxQkFBcUI7b0JBQzdCLEtBQUssRUFBRSxNQUFNO29CQUNiLFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxZQUFZO29CQUN4QixVQUFVLEVBQUUsOEJBQThCO29CQUMxQyxjQUFjLEVBQUUsaUJBQWlCO29CQUNqQyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsQ0FBQztvQkFDUixXQUFXLEVBQUUscUJBQXFCO29CQUNsQyxZQUFZLEVBQUUsSUFBSTtvQkFDbEIsYUFBYSxFQUFFLGVBQWUsQ0FBQyxRQUFRO2lCQUN4QztnQkFDRCxHQUFHLElBQUksQ0FBQyxlQUFlO2FBQ3hCLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckI7b0JBQ0UsTUFBTSxFQUFFLHVCQUF1QjtvQkFDL0IsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLFVBQVUsRUFBRSw4Q0FBOEM7b0JBQzFELGNBQWMsRUFBRSxjQUFjO29CQUM5QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsQ0FBQztvQkFDUixXQUFXLEVBQUUsUUFBUTtvQkFDckIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxNQUFNO29CQUM3QixZQUFZLEVBQUUsSUFBSTtvQkFDbEIsYUFBYSxFQUFFLGVBQWUsQ0FBQyxRQUFRO2lCQUN4QztnQkFDRCxHQUFHLElBQUksQ0FBQyxlQUFlO2FBQ3hCLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCO29CQUNFLE1BQU0sRUFBRSxxQkFBcUI7b0JBQzdCLEtBQUssRUFBRSxNQUFNO29CQUNiLFFBQVEsRUFBRSxJQUFJO29CQUNkLFVBQVUsRUFBRSxjQUFjO29CQUMxQixVQUFVLEVBQUUsOEJBQThCO29CQUMxQyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsQ0FBQztvQkFDUixXQUFXLEVBQUUscUJBQXFCO29CQUNsQyxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU07b0JBQzdCLFlBQVksRUFBRSxJQUFJO29CQUNsQixhQUFhLEVBQUUsZUFBZSxDQUFDLE1BQU07aUJBQ3RDO2dCQUNELEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQjtvQkFDRSxNQUFNLEVBQUUsd0JBQXdCO29CQUNoQyxLQUFLLEVBQUUsU0FBUztvQkFDaEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLFdBQVc7b0JBQ3ZCLFVBQVUsRUFBRSw4QkFBOEI7b0JBQzFDLGNBQWMsRUFBRSxlQUFlO29CQUMvQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsQ0FBQztvQkFDUixXQUFXLEVBQUUsV0FBVztvQkFDeEIsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLGFBQWEsRUFBRSxlQUFlLENBQUMsUUFBUTtpQkFDeEM7Z0JBQ0QsR0FBRyxJQUFJLENBQUMsZUFBZTthQUN4QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCO29CQUNFLE1BQU0sRUFBRSwwQkFBMEI7b0JBQ2xDLEtBQUssRUFBRSxXQUFXO29CQUNsQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsYUFBYTtvQkFDekIsVUFBVSxFQUFFLDhCQUE4QjtvQkFDMUMsY0FBYyxFQUFFLGlCQUFpQjtvQkFDakMsUUFBUSxFQUFFLElBQUk7b0JBQ2QsS0FBSyxFQUFFLENBQUM7b0JBQ1IsV0FBVyxFQUFFLFdBQVc7b0JBQ3hCLFlBQVksRUFBRSxJQUFJO29CQUNsQixhQUFhLEVBQUUsZUFBZSxDQUFDLFFBQVE7aUJBQ3hDO2dCQUNELEdBQUcsSUFBSSxDQUFDLGVBQWU7YUFDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLGVBQWU7aUJBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO2lCQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBTSxHQUFHLENBQUMsQ0FBQyxLQUFNLENBQUM7WUFDdEMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO1NBQy9ELENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FDdEIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNYLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQ25CLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxxQ0FBcUMsQ0FBQztnQkFDckUsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7YUFDckM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMseUNBQXlDLENBQUM7Z0JBQ3pFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7YUFDekM7WUFDRDtnQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMscUNBQXFDLENBQUM7Z0JBQ3JFLElBQUksRUFBRSxlQUFlO2dCQUNyQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTthQUNyQztZQUNEO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyx1Q0FBdUMsQ0FBQztnQkFDdkUsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTthQUN2QztTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUdEOzs7Ozs7Ozs7Ozs7UUFZSTtJQUVKLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJO1lBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNwRSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILDJCQUEyQjtJQUMzQix3QkFBd0I7SUFDeEIsd0NBQXdDO0lBRXhDLE9BQU87UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQzVCLEdBQUcsRUFBRSxTQUFTO1lBQ2QsS0FBSyxFQUFFLEtBQUs7WUFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUF3QjtRQUV0RCxJQUFJLE9BQU8sR0FBUSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6RSxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFOUIsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRztnQkFDWCxJQUFJLEVBQUUsRUFBRTtnQkFDUixVQUFVLEVBQUUsRUFBRTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxLQUFLO2dCQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxNQUFNO2dCQUM5QixXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFBO1lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBRTNELEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUVsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFaEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBRXJDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FDNUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFrQixDQUFDLENBQUM7WUFDdkQsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQ0YsQ0FBQztRQUVKLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFFakMsSUFBSSxDQUFDLHNCQUFzQjtpQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFjLEVBQUUsT0FBTyxDQUFDO2lCQUNyQyxTQUFTLENBQ1IsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDUCxJQUFJLFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUN6QyxJQUFJLElBQUksR0FDTixTQUFTO29CQUNULE9BQU87b0JBQ1Asb0JBQW9CO29CQUNwQixJQUFJLENBQUMsWUFBWTtvQkFDakIsb0JBQW9CO29CQUNwQixJQUFJLENBQUMsU0FBUztvQkFDZCxtQkFBbUI7b0JBQ25CLElBQUksQ0FBQyxVQUFVO29CQUNmLG9CQUFvQjtvQkFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFFakIsSUFBSSxJQUFJLEdBQXdCO29CQUM5QixJQUFJLEVBQUU7d0JBQ0osR0FBRyxFQUFFLE9BQU87d0JBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO3dCQUNqQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7d0JBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzt3QkFDekIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO3dCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7cUJBQzFCO29CQUNELFdBQVcsRUFBRSxJQUFJO29CQUNqQixLQUFLLEVBQUUsT0FBTztvQkFDZCxNQUFNLEVBQUUsT0FBTztpQkFDaEIsQ0FBQztnQkFFRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzFDLDJCQUEyQixFQUMzQixJQUFJLENBQ0wsQ0FBQztnQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFTLEVBQUUsRUFBRSxDQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUN0QixDQUFDO1lBQ0osQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQ0YsQ0FBQztRQUNOLENBQUM7YUFDSSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxFQUFDLENBQUM7WUFDOUIsSUFBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQ3RCLENBQUM7Z0JBQ0MsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLHNCQUFzQixHQUFRLElBQUksQ0FBQztZQUV2QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFDM0IsQ0FBQztnQkFDQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDbkQsQ0FBQztZQUVELElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsQ0FBQztnQkFDQyxJQUFJLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3JGLHNCQUFzQixHQUFHLHFCQUFxQixFQUFFLGFBQWEsQ0FBQztZQUNoRSxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLElBQUksRUFBRTtvQkFDSixtQkFBbUIsRUFBRTt3QkFDbkIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO3dCQUNqQyxrQkFBa0IsRUFBRSxzQkFBc0I7cUJBQzNDO2lCQUNGO2dCQUNELFVBQVUsRUFBRSxFQUFFO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLEtBQUs7Z0JBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLE1BQU07Z0JBQzlCLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQUE7WUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7WUFFNUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO2FBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBRXJDLElBQUksY0FBYyxHQUFtQjtnQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksRUFBRTtnQkFDdkMsU0FBUyxFQUFFLE9BQU87YUFDbkIsQ0FBQztZQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUVyRixHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztnQkFDNUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ2xDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFVBQWUsRUFBRSxRQUFnQjtRQUN4QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRVYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUF5RDtRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQVU7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHlCQUF5QjtJQUNqQixvQkFBb0I7UUFDMUIsSUFBSSxFQUFFLEdBQVEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxXQUFXO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUc7WUFDVixLQUFLLEVBQUUsRUFBRTtZQUNULFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLENBQUM7WUFDYixVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1lBQ2IsU0FBUyxFQUFFLEVBQUU7WUFDYixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2xCLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFNBQVMsRUFBRSxDQUFDO1lBQ1osT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVPLE9BQU8sQ0FBQyxnQkFBeUIsS0FBSztRQUU1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsR0FBRyxJQUFJLENBQUMsWUFBWTtZQUNwQixVQUFVLEVBQUUsYUFBYTtTQUMxQixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBRTlELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3hELElBQUksRUFBRSxDQUFDLEtBQTBCLEVBQUUsRUFBRTtvQkFDbkMsSUFBSSxLQUFLLEVBQUUsQ0FBQzt3QkFDVixJQUFJLENBQUMsSUFBSSxHQUFHOzRCQUNWLEdBQUcsSUFBSSxDQUFDLElBQUk7NEJBQ1osS0FBSyxFQUFHLEtBQUssQ0FBQyxLQUFLOzRCQUNuQixVQUFVLEVBQUcsS0FBSyxDQUFDLFVBQVU7NEJBQzdCLFNBQVMsRUFBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUNsRCxVQUFVLEVBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDO3lCQUM1RyxDQUFDO3dCQUVGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3pCLENBQUM7d0JBRUQsSUFBRyxJQUFJLENBQUMsc0JBQXNCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDMUcsQ0FBQzs0QkFDQyxpQ0FBaUM7NEJBQ2pDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0NBQ3JDLElBQUksZ0JBQWdCLEdBQWU7b0NBQ2pDLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVTtvQ0FDdEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVO29DQUNyQixlQUFlLEVBQUUsR0FBRyxDQUFDLElBQUk7b0NBQ3pCLGNBQWMsRUFBRSxJQUFJO2lDQUNyQixDQUFBO2dDQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7NEJBQzdDLENBQUMsQ0FBQyxDQUFBOzRCQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7d0JBQ3JDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQXdCLEVBQUUsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzVCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7YUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWTthQUNkLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO2FBQzVDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUVsQixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckMsQ0FBQztZQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsSUFBWSxDQUFDLFVBQVUsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sUUFBUSxDQUFDLE9BQVk7UUFDM0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLFVBQVUsQ0FBQyxPQUFZO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTyxXQUFXLENBQUMsT0FBWTtRQUM5QixJQUFJLENBQUMsMkJBQTJCLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ08sYUFBYSxDQUFDLE9BQVk7UUFDaEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWSxFQUFFLE9BQVksRUFBRSxJQUFTO1FBQzVELElBQUksQ0FBQyxXQUFZLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3pELElBQUkseUJBQXlCLEdBQW9ELFNBQVMsQ0FBQTtRQUUxRixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7Z0JBQzVGLHlCQUF5QixHQUFHLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkcsQ0FBQztZQUNELE9BQU8sS0FBSyxFQUFDLENBQUM7Z0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBeUIsQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFLENBQUM7WUFDMUQsSUFBSSxHQUFHO2dCQUNMLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNoSSxVQUFVLEVBQUUsRUFBRTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dCQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO2dCQUM3QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsU0FBUyxFQUFFO29CQUNULE1BQU0sRUFBRSwyQkFBMkI7aUJBQ3BDO2FBQ0YsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHO2dCQUNMLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFO2dCQUNuRyxXQUFXLEVBQUUsSUFBSTthQUNsQixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFVO1FBQzVCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUFzQjtRQUMvQyxJQUFJLEtBQUssR0FBa0I7WUFDekIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO1lBQ3RDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1NBQzdCLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBUztRQUNmLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWixtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQix3QkFBd0IsQ0FBQyxJQUFTO1FBQ2hDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xCLEtBQUssZUFBZSxDQUFDLE9BQU87Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxlQUFlLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxFQUFDLElBQUksRUFBQyxDQUFFLENBQUM7Z0JBQ3RELE1BQU07WUFDUixLQUFLLGVBQWUsQ0FBQyxJQUFJO2dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRixNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3pGLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RixNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzFGLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLHFCQUFxQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcscUNBQXFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcseUNBQXlDLENBQUM7SUFDbEUsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxxQ0FBcUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztRQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLHVDQUF1QyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxZQUFZO0lBR1osYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBR0QscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixNQUFNO1lBRVIsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixNQUFNO1lBRVIsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTtZQUVSLEtBQUssQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLE1BQU07WUFFUjtnQkFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDcEIsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBR08sMkJBQTJCLENBQUMsSUFBcUIsRUFBRSxPQUFZO1FBQ3JFLDJCQUEyQjtRQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDakYsSUFBSSxFQUFFLENBQUMsUUFBc0MsRUFBRSxFQUFFO29CQUMvQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2xELENBQUM7eUJBQ0ksQ0FBQzt3QkFDSixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFOzRCQUMvRCxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFOzRCQUNoQyxVQUFVLEVBQUUsRUFBRTs0QkFDZCxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLOzRCQUNoQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNOzRCQUNsQyxXQUFXLEVBQUUsSUFBSTt5QkFDbEIsQ0FBQyxDQUFDO3dCQUVILEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUyxFQUFFLEVBQUU7NEJBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2xELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBUTtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQztZQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxzQ0FBc0M7UUFFcEMsSUFBRyxJQUFJLENBQUMsYUFBYSxFQUNyQixDQUFDO1lBQ0MsSUFBSSxDQUFDLDZCQUE2QixDQUFDLDBDQUEwQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNuSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDWCxJQUFHLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2xDLENBQUM7d0JBQ0QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQTtvQkFDMUMsQ0FBQztnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBcUIsRUFBRSxFQUFVO1FBQzlELElBQUksQ0FBQztZQUNILElBQUkscUJBQXFCLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBRWhILElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxxQkFBcUIsQ0FBQztZQUMvQixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTSxLQUFLLEVBQ1gsQ0FBQztZQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0FwbENVLHVCQUF1QjttR0FBdkIsdUJBQXVCLGswREFGdkIsQ0FBQyxzQkFBc0IsQ0FBQyxnRkFzQ3hCLHVCQUF1QixnREMxRnBDLDB4S0E2SEE7OzRGRHZFYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usa0JBQWtCLGFBR2pCLENBQUMsc0JBQXNCLENBQUM7OGVBYTFCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBeUI4QixvQkFBb0I7c0JBQXZELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUtyQixTQUFTO3NCQUFyQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDTyxZQUFZO3NCQUF4QixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFXYyxzQkFBc0I7c0JBQXpDLEtBQUs7Z0JBU0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUdPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBV08sWUFBWTtzQkFBeEIsS0FBSztnQkFZRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQWkxQlAsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgTW9kYWxTaXplRW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEFjdGlvblBsYWNlbWVudCB9IGZyb20gJy4uLy4uL2VudW1zL2FjdGlvbi1wbGFjZW1lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYnV0dG9uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvZ3JpZC1zZWxlY3Rpb24tbW9kZSc7XHJcbmltcG9ydCB7IEdyaWRTaXppbmdNb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvZ3JpZC1zaXppbmctbW9kZSc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgb3BlbkFjdGlvbkxpc3QsIG9wZW5EeW5hbWljRm9ybU1vZGFsQ29tcG9uZW50LCBvcGVuTW9kYWxVcGxvYWRHcmlkLCBvcGVuTm90ZXNMaXN0IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBCdXR0b25DbGlja1Jlc3VsdCwgR3JpZENvbHVtbiwgSUdyaWRDb25maWd1cmF0aW9uLCBJTW9kYWxTaXplLCBJUGFnZSwgSVBhZ2VkUmVxdWVzdCwgSVBhZ2VkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCwgU2VhcmNoRmllbGQsIHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgb2NjdXJlbmNlSW5mb3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uRXJwL2FjdGlvbkVycCc7XHJcbmltcG9ydCB7IEV2ZW50U2NoZW1hIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbW1vbi9ldmVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBFbnRpdHlJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvJztcclxuaW1wb3J0IHsgTm90ZXNHcm91cGVkQnlVc2VyUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvTm90ZXMvTm90ZSc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvblNldHRpbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJlc2VudGF0aW9uLXNldHRpbmdzL3ByZXNlbnRhdGlvbi1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IERpc2NyaW1pbmF0b3JSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9zaGFyZWQvZGlzY3JpbWluYXRvci1yZXNwb25zZSc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iYXNlL2NydWQtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlzY3JpbWluYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2Rpc2NyaW1pbmF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2ctZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmljaGllclVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXItdXBsb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvTm90ZS9Ob3RlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNvcmQtaW5mby1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93L3dvcmtmbG93LWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFR5cGVSZWdpc3RyeUhlbHBlciB9IGZyb20gJy4uLy4uL3RzaS1oZWxwZXJzL3R5cGUtcmVnaXN0cnkuaGVscGVyJztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpRm9ybU1vZGFsRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vdHNpLWZvcm0tbW9kYWwtZm9vdGVyL3RzaS1mb3JtLW1vZGFsLWZvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lOb3Rlc0F2ZXJ0aXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktbm90ZXMtYXZlcnRpci90c2ktbm90ZXMtYXZlcnRpci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lQb3B1cFRleHRWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktcG9wdXAtdGV4dC12aWV3ZXIvdHNpLXBvcHVwLXRleHQtdmlld2VyLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ1RzaS1HZW5lcmljLUNydWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbVHNpTm90aWZpY2F0aW9uU2VydmljZV0sXHJcbn0pIC8qLCBPbkNoYW5nZXMqL1xyXG5leHBvcnQgY2xhc3MgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9mb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXInO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJUb29sdGlwID0gJ3Nob3dfZmlsdGVyJztcclxuICBwcml2YXRlIF9pc1dvcmtmbG93RXRhdEZvcm1Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIGJ1dHRvblR5cGUgPSBCdXR0b25UeXBlO1xyXG4gIHRvb2x0aXBQb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbjtcclxuICBjb25maWdNb2RlQnV0dG9uSWQ6IHN0cmluZyA9IFwiY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0XCJcclxuICBzYXZlUHJvcGVydGllc0J1dHRvbkNsYXNzTmFtZSA9IFwiY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0LXNhdmUtcHJvcGVydGllc1wiO1xyXG4gIEBJbnB1dCgpIGVudGl0eUluZm86IEVudGl0eUluZm8gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuXHJcbiAgaXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgcGFnZWRSZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0ID0ge307XHJcblxyXG4gIHBhZ2U6IElQYWdlPGFueT4gPSB7XHJcbiAgICBpdGVtczogW10sXHJcbiAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgdG90YWxDb3VudDogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICBzdW1tYXJpZXM6IFtdLFxyXG4gICAgbG9hZGluZzogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgZmlyc3Q6IG51bWJlciA9IDA7XHJcbiAgcm93cyA9IDE7XHJcbiAgZm9ybUVuZHBvaW50Qm9keTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGZpbHRlcnNIdG1sVGVtcGxhdGU/OiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RlZENvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIF9zZWFyY2hPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIF9tb2RhbERhdGE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZChUc2lHZW5lcmljR3JpZENvbXBvbmVudCkgZ2VuZXJpY0dyaWRDb21wb25lbnQ/OiBUc2lHZW5lcmljR3JpZENvbXBvbmVudDtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBzZXQgbW9kYWxEYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX21vZGFsRGF0YSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgY29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgQElucHV0KCkgZ3JpZENvbmZpZ3VyYXRpb24/OiBJR3JpZENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgY3VkQ29tcG9uZW50OiBhbnk7XHJcbiAgQElucHV0KCkgY3J1ZFNlcnZpY2U/OiBDcnVkQmFzZVNlcnZpY2U8YW55LCBhbnksIGFueSwgYW55PjtcclxuICBASW5wdXQoKSBoZWFkZXI6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1vZGFsU2l6ZT86IElNb2RhbFNpemU7XHJcbiAgQElucHV0KCkgZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgcHJlc2VudGF0aW9uU2V0dGluZ3M/OiBQcmVzZW50YXRpb25TZXR0aW5nXHJcbiAgQElucHV0KCkgcHJldmVudEFkZEV2ZW50PzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQElucHV0KCkgc2V0IGZvcm1FbmRwb2ludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5fZm9ybUVuZHBvaW50ID0gYCR7dmFsdWV9L2dldGFsbHBhZ2VkYDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZvcm1FbmRwb2ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtRW5kcG9pbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtTmFtZT86IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZm9ybU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtTmFtZTtcclxuICB9XHJcblxyXG4gIHNldCBmb3JtTmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9mb3JtTmFtZSA9IHZhbHVlO1xyXG4gICAgLy8gdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHNldCBpc1NlYXJjaEJ1dHRvbkRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8vIEBJbnB1dCgpIGZvcm1OYW1lPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dIZWFkZXJGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0VkaXRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dEZWxldGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dBZGRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDb25zdWx0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1VwbG9hZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd05vdGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dEb3dubG9hZEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dJbmZvQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RHVwbGljYXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Rm9ybUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0NhbGVuZGVyVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dDYXJkVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dJbXBvcnRGcm9tT3V0bG9va0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dLYW5iYW5WaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hGaWVsZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRzOiBTZWFyY2hGaWVsZFtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGNhbGVuZGVyU2NoZW1hOiBFdmVudFNjaGVtYSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaXppbmdNb2RlOiBHcmlkU2l6aW5nTW9kZSA9IEdyaWRTaXppbmdNb2RlLkZpbGw7XHJcblxyXG4gIC8vZ3JpZCBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBzZWxlY3RLZXlPbmx5OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiBHcmlkU2VsZWN0aW9uTW9kZSA9IEdyaWRTZWxlY3Rpb25Nb2RlLk5vbmU7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3VpZCc7XHJcbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIF9idXNpbmVzc0NsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgZ2V0IGJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICB9XHJcblxyXG4gIHNldCBidXNpbmVzc0NsYXNzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2J1c2luZXNzQ2xhc3MgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRCdXNpbmVzc0NsYXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgc2VhcmNoT25Jbml0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaE9uSW5pdCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2VhcmNoT25Jbml0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaE9uSW5pdDtcclxuICB9XHJcblxyXG5cclxuICBASW5wdXQoKSBzaG93R2xvYmFsU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93UmVwb3J0aW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4oKTtcclxuICBAT3V0cHV0KCkgc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIEBPdXRwdXQoKSBidXR0b25Db2x1bW5DbGlja2VkOiBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4oKTtcclxuICBAT3V0cHV0KCkgb25JbXBvcnRGcm9tT3V0bG9va0NsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLy8jZW5kcmVnaW9uIE91dHB1dHNcclxuICBpc0N1c3RvbUNvbHVtblJlbmRlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xpY2tDb3VudCA9IDE7XHJcbiAgY3VycmVudEljb24gPSBcInBpIHBpLWFsaWduLWp1c3RpZnlcIjtcclxuICBjdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXdcIjtcclxuXHJcbiAgdmlld09wdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgcGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1zZ1NlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGxvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcml2YXRlIGRpYWxvZ0RhdGFTZXJ2aWNlOiBEaWFsb2dEYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgZmljaGllclNlcnZpY2U6IEZpY2hpZXJVcGxvYWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWNvcmRJbmZvUG9wdXBTZXJ2aWNlOiBSZWNvcmRJbmZvUG9wdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZTogV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VudGl0eUNvbmZpZ1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3Rlc1NlcnZpY2U6IE5vdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9kaXNjcmltaW5hdG9yU2VydmljZTogRGlzY3JpbWluYXRvclNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBncmlkIHN0YXRlXHJcblxyXG4gIGdldFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQuZ2V0U3RhdGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXN0b3JlU3RhdGUoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LnJlc3RvcmVTdGF0ZShjb25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0U2VsZWN0ZWRDb2x1bW5zKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5yZXNldFNlbGVjdGVkQ29sdW1ucyhjb25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgLy8gbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIC8vIH1cclxuXHJcbiAgYXN5bmMgZ2V0V29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRCdXNpbmVzc0NsYXNzKCkge1xyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiAhdGhpcy5faXNXb3JrZmxvd0V0YXRGb3JtTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuX2lzV29ya2Zsb3dFdGF0Rm9ybUxvYWRlZCA9IHRydWVcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdvcmtmbG93RXRhdEZvcm1CeUNsYXNzTmFtZSh0aGlzLmJ1c2luZXNzQ2xhc3MpKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50Rm9ybSA9IHJlc3VsdFxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHdvcmtmbG93IHN0YXRlIGZvcm06JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgdWlkT2JqZWN0Pzogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzdWx0OiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHJlcXVlc3Q6IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QgPSBuZXcgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCgpO1xyXG4gICAgICByZXF1ZXN0LmNsYXNzTmFtZSA9IGJ1c2luZXNzQ2xhc3NcclxuICAgICAgcmVxdWVzdC51aWRPYmpldCA9IHVpZE9iamVjdDtcclxuICAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZVxyXG4gICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0Q3VycmVudEVudGl0eVdvcmtsZm93SW5zdGFuY2VJbmZvcm1hdGlvbihyZXF1ZXN0KSlcclxuICAgICAgLy8gaWYgKHJlc3VsdCkge1xyXG4gICAgICAvLyAgIGxldCB3b3JrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEZvcm1cclxuICAgICAgLy8gICAgID8uZmluZCh4ID0+IHgudWlkID09IHJlc3VsdD8ud29ya2Zsb3dFdGF0KVxyXG4gICAgICAvLyAgIGlmICh3b3JrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgIC8vICAgICAvLyB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvckZvckN1cnJlbnRFbnRpdHlGb3JtID1cclxuICAgICAgLy8gICAgIC8vICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5tYXBXb3JrZmxvd0V0YXRGb3JtVG9QcmVzZW50YXRpb25TZXR0aW5nKHdvcmtmbG93RXRhdEZvcm0ud29ya2Zsb3dFdGF0c0Zvcm1zKVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG5cclxuICBzZWFyY2hGaWVsZFZhbHVlQ2hhbmdlcyhuZXdTZWFyY2hGaWVsZFZhbHVlczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZC5lbWl0KG5ld1NlYXJjaEZpZWxkVmFsdWVzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuZ2V0RW50aXR5SW5mbygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXNlU2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9ICdoaWRlX2ZpbHRlcic7XHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9ICdwaSBwaS1maWx0ZXItc2xhc2gnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gJ3Nob3dfZmlsdGVyJztcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gJ3BpIHBpLWZpbHRlcic7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1ucyA9PSBudWxsICYmIHRoaXMuY29sdW1ucyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdjb2x1bW5zIGNhbnQgYmUgbnVsbCBvciB1bmRlZmluZWQsIGRldmVsb3BwZXIgbXVzdCBzZXQgY29sdW1ucyBvZiBncmlkICEnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zXTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SW5mb0J1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2luZm8nLFxyXG4gICAgICAgICAgZmllbGQ6ICdpbmZvJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWluZm8nLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogMyxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfaW5mbycsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RG93bmxvYWRCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19kb3dubG9hZCcsXHJcbiAgICAgICAgICBmaWVsZDogJ2Rvd25sb2FkJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWRvd25sb2FkJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDIsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ1TDqWzDqWNoYXJnZXInLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1VwbG9hZEJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2F0dGFjaG1lbnQnLFxyXG4gICAgICAgICAgZmllbGQ6ICd1cGxvYWQnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktcGFwZXJjbGlwJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDQsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2F0dGFjaG1lbnQnLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd05vdGVCdXR0b24pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfbm90ZXMnLFxyXG4gICAgICAgICAgYnV0dG9uTGFiZWw6ICcnLFxyXG4gICAgICAgICAgZmllbGQ6ICdub3RlcycsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1jb21tZW50JyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDUsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX25vdGVzJyxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dBY3Rpb25CdXR0b24pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfYWN0aW9uJyxcclxuICAgICAgICAgIGJ1dHRvbkxhYmVsOiAnJyxcclxuICAgICAgICAgIGZpZWxkOiAnQWN0aW9uRVJQJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvbHQnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogMTAsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2FjdGlvbicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93Rm9ybUJ1dHRvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19mb3JtJyxcclxuICAgICAgICAgIGZpZWxkOiAnZm9ybScsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1ib29rJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGljb25TdHlsZUNsYXNzOiAndGV4dC1pbmRpZ28tNTAwJyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDgsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9hY3Rpb25zX2Zvcm0nLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0RlbGV0ZUJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2RlbGV0ZScsXHJcbiAgICAgICAgICBmaWVsZDogJ2RlbGV0ZScsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS10cmFzaCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LXJlZC01MDAnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogMSxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICAgIGJ1dHRvblR5cGU6IEJ1dHRvblR5cGUuU3VibWl0LFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0VkaXRCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19lZGl0JyxcclxuICAgICAgICAgIGZpZWxkOiAnZWRpdCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wZW5jaWwnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogNixcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfZWRpdCcsXHJcbiAgICAgICAgICBidXR0b25UeXBlOiBCdXR0b25UeXBlLlN1Ym1pdCxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5JbmxpbmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dDb25zdWx0QnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfY29uc3VsdCcsXHJcbiAgICAgICAgICBmaWVsZDogJ2NvbnN1bHQnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktZXllJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGljb25TdHlsZUNsYXNzOiAndGV4dC1ibHVlLTUwMCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAwLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdDb25zdWx0ZXInLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0R1cGxpY2F0ZUJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2R1cGxpY2F0ZScsXHJcbiAgICAgICAgICBmaWVsZDogJ2R1cGxpY2F0ZScsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1jbG9uZScsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtcHVycGxlLTUwMCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiA3LFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdEdXBsaXF1ZXInLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLm9yZGVyICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEub3JkZXIhIC0gYi5vcmRlciEpLFxyXG4gICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5vcmRlciA9PT0gdW5kZWZpbmVkKSxcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKFxyXG4gICAgICAoY29sdW1uKSA9PlxyXG4gICAgICAoY29sdW1uLnRyYW5zbGF0ZWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyXHJcbiAgICAgICAgPyB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShjb2x1bW4uaGVhZGVyKVxyXG4gICAgICAgIDogY29sdW1uLmhlYWRlcilcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy52aWV3T3B0aW9ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktYWxpZ24tanVzdGlmeScsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy50b2dnbGVMaXN0VmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2NhbGVuZGVyX3ZpZXdcIiksXHJcbiAgICAgICAgaWNvbjogJ3BpIHBpLWNhbGVuZGFyJyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUNhbGVuZGVyVmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FyZF92aWV3JyksXHJcbiAgICAgICAgaWNvbjogJ3BpIHBpLWlkLWNhcmQnLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlQ2FyZFZpZXcoKVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl92aWV3JyksXHJcbiAgICAgICAgaWNvbjogJ3BpIHBpLXRoLWxhcmdlJyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUthbmJhblZpZXcoKVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuX2luaXRNb2RlbHMoKTtcclxuICB9XHJcblxyXG5cclxuICAvKiB0b2dnbGVIZWFkZXJGaWx0ZXJzKCl7XHJcbiAgICBpZih0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSB0cnVlKXtcclxuICAgICAgdGhpcy5zaG93SGVhZGVyRmlsdGVycyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlclwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcInNob3dfZmlsdGVyXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHsgLy90aGlzLnNob3dIZWFkZXJGaWx0ZXJzID09PSBmYWxzZVxyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gdHJ1ZTtcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gXCJwaSBwaS1maWx0ZXItc2xhc2hcIjtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gXCJoaWRlX2ZpbHRlclwiO1xyXG5cclxuICAgIH1cclxuICB9ICovXHJcblxyXG4gIGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlXHJcbiAgICAgID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IHRoaXMucGFnZS50b3RhbENvdW50IC0gdGhpcy5wYWdlLnBhZ2VTaXplXHJcbiAgICAgIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZSA/IHRoaXMucGFnZS5wYWdlTnVtYmVyID09PSAwIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExhenlMb2FkXHJcbiAgICovXHJcbiAgLy9maXJzdCA9PT4gcGFnZS5wYWdlTnVtYmVyXHJcbiAgLy9yb3dzID09PiBwYWdlLnBhZ2VTaXplXHJcbiAgLy90aGlzLnBhZ2UuaXRlbXMubGVuZ3RoID09PiB0b3RhbCBjb3VudFxyXG5cclxuICBvcGVuTmV3KCkge1xyXG4gICAgaWYgKCF0aGlzLnByZXZlbnRBZGRFdmVudCkge1xyXG4gICAgICB0aGlzLl9vcGVuTW9kYWwoQ29tcG9uZW50X01vZGVzLkNSRUFURSwgbnVsbCwgdGhpcy5fbW9kYWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7XHJcbiAgICAgIGtleTogdW5kZWZpbmVkLFxyXG4gICAgICBmaWVsZDogJ2FkZCcsXHJcbiAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZChldmVudDogQnV0dG9uQ2xpY2tSZXN1bHQpIHtcclxuXHJcbiAgICBsZXQgaXRlbUtleTogYW55ID0gZXZlbnQuc2VsZWN0S2V5T25seSA/IGV2ZW50LmtleSA6IGV2ZW50LmtleVt0aGlzLmtleV07XHJcblxyXG4gICAgY29uc3QgZXhjbHVkZWQgPSBbXCJOb3Rlc1wiLCBcIkZpY2hpZXJcIl07XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmICFleGNsdWRlZC5pbmNsdWRlcyh0aGlzLmJ1c2luZXNzQ2xhc3MpKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nRGF0YVNlcnZpY2Uuc2V0RGF0YSh7IGlkOiBpdGVtS2V5LCBjbGFzczogdGhpcy5idXNpbmVzc0NsYXNzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5maWVsZCA9PSAnZWRpdCcpIHtcclxuICAgICAgdGhpcy5fZWRpdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2RlbGV0ZScpIHtcclxuICAgICAgdGhpcy5fZGVsZXRlUm93KGl0ZW1LZXkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnY29uc3VsdCcpIHtcclxuICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtS2V5KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2R1cGxpY2F0ZScpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJCdXNzaW5lc3MgY2xhc3MgaXMgbm90IGRlZmluZWQgIVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fZHVwbGljYXRlUm93KGl0ZW1LZXkpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ3VwbG9hZCcpIHtcclxuICAgICAgY29uc3QgY29uZiA9IHtcclxuICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUhLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUhLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTW9kYWxVcGxvYWRHcmlkKHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdub3RlcycpIHtcclxuXHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Ob3Rlc0xpc3QodGhpcy5faW5qZWN0b3IpO1xyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdkb3dubG9hZCcpIHtcclxuXHJcbiAgICAgIHRoaXMuZmljaGllclNlcnZpY2UuZ2V0QnlJZChpdGVtS2V5KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2ZUZpbGUoZGF0YS5jb250ZW51LCBkYXRhLm5vbUZpY2hpZXJDb21wbGV0ISk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnaW5mbycpIHtcclxuXHJcbiAgICAgIHRoaXMucmVjb3JkSW5mb1BvcHVwU2VydmljZVxyXG4gICAgICAgIC5nZXRJbmZvKHRoaXMuYnVzaW5lc3NDbGFzcyEsIGl0ZW1LZXkpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBtb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkV4dHJhTGFyZ2U7XHJcbiAgICAgICAgICAgIGxldCB0ZXh0ID1cclxuICAgICAgICAgICAgICAnVUlEIDogICcgK1xyXG4gICAgICAgICAgICAgIGl0ZW1LZXkgK1xyXG4gICAgICAgICAgICAgICc8QlI+Q3JlYXRlZCBieSA6ICAnICtcclxuICAgICAgICAgICAgICBkYXRhLmNyZWF0aW9uVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5Nb2RpZmllZCBieSA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEubW9kaWZVc2VyICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgb24gOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLmRhdGVTYWlzaWUgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgb24gOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLmRhdGVNb2RpZjtcclxuXHJcbiAgICAgICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIFVpZDogaXRlbUtleSxcclxuICAgICAgICAgICAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgICAgIGNyZWF0aW9uVXNlcjogZGF0YS5jcmVhdGlvblVzZXIsXHJcbiAgICAgICAgICAgICAgICBtb2RpZlVzZXI6IGRhdGEubW9kaWZVc2VyLFxyXG4gICAgICAgICAgICAgICAgZGF0ZVNhaXNpZTogZGF0YS5kYXRlU2Fpc2llLFxyXG4gICAgICAgICAgICAgICAgZGF0ZU1vZGlmOiBkYXRhLmRhdGVNb2RpZixcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnOTByZW0nLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzgwcmVtJyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICAgIFRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICBjb25mXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdmb3JtJyl7XHJcbiAgICAgIGlmKCF0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBmb3JtRGVzY3JpbWluYXRvclZhbHVlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgICB7XHJcbiAgICAgICAgZm9ybURlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWZvcm1EZXNjcmltaW5hdG9yVmFsdWUpXHJcbiAgICAgIHtcclxuICAgICAgICBsZXQgZGlzY3JpbWluYXRvclJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXREaXNjcmltaW5hdG9yKHRoaXMuYnVzaW5lc3NDbGFzcywgaXRlbUtleSk7XHJcbiAgICAgICAgZm9ybURlc2NyaW1pbmF0b3JWYWx1ZSA9IGRpc2NyaW1pbmF0b3JSZXNwb25zZT8uZGlzY3JpbWluYXRvcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9kYWxDb25maWcgPSB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgc291cmNlQnVzaW5lc3NDbGFzczoge1xyXG4gICAgICAgICAgICBidXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgIGRpc2NyaW1pbmF0b3JWYWx1ZTogZm9ybURlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplIS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplIS5oZWlnaHQsXHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgb3BlbkR5bmFtaWNGb3JtTW9kYWxDb21wb25lbnQodGhpcy5faW5qZWN0b3IsIG1vZGFsQ29uZmlnKVxyXG5cclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgICB9ZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ0FjdGlvbkVSUCcpIHtcclxuXHJcbiAgICAgIGxldCBvY2N1cmVuY2VJbmZvczogb2NjdXJlbmNlSW5mb3MgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NjbGFzczogdGhpcy5idXNpbmVzc0NsYXNzID8/ICcnLFxyXG4gICAgICAgIG9jY3VyZW5jZTogaXRlbUtleVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuQWN0aW9uTGlzdCh0aGlzLl9pbmplY3RvciwgeyBvY2N1cmVuY2VJbmZvczogb2NjdXJlbmNlSW5mb3MgfSk7XHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7XHJcbiAgICAgICAga2V5OiBldmVudC5rZXksXHJcbiAgICAgICAgZmllbGQ6IGV2ZW50LmZpZWxkLFxyXG4gICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlRmlsZShiYXNlNjREYXRhOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcclxuICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9KTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgbG9hZChldmVudDogeyByZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0OyBpc0ZvckNhbGVuZGFyOiBib29sZWFuIH0pIHtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDtcclxuICAgIHRoaXMuX3NldGZvcm1FbmRwb2ludEJvZHkoKTtcclxuICAgIHRoaXMuX2xvYWREUyhldmVudC5pc0ZvckNhbGVuZGFyKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRJdGVtc0NoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3NldGZvcm1FbmRwb2ludEJvZHkoKTogdm9pZCB7XHJcbiAgICBsZXQgb3g6IGFueSA9IHRoaXMuX2Nsb25lUGFnZWRSZXF1ZXN0KHRoaXMucGFnZWRSZXF1ZXN0KTtcclxuICAgIG94WydnZXRBbGxEYXRhJ10gPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnRCb2R5ID0gSlNPTi5zdHJpbmdpZnkob3gpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdE1vZGVscygpIHtcclxuXHJcbiAgICB0aGlzLnBhZ2UgPSB7XHJcbiAgICAgIGl0ZW1zOiBbXSxcclxuICAgICAgcGFnZVNpemU6IDEwLFxyXG4gICAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgICBzdW1tYXJpZXM6IFtdLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiAxMCxcclxuICAgICAgc2tpcENvdW50OiAwLFxyXG4gICAgICBzb3J0aW5nOiBbXSxcclxuICAgICAga2V5d29yZDogJycsXHJcbiAgICAgIGZpbHRlcnM6IFtdLFxyXG4gICAgICBnZXRBbGxEYXRhOiBmYWxzZSxcclxuICAgICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkRFMoaXNGb3JDYWxlbmRlcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcblxyXG4gICAgdGhpcy5wYWdlLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlJC5uZXh0KHRoaXMucGFnZSk7XHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdCA9IHtcclxuICAgICAgLi4udGhpcy5wYWdlZFJlcXVlc3QsXHJcbiAgICAgIGdldEFsbERhdGE6IGlzRm9yQ2FsZW5kZXIsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNydWRTZXJ2aWNlICE9IG51bGwgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQpIHtcclxuXHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuZ2V0QWxsUGFnZWQodGhpcy5wYWdlZFJlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBJUGFnZWRSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucGFnZSxcclxuICAgICAgICAgICAgICBpdGVtcyA6IHZhbHVlLml0ZW1zLFxyXG4gICAgICAgICAgICAgIHRvdGFsQ291bnQgOiB2YWx1ZS50b3RhbENvdW50LFxyXG4gICAgICAgICAgICAgIHN1bW1hcmllcyA6IHZhbHVlLnN1bW1hcmllcyA/IHZhbHVlLnN1bW1hcmllcyA6IFtdLFxyXG4gICAgICAgICAgICAgIHRvdGFsUGFnZXMgOiAodGhpcy5wYWdlLnRvdGFsQ291bnQgLSAgKHRoaXMucGFnZS50b3RhbENvdW50ICUgdGhpcy5wYWdlLnBhZ2VTaXplKSkgLyB0aGlzLnBhZ2UucGFnZVNpemUgKyAxLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd05vdGVCdXR0b24pIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWROb3Rlc0NvdW50cygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZih0aGlzLmlzQ3VzdG9tQ29sdW1uUmVuZGVyZWQgPT0gZmFsc2UgJiYgdmFsdWUuY3VzdG9tQ29sdW1uU2NoZW1hICYmIHZhbHVlLmN1c3RvbUNvbHVtblNjaGVtYS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLy8gQWRkIGN1c3RvbSBjb2x1bW5zIHRvIHRoZSBncmlkXHJcbiAgICAgICAgICAgICAgdmFsdWUuY3VzdG9tQ29sdW1uU2NoZW1hLmZvckVhY2goY2NzID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXN0b21Db2x1bW5HcmlkOiBHcmlkQ29sdW1uID0ge1xyXG4gICAgICAgICAgICAgICAgICBoZWFkZXI6IGNjcy5jb2x1bW5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZDogY2NzLmNvbHVtbk5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcklucHV0VHlwZTogY2NzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tQ29sdW1uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGN1c3RvbUNvbHVtbkdyaWQpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB0aGlzLmlzQ3VzdG9tQ29sdW1uUmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMucGFnZS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWROb3Rlc0NvdW50cygpIHtcclxuICAgIGNvbnN0IGlkcyA9IHRoaXMucGFnZS5pdGVtcy5tYXAoeCA9PiB4W3RoaXMua2V5XSlcclxuICAgICAgLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAubWFwKHggPT4gU3RyaW5nKHgpKTtcclxuXHJcbiAgICBpZiAoIWlkcy5sZW5ndGggfHwgIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub3Rlc1NlcnZpY2VcclxuICAgICAgLmdldE5vdGVzQ291bnRCeVJvd3ModGhpcy5idXNpbmVzc0NsYXNzLCBpZHMpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oXHJcbiAgICAgICAgICByZXN1bHQubWFwKHggPT4gW3gucm93VWlkLCB4LmNvdW50XSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnBhZ2UuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhpdGVtW3RoaXMua2V5XSk7XHJcbiAgICAgICAgICBjb25zdCBjb3VudCA9IG1hcC5nZXQoa2V5KTtcclxuICAgICAgICAgIChpdGVtIGFzIGFueSkubm90ZXNDb3VudCA9IHR5cGVvZiBjb3VudCA9PT0gJ251bWJlcicgPyBjb3VudCA6IDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZWRpdFJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5FRElULCBpdGVtS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RlbGV0ZVJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5ERUxFVEUsIGl0ZW1LZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29uc3VsdFJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULCBpdGVtS2V5KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZHVwbGljYXRlUm93KGl0ZW1LZXk6IGFueSkge1xyXG4gICAgdGhpcy5faGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2soQ29tcG9uZW50X01vZGVzLkRVUExJQ0FURSwgaXRlbUtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEVudGl0eUluZm8oKSB7XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgICBpZiAoIXRoaXMuZW50aXR5SW5mbykge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgTm8gZW50aXR5IGluZm8gZm91bmQgZm9yICR7dGhpcy5idXNpbmVzc0NsYXNzfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vcGVuTW9kYWwobW9kZTogc3RyaW5nLCBpdGVtS2V5OiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5jcnVkU2VydmljZSEuaXNEdXBsaWNhdGUgPSBtb2RlID09PSBNb2Rlcy5kdXBsaWNhdGU7XHJcbiAgICBsZXQgd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbjogd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcclxuXHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gYXdhaXQgdGhpcy5fZW50aXR5Q29uZmlnU2VydmljZS5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgICAgICB3b3JrZmxvd0VudGl0eUluZm9ybWF0aW9uID0gYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKHRoaXMuYnVzaW5lc3NDbGFzcywgaXRlbUtleSk7XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGVycm9yKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWc7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kYWxTaXplICE9IG51bGwgJiYgdGhpcy5tb2RhbFNpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YTogeyBpZDogaXRlbUtleSwgbW9kZTogbW9kZSwgY3VzdG9tRGF0YTogZGF0YSwgd29ya2Zsb3dJbmZvcm1hdGlvbjogd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbiwgZW50aXR5SW5mbzogdGhpcy5lbnRpdHlJbmZvIH0sXHJcbiAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIHRlbXBsYXRlczoge1xyXG4gICAgICAgICAgZm9vdGVyOiBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQsXHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uZiA9IHtcclxuICAgICAgICBkYXRhOiB7IGlkOiBpdGVtS2V5LCBtb2RlOiBtb2RlLCBjdXN0b21EYXRhOiBkYXRhLCB3b3JrZmxvd0luZm9ybWF0aW9uOiB3b3JrZmxvd0VudGl0eUluZm9ybWF0aW9uIH0sXHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmN1ZENvbXBvbmVudCA9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN1ZENvbXBvbmVudCA9IFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKHRoaXMuY3VkQ29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3Blbih0aGlzLmN1ZENvbXBvbmVudCwgY29uZik7XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwoY29uZikpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VNb2RhbChjb25mPzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoY29uZiAmJiBjb25mPy5kYXRhPy5yZWZyZXNoTGlzdCkge1xyXG4gICAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvbmVQYWdlZFJlcXVlc3QocmVxdWVzdDogSVBhZ2VkUmVxdWVzdCk6IElQYWdlZFJlcXVlc3Qge1xyXG4gICAgbGV0IGNsb25lOiBJUGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICBtYXhSZXN1bHRDb3VudDogcmVxdWVzdC5tYXhSZXN1bHRDb3VudCxcclxuICAgICAgc2tpcENvdW50OiByZXF1ZXN0LnNraXBDb3VudCxcclxuICAgICAgc29ydGluZzogcmVxdWVzdC5zb3J0aW5nLFxyXG4gICAgICBrZXl3b3JkOiByZXF1ZXN0LmtleXdvcmQsXHJcbiAgICAgIGZpbHRlcnM6IHJlcXVlc3QuZmlsdGVycyxcclxuICAgICAgZ2V0QWxsRGF0YTogcmVxdWVzdC5nZXRBbGxEYXRhLFxyXG4gICAgICBzdW1tYXJpZXM6IHJlcXVlc3Quc3VtbWFyaWVzLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgZGlzcGxheVNlYXJjaEZpZWxkcygpIHtcclxuICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkID0gIXRoaXMuc2hvd1NlYXJjaEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGNhbGVuZGVyXHJcbiAgaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKGl0ZW06IGFueSkge1xyXG4gICAgc3dpdGNoIChpdGVtLm1vZGUpIHtcclxuICAgICAgY2FzZSBDb21wb25lbnRfTW9kZXMuQ09OU1VMVDpcclxuICAgICAgICB0aGlzLl9jb25zdWx0Um93KGl0ZW0uaWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbXBvbmVudF9Nb2Rlcy5DUkVBVEU6XHJcbiAgICAgICAgdGhpcy5fb3Blbk1vZGFsKENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUsIG51bGwse2l0ZW19ICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50X01vZGVzLkVESVQ6XHJcbiAgICAgICAgdGhpcy5fZWRpdFJvdyhpdGVtLmlkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2luZm8nOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnaW5mbycsIGtleTogaXRlbS5pZCwgc2VsZWN0S2V5T25seTogdHJ1ZSB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZG93bmxvYWQnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnZG93bmxvYWQnLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKHsgZmllbGQ6ICd1cGxvYWQnLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25vdGVzJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ25vdGVzJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBY3Rpb25FUlAnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAnQWN0aW9uRVJQJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVMaXN0VmlldygpIHtcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0thbmJhblZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktYWxpZ24tanVzdGlmeVwiO1xyXG4gICAgdGhpcy5jdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FsZW5kZXJWaWV3KCkge1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gIXRoaXMuc2hvd0NhbGVuZGVyVmlldztcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb2FkRFModGhpcy5zaG93Q2FsZW5kZXJWaWV3KTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLWNhbGVuZGFyXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2NhbGVuZGVyX3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FyZFZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9ICF0aGlzLnNob3dDYXJkVmlldztcclxuICAgIHRoaXMuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93S2FuYmFuVmlldyA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5fbG9hZERTKHRoaXMuc2hvd0NhcmRWaWV3KTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLWlkLWNhcmRcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FyZF92aWV3XCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUthbmJhblZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gIXRoaXMuc2hvd0thbmJhblZpZXc7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIHRoaXMuY3VycmVudEljb24gPSBcInBpIHBpLXRoLWxhcmdlXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl92aWV3XCI7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Y0Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wZW5OZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVBY3Rpb25WaWV3Q2xpY2soKSB7XHJcbiAgICB0aGlzLmNsaWNrQ291bnQrKztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuY2xpY2tDb3VudCkge1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgdGhpcy50b2dnbGVMaXN0VmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy50b2dnbGVDYXJkVmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHRoaXMudG9nZ2xlS2FuYmFuVmlldygpO1xyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2sobW9kZTogQ29tcG9uZW50X01vZGVzLCBpdGVtS2V5OiBhbnkpIHtcclxuICAgIC8vIFRPRE8gQE1lZEFsaSB0byBiZSBmaXhlZFxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLmJ1c2luZXNzQ2xhc3MgIT09IFwiTm90ZXNcIikge1xyXG4gICAgICB0aGlzLm5vdGVzU2VydmljZS5nZXRBbGVydE5vdGVzKGl0ZW1LZXk/LnRvU3RyaW5nKCksIHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IE5vdGVzR3JvdXBlZEJ5VXNlclJlc3BvbnNlW10pID0+IHtcclxuICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHsgZ3JvdXBlZE5vdGVzOiByZXNwb25zZSB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLlNtYWxsLndpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5TbWFsbC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbm90ZXMgZm9yIGFsZXJ0JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN0YXR1c0ZpbHRlckNoYW5nZWQoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dClcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0Q2xpY2tlZCgpe1xyXG4gICAgdGhpcy5vbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZVNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQoKVxyXG4gIHtcclxuICAgIGlmKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IodGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZihkYXRhICE9IG51bGwgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdCA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXREaXNjcmltaW5hdG9yKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8RGlzY3JpbWluYXRvclJlc3BvbnNlIHwgbnVsbD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Rpc2NyaW1pbmF0b3JTZXJ2aWNlLmdldERpc2NyaW1pbmF0b3IoYnVzaW5lc3NDbGFzcywgaWQpKVxyXG5cclxuICAgICAgaWYgKGRpc2NyaW1pbmF0b3JSZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yUmVzcG9uc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjYXRjaChlcnJvcilcclxuICAgIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICBcclxuICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJib3JkZXItcmFkaXVzLTcgbWItMSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBuby1wYWRcIiBcclxuICAgICpuZ0lmPVwiKHNob3dBZGRCdXR0b24gfHwgc2VhcmNoRmllbGRzIHx8IGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBzaG93UmVwb3J0aW5nXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYWRkX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgXHJcbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PVwic2hhcmVkX3RzaV9jb21wb25lbnRfYWRkX3ZpZXdcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbk5ldygpXCI+XHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEZpZWxkc1wiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNob3dfc2VhcmNoX2ZpZWxkc19idXR0b25cIj5cclxuICAgICAgICAgIDxUc2ktQnV0dG9uIGljb249XCJwaSBwaS1zbGlkZXJzLWhcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X21lbnVcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSBob3ZlcjpzaGFkb3ctNiB7eyBzaG93U2VhcmNoRmllbGQgPyAncC1idXR0b24tc2Vjb25kYXJ5JyA6ICdwLWJ1dHRvbi1zdWNjZXNzJyB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5U2VhcmNoRmllbGRzKClcIj5cclxuICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJbXBvcnRGcm9tT3V0bG9va0J1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImltcG9ydEZyb21PdXRsb29rX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLWVudmVsb3BlXCIgXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X2ltcG9ydF9mcm9tX291dGxvb2tcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbXBvcnRDbGlja2VkKClcIj4gXHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInRvZ2dsZV9hY3Rpb25zX3ZpZXdfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8cC1zcGxpdEJ1dHRvblxyXG4gICAgICAgICAgICBbaWNvbl09XCJjdXJyZW50SWNvblwiXHJcbiAgICAgICAgICAgIFttb2RlbF09XCJ2aWV3T3B0aW9uc1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUFjdGlvblZpZXdDbGljaygpXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24taWNvbi1vbmx5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tcHJpbWFyeSBoLTJyZW0gaG92ZXI6c2hhZG93LTZcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDwhLS0gPFRzaS1CdXR0b25cclxuICAgICAgICAgICAgW2ljb25dPVwiY3VycmVudEljb25cIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXByaW1hcnkgIGgtMnJlbSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uVmlld0NsaWNrKClcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgPC9Uc2ktQnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGFwcC1yZXBvcnRpbmcgKm5nSWY9XCIoZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3MpXCIgXHJcbiAgICAgICAgICBbZm9ybUVuZHBvaW50XT1cImZvcm1FbmRwb2ludFwiIFxyXG4gICAgICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCJcclxuICAgICAgICAgIFtmb3JtRW5kcG9pbnRCb2R5XT1cImZvcm1FbmRwb2ludEJvZHlcIiBcclxuICAgICAgICAgIFtpc0Zvcm1FbmRwb2ludFBhZ2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgICAgICBbcmVwb3J0RGlzY3JpbWluYXRvcl09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICAgICAgKHJlZnJlc2hEYXRhKT1cInJlZnJlc2goJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZmlsdGVyc0h0bWxUZW1wbGF0ZV09XCJmaWx0ZXJzSHRtbFRlbXBsYXRlXCJcclxuICAgICAgICAgIFtwYWdlZFJlcXVlc3RdPVwicGFnZWRSZXF1ZXN0XCJcclxuICAgICAgICAgIFtjdWRDb21wb25lbnRdPVwiY3VkQ29tcG9uZW50XCIgXHJcbiAgICAgICAgICBbY29uZmlnTW9kZUJ1dHRvbklkXT1cImNvbmZpZ01vZGVCdXR0b25JZFwiXHJcbiAgICAgICAgICBbc2hvd05vdGVCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dBY3Rpb25CdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICA+PC9hcHAtcmVwb3J0aW5nPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPGRpdj5cclxuXHJcbiAgICA8VHNpLUdlbmVyaWMtR3JpZFxyXG4gICAgICBbZm9ybU5hbWVdPVwiZm9ybU5hbWVcIlxyXG4gICAgICBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIlxyXG4gICAgICBbc2hvd1NlYXJjaEZpZWxkXT1cInNob3dTZWFyY2hGaWVsZFwiXHJcbiAgICAgIFtzZWFyY2hGaWVsZHNdPVwic2VhcmNoRmllbGRzXCJcclxuICAgICAgW2Rlc2NyaW1pbmF0b3JWYWx1ZV09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXHJcbiAgICAgIFtwYWdlXT1cInBhZ2VcIlxyXG4gICAgICBbcGFnZWRSZXF1ZXN0XT1cInBhZ2VkUmVxdWVzdFwiXHJcbiAgICAgIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXHJcbiAgICAgIFtzaG93SGVhZGVyRmlsdGVyc109XCJzaG93SGVhZGVyRmlsdGVyc1wiXHJcbiAgICAgIFsoZmlsdGVyc0h0bWxUZW1wbGF0ZSldPVwiZmlsdGVyc0h0bWxUZW1wbGF0ZVwiXHJcbiAgICAgIFtwcmVzZW50YXRpb25TZXR0aW5nc109XCJwcmVzZW50YXRpb25TZXR0aW5nc1wiXHJcbiAgICAgIChsb2FkKT1cImxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWxlY3RLZXlPbmx5XT1cInNlbGVjdEtleU9ubHlcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgW2tleV09XCJrZXlcIlxyXG4gICAgICBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgICAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJvblNlbGVjdGVkSXRlbXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQpPVwic2VhcmNoRmllbGRWYWx1ZUNoYW5nZXMoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWFyY2hPbkluaXRdPVwic2VhcmNoT25Jbml0XCJcclxuICAgICAgW3Nob3dFeHBvcnRCdXR0b25dPVwic2hvd0V4cG9ydEJ1dHRvblwiXHJcbiAgICAgIFtzaG93R2xvYmFsU2VhcmNoXT1cInNob3dHbG9iYWxTZWFyY2hcIlxyXG4gICAgICBbaXNTZWFyY2hCdXR0b25EaXNhYmxlZF09XCJpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXCJcclxuICAgICAgW3Nob3dDYWxlbmRlclZpZXddPVwic2hvd0NhbGVuZGVyVmlld1wiXHJcbiAgICAgIFtzaG93Q2FyZFZpZXddPVwic2hvd0NhcmRWaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3XT1cInNob3dLYW5iYW5WaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXRdPVwic2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdFwiXHJcbiAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICBbY3VkQ29tcG9uZW50XT1cImN1ZENvbXBvbmVudFwiIFxyXG4gICAgICBbbW9kYWxTaXplXT1cIm1vZGFsU2l6ZVwiIFxyXG4gICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICBbcGFnZSRdPVwicGFnZSRcIlxyXG4gICAgICBbZW50aXR5SW5mb109XCJlbnRpdHlJbmZvXCJcclxuICAgICAgKGNhbGVuZGFyRXZlbnRDbGljayk9XCJoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgIChzdGF0dXNGaWx0ZXJDaGFuZ2VkKT1cIm9uU3RhdHVzRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgW3Nob3dOb3RlQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0FjdGlvbkJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgW3NpemluZ01vZGVdPVwic2l6aW5nTW9kZVwiXHJcbiAgICA+PC9Uc2ktR2VuZXJpYy1HcmlkPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG48L2Rpdj5cclxuIl19
1104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSw2QkFBNkIsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4SSxPQUFPLEVBQUUscUNBQXFDLEVBQW9ELE1BQU0sY0FBYyxDQUFDO0FBZXZILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxN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Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQU1HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBR08sYUFBYTtzQkFBekIsS0FBSztnQkFXTyxZQUFZO3NCQUF4QixLQUFLO2dCQVlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFLSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBKzJCUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBNb2RhbFNpemVFbnVtLCBNb2RlcyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQWN0aW9uUGxhY2VtZW50IH0gZnJvbSAnLi4vLi4vZW51bXMvYWN0aW9uLXBsYWNlbWVudCc7XHJcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9idXR0b24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi8uLi9lbnVtcy9ncmlkLXNlbGVjdGlvbi1tb2RlJztcclxuaW1wb3J0IHsgR3JpZFNpemluZ01vZGUgfSBmcm9tICcuLi8uLi9lbnVtcy9ncmlkLXNpemluZy1tb2RlJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvdG9vbHRpcFBvc2l0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBvcGVuQWN0aW9uTGlzdCwgb3BlbkR5bmFtaWNGb3JtTW9kYWxDb21wb25lbnQsIG9wZW5Nb2RhbFVwbG9hZEdyaWQsIG9wZW5Ob3Rlc0xpc3QgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvbW9kYWwtb3Blbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IEJ1dHRvbkNsaWNrUmVzdWx0LCBHcmlkQ29sdW1uLCBJR3JpZENvbmZpZ3VyYXRpb24sIElNb2RhbFNpemUsIElQYWdlLCBJUGFnZWRSZXF1ZXN0LCBJUGFnZWRSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0LCBTZWFyY2hGaWVsZCwgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBvY2N1cmVuY2VJbmZvcyB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb25FcnAvYWN0aW9uRXJwJztcclxuaW1wb3J0IHsgRXZlbnRTY2hlbWEgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29tbW9uL2V2ZW50LXNjaGVtYSc7XHJcbmltcG9ydCB7IEVudGl0eUluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZW50aXR5LWluZm8vZW50aXR5LWluZm8nO1xyXG5pbXBvcnQgeyBOb3Rlc0dyb3VwZWRCeVVzZXJSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9Ob3Rlcy9Ob3RlJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uU2V0dGluZyB9IGZyb20gJy4uLy4uL21vZGVscy9wcmVzZW50YXRpb24tc2V0dGluZ3MvcHJlc2VudGF0aW9uLXNldHRpbmdzJztcclxuaW1wb3J0IHsgRGlzY3JpbWluYXRvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NoYXJlZC9kaXNjcmltaW5hdG9yLXJlc3BvbnNlJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IENydWRCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2UvY3J1ZC1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaXNjcmltaW5hdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24vZGlzY3JpbWluYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWNoaWVyVXBsb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZmljaGllci11cGxvYWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9Ob3RlL05vdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVjb3JkSW5mb1BvcHVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY29yZC1pbmZvLXBvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3cvd29ya2Zsb3ctY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5SGVscGVyIH0gZnJvbSAnLi4vLi4vdHNpLWhlbHBlcnMvdHlwZS1yZWdpc3RyeS5oZWxwZXInO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lGb3JtTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi90c2ktZm9ybS1tb2RhbC1mb290ZXIvdHNpLWZvcm0tbW9kYWwtZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1ub3Rlcy1hdmVydGlyL3RzaS1ub3Rlcy1hdmVydGlyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1wb3B1cC10ZXh0LXZpZXdlci90c2ktcG9wdXAtdGV4dC12aWV3ZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLUdlbmVyaWMtQ3J1ZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtUc2lOb3RpZmljYXRpb25TZXJ2aWNlXSxcclxufSkgLyosIE9uQ2hhbmdlcyovXHJcbmV4cG9ydCBjbGFzcyBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIGxvY2FsIHZhcnNcclxuICBwcml2YXRlIF9kaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xyXG4gIHByaXZhdGUgX2Zvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIHByb3RlY3RlZCBmaWx0ZXJJY29uID0gJ3BpIHBpLWZpbHRlcic7XHJcbiAgcHJvdGVjdGVkIGZpbHRlclRvb2x0aXAgPSAnc2hvd19maWx0ZXInO1xyXG4gIHByaXZhdGUgX2lzV29ya2Zsb3dFdGF0Rm9ybUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgYnV0dG9uVHlwZSA9IEJ1dHRvblR5cGU7XHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uO1xyXG4gIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gXCJjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3RcIlxyXG4gIHNhdmVQcm9wZXJ0aWVzQnV0dG9uQ2xhc3NOYW1lID0gXCJjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3Qtc2F2ZS1wcm9wZXJ0aWVzXCI7XHJcbiAgQElucHV0KCkgZW50aXR5SW5mbzogRW50aXR5SW5mbyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG5cclxuICBpdGVtcz86IGFueVtdO1xyXG5cclxuICBwYWdlZFJlcXVlc3Q6IElQYWdlZFJlcXVlc3QgPSB7fTtcclxuXHJcbiAgcGFnZTogSVBhZ2U8YW55PiA9IHtcclxuICAgIGl0ZW1zOiBbXSxcclxuICAgIHBhZ2VTaXplOiAxMCxcclxuICAgIHBhZ2VOdW1iZXI6IDEsXHJcbiAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgdG90YWxQYWdlczogMCxcclxuICAgIHN1bW1hcmllczogW10sXHJcbiAgICBsb2FkaW5nOiBmYWxzZSxcclxuICB9O1xyXG5cclxuICBmaXJzdDogbnVtYmVyID0gMDtcclxuICByb3dzID0gMTtcclxuICBmb3JtRW5kcG9pbnRCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZmlsdGVyc0h0bWxUZW1wbGF0ZT86IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkQ29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgX3NlYXJjaE9uSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgX21vZGFsRGF0YTogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KSBnZW5lcmljR3JpZENvbXBvbmVudD86IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50O1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIHNldCBtb2RhbERhdGEodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fbW9kYWxEYXRhID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBjb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICBASW5wdXQoKSBncmlkQ29uZmlndXJhdGlvbj86IElHcmlkQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBjdWRDb21wb25lbnQ6IGFueTtcclxuICBASW5wdXQoKSBjcnVkU2VydmljZT86IENydWRCYXNlU2VydmljZTxhbnksIGFueSwgYW55LCBhbnk+O1xyXG4gIEBJbnB1dCgpIGhlYWRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgbW9kYWxTaXplPzogSU1vZGFsU2l6ZTtcclxuICBASW5wdXQoKSBkZXNjcmltaW5hdG9yVmFsdWU/OiBzdHJpbmdcclxuICBASW5wdXQoKSBwcmVzZW50YXRpb25TZXR0aW5ncz86IFByZXNlbnRhdGlvblNldHRpbmdcclxuICBASW5wdXQoKSBwcmV2ZW50QWRkRXZlbnQ/OiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKSBzZXQgZm9ybUVuZHBvaW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9mb3JtRW5kcG9pbnQgPSBgJHt2YWx1ZX0vZ2V0YWxscGFnZWRgO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9ybUVuZHBvaW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1FbmRwb2ludDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zvcm1OYW1lPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBmb3JtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1OYW1lO1xyXG4gIH1cclxuXHJcbiAgc2V0IGZvcm1OYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2Zvcm1OYW1lID0gdmFsdWU7XHJcbiAgICAvLyB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8gQElucHV0KCkgZm9ybU5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0hlYWRlckZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93RWRpdEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0RlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0FkZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0NvbnN1bHRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VXBsb2FkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Tm90ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0Rvd25sb2FkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0luZm9CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dEdXBsaWNhdGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dGb3JtQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Q2FsZW5kZXJWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0NhcmRWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEZyb21PdXRsb29rQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0thbmJhblZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFNlcnZlci1zaWRlIGdyb3VwLWJ5IGNvbHVtbiwgYWN0aXZlIG9ubHkgd2hpbGUgdGhlIEthbmJhbiB2aWV3IGlzIHNob3duXHJcbiAgLy8gKHJlc29sdmVkIGZyb20gRW50aXR5SW5mby5zdGF0dXNDb2x1bW5OYW1lKTsgcGFzc2VkIGRvd24gdG8gdGhlIGdyaWQgc29cclxuICAvLyBncmlkLWRyaXZlbiByZWxvYWRzIChrYW5iYW4gcGFnaW5hdGlvbiwgc2VhcmNoKSBrZWVwIHRoZSBncm91cGluZy5cclxuICBncm91cEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEZpZWxkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZHM6IFNlYXJjaEZpZWxkW10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgY2FsZW5kZXJTY2hlbWE6IEV2ZW50U2NoZW1hIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNpemluZ01vZGU6IEdyaWRTaXppbmdNb2RlID0gR3JpZFNpemluZ01vZGUuRmlsbDtcclxuXHJcbiAgLy9ncmlkIHNlbGVjdGlvblxyXG4gIEBJbnB1dCgpIHNlbGVjdEtleU9ubHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgQElucHV0KCkga2V5OiBzdHJpbmcgPSAndWlkJztcclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuXHJcbiAgX2J1c2luZXNzQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX2J1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEJ1c2luZXNzQ2xhc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZWFyY2hPbkluaXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hPbkluaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzZWFyY2hPbkluaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoT25Jbml0O1xyXG4gIH1cclxuXHJcblxyXG4gIEBJbnB1dCgpIHNob3dHbG9iYWxTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dSZXBvcnRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PigpO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+KCk7XHJcbiAgQE91dHB1dCgpIGJ1dHRvbkNvbHVtbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PigpO1xyXG4gIEBPdXRwdXQoKSBvbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNlbmRyZWdpb24gT3V0cHV0c1xyXG4gIGlzQ3VzdG9tQ29sdW1uUmVuZGVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjbGlja0NvdW50ID0gMTtcclxuICBjdXJyZW50SWNvbiA9IFwicGkgcGktYWxpZ24tanVzdGlmeVwiO1xyXG4gIGN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3Rfdmlld1wiO1xyXG5cclxuICB2aWV3T3B0aW9uczogTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICBwYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbXNnU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgIHByaXZhdGUgZGlhbG9nRGF0YVNlcnZpY2U6IERpYWxvZ0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWNoaWVyU2VydmljZTogRmljaGllclVwbG9hZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY29yZEluZm9Qb3B1cFNlcnZpY2U6IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZW50aXR5Q29uZmlnU2VydmljZTogRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGVzU2VydmljZTogTm90ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcclxuICAgIHByaXZhdGUgX2Rpc2NyaW1pbmF0b3JTZXJ2aWNlOiBEaXNjcmltaW5hdG9yU2VydmljZSxcclxuICApIHsgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIGdyaWQgc3RhdGVcclxuXHJcbiAgZ2V0U3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZENvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5nZXRTdGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIHJlc3RvcmVTdGF0ZShjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQucmVzdG9yZVN0YXRlKGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRTZWxlY3RlZENvbHVtbnMoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LnJlc2V0U2VsZWN0ZWRDb2x1bW5zKGNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgLy8gfVxyXG5cclxuICBhc3luYyBnZXRXb3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzICYmICF0aGlzLl9pc1dvcmtmbG93RXRhdEZvcm1Mb2FkZWQpIHtcclxuICAgICAgdGhpcy5faXNXb3JrZmxvd0V0YXRGb3JtTG9hZGVkID0gdHJ1ZVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0V29ya2Zsb3dFdGF0Rm9ybUJ5Q2xhc3NOYW1lKHRoaXMuYnVzaW5lc3NDbGFzcykpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRGb3JtID0gcmVzdWx0XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgd29ya2Zsb3cgc3RhdGUgZm9ybTonLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24oYnVzaW5lc3NDbGFzczogc3RyaW5nLCB1aWRPYmplY3Q/OiBzdHJpbmcpIHtcclxuICAgIGxldCByZXN1bHQ6IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcmVxdWVzdDogR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCA9IG5ldyBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0KCk7XHJcbiAgICAgIHJlcXVlc3QuY2xhc3NOYW1lID0gYnVzaW5lc3NDbGFzc1xyXG4gICAgICByZXF1ZXN0LnVpZE9iamV0ID0gdWlkT2JqZWN0O1xyXG4gICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUgPSB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWVcclxuICAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lXHJcbiAgICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRDdXJyZW50RW50aXR5V29ya2xmb3dJbnN0YW5jZUluZm9ybWF0aW9uKHJlcXVlc3QpKVxyXG4gICAgICAvLyBpZiAocmVzdWx0KSB7XHJcbiAgICAgIC8vICAgbGV0IHdvcmtmbG93RXRhdEZvcm0gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93RXRhdEZvcm1Gb3JDdXJyZW50Rm9ybVxyXG4gICAgICAvLyAgICAgPy5maW5kKHggPT4geC51aWQgPT0gcmVzdWx0Py53b3JrZmxvd0V0YXQpXHJcbiAgICAgIC8vICAgaWYgKHdvcmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgLy8gICAgIC8vIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9yRm9yQ3VycmVudEVudGl0eUZvcm0gPVxyXG4gICAgICAvLyAgICAgLy8gICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLm1hcFdvcmtmbG93RXRhdEZvcm1Ub1ByZXNlbnRhdGlvblNldHRpbmcod29ya2Zsb3dFdGF0Rm9ybS53b3JrZmxvd0V0YXRzRm9ybXMpXHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRcclxuICB9XHJcblxyXG4gIHNlYXJjaEZpZWxkVmFsdWVDaGFuZ2VzKG5ld1NlYXJjaEZpZWxkVmFsdWVzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkLmVtaXQobmV3U2VhcmNoRmllbGRWYWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5nZXRFbnRpdHlJbmZvKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpc2VTaG93S2FuYmFuVmlld09mV29ya0Zsb3dFdGF0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJUb29sdGlwID0gJ2hpZGVfZmlsdGVyJztcclxuICAgICAgdGhpcy5maWx0ZXJJY29uID0gJ3BpIHBpLWZpbHRlci1zbGFzaCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSAnc2hvd19maWx0ZXInO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSAncGkgcGktZmlsdGVyJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb2x1bW5zID09IG51bGwgJiYgdGhpcy5jb2x1bW5zID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ2NvbHVtbnMgY2FudCBiZSBudWxsIG9yIHVuZGVmaW5lZCwgZGV2ZWxvcHBlciBtdXN0IHNldCBjb2x1bW5zIG9mIGdyaWQgISdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dJbmZvQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfaW5mbycsXHJcbiAgICAgICAgICBmaWVsZDogJ2luZm8nLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktaW5mbycsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAzLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19pbmZvJyxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dEb3dubG9hZEJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2Rvd25sb2FkJyxcclxuICAgICAgICAgIGZpZWxkOiAnZG93bmxvYWQnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktZG93bmxvYWQnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogMixcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnVMOpbMOpY2hhcmdlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93VXBsb2FkQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfYXR0YWNobWVudCcsXHJcbiAgICAgICAgICBmaWVsZDogJ3VwbG9hZCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wYXBlcmNsaXAnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogNCxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfYXR0YWNobWVudCcsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93Tm90ZUJ1dHRvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19ub3RlcycsXHJcbiAgICAgICAgICBidXR0b25MYWJlbDogJycsXHJcbiAgICAgICAgICBmaWVsZDogJ25vdGVzJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNvbW1lbnQnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogNSxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfbm90ZXMnLFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50Lk92ZXJmbG93LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0FjdGlvbkJ1dHRvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19hY3Rpb24nLFxyXG4gICAgICAgICAgYnV0dG9uTGFiZWw6ICcnLFxyXG4gICAgICAgICAgZmllbGQ6ICdBY3Rpb25FUlAnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9sdCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAxMCxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfYWN0aW9uJyxcclxuICAgICAgICAgIGlzSWNvbkJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGFjdGlvbkRpc3BsYXk6IEFjdGlvblBsYWNlbWVudC5PdmVyZmxvdyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNob3dGb3JtQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2Zvcm0nLFxyXG4gICAgICAgICAgZmllbGQ6ICdmb3JtJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2snLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LWluZGlnby01MDAnLFxyXG4gICAgICAgICAgaXNGcm96ZW46IHRydWUsXHJcbiAgICAgICAgICBvcmRlcjogOCxcclxuICAgICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX2FjdGlvbnNfZm9ybScsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RGVsZXRlQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZGVsZXRlJyxcclxuICAgICAgICAgIGZpZWxkOiAnZGVsZXRlJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgICBpY29uU3R5bGVDbGFzczogJ3RleHQtcmVkLTUwMCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiAxLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdEZWxldGUnLFxyXG4gICAgICAgICAgYnV0dG9uVHlwZTogQnV0dG9uVHlwZS5TdWJtaXQsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RWRpdEJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25zX2VkaXQnLFxyXG4gICAgICAgICAgZmllbGQ6ICdlZGl0JyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBlbmNpbCcsXHJcbiAgICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBob3ZlcjpzaGFkb3ctOCcsXHJcbiAgICAgICAgICBpc0Zyb3plbjogdHJ1ZSxcclxuICAgICAgICAgIG9yZGVyOiA2LFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19lZGl0JyxcclxuICAgICAgICAgIGJ1dHRvblR5cGU6IEJ1dHRvblR5cGUuU3VibWl0LFxyXG4gICAgICAgICAgaXNJY29uQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aW9uRGlzcGxheTogQWN0aW9uUGxhY2VtZW50LklubGluZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19jb25zdWx0JyxcclxuICAgICAgICAgIGZpZWxkOiAnY29uc3VsdCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgaG92ZXI6c2hhZG93LTgnLFxyXG4gICAgICAgICAgaWNvblN0eWxlQ2xhc3M6ICd0ZXh0LWJsdWUtNTAwJyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDAsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ0NvbnN1bHRlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93RHVwbGljYXRlQnV0dG9uID09IHRydWUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfZHVwbGljYXRlJyxcclxuICAgICAgICAgIGZpZWxkOiAnZHVwbGljYXRlJyxcclxuICAgICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNsb25lJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IGhvdmVyOnNoYWRvdy04JyxcclxuICAgICAgICAgIGljb25TdHlsZUNsYXNzOiAndGV4dC1wdXJwbGUtNTAwJyxcclxuICAgICAgICAgIGlzRnJvemVuOiB0cnVlLFxyXG4gICAgICAgICAgb3JkZXI6IDcsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogJ0R1cGxpcXVlcicsXHJcbiAgICAgICAgICBpc0ljb25CdXR0b246IHRydWUsXHJcbiAgICAgICAgICBhY3Rpb25EaXNwbGF5OiBBY3Rpb25QbGFjZW1lbnQuT3ZlcmZsb3csXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi50aGlzLnNlbGVjdGVkQ29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IFtcclxuICAgICAgLi4udGhpcy5zZWxlY3RlZENvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wub3JkZXIgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5vcmRlciEgLSBiLm9yZGVyISksXHJcbiAgICAgIC4uLnRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLm9yZGVyID09PSB1bmRlZmluZWQpLFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoXHJcbiAgICAgIChjb2x1bW4pID0+XHJcbiAgICAgIChjb2x1bW4udHJhbnNsYXRlZEhlYWRlciA9IGNvbHVtbi5oZWFkZXJcclxuICAgICAgICA/IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGNvbHVtbi5oZWFkZXIpXHJcbiAgICAgICAgOiBjb2x1bW4uaGVhZGVyKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZpZXdPcHRpb25zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3RfdmlldycpLFxyXG4gICAgICAgIGljb246ICdwaSBwaS1hbGlnbi1qdXN0aWZ5JyxcclxuICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnRvZ2dsZUxpc3RWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FsZW5kZXJfdmlld1wiKSxcclxuICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KClcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9jYXJkX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktaWQtY2FyZCcsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy50b2dnbGVDYXJkVmlldygpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3ZpZXcnKSxcclxuICAgICAgICBpY29uOiAncGkgcGktdGgtbGFyZ2UnLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudG9nZ2xlS2FuYmFuVmlldygpXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5faW5pdE1vZGVscygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qIHRvZ2dsZUhlYWRlckZpbHRlcnMoKXtcclxuICAgIGlmKHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IHRydWUpe1xyXG4gICAgICB0aGlzLnNob3dIZWFkZXJGaWx0ZXJzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsdGVySWNvbiA9IFwicGkgcGktZmlsdGVyXCI7XHJcbiAgICAgIHRoaXMuZmlsdGVyVG9vbHRpcCA9IFwic2hvd19maWx0ZXJcIjtcclxuICAgIH1cclxuICAgIGVsc2UgeyAvL3RoaXMuc2hvd0hlYWRlckZpbHRlcnMgPT09IGZhbHNlXHJcbiAgICAgIHRoaXMuc2hvd0hlYWRlckZpbHRlcnMgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpbHRlckljb24gPSBcInBpIHBpLWZpbHRlci1zbGFzaFwiO1xyXG4gICAgICB0aGlzLmZpbHRlclRvb2x0aXAgPSBcImhpZGVfZmlsdGVyXCI7XHJcblxyXG4gICAgfVxyXG4gIH0gKi9cclxuXHJcbiAgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2VcclxuICAgICAgPyB0aGlzLnBhZ2UucGFnZU51bWJlciA9PT0gdGhpcy5wYWdlLnRvdGFsQ291bnQgLSB0aGlzLnBhZ2UucGFnZVNpemVcclxuICAgICAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IDAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGF6eUxvYWRcclxuICAgKi9cclxuICAvL2ZpcnN0ID09PiBwYWdlLnBhZ2VOdW1iZXJcclxuICAvL3Jvd3MgPT0+IHBhZ2UucGFnZVNpemVcclxuICAvL3RoaXMucGFnZS5pdGVtcy5sZW5ndGggPT0+IHRvdGFsIGNvdW50XHJcblxyXG4gIG9wZW5OZXcoKSB7XHJcbiAgICBpZiAoIXRoaXMucHJldmVudEFkZEV2ZW50KSB7XHJcbiAgICAgIHRoaXMuX29wZW5Nb2RhbChDb21wb25lbnRfTW9kZXMuQ1JFQVRFLCBudWxsLCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHtcclxuICAgICAga2V5OiB1bmRlZmluZWQsXHJcbiAgICAgIGZpZWxkOiAnYWRkJyxcclxuICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKGV2ZW50OiBCdXR0b25DbGlja1Jlc3VsdCkge1xyXG5cclxuICAgIGxldCBpdGVtS2V5OiBhbnkgPSBldmVudC5zZWxlY3RLZXlPbmx5ID8gZXZlbnQua2V5IDogZXZlbnQua2V5W3RoaXMua2V5XTtcclxuXHJcbiAgICBjb25zdCBleGNsdWRlZCA9IFtcIk5vdGVzXCIsIFwiRmljaGllclwiXTtcclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MgJiYgIWV4Y2x1ZGVkLmluY2x1ZGVzKHRoaXMuYnVzaW5lc3NDbGFzcykpIHtcclxuICAgICAgdGhpcy5kaWFsb2dEYXRhU2VydmljZS5zZXREYXRhKHsgaWQ6IGl0ZW1LZXksIGNsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmZpZWxkID09ICdlZGl0Jykge1xyXG4gICAgICB0aGlzLl9lZGl0Um93KGl0ZW1LZXkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnZGVsZXRlJykge1xyXG4gICAgICB0aGlzLl9kZWxldGVSb3coaXRlbUtleSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdjb25zdWx0Jykge1xyXG4gICAgICB0aGlzLl9jb25zdWx0Um93KGl0ZW1LZXkpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAnZHVwbGljYXRlJykge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcIkJ1c3NpbmVzcyBjbGFzcyBpcyBub3QgZGVmaW5lZCAhXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9kdXBsaWNhdGVSb3coaXRlbUtleSk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChldmVudC5maWVsZCA9PSAndXBsb2FkJykge1xyXG4gICAgICBjb25zdCBjb25mID0ge1xyXG4gICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZSEud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZSEuaGVpZ2h0LFxyXG4gICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Nb2RhbFVwbG9hZEdyaWQodGhpcy5faW5qZWN0b3IsIGNvbmYpXHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ25vdGVzJykge1xyXG5cclxuICAgICAgY29uc3QgcmVmID0gYXdhaXQgb3Blbk5vdGVzTGlzdCh0aGlzLl9pbmplY3Rvcik7XHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2Rvd25sb2FkJykge1xyXG5cclxuICAgICAgdGhpcy5maWNoaWVyU2VydmljZS5nZXRCeUlkKGl0ZW1LZXkpLnN1YnNjcmliZShcclxuICAgICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZlRmlsZShkYXRhLmNvbnRlbnUsIGRhdGEubm9tRmljaGllckNvbXBsZXQhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmZpZWxkID09ICdpbmZvJykge1xyXG5cclxuICAgICAgdGhpcy5yZWNvcmRJbmZvUG9wdXBTZXJ2aWNlXHJcbiAgICAgICAgLmdldEluZm8odGhpcy5idXNpbmVzc0NsYXNzISwgaXRlbUtleSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uRXh0cmFMYXJnZTtcclxuICAgICAgICAgICAgbGV0IHRleHQgPVxyXG4gICAgICAgICAgICAgICdVSUQgOiAgJyArXHJcbiAgICAgICAgICAgICAgaXRlbUtleSArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIGJ5IDogICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuY3JlYXRpb25Vc2VyICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIGJ5IDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5tb2RpZlVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+Q3JlYXRlZCBvbiA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0ZVNhaXNpZSArXHJcbiAgICAgICAgICAgICAgJzxCUj5Nb2RpZmllZCBvbiA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0ZU1vZGlmO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgVWlkOiBpdGVtS2V5LFxyXG4gICAgICAgICAgICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRpb25Vc2VyOiBkYXRhLmNyZWF0aW9uVXNlcixcclxuICAgICAgICAgICAgICAgIG1vZGlmVXNlcjogZGF0YS5tb2RpZlVzZXIsXHJcbiAgICAgICAgICAgICAgICBkYXRlU2Fpc2llOiBkYXRhLmRhdGVTYWlzaWUsXHJcbiAgICAgICAgICAgICAgICBkYXRlTW9kaWY6IGRhdGEuZGF0ZU1vZGlmLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICc5MHJlbScsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnODByZW0nLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgICAgICAgICAgVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIGNvbmZcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXZlbnQuZmllbGQgPT0gJ2Zvcm0nKXtcclxuICAgICAgaWYoIXRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgICAge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGZvcm1EZXNjcmltaW5hdG9yVmFsdWU6IGFueSA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpXHJcbiAgICAgIHtcclxuICAgICAgICBmb3JtRGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZm9ybURlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAge1xyXG4gICAgICAgIGxldCBkaXNjcmltaW5hdG9yUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldERpc2NyaW1pbmF0b3IodGhpcy5idXNpbmVzc0NsYXNzLCBpdGVtS2V5KTtcclxuICAgICAgICBmb3JtRGVzY3JpbWluYXRvclZhbHVlID0gZGlzY3JpbWluYXRvclJlc3BvbnNlPy5kaXNjcmltaW5hdG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtb2RhbENvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBzb3VyY2VCdXNpbmVzc0NsYXNzOiB7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgZGlzY3JpbWluYXRvclZhbHVlOiBmb3JtRGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUhLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUhLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuRHluYW1pY0Zvcm1Nb2RhbENvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgbW9kYWxDb25maWcpXHJcblxyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICAgIH1lbHNlIGlmIChldmVudC5maWVsZCA9PSAnQWN0aW9uRVJQJykge1xyXG5cclxuICAgICAgbGV0IG9jY3VyZW5jZUluZm9zOiBvY2N1cmVuY2VJbmZvcyA9IHtcclxuICAgICAgICBidXNpbmVzc2NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MgPz8gJycsXHJcbiAgICAgICAgb2NjdXJlbmNlOiBpdGVtS2V5XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5BY3Rpb25MaXN0KHRoaXMuX2luamVjdG9yLCB7IG9jY3VyZW5jZUluZm9zOiBvY2N1cmVuY2VJbmZvcyB9KTtcclxuXHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgICBrZXk6IGV2ZW50LmtleSxcclxuICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXHJcbiAgICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVGaWxlKGJhc2U2NERhdGE6IGFueSwgZmlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGJhc2U2NERhdGEpO1xyXG4gICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xyXG5cclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG4gICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgYS5jbGljaygpO1xyXG5cclxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICBsb2FkKGV2ZW50OiB7IHJlcXVlc3Q6IElQYWdlZFJlcXVlc3Q7IGlzRm9yQ2FsZW5kYXI6IGJvb2xlYW4gfSkge1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xyXG4gICAgdGhpcy5fc2V0Zm9ybUVuZHBvaW50Qm9keSgpO1xyXG4gICAgdGhpcy5fbG9hZERTKGV2ZW50LmlzRm9yQ2FsZW5kYXIpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZEl0ZW1zQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfc2V0Zm9ybUVuZHBvaW50Qm9keSgpOiB2b2lkIHtcclxuICAgIGxldCBveDogYW55ID0gdGhpcy5fY2xvbmVQYWdlZFJlcXVlc3QodGhpcy5wYWdlZFJlcXVlc3QpO1xyXG4gICAgb3hbJ2dldEFsbERhdGEnXSA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludEJvZHkgPSBKU09OLnN0cmluZ2lmeShveCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TW9kZWxzKCkge1xyXG5cclxuICAgIHRoaXMucGFnZSA9IHtcclxuICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgIHBhZ2VOdW1iZXI6IDEsXHJcbiAgICAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICAgIHN1bW1hcmllczogW10sXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBhZ2VkUmVxdWVzdCA9IHtcclxuICAgICAgbWF4UmVzdWx0Q291bnQ6IDEwLFxyXG4gICAgICBza2lwQ291bnQ6IDAsXHJcbiAgICAgIHNvcnRpbmc6IFtdLFxyXG4gICAgICBrZXl3b3JkOiAnJyxcclxuICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgIGdldEFsbERhdGE6IGZhbHNlLFxyXG4gICAgICBzdW1tYXJpZXM6IFtdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWREUyhpc0ZvckNhbGVuZGVyOiBib29sZWFuID0gZmFsc2UpIHtcclxuXHJcbiAgICB0aGlzLnBhZ2UubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2UkLm5leHQodGhpcy5wYWdlKTtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICAuLi50aGlzLnBhZ2VkUmVxdWVzdCxcclxuICAgICAgZ2V0QWxsRGF0YTogaXNGb3JDYWxlbmRlcixcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuY3J1ZFNlcnZpY2UgIT0gbnVsbCAmJiB0aGlzLmNydWRTZXJ2aWNlICE9IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5nZXRBbGxQYWdlZCh0aGlzLnBhZ2VkUmVxdWVzdCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAodmFsdWU6IElQYWdlZFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wYWdlLFxyXG4gICAgICAgICAgICAgIGl0ZW1zIDogdmFsdWUuaXRlbXMsXHJcbiAgICAgICAgICAgICAgdG90YWxDb3VudCA6IHZhbHVlLnRvdGFsQ291bnQsXHJcbiAgICAgICAgICAgICAgc3VtbWFyaWVzIDogdmFsdWUuc3VtbWFyaWVzID8gdmFsdWUuc3VtbWFyaWVzIDogW10sXHJcbiAgICAgICAgICAgICAgZ3JvdXBzIDogdmFsdWUuZ3JvdXBzLFxyXG4gICAgICAgICAgICAgIHRvdGFsUGFnZXMgOiAodGhpcy5wYWdlLnRvdGFsQ291bnQgLSAgKHRoaXMucGFnZS50b3RhbENvdW50ICUgdGhpcy5wYWdlLnBhZ2VTaXplKSkgLyB0aGlzLnBhZ2UucGFnZVNpemUgKyAxLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd05vdGVCdXR0b24pIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWROb3Rlc0NvdW50cygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZih0aGlzLmlzQ3VzdG9tQ29sdW1uUmVuZGVyZWQgPT0gZmFsc2UgJiYgdmFsdWUuY3VzdG9tQ29sdW1uU2NoZW1hICYmIHZhbHVlLmN1c3RvbUNvbHVtblNjaGVtYS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLy8gQWRkIGN1c3RvbSBjb2x1bW5zIHRvIHRoZSBncmlkXHJcbiAgICAgICAgICAgICAgdmFsdWUuY3VzdG9tQ29sdW1uU2NoZW1hLmZvckVhY2goY2NzID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBjdXN0b21Db2x1bW5HcmlkOiBHcmlkQ29sdW1uID0ge1xyXG4gICAgICAgICAgICAgICAgICBoZWFkZXI6IGNjcy5jb2x1bW5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZDogY2NzLmNvbHVtbk5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcklucHV0VHlwZTogY2NzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tQ29sdW1uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5wdXNoKGN1c3RvbUNvbHVtbkdyaWQpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB0aGlzLmlzQ3VzdG9tQ29sdW1uUmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wYWdlJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMucGFnZS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWROb3Rlc0NvdW50cygpIHtcclxuICAgIGNvbnN0IGlkcyA9IHRoaXMucGFnZS5pdGVtcy5tYXAoeCA9PiB4W3RoaXMua2V5XSlcclxuICAgICAgLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAubWFwKHggPT4gU3RyaW5nKHgpKTtcclxuXHJcbiAgICBpZiAoIWlkcy5sZW5ndGggfHwgIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ub3Rlc1NlcnZpY2VcclxuICAgICAgLmdldE5vdGVzQ291bnRCeVJvd3ModGhpcy5idXNpbmVzc0NsYXNzLCBpZHMpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oXHJcbiAgICAgICAgICByZXN1bHQubWFwKHggPT4gW3gucm93VWlkLCB4LmNvdW50XSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnBhZ2UuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhpdGVtW3RoaXMua2V5XSk7XHJcbiAgICAgICAgICBjb25zdCBjb3VudCA9IG1hcC5nZXQoa2V5KTtcclxuICAgICAgICAgIChpdGVtIGFzIGFueSkubm90ZXNDb3VudCA9IHR5cGVvZiBjb3VudCA9PT0gJ251bWJlcicgPyBjb3VudCA6IDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZWRpdFJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5FRElULCBpdGVtS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RlbGV0ZVJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5ERUxFVEUsIGl0ZW1LZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29uc3VsdFJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZUFjdGlvbldpdGhBbGVydENoZWNrKENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULCBpdGVtS2V5KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZHVwbGljYXRlUm93KGl0ZW1LZXk6IGFueSkge1xyXG4gICAgdGhpcy5faGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2soQ29tcG9uZW50X01vZGVzLkRVUExJQ0FURSwgaXRlbUtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEVudGl0eUluZm8oKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5lbnRpdHlJbmZvID0gYXdhaXQgdGhpcy5fZW50aXR5Q29uZmlnU2VydmljZS5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuYnVzaW5lc3NDbGFzcyk7XHJcbiAgICAgIGlmICghdGhpcy5lbnRpdHlJbmZvKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBObyBlbnRpdHkgaW5mbyBmb3VuZCBmb3IgJHt0aGlzLmJ1c2luZXNzQ2xhc3N9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29wZW5Nb2RhbChtb2RlOiBzdHJpbmcsIGl0ZW1LZXk6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmNydWRTZXJ2aWNlIS5pc0R1cGxpY2F0ZSA9IG1vZGUgPT09IE1vZGVzLmR1cGxpY2F0ZTtcclxuICAgIGxldCB3b3JrZmxvd0VudGl0eUluZm9ybWF0aW9uOiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxyXG5cclxuICAgIGlmICh0aGlzLmJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmVudGl0eUluZm8gPSBhd2FpdCB0aGlzLl9lbnRpdHlDb25maWdTZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgICAgIHdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24gPSBhd2FpdCB0aGlzLmdldFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24odGhpcy5idXNpbmVzc0NsYXNzLCBpdGVtS2V5KTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZXJyb3Ipe1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZztcclxuXHJcbiAgICBpZiAodGhpcy5tb2RhbFNpemUgIT0gbnVsbCAmJiB0aGlzLm1vZGFsU2l6ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uZiA9IHtcclxuICAgICAgICBkYXRhOiB7IGlkOiBpdGVtS2V5LCBtb2RlOiBtb2RlLCBjdXN0b21EYXRhOiBkYXRhLCB3b3JrZmxvd0luZm9ybWF0aW9uOiB3b3JrZmxvd0VudGl0eUluZm9ybWF0aW9uLCBlbnRpdHlJbmZvOiB0aGlzLmVudGl0eUluZm8gfSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgdGVtcGxhdGVzOiB7XHJcbiAgICAgICAgICBmb290ZXI6IFRzaUZvcm1Nb2RhbEZvb3RlckNvbXBvbmVudCxcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25mID0ge1xyXG4gICAgICAgIGRhdGE6IHsgaWQ6IGl0ZW1LZXksIG1vZGU6IG1vZGUsIGN1c3RvbURhdGE6IGRhdGEsIHdvcmtmbG93SW5mb3JtYXRpb246IHdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24gfSxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMuY3VkQ29tcG9uZW50ID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuY3VkQ29tcG9uZW50ID0gVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUodGhpcy5jdWRDb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKHRoaXMuY3VkQ29tcG9uZW50LCBjb25mKTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbChjb25mKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKGNvbmY/OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChjb25mICYmIGNvbmY/LmRhdGE/LnJlZnJlc2hMaXN0KSB7XHJcbiAgICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9uZVBhZ2VkUmVxdWVzdChyZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0KTogSVBhZ2VkUmVxdWVzdCB7XHJcbiAgICBsZXQgY2xvbmU6IElQYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiByZXF1ZXN0Lm1heFJlc3VsdENvdW50LFxyXG4gICAgICBza2lwQ291bnQ6IHJlcXVlc3Quc2tpcENvdW50LFxyXG4gICAgICBzb3J0aW5nOiByZXF1ZXN0LnNvcnRpbmcsXHJcbiAgICAgIGtleXdvcmQ6IHJlcXVlc3Qua2V5d29yZCxcclxuICAgICAgZmlsdGVyczogcmVxdWVzdC5maWx0ZXJzLFxyXG4gICAgICBnZXRBbGxEYXRhOiByZXF1ZXN0LmdldEFsbERhdGEsXHJcbiAgICAgIHN1bW1hcmllczogcmVxdWVzdC5zdW1tYXJpZXMsXHJcbiAgICAgIGdyb3VwQnk6IHJlcXVlc3QuZ3JvdXBCeSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGRpc3BsYXlTZWFyY2hGaWVsZHMoKSB7XHJcbiAgICB0aGlzLnNob3dTZWFyY2hGaWVsZCA9ICF0aGlzLnNob3dTZWFyY2hGaWVsZDtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBjYWxlbmRlclxyXG4gIGhhbmRsZUNhbGVuZGFyRXZlbnRDbGljayhpdGVtOiBhbnkpIHtcclxuICAgIHN3aXRjaCAoaXRlbS5tb2RlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ6XHJcbiAgICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtLmlkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFOlxyXG4gICAgICAgIHRoaXMuX29wZW5Nb2RhbChDb21wb25lbnRfTW9kZXMuQ1JFQVRFLCBudWxsLHtpdGVtfSApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbXBvbmVudF9Nb2Rlcy5FRElUOlxyXG4gICAgICAgIHRoaXMuX2VkaXRSb3coaXRlbS5pZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdpbmZvJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ2luZm8nLCBrZXk6IGl0ZW0uaWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Rvd25sb2FkJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ2Rvd25sb2FkJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1cGxvYWQnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCh7IGZpZWxkOiAndXBsb2FkJywga2V5OiBpdGVtLmlkLCBzZWxlY3RLZXlPbmx5OiB0cnVlIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdub3Rlcyc6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKHsgZmllbGQ6ICdub3RlcycsIGtleTogaXRlbS5pZCwgc2VsZWN0S2V5T25seTogdHJ1ZSB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnQWN0aW9uRVJQJzpcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoeyBmaWVsZDogJ0FjdGlvbkVSUCcsIGtleTogaXRlbS5pZCwgc2VsZWN0S2V5T25seTogdHJ1ZSB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlTGlzdFZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dDYXJkVmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9jbGVhckdyb3VwQnkoKTtcclxuICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktYWxpZ24tanVzdGlmeVwiO1xyXG4gICAgdGhpcy5jdXJyZW50VG9vbHRpcCA9IFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2FsZW5kZXJWaWV3KCkge1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gIXRoaXMuc2hvd0NhbGVuZGVyVmlldztcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9jbGVhckdyb3VwQnkoKTtcclxuICAgIHRoaXMuX2xvYWREUyh0aGlzLnNob3dDYWxlbmRlclZpZXcpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktY2FsZW5kYXJcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FsZW5kZXJfdmlld1wiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDYXJkVmlldygpIHtcclxuICAgIHRoaXMuc2hvd0NhcmRWaWV3ID0gIXRoaXMuc2hvd0NhcmRWaWV3O1xyXG4gICAgdGhpcy5zaG93Q2FsZW5kZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dLYW5iYW5WaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9jbGVhckdyb3VwQnkoKTtcclxuICAgIC8vIHRoaXMuX2xvYWREUyh0aGlzLnNob3dDYXJkVmlldyk7XHJcbiAgICB0aGlzLmN1cnJlbnRJY29uID0gXCJwaSBwaS1pZC1jYXJkXCI7XHJcbiAgICB0aGlzLmN1cnJlbnRUb29sdGlwID0gXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2NhcmRfdmlld1wiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB0b2dnbGVLYW5iYW5WaWV3KCkge1xyXG4gICAgdGhpcy5zaG93S2FuYmFuVmlldyA9ICF0aGlzLnNob3dLYW5iYW5WaWV3O1xyXG4gICAgdGhpcy5zaG93Q2FyZFZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NhbGVuZGVyVmlldyA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dLYW5iYW5WaWV3KSB7XHJcbiAgICAgIC8vIEdyb3VwIHNlcnZlci1zaWRlIGJ5IHRoZSBlbnRpdHkncyBzdGF0dXMgY29sdW1uIHNvIGVhY2ggS2FuYmFuIGNvbHVtblxyXG4gICAgICAvLyBnZXRzIGl0cyBvd24gcGFnZSBhbmQgaXRzIG93biBhY2N1cmF0ZSAodW5wYWdlZCkgdG90YWwgY291bnQuXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RW50aXR5SW5mbygpO1xyXG4gICAgICB0aGlzLmdyb3VwQnkgPSB0aGlzLmVudGl0eUluZm8/LnN0YXR1c0NvbHVtbk5hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3VwQnkgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7IC4uLnRoaXMucGFnZWRSZXF1ZXN0LCBncm91cEJ5OiB0aGlzLmdyb3VwQnkgfTtcclxuICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgdGhpcy5jdXJyZW50SWNvbiA9IFwicGkgcGktdGgtbGFyZ2VcIjtcclxuICAgIHRoaXMuY3VycmVudFRvb2x0aXAgPSBcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3ZpZXdcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFyR3JvdXBCeSgpIHtcclxuICAgIHRoaXMuZ3JvdXBCeSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0geyAuLi50aGlzLnBhZ2VkUmVxdWVzdCwgZ3JvdXBCeTogdW5kZWZpbmVkIH07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Y0Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9wZW5OZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBoYW5kbGVBY3Rpb25WaWV3Q2xpY2soKSB7XHJcbiAgICB0aGlzLmNsaWNrQ291bnQrKztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuY2xpY2tDb3VudCkge1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgdGhpcy50b2dnbGVMaXN0VmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2FsZW5kZXJWaWV3KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy50b2dnbGVDYXJkVmlldygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHRoaXMudG9nZ2xlS2FuYmFuVmlldygpO1xyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aW9uV2l0aEFsZXJ0Q2hlY2sobW9kZTogQ29tcG9uZW50X01vZGVzLCBpdGVtS2V5OiBhbnkpIHtcclxuICAgIC8vIFRPRE8gQE1lZEFsaSB0byBiZSBmaXhlZFxyXG4gICAgaWYgKHRoaXMuYnVzaW5lc3NDbGFzcyAmJiB0aGlzLmJ1c2luZXNzQ2xhc3MgIT09IFwiTm90ZXNcIikge1xyXG4gICAgICB0aGlzLm5vdGVzU2VydmljZS5nZXRBbGVydE5vdGVzKGl0ZW1LZXk/LnRvU3RyaW5nKCksIHRoaXMuYnVzaW5lc3NDbGFzcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IE5vdGVzR3JvdXBlZEJ5VXNlclJlc3BvbnNlW10pID0+IHtcclxuICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2UubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFRzaU5vdGVzQXZlcnRpckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHsgZ3JvdXBlZE5vdGVzOiByZXNwb25zZSB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLlNtYWxsLndpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5TbWFsbC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgbm90ZXMgZm9yIGFsZXJ0JywgZXJyKTtcclxuICAgICAgICAgIHRoaXMuX29wZW5Nb2RhbChtb2RlLCBpdGVtS2V5LCB0aGlzLl9tb2RhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fb3Blbk1vZGFsKG1vZGUsIGl0ZW1LZXksIHRoaXMuX21vZGFsRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN0YXR1c0ZpbHRlckNoYW5nZWQoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dClcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0Q2xpY2tlZCgpe1xyXG4gICAgdGhpcy5vbkltcG9ydEZyb21PdXRsb29rQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuc2VhcmNoRmllbGRzXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZVNob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXQoKVxyXG4gIHtcclxuICAgIGlmKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IodGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZihkYXRhICE9IG51bGwgJiYgZGF0YS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdCA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXREaXNjcmltaW5hdG9yKGJ1c2luZXNzQ2xhc3M6IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8RGlzY3JpbWluYXRvclJlc3BvbnNlIHwgbnVsbD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGRpc2NyaW1pbmF0b3JSZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2Rpc2NyaW1pbmF0b3JTZXJ2aWNlLmdldERpc2NyaW1pbmF0b3IoYnVzaW5lc3NDbGFzcywgaWQpKVxyXG5cclxuICAgICAgaWYgKGRpc2NyaW1pbmF0b3JSZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yUmVzcG9uc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjYXRjaChlcnJvcilcclxuICAgIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICBcclxuICA8cC10b29sYmFyIHN0eWxlQ2xhc3M9XCJib3JkZXItcmFkaXVzLTcgbWItMSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBuby1wYWRcIiBcclxuICAgICpuZ0lmPVwiKHNob3dBZGRCdXR0b24gfHwgc2VhcmNoRmllbGRzIHx8IGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBzaG93UmVwb3J0aW5nXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYWRkX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLXBsdXNcIiBcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgXHJcbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PVwic2hhcmVkX3RzaV9jb21wb25lbnRfYWRkX3ZpZXdcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbk5ldygpXCI+XHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEZpZWxkc1wiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNob3dfc2VhcmNoX2ZpZWxkc19idXR0b25cIj5cclxuICAgICAgICAgIDxUc2ktQnV0dG9uIGljb249XCJwaSBwaS1zbGlkZXJzLWhcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X21lbnVcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSBob3ZlcjpzaGFkb3ctNiB7eyBzaG93U2VhcmNoRmllbGQgPyAncC1idXR0b24tc2Vjb25kYXJ5JyA6ICdwLWJ1dHRvbi1zdWNjZXNzJyB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5U2VhcmNoRmllbGRzKClcIj5cclxuICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJbXBvcnRGcm9tT3V0bG9va0J1dHRvblwiIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImltcG9ydEZyb21PdXRsb29rX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInBpIHBpLWVudmVsb3BlXCIgXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiIFxyXG4gICAgICAgICAgICB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X2ltcG9ydF9mcm9tX291dGxvb2tcIiBcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiIFxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbXBvcnRDbGlja2VkKClcIj4gXHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInRvZ2dsZV9hY3Rpb25zX3ZpZXdfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8cC1zcGxpdEJ1dHRvblxyXG4gICAgICAgICAgICBbaWNvbl09XCJjdXJyZW50SWNvblwiXHJcbiAgICAgICAgICAgIFttb2RlbF09XCJ2aWV3T3B0aW9uc1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUFjdGlvblZpZXdDbGljaygpXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24taWNvbi1vbmx5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tcHJpbWFyeSBoLTJyZW0gaG92ZXI6c2hhZG93LTZcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDwhLS0gPFRzaS1CdXR0b25cclxuICAgICAgICAgICAgW2ljb25dPVwiY3VycmVudEljb25cIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXByaW1hcnkgIGgtMnJlbSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uVmlld0NsaWNrKClcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiY3VycmVudFRvb2x0aXAgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgPC9Uc2ktQnV0dG9uPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGFwcC1yZXBvcnRpbmcgKm5nSWY9XCIoZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3MpXCIgXHJcbiAgICAgICAgICBbZm9ybUVuZHBvaW50XT1cImZvcm1FbmRwb2ludFwiIFxyXG4gICAgICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCJcclxuICAgICAgICAgIFtmb3JtRW5kcG9pbnRCb2R5XT1cImZvcm1FbmRwb2ludEJvZHlcIiBcclxuICAgICAgICAgIFtpc0Zvcm1FbmRwb2ludFBhZ2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgICAgICBbcmVwb3J0RGlzY3JpbWluYXRvcl09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICAgICAgKHJlZnJlc2hEYXRhKT1cInJlZnJlc2goJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZmlsdGVyc0h0bWxUZW1wbGF0ZV09XCJmaWx0ZXJzSHRtbFRlbXBsYXRlXCJcclxuICAgICAgICAgIFtwYWdlZFJlcXVlc3RdPVwicGFnZWRSZXF1ZXN0XCJcclxuICAgICAgICAgIFtjdWRDb21wb25lbnRdPVwiY3VkQ29tcG9uZW50XCIgXHJcbiAgICAgICAgICBbY29uZmlnTW9kZUJ1dHRvbklkXT1cImNvbmZpZ01vZGVCdXR0b25JZFwiXHJcbiAgICAgICAgICBbc2hvd05vdGVCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dBY3Rpb25CdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICA+PC9hcHAtcmVwb3J0aW5nPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPGRpdj5cclxuXHJcbiAgICA8VHNpLUdlbmVyaWMtR3JpZFxyXG4gICAgICBbZm9ybU5hbWVdPVwiZm9ybU5hbWVcIlxyXG4gICAgICBbY3J1ZFNlcnZpY2VdPVwiY3J1ZFNlcnZpY2VcIlxyXG4gICAgICBbc2hvd1NlYXJjaEZpZWxkXT1cInNob3dTZWFyY2hGaWVsZFwiXHJcbiAgICAgIFtzZWFyY2hGaWVsZHNdPVwic2VhcmNoRmllbGRzXCJcclxuICAgICAgW2Rlc2NyaW1pbmF0b3JWYWx1ZV09XCJkZXNjcmltaW5hdG9yVmFsdWVcIlxyXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXHJcbiAgICAgIFtwYWdlXT1cInBhZ2VcIlxyXG4gICAgICBbcGFnZWRSZXF1ZXN0XT1cInBhZ2VkUmVxdWVzdFwiXHJcbiAgICAgIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiXHJcbiAgICAgIFtzaG93SGVhZGVyRmlsdGVyc109XCJzaG93SGVhZGVyRmlsdGVyc1wiXHJcbiAgICAgIFsoZmlsdGVyc0h0bWxUZW1wbGF0ZSldPVwiZmlsdGVyc0h0bWxUZW1wbGF0ZVwiXHJcbiAgICAgIFtwcmVzZW50YXRpb25TZXR0aW5nc109XCJwcmVzZW50YXRpb25TZXR0aW5nc1wiXHJcbiAgICAgIChsb2FkKT1cImxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWxlY3RLZXlPbmx5XT1cInNlbGVjdEtleU9ubHlcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgW2tleV09XCJrZXlcIlxyXG4gICAgICBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgICAoc2VsZWN0ZWRJdGVtc0NoYW5nZSk9XCJvblNlbGVjdGVkSXRlbXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQpPVwic2VhcmNoRmllbGRWYWx1ZUNoYW5nZXMoJGV2ZW50KVwiXHJcbiAgICAgIFtzZWFyY2hPbkluaXRdPVwic2VhcmNoT25Jbml0XCJcclxuICAgICAgW3Nob3dFeHBvcnRCdXR0b25dPVwic2hvd0V4cG9ydEJ1dHRvblwiXHJcbiAgICAgIFtzaG93R2xvYmFsU2VhcmNoXT1cInNob3dHbG9iYWxTZWFyY2hcIlxyXG4gICAgICBbaXNTZWFyY2hCdXR0b25EaXNhYmxlZF09XCJpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXCJcclxuICAgICAgW3Nob3dDYWxlbmRlclZpZXddPVwic2hvd0NhbGVuZGVyVmlld1wiXHJcbiAgICAgIFtzaG93Q2FyZFZpZXddPVwic2hvd0NhcmRWaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3XT1cInNob3dLYW5iYW5WaWV3XCJcclxuICAgICAgW3Nob3dLYW5iYW5WaWV3T2ZXb3JrRmxvd0V0YXRdPVwic2hvd0thbmJhblZpZXdPZldvcmtGbG93RXRhdFwiXHJcbiAgICAgIFtidXNpbmVzc0NsYXNzXT1cImJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICBbZ3JvdXBCeV09XCJncm91cEJ5XCJcclxuICAgICAgW2N1ZENvbXBvbmVudF09XCJjdWRDb21wb25lbnRcIlxyXG4gICAgICBbbW9kYWxTaXplXT1cIm1vZGFsU2l6ZVwiIFxyXG4gICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICBbcGFnZSRdPVwicGFnZSRcIlxyXG4gICAgICBbZW50aXR5SW5mb109XCJlbnRpdHlJbmZvXCJcclxuICAgICAgKGNhbGVuZGFyRXZlbnRDbGljayk9XCJoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgIChzdGF0dXNGaWx0ZXJDaGFuZ2VkKT1cIm9uU3RhdHVzRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgW3Nob3dOb3RlQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICBbc2hvd0FjdGlvbkJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgW3NpemluZ01vZGVdPVwic2l6aW5nTW9kZVwiXHJcbiAgICA+PC9Uc2ktR2VuZXJpYy1HcmlkPlxyXG4gIDwvZGl2PlxyXG4gIFxyXG48L2Rpdj5cclxuIl19