@myrtex-org/form 1.1.79 → 1.1.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/modules/object-form/components/elements/input/table/components/input-table-modal/input-table-modal.component.mjs +50 -17
- package/fesm2022/myrtex-org-form.mjs +49 -16
- package/fesm2022/myrtex-org-form.mjs.map +1 -1
- package/lib/modules/object-form/components/elements/input/table/input-table.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -42,33 +42,66 @@ export class InputTableModalComponent extends ModalServiceComponent {
|
|
|
42
42
|
this.result = { result: false, rowModel: this.rowModel };
|
|
43
43
|
}
|
|
44
44
|
componentValueChanged(valueModel) {
|
|
45
|
+
console.group('=== МОДАЛКА: Изменение значения в форме ===');
|
|
45
46
|
const incomingModels = Array.isArray(valueModel) ? valueModel : [valueModel];
|
|
46
47
|
const cloneRowModel = structuredClone(this.rowModel);
|
|
47
|
-
|
|
48
|
-
incomingModels.forEach(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const modelsGroup = groups[sysName];
|
|
55
|
-
const findValue = cloneRowModel.data.find(c => c.sysName === sysName);
|
|
56
|
-
if (findValue) {
|
|
57
|
-
// Ищем, является ли этот компонент рендж-календарем по настройкам
|
|
58
|
-
const compSettings = this.settings.components.find(x => x.sysName === sysName);
|
|
48
|
+
// Шаг 1: Сначала просто обновляем в cloneRowModel те точечные значения, которые сейчас прилетели
|
|
49
|
+
incomingModels.forEach(incoming => {
|
|
50
|
+
// Ищем ячейку в строке по sysName
|
|
51
|
+
const cell = cloneRowModel.data.find(c => c.sysName === incoming.sysName);
|
|
52
|
+
if (cell) {
|
|
53
|
+
// Находим настройки этого компонента, чтобы понять, range это или нет
|
|
54
|
+
const compSettings = this.settings.components.find(x => x.sysName === incoming.sysName);
|
|
59
55
|
const isRange = compSettings?.type === ComponentType.InputDate && compSettings.options?.range;
|
|
60
|
-
if (isRange
|
|
61
|
-
//
|
|
62
|
-
|
|
56
|
+
if (isRange) {
|
|
57
|
+
// Если это range, то FormDispenser мог прислать либо массив моделей, либо одну из них
|
|
58
|
+
// Нам нужно аккуратно обновить массив строк в cell.value
|
|
59
|
+
if (!Array.isArray(cell.value)) {
|
|
60
|
+
cell.value = [null, null];
|
|
61
|
+
}
|
|
62
|
+
// Если прилетел массив (например, при первой инициализации или полном изменении)
|
|
63
|
+
if (incomingModels.length > 1 && incomingModels.every(m => m.sysName === incoming.sysName)) {
|
|
64
|
+
cell.value = [incomingModels[0].value, incomingModels[1].value];
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
// Если прилетела одиночная модель из диапазона (например, обновилась только одна дата),
|
|
68
|
+
// или FormDispenser плюнул объект, у которого внутри value уже лежит массив/дата.
|
|
69
|
+
// Проверяем, что именно внутри incoming.value
|
|
70
|
+
if (Array.isArray(incoming.value)) {
|
|
71
|
+
cell.value = [incoming.value[0], incoming.value[1]];
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Самый частый случай при частичном изменении формы:
|
|
75
|
+
// Пытаемся понять, это стартовая дата или конечная. Если это невозможно определить напрямую,
|
|
76
|
+
// и нам важен порядок, то FormDispenser обычно шлет массив.
|
|
77
|
+
// Но если он прислал одиночную строку, а у нас в cell.value уже что-то было:
|
|
78
|
+
cell.value = Array.isArray(incoming.value) ? incoming.value : [incoming.value, cell.value[1]];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
63
81
|
}
|
|
64
82
|
else {
|
|
65
|
-
|
|
83
|
+
// Для всех остальных обычных полей (строки, переключатели, одиночные даты)
|
|
84
|
+
cell.value = incoming.value;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Шаг 2: Валидация структуры. Проверяем ВСЕ range-компоненты в строке.
|
|
89
|
+
// Если где-то по ошибке оказалась строка вместо массива (как в вашем логе), принудительно чиним структуру!
|
|
90
|
+
this.settings.components.forEach(component => {
|
|
91
|
+
if (component.type === ComponentType.InputDate && component.options?.range) {
|
|
92
|
+
const cell = cloneRowModel.data.find(c => c.sysName === component.sysName);
|
|
93
|
+
if (cell && !Array.isArray(cell.value)) {
|
|
94
|
+
console.warn(`[Фикс структуры] Поле ${component.sysName} имело неверный тип значения:`, cell.value);
|
|
95
|
+
// Заворачиваем одиночную строку в массив, чтобы не ломать логику таблицы
|
|
96
|
+
cell.value = cell.value ? [cell.value, null] : [null, null];
|
|
66
97
|
}
|
|
67
98
|
}
|
|
68
99
|
});
|
|
69
100
|
this.rowModel = cloneRowModel;
|
|
70
101
|
this._recalculateFormulaFields();
|
|
71
102
|
this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
|
|
103
|
+
console.log('Итоговый rowModel в памяти модалки:', structuredClone(this.rowModel));
|
|
104
|
+
console.groupEnd();
|
|
72
105
|
}
|
|
73
106
|
ok() {
|
|
74
107
|
console.group('=== МОДАЛКА: Нажата кнопка ОК ===');
|
|
@@ -192,4 +225,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
192
225
|
type: Inject,
|
|
193
226
|
args: [MODAL_DATA]
|
|
194
227
|
}] }] });
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvY29tcG9uZW50cy9pbnB1dC10YWJsZS1tb2RhbC9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9pbnB1dC90YWJsZS9jb21wb25lbnRzL2lucHV0LXRhYmxlLW1vZGFsL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBWSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7O0FBaUM5RixNQUFNLE9BQU8sd0JBQXlCLFNBQVEscUJBQW1FO0lBUy9HLFlB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Q25CLGFBQ1U7d0JBQ1QsY0FBYyxFQUFFO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLGdCQUFnQixDQUFDLHdCQUF3QjtxQkFDMUM7OzBCQWVFLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlLCBNT0RBTF9EQVRBLCBNb2RhbE1vZHVsZSwgTW9kYWxSZWYsIE1vZGFsU2VydmljZUNvbXBvbmVudCB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuaW1wb3J0IHsgSW5wdXRUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VmFsdWVNb2RlbCwgVGFibGVSb3dNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEZvcm1EaXNwZW5zZXJNb2RhbCB9IGZyb20gJy4vZm9ybS1kaXNwZW5zZXItbW9kYWwvZm9ybS1kaXNwZW5zZXItbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgcHJvdmlkZU5neE1hc2sgfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCB7IEZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLCBSZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgb2JqZWN0Rm9ybUFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudE1vZGVsQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL21vZGVscyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIElucHV0U3RhdGUsIFZhbHVlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL2VudW1zJztcclxuaW1wb3J0IHsgSW5wdXROdW1iZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscy9lbGVtZXRzL2lucHV0cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElucHV0VGFibGVNb2RhbFBhcmFtcyB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBva1RleHQ6IHN0cmluZztcclxuICBzZXR0aW5nczogSW5wdXRUYWJsZU1vZGVsO1xyXG4gIHJvd01vZGVsOiBUYWJsZVJvd01vZGVsO1xyXG4gIGlzQ2hlY2tSZXF1aXJlZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFRhYmxlTW9kYWxSZXN1bHQge1xyXG4gIHJlc3VsdDogYm9vbGVhbjtcclxuICByb3dNb2RlbDogVGFibGVSb3dNb2RlbDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtaW5wdXQtdGFibGUtbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50Lmxlc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1vZGFsTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRm9ybURpc3BlbnNlck1vZGFsLFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBwcm92aWRlTmd4TWFzaygpLFxyXG4gICAgRm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UsXHJcbiAgICBSZWZlcmVuY2VTZXJ2aWNlIC8vINC00LvRjyDQutC+0LzQv9C+0L3QtdC90YLQsCDRgdC/0LjRgdC+0LpcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFRhYmxlTW9kYWxDb21wb25lbnQgZXh0ZW5kcyBNb2RhbFNlcnZpY2VDb21wb25lbnQ8SW5wdXRUYWJsZU1vZGFsUGFyYW1zLCBJbnB1dFRhYmxlTW9kYWxSZXN1bHQ+IHtcclxuICBwdWJsaWMgdGl0bGUhOiBzdHJpbmc7XHJcbiAgcHVibGljIG9rVGV4dCE6IHN0cmluZztcclxuICBwdWJsaWMgc2V0dGluZ3MhOiBJbnB1dFRhYmxlTW9kZWw7XHJcbiAgcHVibGljIHJvd01vZGVsITogVGFibGVSb3dNb2RlbDtcclxuICAvLyDQl9Cw0L/QvtC80LjQvdCw0LXQvCDRgdGC0LDRgtGD0YEg0L/RgNC+0LLQtdGA0LrQuCDRhNC+0YDQvNGLINC/0YDQuCDQvtGC0LrRgNGL0YLQuNC4INC80L7QtNCw0LvQutC4XHJcbiAgcHVibGljIGlzQ2hlY2tSZXF1aXJlZCE6IGJvb2xlYW47XHJcbiAgcHVibGljIGVtcHR5Um93OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTW9kYWxSZWY8SW5wdXRUYWJsZU1vZGFsUmVzdWx0PixcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxyXG4gICAgcHJpdmF0ZSBmb3JtdWxhQ2FsY3VsYXRlU2VydmljZTogRm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KE1PREFMX0RBVEEpIGRhdGE6IElucHV0VGFibGVNb2RhbFBhcmFtcyxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XHJcbiAgICB0aGlzLm9rVGV4dCA9IGRhdGEub2tUZXh0O1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IGRhdGEuc2V0dGluZ3M7XHJcbiAgICB0aGlzLmlzQ2hlY2tSZXF1aXJlZCA9IGRhdGEuaXNDaGVja1JlcXVpcmVkO1xyXG5cclxuICAgIC8vINCa0LvQvtC90LjRgNGD0LXQvCDQstGF0L7QtNGP0YnRg9GOINC80L7QtNC10LvRjCDRgdGC0YDQvtC60LhcclxuICAgIGNvbnN0IHByZXBhcmVkUm93TW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YS5yb3dNb2RlbCk7XHJcblxyXG4gICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8INCy0YHQtSDQutC+0LzQv9C+0L3QtdC90YLRiyDRgtCw0LHQu9C40YbRiy4g0JXRgdC70Lgg0Y3RgtC+IFJhbmdlLdC60LDQu9C10L3QtNCw0YDRjCwg0L/QvtC00LPQvtGC0LDQstC70LjQstCw0LXQvCDQvNCw0YHRgdC40LIg0LzQvtC00LXQu9C10LlcclxuICAgIHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gQ29tcG9uZW50VHlwZS5JbnB1dERhdGUgJiYgKGNvbXBvbmVudCBhcyBhbnkpLm9wdGlvbnM/LnJhbmdlKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IHByZXBhcmVkUm93TW9kZWwuZGF0YS5maW5kKHggPT4geC5zeXNOYW1lID09PSBjb21wb25lbnQuc3lzTmFtZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g0JXRgdC70Lgg0LIg0YLQsNCx0LvQuNGG0LUg0LvQtdC20LDQuyDQvNCw0YHRgdC40LIg0YHRgtGA0L7QuiDQtNCw0YIgWydJU08uLi4nLCAnSVNPLi4uJ10g0LjQu9C4INC/0YPRgdGC0L7QuSDQvNCw0YHRgdC40LJcclxuICAgICAgICBpZiAoY2VsbCAmJiBBcnJheS5pc0FycmF5KGNlbGwudmFsdWUpICYmIChjZWxsLnZhbHVlLmxlbmd0aCA9PT0gMiB8fCBjZWxsLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGVTdGFydCA9IGNlbGwudmFsdWVbMF0gfHwgbnVsbDtcclxuICAgICAgICAgIGNvbnN0IGRhdGVFbmQgPSBjZWxsLnZhbHVlWzFdIHx8IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8g0J/RgNC10LLRgNCw0YnQsNC10Lwg0LIg0LzQsNGB0YHQuNCyINC80L7QtNC10LvQtdC5LCDQutC+0YLQvtGA0YvQuSDRgtCw0Log0LbQtNC10YIgSW5wdXREYXRlQ29tcG9uZW50XHJcbiAgICAgICAgICBjZWxsLnZhbHVlID0gW1xyXG4gICAgICAgICAgICB7IHN5c05hbWU6IGNvbXBvbmVudC5zeXNOYW1lLCB0eXBlOiBjb21wb25lbnQudHlwZSwgdmFsdWVUeXBlOiBjb21wb25lbnQudmFsdWVUeXBlLCB2YWx1ZTogZGF0ZVN0YXJ0IH0sXHJcbiAgICAgICAgICAgIHsgc3lzTmFtZTogY29tcG9uZW50LnN5c05hbWUsIHR5cGU6IGNvbXBvbmVudC50eXBlLCB2YWx1ZVR5cGU6IGNvbXBvbmVudC52YWx1ZVR5cGUsIHZhbHVlOiBkYXRlRW5kIH1cclxuICAgICAgICAgIF0gYXMgYW55O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3dNb2RlbCA9IHByZXBhcmVkUm93TW9kZWw7XHJcbiAgICB0aGlzLnJlc3VsdCA9IHsgcmVzdWx0OiBmYWxzZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWwgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRWYWx1ZUNoYW5nZWQodmFsdWVNb2RlbDogQ29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXSkge1xyXG4gICAgY29uc3QgaW5jb21pbmdNb2RlbHMgPSBBcnJheS5pc0FycmF5KHZhbHVlTW9kZWwpID8gdmFsdWVNb2RlbCA6IFt2YWx1ZU1vZGVsXTtcclxuICAgIGNvbnN0IGNsb25lUm93TW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbCk7XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IENvbXBvbmVudFZhbHVlTW9kZWxbXSB9ID0ge307XHJcbiAgICBpbmNvbWluZ01vZGVscy5mb3JFYWNoKG1vZGVsID0+IHtcclxuICAgICAgaWYgKCFncm91cHNbbW9kZWwuc3lzTmFtZV0pIGdyb3Vwc1ttb2RlbC5zeXNOYW1lXSA9IFtdO1xyXG4gICAgICBncm91cHNbbW9kZWwuc3lzTmFtZV0ucHVzaChtb2RlbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goc3lzTmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IG1vZGVsc0dyb3VwID0gZ3JvdXBzW3N5c05hbWVdO1xyXG4gICAgICBjb25zdCBmaW5kVmFsdWUgPSBjbG9uZVJvd01vZGVsLmRhdGEuZmluZChjID0+IGMuc3lzTmFtZSA9PT0gc3lzTmFtZSk7XHJcblxyXG4gICAgICBpZiAoZmluZFZhbHVlKSB7XHJcbiAgICAgICAgLy8g0JjRidC10LwsINGP0LLQu9GP0LXRgtGB0Y8g0LvQuCDRjdGC0L7RgiDQutC+0LzQv9C+0L3QtdC90YIg0YDQtdC90LTQti3QutCw0LvQtdC90LTQsNGA0LXQvCDQv9C+INC90LDRgdGC0YDQvtC50LrQsNC8XHJcbiAgICAgICAgY29uc3QgY29tcFNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5jb21wb25lbnRzLmZpbmQoeCA9PiB4LnN5c05hbWUgPT09IHN5c05hbWUpO1xyXG4gICAgICAgIGNvbnN0IGlzUmFuZ2UgPSBjb21wU2V0dGluZ3M/LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXREYXRlICYmIChjb21wU2V0dGluZ3MgYXMgYW55KS5vcHRpb25zPy5yYW5nZTtcclxuXHJcbiAgICAgICAgaWYgKGlzUmFuZ2UgJiYgbW9kZWxzR3JvdXAubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgLy8g0JjQt9Cy0LvQtdC60LDQtdC8INGC0L7Qu9GM0LrQviDRh9C40YHRgtGL0LUgSVNPLdGB0YLRgNC+0LrQuCDQt9C90LDRh9C10L3QuNC5OiBbXCIyMDI2Li4uXCIsIFwiMjAyNi4uLlwiXVxyXG4gICAgICAgICAgZmluZFZhbHVlLnZhbHVlID0gW21vZGVsc0dyb3VwWzBdLnZhbHVlLCBtb2RlbHNHcm91cFsxXS52YWx1ZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZpbmRWYWx1ZS52YWx1ZSA9IG1vZGVsc0dyb3VwWzBdLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3dNb2RlbCA9IGNsb25lUm93TW9kZWw7XHJcbiAgICB0aGlzLl9yZWNhbGN1bGF0ZUZvcm11bGFGaWVsZHMoKTtcclxuICAgIHRoaXMuZW1wdHlSb3cgPSB0aGlzLnJvd01vZGVsLmRhdGEuZXZlcnkoeCA9PiB0aGlzLmlzRW1wdHkoeC52YWx1ZSwgeC52YWx1ZVR5cGUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvaygpIHtcclxuICAgIGNvbnNvbGUuZ3JvdXAoJz09PSDQnNCe0JTQkNCb0JrQkDog0J3QsNC20LDRgtCwINC60L3QvtC/0LrQsCDQntCaID09PScpO1xyXG4gICAgY29uc29sZS5sb2coJ9Ck0LjQvdCw0LvRjNC90YvQuSByb3dNb2RlbCDQv9C10YDQtdC0INC+0YLQv9GA0LDQstC60L7QuSDQsiDRgtCw0LHQu9C40YbRgzonLCBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbCkpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMuX2lzVmFsaWQoKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ9CS0LDQu9C40LTQsNGG0LjRjyDQvNC+0LTQsNC70LrQuCDQndCVINCf0KDQntCZ0JTQldCd0JAnKTtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChvYmplY3RGb3JtQWN0aW9ucy51cGRhdGVDaGVja1JlcXVpcmVkKHsgaXNDaGVja1JlcXVpcmVkOiB0cnVlIH0pKTtcclxuICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coJ9CS0LDQu9C40LTQsNGG0LjRjyDRg9GB0L/QtdGI0L3QsC4g0JfQsNC60YDRi9Cy0LDQtdC8INC80L7QtNCw0LvQutGDINGBINGA0LXQt9GD0LvRjNGC0LDRgtC+0LwgdHJ1ZS4nKTtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gob2JqZWN0Rm9ybUFjdGlvbnMudXBkYXRlQ2hlY2tSZXF1aXJlZCh7IGlzQ2hlY2tSZXF1aXJlZDogdGhpcy5pc0NoZWNrUmVxdWlyZWQgfSkpO1xyXG4gICAgdGhpcy5yZXN1bHQgPSB7IHJlc3VsdDogdHJ1ZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWwgfTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJlc3VsdCkpO1xyXG4gICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlKCkge1xyXG4gICAgLy8g0LLQvtC30LLRgNCw0YnQsNC10Lwg0L/RgNC40LfQvdCw0Log0LrQsNC6INCx0YvQuyDQtNC+INC+0YLQutGA0YvRgtC40Y8g0LzQvtC00LDQu9C60LhcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gob2JqZWN0Rm9ybUFjdGlvbnMudXBkYXRlQ2hlY2tSZXF1aXJlZCh7IGlzQ2hlY2tSZXF1aXJlZDogdGhpcy5pc0NoZWNrUmVxdWlyZWQgfSkpO1xyXG5cclxuICAgIHRoaXMucmVzdWx0ID0ge3Jlc3VsdDogZmFsc2UsIHJvd01vZGVsOiB0aGlzLnJvd01vZGVsfTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMucmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zZm9ybVZhbHVlcyh2YWx1ZTogQ29tcG9uZW50VmFsdWVNb2RlbCkge1xyXG4gICAgY29uc3QgY2xvbmVSb3dNb2RlbCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsKTtcclxuICAgIGNvbnN0IGZpbmRWYWx1ZTogQ29tcG9uZW50VmFsdWVNb2RlbCB8IHVuZGVmaW5lZCA9IGNsb25lUm93TW9kZWwuZGF0YS5maW5kKChjOiBDb21wb25lbnRWYWx1ZU1vZGVsKSA9PiBjLnN5c05hbWUgPT09IHZhbHVlLnN5c05hbWUpO1xyXG5cclxuICAgIGlmIChmaW5kVmFsdWUpIHtcclxuICAgICAgZmluZFZhbHVlLnZhbHVlID0gdmFsdWUudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb3dNb2RlbCA9IGNsb25lUm93TW9kZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWNhbGN1bGF0ZUZvcm11bGFGaWVsZHMoKSB7XHJcbiAgICBjb25zdCBmb3JtdWxhQ29tcG9uZW50cyA9IHRoaXMuX2dldEZvcm11bGFOdW1iZXJDb21wb25lbnRzKHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cyk7XHJcblxyXG4gICAgaWYgKCFmb3JtdWxhQ29tcG9uZW50cy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNsb25lUm93TW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtdWxhQ29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaGFzVXBkYXRlcyA9IGZhbHNlO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgZm9ybXVsYUNvbXBvbmVudHMpIHtcclxuICAgICAgICBjb25zdCBmb3JtdWxhID0gY29tcG9uZW50Lm9wdGlvbnM/LmZvcm11bGE/LnRyaW0oKTtcclxuICAgICAgICBpZiAoIWZvcm11bGEpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mb3JtdWxhQ2FsY3VsYXRlU2VydmljZS5jYWxjdWxhdGVNYXRoRXhwcmVzc2lvbihmb3JtdWxhLCBjbG9uZVJvd01vZGVsLmRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IGNsb25lUm93TW9kZWwuZGF0YS5maW5kKHggPT4geC5zeXNOYW1lID09PSBjb21wb25lbnQuc3lzTmFtZSk7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRWYWx1ZSB8fCB0YXJnZXRWYWx1ZS52YWx1ZSA9PT0gcmVzdWx0KSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhcmdldFZhbHVlLnZhbHVlID0gcmVzdWx0O1xyXG4gICAgICAgIGhhc1VwZGF0ZXMgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWhhc1VwZGF0ZXMpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm93TW9kZWwgPSBjbG9uZVJvd01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Rm9ybXVsYU51bWJlckNvbXBvbmVudHMoY29tcG9uZW50czogQ29tcG9uZW50TW9kZWxCYXNlW10pOiBJbnB1dE51bWJlck1vZGVsW10ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBJbnB1dE51bWJlck1vZGVsW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb21wb25lbnQudHlwZSA9PT0gQ29tcG9uZW50VHlwZS5JbnB1dE51bWJlciAmJlxyXG4gICAgICAgIChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCkub3B0aW9ucz8uaW5wdXRTdGF0ZSA9PT0gSW5wdXRTdGF0ZS5Gb3JtdWxhXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLl9nZXRGb3JtdWxhTnVtYmVyQ29tcG9uZW50cyhjb21wb25lbnQuY29tcG9uZW50cykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgIHZhciByZXF1aXJlZENvbXBvbmVudHMgPSB0aGlzLl9nZXRSZXF1aXJlZENvbXBvbmVudHModGhpcy5zZXR0aW5ncy5jb21wb25lbnRzKTtcclxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHJlcXVpcmVkQ29tcG9uZW50cykge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucm93TW9kZWwuZGF0YVxyXG4gICAgICAgIC5maW5kKHggPT4geC5zeXNOYW1lID09IGNvbXBvbmVudC5zeXNOYW1lXHJcbiAgICAgICAgICAgICAgfHwgeC5zeXNOYW1lID09IGAke2NvbXBvbmVudC5zeXNOYW1lfV9zdGFydGBcclxuICAgICAgICAgICAgICB8fCB4LnN5c05hbWUgPT0gYCR7Y29tcG9uZW50LnN5c05hbWV9X2VuZGApO1xyXG4gICAgICBpZiAoIXZhbHVlPy52YWx1ZSkge1xyXG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICFoYXNFcnJvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlcXVpcmVkQ29tcG9uZW50cyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSk6IENvbXBvbmVudE1vZGVsQmFzZVtde1xyXG4gICAgdmFyIGNvbXBvbmVudHMgPSBjb21wb25lbnRzLmZpbHRlcih4ID0+IHgudHlwZSAhPSBDb21wb25lbnRUeXBlLkdyb3VwICYmICEheC5vcHRpb25zLnJlcXVpcmVkKTtcclxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMuZmlsdGVyKHggPT4geC50eXBlID09IENvbXBvbmVudFR5cGUuR3JvdXAgJiYgeC5jb21wb25lbnRzLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgIHRoaXMuX2dldFJlcXVpcmVkQ29tcG9uZW50cyhjb21wb25lbnQuY29tcG9uZW50cyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29tcG9uZW50cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNFbXB0eSh2YWx1ZTogYW55LCB0eXBlOiBWYWx1ZVR5cGUpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlID09PSBWYWx1ZVR5cGUuVW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5sZW5ndGggPT09IDA7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxtcngtbW9kYWxcclxuICBbdGl0bGVdPVwidGl0bGVcIlxyXG4gIHNpemU9XCJsYXJnZVwiXHJcbiAgKGNsb3NlKT1cImNsb3NlKClcIlxyXG4gIChvayk9XCJvaygpXCJcclxuPlxyXG4gIDxhcHAtZm9ybS1kaXNwZW5zZXItbW9kYWxcclxuICAgIFtzZWN0aW9uU2V0dGluZ3NdPVwic2V0dGluZ3NcIlxyXG4gICAgW3ZhbHVlc109XCJyb3dNb2RlbC5kYXRhXCJcclxuICAgIFt2YWx1ZU1vZGVdPVwiJ21hbnVhbCdcIlxyXG4gICAgKGNoYW5nZWQpPVwiY29tcG9uZW50VmFsdWVDaGFuZ2VkKCRldmVudClcIlxyXG4gID48L2FwcC1mb3JtLWRpc3BlbnNlci1tb2RhbD5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNmb290ZXJDb250ZW50PlxyXG4gICAgPG1yeC1idXR0b25cclxuICAgICAgW2N1c3RvbUNsYXNzZXNdPVwiJ21yLTMnXCJcclxuICAgICAgW3R5cGVdPVwiJ3NlY29uZGFyeSdcIlxyXG4gICAgICBbc2l6ZV09XCInbWVkaXVtJ1wiXHJcbiAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcclxuICAgID7QntGC0LzQtdC90LBcclxuICAgIDwvbXJ4LWJ1dHRvbj5cclxuICAgIDxtcngtYnV0dG9uXHJcbiAgICAgIFt0eXBlXT1cIidwcmltYXJ5J1wiXHJcbiAgICAgIFtzaXplXT1cIidtZWRpdW0nXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImVtcHR5Um93XCJcclxuICAgICAgKGNsaWNrKT1cIm9rKClcIlxyXG4gICAgPnt7IG9rVGV4dCB9fVxyXG4gICAgPC9tcngtYnV0dG9uPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvbXJ4LW1vZGFsPlxyXG4iXX0=
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvY29tcG9uZW50cy9pbnB1dC10YWJsZS1tb2RhbC9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9pbnB1dC90YWJsZS9jb21wb25lbnRzL2lucHV0LXRhYmxlLW1vZGFsL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBWSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7O0FBaUM5RixNQUFNLE9BQU8sd0JBQXlCLFNBQVEscUJBQW1FO0lBUy9HLFlB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Q0FBQztRQUN2RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNwRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7K0dBOU9VLHdCQUF3QixzR0FhekIsVUFBVTttR0FiVCx3QkFBd0Isb0VBTnhCO1lBQ1QsY0FBYyxFQUFFO1lBQ2hCLHVCQUF1QjtZQUN2QixnQkFBZ0IsQ0FBQyx3QkFBd0I7U0FDMUMsaURDMUNILHd4QkE4QkEseURESUksV0FBVyx3V0FDWCxZQUFZLDZVQUNaLGtCQUFrQjs7NEZBUVQsd0JBQXdCO2tCQWpCcEMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixrQkFBa0I7cUJBQ25CLGFBQ1U7d0JBQ1QsY0FBYyxFQUFFO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLGdCQUFnQixDQUFDLHdCQUF3QjtxQkFDMUM7OzBCQWVFLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlLCBNT0RBTF9EQVRBLCBNb2RhbE1vZHVsZSwgTW9kYWxSZWYsIE1vZGFsU2VydmljZUNvbXBvbmVudCB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuaW1wb3J0IHsgSW5wdXRUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VmFsdWVNb2RlbCwgVGFibGVSb3dNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEZvcm1EaXNwZW5zZXJNb2RhbCB9IGZyb20gJy4vZm9ybS1kaXNwZW5zZXItbW9kYWwvZm9ybS1kaXNwZW5zZXItbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgcHJvdmlkZU5neE1hc2sgfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCB7IEZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLCBSZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgb2JqZWN0Rm9ybUFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudE1vZGVsQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL21vZGVscyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIElucHV0U3RhdGUsIFZhbHVlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL2VudW1zJztcclxuaW1wb3J0IHsgSW5wdXROdW1iZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscy9lbGVtZXRzL2lucHV0cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElucHV0VGFibGVNb2RhbFBhcmFtcyB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBva1RleHQ6IHN0cmluZztcclxuICBzZXR0aW5nczogSW5wdXRUYWJsZU1vZGVsO1xyXG4gIHJvd01vZGVsOiBUYWJsZVJvd01vZGVsO1xyXG4gIGlzQ2hlY2tSZXF1aXJlZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFRhYmxlTW9kYWxSZXN1bHQge1xyXG4gIHJlc3VsdDogYm9vbGVhbjtcclxuICByb3dNb2RlbDogVGFibGVSb3dNb2RlbDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtaW5wdXQtdGFibGUtbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50Lmxlc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1vZGFsTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRm9ybURpc3BlbnNlck1vZGFsLFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBwcm92aWRlTmd4TWFzaygpLFxyXG4gICAgRm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UsXHJcbiAgICBSZWZlcmVuY2VTZXJ2aWNlIC8vINC00LvRjyDQutC+0LzQv9C+0L3QtdC90YLQsCDRgdC/0LjRgdC+0LpcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFRhYmxlTW9kYWxDb21wb25lbnQgZXh0ZW5kcyBNb2RhbFNlcnZpY2VDb21wb25lbnQ8SW5wdXRUYWJsZU1vZGFsUGFyYW1zLCBJbnB1dFRhYmxlTW9kYWxSZXN1bHQ+IHtcclxuICBwdWJsaWMgdGl0bGUhOiBzdHJpbmc7XHJcbiAgcHVibGljIG9rVGV4dCE6IHN0cmluZztcclxuICBwdWJsaWMgc2V0dGluZ3MhOiBJbnB1dFRhYmxlTW9kZWw7XHJcbiAgcHVibGljIHJvd01vZGVsITogVGFibGVSb3dNb2RlbDtcclxuICAvLyDQl9Cw0L/QvtC80LjQvdCw0LXQvCDRgdGC0LDRgtGD0YEg0L/RgNC+0LLQtdGA0LrQuCDRhNC+0YDQvNGLINC/0YDQuCDQvtGC0LrRgNGL0YLQuNC4INC80L7QtNCw0LvQutC4XHJcbiAgcHVibGljIGlzQ2hlY2tSZXF1aXJlZCE6IGJvb2xlYW47XHJcbiAgcHVibGljIGVtcHR5Um93OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTW9kYWxSZWY8SW5wdXRUYWJsZU1vZGFsUmVzdWx0PixcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxyXG4gICAgcHJpdmF0ZSBmb3JtdWxhQ2FsY3VsYXRlU2VydmljZTogRm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KE1PREFMX0RBVEEpIGRhdGE6IElucHV0VGFibGVNb2RhbFBhcmFtcyxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XHJcbiAgICB0aGlzLm9rVGV4dCA9IGRhdGEub2tUZXh0O1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IGRhdGEuc2V0dGluZ3M7XHJcbiAgICB0aGlzLmlzQ2hlY2tSZXF1aXJlZCA9IGRhdGEuaXNDaGVja1JlcXVpcmVkO1xyXG5cclxuICAgIC8vINCa0LvQvtC90LjRgNGD0LXQvCDQstGF0L7QtNGP0YnRg9GOINC80L7QtNC10LvRjCDRgdGC0YDQvtC60LhcclxuICAgIGNvbnN0IHByZXBhcmVkUm93TW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YS5yb3dNb2RlbCk7XHJcblxyXG4gICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8INCy0YHQtSDQutC+0LzQv9C+0L3QtdC90YLRiyDRgtCw0LHQu9C40YbRiy4g0JXRgdC70Lgg0Y3RgtC+IFJhbmdlLdC60LDQu9C10L3QtNCw0YDRjCwg0L/QvtC00LPQvtGC0LDQstC70LjQstCw0LXQvCDQvNCw0YHRgdC40LIg0LzQvtC00LXQu9C10LlcclxuICAgIHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gQ29tcG9uZW50VHlwZS5JbnB1dERhdGUgJiYgKGNvbXBvbmVudCBhcyBhbnkpLm9wdGlvbnM/LnJhbmdlKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IHByZXBhcmVkUm93TW9kZWwuZGF0YS5maW5kKHggPT4geC5zeXNOYW1lID09PSBjb21wb25lbnQuc3lzTmFtZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g0JXRgdC70Lgg0LIg0YLQsNCx0LvQuNGG0LUg0LvQtdC20LDQuyDQvNCw0YHRgdC40LIg0YHRgtGA0L7QuiDQtNCw0YIgWydJU08uLi4nLCAnSVNPLi4uJ10g0LjQu9C4INC/0YPRgdGC0L7QuSDQvNCw0YHRgdC40LJcclxuICAgICAgICBpZiAoY2VsbCAmJiBBcnJheS5pc0FycmF5KGNlbGwudmFsdWUpICYmIChjZWxsLnZhbHVlLmxlbmd0aCA9PT0gMiB8fCBjZWxsLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGVTdGFydCA9IGNlbGwudmFsdWVbMF0gfHwgbnVsbDtcclxuICAgICAgICAgIGNvbnN0IGRhdGVFbmQgPSBjZWxsLnZhbHVlWzFdIHx8IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8g0J/RgNC10LLRgNCw0YnQsNC10Lwg0LIg0LzQsNGB0YHQuNCyINC80L7QtNC10LvQtdC5LCDQutC+0YLQvtGA0YvQuSDRgtCw0Log0LbQtNC10YIgSW5wdXREYXRlQ29tcG9uZW50XHJcbiAgICAgICAgICBjZWxsLnZhbHVlID0gW1xyXG4gICAgICAgICAgICB7IHN5c05hbWU6IGNvbXBvbmVudC5zeXNOYW1lLCB0eXBlOiBjb21wb25lbnQudHlwZSwgdmFsdWVUeXBlOiBjb21wb25lbnQudmFsdWVUeXBlLCB2YWx1ZTogZGF0ZVN0YXJ0IH0sXHJcbiAgICAgICAgICAgIHsgc3lzTmFtZTogY29tcG9uZW50LnN5c05hbWUsIHR5cGU6IGNvbXBvbmVudC50eXBlLCB2YWx1ZVR5cGU6IGNvbXBvbmVudC52YWx1ZVR5cGUsIHZhbHVlOiBkYXRlRW5kIH1cclxuICAgICAgICAgIF0gYXMgYW55O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3dNb2RlbCA9IHByZXBhcmVkUm93TW9kZWw7XHJcbiAgICB0aGlzLnJlc3VsdCA9IHsgcmVzdWx0OiBmYWxzZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWwgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRWYWx1ZUNoYW5nZWQodmFsdWVNb2RlbDogQ29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXSkge1xyXG4gICAgY29uc29sZS5ncm91cCgnPT09INCc0J7QlNCQ0JvQmtCQOiDQmNC30LzQtdC90LXQvdC40LUg0LfQvdCw0YfQtdC90LjRjyDQsiDRhNC+0YDQvNC1ID09PScpO1xyXG5cclxuICAgIGNvbnN0IGluY29taW5nTW9kZWxzID0gQXJyYXkuaXNBcnJheSh2YWx1ZU1vZGVsKSA/IHZhbHVlTW9kZWwgOiBbdmFsdWVNb2RlbF07XHJcbiAgICBjb25zdCBjbG9uZVJvd01vZGVsID0gc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpO1xyXG5cclxuICAgIC8vINCo0LDQsyAxOiDQodC90LDRh9Cw0LvQsCDQv9GA0L7RgdGC0L4g0L7QsdC90L7QstC70Y/QtdC8INCyIGNsb25lUm93TW9kZWwg0YLQtSDRgtC+0YfQtdGH0L3Ri9C1INC30L3QsNGH0LXQvdC40Y8sINC60L7RgtC+0YDRi9C1INGB0LXQudGH0LDRgSDQv9GA0LjQu9C10YLQtdC70LhcclxuICAgIGluY29taW5nTW9kZWxzLmZvckVhY2goaW5jb21pbmcgPT4ge1xyXG4gICAgICAvLyDQmNGJ0LXQvCDRj9GH0LXQudC60YMg0LIg0YHRgtGA0L7QutC1INC/0L4gc3lzTmFtZVxyXG4gICAgICBjb25zdCBjZWxsID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmQoYyA9PiBjLnN5c05hbWUgPT09IGluY29taW5nLnN5c05hbWUpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGNlbGwpIHtcclxuICAgICAgICAvLyDQndCw0YXQvtC00LjQvCDQvdCw0YHRgtGA0L7QudC60Lgg0Y3RgtC+0LPQviDQutC+0LzQv9C+0L3QtdC90YLQsCwg0YfRgtC+0LHRiyDQv9C+0L3Rj9GC0YwsIHJhbmdlINGN0YLQviDQuNC70Lgg0L3QtdGCXHJcbiAgICAgICAgY29uc3QgY29tcFNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5jb21wb25lbnRzLmZpbmQoeCA9PiB4LnN5c05hbWUgPT09IGluY29taW5nLnN5c05hbWUpO1xyXG4gICAgICAgIGNvbnN0IGlzUmFuZ2UgPSBjb21wU2V0dGluZ3M/LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXREYXRlICYmIChjb21wU2V0dGluZ3MgYXMgYW55KS5vcHRpb25zPy5yYW5nZTtcclxuXHJcbiAgICAgICAgaWYgKGlzUmFuZ2UpIHtcclxuICAgICAgICAgIC8vINCV0YHQu9C4INGN0YLQviByYW5nZSwg0YLQviBGb3JtRGlzcGVuc2VyINC80L7QsyDQv9GA0LjRgdC70LDRgtGMINC70LjQsdC+INC80LDRgdGB0LjQsiDQvNC+0LTQtdC70LXQuSwg0LvQuNCx0L4g0L7QtNC90YMg0LjQtyDQvdC40YVcclxuICAgICAgICAgIC8vINCd0LDQvCDQvdGD0LbQvdC+INCw0LrQutGD0YDQsNGC0L3QviDQvtCx0L3QvtCy0LjRgtGMINC80LDRgdGB0LjQsiDRgdGC0YDQvtC6INCyIGNlbGwudmFsdWVcclxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjZWxsLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjZWxsLnZhbHVlID0gW251bGwsIG51bGxdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vINCV0YHQu9C4INC/0YDQuNC70LXRgtC10Lsg0LzQsNGB0YHQuNCyICjQvdCw0L/RgNC40LzQtdGALCDQv9GA0Lgg0L/QtdGA0LLQvtC5INC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNC4INC40LvQuCDQv9C+0LvQvdC+0Lwg0LjQt9C80LXQvdC10L3QuNC4KVxyXG4gICAgICAgICAgaWYgKGluY29taW5nTW9kZWxzLmxlbmd0aCA+IDEgJiYgaW5jb21pbmdNb2RlbHMuZXZlcnkobSA9PiBtLnN5c05hbWUgPT09IGluY29taW5nLnN5c05hbWUpKSB7XHJcbiAgICAgICAgICAgIGNlbGwudmFsdWUgPSBbaW5jb21pbmdNb2RlbHNbMF0udmFsdWUsIGluY29taW5nTW9kZWxzWzFdLnZhbHVlXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vINCV0YHQu9C4INC/0YDQuNC70LXRgtC10LvQsCDQvtC00LjQvdC+0YfQvdCw0Y8g0LzQvtC00LXQu9GMINC40Lcg0LTQuNCw0L/QsNC30L7QvdCwICjQvdCw0L/RgNC40LzQtdGALCDQvtCx0L3QvtCy0LjQu9Cw0YHRjCDRgtC+0LvRjNC60L4g0L7QtNC90LAg0LTQsNGC0LApLFxyXG4gICAgICAgICAgICAvLyDQuNC70LggRm9ybURpc3BlbnNlciDQv9C70Y7QvdGD0Lsg0L7QsdGK0LXQutGCLCDRgyDQutC+0YLQvtGA0L7Qs9C+INCy0L3Rg9GC0YDQuCB2YWx1ZSDRg9C20LUg0LvQtdC20LjRgiDQvNCw0YHRgdC40LIv0LTQsNGC0LAuXHJcbiAgICAgICAgICAgIC8vINCf0YDQvtCy0LXRgNGP0LXQvCwg0YfRgtC+INC40LzQtdC90L3QviDQstC90YPRgtGA0LggaW5jb21pbmcudmFsdWVcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5jb21pbmcudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IFtpbmNvbWluZy52YWx1ZVswXSwgaW5jb21pbmcudmFsdWVbMV1dO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vINCh0LDQvNGL0Lkg0YfQsNGB0YLRi9C5INGB0LvRg9GH0LDQuSDQv9GA0Lgg0YfQsNGB0YLQuNGH0L3QvtC8INC40LfQvNC10L3QtdC90LjQuCDRhNC+0YDQvNGLOlxyXG4gICAgICAgICAgICAgIC8vINCf0YvRgtCw0LXQvNGB0Y8g0L/QvtC90Y/RgtGMLCDRjdGC0L4g0YHRgtCw0YDRgtC+0LLQsNGPINC00LDRgtCwINC40LvQuCDQutC+0L3QtdGH0L3QsNGPLiDQldGB0LvQuCDRjdGC0L4g0L3QtdCy0L7Qt9C80L7QttC90L4g0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0L3QsNC/0YDRj9C80YPRjixcclxuICAgICAgICAgICAgICAvLyDQuCDQvdCw0Lwg0LLQsNC20LXQvSDQv9C+0YDRj9C00L7Quiwg0YLQviBGb3JtRGlzcGVuc2VyINC+0LHRi9GH0L3QviDRiNC70LXRgiDQvNCw0YHRgdC40LIuIFxyXG4gICAgICAgICAgICAgIC8vINCd0L4g0LXRgdC70Lgg0L7QvSDQv9GA0LjRgdC70LDQuyDQvtC00LjQvdC+0YfQvdGD0Y4g0YHRgtGA0L7QutGDLCDQsCDRgyDQvdCw0YEg0LIgY2VsbC52YWx1ZSDRg9C20LUg0YfRgtC+LdGC0L4g0LHRi9C70L46XHJcbiAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IEFycmF5LmlzQXJyYXkoaW5jb21pbmcudmFsdWUpID8gaW5jb21pbmcudmFsdWUgOiBbaW5jb21pbmcudmFsdWUsIGNlbGwudmFsdWVbMV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vINCU0LvRjyDQstGB0LXRhSDQvtGB0YLQsNC70YzQvdGL0YUg0L7QsdGL0YfQvdGL0YUg0L/QvtC70LXQuSAo0YHRgtGA0L7QutC4LCDQv9C10YDQtdC60LvRjtGH0LDRgtC10LvQuCwg0L7QtNC40L3QvtGH0L3Ri9C1INC00LDRgtGLKVxyXG4gICAgICAgICAgY2VsbC52YWx1ZSA9IGluY29taW5nLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g0KjQsNCzIDI6INCS0LDQu9C40LTQsNGG0LjRjyDRgdGC0YDRg9C60YLRg9GA0YsuINCf0YDQvtCy0LXRgNGP0LXQvCDQktCh0JUgcmFuZ2Ut0LrQvtC80L/QvtC90LXQvdGC0Ysg0LIg0YHRgtGA0L7QutC1LlxyXG4gICAgLy8g0JXRgdC70Lgg0LPQtNC1LdGC0L4g0L/QviDQvtGI0LjQsdC60LUg0L7QutCw0LfQsNC70LDRgdGMINGB0YLRgNC+0LrQsCDQstC80LXRgdGC0L4g0LzQsNGB0YHQuNCy0LAgKNC60LDQuiDQsiDQstCw0YjQtdC8INC70L7Qs9C1KSwg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0YfQuNC90LjQvCDRgdGC0YDRg9C60YLRg9GA0YMhXHJcbiAgICB0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMuZm9yRWFjaChjb21wb25lbnQgPT4ge1xyXG4gICAgICBpZiAoY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXREYXRlICYmIChjb21wb25lbnQgYXMgYW55KS5vcHRpb25zPy5yYW5nZSkge1xyXG4gICAgICAgIGNvbnN0IGNlbGwgPSBjbG9uZVJvd01vZGVsLmRhdGEuZmluZChjID0+IGMuc3lzTmFtZSA9PT0gY29tcG9uZW50LnN5c05hbWUpO1xyXG4gICAgICAgIGlmIChjZWxsICYmICFBcnJheS5pc0FycmF5KGNlbGwudmFsdWUpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFvQpNC40LrRgSDRgdGC0YDRg9C60YLRg9GA0YtdINCf0L7Qu9C1ICR7Y29tcG9uZW50LnN5c05hbWV9INC40LzQtdC70L4g0L3QtdCy0LXRgNC90YvQuSDRgtC40L8g0LfQvdCw0YfQtdC90LjRjzpgLCBjZWxsLnZhbHVlKTtcclxuICAgICAgICAgIC8vINCX0LDQstC+0YDQsNGH0LjQstCw0LXQvCDQvtC00LjQvdC+0YfQvdGD0Y4g0YHRgtGA0L7QutGDINCyINC80LDRgdGB0LjQsiwg0YfRgtC+0LHRiyDQvdC1INC70L7QvNCw0YLRjCDQu9C+0LPQuNC60YMg0YLQsNCx0LvQuNGG0YtcclxuICAgICAgICAgIGNlbGwudmFsdWUgPSBjZWxsLnZhbHVlID8gW2NlbGwudmFsdWUsIG51bGxdIDogW251bGwsIG51bGxdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3dNb2RlbCA9IGNsb25lUm93TW9kZWw7XHJcbiAgICB0aGlzLl9yZWNhbGN1bGF0ZUZvcm11bGFGaWVsZHMoKTtcclxuICAgIHRoaXMuZW1wdHlSb3cgPSB0aGlzLnJvd01vZGVsLmRhdGEuZXZlcnkoeCA9PiB0aGlzLmlzRW1wdHkoeC52YWx1ZSwgeC52YWx1ZVR5cGUpKTtcclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coJ9CY0YLQvtCz0L7QstGL0Lkgcm93TW9kZWwg0LIg0L/QsNC80Y/RgtC4INC80L7QtNCw0LvQutC4OicsIHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsKSk7XHJcbiAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb2soKSB7XHJcbiAgICBjb25zb2xlLmdyb3VwKCc9PT0g0JzQntCU0JDQm9Ca0JA6INCd0LDQttCw0YLQsCDQutC90L7Qv9C60LAg0J7QmiA9PT0nKTtcclxuICAgIGNvbnNvbGUubG9nKCfQpNC40L3QsNC70YzQvdGL0Lkgcm93TW9kZWwg0L/QtdGA0LXQtCDQvtGC0L/RgNCw0LLQutC+0Lkg0LIg0YLQsNCx0LvQuNGG0YM6Jywgc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLl9pc1ZhbGlkKCkpIHtcclxuICAgICAgY29uc29sZS53YXJuKCfQktCw0LvQuNC00LDRhtC40Y8g0LzQvtC00LDQu9C60Lgg0J3QlSDQn9Cg0J7QmdCU0JXQndCQJyk7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gob2JqZWN0Rm9ybUFjdGlvbnMudXBkYXRlQ2hlY2tSZXF1aXJlZCh7IGlzQ2hlY2tSZXF1aXJlZDogdHJ1ZSB9KSk7XHJcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCfQktCw0LvQuNC00LDRhtC40Y8g0YPRgdC/0LXRiNC90LAuINCX0LDQutGA0YvQstCw0LXQvCDQvNC+0LTQsNC70LrRgyDRgSDRgNC10LfRg9C70YzRgtCw0YLQvtC8IHRydWUuJyk7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZUNoZWNrUmVxdWlyZWQoeyBpc0NoZWNrUmVxdWlyZWQ6IHRoaXMuaXNDaGVja1JlcXVpcmVkIH0pKTtcclxuICAgIHRoaXMucmVzdWx0ID0geyByZXN1bHQ6IHRydWUsIHJvd01vZGVsOiB0aGlzLnJvd01vZGVsIH07XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yZXN1bHQpKTtcclxuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZSgpIHtcclxuICAgIC8vINCy0L7Qt9Cy0YDQsNGJ0LDQtdC8INC/0YDQuNC30L3QsNC6INC60LDQuiDQsdGL0Lsg0LTQviDQvtGC0LrRgNGL0YLQuNGPINC80L7QtNCw0LvQutC4XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZUNoZWNrUmVxdWlyZWQoeyBpc0NoZWNrUmVxdWlyZWQ6IHRoaXMuaXNDaGVja1JlcXVpcmVkIH0pKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdCA9IHtyZXN1bHQ6IGZhbHNlLCByb3dNb2RlbDogdGhpcy5yb3dNb2RlbH07XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLnJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90cmFuc2Zvcm1WYWx1ZXModmFsdWU6IENvbXBvbmVudFZhbHVlTW9kZWwpIHtcclxuICAgIGNvbnN0IGNsb25lUm93TW9kZWwgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbCk7XHJcbiAgICBjb25zdCBmaW5kVmFsdWU6IENvbXBvbmVudFZhbHVlTW9kZWwgfCB1bmRlZmluZWQgPSBjbG9uZVJvd01vZGVsLmRhdGEuZmluZCgoYzogQ29tcG9uZW50VmFsdWVNb2RlbCkgPT4gYy5zeXNOYW1lID09PSB2YWx1ZS5zeXNOYW1lKTtcclxuXHJcbiAgICBpZiAoZmluZFZhbHVlKSB7XHJcbiAgICAgIGZpbmRWYWx1ZS52YWx1ZSA9IHZhbHVlLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm93TW9kZWwgPSBjbG9uZVJvd01vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVjYWxjdWxhdGVGb3JtdWxhRmllbGRzKCkge1xyXG4gICAgY29uc3QgZm9ybXVsYUNvbXBvbmVudHMgPSB0aGlzLl9nZXRGb3JtdWxhTnVtYmVyQ29tcG9uZW50cyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG5cclxuICAgIGlmICghZm9ybXVsYUNvbXBvbmVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjbG9uZVJvd01vZGVsID0gc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybXVsYUNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGhhc1VwZGF0ZXMgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGZvcm11bGFDb21wb25lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybXVsYSA9IGNvbXBvbmVudC5vcHRpb25zPy5mb3JtdWxhPy50cmltKCk7XHJcbiAgICAgICAgaWYgKCFmb3JtdWxhKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UuY2FsY3VsYXRlTWF0aEV4cHJlc3Npb24oZm9ybXVsYSwgY2xvbmVSb3dNb2RlbC5kYXRhKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBjbG9uZVJvd01vZGVsLmRhdGEuZmluZCh4ID0+IHguc3lzTmFtZSA9PT0gY29tcG9uZW50LnN5c05hbWUpO1xyXG4gICAgICAgIGlmICghdGFyZ2V0VmFsdWUgfHwgdGFyZ2V0VmFsdWUudmFsdWUgPT09IHJlc3VsdCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXRWYWx1ZS52YWx1ZSA9IHJlc3VsdDtcclxuICAgICAgICBoYXNVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFoYXNVcGRhdGVzKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd01vZGVsID0gY2xvbmVSb3dNb2RlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEZvcm11bGFOdW1iZXJDb21wb25lbnRzKGNvbXBvbmVudHM6IENvbXBvbmVudE1vZGVsQmFzZVtdKTogSW5wdXROdW1iZXJNb2RlbFtdIHtcclxuICAgIGNvbnN0IHJlc3VsdDogSW5wdXROdW1iZXJNb2RlbFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29tcG9uZW50LnR5cGUgPT09IENvbXBvbmVudFR5cGUuSW5wdXROdW1iZXIgJiZcclxuICAgICAgICAoY29tcG9uZW50IGFzIElucHV0TnVtYmVyTW9kZWwpLm9wdGlvbnM/LmlucHV0U3RhdGUgPT09IElucHV0U3RhdGUuRm9ybXVsYVxyXG4gICAgICApIHtcclxuICAgICAgICByZXN1bHQucHVzaChjb21wb25lbnQgYXMgSW5wdXROdW1iZXJNb2RlbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5fZ2V0Rm9ybXVsYU51bWJlckNvbXBvbmVudHMoY29tcG9uZW50LmNvbXBvbmVudHMpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICB2YXIgcmVxdWlyZWRDb21wb25lbnRzID0gdGhpcy5fZ2V0UmVxdWlyZWRDb21wb25lbnRzKHRoaXMuc2V0dGluZ3MuY29tcG9uZW50cyk7XHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiByZXF1aXJlZENvbXBvbmVudHMpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnJvd01vZGVsLmRhdGFcclxuICAgICAgICAuZmluZCh4ID0+IHguc3lzTmFtZSA9PSBjb21wb25lbnQuc3lzTmFtZVxyXG4gICAgICAgICAgICAgIHx8IHguc3lzTmFtZSA9PSBgJHtjb21wb25lbnQuc3lzTmFtZX1fc3RhcnRgXHJcbiAgICAgICAgICAgICAgfHwgeC5zeXNOYW1lID09IGAke2NvbXBvbmVudC5zeXNOYW1lfV9lbmRgKTtcclxuICAgICAgaWYgKCF2YWx1ZT8udmFsdWUpIHtcclxuICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAhaGFzRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZXF1aXJlZENvbXBvbmVudHMoY29tcG9uZW50czogQ29tcG9uZW50TW9kZWxCYXNlW10pOiBDb21wb25lbnRNb2RlbEJhc2VbXXtcclxuICAgIHZhciBjb21wb25lbnRzID0gY29tcG9uZW50cy5maWx0ZXIoeCA9PiB4LnR5cGUgIT0gQ29tcG9uZW50VHlwZS5Hcm91cCAmJiAhIXgub3B0aW9ucy5yZXF1aXJlZCk7XHJcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzLmZpbHRlcih4ID0+IHgudHlwZSA9PSBDb21wb25lbnRUeXBlLkdyb3VwICYmIHguY29tcG9uZW50cy5sZW5ndGggPiAwKSkge1xyXG4gICAgICB0aGlzLl9nZXRSZXF1aXJlZENvbXBvbmVudHMoY29tcG9uZW50LmNvbXBvbmVudHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBvbmVudHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRW1wdHkodmFsdWU6IGFueSwgdHlwZTogVmFsdWVUeXBlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZSA9PT0gVmFsdWVUeXBlLlVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID09PSAwO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8bXJ4LW1vZGFsXHJcbiAgW3RpdGxlXT1cInRpdGxlXCJcclxuICBzaXplPVwibGFyZ2VcIlxyXG4gIChjbG9zZSk9XCJjbG9zZSgpXCJcclxuICAob2spPVwib2soKVwiXHJcbj5cclxuICA8YXBwLWZvcm0tZGlzcGVuc2VyLW1vZGFsXHJcbiAgICBbc2VjdGlvblNldHRpbmdzXT1cInNldHRpbmdzXCJcclxuICAgIFt2YWx1ZXNdPVwicm93TW9kZWwuZGF0YVwiXHJcbiAgICBbdmFsdWVNb2RlXT1cIidtYW51YWwnXCJcclxuICAgIChjaGFuZ2VkKT1cImNvbXBvbmVudFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICA+PC9hcHAtZm9ybS1kaXNwZW5zZXItbW9kYWw+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjZm9vdGVyQ29udGVudD5cclxuICAgIDxtcngtYnV0dG9uXHJcbiAgICAgIFtjdXN0b21DbGFzc2VzXT1cIidtci0zJ1wiXHJcbiAgICAgIFt0eXBlXT1cIidzZWNvbmRhcnknXCJcclxuICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXHJcbiAgICA+0J7RgtC80LXQvdCwXHJcbiAgICA8L21yeC1idXR0b24+XHJcbiAgICA8bXJ4LWJ1dHRvblxyXG4gICAgICBbdHlwZV09XCIncHJpbWFyeSdcIlxyXG4gICAgICBbc2l6ZV09XCInbWVkaXVtJ1wiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJlbXB0eVJvd1wiXHJcbiAgICAgIChjbGljayk9XCJvaygpXCJcclxuICAgID57eyBva1RleHQgfX1cclxuICAgIDwvbXJ4LWJ1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L21yeC1tb2RhbD5cclxuIl19
|
|
@@ -2212,33 +2212,66 @@ class InputTableModalComponent extends ModalServiceComponent {
|
|
|
2212
2212
|
this.result = { result: false, rowModel: this.rowModel };
|
|
2213
2213
|
}
|
|
2214
2214
|
componentValueChanged(valueModel) {
|
|
2215
|
+
console.group('=== МОДАЛКА: Изменение значения в форме ===');
|
|
2215
2216
|
const incomingModels = Array.isArray(valueModel) ? valueModel : [valueModel];
|
|
2216
2217
|
const cloneRowModel = structuredClone(this.rowModel);
|
|
2217
|
-
|
|
2218
|
-
incomingModels.forEach(
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
const modelsGroup = groups[sysName];
|
|
2225
|
-
const findValue = cloneRowModel.data.find(c => c.sysName === sysName);
|
|
2226
|
-
if (findValue) {
|
|
2227
|
-
// Ищем, является ли этот компонент рендж-календарем по настройкам
|
|
2228
|
-
const compSettings = this.settings.components.find(x => x.sysName === sysName);
|
|
2218
|
+
// Шаг 1: Сначала просто обновляем в cloneRowModel те точечные значения, которые сейчас прилетели
|
|
2219
|
+
incomingModels.forEach(incoming => {
|
|
2220
|
+
// Ищем ячейку в строке по sysName
|
|
2221
|
+
const cell = cloneRowModel.data.find(c => c.sysName === incoming.sysName);
|
|
2222
|
+
if (cell) {
|
|
2223
|
+
// Находим настройки этого компонента, чтобы понять, range это или нет
|
|
2224
|
+
const compSettings = this.settings.components.find(x => x.sysName === incoming.sysName);
|
|
2229
2225
|
const isRange = compSettings?.type === ComponentType.InputDate && compSettings.options?.range;
|
|
2230
|
-
if (isRange
|
|
2231
|
-
//
|
|
2232
|
-
|
|
2226
|
+
if (isRange) {
|
|
2227
|
+
// Если это range, то FormDispenser мог прислать либо массив моделей, либо одну из них
|
|
2228
|
+
// Нам нужно аккуратно обновить массив строк в cell.value
|
|
2229
|
+
if (!Array.isArray(cell.value)) {
|
|
2230
|
+
cell.value = [null, null];
|
|
2231
|
+
}
|
|
2232
|
+
// Если прилетел массив (например, при первой инициализации или полном изменении)
|
|
2233
|
+
if (incomingModels.length > 1 && incomingModels.every(m => m.sysName === incoming.sysName)) {
|
|
2234
|
+
cell.value = [incomingModels[0].value, incomingModels[1].value];
|
|
2235
|
+
}
|
|
2236
|
+
else {
|
|
2237
|
+
// Если прилетела одиночная модель из диапазона (например, обновилась только одна дата),
|
|
2238
|
+
// или FormDispenser плюнул объект, у которого внутри value уже лежит массив/дата.
|
|
2239
|
+
// Проверяем, что именно внутри incoming.value
|
|
2240
|
+
if (Array.isArray(incoming.value)) {
|
|
2241
|
+
cell.value = [incoming.value[0], incoming.value[1]];
|
|
2242
|
+
}
|
|
2243
|
+
else {
|
|
2244
|
+
// Самый частый случай при частичном изменении формы:
|
|
2245
|
+
// Пытаемся понять, это стартовая дата или конечная. Если это невозможно определить напрямую,
|
|
2246
|
+
// и нам важен порядок, то FormDispenser обычно шлет массив.
|
|
2247
|
+
// Но если он прислал одиночную строку, а у нас в cell.value уже что-то было:
|
|
2248
|
+
cell.value = Array.isArray(incoming.value) ? incoming.value : [incoming.value, cell.value[1]];
|
|
2249
|
+
}
|
|
2250
|
+
}
|
|
2233
2251
|
}
|
|
2234
2252
|
else {
|
|
2235
|
-
|
|
2253
|
+
// Для всех остальных обычных полей (строки, переключатели, одиночные даты)
|
|
2254
|
+
cell.value = incoming.value;
|
|
2255
|
+
}
|
|
2256
|
+
}
|
|
2257
|
+
});
|
|
2258
|
+
// Шаг 2: Валидация структуры. Проверяем ВСЕ range-компоненты в строке.
|
|
2259
|
+
// Если где-то по ошибке оказалась строка вместо массива (как в вашем логе), принудительно чиним структуру!
|
|
2260
|
+
this.settings.components.forEach(component => {
|
|
2261
|
+
if (component.type === ComponentType.InputDate && component.options?.range) {
|
|
2262
|
+
const cell = cloneRowModel.data.find(c => c.sysName === component.sysName);
|
|
2263
|
+
if (cell && !Array.isArray(cell.value)) {
|
|
2264
|
+
console.warn(`[Фикс структуры] Поле ${component.sysName} имело неверный тип значения:`, cell.value);
|
|
2265
|
+
// Заворачиваем одиночную строку в массив, чтобы не ломать логику таблицы
|
|
2266
|
+
cell.value = cell.value ? [cell.value, null] : [null, null];
|
|
2236
2267
|
}
|
|
2237
2268
|
}
|
|
2238
2269
|
});
|
|
2239
2270
|
this.rowModel = cloneRowModel;
|
|
2240
2271
|
this._recalculateFormulaFields();
|
|
2241
2272
|
this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
|
|
2273
|
+
console.log('Итоговый rowModel в памяти модалки:', structuredClone(this.rowModel));
|
|
2274
|
+
console.groupEnd();
|
|
2242
2275
|
}
|
|
2243
2276
|
ok() {
|
|
2244
2277
|
console.group('=== МОДАЛКА: Нажата кнопка ОК ===');
|