@hitsoft/uretim-yonetimi 1.0.45 → 1.0.46

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.
@@ -1,4 +1,6 @@
1
1
  import { Component, ViewChild } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { finalize, takeUntil } from 'rxjs/operators';
2
4
  import * as i0 from "@angular/core";
3
5
  import * as i1 from "../../hit-proxy/hit-filling-receipt-from-production/hit-filling-receipt-from-production.service";
4
6
  import * as i2 from "@abp/ng.theme.shared";
@@ -21,18 +23,40 @@ export class HitFillingReceiptFromProductionComponent {
21
23
  this.paletTipleri = ['TAM', 'KISMI'];
22
24
  this.koliAdet = null;
23
25
  this.toplamMiktar = 0;
26
+ this.pendingOperationId = null;
27
+ this.operationStatusMessage = '';
28
+ this.isCheckingOperationStatus = false;
29
+ this.destroy$ = new Subject();
30
+ this.statusCheckFailures = 0;
31
+ this.pendingStorageKey = 'turs1013ReceiptOperation';
32
+ this.errorDialogOptions = {
33
+ hideYesBtn: true,
34
+ cancelText: 'Kapat',
35
+ dismissible: false,
36
+ };
24
37
  this.calcRowIndex = (row) => (this.workOrderInfo?.receiptHistory?.indexOf(row) ?? -1) + 1;
25
38
  this.calcDocStatus = (row) => row.docStatus === 'C' ? 'Tamamlandı' : 'Beklemede';
26
39
  this.formatNumber = (value) => value?.toLocaleString('tr-TR') ?? '';
27
40
  }
28
41
  ngOnInit() {
29
- // Initialize
42
+ this.pendingOperationId = sessionStorage.getItem(this.pendingStorageKey);
43
+ if (this.pendingOperationId) {
44
+ this.isSaving = true;
45
+ this.operationStatusMessage = 'Önceki üretimden giriş işleminin sonucu kontrol ediliyor.';
46
+ this.checkOperationStatus();
47
+ }
48
+ }
49
+ ngOnDestroy() {
50
+ if (this.statusTimer)
51
+ clearTimeout(this.statusTimer);
52
+ this.destroy$.next();
53
+ this.destroy$.complete();
30
54
  }
31
55
  ngAfterViewInit() {
32
56
  this.focusOnIsEmriNo();
33
57
  }
34
58
  async getProductionOrder() {
35
- if (!this.isEmriNo) {
59
+ if (!this.isEmriNo || this.isSaving) {
36
60
  return;
37
61
  }
38
62
  this.isLoading = true;
@@ -75,19 +99,18 @@ export class HitFillingReceiptFromProductionComponent {
75
99
  return;
76
100
  }
77
101
  const salPackUn = this.workOrderInfo.salPackUn || 0;
78
- debugger;
79
102
  if (this.paletTipi === 'TAM') {
80
103
  // Tam Palet: Pallet height × Pieces per box
81
104
  const paletYukseklik = this.workOrderInfo.u_DKpaletyuseklik || 0;
82
- this.toplamMiktar = paletYukseklik * salPackUn;
105
+ this.toplamMiktar = Math.round(paletYukseklik * salPackUn);
83
106
  }
84
107
  else {
85
108
  // Kısmi Palet: Koli count × Pieces per box
86
109
  const koliAdet = this.koliAdet || 0;
87
- const kismiMiktar = koliAdet * salPackUn;
110
+ const kismiMiktar = Math.round(koliAdet * salPackUn);
88
111
  // Calculate TAM pallet quantity for comparison
89
112
  const paletYukseklik = this.workOrderInfo.u_DKpaletyuseklik || 0;
90
- const tamPaletMiktar = paletYukseklik * salPackUn;
113
+ const tamPaletMiktar = Math.round(paletYukseklik * salPackUn);
91
114
  // KISMI quantity should not exceed TAM pallet quantity
92
115
  if (kismiMiktar > tamPaletMiktar) {
93
116
  this.toplamMiktar = tamPaletMiktar;
@@ -107,7 +130,6 @@ export class HitFillingReceiptFromProductionComponent {
107
130
  }
108
131
  }
109
132
  async save() {
110
- debugger;
111
133
  if (!this.isEmriNo || !this.workOrderInfo || this.toplamMiktar <= 0 || this.isSaving) {
112
134
  if (!this.isSaving) {
113
135
  this.confirmation.warn('', 'Lütfen tüm alanları doldurun!', {
@@ -131,62 +153,115 @@ export class HitFillingReceiptFromProductionComponent {
131
153
  });
132
154
  return;
133
155
  }
156
+ const operationId = this.newOperationId();
134
157
  const saveData = {
158
+ operationId,
135
159
  docEntry: this.isEmriNo,
136
160
  palletType: this.paletTipi,
137
161
  koliCount: this.paletTipi === 'KISMI' ? this.koliAdet : null,
138
- totalQuantity: this.toplamMiktar,
139
- warehouseCode: this.workOrderInfo.warehouse,
140
- batchNumber: '',
141
- componentsToConsume: this.prepareComponentsToConsume()
162
+ totalQuantity: this.toplamMiktar
142
163
  };
164
+ this.pendingOperationId = operationId;
165
+ sessionStorage.setItem(this.pendingStorageKey, operationId);
143
166
  this.isSaving = true;
144
167
  this.isLoading = true;
145
- this.service.createReceipt(saveData).subscribe({
168
+ this.operationStatusMessage = 'Üretimden giriş kaydediliyor, SAP belge sonucu bekleniyor.';
169
+ this.service.createReceipt(saveData).pipe(takeUntil(this.destroy$)).subscribe({
146
170
  next: response => {
147
- if (response?.isSuccessful) {
148
- this.confirmation.success('', 'Üretimden giriş başarıyla gerçekleştirildi!', {
149
- hideYesBtn: true,
150
- cancelText: 'Kapat',
151
- dismissible: false,
152
- });
153
- this.clearAll();
154
- }
155
- this.isSaving = false;
171
+ if (response?.isSuccessful && response.items)
172
+ this.handleOperationStatus(response.items);
173
+ else
174
+ this.checkOperationStatus();
156
175
  this.isLoading = false;
157
176
  },
158
177
  error: e => {
159
- this.isSaving = false;
160
178
  this.isLoading = false;
179
+ this.checkOperationStatus();
161
180
  },
162
181
  });
163
182
  }
164
- prepareComponentsToConsume() {
165
- if (!this.workOrderInfo || !this.workOrderInfo.lines) {
166
- return [];
167
- }
168
- const components = [];
169
- const itemCode = this.workOrderInfo.itemCode;
170
- // Determine if this is YM or 151* product
171
- const isYM = itemCode.startsWith('YM');
172
- const is151 = itemCode.startsWith('151');
173
- // Get controlled lines (YM/151* items marked with U_Kontrol='E')
174
- const controlledLines = this.workOrderInfo.lines.filter(line => line.isControlled && line.batchNumber);
175
- // For YM/151* products, consume by lot from control screen
176
- for (const line of controlledLines) {
177
- components.push({
178
- itemCode: line.itemCode,
179
- quantity: line.issuedQty,
180
- warehouseCode: line.warehouse,
181
- batchNumber: line.batchNumber,
182
- baseLine: line.lineNum
183
+ checkOperationStatus() {
184
+ if (!this.pendingOperationId || this.isCheckingOperationStatus)
185
+ return;
186
+ this.isCheckingOperationStatus = true;
187
+ this.service.getOperationStatus(this.pendingOperationId).pipe(takeUntil(this.destroy$), finalize(() => this.isCheckingOperationStatus = false)).subscribe({
188
+ next: response => {
189
+ this.statusCheckFailures = 0;
190
+ if (response?.isSuccessful && response.items)
191
+ this.handleOperationStatus(response.items);
192
+ else
193
+ this.scheduleStatusCheck();
194
+ },
195
+ error: error => {
196
+ // A missing row can be transient while the original POST is still validating.
197
+ // Never unlock a response-lost operation solely because this GET failed.
198
+ this.statusCheckFailures++;
199
+ this.operationStatusMessage = 'İşlem sonucu alınamadı. SAP belgeleri doğrulanana kadar yeni giriş başlatılamaz.';
200
+ if (this.statusCheckFailures === 5) {
201
+ this.confirmation.warn('', `İşlem sonucu doğrulanamadı. Yeni kayıt başlatmayın; işlem anahtarını destek ekibiyle paylaşın: ${this.pendingOperationId}`, {
202
+ hideYesBtn: true, cancelText: 'Kapat'
203
+ });
204
+ }
205
+ this.scheduleStatusCheck();
206
+ }
207
+ });
208
+ }
209
+ scheduleStatusCheck() {
210
+ if (this.statusTimer)
211
+ clearTimeout(this.statusTimer);
212
+ this.statusTimer = setTimeout(() => this.checkOperationStatus(), 3000);
213
+ }
214
+ refreshOperationStatus() {
215
+ if (this.statusTimer)
216
+ clearTimeout(this.statusTimer);
217
+ this.checkOperationStatus();
218
+ }
219
+ handleOperationStatus(status) {
220
+ if (status.state === 'Completed') {
221
+ this.finishPendingOperation();
222
+ const documents = [
223
+ status.issueDocEntry ? `Üretim için çıkış belge iç no: ${status.issueDocEntry}.` : '',
224
+ status.receiptDocEntry ? `Üretimden giriş belge iç no: ${status.receiptDocEntry}.` : '',
225
+ ].filter(Boolean).join(' ');
226
+ this.confirmation.success('', `Üretimden giriş başarıyla gerçekleştirildi! Parti: ${status.batchNumber}. ${documents}`, {
227
+ hideYesBtn: true, cancelText: 'Kapat', dismissible: false
183
228
  });
229
+ this.clearAll();
230
+ }
231
+ else if (status.state === 'Failed') {
232
+ this.finishPendingOperation();
233
+ this.confirmation.error('', status.error || 'Üretimden giriş kaydedilemedi.', this.errorDialogOptions);
234
+ }
235
+ else if (status.state === 'Inconsistent') {
236
+ if (this.statusTimer)
237
+ clearTimeout(this.statusTimer);
238
+ this.operationStatusMessage = status.error || 'SAP giriş ve çıkış belgeleri birlikte doğrulanamadı. Belgeleri kontrol edin.';
184
239
  }
185
- // For other components, use "Teyit sonrası otomatik çekme" logic
186
- // (This would be handled by the backend with FIFO for batch/serial items)
187
- return components;
240
+ else {
241
+ this.operationStatusMessage = status.error || 'SAP belge sonucu doğrulanıyor. Sonuç kesinleşene kadar yeni giriş başlatılamaz.';
242
+ this.scheduleStatusCheck();
243
+ }
244
+ }
245
+ finishPendingOperation() {
246
+ if (this.statusTimer)
247
+ clearTimeout(this.statusTimer);
248
+ this.isSaving = false;
249
+ this.pendingOperationId = null;
250
+ this.operationStatusMessage = '';
251
+ this.statusCheckFailures = 0;
252
+ sessionStorage.removeItem(this.pendingStorageKey);
253
+ }
254
+ newOperationId() {
255
+ const bytes = new Uint8Array(16);
256
+ crypto.getRandomValues(bytes);
257
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
258
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
259
+ const value = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
260
+ return `${value.slice(0, 8)}-${value.slice(8, 12)}-${value.slice(12, 16)}-${value.slice(16, 20)}-${value.slice(20)}`;
188
261
  }
189
262
  clearAll() {
263
+ if (this.isSaving)
264
+ return;
190
265
  this.isWorkOrderLoaded = false;
191
266
  this.isEmriNo = null;
192
267
  this.workOrderInfo = null;
@@ -212,10 +287,10 @@ export class HitFillingReceiptFromProductionComponent {
212
287
  }
213
288
  }
214
289
  HitFillingReceiptFromProductionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFillingReceiptFromProductionComponent, deps: [{ token: i1.HitFillingReceiptFromProductionService }, { token: i2.ConfirmationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
215
- HitFillingReceiptFromProductionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFillingReceiptFromProductionComponent, selector: "lib-hit-filling-receipt-from-production", viewQueries: [{ propertyName: "nmbBoxIsEmriNo", first: true, predicate: ["isEmriNoRef"], descendants: true }, { propertyName: "radioPaletTipi", first: true, predicate: ["paletTipiRef"], descendants: true }, { propertyName: "nmbBoxKoliAdet", first: true, predicate: ["koliAdetRef"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\n <abp-page-toolbar-container class=\"col\">\n <div class=\"row\">\n <h3 class=\"page-title\">\n \u00DCretimden Giri\u015F\n </h3>\n </div>\n <div class=\"row text-lg-end pt-2\">\n <div class=\"col-6\">\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\n <i class=\"fa fa-check me-1\"></i>\n \u00DCretimden Giri\u015F Yap\n </button>\n </div>\n <div class=\"col-6\">\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\n <i class=\"fa fa-broom me-1\"></i>\n Temizle\n </button>\n </div>\n </div>\n </abp-page-toolbar-container>\n\n <div class=\"card mt-2\">\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\n <!-- Work Order Input -->\n <div style=\"display: flex; align-items: center;\">\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded\">\n </dx-number-box>\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\n [disabled]=\"isWorkOrderLoaded\">\n </dx-button>\n </div>\n\n <!-- Work Order Information -->\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\n <!-- Product Info -->\n <div class=\"row\">\n <div class=\"col-md-6\">\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\n </dx-text-box>\n </div>\n <div class=\"col-md-6\">\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\n </dx-text-box>\n </div>\n </div>\n\n <div class=\"row mt-2\">\n <div class=\"col-md-3\">\n <dx-number-box \n label=\"Planlanan Miktar\" \n [(value)]=\"workOrderInfo.plannedQty\" \n [disabled]=\"true\">\n </dx-number-box>\n </div>\n <div class=\"col-md-3\">\n <dx-number-box \n label=\"Tamamlanan Miktar\" \n [(value)]=\"workOrderInfo.cmpltQty\" \n [disabled]=\"true\">\n </dx-number-box>\n </div>\n <div class=\"col-md-3\">\n <dx-text-box \n label=\"Depo\" \n [(value)]=\"workOrderInfo.warehouse\" \n [disabled]=\"true\">\n </dx-text-box>\n </div>\n <div class=\"col-md-3\">\n <dx-text-box \n label=\"Ambalaj Lot\" \n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \n [disabled]=\"true\">\n </dx-text-box>\n </div>\n </div>\n\n <!-- Pallet Type Selection -->\n <div class=\"row mt-3\">\n <div class=\"col-md-12\">\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\n (onValueChanged)=\"onPaletTipiChange()\">\n </dx-radio-group>\n </div>\n </div>\n\n <!-- Koli Count for KISMI Pallet -->\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\n <div class=\"col-md-6\">\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\n [min]=\"1\">\n </dx-number-box>\n </div>\n </div>\n\n <!-- Calculated Total Quantity -->\n <div class=\"row mt-2\">\n <div class=\"col-md-4\">\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\n [stylingMode]=\"'filled'\">\n </dx-number-box>\n </div>\n <div class=\"col-md-4\">\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\n </dx-number-box>\n </div>\n <div class=\"col-md-4\">\n <dx-number-box label=\"Girilebilecek Kalan Miktar\" [(value)]=\"workOrderInfo.remainingAllowedQty\"\n [disabled]=\"true\">\n </dx-number-box>\n </div>\n </div>\n\n <!-- Quality Status Info -->\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\n <div class=\"col-md-12\">\n <div class=\"alert alert-info\" role=\"alert\">\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\n </div>\n </div>\n </div>\n\n <!-- Receipt History -->\n <div class=\"row mt-3\">\n <div class=\"col-12\">\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\n \u00DCretimden Giri\u015F Hareketleri\n </div>\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\n <dxo-paging [enabled]=\"false\"></dxo-paging>\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\n [calculateCellValue]=\"calcDocStatus\">\n </dxi-column>\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\n <dxo-summary>\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\n </dxo-summary>\n </dx-data-grid>\n </div>\n </div>\n </div>\n </div>\n </div>\n</abp-page>", styles: [".page-title{margin:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i4.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i5.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "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", "onExporting", "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", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "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: i6.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: i6.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i6.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i5.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i5.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i7.DxRadioGroupComponent, selector: "dx-radio-group", inputs: ["accessKey", "activeStateEnabled", "dataSource", "disabled", "displayExpr", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "isValid", "items", "itemTemplate", "layout", "name", "readOnly", "rtlEnabled", "tabIndex", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueExpr", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "dataSourceChange", "disabledChange", "displayExprChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isValidChange", "itemsChange", "itemTemplateChange", "layoutChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "onBlur"] }] });
290
+ HitFillingReceiptFromProductionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFillingReceiptFromProductionComponent, selector: "lib-hit-filling-receipt-from-production", viewQueries: [{ propertyName: "nmbBoxIsEmriNo", first: true, predicate: ["isEmriNoRef"], descendants: true }, { propertyName: "radioPaletTipi", first: true, predicate: ["paletTipiRef"], descendants: true }, { propertyName: "nmbBoxKoliAdet", first: true, predicate: ["koliAdetRef"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n \u00DCretimden Giri\u015F\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-check me-1\"></i>\r\n \u00DCretimden Giri\u015F Yap\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\" [disabled]=\"isSaving\">\n <i class=\"fa fa-broom me-1\"></i>\r\n Temizle\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div *ngIf=\"isSaving\" class=\"alert alert-warning\" role=\"status\" aria-live=\"polite\">\r\n <div>{{ operationStatusMessage }}</div>\r\n <div class=\"mt-1\">\u0130\u015Flem anahtar\u0131: {{ pendingOperationId }}</div>\r\n <button class=\"btn btn-outline-secondary btn-sm mt-2\" type=\"button\" (click)=\"refreshOperationStatus()\"\r\n [disabled]=\"isLoading || isCheckingOperationStatus\">\r\n Sonucu Tekrar Kontrol Et\r\n </button>\r\n </div>\r\n <!-- Work Order Input -->\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-button>\r\n </div>\r\n\r\n <!-- Work Order Information -->\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\r\n <!-- Product Info -->\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Planlanan Miktar\" \r\n [(value)]=\"workOrderInfo.plannedQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Tamamlanan Miktar\" \r\n [(value)]=\"workOrderInfo.cmpltQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Depo\" \r\n [(value)]=\"workOrderInfo.warehouse\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Ambalaj Lot\" \r\n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Pallet Type Selection -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-12\">\r\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\r\n (onValueChanged)=\"onPaletTipiChange()\" [disabled]=\"isSaving\">\r\n </dx-radio-group>\r\n </div>\r\n </div>\r\n\r\n <!-- Koli Count for KISMI Pallet -->\r\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\r\n [min]=\"1\" [disabled]=\"isSaving\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Calculated Total Quantity -->\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\r\n [stylingMode]=\"'filled'\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Girilebilecek Kalan Miktar\" [(value)]=\"workOrderInfo.remainingAllowedQty\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Quality Status Info -->\r\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\r\n <div class=\"col-md-12\">\r\n <div class=\"alert alert-info\" role=\"alert\">\r\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receipt History -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-12\">\r\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\r\n \u00DCretimden Giri\u015F Hareketleri\r\n </div>\r\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\r\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\r\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\r\n [calculateCellValue]=\"calcDocStatus\">\r\n </dxi-column>\r\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\r\n <dxo-summary>\r\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\r\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\n", styles: [".page-title{margin:0;padding:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i4.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i5.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "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", "onExporting", "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", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "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: i6.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: i6.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i6.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "component", type: i5.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i5.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i7.DxRadioGroupComponent, selector: "dx-radio-group", inputs: ["accessKey", "activeStateEnabled", "dataSource", "disabled", "displayExpr", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "isValid", "items", "itemTemplate", "layout", "name", "readOnly", "rtlEnabled", "tabIndex", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueExpr", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "dataSourceChange", "disabledChange", "displayExprChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isValidChange", "itemsChange", "itemTemplateChange", "layoutChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "onBlur"] }] });
216
291
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFillingReceiptFromProductionComponent, decorators: [{
217
292
  type: Component,
218
- args: [{ selector: 'lib-hit-filling-receipt-from-production', template: "<abp-page [breadcrumb]=\"false\">\n <abp-page-toolbar-container class=\"col\">\n <div class=\"row\">\n <h3 class=\"page-title\">\n \u00DCretimden Giri\u015F\n </h3>\n </div>\n <div class=\"row text-lg-end pt-2\">\n <div class=\"col-6\">\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\n <i class=\"fa fa-check me-1\"></i>\n \u00DCretimden Giri\u015F Yap\n </button>\n </div>\n <div class=\"col-6\">\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\n <i class=\"fa fa-broom me-1\"></i>\n Temizle\n </button>\n </div>\n </div>\n </abp-page-toolbar-container>\n\n <div class=\"card mt-2\">\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\n <!-- Work Order Input -->\n <div style=\"display: flex; align-items: center;\">\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded\">\n </dx-number-box>\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\n [disabled]=\"isWorkOrderLoaded\">\n </dx-button>\n </div>\n\n <!-- Work Order Information -->\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\n <!-- Product Info -->\n <div class=\"row\">\n <div class=\"col-md-6\">\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\n </dx-text-box>\n </div>\n <div class=\"col-md-6\">\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\n </dx-text-box>\n </div>\n </div>\n\n <div class=\"row mt-2\">\n <div class=\"col-md-3\">\n <dx-number-box \n label=\"Planlanan Miktar\" \n [(value)]=\"workOrderInfo.plannedQty\" \n [disabled]=\"true\">\n </dx-number-box>\n </div>\n <div class=\"col-md-3\">\n <dx-number-box \n label=\"Tamamlanan Miktar\" \n [(value)]=\"workOrderInfo.cmpltQty\" \n [disabled]=\"true\">\n </dx-number-box>\n </div>\n <div class=\"col-md-3\">\n <dx-text-box \n label=\"Depo\" \n [(value)]=\"workOrderInfo.warehouse\" \n [disabled]=\"true\">\n </dx-text-box>\n </div>\n <div class=\"col-md-3\">\n <dx-text-box \n label=\"Ambalaj Lot\" \n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \n [disabled]=\"true\">\n </dx-text-box>\n </div>\n </div>\n\n <!-- Pallet Type Selection -->\n <div class=\"row mt-3\">\n <div class=\"col-md-12\">\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\n (onValueChanged)=\"onPaletTipiChange()\">\n </dx-radio-group>\n </div>\n </div>\n\n <!-- Koli Count for KISMI Pallet -->\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\n <div class=\"col-md-6\">\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\n [min]=\"1\">\n </dx-number-box>\n </div>\n </div>\n\n <!-- Calculated Total Quantity -->\n <div class=\"row mt-2\">\n <div class=\"col-md-4\">\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\n [stylingMode]=\"'filled'\">\n </dx-number-box>\n </div>\n <div class=\"col-md-4\">\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\n </dx-number-box>\n </div>\n <div class=\"col-md-4\">\n <dx-number-box label=\"Girilebilecek Kalan Miktar\" [(value)]=\"workOrderInfo.remainingAllowedQty\"\n [disabled]=\"true\">\n </dx-number-box>\n </div>\n </div>\n\n <!-- Quality Status Info -->\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\n <div class=\"col-md-12\">\n <div class=\"alert alert-info\" role=\"alert\">\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\n </div>\n </div>\n </div>\n\n <!-- Receipt History -->\n <div class=\"row mt-3\">\n <div class=\"col-12\">\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\n \u00DCretimden Giri\u015F Hareketleri\n </div>\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\n <dxo-paging [enabled]=\"false\"></dxo-paging>\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\n [calculateCellValue]=\"calcDocStatus\">\n </dxi-column>\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\n <dxo-summary>\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\n </dxo-summary>\n </dx-data-grid>\n </div>\n </div>\n </div>\n </div>\n </div>\n</abp-page>", styles: [".page-title{margin:0;padding:0}\n"] }]
293
+ args: [{ selector: 'lib-hit-filling-receipt-from-production', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n \u00DCretimden Giri\u015F\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-check me-1\"></i>\r\n \u00DCretimden Giri\u015F Yap\r\n </button>\r\n </div>\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\" [disabled]=\"isSaving\">\n <i class=\"fa fa-broom me-1\"></i>\r\n Temizle\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div *ngIf=\"isSaving\" class=\"alert alert-warning\" role=\"status\" aria-live=\"polite\">\r\n <div>{{ operationStatusMessage }}</div>\r\n <div class=\"mt-1\">\u0130\u015Flem anahtar\u0131: {{ pendingOperationId }}</div>\r\n <button class=\"btn btn-outline-secondary btn-sm mt-2\" type=\"button\" (click)=\"refreshOperationStatus()\"\r\n [disabled]=\"isLoading || isCheckingOperationStatus\">\r\n Sonucu Tekrar Kontrol Et\r\n </button>\r\n </div>\r\n <!-- Work Order Input -->\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\" label=\"\u0130\u015F Emri No\" [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" (onEnterKey)=\"getProductionOrder()\" [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"search\" type=\"default\" (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"isWorkOrderLoaded || isSaving\">\n </dx-button>\r\n </div>\r\n\r\n <!-- Work Order Information -->\r\n <div class=\"mt-3\" *ngIf=\"isWorkOrderLoaded && workOrderInfo\">\r\n <!-- Product Info -->\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Kodu\" [(value)]=\"workOrderInfo.itemCode\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <dx-text-box label=\"\u00DCr\u00FCn Ad\u0131\" [(value)]=\"workOrderInfo.itemName\" [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Planlanan Miktar\" \r\n [(value)]=\"workOrderInfo.plannedQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-number-box \r\n label=\"Tamamlanan Miktar\" \r\n [(value)]=\"workOrderInfo.cmpltQty\" \r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Depo\" \r\n [(value)]=\"workOrderInfo.warehouse\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-3\">\r\n <dx-text-box \r\n label=\"Ambalaj Lot\" \r\n [(value)]=\"workOrderInfo.u_TRKAMBALAJLOT\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Pallet Type Selection -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-12\">\r\n <dx-radio-group #paletTipiRef [items]=\"paletTipleri\" layout=\"horizontal\" [(value)]=\"paletTipi\"\r\n (onValueChanged)=\"onPaletTipiChange()\" [disabled]=\"isSaving\">\r\n </dx-radio-group>\r\n </div>\r\n </div>\r\n\r\n <!-- Koli Count for KISMI Pallet -->\r\n <div class=\"row mt-2\" *ngIf=\"paletTipi === 'KISMI'\">\r\n <div class=\"col-md-6\">\r\n <dx-number-box #koliAdetRef label=\"Koli Adedi\" [(value)]=\"koliAdet\" (onValueChanged)=\"onKoliAdetChange()\"\r\n [min]=\"1\" [disabled]=\"isSaving\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Calculated Total Quantity -->\r\n <div class=\"row mt-2\">\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Toplam Miktar (Adet)\" [(value)]=\"toplamMiktar\" [disabled]=\"true\"\r\n [stylingMode]=\"'filled'\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Koli \u0130\u00E7i Adet\" [(value)]=\"workOrderInfo.salPackUn\" [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <dx-number-box label=\"Girilebilecek Kalan Miktar\" [(value)]=\"workOrderInfo.remainingAllowedQty\"\r\n [disabled]=\"true\">\r\n </dx-number-box>\r\n </div>\r\n </div>\r\n\r\n <!-- Quality Status Info -->\r\n <div class=\"row mt-2\" *ngIf=\"workOrderInfo.u_KaliteDurumu\">\r\n <div class=\"col-md-12\">\r\n <div class=\"alert alert-info\" role=\"alert\">\r\n <strong>Kalite Durumu:</strong> {{ workOrderInfo.u_KaliteDurumu }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receipt History -->\r\n <div class=\"row mt-3\">\r\n <div class=\"col-12\">\r\n <div class=\"fw-semibold mb-1\" style=\"font-size: 13px;\">\r\n \u00DCretimden Giri\u015F Hareketleri\r\n </div>\r\n <dx-data-grid [dataSource]=\"workOrderInfo.receiptHistory\" [showBorders]=\"true\" [columnAutoWidth]=\"true\"\r\n [wordWrapEnabled]=\"false\" [rowAlternationEnabled]=\"true\" [hoverStateEnabled]=\"true\"\r\n [noDataText]=\"'Hen\u00FCz giri\u015F hareketi bulunmamaktad\u0131r.'\" [height]=\"'auto'\">\r\n <dxo-scrolling mode=\"standard\"></dxo-scrolling>\r\n <dxo-paging [enabled]=\"false\"></dxo-paging>\r\n <dxi-column caption=\"#\" name=\"rowNum\" [width]=\"40\" alignment=\"center\" [calculateCellValue]=\"calcRowIndex\"></dxi-column>\r\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" [minWidth]=\"110\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"batchNum\" caption=\"Parti No\" [minWidth]=\"130\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"quantity\" caption=\"Miktar\" dataType=\"number\" [minWidth]=\"75\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"whsName\" caption=\"Depo\" [minWidth]=\"100\" alignment=\"center\"></dxi-column>\r\n <dxi-column dataField=\"docStatus\" caption=\"Durum\" [minWidth]=\"105\" alignment=\"center\"\r\n [calculateCellValue]=\"calcDocStatus\">\r\n </dxi-column>\r\n <dxi-column dataField=\"userCode\" caption=\"Kullan\u0131c\u0131\" [minWidth]=\"80\" alignment=\"center\"></dxi-column>\r\n <dxo-summary>\r\n <dxi-total-item column=\"docNum\" summaryType=\"count\" displayFormat=\"Toplam\"></dxi-total-item>\r\n <dxi-total-item column=\"quantity\" summaryType=\"sum\" displayFormat=\"{0}\" [valueFormat]=\"formatNumber\"></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\n", styles: [".page-title{margin:0;padding:0}\n"] }]
219
294
  }], ctorParameters: function () { return [{ type: i1.HitFillingReceiptFromProductionService }, { type: i2.ConfirmationService }, { type: i0.NgZone }]; }, propDecorators: { nmbBoxIsEmriNo: [{
220
295
  type: ViewChild,
221
296
  args: ['isEmriNoRef', { static: false }]
@@ -226,4 +301,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
226
301
  type: ViewChild,
227
302
  args: ['koliAdetRef', { static: false }]
228
303
  }] } });
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZpbGxpbmctcmVjZWlwdC1mcm9tLXByb2R1Y3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXJldGltLXlvbmV0aW1pL3NyYy9saWIvY29tcG9uZW50cy9oaXQtZmlsbGluZy1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbi9oaXQtZmlsbGluZy1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1maWxsaW5nLXJlY2VpcHQtZnJvbS1wcm9kdWN0aW9uL2hpdC1maWxsaW5nLXJlY2VpcHQtZnJvbS1wcm9kdWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFlN0QsTUFBTSxPQUFPLHdDQUF3QztJQWlCbkQsWUFDVSxPQUErQyxFQUMvQyxZQUFpQyxFQUNqQyxNQUFjO1FBRmQsWUFBTyxHQUFQLE9BQU8sQ0FBd0M7UUFDL0MsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFkeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxrQkFBYSxHQUF3QixJQUFJLENBQUM7UUFFMUMsa0JBQWtCO1FBQ2xCLGNBQVMsR0FBVyxLQUFLLENBQUMsQ0FBQyxlQUFlO1FBQzFDLGlCQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUFXLElBQUksQ0FBQztRQUN4QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQXVNekIsaUJBQVksR0FBRyxD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QUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3FJQXhQVSx3Q0FBd0M7eUhBQXhDLHdDQUF3QywrWENmckQsMDJOQTJKVzsyRkQ1SUUsd0NBQXdDO2tCQUxwRCxTQUFTOytCQUNFLHlDQUF5QztvTEFLTixjQUFjO3NCQUExRCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0csY0FBYztzQkFBM0QsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNDLGNBQWM7c0JBQTFELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER4TnVtYmVyQm94Q29tcG9uZW50LCBEeFJhZGlvR3JvdXBDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgSGl0RmlsbGluZ1JlY2VpcHRGcm9tUHJvZHVjdGlvblNlcnZpY2UsXG4gIEdldFdvcmtPcmRlckluZm9EdG8sXG4gIFdvcmtPcmRlckxpbmVEdG8sXG4gIFJlY2VpcHRIaXN0b3J5SXRlbUR0b1xufSBmcm9tICcuLi8uLi9oaXQtcHJveHkvaGl0LWZpbGxpbmctcmVjZWlwdC1mcm9tLXByb2R1Y3Rpb24vaGl0LWZpbGxpbmctcmVjZWlwdC1mcm9tLXByb2R1Y3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItaGl0LWZpbGxpbmctcmVjZWlwdC1mcm9tLXByb2R1Y3Rpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vaGl0LWZpbGxpbmctcmVjZWlwdC1mcm9tLXByb2R1Y3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oaXQtZmlsbGluZy1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbi5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEhpdEZpbGxpbmdSZWNlaXB0RnJvbVByb2R1Y3Rpb25Db21wb25lbnQge1xuICBAVmlld0NoaWxkKCdpc0VtcmlOb1JlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBubWJCb3hJc0VtcmlObzogRHhOdW1iZXJCb3hDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3BhbGV0VGlwaVJlZicsIHsgc3RhdGljOiBmYWxzZSB9KSByYWRpb1BhbGV0VGlwaTogRHhSYWRpb0dyb3VwQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdrb2xpQWRldFJlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBubWJCb3hLb2xpQWRldDogRHhOdW1iZXJCb3hDb21wb25lbnQ7XG5cbiAgaXNFbXJpTm86IG51bWJlcjtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGlzV29ya09yZGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHdvcmtPcmRlckluZm86IEdldFdvcmtPcmRlckluZm9EdG8gPSBudWxsO1xuICBcbiAgLy8gUGFsbGV0IGNvbnRyb2xzXG4gIHBhbGV0VGlwaTogc3RyaW5nID0gJ1RBTSc7IC8vIFRBTSBvciBLSVNNSVxuICBwYWxldFRpcGxlcmkgPSBbJ1RBTScsICdLSVNNSSddO1xuICBrb2xpQWRldDogbnVtYmVyID0gbnVsbDtcbiAgdG9wbGFtTWlrdGFyOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VydmljZTogSGl0RmlsbGluZ1JlY2VpcHRGcm9tUHJvZHVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuZm9jdXNPbklzRW1yaU5vKCk7XG4gIH1cblxuICBhc3luYyBnZXRQcm9kdWN0aW9uT3JkZXIoKSB7XG4gICAgaWYgKCF0aGlzLmlzRW1yaU5vKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaXNXb3JrT3JkZXJMb2FkZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuc2VydmljZS5nZXRXb3JrT3JkZXJJbmZvKHRoaXMuaXNFbXJpTm8pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzZnVsICYmIHJlc3BvbnNlLml0ZW1zKSB7XG4gICAgICAgICAgdGhpcy53b3JrT3JkZXJJbmZvID0gcmVzcG9uc2UuaXRlbXM7XG4gICAgICAgICAgdGhpcy5pc1dvcmtPcmRlckxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGRlZmF1bHQgdmFsdWVzIGZvciBUQU0gcGFsbGV0XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVUb3RhbFF1YW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIHRoaXMuaXNXb3JrT3JkZXJMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24uc3RhdHVzJC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbGwoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvblBhbGV0VGlwaUNoYW5nZSgpIHtcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUXVhbnRpdHkoKTtcbiAgICBcbiAgICBpZiAodGhpcy5wYWxldFRpcGkgPT09ICdLSVNNSScpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm5tYkJveEtvbGlBZGV0Py5pbnN0YW5jZS5mb2N1cygpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBvbktvbGlBZGV0Q2hhbmdlKCkge1xuICAgIHRoaXMuY2FsY3VsYXRlVG90YWxRdWFudGl0eSgpO1xuICB9XG5cbiAgY2FsY3VsYXRlVG90YWxRdWFudGl0eSgpIHtcbiAgICBpZiAoIXRoaXMud29ya09yZGVySW5mbykge1xuICAgICAgdGhpcy50b3BsYW1NaWt0YXIgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNhbFBhY2tVbiA9IHRoaXMud29ya09yZGVySW5mby5zYWxQYWNrVW4gfHwgMDtcbiAgICBkZWJ1Z2dlcjtcbiAgICBpZiAodGhpcy5wYWxldFRpcGkgPT09ICdUQU0nKSB7XG4gICAgICAvLyBUYW0gUGFsZXQ6IFBhbGxldCBoZWlnaHQgw5cgUGllY2VzIHBlciBib3hcbiAgICAgIGNvbnN0IHBhbGV0WXVrc2VrbGlrID0gdGhpcy53b3JrT3JkZXJJbmZvLnVfREtwYWxldHl1c2VrbGlrIHx8IDA7XG4gICAgICB0aGlzLnRvcGxhbU1pa3RhciA9IHBhbGV0WXVrc2VrbGlrICogc2FsUGFja1VuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBLxLFzbWkgUGFsZXQ6IEtvbGkgY291bnQgw5cgUGllY2VzIHBlciBib3hcbiAgICAgIGNvbnN0IGtvbGlBZGV0ID0gdGhpcy5rb2xpQWRldCB8fCAwO1xuICAgICAgY29uc3Qga2lzbWlNaWt0YXIgPSBrb2xpQWRldCAqIHNhbFBhY2tVbjtcbiAgICAgIFxuICAgICAgLy8gQ2FsY3VsYXRlIFRBTSBwYWxsZXQgcXVhbnRpdHkgZm9yIGNvbXBhcmlzb25cbiAgICAgIGNvbnN0IHBhbGV0WXVrc2VrbGlrID0gdGhpcy53b3JrT3JkZXJJbmZvLnVfREtwYWxldHl1c2VrbGlrIHx8IDA7XG4gICAgICBjb25zdCB0YW1QYWxldE1pa3RhciA9IHBhbGV0WXVrc2VrbGlrICogc2FsUGFja1VuO1xuICAgICAgXG4gICAgICAvLyBLSVNNSSBxdWFudGl0eSBzaG91bGQgbm90IGV4Y2VlZCBUQU0gcGFsbGV0IHF1YW50aXR5XG4gICAgICBpZiAoa2lzbWlNaWt0YXIgPiB0YW1QYWxldE1pa3Rhcikge1xuICAgICAgICB0aGlzLnRvcGxhbU1pa3RhciA9IHRhbVBhbGV0TWlrdGFyO1xuICAgICAgICBcbiAgICAgICAgLy8gUmVzZXQgdG8gbWF4aW11bSBhbGxvd2VkIHZhbHVlIGFzeW5jaHJvbm91c2x5IHRvIGF2b2lkIGNoYW5nZSBkZXRlY3Rpb24gbG9vcFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmtvbGlBZGV0ID0gcGFsZXRZdWtzZWtsaWs7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignJywgYEtvbGkgYWRlZGkgJHtwYWxldFl1a3Nla2xpa30naSBnZcOnZW1leiEgKFRBTSBwYWxldCBtaWt0YXLEsTogJHt0YW1QYWxldE1pa3Rhcn0pYCwge1xuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXG4gICAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcbiAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b3BsYW1NaWt0YXIgPSBraXNtaU1pa3RhcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIGRlYnVnZ2VyO1xuICAgIGlmICghdGhpcy5pc0VtcmlObyB8fCAhdGhpcy53b3JrT3JkZXJJbmZvIHx8IHRoaXMudG9wbGFtTWlrdGFyIDw9IDAgfHwgdGhpcy5pc1NhdmluZykge1xuICAgICAgaWYgKCF0aGlzLmlzU2F2aW5nKSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oJycsICdMw7x0ZmVuIHTDvG0gYWxhbmxhcsSxIGRvbGR1cnVuIScsIHtcbiAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUb2xlcmFucyBrb250cm9sw7wgKCUxNSkgLSBrYWxhbiBpemluIGJhY2tlbmQnZGUgaGVzYXBsYW7EsXIsIG9yYW4gYnVyYWRhIHRla3Jhcmxhbm1hei5cbiAgICAvLyBOaWhhaSBrYXJhciBLYXlkZXQgYW7EsW5kYSBiYWNrZW5kJ2RlLCBEQidkZW4geWVuaWRlbiBva3VuYW4gQ21wbHRRdHkgaWxlIHZlcmlsaXIuXG4gICAgY29uc3Qga2FsYW5JemluID0gdGhpcy53b3JrT3JkZXJJbmZvLnJlbWFpbmluZ0FsbG93ZWRRdHkgPz8gMDtcbiAgICBpZiAodGhpcy50b3BsYW1NaWt0YXIgPiBrYWxhbkl6aW4pIHtcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oXG4gICAgICAgICcnLFxuICAgICAgICBgVG9sZXJhbnMgc8SxbsSxcsSxIGHFn8SxbGTEsS4gUGxhbmxhbmFuIG1pa3RhcjogJHt0aGlzLndvcmtPcmRlckluZm8ucGxhbm5lZFF0eX0sIGAgK1xuICAgICAgICBgdG9wbGFtIGdpcmlsZW46ICR7dGhpcy53b3JrT3JkZXJJbmZvLmNtcGx0UXR5fSwgYCArXG4gICAgICAgIGBnaXJpbGViaWxlY2VrIGthbGFuIG1pa3RhcjogJHtrYWxhbkl6aW59LiDEsMWfbGVtIGtheWRlZGlsbWVkaS5gLFxuICAgICAgICB7XG4gICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxuICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlRGF0YSA9IHtcbiAgICAgIGRvY0VudHJ5OiB0aGlzLmlzRW1yaU5vLFxuICAgICAgcGFsbGV0VHlwZTogdGhpcy5wYWxldFRpcGksXG4gICAgICBrb2xpQ291bnQ6IHRoaXMucGFsZXRUaXBpID09PSAnS0lTTUknID8gdGhpcy5rb2xpQWRldCA6IG51bGwsXG4gICAgICB0b3RhbFF1YW50aXR5OiB0aGlzLnRvcGxhbU1pa3RhcixcbiAgICAgIHdhcmVob3VzZUNvZGU6IHRoaXMud29ya09yZGVySW5mby53YXJlaG91c2UsXG4gICAgICBiYXRjaE51bWJlcjogJycsIC8vIEJhdGNoIG51bWJlciB3aWxsIGJlIGdlbmVyYXRlZCBieSBTQVBcbiAgICAgIGNvbXBvbmVudHNUb0NvbnN1bWU6IHRoaXMucHJlcGFyZUNvbXBvbmVudHNUb0NvbnN1bWUoKVxuICAgIH07XG5cbiAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZVJlY2VpcHQoc2F2ZURhdGEpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzZnVsKSB7XG4gICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uc3VjY2VzcygnJywgJ8OccmV0aW1kZW4gZ2lyacWfIGJhxZ9hcsSxeWxhIGdlcsOnZWtsZcWfdGlyaWxkaSEnLCB7XG4gICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcbiAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNsZWFyQWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByZXBhcmVDb21wb25lbnRzVG9Db25zdW1lKCk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMud29ya09yZGVySW5mbyB8fCAhdGhpcy53b3JrT3JkZXJJbmZvLmxpbmVzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuICAgIGNvbnN0IGl0ZW1Db2RlID0gdGhpcy53b3JrT3JkZXJJbmZvLml0ZW1Db2RlO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgWU0gb3IgMTUxKiBwcm9kdWN0XG4gICAgY29uc3QgaXNZTSA9IGl0ZW1Db2RlLnN0YXJ0c1dpdGgoJ1lNJyk7XG4gICAgY29uc3QgaXMxNTEgPSBpdGVtQ29kZS5zdGFydHNXaXRoKCcxNTEnKTtcblxuICAgIC8vIEdldCBjb250cm9sbGVkIGxpbmVzIChZTS8xNTEqIGl0ZW1zIG1hcmtlZCB3aXRoIFVfS29udHJvbD0nRScpXG4gICAgY29uc3QgY29udHJvbGxlZExpbmVzID0gdGhpcy53b3JrT3JkZXJJbmZvLmxpbmVzLmZpbHRlcihsaW5lID0+IFxuICAgICAgbGluZS5pc0NvbnRyb2xsZWQgJiYgbGluZS5iYXRjaE51bWJlclxuICAgICk7XG5cbiAgICAvLyBGb3IgWU0vMTUxKiBwcm9kdWN0cywgY29uc3VtZSBieSBsb3QgZnJvbSBjb250cm9sIHNjcmVlblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBjb250cm9sbGVkTGluZXMpIHtcbiAgICAgICAgY29tcG9uZW50cy5wdXNoKHtcbiAgICAgICAgICBpdGVtQ29kZTogbGluZS5pdGVtQ29kZSxcbiAgICAgICAgICBxdWFudGl0eTogbGluZS5pc3N1ZWRRdHksXG4gICAgICAgICAgd2FyZWhvdXNlQ29kZTogbGluZS53YXJlaG91c2UsXG4gICAgICAgICAgYmF0Y2hOdW1iZXI6IGxpbmUuYmF0Y2hOdW1iZXIsXG4gICAgICAgICAgYmFzZUxpbmU6IGxpbmUubGluZU51bVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3Igb3RoZXIgY29tcG9uZW50cywgdXNlIFwiVGV5aXQgc29ucmFzxLEgb3RvbWF0aWsgw6dla21lXCIgbG9naWNcbiAgICAvLyAoVGhpcyB3b3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBiYWNrZW5kIHdpdGggRklGTyBmb3IgYmF0Y2gvc2VyaWFsIGl0ZW1zKVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gIH1cblxuICBjYWxjUm93SW5kZXggPSAocm93OiBSZWNlaXB0SGlzdG9yeUl0ZW1EdG8pOiBudW1iZXIgPT5cbiAgICAodGhpcy53b3JrT3JkZXJJbmZvPy5yZWNlaXB0SGlzdG9yeT8uaW5kZXhPZihyb3cpID8/IC0xKSArIDE7XG5cbiAgY2FsY0RvY1N0YXR1cyA9IChyb3c6IFJlY2VpcHRIaXN0b3J5SXRlbUR0byk6IHN0cmluZyA9PlxuICAgIHJvdy5kb2NTdGF0dXMgPT09ICdDJyA/ICdUYW1hbWxhbmTEsScgOiAnQmVrbGVtZWRlJztcblxuICBmb3JtYXROdW1iZXIgPSAodmFsdWU6IG51bWJlcikgPT4gdmFsdWU/LnRvTG9jYWxlU3RyaW5nKCd0ci1UUicpID8/ICcnO1xuXG5cbiAgY2xlYXJBbGwoKSB7XG4gICAgdGhpcy5pc1dvcmtPcmRlckxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNFbXJpTm8gPSBudWxsO1xuICAgIHRoaXMud29ya09yZGVySW5mbyA9IG51bGw7XG4gICAgdGhpcy5wYWxldFRpcGkgPSAnVEFNJztcbiAgICB0aGlzLmtvbGlBZGV0ID0gbnVsbDtcbiAgICB0aGlzLnRvcGxhbU1pa3RhciA9IDA7XG4gICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNPbklzRW1yaU5vKCk7XG4gIH1cblxuICBnZXQgaXNTYXZlQnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRW1yaU5vIHx8IFxuICAgICAgICAgICAhdGhpcy53b3JrT3JkZXJJbmZvIHx8IFxuICAgICAgICAgICB0aGlzLnRvcGxhbU1pa3RhciA8PSAwIHx8XG4gICAgICAgICAgICh0aGlzLnBhbGV0VGlwaSA9PT0gJ0tJU01JJyAmJiAoIXRoaXMua29saUFkZXQgfHwgdGhpcy5rb2xpQWRldCA8PSAwKSkgfHxcbiAgICAgICAgICAgdGhpcy5pc1NhdmluZztcbiAgfVxuXG4gIGZvY3VzT25Jc0VtcmlObygpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubm1iQm94SXNFbXJpTm8/Lmluc3RhbmNlLmZvY3VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfVxuXG59XG4iLCI8YWJwLXBhZ2UgW2JyZWFkY3J1bWJdPVwiZmFsc2VcIj5cbiAgPGFicC1wYWdlLXRvb2xiYXItY29udGFpbmVyIGNsYXNzPVwiY29sXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxuICAgICAgICDDnHJldGltZGVuIEdpcmnFn1xuICAgICAgPC9oMz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHRleHQtbGctZW5kIHB0LTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cImlzU2F2ZUJ1dHRvbkRpc2FibGVkXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBtZS0xXCI+PC9pPlxuICAgICAgICAgIMOccmV0aW1kZW4gR2lyacWfIFlhcFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbGVhckFsbCgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1icm9vbSBtZS0xXCI+PC9pPlxuICAgICAgICAgIFRlbWl6bGVcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9hYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwiY2FyZCBtdC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQxcHgpOyBvdmVyZmxvdzogYXV0bztcIj5cbiAgICAgIDwhLS0gV29yayBPcmRlciBJbnB1dCAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICA8ZHgtbnVtYmVyLWJveCAjaXNFbXJpTm9SZWYgY2xhc3M9XCJtZS0xXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIGxhYmVsPVwixLDFnyBFbXJpIE5vXCIgWyh2YWx1ZSldPVwiaXNFbXJpTm9cIlxuICAgICAgICAgIChvbkNoYW5nZSk9XCJnZXRQcm9kdWN0aW9uT3JkZXIoKVwiIChvbkVudGVyS2V5KT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCIgW2Rpc2FibGVkXT1cImlzV29ya09yZGVyTG9hZGVkXCI+XG4gICAgICAgIDwvZHgtbnVtYmVyLWJveD5cbiAgICAgICAgPGR4LWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi10b3A6IDcuNXB4O1wiIGljb249XCJzZWFyY2hcIiB0eXBlPVwiZGVmYXVsdFwiIChvbkNsaWNrKT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNXb3JrT3JkZXJMb2FkZWRcIj5cbiAgICAgICAgPC9keC1idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBXb3JrIE9yZGVyIEluZm9ybWF0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cImlzV29ya09yZGVyTG9hZGVkICYmIHdvcmtPcmRlckluZm9cIj5cbiAgICAgICAgPCEtLSBQcm9kdWN0IEluZm8gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxkeC10ZXh0LWJveCBsYWJlbD1cIsOccsO8biBLb2R1XCIgWyh2YWx1ZSldPVwid29ya09yZGVySW5mby5pdGVtQ29kZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8L2R4LXRleHQtYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGR4LXRleHQtYm94IGxhYmVsPVwiw5xyw7xuIEFkxLFcIiBbKHZhbHVlKV09XCJ3b3JrT3JkZXJJbmZvLml0ZW1OYW1lXCIgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxuICAgICAgICAgICAgPGR4LW51bWJlci1ib3ggXG4gICAgICAgICAgICAgIGxhYmVsPVwiUGxhbmxhbmFuIE1pa3RhclwiIFxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ3b3JrT3JkZXJJbmZvLnBsYW5uZWRRdHlcIiBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgICAgIDxkeC1udW1iZXItYm94IFxuICAgICAgICAgICAgICBsYWJlbD1cIlRhbWFtbGFuYW4gTWlrdGFyXCIgXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cIndvcmtPcmRlckluZm8uY21wbHRRdHlcIiBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgICAgIDxkeC10ZXh0LWJveCBcbiAgICAgICAgICAgICAgbGFiZWw9XCJEZXBvXCIgXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cIndvcmtPcmRlckluZm8ud2FyZWhvdXNlXCIgXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8L2R4LXRleHQtYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3ggXG4gICAgICAgICAgICAgIGxhYmVsPVwiQW1iYWxhaiBMb3RcIiBcbiAgICAgICAgICAgICAgWyh2YWx1ZSldPVwid29ya09yZGVySW5mby51X1RSS0FNQkFMQUpMT1RcIiBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUGFsbGV0IFR5cGUgU2VsZWN0aW9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICA8ZHgtcmFkaW8tZ3JvdXAgI3BhbGV0VGlwaVJlZiBbaXRlbXNdPVwicGFsZXRUaXBsZXJpXCIgbGF5b3V0PVwiaG9yaXpvbnRhbFwiIFsodmFsdWUpXT1cInBhbGV0VGlwaVwiXG4gICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJvblBhbGV0VGlwaUNoYW5nZSgpXCI+XG4gICAgICAgICAgICA8L2R4LXJhZGlvLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEtvbGkgQ291bnQgZm9yIEtJU01JIFBhbGxldCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCIgKm5nSWY9XCJwYWxldFRpcGkgPT09ICdLSVNNSSdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxkeC1udW1iZXItYm94ICNrb2xpQWRldFJlZiBsYWJlbD1cIktvbGkgQWRlZGlcIiBbKHZhbHVlKV09XCJrb2xpQWRldFwiIChvblZhbHVlQ2hhbmdlZCk9XCJvbktvbGlBZGV0Q2hhbmdlKClcIlxuICAgICAgICAgICAgICBbbWluXT1cIjFcIj5cbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDYWxjdWxhdGVkIFRvdGFsIFF1YW50aXR5IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxkeC1udW1iZXItYm94IGxhYmVsPVwiVG9wbGFtIE1pa3RhciAoQWRldClcIiBbKHZhbHVlKV09XCJ0b3BsYW1NaWt0YXJcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzdHlsaW5nTW9kZV09XCInZmlsbGVkJ1wiPlxuICAgICAgICAgICAgPC9keC1udW1iZXItYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgPGR4LW51bWJlci1ib3ggbGFiZWw9XCJLb2xpIMSww6dpIEFkZXRcIiBbKHZhbHVlKV09XCJ3b3JrT3JkZXJJbmZvLnNhbFBhY2tVblwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8L2R4LW51bWJlci1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICA8ZHgtbnVtYmVyLWJveCBsYWJlbD1cIkdpcmlsZWJpbGVjZWsgS2FsYW4gTWlrdGFyXCIgWyh2YWx1ZSldPVwid29ya09yZGVySW5mby5yZW1haW5pbmdBbGxvd2VkUXR5XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBRdWFsaXR5IFN0YXR1cyBJbmZvIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIiAqbmdJZj1cIndvcmtPcmRlckluZm8udV9LYWxpdGVEdXJ1bXVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgICAgICA8c3Ryb25nPkthbGl0ZSBEdXJ1bXU6PC9zdHJvbmc+IHt7IHdvcmtPcmRlckluZm8udV9LYWxpdGVEdXJ1bXUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJlY2VpcHQgSGlzdG9yeSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIG1iLTFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDtcIj5cbiAgICAgICAgICAgICAgw5xyZXRpbWRlbiBHaXJpxZ8gSGFyZWtldGxlcmlcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCBbZGF0YVNvdXJjZV09XCJ3b3JrT3JkZXJJbmZvLnJlY2VpcHRIaXN0b3J5XCIgW3Nob3dCb3JkZXJzXT1cInRydWVcIiBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBbd29yZFdyYXBFbmFibGVkXT1cImZhbHNlXCIgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICBbbm9EYXRhVGV4dF09XCInSGVuw7x6IGdpcmnFnyBoYXJla2V0aSBidWx1bm1hbWFrdGFkxLFyLidcIiBbaGVpZ2h0XT1cIidhdXRvJ1wiPlxuICAgICAgICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwic3RhbmRhcmRcIj48L2R4by1zY3JvbGxpbmc+XG4gICAgICAgICAgICAgIDxkeG8tcGFnaW5nIFtlbmFibGVkXT1cImZhbHNlXCI+PC9keG8tcGFnaW5nPlxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBjYXB0aW9uPVwiI1wiIG5hbWU9XCJyb3dOdW1cIiBbd2lkdGhdPVwiNDBcIiBhbGlnbm1lbnQ9XCJjZW50ZXJcIiBbY2FsY3VsYXRlQ2VsbFZhbHVlXT1cImNhbGNSb3dJbmRleFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jTnVtXCIgY2FwdGlvbj1cIkJlbGdlIE5vXCIgW21pbldpZHRoXT1cIjExMFwiIGFsaWdubWVudD1cImNlbnRlclwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiYmF0Y2hOdW1cIiBjYXB0aW9uPVwiUGFydGkgTm9cIiBbbWluV2lkdGhdPVwiMTMwXCIgYWxpZ25tZW50PVwiY2VudGVyXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJxdWFudGl0eVwiIGNhcHRpb249XCJNaWt0YXJcIiBkYXRhVHlwZT1cIm51bWJlclwiIFttaW5XaWR0aF09XCI3NVwiIGFsaWdubWVudD1cImNlbnRlclwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwid2hzTmFtZVwiIGNhcHRpb249XCJEZXBvXCIgW21pbldpZHRoXT1cIjEwMFwiIGFsaWdubWVudD1cImNlbnRlclwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZG9jU3RhdHVzXCIgY2FwdGlvbj1cIkR1cnVtXCIgW21pbldpZHRoXT1cIjEwNVwiIGFsaWdubWVudD1cImNlbnRlclwiXG4gICAgICAgICAgICAgICAgW2NhbGN1bGF0ZUNlbGxWYWx1ZV09XCJjYWxjRG9jU3RhdHVzXCI+XG4gICAgICAgICAgICAgIDwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidXNlckNvZGVcIiBjYXB0aW9uPVwiS3VsbGFuxLFjxLFcIiBbbWluV2lkdGhdPVwiODBcIiBhbGlnbm1lbnQ9XCJjZW50ZXJcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgIDxkeG8tc3VtbWFyeT5cbiAgICAgICAgICAgICAgICA8ZHhpLXRvdGFsLWl0ZW0gY29sdW1uPVwiZG9jTnVtXCIgc3VtbWFyeVR5cGU9XCJjb3VudFwiIGRpc3BsYXlGb3JtYXQ9XCJUb3BsYW1cIj48L2R4aS10b3RhbC1pdGVtPlxuICAgICAgICAgICAgICAgIDxkeGktdG90YWwtaXRlbSBjb2x1bW49XCJxdWFudGl0eVwiIHN1bW1hcnlUeXBlPVwic3VtXCIgZGlzcGxheUZvcm1hdD1cInswfVwiIFt2YWx1ZUZvcm1hdF09XCJmb3JtYXROdW1iZXJcIj48L2R4aS10b3RhbC1pdGVtPlxuICAgICAgICAgICAgICA8L2R4by1zdW1tYXJ5PlxuICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9hYnAtcGFnZT4iXX0=
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZpbGxpbmctcmVjZWlwdC1mcm9tLXByb2R1Y3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXJldGltLXlvbmV0aW1pL3NyYy9saWIvY29tcG9uZW50cy9oaXQtZmlsbGluZy1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbi9oaXQtZmlsbGluZy1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1maWxsaW5nLXJlY2VpcHQtZnJvbS1wcm9kdWN0aW9uL2hpdC1maWxsaW5nLXJlY2VpcHQtZnJvbS1wcm9kdWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBUzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBT3JELE1BQU0sT0FBTyx3Q0FBd0M7SUE2Qm5ELFlBQ1UsT0FBK0MsRUFDL0MsWUFBaUMsRUFDakMsTUFBYztRQUZkLFlBQU8sR0FBUCxPQUFPLENBQXdDO1FBQy9DLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBMUJ4QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLGtCQUFhLEdBQXdCLElBQUksQ0FBQztRQUUxQyxrQkFBa0I7UUFDbEIsY0FBUyxHQUFXLEtBQUssQ0FBQyxDQUFDLGVBQWU7UUFDMUMsaUJBQVksR0FBRyxDQUFDLEtB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QkFBMUQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNHLGNBQWM7c0JBQTNELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDQyxjQUFjO3NCQUExRCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER4TnVtYmVyQm94Q29tcG9uZW50LCBEeFJhZGlvR3JvdXBDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQge1xyXG4gIEhpdEZpbGxpbmdSZWNlaXB0RnJvbVByb2R1Y3Rpb25TZXJ2aWNlLFxuICBHZXRXb3JrT3JkZXJJbmZvRHRvLFxuICBSZWNlaXB0SGlzdG9yeUl0ZW1EdG8sXG4gIFJlY2VpcHRPcGVyYXRpb25TdGF0dXNEdG9cbn0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L2hpdC1maWxsaW5nLXJlY2VpcHQtZnJvbS1wcm9kdWN0aW9uL2hpdC1maWxsaW5nLXJlY2VpcHQtZnJvbS1wcm9kdWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1oaXQtZmlsbGluZy1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1maWxsaW5nLXJlY2VpcHQtZnJvbS1wcm9kdWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9oaXQtZmlsbGluZy1yZWNlaXB0LWZyb20tcHJvZHVjdGlvbi5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIaXRGaWxsaW5nUmVjZWlwdEZyb21Qcm9kdWN0aW9uQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKCdpc0VtcmlOb1JlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBubWJCb3hJc0VtcmlObzogRHhOdW1iZXJCb3hDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFsZXRUaXBpUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIHJhZGlvUGFsZXRUaXBpOiBEeFJhZGlvR3JvdXBDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgna29saUFkZXRSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgbm1iQm94S29saUFkZXQ6IER4TnVtYmVyQm94Q29tcG9uZW50O1xyXG5cclxuICBpc0VtcmlObzogbnVtYmVyO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNXb3JrT3JkZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3b3JrT3JkZXJJbmZvOiBHZXRXb3JrT3JkZXJJbmZvRHRvID0gbnVsbDtcclxuICBcclxuICAvLyBQYWxsZXQgY29udHJvbHNcclxuICBwYWxldFRpcGk6IHN0cmluZyA9ICdUQU0nOyAvLyBUQU0gb3IgS0lTTUlcclxuICBwYWxldFRpcGxlcmkgPSBbJ1RBTScsICdLSVNNSSddO1xyXG4gIGtvbGlBZGV0OiBudW1iZXIgPSBudWxsO1xyXG4gIHRvcGxhbU1pa3RhcjogbnVtYmVyID0gMDtcbiAgcGVuZGluZ09wZXJhdGlvbklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIG9wZXJhdGlvblN0YXR1c01lc3NhZ2UgPSAnJztcclxuICBpc0NoZWNraW5nT3BlcmF0aW9uU3RhdHVzID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBzdGF0dXNUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgc3RhdHVzQ2hlY2tGYWlsdXJlcyA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZ1N0b3JhZ2VLZXkgPSAndHVyczEwMTNSZWNlaXB0T3BlcmF0aW9uJztcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvckRpYWxvZ09wdGlvbnM6IFBhcnRpYWw8Q29uZmlybWF0aW9uLk9wdGlvbnM+ID0ge1xuICAgIGhpZGVZZXNCdG46IHRydWUsXG4gICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcbiAgICBkaXNtaXNzaWJsZTogZmFsc2UsXG4gIH07XG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2VydmljZTogSGl0RmlsbGluZ1JlY2VpcHRGcm9tUHJvZHVjdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGVuZGluZ09wZXJhdGlvbklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnBlbmRpbmdTdG9yYWdlS2V5KTtcbiAgICBpZiAodGhpcy5wZW5kaW5nT3BlcmF0aW9uSWQpIHtcbiAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5vcGVyYXRpb25TdGF0dXNNZXNzYWdlID0gJ8OWbmNla2kgw7xyZXRpbWRlbiBnaXJpxZ8gacWfbGVtaW5pbiBzb251Y3Uga29udHJvbCBlZGlsaXlvci4nO1xyXG4gICAgICB0aGlzLmNoZWNrT3BlcmF0aW9uU3RhdHVzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3RhdHVzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnN0YXR1c1RpbWVyKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmZvY3VzT25Jc0VtcmlObygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UHJvZHVjdGlvbk9yZGVyKCkge1xuICAgIGlmICghdGhpcy5pc0VtcmlObyB8fCB0aGlzLmlzU2F2aW5nKSB7XG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc1dvcmtPcmRlckxvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2VydmljZS5nZXRXb3JrT3JkZXJJbmZvKHRoaXMuaXNFbXJpTm8pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCAmJiByZXNwb25zZS5pdGVtcykge1xyXG4gICAgICAgICAgdGhpcy53b3JrT3JkZXJJbmZvID0gcmVzcG9uc2UuaXRlbXM7XHJcbiAgICAgICAgICB0aGlzLmlzV29ya09yZGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGRlZmF1bHQgdmFsdWVzIGZvciBUQU0gcGFsbGV0XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUXVhbnRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNXb3JrT3JkZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLnN0YXR1cyQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWxldFRpcGlDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsUXVhbnRpdHkoKTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMucGFsZXRUaXBpID09PSAnS0lTTUknKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubm1iQm94S29saUFkZXQ/Lmluc3RhbmNlLmZvY3VzKCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktvbGlBZGV0Q2hhbmdlKCkge1xyXG4gICAgdGhpcy5jYWxjdWxhdGVUb3RhbFF1YW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVUb3RhbFF1YW50aXR5KCkge1xyXG4gICAgaWYgKCF0aGlzLndvcmtPcmRlckluZm8pIHtcclxuICAgICAgdGhpcy50b3BsYW1NaWt0YXIgPSAwO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2FsUGFja1VuID0gdGhpcy53b3JrT3JkZXJJbmZvLnNhbFBhY2tVbiB8fCAwO1xyXG4gICAgaWYgKHRoaXMucGFsZXRUaXBpID09PSAnVEFNJykge1xuICAgICAgLy8gVGFtIFBhbGV0OiBQYWxsZXQgaGVpZ2h0IMOXIFBpZWNlcyBwZXIgYm94XHJcbiAgICAgIGNvbnN0IHBhbGV0WXVrc2VrbGlrID0gdGhpcy53b3JrT3JkZXJJbmZvLnVfREtwYWxldHl1c2VrbGlrIHx8IDA7XHJcbiAgICAgIHRoaXMudG9wbGFtTWlrdGFyID0gTWF0aC5yb3VuZChwYWxldFl1a3Nla2xpayAqIHNhbFBhY2tVbik7XG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gS8Sxc21pIFBhbGV0OiBLb2xpIGNvdW50IMOXIFBpZWNlcyBwZXIgYm94XHJcbiAgICAgIGNvbnN0IGtvbGlBZGV0ID0gdGhpcy5rb2xpQWRldCB8fCAwO1xyXG4gICAgICBjb25zdCBraXNtaU1pa3RhciA9IE1hdGgucm91bmQoa29saUFkZXQgKiBzYWxQYWNrVW4pO1xuICAgICAgXHJcbiAgICAgIC8vIENhbGN1bGF0ZSBUQU0gcGFsbGV0IHF1YW50aXR5IGZvciBjb21wYXJpc29uXHJcbiAgICAgIGNvbnN0IHBhbGV0WXVrc2VrbGlrID0gdGhpcy53b3JrT3JkZXJJbmZvLnVfREtwYWxldHl1c2VrbGlrIHx8IDA7XHJcbiAgICAgIGNvbnN0IHRhbVBhbGV0TWlrdGFyID0gTWF0aC5yb3VuZChwYWxldFl1a3Nla2xpayAqIHNhbFBhY2tVbik7XG4gICAgICBcclxuICAgICAgLy8gS0lTTUkgcXVhbnRpdHkgc2hvdWxkIG5vdCBleGNlZWQgVEFNIHBhbGxldCBxdWFudGl0eVxyXG4gICAgICBpZiAoa2lzbWlNaWt0YXIgPiB0YW1QYWxldE1pa3Rhcikge1xyXG4gICAgICAgIHRoaXMudG9wbGFtTWlrdGFyID0gdGFtUGFsZXRNaWt0YXI7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmVzZXQgdG8gbWF4aW11bSBhbGxvd2VkIHZhbHVlIGFzeW5jaHJvbm91c2x5IHRvIGF2b2lkIGNoYW5nZSBkZXRlY3Rpb24gbG9vcFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5rb2xpQWRldCA9IHBhbGV0WXVrc2VrbGlrO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oJycsIGBLb2xpIGFkZWRpICR7cGFsZXRZdWtzZWtsaWt9J2kgZ2XDp2VtZXohIChUQU0gcGFsZXQgbWlrdGFyxLE6ICR7dGFtUGFsZXRNaWt0YXJ9KWAsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9wbGFtTWlrdGFyID0ga2lzbWlNaWt0YXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzRW1yaU5vIHx8ICF0aGlzLndvcmtPcmRlckluZm8gfHwgdGhpcy50b3BsYW1NaWt0YXIgPD0gMCB8fCB0aGlzLmlzU2F2aW5nKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1NhdmluZykge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oJycsICdMw7x0ZmVuIHTDvG0gYWxhbmxhcsSxIGRvbGR1cnVuIScsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUb2xlcmFucyBrb250cm9sw7wgKCUxNSkgLSBrYWxhbiBpemluIGJhY2tlbmQnZGUgaGVzYXBsYW7EsXIsIG9yYW4gYnVyYWRhIHRla3Jhcmxhbm1hei5cclxuICAgIC8vIE5paGFpIGthcmFyIEtheWRldCBhbsSxbmRhIGJhY2tlbmQnZGUsIERCJ2RlbiB5ZW5pZGVuIG9rdW5hbiBDbXBsdFF0eSBpbGUgdmVyaWxpci5cclxuICAgIGNvbnN0IGthbGFuSXppbiA9IHRoaXMud29ya09yZGVySW5mby5yZW1haW5pbmdBbGxvd2VkUXR5ID8/IDA7XHJcbiAgICBpZiAodGhpcy50b3BsYW1NaWt0YXIgPiBrYWxhbkl6aW4pIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgICAnJyxcclxuICAgICAgICBgVG9sZXJhbnMgc8SxbsSxcsSxIGHFn8SxbGTEsS4gUGxhbmxhbmFuIG1pa3RhcjogJHt0aGlzLndvcmtPcmRlckluZm8ucGxhbm5lZFF0eX0sIGAgK1xyXG4gICAgICAgIGB0b3BsYW0gZ2lyaWxlbjogJHt0aGlzLndvcmtPcmRlckluZm8uY21wbHRRdHl9LCBgICtcclxuICAgICAgICBgZ2lyaWxlYmlsZWNlayBrYWxhbiBtaWt0YXI6ICR7a2FsYW5JemlufS4gxLDFn2xlbSBrYXlkZWRpbG1lZGkuYCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcclxuICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IHRoaXMubmV3T3BlcmF0aW9uSWQoKTtcbiAgICBjb25zdCBzYXZlRGF0YSA9IHtcbiAgICAgIG9wZXJhdGlvbklkLFxuICAgICAgZG9jRW50cnk6IHRoaXMuaXNFbXJpTm8sXG4gICAgICBwYWxsZXRUeXBlOiB0aGlzLnBhbGV0VGlwaSxcbiAgICAgIGtvbGlDb3VudDogdGhpcy5wYWxldFRpcGkgPT09ICdLSVNNSScgPyB0aGlzLmtvbGlBZGV0IDogbnVsbCxcbiAgICAgIHRvdGFsUXVhbnRpdHk6IHRoaXMudG9wbGFtTWlrdGFyXG4gICAgfTtcblxuICAgIHRoaXMucGVuZGluZ09wZXJhdGlvbklkID0gb3BlcmF0aW9uSWQ7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnBlbmRpbmdTdG9yYWdlS2V5LCBvcGVyYXRpb25JZCk7XG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5vcGVyYXRpb25TdGF0dXNNZXNzYWdlID0gJ8OccmV0aW1kZW4gZ2lyacWfIGtheWRlZGlsaXlvciwgU0FQIGJlbGdlIHNvbnVjdSBiZWtsZW5peW9yLic7XHJcbiAgICB0aGlzLnNlcnZpY2UuY3JlYXRlUmVjZWlwdChzYXZlRGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCAmJiByZXNwb25zZS5pdGVtcylcbiAgICAgICAgICB0aGlzLmhhbmRsZU9wZXJhdGlvblN0YXR1cyhyZXNwb25zZS5pdGVtcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzLmNoZWNrT3BlcmF0aW9uU3RhdHVzKCk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoZWNrT3BlcmF0aW9uU3RhdHVzKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja09wZXJhdGlvblN0YXR1cygpIHtcbiAgICBpZiAoIXRoaXMucGVuZGluZ09wZXJhdGlvbklkIHx8IHRoaXMuaXNDaGVja2luZ09wZXJhdGlvblN0YXR1cykgcmV0dXJuO1xyXG4gICAgdGhpcy5pc0NoZWNraW5nT3BlcmF0aW9uU3RhdHVzID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZS5nZXRPcGVyYXRpb25TdGF0dXModGhpcy5wZW5kaW5nT3BlcmF0aW9uSWQpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc0NoZWNraW5nT3BlcmF0aW9uU3RhdHVzID0gZmFsc2UpXHJcbiAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdGF0dXNDaGVja0ZhaWx1cmVzID0gMDtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3NmdWwgJiYgcmVzcG9uc2UuaXRlbXMpXG4gICAgICAgICAgdGhpcy5oYW5kbGVPcGVyYXRpb25TdGF0dXMocmVzcG9uc2UuaXRlbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5zY2hlZHVsZVN0YXR1c0NoZWNrKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgLy8gQSBtaXNzaW5nIHJvdyBjYW4gYmUgdHJhbnNpZW50IHdoaWxlIHRoZSBvcmlnaW5hbCBQT1NUIGlzIHN0aWxsIHZhbGlkYXRpbmcuXG4gICAgICAgIC8vIE5ldmVyIHVubG9jayBhIHJlc3BvbnNlLWxvc3Qgb3BlcmF0aW9uIHNvbGVseSBiZWNhdXNlIHRoaXMgR0VUIGZhaWxlZC5cbiAgICAgICAgdGhpcy5zdGF0dXNDaGVja0ZhaWx1cmVzKys7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uU3RhdHVzTWVzc2FnZSA9ICfEsMWfbGVtIHNvbnVjdSBhbMSxbmFtYWTEsS4gU0FQIGJlbGdlbGVyaSBkb8SfcnVsYW5hbmEga2FkYXIgeWVuaSBnaXJpxZ8gYmHFn2xhdMSxbGFtYXouJztcclxuICAgICAgICBpZiAodGhpcy5zdGF0dXNDaGVja0ZhaWx1cmVzID09PSA1KSB7XG4gICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignJywgYMSwxZ9sZW0gc29udWN1IGRvxJ9ydWxhbmFtYWTEsS4gWWVuaSBrYXnEsXQgYmHFn2xhdG1hecSxbjsgacWfbGVtIGFuYWh0YXLEsW7EsSBkZXN0ZWsgZWtpYml5bGUgcGF5bGHFn8SxbjogJHt0aGlzLnBlbmRpbmdPcGVyYXRpb25JZH1gLCB7XG4gICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiAnS2FwYXQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZVN0YXR1c0NoZWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlU3RhdHVzQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMuc3RhdHVzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnN0YXR1c1RpbWVyKTtcbiAgICB0aGlzLnN0YXR1c1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrT3BlcmF0aW9uU3RhdHVzKCksIDMwMDApO1xuICB9XG5cclxuICByZWZyZXNoT3BlcmF0aW9uU3RhdHVzKCkge1xyXG4gICAgaWYgKHRoaXMuc3RhdHVzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnN0YXR1c1RpbWVyKTtcclxuICAgIHRoaXMuY2hlY2tPcGVyYXRpb25TdGF0dXMoKTtcclxuICB9XHJcblxuICBwcml2YXRlIGhhbmRsZU9wZXJhdGlvblN0YXR1cyhzdGF0dXM6IFJlY2VpcHRPcGVyYXRpb25TdGF0dXNEdG8pIHtcbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnQ29tcGxldGVkJykge1xuICAgICAgdGhpcy5maW5pc2hQZW5kaW5nT3BlcmF0aW9uKCk7XG4gICAgICBjb25zdCBkb2N1bWVudHMgPSBbXHJcbiAgICAgICAgc3RhdHVzLmlzc3VlRG9jRW50cnkgPyBgw5xyZXRpbSBpw6dpbiDDp8Sxa8SxxZ8gYmVsZ2UgacOnIG5vOiAke3N0YXR1cy5pc3N1ZURvY0VudHJ5fS5gIDogJycsXHJcbiAgICAgICAgc3RhdHVzLnJlY2VpcHREb2NFbnRyeSA/IGDDnHJldGltZGVuIGdpcmnFnyBiZWxnZSBpw6cgbm86ICR7c3RhdHVzLnJlY2VpcHREb2NFbnRyeX0uYCA6ICcnLFxyXG4gICAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XHJcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uLnN1Y2Nlc3MoJycsIGDDnHJldGltZGVuIGdpcmnFnyBiYcWfYXLEsXlsYSBnZXLDp2VrbGXFn3RpcmlsZGkhIFBhcnRpOiAke3N0YXR1cy5iYXRjaE51bWJlcn0uICR7ZG9jdW1lbnRzfWAsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiAnS2FwYXQnLCBkaXNtaXNzaWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jbGVhckFsbCgpO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnN0YXRlID09PSAnRmFpbGVkJykge1xuICAgICAgdGhpcy5maW5pc2hQZW5kaW5nT3BlcmF0aW9uKCk7XG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcignJywgc3RhdHVzLmVycm9yIHx8ICfDnHJldGltZGVuIGdpcmnFnyBrYXlkZWRpbGVtZWRpLicsIHRoaXMuZXJyb3JEaWFsb2dPcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ0luY29uc2lzdGVudCcpIHtcbiAgICAgIGlmICh0aGlzLnN0YXR1c1RpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5zdGF0dXNUaW1lcik7XHJcbiAgICAgIHRoaXMub3BlcmF0aW9uU3RhdHVzTWVzc2FnZSA9IHN0YXR1cy5lcnJvciB8fCAnU0FQIGdpcmnFnyB2ZSDDp8Sxa8SxxZ8gYmVsZ2VsZXJpIGJpcmxpa3RlIGRvxJ9ydWxhbmFtYWTEsS4gQmVsZ2VsZXJpIGtvbnRyb2wgZWRpbi4nO1xyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlcmF0aW9uU3RhdHVzTWVzc2FnZSA9IHN0YXR1cy5lcnJvciB8fCAnU0FQIGJlbGdlIHNvbnVjdSBkb8SfcnVsYW7EsXlvci4gU29udcOnIGtlc2lubGXFn2VuZSBrYWRhciB5ZW5pIGdpcmnFnyBiYcWfbGF0xLFsYW1hei4nO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlU3RhdHVzQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFBlbmRpbmdPcGVyYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuc3RhdHVzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnN0YXR1c1RpbWVyKTtcbiAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nT3BlcmF0aW9uSWQgPSBudWxsO1xuICAgIHRoaXMub3BlcmF0aW9uU3RhdHVzTWVzc2FnZSA9ICcnO1xyXG4gICAgdGhpcy5zdGF0dXNDaGVja0ZhaWx1cmVzID0gMDtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMucGVuZGluZ1N0b3JhZ2VLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXdPcGVyYXRpb25JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gKGJ5dGVzWzZdICYgMHgwZikgfCAweDQwO1xuICAgIGJ5dGVzWzhdID0gKGJ5dGVzWzhdICYgMHgzZikgfCAweDgwO1xuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuZnJvbShieXRlcywgYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICByZXR1cm4gYCR7dmFsdWUuc2xpY2UoMCwgOCl9LSR7dmFsdWUuc2xpY2UoOCwgMTIpfS0ke3ZhbHVlLnNsaWNlKDEyLCAxNil9LSR7dmFsdWUuc2xpY2UoMTYsIDIwKX0tJHt2YWx1ZS5zbGljZSgyMCl9YDtcbiAgfVxuXHJcbiAgY2FsY1Jvd0luZGV4ID0gKHJvdzogUmVjZWlwdEhpc3RvcnlJdGVtRHRvKTogbnVtYmVyID0+XHJcbiAgICAodGhpcy53b3JrT3JkZXJJbmZvPy5yZWNlaXB0SGlzdG9yeT8uaW5kZXhPZihyb3cpID8/IC0xKSArIDE7XHJcblxyXG4gIGNhbGNEb2NTdGF0dXMgPSAocm93OiBSZWNlaXB0SGlzdG9yeUl0ZW1EdG8pOiBzdHJpbmcgPT5cclxuICAgIHJvdy5kb2NTdGF0dXMgPT09ICdDJyA/ICdUYW1hbWxhbmTEsScgOiAnQmVrbGVtZWRlJztcclxuXHJcbiAgZm9ybWF0TnVtYmVyID0gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlPy50b0xvY2FsZVN0cmluZygndHItVFInKSA/PyAnJztcclxuXHJcblxyXG4gIGNsZWFyQWxsKCkge1xuICAgIGlmICh0aGlzLmlzU2F2aW5nKSByZXR1cm47XG4gICAgdGhpcy5pc1dvcmtPcmRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0VtcmlObyA9IG51bGw7XHJcbiAgICB0aGlzLndvcmtPcmRlckluZm8gPSBudWxsO1xyXG4gICAgdGhpcy5wYWxldFRpcGkgPSAnVEFNJztcclxuICAgIHRoaXMua29saUFkZXQgPSBudWxsO1xyXG4gICAgdGhpcy50b3BsYW1NaWt0YXIgPSAwO1xyXG4gICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5mb2N1c09uSXNFbXJpTm8oKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1NhdmVCdXR0b25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5pc0VtcmlObyB8fCBcclxuICAgICAgICAgICAhdGhpcy53b3JrT3JkZXJJbmZvIHx8IFxyXG4gICAgICAgICAgIHRoaXMudG9wbGFtTWlrdGFyIDw9IDAgfHxcclxuICAgICAgICAgICAodGhpcy5wYWxldFRpcGkgPT09ICdLSVNNSScgJiYgKCF0aGlzLmtvbGlBZGV0IHx8IHRoaXMua29saUFkZXQgPD0gMCkpIHx8XHJcbiAgICAgICAgICAgdGhpcy5pc1NhdmluZztcclxuICB9XHJcblxyXG4gIGZvY3VzT25Jc0VtcmlObygpIHtcclxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubm1iQm94SXNFbXJpTm8/Lmluc3RhbmNlLmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8YWJwLXBhZ2UgW2JyZWFkY3J1bWJdPVwiZmFsc2VcIj5cclxuICA8YWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXIgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgIMOccmV0aW1kZW4gR2lyacWfXHJcbiAgICAgIDwvaDM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1sZy1lbmQgcHQtMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cImlzU2F2ZUJ1dHRvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICDDnHJldGltZGVuIEdpcmnFnyBZYXBcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbGVhckFsbCgpXCIgW2Rpc2FibGVkXT1cImlzU2F2aW5nXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1icm9vbSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgVGVtaXpsZVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIG10LTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDB2aCAtIDI0MXB4KTsgb3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc1NhdmluZ1wiIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cclxuICAgICAgICA8ZGl2Pnt7IG9wZXJhdGlvblN0YXR1c01lc3NhZ2UgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPsSwxZ9sZW0gYW5haHRhcsSxOiB7eyBwZW5kaW5nT3BlcmF0aW9uSWQgfX08L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gbXQtMlwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVmcmVzaE9wZXJhdGlvblN0YXR1cygpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcgfHwgaXNDaGVja2luZ09wZXJhdGlvblN0YXR1c1wiPlxyXG4gICAgICAgICAgU29udWN1IFRla3JhciBLb250cm9sIEV0XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIFdvcmsgT3JkZXIgSW5wdXQgLS0+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgIDxkeC1udW1iZXItYm94ICNpc0VtcmlOb1JlZiBjbGFzcz1cIm1lLTFcIiBzdHlsZT1cIndpZHRoOjEwMCU7XCIgbGFiZWw9XCLEsMWfIEVtcmkgTm9cIiBbKHZhbHVlKV09XCJpc0VtcmlOb1wiXHJcbiAgICAgICAgICAob25DaGFuZ2UpPVwiZ2V0UHJvZHVjdGlvbk9yZGVyKClcIiAob25FbnRlcktleSk9XCJnZXRQcm9kdWN0aW9uT3JkZXIoKVwiIFtkaXNhYmxlZF09XCJpc1dvcmtPcmRlckxvYWRlZCB8fCBpc1NhdmluZ1wiPlxuICAgICAgICA8L2R4LW51bWJlci1ib3g+XHJcbiAgICAgICAgPGR4LWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi10b3A6IDcuNXB4O1wiIGljb249XCJzZWFyY2hcIiB0eXBlPVwiZGVmYXVsdFwiIChvbkNsaWNrKT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1dvcmtPcmRlckxvYWRlZCB8fCBpc1NhdmluZ1wiPlxuICAgICAgICA8L2R4LWJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFdvcmsgT3JkZXIgSW5mb3JtYXRpb24gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJpc1dvcmtPcmRlckxvYWRlZCAmJiB3b3JrT3JkZXJJbmZvXCI+XHJcbiAgICAgICAgPCEtLSBQcm9kdWN0IEluZm8gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxkeC10ZXh0LWJveCBsYWJlbD1cIsOccsO8biBLb2R1XCIgWyh2YWx1ZSldPVwid29ya09yZGVySW5mby5pdGVtQ29kZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3ggbGFiZWw9XCLDnHLDvG4gQWTEsVwiIFsodmFsdWUpXT1cIndvcmtPcmRlckluZm8uaXRlbU5hbWVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgIDxkeC1udW1iZXItYm94IFxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiUGxhbmxhbmFuIE1pa3RhclwiIFxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cIndvcmtPcmRlckluZm8ucGxhbm5lZFF0eVwiIFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgIDxkeC1udW1iZXItYm94IFxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiVGFtYW1sYW5hbiBNaWt0YXJcIiBcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ3b3JrT3JkZXJJbmZvLmNtcGx0UXR5XCIgXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPC9keC1udW1iZXItYm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgPGR4LXRleHQtYm94IFxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiRGVwb1wiIFxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cIndvcmtPcmRlckluZm8ud2FyZWhvdXNlXCIgXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cclxuICAgICAgICAgICAgPGR4LXRleHQtYm94IFxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiQW1iYWxhaiBMb3RcIiBcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ3b3JrT3JkZXJJbmZvLnVfVFJLQU1CQUxBSkxPVFwiIFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBQYWxsZXQgVHlwZSBTZWxlY3Rpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxkeC1yYWRpby1ncm91cCAjcGFsZXRUaXBpUmVmIFtpdGVtc109XCJwYWxldFRpcGxlcmlcIiBsYXlvdXQ9XCJob3Jpem9udGFsXCIgWyh2YWx1ZSldPVwicGFsZXRUaXBpXCJcclxuICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwib25QYWxldFRpcGlDaGFuZ2UoKVwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiPlxyXG4gICAgICAgICAgICA8L2R4LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gS29saSBDb3VudCBmb3IgS0lTTUkgUGFsbGV0IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiICpuZ0lmPVwicGFsZXRUaXBpID09PSAnS0lTTUknXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgPGR4LW51bWJlci1ib3ggI2tvbGlBZGV0UmVmIGxhYmVsPVwiS29saSBBZGVkaVwiIFsodmFsdWUpXT1cImtvbGlBZGV0XCIgKG9uVmFsdWVDaGFuZ2VkKT1cIm9uS29saUFkZXRDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgW21pbl09XCIxXCIgW2Rpc2FibGVkXT1cImlzU2F2aW5nXCI+XHJcbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIENhbGN1bGF0ZWQgVG90YWwgUXVhbnRpdHkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgPGR4LW51bWJlci1ib3ggbGFiZWw9XCJUb3BsYW0gTWlrdGFyIChBZGV0KVwiIFsodmFsdWUpXT1cInRvcGxhbU1pa3RhclwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbc3R5bGluZ01vZGVdPVwiJ2ZpbGxlZCdcIj5cclxuICAgICAgICAgICAgPC9keC1udW1iZXItYm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgPGR4LW51bWJlci1ib3ggbGFiZWw9XCJLb2xpIMSww6dpIEFkZXRcIiBbKHZhbHVlKV09XCJ3b3JrT3JkZXJJbmZvLnNhbFBhY2tVblwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgIDxkeC1udW1iZXItYm94IGxhYmVsPVwiR2lyaWxlYmlsZWNlayBLYWxhbiBNaWt0YXJcIiBbKHZhbHVlKV09XCJ3b3JrT3JkZXJJbmZvLnJlbWFpbmluZ0FsbG93ZWRRdHlcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFF1YWxpdHkgU3RhdHVzIEluZm8gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yXCIgKm5nSWY9XCJ3b3JrT3JkZXJJbmZvLnVfS2FsaXRlRHVydW11XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgICAgPHN0cm9uZz5LYWxpdGUgRHVydW11Ojwvc3Ryb25nPiB7eyB3b3JrT3JkZXJJbmZvLnVfS2FsaXRlRHVydW11IH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUmVjZWlwdCBIaXN0b3J5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgbWItMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxM3B4O1wiPlxyXG4gICAgICAgICAgICAgIMOccmV0aW1kZW4gR2lyacWfIEhhcmVrZXRsZXJpXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIFtkYXRhU291cmNlXT1cIndvcmtPcmRlckluZm8ucmVjZWlwdEhpc3RvcnlcIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3dvcmRXcmFwRW5hYmxlZF09XCJmYWxzZVwiIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbbm9EYXRhVGV4dF09XCInSGVuw7x6IGdpcmnFnyBoYXJla2V0aSBidWx1bm1hbWFrdGFkxLFyLidcIiBbaGVpZ2h0XT1cIidhdXRvJ1wiPlxyXG4gICAgICAgICAgICAgIDxkeG8tc2Nyb2xsaW5nIG1vZGU9XCJzdGFuZGFyZFwiPjwvZHhvLXNjcm9sbGluZz5cclxuICAgICAgICAgICAgICA8ZHhvLXBhZ2luZyBbZW5hYmxlZF09XCJmYWxzZVwiPjwvZHhvLXBhZ2luZz5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBjYXB0aW9uPVwiI1wiIG5hbWU9XCJyb3dOdW1cIiBbd2lkdGhdPVwiNDBcIiBhbGlnbm1lbnQ9XCJjZW50ZXJcIiBbY2FsY3VsYXRlQ2VsbFZhbHVlXT1cImNhbGNSb3dJbmRleFwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkb2NOdW1cIiBjYXB0aW9uPVwiQmVsZ2UgTm9cIiBbbWluV2lkdGhdPVwiMTEwXCIgYWxpZ25tZW50PVwiY2VudGVyXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImJhdGNoTnVtXCIgY2FwdGlvbj1cIlBhcnRpIE5vXCIgW21pbldpZHRoXT1cIjEzMFwiIGFsaWdubWVudD1cImNlbnRlclwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJxdWFudGl0eVwiIGNhcHRpb249XCJNaWt0YXJcIiBkYXRhVHlwZT1cIm51bWJlclwiIFttaW5XaWR0aF09XCI3NVwiIGFsaWdubWVudD1cImNlbnRlclwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ3aHNOYW1lXCIgY2FwdGlvbj1cIkRlcG9cIiBbbWluV2lkdGhdPVwiMTAwXCIgYWxpZ25tZW50PVwiY2VudGVyXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY1N0YXR1c1wiIGNhcHRpb249XCJEdXJ1bVwiIFttaW5XaWR0aF09XCIxMDVcIiBhbGlnbm1lbnQ9XCJjZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgW2NhbGN1bGF0ZUNlbGxWYWx1ZV09XCJjYWxjRG9jU3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInVzZXJDb2RlXCIgY2FwdGlvbj1cIkt1bGxhbsSxY8SxXCIgW21pbldpZHRoXT1cIjgwXCIgYWxpZ25tZW50PVwiY2VudGVyXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgIDxkeG8tc3VtbWFyeT5cclxuICAgICAgICAgICAgICAgIDxkeGktdG90YWwtaXRlbSBjb2x1bW49XCJkb2NOdW1cIiBzdW1tYXJ5VHlwZT1cImNvdW50XCIgZGlzcGxheUZvcm1hdD1cIlRvcGxhbVwiPjwvZHhpLXRvdGFsLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZHhpLXRvdGFsLWl0ZW0gY29sdW1uPVwicXVhbnRpdHlcIiBzdW1tYXJ5VHlwZT1cInN1bVwiIGRpc3BsYXlGb3JtYXQ9XCJ7MH1cIiBbdmFsdWVGb3JtYXRdPVwiZm9ybWF0TnVtYmVyXCI+PC9keGktdG90YWwtaXRlbT5cclxuICAgICAgICAgICAgICA8L2R4by1zdW1tYXJ5PlxyXG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2FicC1wYWdlPlxuIl19