@eqproject/eqp-dynamic-module 2.8.28 → 2.8.30

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.
@@ -62,6 +62,7 @@ export class ListViewFormRecordComponent {
62
62
  // TMW-PICKER
63
63
  this.modes = ModeEnum;
64
64
  this.timeType = TimeTypeEnum;
65
+ this.libSingleLoaded = true;
65
66
  // add new
66
67
  this.onAddViewEditRecord = new EventEmitter();
67
68
  this.onDeleteRecord = new EventEmitter();
@@ -778,12 +779,29 @@ export class ListViewFormRecordComponent {
778
779
  onFireTrigger(ev) {
779
780
  this.fireTrigger.emit(ev);
780
781
  }
782
+ reloadHTMLReadableValues(answerId) {
783
+ // preparo i dati del record
784
+ var dynamicRecordParams = [
785
+ {
786
+ ParamName: "id",
787
+ ParamValue: answerId,
788
+ ParamType: ParamTypeEnum["Query param"],
789
+ },
790
+ ];
791
+ this.utilityHelperService.RunEndPointCall(this.endPointConfiguration.Records.GetByIDEndPoint, dynamicRecordParams, (res) => {
792
+ this.panels.find(x => x.record.ID == answerId).record.HTMLreadableValues = res.HTMLreadableValues;
793
+ });
794
+ this.libSingleLoaded = false;
795
+ setTimeout(() => {
796
+ this.libSingleLoaded = true;
797
+ }, 1000);
798
+ }
781
799
  }
782
800
  ListViewFormRecordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, deps: [{ token: i1.UtilityHelperService }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialog }, { token: i3.Router }, { token: i4.dbDateService }, { token: i5.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
783
- ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n<hlist-form-record\r\nclass=\"dynamic-module-hlist\"\r\n[formID]=\"formID\"\r\n\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n[configurations]=\"configurations\"\r\n[externalButtons]=\"externalButtons\"\r\n>\r\n</hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [isDuplicate]=\"isDuplicating\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.EqpTableComponent, selector: "eqp-table" }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "onlyView", "isDuplicate", "inConfig", "showAllFields", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form"] }] });
801
+ ListViewFormRecordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ListViewFormRecordComponent, selector: "list-view-form-record", inputs: { configurations: "configurations", compileConfigurations: "compileConfigurations", endPointConfiguration: "endPointConfiguration", userID: "userID", formID: "formID", orgaID: "orgaID", form: "form", defaultListViewFunction: "defaultListViewFunction", externalButtons: "externalButtons", onlyView: "onlyView", records: "records", highlightFilter: "highlightFilter", QueryEditorComponent: "QueryEditorComponent" }, outputs: { onAddViewEditRecord: "onAddViewEditRecord", onDeleteRecord: "onDeleteRecord", saveRecordEvent: "saveRecordEvent", afterSaveRecordEvent: "afterSaveRecordEvent", dragStarted: "dragStarted", dragReleased: "dragReleased", out: "out", fireTrigger: "fireTrigger", clickDragIndicator: "clickDragIndicator" }, viewQueries: [{ propertyName: "tableRecords", first: true, predicate: ["tableRecords"], descendants: true, static: true }, { propertyName: "openAddDialog", first: true, predicate: ["openAddDialog"], descendants: true }, { propertyName: "openGraphDialog", first: true, predicate: ["openGraphDialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n<hlist-form-record\r\nclass=\"dynamic-module-hlist\"\r\n[formID]=\"formID\"\r\n\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n[configurations]=\"configurations\"\r\n[externalButtons]=\"externalButtons\"\r\n>\r\n</hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [isDuplicate]=\"isDuplicating\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"], dependencies: [{ kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i7.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.EqpTableComponent, selector: "eqp-table" }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i13.HListFormRecordComponent, selector: "hlist-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.AddFormRecordComponent, selector: "add-form-record", inputs: ["configurations", "endPointConfiguration", "userID", "orgaID", "formID", "form", "record", "onlyView", "isDuplicate", "inConfig", "showAllFields", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i15.SingleRecordComponent, selector: "lib-single-record", inputs: ["endPointConfiguration", "record", "pageState", "userID", "form", "showBackButton", "outCompileConfigurations", "onlyView", "QueryEditorComponent"], outputs: ["saveRecordEvent", "afterSaveRecordEvent", "out", "fireTrigger"] }, { kind: "component", type: i16.GraphsComponent, selector: "graphs", inputs: ["configurations", "endPointConfiguration", "userID", "formID", "form"] }] });
784
802
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ListViewFormRecordComponent, decorators: [{
785
803
  type: Component,
786
- args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n<hlist-form-record\r\nclass=\"dynamic-module-hlist\"\r\n[formID]=\"formID\"\r\n\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n[configurations]=\"configurations\"\r\n[externalButtons]=\"externalButtons\"\r\n>\r\n</hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [isDuplicate]=\"isDuplicating\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"] }]
804
+ args: [{ selector: "list-view-form-record", template: "<mat-card class=\"list-view-form-record\">\r\n <mat-card-header *ngIf=\"showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n <mat-card-title *ngIf=\"showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n <button \r\n *ngIf=\"isListView\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openTabellar()\">\r\n <mat-icon>table</mat-icon>\r\n <span style=\"margin-left: 10px\">Tabellare</span>\r\n </button>\r\n\r\n <button \r\n *ngIf=\"isTabellar\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openListView()\">\r\n <mat-icon>list</mat-icon>\r\n <span style=\"margin-left: 10px\">Lista</span>\r\n </button> \r\n\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAll()\"\r\n *ngIf=\"isListView\">\r\n <mat-icon *ngIf=\"!isFullOpened\">expand_more</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n <mat-icon *ngIf=\"isFullOpened && isListView\">expand_less</mat-icon>\r\n <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n </button> \r\n <button \r\n *ngIf=\"defaultListActions.graphs\"\r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openGraphs()\">\r\n <mat-icon>pie_chart</mat-icon>\r\n <span style=\"margin-left: 10px\">Grafici</span>\r\n </button>\r\n <button \r\n *ngIf=\"defaultListActions.add\"\r\n class=\"btn btn-primary\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"openAddPopup()\">\r\n <mat-icon>add</mat-icon>\r\n <span style=\"margin-left: 10px\">Aggiungi</span>\r\n </button> \r\n </mat-card-actions>\r\n </mat-card-header>\r\n\r\n \r\n <mat-card-content>\r\n\r\n <div *ngIf=\"isTabellar\">\r\n \r\n<hlist-form-record\r\nclass=\"dynamic-module-hlist\"\r\n[formID]=\"formID\"\r\n\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n[configurations]=\"configurations\"\r\n[externalButtons]=\"externalButtons\"\r\n>\r\n</hlist-form-record>\r\n\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n [(ngModelInput)]=\"minperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div>\r\n <div class=\"col-sm-12 col-md-3\">\r\n <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n [(ngModelInput)]=\"maxperiod\"\r\n [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n </tmw-datetimepicker>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <eqp-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n </eqp-select>\r\n </div> \r\n <div class=\"col-sm-12 col-md-3 mt-2\">\r\n <button\r\n [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n class=\"btn btn-graph-generate button-next me-2\"\r\n mat-raised-button\r\n color=\"primary\"\r\n (click)=\"generateTabellar()\"\r\n >\r\n Genera\r\n </button>\r\n </div> \r\n </div> -->\r\n\r\n <eqp-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></eqp-table>\r\n </div>\r\n\r\n\r\n\r\n <mat-accordion #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n [expanded]=\"panel.isOpen\"\r\n [disabled]=\"1\" \r\n [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n >\r\n <mat-expansion-panel-header \r\n (click)=\"togglePanel(panel, panel.record)\">\r\n <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title>\r\n <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n {{ !showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n </mat-panel-title> \r\n <!--#region BOTTONI PER LE AZIONI -->\r\n <mat-panel-description>\r\n <button *ngFor=\"let button of buttons\" \r\n mat-icon-button \r\n id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n class=\"record-icon {{button.extraClass}}\" \r\n [matTooltip]=\"button.text\"\r\n [hidden]=\"button.icon == 'file_copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n (click)=\"button.fn(panel,i,$event)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button>\r\n <button *ngFor=\"let button of externalButtons\" \r\n mat-icon-button \r\n class=\"record-icon {{button.extraClass}}\"\r\n [matTooltip]=\"button.text\"\r\n (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n <mat-icon>{{button.icon}}</mat-icon>\r\n </button> \r\n <span class=\"example-spacer\"></span>\r\n \r\n </mat-panel-description>\r\n <!--#endregion BOTTONI PER LE AZIONI -->\r\n </mat-expansion-panel-header>\r\n\r\n <!-- #region CONTENUTO -->\r\n <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n <lib-single-record\r\n *ngIf=\"libSingleLoaded\"\r\n [onlyView]=\"onlyView\"\r\n [record] = \"panel.record\" \r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n [form]=\"form\"\r\n [userID]=\"userID\"\r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [outCompileConfigurations]=\"outCompileConfigurations\"\r\n [pageState]=\"panel.pageState\"\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n\r\n </lib-single-record>\r\n </ng-container>\r\n <!--#endregion CONTENUTO -->\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n\r\n </mat-card-content>\r\n <mat-card-footer>\r\n </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n <mat-card-content>\r\n\r\n <add-form-record\r\n class=\"dynamic-module-compile\"\r\n [formID]=\"formID\"\r\n [orgaID]=\"orgaID\"\r\n [onlyView]=\"false\"\r\n [record]=\"selectedRecord\"\r\n [isDuplicate]=\"isDuplicating\"\r\n \r\n [QueryEditorComponent]=\"QueryEditorComponent\"\r\n [endPointConfiguration]=\"endPointConfiguration\"\r\n [userID]=\"userID\"\r\n\r\n [configurations]=\"compileConfigurations\"\r\n\r\n (out)=\"onExternalComponentOut($event)\"\r\n (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n (fireTrigger)=\"onFireTrigger($event)\"\r\n >\r\n </add-form-record>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n \r\n <mat-card-header class=\"align-items-center justify-content-between\">\r\n <mat-card-title>\r\n <div class=\"row eqp-dynamic-module-title graph-header\">\r\n <div class=\"col-md-12\">\r\n <span>Grafico {{ form.Name }} </span>\r\n </div>\r\n </div>\r\n </mat-card-title>\r\n <mat-card-actions>\r\n <button \r\n class=\"btn btn-primary mr-2\" \r\n mat-raised-button \r\n color=\"primary\" \r\n type=\"button\"\r\n (click)=\"closeGraphs()\">\r\n <span class=\"material-icons\">\r\n arrow_back\r\n </span>\r\n <span style=\"margin-left: 10px\">Indietro</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card-header>\r\n <mat-card-content>\r\n\r\n <graphs\r\n [formID]=\"formID\"\r\n [userID]=\"userID\"\r\n [configurations] = \"outCompileConfigurations\"\r\n [endPointConfiguration] = \"endPointConfiguration\"\r\n >\r\n </graphs>\r\n\r\n </mat-card-content>\r\n </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n", styles: ["::ng-deep .error-color{color:var(--danger)}::ng-deep .success-color{color:var(--success)}::ng-deep .df-list-view-accordion .mat-expansion-panel-header-description{flex-grow:0!important}::ng-deep .mat-expansion-panel-header[aria-disabled=true]{color:#0000008a}.drag-icon{cursor:move;margin-right:10px}.click-icon{cursor:pointer;margin-right:10px}table{border-collapse:collapse}table td{border:1px solid black}table th{border:1px solid black;background-color:gray;color:#fff}\n"] }]
787
805
  }], ctorParameters: function () { return [{ type: i1.UtilityHelperService }, { type: i0.ChangeDetectorRef }, { type: i2.MatDialog }, { type: i3.Router }, { type: i4.dbDateService }, { type: i5.DatePipe }]; }, propDecorators: { configurations: [{
788
806
  type: Input
789
807
  }], compileConfigurations: [{
@@ -838,4 +856,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
838
856
  }], clickDragIndicator: [{
839
857
  type: Output
840
858
  }] } });
841
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7QUFRMUQsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRzlFLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQnBE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O2dCQWlCdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVFJLGFBQWE7c0JBQTNELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHSSxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkF1QnJDLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxHQUFHO3NCQUFaLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgTnVtYmVyQ29sdW1uUGlwZSxcclxuICBUeXBlQ29sdW1uXHJcbn0gZnJvbSBcIkBlcXByb2plY3QvZXFwLXRhYmxlXCI7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluUmVjb3JkLCBSZWNvcmQsIFJlY29yZEJ1dHRvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gXCIuLy4uLy4uLy4uLy4uLy9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBFbmRQb2ludENvbmZpZ3VyYXRpb24sXHJcbiAgRW5kUG9pbnREYXRhUGFyYW1zLFxyXG4gIFBhcmFtVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IGRiRGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZGItZGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEYXRlRmllbGQsIERhdGVUaW1lVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2RhdGVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IExhYmVsRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9sYWJlbEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IE1vZGVFbnVtLCBUaW1lVHlwZUVudW0gfSBmcm9tICd0bXctcGlja2VyJztcclxuaW1wb3J0IHsgVGFiZWxsYXJGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ncmFwaC5tb2RlbCc7XHJcbmltcG9ydCB7IF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XHJcblxyXG50eXBlIFBhbmVsID0ge1xyXG4gIHJlY29yZDogUmVjb3JkLFxyXG4gIGlzT3BlbjogYm9vbGVhbixcclxuICBwYWdlU3RhdGU6IHN0cmluZyxcclxuICBoaWdobGlnaHRlZDogYm9vbGVhblxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCJsaXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdFZpZXdGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIFxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBjb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIG91dENvbXBpbGVDb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3JnYUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7XHJcbiAgQElucHV0KCkgZGVmYXVsdExpc3RWaWV3RnVuY3Rpb246IEZ1bmN0aW9uID0gbnVsbDtcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIEBJbnB1dCgpIG9ubHlWaWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByZWNvcmRzOiBBcnJheTxEeW5SZWNvcmQ+ID0gbnVsbDtcclxuICBASW5wdXQoKSBoaWdobGlnaHRGaWx0ZXI6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KCkgUXVlcnlFZGl0b3JDb21wb25lbnQ6IER5bmFtaWNMb2FkZXJEaXJlY3RpdmVEYXRhOyAvLyBMJ2ludGVybyBjb21wb25lbnRlIHF1ZXJ5IEVkaXRvclxyXG5cclxuICBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgLy8gdmFsdWVzOiBBcnJheTxSZWNvcmQ+O1xyXG4gIHRlc3QgPSBmYWxzZTtcclxuICBpc0R1cGxpY2F0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRSZWNvcmQ6IGFueTsgLy8gUmVjb3JkIHwgc3RyaW5nO1xyXG4gIGxvYWRlcjogYm9vbGVhbjtcclxuICBsb2FkZWRmb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFuZWxPcGVuU3RhdGU6IGJvb2xlYW5bXSA9IG5ldyBBcnJheTxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICB2aXN1YWxpenphQ29udGVudXRvID0gZmFsc2U7XHJcbiAgbW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZVJlY29yZHNcIiwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVSZWNvcmRzOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgY29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgdGFiZWxsYXJDb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBwYW5lbHM6IEFycmF5PFBhbmVsPlxyXG4gIGJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG4gIHBvcHVwTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJvcGVuQWRkRGlhbG9nXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBvcGVuQWRkRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5BZGREaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm9wZW5HcmFwaERpYWxvZ1wiLCB7IHN0YXRpYzogZmFsc2UgfSkgb3BlbkdyYXBoRGlhbG9nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG9wZW5HcmFwaERpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICB0b2RvTGlzdDogYW55O1xyXG4gIGlzRnVsbE9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1RhYmVsbGFyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNMaXN0VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdGFiZWxsYXJDb25kaXRpb25Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbWlucGVyaW9kOiBEYXRlO1xyXG4gIG1heHBlcmlvZDogRGF0ZTtcclxuXHJcbiAgdGFiZWxsYXJGaWVsZHM6IEFycmF5PFRhYmVsbGFyRmllbGQ+ID0gbmV3IEFycmF5PFRhYmVsbGFyRmllbGQ+KCk7XHJcbiAgc2VsZWN0ZWRUYWJlbGxhckZpZWxkczogQXJyYXk8VGFiZWxsYXJGaWVsZD47XHJcbiAgdGFiZWxsYXJWYWx1ZXM6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuICAvLyBUTVctUElDS0VSXHJcbiAgbW9kZXMgPSBNb2RlRW51bVxyXG4gIHRpbWVUeXBlID0gVGltZVR5cGVFbnVtXHJcbiAgbW9kZTogTW9kZUVudW07XHJcblxyXG4gIC8vIGFkZCBuZXdcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHtcclxuICAgIHJlY29yZDogUmVjb3JkO1xyXG4gICAgb25seVZpZXc6IGJvb2xlYW47XHJcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdSZWxlYXNlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRHJhZ0luZGljYXRvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLy8jcmVnaW9uIGNvbnN0cnVjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGRiRGF0ZVNlcnZpY2U6IGRiRGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZVxyXG4gICkgeyB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbnN0cnVjdG9yXHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uSW5pdFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5wYW5lbE9wZW5TdGF0ZSA9IFtcclxuICAgIC8vICAgLi4uQXJyYXkodGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMubGVuZ3RoICsgMSksXHJcbiAgICAvLyBdLm1hcCgoKSA9PiBmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcblxyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcoXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5wcmVmaWx0ZXJQYXJhbXMsXHJcbiAgICApO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwibGlzdC12aWV3IC0gb3V0Y29tcGlsZUNvbmZpZ3VyYXRpb25zIFwiLCB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucyk7XHJcbiAgICB0aGlzLmdldEZvcm1CeUlEKCk7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkluaXRcclxuXHJcbiAgLy8jcmVnaW9uIG5nT25DaGFuZ2VzXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCduZ09uQ2hhbmdlcycsIGNoYW5nZXMpO1xyXG5cclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uZmlyc3RDaGFuZ2UgPT0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMucmVsb2FkVGFibGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBuZ09uQ2hhbmdlc1xyXG5cclxuICAvLyNyZWdpb24gb25PcGVuaW5nXHJcbiAgLyoqXHJcbiAgICogZnVuemlvbmUgZGkgYXBlcnR1cmEgZGVsbCdhY2NvcmRpb25cclxuICAgKiBAcGFyYW0gaW5kaWNlIFxyXG4gICAqL1xyXG4gIG9uT3BlbmluZyhpbmRpY2U6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaW5kaWNlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25PcGVuaW5nXHJcblxyXG4gIGNvbmZpZ3VyZUxpc3R2aWV3QnV0dG9ucygpIHtcclxuICAgIHRoaXMuYnV0dG9ucyA9IFtcclxuXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJ2aXNpYmlsaXR5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ICYmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0IHx8IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUpLFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcInZpZXctYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudmlld1JlY29yZChwYW5lbCwgdHJ1ZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImVkaXRcIixcclxuICAgICAgICBcInRleHRcIjogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0LFxyXG4gICAgICAgIFwiZXh0cmFDbGFzc1wiOiBcImVkaXQtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuRWRpdFJlY29yZChwYW5lbCwgZmFsc2UsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICBcInRleHRcIjogXCJEdXBsaWNhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmR1cGxpY2F0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkdXBsaWNhdGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZHVwbGljYXRlUmVjb3JkKHBhbmVsLCBmYWxzZSwgaSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWNvblwiOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIkNhbmNlbGxhXCIsXHJcbiAgICAgICAgXCJ2aXNpYmxlXCI6IHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmRlbGV0ZSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJkZWxldGUtYnV0dG9uLWljb25cIixcclxuICAgICAgICBcImZuXCI6IChwYW5lbCwgaSwgZXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlUmVjb3JkKHBhbmVsLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgXVxyXG4gICAgdGhpcy5idXR0b25zID0gdGhpcy5idXR0b25zLmNvbmNhdCh0aGlzLmV4dGVybmFsQnV0dG9ucykuZmlsdGVyKHggPT4geC52aXNpYmxlKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuVGFiZWxsYXJcclxuICBvcGVuVGFiZWxsYXIoKXtcclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1RhYmVsbGFyID0gdHJ1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5UYWJlbGxhclxyXG5cclxuICAvLyNyZWdpb24gb3Blbkxpc3RWaWV3XHJcbiAgb3Blbkxpc3RWaWV3KCl7XHJcbiAgICB0aGlzLmlzVGFiZWxsYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMaXN0VmlldyA9IHRydWU7XHJcbiAgfSAgXHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5MaXN0Vmlld1xyXG5cclxuICAvLyNyZWdpb24gZ2V0Rm9ybUJ5SURcclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJnZXQgRk9STVwiLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5sb2FkZWRmb3JtID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZmlndXJlQ29sdW1ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4geyB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldEZvcm1CeUlEXHJcblxyXG4gIC8vI3JlZ2lvbiBjb25maWd1cmVDb2x1bW5zXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjb25maWd1cmFyZSBsZSBjb2xvbm5lIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNvbmZpZ3VyZUNvbHVtbnMoKSB7XHJcblxyXG4gICAgLy8gdGhpcy5jb25maWd1cmVUYWJlbGxhckNvbHVtbnMoKTtcclxuXHJcbiAgICAvLyB0aGlzLmNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCk7XHJcbiAgICAvLyB0aGlzLmNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpO1xyXG4gICAgaWYgKHRoaXMucmVjb3JkcyA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ1JlY29yZHMgRXhpc3RzJywgdGhpcy5yZWNvcmRzKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheSh0aGlzLnJlY29yZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gY29uZmlndXJlQ29sdW1uc1xyXG5cclxuICAvLyNyZWdpb24gY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zXHJcbiAgLy8gcHJpdmF0ZSBjb25maWd1cmVUYWJlbGxhckNvbHVtbnMoKXtcclxuXHJcbiAgLy8gICAgIC8qKlxyXG4gIC8vICAgICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIHBlciBsYSBlcXAtdGFibGUuXHJcbiAgLy8gICAgICAqIEluZGl2aWR1YSBpIEJhc2VGaWVsZCBkYSBtb3N0cmFyZSBlIGxpIHVzYSBwZXIgY3JlYXJlIGxlIENvbmZpZ0NvbHVtbi5cclxuICAvLyAgICAgICogTGUgY29sb25uZSB2ZW5nb25vIGNyZWF0ZSBwZXIgaSBCYXNlRmllbGQgY29uIGlsIGZsYWcgSW5MaXN0VmlldyBhIFRSVUVcclxuICAvLyAgICAgICogb3BwdXJlLCBuZWwgY2FzbyBub24gc2lhbm8gc3RhdGkgc3BlY2lmaWNhdGkgaSBjYW1waSBkYSB2aXN1YWxpenphcmUsXHJcbiAgLy8gICAgICAqIHNlbGV6aW9uYSBpIHByaW1pIDYuXHJcbiAgLy8gICAgICAqL1xyXG5cclxuICAvLyAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzJywgdGhpcy5mb3JtKTtcclxuICAgIFxyXG4gIC8vICAgICAgIHZhciBmaWVsZHNGb3JDb2x1bW5zOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gIC8vICAgICAgIGlmICh0aGlzLmZvcm0uRmllbGRzLmZpbmQoKGYpID0+IGYuSW5MaXN0VmlldykpIHtcclxuICAvLyAgICAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5Jbkxpc3RWaWV3KTtcclxuICAvLyAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgZmllbGRzRm9yQ29sdW1ucyA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKChmKSA9PiBmLk9yZGluYWxQb3NpdGlvbiA8IDYpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgICBmaWVsZHNGb3JDb2x1bW5zXHJcbiAgLy8gICAgICAgICAuc29ydCgoYSwgYikgPT5cclxuICAvLyAgICAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gIC8vICAgICAgICAgICAgID8gMVxyXG4gIC8vICAgICAgICAgICAgIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvblxyXG4gIC8vICAgICAgICAgICAgID8gLTFcclxuICAvLyAgICAgICAgICAgICA6IDBcclxuICAvLyAgICAgICAgIClcclxuICAvLyAgICAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gIC8vICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh0aGlzLmNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkKSk7XHJcbiAgLy8gICAgICAgICB9KTtcclxuXHJcbiAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcIkZJTkFMIENPTFVNU05cIiwgdGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgLy8gfVxyXG4gIC8vI2VuZHJlZ2lvbiBjb25maWd1cmVUYWJlbGxhckNvbHVtbnNcclxuXHJcbiAgLy8jcmVnaW9uIGNyZWF0ZUZpZWxkQ29sdW1uXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbCdvZ2dldHRvIENvbmZpZ3VyZUNvbHVtbiBjaGUgcmFwcHJlc2VudGEgaWwgQmFzZUZpZWxkIHBhc3NhdG8gaW4gaW5wdXQuXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBwZXIgY3VpIGNyZWFyZSBsYSBjb2xvbm5hIG5lbGxhIGVxcC10YWJsZVxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuYSBDb25maWdDb2x1bW4gcGVyIGxhIGVxcC10YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRDb2x1bW4oZmllbGQ6IEJhc2VGaWVsZCk6IENvbmZpZ0NvbHVtbiB7XHJcbiAgICB2YXIgY29sdW1uOiBDb25maWdDb2x1bW4gPSB7IGtleTogZmllbGQuTmFtZSwgZGlzcGxheTogZmllbGQuTGFiZWwgfTtcclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkJvb2xlYW5vXCJdOlxyXG4gICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5Cb29sZWFuO1xyXG4gICAgICAgIGNvbHVtbi5ib29sZWFuVmFsdWVzID0ge1xyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uc3R5bGVzID0ge1xyXG4gICAgICAgICAgZmxleDogXCIwIDAgNyVcIixcclxuICAgICAgICAgIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl06XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSAhPSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBvcmFyaW9cIl1cclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5EYXRlO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJEYXRhIGUgb3JhXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IFwiZGQvTU0veXl5eSBISDptbVwiO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXRcclxuICAgICAgICAgICAgICA/IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXQucmVwbGFjZShcIkREXCIsIFwiZGRcIilcclxuICAgICAgICAgICAgICA6IFwiZGQvTU0veXl5eVwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuQ1VSUkVOQ1k7XHJcbiAgICAgICAgICBjb2x1bW4uY3VycmVuY3lQaXBlQ29kZSA9IChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIShmaWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcikge1xyXG4gICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkRFQ0lNQUw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcbiAgICAgXHJcbiAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRXRpY2hldHRhXCJdOlxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHsgcmV0dXJuIChmaWVsZCBhcyBMYWJlbEZpZWxkKS5FdGljaGV0dGE7IH07XHJcbiAgICAgIGJyZWFrOyAgICAgICAgXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTpcclxuXHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50W2ZpZWxkLk5hbWVdIHx8IGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoaykgPT5cclxuICAgICAgICAgICAgICAgICAgZWxlbWVudFtmaWVsZC5OYW1lXS5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba11cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMgPT0gbnVsbCl7IFxyXG5cclxuICAgICAgICAgICAgICB2YXIgdnMgPSAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlU3RyaW5nO1xyXG4gICAgICAgICAgICAgIGlmICh2cyAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gdnMuc3BsaXQoXCI7XCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gb3Auc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWVzWzFdID09IGVsZW1lbnRbZmllbGQuTmFtZV0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kdmFsdWUgPSB2YWx1ZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kdmFsdWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykuZmluZChcclxuICAgICAgICAgICAgICAoaykgPT5cclxuICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkxvb2t1cFwiXTpcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH0gIFxyXG4gIC8vI2VuZHJlZ2lvbiBjcmVhdGVGaWVsZENvbHVtblxyXG5cclxuICAvLyNyZWdpb24gZ2V0UmVjb3Jkc0J5Rm9ybUlEXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByZWN1cGVyYXJlIHR1dHRpIGkgcmVjb3JkIHNhbHZhdGkgcGVyIHVuYSBwYXJ0aWNvbGFyZSBGb3JtLlxyXG4gICAqIExhIGNoaWFtYXRhIHZpZW5lIGVmZmV0dHVhdGEgc29sbyBzZSDDqCBzdGF0byBjb25maWd1cmF0byBsJ2VuZFBvaW50IGRhIHVzYXJlLlxyXG4gICAqIExhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIGRldmUgZXNzZXJlIHVuIGFycmF5IGRpIG9nZ2V0dGkgZGkgdGlwbyBcIkR5blJlY29yZFwiXHJcbiAgICogYSBwYXJ0aXJlIGRhaSBxdWFsaSB2ZW5nb25vIHJpY3JlYXRpIGkgUmVjb3JkIHVzYXRpIG5lbCBjbGllbnQuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0UmVjb3Jkc0J5Rm9ybUlEKCkge1xyXG4gICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIG5vbiBjb25vc2NvIGwndXRlbnRlXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnR2V0QnlGb3JtSURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnVzZXJJRCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgLy8gc2UgY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBsZXQgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlVzZXJJRFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdHZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50JywgcmVzKVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUFuc3dlcnNBcnJheShyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjb250cm9sbGFyZSBsZSBjb25maWd1cmF6aW9uaSBkZWxsJ2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0UmVjb3Jkc0J5Rm9ybUlEXHJcblxyXG4gIC8vI3JlZ2lvbiBnZW5lcmF0ZUFuc3dlcnNBcnJheVxyXG4gIHByaXZhdGUgZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICB0aGlzLnBhbmVscyA9IG5ldyBBcnJheTxQYW5lbD4oKTtcclxuICAgIHJlcy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdlbmVyYXRlQW5zd2Vyc0FycmF5XCIsIHIpXHJcbiAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiU2VyaWFsaXplZFZhbHVlc1wiLCByLlNlcmlhbGl6ZWRWYWx1ZXMpXHJcbiAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSB0aGlzLmRiRGF0ZVNlcnZpY2UucGFyc2VEYXRlZnJvbURCKHIuQW5zd2VyRGF0ZSkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHRtcFJlYy5IVE1McmVhZGFibGVWYWx1ZXMgPSByLkhUTUxyZWFkYWJsZVZhbHVlcztcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWRkaXRpb25hbFBhcmFtc1wiLCByLkFkZGl0aW9uYWxQYXJhbXMpXHJcbiAgICAgIHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zID0gci5BZGRpdGlvbmFsUGFyYW1zICE9IFwiXCIgJiYgci5BZGRpdGlvbmFsUGFyYW1zICE9IG51bGwgPyBKU09OLnBhcnNlKHIuQWRkaXRpb25hbFBhcmFtcykgOiBcIlwiO1xyXG4gICAgICB0bXBSZWMuQWRkaXRpb25hbEluZm8gPSByLkFkZGl0aW9uYWxJbmZvICE9IFwiXCIgJiYgci5BZGRpdGlvbmFsSW5mbyAhPSBudWxsID8gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxJbmZvKSA6IFwiXCI7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuXHJcbiAgICAgIHZhciBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEZpbHRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgaXNIaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5oaWdobGlnaHRGaWx0ZXIpLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdIHx8IHRtcFJlYy5BZGRpdGlvbmFsUGFyYW1zW2ZpbHRlcl0gIT0gdGhpcy5oaWdobGlnaHRGaWx0ZXJbZmlsdGVyXSkge1xyXG4gICAgICAgICAgICBpc0hpZ2hsaWdodGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucGFuZWxzLnB1c2goeyByZWNvcmQ6IHRtcFJlYywgaXNPcGVuOiBmYWxzZSwgcGFnZVN0YXRlOiBudWxsLCBoaWdobGlnaHRlZDogaXNIaWdobGlnaHRlZCB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKF8pID0+IHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2VuZXJhdGVBbnN3ZXJzQXJyYXlcclxuXHJcbiAgLy8jcmVnaW9uIHRvZ2dsZVBhbmVsXHJcbiAgdG9nZ2xlUGFuZWwocGFuZWw6IGFueSwgcmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndG9nZ2xlUGFuZWwnKVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RWaWV3RnVuY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2RlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uJywgcmVjb3JkKVxyXG4gICAgICB0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uKHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghcGFuZWwuaXNPcGVuKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgLy8gU2ltdWxhIHVuIGNhbGNvbG8gYXNpbmNyb25vXHJcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyB9LCAxMDAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdG9nZ2xlUGFuZWxcclxuXHJcbiAgLy8jcmVnaW9uIHZpZXdPckVkaXRSZWNvcmRcclxuICAvKipcclxuICAgKiBNZXRvZG8gY2hlIHNjYXRlbmEgbCdldmVudG8gZGkgT3V0cHV0IHBlciBtb3N0cmFyZSBvIG1vZGlmaWNhcmUgaWwgcmVjb3JkXHJcbiAgICogc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqIEBwYXJhbSBvbmx5VmlldyBTZSBUUlVFIHZpZW5lIG1vc3RyYXRvIGlsIGNvbXBvbmVudGUgYWRkLWZvcm0tcmVjb3JkIGluIHNvbGEgbGV0dHVyYS5cclxuICAgKi9cclxuICB2aWV3T3JFZGl0UmVjb3JkKHJlY29yZDogUmVjb3JkLCBvbmx5VmlldzogYm9vbGVhbiwgaSkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCd2aWV3T3JFZGl0UmVjb3JkJylcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiB2aWV3T3JFZGl0UmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiB2aWV3UmVjb3JkXHJcbiAgdmlld1JlY29yZChwYW5lbDogUGFuZWwsIG9ubHlWaWV3OiBib29sZWFuLCBpLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmlld1JlY29yZCcpXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSA9PSAndmlzdWFsaXp6YUNvbnRlbnV0bycpIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdmlld1JlY29yZFxyXG5cclxuICAvLyNyZWdpb24gRWRpdFJlY29yZFxyXG4gIEVkaXRSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0VkaXRSZWNvcmQnKVxyXG5cclxuICAgIGxldCByZWNvcmQgPSBwYW5lbC5yZWNvcmRcclxuICAgIHBhbmVsLnJlY29yZC5BZGRpdGlvbmFsSW5mbyA9IE9iamVjdC5hc3NpZ24oe30sIHJlY29yZC5BZGRpdGlvbmFsSW5mbywgdGhpcy5jb25maWd1cmF0aW9ucy51cGRhdGVJbmZvKTtcclxuICAgIHRoaXMudmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gICAgdGhpcy5tb2RpZmljYUNvbnRlbnV0byA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICBpZiAocGFuZWwucGFnZVN0YXRlID09ICdtb2RpZmljYUNvbnRlbnV0bycpIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAnbW9kaWZpY2FDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIEVkaXRSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIGV4dGVybmFsQ2FsbGJhY2tcclxuICBleHRlcm5hbENhbGxiYWNrKGV2OiBFdmVudCwgY2FsbGJhY2s6IEZ1bmN0aW9uLCByZWNvcmQ6IGFueSkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY2FsbGJhY2socmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGV4dGVybmFsQ2FsbGJhY2tcclxuXHJcbiAgLy8jcmVnaW9uIGR1cGxpY2F0ZVJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZHVwbGljYXJlIHVuIHJlY29yZCBkZWxsYSBmb3JtLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGR1cGxpY2FyZS5cclxuICAgKi9cclxuICBkdXBsaWNhdGVSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdkdXBsaWNhdGVSZWNvcmQnKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcGFuZWwucmVjb3JkLklEO1xyXG4gICAgdGhpcy5pc0R1cGxpY2F0aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgIG1pbkhlaWdodDogXCIxMDBweFwiLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZHVwbGljYXRlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBkZWxldGVSZWNvcmRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVsaW1pbmFyZSB1biByZWNvcmQgZGFsbGEgbGlzdGEuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgZWxpbWluYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocmVjb3JkOiBSZWNvcmQsIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vbkRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBkZWxldGVSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIHJlbG9hZFRhYmxlc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkVGFibGVzKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgIHRoaXMudGFibGVSZWNvcmRzLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcmVsb2FkVGFibGVzXHJcblxyXG4gIC8vI3JlZ2lvbiBzYXZlT3JFeGl0Rm9ybVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpIGRhdGkgaW5zZXJpdGkgZGFsbCd1dGVudGUgdW5hIHZvbHRhIGNvbmNsdXNhIGxhIGNvbXBpbGF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVPckV4aXRGb3JtKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBzYXZlJywgcmVjb3JkKVxyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gc2F2ZU9yRXhpdEZvcm1cclxuXHJcbiAgLy8jcmVnaW9uIG9uQWZ0ZXJTYXZlUmVjb3JkXHJcbiAgb25BZnRlclNhdmVSZWNvcmQoZXZlbnQpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC12aWV3LWZvcm0tcmVjb3JkIGFmdGVyc2F2ZScsIGV2ZW50KVxyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkFmdGVyU2F2ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gb25BZGRWaWV3RWRpdFJlY29yZDJcclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gcXVhbmRvIHNpIHZ1b2xlIGFnZ2l1bmdlcmUsIHZpc3VhbGl6emFyZSBvIG1vZGlmaWNhcmUgdW4gcmVjb3JkLlxyXG4gICAqIFNlIGwnZXZlbnRvIMOoIG51bGwgdnVvbCBkaXJlIGNoZSBzdGlhbW8gYWdnaXVuZ2VuZG8gdW4gbnVvdm8gcmVjb3JkIGFsdHJpbWVudGkgc2lhbW8gaW4gbW9kaWZpY2FcclxuICAgKiBvIHZpc3VhbGl6emF6aW9uZS4gSW4gcXVlc3RpIHVsdGltaSBkdWUgY2FzaSwgc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kcG9pbnQgcGVyIGlsIHJlY3VwZXJvXHJcbiAgICogZGVsIHJlY29yZCBjb21wbGV0byBhbGxvcmEgdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyLCBhbHRyaW1lbnRpIHZpZW5lIHVzYXRvIGwnb2dnZXR0byBzZWxlemlvbmF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBjb24gZHVlIHByb3ByaWV0w6A6XHJcbiAgICogXCJyZWNvcmRcIiA9IG9nZ2V0dG8gZGEgbW9kaWZpY2FyZS92aXN1YWxpenphcmUsXHJcbiAgICogXCJvbmx5Vmlld1wiID0gYm9vbGVhbm8gKHNlIFRSVUUgc2lhbW8gaW4gdmlzdWFsaXp6YXppb25lIGFsdHJpbWVudGkgaW4gbW9kaWZpY2EpXHJcbiAgICovXHJcbiAgb25BZGRWaWV3RWRpdFJlY29yZDIoZXZlbnQ6IHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0pIHtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vbmx5VmlldyA9IGV2ZW50Lm9ubHlWaWV3O1xyXG5cclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uID0gZmFsc2U7XHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbiA9ICFldmVudC5vbmx5VmlldztcclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChldmVudCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuRW50SUQsXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLlZlcnNpb24sXHJcbiAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIHByZXBhcm8gaSBkYXRpIGRlbCByZWNvcmRcclxuICAgICAgICAgICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVZhbHVlOiBldmVudC5yZWNvcmQuSUQsXHJcbiAgICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICAgICAgICBkeW5hbWljUmVjb3JkUGFyYW1zLFxyXG4gICAgICAgICAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5JRCA9IHJlcy5JRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLlZlcnNpb24gPSByZXMuVmVyc2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQucmVjb3JkKSk7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybUlELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgfSAgICAgICAgICBcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgIC8vIHRoaXMub25seVZpZXcgPSBmYWxzZTtcclxuICAgICAgLy8gdGhpcy52aWV3TW9kZSA9IER5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0uQ09NUElMRTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkVmlld0VkaXRSZWNvcmQyXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQWxsXHJcbiAgb3BlbkFsbCgpe1xyXG4gICAgdGhpcy5pc0Z1bGxPcGVuZWQgPSAhdGhpcy5pc0Z1bGxPcGVuZWQ7XHJcbiAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChwYW5lbCkgPT4ge1xyXG4gICAgICBpZiAocGFuZWwuaXNPcGVuICE9IHRoaXMuaXNGdWxsT3BlbmVkKXtcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInAtXCIrcGFuZWwucmVjb3JkLklEK1wiLXZpc2liaWxpdHlcIikuY2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5BbGxcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5BZGRQb3B1cFxyXG4gIG9wZW5BZGRQb3B1cCgpIHtcclxuICAgIC8vIG1pIHNzaWN1cm8gY2hlIG5vbiBjaSBzaWFubyBwYW5uZWxsaSBpbiBtb2RpZmljYSBwZXJjaMOoIGFsdHJpbWVudGkgdmEgaW4gY29uZmxpdHRvIGwndXBkYXRlIGNvbiBsJ2FkZFxyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYocGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJyl7XHJcbiAgICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucG9wdXBMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNEdXBsaWNhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5BZGREaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkFkZERpYWxvZywge1xyXG4gICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgICB3aWR0aDogXCI4MHZ3XCIsXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgUnVuRW5kUG9pbnRDYWxsXCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQWRkUG9wdXBcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5HcmFwaHNcclxuICBvcGVuR3JhcGhzKCkge1xyXG4gICAgXHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5vcGVuR3JhcGhEaWFsb2csIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgbWluV2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICBtaW5IZWlnaHQ6IFwiNzB2aFwiLFxyXG4gICAgICBtYXhIZWlnaHQ6IFwiMTAwdmhcIlxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2R5bmFtaWMtbW9kdWxlLWdyYXBocy8nICsgdGhpcy5mb3JtSUQgKyAnLycgKyB0aGlzLnVzZXJJRF0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkdyYXBoc1xyXG5cclxuICAvLyNyZWdpb24gY2xvc2VHcmFwaHNcclxuICBjbG9zZUdyYXBocygpIHtcclxuICAgIHRoaXMub3BlbkdyYXBoRGlhbG9nUmVmLmNsb3NlKClcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNsb3NlR3JhcGhzXHJcbiAgICBcclxuICAvLyNyZWdpb24gb25BZGRTYXZlUmVjb3JkXHJcbiAgb25BZGRTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkFkZFNhdmVSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkXHJcbiAgb25BZGRBZnRlclNhdmVSZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmICh0aGlzLm9wZW5BZGREaWFsb2dSZWYgIT0gbnVsbCkgeyB0aGlzLm9wZW5BZGREaWFsb2dSZWYuY2xvc2UoKTsgfVxyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcbiAgcHJpbnRBZGRpdGlvbmFsSW5mbyhyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgbGV0IG91dCA9IFwiXCI7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUgIT0gbnVsbCAmJiB0aGlzLmNvbmZpZ3VyYXRpb25zLmxpc3RWaWV3UmVjb3JkVGl0bGUubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHJlY29yZC5BZGRpdGlvbmFsSW5mbyAhPSBudWxsKXtcclxuXHJcbiAgICAgICAgY29uc3QgcmVnZXggPSAvXFwoKC4rKVxcKS9nOzsgLy8gcGF0dGVybiBwZXIgdW5vIG8gcGnDuSBudW1lcmlcclxuICAgICAgICBcclxuICAgICAgICAvLyAoZGF0ZWZvcm1hdD1FRUVFLCBkIE1NTU0geSwgSDptbTpzcylcclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoaXRlbSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICBsZXQgbXltYXRjaCA9IG1hdGNoWzFdO1xyXG4gICAgICAgICAgaWYobXltYXRjaC5pbmNsdWRlcyhcImRhdGVmb3JtYXRcIikpe1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0ID0gbXltYXRjaC5zcGxpdChcIj1cIilbMV07XHJcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IGl0ZW0uc3BsaXQoXCIoXCIpWzBdO1xyXG4gICAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSAhPSBudWxsID8gXCIgXCIgKyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZWNvcmQuQWRkaXRpb25hbEluZm9bdG9rZW5dLCBmb3JtYXQpIDogcmVjb3JkW3Rva2VuXSA/IFwiIFwiICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkW3Rva2VuXSwgZm9ybWF0KSA6ICBcIiBcIiArIHRva2VuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXQgKz0gcmVjb3JkLkFkZGl0aW9uYWxJbmZvICE9IG51bGwgJiYgcmVjb3JkLkFkZGl0aW9uYWxJbmZvW2l0ZW1dICE9IG51bGwgPyBcIiBcIiArIHJlY29yZC5BZGRpdGlvbmFsSW5mb1tpdGVtXSA6IHJlY29yZFtpdGVtXSA/IFwiIFwiICsgcmVjb3JkW2l0ZW1dIDogIFwiIFwiICsgaXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBwcmludEFkZGl0aW9uYWxJbmZvXHJcblxyXG4gIG9uQ2xpY2tEcmFnSW5kaWNhdG9yKGVsOiBhbnkpe1xyXG4gICAgdGhpcy5jbGlja0RyYWdJbmRpY2F0b3IuZW1pdChlbCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydGVkKGVsOiBhbnkpe1xyXG4gICAgICB0aGlzLmRyYWdTdGFydGVkLmVtaXQoZWwpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnUmVsZWFzZWQoKXtcclxuICAgICAgdGhpcy5kcmFnUmVsZWFzZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25FeHRlcm5hbENvbXBvbmVudE91dChldjogZXZlbnRPdXQpe1xyXG4gICAgdGhpcy5vdXQuZW1pdChldik7XHJcbiAgfVxyXG5cclxuICBvbkZpcmVUcmlnZ2VyKGV2OiBGaXJlVHJpZ2dlcil7XHJcbiAgICB0aGlzLmZpcmVUcmlnZ2VyLmVtaXQoZXYpO1xyXG4gIH0gXHJcblxyXG59XHJcblxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJsaXN0LXZpZXctZm9ybS1yZWNvcmRcIj5cclxuICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwic2hvd1RpdGxlIHx8IGRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIiBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlICpuZ0lmPVwic2hvd1RpdGxlICYmIGxvYWRlZGZvcm1cIj5Nb2R1bG8ge3sgZm9ybS5OYW1lIH19IDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8bWF0LWNhcmQtYWN0aW9ucyAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGQgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmdyYXBoc1wiPlxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImlzTGlzdFZpZXdcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlblRhYmVsbGFyKClcIj5cclxuICAgICAgICA8bWF0LWljb24+dGFibGU8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5UYWJlbGxhcmU8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImlzVGFiZWxsYXJcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3Blbkxpc3RWaWV3KClcIj5cclxuICAgICAgICA8bWF0LWljb24+bGlzdDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkxpc3RhPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuQWxsKClcIlxyXG4gICAgICAgICpuZ0lmPVwiaXNMaXN0Vmlld1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFpc0Z1bGxPcGVuZWRcIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiICpuZ0lmPVwiIWlzRnVsbE9wZW5lZFwiPkFwcmkgdHV0dG88L3NwYW4+XHJcblxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzRnVsbE9wZW5lZCAmJiBpc0xpc3RWaWV3XCI+ZXhwYW5kX2xlc3M8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIiAqbmdJZj1cImlzRnVsbE9wZW5lZFwiPkNoaXVkaSB0dXR0bzwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+ICAgICAgXHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuZ3JhcGhzXCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5HcmFwaHMoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5waWVfY2hhcnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5HcmFmaWNpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5hZGRcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BZGRQb3B1cCgpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkFnZ2l1bmdpPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgXHJcbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImlzVGFiZWxsYXJcIj5cclxuICAgICAgXHJcbjxobGlzdC1mb3JtLXJlY29yZFxyXG5jbGFzcz1cImR5bmFtaWMtbW9kdWxlLWhsaXN0XCJcclxuW2Zvcm1JRF09XCJmb3JtSURcIlxyXG5cclxuW2VuZFBvaW50Q29uZmlndXJhdGlvbl09XCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG5cclxuW2NvbmZpZ3VyYXRpb25zXT1cImNvbmZpZ3VyYXRpb25zXCJcclxuW2V4dGVybmFsQnV0dG9uc109XCJleHRlcm5hbEJ1dHRvbnNcIlxyXG4+XHJcbjwvaGxpc3QtZm9ybS1yZWNvcmQ+XHJcblxyXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgY2xhc3M9XCJkYXRlXCIgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGluaXppbydcIiBbbGFiZWxdPVwiJ1BlcmlvZG8gaW5pemlvJ1wiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWxJbnB1dCldPVwibWlucGVyaW9kXCJcclxuICAgICAgICAgICAgICAgIFtwaWNrZXJNb2RlXT1cIm1vZGVzLkRBVEVQSUNLRVJcIiBbb3V0cHV0Rm9ybWF0XT1cIidERC9NTS9ZWVlZJ1wiIFtzaG93U2Vjb25kc109XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L3Rtdy1kYXRldGltZXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgIDx0bXctZGF0ZXRpbWVwaWNrZXIgY2xhc3M9XCJkYXRlXCIgW3BsYWNlaG9sZGVyXT1cIidQZXJpb2RvIGZpbmUnXCIgW2xhYmVsXT1cIidQZXJpb2RvIGZpbmUnXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJtYXhwZXJpb2RcIlxyXG4gICAgICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZXMuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PiAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIG10LTJcIj5cclxuICAgICAgICAgICAgPGVxcC1zZWxlY3QgW2FycmF5RGF0YV09XCJ0YWJlbGxhckZpZWxkc1wiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZFRhYmVsbGFyRmllbGRzXCIgW3BsYWNlaG9sZGVyXT1cIidTZWxlemlvbmUgZGVpIGNhbXBpJ1wiXHJcbiAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidEZXNjcmlwdGlvbidcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidUZXh0RGVzY3JpcHRpb24nXCIgW2lzTXVsdGlTZWxlY3RdPVwidHJ1ZVwiIGNsYXNzPVwiZXFwLWZvcm0tZmllbGRcIj5cclxuICAgICAgICAgICAgPC9lcXAtc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PiAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1tZC0zIG10LTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRUYWJlbGxhckZpZWxkcyA9PSBudWxsIHx8IHNlbGVjdGVkVGFiZWxsYXJGaWVsZHMubGVuZ3RoID09IDBcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZ3JhcGgtZ2VuZXJhdGUgYnV0dG9uLW5leHQgbWUtMlwiXHJcbiAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJnZW5lcmF0ZVRhYmVsbGFyKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEdlbmVyYVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICA8ZXFwLXRhYmxlIGlkPVwidGFiZWxsYXJcIiBjbGFzcz1cImxpc3QtZm9ybS1yZWNvcmQtdGFibGVcIiAjdGFibGVSZWNvcmRzICpuZ0lmPVwidGFiZWxsYXJDb25kaXRpb25Mb2FkZWRcIiBbaGlnaGxpZ2h0Q29sb3JdPVwiJ3RyYW5zcGFyZW50J1wiXHJcbiAgICAgIFtkYXRhXT1cInRhYmVsbGFyVmFsdWVzXCIgW2NvbHVtbnNdPVwidGFiZWxsYXJDb2x1bW5zXCIgW21hdFBhZ2luYXRvclNpemVdPVwiMTAwMFwiIFttYXRQYWdpbmF0b3JMZW5ndGhdPVwiWzEwMDBdXCI+PC9lcXAtdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgIDxtYXQtYWNjb3JkaW9uICAjZG9uZUxpc3Q9XCJjZGtEcm9wTGlzdFwiIGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlt0b2RvTGlzdF1cIiBbaGlkZVRvZ2dsZV09XCJ0ZXN0XCIgW211bHRpXT1cInRydWVcIiBjbGFzcz1cImRmLWxpc3Qtdmlldy1hY2NvcmRpb25cIiAqbmdJZj1cImlzTGlzdFZpZXdcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IHBhbmVsIG9mIHBhbmVsczsgaW5kZXggYXMgaVwiIFxyXG4gICAgICAgIFtleHBhbmRlZF09XCJwYW5lbC5pc09wZW5cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIxXCIgXHJcbiAgICAgICAgW2NsYXNzXT1cInBhbmVsLmhpZ2hsaWdodGVkID8gJ2RtX3BhbmVsX2hpZ2hsaWdodGVkJyA6ICcwJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKHBhbmVsLCBwYW5lbC5yZWNvcmQpXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlICpuZ0lmPVwiY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cIm9uQ2xpY2tEcmFnSW5kaWNhdG9yKFtwYW5lbC5yZWNvcmQsZm9ybV0pXCIgY2xhc3M9XCJjbGljay1pY29uXCIgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPiB7eyAhc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCIhY29uZmlndXJhdGlvbnMuaXNEcmFnZ2FibGVMaXN0Vmlld1wiPlxyXG4gICAgICAgICAgICB7eyAhc2hvd1RpdGxlID8gZm9ybS5OYW1lIDogXCJcIiB9fSB2Lnt7IHBhbmVsLnJlY29yZC5WZXJzaW9uIH19IC0ge3sgcHJpbnRBZGRpdGlvbmFsSW5mbyhwYW5lbC5yZWNvcmQpIH19XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT4gICAgICAgICAgXHJcbiAgICAgICAgICA8IS0tI3JlZ2lvbiBCT1RUT05JIFBFUiBMRSBBWklPTkkgLS0+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYnV0dG9uc1wiIFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBpZD1cInAte3twYW5lbC5yZWNvcmQuSUR9fS17e2J1dHRvbi5pY29ufX1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVjb3JkLWljb24ge3tidXR0b24uZXh0cmFDbGFzc319XCIgXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgIFtoaWRkZW5dPVwiYnV0dG9uLmljb24gPT0gJ2ZpbGVfY29weScgJiYgKHBhbmVscy5sZW5ndGggPT0gMCB8fCBwYW5lbC5yZWNvcmQuVmVyc2lvbiAhPSBwYW5lbHNbMF0ucmVjb3JkLlZlcnNpb24pXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uLmZuKHBhbmVsLGksJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57e2J1dHRvbi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGV4dGVybmFsQnV0dG9uc1wiIFxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlY29yZC1pY29uIHt7YnV0dG9uLmV4dHJhQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRleHRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHRlcm5hbENhbGxiYWNrKCRldmVudCxidXR0b24uZm4scGFuZWwucmVjb3JkKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj57e2J1dHRvbi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJleGFtcGxlLXNwYWNlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDwhLS0jZW5kcmVnaW9uIEJPVFRPTkkgUEVSIExFIEFaSU9OSSAtLT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICA8IS0tICNyZWdpb24gQ09OVEVOVVRPIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYW5lbC5wYWdlU3RhdGUgIT0gbnVsbFwiPlxyXG5cclxuICAgICAgICAgIDxsaWItc2luZ2xlLXJlY29yZFxyXG4gICAgICAgICAgICBbb25seVZpZXddPVwib25seVZpZXdcIlxyXG4gICAgICAgICAgICBbcmVjb3JkXSA9IFwicGFuZWwucmVjb3JkXCIgXHJcbiAgICAgICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dID0gXCJlbmRQb2ludENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gICAgICAgICAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgICAgICAgICBbb3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXT1cIm91dENvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgICAgIFtwYWdlU3RhdGVdPVwicGFuZWwucGFnZVN0YXRlXCJcclxuICAgICAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gICAgICAgICAgICAoc2F2ZVJlY29yZEV2ZW50KT1cInNhdmVPckV4aXRGb3JtKCRldmVudClcIlxyXG4gICAgICAgICAgICAoYWZ0ZXJTYXZlUmVjb3JkRXZlbnQpPVwib25BZnRlclNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICAgICAgPlxyXG5cclxuICAgICAgICAgIDwvbGliLXNpbmdsZS1yZWNvcmQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSNlbmRyZWdpb24gQ09OVEVOVVRPIC0tPlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8L21hdC1hY2NvcmRpb24+XHJcblxyXG5cclxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS0jcmVnaW9uIERJQUxPRyBBR0dJVU5UQSBSSVNQT1NUQSAtLT5cclxuPG5nLXRlbXBsYXRlICNvcGVuQWRkRGlhbG9nPlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cImNhcmQtZGVmYXVsdCBvdmVybGF5LWNhcmQgY2FyZC1pbm1vZGFsLXRydWVcIj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgPGFkZC1mb3JtLXJlY29yZFxyXG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy1tb2R1bGUtY29tcGlsZVwiXHJcbiAgICAgICAgW2Zvcm1JRF09XCJmb3JtSURcIlxyXG4gICAgICAgIFtvcmdhSURdPVwib3JnYUlEXCJcclxuICAgICAgICBbb25seVZpZXddPVwiZmFsc2VcIlxyXG4gICAgICAgIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxyXG4gICAgICAgIFtpc0R1cGxpY2F0ZV09XCJpc0R1cGxpY2F0aW5nXCJcclxuICAgICAgICBcclxuICAgICAgICBbUXVlcnlFZGl0b3JDb21wb25lbnRdPVwiUXVlcnlFZGl0b3JDb21wb25lbnRcIlxyXG4gICAgICAgIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICBbdXNlcklEXT1cInVzZXJJRFwiXHJcblxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc109XCJjb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG5cclxuICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNhdmVSZWNvcmRFdmVudCk9XCJvbkFkZFNhdmVSZWNvcmQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWRkQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgIChmaXJlVHJpZ2dlcik9XCJvbkZpcmVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvYWRkLWZvcm0tcmVjb3JkPlxyXG5cclxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8L21hdC1jYXJkPlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tI2VuZHJlZ2lvbiBESUFMT0cgQUdHSVVOVEEgUklTUE9TVEEgLS0+XHJcblxyXG48IS0tI3JlZ2lvbiBESUFMT0cgVklTVUFMSVpaQVpJT05FIEdSQUZJQ0kgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjb3BlbkdyYXBoRGlhbG9nPlxyXG4gIDxtYXQtY2FyZCBjbGFzcz1cImNhcmQtZGVmYXVsdCBvdmVybGF5LWNhcmQgY2FyZC1pbm1vZGFsLXRydWUgZ3JhcGhDYXJkXCI+XHJcbiAgICBcclxuICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZXFwLWR5bmFtaWMtbW9kdWxlLXRpdGxlIGdyYXBoLWhlYWRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPHNwYW4+R3JhZmljbyB7eyBmb3JtLk5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlR3JhcGhzKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+XHJcbiAgICAgICAgICBhcnJvd19iYWNrXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkluZGlldHJvPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgPGdyYXBoc1xyXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgICAgICBbdXNlcklEXT1cInVzZXJJRFwiXHJcbiAgICAgICAgW2NvbmZpZ3VyYXRpb25zXSA9IFwib3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcclxuICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgPlxyXG4gICAgICA8L2dyYXBocz5cclxuXHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRElBTE9HIFZJU1VBTElaWkFaSU9ORSBHUkFGSUNJIC0tPlxyXG4iXX0=
859
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC12aWV3LWZvcm0tcmVjb3JkL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3Qtdmlldy1mb3JtLXJlY29yZC9saXN0LXZpZXctZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEdBS2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNYLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV6SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNwRyxPQUFPLEVBR0wsYUFBYSxHQUNkLE1BQU0sa0RBQWtELENBQUM7QUFRMUQsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRzlFLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQnBE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QkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIE51bWJlckNvbHVtblBpcGUsXHJcbiAgVHlwZUNvbHVtblxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdFwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdENvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tIFwiLi8uLi8uLi8uLi8uLi8vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLy4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RpcmVjdGl2ZXMvZHluYW1pYy1sb2FkZXIvZHluYW1pYy1sb2FkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEZpcmVUcmlnZ2VyLCBUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBkYkRhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2RiLWRhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkLCBEYXRlVGltZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBMYWJlbEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGFiZWxGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNb2RlRW51bSwgVGltZVR5cGVFbnVtIH0gZnJvbSAndG13LXBpY2tlcic7XHJcbmltcG9ydCB7IFRhYmVsbGFyRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xyXG5cclxudHlwZSBQYW5lbCA9IHtcclxuICByZWNvcmQ6IFJlY29yZCxcclxuICBpc09wZW46IGJvb2xlYW4sXHJcbiAgcGFnZVN0YXRlOiBzdHJpbmcsXHJcbiAgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW5cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwibGlzdC12aWV3LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xpc3Qtdmlldy1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RWaWV3Rm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgY29tcGlsZUNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBvdXRDb21waWxlQ29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG9yZ2FJRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uOiBGdW5jdGlvbiA9IG51bGw7XHJcbiAgQElucHV0KCkgZXh0ZXJuYWxCdXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcmVjb3JkczogQXJyYXk8RHluUmVjb3JkPiA9IG51bGw7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0RmlsdGVyOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgZGVmYXVsdExpc3RBY3Rpb25zOiBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCA9XHJcbiAgICBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKTtcclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIC8vIHZhbHVlczogQXJyYXk8UmVjb3JkPjtcclxuICB0ZXN0ID0gZmFsc2U7XHJcbiAgaXNEdXBsaWNhdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkUmVjb3JkOiBhbnk7IC8vIFJlY29yZCB8IHN0cmluZztcclxuICBsb2FkZXI6IGJvb2xlYW47XHJcbiAgbG9hZGVkZm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBhbmVsT3BlblN0YXRlOiBib29sZWFuW10gPSBuZXcgQXJyYXk8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgdmlzdWFsaXp6YUNvbnRlbnV0byA9IGZhbHNlO1xyXG4gIG1vZGlmaWNhQ29udGVudXRvID0gZmFsc2U7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKFwidGFibGVSZWNvcmRzXCIsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlUmVjb3JkczogRXFwVGFibGVDb21wb25lbnQ7XHJcblxyXG4gIGNvbHVtbnMgPSBuZXcgQXJyYXk8Q29uZmlnQ29sdW1uPigpO1xyXG4gIHRhYmVsbGFyQ29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgcGFuZWxzOiBBcnJheTxQYW5lbD5cclxuICBidXR0b25zOiBBcnJheTxSZWNvcmRCdXR0b24+ID0gbmV3IEFycmF5PFJlY29yZEJ1dHRvbj4oKTtcclxuICBwb3B1cExvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKFwib3BlbkFkZERpYWxvZ1wiLCB7IHN0YXRpYzogZmFsc2UgfSkgb3BlbkFkZERpYWxvZzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBvcGVuQWRkRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJvcGVuR3JhcGhEaWFsb2dcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG9wZW5HcmFwaERpYWxvZzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBvcGVuR3JhcGhEaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgdG9kb0xpc3Q6IGFueTtcclxuICBpc0Z1bGxPcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNUYWJlbGxhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTGlzdFZpZXc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHRhYmVsbGFyQ29uZGl0aW9uTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIG1pbnBlcmlvZDogRGF0ZTtcclxuICBtYXhwZXJpb2Q6IERhdGU7XHJcblxyXG4gIHRhYmVsbGFyRmllbGRzOiBBcnJheTxUYWJlbGxhckZpZWxkPiA9IG5ldyBBcnJheTxUYWJlbGxhckZpZWxkPigpO1xyXG4gIHNlbGVjdGVkVGFiZWxsYXJGaWVsZHM6IEFycmF5PFRhYmVsbGFyRmllbGQ+O1xyXG4gIHRhYmVsbGFyVmFsdWVzOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuXHJcbiAgLy8gVE1XLVBJQ0tFUlxyXG4gIG1vZGVzID0gTW9kZUVudW1cclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bVxyXG4gIG1vZGU6IE1vZGVFbnVtO1xyXG5cclxuICBsaWJTaW5nbGVMb2FkZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBhZGQgbmV3XHJcbiAgQE91dHB1dCgpIG9uQWRkVmlld0VkaXRSZWNvcmQ6IEV2ZW50RW1pdHRlcjx7XHJcbiAgICByZWNvcmQ6IFJlY29yZDtcclxuICAgIG9ubHlWaWV3OiBib29sZWFuO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGRyYWdTdGFydGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkcmFnUmVsZWFzZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuICBAT3V0cHV0KCkgZmlyZVRyaWdnZXI6IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPigpO1xyXG4gIEBPdXRwdXQoKSBjbGlja0RyYWdJbmRpY2F0b3I6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIC8vI3JlZ2lvbiBjb25zdHJ1Y3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBkYkRhdGVTZXJ2aWNlOiBkYkRhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcclxuICApIHsgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjb25zdHJ1Y3RvclxyXG5cclxuICAvLyNyZWdpb24gbmdPbkluaXRcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHRoaXMucGFuZWxPcGVuU3RhdGUgPSBbXHJcbiAgICAvLyAgIC4uLkFycmF5KHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLmxlbmd0aCArIDEpLFxyXG4gICAgLy8gXS5tYXAoKCkgPT4gZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5kZWZhdWx0TGlzdEFjdGlvbnM7XHJcbiAgICB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG5cclxuICAgIHRoaXMub3V0Q29tcGlsZUNvbmZpZ3VyYXRpb25zID0gbmV3IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnKFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93VGl0bGUsXHJcbiAgICAgIHRoaXMuY29tcGlsZUNvbmZpZ3VyYXRpb25zLnNob3dTYXZlQnV0dG9uLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93QmFja0J1dHRvbixcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zLFxyXG4gICAgICB0aGlzLmNvbXBpbGVDb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsSW5mbyxcclxuICAgICAgdGhpcy5jb21waWxlQ29uZmlndXJhdGlvbnMucHJlZmlsdGVyUGFyYW1zLFxyXG4gICAgKTtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImxpc3QtdmlldyAtIG91dGNvbXBpbGVDb25maWd1cmF0aW9ucyBcIiwgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMpO1xyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gICAgdGhpcy5jb25maWd1cmVMaXN0dmlld0J1dHRvbnMoKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG5nT25Jbml0XHJcblxyXG4gIC8vI3JlZ2lvbiBuZ09uQ2hhbmdlc1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbmdPbkNoYW5nZXMnLCBjaGFuZ2VzKTtcclxuXHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXNbXCJjb25maWd1cmF0aW9uc1wiXSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgY2hhbmdlc1tcImNvbmZpZ3VyYXRpb25zXCJdLmZpcnN0Q2hhbmdlID09IGZhbHNlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBjaGFuZ2VzW1wiY29uZmlndXJhdGlvbnNcIl0uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnJlbG9hZFRhYmxlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gbmdPbkNoYW5nZXNcclxuXHJcbiAgLy8jcmVnaW9uIG9uT3BlbmluZ1xyXG4gIC8qKlxyXG4gICAqIGZ1bnppb25lIGRpIGFwZXJ0dXJhIGRlbGwnYWNjb3JkaW9uXHJcbiAgICogQHBhcmFtIGluZGljZSBcclxuICAgKi9cclxuICBvbk9wZW5pbmcoaW5kaWNlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGljZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uT3BlbmluZ1xyXG5cclxuICBjb25maWd1cmVMaXN0dmlld0J1dHRvbnMoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbnMgPSBbXHJcblxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwidmlzaWJpbGl0eVwiLFxyXG4gICAgICAgIFwidGV4dFwiOiBcIlZpc3VhbGl6emFcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMudmlldyAmJiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCB8fCB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUgfHwgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlKSxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJ2aWV3LWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdSZWNvcmQocGFuZWwsIHRydWUsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJlZGl0XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiTW9kaWZpY2FcIixcclxuICAgICAgICBcInZpc2libGVcIjogdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZWRpdCxcclxuICAgICAgICBcImV4dHJhQ2xhc3NcIjogXCJlZGl0LWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLkVkaXRSZWNvcmQocGFuZWwsIGZhbHNlLCBpLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpY29uXCI6IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgXCJ0ZXh0XCI6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZHVwbGljYXRlLWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmR1cGxpY2F0ZVJlY29yZChwYW5lbCwgZmFsc2UsIGksIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImljb25cIjogXCJkZWxldGVcIixcclxuICAgICAgICBcInRleHRcIjogXCJDYW5jZWxsYVwiLFxyXG4gICAgICAgIFwidmlzaWJsZVwiOiB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUsXHJcbiAgICAgICAgXCJleHRyYUNsYXNzXCI6IFwiZGVsZXRlLWJ1dHRvbi1pY29uXCIsXHJcbiAgICAgICAgXCJmblwiOiAocGFuZWwsIGksIGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJlY29yZChwYW5lbCwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIF1cclxuICAgIHRoaXMuYnV0dG9ucyA9IHRoaXMuYnV0dG9ucy5jb25jYXQodGhpcy5leHRlcm5hbEJ1dHRvbnMpLmZpbHRlcih4ID0+IHgudmlzaWJsZSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb3BlblRhYmVsbGFyXHJcbiAgb3BlblRhYmVsbGFyKCl7XHJcbiAgICB0aGlzLmlzTGlzdFZpZXcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNUYWJlbGxhciA9IHRydWU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuVGFiZWxsYXJcclxuXHJcbiAgLy8jcmVnaW9uIG9wZW5MaXN0Vmlld1xyXG4gIG9wZW5MaXN0Vmlldygpe1xyXG4gICAgdGhpcy5pc1RhYmVsbGFyID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTGlzdFZpZXcgPSB0cnVlO1xyXG4gIH0gIFxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuTGlzdFZpZXdcclxuXHJcbiAgLy8jcmVnaW9uIGdldEZvcm1CeUlEXHJcbiAgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBpZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0IEZPUk1cIiwgcmVzKVxyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMubG9hZGVkZm9ybSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRGb3JtQnlJRFxyXG5cclxuICAvLyNyZWdpb24gY29uZmlndXJlQ29sdW1uc1xyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG5cclxuICAgIC8vIHRoaXMuY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zKCk7XHJcblxyXG4gICAgLy8gdGhpcy5jcmVhdGVBZGRpdGlvbmFsQWN0aW9ucygpO1xyXG4gICAgLy8gdGhpcy5jcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMoKTtcclxuICAgIGlmICh0aGlzLnJlY29yZHMgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdSZWNvcmRzIEV4aXN0cycsIHRoaXMucmVjb3Jkcyk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkodGhpcy5yZWNvcmRzKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNvbmZpZ3VyZUNvbHVtbnNcclxuXHJcbiAgLy8jcmVnaW9uIGNvbmZpZ3VyZVRhYmVsbGFyQ29sdW1uc1xyXG4gIC8vIHByaXZhdGUgY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zKCl7XHJcblxyXG4gIC8vICAgICAvKipcclxuICAvLyAgICAgICogTWV0b2RvIHBlciBjcmVhcmUgbGEgY29uZmlndXJhemlvbmUgZGVsbGUgY29sb25uZSBwZXIgbGEgZXFwLXRhYmxlLlxyXG4gIC8vICAgICAgKiBJbmRpdmlkdWEgaSBCYXNlRmllbGQgZGEgbW9zdHJhcmUgZSBsaSB1c2EgcGVyIGNyZWFyZSBsZSBDb25maWdDb2x1bW4uXHJcbiAgLy8gICAgICAqIExlIGNvbG9ubmUgdmVuZ29ubyBjcmVhdGUgcGVyIGkgQmFzZUZpZWxkIGNvbiBpbCBmbGFnIEluTGlzdFZpZXcgYSBUUlVFXHJcbiAgLy8gICAgICAqIG9wcHVyZSwgbmVsIGNhc28gbm9uIHNpYW5vIHN0YXRpIHNwZWNpZmljYXRpIGkgY2FtcGkgZGEgdmlzdWFsaXp6YXJlLFxyXG4gIC8vICAgICAgKiBzZWxlemlvbmEgaSBwcmltaSA2LlxyXG4gIC8vICAgICAgKi9cclxuXHJcbiAgLy8gICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcycsIHRoaXMuZm9ybSk7XHJcbiAgICBcclxuICAvLyAgICAgICB2YXIgZmllbGRzRm9yQ29sdW1uczogQXJyYXk8QmFzZUZpZWxkPjtcclxuICAvLyAgICAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkluTGlzdFZpZXcpKSB7XHJcbiAgLy8gICAgICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuSW5MaXN0Vmlldyk7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5PcmRpbmFsUG9zaXRpb24gPCA2KTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgICAgZmllbGRzRm9yQ29sdW1uc1xyXG4gIC8vICAgICAgICAgLnNvcnQoKGEsIGIpID0+XHJcbiAgLy8gICAgICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAvLyAgICAgICAgICAgICA/IDFcclxuICAvLyAgICAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAvLyAgICAgICAgICAgICA/IC0xXHJcbiAgLy8gICAgICAgICAgICAgOiAwXHJcbiAgLy8gICAgICAgICApXHJcbiAgLy8gICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAvLyAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2godGhpcy5jcmVhdGVGaWVsZENvbHVtbihmaWVsZCkpO1xyXG4gIC8vICAgICAgICAgfSk7XHJcblxyXG4gIC8vICAgICAgICAgY29uc29sZS5sb2coXCJGSU5BTCBDT0xVTVNOXCIsIHRoaXMuY29sdW1ucyk7XHJcblxyXG4gIC8vIH1cclxuICAvLyNlbmRyZWdpb24gY29uZmlndXJlVGFiZWxsYXJDb2x1bW5zXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVGaWVsZENvbHVtblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGwnb2dnZXR0byBDb25maWd1cmVDb2x1bW4gY2hlIHJhcHByZXNlbnRhIGlsIEJhc2VGaWVsZCBwYXNzYXRvIGluIGlucHV0LlxyXG4gICAqIEBwYXJhbSBmaWVsZCBCYXNlRmllbGQgcGVyIGN1aSBjcmVhcmUgbGEgY29sb25uYSBuZWxsYSBlcXAtdGFibGVcclxuICAgKiBAcmV0dXJucyBSZXN0aXR1aXNjZSB1bmEgQ29uZmlnQ29sdW1uIHBlciBsYSBlcXAtdGFibGVcclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkOiBCYXNlRmllbGQpOiBDb25maWdDb2x1bW4ge1xyXG4gICAgdmFyIGNvbHVtbjogQ29uZmlnQ29sdW1uID0geyBrZXk6IGZpZWxkLk5hbWUsIGRpc3BsYXk6IGZpZWxkLkxhYmVsIH07XHJcbiAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJCb29sZWFub1wiXTpcclxuICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uQm9vbGVhbjtcclxuICAgICAgICBjb2x1bW4uYm9vbGVhblZhbHVlcyA9IHtcclxuICAgICAgICAgIGZhbHNlOiAnPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBlcnJvci1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgICAgdHJ1ZTogJzxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgc3VjY2Vzcy1jb2xvclwiPjwvaT4nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLnN0eWxlcyA9IHtcclxuICAgICAgICAgIGZsZXg6IFwiMCAwIDclXCIsXHJcbiAgICAgICAgICBjZWxsQWxpZ25tZW50OiBDZWxsQWxpZ25tZW50RW51bS5DRU5URVIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgIT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9IFR5cGVDb2x1bW4uRGF0ZTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSBcImRkL01NL3l5eXkgSEg6bW1cIjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gZGF0YVwiXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgPSAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICAgPyAoZmllbGQgYXMgRGF0ZUZpZWxkKS5EYXRlRm9ybWF0LnJlcGxhY2UoXCJERFwiLCBcImRkXCIpXHJcbiAgICAgICAgICAgICAgOiBcImRkL01NL3l5eXlcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgIGlmICgoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbCkge1xyXG4gICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkNVUlJFTkNZO1xyXG4gICAgICAgICAgY29sdW1uLmN1cnJlbmN5UGlwZUNvZGUgPSAoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5DdXJyZW5jeVN5bWJvbDtcclxuICAgICAgICB9IGVsc2UgaWYgKCEoZmllbGQgYXMgTnVtZXJpY0ZpZWxkKS5Jc0ludGVnZXIpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5ERUNJTUFMO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQWxsZWdhdG9cIl06XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkltbWFnaW5lXCJdOlxyXG4gICAgIFxyXG4gICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkV0aWNoZXR0YVwiXTpcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7IHJldHVybiAoZmllbGQgYXMgTGFiZWxGaWVsZCkuRXRpY2hldHRhOyB9O1xyXG4gICAgICBicmVhazsgICAgICAgIFxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcblxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudFtmaWVsZC5OYW1lXSB8fCBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGspID0+XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRbZmllbGQuTmFtZV0uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzID09IG51bGwpeyBcclxuXHJcbiAgICAgICAgICAgICAgdmFyIHZzID0gKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVN0cmluZztcclxuICAgICAgICAgICAgICBpZiAodnMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHZzLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgICAgIHZhciBmb3VuZHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaCgob3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG9wLnNwbGl0KFwifFwiKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc1sxXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZHZhbHVlID0gdmFsdWVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGspID0+XHJcbiAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba10gPT0gZWxlbWVudFtmaWVsZC5OYW1lXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJMb29rdXBcIl06XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9ICBcclxuICAvLyNlbmRyZWdpb24gY3JlYXRlRmllbGRDb2x1bW5cclxuXHJcbiAgLy8jcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICAvLyBzZSBub24gY29ub3NjbyBsJ3V0ZW50ZVxyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0dldEJ5Rm9ybUlERW5kUG9pbnQnLCByZXMpXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIC8vIHNlIGNvbm9zY28gbCd1dGVudGVcclxuICAgICAgbGV0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJVc2VySURcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnR2V0QWxsQnlFbnRBbmRVc2VySURFbmRQb2ludCcsIHJlcylcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBbnN3ZXJzQXJyYXkocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiY29udHJvbGxhcmUgbGUgY29uZmlndXJhemlvbmkgZGVsbCdlbmRwb2ludFwiKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldFJlY29yZHNCeUZvcm1JRFxyXG5cclxuICAvLyNyZWdpb24gZ2VuZXJhdGVBbnN3ZXJzQXJyYXlcclxuICBwcml2YXRlIGdlbmVyYXRlQW5zd2Vyc0FycmF5KHJlczogQXJyYXk8RHluUmVjb3JkPikge1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgdGhpcy5wYW5lbHMgPSBuZXcgQXJyYXk8UGFuZWw+KCk7XHJcbiAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZW5lcmF0ZUFuc3dlcnNBcnJheVwiLCByKVxyXG4gICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIlNlcmlhbGl6ZWRWYWx1ZXNcIiwgci5TZXJpYWxpemVkVmFsdWVzKVxyXG4gICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gdGhpcy5kYkRhdGVTZXJ2aWNlLnBhcnNlRGF0ZWZyb21EQihyLkFuc3dlckRhdGUpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICB0bXBSZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gci5IVE1McmVhZGFibGVWYWx1ZXM7XHJcbiAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZGl0aW9uYWxQYXJhbXNcIiwgci5BZGRpdGlvbmFsUGFyYW1zKVxyXG4gICAgICB0bXBSZWMuQWRkaXRpb25hbFBhcmFtcyA9IHIuQWRkaXRpb25hbFBhcmFtcyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbFBhcmFtcyAhPSBudWxsID8gSlNPTi5wYXJzZShyLkFkZGl0aW9uYWxQYXJhbXMpIDogXCJcIjtcclxuICAgICAgdG1wUmVjLkFkZGl0aW9uYWxJbmZvID0gci5BZGRpdGlvbmFsSW5mbyAhPSBcIlwiICYmIHIuQWRkaXRpb25hbEluZm8gIT0gbnVsbCA/IEpTT04ucGFyc2Uoci5BZGRpdGlvbmFsSW5mbykgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcblxyXG4gICAgICB2YXIgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5oaWdobGlnaHRGaWx0ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgIGlzSGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaGlnaGxpZ2h0RmlsdGVyKS5mb3JFYWNoKChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgIGlmICghdG1wUmVjLkFkZGl0aW9uYWxQYXJhbXNbZmlsdGVyXSB8fCB0bXBSZWMuQWRkaXRpb25hbFBhcmFtc1tmaWx0ZXJdICE9IHRoaXMuaGlnaGxpZ2h0RmlsdGVyW2ZpbHRlcl0pIHtcclxuICAgICAgICAgICAgaXNIaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBhbmVscy5wdXNoKHsgcmVjb3JkOiB0bXBSZWMsIGlzT3BlbjogZmFsc2UsIHBhZ2VTdGF0ZTogbnVsbCwgaGlnaGxpZ2h0ZWQ6IGlzSGlnaGxpZ2h0ZWQgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdlbmVyYXRlQW5zd2Vyc0FycmF5XHJcblxyXG4gIC8vI3JlZ2lvbiB0b2dnbGVQYW5lbFxyXG4gIHRvZ2dsZVBhbmVsKHBhbmVsOiBhbnksIHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3RvZ2dsZVBhbmVsJylcclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0Vmlld0Z1bmN0aW9uICE9IG51bGwpIHtcclxuICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdkZWZhdWx0TGlzdFZpZXdGdW5jdGlvbicsIHJlY29yZClcclxuICAgICAgdGhpcy5kZWZhdWx0TGlzdFZpZXdGdW5jdGlvbihyZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXBhbmVsLmlzT3Blbikge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSB0cnVlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSAndmlzdWFsaXp6YUNvbnRlbnV0byc7XHJcbiAgICAgIC8vIFNpbXVsYSB1biBjYWxjb2xvIGFzaW5jcm9ub1xyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gfSwgMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYW5lbC5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHRvZ2dsZVBhbmVsXHJcblxyXG4gIC8vI3JlZ2lvbiB2aWV3T3JFZGl0UmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSB2aWVuZSBtb3N0cmF0byBpbCBjb21wb25lbnRlIGFkZC1mb3JtLXJlY29yZCBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICovXHJcbiAgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4sIGkpIHtcclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygndmlld09yRWRpdFJlY29yZCcpXHJcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkMih7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlLm1hcCgoKSA9PiBmYWxzZSk7XHJcbiAgICB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID0gdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgLy8gdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gdmlld09yRWRpdFJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gdmlld1JlY29yZFxyXG4gIHZpZXdSZWNvcmQocGFuZWw6IFBhbmVsLCBvbmx5VmlldzogYm9vbGVhbiwgaSwgZXY6IEV2ZW50KSB7XHJcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ3ZpZXdSZWNvcmQnKVxyXG4gICAgbGV0IHJlY29yZCA9IHBhbmVsLnJlY29yZFxyXG4gICAgdGhpcy52aXN1YWxpenphQ29udGVudXRvID0gdHJ1ZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQyKHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICAgIGlmIChwYW5lbC5wYWdlU3RhdGUgPT0gJ3Zpc3VhbGl6emFDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ3Zpc3VhbGl6emFDb250ZW51dG8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZS5tYXAoKCkgPT4gZmFsc2UpO1xyXG4gICAgdGhpcy5wYW5lbE9wZW5TdGF0ZVtpXSA9IHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHZpZXdSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIEVkaXRSZWNvcmRcclxuICBFZGl0UmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdFZGl0UmVjb3JkJylcclxuXHJcbiAgICBsZXQgcmVjb3JkID0gcGFuZWwucmVjb3JkXHJcbiAgICBwYW5lbC5yZWNvcmQuQWRkaXRpb25hbEluZm8gPSBPYmplY3QuYXNzaWduKHt9LCByZWNvcmQuQWRkaXRpb25hbEluZm8sIHRoaXMuY29uZmlndXJhdGlvbnMudXBkYXRlSW5mbyk7XHJcbiAgICB0aGlzLnZpc3VhbGl6emFDb250ZW51dG8gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kaWZpY2FDb250ZW51dG8gPSB0cnVlO1xyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZDIoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gICAgaWYgKHBhbmVsLnBhZ2VTdGF0ZSA9PSAnbW9kaWZpY2FDb250ZW51dG8nKSB7XHJcbiAgICAgIHBhbmVsLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICBwYW5lbC5wYWdlU3RhdGUgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFuZWwuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgcGFuZWwucGFnZVN0YXRlID0gJ21vZGlmaWNhQ29udGVudXRvJztcclxuICAgIH1cclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGUubWFwKCgpID0+IGZhbHNlKTtcclxuICAgIHRoaXMucGFuZWxPcGVuU3RhdGVbaV0gPSB0aGlzLnBhbmVsT3BlblN0YXRlW2ldID09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAvLyB0aGlzLm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdCh7IHJlY29yZCwgb25seVZpZXcgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBFZGl0UmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBleHRlcm5hbENhbGxiYWNrXHJcbiAgZXh0ZXJuYWxDYWxsYmFjayhldjogRXZlbnQsIGNhbGxiYWNrOiBGdW5jdGlvbiwgcmVjb3JkOiBhbnkpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNhbGxiYWNrKHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBleHRlcm5hbENhbGxiYWNrXHJcblxyXG4gIC8vI3JlZ2lvbiBkdXBsaWNhdGVSZWNvcmRcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGR1cGxpY2FyZSB1biByZWNvcmQgZGVsbGEgZm9ybS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBkdXBsaWNhcmUuXHJcbiAgICovXHJcbiAgZHVwbGljYXRlUmVjb3JkKHBhbmVsOiBQYW5lbCwgb25seVZpZXc6IGJvb2xlYW4sIGksIGV2OiBFdmVudCkge1xyXG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZHVwbGljYXRlUmVjb3JkJyk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHBhbmVsLnJlY29yZC5JRDtcclxuICAgIHRoaXMuaXNEdXBsaWNhdGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICBtaW5IZWlnaHQ6IFwiMTAwcHhcIixcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGR1cGxpY2F0ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gZGVsZXRlUmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkLCBldjogRXZlbnQpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMub25EZWxldGVSZWNvcmQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZGVsZXRlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiByZWxvYWRUYWJsZXNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHJlbG9hZFRhYmxlc1xyXG5cclxuICAvLyNyZWdpb24gc2F2ZU9yRXhpdEZvcm1cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaSBkYXRpIGluc2VyaXRpIGRhbGwndXRlbnRlIHVuYSB2b2x0YSBjb25jbHVzYSBsYSBjb21waWxhemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKi9cclxuICBzYXZlT3JFeGl0Rm9ybShyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LXZpZXctZm9ybS1yZWNvcmQgc2F2ZScsIHJlY29yZClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHNhdmVPckV4aXRGb3JtXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFmdGVyU2F2ZVJlY29yZFxyXG4gIG9uQWZ0ZXJTYXZlUmVjb3JkKGV2ZW50KSB7XHJcbiAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3Qtdmlldy1mb3JtLXJlY29yZCBhZnRlcnNhdmUnLCBldmVudClcclxuICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25BZnRlclNhdmVSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIG9uQWRkVmlld0VkaXRSZWNvcmQyXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIHF1YW5kbyBzaSB2dW9sZSBhZ2dpdW5nZXJlLCB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHVuIHJlY29yZC5cclxuICAgKiBTZSBsJ2V2ZW50byDDqCBudWxsIHZ1b2wgZGlyZSBjaGUgc3RpYW1vIGFnZ2l1bmdlbmRvIHVuIG51b3ZvIHJlY29yZCBhbHRyaW1lbnRpIHNpYW1vIGluIG1vZGlmaWNhXHJcbiAgICogbyB2aXN1YWxpenphemlvbmUuIEluIHF1ZXN0aSB1bHRpbWkgZHVlIGNhc2ksIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZHBvaW50IHBlciBpbCByZWN1cGVyb1xyXG4gICAqIGRlbCByZWNvcmQgY29tcGxldG8gYWxsb3JhIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciwgYWx0cmltZW50aSB2aWVuZSB1c2F0byBsJ29nZ2V0dG8gc2VsZXppb25hdG8uXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gY29uIGR1ZSBwcm9wcmlldMOgOlxyXG4gICAqIFwicmVjb3JkXCIgPSBvZ2dldHRvIGRhIG1vZGlmaWNhcmUvdmlzdWFsaXp6YXJlLFxyXG4gICAqIFwib25seVZpZXdcIiA9IGJvb2xlYW5vIChzZSBUUlVFIHNpYW1vIGluIHZpc3VhbGl6emF6aW9uZSBhbHRyaW1lbnRpIGluIG1vZGlmaWNhKVxyXG4gICAqL1xyXG4gIG9uQWRkVmlld0VkaXRSZWNvcmQyKGV2ZW50OiB7IHJlY29yZDogUmVjb3JkOyBvbmx5VmlldzogYm9vbGVhbiB9KSB7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG5cclxuICAgIHRoaXMub25seVZpZXcgPSBldmVudC5vbmx5VmlldztcclxuXHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93QmFja0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vdXRDb21waWxlQ29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b24gPSAhZXZlbnQub25seVZpZXc7XHJcbiAgICB0aGlzLm91dENvbXBpbGVDb25maWd1cmF0aW9ucy5zaG93VGl0bGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgLy8gcHJlcGFybyBsYSB2ZXJzaW9uZSBjb3JyZXR0YSBkZWwgZm9ybVxyXG4gICAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLkVudElELFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgICAgIFBhcmFtVmFsdWU6IGV2ZW50LnJlY29yZC5WZXJzaW9uLFxyXG4gICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICAgICAgICAgIHZhciBkeW5hbWljUmVjb3JkUGFyYW1zID0gW1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogZXZlbnQucmVjb3JkLklELFxyXG4gICAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgICAgICAgICAocmVzOiBEeW5SZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQuSUQgPSByZXMuSUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC51c2VySUQgPSByZXMudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50LnJlY29yZCkpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm1JRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICAgIH0gICAgICAgICAgXHJcblxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSBudWxsO1xyXG4gICAgICAvLyB0aGlzLm9ubHlWaWV3ID0gZmFsc2U7XHJcbiAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkFkZFZpZXdFZGl0UmVjb3JkMlxyXG5cclxuICAvLyNyZWdpb24gb3BlbkFsbFxyXG4gIG9wZW5BbGwoKXtcclxuICAgIHRoaXMuaXNGdWxsT3BlbmVkID0gIXRoaXMuaXNGdWxsT3BlbmVkO1xyXG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaCgocGFuZWwpID0+IHtcclxuICAgICAgaWYgKHBhbmVsLmlzT3BlbiAhPSB0aGlzLmlzRnVsbE9wZW5lZCl7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwLVwiK3BhbmVsLnJlY29yZC5JRCtcIi12aXNpYmlsaXR5XCIpLmNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvcGVuQWxsXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuQWRkUG9wdXBcclxuICBvcGVuQWRkUG9wdXAoKSB7XHJcbiAgICAvLyBtaSBzc2ljdXJvIGNoZSBub24gY2kgc2lhbm8gcGFubmVsbGkgaW4gbW9kaWZpY2EgcGVyY2jDqCBhbHRyaW1lbnRpIHZhIGluIGNvbmZsaXR0byBsJ3VwZGF0ZSBjb24gbCdhZGRcclxuICAgIHRoaXMucGFuZWxzLmZvckVhY2goKHBhbmVsKSA9PiB7XHJcbiAgICAgIGlmKHBhbmVsLnBhZ2VTdGF0ZSA9ICdtb2RpZmljYUNvbnRlbnV0bycpe1xyXG4gICAgICAgIHBhbmVsLnBhZ2VTdGF0ZSA9ICd2aXN1YWxpenphQ29udGVudXRvJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9IG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtSUQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBvcHVwTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzRHVwbGljYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5vcGVuQWRkRGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLm9wZW5BZGREaWFsb2csIHtcclxuICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgd2lkdGg6IFwiODB2d1wiLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiBcIjEwMHB4XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIFJ1bkVuZFBvaW50Q2FsbFwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb3BlbkFkZFBvcHVwXHJcblxyXG4gIC8vI3JlZ2lvbiBvcGVuR3JhcGhzXHJcbiAgb3BlbkdyYXBocygpIHtcclxuICAgIFxyXG4gICAgdGhpcy5vcGVuR3JhcGhEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMub3BlbkdyYXBoRGlhbG9nLCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIG1pbldpZHRoOiBcIjgwdndcIixcclxuICAgICAgbWluSGVpZ2h0OiBcIjcwdmhcIixcclxuICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZoXCJcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydkeW5hbWljLW1vZHVsZS1ncmFwaHMvJyArIHRoaXMuZm9ybUlEICsgJy8nICsgdGhpcy51c2VySURdKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9wZW5HcmFwaHNcclxuXHJcbiAgLy8jcmVnaW9uIGNsb3NlR3JhcGhzXHJcbiAgY2xvc2VHcmFwaHMoKSB7XHJcbiAgICB0aGlzLm9wZW5HcmFwaERpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjbG9zZUdyYXBoc1xyXG4gICAgXHJcbiAgLy8jcmVnaW9uIG9uQWRkU2F2ZVJlY29yZFxyXG4gIG9uQWRkU2F2ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkFkZERpYWxvZ1JlZiAhPSBudWxsKSB7IHRoaXMub3BlbkFkZERpYWxvZ1JlZi5jbG9zZSgpOyB9XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChyZWNvcmQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25BZGRTYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkFkZEFmdGVyU2F2ZVJlY29yZFxyXG4gIG9uQWRkQWZ0ZXJTYXZlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuQWRkRGlhbG9nUmVmICE9IG51bGwpIHsgdGhpcy5vcGVuQWRkRGlhbG9nUmVmLmNsb3NlKCk7IH1cclxuICAgIHRoaXMuZ2V0UmVjb3Jkc0J5Rm9ybUlEKCk7XHJcbiAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBvbkFkZEFmdGVyU2F2ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gcHJpbnRBZGRpdGlvbmFsSW5mb1xyXG4gIHByaW50QWRkaXRpb25hbEluZm8ocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGxldCBvdXQgPSBcIlwiO1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlICE9IG51bGwgJiYgdGhpcy5jb25maWd1cmF0aW9ucy5saXN0Vmlld1JlY29yZFRpdGxlLmxlbmd0aCA+IDApe1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJhdGlvbnMubGlzdFZpZXdSZWNvcmRUaXRsZS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChyZWNvcmQuQWRkaXRpb25hbEluZm8gIT0gbnVsbCl7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gL1xcKCguKylcXCkvZzs7IC8vIHBhdHRlcm4gcGVyIHVubyBvIHBpw7kgbnVtZXJpXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gKGRhdGVmb3JtYXQ9RUVFRSwgZCBNTU1NIHksIEg6bW06c3MpXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKGl0ZW0pO1xyXG4gICAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgICAgbGV0IG15bWF0Y2ggPSBtYXRjaFsxXTtcclxuICAgICAgICAgIGlmKG15bWF0Y2guaW5jbHVkZXMoXCJkYXRlZm9ybWF0XCIpKXtcclxuICAgICAgICAgICAgbGV0IGZvcm1hdCA9IG15bWF0Y2guc3BsaXQoXCI9XCIpWzFdO1xyXG4gICAgICAgICAgICBsZXQgdG9rZW4gPSBpdGVtLnNwbGl0KFwiKFwiKVswXTtcclxuICAgICAgICAgICAgb3V0ICs9IHJlY29yZC5BZGRpdGlvbmFsSW5mbyAhPSBudWxsICYmIHJlY29yZC5BZGRpdGlvbmFsSW5mb1t0b2tlbl0gIT0gbnVsbCA/IFwiIFwiICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocmVjb3JkLkFkZGl0aW9uYWxJbmZvW3Rva2VuXSwgZm9ybWF0KSA6IHJlY29yZFt0b2tlbl0gPyBcIiBcIiArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJlY29yZFt0b2tlbl0sIGZvcm1hdCkgOiAgXCIgXCIgKyB0b2tlbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0ICs9IHJlY29yZC5BZGRpdGlvbmFsSW5mbyAhPSBudWxsICYmIHJlY29yZC5BZGRpdGlvbmFsSW5mb1tpdGVtXSAhPSBudWxsID8gXCIgXCIgKyByZWNvcmQuQWRkaXRpb25hbEluZm9baXRlbV0gOiByZWNvcmRbaXRlbV0gPyBcIiBcIiArIHJlY29yZFtpdGVtXSA6ICBcIiBcIiArIGl0ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcHJpbnRBZGRpdGlvbmFsSW5mb1xyXG5cclxuICBvbkNsaWNrRHJhZ0luZGljYXRvcihlbDogYW55KXtcclxuICAgIHRoaXMuY2xpY2tEcmFnSW5kaWNhdG9yLmVtaXQoZWwpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnU3RhcnRlZChlbDogYW55KXtcclxuICAgICAgdGhpcy5kcmFnU3RhcnRlZC5lbWl0KGVsKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ1JlbGVhc2VkKCl7XHJcbiAgICAgIHRoaXMuZHJhZ1JlbGVhc2VkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uRXh0ZXJuYWxDb21wb25lbnRPdXQoZXY6IGV2ZW50T3V0KXtcclxuICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gIH1cclxuXHJcbiAgb25GaXJlVHJpZ2dlcihldjogRmlyZVRyaWdnZXIpe1xyXG4gICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KGV2KTtcclxuICB9IFxyXG5cclxuICByZWxvYWRIVE1MUmVhZGFibGVWYWx1ZXMoYW5zd2VySWQ6IHN0cmluZyl7XHJcblxyXG4gICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiBhbnN3ZXJJZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGFuZWxzLmZpbmQoeCA9PiB4LnJlY29yZC5JRCA9PSBhbnN3ZXJJZCkucmVjb3JkLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHJlcy5IVE1McmVhZGFibGVWYWx1ZXM7ICAgIFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgXHJcbiAgICB0aGlzLmxpYlNpbmdsZUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubGliU2luZ2xlTG9hZGVkID0gdHJ1ZTtcclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cImxpc3Qtdmlldy1mb3JtLXJlY29yZFwiPlxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJzaG93VGl0bGUgfHwgZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJzaG93VGl0bGUgJiYgbG9hZGVkZm9ybVwiPk1vZHVsbyB7eyBmb3JtLk5hbWUgfX0gPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZCB8fCBkZWZhdWx0TGlzdEFjdGlvbnMuZ3JhcGhzXCI+XHJcblxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiaXNMaXN0Vmlld1wiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuVGFiZWxsYXIoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj50YWJsZTwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPlRhYmVsbGFyZTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiaXNUYWJlbGxhclwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvcGVuTGlzdFZpZXcoKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+TGlzdGE8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPiAgICAgIFxyXG5cclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCIgXHJcbiAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5BbGwoKVwiXHJcbiAgICAgICAgKm5nSWY9XCJpc0xpc3RWaWV3XCI+XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzRnVsbE9wZW5lZFwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCIgKm5nSWY9XCIhaXNGdWxsT3BlbmVkXCI+QXByaSB0dXR0bzwvc3Bhbj5cclxuXHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaXNGdWxsT3BlbmVkICYmIGlzTGlzdFZpZXdcIj5leHBhbmRfbGVzczwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiICpuZ0lmPVwiaXNGdWxsT3BlbmVkXCI+Q2hpdWRpIHR1dHRvPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gICAgICBcclxuICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAqbmdJZj1cImRlZmF1bHRMaXN0QWN0aW9ucy5ncmFwaHNcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkdyYXBocygpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPnBpZV9jaGFydDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweFwiPkdyYWZpY2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIFxyXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBcclxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkFkZFBvcHVwKClcIj5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPiAgICAgIFxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICBcclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNUYWJlbGxhclwiPlxyXG4gICAgICBcclxuPGhsaXN0LWZvcm0tcmVjb3JkXHJcbmNsYXNzPVwiZHluYW1pYy1tb2R1bGUtaGxpc3RcIlxyXG5bZm9ybUlEXT1cImZvcm1JRFwiXHJcblxyXG5bZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcblxyXG5bY29uZmlndXJhdGlvbnNdPVwiY29uZmlndXJhdGlvbnNcIlxyXG5bZXh0ZXJuYWxCdXR0b25zXT1cImV4dGVybmFsQnV0dG9uc1wiXHJcbj5cclxuPC9obGlzdC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciBjbGFzcz1cImRhdGVcIiBbcGxhY2Vob2xkZXJdPVwiJ1BlcmlvZG8gaW5pemlvJ1wiIFtsYWJlbF09XCInUGVyaW9kbyBpbml6aW8nXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJtaW5wZXJpb2RcIlxyXG4gICAgICAgICAgICAgICAgW3BpY2tlck1vZGVdPVwibW9kZXMuREFURVBJQ0tFUlwiIFtvdXRwdXRGb3JtYXRdPVwiJ0REL01NL1lZWVknXCIgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgPHRtdy1kYXRldGltZXBpY2tlciBjbGFzcz1cImRhdGVcIiBbcGxhY2Vob2xkZXJdPVwiJ1BlcmlvZG8gZmluZSdcIiBbbGFiZWxdPVwiJ1BlcmlvZG8gZmluZSdcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cIm1heHBlcmlvZFwiXHJcbiAgICAgICAgICAgICAgICBbcGlja2VyTW9kZV09XCJtb2Rlcy5EQVRFUElDS0VSXCIgW291dHB1dEZvcm1hdF09XCInREQvTU0vWVlZWSdcIiBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPC90bXctZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgICAgICA8ZXFwLXNlbGVjdCBbYXJyYXlEYXRhXT1cInRhYmVsbGFyRmllbGRzXCIgWyhuZ01vZGVsSW5wdXQpXT1cInNlbGVjdGVkVGFiZWxsYXJGaWVsZHNcIiBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uZSBkZWkgY2FtcGknXCJcclxuICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ0Rlc2NyaXB0aW9uJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ1RleHREZXNjcmlwdGlvbidcIiBbaXNNdWx0aVNlbGVjdF09XCJ0cnVlXCIgY2xhc3M9XCJlcXAtZm9ybS1maWVsZFwiPlxyXG4gICAgICAgICAgICA8L2VxcC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTMgbXQtMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZFRhYmVsbGFyRmllbGRzID09IG51bGwgfHwgc2VsZWN0ZWRUYWJlbGxhckZpZWxkcy5sZW5ndGggPT0gMFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ncmFwaC1nZW5lcmF0ZSBidXR0b24tbmV4dCBtZS0yXCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdlbmVyYXRlVGFiZWxsYXIoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgR2VuZXJhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgIDxlcXAtdGFibGUgaWQ9XCJ0YWJlbGxhclwiIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJ0YWJlbGxhckNvbmRpdGlvbkxvYWRlZFwiIFtoaWdobGlnaHRDb2xvcl09XCIndHJhbnNwYXJlbnQnXCJcclxuICAgICAgW2RhdGFdPVwidGFiZWxsYXJWYWx1ZXNcIiBbY29sdW1uc109XCJ0YWJlbGxhckNvbHVtbnNcIiBbbWF0UGFnaW5hdG9yU2l6ZV09XCIxMDAwXCIgW21hdFBhZ2luYXRvckxlbmd0aF09XCJbMTAwMF1cIj48L2VxcC10YWJsZT5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgPG1hdC1hY2NvcmRpb24gICNkb25lTGlzdD1cImNka0Ryb3BMaXN0XCIgY2RrRHJvcExpc3QgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiW3RvZG9MaXN0XVwiIFtoaWRlVG9nZ2xlXT1cInRlc3RcIiBbbXVsdGldPVwidHJ1ZVwiIGNsYXNzPVwiZGYtbGlzdC12aWV3LWFjY29yZGlvblwiICpuZ0lmPVwiaXNMaXN0Vmlld1wiPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgcGFuZWxzOyBpbmRleCBhcyBpXCIgXHJcbiAgICAgICAgW2V4cGFuZGVkXT1cInBhbmVsLmlzT3BlblwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIjFcIiBcclxuICAgICAgICBbY2xhc3NdPVwicGFuZWwuaGlnaGxpZ2h0ZWQgPyAnZG1fcGFuZWxfaGlnaGxpZ2h0ZWQnIDogJzAnXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZWwocGFuZWwsIHBhbmVsLnJlY29yZClcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwib25DbGlja0RyYWdJbmRpY2F0b3IoW3BhbmVsLnJlY29yZCxmb3JtXSlcIiBjbGFzcz1cImNsaWNrLWljb25cIiAqbmdJZj1cImNvbmZpZ3VyYXRpb25zLmlzRHJhZ2dhYmxlTGlzdFZpZXdcIj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+IHt7ICFzaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIiFjb25maWd1cmF0aW9ucy5pc0RyYWdnYWJsZUxpc3RWaWV3XCI+XHJcbiAgICAgICAgICAgIHt7ICFzaG93VGl0bGUgPyBmb3JtLk5hbWUgOiBcIlwiIH19IHYue3sgcGFuZWwucmVjb3JkLlZlcnNpb24gfX0gLSB7eyBwcmludEFkZGl0aW9uYWxJbmZvKHBhbmVsLnJlY29yZCkgfX1cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPiAgICAgICAgICBcclxuICAgICAgICAgIDwhLS0jcmVnaW9uIEJPVFRPTkkgUEVSIExFIEFaSU9OSSAtLT5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCIgXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgIGlkPVwicC17e3BhbmVsLnJlY29yZC5JRH19LXt7YnV0dG9uLmljb259fVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWNvcmQtaWNvbiB7e2J1dHRvbi5leHRyYUNsYXNzfX1cIiBcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgW2hpZGRlbl09XCJidXR0b24uaWNvbiA9PSAnZmlsZV9jb3B5JyAmJiAocGFuZWxzLmxlbmd0aCA9PSAwIHx8IHBhbmVsLnJlY29yZC5WZXJzaW9uICE9IHBhbmVsc1swXS5yZWNvcmQuVmVyc2lvbilcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJidXR0b24uZm4ocGFuZWwsaSwkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZXh0ZXJuYWxCdXR0b25zXCIgXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVjb3JkLWljb24ge3tidXR0b24uZXh0cmFDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udGV4dFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4dGVybmFsQ2FsbGJhY2soJGV2ZW50LGJ1dHRvbi5mbixwYW5lbC5yZWNvcmQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnt7YnV0dG9uLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV4YW1wbGUtc3BhY2VyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPCEtLSNlbmRyZWdpb24gQk9UVE9OSSBQRVIgTEUgQVpJT05JIC0tPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblxyXG4gICAgICAgIDwhLS0gI3JlZ2lvbiBDT05URU5VVE8gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsLnBhZ2VTdGF0ZSAhPSBudWxsXCI+XHJcblxyXG4gICAgICAgICAgPGxpYi1zaW5nbGUtcmVjb3JkXHJcbiAgICAgICAgICAgICpuZ0lmPVwibGliU2luZ2xlTG9hZGVkXCJcclxuICAgICAgICAgICAgW29ubHlWaWV3XT1cIm9ubHlWaWV3XCJcclxuICAgICAgICAgICAgW3JlY29yZF0gPSBcInBhbmVsLnJlY29yZFwiIFxyXG4gICAgICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXSA9IFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgIFt1c2VySURdPVwidXNlcklEXCJcclxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICAgICAgW291dENvbXBpbGVDb25maWd1cmF0aW9uc109XCJvdXRDb21waWxlQ29uZmlndXJhdGlvbnNcIlxyXG4gICAgICAgICAgICBbcGFnZVN0YXRlXT1cInBhbmVsLnBhZ2VTdGF0ZVwiXHJcbiAgICAgICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHNhdmVSZWNvcmRFdmVudCk9XCJzYXZlT3JFeGl0Rm9ybSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGFmdGVyU2F2ZVJlY29yZEV2ZW50KT1cIm9uQWZ0ZXJTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuXHJcbiAgICAgICAgICA8L2xpYi1zaW5nbGUtcmVjb3JkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0jZW5kcmVnaW9uIENPTlRFTlVUTyAtLT5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPC9tYXQtYWNjb3JkaW9uPlxyXG5cclxuXHJcbiAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDxtYXQtY2FyZC1mb290ZXI+XHJcbiAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbjwvbWF0LWNhcmQ+XHJcblxyXG48IS0tI3JlZ2lvbiBESUFMT0cgQUdHSVVOVEEgUklTUE9TVEEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjb3BlbkFkZERpYWxvZz5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkLWRlZmF1bHQgb3ZlcmxheS1jYXJkIGNhcmQtaW5tb2RhbC10cnVlXCI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxhZGQtZm9ybS1yZWNvcmRcclxuICAgICAgICBjbGFzcz1cImR5bmFtaWMtbW9kdWxlLWNvbXBpbGVcIlxyXG4gICAgICAgIFtmb3JtSURdPVwiZm9ybUlEXCJcclxuICAgICAgICBbb3JnYUlEXT1cIm9yZ2FJRFwiXHJcbiAgICAgICAgW29ubHlWaWV3XT1cImZhbHNlXCJcclxuICAgICAgICBbcmVjb3JkXT1cInNlbGVjdGVkUmVjb3JkXCJcclxuICAgICAgICBbaXNEdXBsaWNhdGVdPVwiaXNEdXBsaWNhdGluZ1wiXHJcbiAgICAgICAgXHJcbiAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCJcclxuICAgICAgICBbZW5kUG9pbnRDb25maWd1cmF0aW9uXT1cImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG5cclxuICAgICAgICBbY29uZmlndXJhdGlvbnNdPVwiY29tcGlsZUNvbmZpZ3VyYXRpb25zXCJcclxuXHJcbiAgICAgICAgKG91dCk9XCJvbkV4dGVybmFsQ29tcG9uZW50T3V0KCRldmVudClcIlxyXG4gICAgICAgIChzYXZlUmVjb3JkRXZlbnQpPVwib25BZGRTYXZlUmVjb3JkKCRldmVudClcIlxyXG4gICAgICAgIChhZnRlclNhdmVSZWNvcmRFdmVudCk9XCJvbkFkZEFmdGVyU2F2ZVJlY29yZCgkZXZlbnQpXCJcclxuICAgICAgICAoZmlyZVRyaWdnZXIpPVwib25GaXJlVHJpZ2dlcigkZXZlbnQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2FkZC1mb3JtLXJlY29yZD5cclxuXHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSNlbmRyZWdpb24gRElBTE9HIEFHR0lVTlRBIFJJU1BPU1RBIC0tPlxyXG5cclxuPCEtLSNyZWdpb24gRElBTE9HIFZJU1VBTElaWkFaSU9ORSBHUkFGSUNJIC0tPlxyXG48bmctdGVtcGxhdGUgI29wZW5HcmFwaERpYWxvZz5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkLWRlZmF1bHQgb3ZlcmxheS1jYXJkIGNhcmQtaW5tb2RhbC10cnVlIGdyYXBoQ2FyZFwiPlxyXG4gICAgXHJcbiAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBncmFwaC1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPkdyYWZpY28ge3sgZm9ybS5OYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPG1hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiIFxyXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJjbG9zZUdyYXBocygpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxyXG4gICAgICAgICAgYXJyb3dfYmFja1xyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5JbmRpZXRybzwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgIDxncmFwaHNcclxuICAgICAgICBbZm9ybUlEXT1cImZvcm1JRFwiXHJcbiAgICAgICAgW3VzZXJJRF09XCJ1c2VySURcIlxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uc10gPSBcIm91dENvbXBpbGVDb25maWd1cmF0aW9uc1wiXHJcbiAgICAgICAgW2VuZFBvaW50Q29uZmlndXJhdGlvbl0gPSBcImVuZFBvaW50Q29uZmlndXJhdGlvblwiXHJcbiAgICAgID5cclxuICAgICAgPC9ncmFwaHM+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0jZW5kcmVnaW9uIERJQUxPRyBWSVNVQUxJWlpBWklPTkUgR1JBRklDSSAtLT5cclxuIl19