nuxeo-development-framework 5.8.8 → 5.8.9

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.
@@ -57,6 +57,7 @@ export class DynamicSearchComponent {
57
57
  /** Sorting column */
58
58
  this.sortingBy = {};
59
59
  this.fullTextParamName = 'system_fulltext';
60
+ this.higlightUnread = false; // used to higlight unreaded items with diff background
60
61
  this.onRowSelected = (row) => {
61
62
  this.router.navigate([{ outlets: { viewer: ['view', row['uid']] } }], {
62
63
  queryParams: { location: this.router.url }
@@ -286,7 +287,7 @@ export class DynamicSearchComponent {
286
287
  }
287
288
  }
288
289
  DynamicSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicSearchComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.EvaluatorsService }, { token: i3.NuxeoService }, { token: i4.GlobalAdminService }, { token: 'environment' }, { token: i5.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
289
- DynamicSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicSearchComponent, selector: "cts-dynamic-search", inputs: { columns: "columns", responsiveColumns: "responsiveColumns", entityType: "entityType", prefix: "prefix", headers: "headers", fields: "fields", pageProvider: "pageProvider", pageSize: "pageSize", sortingBy: "sortingBy", fullTextParamName: "fullTextParamName", filter: "filter", suggesterApi: "suggesterApi", onRowSelected: "onRowSelected", sortingArray: "sortingArray", customResponsiveStyle: "customResponsiveStyle", openCloseFilterFromOutside: "openCloseFilterFromOutside", theme: "theme" }, outputs: { actionOnRow: "actionOnRow" }, viewQueries: [{ propertyName: "dynamicTable", first: true, predicate: ["dynamicTable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"search-toolbar d-md-flex d-xl-none mx-3\">\r\n <button (click)=\"onOpenFilter()\" class=\"my-button\">\r\n <span> {{ \"FILTER\" | translate }}</span>\r\n <i class=\"bi bi-filter\" *ngIf=\"!openFilter\"></i>\r\n <i class=\"bi bi-x\" *ngIf=\"openFilter\"></i>\r\n </button>\r\n <div *ngIf=\"openFilter\">\r\n <i class=\"bi bi-caret-up-fill arrow-up\"></i>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"customResponsiveStyle\">\r\n <div class=\"customStyle -mt-12 px-8 flex flex-col\"\r\n [ngClass]=\"{'bg-accent-200': theme === 'dgda','bg-accent-100': theme === 'ksreleif' || theme === 'comptechco'}\"\r\n [@collapse]=\"!openFilter\">\r\n <!-- <form\r\n [formGroup]=\"searchForm\"\r\n class=\"search-form\"\r\n (ngSubmit)=\"submitForm()\"\r\n >\r\n <input\r\n class=\"search-input\"\r\n type=\"text\"\r\n formControlName=\"text\"\r\n [placeholder]=\"'search.search' | translate\"\r\n />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form> -->\r\n <div class=\"flex gap-x-18 flex-row mt-5 pb-3 overflow-x-auto\">\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <ng-container *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<div class=\"row wrapper\">\r\n <div class=\"wrapper-overlay\" *ngIf=\"loading\"></div>\r\n \r\n <ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"popup-filter px-3 d-flex d-xl-none\" *ngIf=\"openFilter\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete1\" [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete1=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"col-xl-3 search-sideMenu d-none d-xl-block\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete2\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \" [disableRipple]=\"true\" #matAutocomplete2=\"matAutocomplete\">\r\n <mat-option class=\"no-text\" *ngIf=\"resultSets && !resultSets.length\">\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span class=\"option-iner-text\">{{ resultSet.label }}</span>\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"col-12 col-xl-9\">\r\n <app-card>\r\n <div class=\"title\">\r\n <h3>\r\n {{ \"search.header\" | translate }}\r\n </h3>\r\n </div>\r\n <div class=\"body\">\r\n <div *ngIf=\"aggregations\" class=\"table-toolbar\">\r\n <div class=\"result-count\">\r\n <span>\r\n {{\r\n \"search.\" + \"resultsNumber\"\r\n | translate: { value: totalRecords ? totalRecords : 0 }\r\n }}\r\n </span>\r\n </div>\r\n <div>\r\n <form class=\"d-flex justify-between\" [formGroup]=\"searchForm\" (ngSubmit)=\"submitForm()\">\r\n <div *ngIf=\"useToggleFilters && !customResponsiveStyle\"></div>\r\n <div *ngIf=\"customResponsiveStyle\">\r\n <div class=\"search-form custom-responsive-search\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </div>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{no_result_found | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n </div>\r\n <div class=\"d-flex\" *ngIf=\"useToggleFilters\">\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.PERSONAL_FILES'\"\r\n (onToggle)=\"submitForm()\" formControlName=\"personalFiles\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.DEP_FILES'\"\r\n formControlName=\"depFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.WORKSPACE_FILES'\"\r\n formControlName=\"workSpaceFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <cts-dynamic-table #dynamicTable [pageSize]=\"pageSize\" [columns]=\"columns\" [responsiveColumns]=\"responsiveColumns\"\r\n [pageProvider]=\"pageProvider\" [quickFilter]=\"filter\" [entityType]=\"entityType\" [fields]=\"fields\"\r\n [queryParam]=\"queryParams\" [headers]=\"headers\" [prefix]=\"prefix\" [sortingBy]=\"sortingBy\" [isSearchPage]=\"true\"\r\n (onRowSelected)=\"onRowSelected($event)\" (actionOnRow)=\"performAction($event)\"\r\n (onGettingData)=\"getTableData($event)\"></cts-dynamic-table>\r\n </div>\r\n </app-card>\r\n </div>\r\n\r\n <ng-template #progressSpinner>\r\n <div class=\"progress-spinner\">\r\n <mat-spinner color=\"warn\" [diameter]=\"25\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n <ng-template #noAggregations>\r\n <div class=\"progress-spinner\">\r\n {{ \"search.noAggregations\" | translate }}\r\n </div>\r\n </ng-template>\r\n</div>", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.result-count{color:#8f98aa;font-size:14px}.search-sideMenu{background-color:#fff;padding-top:22px;padding-bottom:22px;border-radius:5px}.auto-complete-iner-wrapper{max-height:350px;border-radius:4px}.auto-complete-iner-wrapper .no-text{font-size:14px;color:#465573}.auto-complete-iner-wrapper .mat-option{text-align:start;color:#465573;font-weight:bold;font-size:14px}.auto-complete-iner-wrapper .mat-option .mat-option-text{text-align:flex-start}.search-form{display:flex;color:#6a768e;width:100%}.search-form .search-input{width:100%;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.search-form .search-input::-webkit-input-placeholder{font-size:14px}.search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.search-form .search-icon{background:#465573;color:#fff;width:12%;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}.small-font{font-size:14px}.custom-responsive-search{width:300px!important;margin:0 35px}.search-toolbar{position:relative;display:flex;justify-content:flex-end;margin-bottom:16px}.search-toolbar .my-button{width:90px}.search-toolbar .arrow-up{position:absolute;top:26px;right:28px;font-size:25px;color:#8f98aab3}.wrapper{position:relative}.wrapper .popup-filter{flex-direction:column;position:absolute;right:0;z-index:9999;max-height:70vh;max-width:400px;background-color:#fff;overflow:scroll;box-shadow:0 1px 10px 2px #00000054;top:-4px;border-radius:5px}.wrapper .popup-filter .search-form{margin-top:10px!important}.wrapper .popup-filter .search-input{width:100%!important}.wrapper .search-container{background-color:#fff;border-radius:5px;border:0px;padding:16px;height:max-content}.wrapper .search-container .table-toolbar{display:flex;align-items:center;margin-bottom:8px;justify-content:space-between}.wrapper .wrapper-overlay{position:absolute;top:0;bottom:0;right:0;left:0;z-index:9}.progress-spinner{margin-top:10px;margin-block-end:0;display:grid;place-items:center;width:100%}.rtl .popup-filter{left:0px;right:unset!important}.rtl .arrow-up{position:absolute;top:33px;left:28px;right:unset!important}@media (width: 1180px),(width: 820px){.customStyle cts-dynamic-filter .aggregation-container{width:176px!important}}.customStyle .search-form{display:flex;color:#6a768e;width:100%}.customStyle .search-form .search-input{width:288px;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.customStyle .search-form .search-input::-webkit-input-placeholder{font-size:14px}.customStyle .search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.customStyle .search-form .search-icon{background:#465573;color:#fff;width:40px;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}\n"], components: [{ type: i6.DynamicFilterComponent, selector: "cts-dynamic-filter", inputs: ["title", "filters", "selections", "id", "entityType", "prefix", "department", "componentType", "customPageProvider", "config"], outputs: ["onFilterSelected"] }, { type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i9.CardComponent, selector: "app-card", inputs: ["noBody", "dark"] }, { type: i10.DynamicFormSlideToggleitemComponent, selector: "cts-dynamic-form-slide-toggleitem", inputs: ["label", "disabled", "checked", "theme"], outputs: ["onToggle"] }, { type: i11.DynamicTableComponent, selector: "cts-dynamic-table", inputs: ["columns", "responsiveColumns", "entityType", "prefix", "headers", "fields", "pageProvider", "pageSize", "higlightUnread", "isLegacyMode", "showTotalRecord", "pageNumber", "sortingBy", "queryParam", "customFilters", "quickFilter", "report", "rowCursor", "fullWidth", "tableMode", "componentName", "tableActions", "defultSort", "range", "isSearchPage", "multiSelectRows", "customFirstRow", "highlightSelectedCard", "showActionsAsMenu", "filterParams", "skipAggregation", "customUrl", "format", "requestActions", "pageSizes"], outputs: ["onRowSelected", "onRowIndexSelected", "actionOnRow", "onGettingData", "onMultiRowSelected", "onLoading", "sortChanged", "onPageChange", "onPage", "onLoad", "onInitialize"] }, { type: i12.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i15.TranslatePipe }, animations: [
290
+ DynamicSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicSearchComponent, selector: "cts-dynamic-search", inputs: { columns: "columns", responsiveColumns: "responsiveColumns", entityType: "entityType", prefix: "prefix", headers: "headers", fields: "fields", pageProvider: "pageProvider", pageSize: "pageSize", sortingBy: "sortingBy", fullTextParamName: "fullTextParamName", filter: "filter", higlightUnread: "higlightUnread", suggesterApi: "suggesterApi", onRowSelected: "onRowSelected", sortingArray: "sortingArray", customResponsiveStyle: "customResponsiveStyle", openCloseFilterFromOutside: "openCloseFilterFromOutside", theme: "theme" }, outputs: { actionOnRow: "actionOnRow" }, viewQueries: [{ propertyName: "dynamicTable", first: true, predicate: ["dynamicTable"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"search-toolbar d-md-flex d-xl-none mx-3\">\r\n <button (click)=\"onOpenFilter()\" class=\"my-button\">\r\n <span> {{ \"FILTER\" | translate }}</span>\r\n <i class=\"bi bi-filter\" *ngIf=\"!openFilter\"></i>\r\n <i class=\"bi bi-x\" *ngIf=\"openFilter\"></i>\r\n </button>\r\n <div *ngIf=\"openFilter\">\r\n <i class=\"bi bi-caret-up-fill arrow-up\"></i>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"customResponsiveStyle\">\r\n <div class=\"customStyle -mt-12 px-8 flex flex-col\"\r\n [ngClass]=\"{'bg-accent-200': theme === 'dgda','bg-accent-100': theme === 'ksreleif' || theme === 'comptechco'}\"\r\n [@collapse]=\"!openFilter\">\r\n <!-- <form\r\n [formGroup]=\"searchForm\"\r\n class=\"search-form\"\r\n (ngSubmit)=\"submitForm()\"\r\n >\r\n <input\r\n class=\"search-input\"\r\n type=\"text\"\r\n formControlName=\"text\"\r\n [placeholder]=\"'search.search' | translate\"\r\n />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form> -->\r\n <div class=\"flex gap-x-18 flex-row mt-5 pb-3 overflow-x-auto\">\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <ng-container *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<div class=\"row wrapper\">\r\n <div class=\"wrapper-overlay\" *ngIf=\"loading\"></div>\r\n \r\n <ng-container *ngIf=\"!customResponsiveStyle\">\r\n <div class=\"popup-filter px-3 d-flex d-xl-none\" *ngIf=\"openFilter\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete1\" [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete1=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <ng-container *ngIf=\"aggregations.length; else noAggregations\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"col-xl-3 search-sideMenu d-none d-xl-block\">\r\n <form [formGroup]=\"searchForm\" class=\"search-form\" (ngSubmit)=\"submitForm()\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete2\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </form>\r\n <mat-autocomplete class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \" [disableRipple]=\"true\" #matAutocomplete2=\"matAutocomplete\">\r\n <mat-option class=\"no-text\" *ngIf=\"resultSets && !resultSets.length\">\r\n {{'no_result_found' | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span class=\"option-iner-text\">{{ resultSet.label }}</span>\r\n </mat-option>\r\n </ng-container>\r\n </mat-autocomplete>\r\n <ng-container *ngIf=\"aggregations; else progressSpinner\">\r\n <div *ngFor=\"let aggregation of aggregations\">\r\n <ng-container *ngIf=\"aggregation.buckets.length > 0\">\r\n <cts-dynamic-filter [entityType]=\"entityType\" [filters]=\"aggregation.buckets\" [id]=\"aggregation.id\"\r\n [selections]=\"aggregation.selection\" [title]=\"aggregation.field\" [prefix]=\"'search'\" [department]=\"\r\n aggregation.field === 'corr:to' ||\r\n aggregation.field === 'corr:from'\r\n \" [componentType]=\"aggregation.componentType ? aggregation.componentType : 'defult'\"\r\n [customPageProvider]=\"aggregation.customPageProvider ? aggregation.customPageProvider : ''\"\r\n [config]=\"aggregation.config ? aggregation.config : {}\" (onFilterSelected)=\"FilterSelected($event)\">\r\n </cts-dynamic-filter>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"col-12 col-xl-9\">\r\n <app-card>\r\n <div class=\"title\">\r\n <h3>\r\n {{ \"search.header\" | translate }}\r\n </h3>\r\n </div>\r\n <div class=\"body\">\r\n <div *ngIf=\"aggregations\" class=\"table-toolbar\">\r\n <div class=\"result-count\">\r\n <span>\r\n {{\r\n \"search.\" + \"resultsNumber\"\r\n | translate: { value: totalRecords ? totalRecords : 0 }\r\n }}\r\n </span>\r\n </div>\r\n <div>\r\n <form class=\"d-flex justify-between\" [formGroup]=\"searchForm\" (ngSubmit)=\"submitForm()\">\r\n <div *ngIf=\"useToggleFilters && !customResponsiveStyle\"></div>\r\n <div *ngIf=\"customResponsiveStyle\">\r\n <div class=\"search-form custom-responsive-search\">\r\n <input class=\"search-input\" type=\"text\" formControlName=\"text\" [matAutocomplete]=\"matAutocomplete\"\r\n [placeholder]=\"'search.search' | translate\" />\r\n <div (click)=\"submitForm()\" class=\"search-icon bi bi-search\"></div>\r\n </div>\r\n <mat-autocomplete\r\n class=\"\r\n auto-complete-iner-wrapper\r\n auto-complete-wrapper\r\n \"\r\n [disableRipple]=\"true\"\r\n #matAutocomplete=\"matAutocomplete\"\r\n >\r\n <mat-option\r\n class=\"no-text\"\r\n *ngIf=\"resultSets && !resultSets.length\"\r\n >\r\n {{no_result_found | translate}}\r\n </mat-option>\r\n <ng-container *ngFor=\"let resultSet of resultSets\">\r\n <mat-option (click)=\"setOptionValue(resultSet.label)\">\r\n <span\r\n class=\"option-iner-text\"\r\n >{{ resultSet.label }}</span\r\n >\r\n </mat-option >\r\n </ng-container>\r\n </mat-autocomplete>\r\n </div>\r\n <div class=\"d-flex\" *ngIf=\"useToggleFilters\">\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.PERSONAL_FILES'\"\r\n (onToggle)=\"submitForm()\" formControlName=\"personalFiles\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.DEP_FILES'\"\r\n formControlName=\"depFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n <cts-dynamic-form-slide-toggleitem class=\"mx-2 small-font\" [label]=\"'search.WORKSPACE_FILES'\"\r\n formControlName=\"workSpaceFiles\" (onToggle)=\"submitForm()\">\r\n </cts-dynamic-form-slide-toggleitem>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <cts-dynamic-table #dynamicTable [pageSize]=\"pageSize\" [columns]=\"columns\" [responsiveColumns]=\"responsiveColumns\"\r\n [pageProvider]=\"pageProvider\" [quickFilter]=\"filter\" [entityType]=\"entityType\" [fields]=\"fields\"\r\n [queryParam]=\"queryParams\" [higlightUnread]=\"higlightUnread\" [headers]=\"headers\" [prefix]=\"prefix\" [sortingBy]=\"sortingBy\" [isSearchPage]=\"true\"\r\n (onRowSelected)=\"onRowSelected($event)\" (actionOnRow)=\"performAction($event)\"\r\n (onGettingData)=\"getTableData($event)\"></cts-dynamic-table>\r\n </div>\r\n </app-card>\r\n </div>\r\n\r\n <ng-template #progressSpinner>\r\n <div class=\"progress-spinner\">\r\n <mat-spinner color=\"warn\" [diameter]=\"25\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n <ng-template #noAggregations>\r\n <div class=\"progress-spinner\">\r\n {{ \"search.noAggregations\" | translate }}\r\n </div>\r\n </ng-template>\r\n</div>", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.result-count{color:#8f98aa;font-size:14px}.search-sideMenu{background-color:#fff;padding-top:22px;padding-bottom:22px;border-radius:5px}.auto-complete-iner-wrapper{max-height:350px;border-radius:4px}.auto-complete-iner-wrapper .no-text{font-size:14px;color:#465573}.auto-complete-iner-wrapper .mat-option{text-align:start;color:#465573;font-weight:bold;font-size:14px}.auto-complete-iner-wrapper .mat-option .mat-option-text{text-align:flex-start}.search-form{display:flex;color:#6a768e;width:100%}.search-form .search-input{width:100%;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.search-form .search-input::-webkit-input-placeholder{font-size:14px}.search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.search-form .search-icon{background:#465573;color:#fff;width:12%;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}.small-font{font-size:14px}.custom-responsive-search{width:300px!important;margin:0 35px}.search-toolbar{position:relative;display:flex;justify-content:flex-end;margin-bottom:16px}.search-toolbar .my-button{width:90px}.search-toolbar .arrow-up{position:absolute;top:26px;right:28px;font-size:25px;color:#8f98aab3}.wrapper{position:relative}.wrapper .popup-filter{flex-direction:column;position:absolute;right:0;z-index:9999;max-height:70vh;max-width:400px;background-color:#fff;overflow:scroll;box-shadow:0 1px 10px 2px #00000054;top:-4px;border-radius:5px}.wrapper .popup-filter .search-form{margin-top:10px!important}.wrapper .popup-filter .search-input{width:100%!important}.wrapper .search-container{background-color:#fff;border-radius:5px;border:0px;padding:16px;height:max-content}.wrapper .search-container .table-toolbar{display:flex;align-items:center;margin-bottom:8px;justify-content:space-between}.wrapper .wrapper-overlay{position:absolute;top:0;bottom:0;right:0;left:0;z-index:9}.progress-spinner{margin-top:10px;margin-block-end:0;display:grid;place-items:center;width:100%}.rtl .popup-filter{left:0px;right:unset!important}.rtl .arrow-up{position:absolute;top:33px;left:28px;right:unset!important}@media (width: 1180px),(width: 820px){.customStyle cts-dynamic-filter .aggregation-container{width:176px!important}}.customStyle .search-form{display:flex;color:#6a768e;width:100%}.customStyle .search-form .search-input{width:288px;border:1px solid #d9dce2;border-inline-end:0;border-start-start-radius:5px;border-end-start-radius:5px;border:1px solid #ccc;height:32px;font-size:16px;padding-inline-start:4px}.customStyle .search-form .search-input::-webkit-input-placeholder{font-size:14px}.customStyle .search-form .search-input:focus-visible{border:2px solid #465573;outline:transparent}.customStyle .search-form .search-icon{background:#465573;color:#fff;width:40px;display:flex;align-items:center;justify-content:center;border-radius:0;cursor:pointer;border:1px solid #d9dce2;border-start-end-radius:6px;border-end-end-radius:6px;border-inline-start:0}\n"], components: [{ type: i6.DynamicFilterComponent, selector: "cts-dynamic-filter", inputs: ["title", "filters", "selections", "id", "entityType", "prefix", "department", "componentType", "customPageProvider", "config"], outputs: ["onFilterSelected"] }, { type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i9.CardComponent, selector: "app-card", inputs: ["noBody", "dark"] }, { type: i10.DynamicFormSlideToggleitemComponent, selector: "cts-dynamic-form-slide-toggleitem", inputs: ["label", "disabled", "checked", "theme"], outputs: ["onToggle"] }, { type: i11.DynamicTableComponent, selector: "cts-dynamic-table", inputs: ["columns", "responsiveColumns", "entityType", "prefix", "headers", "fields", "pageProvider", "pageSize", "higlightUnread", "isLegacyMode", "showTotalRecord", "pageNumber", "sortingBy", "queryParam", "customFilters", "quickFilter", "report", "rowCursor", "fullWidth", "tableMode", "componentName", "tableActions", "defultSort", "range", "isSearchPage", "multiSelectRows", "customFirstRow", "highlightSelectedCard", "showActionsAsMenu", "filterParams", "skipAggregation", "customUrl", "format", "requestActions", "pageSizes"], outputs: ["onRowSelected", "onRowIndexSelected", "actionOnRow", "onGettingData", "onMultiRowSelected", "onLoading", "sortChanged", "onPageChange", "onPage", "onLoad", "onInitialize"] }, { type: i12.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i15.TranslatePipe }, animations: [
290
291
  trigger('collapse', [
291
292
  state('false', style({ height: AUTO_STYLE, visibility: AUTO_STYLE })),
292
293
  state('true', style({ height: '0', visibility: 'hidden' })),
@@ -338,6 +339,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
338
339
  type: Input
339
340
  }], filter: [{
340
341
  type: Input
342
+ }], higlightUnread: [{
343
+ type: Input
341
344
  }], suggesterApi: [{
342
345
  type: Input
343
346
  }], onRowSelected: [{
@@ -353,4 +356,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
353
356
  }], theme: [{
354
357
  type: Input
355
358
  }] } });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEVBR2pCLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFlSCxNQUFNLE9BQU8sc0JBQXNCO0lBMERsQyxZQUNTLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxnQkFBbUMsRUFDbkMsWUFBMEIsRUFDMUIsa0JBQXNDLEVBQ2YsV0FBVyxFQUNuQyxr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QUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUN6QyxDQUFDO3FCQUNGO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBaUVFLE1BQU07MkJBQUMsYUFBYTs2RUE3REssWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVOLGFBQWE7c0JBRFosS0FBSztnQkFPSSxXQUFXO3NCQUFwQixNQUFNO2dCQWFQLFlBQVk7c0JBRFgsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdEV2ZW50RW1pdHRlcixcclxuXHRJbnB1dCxcclxuXHRPbkluaXQsXHJcblx0T3V0cHV0LFxyXG5cdFZpZXdFbmNhcHN1bGF0aW9uLFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdEluamVjdCxcclxuXHRWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IGFuaW1hdGUsIEFVVE9fU1RZTEUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBFdmFsdWF0b3JzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9wZXJtaXNzaW9ucy9ldmFsdWF0b3JzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsQWRtaW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL2dsb2JhbC1hZG1pbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGFibGVzJztcclxuXHJcbi8qKlxyXG4gKiBEeW5hbWljIHNlYXJjaCBjb21wb25lbnQgdXNlcyBbRHluYW1pYyBUYWJsZV17QGxpbmsgRHluYW1pY1RhYmxlQ29tcG9uZW50fSAmIFtEeW5hbWljIEZpbHRlcl17QGxpbmsgRHluYW1pY0ZpbHRlckNvbXBvbmVudH0gaW50ZXJuYWxseSxcclxuICogYW5kIHV0aWxpemVzIGl0cyBpbnB1dHMgdG8gcGVyZm9ybSBhZHZhbmNlZCBzZWFyY2ggYW5kIGZpbHRlcmluZyBvbiBhbnkgbnV4ZW8gUHJvdmlkZXJcclxuICogQHRpdGxlXHJcbiAqIER5bmFtaWMgU2VhcmNoXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxjdHMtZHluYW1pYy1zZWFyY2hcclxuICogICBbcGFnZVByb3ZpZGVyXT1cIidwYWdlUHJvdmlkZXJOYW1lJ1wiXHJcbiAqICAgW2NvbHVtbnNdPVwiY29sdW1uc0FycmF5XCJcclxuICogICBbcmVzcG9uc2l2ZUNvbHVtbnNdPVwicmVzcG9uc2l2ZUNvbHVtbnNBcnJheVwiXHJcbiAqICAgW2VudGl0eVR5cGVdPVwiJ2RvY3VtZW50cydcIlxyXG4gKiAgIFtwcmVmaXhdPVwicHJlZml4XCJcclxuICogICBbZmllbGRzXT1cImZpZWxkc1wiXHJcbiAqICAgW2hlYWRlcnNdPVwiaGVhZGVyc1wiXHJcbiAqICAgW3NvcnRpbmdCeV09XCJzb3J0aW5nQnlcIlxyXG4gKiAgIFtwYWdlU2l6ZV09XCJQYWdlU2l6ZVwiXHJcbiogICAgW2N1c3RvbVJlc3BvbnNpdmVTdHlsZV09XCJmYWxzZSBvciB0cnVlXCJcclxuICAgICBbb3BlbkNsb3NlRmlsdGVyRnJvbU91dHNpZGVdPVwicGFzcyBGaWx0ZXIgc3RhdGUgZnJvbSBwYXJlbnQgY29tcG9uZW50XCJcclxuICAgICBbdGhlbWVdID0gXCJ0byAgc2V0IGJhY2tncm91bmQgZGVwZW5lZCBvbiB0aGVtZVwiXHJcbiAqID5cclxuICogPC9jdHMtZHluYW1pYy1zZWFyY2g+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2N0cy1keW5hbWljLXNlYXJjaCcsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9keW5hbWljLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxyXG5cdGFuaW1hdGlvbnM6IFtcclxuXHRcdHRyaWdnZXIoJ2NvbGxhcHNlJywgW1xyXG5cdFx0XHRzdGF0ZSgnZmFsc2UnLCBzdHlsZSh7IGhlaWdodDogQVVUT19TVFlMRSwgdmlzaWJpbGl0eTogQVVUT19TVFlMRSB9KSksXHJcblx0XHRcdHN0YXRlKCd0cnVlJywgc3R5bGUoeyBoZWlnaHQ6ICcwJywgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSkpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKCdmYWxzZSA9PiB0cnVlJywgYW5pbWF0ZSgzMDApKSxcclxuXHRcdFx0dHJhbnNpdGlvbigndHJ1ZSA9PiBmYWxzZScsIGFuaW1hdGUoMzAwKSlcclxuXHRcdF0pXHJcblx0XSxcclxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljU2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cdHRleHQ6IHN0cmluZztcclxuXHRhZ2dyZWdhdGlvbnM7XHJcblx0QFZpZXdDaGlsZCgnZHluYW1pY1RhYmxlJykgZHluYW1pY1RhYmxlOiBEeW5hbWljVGFibGVDb21wb25lbnQ7XHJcblx0LyoqIEFycmF5IG9mIGNvbHVtbnMgKi9cclxuXHRASW5wdXQoKSBjb2x1bW5zO1xyXG5cdC8qKiBBcnJheSBvZiBjb2x1bW5zIG9uIHNtYWxsZXIgc2NyZWVucyAqL1xyXG5cdEBJbnB1dCgpIHJlc3BvbnNpdmVDb2x1bW5zPztcclxuXHQvKiogRGVmaW5lcyB0aGUgcGFnZSBpbiB3aGljaCB0YWJsZSBpcyBiZWluZyB1c2VkICovXHJcblx0QElucHV0KCkgZW50aXR5VHlwZTogc3RyaW5nO1xyXG5cdC8qKiBUcmFuc2xhdGlvbnMgcHJlZml4ICovXHJcblx0QElucHV0KCkgcHJlZml4ID0gJyc7XHJcblx0LyoqIEhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIEFQSSBSZXF1ZXN0ICovXHJcblx0QElucHV0KCkgaGVhZGVycztcclxuXHQvKiogRmllbGRzIGtleW1hcCB0byBiZSBtYXBwZWQgaW4gdGhlIGFkYXB0ZXIgKi9cclxuXHRASW5wdXQoKSBmaWVsZHM7XHJcblx0LyoqIFBhZ2UgUHJvdmlkZXIgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXRyaWV2ZSBkYXRhICovXHJcblx0QElucHV0KCkgcGFnZVByb3ZpZGVyO1xyXG5cdC8qKiBDb250cm9scyBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UgaW4gdGFibGUgKi9cclxuXHRASW5wdXQoKSBwYWdlU2l6ZTtcclxuXHQvKiogU29ydGluZyBjb2x1bW4gKi9cclxuXHRASW5wdXQoKSBzb3J0aW5nQnk/ID0ge307XHJcblx0QElucHV0KCkgZnVsbFRleHRQYXJhbU5hbWUgPSAnc3lzdGVtX2Z1bGx0ZXh0JztcclxuXHRASW5wdXQoKSBmaWx0ZXI7IC8vIHVzZWQgdG8gcGFzcyBwYXJhbXMgZnJvbSBvdXRzaWRlIHRvIHBhcmFtcyBvZiBkeW5hbWljIHRhYmxlIGRpcmVjdGx5XHJcblxyXG5cdEBJbnB1dCgpIHN1Z2dlc3RlckFwaTsgLy8gYXBpIHRvIGJlIHVzZWQgaW4gdGhlIHN1Z2dlc3RlciBpbnB1dCBpZiBzZW50IHdpbGwgdXNlZCBpdCBpZiBub3Qgd2lsbCB1c2UgdGhlIGRlZnVsdCBvbmNlXHJcblx0QElucHV0KClcclxuXHRvblJvd1NlbGVjdGVkID0gKHJvdykgPT4ge1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyB2aWV3ZXI6IFsndmlldycsIHJvd1sndWlkJ11dIH0gfV0sIHtcclxuXHRcdFx0cXVlcnlQYXJhbXM6IHsgbG9jYXRpb246IHRoaXMucm91dGVyLnVybCB9XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cdC8qKiB1c2VkIHRvIGVtaXQgYW55IGFjdGlvbnMgdG8gb3V0c2lkZSAqL1xyXG5cdEBPdXRwdXQoKSBhY3Rpb25PblJvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRxdWVyeVBhcmFtcyA9IHt9O1xyXG5cdGZpbHRlcnM7XHJcblx0c2VhcmNoRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG5cdFx0dGV4dDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG5cdFx0cGVyc29uYWxGaWxlczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcclxuXHRcdGRlcEZpbGVzOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG5cdFx0d29ya1NwYWNlRmlsZXM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSlcclxuXHR9KTtcclxuXHRsb2FkaW5nID0gZmFsc2U7XHJcblx0dG90YWxSZWNvcmRzO1xyXG5cdG9wZW5GaWx0ZXI6IGJvb2xlYW47XHJcblx0QElucHV0KClcclxuXHRzb3J0aW5nQXJyYXk7XHJcblx0QElucHV0KCkgY3VzdG9tUmVzcG9uc2l2ZVN0eWxlOiBib29sZWFuID0gZmFsc2U7XHJcblx0QElucHV0KCkgb3BlbkNsb3NlRmlsdGVyRnJvbU91dHNpZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRASW5wdXQoKSB0aGVtZTogYW55O1xyXG5cdHVzZVRvZ2dsZUZpbHRlcnM7XHJcblxyXG5cdHF1aWNrRmlsdGVycyA9ICcnO1xyXG5cdHNhdmVkUGVyc0ZpbHRlclZhbHVlID0gbnVsbDtcclxuXHRzYXZlZERlcEZpbHRlclZhbHVlID0gbnVsbDtcclxuXHRzYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlID0gbnVsbDtcclxuXHJcblx0cmVzdWx0U2V0cyA9IFtdO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcblx0XHRwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG5cdFx0cHJpdmF0ZSBldmFsdWF0b3JTZXJ2aWNlOiBFdmFsdWF0b3JzU2VydmljZSxcclxuXHRcdHByaXZhdGUgbnV4ZW9TZXJ2aWNlOiBOdXhlb1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGdsb2JhbEFkbWluU2VydmljZTogR2xvYmFsQWRtaW5TZXJ2aWNlLFxyXG5cdFx0QEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50LFxyXG5cdFx0cHVibGljIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyXHJcblx0KSB7XHJcblx0XHR0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGVSdWxlKCdlbmFibGVTZWFyY2hUb2dnbGVzJywge30pLnRoZW4oKHJlcykgPT4ge1xyXG5cdFx0XHR0aGlzLnVzZVRvZ2dsZUZpbHRlcnMgPSByZXM7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHRcdGlmIChjaGFuZ2VzLm9wZW5DbG9zZUZpbHRlckZyb21PdXRzaWRlKSB7XHJcblx0XHRcdHRoaXMub3BlbkZpbHRlciA9IGNoYW5nZXMub3BlbkNsb3NlRmlsdGVyRnJvbU91dHNpZGUuY3VycmVudFZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKHRoaXMuY29uc3RydWN0UGFyYW1zRnVuY3Rpb24odGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcykpO1xyXG5cdFx0dGhpcy5zZWFyY2hJbnB1dFBvcHVsYXRlKCk7XHJcblx0XHR0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQodGhpcy50ZXh0ICE9PSBwYXJhbXNbJ3NlYXJjaF9xdWVyeSddICYmIHBhcmFtc1snc2VhcmNoX3F1ZXJ5J10pIHx8XHJcblx0XHRcdFx0KHBhcmFtc1snc2VhcmNoX3F1ZXJ5J10/Lmxlbmd0aCA9PSAwICYmIHRoaXMudGV4dCAhPT0gcGFyYW1zWydzZWFyY2hfcXVlcnknXSkgfHxcclxuXHRcdFx0XHQodGhpcy51c2VUb2dnbGVGaWx0ZXJzICYmIHRoaXMucXVpY2tGaWx0ZXJzICE9PSBwYXJhbXNbJ3F1aWNrRmlsdGVycyddKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKHRoaXMuY29uc3RydWN0UGFyYW1zRnVuY3Rpb24ocGFyYW1zKSk7XHJcblx0XHRcdFx0dGhpcy5zZWFyY2hJbnB1dFBvcHVsYXRlKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5icmVha3BvaW50KCk7XHJcblxyXG5cdFx0dGhpcy5zZWFyY2hGb3JtXHJcblx0XHRcdC5nZXQoJ3RleHQnKVxyXG5cdFx0XHQudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpXHJcblx0XHRcdC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2VhcmNoKHJlcykuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnJlc3VsdFNldHMgPSByZXN1bHRzO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdFBhcmFtc0Z1bmN0aW9uKHBhcmFtcykge1xyXG5cdFx0bGV0IGNvbnRydWN0ZWRQYXJtcyA9IHt9O1xyXG5cdFx0dGhpcy50ZXh0ID0gcGFyYW1zWydzZWFyY2hfcXVlcnknXTtcclxuXHRcdGlmICh0aGlzLnRleHQgJiYgdGhpcy50ZXh0LnRyaW0oKSkge1xyXG5cdFx0XHRpZiAodGhpcy51c2VUb2dnbGVGaWx0ZXJzKSB7XHJcblx0XHRcdFx0aWYgKHBhcmFtc1sncXVpY2tGaWx0ZXJzJ10pIHtcclxuXHRcdFx0XHRcdHRoaXMucXVpY2tGaWx0ZXJzID0gcGFyYW1zWydxdWlja0ZpbHRlcnMnXTtcclxuXHRcdFx0XHRcdGNvbnRydWN0ZWRQYXJtcyA9IHsgW3RoaXMuZnVsbFRleHRQYXJhbU5hbWVdOiB0aGlzLnRleHQgKyAnKicsIHF1aWNrRmlsdGVyczogdGhpcy5xdWlja0ZpbHRlcnMgfTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5xdWlja0ZpbHRlcnMgPSAnJztcclxuXHRcdFx0XHRcdGNvbnRydWN0ZWRQYXJtcyA9IHsgW3RoaXMuZnVsbFRleHRQYXJhbU5hbWVdOiB0aGlzLnRleHQgKyAnKicsIHF1aWNrRmlsdGVyczogJycgfTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29udHJ1Y3RlZFBhcm1zID0geyBbdGhpcy5mdWxsVGV4dFBhcmFtTmFtZV06IHRoaXMudGV4dCArICcqJyB9O1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb250cnVjdGVkUGFybXMgPSB7IFt0aGlzLmZ1bGxUZXh0UGFyYW1OYW1lXTogbnVsbCB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb250cnVjdGVkUGFybXM7XHJcblx0fVxyXG5cdHVwZGF0ZVF1ZXJ5UGFyYW1zKG5ld1F1ZXJ5cGFyYW1zOiBvYmplY3QpIHtcclxuXHRcdHRoaXMucXVlcnlQYXJhbXMgPSB7XHJcblx0XHRcdC4uLnRoaXMucXVlcnlQYXJhbXMsXHJcblx0XHRcdC4uLm5ld1F1ZXJ5cGFyYW1zXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0c2VhcmNoSW5wdXRQb3B1bGF0ZSgpIHtcclxuXHRcdGlmICh0aGlzLnVzZVRvZ2dsZUZpbHRlcnMpIHtcclxuXHRcdFx0dGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG5cdFx0XHRcdHRleHQ6IHRoaXMudGV4dCxcclxuXHRcdFx0XHRwZXJzb25hbEZpbGVzOlxyXG5cdFx0XHRcdFx0dGhpcy5xdWlja0ZpbHRlcnMgPT09ICdwZXJzb25hbEZpbHRlcidcclxuXHRcdFx0XHRcdFx0PyB0cnVlXHJcblx0XHRcdFx0XHRcdDogdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAhPT0gbnVsbFxyXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZVxyXG5cdFx0XHRcdFx0XHRcdDogZmFsc2UsXHJcblx0XHRcdFx0ZGVwRmlsZXM6XHJcblx0XHRcdFx0XHR0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ2RlcGFydG1lbnRGaWx0ZXInXHJcblx0XHRcdFx0XHRcdD8gdHJ1ZVxyXG5cdFx0XHRcdFx0XHQ6IHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAhPT0gbnVsbFxyXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlXHJcblx0XHRcdFx0XHRcdFx0OiBmYWxzZSxcclxuXHRcdFx0XHR3b3JrU3BhY2VGaWxlczpcclxuXHRcdFx0XHRcdHRoaXMucXVpY2tGaWx0ZXJzID09PSAnZGVwYXJ0bWVudFdvcmtTcGFjZUZpbHRlcidcclxuXHRcdFx0XHRcdFx0PyB0cnVlXHJcblx0XHRcdFx0XHRcdDogdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlICE9PSBudWxsXHJcblx0XHRcdFx0XHRcdFx0PyB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWVcclxuXHRcdFx0XHRcdFx0XHQ6IGZhbHNlXHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG5cdFx0XHRcdHRleHQ6IHRoaXMudGV4dFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdEZpbHRlclNlbGVjdGVkKHZhbDogYW55KSB7XHJcblx0XHR0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0dGhpcy5maWx0ZXJzID0geyAuLi50aGlzLmZpbHRlcnMsIC4uLnZhbC5maWx0ZXIgfTsgLy9zdG9yZSBmaWx0ZXJzXHJcblx0XHR0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKHRoaXMuZmlsdGVycyk7XHJcblx0fVxyXG5cclxuXHRwYWdpbmF0aW9uQ2hhbmdlKGV2ZW50KSB7fVxyXG5cclxuXHRnZXRUYWJsZURhdGEoZGF0YSkge1xyXG5cdFx0dGhpcy5hZ2dyZWdhdGlvbnMgPSBPYmplY3QuZW50cmllcyhkYXRhLmFnZ3JlZ2F0aW9ucyB8fCB7fSkubWFwKChpdGVtKSA9PiB7XHJcblx0XHRcdHJldHVybiBpdGVtWzFdO1xyXG5cdFx0fSk7XHJcblx0XHQvLyB0aGlzLmFnZ3JlZ2F0aW9ucyA9IHRoaXMuYWdncmVnYXRpb25zLmZpbHRlcigoaXRlbSkgPT5cclxuXHRcdC8vICAgdGhpcy5zb3J0aW5nQXJyYXkuaW5jbHVkZXMoaXRlbS5pZClcclxuXHRcdC8vICk7XHJcblx0XHRsZXQgdXBkYXRlZEFnZ3JlZ2F0aW9uID0gW107XHJcblx0XHR0aGlzLmFnZ3JlZ2F0aW9ucy5tYXAoKGFnZ3JlZykgPT4ge1xyXG5cdFx0XHR0aGlzLnNvcnRpbmdBcnJheS5tYXAoKHNvcnRUeXBlKSA9PiB7XHJcblx0XHRcdFx0aWYgKHNvcnRUeXBlLmlkID09PSBhZ2dyZWcuaWQpIHtcclxuXHRcdFx0XHRcdGFnZ3JlZ1snY29tcG9uZW50VHlwZSddID0gc29ydFR5cGUuY29tcG9lbmVudFR5cGU7XHJcblx0XHRcdFx0XHQvLyBpbiBjYXNlIG9mIGN1c3RvbSBjb21wb25lbnQgbmVlZCB0byBjYWxsIHBhZ2UgcHJvdmlkZXIgdG8gZ2V0IGRhdGFcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0c29ydFR5cGUuY29tcG9lbmVudFR5cGUgPT09ICdjdXN0b20tcHAnIHx8XHJcblx0XHRcdFx0XHRcdHNvcnRUeXBlLmNvbXBvZW5lbnRUeXBlID09PSAnY3VzdG9tLWRvY3VtZW50JyB8fFxyXG5cdFx0XHRcdFx0XHRzb3J0VHlwZS5jb21wb2VuZW50VHlwZSA9PT0gJ2N1c3RvbS1kZXBhcnRtZW50J1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdChhZ2dyZWdbJ2N1c3RvbVBhZ2VQcm92aWRlciddID0gc29ydFR5cGUucGFnZVByb3ZpZGVyKSwgKGFnZ3JlZ1snY29uZmlnJ10gPSBzb3J0VHlwZS5jb25maWcpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dXBkYXRlZEFnZ3JlZ2F0aW9uLnB1c2goYWdncmVnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFnZ3JlZ2F0aW9ucyA9IF8uc29ydEJ5KHVwZGF0ZWRBZ2dyZWdhdGlvbiwgKGl0ZW0pID0+IHtcclxuXHRcdFx0bGV0IGkgPSAtMTtcclxuXHRcdFx0dGhpcy5zb3J0aW5nQXJyYXkubWFwKChzb3J0VHlwZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRpZiAoc29ydFR5cGUuaWQgPT09IGl0ZW0uaWQpIHtcclxuXHRcdFx0XHRcdGkgPSBpbmRleDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gaTtcclxuXHRcdH0pO1xyXG5cdFx0Y29uc29sZS5sb2coJ2FnZ3JlZ2F0aW9ucycsIHRoaXMuYWdncmVnYXRpb25zKTtcclxuXHRcdHRoaXMudG90YWxSZWNvcmRzID0gZGF0YS50b3RhbFNpemU7XHJcblx0XHR0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHN1Ym1pdEZvcm0oKSB7XHJcblx0XHRsZXQgcGFyYW1zID0ge307XHJcblx0XHRpZiAodGhpcy51c2VUb2dnbGVGaWx0ZXJzKSB7XHJcblx0XHRcdHBhcmFtcyA9IHtcclxuXHRcdFx0XHRzZWFyY2hfcXVlcnk6IHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy50ZXh0LnZhbHVlLFxyXG5cdFx0XHRcdHF1aWNrRmlsdGVyczogdGhpcy5nZXRUb2dnbGVGaWx0ZXJzKClcclxuXHRcdFx0fTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHBhcmFtcyA9IHtcclxuXHRcdFx0XHRzZWFyY2hfcXVlcnk6IHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy50ZXh0LnZhbHVlXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nXSwge1xyXG5cdFx0XHRyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG5cdFx0XHRxdWVyeVBhcmFtczogcGFyYW1zXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGdldFRvZ2dsZUZpbHRlcnMoKSB7XHJcblx0XHR0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMuZGVwRmlsZXMudmFsdWU7XHJcblx0XHR0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLnBlcnNvbmFsRmlsZXMudmFsdWU7XHJcblx0XHR0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMud29ya1NwYWNlRmlsZXMudmFsdWU7XHJcblx0XHRpZiAoXHJcblx0XHRcdCh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHx8XHJcblx0XHRcdCghdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpXHJcblx0XHQpIHtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gJ3BlcnNvbmFsRmlsdGVyJztcclxuXHRcdH0gZWxzZSBpZiAoIXRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuICdkZXBhcnRtZW50RmlsdGVyJztcclxuXHRcdH0gZWxzZSBpZiAoIXRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuICdkZXBhcnRtZW50V29ya1NwYWNlRmlsdGVyJztcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gJ2RlcGFydG1lbnRQZXJzb25hbEZpbHRlcic7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuICdwZXJzb25hbERlcGFydG1lbnRXb3JrU3BhY2VGaWx0ZXInO1xyXG5cdFx0fSBlbHNlIGlmICghdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKSB7XHJcblx0XHRcdHJldHVybiAnZGVwdERlcGF0bWVudFdvcmtTcGFjZUZpbHRlcic7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzZXRPcHRpb25WYWx1ZShzZWFyY2hlZFRleHQpIHtcclxuXHRcdHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RleHQnKS5zZXRWYWx1ZShzZWFyY2hlZFRleHQpO1xyXG5cdFx0dGhpcy5zdWJtaXRGb3JtKCk7XHJcblx0fVxyXG5cdG9uT3BlbkZpbHRlcigpIHtcclxuXHRcdHRoaXMub3BlbkZpbHRlciA9ICF0aGlzLm9wZW5GaWx0ZXI7XHJcblx0fVxyXG5cclxuXHRicmVha3BvaW50KCkge1xyXG5cdFx0dGhpcy5icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbJyhtaW4td2lkdGg6IDEyMDBweCknXSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHRcdFx0aWYgKHJlc3VsdC5tYXRjaGVzKSB7XHJcblx0XHRcdFx0dGhpcy5vcGVuRmlsdGVyID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cGVyZm9ybUFjdGlvbihhY3Rpb24pIHtcclxuXHRcdHRoaXMuYWN0aW9uT25Sb3cuZW1pdChhY3Rpb24pO1xyXG5cdH1cclxuXHJcblx0c2VhcmNoKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRsZXQgcGFyYW1zID0ge1xyXG5cdFx0XHRzZWFyY2hUZXJtOiB0ZXJtXHJcblx0XHR9O1xyXG5cdFx0aWYgKHRoaXMuZ2xvYmFsQWRtaW5TZXJ2aWNlLmlzR2xvYmFsQWRtaW4pIHtcclxuXHRcdFx0cGFyYW1zWydwYXRoJ10gPSB0aGlzLmdsb2JhbEFkbWluU2VydmljZS5hY3RpdmVUZW5hbnQgO1xyXG5cdFx0fSBlbHNlIGlmICghdGhpcy5nbG9iYWxBZG1pblNlcnZpY2UuaXNHbG9iYWxBZG1pbiAmJiB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMudGVuYW50SWQpIHtcclxuXHRcdFx0cGFyYW1zWydwYXRoJ10gPSB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMudGVuYW50SWQ7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZnJvbShcclxuXHRcdFx0dGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuXHRcdFx0XHQub3BlcmF0aW9uKHRoaXMuc3VnZ2VzdGVyQXBpID8gdGhpcy5zdWdnZXN0ZXJBcGkgOiAnU2VhcmNoLkN1c3RvbVN1Z2dlc3RlcnNMYXVuY2hlcicsIHtcclxuXHRcdFx0XHRcdHVybDogYCR7dGhpcy5lbnZpcm9ubWVudC5udXhlb30ke3RoaXMuZW52aXJvbm1lbnQuY3VzdG9tQXV0b21hdGlvbn1gXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQucGFyYW1zKHtcclxuXHRcdFx0XHRcdC4uLnBhcmFtc1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0LmNvbnRleHQoe30pXHJcblx0XHRcdFx0LmV4ZWN1dGUoKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21SZXNwb25zaXZlU3R5bGVcIj5cclxuICA8ZGl2IGNsYXNzPVwic2VhcmNoLXRvb2xiYXIgZC1tZC1mbGV4IGQteGwtbm9uZSBteC0zXCI+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJvbk9wZW5GaWx0ZXIoKVwiIGNsYXNzPVwibXktYnV0dG9uXCI+XHJcbiAgICAgIDxzcGFuPiB7eyBcIkZJTFRFUlwiIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICA8aSBjbGFzcz1cImJpIGJpLWZpbHRlclwiICpuZ0lmPVwiIW9wZW5GaWx0ZXJcIj48L2k+XHJcbiAgICAgIDxpIGNsYXNzPVwiYmkgYmkteFwiICpuZ0lmPVwib3BlbkZpbHRlclwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9wZW5GaWx0ZXJcIj5cclxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jYXJldC11cC1maWxsIGFycm93LXVwXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVJlc3BvbnNpdmVTdHlsZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjdXN0b21TdHlsZSAtbXQtMTIgcHgtOCBmbGV4IGZsZXgtY29sXCJcclxuICAgIFtuZ0NsYXNzXT1cInsnYmctYWNjZW50LTIwMCc6IHRoZW1lID09PSAnZGdkYScsJ2JnLWFjY2VudC0xMDAnOiB0aGVtZSA9PT0gJ2tzcmVsZWlmJyB8fCB0aGVtZSA9PT0gJ2NvbXB0ZWNoY28nfVwiXHJcbiAgICBbQGNvbGxhcHNlXT1cIiFvcGVuRmlsdGVyXCI+XHJcbiAgICA8IS0tIDxmb3JtXHJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCJcclxuICAgICAgICBjbGFzcz1cInNlYXJjaC1mb3JtXCJcclxuICAgICAgICAobmdTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaC5zZWFyY2gnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInN1Ym1pdEZvcm0oKVwiIGNsYXNzPVwic2VhcmNoLWljb24gYmkgYmktc2VhcmNoXCI+PC9kaXY+XHJcbiAgICAgIDwvZm9ybT4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAteC0xOCBmbGV4LXJvdyBtdC01IHBiLTMgb3ZlcmZsb3cteC1hdXRvXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbnM7IGVsc2UgcHJvZ3Jlc3NTcGlubmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9ucy5sZW5ndGg7IGVsc2Ugbm9BZ2dyZWdhdGlvbnNcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb24uYnVja2V0cy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZpbHRlciBbZW50aXR5VHlwZV09XCJlbnRpdHlUeXBlXCIgW2ZpbHRlcnNdPVwiYWdncmVnYXRpb24uYnVja2V0c1wiIFtpZF09XCJhZ2dyZWdhdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uc109XCJhZ2dyZWdhdGlvbi5zZWxlY3Rpb25cIiBbdGl0bGVdPVwiYWdncmVnYXRpb24uZmllbGRcIiBbcHJlZml4XT1cIidzZWFyY2gnXCIgW2RlcGFydG1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOnRvJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpZWxkID09PSAnY29ycjpmcm9tJ1xyXG4gICAgICAgICAgICAgICAgICBcIiBbY29tcG9uZW50VHlwZV09XCJhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlID8gYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA6ICdkZWZ1bHQnXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21QYWdlUHJvdmlkZXJdPVwiYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyID8gYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyIDogJydcIlxyXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhZ2dyZWdhdGlvbi5jb25maWcgPyBhZ2dyZWdhdGlvbi5jb25maWcgOiB7fVwiIChvbkZpbHRlclNlbGVjdGVkKT1cIkZpbHRlclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2N0cy1keW5hbWljLWZpbHRlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwicm93IHdyYXBwZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwid3JhcHBlci1vdmVybGF5XCIgKm5nSWY9XCJsb2FkaW5nXCI+PC9kaXY+XHJcbiAgXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21SZXNwb25zaXZlU3R5bGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1maWx0ZXIgcHgtMyBkLWZsZXggZC14bC1ub25lXCIgKm5nSWY9XCJvcGVuRmlsdGVyXCI+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiIGNsYXNzPVwic2VhcmNoLWZvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCI+XHJcbiAgICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCIgW21hdEF1dG9jb21wbGV0ZV09XCJtYXRBdXRvY29tcGxldGUxXCIgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2guc2VhcmNoJyB8IHRyYW5zbGF0ZVwiIC8+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZVxyXG4gICAgICBjbGFzcz1cIlxyXG4gICAgICAgICBhdXRvLWNvbXBsZXRlLWluZXItd3JhcHBlclxyXG4gICAgICAgICAgYXV0by1jb21wbGV0ZS13cmFwcGVyXHJcbiAgICAgIFwiXHJcbiAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxyXG4gICAgICAjbWF0QXV0b2NvbXBsZXRlMT1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgY2xhc3M9XCJuby10ZXh0XCJcclxuICAgICAgICAgICpuZ0lmPVwicmVzdWx0U2V0cyAmJiAhcmVzdWx0U2V0cy5sZW5ndGhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgICB7eydub19yZXN1bHRfZm91bmQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHRTZXQgb2YgcmVzdWx0U2V0c1wiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gIChjbGljayk9XCJzZXRPcHRpb25WYWx1ZShyZXN1bHRTZXQubGFiZWwpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24taW5lci10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IHJlc3VsdFNldC5sYWJlbCB9fTwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbiA+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbnM7IGVsc2UgcHJvZ3Jlc3NTcGlubmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9ucy5sZW5ndGg7IGVsc2Ugbm9BZ2dyZWdhdGlvbnNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb24uYnVja2V0cy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZpbHRlciBbZW50aXR5VHlwZV09XCJlbnRpdHlUeXBlXCIgW2ZpbHRlcnNdPVwiYWdncmVnYXRpb24uYnVja2V0c1wiIFtpZF09XCJhZ2dyZWdhdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uc109XCJhZ2dyZWdhdGlvbi5zZWxlY3Rpb25cIiBbdGl0bGVdPVwiYWdncmVnYXRpb24uZmllbGRcIiBbcHJlZml4XT1cIidzZWFyY2gnXCIgW2RlcGFydG1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6dG8nIHx8XHJcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6ZnJvbSdcclxuICAgICAgICAgICAgICBcIiBbY29tcG9uZW50VHlwZV09XCJhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlID8gYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA6ICdkZWZ1bHQnXCJcclxuICAgICAgICAgICAgICAgIFtjdXN0b21QYWdlUHJvdmlkZXJdPVwiYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyID8gYWdncmVnYXRpb24uY3VzdG9tUGFnZVByb3ZpZGVyIDogJydcIlxyXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhZ2dyZWdhdGlvbi5jb25maWcgPyBhZ2dyZWdhdGlvbi5jb25maWcgOiB7fVwiIChvbkZpbHRlclNlbGVjdGVkKT1cIkZpbHRlclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2N0cy1keW5hbWljLWZpbHRlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC14bC0zIHNlYXJjaC1zaWRlTWVudSBkLW5vbmUgZC14bC1ibG9ja1wiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCIgY2xhc3M9XCJzZWFyY2gtZm9ybVwiIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCIgW21hdEF1dG9jb21wbGV0ZV09XCJtYXRBdXRvY29tcGxldGUyXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaC5zZWFyY2gnIHwgdHJhbnNsYXRlXCIgLz5cclxuICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlIGNsYXNzPVwiXHJcbiAgICAgICBhdXRvLWNvbXBsZXRlLWluZXItd3JhcHBlclxyXG4gICAgICAgIGF1dG8tY29tcGxldGUtd3JhcHBlclxyXG4gICAgXCIgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiICNtYXRBdXRvY29tcGxldGUyPVwibWF0QXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwibm8tdGV4dFwiICpuZ0lmPVwicmVzdWx0U2V0cyAmJiAhcmVzdWx0U2V0cy5sZW5ndGhcIj5cclxuICAgICAgICB7eydub19yZXN1bHRfZm91bmQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHRTZXQgb2YgcmVzdWx0U2V0c1wiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIChjbGljayk9XCJzZXRPcHRpb25WYWx1ZShyZXN1bHRTZXQubGFiZWwpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1pbmVyLXRleHRcIj57eyByZXN1bHRTZXQubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbnM7IGVsc2UgcHJvZ3Jlc3NTcGlubmVyXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3JlZ2F0aW9uIG9mIGFnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbi5idWNrZXRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgIDxjdHMtZHluYW1pYy1maWx0ZXIgW2VudGl0eVR5cGVdPVwiZW50aXR5VHlwZVwiIFtmaWx0ZXJzXT1cImFnZ3JlZ2F0aW9uLmJ1Y2tldHNcIiBbaWRdPVwiYWdncmVnYXRpb24uaWRcIlxyXG4gICAgICAgICAgICBbc2VsZWN0aW9uc109XCJhZ2dyZWdhdGlvbi5zZWxlY3Rpb25cIiBbdGl0bGVdPVwiYWdncmVnYXRpb24uZmllbGRcIiBbcHJlZml4XT1cIidzZWFyY2gnXCIgW2RlcGFydG1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOnRvJyB8fFxyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpZWxkID09PSAnY29ycjpmcm9tJ1xyXG4gICAgICAgICAgICBcIiBbY29tcG9uZW50VHlwZV09XCJhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlID8gYWdncmVnYXRpb24uY29tcG9uZW50VHlwZSA6ICdkZWZ1bHQnXCJcclxuICAgICAgICAgICAgW2N1c3RvbVBhZ2VQcm92aWRlcl09XCJhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgPyBhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgOiAnJ1wiXHJcbiAgICAgICAgICAgIFtjb25maWddPVwiYWdncmVnYXRpb24uY29uZmlnID8gYWdncmVnYXRpb24uY29uZmlnIDoge31cIiAob25GaWx0ZXJTZWxlY3RlZCk9XCJGaWx0ZXJTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L2N0cy1keW5hbWljLWZpbHRlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wteGwtOVwiPlxyXG4gICAgPGFwcC1jYXJkPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICA8aDM+XHJcbiAgICAgICAgICB7eyBcInNlYXJjaC5oZWFkZXJcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9keVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhZ2dyZWdhdGlvbnNcIiBjbGFzcz1cInRhYmxlLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtY291bnRcIj5cclxuICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBcInNlYXJjaC5cIiArIFwicmVzdWx0c051bWJlclwiXHJcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgdmFsdWU6IHRvdGFsUmVjb3JkcyA/IHRvdGFsUmVjb3JkcyA6IDAgfVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJkLWZsZXgganVzdGlmeS1iZXR3ZWVuXCIgW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCIgKG5nU3VibWl0KT1cInN1Ym1pdEZvcm0oKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VUb2dnbGVGaWx0ZXJzICYmICFjdXN0b21SZXNwb25zaXZlU3R5bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWZvcm0gY3VzdG9tLXJlc3BvbnNpdmUtc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGV4dFwiIFttYXRBdXRvY29tcGxldGVdPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaC5zZWFyY2gnIHwgdHJhbnNsYXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiXHJcbiAgICAgICAgICAgICAgICAgICBhdXRvLWNvbXBsZXRlLWluZXItd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgICAgIGF1dG8tY29tcGxldGUtd3JhcHBlclxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgI21hdEF1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuby10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3VsdFNldHMgJiYgIXJlc3VsdFNldHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7e25vX3Jlc3VsdF9mb3VuZCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXN1bHRTZXQgb2YgcmVzdWx0U2V0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICAoY2xpY2spPVwic2V0T3B0aW9uVmFsdWUocmVzdWx0U2V0LmxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb24taW5lci10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyByZXN1bHRTZXQubGFiZWwgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbiA+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgKm5nSWY9XCJ1c2VUb2dnbGVGaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtIGNsYXNzPVwibXgtMiBzbWFsbC1mb250XCIgW2xhYmVsXT1cIidzZWFyY2guUEVSU09OQUxfRklMRVMnXCJcclxuICAgICAgICAgICAgICAgICAgKG9uVG9nZ2xlKT1cInN1Ym1pdEZvcm0oKVwiIGZvcm1Db250cm9sTmFtZT1cInBlcnNvbmFsRmlsZXNcIj5cclxuICAgICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtPlxyXG4gICAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbSBjbGFzcz1cIm14LTIgc21hbGwtZm9udFwiIFtsYWJlbF09XCInc2VhcmNoLkRFUF9GSUxFUydcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBGaWxlc1wiIChvblRvZ2dsZSk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtPlxyXG4gICAgICAgICAgICAgICAgPGN0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbSBjbGFzcz1cIm14LTIgc21hbGwtZm9udFwiIFtsYWJlbF09XCInc2VhcmNoLldPUktTUEFDRV9GSUxFUydcIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwid29ya1NwYWNlRmlsZXNcIiAob25Ub2dnbGUpPVwic3VibWl0Rm9ybSgpXCI+XHJcbiAgICAgICAgICAgICAgPC9jdHMtZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxjdHMtZHluYW1pYy10YWJsZSAjZHluYW1pY1RhYmxlIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcmVzcG9uc2l2ZUNvbHVtbnNdPVwicmVzcG9uc2l2ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgW3BhZ2VQcm92aWRlcl09XCJwYWdlUHJvdmlkZXJcIiBbcXVpY2tGaWx0ZXJdPVwiZmlsdGVyXCIgW2VudGl0eVR5cGVdPVwiZW50aXR5VHlwZVwiIFtmaWVsZHNdPVwiZmllbGRzXCJcclxuICAgICAgICAgIFtxdWVyeVBhcmFtXT1cInF1ZXJ5UGFyYW1zXCIgW2hlYWRlcnNdPVwiaGVhZGVyc1wiIFtwcmVmaXhdPVwicHJlZml4XCIgW3NvcnRpbmdCeV09XCJzb3J0aW5nQnlcIiBbaXNTZWFyY2hQYWdlXT1cInRydWVcIlxyXG4gICAgICAgICAgKG9uUm93U2VsZWN0ZWQpPVwib25Sb3dTZWxlY3RlZCgkZXZlbnQpXCIgKGFjdGlvbk9uUm93KT1cInBlcmZvcm1BY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAob25HZXR0aW5nRGF0YSk9XCJnZXRUYWJsZURhdGEoJGV2ZW50KVwiPjwvY3RzLWR5bmFtaWMtdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9hcHAtY2FyZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNwcm9ncmVzc1NwaW5uZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtc3Bpbm5lclwiPlxyXG4gICAgICA8bWF0LXNwaW5uZXIgY29sb3I9XCJ3YXJuXCIgW2RpYW1ldGVyXT1cIjI1XCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPG5nLXRlbXBsYXRlICNub0FnZ3JlZ2F0aW9ucz5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zcGlubmVyXCI+XHJcbiAgICAgIHt7IFwic2VhcmNoLm5vQWdncmVnYXRpb25zXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PiJdfQ==
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvY29tcG9uZW50cy9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEVBR2pCLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLeEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFlSCxNQUFNLE9BQU8sc0JBQXNCO0lBMERsQyxZQUNTLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxnQkFBbUMsRUFDbkMsWUFBMEIsRUFDMUIsa0JBQXNDLEVBQ2YsV0FBVyxFQUNuQyxr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M0QsVUFBVSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUN6QyxDQUFDO3FCQUNGO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBaUVFLE1BQU07MkJBQUMsYUFBYTs2RUE3REssWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRU4sYUFBYTtzQkFEWixLQUFLO2dCQU9JLFdBQVc7c0JBQXBCLE1BQU07Z0JBYVAsWUFBWTtzQkFEWCxLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE9uSW5pdCxcclxuXHRPdXRwdXQsXHJcblx0Vmlld0VuY2Fwc3VsYXRpb24sXHJcblx0T25DaGFuZ2VzLFxyXG5cdFNpbXBsZUNoYW5nZXMsXHJcblx0SW5qZWN0LFxyXG5cdFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgYW5pbWF0ZSwgQVVUT19TVFlMRSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEV2YWx1YXRvcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Blcm1pc3Npb25zL2V2YWx1YXRvcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZ2xvYmFsLWFkbWluLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJsZXMnO1xyXG5cclxuLyoqXHJcbiAqIER5bmFtaWMgc2VhcmNoIGNvbXBvbmVudCB1c2VzIFtEeW5hbWljIFRhYmxlXXtAbGluayBEeW5hbWljVGFibGVDb21wb25lbnR9ICYgW0R5bmFtaWMgRmlsdGVyXXtAbGluayBEeW5hbWljRmlsdGVyQ29tcG9uZW50fSBpbnRlcm5hbGx5LFxyXG4gKiBhbmQgdXRpbGl6ZXMgaXRzIGlucHV0cyB0byBwZXJmb3JtIGFkdmFuY2VkIHNlYXJjaCBhbmQgZmlsdGVyaW5nIG9uIGFueSBudXhlbyBQcm92aWRlclxyXG4gKiBAdGl0bGVcclxuICogRHluYW1pYyBTZWFyY2hcclxuICpcclxuICogQGV4YW1wbGVcclxuICogPGN0cy1keW5hbWljLXNlYXJjaFxyXG4gKiAgIFtwYWdlUHJvdmlkZXJdPVwiJ3BhZ2VQcm92aWRlck5hbWUnXCJcclxuICogICBbY29sdW1uc109XCJjb2x1bW5zQXJyYXlcIlxyXG4gKiAgIFtyZXNwb25zaXZlQ29sdW1uc109XCJyZXNwb25zaXZlQ29sdW1uc0FycmF5XCJcclxuICogICBbZW50aXR5VHlwZV09XCInZG9jdW1lbnRzJ1wiXHJcbiAqICAgW3ByZWZpeF09XCJwcmVmaXhcIlxyXG4gKiAgIFtmaWVsZHNdPVwiZmllbGRzXCJcclxuICogICBbaGVhZGVyc109XCJoZWFkZXJzXCJcclxuICogICBbc29ydGluZ0J5XT1cInNvcnRpbmdCeVwiXHJcbiAqICAgW3BhZ2VTaXplXT1cIlBhZ2VTaXplXCJcclxuKiAgICBbY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXT1cImZhbHNlIG9yIHRydWVcIlxyXG4gICAgIFtvcGVuQ2xvc2VGaWx0ZXJGcm9tT3V0c2lkZV09XCJwYXNzIEZpbHRlciBzdGF0ZSBmcm9tIHBhcmVudCBjb21wb25lbnRcIlxyXG4gICAgIFt0aGVtZV0gPSBcInRvICBzZXQgYmFja2dyb3VuZCBkZXBlbmVkIG9uIHRoZW1lXCJcclxuICogPlxyXG4gKiA8L2N0cy1keW5hbWljLXNlYXJjaD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY3RzLWR5bmFtaWMtc2VhcmNoJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2R5bmFtaWMtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0YW5pbWF0aW9uczogW1xyXG5cdFx0dHJpZ2dlcignY29sbGFwc2UnLCBbXHJcblx0XHRcdHN0YXRlKCdmYWxzZScsIHN0eWxlKHsgaGVpZ2h0OiBBVVRPX1NUWUxFLCB2aXNpYmlsaXR5OiBBVVRPX1NUWUxFIH0pKSxcclxuXHRcdFx0c3RhdGUoJ3RydWUnLCBzdHlsZSh7IGhlaWdodDogJzAnLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcblx0XHRcdHRyYW5zaXRpb24oJ2ZhbHNlID0+IHRydWUnLCBhbmltYXRlKDMwMCkpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKCd0cnVlID0+IGZhbHNlJywgYW5pbWF0ZSgzMDApKVxyXG5cdFx0XSlcclxuXHRdLFxyXG5cdGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblx0dGV4dDogc3RyaW5nO1xyXG5cdGFnZ3JlZ2F0aW9ucztcclxuXHRAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnKSBkeW5hbWljVGFibGU6IER5bmFtaWNUYWJsZUNvbXBvbmVudDtcclxuXHQvKiogQXJyYXkgb2YgY29sdW1ucyAqL1xyXG5cdEBJbnB1dCgpIGNvbHVtbnM7XHJcblx0LyoqIEFycmF5IG9mIGNvbHVtbnMgb24gc21hbGxlciBzY3JlZW5zICovXHJcblx0QElucHV0KCkgcmVzcG9uc2l2ZUNvbHVtbnM/O1xyXG5cdC8qKiBEZWZpbmVzIHRoZSBwYWdlIGluIHdoaWNoIHRhYmxlIGlzIGJlaW5nIHVzZWQgKi9cclxuXHRASW5wdXQoKSBlbnRpdHlUeXBlOiBzdHJpbmc7XHJcblx0LyoqIFRyYW5zbGF0aW9ucyBwcmVmaXggKi9cclxuXHRASW5wdXQoKSBwcmVmaXggPSAnJztcclxuXHQvKiogSGVhZGVycyB0byBiZSBzZW50IHdpdGggQVBJIFJlcXVlc3QgKi9cclxuXHRASW5wdXQoKSBoZWFkZXJzO1xyXG5cdC8qKiBGaWVsZHMga2V5bWFwIHRvIGJlIG1hcHBlZCBpbiB0aGUgYWRhcHRlciAqL1xyXG5cdEBJbnB1dCgpIGZpZWxkcztcclxuXHQvKiogUGFnZSBQcm92aWRlciBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlIGRhdGEgKi9cclxuXHRASW5wdXQoKSBwYWdlUHJvdmlkZXI7XHJcblx0LyoqIENvbnRyb2xzIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpbiB0YWJsZSAqL1xyXG5cdEBJbnB1dCgpIHBhZ2VTaXplO1xyXG5cdC8qKiBTb3J0aW5nIGNvbHVtbiAqL1xyXG5cdEBJbnB1dCgpIHNvcnRpbmdCeT8gPSB7fTtcclxuXHRASW5wdXQoKSBmdWxsVGV4dFBhcmFtTmFtZSA9ICdzeXN0ZW1fZnVsbHRleHQnO1xyXG5cdEBJbnB1dCgpIGZpbHRlcjsgLy8gdXNlZCB0byBwYXNzIHBhcmFtcyBmcm9tIG91dHNpZGUgdG8gcGFyYW1zIG9mIGR5bmFtaWMgdGFibGUgZGlyZWN0bHlcclxuXHRASW5wdXQoKSBoaWdsaWdodFVucmVhZCA9IGZhbHNlOyAvLyB1c2VkIHRvIGhpZ2xpZ2h0IHVucmVhZGVkIGl0ZW1zIHdpdGggZGlmZiBiYWNrZ3JvdW5kXHJcblx0QElucHV0KCkgc3VnZ2VzdGVyQXBpOyAvLyBhcGkgdG8gYmUgdXNlZCBpbiB0aGUgc3VnZ2VzdGVyIGlucHV0IGlmIHNlbnQgd2lsbCB1c2VkIGl0IGlmIG5vdCB3aWxsIHVzZSB0aGUgZGVmdWx0IG9uY2VcclxuXHRASW5wdXQoKVxyXG5cdG9uUm93U2VsZWN0ZWQgPSAocm93KSA9PiB7XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IHZpZXdlcjogWyd2aWV3Jywgcm93Wyd1aWQnXV0gfSB9XSwge1xyXG5cdFx0XHRxdWVyeVBhcmFtczogeyBsb2NhdGlvbjogdGhpcy5yb3V0ZXIudXJsIH1cclxuXHRcdH0pO1xyXG5cdH07XHJcblx0LyoqIHVzZWQgdG8gZW1pdCBhbnkgYWN0aW9ucyB0byBvdXRzaWRlICovXHJcblx0QE91dHB1dCgpIGFjdGlvbk9uUm93ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdHF1ZXJ5UGFyYW1zID0ge307XHJcblx0ZmlsdGVycztcclxuXHRzZWFyY2hGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcblx0XHR0ZXh0OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcblx0XHRwZXJzb25hbEZpbGVzOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG5cdFx0ZGVwRmlsZXM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXHJcblx0XHR3b3JrU3BhY2VGaWxlczogbmV3IEZvcm1Db250cm9sKGZhbHNlKVxyXG5cdH0pO1xyXG5cdGxvYWRpbmcgPSBmYWxzZTtcclxuXHR0b3RhbFJlY29yZHM7XHJcblx0b3BlbkZpbHRlcjogYm9vbGVhbjtcclxuXHRASW5wdXQoKVxyXG5cdHNvcnRpbmdBcnJheTtcclxuXHRASW5wdXQoKSBjdXN0b21SZXNwb25zaXZlU3R5bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRASW5wdXQoKSBvcGVuQ2xvc2VGaWx0ZXJGcm9tT3V0c2lkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIHRoZW1lOiBhbnk7XHJcblx0dXNlVG9nZ2xlRmlsdGVycztcclxuXHJcblx0cXVpY2tGaWx0ZXJzID0gJyc7XHJcblx0c2F2ZWRQZXJzRmlsdGVyVmFsdWUgPSBudWxsO1xyXG5cdHNhdmVkRGVwRmlsdGVyVmFsdWUgPSBudWxsO1xyXG5cdHNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUgPSBudWxsO1xyXG5cclxuXHRyZXN1bHRTZXRzID0gW107XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcblx0XHRwcml2YXRlIGV2YWx1YXRvclNlcnZpY2U6IEV2YWx1YXRvcnNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBudXhlb1NlcnZpY2U6IE51eGVvU2VydmljZSxcclxuXHRcdHByaXZhdGUgZ2xvYmFsQWRtaW5TZXJ2aWNlOiBHbG9iYWxBZG1pblNlcnZpY2UsXHJcblx0XHRASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcblx0XHRwdWJsaWMgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXJcclxuXHQpIHtcclxuXHRcdHRoaXMuZXZhbHVhdG9yU2VydmljZS5ldmFsdWF0ZVJ1bGUoJ2VuYWJsZVNlYXJjaFRvZ2dsZXMnLCB7fSkudGhlbigocmVzKSA9PiB7XHJcblx0XHRcdHRoaXMudXNlVG9nZ2xlRmlsdGVycyA9IHJlcztcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0aWYgKGNoYW5nZXMub3BlbkNsb3NlRmlsdGVyRnJvbU91dHNpZGUpIHtcclxuXHRcdFx0dGhpcy5vcGVuRmlsdGVyID0gY2hhbmdlcy5vcGVuQ2xvc2VGaWx0ZXJGcm9tT3V0c2lkZS5jdXJyZW50VmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMudXBkYXRlUXVlcnlQYXJhbXModGhpcy5jb25zdHJ1Y3RQYXJhbXNGdW5jdGlvbih0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKSk7XHJcblx0XHR0aGlzLnNlYXJjaElucHV0UG9wdWxhdGUoKTtcclxuXHRcdHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdCh0aGlzLnRleHQgIT09IHBhcmFtc1snc2VhcmNoX3F1ZXJ5J10gJiYgcGFyYW1zWydzZWFyY2hfcXVlcnknXSkgfHxcclxuXHRcdFx0XHQocGFyYW1zWydzZWFyY2hfcXVlcnknXT8ubGVuZ3RoID09IDAgJiYgdGhpcy50ZXh0ICE9PSBwYXJhbXNbJ3NlYXJjaF9xdWVyeSddKSB8fFxyXG5cdFx0XHRcdCh0aGlzLnVzZVRvZ2dsZUZpbHRlcnMgJiYgdGhpcy5xdWlja0ZpbHRlcnMgIT09IHBhcmFtc1sncXVpY2tGaWx0ZXJzJ10pXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlUXVlcnlQYXJhbXModGhpcy5jb25zdHJ1Y3RQYXJhbXNGdW5jdGlvbihwYXJhbXMpKTtcclxuXHRcdFx0XHR0aGlzLnNlYXJjaElucHV0UG9wdWxhdGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmJyZWFrcG9pbnQoKTtcclxuXHJcblx0XHR0aGlzLnNlYXJjaEZvcm1cclxuXHRcdFx0LmdldCgndGV4dCcpXHJcblx0XHRcdC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcclxuXHRcdFx0LnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zZWFyY2gocmVzKS5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucmVzdWx0U2V0cyA9IHJlc3VsdHM7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0UGFyYW1zRnVuY3Rpb24ocGFyYW1zKSB7XHJcblx0XHRsZXQgY29udHJ1Y3RlZFBhcm1zID0ge307XHJcblx0XHR0aGlzLnRleHQgPSBwYXJhbXNbJ3NlYXJjaF9xdWVyeSddO1xyXG5cdFx0aWYgKHRoaXMudGV4dCAmJiB0aGlzLnRleHQudHJpbSgpKSB7XHJcblx0XHRcdGlmICh0aGlzLnVzZVRvZ2dsZUZpbHRlcnMpIHtcclxuXHRcdFx0XHRpZiAocGFyYW1zWydxdWlja0ZpbHRlcnMnXSkge1xyXG5cdFx0XHRcdFx0dGhpcy5xdWlja0ZpbHRlcnMgPSBwYXJhbXNbJ3F1aWNrRmlsdGVycyddO1xyXG5cdFx0XHRcdFx0Y29udHJ1Y3RlZFBhcm1zID0geyBbdGhpcy5mdWxsVGV4dFBhcmFtTmFtZV06IHRoaXMudGV4dCArICcqJywgcXVpY2tGaWx0ZXJzOiB0aGlzLnF1aWNrRmlsdGVycyB9O1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnF1aWNrRmlsdGVycyA9ICcnO1xyXG5cdFx0XHRcdFx0Y29udHJ1Y3RlZFBhcm1zID0geyBbdGhpcy5mdWxsVGV4dFBhcmFtTmFtZV06IHRoaXMudGV4dCArICcqJywgcXVpY2tGaWx0ZXJzOiAnJyB9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb250cnVjdGVkUGFybXMgPSB7IFt0aGlzLmZ1bGxUZXh0UGFyYW1OYW1lXTogdGhpcy50ZXh0ICsgJyonIH07XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnRydWN0ZWRQYXJtcyA9IHsgW3RoaXMuZnVsbFRleHRQYXJhbU5hbWVdOiBudWxsIH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbnRydWN0ZWRQYXJtcztcclxuXHR9XHJcblx0dXBkYXRlUXVlcnlQYXJhbXMobmV3UXVlcnlwYXJhbXM6IG9iamVjdCkge1xyXG5cdFx0dGhpcy5xdWVyeVBhcmFtcyA9IHtcclxuXHRcdFx0Li4udGhpcy5xdWVyeVBhcmFtcyxcclxuXHRcdFx0Li4ubmV3UXVlcnlwYXJhbXNcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRzZWFyY2hJbnB1dFBvcHVsYXRlKCkge1xyXG5cdFx0aWYgKHRoaXMudXNlVG9nZ2xlRmlsdGVycykge1xyXG5cdFx0XHR0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcblx0XHRcdFx0dGV4dDogdGhpcy50ZXh0LFxyXG5cdFx0XHRcdHBlcnNvbmFsRmlsZXM6XHJcblx0XHRcdFx0XHR0aGlzLnF1aWNrRmlsdGVycyA9PT0gJ3BlcnNvbmFsRmlsdGVyJ1xyXG5cdFx0XHRcdFx0XHQ/IHRydWVcclxuXHRcdFx0XHRcdFx0OiB0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICE9PSBudWxsXHJcblx0XHRcdFx0XHRcdFx0PyB0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlXHJcblx0XHRcdFx0XHRcdFx0OiBmYWxzZSxcclxuXHRcdFx0XHRkZXBGaWxlczpcclxuXHRcdFx0XHRcdHRoaXMucXVpY2tGaWx0ZXJzID09PSAnZGVwYXJ0bWVudEZpbHRlcidcclxuXHRcdFx0XHRcdFx0PyB0cnVlXHJcblx0XHRcdFx0XHRcdDogdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICE9PSBudWxsXHJcblx0XHRcdFx0XHRcdFx0PyB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWVcclxuXHRcdFx0XHRcdFx0XHQ6IGZhbHNlLFxyXG5cdFx0XHRcdHdvcmtTcGFjZUZpbGVzOlxyXG5cdFx0XHRcdFx0dGhpcy5xdWlja0ZpbHRlcnMgPT09ICdkZXBhcnRtZW50V29ya1NwYWNlRmlsdGVyJ1xyXG5cdFx0XHRcdFx0XHQ/IHRydWVcclxuXHRcdFx0XHRcdFx0OiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUgIT09IG51bGxcclxuXHRcdFx0XHRcdFx0XHQ/IHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZVxyXG5cdFx0XHRcdFx0XHRcdDogZmFsc2VcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcblx0XHRcdFx0dGV4dDogdGhpcy50ZXh0XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0RmlsdGVyU2VsZWN0ZWQodmFsOiBhbnkpIHtcclxuXHRcdHRoaXMubG9hZGluZyA9IHRydWU7XHJcblx0XHR0aGlzLmZpbHRlcnMgPSB7IC4uLnRoaXMuZmlsdGVycywgLi4udmFsLmZpbHRlciB9OyAvL3N0b3JlIGZpbHRlcnNcclxuXHRcdHRoaXMudXBkYXRlUXVlcnlQYXJhbXModGhpcy5maWx0ZXJzKTtcclxuXHR9XHJcblxyXG5cdHBhZ2luYXRpb25DaGFuZ2UoZXZlbnQpIHt9XHJcblxyXG5cdGdldFRhYmxlRGF0YShkYXRhKSB7XHJcblx0XHR0aGlzLmFnZ3JlZ2F0aW9ucyA9IE9iamVjdC5lbnRyaWVzKGRhdGEuYWdncmVnYXRpb25zIHx8IHt9KS5tYXAoKGl0ZW0pID0+IHtcclxuXHRcdFx0cmV0dXJuIGl0ZW1bMV07XHJcblx0XHR9KTtcclxuXHRcdC8vIHRoaXMuYWdncmVnYXRpb25zID0gdGhpcy5hZ2dyZWdhdGlvbnMuZmlsdGVyKChpdGVtKSA9PlxyXG5cdFx0Ly8gICB0aGlzLnNvcnRpbmdBcnJheS5pbmNsdWRlcyhpdGVtLmlkKVxyXG5cdFx0Ly8gKTtcclxuXHRcdGxldCB1cGRhdGVkQWdncmVnYXRpb24gPSBbXTtcclxuXHRcdHRoaXMuYWdncmVnYXRpb25zLm1hcCgoYWdncmVnKSA9PiB7XHJcblx0XHRcdHRoaXMuc29ydGluZ0FycmF5Lm1hcCgoc29ydFR5cGUpID0+IHtcclxuXHRcdFx0XHRpZiAoc29ydFR5cGUuaWQgPT09IGFnZ3JlZy5pZCkge1xyXG5cdFx0XHRcdFx0YWdncmVnWydjb21wb25lbnRUeXBlJ10gPSBzb3J0VHlwZS5jb21wb2VuZW50VHlwZTtcclxuXHRcdFx0XHRcdC8vIGluIGNhc2Ugb2YgY3VzdG9tIGNvbXBvbmVudCBuZWVkIHRvIGNhbGwgcGFnZSBwcm92aWRlciB0byBnZXQgZGF0YVxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRzb3J0VHlwZS5jb21wb2VuZW50VHlwZSA9PT0gJ2N1c3RvbS1wcCcgfHxcclxuXHRcdFx0XHRcdFx0c29ydFR5cGUuY29tcG9lbmVudFR5cGUgPT09ICdjdXN0b20tZG9jdW1lbnQnIHx8XHJcblx0XHRcdFx0XHRcdHNvcnRUeXBlLmNvbXBvZW5lbnRUeXBlID09PSAnY3VzdG9tLWRlcGFydG1lbnQnXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0KGFnZ3JlZ1snY3VzdG9tUGFnZVByb3ZpZGVyJ10gPSBzb3J0VHlwZS5wYWdlUHJvdmlkZXIpLCAoYWdncmVnWydjb25maWcnXSA9IHNvcnRUeXBlLmNvbmZpZyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR1cGRhdGVkQWdncmVnYXRpb24ucHVzaChhZ2dyZWcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWdncmVnYXRpb25zID0gXy5zb3J0QnkodXBkYXRlZEFnZ3JlZ2F0aW9uLCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRsZXQgaSA9IC0xO1xyXG5cdFx0XHR0aGlzLnNvcnRpbmdBcnJheS5tYXAoKHNvcnRUeXBlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGlmIChzb3J0VHlwZS5pZCA9PT0gaXRlbS5pZCkge1xyXG5cdFx0XHRcdFx0aSA9IGluZGV4O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdHJldHVybiBpO1xyXG5cdFx0fSk7XHJcblx0XHRjb25zb2xlLmxvZygnYWdncmVnYXRpb25zJywgdGhpcy5hZ2dyZWdhdGlvbnMpO1xyXG5cdFx0dGhpcy50b3RhbFJlY29yZHMgPSBkYXRhLnRvdGFsU2l6ZTtcclxuXHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0c3VibWl0Rm9ybSgpIHtcclxuXHRcdGxldCBwYXJhbXMgPSB7fTtcclxuXHRcdGlmICh0aGlzLnVzZVRvZ2dsZUZpbHRlcnMpIHtcclxuXHRcdFx0cGFyYW1zID0ge1xyXG5cdFx0XHRcdHNlYXJjaF9xdWVyeTogdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLnRleHQudmFsdWUsXHJcblx0XHRcdFx0cXVpY2tGaWx0ZXJzOiB0aGlzLmdldFRvZ2dsZUZpbHRlcnMoKVxyXG5cdFx0XHR9O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cGFyYW1zID0ge1xyXG5cdFx0XHRcdHNlYXJjaF9xdWVyeTogdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzLnRleHQudmFsdWVcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLiddLCB7XHJcblx0XHRcdHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcblx0XHRcdHF1ZXJ5UGFyYW1zOiBwYXJhbXNcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0VG9nZ2xlRmlsdGVycygpIHtcclxuXHRcdHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy5kZXBGaWxlcy52YWx1ZTtcclxuXHRcdHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uY29udHJvbHMucGVyc29uYWxGaWxlcy52YWx1ZTtcclxuXHRcdHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS5jb250cm9scy53b3JrU3BhY2VGaWxlcy52YWx1ZTtcclxuXHRcdGlmIChcclxuXHRcdFx0KHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkgfHxcclxuXHRcdFx0KCF0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmICF0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSlcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuc2F2ZWRQZXJzRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKSB7XHJcblx0XHRcdHJldHVybiAncGVyc29uYWxGaWx0ZXInO1xyXG5cdFx0fSBlbHNlIGlmICghdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkRGVwRmlsdGVyVmFsdWUgJiYgIXRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gJ2RlcGFydG1lbnRGaWx0ZXInO1xyXG5cdFx0fSBlbHNlIGlmICghdGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gJ2RlcGFydG1lbnRXb3JrU3BhY2VGaWx0ZXInO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZHdvcmtTcGFjZUZpbHRlclZhbHVlKSB7XHJcblx0XHRcdHJldHVybiAnZGVwYXJ0bWVudFBlcnNvbmFsRmlsdGVyJztcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5zYXZlZFBlcnNGaWx0ZXJWYWx1ZSAmJiAhdGhpcy5zYXZlZERlcEZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWR3b3JrU3BhY2VGaWx0ZXJWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gJ3BlcnNvbmFsRGVwYXJ0bWVudFdvcmtTcGFjZUZpbHRlcic7XHJcblx0XHR9IGVsc2UgaWYgKCF0aGlzLnNhdmVkUGVyc0ZpbHRlclZhbHVlICYmIHRoaXMuc2F2ZWREZXBGaWx0ZXJWYWx1ZSAmJiB0aGlzLnNhdmVkd29ya1NwYWNlRmlsdGVyVmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuICdkZXB0RGVwYXRtZW50V29ya1NwYWNlRmlsdGVyJztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHNldE9wdGlvblZhbHVlKHNlYXJjaGVkVGV4dCkge1xyXG5cdFx0dGhpcy5zZWFyY2hGb3JtLmdldCgndGV4dCcpLnNldFZhbHVlKHNlYXJjaGVkVGV4dCk7XHJcblx0XHR0aGlzLnN1Ym1pdEZvcm0oKTtcclxuXHR9XHJcblx0b25PcGVuRmlsdGVyKCkge1xyXG5cdFx0dGhpcy5vcGVuRmlsdGVyID0gIXRoaXMub3BlbkZpbHRlcjtcclxuXHR9XHJcblxyXG5cdGJyZWFrcG9pbnQoKSB7XHJcblx0XHR0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFsnKG1pbi13aWR0aDogMTIwMHB4KSddKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0Lm1hdGNoZXMpIHtcclxuXHRcdFx0XHR0aGlzLm9wZW5GaWx0ZXIgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwZXJmb3JtQWN0aW9uKGFjdGlvbikge1xyXG5cdFx0dGhpcy5hY3Rpb25PblJvdy5lbWl0KGFjdGlvbik7XHJcblx0fVxyXG5cclxuXHRzZWFyY2godGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdGxldCBwYXJhbXMgPSB7XHJcblx0XHRcdHNlYXJjaFRlcm06IHRlcm1cclxuXHRcdH07XHJcblx0XHRpZiAodGhpcy5nbG9iYWxBZG1pblNlcnZpY2UuaXNHbG9iYWxBZG1pbikge1xyXG5cdFx0XHRwYXJhbXNbJ3BhdGgnXSA9IHRoaXMuZ2xvYmFsQWRtaW5TZXJ2aWNlLmFjdGl2ZVRlbmFudCA7XHJcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmdsb2JhbEFkbWluU2VydmljZS5pc0dsb2JhbEFkbWluICYmIHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy50ZW5hbnRJZCkge1xyXG5cdFx0XHRwYXJhbXNbJ3BhdGgnXSA9IHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcy50ZW5hbnRJZDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmcm9tKFxyXG5cdFx0XHR0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG5cdFx0XHRcdC5vcGVyYXRpb24odGhpcy5zdWdnZXN0ZXJBcGkgPyB0aGlzLnN1Z2dlc3RlckFwaSA6ICdTZWFyY2guQ3VzdG9tU3VnZ2VzdGVyc0xhdW5jaGVyJywge1xyXG5cdFx0XHRcdFx0dXJsOiBgJHt0aGlzLmVudmlyb25tZW50Lm51eGVvfSR7dGhpcy5lbnZpcm9ubWVudC5jdXN0b21BdXRvbWF0aW9ufWBcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5wYXJhbXMoe1xyXG5cdFx0XHRcdFx0Li4ucGFyYW1zXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQuY29udGV4dCh7fSlcclxuXHRcdFx0XHQuZXhlY3V0ZSgpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVJlc3BvbnNpdmVTdHlsZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtdG9vbGJhciBkLW1kLWZsZXggZC14bC1ub25lIG14LTNcIj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cIm9uT3BlbkZpbHRlcigpXCIgY2xhc3M9XCJteS1idXR0b25cIj5cclxuICAgICAgPHNwYW4+IHt7IFwiRklMVEVSXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgIDxpIGNsYXNzPVwiYmkgYmktZmlsdGVyXCIgKm5nSWY9XCIhb3BlbkZpbHRlclwiPjwvaT5cclxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS14XCIgKm5nSWY9XCJvcGVuRmlsdGVyXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8ZGl2ICpuZ0lmPVwib3BlbkZpbHRlclwiPlxyXG4gICAgICA8aSBjbGFzcz1cImJpIGJpLWNhcmV0LXVwLWZpbGwgYXJyb3ctdXBcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tUmVzcG9uc2l2ZVN0eWxlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImN1c3RvbVN0eWxlIC1tdC0xMiBweC04IGZsZXggZmxleC1jb2xcIlxyXG4gICAgW25nQ2xhc3NdPVwieydiZy1hY2NlbnQtMjAwJzogdGhlbWUgPT09ICdkZ2RhJywnYmctYWNjZW50LTEwMCc6IHRoZW1lID09PSAna3NyZWxlaWYnIHx8IHRoZW1lID09PSAnY29tcHRlY2hjbyd9XCJcclxuICAgIFtAY29sbGFwc2VdPVwiIW9wZW5GaWx0ZXJcIj5cclxuICAgIDwhLS0gPGZvcm1cclxuICAgICAgICBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIlxyXG4gICAgICAgIGNsYXNzPVwic2VhcmNoLWZvcm1cIlxyXG4gICAgICAgIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoLnNlYXJjaCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgY2xhc3M9XCJzZWFyY2gtaWNvbiBiaSBiaS1zZWFyY2hcIj48L2Rpdj5cclxuICAgICAgPC9mb3JtPiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC14LTE4IGZsZXgtcm93IG10LTUgcGItMyBvdmVyZmxvdy14LWF1dG9cIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9uczsgZWxzZSBwcm9ncmVzc1NwaW5uZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb25zLmxlbmd0aDsgZWxzZSBub0FnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWdncmVnYXRpb24gb2YgYWdncmVnYXRpb25zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbi5idWNrZXRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZmlsdGVyIFtlbnRpdHlUeXBlXT1cImVudGl0eVR5cGVcIiBbZmlsdGVyc109XCJhZ2dyZWdhdGlvbi5idWNrZXRzXCIgW2lkXT1cImFnZ3JlZ2F0aW9uLmlkXCJcclxuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25zXT1cImFnZ3JlZ2F0aW9uLnNlbGVjdGlvblwiIFt0aXRsZV09XCJhZ2dyZWdhdGlvbi5maWVsZFwiIFtwcmVmaXhdPVwiJ3NlYXJjaCdcIiBbZGVwYXJ0bWVudF09XCJcclxuICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6dG8nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOmZyb20nXHJcbiAgICAgICAgICAgICAgICAgIFwiIFtjb21wb25lbnRUeXBlXT1cImFnZ3JlZ2F0aW9uLmNvbXBvbmVudFR5cGUgPyBhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlIDogJ2RlZnVsdCdcIlxyXG4gICAgICAgICAgICAgICAgW2N1c3RvbVBhZ2VQcm92aWRlcl09XCJhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgPyBhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImFnZ3JlZ2F0aW9uLmNvbmZpZyA/IGFnZ3JlZ2F0aW9uLmNvbmZpZyA6IHt9XCIgKG9uRmlsdGVyU2VsZWN0ZWQpPVwiRmlsdGVyU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZmlsdGVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxkaXYgY2xhc3M9XCJyb3cgd3JhcHBlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ3cmFwcGVyLW92ZXJsYXlcIiAqbmdJZj1cImxvYWRpbmdcIj48L2Rpdj5cclxuICBcclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVJlc3BvbnNpdmVTdHlsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBvcHVwLWZpbHRlciBweC0zIGQtZmxleCBkLXhsLW5vbmVcIiAqbmdJZj1cIm9wZW5GaWx0ZXJcIj5cclxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCIgY2xhc3M9XCJzZWFyY2gtZm9ybVwiIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRleHRcIiBbbWF0QXV0b2NvbXBsZXRlXT1cIm1hdEF1dG9jb21wbGV0ZTFcIiBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaC5zZWFyY2gnIHwgdHJhbnNsYXRlXCIgLz5cclxuICAgICAgICA8ZGl2IChjbGljayk9XCJzdWJtaXRGb3JtKClcIiBjbGFzcz1cInNlYXJjaC1pY29uIGJpIGJpLXNlYXJjaFwiPjwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgIGNsYXNzPVwiXHJcbiAgICAgICAgIGF1dG8tY29tcGxldGUtaW5lci13cmFwcGVyXHJcbiAgICAgICAgICBhdXRvLWNvbXBsZXRlLXdyYXBwZXJcclxuICAgICAgXCJcclxuICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICNtYXRBdXRvY29tcGxldGUxPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICA+XHJcbiAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICBjbGFzcz1cIm5vLXRleHRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJyZXN1bHRTZXRzICYmICFyZXN1bHRTZXRzLmxlbmd0aFwiXHJcbiAgICAgID5cclxuICAgICAgICAgIHt7J25vX3Jlc3VsdF9mb3VuZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlc3VsdFNldCBvZiByZXN1bHRTZXRzXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAgKGNsaWNrKT1cInNldE9wdGlvblZhbHVlKHJlc3VsdFNldC5sYWJlbClcIj5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbi1pbmVyLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICA+e3sgcmVzdWx0U2V0LmxhYmVsIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uID5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9uczsgZWxzZSBwcm9ncmVzc1NwaW5uZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWdncmVnYXRpb25zLmxlbmd0aDsgZWxzZSBub0FnZ3JlZ2F0aW9uc1wiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWdncmVnYXRpb24gb2YgYWdncmVnYXRpb25zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZ2dyZWdhdGlvbi5idWNrZXRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZmlsdGVyIFtlbnRpdHlUeXBlXT1cImVudGl0eVR5cGVcIiBbZmlsdGVyc109XCJhZ2dyZWdhdGlvbi5idWNrZXRzXCIgW2lkXT1cImFnZ3JlZ2F0aW9uLmlkXCJcclxuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25zXT1cImFnZ3JlZ2F0aW9uLnNlbGVjdGlvblwiIFt0aXRsZV09XCJhZ2dyZWdhdGlvbi5maWVsZFwiIFtwcmVmaXhdPVwiJ3NlYXJjaCdcIiBbZGVwYXJ0bWVudF09XCJcclxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpZWxkID09PSAnY29ycjp0bycgfHxcclxuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpZWxkID09PSAnY29ycjpmcm9tJ1xyXG4gICAgICAgICAgICAgIFwiIFtjb21wb25lbnRUeXBlXT1cImFnZ3JlZ2F0aW9uLmNvbXBvbmVudFR5cGUgPyBhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlIDogJ2RlZnVsdCdcIlxyXG4gICAgICAgICAgICAgICAgW2N1c3RvbVBhZ2VQcm92aWRlcl09XCJhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgPyBhZ2dyZWdhdGlvbi5jdXN0b21QYWdlUHJvdmlkZXIgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImFnZ3JlZ2F0aW9uLmNvbmZpZyA/IGFnZ3JlZ2F0aW9uLmNvbmZpZyA6IHt9XCIgKG9uRmlsdGVyU2VsZWN0ZWQpPVwiRmlsdGVyU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZmlsdGVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sLXhsLTMgc2VhcmNoLXNpZGVNZW51IGQtbm9uZSBkLXhsLWJsb2NrXCI+XHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIiBjbGFzcz1cInNlYXJjaC1mb3JtXCIgKG5nU3VibWl0KT1cInN1Ym1pdEZvcm0oKVwiPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRleHRcIiBbbWF0QXV0b2NvbXBsZXRlXT1cIm1hdEF1dG9jb21wbGV0ZTJcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoLnNlYXJjaCcgfCB0cmFuc2xhdGVcIiAvPlxyXG4gICAgICA8ZGl2IChjbGljayk9XCJzdWJtaXRGb3JtKClcIiBjbGFzcz1cInNlYXJjaC1pY29uIGJpIGJpLXNlYXJjaFwiPjwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG4gICAgPG1hdC1hdXRvY29tcGxldGUgY2xhc3M9XCJcclxuICAgICAgIGF1dG8tY29tcGxldGUtaW5lci13cmFwcGVyXHJcbiAgICAgICAgYXV0by1jb21wbGV0ZS13cmFwcGVyXHJcbiAgICBcIiBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCIgI21hdEF1dG9jb21wbGV0ZTI9XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJuby10ZXh0XCIgKm5nSWY9XCJyZXN1bHRTZXRzICYmICFyZXN1bHRTZXRzLmxlbmd0aFwiPlxyXG4gICAgICAgIHt7J25vX3Jlc3VsdF9mb3VuZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlc3VsdFNldCBvZiByZXN1bHRTZXRzXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKGNsaWNrKT1cInNldE9wdGlvblZhbHVlKHJlc3VsdFNldC5sYWJlbClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLWluZXItdGV4dFwiPnt7IHJlc3VsdFNldC5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9uczsgZWxzZSBwcm9ncmVzc1NwaW5uZXJcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWdncmVnYXRpb24gb2YgYWdncmVnYXRpb25zXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0aW9uLmJ1Y2tldHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPGN0cy1keW5hbWljLWZpbHRlciBbZW50aXR5VHlwZV09XCJlbnRpdHlUeXBlXCIgW2ZpbHRlcnNdPVwiYWdncmVnYXRpb24uYnVja2V0c1wiIFtpZF09XCJhZ2dyZWdhdGlvbi5pZFwiXHJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25zXT1cImFnZ3JlZ2F0aW9uLnNlbGVjdGlvblwiIFt0aXRsZV09XCJhZ2dyZWdhdGlvbi5maWVsZFwiIFtwcmVmaXhdPVwiJ3NlYXJjaCdcIiBbZGVwYXJ0bWVudF09XCJcclxuICAgICAgICAgICAgICBhZ2dyZWdhdGlvbi5maWVsZCA9PT0gJ2NvcnI6dG8nIHx8XHJcbiAgICAgICAgICAgICAgYWdncmVnYXRpb24uZmllbGQgPT09ICdjb3JyOmZyb20nXHJcbiAgICAgICAgICAgIFwiIFtjb21wb25lbnRUeXBlXT1cImFnZ3JlZ2F0aW9uLmNvbXBvbmVudFR5cGUgPyBhZ2dyZWdhdGlvbi5jb21wb25lbnRUeXBlIDogJ2RlZnVsdCdcIlxyXG4gICAgICAgICAgICBbY3VzdG9tUGFnZVByb3ZpZGVyXT1cImFnZ3JlZ2F0aW9uLmN1c3RvbVBhZ2VQcm92aWRlciA/IGFnZ3JlZ2F0aW9uLmN1c3RvbVBhZ2VQcm92aWRlciA6ICcnXCJcclxuICAgICAgICAgICAgW2NvbmZpZ109XCJhZ2dyZWdhdGlvbi5jb25maWcgPyBhZ2dyZWdhdGlvbi5jb25maWcgOiB7fVwiIChvbkZpbHRlclNlbGVjdGVkKT1cIkZpbHRlclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZmlsdGVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC14bC05XCI+XHJcbiAgICA8YXBwLWNhcmQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgIDxoMz5cclxuICAgICAgICAgIHt7IFwic2VhcmNoLmhlYWRlclwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib2R5XCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImFnZ3JlZ2F0aW9uc1wiIGNsYXNzPVwidGFibGUtdG9vbGJhclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1jb3VudFwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgIFwic2VhcmNoLlwiICsgXCJyZXN1bHRzTnVtYmVyXCJcclxuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyB2YWx1ZTogdG90YWxSZWNvcmRzID8gdG90YWxSZWNvcmRzIDogMCB9XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWJldHdlZW5cIiBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVzZVRvZ2dsZUZpbHRlcnMgJiYgIWN1c3RvbVJlc3BvbnNpdmVTdHlsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21SZXNwb25zaXZlU3R5bGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZm9ybSBjdXN0b20tcmVzcG9uc2l2ZS1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXh0XCIgW21hdEF1dG9jb21wbGV0ZV09XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoLnNlYXJjaCcgfCB0cmFuc2xhdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzdWJtaXRGb3JtKClcIiBjbGFzcz1cInNlYXJjaC1pY29uIGJpIGJpLXNlYXJjaFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgIGF1dG8tY29tcGxldGUtaW5lci13cmFwcGVyXHJcbiAgICAgICAgICAgICAgICAgICAgYXV0by1jb21wbGV0ZS13cmFwcGVyXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAjbWF0QXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzdWx0U2V0cyAmJiAhcmVzdWx0U2V0cy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bm9fcmVzdWx0X2ZvdW5kIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlc3VsdFNldCBvZiByZXN1bHRTZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gIChjbGljayk9XCJzZXRPcHRpb25WYWx1ZShyZXN1bHRTZXQubGFiZWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbi1pbmVyLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHJlc3VsdFNldC5sYWJlbCB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uID5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiAqbmdJZj1cInVzZVRvZ2dsZUZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgIDxjdHMtZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0gY2xhc3M9XCJteC0yIHNtYWxsLWZvbnRcIiBbbGFiZWxdPVwiJ3NlYXJjaC5QRVJTT05BTF9GSUxFUydcIlxyXG4gICAgICAgICAgICAgICAgICAob25Ub2dnbGUpPVwic3VibWl0Rm9ybSgpXCIgZm9ybUNvbnRyb2xOYW1lPVwicGVyc29uYWxGaWxlc1wiPlxyXG4gICAgICAgICAgICAgICAgPC9jdHMtZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtIGNsYXNzPVwibXgtMiBzbWFsbC1mb250XCIgW2xhYmVsXT1cIidzZWFyY2guREVQX0ZJTEVTJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcEZpbGVzXCIgKG9uVG9nZ2xlKT1cInN1Ym1pdEZvcm0oKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9jdHMtZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1zbGlkZS10b2dnbGVpdGVtIGNsYXNzPVwibXgtMiBzbWFsbC1mb250XCIgW2xhYmVsXT1cIidzZWFyY2guV09SS1NQQUNFX0ZJTEVTJ1wiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3b3JrU3BhY2VGaWxlc1wiIChvblRvZ2dsZSk9XCJzdWJtaXRGb3JtKClcIj5cclxuICAgICAgICAgICAgICA8L2N0cy1keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGN0cy1keW5hbWljLXRhYmxlICNkeW5hbWljVGFibGUgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtyZXNwb25zaXZlQ29sdW1uc109XCJyZXNwb25zaXZlQ29sdW1uc1wiXHJcbiAgICAgICAgICBbcGFnZVByb3ZpZGVyXT1cInBhZ2VQcm92aWRlclwiIFtxdWlja0ZpbHRlcl09XCJmaWx0ZXJcIiBbZW50aXR5VHlwZV09XCJlbnRpdHlUeXBlXCIgW2ZpZWxkc109XCJmaWVsZHNcIlxyXG4gICAgICAgICAgW3F1ZXJ5UGFyYW1dPVwicXVlcnlQYXJhbXNcIiBbaGlnbGlnaHRVbnJlYWRdPVwiaGlnbGlnaHRVbnJlYWRcIiBbaGVhZGVyc109XCJoZWFkZXJzXCIgW3ByZWZpeF09XCJwcmVmaXhcIiBbc29ydGluZ0J5XT1cInNvcnRpbmdCeVwiIFtpc1NlYXJjaFBhZ2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAob25Sb3dTZWxlY3RlZCk9XCJvblJvd1NlbGVjdGVkKCRldmVudClcIiAoYWN0aW9uT25Sb3cpPVwicGVyZm9ybUFjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgIChvbkdldHRpbmdEYXRhKT1cImdldFRhYmxlRGF0YSgkZXZlbnQpXCI+PC9jdHMtZHluYW1pYy10YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2FwcC1jYXJkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3Byb2dyZXNzU3Bpbm5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zcGlubmVyXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cIndhcm5cIiBbZGlhbWV0ZXJdPVwiMjVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8bmctdGVtcGxhdGUgI25vQWdncmVnYXRpb25zPlxyXG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLXNwaW5uZXJcIj5cclxuICAgICAge3sgXCJzZWFyY2gubm9BZ2dyZWdhdGlvbnNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+Il19