@tsi-developpement/tsi-shared-ui 1.9.1 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +1 -1
- package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +3 -3
- package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +5 -21
- package/esm2022/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.mjs +1 -1
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +8 -24
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/providers/shared-ui-tsi.provider.d.ts +1 -1
- package/lib/tsi-components/input-components/editable-grid/editable-grid.component.d.ts +1 -7
- package/package.json +1 -1
|
@@ -292,7 +292,7 @@ export class CreateOrEditEntityInformationsComponent extends TsiFormComponentBas
|
|
|
292
292
|
return comparison[field] || '';
|
|
293
293
|
}
|
|
294
294
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditEntityInformationsComponent, deps: [{ token: i1.EntityConfigurationService }, { token: i1.ErrorResponseManagerService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: i1.TsiNotificationService }, { token: i1.TsiConfirmationService }, { token: i1.ApiExplorerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
295
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditEntityInformationsComponent, selector: "app-create-or-edit-entity-informations", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_calendarStartDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalendarStartDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarStartDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_calendarEndDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalenderEndDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarEndDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"flex align-items-center gap-2 mb-3\">\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" [(ngModel)]=\"propertiesSearchText\" (ngModelChange)=\"onPropertiesSearch()\"\r\n [placeholder]=\"'administration_properties_searchPlaceholder' | localize\" class=\"p-inputtext-sm\" />\r\n </span>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_modelColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedModelColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('model', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">\r\n {{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_projectDbColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedDbColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('db', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <Tsi-CheckBox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\"\r\n [disabled]=\"true\"></Tsi-CheckBox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">\r\n {{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_sqlColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedSqlColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('sql', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">\r\n {{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <p-paginator [rows]=\"propertiesPageSize\" [totalRecords]=\"propertiesTotalRecords\" [first]=\"propertiesFirst\"\r\n (onPageChange)=\"onPropertiesPageChange($event)\" [rowsPerPageOptions]=\"[10, 25, 50]\">\r\n </p-paginator>\r\n\r\n <div class=\"comparison-legend mt-3\">\r\n <span class=\"legend-item comparison-missing-legend\">{{ 'administration_properties_comparison_missing' | localize\r\n }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' |\r\n localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' |\r\n localize }}</span>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\" [showSaveAndCloseButton]=\"false\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>", styles: [":host ::ng-deep .comparison-missing{background-color:#ef9a9a!important}:host ::ng-deep .comparison-type-mismatch{background-color:#ffcdd2!important}:host ::ng-deep .comparison-length-mismatch{background-color:#fff9c4!important}.properties-grid-section{border:1px solid #dee2e6;border-radius:6px;overflow:hidden}.properties-grid-title{margin:0;padding:.75rem 1rem;background-color:#f8f9fa;border-bottom:1px solid #dee2e6;font-size:.95rem;font-weight:600}.comparison-legend{display:flex;gap:1rem;flex-wrap:wrap}.comparison-legend .legend-item{padding:.25rem .75rem;border-radius:4px;font-size:.8rem}.comparison-legend .comparison-missing-legend{background-color:#ef9a9a}.comparison-legend .comparison-type-mismatch-legend{background-color:#ffcdd2}.comparison-legend .comparison-length-mismatch-legend{background-color:#fff9c4}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: i9.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i9.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i11.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i12.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "events", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["itemsSave", "refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i13.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i14.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i15.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i16.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i17.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i18.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i19.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i20.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i21.LocalizePipe, name: "localize" }, { kind: "pipe", type: i22.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
295
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditEntityInformationsComponent, selector: "app-create-or-edit-entity-informations", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_calendarStartDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalendarStartDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarStartDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_calendarEndDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalenderEndDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarEndDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"flex align-items-center gap-2 mb-3\">\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" [(ngModel)]=\"propertiesSearchText\" (ngModelChange)=\"onPropertiesSearch()\"\r\n [placeholder]=\"'administration_properties_searchPlaceholder' | localize\" class=\"p-inputtext-sm\" />\r\n </span>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_modelColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedModelColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('model', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">\r\n {{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_projectDbColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedDbColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('db', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <Tsi-CheckBox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\"\r\n [disabled]=\"true\"></Tsi-CheckBox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">\r\n {{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_sqlColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedSqlColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('sql', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">\r\n {{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <p-paginator [rows]=\"propertiesPageSize\" [totalRecords]=\"propertiesTotalRecords\" [first]=\"propertiesFirst\"\r\n (onPageChange)=\"onPropertiesPageChange($event)\" [rowsPerPageOptions]=\"[10, 25, 50]\">\r\n </p-paginator>\r\n\r\n <div class=\"comparison-legend mt-3\">\r\n <span class=\"legend-item comparison-missing-legend\">{{ 'administration_properties_comparison_missing' | localize\r\n }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' |\r\n localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' |\r\n localize }}</span>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\" [showSaveAndCloseButton]=\"false\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>", styles: [":host ::ng-deep .comparison-missing{background-color:#ef9a9a!important}:host ::ng-deep .comparison-type-mismatch{background-color:#ffcdd2!important}:host ::ng-deep .comparison-length-mismatch{background-color:#fff9c4!important}.properties-grid-section{border:1px solid #dee2e6;border-radius:6px;overflow:hidden}.properties-grid-title{margin:0;padding:.75rem 1rem;background-color:#f8f9fa;border-bottom:1px solid #dee2e6;font-size:.95rem;font-weight:600}.comparison-legend{display:flex;gap:1rem;flex-wrap:wrap}.comparison-legend .legend-item{padding:.25rem .75rem;border-radius:4px;font-size:.8rem}.comparison-legend .comparison-missing-legend{background-color:#ef9a9a}.comparison-legend .comparison-type-mismatch-legend{background-color:#ffcdd2}.comparison-legend .comparison-length-mismatch-legend{background-color:#fff9c4}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: i9.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i9.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i11.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i12.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "saveEvent", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i13.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i14.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i15.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i16.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i17.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i18.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i19.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i20.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i21.LocalizePipe, name: "localize" }, { kind: "pipe", type: i22.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
296
296
|
}
|
|
297
297
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditEntityInformationsComponent, decorators: [{
|
|
298
298
|
type: Component,
|
|
@@ -195,10 +195,10 @@ export class CreateOrEditModeleImportComponent extends TsiFormComponentBaseCompo
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditModeleImportComponent, deps: [{ token: i1.ModeleImportService }, { token: i1.TsiNotificationService }, { token: i2.DynamicDialogConfig }, { token: i2.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
198
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditModeleImportComponent, selector: "app-create-or-edit-modele-import", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [
|
|
198
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditModeleImportComponent, selector: "app-create-or-edit-modele-import", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [saveEvent]=\"eventsSubjectModeleImportDetail.asObservable()\"\r\n (rowDeletedEventEmitter)=\"onSaveModeleImportDetails($event)\" [columns]=\"modeleImportDetailColumns\"\r\n [parent]=\"this\" [showSaveButton]=\"false\" [key]=\"'numLigne'\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n\r\n\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"\r\n (onSaveClick)=\"save()\" [showSaveAndCloseButton]=\"mode == modeRef.delete\"></Tsi-Modal-Footer>\r\n\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "saveEvent", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i5.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i6.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i7.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i8.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i9.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i10.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i11.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i12.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i13.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
199
199
|
}
|
|
200
200
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditModeleImportComponent, decorators: [{
|
|
201
201
|
type: Component,
|
|
202
|
-
args: [{ selector: 'app-create-or-edit-modele-import', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [
|
|
202
|
+
args: [{ selector: 'app-create-or-edit-modele-import', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" [isLoading]=\"isloading\" autocomplete=\"off\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'Mod\u00E8le import'\"\r\n (onCloseClick)=\"hide()\"></Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode() \">\r\n\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"grid\">\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Modele'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.nom\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'nomModele'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Form'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.form\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomForm'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Nom Classe'\"></Tsi-Label>\r\n <Tsi-Text-Box [(inputField)]=\"modeleImport.classe\" [disabled]=\"true\" class=\"col-9\"\r\n [inputName]=\"'nomClasse'\"></Tsi-Text-Box>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Premiere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.premiereLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'premiereLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Derniere Ligne Import'\"></Tsi-Label>\r\n <Tsi-Integer [(inputField)]=\"modeleImport.dernierLigneImport\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'dernierLigneImport'\"></Tsi-Integer>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Arrete lors de premier erreur '\"></Tsi-Label>\r\n <Tsi-CheckBox [(inputField)]=\"modeleImport.arretePremierErreur\" [disabled]=\"false\" class=\"col-9\"\r\n [inputName]=\"'arretePremierErreur'\"></Tsi-CheckBox>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Ordre Ou Titre Colonne'\"></Tsi-Label>\r\n <Tsi-Search-Combo (bindChange)=\"typeImportChange($event)\" class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getTypeNatureDocumentEnum()\r\n \" [(bind)]=\"modeleImport.ordreOuTitreColonne\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label class=\"col-3\" [labelValue]=\"'Type de fichier'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-9\" [listSourceUrl]=\"\r\n modeleImportEndPoints.getImportFileTypeEnum()\r\n \" [(bind)]=\"modeleImport.fileType\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Label *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-3\"\r\n [labelValue]=\"'S\u00E9parateur de fichier CSV'\"></Tsi-Label>\r\n <Tsi-Search-Combo *ngIf=\"modeleImport.fileType == fileTypeImportEnumRef.CSV\" class=\"col-9\"\r\n [listSourceUrl]=\"\r\n modeleImportEndPoints.getCsvFileSeparatorEnum()\r\n \" [(bind)]=\"modeleImport.csvFileSeparator\" id-field=\"key\" label-field=\"value\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"showModeleImportDetails\">\r\n <Tsi-Generic-Editable-Grid [gridData]=\"modeleImport.modeleImportDetails\"\r\n [saveEvent]=\"eventsSubjectModeleImportDetail.asObservable()\"\r\n (rowDeletedEventEmitter)=\"onSaveModeleImportDetails($event)\" [columns]=\"modeleImportDetailColumns\"\r\n [parent]=\"this\" [showSaveButton]=\"false\" [key]=\"'numLigne'\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n\r\n\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"\r\n (onSaveClick)=\"save()\" [showSaveAndCloseButton]=\"mode == modeRef.delete\"></Tsi-Modal-Footer>\r\n\r\n</tsi-form>" }]
|
|
203
203
|
}], ctorParameters: () => [{ type: i1.ModeleImportService }, { type: i1.TsiNotificationService }, { type: i2.DynamicDialogConfig }, { type: i2.DynamicDialogRef }] });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0L2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFzQixNQUFNLGNBQWMsQ0FBQztBQUU3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVF2RSxNQUFNLE9BQU8saUNBQWtDLFNBQVEsNkJB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Q2hGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixDQUFDO2FBQ0YsQ0FDRixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7K0dBM0xVLGlDQUFpQzttR0FBakMsaUNBQWlDLDJEQUZqQyxDQUFDLEdBQUcsWUFBWSxDQUFDLGlEQ2xCOUIsNmxJQTJFVzs7NEZEdkRFLGlDQUFpQztrQkFON0MsU0FBUzsrQkFDRSxrQ0FBa0MsYUFHakMsQ0FBQyxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBNb2RlcywgVHlwZUltcG9ydEVudW0sIElucHV0VHlwZXMsIENTU1VuaXRzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBHcmlkQ29sdW1uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IE1vZGVsZUltcG9ydENyZWF0ZVJlcXVlc3QsIE1vZGVsZUltcG9ydERldGFpbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IE1vZGVsZUltcG9ydFNlcnZpY2UsIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEdyaWRDb2x1bW5TdHlsZUhlbHBlciB9IGZyb20gJy4uLy4uL3RzaS1oZWxwZXJzJztcclxuaW1wb3J0IHsgSW1wb3J0RXhwb3J0RW5kUG9pbnRzIH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cy9pbXBvcnQtZXhwb3J0LWVuZHBvaW50JztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgRmlsZVR5cGVJbXBvcnRFbnVtIH0gZnJvbSAnLi4vLi4vZW51bXMvZmlsZS10eXBlLWltcG9ydC1lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uYXBwUHJvdmlkZXJzXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlT3JFZGl0TW9kZWxlSW1wb3J0Q29tcG9uZW50IGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBtb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG4gIG1vZGVsZUltcG9ydDogTW9kZWxlSW1wb3J0Q3JlYXRlUmVxdWVzdCA9IG5ldyBNb2RlbGVJbXBvcnRDcmVhdGVSZXF1ZXN0KClcclxuICBnZXRDb2xvbm5lQnlDbGFzc05hbWVFbmRQb2ludDogc3RyaW5nID0gXCJcIlxyXG4gIGdldENsYXNzQ2hpbGRzQnlDbGFzc05hbWVFbmRQb2ludDogc3RyaW5nID0gXCJcIlxyXG4gIG1vZGVsZUltcG9ydEVuZFBvaW50cyA9IEltcG9ydEV4cG9ydEVuZFBvaW50c1xyXG4gIF9idXNpbm5lc3NDbGFzc05hbWU6IHN0cmluZyA9IFwiXCJcclxuICBldmVudHNTdWJqZWN0TW9kZWxlSW1wb3J0RGV0YWlsOiBTdWJqZWN0PHZvaWQ+O1xyXG4gIG9wZW5lZE1vZGU6IGFueVxyXG4gIHNob3dNb2RlbGVJbXBvcnREZXRhaWxzOiBib29sZWFuID0gZmFsc2VcclxuICBmaWxlVHlwZUltcG9ydEVudW1SZWYgPSBGaWxlVHlwZUltcG9ydEVudW1cclxuICBtb2RlUmVmID0gTW9kZXM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGVsZUltcG9ydFNlcnZpY2U6IE1vZGVsZUltcG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZywgcHVibGljIG92ZXJyaWRlIHJlZj86IER5bmFtaWNEaWFsb2dSZWYsKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcbiAgICB0aGlzLmV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWwgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgdGhpcy5fYnVzaW5uZXNzQ2xhc3NOYW1lID0gY29uZmlnPy5kYXRhPy5lbnRpdHlCdXNpbmVzc0NsYXNzXHJcbiAgICB0aGlzLmdldENsYXNzQ2hpbGRzQnlDbGFzc05hbWVFbmRQb2ludCA9IEltcG9ydEV4cG9ydEVuZFBvaW50cy5nZXRDbGFzc0NoaWxkc0FzS2V5VmFsdWVQYWlyKHRoaXMuX2J1c2lubmVzc0NsYXNzTmFtZSlcclxuICAgIHRoaXMuaW5pdE1vZGVsZUltcG9ydERldGFpbENvbHVtbnMoKVxyXG4gICAgdGhpcy5vcGVuZWRNb2RlID0gdGhpcy5jb25maWcuZGF0YT8ubW9kZSBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU1vZGVsZUltcG9ydEZyb21HcmlkKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdWJqZWN0TW9kZWxlSW1wb3J0RGV0YWlsLm5leHQoKTtcclxuICB9XHJcblxyXG4gIG9uU2F2ZU1vZGVsZUltcG9ydERldGFpbHMoZ3JpZERhdGE6IEFycmF5PE1vZGVsZUltcG9ydERldGFpbD4pIHtcclxuICAgIHRoaXMubW9kZWxlSW1wb3J0Lm1vZGVsZUltcG9ydERldGFpbHMgPSBncmlkRGF0YVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpXHJcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5tb2RlbGVJbXBvcnQuY2xhc3NlID0gdGhpcy5jb25maWc/LmRhdGE/LmVudGl0eUJ1c2luZXNzQ2xhc3NcclxuICAgICAgdGhpcy5tb2RlbGVJbXBvcnQuZm9ybSA9IHRoaXMuZm9ybU5hbWVcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuZWRpdCAmJiB0aGlzLmNvbmZpZy5kYXRhPy5pZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9tb2RlbGVJbXBvcnRTZXJ2aWNlLmdldEJ5SWQodGhpcy5jb25maWcuZGF0YT8uaWQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm1vZGVsZUltcG9ydCA9IGRhdGFcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlc1dpdGhQYXJlbnRDb2x1bU5hbWUoKVxyXG4gICAgICAgICAgICAgIHRoaXMudHlwZUltcG9ydENoYW5nZSh0aGlzLm1vZGVsZUltcG9ydC5vcmRyZU91VGl0cmVDb2xvbm5lKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWx1ZXNXaXRoUGFyZW50Q29sdW1OYW1lKCkge1xyXG4gICAgbGV0IGZpbHRyZWREYXRhID0gdGhpcy5tb2RlbGVJbXBvcnQubW9kZWxlSW1wb3J0RGV0YWlsc1xyXG4gICAgICAuZmlsdGVyKHggPT4geC5ub21DbGFzc2VEZXRhaWwgPT0gdW5kZWZpbmVkIHx8IHgubm9tQ2xhc3NlRGV0YWlsID09ICcnKVxyXG4gICAgZmlsdHJlZERhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaXRlbS5ub21DbGFzc2VEZXRhaWwgPSB0aGlzLl9idXNpbm5lc3NDbGFzc05hbWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0eXBlSW1wb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuaW5pdE1vZGVsZUltcG9ydERldGFpbENvbHVtbnMoKVxyXG4gICAgaWYgKGV2ZW50ID09IFR5cGVJbXBvcnRFbnVtLlRpdHJlQ29sb25uZSkge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLm1vZGVsZUltcG9ydERldGFpbENvbHVtbnMuZmluZEluZGV4KHggPT4geC5maWVsZCA9PSBcIm51bWVyb1wiKVxyXG4gICAgICBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLm1vZGVsZUltcG9ydERldGFpbENvbHVtbnMuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFR5cGVJbXBvcnRFbnVtLk9yZHJlQ29sb25uZSkge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLm1vZGVsZUltcG9ydERldGFpbENvbHVtbnMuZmluZEluZGV4KHggPT4geC5maWVsZCA9PSBcIm5vbUNvbG9ubmVGaWNoaWVyXCIpXHJcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChldmVudCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zaG93TW9kZWxlSW1wb3J0RGV0YWlscyA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd01vZGVsZUltcG9ydERldGFpbHMgPSBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0TW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucygpIHtcclxuICAgIHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiBcIm5vbUNsYXNzZURldGFpbFwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJOb20gQ2xhc3NlIERldGFpbFwiLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICAgIGxpc3RTb3VyY2VVcmw6IHRoaXMuZ2V0Q2xhc3NDaGlsZHNCeUNsYXNzTmFtZUVuZFBvaW50LFxyXG4gICAgICAgIGlkRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBsYWJlbEZpZWxkOiBcInZhbHVlXCIsXHJcbiAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICAgIHN0eWxlOiBHcmlkQ29sdW1uU3R5bGVIZWxwZXIuY3JlYXRlV2lkdGhTdHlsZShDU1NVbml0cy5WVywgMjApXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJjb2xvbm5lQ2xhc3NlXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIkNvbG9ubmUgQ2xhc3NlXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5TRUFSQ0hfQ09NQk8sXHJcbiAgICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5idWlsZEdldENoaWxkQ2xhc3NDb2x1bW5zLFxyXG4gICAgICAgIGlkRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBsYWJlbEZpZWxkOiBcInZhbHVlXCIsXHJcbiAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJudW1lcm9cIixcclxuICAgICAgICBoZWFkZXI6IFwiT3JkcmVcIixcclxuICAgICAgICB0eXBlOiBJbnB1dFR5cGVzLklOVEVHRVIsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJub21Db2xvbm5lRmljaGllclwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJOb20gQ29sb25uZSBGaWNoaWVyXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5URVhUX0JPWCxcclxuICAgICAgICB3YXRjaEZvckNoYW5nZXM6IHRydWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiBcIm5vbUNvbG9ubmVDbGVmRXRyYW5nZXJlXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIk5vbSBDb2xvbm5lIENsZSBFdHJhbmfDqHJlXCIsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICAgIGxpc3RTb3VyY2VVcmw6IHRoaXMuYnVpbGRHZXRDb2x1bW1uRm9yRm9yZWlnbktleUNsYXNzLFxyXG4gICAgICAgIGlkRmllbGQ6IFwia2V5XCIsXHJcbiAgICAgICAgbGFiZWxGaWVsZDogXCJ2YWx1ZVwiLFxyXG4gICAgICAgIGlzRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDb2x1bW1uRm9yRm9yZWlnbktleUNsYXNzKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBjb2x1bW5OYW1lID0gY3VycmVudFJvd0l0ZW0/LmNvbG9ubmVDbGFzc2UgPz8gXCJcIlxyXG4gICAgbGV0IHBhcmVudEVudGl0eU5hbWUgPSBjdXJyZW50Um93SXRlbT8ubm9tQ2xhc3NlRGV0YWlsID8/IFwiXCJcclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q29sb25uZXNCeUNsYXNzTmFtZUFzS2V5VmFsdWVQYWlyKHBhcmVudEVudGl0eU5hbWUsIGNvbHVtbk5hbWUpXHJcbiAgfVxyXG5cclxuICBidWlsZEdldENoaWxkQ2xhc3NDb2x1bW5zKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBwYXJlbnRFbnRpdHlOYW1lID0gY3VycmVudFJvd0l0ZW0/Lm5vbUNsYXNzZURldGFpbCA/PyBcIlwiXHJcbiAgICAvLyBpZiAocGFyZW50RW50aXR5TmFtZT8uZW5kc1dpdGgoJ3MnKSkge1xyXG4gICAgLy8gICBwYXJlbnRFbnRpdHlOYW1lID0gcGFyZW50RW50aXR5TmFtZS5zbGljZSgwLCAtMSk7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gSW1wb3J0RXhwb3J0RW5kUG9pbnRzLmdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihwYXJlbnRFbnRpdHlOYW1lLCBcIlwiKVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDaGlsZENoaWxkQ2xhc3MoY3VycmVudFJvd0l0ZW06IE1vZGVsZUltcG9ydERldGFpbCkge1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9IGN1cnJlbnRSb3dJdGVtPy5ub21DbGFzc2VEZXRhaWxcclxuICAgIGlmIChjbGFzc05hbWU/LmVuZHNXaXRoKCdzJykpIHtcclxuICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q2xhc3NDaGlsZHNBc0tleVZhbHVlUGFpcihjbGFzc05hbWUpXHJcbiAgfVxyXG5cclxuICBkZWxldGVWYWx1ZUZyb21QYXJlbnRNb2RlbCgpIHtcclxuICAgIGxldCBmaWx0cmVkRGF0YSA9IHRoaXMubW9kZWxlSW1wb3J0Lm1vZGVsZUltcG9ydERldGFpbHNcclxuICAgICAgLmZpbHRlcih4ID0+IHgubm9tQ2xhc3NlRGV0YWlsID09IHRoaXMuX2J1c2luZXNzQ2xhc3MpXHJcbiAgICBmaWx0cmVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLm5vbUNsYXNzZURldGFpbCA9IHVuZGVmaW5lZFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICBzdXBlci5zYXZlKClcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZVxyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlXHJcbiAgICB0aGlzLl91cGRhdGVNb2RlbGVJbXBvcnRGcm9tR3JpZCgpXHJcbiAgICB0aGlzLmRlbGV0ZVZhbHVlRnJvbVBhcmVudE1vZGVsKClcclxuICAgIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UuY3JlYXRlKHRoaXMubW9kZWxlSW1wb3J0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuZWRpdCAmJiB0aGlzLm1vZGVsZUltcG9ydC51aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UudXBkYXRlKHRoaXMubW9kZWxlSW1wb3J0LCB0aGlzLm1vZGVsZUltcG9ydC51aWQpLnN1YnNjcmliZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMudXBkYXRlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIFtpc0xvYWRpbmddPVwiaXNsb2FkaW5nXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6IG1vZGUgOiAnTW9kw6hsZSBpbXBvcnQnXCJcclxuICAgIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+PC9Uc2ktTW9kYWwtSGVhZGVyPlxyXG5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKSBcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gTW9kZWxlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQm94IFsoaW5wdXRGaWVsZCldPVwibW9kZWxlSW1wb3J0Lm5vbVwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ25vbU1vZGVsZSdcIj48L1RzaS1UZXh0LUJveD5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gRm9ybSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5mb3JtXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21Gb3JtJ1wiPjwvVHNpLVRleHQtQm94PlxyXG5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0zXCIgW2xhYmVsVmFsdWVdPVwiJ05vbSBDbGFzc2UnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuY2xhc3NlXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21DbGFzc2UnXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInUHJlbWllcmUgTGlnbmUgSW1wb3J0J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLUludGVnZXIgWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQucHJlbWllcmVMaWduZUltcG9ydFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ3ByZW1pZXJlTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidEZXJuaWVyZSBMaWduZSBJbXBvcnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5kZXJuaWVyTGlnbmVJbXBvcnRcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidkZXJuaWVyTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidBcnJldGUgbG9ycyBkZSBwcmVtaWVyIGVycmV1ciAnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuYXJyZXRlUHJlbWllckVycmV1clwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ2FycmV0ZVByZW1pZXJFcnJldXInXCI+PC9Uc2ktQ2hlY2tCb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInT3JkcmUgT3UgVGl0cmUgQ29sb25uZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gKGJpbmRDaGFuZ2UpPVwidHlwZUltcG9ydENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJjb2wtOVwiIFtsaXN0U291cmNlVXJsXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtb2RlbGVJbXBvcnRFbmRQb2ludHMuZ2V0VHlwZU5hdHVyZURvY3VtZW50RW51bSgpXHJcbiAgICAgICAgICAgICAgICBcIiBbKGJpbmQpXT1cIm1vZGVsZUltcG9ydC5vcmRyZU91VGl0cmVDb2xvbm5lXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidUeXBlIGRlIGZpY2hpZXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTlcIiBbbGlzdFNvdXJjZVVybF09XCJcclxuICAgICAgICAgICAgICAgICAgbW9kZWxlSW1wb3J0RW5kUG9pbnRzLmdldEltcG9ydEZpbGVUeXBlRW51bSgpXHJcbiAgICAgICAgICAgICAgICBcIiBbKGJpbmQpXT1cIm1vZGVsZUltcG9ydC5maWxlVHlwZVwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcblxyXG4gICAgICAgICAgICAgIDxUc2ktTGFiZWwgKm5nSWY9XCJtb2RlbGVJbXBvcnQuZmlsZVR5cGUgPT0gZmlsZVR5cGVJbXBvcnRFbnVtUmVmLkNTVlwiIGNsYXNzPVwiY29sLTNcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ1PDqXBhcmF0ZXVyIGRlIGZpY2hpZXIgQ1NWJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvICpuZ0lmPVwibW9kZWxlSW1wb3J0LmZpbGVUeXBlID09IGZpbGVUeXBlSW1wb3J0RW51bVJlZi5DU1ZcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtb2RlbGVJbXBvcnRFbmRQb2ludHMuZ2V0Q3N2RmlsZVNlcGFyYXRvckVudW0oKVxyXG4gICAgICAgICAgICAgICAgXCIgWyhiaW5kKV09XCJtb2RlbGVJbXBvcnQuY3N2RmlsZVNlcGFyYXRvclwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dNb2RlbGVJbXBvcnREZXRhaWxzXCI+XHJcbiAgICAgIDxUc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkIFtncmlkRGF0YV09XCJtb2RlbGVJbXBvcnQubW9kZWxlSW1wb3J0RGV0YWlsc1wiXHJcbiAgICAgICAgW2V2ZW50c109XCJldmVudHNTdWJqZWN0TW9kZWxlSW1wb3J0RGV0YWlsLmFzT2JzZXJ2YWJsZSgpXCJcclxuICAgICAgICAocm93RGVsZXRlZEV2ZW50RW1pdHRlcik9XCJvblNhdmVNb2RlbGVJbXBvcnREZXRhaWxzKCRldmVudClcIiBbY29sdW1uc109XCJtb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zXCJcclxuICAgICAgICBbcGFyZW50XT1cInRoaXNcIiBbc2hvd1NhdmVCdXR0b25dPVwiZmFsc2VcIiBba2V5XT1cIidudW1MaWduZSdcIj5cclxuICAgICAgPC9Uc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICA8L2ZpZWxkc2V0PlxyXG5cclxuICA8VHNpLU1vZGFsLUZvb3RlciBbY2FuY2VsRGlzYWJsZWRdPVwic2F2aW5nXCIgW3NhdmVEaXNhYmxlZF09XCJpc1N1Ym1pdERpc2FibGVkKClcIiAob25DYW5jZWxDbGljayk9XCJoaWRlKClcIlxyXG4gICAgKG9uU2F2ZUNsaWNrKT1cInNhdmUoKVwiIFtzaG93U2F2ZUFuZENsb3NlQnV0dG9uXT1cIm1vZGUgPT0gbW9kZVJlZi5kZWxldGVcIj48L1RzaS1Nb2RhbC1Gb290ZXI+XHJcblxyXG48L3RzaS1mb3JtPiJdfQ==
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtbW9kZWxlLWltcG9ydC9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0L2NyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFzQixNQUFNLGNBQWMsQ0FBQztBQUU3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVF2RSxNQUFNLE9BQU8saUNBQWtDLFNBQVEsNkJB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Q2hGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixDQUFDO2FBQ0YsQ0FDRixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7K0dBM0xVLGlDQUFpQzttR0FBakMsaUNBQWlDLDJEQUZqQyxDQUFDLEdBQUcsWUFBWSxDQUFDLGlEQ2xCOUIsZ21JQTJFVzs7NEZEdkRFLGlDQUFpQztrQkFON0MsU0FBUzsrQkFDRSxrQ0FBa0MsYUFHakMsQ0FBQyxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBNb2RlcywgVHlwZUltcG9ydEVudW0sIElucHV0VHlwZXMsIENTU1VuaXRzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBHcmlkQ29sdW1uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IE1vZGVsZUltcG9ydENyZWF0ZVJlcXVlc3QsIE1vZGVsZUltcG9ydERldGFpbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IE1vZGVsZUltcG9ydFNlcnZpY2UsIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEdyaWRDb2x1bW5TdHlsZUhlbHBlciB9IGZyb20gJy4uLy4uL3RzaS1oZWxwZXJzJztcclxuaW1wb3J0IHsgSW1wb3J0RXhwb3J0RW5kUG9pbnRzIH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cy9pbXBvcnQtZXhwb3J0LWVuZHBvaW50JztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgRmlsZVR5cGVJbXBvcnRFbnVtIH0gZnJvbSAnLi4vLi4vZW51bXMvZmlsZS10eXBlLWltcG9ydC1lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1vci1lZGl0LW1vZGVsZS1pbXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtb3ItZWRpdC1tb2RlbGUtaW1wb3J0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uYXBwUHJvdmlkZXJzXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlT3JFZGl0TW9kZWxlSW1wb3J0Q29tcG9uZW50IGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBtb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtdO1xyXG4gIG1vZGVsZUltcG9ydDogTW9kZWxlSW1wb3J0Q3JlYXRlUmVxdWVzdCA9IG5ldyBNb2RlbGVJbXBvcnRDcmVhdGVSZXF1ZXN0KClcclxuICBnZXRDb2xvbm5lQnlDbGFzc05hbWVFbmRQb2ludDogc3RyaW5nID0gXCJcIlxyXG4gIGdldENsYXNzQ2hpbGRzQnlDbGFzc05hbWVFbmRQb2ludDogc3RyaW5nID0gXCJcIlxyXG4gIG1vZGVsZUltcG9ydEVuZFBvaW50cyA9IEltcG9ydEV4cG9ydEVuZFBvaW50c1xyXG4gIF9idXNpbm5lc3NDbGFzc05hbWU6IHN0cmluZyA9IFwiXCJcclxuICBldmVudHNTdWJqZWN0TW9kZWxlSW1wb3J0RGV0YWlsOiBTdWJqZWN0PHZvaWQ+O1xyXG4gIG9wZW5lZE1vZGU6IGFueVxyXG4gIHNob3dNb2RlbGVJbXBvcnREZXRhaWxzOiBib29sZWFuID0gZmFsc2VcclxuICBmaWxlVHlwZUltcG9ydEVudW1SZWYgPSBGaWxlVHlwZUltcG9ydEVudW1cclxuICBtb2RlUmVmID0gTW9kZXM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGVsZUltcG9ydFNlcnZpY2U6IE1vZGVsZUltcG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZywgcHVibGljIG92ZXJyaWRlIHJlZj86IER5bmFtaWNEaWFsb2dSZWYsKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcbiAgICB0aGlzLmV2ZW50c1N1YmplY3RNb2RlbGVJbXBvcnREZXRhaWwgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgdGhpcy5fYnVzaW5uZXNzQ2xhc3NOYW1lID0gY29uZmlnPy5kYXRhPy5lbnRpdHlCdXNpbmVzc0NsYXNzXHJcbiAgICB0aGlzLmdldENsYXNzQ2hpbGRzQnlDbGFzc05hbWVFbmRQb2ludCA9IEltcG9ydEV4cG9ydEVuZFBvaW50cy5nZXRDbGFzc0NoaWxkc0FzS2V5VmFsdWVQYWlyKHRoaXMuX2J1c2lubmVzc0NsYXNzTmFtZSlcclxuICAgIHRoaXMuaW5pdE1vZGVsZUltcG9ydERldGFpbENvbHVtbnMoKVxyXG4gICAgdGhpcy5vcGVuZWRNb2RlID0gdGhpcy5jb25maWcuZGF0YT8ubW9kZSBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZU1vZGVsZUltcG9ydEZyb21HcmlkKCkge1xyXG4gICAgdGhpcy5ldmVudHNTdWJqZWN0TW9kZWxlSW1wb3J0RGV0YWlsLm5leHQoKTtcclxuICB9XHJcblxyXG4gIG9uU2F2ZU1vZGVsZUltcG9ydERldGFpbHMoZ3JpZERhdGE6IEFycmF5PE1vZGVsZUltcG9ydERldGFpbD4pIHtcclxuICAgIHRoaXMubW9kZWxlSW1wb3J0Lm1vZGVsZUltcG9ydERldGFpbHMgPSBncmlkRGF0YVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpXHJcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5tb2RlbGVJbXBvcnQuY2xhc3NlID0gdGhpcy5jb25maWc/LmRhdGE/LmVudGl0eUJ1c2luZXNzQ2xhc3NcclxuICAgICAgdGhpcy5tb2RlbGVJbXBvcnQuZm9ybSA9IHRoaXMuZm9ybU5hbWVcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuZWRpdCAmJiB0aGlzLmNvbmZpZy5kYXRhPy5pZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9tb2RlbGVJbXBvcnRTZXJ2aWNlLmdldEJ5SWQodGhpcy5jb25maWcuZGF0YT8uaWQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm1vZGVsZUltcG9ydCA9IGRhdGFcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlc1dpdGhQYXJlbnRDb2x1bU5hbWUoKVxyXG4gICAgICAgICAgICAgIHRoaXMudHlwZUltcG9ydENoYW5nZSh0aGlzLm1vZGVsZUltcG9ydC5vcmRyZU91VGl0cmVDb2xvbm5lKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWx1ZXNXaXRoUGFyZW50Q29sdW1OYW1lKCkge1xyXG4gICAgbGV0IGZpbHRyZWREYXRhID0gdGhpcy5tb2RlbGVJbXBvcnQubW9kZWxlSW1wb3J0RGV0YWlsc1xyXG4gICAgICAuZmlsdGVyKHggPT4geC5ub21DbGFzc2VEZXRhaWwgPT0gdW5kZWZpbmVkIHx8IHgubm9tQ2xhc3NlRGV0YWlsID09ICcnKVxyXG4gICAgZmlsdHJlZERhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaXRlbS5ub21DbGFzc2VEZXRhaWwgPSB0aGlzLl9idXNpbm5lc3NDbGFzc05hbWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0eXBlSW1wb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuaW5pdE1vZGVsZUltcG9ydERldGFpbENvbHVtbnMoKVxyXG4gICAgaWYgKGV2ZW50ID09IFR5cGVJbXBvcnRFbnVtLlRpdHJlQ29sb25uZSkge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLm1vZGVsZUltcG9ydERldGFpbENvbHVtbnMuZmluZEluZGV4KHggPT4geC5maWVsZCA9PSBcIm51bWVyb1wiKVxyXG4gICAgICBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLm1vZGVsZUltcG9ydERldGFpbENvbHVtbnMuc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFR5cGVJbXBvcnRFbnVtLk9yZHJlQ29sb25uZSkge1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLm1vZGVsZUltcG9ydERldGFpbENvbHVtbnMuZmluZEluZGV4KHggPT4geC5maWVsZCA9PSBcIm5vbUNvbG9ubmVGaWNoaWVyXCIpXHJcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChldmVudCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zaG93TW9kZWxlSW1wb3J0RGV0YWlscyA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd01vZGVsZUltcG9ydERldGFpbHMgPSBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0TW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucygpIHtcclxuICAgIHRoaXMubW9kZWxlSW1wb3J0RGV0YWlsQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiBcIm5vbUNsYXNzZURldGFpbFwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJOb20gQ2xhc3NlIERldGFpbFwiLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICAgIGxpc3RTb3VyY2VVcmw6IHRoaXMuZ2V0Q2xhc3NDaGlsZHNCeUNsYXNzTmFtZUVuZFBvaW50LFxyXG4gICAgICAgIGlkRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBsYWJlbEZpZWxkOiBcInZhbHVlXCIsXHJcbiAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICAgIHN0eWxlOiBHcmlkQ29sdW1uU3R5bGVIZWxwZXIuY3JlYXRlV2lkdGhTdHlsZShDU1NVbml0cy5WVywgMjApXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJjb2xvbm5lQ2xhc3NlXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIkNvbG9ubmUgQ2xhc3NlXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5TRUFSQ0hfQ09NQk8sXHJcbiAgICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5idWlsZEdldENoaWxkQ2xhc3NDb2x1bW5zLFxyXG4gICAgICAgIGlkRmllbGQ6IFwidmFsdWVcIixcclxuICAgICAgICBsYWJlbEZpZWxkOiBcInZhbHVlXCIsXHJcbiAgICAgICAgaXNGaWx0ZXJlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJudW1lcm9cIixcclxuICAgICAgICBoZWFkZXI6IFwiT3JkcmVcIixcclxuICAgICAgICB0eXBlOiBJbnB1dFR5cGVzLklOVEVHRVIsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogXCJub21Db2xvbm5lRmljaGllclwiLFxyXG4gICAgICAgIGhlYWRlcjogXCJOb20gQ29sb25uZSBGaWNoaWVyXCIsXHJcbiAgICAgICAgdHlwZTogSW5wdXRUeXBlcy5URVhUX0JPWCxcclxuICAgICAgICB3YXRjaEZvckNoYW5nZXM6IHRydWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiBcIm5vbUNvbG9ubmVDbGVmRXRyYW5nZXJlXCIsXHJcbiAgICAgICAgaGVhZGVyOiBcIk5vbSBDb2xvbm5lIENsZSBFdHJhbmfDqHJlXCIsXHJcbiAgICAgICAgd2F0Y2hGb3JDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICAgIGxpc3RTb3VyY2VVcmw6IHRoaXMuYnVpbGRHZXRDb2x1bW1uRm9yRm9yZWlnbktleUNsYXNzLFxyXG4gICAgICAgIGlkRmllbGQ6IFwia2V5XCIsXHJcbiAgICAgICAgbGFiZWxGaWVsZDogXCJ2YWx1ZVwiLFxyXG4gICAgICAgIGlzRmlsdGVyZWQ6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDb2x1bW1uRm9yRm9yZWlnbktleUNsYXNzKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBjb2x1bW5OYW1lID0gY3VycmVudFJvd0l0ZW0/LmNvbG9ubmVDbGFzc2UgPz8gXCJcIlxyXG4gICAgbGV0IHBhcmVudEVudGl0eU5hbWUgPSBjdXJyZW50Um93SXRlbT8ubm9tQ2xhc3NlRGV0YWlsID8/IFwiXCJcclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q29sb25uZXNCeUNsYXNzTmFtZUFzS2V5VmFsdWVQYWlyKHBhcmVudEVudGl0eU5hbWUsIGNvbHVtbk5hbWUpXHJcbiAgfVxyXG5cclxuICBidWlsZEdldENoaWxkQ2xhc3NDb2x1bW5zKGN1cnJlbnRSb3dJdGVtOiBNb2RlbGVJbXBvcnREZXRhaWwpIHtcclxuICAgIGxldCBwYXJlbnRFbnRpdHlOYW1lID0gY3VycmVudFJvd0l0ZW0/Lm5vbUNsYXNzZURldGFpbCA/PyBcIlwiXHJcbiAgICAvLyBpZiAocGFyZW50RW50aXR5TmFtZT8uZW5kc1dpdGgoJ3MnKSkge1xyXG4gICAgLy8gICBwYXJlbnRFbnRpdHlOYW1lID0gcGFyZW50RW50aXR5TmFtZS5zbGljZSgwLCAtMSk7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gSW1wb3J0RXhwb3J0RW5kUG9pbnRzLmdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihwYXJlbnRFbnRpdHlOYW1lLCBcIlwiKVxyXG4gIH1cclxuXHJcbiAgYnVpbGRHZXRDaGlsZENoaWxkQ2xhc3MoY3VycmVudFJvd0l0ZW06IE1vZGVsZUltcG9ydERldGFpbCkge1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9IGN1cnJlbnRSb3dJdGVtPy5ub21DbGFzc2VEZXRhaWxcclxuICAgIGlmIChjbGFzc05hbWU/LmVuZHNXaXRoKCdzJykpIHtcclxuICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICAgIHJldHVybiBJbXBvcnRFeHBvcnRFbmRQb2ludHMuZ2V0Q2xhc3NDaGlsZHNBc0tleVZhbHVlUGFpcihjbGFzc05hbWUpXHJcbiAgfVxyXG5cclxuICBkZWxldGVWYWx1ZUZyb21QYXJlbnRNb2RlbCgpIHtcclxuICAgIGxldCBmaWx0cmVkRGF0YSA9IHRoaXMubW9kZWxlSW1wb3J0Lm1vZGVsZUltcG9ydERldGFpbHNcclxuICAgICAgLmZpbHRlcih4ID0+IHgubm9tQ2xhc3NlRGV0YWlsID09IHRoaXMuX2J1c2luZXNzQ2xhc3MpXHJcbiAgICBmaWx0cmVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLm5vbUNsYXNzZURldGFpbCA9IHVuZGVmaW5lZFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICBzdXBlci5zYXZlKClcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZVxyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlXHJcbiAgICB0aGlzLl91cGRhdGVNb2RlbGVJbXBvcnRGcm9tR3JpZCgpXHJcbiAgICB0aGlzLmRlbGV0ZVZhbHVlRnJvbVBhcmVudE1vZGVsKClcclxuICAgIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UuY3JlYXRlKHRoaXMubW9kZWxlSW1wb3J0KS5zdWJzY3JpYmUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm9wZW5lZE1vZGUgPT0gTW9kZXMuZWRpdCAmJiB0aGlzLm1vZGVsZUltcG9ydC51aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX21vZGVsZUltcG9ydFNlcnZpY2UudXBkYXRlKHRoaXMubW9kZWxlSW1wb3J0LCB0aGlzLm1vZGVsZUltcG9ydC51aWQpLnN1YnNjcmliZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMudXBkYXRlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIFtpc0xvYWRpbmddPVwiaXNsb2FkaW5nXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6IG1vZGUgOiAnTW9kw6hsZSBpbXBvcnQnXCJcclxuICAgIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+PC9Uc2ktTW9kYWwtSGVhZGVyPlxyXG5cclxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKSBcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gTW9kZWxlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVRleHQtQm94IFsoaW5wdXRGaWVsZCldPVwibW9kZWxlSW1wb3J0Lm5vbVwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ25vbU1vZGVsZSdcIj48L1RzaS1UZXh0LUJveD5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidOb20gRm9ybSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5mb3JtXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21Gb3JtJ1wiPjwvVHNpLVRleHQtQm94PlxyXG5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0zXCIgW2xhYmVsVmFsdWVdPVwiJ05vbSBDbGFzc2UnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuY2xhc3NlXCIgW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidub21DbGFzc2UnXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInUHJlbWllcmUgTGlnbmUgSW1wb3J0J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLUludGVnZXIgWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQucHJlbWllcmVMaWduZUltcG9ydFwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ3ByZW1pZXJlTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidEZXJuaWVyZSBMaWduZSBJbXBvcnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbKGlucHV0RmllbGQpXT1cIm1vZGVsZUltcG9ydC5kZXJuaWVyTGlnbmVJbXBvcnRcIiBbZGlzYWJsZWRdPVwiZmFsc2VcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidkZXJuaWVyTGlnbmVJbXBvcnQnXCI+PC9Uc2ktSW50ZWdlcj5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidBcnJldGUgbG9ycyBkZSBwcmVtaWVyIGVycmV1ciAnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggWyhpbnB1dEZpZWxkKV09XCJtb2RlbGVJbXBvcnQuYXJyZXRlUHJlbWllckVycmV1clwiIFtkaXNhYmxlZF09XCJmYWxzZVwiIGNsYXNzPVwiY29sLTlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ2FycmV0ZVByZW1pZXJFcnJldXInXCI+PC9Uc2ktQ2hlY2tCb3g+XHJcblxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTNcIiBbbGFiZWxWYWx1ZV09XCInT3JkcmUgT3UgVGl0cmUgQ29sb25uZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gKGJpbmRDaGFuZ2UpPVwidHlwZUltcG9ydENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJjb2wtOVwiIFtsaXN0U291cmNlVXJsXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtb2RlbGVJbXBvcnRFbmRQb2ludHMuZ2V0VHlwZU5hdHVyZURvY3VtZW50RW51bSgpXHJcbiAgICAgICAgICAgICAgICBcIiBbKGJpbmQpXT1cIm1vZGVsZUltcG9ydC5vcmRyZU91VGl0cmVDb2xvbm5lXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtM1wiIFtsYWJlbFZhbHVlXT1cIidUeXBlIGRlIGZpY2hpZXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTlcIiBbbGlzdFNvdXJjZVVybF09XCJcclxuICAgICAgICAgICAgICAgICAgbW9kZWxlSW1wb3J0RW5kUG9pbnRzLmdldEltcG9ydEZpbGVUeXBlRW51bSgpXHJcbiAgICAgICAgICAgICAgICBcIiBbKGJpbmQpXT1cIm1vZGVsZUltcG9ydC5maWxlVHlwZVwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcblxyXG4gICAgICAgICAgICAgIDxUc2ktTGFiZWwgKm5nSWY9XCJtb2RlbGVJbXBvcnQuZmlsZVR5cGUgPT0gZmlsZVR5cGVJbXBvcnRFbnVtUmVmLkNTVlwiIGNsYXNzPVwiY29sLTNcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ1PDqXBhcmF0ZXVyIGRlIGZpY2hpZXIgQ1NWJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvICpuZ0lmPVwibW9kZWxlSW1wb3J0LmZpbGVUeXBlID09IGZpbGVUeXBlSW1wb3J0RW51bVJlZi5DU1ZcIiBjbGFzcz1cImNvbC05XCJcclxuICAgICAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cIlxyXG4gICAgICAgICAgICAgICAgICBtb2RlbGVJbXBvcnRFbmRQb2ludHMuZ2V0Q3N2RmlsZVNlcGFyYXRvckVudW0oKVxyXG4gICAgICAgICAgICAgICAgXCIgWyhiaW5kKV09XCJtb2RlbGVJbXBvcnQuY3N2RmlsZVNlcGFyYXRvclwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dNb2RlbGVJbXBvcnREZXRhaWxzXCI+XHJcbiAgICAgIDxUc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkIFtncmlkRGF0YV09XCJtb2RlbGVJbXBvcnQubW9kZWxlSW1wb3J0RGV0YWlsc1wiXHJcbiAgICAgICAgW3NhdmVFdmVudF09XCJldmVudHNTdWJqZWN0TW9kZWxlSW1wb3J0RGV0YWlsLmFzT2JzZXJ2YWJsZSgpXCJcclxuICAgICAgICAocm93RGVsZXRlZEV2ZW50RW1pdHRlcik9XCJvblNhdmVNb2RlbGVJbXBvcnREZXRhaWxzKCRldmVudClcIiBbY29sdW1uc109XCJtb2RlbGVJbXBvcnREZXRhaWxDb2x1bW5zXCJcclxuICAgICAgICBbcGFyZW50XT1cInRoaXNcIiBbc2hvd1NhdmVCdXR0b25dPVwiZmFsc2VcIiBba2V5XT1cIidudW1MaWduZSdcIj5cclxuICAgICAgPC9Uc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICA8L2ZpZWxkc2V0PlxyXG5cclxuICA8VHNpLU1vZGFsLUZvb3RlciBbY2FuY2VsRGlzYWJsZWRdPVwic2F2aW5nXCIgW3NhdmVEaXNhYmxlZF09XCJpc1N1Ym1pdERpc2FibGVkKClcIiAob25DYW5jZWxDbGljayk9XCJoaWRlKClcIlxyXG4gICAgKG9uU2F2ZUNsaWNrKT1cInNhdmUoKVwiIFtzaG93U2F2ZUFuZENsb3NlQnV0dG9uXT1cIm1vZGUgPT0gbW9kZVJlZi5kZWxldGVcIj48L1RzaS1Nb2RhbC1Gb290ZXI+XHJcblxyXG48L3RzaS1mb3JtPiJdfQ==
|