fabrikantencore 2.10.16 → 2.10.18

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.
@@ -199,13 +199,13 @@ class FabActionmenuComponent {
199
199
  }
200
200
  }
201
201
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: FabActionmenuComponent, deps: [{ token: i1.MobileService }, { token: i2.FabrikantenService }, { token: i3.TranslateService }, { token: i4.BestekService }, { token: i5.TextureService }, { token: i6.SVGService }, { token: i7.MatLegacyDialog }, { token: i8.WebGLService }, { token: i9.ToebehorenService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
202
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: FabActionmenuComponent, selector: "app-fab-actionmenu", inputs: { display: "display" }, ngImport: i0, template: "<ng-container *ngIf=\"FabrikantenService.FabrikantenSettingsViewModel != null\">\r\n <div class=\"column\">\r\n <ng-container *ngIf=\"Show2DButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Snede) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Snede\" (selectionChange)=\"RefreshSnede()\">\r\n <mat-option *ngFor=\"let snede of SVGService.Snedes\" [value]=\"snede\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SnedeItem, null, snede) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Schaal) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Schaal\" (selectionChange)=\"RefreshSchaal()\">\r\n <mat-option [value]=\"'0'\">1:1</mat-option>\r\n <mat-option [value]=\"'1'\">1:2</mat-option>\r\n <mat-option [value]=\"'2'\">1:5</mat-option>\r\n <mat-option [value]=\"'3'\">1:10</mat-option>\r\n <mat-option [value]=\"'4'\">1:20</mat-option>\r\n <mat-option [value]=\"'5'\">1:50</mat-option>\r\n <mat-option [value]=\"'6'\">1:100</mat-option>\r\n <mat-option [value]=\"'7'\">1:200</mat-option>\r\n <mat-option [value]=\"'8'\">1:500</mat-option>\r\n <mat-option [value]=\"'9'\">1:1000</mat-option>\r\n <mat-option [value]=\"'10'\">1:2000</mat-option>\r\n <mat-option [value]=\"'11'\">1:5000</mat-option>\r\n <mat-option [value]=\"'12'\">1:10000</mat-option>\r\n <mat-option [value]=\"'13'\">1:20000</mat-option>\r\n <mat-option [value]=\"'14'\">1:50000</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowBestekButtons()\">\r\n <ng-container *ngIf=\"ShowBestekSelect()\">\r\n <mat-button-toggle-group [value]=\"BestekService.TypeBestek\" (change)=\"BestekService.TypeBestek = $event.source.value\" appearance=\"legacy\">\r\n <mat-button-toggle *ngIf=\"ShowSTABU()\" value=\"STABU\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.STABU) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowOSF()\" value=\"OSF\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.OSF) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowVrij()\" value=\"Vrij\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SpecificationText) }}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <div>\r\n &nbsp;\r\n </div>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoard()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button copy-suf-button\" (click)=\"CopyToClipBoardSUF()\" *ngIf=\"BestekService.TypeBestek == 'STABU'\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.ClipboardSUF) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadBestek()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowAutoSpecificationButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoardAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowToebehorenButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">Toebehoren</mat-label>\r\n <mat-select [(ngModel)]=\"FabrikantenService.SelectedToebehoren\" (selectionChange)=\"ToebehorenService.OpenToebehoren(this.ChangeDetectorRef)\">\r\n <ng-container *ngFor=\"let item of FabrikantenService.FabrikantenViewModel.selectedProduct.fabrikantenBCBProductViewModels[0].bcbProductToebehoren\">\r\n <mat-option *ngIf=\"!item.bcbProduct\" [value]=\"item\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Toebehoren, TranslationSubCategory.Name, item.id) }}\r\n </mat-option>\r\n <mat-option *ngIf=\"item.bcbProduct\" [value]=\"item\">\r\n {{ item.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let downloadcategory of FabrikantenService.FabrikantenSettingsViewModel.downloadCategories\">\r\n <ng-container *ngIf=\"ShowDownloadCategory(downloadcategory.name)\">\r\n <ng-container *ngFor=\"let downloaditem of downloadcategory.items\">\r\n <ng-container *ngIf=\"downloadcategory.name == 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, FabrikantenService.GetSelectedToebehoren()?.bcbeboId)\" *ngIf=\"(!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()) && (FabrikantenService.GetSelectedToebehoren() != null)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"downloadcategory.name != 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, undefined)\" *ngIf=\"!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let customDownload of FabrikantenService.FabrikantenViewModel.selectedProduct.customDownloads\">\r\n <ng-container *ngIf=\"customDownload.downloadType == 1\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"DownloadCustom(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.DownloadRevit) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"customDownload.downloadType == 2\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"OpenPDF(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ customDownload.name }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let pdftemplate of FabrikantenService.FabrikantenViewModel.selectedProduct.pdfTemplates\">\r\n <button mat-stroked-button class=\"toolbar-button template-button\" (click)=\"DownloadPDFTemplate(pdftemplate)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Specification) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowTextureButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.patroonURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Texture) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.bumpURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Bumpmap) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button bcb-button\" (click)=\"OpenBCBLink()\" *ngIf=\"ShowBCBButton()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.BCB) }}\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n</ng-container>\r\n", styles: ["app-fab-actionmenu .mat-stroked-button{white-space:unset!important}app-fab-actionmenu .icon{margin-right:3px}app-fab-actionmenu .toolbar-button{margin-top:3px;width:100%}app-fab-actionmenu .row{display:flex;line-height:37px}app-fab-actionmenu .row-icon{align-items:center;display:flex}app-fab-actionmenu .column{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i15.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i15.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i16.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }], encapsulation: i0.ViewEncapsulation.None });
202
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: FabActionmenuComponent, selector: "app-fab-actionmenu", inputs: { display: "display" }, ngImport: i0, template: "<ng-container *ngIf=\"FabrikantenService.FabrikantenSettingsViewModel != null\">\r\n <div class=\"column\">\r\n <ng-container *ngIf=\"Show2DButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Snede) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Snede\" (selectionChange)=\"RefreshSnede()\">\r\n <mat-option *ngFor=\"let snede of SVGService.Snedes\" [value]=\"snede\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SnedeItem, null, snede) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Schaal) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Schaal\" (selectionChange)=\"RefreshSchaal()\">\r\n <mat-option [value]=\"'0'\">1:1</mat-option>\r\n <mat-option [value]=\"'1'\">1:2</mat-option>\r\n <mat-option [value]=\"'2'\">1:5</mat-option>\r\n <mat-option [value]=\"'3'\">1:10</mat-option>\r\n <mat-option [value]=\"'4'\">1:20</mat-option>\r\n <mat-option [value]=\"'5'\">1:50</mat-option>\r\n <mat-option [value]=\"'6'\">1:100</mat-option>\r\n <mat-option [value]=\"'7'\">1:200</mat-option>\r\n <mat-option [value]=\"'8'\">1:500</mat-option>\r\n <mat-option [value]=\"'9'\">1:1000</mat-option>\r\n <mat-option [value]=\"'10'\">1:2000</mat-option>\r\n <mat-option [value]=\"'11'\">1:5000</mat-option>\r\n <mat-option [value]=\"'12'\">1:10000</mat-option>\r\n <mat-option [value]=\"'13'\">1:20000</mat-option>\r\n <mat-option [value]=\"'14'\">1:50000</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowBestekButtons()\">\r\n <ng-container *ngIf=\"ShowBestekSelect()\">\r\n <mat-button-toggle-group [value]=\"BestekService.TypeBestek\" (change)=\"BestekService.TypeBestek = $event.source.value\" appearance=\"legacy\">\r\n <mat-button-toggle *ngIf=\"ShowSTABU()\" value=\"STABU\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.STABU) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowOSF()\" value=\"OSF\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.OSF) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowVrij()\" value=\"Vrij\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SpecificationText) }}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <div>\r\n &nbsp;\r\n </div>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoard()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button copy-suf-button\" (click)=\"CopyToClipBoardSUF()\" *ngIf=\"BestekService.TypeBestek == 'STABU'\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.ClipboardSUF) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadBestek()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowAutoSpecificationButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoardAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowToebehorenButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">Toebehoren</mat-label>\r\n <mat-select [(ngModel)]=\"FabrikantenService.SelectedToebehoren\" (selectionChange)=\"ToebehorenService.OpenToebehoren(this.ChangeDetectorRef)\">\r\n <ng-container *ngFor=\"let item of FabrikantenService.FabrikantenViewModel.selectedProduct.fabrikantenBCBProductViewModels[0].bcbProductToebehoren\">\r\n <mat-option *ngIf=\"!item.bcbProduct\" [value]=\"item\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Toebehoren, TranslationSubCategory.Name, item.id) }}\r\n </mat-option>\r\n <mat-option *ngIf=\"item.bcbProduct\" [value]=\"item\">\r\n {{ item.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let downloadcategory of FabrikantenService.FabrikantenSettingsViewModel.downloadCategories\">\r\n <ng-container *ngIf=\"ShowDownloadCategory(downloadcategory.name)\">\r\n <ng-container *ngFor=\"let downloaditem of downloadcategory.items\">\r\n <ng-container *ngIf=\"downloadcategory.name == 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, FabrikantenService.GetSelectedToebehoren()?.bcbeboId)\" *ngIf=\"(!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()) && (FabrikantenService.GetSelectedToebehoren() != null)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"downloadcategory.name != 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, undefined)\" *ngIf=\"!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"FabrikantenService.FabrikantenViewModel?.selectedProduct != null\">\r\n <ng-container *ngFor=\"let customDownload of FabrikantenService.FabrikantenViewModel.selectedProduct.customDownloads\">\r\n <ng-container *ngIf=\"customDownload.downloadType == 1\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"DownloadCustom(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.DownloadRevit) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"customDownload.downloadType == 2\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"OpenPDF(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ customDownload.name }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let pdftemplate of FabrikantenService.FabrikantenViewModel.selectedProduct.pdfTemplates\">\r\n <button mat-stroked-button class=\"toolbar-button template-button\" (click)=\"DownloadPDFTemplate(pdftemplate)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Specification) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowTextureButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.patroonURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Texture) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.bumpURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Bumpmap) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button bcb-button\" (click)=\"OpenBCBLink()\" *ngIf=\"ShowBCBButton()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.BCB) }}\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n</ng-container>\r\n", styles: ["app-fab-actionmenu .mat-stroked-button{white-space:unset!important}app-fab-actionmenu .icon{margin-right:3px}app-fab-actionmenu .toolbar-button{margin-top:3px;width:100%}app-fab-actionmenu .row{display:flex;line-height:37px}app-fab-actionmenu .row-icon{align-items:center;display:flex}app-fab-actionmenu .column{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i15.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i15.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i16.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }], encapsulation: i0.ViewEncapsulation.None });
203
203
  }
204
204
  export { FabActionmenuComponent };
205
205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: FabActionmenuComponent, decorators: [{
206
206
  type: Component,
207
- args: [{ selector: 'app-fab-actionmenu', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"FabrikantenService.FabrikantenSettingsViewModel != null\">\r\n <div class=\"column\">\r\n <ng-container *ngIf=\"Show2DButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Snede) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Snede\" (selectionChange)=\"RefreshSnede()\">\r\n <mat-option *ngFor=\"let snede of SVGService.Snedes\" [value]=\"snede\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SnedeItem, null, snede) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Schaal) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Schaal\" (selectionChange)=\"RefreshSchaal()\">\r\n <mat-option [value]=\"'0'\">1:1</mat-option>\r\n <mat-option [value]=\"'1'\">1:2</mat-option>\r\n <mat-option [value]=\"'2'\">1:5</mat-option>\r\n <mat-option [value]=\"'3'\">1:10</mat-option>\r\n <mat-option [value]=\"'4'\">1:20</mat-option>\r\n <mat-option [value]=\"'5'\">1:50</mat-option>\r\n <mat-option [value]=\"'6'\">1:100</mat-option>\r\n <mat-option [value]=\"'7'\">1:200</mat-option>\r\n <mat-option [value]=\"'8'\">1:500</mat-option>\r\n <mat-option [value]=\"'9'\">1:1000</mat-option>\r\n <mat-option [value]=\"'10'\">1:2000</mat-option>\r\n <mat-option [value]=\"'11'\">1:5000</mat-option>\r\n <mat-option [value]=\"'12'\">1:10000</mat-option>\r\n <mat-option [value]=\"'13'\">1:20000</mat-option>\r\n <mat-option [value]=\"'14'\">1:50000</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowBestekButtons()\">\r\n <ng-container *ngIf=\"ShowBestekSelect()\">\r\n <mat-button-toggle-group [value]=\"BestekService.TypeBestek\" (change)=\"BestekService.TypeBestek = $event.source.value\" appearance=\"legacy\">\r\n <mat-button-toggle *ngIf=\"ShowSTABU()\" value=\"STABU\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.STABU) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowOSF()\" value=\"OSF\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.OSF) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowVrij()\" value=\"Vrij\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SpecificationText) }}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <div>\r\n &nbsp;\r\n </div>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoard()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button copy-suf-button\" (click)=\"CopyToClipBoardSUF()\" *ngIf=\"BestekService.TypeBestek == 'STABU'\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.ClipboardSUF) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadBestek()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowAutoSpecificationButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoardAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowToebehorenButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">Toebehoren</mat-label>\r\n <mat-select [(ngModel)]=\"FabrikantenService.SelectedToebehoren\" (selectionChange)=\"ToebehorenService.OpenToebehoren(this.ChangeDetectorRef)\">\r\n <ng-container *ngFor=\"let item of FabrikantenService.FabrikantenViewModel.selectedProduct.fabrikantenBCBProductViewModels[0].bcbProductToebehoren\">\r\n <mat-option *ngIf=\"!item.bcbProduct\" [value]=\"item\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Toebehoren, TranslationSubCategory.Name, item.id) }}\r\n </mat-option>\r\n <mat-option *ngIf=\"item.bcbProduct\" [value]=\"item\">\r\n {{ item.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let downloadcategory of FabrikantenService.FabrikantenSettingsViewModel.downloadCategories\">\r\n <ng-container *ngIf=\"ShowDownloadCategory(downloadcategory.name)\">\r\n <ng-container *ngFor=\"let downloaditem of downloadcategory.items\">\r\n <ng-container *ngIf=\"downloadcategory.name == 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, FabrikantenService.GetSelectedToebehoren()?.bcbeboId)\" *ngIf=\"(!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()) && (FabrikantenService.GetSelectedToebehoren() != null)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"downloadcategory.name != 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, undefined)\" *ngIf=\"!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let customDownload of FabrikantenService.FabrikantenViewModel.selectedProduct.customDownloads\">\r\n <ng-container *ngIf=\"customDownload.downloadType == 1\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"DownloadCustom(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.DownloadRevit) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"customDownload.downloadType == 2\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"OpenPDF(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ customDownload.name }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let pdftemplate of FabrikantenService.FabrikantenViewModel.selectedProduct.pdfTemplates\">\r\n <button mat-stroked-button class=\"toolbar-button template-button\" (click)=\"DownloadPDFTemplate(pdftemplate)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Specification) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowTextureButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.patroonURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Texture) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.bumpURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Bumpmap) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button bcb-button\" (click)=\"OpenBCBLink()\" *ngIf=\"ShowBCBButton()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.BCB) }}\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n</ng-container>\r\n", styles: ["app-fab-actionmenu .mat-stroked-button{white-space:unset!important}app-fab-actionmenu .icon{margin-right:3px}app-fab-actionmenu .toolbar-button{margin-top:3px;width:100%}app-fab-actionmenu .row{display:flex;line-height:37px}app-fab-actionmenu .row-icon{align-items:center;display:flex}app-fab-actionmenu .column{display:flex;flex-direction:column}\n"] }]
207
+ args: [{ selector: 'app-fab-actionmenu', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"FabrikantenService.FabrikantenSettingsViewModel != null\">\r\n <div class=\"column\">\r\n <ng-container *ngIf=\"Show2DButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Snede) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Snede\" (selectionChange)=\"RefreshSnede()\">\r\n <mat-option *ngFor=\"let snede of SVGService.Snedes\" [value]=\"snede\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SnedeItem, null, snede) }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Schaal) }}</mat-label>\r\n <mat-select [(ngModel)]=\"SVGService.Schaal\" (selectionChange)=\"RefreshSchaal()\">\r\n <mat-option [value]=\"'0'\">1:1</mat-option>\r\n <mat-option [value]=\"'1'\">1:2</mat-option>\r\n <mat-option [value]=\"'2'\">1:5</mat-option>\r\n <mat-option [value]=\"'3'\">1:10</mat-option>\r\n <mat-option [value]=\"'4'\">1:20</mat-option>\r\n <mat-option [value]=\"'5'\">1:50</mat-option>\r\n <mat-option [value]=\"'6'\">1:100</mat-option>\r\n <mat-option [value]=\"'7'\">1:200</mat-option>\r\n <mat-option [value]=\"'8'\">1:500</mat-option>\r\n <mat-option [value]=\"'9'\">1:1000</mat-option>\r\n <mat-option [value]=\"'10'\">1:2000</mat-option>\r\n <mat-option [value]=\"'11'\">1:5000</mat-option>\r\n <mat-option [value]=\"'12'\">1:10000</mat-option>\r\n <mat-option [value]=\"'13'\">1:20000</mat-option>\r\n <mat-option [value]=\"'14'\">1:50000</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowBestekButtons()\">\r\n <ng-container *ngIf=\"ShowBestekSelect()\">\r\n <mat-button-toggle-group [value]=\"BestekService.TypeBestek\" (change)=\"BestekService.TypeBestek = $event.source.value\" appearance=\"legacy\">\r\n <mat-button-toggle *ngIf=\"ShowSTABU()\" value=\"STABU\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.STABU) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowOSF()\" value=\"OSF\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.OSF) }}</mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"ShowVrij()\" value=\"Vrij\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.SpecificationText) }}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <div>\r\n &nbsp;\r\n </div>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoard()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button copy-suf-button\" (click)=\"CopyToClipBoardSUF()\" *ngIf=\"BestekService.TypeBestek == 'STABU'\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.ClipboardSUF) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadBestek()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowAutoSpecificationButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button copy-button\" (click)=\"CopyToClipBoardAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon content_copy\">content_copy</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Clipboard) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button download-bestek-button\" (click)=\"DownloadAutoSpecification()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Download) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowToebehorenButtons()\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label class=\"select-mat-label\">Toebehoren</mat-label>\r\n <mat-select [(ngModel)]=\"FabrikantenService.SelectedToebehoren\" (selectionChange)=\"ToebehorenService.OpenToebehoren(this.ChangeDetectorRef)\">\r\n <ng-container *ngFor=\"let item of FabrikantenService.FabrikantenViewModel.selectedProduct.fabrikantenBCBProductViewModels[0].bcbProductToebehoren\">\r\n <mat-option *ngIf=\"!item.bcbProduct\" [value]=\"item\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Toebehoren, TranslationSubCategory.Name, item.id) }}\r\n </mat-option>\r\n <mat-option *ngIf=\"item.bcbProduct\" [value]=\"item\">\r\n {{ item.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let downloadcategory of FabrikantenService.FabrikantenSettingsViewModel.downloadCategories\">\r\n <ng-container *ngIf=\"ShowDownloadCategory(downloadcategory.name)\">\r\n <ng-container *ngFor=\"let downloaditem of downloadcategory.items\">\r\n <ng-container *ngIf=\"downloadcategory.name == 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, FabrikantenService.GetSelectedToebehoren()?.bcbeboId)\" *ngIf=\"(!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()) && (FabrikantenService.GetSelectedToebehoren() != null)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"downloadcategory.name != 'Toebehoren'\">\r\n <button mat-stroked-button class=\"toolbar-button\" [ngClass]=\"downloaditem.fileType + '-button'\" (click)=\"Download(downloaditem, undefined)\" *ngIf=\"!downloaditem.isNativeRevit || WebGLService.HasNativeRFA()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"downloaditem.loading\">...</span>\r\n <span *ngIf=\"!downloaditem.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, downloaditem.translationSubCategory) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"FabrikantenService.FabrikantenViewModel?.selectedProduct != null\">\r\n <ng-container *ngFor=\"let customDownload of FabrikantenService.FabrikantenViewModel.selectedProduct.customDownloads\">\r\n <ng-container *ngIf=\"customDownload.downloadType == 1\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"DownloadCustom(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.DownloadRevit) }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"customDownload.downloadType == 2\">\r\n <button mat-stroked-button class=\"toolbar-button custom-button\" (click)=\"OpenPDF(customDownload)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n <span *ngIf=\"customDownload.loading\">...</span>\r\n <span *ngIf=\"!customDownload.loading\">{{ customDownload.name }}</span>\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngFor=\"let pdftemplate of FabrikantenService.FabrikantenViewModel.selectedProduct.pdfTemplates\">\r\n <button mat-stroked-button class=\"toolbar-button template-button\" (click)=\"DownloadPDFTemplate(pdftemplate)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon file_download\">file_download</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Specification) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"ShowTextureButtons()\">\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.patroonURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Texture) }}\r\n </div>\r\n </div>\r\n </button>\r\n <button mat-stroked-button class=\"toolbar-button\" (click)=\"OpenLink(TextureService.FabrikantenTextureViewModel.bumpURL)\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.Bumpmap) }}\r\n </div>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <button mat-stroked-button class=\"toolbar-button bcb-button\" (click)=\"OpenBCBLink()\" *ngIf=\"ShowBCBButton()\">\r\n <div class=\"row\">\r\n <div class=\"row-icon\">\r\n <mat-icon class=\"icon open_in_new\">open_in_new</mat-icon>\r\n </div>\r\n <div class=\"row-title\">\r\n {{ TranslateService.GetActiveValue(TranslationCategory.Common, TranslationSubCategory.BCB) }}\r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n</ng-container>\r\n", styles: ["app-fab-actionmenu .mat-stroked-button{white-space:unset!important}app-fab-actionmenu .icon{margin-right:3px}app-fab-actionmenu .toolbar-button{margin-top:3px;width:100%}app-fab-actionmenu .row{display:flex;line-height:37px}app-fab-actionmenu .row-icon{align-items:center;display:flex}app-fab-actionmenu .column{display:flex;flex-direction:column}\n"] }]
208
208
  }], ctorParameters: function () { return [{ type: i1.MobileService }, { type: i2.FabrikantenService }, { type: i3.TranslateService }, { type: i4.BestekService }, { type: i5.TextureService }, { type: i6.SVGService }, { type: i7.MatLegacyDialog }, { type: i8.WebGLService }, { type: i9.ToebehorenService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { display: [{
209
209
  type: Input
210
210
  }] } });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1hY3Rpb25tZW51L2ZhYi1hY3Rpb25tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItYWN0aW9ubWVudS9mYWItYWN0aW9ubWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVdkYsT0FBTyxFQUFpSCxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pNLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhILE1BTWEsc0JBQXNCO0lBWWQ7SUFDVjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFuQlQsSUFBVyxtQkFBbUI7UUFDNUIsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxzQkFBc0I7UUFDL0IsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRVEsT0FBTyxDQUFTO0lBRXpCLFlBQW1CLGFBQTRCLEVBQ3RDLGtCQUFzQyxFQUN0QyxnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsVUFBc0IsRUFDdEIsTUFBaUIsRUFDakIsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLGlCQUFvQztRQVQxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtR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QUUsb0JBQW9CLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRTtZQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDN0g7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM3SDtJQUNILENBQUM7dUdBNU1VLHNCQUFzQjsyRkFBdEIsc0JBQXNCLDBGQ3BCbkMsdXlZQWtPQTs7U0Q5TWEsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUdmLGlCQUFpQixDQUFDLElBQUk7K1dBWTVCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XHJcbmltcG9ydCB7IEJlc3Rla1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iZXN0ZWsuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2JpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9iaWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTVkdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3ZnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RleHR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvZWJlaG9yZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9lYmVob3Jlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ViR0xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2ViZ2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRWaWV3TW9kZWwsIEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWwsIEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWwsIFRyYW5zbGF0aW9uQ2F0ZWdvcnksIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnO1xyXG5pbXBvcnQgeyBGYWJGb3JtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZmFiLWZvcm0tZGlhbG9nL2ZhYi1mb3JtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGYWJBY3Rpb25tZW51UmV2aXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2ZhYi1hY3Rpb25tZW51LXJldml0LWRpYWxvZy9mYWItYWN0aW9ubWVudS1yZXZpdC1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZhYi1hY3Rpb25tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZhYi1hY3Rpb25tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmFiQWN0aW9ubWVudUNvbXBvbmVudCB7XHJcblxyXG4gIHB1YmxpYyBnZXQgVHJhbnNsYXRpb25DYXRlZ29yeSgpIHtcclxuICAgIHJldHVybiBUcmFuc2xhdGlvbkNhdGVnb3J5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5KCkge1xyXG4gICAgcmV0dXJuIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBNb2JpbGVTZXJ2aWNlOiBNb2JpbGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIEZhYnJpa2FudGVuU2VydmljZTogRmFicmlrYW50ZW5TZXJ2aWNlLFxyXG4gICAgcHVibGljIFRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgQmVzdGVrU2VydmljZTogQmVzdGVrU2VydmljZSxcclxuICAgIHB1YmxpYyBUZXh0dXJlU2VydmljZTogVGV4dHVyZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgU1ZHU2VydmljZTogU1ZHU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBXZWJHTFNlcnZpY2U6IFdlYkdMU2VydmljZSxcclxuICAgIHB1YmxpYyBUb2ViZWhvcmVuU2VydmljZTogVG9lYmVob3JlblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgT3BlbkxpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0Rvd25sb2FkQ2F0ZWdvcnkobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ID09IG5hbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvdzNEQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCIzRFwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3cyREJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ID09IFwiMkRcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93QmVzdGVrQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCJCZXN0ZWtcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93QXV0b1NwZWNpZmljYXRpb25CdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIkF1dG9TcGVjaWZpY2F0aW9uXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1RleHR1cmVCdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIlRleHR1cmVcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93VG9lYmVob3JlbkJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ID09IFwiVG9lYmVob3JlblwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dCQ0JCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5ID09IFwiQXV0b1NwZWNpZmljYXRpb25cIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw/LnNob3dCQ0JCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRCZXN0ZWsoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPT0gXCJTVEFCVVwiICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5zdWYgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5Eb3dubG9hZEJlc3Rlayh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuc3VmKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrID09IFwiVnJpalwiICYmIHRoaXMuQmVzdGVrU2VydmljZS5mYWJQcm9kdWN0QmVzdGVrICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRG93bmxvYWRCZXN0ZWsodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RCZXN0ZWsubmF0aXZlRWxlbWVudC5pbm5lclRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwiRXJyb3I6IHVuYWJsZWQgdG8gZG93bmxvYWQgc3BlY2lmaWNhdGlvbnNcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRBdXRvU3BlY2lmaWNhdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEF1dG9TcGVjaWZjYXRpb24gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9IFwiQXV0b1NwZWNpZmljYXRpb25cIjtcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRG93bmxvYWRCZXN0ZWsodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RBdXRvU3BlY2lmY2F0aW9uLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhbGVydChcIkVycm9yOiB1bmFibGVkIHRvIGRvd25sb2FkIHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIENvcHlUb0NsaXBCb2FyZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEJlc3RlayAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RCZXN0ZWsubmF0aXZlRWxlbWVudC5pbm5lclRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwiRXJyb3I6IHVuYWJsZWQgdG8gY29weSBzcGVjaWZpY2F0aW9uc1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb3B5VG9DbGlwQm9hcmRTVUYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1ZiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1Zik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJFcnJvcjogdW5hYmxlZCB0byBjb3B5IHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIENvcHlUb0NsaXBCb2FyZEF1dG9TcGVjaWZpY2F0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5mYWJQcm9kdWN0QXV0b1NwZWNpZmNhdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RBdXRvU3BlY2lmY2F0aW9uLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhbGVydChcIkVycm9yOiB1bmFibGVkIHRvIGNvcHkgc3BlY2lmaWNhdGlvbnNcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0Jlc3Rla1NlbGVjdCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLlNob3dWcmlqKCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dTVEFCVSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/LnN0YWJ1ICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uc3RhYnUgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dTVUYoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5zdWYgIT0gJycgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5zdWYgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dPU0YoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5vc2ZodG1sICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8ub3NmaHRtbCAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1ZyaWooKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbD8uZW5hYmxlVnJpamVCZXN0ZWtUZWtzdCA9PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8udnJpakJlc3Rla0hUTUwgIT0gJycgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy52cmlqQmVzdGVrSFRNTCAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgT3BlbkJDQkxpbmsoKTogdm9pZCB7XHJcbiAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5PcGVuQkNCTGluaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkUERGVGVtcGxhdGUodGVtcGxhdGU6IEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWwpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZEZvcm1FbmFibGVkICYmICF0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblZpZXdNb2RlbC5oYXNGaWxsZWRGb3Jtcykge1xyXG4gICAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJGb3JtRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZm9ybTogdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZEZvcm1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuaGFzRmlsbGVkRm9ybXMpIHtcclxuICAgICAgICAgIHRoaXMuRG93bmxvYWRQREZUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgdXJsID0gXCIvRG93bmxvYWQvQ3JlYXRlUERGP3BMYW5ndWFnZUlkPVwiICsgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmlkO1xyXG4gICAgICB1cmwgKz0gXCImcFBERlRlbXBsYXRlSWQ9XCIgKyB0ZW1wbGF0ZS50ZW1wbGF0ZUlkO1xyXG4gICAgICB1cmwgKz0gXCImcFNlc3Npb25JZD1cIiArIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRDdXN0b20oY3VzdG9tZG93bmxvYWQ6IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRWaWV3TW9kZWwpOiB2b2lkIHtcclxuICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkRvd25sb2FkQ3VzdG9tKGN1c3RvbWRvd25sb2FkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuUERGKGN1c3RvbWRvd25sb2FkOiBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkVmlld01vZGVsKTogdm9pZCB7XHJcbiAgICB3aW5kb3cub3BlbihjdXN0b21kb3dubG9hZC5maWxlTmFtZSwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkKGRvd25sb2FkaXRlbTogRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKGRvd25sb2FkaXRlbS5zaG93UmV2aXRQb3B1cCkge1xyXG4gICAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJBY3Rpb25tZW51UmV2aXREaWFsb2dDb21wb25lbnQpO1xyXG5cclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5Eb3dubG9hZChkb3dubG9hZGl0ZW0sIGN1c3RvbWJjYmVib2lkKTsgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkRvd25sb2FkKGRvd25sb2FkaXRlbSwgY3VzdG9tYmNiZWJvaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlZnJlc2hTbmVkZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZT8uRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlc3Npb25JZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuU1ZHU2VydmljZS5Mb2FkRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkLCB0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWZyZXNoU2NoYWFsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlPy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2Vzc2lvbklkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5TVkdTZXJ2aWNlLkxvYWRGYWJyaWthbnRlblNWR1ZpZXdNb2RlbCh0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQsIHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwgIT0gbnVsbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93MkRCdXR0b25zKClcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInNlbGVjdC1tYXQtbGFiZWxcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNuZWRlKSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiU1ZHU2VydmljZS5TbmVkZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiUmVmcmVzaFNuZWRlKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzbmVkZSBvZiBTVkdTZXJ2aWNlLlNuZWRlc1wiIFt2YWx1ZV09XCJzbmVkZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNuZWRlSXRlbSwgbnVsbCwgc25lZGUpIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VsZWN0LW1hdC1sYWJlbFwiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU2NoYWFsKSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiU1ZHU2VydmljZS5TY2hhYWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIlJlZnJlc2hTY2hhYWwoKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicwJ1wiPjE6MTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMSdcIj4xOjI8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzInXCI+MTo1PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIiczJ1wiPjE6MTA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzQnXCI+MToyMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInNSdcIj4xOjUwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic2J1wiPjE6MTAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic3J1wiPjE6MjAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic4J1wiPjE6NTAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic5J1wiPjE6MTAwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMTAnXCI+MToyMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxMSdcIj4xOjUwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEyJ1wiPjE6MTAwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEzJ1wiPjE6MjAwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzE0J1wiPjE6NTAwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dCZXN0ZWtCdXR0b25zKClcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dCZXN0ZWtTZWxlY3QoKVwiPlxyXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBbdmFsdWVdPVwiQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrXCIgKGNoYW5nZSk9XCJCZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPSAkZXZlbnQuc291cmNlLnZhbHVlXCIgYXBwZWFyYW5jZT1cImxlZ2FjeVwiPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0lmPVwiU2hvd1NUQUJVKClcIiB2YWx1ZT1cIlNUQUJVXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5TVEFCVSkgfX08L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0lmPVwiU2hvd09TRigpXCIgdmFsdWU9XCJPU0ZcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk9TRikgfX08L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0lmPVwiU2hvd1ZyaWooKVwiIHZhbHVlPVwiVnJpalwiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU3BlY2lmaWNhdGlvblRleHQpIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAmbmJzcDtcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uIGNvcHktYnV0dG9uXCIgKGNsaWNrKT1cIkNvcHlUb0NsaXBCb2FyZCgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZCkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBjb3B5LXN1Zi1idXR0b25cIiAoY2xpY2spPVwiQ29weVRvQ2xpcEJvYXJkU1VGKClcIiAqbmdJZj1cIkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSAnU1RBQlUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZFNVRikgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBkb3dubG9hZC1iZXN0ZWstYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkQmVzdGVrKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5Eb3dubG9hZCkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93QXV0b1NwZWNpZmljYXRpb25CdXR0b25zKClcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBjb3B5LWJ1dHRvblwiIChjbGljayk9XCJDb3B5VG9DbGlwQm9hcmRBdXRvU3BlY2lmaWNhdGlvbigpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZCkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBkb3dubG9hZC1iZXN0ZWstYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkQXV0b1NwZWNpZmljYXRpb24oKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIGZpbGVfZG93bmxvYWRcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkRvd25sb2FkKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dUb2ViZWhvcmVuQnV0dG9ucygpXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzZWxlY3QtbWF0LWxhYmVsXCI+VG9lYmVob3JlbjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiRmFicmlrYW50ZW5TZXJ2aWNlLlNlbGVjdGVkVG9lYmVob3JlblwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiVG9lYmVob3JlblNlcnZpY2UuT3BlblRvZWJlaG9yZW4odGhpcy5DaGFuZ2VEZXRlY3RvclJlZilcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWl0ZW0uYmNiUHJvZHVjdFwiIFt2YWx1ZV09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlRvZWJlaG9yZW4sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgaXRlbS5pZCkgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIml0ZW0uYmNiUHJvZHVjdFwiIFt2YWx1ZV09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRvd25sb2FkY2F0ZWdvcnkgb2YgRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuZG93bmxvYWRDYXRlZ29yaWVzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93RG93bmxvYWRDYXRlZ29yeShkb3dubG9hZGNhdGVnb3J5Lm5hbWUpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZG93bmxvYWRpdGVtIG9mIGRvd25sb2FkY2F0ZWdvcnkuaXRlbXNcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZGNhdGVnb3J5Lm5hbWUgPT0gJ1RvZWJlaG9yZW4nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiBbbmdDbGFzc109XCJkb3dubG9hZGl0ZW0uZmlsZVR5cGUgKyAnLWJ1dHRvbidcIiAoY2xpY2spPVwiRG93bmxvYWQoZG93bmxvYWRpdGVtLCBGYWJyaWthbnRlblNlcnZpY2UuR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCk/LmJjYmVib0lkKVwiICpuZ0lmPVwiKCFkb3dubG9hZGl0ZW0uaXNOYXRpdmVSZXZpdCB8fCBXZWJHTFNlcnZpY2UuSGFzTmF0aXZlUkZBKCkpICYmIChGYWJyaWthbnRlblNlcnZpY2UuR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCkgIT0gbnVsbClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkb3dubG9hZGl0ZW0ubG9hZGluZ1wiPi4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZG93bmxvYWRpdGVtLmxvYWRpbmdcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBkb3dubG9hZGl0ZW0udHJhbnNsYXRpb25TdWJDYXRlZ29yeSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZGNhdGVnb3J5Lm5hbWUgIT0gJ1RvZWJlaG9yZW4nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiBbbmdDbGFzc109XCJkb3dubG9hZGl0ZW0uZmlsZVR5cGUgKyAnLWJ1dHRvbidcIiAoY2xpY2spPVwiRG93bmxvYWQoZG93bmxvYWRpdGVtLCB1bmRlZmluZWQpXCIgKm5nSWY9XCIhZG93bmxvYWRpdGVtLmlzTmF0aXZlUmV2aXQgfHwgV2ViR0xTZXJ2aWNlLkhhc05hdGl2ZVJGQSgpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gZmlsZV9kb3dubG9hZFwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZG93bmxvYWRpdGVtLmxvYWRpbmdcIj4uLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWRvd25sb2FkaXRlbS5sb2FkaW5nXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgZG93bmxvYWRpdGVtLnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3VzdG9tRG93bmxvYWQgb2YgRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5jdXN0b21Eb3dubG9hZHNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbURvd25sb2FkLmRvd25sb2FkVHlwZSA9PSAxXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBjdXN0b20tYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkQ3VzdG9tKGN1c3RvbURvd25sb2FkKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIGZpbGVfZG93bmxvYWRcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImN1c3RvbURvd25sb2FkLmxvYWRpbmdcIj4uLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY3VzdG9tRG93bmxvYWQubG9hZGluZ1wiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuRG93bmxvYWRSZXZpdCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tRG93bmxvYWQuZG93bmxvYWRUeXBlID09IDJcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uIGN1c3RvbS1idXR0b25cIiAoY2xpY2spPVwiT3BlblBERihjdXN0b21Eb3dubG9hZClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBvcGVuX2luX25ld1wiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImN1c3RvbURvd25sb2FkLmxvYWRpbmdcIj4uLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY3VzdG9tRG93bmxvYWQubG9hZGluZ1wiPnt7IGN1c3RvbURvd25sb2FkLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGRmdGVtcGxhdGUgb2YgRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5wZGZUZW1wbGF0ZXNcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiB0ZW1wbGF0ZS1idXR0b25cIiAoY2xpY2spPVwiRG93bmxvYWRQREZUZW1wbGF0ZShwZGZ0ZW1wbGF0ZSlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5TcGVjaWZpY2F0aW9uKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dUZXh0dXJlQnV0dG9ucygpXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiT3BlbkxpbmsoVGV4dHVyZVNlcnZpY2UuRmFicmlrYW50ZW5UZXh0dXJlVmlld01vZGVsLnBhdHJvb25VUkwpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gb3Blbl9pbl9uZXdcIj5vcGVuX2luX25ldzwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5UZXh0dXJlKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cIk9wZW5MaW5rKFRleHR1cmVTZXJ2aWNlLkZhYnJpa2FudGVuVGV4dHVyZVZpZXdNb2RlbC5idW1wVVJMKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIG9wZW5faW5fbmV3XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuQnVtcG1hcCkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b24gYmNiLWJ1dHRvblwiIChjbGljayk9XCJPcGVuQkNCTGluaygpXCIgKm5nSWY9XCJTaG93QkNCQnV0dG9uKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBvcGVuX2luX25ld1wiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkJDQikgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2ZhYnJpa2FudGVuY29yZS9jb21wb25lbnRzL2ZhYi1hY3Rpb25tZW51L2ZhYi1hY3Rpb25tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvY29tcG9uZW50cy9mYWItYWN0aW9ubWVudS9mYWItYWN0aW9ubWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVdkYsT0FBTyxFQUFpSCxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pNLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhILE1BTWEsc0JBQXNCO0lBWWQ7SUFDVjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFuQlQsSUFBVyxtQkFBbUI7UUFDNUIsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxzQkFBc0I7UUFDL0IsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRVEsT0FBTyxDQUFTO0lBRXpCLFlBQW1CLGFBQTRCLEVBQ3RDLGtCQUFzQyxFQUN0QyxnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsVUFBc0IsRUFDdEIsTUFBaUIsRUFDakIsWUFBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLGlCQUFvQztRQVQxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtR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QUUsb0JBQW9CLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRTtZQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDN0g7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUM3SDtJQUNILENBQUM7dUdBNU1VLHNCQUFzQjsyRkFBdEIsc0JBQXNCLDBGQ3BCbkMsKytZQW9PQTs7U0RoTmEsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUdmLGlCQUFpQixDQUFDLElBQUk7K1dBWTVCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XHJcbmltcG9ydCB7IEJlc3Rla1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9iZXN0ZWsuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2JpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9iaWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTVkdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3ZnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUZXh0dXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RleHR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvZWJlaG9yZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9lYmVob3Jlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ViR0xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2ViZ2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRWaWV3TW9kZWwsIEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWwsIEZhYnJpa2FudGVuU2V0dGluZ3NEb3dubG9hZEl0ZW1WaWV3TW9kZWwsIFRyYW5zbGF0aW9uQ2F0ZWdvcnksIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9zd2FnZ2VyL1N3YWdnZXJDbGllbnQnO1xyXG5pbXBvcnQgeyBGYWJGb3JtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZmFiLWZvcm0tZGlhbG9nL2ZhYi1mb3JtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGYWJBY3Rpb25tZW51UmV2aXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2ZhYi1hY3Rpb25tZW51LXJldml0LWRpYWxvZy9mYWItYWN0aW9ubWVudS1yZXZpdC1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZhYi1hY3Rpb25tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmFiLWFjdGlvbm1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZhYi1hY3Rpb25tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmFiQWN0aW9ubWVudUNvbXBvbmVudCB7XHJcblxyXG4gIHB1YmxpYyBnZXQgVHJhbnNsYXRpb25DYXRlZ29yeSgpIHtcclxuICAgIHJldHVybiBUcmFuc2xhdGlvbkNhdGVnb3J5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5KCkge1xyXG4gICAgcmV0dXJuIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBNb2JpbGVTZXJ2aWNlOiBNb2JpbGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIEZhYnJpa2FudGVuU2VydmljZTogRmFicmlrYW50ZW5TZXJ2aWNlLFxyXG4gICAgcHVibGljIFRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgQmVzdGVrU2VydmljZTogQmVzdGVrU2VydmljZSxcclxuICAgIHB1YmxpYyBUZXh0dXJlU2VydmljZTogVGV4dHVyZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgU1ZHU2VydmljZTogU1ZHU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBXZWJHTFNlcnZpY2U6IFdlYkdMU2VydmljZSxcclxuICAgIHB1YmxpYyBUb2ViZWhvcmVuU2VydmljZTogVG9lYmVob3JlblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgT3BlbkxpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0Rvd25sb2FkQ2F0ZWdvcnkobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ID09IG5hbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvdzNEQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCIzRFwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3cyREJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ID09IFwiMkRcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93QmVzdGVrQnV0dG9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3BsYXkgPT0gXCJCZXN0ZWtcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93QXV0b1NwZWNpZmljYXRpb25CdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIkF1dG9TcGVjaWZpY2F0aW9uXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1RleHR1cmVCdXR0b25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheSA9PSBcIlRleHR1cmVcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTaG93VG9lYmVob3JlbkJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ID09IFwiVG9lYmVob3JlblwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dCQ0JCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5ID09IFwiQXV0b1NwZWNpZmljYXRpb25cIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWw/LnNob3dCQ0JCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRCZXN0ZWsoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPT0gXCJTVEFCVVwiICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5zdWYgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5Eb3dubG9hZEJlc3Rlayh0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwuc3VmKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrID09IFwiVnJpalwiICYmIHRoaXMuQmVzdGVrU2VydmljZS5mYWJQcm9kdWN0QmVzdGVrICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRG93bmxvYWRCZXN0ZWsodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RCZXN0ZWsubmF0aXZlRWxlbWVudC5pbm5lclRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwiRXJyb3I6IHVuYWJsZWQgdG8gZG93bmxvYWQgc3BlY2lmaWNhdGlvbnNcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRBdXRvU3BlY2lmaWNhdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEF1dG9TcGVjaWZjYXRpb24gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9IFwiQXV0b1NwZWNpZmljYXRpb25cIjtcclxuICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRG93bmxvYWRCZXN0ZWsodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RBdXRvU3BlY2lmY2F0aW9uLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhbGVydChcIkVycm9yOiB1bmFibGVkIHRvIGRvd25sb2FkIHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIENvcHlUb0NsaXBCb2FyZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkJlc3Rla1NlcnZpY2UuZmFiUHJvZHVjdEJlc3RlayAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RCZXN0ZWsubmF0aXZlRWxlbWVudC5pbm5lclRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGFsZXJ0KFwiRXJyb3I6IHVuYWJsZWQgdG8gY29weSBzcGVjaWZpY2F0aW9uc1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb3B5VG9DbGlwQm9hcmRTVUYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1ZiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLnN1Zik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYWxlcnQoXCJFcnJvcjogdW5hYmxlZCB0byBjb3B5IHNwZWNpZmljYXRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIENvcHlUb0NsaXBCb2FyZEF1dG9TcGVjaWZpY2F0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuQmVzdGVrU2VydmljZS5mYWJQcm9kdWN0QXV0b1NwZWNpZmNhdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuQmVzdGVrU2VydmljZS5Db3B5VG9DbGlwYm9hcmQodGhpcy5CZXN0ZWtTZXJ2aWNlLmZhYlByb2R1Y3RBdXRvU3BlY2lmY2F0aW9uLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhbGVydChcIkVycm9yOiB1bmFibGVkIHRvIGNvcHkgc3BlY2lmaWNhdGlvbnNcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd0Jlc3Rla1NlbGVjdCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLlNob3dWcmlqKCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dTVEFCVSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkJlc3Rla1NlcnZpY2UuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw/LnN0YWJ1ICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8uc3RhYnUgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dTVUYoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5zdWYgIT0gJycgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5zdWYgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dPU0YoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy5vc2ZodG1sICE9ICcnICYmIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8ub3NmaHRtbCAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2hvd1ZyaWooKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbD8uZW5hYmxlVnJpamVCZXN0ZWtUZWtzdCA9PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuQmVzdGVrU2VydmljZS5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbD8udnJpakJlc3Rla0hUTUwgIT0gJycgJiYgdGhpcy5CZXN0ZWtTZXJ2aWNlLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsPy52cmlqQmVzdGVrSFRNTCAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgT3BlbkJDQkxpbmsoKTogdm9pZCB7XHJcbiAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5PcGVuQkNCTGluaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkUERGVGVtcGxhdGUodGVtcGxhdGU6IEZhYnJpa2FudGVuUERGVGVtcGxhdGVWaWV3TW9kZWwpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZEZvcm1FbmFibGVkICYmICF0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblZpZXdNb2RlbC5oYXNGaWxsZWRGb3Jtcykge1xyXG4gICAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJGb3JtRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZm9ybTogdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5TZXR0aW5nc1ZpZXdNb2RlbC5kb3dubG9hZEZvcm1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuaGFzRmlsbGVkRm9ybXMpIHtcclxuICAgICAgICAgIHRoaXMuRG93bmxvYWRQREZUZW1wbGF0ZSh0ZW1wbGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgdXJsID0gXCIvRG93bmxvYWQvQ3JlYXRlUERGP3BMYW5ndWFnZUlkPVwiICsgdGhpcy5UcmFuc2xhdGVTZXJ2aWNlLkFjdGl2ZUxhbmd1YWdlLmlkO1xyXG4gICAgICB1cmwgKz0gXCImcFBERlRlbXBsYXRlSWQ9XCIgKyB0ZW1wbGF0ZS50ZW1wbGF0ZUlkO1xyXG4gICAgICB1cmwgKz0gXCImcFNlc3Npb25JZD1cIiArIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlc3Npb25JZDtcclxuXHJcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRG93bmxvYWRDdXN0b20oY3VzdG9tZG93bmxvYWQ6IEZhYnJpa2FudGVuQ3VzdG9tRG93bmxvYWRWaWV3TW9kZWwpOiB2b2lkIHtcclxuICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkRvd25sb2FkQ3VzdG9tKGN1c3RvbWRvd25sb2FkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBPcGVuUERGKGN1c3RvbWRvd25sb2FkOiBGYWJyaWthbnRlbkN1c3RvbURvd25sb2FkVmlld01vZGVsKTogdm9pZCB7XHJcbiAgICB3aW5kb3cub3BlbihjdXN0b21kb3dubG9hZC5maWxlTmFtZSwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIERvd25sb2FkKGRvd25sb2FkaXRlbTogRmFicmlrYW50ZW5TZXR0aW5nc0Rvd25sb2FkSXRlbVZpZXdNb2RlbCwgY3VzdG9tYmNiZWJvaWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgaWYgKGRvd25sb2FkaXRlbS5zaG93UmV2aXRQb3B1cCkge1xyXG4gICAgICB2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihGYWJBY3Rpb25tZW51UmV2aXREaWFsb2dDb21wb25lbnQpO1xyXG5cclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5Eb3dubG9hZChkb3dubG9hZGl0ZW0sIGN1c3RvbWJjYmVib2lkKTsgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLkRvd25sb2FkKGRvd25sb2FkaXRlbSwgY3VzdG9tYmNiZWJvaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlZnJlc2hTbmVkZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZT8uRmFicmlrYW50ZW5WaWV3TW9kZWw/LnNlc3Npb25JZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuU1ZHU2VydmljZS5Mb2FkRmFicmlrYW50ZW5TVkdWaWV3TW9kZWwodGhpcy5GYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2Vzc2lvbklkLCB0aGlzLkNoYW5nZURldGVjdG9yUmVmKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWZyZXNoU2NoYWFsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlPy5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2Vzc2lvbklkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5TVkdTZXJ2aWNlLkxvYWRGYWJyaWthbnRlblNWR1ZpZXdNb2RlbCh0aGlzLkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblZpZXdNb2RlbC5zZXNzaW9uSWQsIHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwgIT0gbnVsbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93MkRCdXR0b25zKClcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cInNlbGVjdC1tYXQtbGFiZWxcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNuZWRlKSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiU1ZHU2VydmljZS5TbmVkZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiUmVmcmVzaFNuZWRlKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzbmVkZSBvZiBTVkdTZXJ2aWNlLlNuZWRlc1wiIFt2YWx1ZV09XCJzbmVkZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlNuZWRlSXRlbSwgbnVsbCwgc25lZGUpIH19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIj5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VsZWN0LW1hdC1sYWJlbFwiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU2NoYWFsKSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiU1ZHU2VydmljZS5TY2hhYWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIlJlZnJlc2hTY2hhYWwoKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicwJ1wiPjE6MTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMSdcIj4xOjI8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzInXCI+MTo1PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIiczJ1wiPjE6MTA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzQnXCI+MToyMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInNSdcIj4xOjUwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic2J1wiPjE6MTAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic3J1wiPjE6MjAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic4J1wiPjE6NTAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIic5J1wiPjE6MTAwMDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInMTAnXCI+MToyMDAwPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIicxMSdcIj4xOjUwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEyJ1wiPjE6MTAwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzEzJ1wiPjE6MjAwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJzE0J1wiPjE6NTAwMDA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dCZXN0ZWtCdXR0b25zKClcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dCZXN0ZWtTZWxlY3QoKVwiPlxyXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBbdmFsdWVdPVwiQmVzdGVrU2VydmljZS5UeXBlQmVzdGVrXCIgKGNoYW5nZSk9XCJCZXN0ZWtTZXJ2aWNlLlR5cGVCZXN0ZWsgPSAkZXZlbnQuc291cmNlLnZhbHVlXCIgYXBwZWFyYW5jZT1cImxlZ2FjeVwiPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0lmPVwiU2hvd1NUQUJVKClcIiB2YWx1ZT1cIlNUQUJVXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5TVEFCVSkgfX08L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0lmPVwiU2hvd09TRigpXCIgdmFsdWU9XCJPU0ZcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5Lk9TRikgfX08L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0lmPVwiU2hvd1ZyaWooKVwiIHZhbHVlPVwiVnJpalwiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU3BlY2lmaWNhdGlvblRleHQpIH19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAmbmJzcDtcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uIGNvcHktYnV0dG9uXCIgKGNsaWNrKT1cIkNvcHlUb0NsaXBCb2FyZCgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZCkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBjb3B5LXN1Zi1idXR0b25cIiAoY2xpY2spPVwiQ29weVRvQ2xpcEJvYXJkU1VGKClcIiAqbmdJZj1cIkJlc3Rla1NlcnZpY2UuVHlwZUJlc3RlayA9PSAnU1RBQlUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZFNVRikgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBkb3dubG9hZC1iZXN0ZWstYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkQmVzdGVrKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5Eb3dubG9hZCkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93QXV0b1NwZWNpZmljYXRpb25CdXR0b25zKClcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBjb3B5LWJ1dHRvblwiIChjbGljayk9XCJDb3B5VG9DbGlwQm9hcmRBdXRvU3BlY2lmaWNhdGlvbigpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gY29udGVudF9jb3B5XCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkNsaXBib2FyZCkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBkb3dubG9hZC1iZXN0ZWstYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkQXV0b1NwZWNpZmljYXRpb24oKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIGZpbGVfZG93bmxvYWRcIj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LkRvd25sb2FkKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNob3dUb2ViZWhvcmVuQnV0dG9ucygpXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJzZWxlY3QtbWF0LWxhYmVsXCI+VG9lYmVob3JlbjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiRmFicmlrYW50ZW5TZXJ2aWNlLlNlbGVjdGVkVG9lYmVob3JlblwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiVG9lYmVob3JlblNlcnZpY2UuT3BlblRvZWJlaG9yZW4odGhpcy5DaGFuZ2VEZXRlY3RvclJlZilcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5mYWJyaWthbnRlbkJDQlByb2R1Y3RWaWV3TW9kZWxzWzBdLmJjYlByb2R1Y3RUb2ViZWhvcmVuXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWl0ZW0uYmNiUHJvZHVjdFwiIFt2YWx1ZV09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LlRvZWJlaG9yZW4sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuTmFtZSwgaXRlbS5pZCkgfX1cclxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIml0ZW0uYmNiUHJvZHVjdFwiIFt2YWx1ZV09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRvd25sb2FkY2F0ZWdvcnkgb2YgRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuU2V0dGluZ3NWaWV3TW9kZWwuZG93bmxvYWRDYXRlZ29yaWVzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTaG93RG93bmxvYWRDYXRlZ29yeShkb3dubG9hZGNhdGVnb3J5Lm5hbWUpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZG93bmxvYWRpdGVtIG9mIGRvd25sb2FkY2F0ZWdvcnkuaXRlbXNcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZGNhdGVnb3J5Lm5hbWUgPT0gJ1RvZWJlaG9yZW4nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiBbbmdDbGFzc109XCJkb3dubG9hZGl0ZW0uZmlsZVR5cGUgKyAnLWJ1dHRvbidcIiAoY2xpY2spPVwiRG93bmxvYWQoZG93bmxvYWRpdGVtLCBGYWJyaWthbnRlblNlcnZpY2UuR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCk/LmJjYmVib0lkKVwiICpuZ0lmPVwiKCFkb3dubG9hZGl0ZW0uaXNOYXRpdmVSZXZpdCB8fCBXZWJHTFNlcnZpY2UuSGFzTmF0aXZlUkZBKCkpICYmIChGYWJyaWthbnRlblNlcnZpY2UuR2V0U2VsZWN0ZWRUb2ViZWhvcmVuKCkgIT0gbnVsbClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkb3dubG9hZGl0ZW0ubG9hZGluZ1wiPi4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZG93bmxvYWRpdGVtLmxvYWRpbmdcIj57eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBkb3dubG9hZGl0ZW0udHJhbnNsYXRpb25TdWJDYXRlZ29yeSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZGNhdGVnb3J5Lm5hbWUgIT0gJ1RvZWJlaG9yZW4nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiBbbmdDbGFzc109XCJkb3dubG9hZGl0ZW0uZmlsZVR5cGUgKyAnLWJ1dHRvbidcIiAoY2xpY2spPVwiRG93bmxvYWQoZG93bmxvYWRpdGVtLCB1bmRlZmluZWQpXCIgKm5nSWY9XCIhZG93bmxvYWRpdGVtLmlzTmF0aXZlUmV2aXQgfHwgV2ViR0xTZXJ2aWNlLkhhc05hdGl2ZVJGQSgpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gZmlsZV9kb3dubG9hZFwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZG93bmxvYWRpdGVtLmxvYWRpbmdcIj4uLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWRvd25sb2FkaXRlbS5sb2FkaW5nXCI+e3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgZG93bmxvYWRpdGVtLnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkZhYnJpa2FudGVuU2VydmljZS5GYWJyaWthbnRlblZpZXdNb2RlbD8uc2VsZWN0ZWRQcm9kdWN0ICE9IG51bGxcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3VzdG9tRG93bmxvYWQgb2YgRmFicmlrYW50ZW5TZXJ2aWNlLkZhYnJpa2FudGVuVmlld01vZGVsLnNlbGVjdGVkUHJvZHVjdC5jdXN0b21Eb3dubG9hZHNcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tRG93bmxvYWQuZG93bmxvYWRUeXBlID09IDFcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b24gY3VzdG9tLWJ1dHRvblwiIChjbGljayk9XCJEb3dubG9hZEN1c3RvbShjdXN0b21Eb3dubG9hZClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBmaWxlX2Rvd25sb2FkXCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjdXN0b21Eb3dubG9hZC5sb2FkaW5nXCI+Li4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY3VzdG9tRG93bmxvYWQubG9hZGluZ1wiPnt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuRG93bmxvYWRSZXZpdCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbURvd25sb2FkLmRvd25sb2FkVHlwZSA9PSAyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInRvb2xiYXItYnV0dG9uIGN1c3RvbS1idXR0b25cIiAoY2xpY2spPVwiT3BlblBERihjdXN0b21Eb3dubG9hZClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBvcGVuX2luX25ld1wiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImN1c3RvbURvd25sb2FkLmxvYWRpbmdcIj4uLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjdXN0b21Eb3dubG9hZC5sb2FkaW5nXCI+e3sgY3VzdG9tRG93bmxvYWQubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwZGZ0ZW1wbGF0ZSBvZiBGYWJyaWthbnRlblNlcnZpY2UuRmFicmlrYW50ZW5WaWV3TW9kZWwuc2VsZWN0ZWRQcm9kdWN0LnBkZlRlbXBsYXRlc1wiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b24gdGVtcGxhdGUtYnV0dG9uXCIgKGNsaWNrKT1cIkRvd25sb2FkUERGVGVtcGxhdGUocGRmdGVtcGxhdGUpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gZmlsZV9kb3dubG9hZFwiPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuU3BlY2lmaWNhdGlvbikgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiU2hvd1RleHR1cmVCdXR0b25zKClcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJPcGVuTGluayhUZXh0dXJlU2VydmljZS5GYWJyaWthbnRlblRleHR1cmVWaWV3TW9kZWwucGF0cm9vblVSTClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbiBvcGVuX2luX25ld1wiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyBUcmFuc2xhdGVTZXJ2aWNlLkdldEFjdGl2ZVZhbHVlKFRyYW5zbGF0aW9uQ2F0ZWdvcnkuQ29tbW9uLCBUcmFuc2xhdGlvblN1YkNhdGVnb3J5LlRleHR1cmUpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwidG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiT3BlbkxpbmsoVGV4dHVyZVNlcnZpY2UuRmFicmlrYW50ZW5UZXh0dXJlVmlld01vZGVsLmJ1bXBVUkwpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24gb3Blbl9pbl9uZXdcIj5vcGVuX2luX25ldzwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgVHJhbnNsYXRlU2VydmljZS5HZXRBY3RpdmVWYWx1ZShUcmFuc2xhdGlvbkNhdGVnb3J5LkNvbW1vbiwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeS5CdW1wbWFwKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJ0b29sYmFyLWJ1dHRvbiBiY2ItYnV0dG9uXCIgKGNsaWNrKT1cIk9wZW5CQ0JMaW5rKClcIiAqbmdJZj1cIlNob3dCQ0JCdXR0b24oKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pY29uXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uIG9wZW5faW5fbmV3XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctdGl0bGVcIj5cclxuICAgICAgICAgIHt7IFRyYW5zbGF0ZVNlcnZpY2UuR2V0QWN0aXZlVmFsdWUoVHJhbnNsYXRpb25DYXRlZ29yeS5Db21tb24sIFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnkuQkNCKSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
@@ -84,7 +84,7 @@ class BestekService {
84
84
  this.FabrikantenService.TriggerReloads(ChangeDetectorRef);
85
85
  }
86
86
  else {
87
- this.FabrikantenService.ProcessDynamicModels();
87
+ this.FabrikantenService.ProcessDynamicModels(ChangeDetectorRef);
88
88
  }
89
89
  }
90
90
  }, (error) => {
@@ -111,7 +111,7 @@ class BestekService {
111
111
  this.FabrikantenService.TriggerReloads(ChangeDetectorRef);
112
112
  }
113
113
  else {
114
- this.FabrikantenService.ProcessDynamicModels();
114
+ this.FabrikantenService.ProcessDynamicModels(ChangeDetectorRef);
115
115
  }
116
116
  }
117
117
  }, (error) => {
@@ -131,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
131
131
  type: Injectable,
132
132
  args: [{ providedIn: 'root' }]
133
133
  }], ctorParameters: function () { return [{ type: i1.Clipboard }, { type: i2.FabrikantenApiClient }]; } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVzdGVrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL3NlcnZpY2VzL2Jlc3Rlay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBb0QsNkJBQTZCLEVBQXlDLHdDQUF3QyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFJNU0sTUFDYSxhQUFhO0lBY0o7SUFBOEI7SUFaM0MsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUN6QixVQUFVLEdBQVcsT0FBTyxDQUFDO0lBRTdCLGdCQUFnQixHQUFzQixJQUFJLENBQUM7SUFDM0MsMEJBQTBCLEdBQXNCLElBQUksQ0FBQztJQUNyRCxrQkFBa0IsR0FBOEIsSUFBSSxDQUFDO0lBRXJELDBCQUEwQixDQUE2QjtJQUN2RCxxQ0FBcUMsQ0FBd0M7SUFFNUUsbUJBQW1CLEdBQVksS0FBSyxDQUFDO0lBRTdDLFlBQW9CLFNBQW9CLEVBQVUsb0JBQTBDO1FBQXhFLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO0lBQzVGLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBZSxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFpQixDQUFDO1NBQzFEO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxjQUF3QixDQUFDO1NBQ2pFO1FBRUQsT0FBTyxFQUFF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QyxDQUFDO1NBQ0o7YUFDSTtZQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDakM7SUFDSCxDQUFDO3VHQXBKVSxhQUFhOzJHQUFiLGFBQWEsY0FEQSxNQUFNOztTQUNuQixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmFicmlrYW50ZW5BcGlDbGllbnQsIEZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLCBGYWJyaWthbnRlbkJlc3Rla1JlcXVlc3RNb2RlbCwgRmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblZpZXdNb2RlbCwgRmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBGYWJyaWthbnRlblNlcnZpY2UgfSBmcm9tICcuL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEJlc3Rla1NlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBUeXBlQmVzdGVrOiBzdHJpbmcgPSBcIlNUQUJVXCI7XHJcblxyXG4gIHB1YmxpYyBmYWJQcm9kdWN0QmVzdGVrOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIGZhYlByb2R1Y3RBdXRvU3BlY2lmY2F0aW9uOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIEZhYnJpa2FudGVuU2VydmljZTogRmFicmlrYW50ZW5TZXJ2aWNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHB1YmxpYyBGYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbDogRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw7XHJcbiAgcHVibGljIEZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWw6IEZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWw7XHJcblxyXG4gIHByaXZhdGUgU2hvdWxkVHJpZ2dlclJlbG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaXBib2FyZDogQ2xpcGJvYXJkLCBwcml2YXRlIEZhYnJpa2FudGVuQXBpQ2xpZW50OiBGYWJyaWthbnRlbkFwaUNsaWVudCkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEJlc3Rla1Rla3N0KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5UeXBlQmVzdGVrID09IFwiU1RBQlVcIikge1xyXG4gICAgICByZXR1cm4gdGhpcy5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5zdGFidSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuVHlwZUJlc3RlayA9PSBcIk9TRlwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLm9zZmh0bWwgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJWcmlqXCIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwudnJpakJlc3Rla0hUTUwgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEF1dG9TcGVjaWZpY2F0aW9uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5GYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uVmlld01vZGVsPy50ZXh0ICsgXCJcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb3B5VG9DbGlwYm9hcmQoc3RyOiBhbnkpIHtcclxuICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoc3RyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwoc2Vzc2lvbmlkOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLkxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IEZhYnJpa2FudGVuQmVzdGVrUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHNlc3Npb25pZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwpID0+IHtcclxuICAgICAgICB0aGlzLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJTVEFCVVwiKSB7XHJcbiAgICAgICAgICBpZiAobW9kZWwuc3RhYnUgPT0gdW5kZWZpbmVkIHx8IG1vZGVsLnN0YWJ1ID09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVHlwZUJlc3RlayA9IFwiXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5UeXBlQmVzdGVrID09IFwiT1NGXCIpIHtcclxuICAgICAgICAgIGlmIChtb2RlbC5vc2ZodG1sID09IHVuZGVmaW5lZCB8fCBtb2RlbC5vc2ZodG1sID09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVHlwZUJlc3RlayA9IFwiXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2lmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJTVUZcIikge1xyXG4gICAgICAgIC8vICBpZiAobW9kZWwuc3VmID09IHVuZGVmaW5lZCB8fCBtb2RlbC5zdWYgPT0gJycpIHtcclxuICAgICAgICAvLyAgICB0aGlzLlR5cGVCZXN0ZWsgPSBcIlwiO1xyXG4gICAgICAgIC8vICB9XHJcbiAgICAgICAgLy99XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJWcmlqXCIpIHtcclxuICAgICAgICAgIGlmIChtb2RlbC52cmlqQmVzdGVrSFRNTCA9PSB1bmRlZmluZWQgfHwgbW9kZWwudnJpakJlc3Rla0hUTUwgPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlQmVzdGVrID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJcIikge1xyXG4gICAgICAgICAgaWYgKG1vZGVsLnN0YWJ1ICE9IHVuZGVmaW5lZCAmJiBtb2RlbC5zdGFidSAhPSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLlR5cGVCZXN0ZWsgPSBcIlNUQUJVXCI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1vZGVsLm9zZmh0bWwgIT0gdW5kZWZpbmVkICYmIG1vZGVsLm9zZmh0bWwgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlQmVzdGVrID0gXCJPU0ZcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvL2lmIChtb2RlbC5zdWYgIT0gdW5kZWZpbmVkICYmIG1vZGVsLnN1ZiAhPSAnJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMuVHlwZUJlc3RlayA9IFwiU1VGXCI7XHJcbiAgICAgICAgICAvL31cclxuXHJcbiAgICAgICAgICBpZiAobW9kZWwudnJpakJlc3Rla0hUTUwgIT0gdW5kZWZpbmVkICYmIG1vZGVsLnZyaWpCZXN0ZWtIVE1MICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVHlwZUJlc3RlayA9IFwiVnJpalwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5TaG91bGRUcmlnZ2VyUmVsb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2hvdWxkVHJpZ2dlclJlbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5UcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNob3VsZFRyaWdnZXJSZWxvYWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIExvYWRGYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uVmlld01vZGVsKHNlc3Npb25pZDogc3RyaW5nLCBsYW5ndWFnZWlkOm51bWJlciwgQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuTG9hZGluZykge1xyXG4gICAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgRmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblJlcXVlc3RNb2RlbCgpO1xyXG5cclxuICAgICAgcmVxdWVzdC5zZXNzaW9uSWQgPSBzZXNzaW9uaWQ7XHJcbiAgICAgIHJlcXVlc3QubGFuZ3VhZ2VJZCA9IGxhbmd1YWdlaWQ7XHJcblxyXG4gICAgICB0aGlzLkZhYnJpa2FudGVuQXBpQ2xpZW50LmdldEZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblZpZXdNb2RlbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuRmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblZpZXdNb2RlbCA9IG1vZGVsO1xyXG5cclxuICAgICAgICB0aGlzLkxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlICE9IG51bGwpIHtcclxuICAgICAgICAgIGlmICh0aGlzLlNob3VsZFRyaWdnZXJSZWxvYWQpIHtcclxuICAgICAgICAgICAgdGhpcy5TaG91bGRUcmlnZ2VyUmVsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLlRyaWdnZXJSZWxvYWRzKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5Qcm9jZXNzRHluYW1pY01vZGVscygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2hvdWxkVHJpZ2dlclJlbG9hZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVzdGVrLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL3NlcnZpY2VzL2Jlc3Rlay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBb0QsNkJBQTZCLEVBQXlDLHdDQUF3QyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFJNU0sTUFDYSxhQUFhO0lBY0o7SUFBOEI7SUFaM0MsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUN6QixVQUFVLEdBQVcsT0FBTyxDQUFDO0lBRTdCLGdCQUFnQixHQUFzQixJQUFJLENBQUM7SUFDM0MsMEJBQTBCLEdBQXNCLElBQUksQ0FBQztJQUNyRCxrQkFBa0IsR0FBOEIsSUFBSSxDQUFDO0lBRXJELDBCQUEwQixDQUE2QjtJQUN2RCxxQ0FBcUMsQ0FBd0M7SUFFNUUsbUJBQW1CLEdBQVksS0FBSyxDQUFDO0lBRTdDLFlBQW9CLFNBQW9CLEVBQVUsb0JBQTBDO1FBQXhFLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO0lBQzVGLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBZSxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFpQixDQUFDO1NBQzFEO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxjQUF3QixDQUFDO1NBQ2pFO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLHFDQUFxQyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVNLGVBQWUsQ0FBQyxHQUFRO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSw4QkFBOEIsQ0FBQyxTQUFpQixFQUFFLGlCQUFvQztRQUMzRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixJQUFJLE9BQU8sR0FBRyxJQUFJLDZCQUE2QixFQUFFLENBQUM7WUFFbEQsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFFOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWlDLEVBQUUsRUFBRTtnQkFDL0csSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQztnQkFFeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtvQkFDOUIsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRTt3QkFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7cUJBQ3RCO2lCQUNGO2dCQUVELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLEVBQUU7b0JBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUU7d0JBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO3FCQUN0QjtpQkFDRjtnQkFFRCxpQ0FBaUM7Z0JBQ2pDLG9EQUFvRDtnQkFDcEQsMkJBQTJCO2dCQUMzQixLQUFLO2dCQUNMLEdBQUc7Z0JBRUgsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRTtvQkFDN0IsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRTt3QkFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7cUJBQ3RCO2lCQUNGO2dCQUVELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUU7b0JBQ3pCLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUU7d0JBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO3FCQUMzQjtvQkFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFO3dCQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztxQkFDekI7b0JBRUQsa0RBQWtEO29CQUNsRCw0QkFBNEI7b0JBQzVCLEdBQUc7b0JBRUgsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRTt3QkFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7cUJBQzFCO2lCQUNGO2dCQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUVyQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLEVBQUU7b0JBQ25DLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO3dCQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO3dCQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7cUJBQzNEO3lCQUNJO3dCQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUNqRTtpQkFDRjtZQUVILENBQUMsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO2dCQUNyQixLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUNJO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztTQUNqQztJQUNILENBQUM7SUFFTSx5Q0FBeUMsQ0FBQyxTQUFpQixFQUFFLFVBQWlCLEVBQUUsaUJBQW9DO1FBQ3pILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRXBCLElBQUksT0FBTyxHQUFHLElBQUksd0NBQXdDLEVBQUUsQ0FBQztZQUU3RCxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUM5QixPQUFPLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUVoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsd0NBQXdDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBNEMsRUFBRSxFQUFFO2dCQUNySSxJQUFJLENBQUMscUNBQXFDLEdBQUcsS0FBSyxDQUFDO2dCQUVuRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFFckIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxFQUFFO29CQUNuQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQzt3QkFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3FCQUMzRDt5QkFDSTt3QkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztxQkFDakU7aUJBQ0Y7WUFFSCxDQUFDLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtnQkFDckIsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFDSTtZQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDakM7SUFDSCxDQUFDO3VHQXBKVSxhQUFhOzJHQUFiLGFBQWEsY0FEQSxNQUFNOztTQUNuQixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmFicmlrYW50ZW5BcGlDbGllbnQsIEZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLCBGYWJyaWthbnRlbkJlc3Rla1JlcXVlc3RNb2RlbCwgRmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblZpZXdNb2RlbCwgRmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBGYWJyaWthbnRlblNlcnZpY2UgfSBmcm9tICcuL2ZhYnJpa2FudGVuLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEJlc3Rla1NlcnZpY2Uge1xyXG5cclxuICBwdWJsaWMgTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBUeXBlQmVzdGVrOiBzdHJpbmcgPSBcIlNUQUJVXCI7XHJcblxyXG4gIHB1YmxpYyBmYWJQcm9kdWN0QmVzdGVrOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIGZhYlByb2R1Y3RBdXRvU3BlY2lmY2F0aW9uOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XHJcbiAgcHVibGljIEZhYnJpa2FudGVuU2VydmljZTogRmFicmlrYW50ZW5TZXJ2aWNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHB1YmxpYyBGYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbDogRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWw7XHJcbiAgcHVibGljIEZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWw6IEZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWw7XHJcblxyXG4gIHByaXZhdGUgU2hvdWxkVHJpZ2dlclJlbG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaXBib2FyZDogQ2xpcGJvYXJkLCBwcml2YXRlIEZhYnJpa2FudGVuQXBpQ2xpZW50OiBGYWJyaWthbnRlbkFwaUNsaWVudCkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEJlc3Rla1Rla3N0KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5UeXBlQmVzdGVrID09IFwiU1RBQlVcIikge1xyXG4gICAgICByZXR1cm4gdGhpcy5GYWJyaWthbnRlbkJlc3Rla1ZpZXdNb2RlbC5zdGFidSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuVHlwZUJlc3RlayA9PSBcIk9TRlwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsLm9zZmh0bWwgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJWcmlqXCIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwudnJpakJlc3Rla0hUTUwgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldEF1dG9TcGVjaWZpY2F0aW9uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5GYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uVmlld01vZGVsPy50ZXh0ICsgXCJcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDb3B5VG9DbGlwYm9hcmQoc3RyOiBhbnkpIHtcclxuICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoc3RyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwoc2Vzc2lvbmlkOiBzdHJpbmcsIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLkxvYWRpbmcpIHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciByZXF1ZXN0ID0gbmV3IEZhYnJpa2FudGVuQmVzdGVrUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHNlc3Npb25pZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwocmVxdWVzdCkuc3Vic2NyaWJlKChtb2RlbDogRmFicmlrYW50ZW5CZXN0ZWtWaWV3TW9kZWwpID0+IHtcclxuICAgICAgICB0aGlzLkZhYnJpa2FudGVuQmVzdGVrVmlld01vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJTVEFCVVwiKSB7XHJcbiAgICAgICAgICBpZiAobW9kZWwuc3RhYnUgPT0gdW5kZWZpbmVkIHx8IG1vZGVsLnN0YWJ1ID09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVHlwZUJlc3RlayA9IFwiXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5UeXBlQmVzdGVrID09IFwiT1NGXCIpIHtcclxuICAgICAgICAgIGlmIChtb2RlbC5vc2ZodG1sID09IHVuZGVmaW5lZCB8fCBtb2RlbC5vc2ZodG1sID09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVHlwZUJlc3RlayA9IFwiXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2lmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJTVUZcIikge1xyXG4gICAgICAgIC8vICBpZiAobW9kZWwuc3VmID09IHVuZGVmaW5lZCB8fCBtb2RlbC5zdWYgPT0gJycpIHtcclxuICAgICAgICAvLyAgICB0aGlzLlR5cGVCZXN0ZWsgPSBcIlwiO1xyXG4gICAgICAgIC8vICB9XHJcbiAgICAgICAgLy99XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJWcmlqXCIpIHtcclxuICAgICAgICAgIGlmIChtb2RlbC52cmlqQmVzdGVrSFRNTCA9PSB1bmRlZmluZWQgfHwgbW9kZWwudnJpakJlc3Rla0hUTUwgPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlQmVzdGVrID0gXCJcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGVCZXN0ZWsgPT0gXCJcIikge1xyXG4gICAgICAgICAgaWYgKG1vZGVsLnN0YWJ1ICE9IHVuZGVmaW5lZCAmJiBtb2RlbC5zdGFidSAhPSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLlR5cGVCZXN0ZWsgPSBcIlNUQUJVXCI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1vZGVsLm9zZmh0bWwgIT0gdW5kZWZpbmVkICYmIG1vZGVsLm9zZmh0bWwgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlQmVzdGVrID0gXCJPU0ZcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvL2lmIChtb2RlbC5zdWYgIT0gdW5kZWZpbmVkICYmIG1vZGVsLnN1ZiAhPSAnJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMuVHlwZUJlc3RlayA9IFwiU1VGXCI7XHJcbiAgICAgICAgICAvL31cclxuXHJcbiAgICAgICAgICBpZiAobW9kZWwudnJpakJlc3Rla0hUTUwgIT0gdW5kZWZpbmVkICYmIG1vZGVsLnZyaWpCZXN0ZWtIVE1MICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVHlwZUJlc3RlayA9IFwiVnJpalwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkZhYnJpa2FudGVuU2VydmljZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5TaG91bGRUcmlnZ2VyUmVsb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuU2hvdWxkVHJpZ2dlclJlbG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLkZhYnJpa2FudGVuU2VydmljZS5UcmlnZ2VyUmVsb2FkcyhDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuUHJvY2Vzc0R5bmFtaWNNb2RlbHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0sIChlcnJvcjogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2hvdWxkVHJpZ2dlclJlbG9hZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9hZEZhYnJpa2FudGVuQXV0b1NwZWNpZmljYXRpb25WaWV3TW9kZWwoc2Vzc2lvbmlkOiBzdHJpbmcsIGxhbmd1YWdlaWQ6bnVtYmVyLCBDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5Mb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBGYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uUmVxdWVzdE1vZGVsKCk7XHJcblxyXG4gICAgICByZXF1ZXN0LnNlc3Npb25JZCA9IHNlc3Npb25pZDtcclxuICAgICAgcmVxdWVzdC5sYW5ndWFnZUlkID0gbGFuZ3VhZ2VpZDtcclxuXHJcbiAgICAgIHRoaXMuRmFicmlrYW50ZW5BcGlDbGllbnQuZ2V0RmFicmlrYW50ZW5BdXRvU3BlY2lmaWNhdGlvblZpZXdNb2RlbChyZXF1ZXN0KS5zdWJzY3JpYmUoKG1vZGVsOiBGYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uVmlld01vZGVsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5GYWJyaWthbnRlbkF1dG9TcGVjaWZpY2F0aW9uVmlld01vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5GYWJyaWthbnRlblNlcnZpY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuU2hvdWxkVHJpZ2dlclJlbG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLlNob3VsZFRyaWdnZXJSZWxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5GYWJyaWthbnRlblNlcnZpY2UuVHJpZ2dlclJlbG9hZHMoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuRmFicmlrYW50ZW5TZXJ2aWNlLlByb2Nlc3NEeW5hbWljTW9kZWxzKENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNob3VsZFRyaWdnZXJSZWxvYWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=