@libs-ui/components-inputs-multi-language 0.2.356-23 → 0.2.356-25

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/README.md CHANGED
@@ -71,7 +71,6 @@ export class YourComponent {}
71
71
  | `ignoreRemove` | `boolean` | `undefined` | Ẩn nút xóa ngôn ngữ. |
72
72
  | `keyHeader` | `string` | `undefined` | Key dùng để hiển thị header (nếu có). |
73
73
  | `maxValueNumber` | `number` | `undefined` | Giá trị tối đa cho input số. |
74
- | `multiLine` | `boolean` | `undefined` | Cho phép nhập nhiều dòng (textarea). |
75
74
  | `onlyAcceptNegativeValue` | `boolean` | `undefined` | Chỉ chấp nhận giá trị âm. |
76
75
  | `optionsLanguage` | `Array<IOption>` | `langOptions()` | Danh sách các tùy chọn ngôn ngữ/tiền tệ. |
77
76
  | `placeholder` | `string` | `undefined` | Placeholder cho các input. |
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaW50ZXJmYWNlcy9tdWx0aS1sYW5ndWFnZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElWYWxpZFJlcXVpcmVkIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhSXRlbSB7XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgaGVhZGVyPzogSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXI7XG4gIGlzT25lVmFsdWU/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVJbnB1dD86IHN0cmluZztcbiAgdGl0bGVGaWVsZD86IHN0cmluZztcbiAgaXNDb3VudENoYXJhY3RlcnM/OiBib29sZWFuO1xuICB2YWxpZFJlcXVpcmVkPzogSVZhbGlkUmVxdWlyZWQ7XG4gIGRhdGFNdWx0aUxhbmd1YWdlPzogSURhdGFNdWx0aUxhbmd1YWdlO1xuICB2YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbiAgdmFsaWRSZXF1aXJlZERlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YU11bHRpTGFuZ3VhZ2Uge1xuICBbcGFyYW06IHN0cmluZ106IElEYXRhTGFuZ3VhZ2UgfCBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFMYW5ndWFnZSB7XG4gIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudE11bHRpTGFuZ3VhZ2Uge1xuICBhY3Rpb246ICdhZGQnIHwgJ3JlbW92ZSc7XG4gIGRhdGE6IElEYXRhTXVsdGlMYW5ndWFnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29uZmlnTXVsdGlMYW5ndWFnZUhlYWRlciB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpc1Nob3dJbnB1dD86IGJvb2xlYW47XG4gIHZhbGlkUmVxdWlyZWQ/OiB7XG4gICAgaXNSZXF1aXJlZD86IGJvb2xlYW47XG4gIH07XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBkYXRhRGVmYXVsdD86XG4gICAgfCBJRGF0YU11bHRpTGFuZ3VhZ2VcbiAgICB8IHtcbiAgICAgICAgdG90YWw/OiBJRGF0YU11bHRpTGFuZ3VhZ2U7XG4gICAgICB9O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1ZJRVdfTVVMVElfTEFOR1VBR0UgPSAndGV4dCcgfCAnaW50ZWdlcicgfCAnbnVtYmVyJyB8ICdlZGl0b3InIHwgJ2Zsb2F0JyB8ICdiaWdpbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gIGNoZWNrSXNWYWxpZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgZ2V0RGF0YTogKCkgPT4gUHJvbWlzZTxJRGF0YU11bHRpTGFuZ3VhZ2VbXSB8IElEYXRhTXVsdGlMYW5ndWFnZSB8IHVuZGVmaW5lZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUN1cnJlbmN5VW5pdCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaW50ZXJmYWNlcy9tdWx0aS1sYW5ndWFnZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElWYWxpZFJlcXVpcmVkIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhSXRlbSB7XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgaGVhZGVyPzogSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXI7XG4gIGlzT25lVmFsdWU/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVJbnB1dD86IHN0cmluZztcbiAgdGl0bGVGaWVsZD86IHN0cmluZztcbiAgaXNDb3VudENoYXJhY3RlcnM/OiBib29sZWFuO1xuICB2YWxpZFJlcXVpcmVkPzogSVZhbGlkUmVxdWlyZWQ7XG4gIGRhdGFNdWx0aUxhbmd1YWdlPzogSURhdGFNdWx0aUxhbmd1YWdlO1xuICB2YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbiAgdmFsaWRSZXF1aXJlZERlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbiAgbWluSGVpZ2h0RWRpdG9yQ29udGVudERlZmF1bHQ/OiBudW1iZXI7XG4gIG1heEhlaWdodEVkaXRvckNvbnRlbnREZWZhdWx0PzogbnVtYmVyO1xuICBoZWlnaHRFZGl0b3JDb250ZW50RGVmYXVsdD86IG51bWJlcjtcbiAgcmVzaXplPzogJ3ZlcnRpY2FsJyB8ICdub25lJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YU11bHRpTGFuZ3VhZ2Uge1xuICBbcGFyYW06IHN0cmluZ106IElEYXRhTGFuZ3VhZ2UgfCBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFMYW5ndWFnZSB7XG4gIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudE11bHRpTGFuZ3VhZ2Uge1xuICBhY3Rpb246ICdhZGQnIHwgJ3JlbW92ZSc7XG4gIGRhdGE6IElEYXRhTXVsdGlMYW5ndWFnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29uZmlnTXVsdGlMYW5ndWFnZUhlYWRlciB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpc1Nob3dJbnB1dD86IGJvb2xlYW47XG4gIHZhbGlkUmVxdWlyZWQ/OiB7XG4gICAgaXNSZXF1aXJlZD86IGJvb2xlYW47XG4gIH07XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBkYXRhRGVmYXVsdD86XG4gICAgfCBJRGF0YU11bHRpTGFuZ3VhZ2VcbiAgICB8IHtcbiAgICAgICAgdG90YWw/OiBJRGF0YU11bHRpTGFuZ3VhZ2U7XG4gICAgICB9O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1ZJRVdfTVVMVElfTEFOR1VBR0UgPSAndGV4dCcgfCAnaW50ZWdlcicgfCAnbnVtYmVyJyB8ICdlZGl0b3InIHwgJ2Zsb2F0JyB8ICdiaWdpbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gIGNoZWNrSXNWYWxpZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgZ2V0RGF0YTogKCkgPT4gSURhdGFNdWx0aUxhbmd1YWdlW10gfCBJRGF0YU11bHRpTGFuZ3VhZ2UgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUN1cnJlbmN5VW5pdCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, effect, input, model, output, signal, untracked } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, effect, input, model, output, signal, untracked, viewChildren } from '@angular/core';
2
2
  import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
3
3
  import { LibsUiComponentsInputsValidComponent } from '@libs-ui/components-inputs-valid';
4
4
  import { cloneDeep, isNil, UtilsCache } from '@libs-ui/utils';
@@ -8,15 +8,14 @@ import { LibsUiComponentsInputsMultiLanguageGetItemPipe } from '../pipes/get-ite
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@ngx-translate/core";
10
10
  export class LibsUiComponentsInputsMultiLanguageItemsComponent {
11
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
11
  dataMultiKey = signal([]);
13
12
  langDefault = signal(UtilsCache.getLang());
14
13
  configHeader = signal(undefined);
15
14
  validRequired = signal({ isRequired: false });
16
15
  validRequiredWhenInputHasValue = signal(undefined);
17
16
  dataHeader = signal(undefined);
18
- multiLanguageFunctionControl = signal([]);
19
- inputValidFunctionControl = signal([]);
17
+ inputComponentRefs = viewChildren(LibsUiComponentsInputsValidComponent);
18
+ multiLanguageComponentRefs = viewChildren(LibsUiComponentsInputsMultiLanguageComponent);
20
19
  configItems = input([]);
21
20
  dataMultiLanguage = model([{}]);
22
21
  zIndex = input();
@@ -27,124 +26,112 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
27
26
  valueUpDownNumber = input();
28
27
  maxValueNumber = input();
29
28
  onlyAcceptNegativeValue = input();
30
- outClick = output();
31
- outFunctionControl = output();
29
+ classIconAddLanguage = input('libs-ui-icon-add', { transform: (value) => value || 'libs-ui-icon-add' });
32
30
  outChangeValue = output();
33
31
  constructor() {
34
32
  effect(() => {
35
- const configItems = this.configItems();
33
+ const items = this.configItems();
36
34
  untracked(() => {
37
- if (configItems && configItems.length) {
38
- this.configHeader.set(configItems[0].header);
39
- }
35
+ this.configHeader.set(items?.[0]?.header);
36
+ this.validRequired.set(items?.[0]?.validRequired ?? { isRequired: false });
37
+ this.syncDataMultiKey();
40
38
  });
41
39
  });
42
40
  effect(() => {
43
- const dataMultiLanguage = this.dataMultiLanguage();
41
+ const rows = this.dataMultiLanguage();
44
42
  untracked(() => {
45
- if (!dataMultiLanguage || !dataMultiLanguage.length) {
46
- this.dataMultiLanguage.set([{}]);
47
- const configHeader = this.configHeader();
48
- if (configHeader && configHeader.dataDefault) {
49
- this.dataMultiLanguage.set([cloneDeep(configHeader.dataDefault)]);
50
- }
43
+ if (!rows?.length) {
44
+ const header = this.configHeader();
45
+ const initial = header?.dataDefault ? cloneDeep(header.dataDefault) : {};
46
+ this.dataMultiLanguage.set([initial]);
51
47
  }
52
- this.handlerConfigMulti();
48
+ this.syncDataMultiKey();
53
49
  });
54
50
  });
55
51
  }
56
- ngOnInit() {
57
- this.outFunctionControl.emit(this.FunctionsControl);
58
- const configItems = this.configItems();
59
- if (configItems && configItems.length && configItems[0].validRequired) {
60
- this.validRequired.set(configItems[0].validRequired);
61
- }
62
- }
63
52
  get FunctionsControl() {
64
53
  return {
65
54
  checkIsValid: this.validate.bind(this),
66
55
  getData: this.getData.bind(this),
67
56
  };
68
57
  }
69
- async handlerConfigMulti() {
70
- this.dataMultiKey.set([]);
71
- this.dataMultiLanguage().forEach(() => {
72
- const configItems = this.configItems();
73
- if (configItems) {
74
- this.dataMultiKey().push(configItems);
75
- }
76
- });
77
- this.dataMultiKey.update((items) => [...items]);
78
- }
79
- async handlerAdd() {
80
- let dataLanguage = {};
81
- const configHeader = this.configHeader();
82
- if (configHeader) {
83
- dataLanguage = cloneDeep(configHeader.dataDefault);
58
+ /**
59
+ * Mỗi dòng cần một bản `data` (shallow copy từng `IDataItem`) để multi-language con không dùng chung một mảng tham chiếu.
60
+ */
61
+ syncDataMultiKey(indexRemove) {
62
+ const templates = this.configItems();
63
+ const rowCount = this.dataMultiLanguage().length;
64
+ if (!templates?.length) {
65
+ this.dataMultiKey.set([]);
66
+ return;
84
67
  }
68
+ if (this.dataMultiKey().length === rowCount) {
69
+ return;
70
+ }
71
+ if (this.dataMultiKey().length > rowCount && !isNil(indexRemove)) {
72
+ this.dataMultiKey.update((data) => {
73
+ data.splice(indexRemove, 1);
74
+ return data;
75
+ });
76
+ return;
77
+ }
78
+ const newData = Array.from({ length: rowCount - this.dataMultiKey().length }, () => templates.map((c) => cloneDeep(c)));
79
+ this.dataMultiKey.update((data) => [...data, ...newData]);
80
+ }
81
+ handlerAdd() {
82
+ const header = this.configHeader();
83
+ const dataLanguage = header?.dataDefault ? cloneDeep(header.dataDefault) : {};
85
84
  this.dataMultiLanguage.update((items) => [...items, dataLanguage]);
86
- this.dataMultiKey.update((items) => [...items, this.configItems()]);
87
85
  this.handlerChangeValue();
88
86
  }
89
- async handlerRemove(index) {
90
- this.dataMultiLanguage.update((items) => {
91
- items.splice(index, 1);
92
- return [...items];
93
- });
87
+ handlerRemove(index) {
88
+ this.dataMultiLanguage.update((items) => items.filter((_, i) => i !== index));
89
+ this.syncDataMultiKey(index);
94
90
  this.handlerChangeValue();
95
91
  }
96
- async handlerClick(e) {
97
- e.stopPropagation();
98
- this.outClick.emit();
99
- }
100
- async handlerFunctionsControlInputLanguage(event) {
101
- this.multiLanguageFunctionControl.update((items) => [...items, event]);
102
- console.log(this.multiLanguageFunctionControl());
103
- }
104
- async handlerFunctionsControlInputValid(event) {
105
- this.inputValidFunctionControl.update((items) => [...items, event]);
106
- }
107
92
  async validate() {
108
93
  let valid = true;
109
- this.checkValidRequiredWhenInputHasValue();
110
- for (const control of this.inputValidFunctionControl()) {
111
- if (!(await control.checkIsValid())) {
94
+ this.applyValidRequiredWhenHeaderHasValue();
95
+ const rowCount = this.dataMultiLanguage().length;
96
+ for (let i = 0; i < rowCount; i++) {
97
+ const inputCtrl = this.inputComponentRefs()[i];
98
+ if (inputCtrl && !(await inputCtrl.FunctionsControl.checkIsValid())) {
112
99
  valid = false;
113
100
  }
114
- }
115
- for (const control of this.multiLanguageFunctionControl()) {
116
- if (!(await control.checkIsValid())) {
101
+ const mlCtrl = this.multiLanguageComponentRefs()[i];
102
+ if (mlCtrl && !(await mlCtrl.FunctionsControl.checkIsValid())) {
117
103
  valid = false;
118
104
  }
119
105
  }
120
106
  return valid;
121
107
  }
122
- async getData() {
123
- const dataMultiLanguage = [];
124
- for (const element of this.multiLanguageFunctionControl()) {
125
- dataMultiLanguage.push((await element.getData()) || {});
108
+ getData() {
109
+ const rowCount = this.dataMultiLanguage().length;
110
+ const out = [];
111
+ for (let i = 0; i < rowCount; i++) {
112
+ const ctrl = this.multiLanguageComponentRefs()[i];
113
+ out.push((ctrl?.FunctionsControl.getData() ?? {}));
126
114
  }
127
- // this.dataMultiLanguage.update(items => [...items]);
128
- return dataMultiLanguage;
115
+ return out;
129
116
  }
130
- async handlerChangeValue(value, type) {
117
+ handlerChangeValue(value, type) {
131
118
  if (type === 'input') {
132
119
  this.dataHeader.set(value);
133
120
  }
134
- this.checkValidRequiredWhenInputHasValue();
121
+ this.applyValidRequiredWhenHeaderHasValue();
135
122
  this.outChangeValue.emit();
136
123
  }
137
- async checkValidRequiredWhenInputHasValue() {
124
+ applyValidRequiredWhenHeaderHasValue() {
138
125
  this.validRequiredWhenInputHasValue.set(undefined);
139
126
  if (!isNil(this.dataHeader())) {
140
127
  this.validRequiredWhenInputHasValue.set({ isRequired: true });
141
128
  }
142
129
  }
143
130
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsMultiLanguageItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
144
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsMultiLanguageItemsComponent, isStandalone: true, selector: "libs_ui-components-inputs-multi_language-items", inputs: { configItems: { classPropertyName: "configItems", publicName: "configItems", isSignal: true, isRequired: false, transformFunction: null }, dataMultiLanguage: { classPropertyName: "dataMultiLanguage", publicName: "dataMultiLanguage", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreAdd: { classPropertyName: "ignoreAdd", publicName: "ignoreAdd", isSignal: true, isRequired: false, transformFunction: null }, labelAddItem: { classPropertyName: "labelAddItem", publicName: "labelAddItem", isSignal: true, isRequired: false, transformFunction: null }, singleLanguage: { classPropertyName: "singleLanguage", publicName: "singleLanguage", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataMultiLanguage: "dataMultiLanguageChange", outClick: "outClick", outFunctionControl: "outFunctionControl", outChangeValue: "outChangeValue" }, ngImport: i0, template: "<div class=\"mt-[4px]\">\n @for (item of dataMultiLanguage(); track item) {\n <div\n class=\"flex w-full\"\n [class.mt-[12px]]=\"!$first\">\n <div\n class=\"libs-ui-border-general\"\n [class.w-full]=\"dataMultiLanguage().length < 2\"\n [class.w-[calc(100%-28px)]]=\"dataMultiLanguage().length > 1\">\n @if (configHeader(); as configHeader) {\n <div class=\"flex bg-[#e6eef5] px-[12px] py-[4px]\">\n <div class=\"libs-ui-font-h6m h-[32px] flex items-center\">\n @let constHtmlTitle = configHeader.title ?? ' ';\n {{ constHtmlTitle | translate }}\n </div>\n <div\n (click)=\"handlerClick($event)\"\n class=\"pl-[8px]\">\n @if (configHeader.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: item; as itemMap) {\n <libs_ui-components-inputs-valid\n [(item)]=\"itemMap\"\n [dataType]=\"configHeader.type && configHeader.type === 'number' ? 'int' : 'string'\"\n [fieldNameBind]=\"langDefault()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"{ isRequired: configItems()[0].validRequired?.isRequired ?? false }\"\n [placeholder]=\"'i18n_enter_value'\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [fixedFloat]=\"15\"\n (outValueChange)=\"handlerChangeValue($event, 'input')\"\n (outFunctionsControl)=\"handlerFunctionsControlInputValid($event)\" />\n }\n </div>\n </div>\n <div class=\"px-[12px] pt-[8px] pb-[12px] flex w-full\">\n <libs_ui-components-inputs-multi_language\n class=\"w-full\"\n [singleLanguage]=\"singleLanguage() || false\"\n [multiLine]=\"false\"\n [titleField]=\"configItems()[0].titleField || ''\"\n [keyHeader]=\"configHeader.keyBindData ?? ''\"\n [placeholder]=\"'i18n_import_content'\"\n [classIncludeValue]=\"'libs-ui-font-h4r'\"\n [data]=\"dataMultiKey()[$index]\"\n [validRequired]=\"validRequiredWhenInputHasValue() || configItems()[0].validRequired\"\n [dataLanguage]=\"item\"\n [zIndex]=\"1203\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [viewType]=\"configItems()[0].type ? (configItems()[0].type === 'number' ? 'number' : configItems()[0].type === 'float' ? 'float' : 'text') : 'text'\"\n (outEventMultiLanguage)=\"handlerChangeValue()\"\n (outChangeValueInput)=\"handlerChangeValue()\"\n (outFunctionsControl)=\"handlerFunctionsControlInputLanguage($event)\" />\n </div>\n }\n </div>\n @if (!$first) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0 ml-[8px] mt-[12px]'\"\n (outClick)=\"handlerRemove($index)\" />\n }\n </div>\n }\n @if (!ignoreAdd()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-add mr-[8px]'\"\n [classLabel]=\"'libs-ui-font-h5r'\"\n [classInclude]=\"'!px-0 mt-[8px]'\"\n [label]=\"labelAddItem() || ''\"\n (outClick)=\"handlerAdd()\" />\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageGetItemPipe, name: "LibsUiComponentsInputsMultiLanguageGetItemPipe" }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "ignoreShowMessageError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsInputsMultiLanguageComponent, selector: "libs_ui-components-inputs-multi_language", inputs: ["optionsLanguage", "zIndex", "viewType", "singleLanguage", "data", "validRequired", "ignoreAdd", "titleField", "keyHeader", "textArea", "placeholder", "extendClass", "extendClassContent", "viewPosition", "ignoreRemove", "validMaxLength", "validMinLength", "countCharacters", "viewContent", "classIncludeKey", "classIncludeValue", "dataLanguage", "multiLine", "readonly", "acceptNegativeValue", "valueUpDownNumber", "maxValueNumber", "onlyAcceptNegativeValue", "validOneDefaultMultiLanguage"], outputs: ["dataChange", "ignoreAddChange", "extendClassChange", "dataLanguageChange", "outEventMultiLanguage", "outChangeTypeLanguage", "outFunctionsControl", "outChangeValueInput"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
131
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsMultiLanguageItemsComponent, isStandalone: true, selector: "libs_ui-components-inputs-multi_language-items", inputs: { configItems: { classPropertyName: "configItems", publicName: "configItems", isSignal: true, isRequired: false, transformFunction: null }, dataMultiLanguage: { classPropertyName: "dataMultiLanguage", publicName: "dataMultiLanguage", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, ignoreAdd: { classPropertyName: "ignoreAdd", publicName: "ignoreAdd", isSignal: true, isRequired: false, transformFunction: null }, labelAddItem: { classPropertyName: "labelAddItem", publicName: "labelAddItem", isSignal: true, isRequired: false, transformFunction: null }, singleLanguage: { classPropertyName: "singleLanguage", publicName: "singleLanguage", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, classIconAddLanguage: { classPropertyName: "classIconAddLanguage", publicName: "classIconAddLanguage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dataMultiLanguage: "dataMultiLanguageChange", outChangeValue: "outChangeValue" }, viewQueries: [{ propertyName: "inputComponentRefs", predicate: LibsUiComponentsInputsValidComponent, descendants: true, isSignal: true }, { propertyName: "multiLanguageComponentRefs", predicate: LibsUiComponentsInputsMultiLanguageComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col gap-[8px]\">\n @for (item of dataMultiLanguage(); track item) {\n <div class=\"libs-ui-border-general w-full rounded-[4px]\">\n @if (configHeader(); as configHeader) {\n <div class=\"flex bg-[var(--libs-ui-color-light-2)] p-[12px] gap-[16px]\">\n <div class=\"flex gap-[8px] w-full\">\n <div class=\"libs-ui-font-h6m h-[32px] flex items-center shrink-0\">\n @let constHtmlTitle = configHeader.title ?? ' ';\n {{ constHtmlTitle | translate }}\n </div>\n <div class=\"w-full\">\n @if (configHeader.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: item; as itemMap) {\n <libs_ui-components-inputs-valid\n [(item)]=\"itemMap\"\n [dataType]=\"configHeader.type && configHeader.type === 'number' ? 'int' : 'string'\"\n [fieldNameBind]=\"langDefault()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"{ isRequired: configItems()[0].validRequired?.isRequired ?? false }\"\n [placeholder]=\"'i18n_enter_value'\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [fixedFloat]=\"15\"\n (outValueChange)=\"handlerChangeValue($event, 'input')\" />\n }\n </div>\n </div>\n @if (!$first) {\n <div class=\"flex items-center h-[32px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemove($index)\" />\n </div>\n }\n </div>\n <div class=\"p-[12px] flex w-full\">\n <libs_ui-components-inputs-multi_language\n class=\"w-full\"\n [singleLanguage]=\"singleLanguage()\"\n [titleField]=\"configItems()[0].titleField || ''\"\n [keyHeader]=\"configHeader.keyBindData ?? ''\"\n [placeholder]=\"'i18n_import_content'\"\n [classIncludeValue]=\"'libs-ui-font-h5r'\"\n [data]=\"dataMultiKey()[$index]\"\n [validRequired]=\"validRequiredWhenInputHasValue() || configItems()[0].validRequired\"\n [dataLanguage]=\"item\"\n [zIndex]=\"zIndex() ?? 1203\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [classIconAddLanguage]=\"classIconAddLanguage()\"\n [viewType]=\"configItems()[0].type ? (configItems()[0].type === 'number' ? 'number' : configItems()[0].type === 'float' ? 'float' : 'text') : 'text'\"\n (outEventMultiLanguage)=\"handlerChangeValue()\"\n (outChangeValueInput)=\"handlerChangeValue()\" />\n </div>\n }\n </div>\n }\n @if (!ignoreAdd()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classLabel]=\"'libs-ui-font-h6mi'\"\n [classInclude]=\"'!px-0 !py-[2px]'\"\n [label]=\"labelAddItem() || ''\"\n (outClick)=\"handlerAdd()\" />\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageGetItemPipe, name: "LibsUiComponentsInputsMultiLanguageGetItemPipe" }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "ignoreShowMessageError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsInputsMultiLanguageComponent, selector: "libs_ui-components-inputs-multi_language", inputs: ["optionsLanguage", "zIndex", "viewType", "singleLanguage", "data", "validRequired", "ignoreAdd", "titleField", "keyHeader", "textArea", "placeholder", "extendClass", "extendClassContent", "viewPosition", "ignoreRemove", "validMaxLength", "validMinLength", "countCharacters", "viewContent", "classIncludeKey", "classIncludeValue", "dataLanguage", "readonly", "acceptNegativeValue", "valueUpDownNumber", "maxValueNumber", "onlyAcceptNegativeValue", "validOneDefaultMultiLanguage", "classIconAddLanguage", "validPattern"], outputs: ["dataChange", "ignoreAddChange", "extendClassChange", "dataLanguageChange", "outEventMultiLanguage", "outChangeTypeLanguage", "outChangeValueInput"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
145
132
  }
146
133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsMultiLanguageItemsComponent, decorators: [{
147
134
  type: Component,
148
- args: [{ selector: 'libs_ui-components-inputs-multi_language-items', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsMultiLanguageGetItemPipe, LibsUiComponentsInputsValidComponent, LibsUiComponentsInputsMultiLanguageComponent, LibsUiComponentsButtonsButtonComponent], template: "<div class=\"mt-[4px]\">\n @for (item of dataMultiLanguage(); track item) {\n <div\n class=\"flex w-full\"\n [class.mt-[12px]]=\"!$first\">\n <div\n class=\"libs-ui-border-general\"\n [class.w-full]=\"dataMultiLanguage().length < 2\"\n [class.w-[calc(100%-28px)]]=\"dataMultiLanguage().length > 1\">\n @if (configHeader(); as configHeader) {\n <div class=\"flex bg-[#e6eef5] px-[12px] py-[4px]\">\n <div class=\"libs-ui-font-h6m h-[32px] flex items-center\">\n @let constHtmlTitle = configHeader.title ?? ' ';\n {{ constHtmlTitle | translate }}\n </div>\n <div\n (click)=\"handlerClick($event)\"\n class=\"pl-[8px]\">\n @if (configHeader.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: item; as itemMap) {\n <libs_ui-components-inputs-valid\n [(item)]=\"itemMap\"\n [dataType]=\"configHeader.type && configHeader.type === 'number' ? 'int' : 'string'\"\n [fieldNameBind]=\"langDefault()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"{ isRequired: configItems()[0].validRequired?.isRequired ?? false }\"\n [placeholder]=\"'i18n_enter_value'\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [fixedFloat]=\"15\"\n (outValueChange)=\"handlerChangeValue($event, 'input')\"\n (outFunctionsControl)=\"handlerFunctionsControlInputValid($event)\" />\n }\n </div>\n </div>\n <div class=\"px-[12px] pt-[8px] pb-[12px] flex w-full\">\n <libs_ui-components-inputs-multi_language\n class=\"w-full\"\n [singleLanguage]=\"singleLanguage() || false\"\n [multiLine]=\"false\"\n [titleField]=\"configItems()[0].titleField || ''\"\n [keyHeader]=\"configHeader.keyBindData ?? ''\"\n [placeholder]=\"'i18n_import_content'\"\n [classIncludeValue]=\"'libs-ui-font-h4r'\"\n [data]=\"dataMultiKey()[$index]\"\n [validRequired]=\"validRequiredWhenInputHasValue() || configItems()[0].validRequired\"\n [dataLanguage]=\"item\"\n [zIndex]=\"1203\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [viewType]=\"configItems()[0].type ? (configItems()[0].type === 'number' ? 'number' : configItems()[0].type === 'float' ? 'float' : 'text') : 'text'\"\n (outEventMultiLanguage)=\"handlerChangeValue()\"\n (outChangeValueInput)=\"handlerChangeValue()\"\n (outFunctionsControl)=\"handlerFunctionsControlInputLanguage($event)\" />\n </div>\n }\n </div>\n @if (!$first) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0 ml-[8px] mt-[12px]'\"\n (outClick)=\"handlerRemove($index)\" />\n }\n </div>\n }\n @if (!ignoreAdd()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-add mr-[8px]'\"\n [classLabel]=\"'libs-ui-font-h5r'\"\n [classInclude]=\"'!px-0 mt-[8px]'\"\n [label]=\"labelAddItem() || ''\"\n (outClick)=\"handlerAdd()\" />\n }\n</div>\n" }]
135
+ args: [{ selector: 'libs_ui-components-inputs-multi_language-items', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsInputsMultiLanguageGetItemPipe, LibsUiComponentsInputsValidComponent, LibsUiComponentsInputsMultiLanguageComponent, LibsUiComponentsButtonsButtonComponent], template: "<div class=\"flex flex-col gap-[8px]\">\n @for (item of dataMultiLanguage(); track item) {\n <div class=\"libs-ui-border-general w-full rounded-[4px]\">\n @if (configHeader(); as configHeader) {\n <div class=\"flex bg-[var(--libs-ui-color-light-2)] p-[12px] gap-[16px]\">\n <div class=\"flex gap-[8px] w-full\">\n <div class=\"libs-ui-font-h6m h-[32px] flex items-center shrink-0\">\n @let constHtmlTitle = configHeader.title ?? ' ';\n {{ constHtmlTitle | translate }}\n </div>\n <div class=\"w-full\">\n @if (configHeader.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: item; as itemMap) {\n <libs_ui-components-inputs-valid\n [(item)]=\"itemMap\"\n [dataType]=\"configHeader.type && configHeader.type === 'number' ? 'int' : 'string'\"\n [fieldNameBind]=\"langDefault()\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"{ isRequired: configItems()[0].validRequired?.isRequired ?? false }\"\n [placeholder]=\"'i18n_enter_value'\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [fixedFloat]=\"15\"\n (outValueChange)=\"handlerChangeValue($event, 'input')\" />\n }\n </div>\n </div>\n @if (!$first) {\n <div class=\"flex items-center h-[32px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemove($index)\" />\n </div>\n }\n </div>\n <div class=\"p-[12px] flex w-full\">\n <libs_ui-components-inputs-multi_language\n class=\"w-full\"\n [singleLanguage]=\"singleLanguage()\"\n [titleField]=\"configItems()[0].titleField || ''\"\n [keyHeader]=\"configHeader.keyBindData ?? ''\"\n [placeholder]=\"'i18n_import_content'\"\n [classIncludeValue]=\"'libs-ui-font-h5r'\"\n [data]=\"dataMultiKey()[$index]\"\n [validRequired]=\"validRequiredWhenInputHasValue() || configItems()[0].validRequired\"\n [dataLanguage]=\"item\"\n [zIndex]=\"zIndex() ?? 1203\"\n [acceptNegativeValue]=\"acceptNegativeValue() ?? true\"\n [valueUpDownNumber]=\"valueUpDownNumber() || 1\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n [classIconAddLanguage]=\"classIconAddLanguage()\"\n [viewType]=\"configItems()[0].type ? (configItems()[0].type === 'number' ? 'number' : configItems()[0].type === 'float' ? 'float' : 'text') : 'text'\"\n (outEventMultiLanguage)=\"handlerChangeValue()\"\n (outChangeValueInput)=\"handlerChangeValue()\" />\n </div>\n }\n </div>\n }\n @if (!ignoreAdd()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classLabel]=\"'libs-ui-font-h6mi'\"\n [classInclude]=\"'!px-0 !py-[2px]'\"\n [label]=\"labelAddItem() || ''\"\n (outClick)=\"handlerAdd()\" />\n }\n</div>\n" }]
149
136
  }], ctorParameters: () => [] });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQW1ELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekksT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNGLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFVeEYsTUFBTSxPQUFPLGlEQUFpRDtJQUM1RCw4REFBOEQ7SUFDcEQsWUFBWSxHQUFHLE1BQU0sQ0FBYSxFQUFFLENBQUMsQ0FBQztJQUN0QyxXQUFXLEdBQUcsTUFBTSxDQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELFlBQVksR0FBRyxNQUFNLENBQXlDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLGFBQWEsR0FBRyxNQUFNLENBQWlCLEVBQUUsVUFBVSxFQUFFLEtB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QUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7d0dBcEpVLGlEQUFpRDs0RkFBakQsaURBQWlELHV0RENqQjlELGtvSUF5RkEsMkNEMUVZLGVBQWUsdUZBQUUsOENBQThDLHVGQUFFLG9DQUFvQyxnM0RBQUUsNENBQTRDLGt3QkFBRSxzQ0FBc0M7OzRGQUUxTCxpREFBaUQ7a0JBUjdELFNBQVM7K0JBRUUsZ0RBQWdELGNBRTlDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSw4Q0FBOEMsRUFBRSxvQ0FBb0MsRUFBRSw0Q0FBNEMsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJVmFsaWRSZXF1aXJlZCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc05pbCwgVXRpbHNDYWNoZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1sYW5ndWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXIsIElEYXRhSXRlbSwgSURhdGFNdWx0aUxhbmd1YWdlLCBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL211bHRpLWxhbmd1YWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldEl0ZW1QaXBlIH0gZnJvbSAnLi4vcGlwZXMvZ2V0LWl0ZW0ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtbXVsdGlfbGFuZ3VhZ2UtaXRlbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUl0ZW1zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJvdGVjdGVkIGRhdGFNdWx0aUtleSA9IHNpZ25hbDxBcnJheTxhbnk+PihbXSk7XG4gIHByb3RlY3RlZCBsYW5nRGVmYXVsdCA9IHNpZ25hbDxzdHJpbmc+KFV0aWxzQ2FjaGUuZ2V0TGFuZygpKTtcbiAgcHJvdGVjdGVkIGNvbmZpZ0hlYWRlciA9IHNpZ25hbDxJQ29uZmlnTXVsdGlMYW5ndWFnZUhlYWRlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHZhbGlkUmVxdWlyZWQgPSBzaWduYWw8SVZhbGlkUmVxdWlyZWQ+KHsgaXNSZXF1aXJlZDogZmFsc2UgfSk7XG4gIHByb3RlY3RlZCB2YWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUgPSBzaWduYWw8SVZhbGlkUmVxdWlyZWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBkYXRhSGVhZGVyID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIG11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2wgPSBzaWduYWw8QXJyYXk8SUlucHV0TXVsdGlMYW5ndWFnZUZ1bmN0aW9uQ29udHJvbEV2ZW50Pj4oW10pO1xuICBwcm90ZWN0ZWQgaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCA9IHNpZ25hbDxBcnJheTxJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50Pj4oW10pO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ0l0ZW1zID0gaW5wdXQ8QXJyYXk8SURhdGFJdGVtPj4oW10pO1xuICByZWFkb25seSBkYXRhTXVsdGlMYW5ndWFnZSA9IG1vZGVsPEFycmF5PElEYXRhTXVsdGlMYW5ndWFnZT4+KFt7fV0pO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUFkZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQWRkSXRlbSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2luZ2xlTGFuZ3VhZ2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsdWVVcERvd25OdW1iZXIgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1heFZhbHVlTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgb3V0Q2xpY2sgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25Db250cm9sID0gb3V0cHV0PElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0Q2hhbmdlVmFsdWUgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnSXRlbXMgPSB0aGlzLmNvbmZpZ0l0ZW1zKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoY29uZmlnSXRlbXMgJiYgY29uZmlnSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jb25maWdIZWFkZXIuc2V0KGNvbmZpZ0l0ZW1zWzBdLmhlYWRlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFNdWx0aUxhbmd1YWdlID0gdGhpcy5kYXRhTXVsdGlMYW5ndWFnZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKCFkYXRhTXVsdGlMYW5ndWFnZSB8fCAhZGF0YU11bHRpTGFuZ3VhZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5kYXRhTXVsdGlMYW5ndWFnZS5zZXQoW3t9XSk7XG4gICAgICAgICAgY29uc3QgY29uZmlnSGVhZGVyID0gdGhpcy5jb25maWdIZWFkZXIoKTtcbiAgICAgICAgICBpZiAoY29uZmlnSGVhZGVyICYmIGNvbmZpZ0hlYWRlci5kYXRhRGVmYXVsdCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhTXVsdGlMYW5ndWFnZS5zZXQoW2Nsb25lRGVlcChjb25maWdIZWFkZXIuZGF0YURlZmF1bHQpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlckNvbmZpZ011bHRpKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3V0RnVuY3Rpb25Db250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgICBjb25zdCBjb25maWdJdGVtcyA9IHRoaXMuY29uZmlnSXRlbXMoKTtcbiAgICBpZiAoY29uZmlnSXRlbXMgJiYgY29uZmlnSXRlbXMubGVuZ3RoICYmIGNvbmZpZ0l0ZW1zWzBdLnZhbGlkUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudmFsaWRSZXF1aXJlZC5zZXQoY29uZmlnSXRlbXNbMF0udmFsaWRSZXF1aXJlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgZ2V0RGF0YTogdGhpcy5nZXREYXRhLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ29uZmlnTXVsdGkoKSB7XG4gICAgdGhpcy5kYXRhTXVsdGlLZXkuc2V0KFtdKTtcbiAgICB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCkuZm9yRWFjaCgoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWdJdGVtcyA9IHRoaXMuY29uZmlnSXRlbXMoKTtcbiAgICAgIGlmIChjb25maWdJdGVtcykge1xuICAgICAgICB0aGlzLmRhdGFNdWx0aUtleSgpLnB1c2goY29uZmlnSXRlbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZGF0YU11bHRpS2V5LnVwZGF0ZSgoaXRlbXMpID0+IFsuLi5pdGVtc10pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJBZGQoKSB7XG4gICAgbGV0IGRhdGFMYW5ndWFnZTogSURhdGFNdWx0aUxhbmd1YWdlID0ge307XG4gICAgY29uc3QgY29uZmlnSGVhZGVyID0gdGhpcy5jb25maWdIZWFkZXIoKTtcbiAgICBpZiAoY29uZmlnSGVhZGVyKSB7XG4gICAgICBkYXRhTGFuZ3VhZ2UgPSBjbG9uZURlZXAoY29uZmlnSGVhZGVyLmRhdGFEZWZhdWx0KTtcbiAgICB9XG4gICAgdGhpcy5kYXRhTXVsdGlMYW5ndWFnZS51cGRhdGUoKGl0ZW1zKSA9PiBbLi4uaXRlbXMsIGRhdGFMYW5ndWFnZV0pO1xuICAgIHRoaXMuZGF0YU11bHRpS2V5LnVwZGF0ZSgoaXRlbXMpID0+IFsuLi5pdGVtcywgdGhpcy5jb25maWdJdGVtcygpXSk7XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlVmFsdWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVtb3ZlKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlLnVwZGF0ZSgoaXRlbXMpID0+IHtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbmRsZXJDaGFuZ2VWYWx1ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbGljayhlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5vdXRDbGljay5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2xJbnB1dExhbmd1YWdlKGV2ZW50OiBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLm11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2wudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCBldmVudF0pO1xuICAgIGNvbnNvbGUubG9nKHRoaXMubXVsdGlMYW5ndWFnZUZ1bmN0aW9uQ29udHJvbCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRnVuY3Rpb25zQ29udHJvbElucHV0VmFsaWQoZXZlbnQ6IElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2wudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCBldmVudF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tWYWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUoKTtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sKCkpIHtcbiAgICAgIGlmICghKGF3YWl0IGNvbnRyb2wuY2hlY2tJc1ZhbGlkKCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLm11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2woKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERhdGEoKTogUHJvbWlzZTxJRGF0YU11bHRpTGFuZ3VhZ2VbXT4ge1xuICAgIGNvbnN0IGRhdGFNdWx0aUxhbmd1YWdlOiBJRGF0YU11bHRpTGFuZ3VhZ2VbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLm11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2woKSkge1xuICAgICAgZGF0YU11bHRpTGFuZ3VhZ2UucHVzaCgoKGF3YWl0IGVsZW1lbnQuZ2V0RGF0YSgpKSBhcyBJRGF0YU11bHRpTGFuZ3VhZ2UpIHx8IHt9KTtcbiAgICB9XG4gICAgLy8gdGhpcy5kYXRhTXVsdGlMYW5ndWFnZS51cGRhdGUoaXRlbXMgPT4gWy4uLml0ZW1zXSk7XG4gICAgcmV0dXJuIGRhdGFNdWx0aUxhbmd1YWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDaGFuZ2VWYWx1ZSh2YWx1ZT86IHN0cmluZyB8IG51bWJlciwgdHlwZT86IHN0cmluZykge1xuICAgIGlmICh0eXBlID09PSAnaW5wdXQnKSB7XG4gICAgICB0aGlzLmRhdGFIZWFkZXIuc2V0KHZhbHVlIGFzIHN0cmluZyk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tWYWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUoKTtcbiAgICB0aGlzLm91dENoYW5nZVZhbHVlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja1ZhbGlkUmVxdWlyZWRXaGVuSW5wdXRIYXNWYWx1ZSgpIHtcbiAgICB0aGlzLnZhbGlkUmVxdWlyZWRXaGVuSW5wdXRIYXNWYWx1ZS5zZXQodW5kZWZpbmVkKTtcbiAgICBpZiAoIWlzTmlsKHRoaXMuZGF0YUhlYWRlcigpKSkge1xuICAgICAgdGhpcy52YWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUuc2V0KHsgaXNSZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtdC1bNHB4XVwiPlxuICBAZm9yIChpdGVtIG9mIGRhdGFNdWx0aUxhbmd1YWdlKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggdy1mdWxsXCJcbiAgICAgIFtjbGFzcy5tdC1bMTJweF1dPVwiISRmaXJzdFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxpYnMtdWktYm9yZGVyLWdlbmVyYWxcIlxuICAgICAgICBbY2xhc3Mudy1mdWxsXT1cImRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoIDwgMlwiXG4gICAgICAgIFtjbGFzcy53LVtjYWxjKDEwMCUtMjhweCldXT1cImRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICBAaWYgKGNvbmZpZ0hlYWRlcigpOyBhcyBjb25maWdIZWFkZXIpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBiZy1bI2U2ZWVmNV0gcHgtWzEycHhdIHB5LVs0cHhdXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2bSBoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbFRpdGxlID0gY29uZmlnSGVhZGVyLnRpdGxlID8/ICcgJztcbiAgICAgICAgICAgICAge3sgY29uc3RIdG1sVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInBsLVs4cHhdXCI+XG4gICAgICAgICAgICAgIEBpZiAoY29uZmlnSGVhZGVyLmtleUJpbmREYXRhIHwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZTogaXRlbTsgYXMgaXRlbU1hcCkge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkXG4gICAgICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1NYXBcIlxuICAgICAgICAgICAgICAgICAgW2RhdGFUeXBlXT1cImNvbmZpZ0hlYWRlci50eXBlICYmIGNvbmZpZ0hlYWRlci50eXBlID09PSAnbnVtYmVyJyA/ICdpbnQnIDogJ3N0cmluZydcIlxuICAgICAgICAgICAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwibGFuZ0RlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgICBbZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cInsgaXNSZXF1aXJlZDogY29uZmlnSXRlbXMoKVswXS52YWxpZFJlcXVpcmVkPy5pc1JlcXVpcmVkID8/IGZhbHNlIH1cIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpMThuX2VudGVyX3ZhbHVlJ1wiXG4gICAgICAgICAgICAgICAgICBbYWNjZXB0TmVnYXRpdmVWYWx1ZV09XCJhY2NlcHROZWdhdGl2ZVZhbHVlKCkgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwidmFsdWVVcERvd25OdW1iZXIoKSB8fCAxXCJcbiAgICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCJtYXhWYWx1ZU51bWJlcigpXCJcbiAgICAgICAgICAgICAgICAgIFtmaXhlZEZsb2F0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlVmFsdWUoJGV2ZW50LCAnaW5wdXQnKVwiXG4gICAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbElucHV0VmFsaWQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC1bMTJweF0gcHQtWzhweF0gcGItWzEycHhdIGZsZXggdy1mdWxsXCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1tdWx0aV9sYW5ndWFnZVxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgIFtzaW5nbGVMYW5ndWFnZV09XCJzaW5nbGVMYW5ndWFnZSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW211bHRpTGluZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFt0aXRsZUZpZWxkXT1cImNvbmZpZ0l0ZW1zKClbMF0udGl0bGVGaWVsZCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtrZXlIZWFkZXJdPVwiY29uZmlnSGVhZGVyLmtleUJpbmREYXRhID8/ICcnXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpMThuX2ltcG9ydF9jb250ZW50J1wiXG4gICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVWYWx1ZV09XCInbGlicy11aS1mb250LWg0cidcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhTXVsdGlLZXkoKVskaW5kZXhdXCJcbiAgICAgICAgICAgICAgW3ZhbGlkUmVxdWlyZWRdPVwidmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlKCkgfHwgY29uZmlnSXRlbXMoKVswXS52YWxpZFJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgW2RhdGFMYW5ndWFnZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCIxMjAzXCJcbiAgICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8/IHRydWVcIlxuICAgICAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwidmFsdWVVcERvd25OdW1iZXIoKSB8fCAxXCJcbiAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm1heFZhbHVlTnVtYmVyKClcIlxuICAgICAgICAgICAgICBbb25seUFjY2VwdE5lZ2F0aXZlVmFsdWVdPVwib25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICAgICAgICAgIFt2aWV3VHlwZV09XCJjb25maWdJdGVtcygpWzBdLnR5cGUgPyAoY29uZmlnSXRlbXMoKVswXS50eXBlID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogY29uZmlnSXRlbXMoKVswXS50eXBlID09PSAnZmxvYXQnID8gJ2Zsb2F0JyA6ICd0ZXh0JykgOiAndGV4dCdcIlxuICAgICAgICAgICAgICAob3V0RXZlbnRNdWx0aUxhbmd1YWdlKT1cImhhbmRsZXJDaGFuZ2VWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgKG91dENoYW5nZVZhbHVlSW5wdXQpPVwiaGFuZGxlckNoYW5nZVZhbHVlKClcIlxuICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbElucHV0TGFuZ3VhZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmICghJGZpcnN0KSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstY3VzdG9tJ1wiXG4gICAgICAgICAgW2J1dHRvbkN1c3RvbV09XCJ7XG4gICAgICAgICAgICBjb25maWdTdGVwQ29sb3I6IHtcbiAgICAgICAgICAgICAgdGV4dDogJyMwNzE2MzEnLFxuICAgICAgICAgICAgICB0ZXh0X2hvdmVyOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICAgIHRleHRfYWN0aXZlOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJzA3MTYzMScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm9vdENvbG9yOiAnIzA3MTYzMScsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9kZWxldGUnLCB6SW5kZXg6IDEyMDUgfSB9XCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlbW92ZSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAgbWwtWzhweF0gbXQtWzEycHhdJ1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZW1vdmUoJGluZGV4KVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmICghaWdub3JlQWRkKCkpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hZGQgbXItWzhweF0nXCJcbiAgICAgIFtjbGFzc0xhYmVsXT1cIidsaWJzLXVpLWZvbnQtaDVyJ1wiXG4gICAgICBbY2xhc3NJbmNsdWRlXT1cIichcHgtMCBtdC1bOHB4XSdcIlxuICAgICAgW2xhYmVsXT1cImxhYmVsQWRkSXRlbSgpIHx8ICcnXCJcbiAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQWRkKClcIiAvPlxuICB9XG48L2Rpdj5cbiJdfQ==
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFrQixvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBVXhGLE1BQU0sT0FBTyxpREFBaUQ7SUFDbEQsWUFBWSxHQUFHLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDLENBQUM7SUFDekMsV0FBVyxHQUFHLE1BQU0sQ0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRCxZQUFZLEdBQUcsTUFBTSxDQUF5QyxTQUFTLENBQUMsQ0FBQztJQUN6RSxhQUFhLEdBQUcsTUFBTSxDQUFpQixFQUFFLFVBQVUsRUFBRSxLQUFL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OEIsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQzt3R0F0SVUsaURBQWlEOzRGQUFqRCxpREFBaUQsbTJEQVFsQixvQ0FBb0MsZ0dBQzVCLDRDQUE0QyxnRUMxQmhHLG82SEFrRkEsMkNEbkVZLGVBQWUsdUZBQUUsOENBQThDLHVGQUFFLG9DQUFvQyxnM0RBQUUsNENBQTRDLHN3QkFBRSxzQ0FBc0M7OzRGQUUxTCxpREFBaUQ7a0JBUjdELFNBQVM7K0JBRUUsZ0RBQWdELGNBRTlDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSw4Q0FBOEMsRUFBRSxvQ0FBb0MsRUFBRSw0Q0FBNEMsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJVmFsaWRSZXF1aXJlZCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc05pbCwgVXRpbHNDYWNoZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXIsIElEYXRhSXRlbSwgSURhdGFNdWx0aUxhbmd1YWdlLCBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL211bHRpLWxhbmd1YWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUNvbXBvbmVudCB9IGZyb20gJy4uL211bHRpLWxhbmd1YWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldEl0ZW1QaXBlIH0gZnJvbSAnLi4vcGlwZXMvZ2V0LWl0ZW0ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtbXVsdGlfbGFuZ3VhZ2UtaXRlbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUl0ZW1zQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIGRhdGFNdWx0aUtleSA9IHNpZ25hbDxJRGF0YUl0ZW1bXVtdPihbXSk7XG4gIHByb3RlY3RlZCBsYW5nRGVmYXVsdCA9IHNpZ25hbDxzdHJpbmc+KFV0aWxzQ2FjaGUuZ2V0TGFuZygpKTtcbiAgcHJvdGVjdGVkIGNvbmZpZ0hlYWRlciA9IHNpZ25hbDxJQ29uZmlnTXVsdGlMYW5ndWFnZUhlYWRlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIHZhbGlkUmVxdWlyZWQgPSBzaWduYWw8SVZhbGlkUmVxdWlyZWQ+KHsgaXNSZXF1aXJlZDogZmFsc2UgfSk7XG4gIHByb3RlY3RlZCB2YWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUgPSBzaWduYWw8SVZhbGlkUmVxdWlyZWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBkYXRhSGVhZGVyID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIGlucHV0Q29tcG9uZW50UmVmcyA9IHZpZXdDaGlsZHJlbihMaWJzVWlDb21wb25lbnRzSW5wdXRzVmFsaWRDb21wb25lbnQpO1xuICBwcml2YXRlIG11bHRpTGFuZ3VhZ2VDb21wb25lbnRSZWZzID0gdmlld0NoaWxkcmVuKExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlQ29tcG9uZW50KTtcblxuICByZWFkb25seSBjb25maWdJdGVtcyA9IGlucHV0PEFycmF5PElEYXRhSXRlbT4+KFtdKTtcbiAgcmVhZG9ubHkgZGF0YU11bHRpTGFuZ3VhZ2UgPSBtb2RlbDxBcnJheTxJRGF0YU11bHRpTGFuZ3VhZ2U+Pihbe31dKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBpZ25vcmVBZGQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBsYWJlbEFkZEl0ZW0gPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHNpbmdsZUxhbmd1YWdlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZhbHVlVXBEb3duTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtYXhWYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb25seUFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjbGFzc0ljb25BZGRMYW5ndWFnZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbGlicy11aS1pY29uLWFkZCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlIHx8ICdsaWJzLXVpLWljb24tYWRkJyB9KTtcblxuICByZWFkb25seSBvdXRDaGFuZ2VWYWx1ZSA9IG91dHB1dDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnSXRlbXMoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnSGVhZGVyLnNldChpdGVtcz8uWzBdPy5oZWFkZXIpO1xuICAgICAgICB0aGlzLnZhbGlkUmVxdWlyZWQuc2V0KGl0ZW1zPy5bMF0/LnZhbGlkUmVxdWlyZWQgPz8geyBpc1JlcXVpcmVkOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zeW5jRGF0YU11bHRpS2V5KCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhTXVsdGlMYW5ndWFnZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgaWYgKCFyb3dzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmNvbmZpZ0hlYWRlcigpO1xuICAgICAgICAgIGNvbnN0IGluaXRpYWw6IElEYXRhTXVsdGlMYW5ndWFnZSA9IGhlYWRlcj8uZGF0YURlZmF1bHQgPyAoY2xvbmVEZWVwKGhlYWRlci5kYXRhRGVmYXVsdCkgYXMgSURhdGFNdWx0aUxhbmd1YWdlKSA6IHt9O1xuICAgICAgICAgIHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2Uuc2V0KFtpbml0aWFsXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zeW5jRGF0YU11bHRpS2V5KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKSxcbiAgICAgIGdldERhdGE6IHRoaXMuZ2V0RGF0YS5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTeG7l2kgZMOybmcgY+G6p24gbeG7mXQgYuG6o24gYGRhdGFgIChzaGFsbG93IGNvcHkgdOG7q25nIGBJRGF0YUl0ZW1gKSDEkeG7gyBtdWx0aS1sYW5ndWFnZSBjb24ga2jDtG5nIGTDuW5nIGNodW5nIG3hu5l0IG3huqNuZyB0aGFtIGNoaeG6v3UuXG4gICAqL1xuICBwcml2YXRlIHN5bmNEYXRhTXVsdGlLZXkoaW5kZXhSZW1vdmU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSB0aGlzLmNvbmZpZ0l0ZW1zKCk7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoO1xuICAgIGlmICghdGVtcGxhdGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0YU11bHRpS2V5LnNldChbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YU11bHRpS2V5KCkubGVuZ3RoID09PSByb3dDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhTXVsdGlLZXkoKS5sZW5ndGggPiByb3dDb3VudCAmJiAhaXNOaWwoaW5kZXhSZW1vdmUpKSB7XG4gICAgICB0aGlzLmRhdGFNdWx0aUtleS51cGRhdGUoKGRhdGEpID0+IHtcbiAgICAgICAgZGF0YS5zcGxpY2UoaW5kZXhSZW1vdmUsIDEpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0RhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiByb3dDb3VudCAtIHRoaXMuZGF0YU11bHRpS2V5KCkubGVuZ3RoIH0sICgpID0+IHRlbXBsYXRlcy5tYXAoKGMpID0+IGNsb25lRGVlcChjKSkpO1xuICAgIHRoaXMuZGF0YU11bHRpS2V5LnVwZGF0ZSgoZGF0YSkgPT4gWy4uLmRhdGEsIC4uLm5ld0RhdGFdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQWRkKCk6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuY29uZmlnSGVhZGVyKCk7XG4gICAgY29uc3QgZGF0YUxhbmd1YWdlOiBJRGF0YU11bHRpTGFuZ3VhZ2UgPSBoZWFkZXI/LmRhdGFEZWZhdWx0ID8gKGNsb25lRGVlcChoZWFkZXIuZGF0YURlZmF1bHQpIGFzIElEYXRhTXVsdGlMYW5ndWFnZSkgOiB7fTtcbiAgICB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlLnVwZGF0ZSgoaXRlbXMpID0+IFsuLi5pdGVtcywgZGF0YUxhbmd1YWdlXSk7XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlVmFsdWUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVtb3ZlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlLnVwZGF0ZSgoaXRlbXMpID0+IGl0ZW1zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKTtcbiAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoaW5kZXgpO1xuICAgIHRoaXMuaGFuZGxlckNoYW5nZVZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgdGhpcy5hcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTtcbiAgICBjb25zdCByb3dDb3VudCA9IHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UoKS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBpbnB1dEN0cmwgPSB0aGlzLmlucHV0Q29tcG9uZW50UmVmcygpW2ldO1xuICAgICAgaWYgKGlucHV0Q3RybCAmJiAhKGF3YWl0IGlucHV0Q3RybC5GdW5jdGlvbnNDb250cm9sLmNoZWNrSXNWYWxpZCgpKSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWxDdHJsID0gdGhpcy5tdWx0aUxhbmd1YWdlQ29tcG9uZW50UmVmcygpW2ldO1xuICAgICAgaWYgKG1sQ3RybCAmJiAhKGF3YWl0IG1sQ3RybC5GdW5jdGlvbnNDb250cm9sLmNoZWNrSXNWYWxpZCgpKSkge1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0YSgpOiBJRGF0YU11bHRpTGFuZ3VhZ2VbXSB7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoO1xuICAgIGNvbnN0IG91dDogSURhdGFNdWx0aUxhbmd1YWdlW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLm11bHRpTGFuZ3VhZ2VDb21wb25lbnRSZWZzKClbaV07XG4gICAgICBvdXQucHVzaCgoY3RybD8uRnVuY3Rpb25zQ29udHJvbC5nZXREYXRhKCkgPz8ge30pIGFzIElEYXRhTXVsdGlMYW5ndWFnZSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZVZhbHVlKHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyLCB0eXBlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgPT09ICdpbnB1dCcpIHtcbiAgICAgIHRoaXMuZGF0YUhlYWRlci5zZXQodmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTtcbiAgICB0aGlzLm91dENoYW5nZVZhbHVlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlWYWxpZFJlcXVpcmVkV2hlbkhlYWRlckhhc1ZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlLnNldCh1bmRlZmluZWQpO1xuICAgIGlmICghaXNOaWwodGhpcy5kYXRhSGVhZGVyKCkpKSB7XG4gICAgICB0aGlzLnZhbGlkUmVxdWlyZWRXaGVuSW5wdXRIYXNWYWx1ZS5zZXQoeyBpc1JlcXVpcmVkOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLVs4cHhdXCI+XG4gIEBmb3IgKGl0ZW0gb2YgZGF0YU11bHRpTGFuZ3VhZ2UoKTsgdHJhY2sgaXRlbSkge1xuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHctZnVsbCByb3VuZGVkLVs0cHhdXCI+XG4gICAgICBAaWYgKGNvbmZpZ0hlYWRlcigpOyBhcyBjb25maWdIZWFkZXIpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYmctW3ZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMildIHAtWzEycHhdIGdhcC1bMTZweF1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtWzhweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2bSBoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBzaHJpbmstMFwiPlxuICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbFRpdGxlID0gY29uZmlnSGVhZGVyLnRpdGxlID8/ICcgJztcbiAgICAgICAgICAgICAge3sgY29uc3RIdG1sVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICBAaWYgKGNvbmZpZ0hlYWRlci5rZXlCaW5kRGF0YSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGU6IGl0ZW07IGFzIGl0ZW1NYXApIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtTWFwXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCJjb25maWdIZWFkZXIudHlwZSAmJiBjb25maWdIZWFkZXIudHlwZSA9PT0gJ251bWJlcicgPyAnaW50JyA6ICdzdHJpbmcnXCJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cImxhbmdEZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgW2VtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRSZXF1aXJlZF09XCJ7IGlzUmVxdWlyZWQ6IGNvbmZpZ0l0ZW1zKClbMF0udmFsaWRSZXF1aXJlZD8uaXNSZXF1aXJlZCA/PyBmYWxzZSB9XCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaTE4bl9lbnRlcl92YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8/IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cInZhbHVlVXBEb3duTnVtYmVyKCkgfHwgMVwiXG4gICAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwibWF4VmFsdWVOdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgICBbZml4ZWRGbG9hdF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKCRldmVudCwgJ2lucHV0JylcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKCEkZmlyc3QpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBoLVszMnB4XVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLWN1c3RvbSdcIlxuICAgICAgICAgICAgICAgIFtidXR0b25DdXN0b21dPVwie1xuICAgICAgICAgICAgICAgICAgY29uZmlnU3RlcENvbG9yOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICcjMDcxNjMxJyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dF9ob3ZlcjogJyNlZTJkNDEnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2FjdGl2ZTogJyNlZTJkNDEnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2Rpc2FibGU6ICcwNzE2MzEnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHJvb3RDb2xvcjogJyMwNzE2MzEnLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtpY29uT25seVR5cGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwieyBjb25maWc6IHsgY29udGVudDogJ2kxOG5fZGVsZXRlJywgekluZGV4OiAxMjA1IH0gfVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yZW1vdmUnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC0wJ1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZW1vdmUoJGluZGV4KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1bMTJweF0gZmxleCB3LWZ1bGxcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1tdWx0aV9sYW5ndWFnZVxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgW3NpbmdsZUxhbmd1YWdlXT1cInNpbmdsZUxhbmd1YWdlKClcIlxuICAgICAgICAgICAgW3RpdGxlRmllbGRdPVwiY29uZmlnSXRlbXMoKVswXS50aXRsZUZpZWxkIHx8ICcnXCJcbiAgICAgICAgICAgIFtrZXlIZWFkZXJdPVwiY29uZmlnSGVhZGVyLmtleUJpbmREYXRhID8/ICcnXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaTE4bl9pbXBvcnRfY29udGVudCdcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZVZhbHVlXT1cIidsaWJzLXVpLWZvbnQtaDVyJ1wiXG4gICAgICAgICAgICBbZGF0YV09XCJkYXRhTXVsdGlLZXkoKVskaW5kZXhdXCJcbiAgICAgICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cInZhbGlkUmVxdWlyZWRXaGVuSW5wdXRIYXNWYWx1ZSgpIHx8IGNvbmZpZ0l0ZW1zKClbMF0udmFsaWRSZXF1aXJlZFwiXG4gICAgICAgICAgICBbZGF0YUxhbmd1YWdlXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSA/PyAxMjAzXCJcbiAgICAgICAgICAgIFthY2NlcHROZWdhdGl2ZVZhbHVlXT1cImFjY2VwdE5lZ2F0aXZlVmFsdWUoKSA/PyB0cnVlXCJcbiAgICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCJ2YWx1ZVVwRG93bk51bWJlcigpIHx8IDFcIlxuICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm1heFZhbHVlTnVtYmVyKClcIlxuICAgICAgICAgICAgW29ubHlBY2NlcHROZWdhdGl2ZVZhbHVlXT1cIm9ubHlBY2NlcHROZWdhdGl2ZVZhbHVlKClcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkFkZExhbmd1YWdlXT1cImNsYXNzSWNvbkFkZExhbmd1YWdlKClcIlxuICAgICAgICAgICAgW3ZpZXdUeXBlXT1cImNvbmZpZ0l0ZW1zKClbMF0udHlwZSA/IChjb25maWdJdGVtcygpWzBdLnR5cGUgPT09ICdudW1iZXInID8gJ251bWJlcicgOiBjb25maWdJdGVtcygpWzBdLnR5cGUgPT09ICdmbG9hdCcgPyAnZmxvYXQnIDogJ3RleHQnKSA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAob3V0RXZlbnRNdWx0aUxhbmd1YWdlKT1cImhhbmRsZXJDaGFuZ2VWYWx1ZSgpXCJcbiAgICAgICAgICAgIChvdXRDaGFuZ2VWYWx1ZUlucHV0KT1cImhhbmRsZXJDaGFuZ2VWYWx1ZSgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmICghaWdub3JlQWRkKCkpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hZGQnXCJcbiAgICAgIFtjbGFzc0xhYmVsXT1cIidsaWJzLXVpLWZvbnQtaDZtaSdcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXB4LTAgIXB5LVsycHhdJ1wiXG4gICAgICBbbGFiZWxdPVwibGFiZWxBZGRJdGVtKCkgfHwgJydcIlxuICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJBZGQoKVwiIC8+XG4gIH1cbjwvZGl2PlxuIl19