@mediusinc/mng-commons-audit 3.0.0-rc.1 → 3.0.0-rc.11
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/assets/i18n/en.json +17 -1
- package/assets/i18n/sl.json +18 -2
- package/esm2022/lib/api/models/entityChange.mjs +9 -9
- package/esm2022/lib/api/models/guiEntityModel.mjs +9 -9
- package/esm2022/lib/api/models/guiPropertyModel.mjs +9 -9
- package/esm2022/lib/api/models/guiPropertyType.mjs +12 -12
- package/esm2022/lib/api/models/guiRelationModel.mjs +9 -9
- package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +9 -9
- package/esm2022/lib/api/models/revEntityWithStateDto.mjs +9 -9
- package/esm2022/lib/api/models/revisionType.mjs +8 -8
- package/esm2022/lib/api/services/audit-revisions-api.service.mjs +14 -10
- package/esm2022/lib/api/services/audit.service.mjs +3 -3
- package/esm2022/lib/audit.routes.mjs +39 -21
- package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +59 -25
- package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions-page.component.mjs +70 -38
- package/esm2022/lib/components/pages/revisions/audit-revisions-page.component.mjs +34 -25
- package/esm2022/lib/models/entity-revision-change-state.model.mjs +8 -0
- package/esm2022/lib/models/entity-revision-changes.model.mjs +8 -0
- package/esm2022/lib/models/rev-entity-detailed.model.mjs +9 -0
- package/esm2022/lib/models/rev-entity.model.mjs +8 -0
- package/esm2022/lib/models/revEntityWithId.model.mjs +8 -7
- package/esm2022/lib/utils/audit.util.mjs +101 -187
- package/fesm2022/mediusinc-mng-commons-audit.mjs +402 -491
- package/fesm2022/mediusinc-mng-commons-audit.mjs.map +1 -1
- package/lib/api/models/entityChange.d.ts +3 -3
- package/lib/api/models/guiEntityModel.d.ts +3 -3
- package/lib/api/models/guiPropertyModel.d.ts +5 -5
- package/lib/api/models/guiPropertyType.d.ts +1 -1
- package/lib/api/models/guiRelationModel.d.ts +1 -1
- package/lib/api/models/revEntityWithChangesDto.d.ts +3 -3
- package/lib/api/models/revEntityWithStateDto.d.ts +3 -3
- package/lib/api/models/revisionType.d.ts +1 -1
- package/lib/api/services/audit-revisions-api.service.d.ts +7 -6
- package/lib/api/services/audit.service.d.ts +3 -3
- package/lib/audit.routes.d.ts +13 -1
- package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +6 -3
- package/lib/components/pages/entity-revisions/audit-entity-revisions-page.component.d.ts +12 -11
- package/lib/components/pages/revisions/audit-revisions-page.component.d.ts +9 -8
- package/lib/models/entity-revision-change-state.model.d.ts +6 -0
- package/lib/models/entity-revision-changes.model.d.ts +5 -0
- package/lib/models/rev-entity-detailed.model.d.ts +10 -0
- package/lib/models/rev-entity.model.d.ts +6 -0
- package/lib/models/revEntityWithId.model.d.ts +2 -2
- package/lib/utils/audit.util.d.ts +8 -4
- package/package.json +10 -2
- package/esm2022/lib/api/models/index.mjs +0 -9
- package/esm2022/lib/models/entity-changes.model.mjs +0 -8
- package/lib/api/models/index.d.ts +0 -8
- package/lib/models/entity-changes.model.d.ts +0 -4
|
@@ -1,226 +1,145 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
1
2
|
import { MediusFilterMatchType, ObjectSerializer } from '@mediusinc/mng-commons';
|
|
2
|
-
import {
|
|
3
|
+
import { MngGuiPropertyTypeDto } from '../api/models/guiPropertyType';
|
|
4
|
+
import { MngRevisionTypeDto } from '../api/models/revisionType';
|
|
3
5
|
import { NewMediusFilterMatchType } from '../models/new-filter-match-type.model';
|
|
4
6
|
export class AuditUtil {
|
|
5
|
-
static addColumnsFromModel(descriptor,
|
|
6
|
-
for (const property of
|
|
7
|
-
if (property.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
static addColumnsFromModel(descriptor, properties, modelType = undefined, addFilters = true, addSorts = true) {
|
|
8
|
+
for (const property of properties) {
|
|
9
|
+
if (!property.resolvedPropertyName) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
const columnPrepend = modelType ? `${modelType}.` : '';
|
|
13
|
+
const isEnum = property.propertyType === MngGuiPropertyTypeDto.Enum;
|
|
14
|
+
let column = null;
|
|
15
|
+
if (isEnum) {
|
|
16
|
+
if (!property.possibleEnumValues) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const enumType = AuditUtil.findEnumType(property);
|
|
20
|
+
if (enumType) {
|
|
21
|
+
column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asEnum(enumType);
|
|
22
|
+
if (addFilters) {
|
|
23
|
+
column.withFilterLookupEnum(property.possibleEnumValues);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName);
|
|
28
|
+
if (addFilters) {
|
|
29
|
+
(column?.withFilterLookup()).withLookup(() => of(property.possibleEnumValues ?? []));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
14
32
|
}
|
|
15
|
-
else if (property.propertyType ===
|
|
16
|
-
descriptor.addColumn(property.resolvedPropertyName).
|
|
33
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.Number) {
|
|
34
|
+
column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asNumber();
|
|
17
35
|
}
|
|
18
|
-
else if (property.propertyType ===
|
|
19
|
-
descriptor.addColumn(property.resolvedPropertyName).
|
|
36
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.Boolean) {
|
|
37
|
+
column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asBoolean();
|
|
20
38
|
}
|
|
21
|
-
else if (property.propertyType ===
|
|
22
|
-
descriptor.addColumn(property.resolvedPropertyName).
|
|
39
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.LocalDate) {
|
|
40
|
+
column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asDate('dd. MM yyyy');
|
|
23
41
|
}
|
|
24
|
-
else if (property.propertyType ===
|
|
25
|
-
descriptor.addColumn(property.resolvedPropertyName).
|
|
42
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.OffsetDateTime) {
|
|
43
|
+
column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
|
|
26
44
|
}
|
|
27
45
|
else {
|
|
28
46
|
// string / wildcard
|
|
29
|
-
descriptor.addColumn(property.resolvedPropertyName).
|
|
47
|
+
column = descriptor.addColumn(columnPrepend + property.resolvedPropertyName).withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
48
|
+
}
|
|
49
|
+
column.withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
50
|
+
if (!isEnum && addFilters) {
|
|
51
|
+
column?.withFilter();
|
|
52
|
+
}
|
|
53
|
+
if (addSorts) {
|
|
54
|
+
column?.withSort();
|
|
30
55
|
}
|
|
31
56
|
}
|
|
32
57
|
return descriptor;
|
|
33
58
|
}
|
|
34
|
-
static
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
59
|
+
static getPropertyTitleKey(property, modelType = undefined) {
|
|
60
|
+
if (modelType === 'revEntity') {
|
|
61
|
+
return 'MngRevEntity.properties.' + property.resolvedPropertyName;
|
|
62
|
+
}
|
|
63
|
+
return property.resolvedPropertyName ?? '';
|
|
64
|
+
}
|
|
65
|
+
static addFieldsFromModel(descriptor, properties, modelType = 'revEntity') {
|
|
66
|
+
for (const property of properties) {
|
|
67
|
+
if (!property.resolvedPropertyName) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const fieldPrepend = `${modelType}.`;
|
|
71
|
+
if (property.propertyType === MngGuiPropertyTypeDto.Enum) {
|
|
72
|
+
const enumType = AuditUtil.findEnumType(property);
|
|
73
|
+
if (enumType) {
|
|
74
|
+
if (!property.possibleEnumValues) {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
descriptor.addFieldLookupEnum(fieldPrepend + property.resolvedPropertyName, enumType, property.possibleEnumValues).withDisabled();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
descriptor.addField(fieldPrepend + property.resolvedPropertyName).withLabel(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
81
|
+
}
|
|
41
82
|
}
|
|
42
|
-
else if (property.propertyType ===
|
|
83
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.Number) {
|
|
43
84
|
descriptor
|
|
44
|
-
.addField(
|
|
45
|
-
.withLabel(property
|
|
85
|
+
.addField(fieldPrepend + property.resolvedPropertyName)
|
|
86
|
+
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
46
87
|
.asNumber()
|
|
47
88
|
.withDisabled();
|
|
48
89
|
}
|
|
49
|
-
else if (property.propertyType ===
|
|
90
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.Boolean) {
|
|
50
91
|
descriptor
|
|
51
|
-
.addField(
|
|
52
|
-
.withLabel(property
|
|
92
|
+
.addField(fieldPrepend + property.resolvedPropertyName)
|
|
93
|
+
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
53
94
|
.withDisabled();
|
|
54
95
|
}
|
|
55
|
-
else if (property.propertyType ===
|
|
96
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.LocalDate) {
|
|
56
97
|
descriptor
|
|
57
|
-
.addField(
|
|
58
|
-
.withLabel(property
|
|
98
|
+
.addField(fieldPrepend + property.resolvedPropertyName)
|
|
99
|
+
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
59
100
|
.asDatePicker('dd. MMM yyyy')
|
|
60
101
|
.withDisabled();
|
|
61
102
|
}
|
|
62
|
-
else if (property.propertyType ===
|
|
103
|
+
else if (property.propertyType === MngGuiPropertyTypeDto.OffsetDateTime) {
|
|
63
104
|
descriptor
|
|
64
|
-
.addField(
|
|
65
|
-
.withLabel(property
|
|
105
|
+
.addField(fieldPrepend + property.resolvedPropertyName)
|
|
106
|
+
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
66
107
|
.asDatePicker('dd. MM yy', undefined, undefined, true, false)
|
|
67
108
|
.withDisabled();
|
|
68
109
|
}
|
|
69
110
|
else {
|
|
70
111
|
// string / wildcard
|
|
71
112
|
descriptor
|
|
72
|
-
.addField(
|
|
73
|
-
.withLabel(property
|
|
113
|
+
.addField(fieldPrepend + property.resolvedPropertyName)
|
|
114
|
+
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
74
115
|
.withDisabled();
|
|
75
116
|
}
|
|
76
117
|
}
|
|
77
118
|
return descriptor;
|
|
78
119
|
}
|
|
79
120
|
static buildDescriptorForEntityRevision(descriptor, revModel, entityModel) {
|
|
80
|
-
descriptor
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
.
|
|
84
|
-
.
|
|
85
|
-
descriptor.addFieldLookupEnum('revType', ObjectSerializer.get().findEnum('RevisionType'), [RevisionType.Add, RevisionType.Mod, RevisionType.Del]).withLabel('revType');
|
|
86
|
-
for (const property of revModel.properties) {
|
|
87
|
-
if (property.propertyType === GuiPropertyType.Enum) {
|
|
88
|
-
// TODO is there a nicer way than appending "Dto" at the end of the simple name to match
|
|
89
|
-
descriptor
|
|
90
|
-
.addColumn('revEntity.' + property.resolvedPropertyName)
|
|
91
|
-
.withTitle(property.resolvedPropertyName)
|
|
92
|
-
.asEnum(ObjectSerializer.get().findEnum(property.enumClassSimpleName + 'Dto'))
|
|
93
|
-
.withSort()
|
|
94
|
-
.withFilterLookupEnum(property.possibleEnumValues);
|
|
95
|
-
descriptor
|
|
96
|
-
.addFieldLookupEnum('revEntity.' + property.resolvedPropertyName, ObjectSerializer.get().findEnum(property.enumClassSimpleName + 'Dto'), property.possibleEnumValues)
|
|
97
|
-
.withLabel(property.resolvedPropertyName);
|
|
98
|
-
}
|
|
99
|
-
else if (property.propertyType === GuiPropertyType.Number) {
|
|
100
|
-
descriptor
|
|
101
|
-
.addColumn('revEntity.' + property.resolvedPropertyName)
|
|
102
|
-
.withTitle(property.resolvedPropertyName)
|
|
103
|
-
.asNumber()
|
|
104
|
-
.withSort()
|
|
105
|
-
.withFilter();
|
|
106
|
-
descriptor
|
|
107
|
-
.addField('revEntity.' + property.resolvedPropertyName)
|
|
108
|
-
.withLabel(property.resolvedPropertyName)
|
|
109
|
-
.asNumber();
|
|
110
|
-
}
|
|
111
|
-
else if (property.propertyType === GuiPropertyType.Boolean) {
|
|
112
|
-
descriptor
|
|
113
|
-
.addColumn('revEntity.' + property.resolvedPropertyName)
|
|
114
|
-
.withTitle(property.resolvedPropertyName)
|
|
115
|
-
.asBoolean()
|
|
116
|
-
.withSort()
|
|
117
|
-
.withFilter();
|
|
118
|
-
descriptor.addField('revEntity.' + property.resolvedPropertyName).withLabel(property.resolvedPropertyName);
|
|
119
|
-
}
|
|
120
|
-
else if (property.propertyType === GuiPropertyType.LocalDate) {
|
|
121
|
-
descriptor
|
|
122
|
-
.addColumn('revEntity.' + property.resolvedPropertyName)
|
|
123
|
-
.withTitle(property.resolvedPropertyName)
|
|
124
|
-
.asDate('dd. MMM yyyy')
|
|
125
|
-
.withSort()
|
|
126
|
-
.withFilter();
|
|
127
|
-
descriptor
|
|
128
|
-
.addField('revEntity.' + property.resolvedPropertyName)
|
|
129
|
-
.withLabel(property.resolvedPropertyName)
|
|
130
|
-
.asDatePicker('dd. MMM yyyy');
|
|
131
|
-
}
|
|
132
|
-
else if (property.propertyType === GuiPropertyType.OffsetDateTime) {
|
|
133
|
-
descriptor
|
|
134
|
-
.addColumn('revEntity.' + property.resolvedPropertyName)
|
|
135
|
-
.withTitle(property.resolvedPropertyName)
|
|
136
|
-
.asDate('dd. MMM yyyy HH:mm')
|
|
137
|
-
.withSort()
|
|
138
|
-
.withFilter();
|
|
139
|
-
descriptor
|
|
140
|
-
.addField('revEntity.' + property.resolvedPropertyName)
|
|
141
|
-
.withLabel(property.resolvedPropertyName)
|
|
142
|
-
.asDatePicker('dd. MM yy', undefined, undefined, true, false);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
// string / wildcard
|
|
146
|
-
descriptor
|
|
147
|
-
.addColumn('revEntity.' + property.resolvedPropertyName)
|
|
148
|
-
.withTitle(property.resolvedPropertyName)
|
|
149
|
-
.withSort()
|
|
150
|
-
.withFilter();
|
|
151
|
-
descriptor.addField('revEntity.' + property.resolvedPropertyName).withLabel(property.resolvedPropertyName);
|
|
152
|
-
}
|
|
121
|
+
descriptor.addColumn('revType').withTitle('MngEntityRevisionChangeState.properties.revType').asEnum(MngRevisionTypeDto).withFilter();
|
|
122
|
+
descriptor.addFieldLookupEnum('revType', MngRevisionTypeDto).withLabel('MngEntityRevisionChangeState.properties.revType');
|
|
123
|
+
if (revModel.properties) {
|
|
124
|
+
AuditUtil.addColumnsFromModel(descriptor.table, revModel.properties, 'revEntity');
|
|
125
|
+
AuditUtil.addFieldsFromModel(descriptor.detailsEditor, revModel.properties, 'revEntity');
|
|
153
126
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
descriptor
|
|
158
|
-
.addColumn('entityState.' + property.resolvedPropertyName)
|
|
159
|
-
.withTitle(property.resolvedPropertyName)
|
|
160
|
-
.asEnum(ObjectSerializer.get().findEnum(property.enumClassSimpleName + 'Dto'))
|
|
161
|
-
.withSort()
|
|
162
|
-
.withFilterLookupEnum(property.possibleEnumValues);
|
|
163
|
-
descriptor
|
|
164
|
-
.addFieldLookupEnum('entityState.' + property.resolvedPropertyName, ObjectSerializer.get().findEnum(property.enumClassSimpleName + 'Dto'), property.possibleEnumValues)
|
|
165
|
-
.withLabel(property.resolvedPropertyName);
|
|
166
|
-
}
|
|
167
|
-
else if (property.propertyType === GuiPropertyType.Number) {
|
|
168
|
-
descriptor
|
|
169
|
-
.addColumn('entityState.' + property.resolvedPropertyName)
|
|
170
|
-
.withTitle(property.resolvedPropertyName)
|
|
171
|
-
.asNumber()
|
|
172
|
-
.withSort()
|
|
173
|
-
.withFilter();
|
|
174
|
-
descriptor
|
|
175
|
-
.addField('entityState.' + property.resolvedPropertyName)
|
|
176
|
-
.withLabel(property.resolvedPropertyName)
|
|
177
|
-
.asNumber();
|
|
178
|
-
}
|
|
179
|
-
else if (property.propertyType === GuiPropertyType.Boolean) {
|
|
180
|
-
descriptor
|
|
181
|
-
.addColumn('entityState.' + property.resolvedPropertyName)
|
|
182
|
-
.withTitle(property.resolvedPropertyName)
|
|
183
|
-
.asBoolean()
|
|
184
|
-
.withSort()
|
|
185
|
-
.withFilter();
|
|
186
|
-
descriptor.addField('entityState.' + property.resolvedPropertyName).withLabel(property.resolvedPropertyName);
|
|
187
|
-
}
|
|
188
|
-
else if (property.propertyType === GuiPropertyType.LocalDate) {
|
|
189
|
-
descriptor
|
|
190
|
-
.addColumn('entityState.' + property.resolvedPropertyName)
|
|
191
|
-
.withTitle(property.resolvedPropertyName)
|
|
192
|
-
.asDate('dd. MMM yyyy')
|
|
193
|
-
.withSort()
|
|
194
|
-
.withFilter();
|
|
195
|
-
descriptor
|
|
196
|
-
.addField('entityState.' + property.resolvedPropertyName)
|
|
197
|
-
.withLabel(property.resolvedPropertyName)
|
|
198
|
-
.asDatePicker('dd. MMM yyyy');
|
|
199
|
-
}
|
|
200
|
-
else if (property.propertyType === GuiPropertyType.OffsetDateTime) {
|
|
201
|
-
descriptor
|
|
202
|
-
.addColumn('entityState.' + property.resolvedPropertyName)
|
|
203
|
-
.withTitle(property.resolvedPropertyName)
|
|
204
|
-
.asDate('dd. MMM yyyy HH:mm')
|
|
205
|
-
.withSort()
|
|
206
|
-
.withFilter();
|
|
207
|
-
descriptor
|
|
208
|
-
.addField('entityState.' + property.resolvedPropertyName)
|
|
209
|
-
.withLabel(property.resolvedPropertyName)
|
|
210
|
-
.asDatePicker('dd. MM yy', undefined, undefined, true, false);
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
// string / wildcard
|
|
214
|
-
descriptor
|
|
215
|
-
.addColumn('entityState.' + property.resolvedPropertyName)
|
|
216
|
-
.withTitle(property.resolvedPropertyName)
|
|
217
|
-
.withSort()
|
|
218
|
-
.withFilter();
|
|
219
|
-
descriptor.addField('entityState.' + property.resolvedPropertyName).withLabel(property.resolvedPropertyName);
|
|
220
|
-
}
|
|
127
|
+
if (entityModel.properties) {
|
|
128
|
+
AuditUtil.addColumnsFromModel(descriptor.table, entityModel.properties, 'entityState');
|
|
129
|
+
AuditUtil.addFieldsFromModel(descriptor.detailsEditor, entityModel.properties, 'entityState');
|
|
221
130
|
}
|
|
222
131
|
return descriptor;
|
|
223
132
|
}
|
|
133
|
+
static findEnumType(property) {
|
|
134
|
+
if (!property.enumClassSimpleName) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
let enumType = ObjectSerializer.get().findEnum(property.enumClassSimpleName);
|
|
138
|
+
if (!enumType) {
|
|
139
|
+
enumType = ObjectSerializer.get().findEnum(property.enumClassSimpleName + 'Dto');
|
|
140
|
+
}
|
|
141
|
+
return enumType;
|
|
142
|
+
}
|
|
224
143
|
static extractPropertyName(fullPropertyName) {
|
|
225
144
|
if (fullPropertyName?.includes('entityState.')) {
|
|
226
145
|
return fullPropertyName.replace('entityState.', '');
|
|
@@ -236,12 +155,7 @@ export class AuditUtil {
|
|
|
236
155
|
url += '&sorts=';
|
|
237
156
|
const sortingQPs = [];
|
|
238
157
|
for (let i = 0; i < queryParams.sortProperty.length; i++) {
|
|
239
|
-
|
|
240
|
-
sortingQPs.push(`asc:${this.extractPropertyName(queryParams.sortProperty[i])}`);
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
sortingQPs.push(`desc:${this.extractPropertyName(queryParams.sortProperty[i])}`);
|
|
244
|
-
}
|
|
158
|
+
sortingQPs.push(`${queryParams.sortAsc?.[i] ?? true ? 'asc' : 'desc'}:${this.extractPropertyName(queryParams.sortProperty[i])}`);
|
|
245
159
|
}
|
|
246
160
|
url += sortingQPs.join(',');
|
|
247
161
|
}
|
|
@@ -297,4 +211,4 @@ export class AuditUtil {
|
|
|
297
211
|
return url;
|
|
298
212
|
}
|
|
299
213
|
}
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYXVkaXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLHFCQUFxQixFQUFvQixnQkFBZ0IsRUFBdUMsTUFBTSx3QkFBd0IsQ0FBQztBQUV6SixPQUFPLEVBQW1DLGVBQWUsRUFBeUIsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRS9FLE1BQU0sT0FBTyxTQUFTO0lBQ1gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQWdDLEVBQUUsWUFBZ0M7UUFDaEcsS0FBSyxNQUFNLFFBQVEsSUFBSSxZQUFZLEVBQUU7WUFDakMsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hELHdGQUF3RjtnQkFDeEYsVUFBVTtxQkFDTCxTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFxQixDQUFDO3FCQUN6QyxRQUFRLEVBQUU7cUJBQ1YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLENBQUM7cUJBQzdFLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQzFEO2lCQUFNLElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUN6RCxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxvQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQzNGO2lCQUFNLElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxlQUFlLENBQUMsT0FBTyxFQUFFO2dCQUMxRCxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEs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SjtZQUNELEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDWCxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFZGl0b3JEZXNjcmlwdG9yLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE9iamVjdFNlcmlhbGl6ZXIsIFRhYmxlRGVzY3JpcHRvciwgVGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucyc7XG5cbmltcG9ydCB7R3VpRW50aXR5TW9kZWwsIEd1aVByb3BlcnR5TW9kZWwsIEd1aVByb3BlcnR5VHlwZSwgUmV2RW50aXR5V2l0aFN0YXRlRHRvLCBSZXZpc2lvblR5cGV9IGZyb20gJy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGV9IGZyb20gJy4uL21vZGVscy9uZXctZmlsdGVyLW1hdGNoLXR5cGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgQXVkaXRVdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIGFkZENvbHVtbnNGcm9tTW9kZWwoZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPGFueT4sIHByb3BlcnR5TGlzdDogR3VpUHJvcGVydHlNb2RlbFtdKTogVGFibGVEZXNjcmlwdG9yPGFueT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnR5TGlzdCkge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLkVudW0pIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIGlzIHRoZXJlIGEgbmljZXIgd2F5IHRoYW4gYXBwZW5kaW5nIFwiRHRvXCIgYXQgdGhlIGVuZCBvZiB0aGUgc2ltcGxlIG5hbWUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDb2x1bW4ocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFNvcnQoKVxuICAgICAgICAgICAgICAgICAgICAuYXNFbnVtKE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0ocHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSArICdEdG8nKSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhGaWx0ZXJMb29rdXBFbnVtKHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLk51bWJlcikge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkQ29sdW1uKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISkud2l0aFNvcnQoKS5hc051bWJlcigpLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkQ29sdW1uKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISkud2l0aFNvcnQoKS5hc0Jvb2xlYW4oKS53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLkxvY2FsRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkQ29sdW1uKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISkud2l0aFNvcnQoKS5hc0RhdGUoJ2RkLiBNTU0geXl5eScpLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGUuT2Zmc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmFkZENvbHVtbihwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpLndpdGhTb3J0KCkuYXNEYXRlKCdkZC4gTU1NIHl5eXkgSEg6bW0nKS53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHN0cmluZyAvIHdpbGRjYXJkXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRDb2x1bW4ocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKS53aXRoU29ydCgpLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZEZpZWxkc0Zyb21Nb2RlbDxUPihkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+LCByZXZNb2RlbDogR3VpRW50aXR5TW9kZWwpOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiByZXZNb2RlbC5wcm9wZXJ0aWVzISkge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLkVudW0pIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZExvb2t1cEVudW0oJ3JldkVudGl0eS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhLCBPYmplY3RTZXJpYWxpemVyLmdldCgpLmZpbmRFbnVtKHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUhKSwgcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZS5OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZCgncmV2RW50aXR5LicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAuYXNOdW1iZXIoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZCgncmV2RW50aXR5LicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLkxvY2FsRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkKCdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGVQaWNrZXIoJ2RkLiBNTU0geXl5eScpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGUuT2Zmc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZCgncmV2RW50aXR5LicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAuYXNEYXRlUGlja2VyKCdkZC4gTU0geXknLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSwgZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nIC8gd2lsZGNhcmRcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZCgncmV2RW50aXR5LicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBidWlsZERlc2NyaXB0b3JGb3JFbnRpdHlSZXZpc2lvbihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxSZXZFbnRpdHlXaXRoU3RhdGVEdG8+LFxuICAgICAgICByZXZNb2RlbDogR3VpRW50aXR5TW9kZWwsXG4gICAgICAgIGVudGl0eU1vZGVsOiBHdWlFbnRpdHlNb2RlbFxuICAgICk6IFRhYmxldmlld0Rlc2NyaXB0b3I8UmV2RW50aXR5V2l0aFN0YXRlRHRvPiB7XG4gICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgIC5hZGRDb2x1bW4oJ3JldlR5cGUnKVxuICAgICAgICAgICAgLndpdGhUaXRsZSgncmV2VHlwZScpXG4gICAgICAgICAgICAuYXNFbnVtKE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0oJ1JldmlzaW9uVHlwZScpKVxuICAgICAgICAgICAgLndpdGhGaWx0ZXJMb29rdXBFbnVtKFtSZXZpc2lvblR5cGUuQWRkLCBSZXZpc2lvblR5cGUuTW9kLCBSZXZpc2lvblR5cGUuRGVsXSk7XG4gICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGRMb29rdXBFbnVtKCdyZXZUeXBlJywgT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bSgnUmV2aXNpb25UeXBlJyksIFtSZXZpc2lvblR5cGUuQWRkLCBSZXZpc2lvblR5cGUuTW9kLCBSZXZpc2lvblR5cGUuRGVsXSkud2l0aExhYmVsKCdyZXZUeXBlJyk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcmV2TW9kZWwucHJvcGVydGllcyEpIHtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZS5FbnVtKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBpcyB0aGVyZSBhIG5pY2VyIHdheSB0aGFuIGFwcGVuZGluZyBcIkR0b1wiIGF0IHRoZSBlbmQgb2YgdGhlIHNpbXBsZSBuYW1lIHRvIG1hdGNoXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ29sdW1uKCdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhUaXRsZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc0VudW0oT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bShwcm9wZXJ0eS5lbnVtQ2xhc3NTaW1wbGVOYW1lICsgJ0R0bycpKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFNvcnQoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aEZpbHRlckxvb2t1cEVudW0ocHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKTtcblxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkTG9va3VwRW51bShcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0ocHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSEgKyAnRHRvJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLk51bWJlcikge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZENvbHVtbigncmV2RW50aXR5LicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoVGl0bGUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAuYXNOdW1iZXIoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFNvcnQoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkKCdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc051bWJlcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ29sdW1uKCdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhUaXRsZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc0Jvb2xlYW4oKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFNvcnQoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGQoJ3JldkVudGl0eS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKS53aXRoTGFiZWwocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGUuTG9jYWxEYXRlKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ29sdW1uKCdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhUaXRsZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGUoJ2RkLiBNTU0geXl5eScpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoU29ydCgpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoJ3JldkVudGl0eS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZVBpY2tlcignZGQuIE1NTSB5eXl5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLk9mZnNldERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ29sdW1uKCdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhUaXRsZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGUoJ2RkLiBNTU0geXl5eSBISDptbScpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoU29ydCgpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoJ3JldkVudGl0eS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZVBpY2tlcignZGQuIE1NIHl5JywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nIC8gd2lsZGNhcmRcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDb2x1bW4oJ3JldkVudGl0eS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFRpdGxlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhTb3J0KClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmFkZEZpZWxkKCdyZXZFbnRpdHkuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISkud2l0aExhYmVsKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBlbnRpdHlNb2RlbC5wcm9wZXJ0aWVzISkge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLkVudW0pIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIGlzIHRoZXJlIGEgbmljZXIgd2F5IHRoYW4gYXBwZW5kaW5nIFwiRHRvXCIgYXQgdGhlIGVuZCBvZiB0aGUgc2ltcGxlIG5hbWUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDb2x1bW4oJ2VudGl0eVN0YXRlLicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoVGl0bGUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAuYXNFbnVtKE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0ocHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSArICdEdG8nKSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhTb3J0KClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhGaWx0ZXJMb29rdXBFbnVtKHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGRMb29rdXBFbnVtKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VudGl0eVN0YXRlLicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEsXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RTZXJpYWxpemVyLmdldCgpLmZpbmRFbnVtKHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUhICsgJ0R0bycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZS5OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDb2x1bW4oJ2VudGl0eVN0YXRlLicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoVGl0bGUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAuYXNOdW1iZXIoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFNvcnQoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkKCdlbnRpdHlTdGF0ZS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLmFzTnVtYmVyKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDb2x1bW4oJ2VudGl0eVN0YXRlLicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoVGl0bGUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAuYXNCb29sZWFuKClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhTb3J0KClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmFkZEZpZWxkKCdlbnRpdHlTdGF0ZS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKS53aXRoTGFiZWwocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGUuTG9jYWxEYXRlKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ29sdW1uKCdlbnRpdHlTdGF0ZS4nICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFRpdGxlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZSgnZGQuIE1NTSB5eXl5JylcbiAgICAgICAgICAgICAgICAgICAgLndpdGhTb3J0KClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZCgnZW50aXR5U3RhdGUuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGVQaWNrZXIoJ2RkLiBNTU0geXl5eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZS5PZmZzZXREYXRlVGltZSkge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZENvbHVtbignZW50aXR5U3RhdGUuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhUaXRsZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGUoJ2RkLiBNTU0geXl5eSBISDptbScpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoU29ydCgpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoJ2VudGl0eVN0YXRlLicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUhKVxuICAgICAgICAgICAgICAgICAgICAuYXNEYXRlUGlja2VyKCdkZC4gTU0geXknLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcgLyB3aWxkY2FyZFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZENvbHVtbignZW50aXR5U3RhdGUuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhUaXRsZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSEpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoU29ydCgpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZCgnZW50aXR5U3RhdGUuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISkud2l0aExhYmVsKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lISk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZXh0cmFjdFByb3BlcnR5TmFtZShmdWxsUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoZnVsbFByb3BlcnR5TmFtZT8uaW5jbHVkZXMoJ2VudGl0eVN0YXRlLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVsbFByb3BlcnR5TmFtZS5yZXBsYWNlKCdlbnRpdHlTdGF0ZS4nLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZnVsbFByb3BlcnR5TmFtZT8uaW5jbHVkZXMoJ3JldkVudGl0eS4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWU/LnJlcGxhY2UoJ3JldkVudGl0eS4nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhcHBlbmRNZWRpdXNRdWVyeVBhcmFtc1RvVXJsKHF1ZXJ5UGFyYW1zOiBNZWRpdXNRdWVyeVBhcmFtKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHVybCA9IGA/Zmlyc3RSZXN1bHQ9JHtxdWVyeVBhcmFtcy5pdGVtc09mZnNldH0mbWF4UmVzdWx0cz0ke3F1ZXJ5UGFyYW1zLml0ZW1zUGVyUGFnZX1gO1xuICAgICAgICBpZiAocXVlcnlQYXJhbXMuc29ydFByb3BlcnR5ICYmIHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB1cmwgKz0gJyZzb3J0cz0nO1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZ1FQcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyeVBhcmFtcy5zb3J0UHJvcGVydHkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuc29ydEFzYyFbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgc29ydGluZ1FQcy5wdXNoKGBhc2M6JHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUocXVlcnlQYXJhbXMuc29ydFByb3BlcnR5W2ldKX1gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzb3J0aW5nUVBzLnB1c2goYGRlc2M6JHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUocXVlcnlQYXJhbXMuc29ydFByb3BlcnR5W2ldKX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgKz0gc29ydGluZ1FQcy5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLmZpbHRlclBhcmFtcyAmJiBxdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUVBzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1mcCBvZiBxdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1mcC5maWx0ZXJNYXRjaFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzfToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFsczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFsc306JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Gcm9tVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5CZXR3ZWVufToke21mcC5maWx0ZXJWYWx1ZX0sJHttZnAuZmlsdGVyVmFsdWVUb31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQ29udGFpbnN9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU3RhcnRzV2l0aDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlN0YXJ0c1dpdGh9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRW5kc1dpdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aH06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Jbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLklufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEluOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90SW59OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5MZXNzVGhhbn06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXJsICs9ICcmJztcbiAgICAgICAgICAgIHVybCArPSBmaWx0ZXJRUHMuam9pbignJicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxufVxuIl19
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYXVkaXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFJSCxxQkFBcUIsRUFFckIsZ0JBQWdCLEVBR25CLE1BQU0sd0JBQXdCLENBQUM7QUFJaEMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFcEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsTUFBTSxPQUFPLFNBQVM7SUFDWCxNQUFNLENBQUMsbUJBQW1CLENBQzdCLFVBQThCLEVBQzlCLFVBQW9DLEVBQ3BDLFlBQXFELFNBQVMsRUFDOUQsVUFBVSxHQUFHLElBQUksRUFDakIsUUFBUSxHQUFHLElBQUk7UUFFZixLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRTtZQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFO2dCQUNoQyxTQUFTO2FBQ1o7WUFFRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUV2RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxLQUFLLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUNwRSxJQUFJLE1BQU0sR0FBdUMsSUFBSSxDQUFDO1lBQ3RELElBQUksTUFBTSxFQUFFO2dCQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUU7b0JBQzlCLFNBQVM7aUJBQ1o7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxR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QUFLLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNwQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7d0JBQ3ZILE1BQU07cUJBQ1Q7aUJBQ0o7YUFDSjtZQUNELEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDWCxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQ29sdW1uRGVzY3JpcHRvcixcbiAgICBFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsXG4gICAgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLFxuICAgIE1lZGl1c1F1ZXJ5UGFyYW0sXG4gICAgT2JqZWN0U2VyaWFsaXplcixcbiAgICBUYWJsZURlc2NyaXB0b3IsXG4gICAgVGFibGV2aWV3RGVzY3JpcHRvclxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zJztcblxuaW1wb3J0IHtNbmdHdWlFbnRpdHlNb2RlbER0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlFbnRpdHlNb2RlbCc7XG5pbXBvcnQge01uZ0d1aVByb3BlcnR5TW9kZWxEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZ3VpUHJvcGVydHlNb2RlbCc7XG5pbXBvcnQge01uZ0d1aVByb3BlcnR5VHlwZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9ndWlQcm9wZXJ0eVR5cGUnO1xuaW1wb3J0IHtNbmdSZXZFbnRpdHlXaXRoU3RhdGVEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvcmV2RW50aXR5V2l0aFN0YXRlRHRvJztcbmltcG9ydCB7TW5nUmV2aXNpb25UeXBlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL3JldmlzaW9uVHlwZSc7XG5pbXBvcnQge05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZX0gZnJvbSAnLi4vbW9kZWxzL25ldy1maWx0ZXItbWF0Y2gtdHlwZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBBdWRpdFV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgYWRkQ29sdW1uc0Zyb21Nb2RlbDxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwcm9wZXJ0aWVzOiBNbmdHdWlQcm9wZXJ0eU1vZGVsRHRvW10sXG4gICAgICAgIG1vZGVsVHlwZTogJ3JldkVudGl0eScgfCAnZW50aXR5U3RhdGUnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgICAgICBhZGRGaWx0ZXJzID0gdHJ1ZSxcbiAgICAgICAgYWRkU29ydHMgPSB0cnVlXG4gICAgKTogVGFibGVEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblByZXBlbmQgPSBtb2RlbFR5cGUgPyBgJHttb2RlbFR5cGV9LmAgOiAnJztcblxuICAgICAgICAgICAgY29uc3QgaXNFbnVtID0gcHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bTtcbiAgICAgICAgICAgIGxldCBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8c3RyaW5nLCBUPiB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzRW51bSkge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gQXVkaXRVdGlsLmZpbmRFbnVtVHlwZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKGVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uKGNvbHVtblByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNFbnVtKGVudW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoRmlsdGVyTG9va3VwRW51bShwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4oY29sdW1uUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW4/LndpdGhGaWx0ZXJMb29rdXAoKSBhcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPHN0cmluZz4pLndpdGhMb29rdXAoKCkgPT4gb2YocHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzID8/IFtdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLk51bWJlcikge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uKGNvbHVtblByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNOdW1iZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uKGNvbHVtblByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNCb29sZWFuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLkxvY2FsRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uKGNvbHVtblByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNEYXRlKCdkZC4gTU0geXl5eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IE1uZ0d1aVByb3BlcnR5VHlwZUR0by5PZmZzZXREYXRlVGltZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uKGNvbHVtblByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNEYXRlKCdkZC4gTU0geXl5eSBISDptbScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcgLyB3aWxkY2FyZFxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uKGNvbHVtblByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkud2l0aFRpdGxlKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29sdW1uLndpdGhUaXRsZShBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSk7XG5cbiAgICAgICAgICAgIGlmICghaXNFbnVtICYmIGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4/LndpdGhGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhZGRTb3J0cykge1xuICAgICAgICAgICAgICAgIGNvbHVtbj8ud2l0aFNvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHk6IE1uZ0d1aVByb3BlcnR5TW9kZWxEdG8sIG1vZGVsVHlwZTogJ3JldkVudGl0eScgfCAnZW50aXR5U3RhdGUnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChtb2RlbFR5cGUgPT09ICdyZXZFbnRpdHknKSB7XG4gICAgICAgICAgICByZXR1cm4gJ01uZ1JldkVudGl0eS5wcm9wZXJ0aWVzLicgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUgPz8gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGRGaWVsZHNGcm9tTW9kZWw8VD4oXG4gICAgICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIHByb3BlcnRpZXM6IE1uZ0d1aVByb3BlcnR5TW9kZWxEdG9bXSxcbiAgICAgICAgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgPSAncmV2RW50aXR5J1xuICAgICk6IEVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmllbGRQcmVwZW5kID0gYCR7bW9kZWxUeXBlfS5gO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gQXVkaXRVdGlsLmZpbmRFbnVtVHlwZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKGVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGRMb29rdXBFbnVtKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lLCBlbnVtVHlwZSwgcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKS53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmFkZEZpZWxkKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5hc051bWJlcigpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBNbmdHdWlQcm9wZXJ0eVR5cGVEdG8uQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLkxvY2FsRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAuYXNEYXRlUGlja2VyKCdkZC4gTU1NIHl5eXknKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gTW5nR3VpUHJvcGVydHlUeXBlRHRvLk9mZnNldERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuYWRkRmllbGQoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpXG4gICAgICAgICAgICAgICAgICAgIC5hc0RhdGVQaWNrZXIoJ2RkLiBNTSB5eScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcgLyB3aWxkY2FyZFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBidWlsZERlc2NyaXB0b3JGb3JFbnRpdHlSZXZpc2lvbihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxNbmdSZXZFbnRpdHlXaXRoU3RhdGVEdG8+LFxuICAgICAgICByZXZNb2RlbDogTW5nR3VpRW50aXR5TW9kZWxEdG8sXG4gICAgICAgIGVudGl0eU1vZGVsOiBNbmdHdWlFbnRpdHlNb2RlbER0b1xuICAgICk6IFRhYmxldmlld0Rlc2NyaXB0b3I8TW5nUmV2RW50aXR5V2l0aFN0YXRlRHRvPiB7XG4gICAgICAgIGRlc2NyaXB0b3IuYWRkQ29sdW1uKCdyZXZUeXBlJykud2l0aFRpdGxlKCdNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlLnByb3BlcnRpZXMucmV2VHlwZScpLmFzRW51bShNbmdSZXZpc2lvblR5cGVEdG8pLndpdGhGaWx0ZXIoKTtcbiAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW0oJ3JldlR5cGUnLCBNbmdSZXZpc2lvblR5cGVEdG8pLndpdGhMYWJlbCgnTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZS5wcm9wZXJ0aWVzLnJldlR5cGUnKTtcblxuICAgICAgICBpZiAocmV2TW9kZWwucHJvcGVydGllcykge1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZENvbHVtbnNGcm9tTW9kZWwoZGVzY3JpcHRvci50YWJsZSwgcmV2TW9kZWwucHJvcGVydGllcywgJ3JldkVudGl0eScpO1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZEZpZWxkc0Zyb21Nb2RlbChkZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsIHJldk1vZGVsLnByb3BlcnRpZXMsICdyZXZFbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50aXR5TW9kZWwucHJvcGVydGllcykge1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZENvbHVtbnNGcm9tTW9kZWwoZGVzY3JpcHRvci50YWJsZSwgZW50aXR5TW9kZWwucHJvcGVydGllcywgJ2VudGl0eVN0YXRlJyk7XG4gICAgICAgICAgICBBdWRpdFV0aWwuYWRkRmllbGRzRnJvbU1vZGVsKGRlc2NyaXB0b3IuZGV0YWlsc0VkaXRvciwgZW50aXR5TW9kZWwucHJvcGVydGllcywgJ2VudGl0eVN0YXRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBmaW5kRW51bVR5cGUocHJvcGVydHk6IE1uZ0d1aVByb3BlcnR5TW9kZWxEdG8pIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eS5lbnVtQ2xhc3NTaW1wbGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVudW1UeXBlID0gT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bShwcm9wZXJ0eS5lbnVtQ2xhc3NTaW1wbGVOYW1lKTtcbiAgICAgICAgaWYgKCFlbnVtVHlwZSkge1xuICAgICAgICAgICAgZW51bVR5cGUgPSBPYmplY3RTZXJpYWxpemVyLmdldCgpLmZpbmRFbnVtKHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUgKyAnRHRvJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1UeXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGV4dHJhY3RQcm9wZXJ0eU5hbWUoZnVsbFByb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdlbnRpdHlTdGF0ZS4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWUucmVwbGFjZSgnZW50aXR5U3RhdGUuJywgJycpO1xuICAgICAgICB9IGVsc2UgaWYgKGZ1bGxQcm9wZXJ0eU5hbWU/LmluY2x1ZGVzKCdyZXZFbnRpdHkuJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lPy5yZXBsYWNlKCdyZXZFbnRpdHkuJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdWxsUHJvcGVydHlOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXBwZW5kTWVkaXVzUXVlcnlQYXJhbXNUb1VybChxdWVyeVBhcmFtczogTWVkaXVzUXVlcnlQYXJhbSk6IHN0cmluZyB7XG4gICAgICAgIGxldCB1cmwgPSBgP2ZpcnN0UmVzdWx0PSR7cXVlcnlQYXJhbXMuaXRlbXNPZmZzZXR9Jm1heFJlc3VsdHM9JHtxdWVyeVBhcmFtcy5pdGVtc1BlclBhZ2V9YDtcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eSAmJiBxdWVyeVBhcmFtcy5zb3J0UHJvcGVydHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXJsICs9ICcmc29ydHM9JztcbiAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdRUHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlQYXJhbXMuc29ydFByb3BlcnR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc29ydGluZ1FQcy5wdXNoKGAke3F1ZXJ5UGFyYW1zLnNvcnRBc2M/LltpXSA/PyB0cnVlID8gJ2FzYycgOiAnZGVzYyd9OiR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKHF1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eVtpXSl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgKz0gc29ydGluZ1FQcy5qb2luKCcsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLmZpbHRlclBhcmFtcyAmJiBxdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyUVBzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1mcCBvZiBxdWVyeVBhcmFtcy5maWx0ZXJQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1mcC5maWx0ZXJNYXRjaFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzfToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFsczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEVxdWFsc306JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Gcm9tVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5CZXR3ZWVufToke21mcC5maWx0ZXJWYWx1ZX0sJHttZnAuZmlsdGVyVmFsdWVUb31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuQ29udGFpbnN9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU3RhcnRzV2l0aDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlN0YXJ0c1dpdGh9OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRW5kc1dpdGg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aH06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Jbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLklufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLk5vdEluOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJRUHMucHVzaChgJHt0aGlzLmV4dHJhY3RQcm9wZXJ0eU5hbWUobWZwLnByb3BlcnR5KX09JHtOZXdNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90SW59OiR7bWZwLmZpbHRlclZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclFQcy5wdXNoKGAke3RoaXMuZXh0cmFjdFByb3BlcnR5TmFtZShtZnAucHJvcGVydHkpfT0ke05ld01lZGl1c0ZpbHRlck1hdGNoVHlwZS5MZXNzVGhhbn06JHttZnAuZmlsdGVyVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUVBzLnB1c2goYCR7dGhpcy5leHRyYWN0UHJvcGVydHlOYW1lKG1mcC5wcm9wZXJ0eSl9PSR7TmV3TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFufToke21mcC5maWx0ZXJWYWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXJsICs9ICcmJztcbiAgICAgICAgICAgIHVybCArPSBmaWx0ZXJRUHMuam9pbignJicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxufVxuIl19
|