@hitsoft/fbdocumentflow 0.0.1 → 0.0.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.
@@ -6,17 +6,18 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../../proxy/document-scenarios";
7
7
  import * as i2 from "../../../proxy/sap-company-profiles";
8
8
  import * as i3 from "@abp/ng.theme.shared";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@angular/forms";
11
- import * as i6 from "devextreme-angular";
12
- import * as i7 from "devextreme-angular/ui/nested";
13
- import * as i8 from "devextreme-angular/core";
14
- import * as i9 from "@abp/ng.core";
9
+ import * as i4 from "@abp/ng.core";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "@angular/forms";
12
+ import * as i7 from "devextreme-angular";
13
+ import * as i8 from "devextreme-angular/ui/nested";
14
+ import * as i9 from "devextreme-angular/core";
15
15
  export class HitDocumentScenarioComponent {
16
- constructor(service, companyService, confirmation) {
16
+ constructor(service, companyService, confirmation, localization) {
17
17
  this.service = service;
18
18
  this.companyService = companyService;
19
19
  this.confirmation = confirmation;
20
+ this.localization = localization;
20
21
  this.data = [];
21
22
  this.companies = [];
22
23
  this.isLoading = false;
@@ -25,11 +26,12 @@ export class HitDocumentScenarioComponent {
25
26
  this.editingId = null;
26
27
  this.selectedScenario = null;
27
28
  this.selectedRowKeys = [];
29
+ this.legBehaviors = [];
30
+ this.form = this.buildEmptyForm();
28
31
  this.legBehaviors = [
29
- { value: LegBehavior.IntermediateChain, label: 'Ara Şirket' },
30
- { value: LegBehavior.ConstructionChain, label: 'Construction' },
32
+ { value: LegBehavior.IntermediateChain, label: this.localization.instant('FBDocumentFlow::LegBehavior:IntermediateChain') },
33
+ { value: LegBehavior.ConstructionChain, label: this.localization.instant('FBDocumentFlow::LegBehavior:ConstructionChain') },
31
34
  ];
32
- this.form = this.buildEmptyForm();
33
35
  }
34
36
  ngOnInit() {
35
37
  this.companyService.getList({ maxResultCount: 1000, skipCount: 0, isActive: true }).subscribe(result => (this.companies = result.items));
@@ -61,7 +63,9 @@ export class HitDocumentScenarioComponent {
61
63
  const chain = [legs[0].sourceCompanyName ?? this.companyName(legs[0].sourceCompanyId)];
62
64
  for (const leg of legs) {
63
65
  const targetName = leg.targetCompanyName ?? this.companyName(leg.targetCompanyId);
64
- chain.push(leg.legBehavior === LegBehavior.ConstructionChain ? `${targetName} (Construction)` : targetName);
66
+ chain.push(leg.legBehavior === LegBehavior.ConstructionChain
67
+ ? this.localization.instant('FBDocumentFlow::ConstructionChainTargetLabel', targetName)
68
+ : targetName);
65
69
  }
66
70
  return chain.join(' → ');
67
71
  }
@@ -73,9 +77,9 @@ export class HitDocumentScenarioComponent {
73
77
  // Siparişli Mal Girişi (OPDN) → Satıcı Faturası (OPCH). "Mal Girişi" kısaltması OPDN'nin tam
74
78
  // adını yansıtmıyordu (kullanıcı geri bildirimiyle tespit edildi). SAP kısa tablo adları (OINV/OPCH
75
79
  // dahil) tüm belge tiplerinde tutarlı şekilde gösterilir.
76
- return `${source} Müşteri Faturası (OINV) ${target} Satınalma Siparişi (OPOR) → Satınalma Siparişli Mal Girişi (OPDN) → Satıcı Faturası (OPCH)`;
80
+ return this.localization.instant('FBDocumentFlow::ScenarioConstructionLegStep', source, target);
77
81
  }
78
- return `${source} Müşteri Faturası (OINV) ${target} Satıcı Faturası (OPCH) → ${target} Müşteri Faturası (OINV)`;
82
+ return this.localization.instant('FBDocumentFlow::ScenarioIntermediateLegStep', source, target);
79
83
  }
80
84
  openCreate() {
81
85
  this.editingId = null;
@@ -88,7 +92,9 @@ export class HitDocumentScenarioComponent {
88
92
  name: row.name ?? '',
89
93
  description: row.description ?? '',
90
94
  isActive: row.isActive,
91
- legs: row.legs.map(l => ({
95
+ legs: [...row.legs]
96
+ .sort((a, b) => a.sequenceNo - b.sequenceNo)
97
+ .map(l => ({
92
98
  id: l.id,
93
99
  sourceCompanyId: l.sourceCompanyId,
94
100
  targetCompanyId: l.targetCompanyId,
@@ -142,10 +148,10 @@ export class HitDocumentScenarioComponent {
142
148
  return { name: '', description: '', isActive: true, legs: [] };
143
149
  }
144
150
  }
145
- HitDocumentScenarioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioComponent, deps: [{ token: i1.DocumentScenarioService }, { token: i2.SapCompanyProfileService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
146
- HitDocumentScenarioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitDocumentScenarioComponent, selector: "hit-document-scenario", ngImport: i0, template: "<div class=\"card\">\n <div class=\"card-header py-3\">\n <div class=\"row align-items-center\">\n <div class=\"col\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentScenarios' | abpLocalization }}</h5>\n </div>\n <div class=\"col-auto d-flex align-items-center gap-2\">\n <button class=\"btn btn-sm btn-primary\" (click)=\"openCreate()\">\n <i class=\"fa fa-plus me-1\"></i>Yeni Senaryo\n </button>\n <button class=\"btn btn-sm btn-outline-primary\" (click)=\"loadData()\" [disabled]=\"isLoading\">\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-body pt-3\">\n <div *ngIf=\"isLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isLoading\"\n [dataSource]=\"data\"\n keyExpr=\"id\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [(selectedRowKeys)]=\"selectedRowKeys\"\n [hoverStateEnabled]=\"true\"\n (onRowClick)=\"selectRow($event.data)\"\n (onSelectionChanged)=\"selectRow($event.selectedRowsData[0])\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"single\"></dxo-selection>\n\n <dxi-column dataField=\"name\" caption=\"Senaryo Ad\u0131\"></dxi-column>\n <dxi-column caption=\"Ba\u015Flang\u0131\u00E7 / Devam Ak\u0131\u015F\u0131\" cellTemplate=\"flowTemplate\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"description\" caption=\"A\u00E7\u0131klama\"></dxi-column>\n <dxi-column caption=\"Bacak Say\u0131s\u0131\" cellTemplate=\"legCountTemplate\" [width]=\"120\"></dxi-column>\n <dxi-column dataField=\"isActive\" caption=\"Aktif\" dataType=\"boolean\" [width]=\"80\"></dxi-column>\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"140\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'flowTemplate'\">{{ flowSummary(cell.data) }}</div>\n\n <div *dxTemplate=\"let cell of 'legCountTemplate'\">{{ cell.data.legs?.length || 0 }}</div>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary me-1\" (click)=\"openEdit(cell.data)\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"btn btn-sm btn-outline-danger\" (click)=\"delete(cell.data)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </dx-data-grid>\n\n <div class=\"card mt-3\" *ngIf=\"selectedScenario\">\n <div class=\"card-body\">\n <h6 class=\"mb-2\">Senaryo Detay\u0131 - {{ selectedScenario.name }}</h6>\n <p class=\"text-muted mb-2\" *ngIf=\"selectedScenario.description\">{{ selectedScenario.description }}</p>\n <ol class=\"mb-2\">\n <li *ngFor=\"let leg of selectedScenario.legs\">{{ legStepText(leg) }}</li>\n </ol>\n <small class=\"text-muted d-block\">\n Haz\u0131r senaryolar proje ba\u011F\u0131ms\u0131zd\u0131r. Kaynak belgenin header Project de\u011Feri her \u015Firkette ilgili OPRJ kayd\u0131 ile e\u015Fle\u015Ftirilir.\n </small>\n <small class=\"text-muted d-block\">\n Kullan\u0131c\u0131n\u0131n aktar\u0131m s\u0131ras\u0131nda yapt\u0131\u011F\u0131 manuel de\u011Fi\u015Fiklik yaln\u0131zca i\u015Flem \u00E7al\u0131\u015Fma kopyas\u0131n\u0131 etkiler; bu senaryo tan\u0131m\u0131 de\u011Fi\u015Fmez.\n </small>\n </div>\n </div>\n </div>\n</div>\n\n<abp-modal [(visible)]=\"isModalOpen\" [options]=\"{ size: 'lg' }\">\n <ng-template #abpHeader>\n <h3>{{ editingId ? 'Senaryo D\u00FCzenle' : 'Yeni Haz\u0131r Senaryo' }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <form>\n <div class=\"row\">\n <div class=\"col-8 mb-3\">\n <label class=\"form-label\">Senaryo Ad\u0131</label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"form.name\" name=\"name\" required />\n </div>\n <div class=\"col-4 mb-3 d-flex align-items-end\">\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"form.isActive\" name=\"isActive\" id=\"scIsActive\" />\n <label class=\"form-check-label\" for=\"scIsActive\">Aktif</label>\n </div>\n </div>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">A\u00E7\u0131klama</label>\n <textarea class=\"form-control\" rows=\"2\" [(ngModel)]=\"form.description\" name=\"description\"></textarea>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\">Bacaklar</label>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"addLeg()\">\n <i class=\"fa fa-plus me-1\"></i>Bacak Ekle\n </button>\n </div>\n\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Kaynak \u015Eirket</th>\n <th>Hedef \u015Eirket</th>\n <th>Davran\u0131\u015F</th>\n <th>Not</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let leg of form.legs; let i = index\">\n <td>\n <select\n *ngIf=\"i === 0; else sourceText\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"leg.sourceCompanyId\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n <ng-template #sourceText>\n <span class=\"form-control form-control-sm bg-light\">{{ companyName(leg.sourceCompanyId) }}</span>\n </ng-template>\n </td>\n <td>\n <select\n class=\"form-select form-select-sm\"\n [ngModel]=\"leg.targetCompanyId\"\n (ngModelChange)=\"updateLegTarget(i, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </td>\n <td>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"leg.legBehavior\" [ngModelOptions]=\"{ standalone: true }\">\n <option *ngFor=\"let b of legBehaviors\" [ngValue]=\"b.value\">{{ b.label }}</option>\n </select>\n </td>\n <td>\n <input type=\"text\" class=\"form-control form-control-sm\" [(ngModel)]=\"leg.notes\" [ngModelOptions]=\"{ standalone: true }\" />\n </td>\n <td>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLeg(leg)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n </ng-template>\n\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\" [disabled]=\"isSaving\">\n <span *ngIf=\"isSaving\" class=\"spinner-border spinner-border-sm me-1\"></span>\n {{ 'AbpUi::Save' | abpLocalization }}\n </button>\n </ng-template>\n</abp-modal>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i7.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i7.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i7.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "directive", type: i8.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "pipe", type: i9.LocalizationPipe, name: "abpLocalization" }] });
151
+ HitDocumentScenarioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioComponent, deps: [{ token: i1.DocumentScenarioService }, { token: i2.SapCompanyProfileService }, { token: i3.ConfirmationService }, { token: i4.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
152
+ HitDocumentScenarioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitDocumentScenarioComponent, selector: "hit-document-scenario", ngImport: i0, template: "<div class=\"card\">\n <div class=\"card-header py-3\">\n <div class=\"row align-items-center\">\n <div class=\"col\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentScenarios' | abpLocalization }}</h5>\n </div>\n <div class=\"col-auto d-flex align-items-center gap-2\">\n <button class=\"btn btn-sm btn-primary\" (click)=\"openCreate()\">\n <i class=\"fa fa-plus me-1\"></i>{{ 'FBDocumentFlow::NewScenario' | abpLocalization }}\n </button>\n <button class=\"btn btn-sm btn-outline-primary\" (click)=\"loadData()\" [disabled]=\"isLoading\">\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-body pt-3\">\n <div *ngIf=\"isLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">{{ 'FBDocumentFlow::Loading' | abpLocalization }}</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isLoading\"\n [dataSource]=\"data\"\n keyExpr=\"id\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [(selectedRowKeys)]=\"selectedRowKeys\"\n [hoverStateEnabled]=\"true\"\n (onRowClick)=\"selectRow($event.data)\"\n (onSelectionChanged)=\"selectRow($event.selectedRowsData[0])\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"single\"></dxo-selection>\n\n <dxi-column dataField=\"name\" [caption]=\"'FBDocumentFlow::ScenarioName' | abpLocalization\"></dxi-column>\n <dxi-column [caption]=\"'FBDocumentFlow::FlowSummaryColumn' | abpLocalization\" cellTemplate=\"flowTemplate\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"description\" [caption]=\"'FBDocumentFlow::Description' | abpLocalization\"></dxi-column>\n <dxi-column [caption]=\"'FBDocumentFlow::LegCount' | abpLocalization\" cellTemplate=\"legCountTemplate\" [width]=\"120\"></dxi-column>\n <dxi-column dataField=\"isActive\" [caption]=\"'FBDocumentFlow::Active' | abpLocalization\" dataType=\"boolean\" [width]=\"80\"></dxi-column>\n <dxi-column [caption]=\"'FBDocumentFlow::Actions' | abpLocalization\" cellTemplate=\"actionsTemplate\" [width]=\"140\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'flowTemplate'\">{{ flowSummary(cell.data) }}</div>\n\n <div *dxTemplate=\"let cell of 'legCountTemplate'\">{{ cell.data.legs?.length || 0 }}</div>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary me-1\" (click)=\"openEdit(cell.data)\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"btn btn-sm btn-outline-danger\" (click)=\"delete(cell.data)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </dx-data-grid>\n\n <div class=\"card mt-3\" *ngIf=\"selectedScenario\">\n <div class=\"card-body\">\n <h6 class=\"mb-2\">{{ 'FBDocumentFlow::ScenarioDetailTitle' | abpLocalization: selectedScenario.name }}</h6>\n <p class=\"text-muted mb-2\" *ngIf=\"selectedScenario.description\">{{ selectedScenario.description }}</p>\n <ol class=\"mb-2\">\n <li *ngFor=\"let leg of selectedScenario.legs\">{{ legStepText(leg) }}</li>\n </ol>\n <small class=\"text-muted d-block\">\n {{ 'FBDocumentFlow::ScenarioProjectIndependentNote' | abpLocalization }}\n </small>\n <small class=\"text-muted d-block\">\n {{ 'FBDocumentFlow::ScenarioManualChangeNote' | abpLocalization }}\n </small>\n </div>\n </div>\n </div>\n</div>\n\n<abp-modal [(visible)]=\"isModalOpen\" [options]=\"{ size: 'lg' }\">\n <ng-template #abpHeader>\n <h3>{{ (editingId ? 'FBDocumentFlow::EditScenario' : 'FBDocumentFlow::NewReadyScenario') | abpLocalization }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <form>\n <div class=\"row\">\n <div class=\"col-8 mb-3\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::ScenarioName' | abpLocalization }}</label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"form.name\" name=\"name\" required />\n </div>\n <div class=\"col-4 mb-3 d-flex align-items-end\">\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"form.isActive\" name=\"isActive\" id=\"scIsActive\" />\n <label class=\"form-check-label\" for=\"scIsActive\">{{ 'FBDocumentFlow::Active' | abpLocalization }}</label>\n </div>\n </div>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::Description' | abpLocalization }}</label>\n <textarea class=\"form-control\" rows=\"2\" [(ngModel)]=\"form.description\" name=\"description\"></textarea>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\">{{ 'FBDocumentFlow::Legs' | abpLocalization }}</label>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"addLeg()\">\n <i class=\"fa fa-plus me-1\"></i>{{ 'FBDocumentFlow::AddLeg' | abpLocalization }}\n </button>\n </div>\n\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>{{ 'FBDocumentFlow::SourceCompany' | abpLocalization }}</th>\n <th>{{ 'FBDocumentFlow::TargetCompany' | abpLocalization }}</th>\n <th>{{ 'FBDocumentFlow::Behavior' | abpLocalization }}</th>\n <th>{{ 'FBDocumentFlow::Notes' | abpLocalization }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let leg of form.legs; let i = index\">\n <td>\n <select\n *ngIf=\"i === 0; else sourceText\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"leg.sourceCompanyId\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>{{ 'FBDocumentFlow::SelectPlaceholder' | abpLocalization }}</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n <ng-template #sourceText>\n <span class=\"form-control form-control-sm bg-light\">{{ companyName(leg.sourceCompanyId) }}</span>\n </ng-template>\n </td>\n <td>\n <select\n class=\"form-select form-select-sm\"\n [ngModel]=\"leg.targetCompanyId\"\n (ngModelChange)=\"updateLegTarget(i, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>{{ 'FBDocumentFlow::SelectPlaceholder' | abpLocalization }}</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </td>\n <td>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"leg.legBehavior\" [ngModelOptions]=\"{ standalone: true }\">\n <option *ngFor=\"let b of legBehaviors\" [ngValue]=\"b.value\">{{ b.label }}</option>\n </select>\n </td>\n <td>\n <input type=\"text\" class=\"form-control form-control-sm\" [(ngModel)]=\"leg.notes\" [ngModelOptions]=\"{ standalone: true }\" />\n </td>\n <td>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLeg(leg)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n </ng-template>\n\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\" [disabled]=\"isSaving\">\n <span *ngIf=\"isSaving\" class=\"spinner-border spinner-border-sm me-1\"></span>\n {{ 'AbpUi::Save' | abpLocalization }}\n </button>\n </ng-template>\n</abp-modal>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.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: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "component", type: i7.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i8.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i8.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i8.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i8.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i8.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i8.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i8.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "directive", type: i9.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] });
147
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentScenarioComponent, decorators: [{
148
154
  type: Component,
149
- args: [{ selector: 'hit-document-scenario', template: "<div class=\"card\">\n <div class=\"card-header py-3\">\n <div class=\"row align-items-center\">\n <div class=\"col\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentScenarios' | abpLocalization }}</h5>\n </div>\n <div class=\"col-auto d-flex align-items-center gap-2\">\n <button class=\"btn btn-sm btn-primary\" (click)=\"openCreate()\">\n <i class=\"fa fa-plus me-1\"></i>Yeni Senaryo\n </button>\n <button class=\"btn btn-sm btn-outline-primary\" (click)=\"loadData()\" [disabled]=\"isLoading\">\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-body pt-3\">\n <div *ngIf=\"isLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isLoading\"\n [dataSource]=\"data\"\n keyExpr=\"id\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [(selectedRowKeys)]=\"selectedRowKeys\"\n [hoverStateEnabled]=\"true\"\n (onRowClick)=\"selectRow($event.data)\"\n (onSelectionChanged)=\"selectRow($event.selectedRowsData[0])\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"single\"></dxo-selection>\n\n <dxi-column dataField=\"name\" caption=\"Senaryo Ad\u0131\"></dxi-column>\n <dxi-column caption=\"Ba\u015Flang\u0131\u00E7 / Devam Ak\u0131\u015F\u0131\" cellTemplate=\"flowTemplate\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"description\" caption=\"A\u00E7\u0131klama\"></dxi-column>\n <dxi-column caption=\"Bacak Say\u0131s\u0131\" cellTemplate=\"legCountTemplate\" [width]=\"120\"></dxi-column>\n <dxi-column dataField=\"isActive\" caption=\"Aktif\" dataType=\"boolean\" [width]=\"80\"></dxi-column>\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"140\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'flowTemplate'\">{{ flowSummary(cell.data) }}</div>\n\n <div *dxTemplate=\"let cell of 'legCountTemplate'\">{{ cell.data.legs?.length || 0 }}</div>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary me-1\" (click)=\"openEdit(cell.data)\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"btn btn-sm btn-outline-danger\" (click)=\"delete(cell.data)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </dx-data-grid>\n\n <div class=\"card mt-3\" *ngIf=\"selectedScenario\">\n <div class=\"card-body\">\n <h6 class=\"mb-2\">Senaryo Detay\u0131 - {{ selectedScenario.name }}</h6>\n <p class=\"text-muted mb-2\" *ngIf=\"selectedScenario.description\">{{ selectedScenario.description }}</p>\n <ol class=\"mb-2\">\n <li *ngFor=\"let leg of selectedScenario.legs\">{{ legStepText(leg) }}</li>\n </ol>\n <small class=\"text-muted d-block\">\n Haz\u0131r senaryolar proje ba\u011F\u0131ms\u0131zd\u0131r. Kaynak belgenin header Project de\u011Feri her \u015Firkette ilgili OPRJ kayd\u0131 ile e\u015Fle\u015Ftirilir.\n </small>\n <small class=\"text-muted d-block\">\n Kullan\u0131c\u0131n\u0131n aktar\u0131m s\u0131ras\u0131nda yapt\u0131\u011F\u0131 manuel de\u011Fi\u015Fiklik yaln\u0131zca i\u015Flem \u00E7al\u0131\u015Fma kopyas\u0131n\u0131 etkiler; bu senaryo tan\u0131m\u0131 de\u011Fi\u015Fmez.\n </small>\n </div>\n </div>\n </div>\n</div>\n\n<abp-modal [(visible)]=\"isModalOpen\" [options]=\"{ size: 'lg' }\">\n <ng-template #abpHeader>\n <h3>{{ editingId ? 'Senaryo D\u00FCzenle' : 'Yeni Haz\u0131r Senaryo' }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <form>\n <div class=\"row\">\n <div class=\"col-8 mb-3\">\n <label class=\"form-label\">Senaryo Ad\u0131</label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"form.name\" name=\"name\" required />\n </div>\n <div class=\"col-4 mb-3 d-flex align-items-end\">\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"form.isActive\" name=\"isActive\" id=\"scIsActive\" />\n <label class=\"form-check-label\" for=\"scIsActive\">Aktif</label>\n </div>\n </div>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">A\u00E7\u0131klama</label>\n <textarea class=\"form-control\" rows=\"2\" [(ngModel)]=\"form.description\" name=\"description\"></textarea>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\">Bacaklar</label>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"addLeg()\">\n <i class=\"fa fa-plus me-1\"></i>Bacak Ekle\n </button>\n </div>\n\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Kaynak \u015Eirket</th>\n <th>Hedef \u015Eirket</th>\n <th>Davran\u0131\u015F</th>\n <th>Not</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let leg of form.legs; let i = index\">\n <td>\n <select\n *ngIf=\"i === 0; else sourceText\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"leg.sourceCompanyId\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n <ng-template #sourceText>\n <span class=\"form-control form-control-sm bg-light\">{{ companyName(leg.sourceCompanyId) }}</span>\n </ng-template>\n </td>\n <td>\n <select\n class=\"form-select form-select-sm\"\n [ngModel]=\"leg.targetCompanyId\"\n (ngModelChange)=\"updateLegTarget(i, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>Se\u00E7iniz</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </td>\n <td>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"leg.legBehavior\" [ngModelOptions]=\"{ standalone: true }\">\n <option *ngFor=\"let b of legBehaviors\" [ngValue]=\"b.value\">{{ b.label }}</option>\n </select>\n </td>\n <td>\n <input type=\"text\" class=\"form-control form-control-sm\" [(ngModel)]=\"leg.notes\" [ngModelOptions]=\"{ standalone: true }\" />\n </td>\n <td>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLeg(leg)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n </ng-template>\n\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\" [disabled]=\"isSaving\">\n <span *ngIf=\"isSaving\" class=\"spinner-border spinner-border-sm me-1\"></span>\n {{ 'AbpUi::Save' | abpLocalization }}\n </button>\n </ng-template>\n</abp-modal>\n" }]
150
- }], ctorParameters: function () { return [{ type: i1.DocumentScenarioService }, { type: i2.SapCompanyProfileService }, { type: i3.ConfirmationService }]; } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW9zL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW9zL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBdUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBTUwsV0FBVyxHQUNaLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7O0FBTzNDLE1BQU0sT0FBTyw0QkFBNEI7SUFnQnZDLFlBQ1UsT0FBZ0MsRUFDaEMsY0FBd0MsRUFDeEMsWUFBaUM7UUFGakMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3hDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQWxCM0MsU0FBSSxHQUEwQixFQUFFLENBQUM7UUFDakMsY0FBUyxHQUEyQixFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLHFCQUFn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QUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzdDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakUsQ0FBQzs7eUhBdEpVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDZEQ2pCekMsK2xRQStLQTsyRkQ5SmEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgZmlsdGVyLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDcmVhdGVVcGRhdGVEb2N1bWVudFNjZW5hcmlvRHRvLFxuICBDcmVhdGVVcGRhdGVEb2N1bWVudFNjZW5hcmlvTGVnRHRvLFxuICBEb2N1bWVudFNjZW5hcmlvRHRvLFxuICBEb2N1bWVudFNjZW5hcmlvTGVnRHRvLFxuICBEb2N1bWVudFNjZW5hcmlvU2VydmljZSxcbiAgTGVnQmVoYXZpb3IsXG59IGZyb20gJy4uLy4uLy4uL3Byb3h5L2RvY3VtZW50LXNjZW5hcmlvcyc7XG5pbXBvcnQgeyBTYXBDb21wYW55UHJvZmlsZUR0bywgU2FwQ29tcGFueVByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvc2FwLWNvbXBhbnktcHJvZmlsZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoaXQtZG9jdW1lbnQtc2NlbmFyaW8nLFxuICB0ZW1wbGF0ZVVybDogJy4vaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgSGl0RG9jdW1lbnRTY2VuYXJpb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRhdGE6IERvY3VtZW50U2NlbmFyaW9EdG9bXSA9IFtdO1xuICBjb21wYW5pZXM6IFNhcENvbXBhbnlQcm9maWxlRHRvW10gPSBbXTtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIGlzTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzU2F2aW5nID0gZmFsc2U7XG4gIGVkaXRpbmdJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkU2NlbmFyaW86IERvY3VtZW50U2NlbmFyaW9EdG8gfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRSb3dLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZWdCZWhhdmlvcnMgPSBbXG4gICAgeyB2YWx1ZTogTGVnQmVoYXZpb3IuSW50ZXJtZWRpYXRlQ2hhaW4sIGxhYmVsOiAnQXJhIMWeaXJrZXQnIH0sXG4gICAgeyB2YWx1ZTogTGVnQmVoYXZpb3IuQ29uc3RydWN0aW9uQ2hhaW4sIGxhYmVsOiAnQ29uc3RydWN0aW9uJyB9LFxuICBdO1xuXG4gIGZvcm06IENyZWF0ZVVwZGF0ZURvY3VtZW50U2NlbmFyaW9EdG8gPSB0aGlzLmJ1aWxkRW1wdHlGb3JtKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBEb2N1bWVudFNjZW5hcmlvU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBhbnlTZXJ2aWNlOiBTYXBDb21wYW55UHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29tcGFueVNlcnZpY2UuZ2V0TGlzdCh7IG1heFJlc3VsdENvdW50OiAxMDAwLCBza2lwQ291bnQ6IDAsIGlzQWN0aXZlOiB0cnVlIH0pLnN1YnNjcmliZShyZXN1bHQgPT4gKHRoaXMuY29tcGFuaWVzID0gcmVzdWx0Lml0ZW1zKSk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbG9hZERhdGEoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZVxuICAgICAgLmdldExpc3QoeyBtYXhSZXN1bHRDb3VudDogMTAwMCwgc2tpcENvdW50OiAwLCBzb3J0aW5nOiAnbmFtZSBhc2MnIH0pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4gKHRoaXMuZGF0YSA9IHJlc3VsdC5pdGVtcykpO1xuICB9XG5cbiAgY29tcGFueU5hbWUoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFuaWVzLmZpbmQoYyA9PiBjLmlkID09PSBpZCk/LmNvbXBhbnlOYW1lID8/IGlkO1xuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogRG9jdW1lbnRTY2VuYXJpb0R0byB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghcm93KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRTY2VuYXJpbyA9IHJvdztcbiAgICB0aGlzLnNlbGVjdGVkUm93S2V5cyA9IFtyb3cuaWRdO1xuICB9XG5cbiAgLy8gXCJCYcWfbGFuZ8Sxw6cgLyBEZXZhbSBBa8SxxZ/EsVwiIHPDvHR1bnUgacOnaW46IHppbmNpcmluIGtheW5hayDihpIgaGVkZWYg4oaSIGhlZGVmIC4uLiDFn2VrbGluZGUga8Sxc2Egw7Z6ZXRpLlxuICBmbG93U3VtbWFyeShzY2VuYXJpbzogRG9jdW1lbnRTY2VuYXJpb0R0byk6IHN0cmluZyB7XG4gICAgY29uc3QgbGVncyA9IFsuLi4oc2NlbmFyaW8ubGVncyA/PyBbXSldLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2VObyAtIGIuc2VxdWVuY2VObyk7XG4gICAgaWYgKGxlZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhaW4gPSBbbGVnc1swXS5zb3VyY2VDb21wYW55TmFtZSA/PyB0aGlzLmNvbXBhbnlOYW1lKGxlZ3NbMF0uc291cmNlQ29tcGFueUlkKV07XG4gICAgZm9yIChjb25zdCBsZWcgb2YgbGVncykge1xuICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxlZy50YXJnZXRDb21wYW55TmFtZSA/PyB0aGlzLmNvbXBhbnlOYW1lKGxlZy50YXJnZXRDb21wYW55SWQpO1xuICAgICAgY2hhaW4ucHVzaChsZWcubGVnQmVoYXZpb3IgPT09IExlZ0JlaGF2aW9yLkNvbnN0cnVjdGlvbkNoYWluID8gYCR7dGFyZ2V0TmFtZX0gKENvbnN0cnVjdGlvbilgIDogdGFyZ2V0TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYWluLmpvaW4oJyDihpIgJyk7XG4gIH1cblxuICBsZWdTdGVwVGV4dChsZWc6IERvY3VtZW50U2NlbmFyaW9MZWdEdG8pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29tcGFueU5hbWUobGVnLnNvdXJjZUNvbXBhbnlJZCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jb21wYW55TmFtZShsZWcudGFyZ2V0Q29tcGFueUlkKTtcbiAgICBpZiAobGVnLmxlZ0JlaGF2aW9yID09PSBMZWdCZWhhdmlvci5Db25zdHJ1Y3Rpb25DaGFpbikge1xuICAgICAgLy8gU3BlYyDCpzcgLSBDb25zdHJ1Y3Rpb24gYmFjYcSfxLFuxLFuIHRhbSBiZWxnZSB6aW5jaXJpOiBTYXTEsW5hbG1hIFNpcGFyacWfaSAoT1BPUikg4oaSIFNhdMSxbmFsbWFcbiAgICAgIC8vIFNpcGFyacWfbGkgTWFsIEdpcmnFn2kgKE9QRE4pIOKGkiBTYXTEsWPEsSBGYXR1cmFzxLEgKE9QQ0gpLiBcIk1hbCBHaXJpxZ9pXCIga8Sxc2FsdG1hc8SxIE9QRE4nbmluIHRhbVxuICAgICAgLy8gYWTEsW7EsSB5YW5zxLF0bcSxeW9yZHUgKGt1bGxhbsSxY8SxIGdlcmkgYmlsZGlyaW1peWxlIHRlc3BpdCBlZGlsZGkpLiBTQVAga8Sxc2EgdGFibG8gYWRsYXLEsSAoT0lOVi9PUENIXG4gICAgICAvLyBkYWhpbCkgdMO8bSBiZWxnZSB0aXBsZXJpbmRlIHR1dGFybMSxIMWfZWtpbGRlIGfDtnN0ZXJpbGlyLlxuICAgICAgcmV0dXJuIGAke3NvdXJjZX0gTcO8xZ90ZXJpIEZhdHVyYXPEsSAoT0lOVikg4oaSICR7dGFyZ2V0fSBTYXTEsW5hbG1hIFNpcGFyacWfaSAoT1BPUikg4oaSIFNhdMSxbmFsbWEgU2lwYXJpxZ9saSBNYWwgR2lyacWfaSAoT1BETikg4oaSIFNhdMSxY8SxIEZhdHVyYXPEsSAoT1BDSClgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c291cmNlfSBNw7zFn3RlcmkgRmF0dXJhc8SxIChPSU5WKSDihpIgJHt0YXJnZXR9IFNhdMSxY8SxIEZhdHVyYXPEsSAoT1BDSCkg4oaSICR7dGFyZ2V0fSBNw7zFn3RlcmkgRmF0dXJhc8SxIChPSU5WKWA7XG4gIH1cblxuICBvcGVuQ3JlYXRlKCkge1xuICAgIHRoaXMuZWRpdGluZ0lkID0gbnVsbDtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmJ1aWxkRW1wdHlGb3JtKCk7XG4gICAgdGhpcy5pc01vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBvcGVuRWRpdChyb3c6IERvY3VtZW50U2NlbmFyaW9EdG8pIHtcbiAgICB0aGlzLmVkaXRpbmdJZCA9IHJvdy5pZDtcbiAgICB0aGlzLmZvcm0gPSB7XG4gICAgICBuYW1lOiByb3cubmFtZSA/PyAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiByb3cuZGVzY3JpcHRpb24gPz8gJycsXG4gICAgICBpc0FjdGl2ZTogcm93LmlzQWN0aXZlLFxuICAgICAgbGVnczogcm93LmxlZ3MubWFwKGwgPT4gKHtcbiAgICAgICAgaWQ6IGwuaWQsXG4gICAgICAgIHNvdXJjZUNvbXBhbnlJZDogbC5zb3VyY2VDb21wYW55SWQsXG4gICAgICAgIHRhcmdldENvbXBhbnlJZDogbC50YXJnZXRDb21wYW55SWQsXG4gICAgICAgIGxlZ0JlaGF2aW9yOiBsLmxlZ0JlaGF2aW9yLFxuICAgICAgICBub3RlczogbC5ub3RlcyxcbiAgICAgIH0pKSxcbiAgICB9O1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgLy8gxLBsayBiYWNhxJ/EsW4ga2F5bmHEn8SxIHNlbmFyeW9udW4gYmHFn2xhbmfEscOnIG5va3Rhc8SxIG9sZHXEn3UgacOnaW4gc2VyYmVzdMOnZSBzZcOnaWxpci4gU29ucmFraSBiYWNha2xhcsSxblxuICAvLyBrYXluYcSfxLEgaXNlIERvY3VtZW50VHJhbnNmZXIgw6dhbMSxxZ9tYSBrb3B5YXPEsW5kYWtpIGF5bsSxIGt1cmFsbGEgKHNwZWMgwqc0L8KnMykgYmlyIMO2bmNla2kgYmFjYcSfxLFuXG4gIC8vIGhlZGVmaW5kZW4gb3RvbWF0aWsgdMO8cmV0aWxpciAtIGFrc2kgaGFsZGUgYnVyYWRhIGRhICh3b3JraW5nIGNvcHknZGUgZMO8emVsdGlsZW4gaGF0YW7EsW4gYXluxLFzxLEpXG4gIC8vIGtheW5hay9oZWRlZiBiaXJiaXJpbmRlbiBiYcSfxLFtc8SxeiBzZcOnaWxpcCB6aW5jaXIgdHV0YXJzxLF6IGhhbGUgZ2VsZWJpbGlyZGkuXG4gIGFkZExlZygpIHtcbiAgICBjb25zdCBsYXN0TGVnID0gdGhpcy5mb3JtLmxlZ3NbdGhpcy5mb3JtLmxlZ3MubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5mb3JtLmxlZ3MucHVzaCh7XG4gICAgICBzb3VyY2VDb21wYW55SWQ6IGxhc3RMZWc/LnRhcmdldENvbXBhbnlJZCA/PyAnJyxcbiAgICAgIHRhcmdldENvbXBhbnlJZDogJycsXG4gICAgICBsZWdCZWhhdmlvcjogTGVnQmVoYXZpb3IuSW50ZXJtZWRpYXRlQ2hhaW4sXG4gICAgICBub3RlczogJycsXG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVMZWcobGVnOiBDcmVhdGVVcGRhdGVEb2N1bWVudFNjZW5hcmlvTGVnRHRvKSB7XG4gICAgdGhpcy5mb3JtLmxlZ3MgPSB0aGlzLmZvcm0ubGVncy5maWx0ZXIobCA9PiBsICE9PSBsZWcpO1xuICAgIHRoaXMucmVsaW5rTGVnU291cmNlcygpO1xuICB9XG5cbiAgdXBkYXRlTGVnVGFyZ2V0KGluZGV4OiBudW1iZXIsIHRhcmdldENvbXBhbnlJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5mb3JtLmxlZ3NbaW5kZXhdLnRhcmdldENvbXBhbnlJZCA9IHRhcmdldENvbXBhbnlJZDtcbiAgICB0aGlzLnJlbGlua0xlZ1NvdXJjZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsaW5rTGVnU291cmNlcygpIHtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMuZm9ybS5sZWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmZvcm0ubGVnc1tpXS5zb3VyY2VDb21wYW55SWQgPSB0aGlzLmZvcm0ubGVnc1tpIC0gMV0udGFyZ2V0Q29tcGFueUlkO1xuICAgIH1cbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG4gICAgY29uc3QgcmVxdWVzdCQgPSB0aGlzLmVkaXRpbmdJZCA/IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5lZGl0aW5nSWQsIHRoaXMuZm9ybSkgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKHRoaXMuZm9ybSk7XG4gICAgcmVxdWVzdCQucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc1NhdmluZyA9IGZhbHNlKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmlzTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGUocm93OiBEb2N1bWVudFNjZW5hcmlvRHRvKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25cbiAgICAgIC53YXJuKCdGQkRvY3VtZW50Rmxvdzo6RGVsZXRlQ29uZmlybWF0aW9uTWVzc2FnZScsICdGQkRvY3VtZW50Rmxvdzo6QXJlWW91U3VyZScpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHN0YXR1cyA9PiBzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMuY29uZmlybSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNlcnZpY2UuZGVsZXRlKHJvdy5pZCkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZERhdGEoKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRW1wdHlGb3JtKCk6IENyZWF0ZVVwZGF0ZURvY3VtZW50U2NlbmFyaW9EdG8ge1xuICAgIHJldHVybiB7IG5hbWU6ICcnLCBkZXNjcmlwdGlvbjogJycsIGlzQWN0aXZlOiB0cnVlLCBsZWdzOiBbXSB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcHktM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGUgbWItMFwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6TWVudTpEb2N1bWVudFNjZW5hcmlvcycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2g1PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvcGVuQ3JlYXRlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbWUtMVwiPjwvaT5ZZW5pIFNlbmFyeW9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiAoY2xpY2spPVwibG9hZERhdGEoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2ggbWUtMVwiPjwvaT57eyAnQWJwVWk6OlJlZnJlc2gnIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTNcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPlnDvGtsZW5peW9yLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHgtZGF0YS1ncmlkXG4gICAgICAqbmdJZj1cIiFpc0xvYWRpbmdcIlxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVwiXG4gICAgICBrZXlFeHByPVwiaWRcIlxuICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxuICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbKHNlbGVjdGVkUm93S2V5cyldPVwic2VsZWN0ZWRSb3dLZXlzXCJcbiAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgIChvblJvd0NsaWNrKT1cInNlbGVjdFJvdygkZXZlbnQuZGF0YSlcIlxuICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJzZWxlY3RSb3coJGV2ZW50LnNlbGVjdGVkUm93c0RhdGFbMF0pXCJcbiAgICA+XG4gICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiNTBcIj48L2R4by1wYWdpbmc+XG4gICAgICA8ZHhvLXBhZ2VyIFt2aXNpYmxlXT1cInRydWVcIiBbc2hvd0luZm9dPVwidHJ1ZVwiIFtzaG93TmF2aWdhdGlvbkJ1dHRvbnNdPVwidHJ1ZVwiPjwvZHhvLXBhZ2VyPlxuICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxuICAgICAgPGR4by1oZWFkZXItZmlsdGVyIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxuICAgICAgPGR4by1zb3J0aW5nIG1vZGU9XCJtdWx0aXBsZVwiPjwvZHhvLXNvcnRpbmc+XG4gICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxuXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgY2FwdGlvbj1cIlNlbmFyeW8gQWTEsVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCJCYcWfbGFuZ8Sxw6cgLyBEZXZhbSBBa8SxxZ/EsVwiIGNlbGxUZW1wbGF0ZT1cImZsb3dUZW1wbGF0ZVwiIFthbGxvd0ZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkZXNjcmlwdGlvblwiIGNhcHRpb249XCJBw6fEsWtsYW1hXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gY2FwdGlvbj1cIkJhY2FrIFNhecSxc8SxXCIgY2VsbFRlbXBsYXRlPVwibGVnQ291bnRUZW1wbGF0ZVwiIFt3aWR0aF09XCIxMjBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpc0FjdGl2ZVwiIGNhcHRpb249XCJBa3RpZlwiIGRhdGFUeXBlPVwiYm9vbGVhblwiIFt3aWR0aF09XCI4MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCLEsMWfbGVtbGVyXCIgY2VsbFRlbXBsYXRlPVwiYWN0aW9uc1RlbXBsYXRlXCIgW3dpZHRoXT1cIjE0MFwiIFthbGxvd0ZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnZmxvd1RlbXBsYXRlJ1wiPnt7IGZsb3dTdW1tYXJ5KGNlbGwuZGF0YSkgfX08L2Rpdj5cblxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsIG9mICdsZWdDb3VudFRlbXBsYXRlJ1wiPnt7IGNlbGwuZGF0YS5sZWdzPy5sZW5ndGggfHwgMCB9fTwvZGl2PlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ2FjdGlvbnNUZW1wbGF0ZSdcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IG1lLTFcIiAoY2xpY2spPVwib3BlbkVkaXQoY2VsbC5kYXRhKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtZGFuZ2VyXCIgKGNsaWNrKT1cImRlbGV0ZShjZWxsLmRhdGEpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2R4LWRhdGEtZ3JpZD5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIG10LTNcIiAqbmdJZj1cInNlbGVjdGVkU2NlbmFyaW9cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMlwiPlNlbmFyeW8gRGV0YXnEsSAtIHt7IHNlbGVjdGVkU2NlbmFyaW8ubmFtZSB9fTwvaDY+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0yXCIgKm5nSWY9XCJzZWxlY3RlZFNjZW5hcmlvLmRlc2NyaXB0aW9uXCI+e3sgc2VsZWN0ZWRTY2VuYXJpby5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgPG9sIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbGVnIG9mIHNlbGVjdGVkU2NlbmFyaW8ubGVnc1wiPnt7IGxlZ1N0ZXBUZXh0KGxlZykgfX08L2xpPlxuICAgICAgICA8L29sPlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5cbiAgICAgICAgICBIYXrEsXIgc2VuYXJ5b2xhciBwcm9qZSBiYcSfxLFtc8SxemTEsXIuIEtheW5hayBiZWxnZW5pbiBoZWFkZXIgUHJvamVjdCBkZcSfZXJpIGhlciDFn2lya2V0dGUgaWxnaWxpIE9QUkoga2F5ZMSxIGlsZSBlxZ9sZcWfdGlyaWxpci5cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+XG4gICAgICAgICAgS3VsbGFuxLFjxLFuxLFuIGFrdGFyxLFtIHPEsXJhc8SxbmRhIHlhcHTEscSfxLEgbWFudWVsIGRlxJ9pxZ9pa2xpayB5YWxuxLF6Y2EgacWfbGVtIMOnYWzEscWfbWEga29weWFzxLFuxLEgZXRraWxlcjsgYnUgc2VuYXJ5byB0YW7EsW3EsSBkZcSfacWfbWV6LlxuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJpc01vZGFsT3BlblwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJyB9XCI+XG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxuICAgIDxoMz57eyBlZGl0aW5nSWQgPyAnU2VuYXJ5byBEw7x6ZW5sZScgOiAnWWVuaSBIYXrEsXIgU2VuYXJ5bycgfX08L2gzPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cbiAgICA8Zm9ybT5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04IG1iLTNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VuYXJ5byBBZMSxPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiZm9ybS5uYW1lXCIgbmFtZT1cIm5hbWVcIiByZXF1aXJlZCAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IG1iLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgWyhuZ01vZGVsKV09XCJmb3JtLmlzQWN0aXZlXCIgbmFtZT1cImlzQWN0aXZlXCIgaWQ9XCJzY0lzQWN0aXZlXCIgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzY0lzQWN0aXZlXCI+QWt0aWY8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkHDp8Sxa2xhbWE8L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIFsobmdNb2RlbCldPVwiZm9ybS5kZXNjcmlwdGlvblwiIG5hbWU9XCJkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTBcIj5CYWNha2xhcjwvbGFiZWw+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cImFkZExlZygpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1lLTFcIj48L2k+QmFjYWsgRWtsZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zbSBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5LYXluYWsgxZ5pcmtldDwvdGg+XG4gICAgICAgICAgICA8dGg+SGVkZWYgxZ5pcmtldDwvdGg+XG4gICAgICAgICAgICA8dGg+RGF2cmFuxLHFnzwvdGg+XG4gICAgICAgICAgICA8dGg+Tm90PC90aD5cbiAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxlZyBvZiBmb3JtLmxlZ3M7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA9PT0gMDsgZWxzZSBzb3VyY2VUZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxlZy5zb3VyY2VDb21wYW55SWRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIicnXCIgZGlzYWJsZWQ+U2XDp2luaXo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvdXJjZVRleHQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGJnLWxpZ2h0XCI+e3sgY29tcGFueU5hbWUobGVnLnNvdXJjZUNvbXBhbnlJZCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGVnLnRhcmdldENvbXBhbnlJZFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGVnVGFyZ2V0KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIicnXCIgZGlzYWJsZWQ+U2XDp2luaXo8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCIgWyhuZ01vZGVsKV09XCJsZWcubGVnQmVoYXZpb3JcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBiIG9mIGxlZ0JlaGF2aW9yc1wiIFtuZ1ZhbHVlXT1cImIudmFsdWVcIj57eyBiLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgWyhuZ01vZGVsKV09XCJsZWcubm90ZXNcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVMZWcobGVnKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Zvcm0+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPnt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMVwiPjwvc3Bhbj5cbiAgICAgIHt7ICdBYnBVaTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPlxuIl19
155
+ args: [{ selector: 'hit-document-scenario', template: "<div class=\"card\">\n <div class=\"card-header py-3\">\n <div class=\"row align-items-center\">\n <div class=\"col\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentScenarios' | abpLocalization }}</h5>\n </div>\n <div class=\"col-auto d-flex align-items-center gap-2\">\n <button class=\"btn btn-sm btn-primary\" (click)=\"openCreate()\">\n <i class=\"fa fa-plus me-1\"></i>{{ 'FBDocumentFlow::NewScenario' | abpLocalization }}\n </button>\n <button class=\"btn btn-sm btn-outline-primary\" (click)=\"loadData()\" [disabled]=\"isLoading\">\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-body pt-3\">\n <div *ngIf=\"isLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">{{ 'FBDocumentFlow::Loading' | abpLocalization }}</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isLoading\"\n [dataSource]=\"data\"\n keyExpr=\"id\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [(selectedRowKeys)]=\"selectedRowKeys\"\n [hoverStateEnabled]=\"true\"\n (onRowClick)=\"selectRow($event.data)\"\n (onSelectionChanged)=\"selectRow($event.selectedRowsData[0])\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\n <dxo-selection mode=\"single\"></dxo-selection>\n\n <dxi-column dataField=\"name\" [caption]=\"'FBDocumentFlow::ScenarioName' | abpLocalization\"></dxi-column>\n <dxi-column [caption]=\"'FBDocumentFlow::FlowSummaryColumn' | abpLocalization\" cellTemplate=\"flowTemplate\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"description\" [caption]=\"'FBDocumentFlow::Description' | abpLocalization\"></dxi-column>\n <dxi-column [caption]=\"'FBDocumentFlow::LegCount' | abpLocalization\" cellTemplate=\"legCountTemplate\" [width]=\"120\"></dxi-column>\n <dxi-column dataField=\"isActive\" [caption]=\"'FBDocumentFlow::Active' | abpLocalization\" dataType=\"boolean\" [width]=\"80\"></dxi-column>\n <dxi-column [caption]=\"'FBDocumentFlow::Actions' | abpLocalization\" cellTemplate=\"actionsTemplate\" [width]=\"140\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'flowTemplate'\">{{ flowSummary(cell.data) }}</div>\n\n <div *dxTemplate=\"let cell of 'legCountTemplate'\">{{ cell.data.legs?.length || 0 }}</div>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary me-1\" (click)=\"openEdit(cell.data)\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"btn btn-sm btn-outline-danger\" (click)=\"delete(cell.data)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </dx-data-grid>\n\n <div class=\"card mt-3\" *ngIf=\"selectedScenario\">\n <div class=\"card-body\">\n <h6 class=\"mb-2\">{{ 'FBDocumentFlow::ScenarioDetailTitle' | abpLocalization: selectedScenario.name }}</h6>\n <p class=\"text-muted mb-2\" *ngIf=\"selectedScenario.description\">{{ selectedScenario.description }}</p>\n <ol class=\"mb-2\">\n <li *ngFor=\"let leg of selectedScenario.legs\">{{ legStepText(leg) }}</li>\n </ol>\n <small class=\"text-muted d-block\">\n {{ 'FBDocumentFlow::ScenarioProjectIndependentNote' | abpLocalization }}\n </small>\n <small class=\"text-muted d-block\">\n {{ 'FBDocumentFlow::ScenarioManualChangeNote' | abpLocalization }}\n </small>\n </div>\n </div>\n </div>\n</div>\n\n<abp-modal [(visible)]=\"isModalOpen\" [options]=\"{ size: 'lg' }\">\n <ng-template #abpHeader>\n <h3>{{ (editingId ? 'FBDocumentFlow::EditScenario' : 'FBDocumentFlow::NewReadyScenario') | abpLocalization }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <form>\n <div class=\"row\">\n <div class=\"col-8 mb-3\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::ScenarioName' | abpLocalization }}</label>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"form.name\" name=\"name\" required />\n </div>\n <div class=\"col-4 mb-3 d-flex align-items-end\">\n <div class=\"form-check\">\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"form.isActive\" name=\"isActive\" id=\"scIsActive\" />\n <label class=\"form-check-label\" for=\"scIsActive\">{{ 'FBDocumentFlow::Active' | abpLocalization }}</label>\n </div>\n </div>\n </div>\n <div class=\"mb-3\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::Description' | abpLocalization }}</label>\n <textarea class=\"form-control\" rows=\"2\" [(ngModel)]=\"form.description\" name=\"description\"></textarea>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\n <label class=\"form-label mb-0\">{{ 'FBDocumentFlow::Legs' | abpLocalization }}</label>\n <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" (click)=\"addLeg()\">\n <i class=\"fa fa-plus me-1\"></i>{{ 'FBDocumentFlow::AddLeg' | abpLocalization }}\n </button>\n </div>\n\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>{{ 'FBDocumentFlow::SourceCompany' | abpLocalization }}</th>\n <th>{{ 'FBDocumentFlow::TargetCompany' | abpLocalization }}</th>\n <th>{{ 'FBDocumentFlow::Behavior' | abpLocalization }}</th>\n <th>{{ 'FBDocumentFlow::Notes' | abpLocalization }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let leg of form.legs; let i = index\">\n <td>\n <select\n *ngIf=\"i === 0; else sourceText\"\n class=\"form-select form-select-sm\"\n [(ngModel)]=\"leg.sourceCompanyId\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>{{ 'FBDocumentFlow::SelectPlaceholder' | abpLocalization }}</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n <ng-template #sourceText>\n <span class=\"form-control form-control-sm bg-light\">{{ companyName(leg.sourceCompanyId) }}</span>\n </ng-template>\n </td>\n <td>\n <select\n class=\"form-select form-select-sm\"\n [ngModel]=\"leg.targetCompanyId\"\n (ngModelChange)=\"updateLegTarget(i, $event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option [ngValue]=\"''\" disabled>{{ 'FBDocumentFlow::SelectPlaceholder' | abpLocalization }}</option>\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </td>\n <td>\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"leg.legBehavior\" [ngModelOptions]=\"{ standalone: true }\">\n <option *ngFor=\"let b of legBehaviors\" [ngValue]=\"b.value\">{{ b.label }}</option>\n </select>\n </td>\n <td>\n <input type=\"text\" class=\"form-control form-control-sm\" [(ngModel)]=\"leg.notes\" [ngModelOptions]=\"{ standalone: true }\" />\n </td>\n <td>\n <button type=\"button\" class=\"btn btn-sm btn-outline-danger\" (click)=\"removeLeg(leg)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </form>\n </ng-template>\n\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{ 'AbpUi::Cancel' | abpLocalization }}</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"save()\" [disabled]=\"isSaving\">\n <span *ngIf=\"isSaving\" class=\"spinner-border spinner-border-sm me-1\"></span>\n {{ 'AbpUi::Save' | abpLocalization }}\n </button>\n </ng-template>\n</abp-modal>\n" }]
156
+ }], ctorParameters: function () { return [{ type: i1.DocumentScenarioService }, { type: i2.SapCompanyProfileService }, { type: i3.ConfirmationService }, { type: i4.LocalizationService }]; } });
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW9zL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtc2NlbmFyaW9zL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXNjZW5hcmlvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBdUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBTUwsV0FBVyxHQUNaLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7O0FBTzNDLE1BQU0sT0FBTyw0QkFBNEI7SUFhdkMsWUFDVSxPQUFnQyxFQUNoQyxjQUF3QyxFQUN4QyxZQUFpQyxFQUNqQyxZQUFpQztRQUhqQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQWhCM0MsU0FBSSxHQUEwQixFQUFFLENBQUM7UUFDakMsY0FBUyxHQUEyQixFQUFFLENBQUM7UUFDdkMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQUcsS0FBSyxDQUFD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QUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBd0I7UUFDN0IsSUFBSSxDQUFDLFlBQVk7YUFDZCxJQUFJLENBQUMsMkNBQTJDLEVBQUUsNEJBQTRCLENBQUM7YUFDL0UsSUFBSSxDQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUN4RCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzdDO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDakUsQ0FBQzs7eUhBL0pVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDZEQ2xCekMsbWpSQStLQTsyRkQ3SmEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IGZpbmFsaXplLCBmaWx0ZXIsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENyZWF0ZVVwZGF0ZURvY3VtZW50U2NlbmFyaW9EdG8sXG4gIENyZWF0ZVVwZGF0ZURvY3VtZW50U2NlbmFyaW9MZWdEdG8sXG4gIERvY3VtZW50U2NlbmFyaW9EdG8sXG4gIERvY3VtZW50U2NlbmFyaW9MZWdEdG8sXG4gIERvY3VtZW50U2NlbmFyaW9TZXJ2aWNlLFxuICBMZWdCZWhhdmlvcixcbn0gZnJvbSAnLi4vLi4vLi4vcHJveHkvZG9jdW1lbnQtc2NlbmFyaW9zJztcbmltcG9ydCB7IFNhcENvbXBhbnlQcm9maWxlRHRvLCBTYXBDb21wYW55UHJvZmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm94eS9zYXAtY29tcGFueS1wcm9maWxlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hpdC1kb2N1bWVudC1zY2VuYXJpbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9oaXQtZG9jdW1lbnQtc2NlbmFyaW8uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBIaXREb2N1bWVudFNjZW5hcmlvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YTogRG9jdW1lbnRTY2VuYXJpb0R0b1tdID0gW107XG4gIGNvbXBhbmllczogU2FwQ29tcGFueVByb2ZpbGVEdG9bXSA9IFtdO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgaXNNb2RhbE9wZW4gPSBmYWxzZTtcbiAgaXNTYXZpbmcgPSBmYWxzZTtcbiAgZWRpdGluZ0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRTY2VuYXJpbzogRG9jdW1lbnRTY2VuYXJpb0R0byB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZFJvd0tleXM6IHN0cmluZ1tdID0gW107XG4gIGxlZ0JlaGF2aW9yczogeyB2YWx1ZTogTGVnQmVoYXZpb3I7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XG5cbiAgZm9ybTogQ3JlYXRlVXBkYXRlRG9jdW1lbnRTY2VuYXJpb0R0byA9IHRoaXMuYnVpbGRFbXB0eUZvcm0oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IERvY3VtZW50U2NlbmFyaW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tcGFueVNlcnZpY2U6IFNhcENvbXBhbnlQcm9maWxlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsaXphdGlvbjogTG9jYWxpemF0aW9uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmxlZ0JlaGF2aW9ycyA9IFtcbiAgICAgIHsgdmFsdWU6IExlZ0JlaGF2aW9yLkludGVybWVkaWF0ZUNoYWluLCBsYWJlbDogdGhpcy5sb2NhbGl6YXRpb24uaW5zdGFudCgnRkJEb2N1bWVudEZsb3c6OkxlZ0JlaGF2aW9yOkludGVybWVkaWF0ZUNoYWluJykgfSxcbiAgICAgIHsgdmFsdWU6IExlZ0JlaGF2aW9yLkNvbnN0cnVjdGlvbkNoYWluLCBsYWJlbDogdGhpcy5sb2NhbGl6YXRpb24uaW5zdGFudCgnRkJEb2N1bWVudEZsb3c6OkxlZ0JlaGF2aW9yOkNvbnN0cnVjdGlvbkNoYWluJykgfSxcbiAgICBdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb21wYW55U2VydmljZS5nZXRMaXN0KHsgbWF4UmVzdWx0Q291bnQ6IDEwMDAsIHNraXBDb3VudDogMCwgaXNBY3RpdmU6IHRydWUgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiAodGhpcy5jb21wYW5pZXMgPSByZXN1bHQuaXRlbXMpKTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBsb2FkRGF0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zZXJ2aWNlXG4gICAgICAuZ2V0TGlzdCh7IG1heFJlc3VsdENvdW50OiAxMDAwLCBza2lwQ291bnQ6IDAsIHNvcnRpbmc6ICduYW1lIGFzYycgfSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmlzTG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiAodGhpcy5kYXRhID0gcmVzdWx0Lml0ZW1zKSk7XG4gIH1cblxuICBjb21wYW55TmFtZShpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wYW5pZXMuZmluZChjID0+IGMuaWQgPT09IGlkKT8uY29tcGFueU5hbWUgPz8gaWQ7XG4gIH1cblxuICBzZWxlY3RSb3cocm93OiBEb2N1bWVudFNjZW5hcmlvRHRvIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFNjZW5hcmlvID0gcm93O1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dLZXlzID0gW3Jvdy5pZF07XG4gIH1cblxuICAvLyBcIkJhxZ9sYW5nxLHDpyAvIERldmFtIEFrxLHFn8SxXCIgc8O8dHVudSBpw6dpbjogemluY2lyaW4ga2F5bmFrIOKGkiBoZWRlZiDihpIgaGVkZWYgLi4uIMWfZWtsaW5kZSBrxLFzYSDDtnpldGkuXG4gIGZsb3dTdW1tYXJ5KHNjZW5hcmlvOiBEb2N1bWVudFNjZW5hcmlvRHRvKTogc3RyaW5nIHtcbiAgICBjb25zdCBsZWdzID0gWy4uLihzY2VuYXJpby5sZWdzID8/IFtdKV0uc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZU5vIC0gYi5zZXF1ZW5jZU5vKTtcbiAgICBpZiAobGVncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjaGFpbiA9IFtsZWdzWzBdLnNvdXJjZUNvbXBhbnlOYW1lID8/IHRoaXMuY29tcGFueU5hbWUobGVnc1swXS5zb3VyY2VDb21wYW55SWQpXTtcbiAgICBmb3IgKGNvbnN0IGxlZyBvZiBsZWdzKSB7XG4gICAgICBjb25zdCB0YXJnZXROYW1lID0gbGVnLnRhcmdldENvbXBhbnlOYW1lID8/IHRoaXMuY29tcGFueU5hbWUobGVnLnRhcmdldENvbXBhbnlJZCk7XG4gICAgICBjaGFpbi5wdXNoKFxuICAgICAgICBsZWcubGVnQmVoYXZpb3IgPT09IExlZ0JlaGF2aW9yLkNvbnN0cnVjdGlvbkNoYWluXG4gICAgICAgICAgPyB0aGlzLmxvY2FsaXphdGlvbi5pbnN0YW50KCdGQkRvY3VtZW50Rmxvdzo6Q29uc3RydWN0aW9uQ2hhaW5UYXJnZXRMYWJlbCcsIHRhcmdldE5hbWUpXG4gICAgICAgICAgOiB0YXJnZXROYW1lXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFpbi5qb2luKCcg4oaSICcpO1xuICB9XG5cbiAgbGVnU3RlcFRleHQobGVnOiBEb2N1bWVudFNjZW5hcmlvTGVnRHRvKTogc3RyaW5nIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbXBhbnlOYW1lKGxlZy5zb3VyY2VDb21wYW55SWQpO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuY29tcGFueU5hbWUobGVnLnRhcmdldENvbXBhbnlJZCk7XG4gICAgaWYgKGxlZy5sZWdCZWhhdmlvciA9PT0gTGVnQmVoYXZpb3IuQ29uc3RydWN0aW9uQ2hhaW4pIHtcbiAgICAgIC8vIFNwZWMgwqc3IC0gQ29uc3RydWN0aW9uIGJhY2HEn8SxbsSxbiB0YW0gYmVsZ2UgemluY2lyaTogU2F0xLFuYWxtYSBTaXBhcmnFn2kgKE9QT1IpIOKGkiBTYXTEsW5hbG1hXG4gICAgICAvLyBTaXBhcmnFn2xpIE1hbCBHaXJpxZ9pIChPUEROKSDihpIgU2F0xLFjxLEgRmF0dXJhc8SxIChPUENIKS4gXCJNYWwgR2lyacWfaVwiIGvEsXNhbHRtYXPEsSBPUEROJ25pbiB0YW1cbiAgICAgIC8vIGFkxLFuxLEgeWFuc8SxdG3EsXlvcmR1IChrdWxsYW7EsWPEsSBnZXJpIGJpbGRpcmltaXlsZSB0ZXNwaXQgZWRpbGRpKS4gU0FQIGvEsXNhIHRhYmxvIGFkbGFyxLEgKE9JTlYvT1BDSFxuICAgICAgLy8gZGFoaWwpIHTDvG0gYmVsZ2UgdGlwbGVyaW5kZSB0dXRhcmzEsSDFn2VraWxkZSBnw7ZzdGVyaWxpci5cbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5pbnN0YW50KCdGQkRvY3VtZW50Rmxvdzo6U2NlbmFyaW9Db25zdHJ1Y3Rpb25MZWdTdGVwJywgc291cmNlLCB0YXJnZXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uaW5zdGFudCgnRkJEb2N1bWVudEZsb3c6OlNjZW5hcmlvSW50ZXJtZWRpYXRlTGVnU3RlcCcsIHNvdXJjZSwgdGFyZ2V0KTtcbiAgfVxuXG4gIG9wZW5DcmVhdGUoKSB7XG4gICAgdGhpcy5lZGl0aW5nSWQgPSBudWxsO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuYnVpbGRFbXB0eUZvcm0oKTtcbiAgICB0aGlzLmlzTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIG9wZW5FZGl0KHJvdzogRG9jdW1lbnRTY2VuYXJpb0R0bykge1xuICAgIHRoaXMuZWRpdGluZ0lkID0gcm93LmlkO1xuICAgIHRoaXMuZm9ybSA9IHtcbiAgICAgIG5hbWU6IHJvdy5uYW1lID8/ICcnLFxuICAgICAgZGVzY3JpcHRpb246IHJvdy5kZXNjcmlwdGlvbiA/PyAnJyxcbiAgICAgIGlzQWN0aXZlOiByb3cuaXNBY3RpdmUsXG4gICAgICBsZWdzOiBbLi4ucm93LmxlZ3NdXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlTm8gLSBiLnNlcXVlbmNlTm8pXG4gICAgICAgIC5tYXAobCA9PiAoe1xuICAgICAgICAgIGlkOiBsLmlkLFxuICAgICAgICAgIHNvdXJjZUNvbXBhbnlJZDogbC5zb3VyY2VDb21wYW55SWQsXG4gICAgICAgICAgdGFyZ2V0Q29tcGFueUlkOiBsLnRhcmdldENvbXBhbnlJZCxcbiAgICAgICAgICBsZWdCZWhhdmlvcjogbC5sZWdCZWhhdmlvcixcbiAgICAgICAgICBub3RlczogbC5ub3RlcyxcbiAgICAgICAgfSkpLFxuICAgIH07XG4gICAgdGhpcy5pc01vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICAvLyDEsGxrIGJhY2HEn8SxbiBrYXluYcSfxLEgc2VuYXJ5b251biBiYcWfbGFuZ8Sxw6cgbm9rdGFzxLEgb2xkdcSfdSBpw6dpbiBzZXJiZXN0w6dlIHNlw6dpbGlyLiBTb25yYWtpIGJhY2FrbGFyxLFuXG4gIC8vIGtheW5hxJ/EsSBpc2UgRG9jdW1lbnRUcmFuc2ZlciDDp2FsxLHFn21hIGtvcHlhc8SxbmRha2kgYXluxLEga3VyYWxsYSAoc3BlYyDCpzQvwqczKSBiaXIgw7ZuY2VraSBiYWNhxJ/EsW5cbiAgLy8gaGVkZWZpbmRlbiBvdG9tYXRpayB0w7xyZXRpbGlyIC0gYWtzaSBoYWxkZSBidXJhZGEgZGEgKHdvcmtpbmcgY29weSdkZSBkw7x6ZWx0aWxlbiBoYXRhbsSxbiBheW7EsXPEsSlcbiAgLy8ga2F5bmFrL2hlZGVmIGJpcmJpcmluZGVuIGJhxJ/EsW1zxLF6IHNlw6dpbGlwIHppbmNpciB0dXRhcnPEsXogaGFsZSBnZWxlYmlsaXJkaS5cbiAgYWRkTGVnKCkge1xuICAgIGNvbnN0IGxhc3RMZWcgPSB0aGlzLmZvcm0ubGVnc1t0aGlzLmZvcm0ubGVncy5sZW5ndGggLSAxXTtcbiAgICB0aGlzLmZvcm0ubGVncy5wdXNoKHtcbiAgICAgIHNvdXJjZUNvbXBhbnlJZDogbGFzdExlZz8udGFyZ2V0Q29tcGFueUlkID8/ICcnLFxuICAgICAgdGFyZ2V0Q29tcGFueUlkOiAnJyxcbiAgICAgIGxlZ0JlaGF2aW9yOiBMZWdCZWhhdmlvci5JbnRlcm1lZGlhdGVDaGFpbixcbiAgICAgIG5vdGVzOiAnJyxcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUxlZyhsZWc6IENyZWF0ZVVwZGF0ZURvY3VtZW50U2NlbmFyaW9MZWdEdG8pIHtcbiAgICB0aGlzLmZvcm0ubGVncyA9IHRoaXMuZm9ybS5sZWdzLmZpbHRlcihsID0+IGwgIT09IGxlZyk7XG4gICAgdGhpcy5yZWxpbmtMZWdTb3VyY2VzKCk7XG4gIH1cblxuICB1cGRhdGVMZWdUYXJnZXQoaW5kZXg6IG51bWJlciwgdGFyZ2V0Q29tcGFueUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZvcm0ubGVnc1tpbmRleF0udGFyZ2V0Q29tcGFueUlkID0gdGFyZ2V0Q29tcGFueUlkO1xuICAgIHRoaXMucmVsaW5rTGVnU291cmNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxpbmtMZWdTb3VyY2VzKCkge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5mb3JtLmxlZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZm9ybS5sZWdzW2ldLnNvdXJjZUNvbXBhbnlJZCA9IHRoaXMuZm9ybS5sZWdzW2kgLSAxXS50YXJnZXRDb21wYW55SWQ7XG4gICAgfVxuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcbiAgICBjb25zdCByZXF1ZXN0JCA9IHRoaXMuZWRpdGluZ0lkID8gdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLmVkaXRpbmdJZCwgdGhpcy5mb3JtKSA6IHRoaXMuc2VydmljZS5jcmVhdGUodGhpcy5mb3JtKTtcbiAgICByZXF1ZXN0JC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmlzU2F2aW5nID0gZmFsc2UpKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZShyb3c6IERvY3VtZW50U2NlbmFyaW9EdG8pIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblxuICAgICAgLndhcm4oJ0ZCRG9jdW1lbnRGbG93OjpEZWxldGVDb25maXJtYXRpb25NZXNzYWdlJywgJ0ZCRG9jdW1lbnRGbG93OjpBcmVZb3VTdXJlJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoc3RhdHVzID0+IHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5jb25maXJtKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2VydmljZS5kZWxldGUocm93LmlkKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkRGF0YSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbXB0eUZvcm0oKTogQ3JlYXRlVXBkYXRlRG9jdW1lbnRTY2VuYXJpb0R0byB7XG4gICAgcmV0dXJuIHsgbmFtZTogJycsIGRlc2NyaXB0aW9uOiAnJywgaXNBY3RpdmU6IHRydWUsIGxlZ3M6IFtdIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBweS0zXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBtYi0wXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpNZW51OkRvY3VtZW50U2NlbmFyaW9zJyB8IGFicExvY2FsaXphdGlvbiB9fTwvaDU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5DcmVhdGUoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtZS0xXCI+PC9pPnt7ICdGQkRvY3VtZW50Rmxvdzo6TmV3U2NlbmFyaW8nIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cImxvYWREYXRhKClcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1yZWZyZXNoIG1lLTFcIj48L2k+e3sgJ0FicFVpOjpSZWZyZXNoJyB8IGFicExvY2FsaXphdGlvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwdC0zXCI+XG4gICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtbXV0ZWRcIj57eyAnRkJEb2N1bWVudEZsb3c6OkxvYWRpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHgtZGF0YS1ncmlkXG4gICAgICAqbmdJZj1cIiFpc0xvYWRpbmdcIlxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVwiXG4gICAgICBrZXlFeHByPVwiaWRcIlxuICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxuICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbKHNlbGVjdGVkUm93S2V5cyldPVwic2VsZWN0ZWRSb3dLZXlzXCJcbiAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgIChvblJvd0NsaWNrKT1cInNlbGVjdFJvdygkZXZlbnQuZGF0YSlcIlxuICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJzZWxlY3RSb3coJGV2ZW50LnNlbGVjdGVkUm93c0RhdGFbMF0pXCJcbiAgICA+XG4gICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiNTBcIj48L2R4by1wYWdpbmc+XG4gICAgICA8ZHhvLXBhZ2VyIFt2aXNpYmxlXT1cInRydWVcIiBbc2hvd0luZm9dPVwidHJ1ZVwiIFtzaG93TmF2aWdhdGlvbkJ1dHRvbnNdPVwidHJ1ZVwiPjwvZHhvLXBhZ2VyPlxuICAgICAgPGR4by1maWx0ZXItcm93IFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1maWx0ZXItcm93PlxuICAgICAgPGR4by1oZWFkZXItZmlsdGVyIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxuICAgICAgPGR4by1zb3J0aW5nIG1vZGU9XCJtdWx0aXBsZVwiPjwvZHhvLXNvcnRpbmc+XG4gICAgICA8ZHhvLXNlbGVjdGlvbiBtb2RlPVwic2luZ2xlXCI+PC9keG8tc2VsZWN0aW9uPlxuXG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpTY2VuYXJpb05hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpGbG93U3VtbWFyeUNvbHVtbicgfCBhYnBMb2NhbGl6YXRpb25cIiBjZWxsVGVtcGxhdGU9XCJmbG93VGVtcGxhdGVcIiBbYWxsb3dGaWx0ZXJpbmddPVwiZmFsc2VcIiBbYWxsb3dTb3J0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZGVzY3JpcHRpb25cIiBbY2FwdGlvbl09XCInRkJEb2N1bWVudEZsb3c6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvblwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIFtjYXB0aW9uXT1cIidGQkRvY3VtZW50Rmxvdzo6TGVnQ291bnQnIHwgYWJwTG9jYWxpemF0aW9uXCIgY2VsbFRlbXBsYXRlPVwibGVnQ291bnRUZW1wbGF0ZVwiIFt3aWR0aF09XCIxMjBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpc0FjdGl2ZVwiIFtjYXB0aW9uXT1cIidGQkRvY3VtZW50Rmxvdzo6QWN0aXZlJyB8IGFicExvY2FsaXphdGlvblwiIGRhdGFUeXBlPVwiYm9vbGVhblwiIFt3aWR0aF09XCI4MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIFtjYXB0aW9uXT1cIidGQkRvY3VtZW50Rmxvdzo6QWN0aW9ucycgfCBhYnBMb2NhbGl6YXRpb25cIiBjZWxsVGVtcGxhdGU9XCJhY3Rpb25zVGVtcGxhdGVcIiBbd2lkdGhdPVwiMTQwXCIgW2FsbG93RmlsdGVyaW5nXT1cImZhbHNlXCIgW2FsbG93U29ydGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cblxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsIG9mICdmbG93VGVtcGxhdGUnXCI+e3sgZmxvd1N1bW1hcnkoY2VsbC5kYXRhKSB9fTwvZGl2PlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ2xlZ0NvdW50VGVtcGxhdGUnXCI+e3sgY2VsbC5kYXRhLmxlZ3M/Lmxlbmd0aCB8fCAwIH19PC9kaXY+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnYWN0aW9uc1RlbXBsYXRlJ1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkgbWUtMVwiIChjbGljayk9XCJvcGVuRWRpdChjZWxsLmRhdGEpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5jaWxcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlKGNlbGwuZGF0YSlcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZHgtZGF0YS1ncmlkPlxuXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgbXQtM1wiICpuZ0lmPVwic2VsZWN0ZWRTY2VuYXJpb1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICA8aDYgY2xhc3M9XCJtYi0yXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpTY2VuYXJpb0RldGFpbFRpdGxlJyB8IGFicExvY2FsaXphdGlvbjogc2VsZWN0ZWRTY2VuYXJpby5uYW1lIH19PC9oNj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIG1iLTJcIiAqbmdJZj1cInNlbGVjdGVkU2NlbmFyaW8uZGVzY3JpcHRpb25cIj57eyBzZWxlY3RlZFNjZW5hcmlvLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICA8b2wgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBsZWcgb2Ygc2VsZWN0ZWRTY2VuYXJpby5sZWdzXCI+e3sgbGVnU3RlcFRleHQobGVnKSB9fTwvbGk+XG4gICAgICAgIDwvb2w+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlxuICAgICAgICAgIHt7ICdGQkRvY3VtZW50Rmxvdzo6U2NlbmFyaW9Qcm9qZWN0SW5kZXBlbmRlbnROb3RlJyB8IGFicExvY2FsaXphdGlvbiB9fVxuICAgICAgICA8L3NtYWxsPlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5cbiAgICAgICAgICB7eyAnRkJEb2N1bWVudEZsb3c6OlNjZW5hcmlvTWFudWFsQ2hhbmdlTm90ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48YWJwLW1vZGFsIFsodmlzaWJsZSldPVwiaXNNb2RhbE9wZW5cIiBbb3B0aW9uc109XCJ7IHNpemU6ICdsZycgfVwiPlxuICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cbiAgICA8aDM+e3sgKGVkaXRpbmdJZCA/ICdGQkRvY3VtZW50Rmxvdzo6RWRpdFNjZW5hcmlvJyA6ICdGQkRvY3VtZW50Rmxvdzo6TmV3UmVhZHlTY2VuYXJpbycpIHwgYWJwTG9jYWxpemF0aW9uIH19PC9oMz5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XG4gICAgPGZvcm0+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBtYi0zXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6U2NlbmFyaW9OYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImZvcm0ubmFtZVwiIG5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBtYi0zIGQtZmxleCBhbGlnbi1pdGVtcy1lbmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIFsobmdNb2RlbCldPVwiZm9ybS5pc0FjdGl2ZVwiIG5hbWU9XCJpc0FjdGl2ZVwiIGlkPVwic2NJc0FjdGl2ZVwiIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2NJc0FjdGl2ZVwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6QWN0aXZlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpEZXNjcmlwdGlvbicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIFsobmdNb2RlbCldPVwiZm9ybS5kZXNjcmlwdGlvblwiIG5hbWU9XCJkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTBcIj57eyAnRkJEb2N1bWVudEZsb3c6OkxlZ3MnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiAoY2xpY2spPVwiYWRkTGVnKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbWUtMVwiPjwvaT57eyAnRkJEb2N1bWVudEZsb3c6OkFkZExlZycgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc20gYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+e3sgJ0ZCRG9jdW1lbnRGbG93OjpTb3VyY2VDb21wYW55JyB8IGFicExvY2FsaXphdGlvbiB9fTwvdGg+XG4gICAgICAgICAgICA8dGg+e3sgJ0ZCRG9jdW1lbnRGbG93OjpUYXJnZXRDb21wYW55JyB8IGFicExvY2FsaXphdGlvbiB9fTwvdGg+XG4gICAgICAgICAgICA8dGg+e3sgJ0ZCRG9jdW1lbnRGbG93OjpCZWhhdmlvcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L3RoPlxuICAgICAgICAgICAgPHRoPnt7ICdGQkRvY3VtZW50Rmxvdzo6Tm90ZXMnIHwgYWJwTG9jYWxpemF0aW9uIH19PC90aD5cbiAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxlZyBvZiBmb3JtLmxlZ3M7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaSA9PT0gMDsgZWxzZSBzb3VyY2VUZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxlZy5zb3VyY2VDb21wYW55SWRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIicnXCIgZGlzYWJsZWQ+e3sgJ0ZCRG9jdW1lbnRGbG93OjpTZWxlY3RQbGFjZWhvbGRlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvdXJjZVRleHQ+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGJnLWxpZ2h0XCI+e3sgY29tcGFueU5hbWUobGVnLnNvdXJjZUNvbXBhbnlJZCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGVnLnRhcmdldENvbXBhbnlJZFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGVnVGFyZ2V0KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIicnXCIgZGlzYWJsZWQ+e3sgJ0ZCRG9jdW1lbnRGbG93OjpTZWxlY3RQbGFjZWhvbGRlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCIgWyhuZ01vZGVsKV09XCJsZWcubGVnQmVoYXZpb3JcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBiIG9mIGxlZ0JlaGF2aW9yc1wiIFtuZ1ZhbHVlXT1cImIudmFsdWVcIj57eyBiLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgWyhuZ01vZGVsKV09XCJsZWcubm90ZXNcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLWRhbmdlclwiIChjbGljayk9XCJyZW1vdmVMZWcobGVnKVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Zvcm0+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPnt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMVwiPjwvc3Bhbj5cbiAgICAgIHt7ICdBYnBVaTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYWJwLW1vZGFsPlxuIl19