@seniorsistemas/angular-components 15.0.2 → 15.0.3
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/bundles/seniorsistemas-angular-components.umd.js +94 -69
- package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
- package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
- package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
- package/components/table/table-column/table-columns.component.d.ts +10 -3
- package/esm2015/components/table/table-column/table-columns.component.js +97 -73
- package/esm5/components/table/table-column/table-columns.component.js +97 -73
- package/fesm2015/seniorsistemas-angular-components.js +94 -69
- package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
- package/fesm5/seniorsistemas-angular-components.js +94 -69
- package/fesm5/seniorsistemas-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-angular-components.metadata.json +1 -1
|
@@ -3,9 +3,9 @@ import { TranslateService } from "@ngx-translate/core";
|
|
|
3
3
|
import { HostProjectConfigs } from "../../../angular-components.module";
|
|
4
4
|
import { Column, ColumnValues, TableColumnLocaleOptions } from "./models";
|
|
5
5
|
export declare class TableColumnsComponent implements OnChanges {
|
|
6
|
-
private viewContainerRef;
|
|
7
|
-
private translate;
|
|
8
|
-
private hostProjectConfigs;
|
|
6
|
+
private readonly viewContainerRef;
|
|
7
|
+
private readonly translate;
|
|
8
|
+
private readonly hostProjectConfigs;
|
|
9
9
|
columnsTemplate: TemplateRef<any>;
|
|
10
10
|
columns: Column[];
|
|
11
11
|
rowValue: any;
|
|
@@ -15,6 +15,13 @@ export declare class TableColumnsComponent implements OnChanges {
|
|
|
15
15
|
ngOnChanges(changes: SimpleChanges): void;
|
|
16
16
|
private validateComponentAttributes;
|
|
17
17
|
private createColumnsTemplate;
|
|
18
|
+
private getColumnSeparator;
|
|
19
|
+
private getTranslationPrefix;
|
|
20
|
+
private isAttributeValueInvalid;
|
|
21
|
+
private getFormattedColumnValue;
|
|
22
|
+
private getAttributeValue;
|
|
23
|
+
private getNumberConfigs;
|
|
24
|
+
private getDateFormat;
|
|
18
25
|
private getColumnValue;
|
|
19
26
|
private getBadgeClass;
|
|
20
27
|
private getColumnScale;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { __decorate, __param } from "tslib";
|
|
2
|
-
import { Inject, OnChanges, SimpleChanges, TemplateRef, ViewContainerRef } from "@angular/core";
|
|
3
|
-
import { Component, Input, ViewChild } from "@angular/core";
|
|
4
|
-
import { TranslateService } from "@ngx-translate/core";
|
|
5
2
|
import * as moment from "moment";
|
|
3
|
+
import { Inject, OnChanges, SimpleChanges, TemplateRef, ViewContainerRef, Component, Input, ViewChild } from "@angular/core";
|
|
4
|
+
import { TranslateService } from "@ngx-translate/core";
|
|
6
5
|
import { applyMask } from "@seniorsistemas/ng2-currency-mask";
|
|
7
6
|
import BigNumber from "bignumber.js";
|
|
8
7
|
import { HostProjectConfigsInjectionToken } from "../../../angular-components.module";
|
|
@@ -20,12 +19,15 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
20
19
|
}
|
|
21
20
|
validateComponentAttributes(changes) {
|
|
22
21
|
var _a, _b, _c;
|
|
23
|
-
if (!((_a = changes.columns) === null || _a === void 0 ? void 0 : _a.currentValue))
|
|
22
|
+
if (!((_a = changes.columns) === null || _a === void 0 ? void 0 : _a.currentValue)) {
|
|
24
23
|
throw new Error("The 'columns' attribute must be informed!");
|
|
25
|
-
|
|
24
|
+
}
|
|
25
|
+
if (!((_b = changes.rowValue) === null || _b === void 0 ? void 0 : _b.currentValue)) {
|
|
26
26
|
throw new Error("The 'rowValue' attribute must be informed!");
|
|
27
|
-
|
|
27
|
+
}
|
|
28
|
+
if (!((_c = changes.locale) === null || _c === void 0 ? void 0 : _c.currentValue)) {
|
|
28
29
|
throw new Error("The 'locale' attribute must be informed!");
|
|
30
|
+
}
|
|
29
31
|
}
|
|
30
32
|
createColumnsTemplate(changes) {
|
|
31
33
|
this.viewContainerRef.clear();
|
|
@@ -35,13 +37,60 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
35
37
|
columns.forEach((column) => this.formattedColumns.push(this.getColumnValue(column, rowValue, locale)));
|
|
36
38
|
this.viewContainerRef.createEmbeddedView(this.columnsTemplate);
|
|
37
39
|
}
|
|
40
|
+
getColumnSeparator(column) {
|
|
41
|
+
return column.separator ? column.separator : " - ";
|
|
42
|
+
}
|
|
43
|
+
getTranslationPrefix(column) {
|
|
44
|
+
return column.prefix ? column.prefix : `${this.hostProjectConfigs.domain}.${this.hostProjectConfigs.service}.`;
|
|
45
|
+
}
|
|
46
|
+
isAttributeValueInvalid(attributeValue) {
|
|
47
|
+
return attributeValue === null || attributeValue === undefined || (this.isArray(attributeValue) && !attributeValue.length);
|
|
48
|
+
}
|
|
49
|
+
getFormattedColumnValue(column, columnValue, unifiedColumnValues, uninformedText, uninformedNumber) {
|
|
50
|
+
if (uninformedNumber === column.attributes.length) {
|
|
51
|
+
return uninformedText;
|
|
52
|
+
}
|
|
53
|
+
if (column.type === EnumColumnFieldType.TOKENS) {
|
|
54
|
+
return [].concat.apply([], columnValue.filter(values => values !== uninformedText));
|
|
55
|
+
}
|
|
56
|
+
return unifiedColumnValues;
|
|
57
|
+
}
|
|
58
|
+
getAttributeValue(attribute, rowValue) {
|
|
59
|
+
let attributeValue;
|
|
60
|
+
attribute
|
|
61
|
+
.split("/")
|
|
62
|
+
.forEach((value) => {
|
|
63
|
+
if (!attributeValue) {
|
|
64
|
+
value
|
|
65
|
+
.split(".")
|
|
66
|
+
.forEach((val, i) => {
|
|
67
|
+
if (!rowValue) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (i === 0) {
|
|
71
|
+
attributeValue = rowValue[val];
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
if (attributeValue) {
|
|
75
|
+
attributeValue = attributeValue[val];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return attributeValue;
|
|
82
|
+
}
|
|
83
|
+
getNumberConfigs(column, locale) {
|
|
84
|
+
return Object.assign(Object.assign({}, locale.number), { scale: column.scale !== null && column.scale !== undefined
|
|
85
|
+
? this.getColumnScale(column.scale)
|
|
86
|
+
: locale.number.scale, prefix: `${locale.number.currencySymbol} ` });
|
|
87
|
+
}
|
|
88
|
+
getDateFormat(column, locale) {
|
|
89
|
+
return column.dateFormat ? column.dateFormat : locale.calendar.dateFormat;
|
|
90
|
+
}
|
|
38
91
|
getColumnValue(column, rowValue, locale) {
|
|
39
|
-
const prefix = column
|
|
40
|
-
|
|
41
|
-
: `${this.hostProjectConfigs.domain}.${this.hostProjectConfigs.service}.`;
|
|
42
|
-
const separator = column.separator
|
|
43
|
-
? column.separator
|
|
44
|
-
: " - ";
|
|
92
|
+
const prefix = this.getTranslationPrefix(column);
|
|
93
|
+
const separator = this.getColumnSeparator(column);
|
|
45
94
|
const uninformed = this.translate.instant(prefix + "empty_label");
|
|
46
95
|
const style = column.style;
|
|
47
96
|
let badgeClass = {
|
|
@@ -49,69 +98,40 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
49
98
|
};
|
|
50
99
|
const columnValue = column.attributes
|
|
51
100
|
.map((attribute) => {
|
|
52
|
-
|
|
53
|
-
attribute
|
|
54
|
-
|
|
55
|
-
.forEach((value) => {
|
|
56
|
-
if (!attributeValue) {
|
|
57
|
-
value
|
|
58
|
-
.split(".")
|
|
59
|
-
.forEach((val, i) => {
|
|
60
|
-
if (rowValue) {
|
|
61
|
-
if (i === 0) {
|
|
62
|
-
attributeValue = rowValue[val];
|
|
63
|
-
}
|
|
64
|
-
else if (attributeValue) {
|
|
65
|
-
attributeValue = attributeValue[val];
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
if (attributeValue === null || attributeValue === undefined || (this.isArray(attributeValue) && !attributeValue.length)) {
|
|
101
|
+
var _a;
|
|
102
|
+
const attributeValue = this.getAttributeValue(attribute, rowValue);
|
|
103
|
+
if (this.isAttributeValueInvalid(attributeValue)) {
|
|
72
104
|
return uninformed;
|
|
73
105
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
case EnumColumnFieldType.TOKENS:
|
|
97
|
-
return this.getTokens(attributeValue);
|
|
98
|
-
}
|
|
106
|
+
const numberConfigs = this.getNumberConfigs(column, locale);
|
|
107
|
+
switch (column.type) {
|
|
108
|
+
case EnumColumnFieldType.ENUM:
|
|
109
|
+
if ((_a = column.badgeConfigs) === null || _a === void 0 ? void 0 : _a.length) {
|
|
110
|
+
badgeClass = this.getBadgeClass(attributeValue, column.badgeConfigs);
|
|
111
|
+
}
|
|
112
|
+
return this.translate.instant(column.enumPrefix + attributeValue.toString().toLowerCase());
|
|
113
|
+
case EnumColumnFieldType.CURRENCY:
|
|
114
|
+
return applyMask(attributeValue, numberConfigs, this.isNumber(attributeValue));
|
|
115
|
+
case EnumColumnFieldType.DATE:
|
|
116
|
+
const dateFormat = this.getDateFormat(column, locale);
|
|
117
|
+
return moment(attributeValue).format(dateFormat);
|
|
118
|
+
case EnumColumnFieldType.BOOLEAN:
|
|
119
|
+
const value = attributeValue ? "yes" : "no";
|
|
120
|
+
return this.translate.instant(prefix + value);
|
|
121
|
+
case EnumColumnFieldType.NUMBER:
|
|
122
|
+
numberConfigs.prefix = "";
|
|
123
|
+
return applyMask(attributeValue, numberConfigs, this.isNumber(attributeValue));
|
|
124
|
+
case EnumColumnFieldType.TOKENS:
|
|
125
|
+
return this.getTokens(attributeValue);
|
|
126
|
+
default:
|
|
127
|
+
return attributeValue;
|
|
99
128
|
}
|
|
100
129
|
});
|
|
101
130
|
const unifiedColumnValues = columnValue.join(separator);
|
|
102
131
|
const uninformedNumber = unifiedColumnValues
|
|
103
132
|
.split(separator)
|
|
104
133
|
.filter(value => value === uninformed).length;
|
|
105
|
-
|
|
106
|
-
if (uninformedNumber === column.attributes.length) {
|
|
107
|
-
formattedColumnValue = uninformed;
|
|
108
|
-
}
|
|
109
|
-
else if (column.type === EnumColumnFieldType.TOKENS) {
|
|
110
|
-
formattedColumnValue = [].concat.apply([], columnValue.filter(values => values !== uninformed));
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
formattedColumnValue = unifiedColumnValues;
|
|
114
|
-
}
|
|
134
|
+
const formattedColumnValue = this.getFormattedColumnValue(column, columnValue, unifiedColumnValues, uninformed, uninformedNumber);
|
|
115
135
|
return {
|
|
116
136
|
style,
|
|
117
137
|
columnValue: formattedColumnValue,
|
|
@@ -146,18 +166,21 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
146
166
|
}
|
|
147
167
|
return tooltip;
|
|
148
168
|
}
|
|
169
|
+
return "";
|
|
149
170
|
}
|
|
150
171
|
isNumber(value) {
|
|
151
172
|
return !(new BigNumber(value).isNaN());
|
|
152
173
|
}
|
|
153
174
|
getTokens(values) {
|
|
154
|
-
if (!this.isArray(values))
|
|
175
|
+
if (!this.isArray(values)) {
|
|
155
176
|
throw new Error("To use tokens an array must be informed");
|
|
156
|
-
|
|
157
|
-
if (!this.isValidTokenArray(values))
|
|
158
|
-
throw new Error("Not a valid token array.
|
|
159
|
-
|
|
177
|
+
}
|
|
178
|
+
if (!this.isValidTokenArray(values)) {
|
|
179
|
+
throw new Error("Not a valid token array. Must be a primitive values array or an objects with label attribute array");
|
|
180
|
+
}
|
|
181
|
+
if (this.isLabelObjectArray(values)) {
|
|
160
182
|
return values;
|
|
183
|
+
}
|
|
161
184
|
return values
|
|
162
185
|
.filter((value) => value !== undefined && value !== null)
|
|
163
186
|
.map((value) => {
|
|
@@ -192,6 +215,7 @@ let TableColumnsComponent = class TableColumnsComponent {
|
|
|
192
215
|
};
|
|
193
216
|
});
|
|
194
217
|
}
|
|
218
|
+
return null;
|
|
195
219
|
}
|
|
196
220
|
};
|
|
197
221
|
TableColumnsComponent.ctorParameters = () => [
|
|
@@ -220,4 +244,4 @@ TableColumnsComponent = __decorate([
|
|
|
220
244
|
__param(2, Inject(HostProjectConfigsInjectionToken))
|
|
221
245
|
], TableColumnsComponent);
|
|
222
246
|
export { TableColumnsComponent };
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFFckMsT0FBTyxFQUVILGdDQUFnQyxFQUNuQyxNQUFNLG9DQUFvQyxDQUFDO0FBRTVDLE9BQU8sRUFLSCxtQkFBbUIsRUFFdEIsTUFBTSxVQUFVLENBQUM7QUFPbEIsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFVOUIsWUFDWSxnQkFBa0MsRUFDbEMsU0FBMkIsRUFDZSxrQkFBc0M7UUFGaEYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUNlLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFMckYscUJBQWdCLEdBQW1CLEVBQUUsQ0FBQztJQU0xQyxDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENB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RUFBRTtpQkFDM0MsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0NBRUosQ0FBQTs7WUFoTmlDLGdCQUFnQjtZQUN2QixnQkFBZ0I7NENBQ2xDLE1BQU0sU0FBQyxnQ0FBZ0M7O0FBWEk7SUFBL0MsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzhEQUFtQztBQUV6RTtJQUFSLEtBQUssRUFBRTtzREFBb0I7QUFDbkI7SUFBUixLQUFLLEVBQUU7dURBQWdCO0FBQ2Y7SUFBUixLQUFLLEVBQUU7cURBQW1DO0FBTmxDLHFCQUFxQjtJQUxqQyxTQUFTLENBQUM7UUFDUCxtNkNBQTZDO1FBRTdDLFFBQVEsRUFBRSxpQkFBaUI7O0tBQzlCLENBQUM7SUFjTyxXQUFBLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0dBYnBDLHFCQUFxQixDQTJOakM7U0EzTlkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBhcHBseU1hc2ssIE1hc2tDb25maWcgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL25nMi1jdXJyZW5jeS1tYXNrXCI7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gXCJiaWdudW1iZXIuanNcIjtcblxuaW1wb3J0IHtcbiAgICBIb3N0UHJvamVjdENvbmZpZ3MsXG4gICAgSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW5cbn0gZnJvbSBcIi4uLy4uLy4uL2FuZ3VsYXItY29tcG9uZW50cy5tb2R1bGVcIjtcbmltcG9ydCB7IElUb2tlbiB9IGZyb20gXCIuLi8uLi90b2tlbi1saXN0XCI7XG5pbXBvcnQge1xuICAgIEJhZGdlQ29sdW1uLFxuICAgIEJhZGdlQ29uZmlncyxcbiAgICBDb2x1bW4sXG4gICAgQ29sdW1uVmFsdWVzLFxuICAgIEVudW1Db2x1bW5GaWVsZFR5cGUsXG4gICAgVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zXG59IGZyb20gXCIuL21vZGVsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3RhYmxlLWNvbHVtbnMuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcIi4vdGFibGUtY29sdW1ucy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBzZWxlY3RvcjogXCJzLXRhYmxlLWNvbHVtbnNcIixcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb2x1bW5zQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuICAgIEBWaWV3Q2hpbGQoXCJjb2x1bW5zVGVtcGxhdGVcIiwgeyBzdGF0aWM6IHRydWUgfSkgY29sdW1uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgY29sdW1ucyE6IENvbHVtbltdO1xuICAgIEBJbnB1dCgpIHJvd1ZhbHVlITogYW55O1xuICAgIEBJbnB1dCgpIGxvY2FsZSE6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucztcblxuICAgIHB1YmxpYyBmb3JtYXR0ZWRDb2x1bW5zOiBDb2x1bW5WYWx1ZXNbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSG9zdFByb2plY3RDb25maWdzSW5qZWN0aW9uVG9rZW4pIHByaXZhdGUgaG9zdFByb2plY3RDb25maWdzOiBIb3N0UHJvamVjdENvbmZpZ3NcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnRBdHRyaWJ1dGVzKGNoYW5nZXMpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnNUZW1wbGF0ZShjaGFuZ2VzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQ29tcG9uZW50QXR0cmlidXRlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghY2hhbmdlcy5jb2x1bW5zPy5jdXJyZW50VmFsdWUpIHRocm93IG5ldyBFcnJvcihcIlRoZSAnY29sdW1ucycgYXR0cmlidXRlIG11c3QgYmUgaW5mb3JtZWQhXCIpO1xuICAgICAgICBpZiAoIWNoYW5nZXMucm93VmFsdWU/LmN1cnJlbnRWYWx1ZSkgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdyb3dWYWx1ZScgYXR0cmlidXRlIG11c3QgYmUgaW5mb3JtZWQhXCIpO1xuICAgICAgICBpZiAoIWNoYW5nZXMubG9jYWxlPy5jdXJyZW50VmFsdWUpIHRocm93IG5ldyBFcnJvcihcIlRoZSAnbG9jYWxlJyBhdHRyaWJ1dGUgbXVzdCBiZSBpbmZvcm1lZCFcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5zVGVtcGxhdGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb2x1bW5zOiBDb2x1bW5bXSA9IGNoYW5nZXMuY29sdW1ucy5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IHJvd1ZhbHVlOiBvYmplY3QgPSBjaGFuZ2VzLnJvd1ZhbHVlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgY29uc3QgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMgPSBjaGFuZ2VzLmxvY2FsZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHRoaXMuZm9ybWF0dGVkQ29sdW1ucy5wdXNoKHRoaXMuZ2V0Q29sdW1uVmFsdWUoY29sdW1uLCByb3dWYWx1ZSwgbG9jYWxlKSkpO1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuY29sdW1uc1RlbXBsYXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblZhbHVlKGNvbHVtbjogQ29sdW1uLCByb3dWYWx1ZTogb2JqZWN0LCBsb2NhbGU6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyk6IENvbHVtblZhbHVlcyB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGNvbHVtbi5wcmVmaXhcbiAgICAgICAgICAgID8gY29sdW1uLnByZWZpeFxuICAgICAgICAgICAgOiBgJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5kb21haW59LiR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3Muc2VydmljZX0uYDtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gY29sdW1uLnNlcGFyYXRvclxuICAgICAgICAgICAgPyBjb2x1bW4uc2VwYXJhdG9yXG4gICAgICAgICAgICA6IFwiIC0gXCI7XG4gICAgICAgIGNvbnN0IHVuaW5mb3JtZWQ6IHN0cmluZyA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJlZml4ICsgXCJlbXB0eV9sYWJlbFwiKTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjb2x1bW4uc3R5bGU7XG4gICAgICAgIGxldCBiYWRnZUNsYXNzOiBCYWRnZUNvbHVtbiA9IHtcbiAgICAgICAgICAgIFwic2RzLWJhZGdlXCI6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWU6IGFueVtdID0gY29sdW1uLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC5tYXAoKGF0dHJpYnV0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZVZhbHVlITogYW55O1xuXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIi9cIilcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh2YWw6IHN0cmluZywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSByb3dWYWx1ZVt2YWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZVt2YWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUgPT09IG51bGwgfHwgYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fCAodGhpcy5pc0FycmF5KGF0dHJpYnV0ZVZhbHVlKSAmJiAhYXR0cmlidXRlVmFsdWUubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5pbmZvcm1lZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJDb25maWdzOiBNYXNrQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubG9jYWxlLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBjb2x1bW4uc2NhbGUgPyB0aGlzLmdldENvbHVtblNjYWxlKGNvbHVtbi5zY2FsZSkgOiBsb2NhbGUubnVtYmVyLnNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBgJHtsb2NhbGUubnVtYmVyLmN1cnJlbmN5U3ltYm9sfSBgXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkVOVU06XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5iYWRnZUNvbmZpZ3MgJiYgY29sdW1uLmJhZGdlQ29uZmlncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2VDbGFzcyA9IHRoaXMuZ2V0QmFkZ2VDbGFzcyhhdHRyaWJ1dGVWYWx1ZSwgY29sdW1uLmJhZGdlQ29uZmlncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbHVtbi5lbnVtUHJlZml4ICsgYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkNVUlJFTkNZOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBseU1hc2soYXR0cmlidXRlVmFsdWUsIG51bWJlckNvbmZpZ3MsIHRoaXMuaXNOdW1iZXIoYXR0cmlidXRlVmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkRBVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IGNvbHVtbi5kYXRlRm9ybWF0ID8gY29sdW1uLmRhdGVGb3JtYXQgOiBsb2NhbGUuY2FsZW5kYXIuZGF0ZUZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KGF0dHJpYnV0ZVZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlVmFsdWUgPyBcInllc1wiIDogXCJub1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHByZWZpeCArIHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkxJTks6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuU1RSSU5HOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLk5VTUJFUjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJDb25maWdzLnByZWZpeCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcGx5TWFzayhhdHRyaWJ1dGVWYWx1ZSwgbnVtYmVyQ29uZmlncywgdGhpcy5pc051bWJlcihhdHRyaWJ1dGVWYWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuVE9LRU5TOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRva2VucyhhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1bmlmaWVkQ29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWUuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCB1bmluZm9ybWVkTnVtYmVyID0gdW5pZmllZENvbHVtblZhbHVlc1xuICAgICAgICAgICAgLnNwbGl0KHNlcGFyYXRvcilcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUgPT09IHVuaW5mb3JtZWQpLmxlbmd0aDtcblxuICAgICAgICBsZXQgZm9ybWF0dGVkQ29sdW1uVmFsdWU6IHN0cmluZyB8IElUb2tlbltdO1xuICAgICAgICBpZiAodW5pbmZvcm1lZE51bWJlciA9PT0gY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRDb2x1bW5WYWx1ZSA9IHVuaW5mb3JtZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVudW1Db2x1bW5GaWVsZFR5cGUuVE9LRU5TKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRDb2x1bW5WYWx1ZSA9IFtdLmNvbmNhdC5hcHBseShbXSwgY29sdW1uVmFsdWUuZmlsdGVyKHZhbHVlcyA9PiB2YWx1ZXMgIT09IHVuaW5mb3JtZWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbHVtblZhbHVlID0gdW5pZmllZENvbHVtblZhbHVlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIGNvbHVtblZhbHVlOiBmb3JtYXR0ZWRDb2x1bW5WYWx1ZSxcbiAgICAgICAgICAgIGJhZGdlQ2xhc3MsXG4gICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICB1bmluZm9ybWVkLFxuICAgICAgICAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gICAgICAgICAgICB0b29sdGlwOiB0aGlzLmdldENvbHVtblRvb2x0aXAoY29sdW1uLnRvb2x0aXApLFxuICAgICAgICAgICAgb25MaW5rQ2xpY2s6IGNvbHVtbi5vbkxpbmtDbGljayxcbiAgICAgICAgICAgIG9uQ29sdW1uQ2xpY2s6IGNvbHVtbi5vbkNvbHVtbkNsaWNrXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCYWRnZUNsYXNzKHZhbHVlOiBzdHJpbmcsIGJhZGdlQ29uZmlnczogQmFkZ2VDb25maWdzW10pOiBCYWRnZUNvbHVtbiB7XG4gICAgICAgIGNvbnN0IGJhZGdlQ29sdW1uID0ge1xuICAgICAgICAgICAgXCJzZHMtYmFkZ2VcIjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb2xvciA9ICBiYWRnZUNvbmZpZ3MuZmluZChiYWRnZUNvbmZpZyA9PiBiYWRnZUNvbmZpZy5lbnVtVmFsdWUgPT09IHZhbHVlKT8uY29sb3IudmFsdWVPZigpO1xuICAgICAgICBiYWRnZUNvbHVtbltjb2xvcl0gPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBiYWRnZUNvbHVtbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblNjYWxlKHNjYWxlOiBudW1iZXIgfCAoKHJvd1ZhbHVlOiBhbnkpID0+IG51bWJlcikpOiBudW1iZXIge1xuICAgICAgICBpZiAodHlwZW9mIHNjYWxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FsZSh0aGlzLnJvd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5Ub29sdGlwKHRvb2x0aXA6IHN0cmluZyB8ICgocm93VmFsdWU6IGFueSkgPT4gc3RyaW5nKSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0b29sdGlwICE9PSB1bmRlZmluZWQgJiYgdG9vbHRpcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b29sdGlwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHRpcCh0aGlzLnJvd1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b29sdGlwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKG5ldyBCaWdOdW1iZXIodmFsdWUpLmlzTmFOKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VG9rZW5zKHZhbHVlczogYW55KTogSVRva2VuW10ge1xuICAgICAgICBpZiAoIXRoaXMuaXNBcnJheSh2YWx1ZXMpKSB0aHJvdyBuZXcgRXJyb3IoXCJUbyB1c2UgdG9rZW5zIGFuIGFycmF5IG11c3QgYmUgaW5mb3JtZWRcIik7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkVG9rZW5BcnJheSh2YWx1ZXMpKSB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSB2YWxpZCB0b2tlbiBhcnJheS4gVG9rZW4gYXJyYXkgbXVzdCBiZSBhIHByaW1pdGl2ZSB2YWx1ZXMgYXJyYXkgb3IgYW4gb2JqZWN0cyB3aXRoIGxhYmVsIGF0dHJpYnV0ZSBhcnJheVwiKTtcblxuICAgICAgICBpZiAodGhpcy5pc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzKSkgcmV0dXJuIHZhbHVlcztcblxuICAgICAgICByZXR1cm4gdmFsdWVzXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZTogYW55KSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgICAgLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdHlwZW9mIHZhbHVlID09PSBcInN5bWJvbFwiID8gdmFsdWUudG9TdHJpbmcoKSA6IGAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkVG9rZW5BcnJheSh2YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUHJpbWl0aXZlVmFsdWVzQXJyYXkodmFsdWVzKSB8fCB0aGlzLmlzTGFiZWxPYmplY3RBcnJheSh2YWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcmltaXRpdmVWYWx1ZXNBcnJheSh2YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBPYmplY3QodmFsdWUpKS5sZW5ndGggPT09IHZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZT8ubGFiZWwgIT09IG51bGwgJiYgdmFsdWU/LmxhYmVsICE9PSB1bmRlZmluZWQpLmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBcnJheSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3BsaXR0ZWRTdHJpbmcoY29sdW1uOiBDb2x1bW5WYWx1ZXMpOiB7IHZhbHVlOiBzdHJpbmcsIGlzVW5pbmZvcm1lZDogYm9vbGVhbiwgc2VwYXJhdG9yOiBzdHJpbmcgfVtdIHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5WYWx1ZSwgc2VwYXJhdG9yLCB1bmluZm9ybWVkIH0gPSBjb2x1bW47XG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkU3RyaW5nID0gY29sdW1uVmFsdWUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIHJldHVybiBzcGxpdHRlZFN0cmluZy5tYXAoKHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RJbmRleCA9IHNwbGl0dGVkU3RyaW5nLmxlbmd0aCAtIDEgPT09IGluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGlzVW5pbmZvcm1lZDogc3RyaW5nID09PSB1bmluZm9ybWVkLFxuICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3I6ICFpc0xhc3RJbmRleCA/IHNlcGFyYXRvciA6IFwiXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUVyQyxPQUFPLEVBRUgsZ0NBQWdDLEVBQ25DLE1BQU0sb0NBQW9DLENBQUM7QUFFNUMsT0FBTyxFQUtILG1CQUFtQixFQUV0QixNQUFNLFVBQVUsQ0FBQztBQU9sQixJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtJQVU5QixZQUNxQixnQkFBa0MsRUFDbEMsU0FBMkIsRUFDZSxrQkFBc0M7UUFGaEYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUNlLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFMOUYscUJBQWdCLEdBQW1CLEVBQUUsQ0FBQztJQU0xQyxDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLDJCQUEyQixDQUFD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TSxFQUFFLElBQUksRUFBRSxDQUFDOzhEQUFtQztBQUV6RTtJQUFSLEtBQUssRUFBRTtzREFBb0I7QUFDbkI7SUFBUixLQUFLLEVBQUU7dURBQWdCO0FBQ2Y7SUFBUixLQUFLLEVBQUU7cURBQW1DO0FBTmxDLHFCQUFxQjtJQUxqQyxTQUFTLENBQUM7UUFDUCxtNkNBQTZDO1FBRTdDLFFBQVEsRUFBRSxpQkFBaUI7O0tBQzlCLENBQUM7SUFjTyxXQUFBLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0dBYnBDLHFCQUFxQixDQTBRakM7U0ExUVkscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IEluamVjdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgYXBwbHlNYXNrLCBNYXNrQ29uZmlnIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy9uZzItY3VycmVuY3ktbWFza1wiO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tIFwiYmlnbnVtYmVyLmpzXCI7XG5cbmltcG9ydCB7XG4gICAgSG9zdFByb2plY3RDb25maWdzLFxuICAgIEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuXG59IGZyb20gXCIuLi8uLi8uLi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlXCI7XG5pbXBvcnQgeyBJVG9rZW4gfSBmcm9tIFwiLi4vLi4vdG9rZW4tbGlzdFwiO1xuaW1wb3J0IHtcbiAgICBCYWRnZUNvbHVtbixcbiAgICBCYWRnZUNvbmZpZ3MsXG4gICAgQ29sdW1uLFxuICAgIENvbHVtblZhbHVlcyxcbiAgICBFbnVtQ29sdW1uRmllbGRUeXBlLFxuICAgIFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9uc1xufSBmcm9tIFwiLi9tb2RlbHNcIjtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6IFwiLi90YWJsZS1jb2x1bW5zLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3RhYmxlLWNvbHVtbnMuY29tcG9uZW50LnNjc3NcIl0sXG4gICAgc2VsZWN0b3I6IFwicy10YWJsZS1jb2x1bW5zXCIsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgICBAVmlld0NoaWxkKFwiY29sdW1uc1RlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pIGNvbHVtbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5bXTtcbiAgICBASW5wdXQoKSByb3dWYWx1ZSE6IGFueTtcbiAgICBASW5wdXQoKSBsb2NhbGUhOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnM7XG5cbiAgICBwdWJsaWMgZm9ybWF0dGVkQ29sdW1uczogQ29sdW1uVmFsdWVzW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGhvc3RQcm9qZWN0Q29uZmlnczogSG9zdFByb2plY3RDb25maWdzXG4gICAgKSB7fVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50QXR0cmlidXRlcyhjaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zVGVtcGxhdGUoY2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudEF0dHJpYnV0ZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIWNoYW5nZXMuY29sdW1ucz8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ2NvbHVtbnMnIGF0dHJpYnV0ZSBtdXN0IGJlIGluZm9ybWVkIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoYW5nZXMucm93VmFsdWU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdyb3dWYWx1ZScgYXR0cmlidXRlIG11c3QgYmUgaW5mb3JtZWQhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hhbmdlcy5sb2NhbGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdsb2NhbGUnIGF0dHJpYnV0ZSBtdXN0IGJlIGluZm9ybWVkIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29sdW1uc1RlbXBsYXRlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1uczogQ29sdW1uW10gPSBjaGFuZ2VzLmNvbHVtbnMuY3VycmVudFZhbHVlO1xuICAgICAgICBjb25zdCByb3dWYWx1ZTogb2JqZWN0ID0gY2hhbmdlcy5yb3dWYWx1ZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IGxvY2FsZTogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zID0gY2hhbmdlcy5sb2NhbGUuY3VycmVudFZhbHVlO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB0aGlzLmZvcm1hdHRlZENvbHVtbnMucHVzaCh0aGlzLmdldENvbHVtblZhbHVlKGNvbHVtbiwgcm93VmFsdWUsIGxvY2FsZSkpKTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmNvbHVtbnNUZW1wbGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5TZXBhcmF0b3IoY29sdW1uOiBDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5zZXBhcmF0b3IgPyBjb2x1bW4uc2VwYXJhdG9yIDogXCIgLSBcIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0aW9uUHJlZml4KGNvbHVtbjogQ29sdW1uKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ucHJlZml4ID8gY29sdW1uLnByZWZpeCA6IGAke3RoaXMuaG9zdFByb2plY3RDb25maWdzLmRvbWFpbn0uJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5zZXJ2aWNlfS5gO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBdHRyaWJ1dGVWYWx1ZUludmFsaWQoYXR0cmlidXRlVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWUgPT09IG51bGwgfHwgYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fCAodGhpcy5pc0FycmF5KGF0dHJpYnV0ZVZhbHVlKSAmJiAhYXR0cmlidXRlVmFsdWUubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm1hdHRlZENvbHVtblZhbHVlKGNvbHVtbjogQ29sdW1uLCBjb2x1bW5WYWx1ZTogYW55W10sIHVuaWZpZWRDb2x1bW5WYWx1ZXM6IHN0cmluZyxcbiAgICAgICAgdW5pbmZvcm1lZFRleHQ6IHN0cmluZywgdW5pbmZvcm1lZE51bWJlcjogbnVtYmVyKSB7XG5cbiAgICAgICAgaWYgKHVuaW5mb3JtZWROdW1iZXIgPT09IGNvbHVtbi5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaW5mb3JtZWRUZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFbnVtQ29sdW1uRmllbGRUeXBlLlRPS0VOUykge1xuICAgICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgY29sdW1uVmFsdWUuZmlsdGVyKHZhbHVlcyA9PiB2YWx1ZXMgIT09IHVuaW5mb3JtZWRUZXh0KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5pZmllZENvbHVtblZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZTogc3RyaW5nLCByb3dWYWx1ZTogb2JqZWN0KSB7XG4gICAgICAgIGxldCBhdHRyaWJ1dGVWYWx1ZSE6IGFueTtcblxuICAgICAgICBhdHRyaWJ1dGVcbiAgICAgICAgICAgIC5zcGxpdChcIi9cIilcbiAgICAgICAgICAgIC5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHZhbDogc3RyaW5nLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSByb3dWYWx1ZVt2YWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZVt2YWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROdW1iZXJDb25maWdzKGNvbHVtbjogQ29sdW1uLCBsb2NhbGU6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyk6IE1hc2tDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ubG9jYWxlLm51bWJlcixcbiAgICAgICAgICAgIHNjYWxlOiBjb2x1bW4uc2NhbGUgIT09IG51bGwgJiYgY29sdW1uLnNjYWxlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0Q29sdW1uU2NhbGUoY29sdW1uLnNjYWxlKVxuICAgICAgICAgICAgICAgIDogbG9jYWxlLm51bWJlci5zY2FsZSxcbiAgICAgICAgICAgIHByZWZpeDogYCR7bG9jYWxlLm51bWJlci5jdXJyZW5jeVN5bWJvbH0gYFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0ZUZvcm1hdChjb2x1bW46IENvbHVtbiwgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5kYXRlRm9ybWF0ID8gY29sdW1uLmRhdGVGb3JtYXQgOiBsb2NhbGUuY2FsZW5kYXIuZGF0ZUZvcm1hdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblZhbHVlKGNvbHVtbjogQ29sdW1uLCByb3dWYWx1ZTogb2JqZWN0LCBsb2NhbGU6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyk6IENvbHVtblZhbHVlcyB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0VHJhbnNsYXRpb25QcmVmaXgoY29sdW1uKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5nZXRDb2x1bW5TZXBhcmF0b3IoY29sdW1uKTtcbiAgICAgICAgY29uc3QgdW5pbmZvcm1lZCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJlZml4ICsgXCJlbXB0eV9sYWJlbFwiKTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjb2x1bW4uc3R5bGU7XG4gICAgICAgIGxldCBiYWRnZUNsYXNzOiBCYWRnZUNvbHVtbiA9IHtcbiAgICAgICAgICAgIFwic2RzLWJhZGdlXCI6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWU6IGFueVtdID0gY29sdW1uLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC5tYXAoKGF0dHJpYnV0ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSwgcm93VmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGVWYWx1ZUludmFsaWQoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmluZm9ybWVkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckNvbmZpZ3MgPSB0aGlzLmdldE51bWJlckNvbmZpZ3MoY29sdW1uLCBsb2NhbGUpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuRU5VTTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uYmFkZ2VDb25maWdzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRnZUNsYXNzID0gdGhpcy5nZXRCYWRnZUNsYXNzKGF0dHJpYnV0ZVZhbHVlLCBjb2x1bW4uYmFkZ2VDb25maWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGNvbHVtbi5lbnVtUHJlZml4ICsgYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuQ1VSUkVOQ1k6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlNYXNrKGF0dHJpYnV0ZVZhbHVlLCBudW1iZXJDb25maWdzLCB0aGlzLmlzTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkRBVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gdGhpcy5nZXREYXRlRm9ybWF0KGNvbHVtbiwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQoYXR0cmlidXRlVmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0KTtcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlVmFsdWUgPyBcInllc1wiIDogXCJub1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJlZml4ICsgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJDb25maWdzLnByZWZpeCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlNYXNrKGF0dHJpYnV0ZVZhbHVlLCBudW1iZXJDb25maWdzLCB0aGlzLmlzTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLlRPS0VOUzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRva2VucyhhdHRyaWJ1dGVWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1bmlmaWVkQ29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWUuam9pbihzZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCB1bmluZm9ybWVkTnVtYmVyID0gdW5pZmllZENvbHVtblZhbHVlc1xuICAgICAgICAgICAgLnNwbGl0KHNlcGFyYXRvcilcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUgPT09IHVuaW5mb3JtZWQpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkQ29sdW1uVmFsdWUgPSB0aGlzLmdldEZvcm1hdHRlZENvbHVtblZhbHVlKGNvbHVtbiwgY29sdW1uVmFsdWUsIHVuaWZpZWRDb2x1bW5WYWx1ZXMsIHVuaW5mb3JtZWQsIHVuaW5mb3JtZWROdW1iZXIpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIGNvbHVtblZhbHVlOiBmb3JtYXR0ZWRDb2x1bW5WYWx1ZSxcbiAgICAgICAgICAgIGJhZGdlQ2xhc3MsXG4gICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICB1bmluZm9ybWVkLFxuICAgICAgICAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gICAgICAgICAgICB0b29sdGlwOiB0aGlzLmdldENvbHVtblRvb2x0aXAoY29sdW1uLnRvb2x0aXApLFxuICAgICAgICAgICAgb25MaW5rQ2xpY2s6IGNvbHVtbi5vbkxpbmtDbGljayxcbiAgICAgICAgICAgIG9uQ29sdW1uQ2xpY2s6IGNvbHVtbi5vbkNvbHVtbkNsaWNrXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCYWRnZUNsYXNzKHZhbHVlOiBzdHJpbmcsIGJhZGdlQ29uZmlnczogQmFkZ2VDb25maWdzW10pOiBCYWRnZUNvbHVtbiB7XG4gICAgICAgIGNvbnN0IGJhZGdlQ29sdW1uID0ge1xuICAgICAgICAgICAgXCJzZHMtYmFkZ2VcIjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjb2xvciA9ICBiYWRnZUNvbmZpZ3MuZmluZChiYWRnZUNvbmZpZyA9PiBiYWRnZUNvbmZpZy5lbnVtVmFsdWUgPT09IHZhbHVlKT8uY29sb3IudmFsdWVPZigpO1xuICAgICAgICBiYWRnZUNvbHVtbltjb2xvcl0gPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBiYWRnZUNvbHVtbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblNjYWxlKHNjYWxlOiBudW1iZXIgfCAoKHJvd1ZhbHVlOiBhbnkpID0+IG51bWJlcikpOiBudW1iZXIge1xuICAgICAgICBpZiAodHlwZW9mIHNjYWxlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FsZSh0aGlzLnJvd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5Ub29sdGlwKHRvb2x0aXA6IHN0cmluZyB8ICgocm93VmFsdWU6IGFueSkgPT4gc3RyaW5nKSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0b29sdGlwICE9PSB1bmRlZmluZWQgJiYgdG9vbHRpcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b29sdGlwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHRpcCh0aGlzLnJvd1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b29sdGlwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIShuZXcgQmlnTnVtYmVyKHZhbHVlKS5pc05hTigpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRva2Vucyh2YWx1ZXM6IGFueSk6IElUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVG8gdXNlIHRva2VucyBhbiBhcnJheSBtdXN0IGJlIGluZm9ybWVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRUb2tlbkFycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBhIHZhbGlkIHRva2VuIGFycmF5LiBNdXN0IGJlIGEgcHJpbWl0aXZlIHZhbHVlcyBhcnJheSBvciBhbiBvYmplY3RzIHdpdGggbGFiZWwgYXR0cmlidXRlIGFycmF5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMYWJlbE9iamVjdEFycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWVzXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZTogYW55KSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgICAgLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdHlwZW9mIHZhbHVlID09PSBcInN5bWJvbFwiID8gdmFsdWUudG9TdHJpbmcoKSA6IGAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkVG9rZW5BcnJheSh2YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUHJpbWl0aXZlVmFsdWVzQXJyYXkodmFsdWVzKSB8fCB0aGlzLmlzTGFiZWxPYmplY3RBcnJheSh2YWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcmltaXRpdmVWYWx1ZXNBcnJheSh2YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBPYmplY3QodmFsdWUpKS5sZW5ndGggPT09IHZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZT8ubGFiZWwgIT09IG51bGwgJiYgdmFsdWU/LmxhYmVsICE9PSB1bmRlZmluZWQpLmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBcnJheSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3BsaXR0ZWRTdHJpbmcoY29sdW1uOiBDb2x1bW5WYWx1ZXMpOiB7IHZhbHVlOiBzdHJpbmcsIGlzVW5pbmZvcm1lZDogYm9vbGVhbiwgc2VwYXJhdG9yOiBzdHJpbmcgfVtdIHtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5WYWx1ZSwgc2VwYXJhdG9yLCB1bmluZm9ybWVkIH0gPSBjb2x1bW47XG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkU3RyaW5nID0gY29sdW1uVmFsdWUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIHJldHVybiBzcGxpdHRlZFN0cmluZy5tYXAoKHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RJbmRleCA9IHNwbGl0dGVkU3RyaW5nLmxlbmd0aCAtIDEgPT09IGluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGlzVW5pbmZvcm1lZDogc3RyaW5nID09PSB1bmluZm9ybWVkLFxuICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3I6ICFpc0xhc3RJbmRleCA/IHNlcGFyYXRvciA6IFwiXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=
|