@seniorsistemas/exclusion-process-component 0.2.1-d6a79e93-16a1-4705-a52d-6a12a465c189 → 0.3.0
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-exclusion-process-component.umd.js +96 -66
- package/bundles/seniorsistemas-exclusion-process-component.umd.js.map +1 -1
- package/bundles/seniorsistemas-exclusion-process-component.umd.min.js +2 -2
- package/bundles/seniorsistemas-exclusion-process-component.umd.min.js.map +1 -1
- package/esm2015/exclusion-details/exclusion-details.component.js +82 -64
- package/esm2015/exclusions-list/exclusions-list.component.js +14 -5
- package/esm5/exclusion-details/exclusion-details.component.js +87 -66
- package/esm5/exclusions-list/exclusions-list.component.js +14 -5
- package/exclusion-details/exclusion-details.component.d.ts +11 -11
- package/exclusions-list/exclusions-list.component.d.ts +3 -2
- package/fesm2015/seniorsistemas-exclusion-process-component.js +94 -67
- package/fesm2015/seniorsistemas-exclusion-process-component.js.map +1 -1
- package/fesm5/seniorsistemas-exclusion-process-component.js +98 -68
- package/fesm5/seniorsistemas-exclusion-process-component.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-exclusion-process-component.metadata.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import * as moment from "moment";
|
|
3
3
|
import { Component, Output, ViewEncapsulation } from "@angular/core";
|
|
4
|
-
import { ActivatedRoute
|
|
4
|
+
import { ActivatedRoute } from "@angular/router";
|
|
5
5
|
import { TranslateService } from "@ngx-translate/core";
|
|
6
6
|
import { Subject } from "rxjs";
|
|
7
7
|
import { finalize, takeUntil } from "rxjs/operators";
|
|
@@ -10,18 +10,36 @@ import { WebsocketService } from "@senior-gestao-empresarial/angular-components"
|
|
|
10
10
|
import { EnumExclusionProcessStatus } from "../enums/enum-exclusion-process-status";
|
|
11
11
|
import { LogicalDeleteService } from "../services/logical-delete.service";
|
|
12
12
|
import { LogicalDeleteConfigService } from "../services/logical-delete-config.service";
|
|
13
|
+
const EXCLUSION_PROCESS_STATUS_BADGE = [
|
|
14
|
+
{
|
|
15
|
+
enumValue: EnumExclusionProcessStatus.ERROR,
|
|
16
|
+
color: EnumBadgeColors.RED
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
enumValue: EnumExclusionProcessStatus.PENDING,
|
|
20
|
+
color: EnumBadgeColors.YELLOW
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
enumValue: EnumExclusionProcessStatus.PROCESSING,
|
|
24
|
+
color: EnumBadgeColors.BLUE
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
enumValue: EnumExclusionProcessStatus.SUCCESS,
|
|
28
|
+
color: EnumBadgeColors.GREEN
|
|
29
|
+
}
|
|
30
|
+
];
|
|
13
31
|
let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
14
|
-
constructor(
|
|
15
|
-
this.router = router;
|
|
32
|
+
constructor(route, translate, logicalDeleteService, projectConfigs) {
|
|
16
33
|
this.route = route;
|
|
17
34
|
this.translate = translate;
|
|
18
35
|
this.logicalDeleteService = logicalDeleteService;
|
|
19
36
|
this.projectConfigs = projectConfigs;
|
|
20
|
-
this.
|
|
37
|
+
this.expandedRows = {};
|
|
21
38
|
this._isVisible = false;
|
|
22
39
|
this._isLoading = false;
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
40
|
+
this._processGroupData = [];
|
|
41
|
+
this._processGroupColumns = [];
|
|
42
|
+
this._processStepColumns = [];
|
|
25
43
|
this.ngUnsubscribe = new Subject();
|
|
26
44
|
}
|
|
27
45
|
get isVisible() {
|
|
@@ -30,11 +48,14 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
30
48
|
get isLoading() {
|
|
31
49
|
return this._isLoading;
|
|
32
50
|
}
|
|
33
|
-
get
|
|
34
|
-
return this.
|
|
51
|
+
get processGroupData() {
|
|
52
|
+
return this._processGroupData;
|
|
53
|
+
}
|
|
54
|
+
get processGroupColumns() {
|
|
55
|
+
return this._processGroupColumns;
|
|
35
56
|
}
|
|
36
|
-
get
|
|
37
|
-
return this.
|
|
57
|
+
get processStepColumns() {
|
|
58
|
+
return this._processStepColumns;
|
|
38
59
|
}
|
|
39
60
|
ngOnInit() {
|
|
40
61
|
this.route.data
|
|
@@ -42,7 +63,8 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
42
63
|
.subscribe((data) => {
|
|
43
64
|
this.locale = data.localeConfig;
|
|
44
65
|
});
|
|
45
|
-
this.
|
|
66
|
+
this._processGroupColumns = this.getGroupColumns();
|
|
67
|
+
this._processStepColumns = this.getStepColumns();
|
|
46
68
|
}
|
|
47
69
|
ngOnDestroy() {
|
|
48
70
|
this.ngUnsubscribe.next();
|
|
@@ -51,9 +73,8 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
51
73
|
}
|
|
52
74
|
showDetails(details) {
|
|
53
75
|
this._exclusionDetails = details;
|
|
54
|
-
this._entityName = details.entityName;
|
|
55
76
|
this._isVisible = true;
|
|
56
|
-
this.
|
|
77
|
+
this._processGroupData = [];
|
|
57
78
|
this.processDetails = null;
|
|
58
79
|
this.entityDescription = details.entityDescription;
|
|
59
80
|
this.loadProcessDetails(details);
|
|
@@ -65,18 +86,9 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
65
86
|
closeDetails() {
|
|
66
87
|
this._isVisible = false;
|
|
67
88
|
this._exclusionDetails = null;
|
|
68
|
-
this.
|
|
89
|
+
this._processGroupData = [];
|
|
69
90
|
this.disconnectWebSocket();
|
|
70
91
|
}
|
|
71
|
-
openExclusions() {
|
|
72
|
-
this.closeDetails();
|
|
73
|
-
this.router.navigate([this._entityName, "exclusions-list"], {
|
|
74
|
-
queryParams: {
|
|
75
|
-
entityName: this._entityName,
|
|
76
|
-
entityDescription: this.entityDescription
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
92
|
getRecordDescription() {
|
|
81
93
|
var _a;
|
|
82
94
|
if (!((_a = this.processDetails) === null || _a === void 0 ? void 0 : _a.description)) {
|
|
@@ -126,15 +138,40 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
126
138
|
getEmptyStateDescription() {
|
|
127
139
|
return this.translate.instant(`${this.projectConfigs.getTranslationPrefix()}.logical_delete_empty_state_description`);
|
|
128
140
|
}
|
|
129
|
-
|
|
141
|
+
getGroupColumns() {
|
|
142
|
+
return [
|
|
143
|
+
{
|
|
144
|
+
field: "description",
|
|
145
|
+
attributes: ["description"],
|
|
146
|
+
header: this.translate.instant(`${this.projectConfigs.getTranslationPrefix()}.logical_delete_group`),
|
|
147
|
+
type: EnumColumnFieldType.STRING,
|
|
148
|
+
style: {
|
|
149
|
+
width: "340px"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
field: "status",
|
|
154
|
+
attributes: ["status"],
|
|
155
|
+
header: this.translate.instant(`${this.projectConfigs.getTranslationPrefix()}.logical_delete_status`),
|
|
156
|
+
type: EnumColumnFieldType.ENUM,
|
|
157
|
+
enumPrefix: `${this.projectConfigs.getTranslationPrefix()}.logical_delete_enum_exclusion_process_status_`,
|
|
158
|
+
style: {
|
|
159
|
+
width: "100px"
|
|
160
|
+
},
|
|
161
|
+
tooltip: this.getColumnStatusTooltip,
|
|
162
|
+
badgeConfigs: EXCLUSION_PROCESS_STATUS_BADGE
|
|
163
|
+
}
|
|
164
|
+
];
|
|
165
|
+
}
|
|
166
|
+
getStepColumns() {
|
|
130
167
|
return [
|
|
131
168
|
{
|
|
132
169
|
field: "description",
|
|
133
170
|
attributes: ["description"],
|
|
134
|
-
header: this.translate.instant(`${this.projectConfigs.getTranslationPrefix()}.
|
|
171
|
+
header: this.translate.instant(`${this.projectConfigs.getTranslationPrefix()}.logical_delete_step`),
|
|
135
172
|
type: EnumColumnFieldType.STRING,
|
|
136
173
|
style: {
|
|
137
|
-
width: "
|
|
174
|
+
width: "340px"
|
|
138
175
|
}
|
|
139
176
|
},
|
|
140
177
|
{
|
|
@@ -147,24 +184,7 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
147
184
|
width: "100px"
|
|
148
185
|
},
|
|
149
186
|
tooltip: this.getColumnStatusTooltip,
|
|
150
|
-
badgeConfigs:
|
|
151
|
-
{
|
|
152
|
-
enumValue: EnumExclusionProcessStatus.ERROR,
|
|
153
|
-
color: EnumBadgeColors.RED
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
enumValue: EnumExclusionProcessStatus.PENDING,
|
|
157
|
-
color: EnumBadgeColors.YELLOW
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
enumValue: EnumExclusionProcessStatus.PROCESSING,
|
|
161
|
-
color: EnumBadgeColors.BLUE
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
enumValue: EnumExclusionProcessStatus.SUCCESS,
|
|
165
|
-
color: EnumBadgeColors.GREEN
|
|
166
|
-
}
|
|
167
|
-
]
|
|
187
|
+
badgeConfigs: EXCLUSION_PROCESS_STATUS_BADGE
|
|
168
188
|
}
|
|
169
189
|
];
|
|
170
190
|
}
|
|
@@ -187,7 +207,14 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
187
207
|
return;
|
|
188
208
|
}
|
|
189
209
|
this.processDetails = process;
|
|
190
|
-
this.
|
|
210
|
+
this._processGroupData = this.sortGroupsByStartDate(process.groups)
|
|
211
|
+
.map(p => (Object.assign(Object.assign({}, p), { steps: this.sortStepsByStartDate(p.steps) })));
|
|
212
|
+
this.expandedRows = {};
|
|
213
|
+
this._processGroupData
|
|
214
|
+
.filter(p => p.status !== EnumExclusionProcessStatus.SUCCESS)
|
|
215
|
+
.forEach(p => {
|
|
216
|
+
this.expandedRows[p.id] = true;
|
|
217
|
+
});
|
|
191
218
|
});
|
|
192
219
|
}
|
|
193
220
|
sortByDate(startDate, finishDate) {
|
|
@@ -205,20 +232,6 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
205
232
|
sortStepsByStartDate(steps) {
|
|
206
233
|
return steps.sort((a, b) => this.sortByDate(a.startDate, b.finishDate));
|
|
207
234
|
}
|
|
208
|
-
loadProcessSummary(process) {
|
|
209
|
-
const stepLogs = [];
|
|
210
|
-
this.sortGroupsByStartDate(process.groups)
|
|
211
|
-
.forEach(group => {
|
|
212
|
-
const steps = this.sortStepsByStartDate(group.steps)
|
|
213
|
-
.map(step => ({
|
|
214
|
-
description: step.description,
|
|
215
|
-
status: step.status,
|
|
216
|
-
errorMessage: step.errorMessage
|
|
217
|
-
}));
|
|
218
|
-
stepLogs.push(...steps);
|
|
219
|
-
});
|
|
220
|
-
this._processSummaryData = stepLogs;
|
|
221
|
-
}
|
|
222
235
|
disconnectWebSocket() {
|
|
223
236
|
if (this._exclusionProcessStatusChangedSubscribe) {
|
|
224
237
|
this._exclusionProcessStatusChangedSubscribe.unsubscribe();
|
|
@@ -268,7 +281,6 @@ let ExclusionDetailsComponent = class ExclusionDetailsComponent {
|
|
|
268
281
|
}
|
|
269
282
|
};
|
|
270
283
|
ExclusionDetailsComponent.ctorParameters = () => [
|
|
271
|
-
{ type: Router },
|
|
272
284
|
{ type: ActivatedRoute },
|
|
273
285
|
{ type: TranslateService },
|
|
274
286
|
{ type: LogicalDeleteService },
|
|
@@ -282,23 +294,29 @@ __decorate([
|
|
|
282
294
|
], ExclusionDetailsComponent.prototype, "isLoading", null);
|
|
283
295
|
__decorate([
|
|
284
296
|
Output()
|
|
285
|
-
], ExclusionDetailsComponent.prototype, "
|
|
297
|
+
], ExclusionDetailsComponent.prototype, "processGroupData", null);
|
|
286
298
|
__decorate([
|
|
287
299
|
Output()
|
|
288
|
-
], ExclusionDetailsComponent.prototype, "
|
|
300
|
+
], ExclusionDetailsComponent.prototype, "processGroupColumns", null);
|
|
301
|
+
__decorate([
|
|
302
|
+
Output()
|
|
303
|
+
], ExclusionDetailsComponent.prototype, "processStepColumns", null);
|
|
289
304
|
__decorate([
|
|
290
305
|
Output()
|
|
291
306
|
], ExclusionDetailsComponent.prototype, "processDetails", void 0);
|
|
292
307
|
__decorate([
|
|
293
308
|
Output()
|
|
294
309
|
], ExclusionDetailsComponent.prototype, "entityDescription", void 0);
|
|
310
|
+
__decorate([
|
|
311
|
+
Output()
|
|
312
|
+
], ExclusionDetailsComponent.prototype, "expandedRows", void 0);
|
|
295
313
|
ExclusionDetailsComponent = __decorate([
|
|
296
314
|
Component({
|
|
297
315
|
selector: "s-exclusion-details",
|
|
298
|
-
template: "<s-sidebar [visible]=\"isVisible\" (visibleChange)=\"onVisibilityChanged($event)\" [header]=\"getSidebarTitle()\">\n <s-loading-state [loading]=\"isLoading\">\n <p-panel [showHeader]=\"false\" styleClass=\"s-exclusion-details-record-details-panel\">\n <div class=\"s-exclusion-details-record-details-container\">\n <div class=\"s-exclusion-details-record-icon-background\">\n <em class=\"far fa-file-alt s-exclusion-details-record-icon\"></em>\n </div>\n\n <div class=\"s-exclusion-details-record-details-recordinfo\">\n <span class=\"s-exclusion-details-record-details-type\">\n {{entityDescription}}\n </span>\n <span>\n {{getRecordDescription()}}\n </span>\n </div>\n\n <div class=\"s-exclusion-details-record-details-dateinfo\">\n <span>\n {{getStartDateLabel()}}: {{getInicialDate()}}\n </span>\n <span *ngIf=\"isFinished()\">\n {{getFinishDateLabel()}}: {{getFinishDate()}}\n </span>\n </div>\n </div>\n </p-panel>\n\n <p-panel>\n <p-header>\n {{getSummaryLabel()}}\n </p-header>\n\n <s-empty-state\n *ngIf=\"
|
|
316
|
+
template: "<s-sidebar [visible]=\"isVisible\" (visibleChange)=\"onVisibilityChanged($event)\" [header]=\"getSidebarTitle()\">\n <s-loading-state [loading]=\"isLoading\">\n <p-panel [showHeader]=\"false\" styleClass=\"s-exclusion-details-record-details-panel\">\n <div class=\"s-exclusion-details-record-details-container\">\n <div class=\"s-exclusion-details-record-icon-background\">\n <em class=\"far fa-file-alt s-exclusion-details-record-icon\"></em>\n </div>\n\n <div class=\"s-exclusion-details-record-details-recordinfo\">\n <span class=\"s-exclusion-details-record-details-type\">\n {{entityDescription}}\n </span>\n <span>\n {{getRecordDescription()}}\n </span>\n </div>\n\n <div class=\"s-exclusion-details-record-details-dateinfo\">\n <span>\n {{getStartDateLabel()}}: {{getInicialDate()}}\n </span>\n <span *ngIf=\"isFinished()\">\n {{getFinishDateLabel()}}: {{getFinishDate()}}\n </span>\n </div>\n </div>\n </p-panel>\n\n <p-panel>\n <p-header>\n {{getSummaryLabel()}}\n </p-header>\n\n <s-empty-state\n *ngIf=\"processGroupData && !processGroupData.length\"\n [title]=\"getEmptyStateTitle()\"\n [description]=\"getEmptyStateDescription()\">\n [showPrimaryAction]=\"false\"\n </s-empty-state>\n\n <p-table\n [value]=\"processGroupData\"\n [columns]=\"processGroupColumns\"\n dataKey=\"id\"\n [lazy]=\"false\"\n [scrollable]=\"false\"\n [paginator]=\"false\"\n *ngIf=\"processGroupData && processGroupData.length\"\n [expandedRowKeys]=\"expandedRows\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th id=\"expend-column\" style=\"width: 40px;\"></th>\n <th *ngFor=\"let col of columns\"\n [id]=\"col.field\"\n [ngStyle]=\"col.style\"\n [pSortableColumn]=\"col.field\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header }}</span>\n <p-sortIcon [field]=\"col.field\" ></p-sortIcon>\n </div>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-expanded=\"expanded\">\n <tr sNavigation [sRowToggler]=\"rowData\">\n <td style=\"width: 40px;\" tabindex=\"0\">\n <em class=\"fa fa-{{ expanded ? 'minus' : 'plus' }}\"></em>\n </td>\n <s-table-columns\n [columns]=\"columns\"\n [rowValue]=\"rowData\"\n [locale]=\"locale\">\n </s-table-columns>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"rowexpansion\" let-rowData let-columns=\"columns\">\n <tr class=\"sds-expanded-row\">\n <td [attr.colspan]=\"columns.length + 1\">\n <p-table \n [value]=\"rowData.steps\"\n [columns]=\"processStepColumns\"\n dataKey=\"id\"\n [paginator]=\"false\"\n [responsive]=\"true\"\n [scrollable]=\"false\"\n [lazy]=\"false\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\"\n [id]=\"col.field\"\n [ngStyle]=\"col.style\"\n [pSortableColumn]=\"col.field\">\n <div class=\"senior-header\">\n <span class=\"senior-header-title\">{{ col.header }}</span>\n <p-sortIcon [field]=\"col.field\" ></p-sortIcon>\n </div>\n </th>\n </tr>\n </ng-template>\n \n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\">\n <tr>\n <s-table-columns\n [columns]=\"columns\"\n [rowValue]=\"rowData\"\n [locale]=\"locale\">\n </s-table-columns>\n </tr>\n </ng-template>\n </p-table>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </p-panel>\n </s-loading-state>\n\n <s-footer>\n <div class=\"ui-fluid\">\n <div class=\"ui-g\">\n <s-button [label]=\"getCloseButtonLabel()\" priority=\"link\" (onClick)=\"closeDetails()\"></s-button>\n </div>\n </div>\n </s-footer>\n</s-sidebar>\n",
|
|
299
317
|
encapsulation: ViewEncapsulation.None,
|
|
300
318
|
styles: [".s-exclusion-details-record-details-panel{margin-bottom:10px}.s-exclusion-details-record-details-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.s-exclusion-details-record-details-recordinfo{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin-left:10px;-ms-flex:1;flex:1}.s-exclusion-details-record-details-dateinfo{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin-left:10px;-ms-flex-align:end;align-items:flex-end;font-size:12px}.s-exclusion-details-record-details-type{color:#999}.s-exclusion-details-record-icon{font-size:22pt;color:#7e8d95}.s-exclusion-details-record-icon-background{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:16px;background-color:#c1cad1;border-radius:50%;height:60px;width:60px}"]
|
|
301
319
|
})
|
|
302
320
|
], ExclusionDetailsComponent);
|
|
303
321
|
export { ExclusionDetailsComponent };
|
|
304
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjbHVzaW9uLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL2V4Y2x1c2lvbi1wcm9jZXNzLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImV4Y2x1c2lvbi1kZXRhaWxzL2V4Y2x1c2lvbi1kZXRhaWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUE0QixNQUFNLG9DQUFvQyxDQUFDO0FBQ3BILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBV3ZGLElBQWEseUJBQXlCLEdBQXRDLE1BQWEseUJBQXlCO0lBdUNsQyxZQUNxQixNQUFjLEVBQ2QsS0FBcUIsRUFDckIsU0FBMkIsRUFDM0Isb0JBQTBDLEVBQzFDLGNBQTBDO1FBSjFDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixjQUFTLEdB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aUIsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFO2dCQUN0RixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDbkQ7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDSixDQUFBOztZQTNSZ0MsTUFBTTtZQUNQLGNBQWM7WUFDVixnQkFBZ0I7WUFDTCxvQkFBb0I7WUFDMUIsMEJBQTBCOztBQXhDL0Q7SUFEQyxNQUFNLEVBQUU7MERBR1I7QUFHRDtJQURDLE1BQU0sRUFBRTswREFHUjtBQUdEO0lBREMsTUFBTSxFQUFFO21FQUdSO0FBR0Q7SUFEQyxNQUFNLEVBQUU7c0VBR1I7QUFHRDtJQURDLE1BQU0sRUFBRTtpRUFDK0I7QUFHeEM7SUFEQyxNQUFNLEVBQUU7b0VBQ3dCO0FBM0J4Qix5QkFBeUI7SUFOckMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHFCQUFxQjtRQUMvQix1MUhBQWlEO1FBRWpELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOztLQUN4QyxDQUFDO0dBQ1cseUJBQXlCLENBbVVyQztTQW5VWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRW51bUJhZGdlQ29sb3JzLCBFbnVtQ29sdW1uRmllbGRUeXBlLCBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgV2Vic29ja2V0U2VydmljZSB9IGZyb20gXCJAc2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9hbmd1bGFyLWNvbXBvbmVudHNcIjtcbmltcG9ydCB7IEVudW1FeGNsdXNpb25Qcm9jZXNzU3RhdHVzIH0gZnJvbSBcIi4uL2VudW1zL2VudW0tZXhjbHVzaW9uLXByb2Nlc3Mtc3RhdHVzXCI7XG5pbXBvcnQgeyBFeGNsdXNpb25EZXRhaWxzIH0gZnJvbSBcIi4vcHJvdG9jb2xzL2V4Y2x1c2lvbi1kZXRhaWxzXCI7XG5pbXBvcnQgeyBMb2dpY2FsRGVsZXRlU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9sb2dpY2FsLWRlbGV0ZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFeGNsdXNpb25Qcm9jZXNzLCBFeGNsdXNpb25Qcm9jZXNzU3RlcCwgRXhjbHVzaW9uUHJvY2Vzc1N0ZXBHcm91cCB9IGZyb20gXCIuLi9tb2RlbHMvaW5kZXhcIjtcbmltcG9ydCB7IExvZ2ljYWxEZWxldGVDb25maWdTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2xvZ2ljYWwtZGVsZXRlLWNvbmZpZy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTaG93RGV0YWlsc0luZm9ybWF0aW9uIH0gZnJvbSBcIi4vcHJvdG9jb2xzXCI7XG5pbXBvcnQgeyBFeGNsdXNpb25Qcm9jZXNzU3RhdHVzQ2hhbmdlZCB9IGZyb20gXCIuL3Byb3RvY29scy9leGNsdXNpb24tcHJvY2Vzcy1zdGF0dXMtY2hhbmdlZFwiO1xuaW1wb3J0IHsgV2Vic29ja2V0RXZlbnREYXRhIH0gZnJvbSBcIi4vcHJvdG9jb2xzL3dlYi1zb2NrZXQtZXZlbnQtZGF0YVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWV4Y2x1c2lvbi1kZXRhaWxzXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9leGNsdXNpb24tZGV0YWlscy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9leGNsdXNpb24tZGV0YWlscy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEV4Y2x1c2lvbkRldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIGxvY2FsZSE6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucztcblxuICAgIEBPdXRwdXQoKVxuICAgIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Zpc2libGU7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9hZGluZztcbiAgICB9XG5cbiAgICBAT3V0cHV0KClcbiAgICBnZXQgcHJvY2Vzc1N1bW1hcnlEYXRhKCk6IEV4Y2x1c2lvbkRldGFpbHNbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU3VtbWFyeURhdGE7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgZ2V0IHByb2Nlc3NTdW1tYXJ5Q29sdW1ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU3VtbWFyeUNvbHVtbnM7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHByb2Nlc3NEZXRhaWxzOiBFeGNsdXNpb25Qcm9jZXNzO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGVudGl0eURlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9lbnRpdHlOYW1lID0gXCJcIjtcbiAgICBwcml2YXRlIF9pc1Zpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9wcm9jZXNzU3VtbWFyeURhdGE6IEV4Y2x1c2lvbkRldGFpbHNbXSA9IFtdO1xuICAgIHByaXZhdGUgX3Byb2Nlc3NTdW1tYXJ5Q29sdW1uczogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF93ZWJzb2NrZXRTZXJ2aWNlOiBXZWJzb2NrZXRTZXJ2aWNlO1xuICAgIHByaXZhdGUgX2V4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkU3Vic2NyaWJlOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfZXhjbHVzaW9uRGV0YWlsczogU2hvd0RldGFpbHNJbmZvcm1hdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2dpY2FsRGVsZXRlU2VydmljZTogTG9naWNhbERlbGV0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdENvbmZpZ3M6IExvZ2ljYWxEZWxldGVDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGUuZGF0YVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiB7IFtjb25maWdzOiBzdHJpbmddOiBhbnksIGxvY2FsZUNvbmZpZzogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZSA9IGRhdGEubG9jYWxlQ29uZmlnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NTdW1tYXJ5Q29sdW1ucyA9IHRoaXMuZ2V0U3VtbWFyeUNvbHVtbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuXG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlNvY2tldCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93RGV0YWlscyhkZXRhaWxzOiBTaG93RGV0YWlsc0luZm9ybWF0aW9uKSB7XG4gICAgICAgIHRoaXMuX2V4Y2x1c2lvbkRldGFpbHMgPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLl9lbnRpdHlOYW1lID0gZGV0YWlscy5lbnRpdHlOYW1lO1xuICAgICAgICB0aGlzLl9pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wcm9jZXNzU3VtbWFyeURhdGEgPSBbXTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NEZXRhaWxzID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbnRpdHlEZXNjcmlwdGlvbiA9IGRldGFpbHMuZW50aXR5RGVzY3JpcHRpb247XG5cbiAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RldGFpbHMoZGV0YWlscyk7XG5cbiAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmlzaWJpbGl0eUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmNsb3NlRGV0YWlscygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZURldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuX2lzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9leGNsdXNpb25EZXRhaWxzID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1N1bW1hcnlEYXRhID0gW107XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlNvY2tldCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuRXhjbHVzaW9ucygpIHtcbiAgICAgICAgdGhpcy5jbG9zZURldGFpbHMoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgICBbdGhpcy5fZW50aXR5TmFtZSwgXCJleGNsdXNpb25zLWxpc3RcIl0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZTogdGhpcy5fZW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5RGVzY3JpcHRpb246IHRoaXMuZW50aXR5RGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlY29yZERlc2NyaXB0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc0RldGFpbHM/LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEZXRhaWxzLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJbmljaWFsRGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NEZXRhaWxzPy5zdGFydERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vbWVudCh0aGlzLnByb2Nlc3NEZXRhaWxzLnN0YXJ0RGF0ZSkuZm9ybWF0KFwiREQvTU0vWVlZWSBISDptbTpzc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmluaXNoRGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NEZXRhaWxzPy5maW5pc2hEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb21lbnQodGhpcy5wcm9jZXNzRGV0YWlscy5maW5pc2hEYXRlKS5mb3JtYXQoXCJERC9NTS9ZWVlZIEhIOm1tOnNzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0ZpbmlzaGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLnByb2Nlc3NEZXRhaWxzPy5maW5pc2hEYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTaG93RXhjbHVzaW9uc0J1dHRvbkxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX3Nob3dfZGVsZXRpb25zYCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsb3NlQnV0dG9uTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfY2xvc2VgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3VtbWFyeUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX3N1bW1hcnlgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3RhcnREYXRlTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfc3RhcnRgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmluaXNoRGF0ZUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX2ZpbmlzaGApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTaWRlYmFyVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfZGV0YWlsc190aXRsZWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFbXB0eVN0YXRlVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfZW1wdHlfc3RhdGVfdGl0bGVgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW1wdHlTdGF0ZURlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX2VtcHR5X3N0YXRlX2Rlc2NyaXB0aW9uYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdW1tYXJ5Q29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcImRlc2NyaXB0aW9uXCJdLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX2Rlc2NyaXB0aW9uYCksXG4gICAgICAgICAgICAgICAgdHlwZTogRW51bUNvbHVtbkZpZWxkVHlwZS5TVFJJTkcsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMzAwcHhcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmllbGQ6IFwic3RhdHVzXCIsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW1wic3RhdHVzXCJdLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX3N0YXR1c2ApLFxuICAgICAgICAgICAgICAgIHR5cGU6IEVudW1Db2x1bW5GaWVsZFR5cGUuRU5VTSxcbiAgICAgICAgICAgICAgICBlbnVtUHJlZml4OiBgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX2VudW1fZXhjbHVzaW9uX3Byb2Nlc3Nfc3RhdHVzX2AsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwcHhcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogdGhpcy5nZXRDb2x1bW5TdGF0dXNUb29sdGlwLFxuICAgICAgICAgICAgICAgIGJhZGdlQ29uZmlnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtVmFsdWU6IEVudW1FeGNsdXNpb25Qcm9jZXNzU3RhdHVzLkVSUk9SLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEVudW1CYWRnZUNvbG9ycy5SRURcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW51bVZhbHVlOiBFbnVtRXhjbHVzaW9uUHJvY2Vzc1N0YXR1cy5QRU5ESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEVudW1CYWRnZUNvbG9ycy5ZRUxMT1dcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW51bVZhbHVlOiBFbnVtRXhjbHVzaW9uUHJvY2Vzc1N0YXR1cy5QUk9DRVNTSU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEVudW1CYWRnZUNvbG9ycy5CTFVFXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1WYWx1ZTogRW51bUV4Y2x1c2lvblByb2Nlc3NTdGF0dXMuU1VDQ0VTUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBFbnVtQmFkZ2VDb2xvcnMuR1JFRU5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblN0YXR1c1Rvb2x0aXAocm93VmFsdWU6IEV4Y2x1c2lvbkRldGFpbHMpIHtcbiAgICAgICAgaWYgKHJvd1ZhbHVlLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd1ZhbHVlLmVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFByb2Nlc3NEZXRhaWxzKGRldGFpbHM6IFNob3dEZXRhaWxzSW5mb3JtYXRpb24pIHtcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwcm9jZXNzT2JzZXJ2YWJsZSA9IGRldGFpbHMucHJvY2Vzc0lkXG4gICAgICAgICAgICA/IHRoaXMubG9naWNhbERlbGV0ZVNlcnZpY2UuZ2V0UHJvY2Vzc0RldGFpbHMoZGV0YWlscy5wcm9jZXNzSWQpXG4gICAgICAgICAgICA6IHRoaXMubG9naWNhbERlbGV0ZVNlcnZpY2UuZ2V0TGF0ZXN0UHJvY2Vzc0RldGFpbHMoZGV0YWlscy5yZWNvcmRJZCk7XG5cbiAgICAgICAgcHJvY2Vzc09ic2VydmFibGVcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5faXNMb2FkaW5nID0gZmFsc2UpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocHJvY2VzczogRXhjbHVzaW9uUHJvY2VzcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGV0YWlscyA9IHByb2Nlc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc1N1bW1hcnkocHJvY2Vzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRCeURhdGUoc3RhcnREYXRlOiBEYXRlLCBmaW5pc2hEYXRlOiBEYXRlKSB7XG4gICAgICAgIGlmIChzdGFydERhdGUuZ2V0VGltZSgpID4gZmluaXNoRGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydERhdGUuZ2V0VGltZSgpIDwgZmluaXNoRGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRHcm91cHNCeVN0YXJ0RGF0ZShncm91cHM6IEV4Y2x1c2lvblByb2Nlc3NTdGVwR3JvdXBbXSkge1xuICAgICAgICByZXR1cm4gZ3JvdXBzLnNvcnQoKGEsIGIpID0+IHRoaXMuc29ydEJ5RGF0ZShhLnN0YXJ0RGF0ZSwgYi5maW5pc2hEYXRlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0U3RlcHNCeVN0YXJ0RGF0ZShzdGVwczogRXhjbHVzaW9uUHJvY2Vzc1N0ZXBbXSkge1xuICAgICAgICByZXR1cm4gc3RlcHMuc29ydCgoYSwgYikgPT4gdGhpcy5zb3J0QnlEYXRlKGEuc3RhcnREYXRlLCBiLmZpbmlzaERhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRQcm9jZXNzU3VtbWFyeShwcm9jZXNzOiBFeGNsdXNpb25Qcm9jZXNzKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBMb2dzOiBFeGNsdXNpb25EZXRhaWxzW10gPSBbXTtcblxuICAgICAgICB0aGlzLnNvcnRHcm91cHNCeVN0YXJ0RGF0ZShwcm9jZXNzLmdyb3VwcylcbiAgICAgICAgICAgIC5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGVwcyA9IHRoaXMuc29ydFN0ZXBzQnlTdGFydERhdGUoZ3JvdXAuc3RlcHMpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc3RlcCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0ZXAuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0ZXAuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiBzdGVwLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICB9IGFzIEV4Y2x1c2lvbkRldGFpbHMpKTtcblxuICAgICAgICAgICAgICAgIHN0ZXBMb2dzLnB1c2goLi4uc3RlcHMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcHJvY2Vzc1N1bW1hcnlEYXRhID0gc3RlcExvZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNjb25uZWN0V2ViU29ja2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fZXhjbHVzaW9uUHJvY2Vzc1N0YXR1c0NoYW5nZWRTdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9leGNsdXNpb25Qcm9jZXNzU3RhdHVzQ2hhbmdlZFN1YnNjcmliZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fd2Vic29ja2V0U2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vic29ja2V0U2VydmljZS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB0aGlzLl93ZWJzb2NrZXRTZXJ2aWNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29ubmVjdFdlYlNvY2tldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlYnNvY2tldFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlNvY2tldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2Vic29ja2V0U2VydmljZSA9IG5ldyBXZWJzb2NrZXRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX3dlYnNvY2tldFNlcnZpY2VcbiAgICAgICAgICAgIC5vbkNvbm5lY3QoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuaW5nV2ViaG9va0V2ZW50cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydExpc3RlbmluZ1dlYmhvb2tFdmVudHMoKSB7XG4gICAgICAgIHRoaXMuX3dlYnNvY2tldFNlcnZpY2VcbiAgICAgICAgICAgIC5vbkVycm9yKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignb25FcnJvcicsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZXhjbHVzaW9uUHJvY2Vzc1N0YXR1c0NoYW5nZWRTdWJzY3JpYmUgPSB0aGlzLl93ZWJzb2NrZXRTZXJ2aWNlXG4gICAgICAgICAgICAub25FdmVudDxXZWJzb2NrZXRFdmVudERhdGE8RXhjbHVzaW9uUHJvY2Vzc1N0YXR1c0NoYW5nZWQ+Pih7XG4gICAgICAgICAgICAgICAgZG9tYWluOiB0aGlzLnByb2plY3RDb25maWdzLmdldERvbWFpbigpLFxuICAgICAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMucHJvamVjdENvbmZpZ3MuZ2V0U2VydmljZSgpLFxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZTogXCJleGNsdXNpb25Qcm9jZXNzU3RhdHVzQ2hhbmdlZFwiXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogV2Vic29ja2V0RXZlbnREYXRhPEV4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkPikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gZXZlbnQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXhjbHVzaW9uRGV0YWlscy5wcm9jZXNzSWQgJiYgZGF0YS5waWQgPT09IHRoaXMuX2V4Y2x1c2lvbkRldGFpbHMucHJvY2Vzc0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFByb2Nlc3NEZXRhaWxzKHRoaXMuX2V4Y2x1c2lvbkRldGFpbHMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2V4Y2x1c2lvbkRldGFpbHMucmVjb3JkSWQgJiYgZGF0YS5yZWNvcmRJZCA9PT0gdGhpcy5fZXhjbHVzaW9uRGV0YWlscy5yZWNvcmRJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcm9jZXNzRGV0YWlscyh0aGlzLl9leGNsdXNpb25EZXRhaWxzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
322
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjbHVzaW9uLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL2V4Y2x1c2lvbi1wcm9jZXNzLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImV4Y2x1c2lvbi1kZXRhaWxzL2V4Y2x1c2lvbi1kZXRhaWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQTRCLE1BQU0sb0NBQW9DLENBQUM7QUFDcEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFcEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFLdkYsTUFBTSw4QkFBOEIsR0FBRTtJQUNsQztRQUNJLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxLQUFLO1FBQzNDLEtBQUssRUFBRSxlQUFlLENBQUMsR0FBRztLQUM3QjtJQUNEO1FBQ0ksU0FBUyxFQUFFLDBCQUEwQixDQUFDLE9BQU87UUFDN0MsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNO0tBQ2hDO0lBQ0Q7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RDtRQUVqRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7S0FDeEMsQ0FBQztHQUNXLHlCQUF5QixDQStUckM7U0EvVFkseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBFbnVtQmFkZ2VDb2xvcnMsIEVudW1Db2x1bW5GaWVsZFR5cGUsIFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyB9IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBXZWJzb2NrZXRTZXJ2aWNlIH0gZnJvbSBcIkBzZW5pb3ItZ2VzdGFvLWVtcHJlc2FyaWFsL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgRW51bUV4Y2x1c2lvblByb2Nlc3NTdGF0dXMgfSBmcm9tIFwiLi4vZW51bXMvZW51bS1leGNsdXNpb24tcHJvY2Vzcy1zdGF0dXNcIjtcbmltcG9ydCB7IEV4Y2x1c2lvbkRldGFpbHMgfSBmcm9tIFwiLi9wcm90b2NvbHMvZXhjbHVzaW9uLWRldGFpbHNcIjtcbmltcG9ydCB7IExvZ2ljYWxEZWxldGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2xvZ2ljYWwtZGVsZXRlLnNlcnZpY2VcIjtcbmltcG9ydCB7IEV4Y2x1c2lvblByb2Nlc3MsIEV4Y2x1c2lvblByb2Nlc3NTdGVwLCBFeGNsdXNpb25Qcm9jZXNzU3RlcEdyb3VwIH0gZnJvbSBcIi4uL21vZGVscy9pbmRleFwiO1xuaW1wb3J0IHsgTG9naWNhbERlbGV0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvbG9naWNhbC1kZWxldGUtY29uZmlnLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNob3dEZXRhaWxzSW5mb3JtYXRpb24gfSBmcm9tIFwiLi9wcm90b2NvbHNcIjtcbmltcG9ydCB7IEV4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkIH0gZnJvbSBcIi4vcHJvdG9jb2xzL2V4Y2x1c2lvbi1wcm9jZXNzLXN0YXR1cy1jaGFuZ2VkXCI7XG5pbXBvcnQgeyBXZWJzb2NrZXRFdmVudERhdGEgfSBmcm9tIFwiLi9wcm90b2NvbHMvd2ViLXNvY2tldC1ldmVudC1kYXRhXCI7XG5cbmNvbnN0IEVYQ0xVU0lPTl9QUk9DRVNTX1NUQVRVU19CQURHRSA9W1xuICAgIHtcbiAgICAgICAgZW51bVZhbHVlOiBFbnVtRXhjbHVzaW9uUHJvY2Vzc1N0YXR1cy5FUlJPUixcbiAgICAgICAgY29sb3I6IEVudW1CYWRnZUNvbG9ycy5SRURcbiAgICB9LFxuICAgIHtcbiAgICAgICAgZW51bVZhbHVlOiBFbnVtRXhjbHVzaW9uUHJvY2Vzc1N0YXR1cy5QRU5ESU5HLFxuICAgICAgICBjb2xvcjogRW51bUJhZGdlQ29sb3JzLllFTExPV1xuICAgIH0sXG4gICAge1xuICAgICAgICBlbnVtVmFsdWU6IEVudW1FeGNsdXNpb25Qcm9jZXNzU3RhdHVzLlBST0NFU1NJTkcsXG4gICAgICAgIGNvbG9yOiBFbnVtQmFkZ2VDb2xvcnMuQkxVRVxuICAgIH0sXG4gICAge1xuICAgICAgICBlbnVtVmFsdWU6IEVudW1FeGNsdXNpb25Qcm9jZXNzU3RhdHVzLlNVQ0NFU1MsXG4gICAgICAgIGNvbG9yOiBFbnVtQmFkZ2VDb2xvcnMuR1JFRU5cbiAgICB9XG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzLWV4Y2x1c2lvbi1kZXRhaWxzXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi9leGNsdXNpb24tZGV0YWlscy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9leGNsdXNpb24tZGV0YWlscy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEV4Y2x1c2lvbkRldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIGxvY2FsZSE6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucztcblxuICAgIEBPdXRwdXQoKVxuICAgIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Zpc2libGU7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9hZGluZztcbiAgICB9XG5cbiAgICBAT3V0cHV0KClcbiAgICBnZXQgcHJvY2Vzc0dyb3VwRGF0YSgpOiBFeGNsdXNpb25EZXRhaWxzW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0dyb3VwRGF0YTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KClcbiAgICBnZXQgcHJvY2Vzc0dyb3VwQ29sdW1ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzR3JvdXBDb2x1bW5zO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIGdldCBwcm9jZXNzU3RlcENvbHVtbnMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1N0ZXBDb2x1bW5zO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwcm9jZXNzRGV0YWlsczogRXhjbHVzaW9uUHJvY2VzcztcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBlbnRpdHlEZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGV4cGFuZGVkUm93czogYW55ID0ge307XG5cbiAgICBwcml2YXRlIF9pc1Zpc2libGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9wcm9jZXNzR3JvdXBEYXRhOiBFeGNsdXNpb25Qcm9jZXNzU3RlcEdyb3VwW10gPSBbXTtcbiAgICBwcml2YXRlIF9wcm9jZXNzR3JvdXBDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICAgIHByaXZhdGUgX3Byb2Nlc3NTdGVwQ29sdW1uczogYW55W10gPSBbXTtcbiAgICBwcml2YXRlIF93ZWJzb2NrZXRTZXJ2aWNlOiBXZWJzb2NrZXRTZXJ2aWNlO1xuICAgIHByaXZhdGUgX2V4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkU3Vic2NyaWJlOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfZXhjbHVzaW9uRGV0YWlsczogU2hvd0RldGFpbHNJbmZvcm1hdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2dpY2FsRGVsZXRlU2VydmljZTogTG9naWNhbERlbGV0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdENvbmZpZ3M6IExvZ2ljYWxEZWxldGVDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm91dGUuZGF0YVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiB7IFtjb25maWdzOiBzdHJpbmddOiBhbnksIGxvY2FsZUNvbmZpZzogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zIH0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZSA9IGRhdGEubG9jYWxlQ29uZmlnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NHcm91cENvbHVtbnMgPSB0aGlzLmdldEdyb3VwQ29sdW1ucygpO1xuICAgICAgICB0aGlzLl9wcm9jZXNzU3RlcENvbHVtbnMgPSB0aGlzLmdldFN0ZXBDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RXZWJTb2NrZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0RldGFpbHMoZGV0YWlsczogU2hvd0RldGFpbHNJbmZvcm1hdGlvbikge1xuICAgICAgICB0aGlzLl9leGNsdXNpb25EZXRhaWxzID0gZGV0YWlscztcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0dyb3VwRGF0YSA9IFtdO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0RldGFpbHMgPSBudWxsO1xuICAgICAgICB0aGlzLmVudGl0eURlc2NyaXB0aW9uID0gZGV0YWlscy5lbnRpdHlEZXNjcmlwdGlvbjtcblxuICAgICAgICB0aGlzLmxvYWRQcm9jZXNzRGV0YWlscyhkZXRhaWxzKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25WaXNpYmlsaXR5Q2hhbmdlZChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuY2xvc2VEZXRhaWxzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlRGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2V4Y2x1c2lvbkRldGFpbHMgPSBudWxsO1xuICAgICAgICB0aGlzLl9wcm9jZXNzR3JvdXBEYXRhID0gW107XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlNvY2tldCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZWNvcmREZXNjcmlwdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NEZXRhaWxzPy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGV0YWlscy5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5pY2lhbERhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5wcm9jZXNzRGV0YWlscz8uc3RhcnREYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb21lbnQodGhpcy5wcm9jZXNzRGV0YWlscy5zdGFydERhdGUpLmZvcm1hdChcIkREL01NL1lZWVkgSEg6bW06c3NcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbmlzaERhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5wcm9jZXNzRGV0YWlscz8uZmluaXNoRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMucHJvY2Vzc0RldGFpbHMuZmluaXNoRGF0ZSkuZm9ybWF0KFwiREQvTU0vWVlZWSBISDptbTpzc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNGaW5pc2hlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5wcm9jZXNzRGV0YWlscz8uZmluaXNoRGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2hvd0V4Y2x1c2lvbnNCdXR0b25MYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5wcm9qZWN0Q29uZmlncy5nZXRUcmFuc2xhdGlvblByZWZpeCgpfS5sb2dpY2FsX2RlbGV0ZV9zaG93X2RlbGV0aW9uc2ApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDbG9zZUJ1dHRvbkxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX2Nsb3NlYCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN1bW1hcnlMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5wcm9qZWN0Q29uZmlncy5nZXRUcmFuc2xhdGlvblByZWZpeCgpfS5sb2dpY2FsX2RlbGV0ZV9zdW1tYXJ5YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN0YXJ0RGF0ZUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX3N0YXJ0YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbmlzaERhdGVMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5wcm9qZWN0Q29uZmlncy5nZXRUcmFuc2xhdGlvblByZWZpeCgpfS5sb2dpY2FsX2RlbGV0ZV9maW5pc2hgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2lkZWJhclRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX2RldGFpbHNfdGl0bGVgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW1wdHlTdGF0ZVRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0aGlzLnByb2plY3RDb25maWdzLmdldFRyYW5zbGF0aW9uUHJlZml4KCl9LmxvZ2ljYWxfZGVsZXRlX2VtcHR5X3N0YXRlX3RpdGxlYCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVtcHR5U3RhdGVEZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5wcm9qZWN0Q29uZmlncy5nZXRUcmFuc2xhdGlvblByZWZpeCgpfS5sb2dpY2FsX2RlbGV0ZV9lbXB0eV9zdGF0ZV9kZXNjcmlwdGlvbmApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0R3JvdXBDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpZWxkOiBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW1wiZGVzY3JpcHRpb25cIl0sXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfZ3JvdXBgKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBFbnVtQ29sdW1uRmllbGRUeXBlLlNUUklORyxcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIzNDBweFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJzdGF0dXNcIixcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXCJzdGF0dXNcIl0sXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfc3RhdHVzYCksXG4gICAgICAgICAgICAgICAgdHlwZTogRW51bUNvbHVtbkZpZWxkVHlwZS5FTlVNLFxuICAgICAgICAgICAgICAgIGVudW1QcmVmaXg6IGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfZW51bV9leGNsdXNpb25fcHJvY2Vzc19zdGF0dXNfYCxcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDBweFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiB0aGlzLmdldENvbHVtblN0YXR1c1Rvb2x0aXAsXG4gICAgICAgICAgICAgICAgYmFkZ2VDb25maWdzOiBFWENMVVNJT05fUFJPQ0VTU19TVEFUVVNfQkFER0VcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0ZXBDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpZWxkOiBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW1wiZGVzY3JpcHRpb25cIl0sXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RoaXMucHJvamVjdENvbmZpZ3MuZ2V0VHJhbnNsYXRpb25QcmVmaXgoKX0ubG9naWNhbF9kZWxldGVfc3RlcGApLFxuICAgICAgICAgICAgICAgIHR5cGU6IEVudW1Db2x1bW5GaWVsZFR5cGUuU1RSSU5HLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjM0MHB4XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpZWxkOiBcInN0YXR1c1wiLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcInN0YXR1c1wiXSxcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dGhpcy5wcm9qZWN0Q29uZmlncy5nZXRUcmFuc2xhdGlvblByZWZpeCgpfS5sb2dpY2FsX2RlbGV0ZV9zdGF0dXNgKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBFbnVtQ29sdW1uRmllbGRUeXBlLkVOVU0sXG4gICAgICAgICAgICAgICAgZW51bVByZWZpeDogYCR7dGhpcy5wcm9qZWN0Q29uZmlncy5nZXRUcmFuc2xhdGlvblByZWZpeCgpfS5sb2dpY2FsX2RlbGV0ZV9lbnVtX2V4Y2x1c2lvbl9wcm9jZXNzX3N0YXR1c19gLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMHB4XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHRoaXMuZ2V0Q29sdW1uU3RhdHVzVG9vbHRpcCxcbiAgICAgICAgICAgICAgICBiYWRnZUNvbmZpZ3M6IEVYQ0xVU0lPTl9QUk9DRVNTX1NUQVRVU19CQURHRVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU3RhdHVzVG9vbHRpcChyb3dWYWx1ZTogRXhjbHVzaW9uRGV0YWlscykge1xuICAgICAgICBpZiAocm93VmFsdWUuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93VmFsdWUuZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkUHJvY2Vzc0RldGFpbHMoZGV0YWlsczogU2hvd0RldGFpbHNJbmZvcm1hdGlvbikge1xuICAgICAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NPYnNlcnZhYmxlID0gZGV0YWlscy5wcm9jZXNzSWRcbiAgICAgICAgICAgID8gdGhpcy5sb2dpY2FsRGVsZXRlU2VydmljZS5nZXRQcm9jZXNzRGV0YWlscyhkZXRhaWxzLnByb2Nlc3NJZClcbiAgICAgICAgICAgIDogdGhpcy5sb2dpY2FsRGVsZXRlU2VydmljZS5nZXRMYXRlc3RQcm9jZXNzRGV0YWlscyhkZXRhaWxzLnJlY29yZElkKTtcblxuICAgICAgICBwcm9jZXNzT2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwcm9jZXNzOiBFeGNsdXNpb25Qcm9jZXNzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZXRhaWxzID0gcHJvY2VzcztcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzR3JvdXBEYXRhID0gdGhpcy5zb3J0R3JvdXBzQnlTdGFydERhdGUocHJvY2Vzcy5ncm91cHMpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAocCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLnNvcnRTdGVwc0J5U3RhcnREYXRlKHAuc3RlcHMpXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRSb3dzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0dyb3VwRGF0YVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHAgPT4gcC5zdGF0dXMgIT09IEVudW1FeGNsdXNpb25Qcm9jZXNzU3RhdHVzLlNVQ0NFU1MpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZFJvd3NbcC5pZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydEJ5RGF0ZShzdGFydERhdGU6IERhdGUsIGZpbmlzaERhdGU6IERhdGUpIHtcbiAgICAgICAgaWYgKHN0YXJ0RGF0ZS5nZXRUaW1lKCkgPiBmaW5pc2hEYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0RGF0ZS5nZXRUaW1lKCkgPCBmaW5pc2hEYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydEdyb3Vwc0J5U3RhcnREYXRlKGdyb3VwczogRXhjbHVzaW9uUHJvY2Vzc1N0ZXBHcm91cFtdKSB7XG4gICAgICAgIHJldHVybiBncm91cHMuc29ydCgoYSwgYikgPT4gdGhpcy5zb3J0QnlEYXRlKGEuc3RhcnREYXRlLCBiLmZpbmlzaERhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRTdGVwc0J5U3RhcnREYXRlKHN0ZXBzOiBFeGNsdXNpb25Qcm9jZXNzU3RlcFtdKSB7XG4gICAgICAgIHJldHVybiBzdGVwcy5zb3J0KChhLCBiKSA9PiB0aGlzLnNvcnRCeURhdGUoYS5zdGFydERhdGUsIGIuZmluaXNoRGF0ZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzY29ubmVjdFdlYlNvY2tldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2V4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkU3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9leGNsdXNpb25Qcm9jZXNzU3RhdHVzQ2hhbmdlZFN1YnNjcmliZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fZXhjbHVzaW9uUHJvY2Vzc1N0YXR1c0NoYW5nZWRTdWJzY3JpYmUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlYnNvY2tldFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlYnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5fd2Vic29ja2V0U2VydmljZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbm5lY3RXZWJTb2NrZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWJzb2NrZXRTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RXZWJTb2NrZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3dlYnNvY2tldFNlcnZpY2UgPSBuZXcgV2Vic29ja2V0U2VydmljZSgpO1xuICAgICAgICB0aGlzLl93ZWJzb2NrZXRTZXJ2aWNlXG4gICAgICAgICAgICAub25Db25uZWN0KClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydExpc3RlbmluZ1dlYmhvb2tFdmVudHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRMaXN0ZW5pbmdXZWJob29rRXZlbnRzKCkge1xuICAgICAgICB0aGlzLl93ZWJzb2NrZXRTZXJ2aWNlXG4gICAgICAgICAgICAub25FcnJvcigpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ29uRXJyb3InLCBkYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2V4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkU3Vic2NyaWJlID0gdGhpcy5fd2Vic29ja2V0U2VydmljZVxuICAgICAgICAgICAgLm9uRXZlbnQ8V2Vic29ja2V0RXZlbnREYXRhPEV4Y2x1c2lvblByb2Nlc3NTdGF0dXNDaGFuZ2VkPj4oe1xuICAgICAgICAgICAgICAgIGRvbWFpbjogdGhpcy5wcm9qZWN0Q29uZmlncy5nZXREb21haW4oKSxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnByb2plY3RDb25maWdzLmdldFNlcnZpY2UoKSxcbiAgICAgICAgICAgICAgICBwcmltaXRpdmU6IFwiZXhjbHVzaW9uUHJvY2Vzc1N0YXR1c0NoYW5nZWRcIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFdlYnNvY2tldEV2ZW50RGF0YTxFeGNsdXNpb25Qcm9jZXNzU3RhdHVzQ2hhbmdlZD4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGV2ZW50O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2V4Y2x1c2lvbkRldGFpbHMucHJvY2Vzc0lkICYmIGRhdGEucGlkID09PSB0aGlzLl9leGNsdXNpb25EZXRhaWxzLnByb2Nlc3NJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcm9jZXNzRGV0YWlscyh0aGlzLl9leGNsdXNpb25EZXRhaWxzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9leGNsdXNpb25EZXRhaWxzLnJlY29yZElkICYmIGRhdGEucmVjb3JkSWQgPT09IHRoaXMuX2V4Y2x1c2lvbkRldGFpbHMucmVjb3JkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RldGFpbHModGhpcy5fZXhjbHVzaW9uRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|