@libs-ui/components-inputs-multi-language 0.2.356-23 → 0.2.356-24
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 +0 -1
- package/esm2022/interfaces/multi-language.interface.mjs +1 -1
- package/esm2022/items/items.component.mjs +75 -64
- package/esm2022/multi-language.component.mjs +140 -114
- package/esm2022/pipes/display-language.pipe.mjs +2 -2
- package/fesm2022/libs-ui-components-inputs-multi-language.mjs +214 -177
- package/fesm2022/libs-ui-components-inputs-multi-language.mjs.map +1 -1
- package/interfaces/multi-language.interface.d.ts +1 -1
- package/items/items.component.d.ts +20 -13
- package/multi-language.component.d.ts +15 -9
- package/package.json +10 -10
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/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaW50ZXJmYWNlcy9tdWx0aS1sYW5ndWFnZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElWYWxpZFJlcXVpcmVkIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhSXRlbSB7XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgaGVhZGVyPzogSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXI7XG4gIGlzT25lVmFsdWU/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVJbnB1dD86IHN0cmluZztcbiAgdGl0bGVGaWVsZD86IHN0cmluZztcbiAgaXNDb3VudENoYXJhY3RlcnM/OiBib29sZWFuO1xuICB2YWxpZFJlcXVpcmVkPzogSVZhbGlkUmVxdWlyZWQ7XG4gIGRhdGFNdWx0aUxhbmd1YWdlPzogSURhdGFNdWx0aUxhbmd1YWdlO1xuICB2YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbiAgdmFsaWRSZXF1aXJlZERlZmF1bHQ/OiBJVmFsaWRSZXF1aXJlZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YU11bHRpTGFuZ3VhZ2Uge1xuICBbcGFyYW06IHN0cmluZ106IElEYXRhTGFuZ3VhZ2UgfCBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFMYW5ndWFnZSB7XG4gIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudE11bHRpTGFuZ3VhZ2Uge1xuICBhY3Rpb246ICdhZGQnIHwgJ3JlbW92ZSc7XG4gIGRhdGE6IElEYXRhTXVsdGlMYW5ndWFnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29uZmlnTXVsdGlMYW5ndWFnZUhlYWRlciB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpc1Nob3dJbnB1dD86IGJvb2xlYW47XG4gIHZhbGlkUmVxdWlyZWQ/OiB7XG4gICAgaXNSZXF1aXJlZD86IGJvb2xlYW47XG4gIH07XG4gIGtleUJpbmREYXRhPzogc3RyaW5nO1xuICBkYXRhRGVmYXVsdD86XG4gICAgfCBJRGF0YU11bHRpTGFuZ3VhZ2VcbiAgICB8IHtcbiAgICAgICAgdG90YWw/OiBJRGF0YU11bHRpTGFuZ3VhZ2U7XG4gICAgICB9O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1ZJRVdfTVVMVElfTEFOR1VBR0UgPSAndGV4dCcgfCAnaW50ZWdlcicgfCAnbnVtYmVyJyB8ICdlZGl0b3InIHwgJ2Zsb2F0JyB8ICdiaWdpbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gIGNoZWNrSXNWYWxpZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgZ2V0RGF0YTogKCkgPT4gSURhdGFNdWx0aUxhbmd1YWdlW10gfCBJRGF0YU11bHRpTGFuZ3VhZ2UgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUN1cnJlbmN5VW5pdCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -8,15 +8,16 @@ 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
|
-
|
|
19
|
-
|
|
17
|
+
/** Một control valid header cho mỗi dòng (theo index). */
|
|
18
|
+
inputValidByRow = signal(new Map());
|
|
19
|
+
/** Một control multi-language cho mỗi dòng (theo index). */
|
|
20
|
+
multiLanguageByRow = signal(new Map());
|
|
20
21
|
configItems = input([]);
|
|
21
22
|
dataMultiLanguage = model([{}]);
|
|
22
23
|
zIndex = input();
|
|
@@ -27,38 +28,33 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
27
28
|
valueUpDownNumber = input();
|
|
28
29
|
maxValueNumber = input();
|
|
29
30
|
onlyAcceptNegativeValue = input();
|
|
31
|
+
classIconAddLanguage = input('libs-ui-icon-add', { transform: (value) => value || 'libs-ui-icon-add' });
|
|
30
32
|
outClick = output();
|
|
31
33
|
outFunctionControl = output();
|
|
32
34
|
outChangeValue = output();
|
|
33
35
|
constructor() {
|
|
34
36
|
effect(() => {
|
|
35
|
-
const
|
|
37
|
+
const items = this.configItems();
|
|
36
38
|
untracked(() => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
this.configHeader.set(items?.[0]?.header);
|
|
40
|
+
this.validRequired.set(items?.[0]?.validRequired ?? { isRequired: false });
|
|
41
|
+
this.syncDataMultiKey();
|
|
40
42
|
});
|
|
41
43
|
});
|
|
42
44
|
effect(() => {
|
|
43
|
-
const
|
|
45
|
+
const rows = this.dataMultiLanguage();
|
|
44
46
|
untracked(() => {
|
|
45
|
-
if (!
|
|
46
|
-
this.
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
this.dataMultiLanguage.set([cloneDeep(configHeader.dataDefault)]);
|
|
50
|
-
}
|
|
47
|
+
if (!rows?.length) {
|
|
48
|
+
const header = this.configHeader();
|
|
49
|
+
const initial = header?.dataDefault ? cloneDeep(header.dataDefault) : {};
|
|
50
|
+
this.dataMultiLanguage.set([initial]);
|
|
51
51
|
}
|
|
52
|
-
this.
|
|
52
|
+
this.syncDataMultiKey();
|
|
53
53
|
});
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
56
|
ngOnInit() {
|
|
57
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
58
|
}
|
|
63
59
|
get FunctionsControl() {
|
|
64
60
|
return {
|
|
@@ -66,85 +62,100 @@ export class LibsUiComponentsInputsMultiLanguageItemsComponent {
|
|
|
66
62
|
getData: this.getData.bind(this),
|
|
67
63
|
};
|
|
68
64
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
async handlerAdd() {
|
|
80
|
-
let dataLanguage = {};
|
|
81
|
-
const configHeader = this.configHeader();
|
|
82
|
-
if (configHeader) {
|
|
83
|
-
dataLanguage = cloneDeep(configHeader.dataDefault);
|
|
65
|
+
/**
|
|
66
|
+
* 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.
|
|
67
|
+
*/
|
|
68
|
+
syncDataMultiKey() {
|
|
69
|
+
const templates = this.configItems();
|
|
70
|
+
const rowCount = this.dataMultiLanguage().length;
|
|
71
|
+
if (!templates?.length) {
|
|
72
|
+
this.dataMultiKey.set([]);
|
|
73
|
+
return;
|
|
84
74
|
}
|
|
75
|
+
this.dataMultiKey.set(Array.from({ length: rowCount }, () => templates.map((c) => ({ ...c }))));
|
|
76
|
+
}
|
|
77
|
+
handlerAdd() {
|
|
78
|
+
const header = this.configHeader();
|
|
79
|
+
const dataLanguage = header?.dataDefault ? cloneDeep(header.dataDefault) : {};
|
|
85
80
|
this.dataMultiLanguage.update((items) => [...items, dataLanguage]);
|
|
86
|
-
this.
|
|
81
|
+
this.syncDataMultiKey();
|
|
87
82
|
this.handlerChangeValue();
|
|
88
83
|
}
|
|
89
|
-
|
|
90
|
-
this.dataMultiLanguage.update((items) =>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
});
|
|
84
|
+
handlerRemove(index) {
|
|
85
|
+
this.dataMultiLanguage.update((items) => items.filter((_, i) => i !== index));
|
|
86
|
+
this.reindexRowMapsAfterRemove(index);
|
|
87
|
+
this.syncDataMultiKey();
|
|
94
88
|
this.handlerChangeValue();
|
|
95
89
|
}
|
|
96
|
-
|
|
90
|
+
reindexRowMapsAfterRemove(removedIndex) {
|
|
91
|
+
const reindex = (m) => {
|
|
92
|
+
const next = new Map();
|
|
93
|
+
m.forEach((v, k) => {
|
|
94
|
+
if (k < removedIndex) {
|
|
95
|
+
next.set(k, v);
|
|
96
|
+
}
|
|
97
|
+
else if (k > removedIndex) {
|
|
98
|
+
next.set(k - 1, v);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return next;
|
|
102
|
+
};
|
|
103
|
+
this.inputValidByRow.update((m) => reindex(m));
|
|
104
|
+
this.multiLanguageByRow.update((m) => reindex(m));
|
|
105
|
+
}
|
|
106
|
+
handlerClick(e) {
|
|
97
107
|
e.stopPropagation();
|
|
98
108
|
this.outClick.emit();
|
|
99
109
|
}
|
|
100
|
-
|
|
101
|
-
this.
|
|
102
|
-
console.log(this.multiLanguageFunctionControl());
|
|
110
|
+
handlerFunctionsControlInputLanguage(event, rowIndex) {
|
|
111
|
+
this.multiLanguageByRow.update((m) => new Map(m).set(rowIndex, event));
|
|
103
112
|
}
|
|
104
|
-
|
|
105
|
-
this.
|
|
113
|
+
handlerFunctionsControlInputValid(event, rowIndex) {
|
|
114
|
+
this.inputValidByRow.update((m) => new Map(m).set(rowIndex, event));
|
|
106
115
|
}
|
|
107
116
|
async validate() {
|
|
108
117
|
let valid = true;
|
|
109
|
-
this.
|
|
110
|
-
|
|
111
|
-
|
|
118
|
+
this.applyValidRequiredWhenHeaderHasValue();
|
|
119
|
+
const rowCount = this.dataMultiLanguage().length;
|
|
120
|
+
for (let i = 0; i < rowCount; i++) {
|
|
121
|
+
const inputCtrl = this.inputValidByRow().get(i);
|
|
122
|
+
if (inputCtrl && !(await inputCtrl.checkIsValid())) {
|
|
112
123
|
valid = false;
|
|
113
124
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (!(await control.checkIsValid())) {
|
|
125
|
+
const mlCtrl = this.multiLanguageByRow().get(i);
|
|
126
|
+
if (mlCtrl && !(await mlCtrl.checkIsValid())) {
|
|
117
127
|
valid = false;
|
|
118
128
|
}
|
|
119
129
|
}
|
|
120
130
|
return valid;
|
|
121
131
|
}
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
132
|
+
getData() {
|
|
133
|
+
const rowCount = this.dataMultiLanguage().length;
|
|
134
|
+
const out = [];
|
|
135
|
+
for (let i = 0; i < rowCount; i++) {
|
|
136
|
+
const ctrl = this.multiLanguageByRow().get(i);
|
|
137
|
+
out.push((ctrl?.getData() ?? {}));
|
|
126
138
|
}
|
|
127
|
-
|
|
128
|
-
return dataMultiLanguage;
|
|
139
|
+
return out;
|
|
129
140
|
}
|
|
130
|
-
|
|
141
|
+
handlerChangeValue(value, type) {
|
|
131
142
|
if (type === 'input') {
|
|
132
143
|
this.dataHeader.set(value);
|
|
133
144
|
}
|
|
134
|
-
this.
|
|
145
|
+
this.applyValidRequiredWhenHeaderHasValue();
|
|
135
146
|
this.outChangeValue.emit();
|
|
136
147
|
}
|
|
137
|
-
|
|
148
|
+
applyValidRequiredWhenHeaderHasValue() {
|
|
138
149
|
this.validRequiredWhenInputHasValue.set(undefined);
|
|
139
150
|
if (!isNil(this.dataHeader())) {
|
|
140
151
|
this.validRequiredWhenInputHasValue.set({ isRequired: true });
|
|
141
152
|
}
|
|
142
153
|
}
|
|
143
154
|
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=\"
|
|
155
|
+
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", outClick: "outClick", outFunctionControl: "outFunctionControl", outChangeValue: "outChangeValue" }, 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 items-center 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\n class=\"w-full\"\n (click)=\"handlerClick($event)\">\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, $index)\" />\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 (outFunctionsControl)=\"handlerFunctionsControlInputLanguage($event, $index)\" />\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"], 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 });
|
|
145
156
|
}
|
|
146
157
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsMultiLanguageItemsComponent, decorators: [{
|
|
147
158
|
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=\"
|
|
159
|
+
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 items-center 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\n class=\"w-full\"\n (click)=\"handlerClick($event)\">\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, $index)\" />\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 (outFunctionsControl)=\"handlerFunctionsControlInputLanguage($event, $index)\" />\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
160
|
}], ctorParameters: () => [] });
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQW1ELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekksT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNGLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFVeEYsTUFBTSxPQUFPLGlEQUFpRDtJQUM1RCw4REFBOEQ7SUFDcEQsWUFBWSxHQUFHLE1BQU0sQ0FBYSxFQUFFLENBQUMsQ0FBQztJQUN0QyxXQUFXLEdBQUcsTUFBTSxDQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELFlBQVksR0FBRyxNQUFNLENBQXlDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLGFBQWEsR0FBRyxNQUFNLENBQWlCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDOUQsOEJBQThCLEdBQUcsTUFBTSxDQUE2QixTQUFTLENBQUMsQ0FBQztJQUMvRSxVQUFVLEdBQUcsTUFBTSxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUNuRCw0QkFBNEIsR0FBRyxNQUFNLENBQWlELEVBQUUsQ0FBQyxDQUFDO0lBQzFGLHlCQUF5QixHQUFHLE1BQU0sQ0FBeUMsRUFBRSxDQUFDLENBQUM7SUFFaEYsV0FBVyxHQUFHLEtBQUssQ0FBbUIsRUFBRSxDQUFDLENBQUM7SUFDMUMsaUJBQWlCLEdBQUcsS0FBSyxDQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3pCLFNBQVMsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUM3QixZQUFZLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDL0IsY0FBYyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ2xDLG1CQUFtQixHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ3ZDLGlCQUFpQixHQUFHLEtBQUssRUFBVSxDQUFDO0lBQ3BDLGNBQWMsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUNqQyx1QkFBdUIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUUzQyxRQUFRLEdBQUcsTUFBTSxFQUFRLENBQUM7SUFDMUIsa0JBQWtCLEdBQUcsTUFBTSxFQUEyQyxDQUFDO0lBQ3ZFLGNBQWMsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUV6QztRQUNFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN6QyxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEUsQ0FBQztnQkFDSCxDQUFDO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDakMsQ0FBQztJQUNKLENBQUM7SUFFUyxLQUFLLENBQUMsa0JBQWtCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFUyxLQUFLLENBQUMsVUFBVTtRQUN4QixJQUFJLFlBQVksR0FBdUIsRUFBRSxDQUFDO1FBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRVMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFhO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN0QyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFUyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQVE7UUFDbkMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVTLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxLQUE4QztRQUNqRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFUyxLQUFLLENBQUMsaUNBQWlDLENBQUMsS0FBc0M7UUFDdEYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUTtRQUNwQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7UUFDM0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxLQUFLLENBQUMsT0FBTztRQUNyQixNQUFNLGlCQUFpQixHQUF5QixFQUFFLENBQUM7UUFDbkQsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxDQUFDO1lBQzFELGlCQUFpQixDQUFDLElBQUksQ0FBRSxDQUFDLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUF3QixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxzREFBc0Q7UUFDdEQsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRVMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQXVCLEVBQUUsSUFBYTtRQUN2RSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVMsS0FBSyxDQUFDLG1DQUFtQztRQUNqRCxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7d0dBcEpVLGlEQUFpRDs0RkFBakQsaURBQWlELHV0RENqQjlELGtvSUF5RkEsMkNEMUVZLGVBQWUsdUZBQUUsOENBQThDLHVGQUFFLG9DQUFvQyxnM0RBQUUsNENBQTRDLGt3QkFBRSxzQ0FBc0M7OzRGQUUxTCxpREFBaUQ7a0JBUjdELFNBQVM7K0JBRUUsZ0RBQWdELGNBRTlDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSw4Q0FBOEMsRUFBRSxvQ0FBb0MsRUFBRSw0Q0FBNEMsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJVmFsaWRSZXF1aXJlZCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc05pbCwgVXRpbHNDYWNoZSB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1sYW5ndWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXIsIElEYXRhSXRlbSwgSURhdGFNdWx0aUxhbmd1YWdlLCBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL211bHRpLWxhbmd1YWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldEl0ZW1QaXBlIH0gZnJvbSAnLi4vcGlwZXMvZ2V0LWl0ZW0ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtbXVsdGlfbGFuZ3VhZ2UtaXRlbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZSwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUl0ZW1zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJvdGVjdGVkIGRhdGFNdWx0aUtleSA9IHNpZ25hbDxBcnJheTxhbnk+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==
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvaXRlbXMvaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQW1ELG9DQUFvQyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDekksT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNGLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFVeEYsTUFBTSxPQUFPLGlEQUFpRDtJQUNsRCxZQUFZLEdBQUcsTUFBTSxDQUFnQixFQUFFLENBQUMsQ0FBQztJQUN6QyxXQUFXLEdBQUcsTUFBTSxDQUFTLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELFlBQVksR0FBRyxNQUFNLENBQXlDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLGFBQWEsR0FBRyxNQUFNLENBQWlCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFD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Q0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO3dHQWhLVSxpREFBaUQ7NEZBQWpELGlEQUFpRCw0M0RDakI5RCwycUlBc0ZBLDJDRHZFWSxlQUFlLHVGQUFFLDhDQUE4Qyx1RkFBRSxvQ0FBb0MsZzNEQUFFLDRDQUE0Qyw2d0JBQUUsc0NBQXNDOzs0RkFFMUwsaURBQWlEO2tCQVI3RCxTQUFTOytCQUVFLGdEQUFnRCxjQUU5QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxlQUFlLEVBQUUsOENBQThDLEVBQUUsb0NBQW9DLEVBQUUsNENBQTRDLEVBQUUsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIGlucHV0LCBtb2RlbCwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVZhbGlkUmVxdWlyZWQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNOaWwsIFV0aWxzQ2FjaGUgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElDb25maWdNdWx0aUxhbmd1YWdlSGVhZGVyLCBJRGF0YUl0ZW0sIElEYXRhTXVsdGlMYW5ndWFnZSwgSUlucHV0TXVsdGlMYW5ndWFnZUZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tdWx0aS1sYW5ndWFnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1sYW5ndWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZSB9IGZyb20gJy4uL3BpcGVzL2dldC1pdGVtLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLW11bHRpX2xhbmd1YWdlLWl0ZW1zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2l0ZW1zLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGUsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNWYWxpZENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VDb21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VJdGVtc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb3RlY3RlZCBkYXRhTXVsdGlLZXkgPSBzaWduYWw8SURhdGFJdGVtW11bXT4oW10pO1xuICBwcm90ZWN0ZWQgbGFuZ0RlZmF1bHQgPSBzaWduYWw8c3RyaW5nPihVdGlsc0NhY2hlLmdldExhbmcoKSk7XG4gIHByb3RlY3RlZCBjb25maWdIZWFkZXIgPSBzaWduYWw8SUNvbmZpZ011bHRpTGFuZ3VhZ2VIZWFkZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCB2YWxpZFJlcXVpcmVkID0gc2lnbmFsPElWYWxpZFJlcXVpcmVkPih7IGlzUmVxdWlyZWQ6IGZhbHNlIH0pO1xuICBwcm90ZWN0ZWQgdmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlID0gc2lnbmFsPElWYWxpZFJlcXVpcmVkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgZGF0YUhlYWRlciA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIE3hu5l0IGNvbnRyb2wgdmFsaWQgaGVhZGVyIGNobyBt4buXaSBkw7JuZyAodGhlbyBpbmRleCkuICovXG4gIHByaXZhdGUgaW5wdXRWYWxpZEJ5Um93ID0gc2lnbmFsPE1hcDxudW1iZXIsIElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+PihuZXcgTWFwKCkpO1xuICAvKiogTeG7mXQgY29udHJvbCBtdWx0aS1sYW5ndWFnZSBjaG8gbeG7l2kgZMOybmcgKHRoZW8gaW5kZXgpLiAqL1xuICBwcml2YXRlIG11bHRpTGFuZ3VhZ2VCeVJvdyA9IHNpZ25hbDxNYXA8bnVtYmVyLCBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQ+PihuZXcgTWFwKCkpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ0l0ZW1zID0gaW5wdXQ8QXJyYXk8SURhdGFJdGVtPj4oW10pO1xuICByZWFkb25seSBkYXRhTXVsdGlMYW5ndWFnZSA9IG1vZGVsPEFycmF5PElEYXRhTXVsdGlMYW5ndWFnZT4+KFt7fV0pO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGlnbm9yZUFkZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQWRkSXRlbSA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc2luZ2xlTGFuZ3VhZ2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBhY2NlcHROZWdhdGl2ZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsdWVVcERvd25OdW1iZXIgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG1heFZhbHVlTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGNsYXNzSWNvbkFkZExhbmd1YWdlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdsaWJzLXVpLWljb24tYWRkJywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgfHwgJ2xpYnMtdWktaWNvbi1hZGQnIH0pO1xuXG4gIHJlYWRvbmx5IG91dENsaWNrID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbCA9IG91dHB1dDxJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5jb25maWdJdGVtcygpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWdIZWFkZXIuc2V0KGl0ZW1zPy5bMF0/LmhlYWRlcik7XG4gICAgICAgIHRoaXMudmFsaWRSZXF1aXJlZC5zZXQoaXRlbXM/LlswXT8udmFsaWRSZXF1aXJlZCA/PyB7IGlzUmVxdWlyZWQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAoIXJvd3M/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuY29uZmlnSGVhZGVyKCk7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbDogSURhdGFNdWx0aUxhbmd1YWdlID0gaGVhZGVyPy5kYXRhRGVmYXVsdCA/IChjbG9uZURlZXAoaGVhZGVyLmRhdGFEZWZhdWx0KSBhcyBJRGF0YU11bHRpTGFuZ3VhZ2UpIDoge307XG4gICAgICAgICAgdGhpcy5kYXRhTXVsdGlMYW5ndWFnZS5zZXQoW2luaXRpYWxdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbkNvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICB9XG5cbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrSXNWYWxpZDogdGhpcy52YWxpZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgZ2V0RGF0YTogdGhpcy5nZXREYXRhLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBN4buXaSBkw7JuZyBj4bqnbiBt4buZdCBi4bqjbiBgZGF0YWAgKHNoYWxsb3cgY29weSB04burbmcgYElEYXRhSXRlbWApIMSR4buDIG11bHRpLWxhbmd1YWdlIGNvbiBraMO0bmcgZMO5bmcgY2h1bmcgbeG7mXQgbeG6o25nIHRoYW0gY2hp4bq/dS5cbiAgICovXG4gIHByaXZhdGUgc3luY0RhdGFNdWx0aUtleSgpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSB0aGlzLmNvbmZpZ0l0ZW1zKCk7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmRhdGFNdWx0aUxhbmd1YWdlKCkubGVuZ3RoO1xuICAgIGlmICghdGVtcGxhdGVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0YU11bHRpS2V5LnNldChbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGF0YU11bHRpS2V5LnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiByb3dDb3VudCB9LCAoKSA9PiB0ZW1wbGF0ZXMubWFwKChjKSA9PiAoeyAuLi5jIH0pKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJBZGQoKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5jb25maWdIZWFkZXIoKTtcbiAgICBjb25zdCBkYXRhTGFuZ3VhZ2U6IElEYXRhTXVsdGlMYW5ndWFnZSA9IGhlYWRlcj8uZGF0YURlZmF1bHQgPyAoY2xvbmVEZWVwKGhlYWRlci5kYXRhRGVmYXVsdCkgYXMgSURhdGFNdWx0aUxhbmd1YWdlKSA6IHt9O1xuICAgIHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCBkYXRhTGFuZ3VhZ2VdKTtcbiAgICB0aGlzLnN5bmNEYXRhTXVsdGlLZXkoKTtcbiAgICB0aGlzLmhhbmRsZXJDaGFuZ2VWYWx1ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZW1vdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UudXBkYXRlKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpO1xuICAgIHRoaXMucmVpbmRleFJvd01hcHNBZnRlclJlbW92ZShpbmRleCk7XG4gICAgdGhpcy5zeW5jRGF0YU11bHRpS2V5KCk7XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVpbmRleFJvd01hcHNBZnRlclJlbW92ZShyZW1vdmVkSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlaW5kZXggPSA8VD4obTogTWFwPG51bWJlciwgVD4pOiBNYXA8bnVtYmVyLCBUPiA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IE1hcDxudW1iZXIsIFQ+KCk7XG4gICAgICBtLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgaWYgKGsgPCByZW1vdmVkSW5kZXgpIHtcbiAgICAgICAgICBuZXh0LnNldChrLCB2KTtcbiAgICAgICAgfSBlbHNlIGlmIChrID4gcmVtb3ZlZEluZGV4KSB7XG4gICAgICAgICAgbmV4dC5zZXQoayAtIDEsIHYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gICAgdGhpcy5pbnB1dFZhbGlkQnlSb3cudXBkYXRlKChtKSA9PiByZWluZGV4KG0pKTtcbiAgICB0aGlzLm11bHRpTGFuZ3VhZ2VCeVJvdy51cGRhdGUoKG0pID0+IHJlaW5kZXgobSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGljayhlOiBFdmVudCk6IHZvaWQge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5vdXRDbGljay5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2xJbnB1dExhbmd1YWdlKGV2ZW50OiBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm11bHRpTGFuZ3VhZ2VCeVJvdy51cGRhdGUoKG0pID0+IG5ldyBNYXAobSkuc2V0KHJvd0luZGV4LCBldmVudCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbnNDb250cm9sSW5wdXRWYWxpZChldmVudDogSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgcm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRWYWxpZEJ5Um93LnVwZGF0ZSgobSkgPT4gbmV3IE1hcChtKS5zZXQocm93SW5kZXgsIGV2ZW50KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgdGhpcy5hcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTtcbiAgICBjb25zdCByb3dDb3VudCA9IHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UoKS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBpbnB1dEN0cmwgPSB0aGlzLmlucHV0VmFsaWRCeVJvdygpLmdldChpKTtcbiAgICAgIGlmIChpbnB1dEN0cmwgJiYgIShhd2FpdCBpbnB1dEN0cmwuY2hlY2tJc1ZhbGlkKCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBtbEN0cmwgPSB0aGlzLm11bHRpTGFuZ3VhZ2VCeVJvdygpLmdldChpKTtcbiAgICAgIGlmIChtbEN0cmwgJiYgIShhd2FpdCBtbEN0cmwuY2hlY2tJc1ZhbGlkKCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREYXRhKCk6IElEYXRhTXVsdGlMYW5ndWFnZVtdIHtcbiAgICBjb25zdCByb3dDb3VudCA9IHRoaXMuZGF0YU11bHRpTGFuZ3VhZ2UoKS5sZW5ndGg7XG4gICAgY29uc3Qgb3V0OiBJRGF0YU11bHRpTGFuZ3VhZ2VbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgY29uc3QgY3RybCA9IHRoaXMubXVsdGlMYW5ndWFnZUJ5Um93KCkuZ2V0KGkpO1xuICAgICAgb3V0LnB1c2goKGN0cmw/LmdldERhdGEoKSA/PyB7fSkgYXMgSURhdGFNdWx0aUxhbmd1YWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlVmFsdWUodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIsIHR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ2lucHV0Jykge1xuICAgICAgdGhpcy5kYXRhSGVhZGVyLnNldCh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5VmFsaWRSZXF1aXJlZFdoZW5IZWFkZXJIYXNWYWx1ZSgpO1xuICAgIHRoaXMub3V0Q2hhbmdlVmFsdWUuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZhbGlkUmVxdWlyZWRXaGVuSGVhZGVySGFzVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZFJlcXVpcmVkV2hlbklucHV0SGFzVmFsdWUuc2V0KHVuZGVmaW5lZCk7XG4gICAgaWYgKCFpc05pbCh0aGlzLmRhdGFIZWFkZXIoKSkpIHtcbiAgICAgIHRoaXMudmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlLnNldCh7IGlzUmVxdWlyZWQ6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtWzhweF1cIj5cbiAgQGZvciAoaXRlbSBvZiBkYXRhTXVsdGlMYW5ndWFnZSgpOyB0cmFjayBpdGVtKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktYm9yZGVyLWdlbmVyYWwgdy1mdWxsIHJvdW5kZWQtWzRweF1cIj5cbiAgICAgIEBpZiAoY29uZmlnSGVhZGVyKCk7IGFzIGNvbmZpZ0hlYWRlcikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBiZy1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0yKV0gcC1bMTJweF0gZ2FwLVsxNnB4XVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzhweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2bSBoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBzaHJpbmstMFwiPlxuICAgICAgICAgICAgICBAbGV0IGNvbnN0SHRtbFRpdGxlID0gY29uZmlnSGVhZGVyLnRpdGxlID8/ICcgJztcbiAgICAgICAgICAgICAge3sgY29uc3RIdG1sVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICBAaWYgKGNvbmZpZ0hlYWRlci5rZXlCaW5kRGF0YSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGU6IGl0ZW07IGFzIGl0ZW1NYXApIHtcbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy12YWxpZFxuICAgICAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtTWFwXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhVHlwZV09XCJjb25maWdIZWFkZXIudHlwZSAmJiBjb25maWdIZWFkZXIudHlwZSA9PT0gJ251bWJlcicgPyAnaW50JyA6ICdzdHJpbmcnXCJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cImxhbmdEZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgICAgW2VtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRSZXF1aXJlZF09XCJ7IGlzUmVxdWlyZWQ6IGNvbmZpZ0l0ZW1zKClbMF0udmFsaWRSZXF1aXJlZD8uaXNSZXF1aXJlZCA/PyBmYWxzZSB9XCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaTE4bl9lbnRlcl92YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8/IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cInZhbHVlVXBEb3duTnVtYmVyKCkgfHwgMVwiXG4gICAgICAgICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwibWF4VmFsdWVOdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgICBbZml4ZWRGbG9hdF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKCRldmVudCwgJ2lucHV0JylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2xJbnB1dFZhbGlkKCRldmVudCwgJGluZGV4KVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoISRmaXJzdCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGgtWzMycHhdXCI+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkN1c3RvbV09XCJ7XG4gICAgICAgICAgICAgICAgICBjb25maWdTdGVwQ29sb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyMwNzE2MzEnLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0X2hvdmVyOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICAgICAgICAgIHRleHRfYWN0aXZlOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJzA3MTYzMScsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgcm9vdENvbG9yOiAnIzA3MTYzMScsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9kZWxldGUnLCB6SW5kZXg6IDEyMDUgfSB9XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlbW92ZSdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclJlbW92ZSgkaW5kZXgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLVsxMnB4XSBmbGV4IHctZnVsbFwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLW11bHRpX2xhbmd1YWdlXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICBbc2luZ2xlTGFuZ3VhZ2VdPVwic2luZ2xlTGFuZ3VhZ2UoKVwiXG4gICAgICAgICAgICBbdGl0bGVGaWVsZF09XCJjb25maWdJdGVtcygpWzBdLnRpdGxlRmllbGQgfHwgJydcIlxuICAgICAgICAgICAgW2tleUhlYWRlcl09XCJjb25maWdIZWFkZXIua2V5QmluZERhdGEgPz8gJydcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidpMThuX2ltcG9ydF9jb250ZW50J1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlVmFsdWVdPVwiJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImRhdGFNdWx0aUtleSgpWyRpbmRleF1cIlxuICAgICAgICAgICAgW3ZhbGlkUmVxdWlyZWRdPVwidmFsaWRSZXF1aXJlZFdoZW5JbnB1dEhhc1ZhbHVlKCkgfHwgY29uZmlnSXRlbXMoKVswXS52YWxpZFJlcXVpcmVkXCJcbiAgICAgICAgICAgIFtkYXRhTGFuZ3VhZ2VdPVwiaXRlbVwiXG4gICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpID8/IDEyMDNcIlxuICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpID8/IHRydWVcIlxuICAgICAgICAgICAgW3ZhbHVlVXBEb3duTnVtYmVyXT1cInZhbHVlVXBEb3duTnVtYmVyKCkgfHwgMVwiXG4gICAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwibWF4VmFsdWVOdW1iZXIoKVwiXG4gICAgICAgICAgICBbb25seUFjY2VwdE5lZ2F0aXZlVmFsdWVdPVwib25seUFjY2VwdE5lZ2F0aXZlVmFsdWUoKVwiXG4gICAgICAgICAgICBbY2xhc3NJY29uQWRkTGFuZ3VhZ2VdPVwiY2xhc3NJY29uQWRkTGFuZ3VhZ2UoKVwiXG4gICAgICAgICAgICBbdmlld1R5cGVdPVwiY29uZmlnSXRlbXMoKVswXS50eXBlID8gKGNvbmZpZ0l0ZW1zKClbMF0udHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6IGNvbmZpZ0l0ZW1zKClbMF0udHlwZSA9PT0gJ2Zsb2F0JyA/ICdmbG9hdCcgOiAndGV4dCcpIDogJ3RleHQnXCJcbiAgICAgICAgICAgIChvdXRFdmVudE11bHRpTGFuZ3VhZ2UpPVwiaGFuZGxlckNoYW5nZVZhbHVlKClcIlxuICAgICAgICAgICAgKG91dENoYW5nZVZhbHVlSW5wdXQpPVwiaGFuZGxlckNoYW5nZVZhbHVlKClcIlxuICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2xJbnB1dExhbmd1YWdlKCRldmVudCwgJGluZGV4KVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoIWlnbm9yZUFkZCgpKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tYWRkJ1wiXG4gICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg2bWknXCJcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFweC0wICFweS1bMnB4XSdcIlxuICAgICAgW2xhYmVsXT1cImxhYmVsQWRkSXRlbSgpIHx8ICcnXCJcbiAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQWRkKClcIiAvPlxuICB9XG48L2Rpdj5cbiJdfQ==
|