@csmart/ngc-smart-victim 1.18.24 → 1.18.25
Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
|
|
1
1
|
import { Component } from '@angular/core';
|
2
2
|
import { NgcSmartVictimService } from '../smart-victim.service';
|
3
|
-
import {
|
3
|
+
import { UntypedFormBuilder, Validators, FormControl } from '@angular/forms';
|
4
4
|
import { MatDialog } from '@angular/material/dialog';
|
5
5
|
import { CommonDialogService } from '.././common-dialog/common-dialog.service';
|
6
6
|
import { HttpClient } from '@angular/common/http';
|
@@ -40,7 +40,7 @@ export class VictimSafetyPlanDetailComponent {
|
|
40
40
|
this.router = router;
|
41
41
|
this.commonDialogService = commonDialogService;
|
42
42
|
this.formBuilder = formBuilder;
|
43
|
-
this.editSafetyPlan = {};
|
43
|
+
this.editSafetyPlan = { vVictimServiceDetails: [] };
|
44
44
|
this.providerListCollection = [];
|
45
45
|
this.serviceCheck = [];
|
46
46
|
this.victimServiceStatusHistoriesDataSource = new MatTableDataSource();
|
@@ -48,16 +48,16 @@ export class VictimSafetyPlanDetailComponent {
|
|
48
48
|
}
|
49
49
|
initForm() {
|
50
50
|
this.spForm = this.formBuilder.group({
|
51
|
-
serviceGoal: new
|
51
|
+
serviceGoal: new FormControl('', Validators.compose([
|
52
52
|
Validators.required
|
53
53
|
])),
|
54
|
-
goalStatus: new
|
54
|
+
goalStatus: new FormControl('', Validators.compose([
|
55
55
|
Validators.required
|
56
56
|
])),
|
57
|
-
goalStatusDate: new
|
57
|
+
goalStatusDate: new FormControl('', Validators.compose([
|
58
58
|
Validators.required, dateValidator()
|
59
59
|
])),
|
60
|
-
comment: new
|
60
|
+
comment: new FormControl('', Validators.required)
|
61
61
|
});
|
62
62
|
this.spForm.markAsPristine();
|
63
63
|
this.spForm.markAsUntouched();
|
@@ -93,12 +93,20 @@ export class VictimSafetyPlanDetailComponent {
|
|
93
93
|
console.log(victimSafetyPlans);
|
94
94
|
this.editSafetyPlan = victimSafetyPlans[0];
|
95
95
|
this.victimId = victimSafetyPlans[0].victimId;
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
96
|
+
this.spForm = this.formBuilder.group({
|
97
|
+
serviceGoal: new FormControl(this.editSafetyPlan.goal, Validators.compose([
|
98
|
+
Validators.required
|
99
|
+
])),
|
100
|
+
goalStatus: new FormControl(this.editSafetyPlan.victimServiceStatusId, Validators.compose([
|
101
|
+
Validators.required
|
102
|
+
])),
|
103
|
+
goalStatusDate: new FormControl(this.editSafetyPlan.startDate, Validators.compose([
|
104
|
+
Validators.required, dateValidator()
|
105
|
+
])),
|
106
|
+
comment: new FormControl(this.editSafetyPlan.comment, Validators.required)
|
107
|
+
});
|
108
|
+
this.spForm.markAsPristine();
|
109
|
+
this.spForm.markAsUntouched();
|
102
110
|
});
|
103
111
|
this._victimServicesComponent.getServiceStatusHistories(this.victimServiceId).subscribe(victimServiceStatusHistories => {
|
104
112
|
// this.victimServiceStatusHistories = victimServiceStatusHistories;
|
@@ -183,6 +191,8 @@ export class VictimSafetyPlanDetailComponent {
|
|
183
191
|
// });
|
184
192
|
// }
|
185
193
|
evaluateSelection(victimServiceTypeId) {
|
194
|
+
console.log('evaluateSelection');
|
195
|
+
console.log(this.editSafetyPlan.vVictimServiceDetails);
|
186
196
|
if (this.editSafetyPlan.vVictimServiceDetails) {
|
187
197
|
return this.editSafetyPlan.vVictimServiceDetails.findIndex(r => r.victimServiceTypeId === victimServiceTypeId) >= 0;
|
188
198
|
}
|
@@ -203,8 +213,8 @@ export class VictimSafetyPlanDetailComponent {
|
|
203
213
|
victimId: this.victimId,
|
204
214
|
fullName: null,
|
205
215
|
victimServiceId: 0,
|
206
|
-
goal: this.
|
207
|
-
comment: this.
|
216
|
+
goal: this.spForm.get('serviceGoal')?.value,
|
217
|
+
comment: this.spForm.get('comment')?.value,
|
208
218
|
modifiedBy: this.staffId,
|
209
219
|
victimServiceStatusId: null,
|
210
220
|
status: null,
|
@@ -216,8 +226,8 @@ export class VictimSafetyPlanDetailComponent {
|
|
216
226
|
const victimServiceStatus = {
|
217
227
|
victimServiceStatusHistoryId: 0,
|
218
228
|
victimServiceId: itms.victimServiceId,
|
219
|
-
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
220
|
-
startDate: this.editSafetyPlan.startDate,
|
229
|
+
victimServiceStatusId: this.spForm.get('goalStatus')?.value ?? this.editSafetyPlan.victimServiceStatusId,
|
230
|
+
startDate: this.spForm.get('goalStatusDate')?.value ?? this.editSafetyPlan.startDate,
|
221
231
|
modifiedBy: this.staffId,
|
222
232
|
comment: 'test add safety plan'
|
223
233
|
};
|
@@ -279,12 +289,12 @@ export class VictimSafetyPlanDetailComponent {
|
|
279
289
|
victimId: this.victimId,
|
280
290
|
fullName: null,
|
281
291
|
victimServiceId: 0,
|
282
|
-
goal: this.editSafetyPlan.goal,
|
283
|
-
comment: this.editSafetyPlan.comment,
|
292
|
+
goal: this.spForm.get('serviceGoal')?.value ?? this.editSafetyPlan.goal,
|
293
|
+
comment: this.spForm.get('comment')?.value ?? this.editSafetyPlan.comment,
|
284
294
|
modifiedBy: this.staffId,
|
285
|
-
victimServiceStatusId: null,
|
295
|
+
victimServiceStatusId: this.spForm.get('goalStatus')?.value ?? null,
|
286
296
|
status: null,
|
287
|
-
startDate: null,
|
297
|
+
startDate: this.spForm.get('goalStatusDate')?.value ?? null,
|
288
298
|
vVictimServiceDetails: null,
|
289
299
|
victimName: null
|
290
300
|
};
|
@@ -308,15 +318,19 @@ export class VictimSafetyPlanDetailComponent {
|
|
308
318
|
else {
|
309
319
|
// this.editSafetyPlan.modifiedBy=this.loginStaff.staffId;
|
310
320
|
this.editSafetyPlan.modifiedBy = this.staffId;
|
321
|
+
this.editSafetyPlan.goal = this.spForm.get('serviceGoal')?.value ?? this.editSafetyPlan.goal;
|
322
|
+
this.editSafetyPlan.comment = this.spForm.get('comment')?.value ?? this.editSafetyPlan.comment;
|
323
|
+
this.editSafetyPlan.victimServiceStatusId = this.spForm.get('goalStatus')?.value ?? this.editSafetyPlan.victimServiceStatusId;
|
324
|
+
this.editSafetyPlan.startDate = this.spForm.get('goalStatusDate')?.value ?? this.editSafetyPlan.startDate;
|
311
325
|
this._victimServicesComponent.updateSafetyPlan(this.editSafetyPlan).subscribe(resp => {
|
312
326
|
// this.snackBar.open('update Successfully!', '', {
|
313
327
|
// duration: 3000,
|
314
328
|
// });
|
315
329
|
const victimServiceStatus = {
|
316
330
|
victimServiceStatusHistoryId: 0,
|
317
|
-
victimServiceId: this.editSafetyPlan.victimServiceId
|
318
|
-
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
319
|
-
startDate: this.editSafetyPlan.startDate,
|
331
|
+
victimServiceId: this.spForm.get('victimServiceId')?.value ?? this.editSafetyPlan.victimServiceId,
|
332
|
+
victimServiceStatusId: this.spForm.get('goalStatus')?.value ?? this.editSafetyPlan.victimServiceStatusId,
|
333
|
+
startDate: this.spForm.get('goalStatusDate')?.value ?? this.editSafetyPlan.startDate,
|
320
334
|
modifiedBy: this.staffId,
|
321
335
|
comment: 'test update safety Plan'
|
322
336
|
};
|
@@ -337,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
337
351
|
type: Component,
|
338
352
|
args: [{ providers: [CommonDialogService], template: "<mat-card class=\"safety-plan-card mat-typography\">\r\n <mat-card-header></mat-card-header>\r\n \r\n <mat-card-content>\r\n <mat-toolbar color=\"primary\" class=\"card-toolbar\">\r\n <h4 class=\"card-header\">Safety Plan</h4>\r\n </mat-toolbar>\r\n \r\n <div class=\"form-container\">\r\n <form [formGroup]=\"spForm\">\r\n <!-- Victim Name -->\r\n <div class=\"form-row\">\r\n <label class=\"row-label\">Victim Name:</label>\r\n <span>{{ victimName }}</span>\r\n </div>\r\n \r\n <!-- Goal -->\r\n <div class=\"form-row\">\r\n <mat-form-field >\r\n <mat-label>Goal</mat-label>\r\n <input matInput formControlName=\"serviceGoal\" />\r\n </mat-form-field>\r\n </div>\r\n \r\n <!-- Goal Status -->\r\n <div class=\"form-row\">\r\n <mat-form-field >\r\n <mat-label>Goal Status</mat-label>\r\n <mat-select formControlName=\"goalStatus\">\r\n <mat-option\r\n *ngFor=\"let victimServiceStatu of victimServiceStatus\"\r\n [value]=\"victimServiceStatu.victimServiceStatusId\">\r\n {{ victimServiceStatu.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n \r\n <!-- Goal Status Date -->\r\n <div class=\"form-row\">\r\n <mat-form-field >\r\n <mat-label>Goal Status Date</mat-label>\r\n <input\r\n matInput\r\n formControlName=\"goalStatusDate\"\r\n [matDatepicker]=\"goalStatusDate\"\r\n placeholder=\"Choose a date\"\r\n (click)=\"goalStatusDate.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"goalStatusDate\"></mat-datepicker-toggle>\r\n <mat-datepicker #goalStatusDate></mat-datepicker>\r\n </mat-form-field>\r\n <mat-error\r\n *ngIf=\"\r\n spForm.get('goalStatusDate').hasError('date') &&\r\n (spForm.get('goalStatusDate').dirty || spForm.get('goalStatusDate').touched)\r\n \">\r\n Future Date is <strong>not allowed</strong> for goal status date\r\n </mat-error>\r\n </div>\r\n \r\n <!-- Comment -->\r\n <div class=\"form-row\">\r\n <mat-form-field class=\"comment-field\">\r\n <mat-label>Comment</mat-label>\r\n <textarea\r\n matInput\r\n formControlName=\"comment\"\r\n cdkTextareaAutosize\r\n #autosize=\"cdkTextareaAutosize\"\r\n cdkAutosizeMinRows=\"4\"\r\n cdkAutosizeMaxRows=\"10\">\r\n </textarea>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n </div>\r\n \r\n <!-- Provider Section -->\r\n <div class=\"provider-container\">\r\n <label class=\"row-label\">Need and Provider</label>\r\n <p>(click on a check box to select provider information)</p>\r\n \r\n <mat-list>\r\n <mat-list-item\r\n *ngFor=\"let serviceType of victimServiceTypes\"\r\n style=\"display: flex; align-items: center; justify-content: flex-start;\"\r\n >\r\n <mat-checkbox\r\n color=\"primary\"\r\n [checked]=\"evaluateSelection(serviceType.victimServiceTypeId)\"\r\n (change)=\"isInArray(serviceType.victimServiceTypeId, serviceType.name, $event)\"\r\n >\r\n <div class=\"checkbox-label-group\">\r\n {{ serviceType.name }}\r\n <div\r\n *ngIf=\"evaluateSelection(serviceType.victimServiceTypeId)\"\r\n style=\"margin-left: auto; display: flex; align-items: center; gap: 1rem;\">\r\n <ng-container *ngFor=\"let serviceprovider of editSafetyPlan.vVictimServiceDetails\">\r\n <ng-container *ngIf=\"serviceType.victimServiceTypeId === serviceprovider.victimServiceTypeId\">\r\n - <b>{{ serviceprovider.victimProgramProvider }}</b>\r\n <button\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"deleteProvider(serviceprovider.victimServiceDetailId)\"\r\n >\r\n Remove Provider\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-checkbox>\r\n </mat-list-item>\r\n </mat-list>\r\n \r\n \r\n \r\n </div>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"action-buttons\">\r\n <button\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"saveSafetyPlan()\"\r\n [disabled]=\"!spForm.valid\">\r\n Save\r\n </button>\r\n \r\n <button\r\n mat-stroked-button\r\n color=\"primary\"\r\n (click)=\"back()\">\r\n Back\r\n </button>\r\n </div>\r\n \r\n <!-- Status History -->\r\n <mat-table\r\n #table\r\n [dataSource]=\"victimServiceStatusHistoriesDataSource\"\r\n class=\"example-table status-history-table\">\r\n \r\n <ng-container matColumnDef=\"startDate\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">\r\n Start Date\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n {{ row.startDate | date }}\r\n </mat-cell>\r\n </ng-container>\r\n \r\n <ng-container matColumnDef=\"victimServiceStatusId\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">\r\n Status\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n {{ row.victimServiceStatusId }}\r\n </mat-cell>\r\n </ng-container>\r\n \r\n <ng-container matColumnDef=\"comment\">\r\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">\r\n Comment\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\r\n {{ row.comment }}\r\n </mat-cell>\r\n </ng-container>\r\n \r\n <mat-header-row\r\n *matHeaderRowDef=\"['startDate', 'victimServiceStatusId', 'comment']\"\r\n class=\"example-header-row\">\r\n </mat-header-row>\r\n \r\n <mat-row\r\n *matRowDef=\"let row; columns: ['startDate','victimServiceStatusId','comment']\"\r\n class=\"example-row\">\r\n </mat-row>\r\n </mat-table>\r\n </mat-card-content>\r\n </mat-card>\r\n ", styles: ["div.serviceSelect{width:500px}div.serviceButton{width:20%}.container{margin:16px;display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;grid-auto-rows:minmax(50px,auto);justify-items:stretch}.app-class .mat-mdc-list-item{height:auto}.textarea-content{width:500px}.service-list-item.mat-list-item{display:block;padding:.5rem 1rem}.checkbox-delete-row{display:flex;align-items:center;gap:1rem}.provider-details{margin-left:1.5rem;margin-top:.5rem}.provider-row{margin-bottom:.5rem}.checkbox-label-group{display:flex;align-items:center;gap:1rem}\n"] }]
|
339
353
|
}], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.NgcSmartVictimService }, { type: i3.HttpClient }, { type: i4.MatSnackBar }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.CommonDialogService }, { type: i7.UntypedFormBuilder }] });
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc2FmZXR5UGxhbi92aWN0aW1TYWZldHlQbGFuRGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zYWZldHlQbGFuL3ZpY3RpbVNhZmV0eVBsYW5EZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFvQixrQkFBa0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQTtBQUVoRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTN0QsTUFBTSxPQUFPLCtCQUErQjtJQWtDMUMsWUFDUyxNQUFpQixFQUNoQix3QkFBK0MsRUFD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QkFDdkIsT0FBTyxFQUFDLHlCQUF5QjtpQkFDaEMsQ0FBQztnQkFFSixJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFHdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQztZQUU1RixDQUFDLENBQ1YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztpSUE5Y1UsK0JBQStCO3FIQUEvQiwrQkFBK0IsdUNBTC9CLENBQUMsbUJBQW1CLENBQUMsMEJDcEJsQyxpb1BBc0xNOzsyRkQ3Sk8sK0JBQStCO2tCQVAzQyxTQUFTO2dDQUVHLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlcixWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBWaWN0aW1TYWZldHlQbGFuLFZpY3RpbVNlcnZpY2VEZXRhaWwsXHJcbiAgVmljdGltU2VydmljZVN0YXR1c0hpc3RvcnksVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbCxcclxuICBQcm92aWRlckxpc3RDb2xsZWN0aW9uTW9kZWwgfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb21tb25EaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uL2NvbW1vbi1kaWFsb2cvY29tbW9uLWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNlbGVjdGVkT2ZmZW5kZXIsIExvZ2luU3RhZmYgfSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1jb3JlJztcclxuaW1wb3J0IHsgZGF0ZVZhbGlkYXRvciwgcGFzc0RhdGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zaGFyZWQvdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IFNlcml2ZVByb3ZpZGVyQ29tcG9uZW50fSBmcm9tICcuLi9zYWZldHlQbGFuL3NlcnZpY2VQcm92aWRlci5jb21wb25lbnQnXHJcbmltcG9ydCB7IFByb3ZpZGVyc0RpYWxvZ0RhdGF9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpY3RpbVNhZmV0eVBsYW5EZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW0NvbW1vbkRpYWxvZ1NlcnZpY2VdLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpY3RpbVNhZmV0eVBsYW4uY29tcG9uZW50LmNzcyddXHJcbiBcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBWaWN0aW1TYWZldHlQbGFuRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIGhpZGRlbkFkZE5ld0ZsYWc6IGJvb2xlYW47XHJcbiAgc2FmZXR5UGxhbnM6IFZpY3RpbVNhZmV0eVBsYW5bXTtcclxuICBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuO1xyXG4gIGVkaXRTYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0gPFZpY3RpbVNhZmV0eVBsYW4+e307XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgY29udGFjdFR5cGVzOiBhbnlbXTtcclxuICBjb250YWN0UHVycG9zZXM6IGFueVtdO1xyXG4gIHZpY3RpbVNlcnZpY2VUeXBlczogYW55W107XHJcbiAgdmljdGltU2FmZXR5UGxhbnM6IFZpY3RpbVNhZmV0eVBsYW5bXTtcclxuICB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBhbnlbXTtcclxuICBwcm92aWRlckxpc3Q6IFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVyTW9kZWxbXTtcclxuICBwcm92aWRlckxpc3RDb2xsZWN0aW9uOlByb3ZpZGVyTGlzdENvbGxlY3Rpb25Nb2RlbFtdPVtdO1xyXG4gIHZpY3RpbVNlcnZpY2VEZXRhaWw6IFZpY3RpbVNlcnZpY2VEZXRhaWxbXTtcclxuICBpbmR4OmFueTtcclxuICBzZXJ2aWNlQ2hlY2sgPSBbXTtcclxuICB2aWN0aW1OYW1lOiBzdHJpbmc7XHJcbiAgaXNEaXNwbGF5OiBib29sZWFuO1xyXG4gIHN0YWZmSWQ6IG51bWJlcjtcclxuICB2aWN0aW1JZDogbnVtYmVyO1xyXG4gIHZpY3RpbVNlcnZpY2VJZDogbnVtYmVyO1xyXG4gIG9mZmVuZGVySWQ6IG51bWJlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIHByaXZhdGUgc3ViOiBhbnk7XHJcbiAgcmVzdWx0OiBhbnk7XHJcbiAgdmljdGltU2VydmljZVN0YXR1c0hpc3Rvcmllc0RhdGFTb3VyY2U9IG5ldyAgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgcHJvdmlkZXJJZDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkOiBzdHJpbmc7XHJcblxyXG5cclxuICBzcEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfdmljdGltU2VydmljZXNDb21wb25lbnQ6IE5nY1NtYXJ0VmljdGltU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICAgXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGluaXRGb3JtKCkge1xyXG5cclxuXHRcclxuXHRcdFx0dGhpcy5zcEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBzZXJ2aWNlR29hbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcdFx0ICBdKSksXHJcbiAgICAgICAgICBnb2FsU3RhdHVzOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHRcdCAgXSkpLFxyXG4gICAgICAgICAgZ29hbFN0YXR1c0RhdGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsZGF0ZVZhbGlkYXRvcigpXHRcdCAgXSkpLFxyXG4gICAgICAgICAgY29tbWVudDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyxWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zcEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgdGhpcy5zcEZvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgXHJcblxyXG4gICAgdmFyIGRhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE7XHJcbiAgICB0aGlzLmxvZ2luU3RhZmYgPSBkYXRhLmxvZ2luU3RhZmY7XHJcbiAgICB0aGlzLnN0YWZmSWQgPSAgdGhpcy5sb2dpblN0YWZmLnN0YWZmSWQ7XHJcblxyXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlSWQgPSBwYXJhbXNbJ3ZpY3RpbVNlcnZpY2VJZCddO1xyXG4gICAgICB0aGlzLnZpY3RpbUlkID0gcGFyYW1zWyd2aWN0aW1JZCddO1xyXG4gXHJcbiAgICB9KTtcclxuICAgXHJcbiAgICB0aGlzLmhpZGRlbkFkZE5ld0ZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNEaXNwbGF5ID0gZmFsc2U7XHJcbiAgIFxyXG4gXHJcblxyXG4gICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbVNlcnZpY2VUeXBlcygpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2VUeXBlcyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbVNlcnZpY2VTdGF0dXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlU3RhdHVzID0gaXRlbXM7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltKHRoaXMudmljdGltSWQpLnN1YnNjcmliZShcclxuICAgICAgKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZpY3RpbU5hbWUgPSBpdGVtcy5maXJzdE5hbWUgKyAnLCAnICsgaXRlbXMubGFzdE5hbWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gXHJcbiAgICAgXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS1ncmFwaFFMLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gdGhpcy5nZXRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8gdGhpcy5wcm92aWRlckxpc3QgPSByZXN1bHQ7XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy52aWN0aW1TZXJ2aWNlSWQnKTtcclxuICAgICAgLy8gY29uc29sZS5sb2codGhpcy52aWN0aW1TZXJ2aWNlSWQpO1xyXG4gICAgIFxyXG4gICAgaWYgKHRoaXMudmljdGltU2VydmljZUlkIT0wKXtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZXModGhpcy52aWN0aW1TZXJ2aWNlSWQpLnN1YnNjcmliZShcclxuICAgICAgICB2aWN0aW1TYWZldHlQbGFucyA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndmljdGltU2FmZXR5UGxhbnMnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHZpY3RpbVNhZmV0eVBsYW5zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmVkaXRTYWZldHlQbGFuID0gdmljdGltU2FmZXR5UGxhbnNbMF07XHJcbiAgICAgICAgICB0aGlzLnZpY3RpbUlkID0gIHZpY3RpbVNhZmV0eVBsYW5zWzBdLnZpY3RpbUlkO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZWRpdFNhZmV0eVBsYW4nKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZWRpdFNhZmV0eVBsYW4pO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuZWRpdFNhZmV0eVBsYW4uZ29hbCcpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5lZGl0U2FmZXR5UGxhbi5nb2FsKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmVkaXRTYWZldHlQbGFuWzBdLmdvYWwnKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZWRpdFNhZmV0eVBsYW5bMF0uZ29hbCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFNlcnZpY2VTdGF0dXNIaXN0b3JpZXModGhpcy52aWN0aW1TZXJ2aWNlSWQpLnN1YnNjcmliZShcclxuICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzID0+IHtcclxuICAgICAgICAvLyB0aGlzLnZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXMgPSB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzO1xyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZVN0YXR1c0hpc3Rvcmllc0RhdGFTb3VyY2UuZGF0YSA9IHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRQcm92aWRlcigpO1xyXG4gXHJcbiAgfVxyXG4gIC8vcGFzcyBpbiBpZFxyXG5pc0luQXJyYXkocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleTpzdHJpbmcsIHNlcnZpY2VUeXBlTmFtZTogc3RyaW5nLCBldmVudCl7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3Byb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXknKTtcclxuICAgIGNvbnNvbGUubG9nKHByb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXkpO1xyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZygnc2VydmljZVR5cGVOYW1lJyk7XHJcbiAgICBjb25zb2xlLmxvZyhzZXJ2aWNlVHlwZU5hbWUpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdldmVudC5zb3VyY2UudmFsdWUnKTtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50LmNoZWNrZWQpO1xyXG5cclxuICAgIGlmIChldmVudC5jaGVja2VkID09IHRydWUpe1xyXG5cclxuICAgICAgZm9yKGxldCBqPTA7ajx0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb24ubGVuZ3RoO2orKyl7XHJcbiAgICAgICAgaWYocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleT09dGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uW2pdLmdyb3VwSWQpe1xyXG4gICAgICAgICAgdGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uW2pdLmlzRGlzcGxheT0hdGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uW2pdLmlzRGlzcGxheTtcclxuXHJcbiAgICAgXHJcblxyXG4gICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlcml2ZVByb3ZpZGVyQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgICAgIGRhdGE6IDxQcm92aWRlcnNEaWFsb2dEYXRhPntcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgIHNlcnZpY2VUeXBlOnNlcnZpY2VUeXBlTmFtZSxcclxuICAgICAgICAgICBzZXJ2aWNlVHlwZUlkOiBwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5LFxyXG4gICAgICAgICAgIHByb3ZpZGVyQ29sbGVjdGlvbnM6IFsuLi50aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb25dLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdmb3JtRmllbGRXaWR0aDQ4MCcsXHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBkaWFsb2cgd2FzIGNsb3NlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZSBkaWFsb2cgd2FzIGNsb3NlZCwgaW5zaWRlIHJlc3VsdCcpO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVQbGFuUHJvdmlkZXIocHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleSxyZXN1bHQudm90ZWVQcm92aWRlcklkKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgICAvLyByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfS8vaWYgZXZlbnQuY2hlY2tlZCA9PSB0cnVlXHJcbiAgICAgLy90aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsIHRoaXMudmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcbiAgICAgIFxyXG4gIH1cclxuXHJcbmxvYWRQcm92aWRlcigpeyBcclxuXHJcbiB0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb249W107XHJcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXR2VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzKClcclxuICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAocHJvdmlkZXJMaXN0OlZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVyTW9kZWxbXSApPT57IFxyXG4gICAgICAgIGlmKHByb3ZpZGVyTGlzdCl7XHJcbiAgIFxyXG4gICAgICAgICAgbGV0IHByb3ZpZGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgICBmb3IobGV0IGk9MDtpPHByb3ZpZGVyTGlzdC5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXSkge1xyXG4gICAgICAgICAgICAgIHByb3ZpZGVyc1twcm92aWRlckxpc3RbaV0udmljdGltU2VydmljZVR5cGVJZF0gPSBbXTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgIGlmICggdGhpcy5lZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHMgIT0gbnVsbCApe1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGo9MDsgajx0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscy5sZW5ndGg7IGorKyl7XHJcbiAgICAgICAgICAgICAgICBpZiAoIHByb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkID09IHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzW2pdLnZpY3RpbVNlcnZpY2VJZC50b1N0cmluZygpICl7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNwbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyTGlzdENvbGxlY3Rpb24ucHVzaCh7IGdyb3VwSWQ6IHByb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkLGlzRGlzcGxheTp0aGlzLmlzRGlzcGxheSwgY29sbGVjdGlvbjogcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJvdmlkZXJzW3Byb3ZpZGVyTGlzdFtpXS52aWN0aW1TZXJ2aWNlVHlwZUlkXS5wdXNoKHByb3ZpZGVyTGlzdFtpXSk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIFxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG4vLy0tLS0tLS0tLS0tLS0tLWdyYXBoUUwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyAgIGdldFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycygpOiBPYnNlcnZhYmxlPFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVyTW9kZWxbXT4ge1xyXG4vLyAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBgXHJcbi8vICAgICAgICAge1xyXG4vLyAgICAgICAgICAgZmluZFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycyB7XHJcbi8vICAgICAgICAgICAgICAgICBkYXRhIHtcclxuLy8gICAgICAgICAgICAgICAgICAgdmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJJZFxyXG4vLyAgICAgICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlVHlwZVxyXG4vLyAgICAgICAgICAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJcclxuLy8gICAgICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfWA7XHJcbiBcclxuLy8gICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGVudmlyb25tZW50LnNtYXJ0QXBpVXJsLCB7IHF1ZXJ5OiBxdWVyeVN0cmluZyB9KVxyXG4vLyAgICAgICAgIC5tYXAocmVzdWx0ID0+IHtcclxuLy8gICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGEuZmluZFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycy5kYXRhO1xyXG4vLyAgICAgfSk7XHJcbi8vIH1cclxuXHJcbiAgZXZhbHVhdGVTZWxlY3Rpb24odmljdGltU2VydmljZVR5cGVJZDogc3RyaW5nKSB7XHJcbiAgIGlmICh0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscykge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzLmZpbmRJbmRleChyID0+IHIudmljdGltU2VydmljZVR5cGVJZCA9PT0gdmljdGltU2VydmljZVR5cGVJZCkgPj0gMDtcclxuICAgfVxyXG4gIH1cclxuXHJcblxyXG5zYXZlUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHN0cmluZyx2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgY29uc29sZS5sb2coJ3NhdmVQbGFuUHJvdmlkZXInKTtcclxuICBjb25zb2xlLmxvZyh2aWN0aW1TZXJ2aWNlVHlwZUlkKTtcclxuICBjb25zb2xlLmxvZyh2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZCk7XHJcblxyXG4gIGlmICh2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZCA9PT0gXCJcIiB8fCB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZD09PSBudWxsIHx8IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkID09PSB1bmRlZmluZWQpe1xyXG4gIFxyXG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKCdQbGVhc2UgcGljayBhIHByb2dyYW0gb24gdGhlIGRyb3AgZG93biBsaXN0ICEnLCAnJywgeyBkdXJhdGlvbjogMTIwLH0pO1xyXG4gICAvLyBhbGVydCgnUGxlYXNlIHBpY2sgYSBwcm9ncmFtIG9uIHRoZSBkcm9wIGRvd24gbGlzdCAhJyk7XHJcblxyXG4gIH1lbHNlXHJcbiAge1xyXG4gICAgXHJcbiAgaWYgKCB0aGlzLnZpY3RpbVNlcnZpY2VJZCA9PSAwKXtcclxuICAgLy9pbnNlcnRcclxuICAgY29uc29sZS5sb2coJ2luc2VydCBuZXcgcGxhbicpO1xyXG4gICBjb25zdCBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0ge1xyXG4gICAgdmljdGltSWQ6dGhpcy52aWN0aW1JZCxcclxuICAgIGZ1bGxOYW1lOiBudWxsLFxyXG4gICAgdmljdGltU2VydmljZUlkOiAwLFxyXG4gICAgZ29hbDp0aGlzLmVkaXRTYWZldHlQbGFuLmdvYWwsXHJcbiAgICBjb21tZW50OiB0aGlzLmVkaXRTYWZldHlQbGFuLmNvbW1lbnQsXHJcbiAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogbnVsbCxcclxuICAgIHN0YXR1czogbnVsbCxcclxuICAgIHN0YXJ0RGF0ZTogbnVsbCxcclxuICAgIHZWaWN0aW1TZXJ2aWNlRGV0YWlsczogbnVsbCxcclxuICAgIHZpY3RpbU5hbWU6IG51bGxcclxufTtcclxudGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkU2FmZXR5UGxhbihzYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgKGl0bXM6YW55KT0+e1xyXG4gICAgY29uc3QgdmljdGltU2VydmljZVN0YXR1czogVmljdGltU2VydmljZVN0YXR1c0hpc3Rvcnk9IHtcclxuICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICB2aWN0aW1TZXJ2aWNlSWQ6IGl0bXMudmljdGltU2VydmljZUlkLFxyXG4gICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSWQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZVN0YXR1c0lkICxcclxuICAgICAgc3RhcnREYXRlOiB0aGlzLmVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZSxcclxuICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgIGNvbW1lbnQ6J3Rlc3QgYWRkIHNhZmV0eSBwbGFuJ1xyXG4gICAgICB9O1xyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFZpY3RpbVNlcnZpY2VTdGF0dXModmljdGltU2VydmljZVN0YXR1cykuc3Vic2NyaWJlKFxyXG4gXHJcbiAgICAgICgpID0+e1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjaGVjayBpdG1zLnZpY3RpbVNlcnZpY2VJZCBpbmlzaWRlIGFkZCB2aWN0aW0gc2VyaXZlIHN0YXR1cycpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGl0bXMudmljdGltU2VydmljZUlkKTtcclxuXHJcbiAgICAgICAgY29uc3QgdmljdGltU2VydmljZURldGFpbDogVmljdGltU2VydmljZURldGFpbCA9IHtcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogaXRtcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgICAgICB2aWN0aW1TZXJ2aWNlRGV0YWlsSWQ6IDAsXHJcbiAgICAgICAgICB2aWN0aW1TZXJ2aWNlVHlwZUlkOiB2aWN0aW1TZXJ2aWNlVHlwZUlkLFxyXG4gICAgICAgICAgdmljdGltUHJvZ3JhbVByb3ZpZGVySWQ6IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkLFxyXG4gICAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICAgICAgICAgdmljdGltUHJvZ3JhbVByb3ZpZGVyOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGQgcGxhbiBwcm92aWRlciBoZXJlIGF0IGluc2VydCcpO1xyXG4gICAgXHJcbiAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VEZXRhaWwpLnN1YnNjcmliZShcclxuXHJcbiAgICAgICAgICAoKSA9PntcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCAgaXRtcy52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgKTtcclxuICAgXHJcbiAgXHJcbiAgXHJcbiAgfVxyXG5cclxuXHJcbik7XHJcbiAgfVxyXG4gIGVsc2UvL3VwZGF0ZVxyXG4gICAge1xyXG4gICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlRGV0YWlsOiBWaWN0aW1TZXJ2aWNlRGV0YWlsID0ge1xyXG4gICAgICAgIHZpY3RpbVNlcnZpY2VJZDogdGhpcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgICAgdmljdGltU2VydmljZURldGFpbElkOiAwLFxyXG4gICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHZpY3RpbVNlcnZpY2VUeXBlSWQsXHJcbiAgICAgICAgdmljdGltUHJvZ3JhbVByb3ZpZGVySWQ6IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkLFxyXG4gICAgICAgIG1vZGlmaWVkQnk6IHRoaXMuc3RhZmZJZCxcclxuICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXI6IG51bGxcclxuICAgICAgfTtcclxuICAgICAgY29uc29sZS5sb2coJ2FkZCBwbGFuIHByb3ZpZGVyIGhlcmUgYXQgdXBkYXRlJyk7XHJcbiAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFBsYW5Qcm92aWRlcih2aWN0aW1TZXJ2aWNlRGV0YWlsKS5zdWJzY3JpYmUoXHJcblxyXG4gICAgICAgICgpID0+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsICB0aGlzLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG5cclxuXHJcbiAgZGVsZXRlUHJvdmlkZXIodmljdGltUHJvZ3JhbVByb3ZpZGVySWQ6IHN0cmluZyl7XHJcblxyXG4gICAgdGhpcy5jb21tb25EaWFsb2dTZXJ2aWNlXHJcbiAgICAuY29uZmlybSgnJywgJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHByb3ZpZGVyPycsICdZZXMnLCAnTm8nKVxyXG4gICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHQpIHtcclxuICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmRlbGV0ZVByb3ZpZGVyKHZpY3RpbVByb2dyYW1Qcm92aWRlcklkLCB0aGlzLnN0YWZmSWQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignZGVsZXRlIHByb3ZpZGVyIFN1Y2Nlc3NmdWxseSAhJywgJycsIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgIH0pO1xyXG4gXHJcbiAgICAvLyBsb2NhdGlvbi5yZWxvYWQoKTtcclxuXHJcbiAgfVxyXG5zYXZlU2FmZXR5UGxhbigpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZUlkID09PSB1bmRlZmluZWQgKSB7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2FmZXR5UGxhbjogVmljdGltU2FmZXR5UGxhbiA9IHtcclxuICAgICAgICAgICAgdmljdGltSWQ6IHRoaXMudmljdGltSWQsXHJcbiAgICAgICAgICAgIGZ1bGxOYW1lOiBudWxsLFxyXG4gICAgICAgICAgICB2aWN0aW1TZXJ2aWNlSWQ6IDAsXHJcbiAgICAgICAgICAgIGdvYWw6dGhpcy5lZGl0U2FmZXR5UGxhbi5nb2FsLFxyXG4gICAgICAgICAgICBjb21tZW50OiB0aGlzLmVkaXRTYWZldHlQbGFuLmNvbW1lbnQsXHJcbiAgICAgICAgICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICAgICAgc3RhcnREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICB2VmljdGltU2VydmljZURldGFpbHM6IG51bGwsXHJcbiAgICAgICAgICAgIHZpY3RpbU5hbWU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFNhZmV0eVBsYW4oc2FmZXR5UGxhbikuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKGl0bXM6YW55KT0+e1xyXG4gICAgICAgICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBWaWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeT0ge1xyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5SWQ6MCxcclxuICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlSWQ6IGl0bXMudmljdGltU2VydmljZUlkLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQgLFxyXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5lZGl0U2FmZXR5UGxhbi5zdGFydERhdGUsXHJcbiAgICAgICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICAgICAgY29tbWVudDondGVzdCBhZGQgc2FmZXR5IFBsYW4nXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmFkZFZpY3RpbVNlcnZpY2VTdGF0dXModmljdGltU2VydmljZVN0YXR1cykuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHJlc3A9PntcclxuICAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignSW5zZXJ0IHN0YXR1cyBzdWNjZXNzZnVsbHkhJywgJycsIHtcclxuICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgIGl0bXMudmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5lZGl0U2FmZXR5UGxhbi5tb2RpZmllZEJ5PXRoaXMubG9naW5TdGFmZi5zdGFmZklkO1xyXG4gICAgICB0aGlzLmVkaXRTYWZldHlQbGFuLm1vZGlmaWVkQnkgPXRoaXMuc3RhZmZJZDtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQudXBkYXRlU2FmZXR5UGxhbih0aGlzLmVkaXRTYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzcD0+e1xyXG4gICAgICAgICAgICAvLyAgdGhpcy5zbmFja0Jhci5vcGVuKCd1cGRhdGUgU3VjY2Vzc2Z1bGx5IScsICcnLCB7XHJcbiAgICAgICAgICAgIC8vICBkdXJhdGlvbjogMzAwMCxcclxuICAgICAgICAgICAgLy8gICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VTdGF0dXM6IFZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5PSB7XHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSWQ6IHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZVN0YXR1c0lkICxcclxuICAgICAgICAgICAgICBzdGFydERhdGU6IHRoaXMuZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlLFxyXG4gICAgICAgICAgICAgIG1vZGlmaWVkQnk6dGhpcy5zdGFmZklkLFxyXG4gICAgICAgICAgICAgIGNvbW1lbnQ6J3Rlc3QgdXBkYXRlIHNhZmV0eSBQbGFuJ1xyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRWaWN0aW1TZXJ2aWNlU3RhdHVzKHZpY3RpbVNlcnZpY2VTdGF0dXMpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCAgdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBcclxuICB9XHJcblxyXG4gIGJhY2soKXtcclxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbUlkJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnZpY3RpbUlkKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuJywgdGhpcy52aWN0aW1JZF0pOyBcclxuICB9XHJcbiBcclxuXHJcbn1cclxuXHJcbiIsIjxtYXQtY2FyZCBjbGFzcz1cInNhZmV0eS1wbGFuLWNhcmQgbWF0LXR5cG9ncmFwaHlcIj5cclxuICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPjwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICBcclxuICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgIDxtYXQtdG9vbGJhciBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlNhZmV0eSBQbGFuPC9oND5cclxuICAgICAgICAgIDwvbWF0LXRvb2xiYXI+XHJcbiAgICAgIFxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic3BGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBWaWN0aW0gTmFtZSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJvdy1sYWJlbFwiPlZpY3RpbSBOYW1lOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB2aWN0aW1OYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgICAgICA8IS0tIEdvYWwgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkdvYWw8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInNlcnZpY2VHb2FsXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgICAgIDwhLS0gR29hbCBTdGF0dXMgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkdvYWwgU3RhdHVzPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdvYWxTdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZpY3RpbVNlcnZpY2VTdGF0dSBvZiB2aWN0aW1TZXJ2aWNlU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2aWN0aW1TZXJ2aWNlU3RhdHUudmljdGltU2VydmljZVN0YXR1c0lkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZpY3RpbVNlcnZpY2VTdGF0dS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgICAgICA8IS0tIEdvYWwgU3RhdHVzIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkdvYWwgU3RhdHVzIERhdGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJnb2FsU3RhdHVzRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZ29hbFN0YXR1c0RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIGEgZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvYWxTdGF0dXNEYXRlLm9wZW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImdvYWxTdGF0dXNEYXRlXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZ29hbFN0YXR1c0RhdGU+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3BGb3JtLmdldCgnZ29hbFN0YXR1c0RhdGUnKS5oYXNFcnJvcignZGF0ZScpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHNwRm9ybS5nZXQoJ2dvYWxTdGF0dXNEYXRlJykuZGlydHkgfHwgc3BGb3JtLmdldCgnZ29hbFN0YXR1c0RhdGUnKS50b3VjaGVkKVxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgRnV0dXJlIERhdGUgaXMgPHN0cm9uZz5ub3QgYWxsb3dlZDwvc3Ryb25nPiBmb3IgZ29hbCBzdGF0dXMgZGF0ZVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgICAgIDwhLS0gQ29tbWVudCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAgY2xhc3M9XCJjb21tZW50LWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+Q29tbWVudDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNka1RleHRhcmVhQXV0b3NpemVcclxuICAgICAgICAgICAgICAgICAgICAjYXV0b3NpemU9XCJjZGtUZXh0YXJlYUF1dG9zaXplXCJcclxuICAgICAgICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1pblJvd3M9XCI0XCJcclxuICAgICAgICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1heFJvd3M9XCIxMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgPCEtLSBQcm92aWRlciBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInByb3ZpZGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyb3ctbGFiZWxcIj5OZWVkIGFuZCBQcm92aWRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxwPihjbGljayBvbiBhIGNoZWNrIGJveCB0byBzZWxlY3QgcHJvdmlkZXIgaW5mb3JtYXRpb24pPC9wPlxyXG4gICAgICBcclxuICAgICAgICAgICAgPG1hdC1saXN0PlxyXG4gICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlcnZpY2VUeXBlIG9mIHZpY3RpbVNlcnZpY2VUeXBlc1wiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImV2YWx1YXRlU2VsZWN0aW9uKHNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImlzSW5BcnJheShzZXJ2aWNlVHlwZS52aWN0aW1TZXJ2aWNlVHlwZUlkLCBzZXJ2aWNlVHlwZS5uYW1lLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1sYWJlbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXJ2aWNlVHlwZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXZhbHVhdGVTZWxlY3Rpb24oc2VydmljZVR5cGUudmljdGltU2VydmljZVR5cGVJZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG87IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMXJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZXJ2aWNlcHJvdmlkZXIgb2YgZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VydmljZVR5cGUudmljdGltU2VydmljZVR5cGVJZCA9PT0gc2VydmljZXByb3ZpZGVyLnZpY3RpbVNlcnZpY2VUeXBlSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLSA8Yj57eyBzZXJ2aWNlcHJvdmlkZXIudmljdGltUHJvZ3JhbVByb3ZpZGVyIH19PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUHJvdmlkZXIoc2VydmljZXByb3ZpZGVyLnZpY3RpbVNlcnZpY2VEZXRhaWxJZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIFByb3ZpZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuICAgICAgICAgICAgICA8L21hdC1saXN0PlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZVNhZmV0eVBsYW4oKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzcEZvcm0udmFsaWRcIj5cclxuICAgICAgICAgICAgICAgIFNhdmVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIFxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCI+XHJcbiAgICAgICAgICAgICAgICBCYWNrXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgPCEtLSBTdGF0dXMgSGlzdG9yeSAtLT5cclxuICAgICAgICAgIDxtYXQtdGFibGVcclxuICAgICAgICAgICAgI3RhYmxlXHJcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXNEYXRhU291cmNlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJleGFtcGxlLXRhYmxlIHN0YXR1cy1oaXN0b3J5LXRhYmxlXCI+XHJcbiAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN0YXJ0RGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICBTdGFydCBEYXRlXHJcbiAgICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByb3cuc3RhcnREYXRlIHwgZGF0ZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2aWN0aW1TZXJ2aWNlU3RhdHVzSWRcIj5cclxuICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgU3RhdHVzXHJcbiAgICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyByb3cudmljdGltU2VydmljZVN0YXR1c0lkIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNvbW1lbnRcIj5cclxuICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgQ29tbWVudFxyXG4gICAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgcm93LmNvbW1lbnQgfX1cclxuICAgICAgICAgICAgICA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJbJ3N0YXJ0RGF0ZScsICd2aWN0aW1TZXJ2aWNlU3RhdHVzSWQnLCAnY29tbWVudCddXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICA8L21hdC1oZWFkZXItcm93PlxyXG4gICAgICBcclxuICAgICAgICAgICAgPG1hdC1yb3dcclxuICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydzdGFydERhdGUnLCd2aWN0aW1TZXJ2aWNlU3RhdHVzSWQnLCdjb21tZW50J11cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXhhbXBsZS1yb3dcIj5cclxuICAgICAgICAgICAgPC9tYXQtcm93PlxyXG4gICAgICAgICAgPC9tYXQtdGFibGU+XHJcbiAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICA8L21hdC1jYXJkPlxyXG4gICAgICAiXX0=
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc2FmZXR5UGxhbi92aWN0aW1TYWZldHlQbGFuRGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zYWZldHlQbGFuL3ZpY3RpbVNhZmV0eVBsYW5EZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUF3QyxrQkFBa0IsRUFBQyxVQUFVLEVBQWEsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJN0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFDLE1BQU0seUNBQXlDLENBQUE7QUFFaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzdELE1BQU0sT0FBTywrQkFBK0I7SUFrQzFDLFlBQ1MsTUFBaUIsRUFDaEIsd0JBQStDLEVBQy9D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RyxJQUFJLENBQUMsUUFBUSxDQUFFLENBQUMsQ0FBQztZQUU1RixDQUFDLENBQ1YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztpSUEzZFUsK0JBQStCO3FIQUEvQiwrQkFBK0IsdUNBTC9CLENBQUMsbUJBQW1CLENBQUMsMEJDcEJsQyxpb1BBc0xNOzsyRkQ3Sk8sK0JBQStCO2tCQVAzQyxTQUFTO2dDQUVHLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlcixWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBWaWN0aW1TYWZldHlQbGFuLFZpY3RpbVNlcnZpY2VEZXRhaWwsXHJcbiAgVmljdGltU2VydmljZVN0YXR1c0hpc3RvcnksVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJNb2RlbCxcclxuICBQcm92aWRlckxpc3RDb2xsZWN0aW9uTW9kZWwgfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb21tb25EaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uL2NvbW1vbi1kaWFsb2cvY29tbW9uLWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFNlbGVjdGVkT2ZmZW5kZXIsIExvZ2luU3RhZmYgfSBmcm9tICdAY3NtYXJ0L25nYy1zbWFydC1jb3JlJztcclxuaW1wb3J0IHsgZGF0ZVZhbGlkYXRvciwgcGFzc0RhdGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zaGFyZWQvdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IFNlcml2ZVByb3ZpZGVyQ29tcG9uZW50fSBmcm9tICcuLi9zYWZldHlQbGFuL3NlcnZpY2VQcm92aWRlci5jb21wb25lbnQnXHJcbmltcG9ydCB7IFByb3ZpZGVyc0RpYWxvZ0RhdGF9IGZyb20gJy4uL3NtYXJ0LXZpY3RpbS5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpY3RpbVNhZmV0eVBsYW5EZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW0NvbW1vbkRpYWxvZ1NlcnZpY2VdLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpY3RpbVNhZmV0eVBsYW4uY29tcG9uZW50LmNzcyddXHJcbiBcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBWaWN0aW1TYWZldHlQbGFuRGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIGhpZGRlbkFkZE5ld0ZsYWc6IGJvb2xlYW47XHJcbiAgc2FmZXR5UGxhbnM6IFZpY3RpbVNhZmV0eVBsYW5bXTtcclxuICBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuO1xyXG4gIGVkaXRTYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0gPFZpY3RpbVNhZmV0eVBsYW4+eyB2VmljdGltU2VydmljZURldGFpbHM6IFtdIH07XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgY29udGFjdFR5cGVzOiBhbnlbXTtcclxuICBjb250YWN0UHVycG9zZXM6IGFueVtdO1xyXG4gIHZpY3RpbVNlcnZpY2VUeXBlczogYW55W107XHJcbiAgdmljdGltU2FmZXR5UGxhbnM6IFZpY3RpbVNhZmV0eVBsYW5bXTtcclxuICB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBhbnlbXTtcclxuICBwcm92aWRlckxpc3Q6IFZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVyTW9kZWxbXTtcclxuICBwcm92aWRlckxpc3RDb2xsZWN0aW9uOlByb3ZpZGVyTGlzdENvbGxlY3Rpb25Nb2RlbFtdPVtdO1xyXG4gIHZpY3RpbVNlcnZpY2VEZXRhaWw6IFZpY3RpbVNlcnZpY2VEZXRhaWxbXTtcclxuICBpbmR4OmFueTtcclxuICBzZXJ2aWNlQ2hlY2sgPSBbXTtcclxuICB2aWN0aW1OYW1lOiBzdHJpbmc7XHJcbiAgaXNEaXNwbGF5OiBib29sZWFuO1xyXG4gIHN0YWZmSWQ6IG51bWJlcjtcclxuICB2aWN0aW1JZDogbnVtYmVyO1xyXG4gIHZpY3RpbVNlcnZpY2VJZDogbnVtYmVyO1xyXG4gIG9mZmVuZGVySWQ6IG51bWJlcjtcclxuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xyXG4gIHByaXZhdGUgc3ViOiBhbnk7XHJcbiAgcmVzdWx0OiBhbnk7XHJcbiAgdmljdGltU2VydmljZVN0YXR1c0hpc3Rvcmllc0RhdGFTb3VyY2U9IG5ldyAgTWF0VGFibGVEYXRhU291cmNlKCk7XHJcbiAgcHJvdmlkZXJJZDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkOiBzdHJpbmc7XHJcblxyXG5cclxuICBzcEZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudDogTmdjU21hcnRWaWN0aW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHVibGljIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgY29tbW9uRGlhbG9nU2VydmljZTogQ29tbW9uRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgICBcclxuICApIHtcclxuXHJcbiAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgaW5pdEZvcm0oKSB7XHJcblxyXG5cdFxyXG5cdFx0XHR0aGlzLnNwRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIHNlcnZpY2VHb2FsOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHRcdCAgXSkpLFxyXG4gICAgICAgICAgZ29hbFN0YXR1czogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHRcdCAgXSkpLFxyXG4gICAgICAgICAgZ29hbFN0YXR1c0RhdGU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxkYXRlVmFsaWRhdG9yKClcdFx0ICBdKSksXHJcbiAgICAgICAgICBjb21tZW50OiBuZXcgRm9ybUNvbnRyb2woJycsVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc3BGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgIHRoaXMuc3BGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgICBcclxuICAgIH1cclxuIFxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICAgIFxyXG5cclxuICAgIHZhciBkYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhO1xyXG4gICAgdGhpcy5sb2dpblN0YWZmID0gZGF0YS5sb2dpblN0YWZmO1xyXG4gICAgdGhpcy5zdGFmZklkID0gIHRoaXMubG9naW5TdGFmZi5zdGFmZklkO1xyXG5cclxuICAgIHRoaXMuc3ViID0gdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMudmljdGltU2VydmljZUlkID0gcGFyYW1zWyd2aWN0aW1TZXJ2aWNlSWQnXTtcclxuICAgICAgdGhpcy52aWN0aW1JZCA9IHBhcmFtc1sndmljdGltSWQnXTtcclxuIFxyXG4gICAgfSk7XHJcbiAgIFxyXG4gICAgdGhpcy5oaWRkZW5BZGROZXdGbGFnID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzRGlzcGxheSA9IGZhbHNlO1xyXG4gICBcclxuIFxyXG5cclxuICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRWaWN0aW1TZXJ2aWNlVHlwZXMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1TZXJ2aWNlVHlwZXMgPSBpdGVtcztcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRWaWN0aW1TZXJ2aWNlU3RhdHVzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoaXRlbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudmljdGltU2VydmljZVN0YXR1cyA9IGl0ZW1zO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbSh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChpdGVtczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52aWN0aW1OYW1lID0gaXRlbXMuZmlyc3ROYW1lICsgJywgJyArIGl0ZW1zLmxhc3ROYW1lO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuIFxyXG4gICAgIFxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tZ3JhcGhRTC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIC8vIHRoaXMuZ2V0VmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIC8vIHRoaXMucHJvdmlkZXJMaXN0ID0gcmVzdWx0O1xyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMudmljdGltU2VydmljZUlkJyk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudmljdGltU2VydmljZUlkKTtcclxuICAgICBcclxuICAgIGlmICh0aGlzLnZpY3RpbVNlcnZpY2VJZCE9MCl7XHJcbiAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmdldFZpY3RpbVNlcnZpY2VzKHRoaXMudmljdGltU2VydmljZUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgdmljdGltU2FmZXR5UGxhbnMgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3ZpY3RpbVNhZmV0eVBsYW5zJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh2aWN0aW1TYWZldHlQbGFucyk7XHJcblxyXG4gICAgICAgICAgdGhpcy5lZGl0U2FmZXR5UGxhbiA9IHZpY3RpbVNhZmV0eVBsYW5zWzBdO1xyXG4gICAgICAgICAgdGhpcy52aWN0aW1JZCA9ICB2aWN0aW1TYWZldHlQbGFuc1swXS52aWN0aW1JZDtcclxuICAgICAgICBcclxuICAgICAgICAgIHRoaXMuc3BGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIHNlcnZpY2VHb2FsOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lZGl0U2FmZXR5UGxhbi5nb2FsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcdFx0ICBdKSksXHJcbiAgICAgICAgICAgICAgZ29hbFN0YXR1czogbmV3IEZvcm1Db250cm9sKHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZVN0YXR1c0lkLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFx0XHQgIF0pKSxcclxuICAgICAgICAgICAgICBnb2FsU3RhdHVzRGF0ZTogbmV3IEZvcm1Db250cm9sKHRoaXMuZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxkYXRlVmFsaWRhdG9yKClcdFx0ICBdKSksXHJcbiAgICAgICAgICAgICAgY29tbWVudDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWRpdFNhZmV0eVBsYW4uY29tbWVudCxWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNwRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgdGhpcy5zcEZvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcblxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRTZXJ2aWNlU3RhdHVzSGlzdG9yaWVzKHRoaXMudmljdGltU2VydmljZUlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcyA9PiB7XHJcbiAgICAgICAgLy8gdGhpcy52aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzID0gdmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcztcclxuICAgICAgICB0aGlzLnZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXNEYXRhU291cmNlLmRhdGEgPSB2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkUHJvdmlkZXIoKTtcclxuIFxyXG4gIH1cclxuICAvL3Bhc3MgaW4gaWRcclxuaXNJbkFycmF5KHByb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXk6c3RyaW5nLCBzZXJ2aWNlVHlwZU5hbWU6IHN0cmluZywgZXZlbnQpe1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5Jyk7XHJcbiAgICBjb25zb2xlLmxvZyhwcm92aWRlckxpc3RDb2xsZWN0aW9uS2V5KTtcclxuXHJcblxyXG4gICAgY29uc29sZS5sb2coJ3NlcnZpY2VUeXBlTmFtZScpO1xyXG4gICAgY29uc29sZS5sb2coc2VydmljZVR5cGVOYW1lKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnZXZlbnQuc291cmNlLnZhbHVlJyk7XHJcbiAgICBjb25zb2xlLmxvZyhldmVudC5jaGVja2VkKTtcclxuXHJcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCA9PSB0cnVlKXtcclxuXHJcbiAgICAgIGZvcihsZXQgaj0wO2o8dGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uLmxlbmd0aDtqKyspe1xyXG4gICAgICAgIGlmKHByb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXk9PXRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbltqXS5ncm91cElkKXtcclxuICAgICAgICAgIHRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbltqXS5pc0Rpc3BsYXk9IXRoaXMucHJvdmlkZXJMaXN0Q29sbGVjdGlvbltqXS5pc0Rpc3BsYXk7XHJcblxyXG4gICAgIFxyXG5cclxuICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZXJpdmVQcm92aWRlckNvbXBvbmVudCwge1xyXG4gICAgICAgICAgd2lkdGg6ICc1MDBweCcsXHJcbiAgICAgICAgICBkYXRhOiA8UHJvdmlkZXJzRGlhbG9nRGF0YT57XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICBzZXJ2aWNlVHlwZTpzZXJ2aWNlVHlwZU5hbWUsXHJcbiAgICAgICAgICAgc2VydmljZVR5cGVJZDogcHJvdmlkZXJMaXN0Q29sbGVjdGlvbktleSxcclxuICAgICAgICAgICBwcm92aWRlckNvbGxlY3Rpb25zOiBbLi4udGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uXSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwYW5lbENsYXNzOiAnZm9ybUZpZWxkV2lkdGg0ODAnLFxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGUgZGlhbG9nIHdhcyBjbG9zZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUaGUgZGlhbG9nIHdhcyBjbG9zZWQsIGluc2lkZSByZXN1bHQnKTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlUGxhblByb3ZpZGVyKHByb3ZpZGVyTGlzdENvbGxlY3Rpb25LZXkscmVzdWx0LnZvdGVlUHJvdmlkZXJJZCk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICB9KTtcclxuICBcclxuICAgICAgICAgLy8gcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0vL2lmIGV2ZW50LmNoZWNrZWQgPT0gdHJ1ZVxyXG4gICAgIC8vdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCB0aGlzLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG4gICAgICBcclxuICB9XHJcblxyXG5sb2FkUHJvdmlkZXIoKXsgXHJcblxyXG4gdGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uPVtdO1xyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0dlZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVycygpXHJcbiAgICAgLnN1YnNjcmliZShcclxuICAgICAgKHByb3ZpZGVyTGlzdDpWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlck1vZGVsW10gKT0+eyBcclxuICAgICAgICBpZihwcm92aWRlckxpc3Qpe1xyXG4gICBcclxuICAgICAgICAgIGxldCBwcm92aWRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgICAgZm9yKGxldCBpPTA7aTxwcm92aWRlckxpc3QubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIXByb3ZpZGVyc1twcm92aWRlckxpc3RbaV0udmljdGltU2VydmljZVR5cGVJZF0pIHtcclxuICAgICAgICAgICAgICBwcm92aWRlcnNbcHJvdmlkZXJMaXN0W2ldLnZpY3RpbVNlcnZpY2VUeXBlSWRdID0gW107XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICBpZiAoIHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzICE9IG51bGwgKXtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBqPTA7IGo8dGhpcy5lZGl0U2FmZXR5UGxhbi52VmljdGltU2VydmljZURldGFpbHMubGVuZ3RoOyBqKyspe1xyXG4gICAgICAgICAgICAgICAgaWYgKCBwcm92aWRlckxpc3RbaV0udmljdGltU2VydmljZVR5cGVJZCA9PSB0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlsc1tqXS52aWN0aW1TZXJ2aWNlSWQudG9TdHJpbmcoKSApe1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzRGlzcGxheSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5wcm92aWRlckxpc3RDb2xsZWN0aW9uLnB1c2goeyBncm91cElkOiBwcm92aWRlckxpc3RbaV0udmljdGltU2VydmljZVR5cGVJZCxpc0Rpc3BsYXk6dGhpcy5pc0Rpc3BsYXksIGNvbGxlY3Rpb246IHByb3ZpZGVyc1twcm92aWRlckxpc3RbaV0udmljdGltU2VydmljZVR5cGVJZF0gfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHByb3ZpZGVyc1twcm92aWRlckxpc3RbaV0udmljdGltU2VydmljZVR5cGVJZF0ucHVzaChwcm92aWRlckxpc3RbaV0pO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICBcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcblxyXG4gIH1cclxuLy8tLS0tLS0tLS0tLS0tLS1ncmFwaFFMLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gICBnZXRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlck1vZGVsW10+IHtcclxuLy8gICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gYFxyXG4vLyAgICAgICAgIHtcclxuLy8gICAgICAgICAgIGZpbmRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMge1xyXG4vLyAgICAgICAgICAgICAgICAgZGF0YSB7XHJcbi8vICAgICAgICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlUHJvZ3JhbVByb3ZpZGVySWRcclxuLy8gICAgICAgICAgICAgICAgICAgdmljdGltU2VydmljZVR5cGVcclxuLy8gICAgICAgICAgICAgICAgICAgdmljdGltUHJvZ3JhbVByb3ZpZGVyXHJcbi8vICAgICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgIH1gO1xyXG4gXHJcbi8vICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihlbnZpcm9ubWVudC5zbWFydEFwaVVybCwgeyBxdWVyeTogcXVlcnlTdHJpbmcgfSlcclxuLy8gICAgICAgICAubWFwKHJlc3VsdCA9PiB7XHJcbi8vICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhLmZpbmRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMuZGF0YTtcclxuLy8gICAgIH0pO1xyXG4vLyB9XHJcblxyXG4gIGV2YWx1YXRlU2VsZWN0aW9uKHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc29sZS5sb2coJ2V2YWx1YXRlU2VsZWN0aW9uJyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscyk7XHJcbiAgIGlmICh0aGlzLmVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlscykge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdFNhZmV0eVBsYW4udlZpY3RpbVNlcnZpY2VEZXRhaWxzLmZpbmRJbmRleChyID0+IHIudmljdGltU2VydmljZVR5cGVJZCA9PT0gdmljdGltU2VydmljZVR5cGVJZCkgPj0gMDtcclxuICAgfVxyXG4gIH1cclxuXHJcblxyXG5zYXZlUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHN0cmluZyx2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgY29uc29sZS5sb2coJ3NhdmVQbGFuUHJvdmlkZXInKTtcclxuICBjb25zb2xlLmxvZyh2aWN0aW1TZXJ2aWNlVHlwZUlkKTtcclxuICBjb25zb2xlLmxvZyh2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZCk7XHJcblxyXG4gIGlmICh2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZCA9PT0gXCJcIiB8fCB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZD09PSBudWxsIHx8IHZpY3RpbVByb2dyYW1Qcm92aWRlcklkID09PSB1bmRlZmluZWQpe1xyXG4gIFxyXG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKCdQbGVhc2UgcGljayBhIHByb2dyYW0gb24gdGhlIGRyb3AgZG93biBsaXN0ICEnLCAnJywgeyBkdXJhdGlvbjogMTIwLH0pO1xyXG4gICAvLyBhbGVydCgnUGxlYXNlIHBpY2sgYSBwcm9ncmFtIG9uIHRoZSBkcm9wIGRvd24gbGlzdCAhJyk7XHJcblxyXG4gIH1lbHNlXHJcbiAge1xyXG4gICAgXHJcbiAgaWYgKCB0aGlzLnZpY3RpbVNlcnZpY2VJZCA9PSAwKXtcclxuICAgLy9pbnNlcnRcclxuICAgY29uc29sZS5sb2coJ2luc2VydCBuZXcgcGxhbicpO1xyXG4gICBjb25zdCBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0ge1xyXG4gICAgdmljdGltSWQ6dGhpcy52aWN0aW1JZCxcclxuICAgIGZ1bGxOYW1lOiBudWxsLFxyXG4gICAgdmljdGltU2VydmljZUlkOiAwLFxyXG4gICAgZ29hbDogIHRoaXMuc3BGb3JtLmdldCgnc2VydmljZUdvYWwnKT8udmFsdWUsXHJcbiAgICBjb21tZW50OiB0aGlzLnNwRm9ybS5nZXQoJ2NvbW1lbnQnKT8udmFsdWUsXHJcbiAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogbnVsbCxcclxuICAgIHN0YXR1czogbnVsbCxcclxuICAgIHN0YXJ0RGF0ZTogbnVsbCxcclxuICAgIHZWaWN0aW1TZXJ2aWNlRGV0YWlsczogbnVsbCxcclxuICAgIHZpY3RpbU5hbWU6IG51bGxcclxufTtcclxudGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkU2FmZXR5UGxhbihzYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgKGl0bXM6YW55KT0+e1xyXG4gICAgY29uc3QgdmljdGltU2VydmljZVN0YXR1czogVmljdGltU2VydmljZVN0YXR1c0hpc3Rvcnk9IHtcclxuICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICB2aWN0aW1TZXJ2aWNlSWQ6IGl0bXMudmljdGltU2VydmljZUlkLFxyXG4gICAgICB2aWN0aW1TZXJ2aWNlU3RhdHVzSWQ6IHRoaXMuc3BGb3JtLmdldCgnZ29hbFN0YXR1cycpPy52YWx1ZSA/PyB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VTdGF0dXNJZCxcclxuICAgICAgc3RhcnREYXRlOiB0aGlzLnNwRm9ybS5nZXQoJ2dvYWxTdGF0dXNEYXRlJyk/LnZhbHVlID8/IHRoaXMuZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlLFxyXG4gICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgY29tbWVudDondGVzdCBhZGQgc2FmZXR5IHBsYW4nXHJcbiAgICAgIH07XHJcblxyXG4gICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkVmljdGltU2VydmljZVN0YXR1cyh2aWN0aW1TZXJ2aWNlU3RhdHVzKS5zdWJzY3JpYmUoXHJcbiBcclxuICAgICAgKCkgPT57XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIGl0bXMudmljdGltU2VydmljZUlkIGluaXNpZGUgYWRkIHZpY3RpbSBzZXJpdmUgc3RhdHVzJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaXRtcy52aWN0aW1TZXJ2aWNlSWQpO1xyXG5cclxuICAgICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlRGV0YWlsOiBWaWN0aW1TZXJ2aWNlRGV0YWlsID0ge1xyXG4gICAgICAgICAgdmljdGltU2VydmljZUlkOiBpdG1zLnZpY3RpbVNlcnZpY2VJZCxcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VEZXRhaWxJZDogMCxcclxuICAgICAgICAgIHZpY3RpbVNlcnZpY2VUeXBlSWQ6IHZpY3RpbVNlcnZpY2VUeXBlSWQsXHJcbiAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogdmljdGltUHJvZ3JhbVByb3ZpZGVySWQsXHJcbiAgICAgICAgICBtb2RpZmllZEJ5OiB0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXI6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FkZCBwbGFuIHByb3ZpZGVyIGhlcmUgYXQgaW5zZXJ0Jyk7XHJcbiAgICBcclxuICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5hZGRQbGFuUHJvdmlkZXIodmljdGltU2VydmljZURldGFpbCkuc3Vic2NyaWJlKFxyXG5cclxuICAgICAgICAgICgpID0+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbkRldGFpbCcsICBpdG1zLnZpY3RpbVNlcnZpY2VJZCwgIHRoaXMudmljdGltSWQgXSk7IFxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgKTtcclxuXHJcbiAgICAgIH1cclxuICAgICApO1xyXG4gICBcclxuICBcclxuICBcclxuICB9XHJcblxyXG5cclxuKTtcclxuICB9XHJcbiAgZWxzZS8vdXBkYXRlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VEZXRhaWw6IFZpY3RpbVNlcnZpY2VEZXRhaWwgPSB7XHJcbiAgICAgICAgdmljdGltU2VydmljZUlkOiB0aGlzLnZpY3RpbVNlcnZpY2VJZCxcclxuICAgICAgICB2aWN0aW1TZXJ2aWNlRGV0YWlsSWQ6IDAsXHJcbiAgICAgICAgdmljdGltU2VydmljZVR5cGVJZDogdmljdGltU2VydmljZVR5cGVJZCxcclxuICAgICAgICB2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogdmljdGltUHJvZ3JhbVByb3ZpZGVySWQsXHJcbiAgICAgICAgbW9kaWZpZWRCeTogdGhpcy5zdGFmZklkLFxyXG4gICAgICAgIHZpY3RpbVByb2dyYW1Qcm92aWRlcjogbnVsbFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zb2xlLmxvZygnYWRkIHBsYW4gcHJvdmlkZXIgaGVyZSBhdCB1cGRhdGUnKTtcclxuICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkUGxhblByb3ZpZGVyKHZpY3RpbVNlcnZpY2VEZXRhaWwpLnN1YnNjcmliZShcclxuXHJcbiAgICAgICAgKCkgPT57XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgIHRoaXMudmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuICBkZWxldGVQcm92aWRlcih2aWN0aW1Qcm9ncmFtUHJvdmlkZXJJZDogc3RyaW5nKXtcclxuXHJcbiAgICB0aGlzLmNvbW1vbkRpYWxvZ1NlcnZpY2VcclxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcHJvdmlkZXI/JywgJ1llcycsICdObycpXHJcbiAgICAuc3Vic2NyaWJlKHJlcyA9PiB7dGhpcy5yZXN1bHQgPSAgcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdCkge1xyXG4gICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZGVsZXRlUHJvdmlkZXIodmljdGltUHJvZ3JhbVByb3ZpZGVySWQsIHRoaXMuc3RhZmZJZClcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdkZWxldGUgcHJvdmlkZXIgU3VjY2Vzc2Z1bGx5ICEnLCAnJywge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgfSk7XHJcbiBcclxuICAgIC8vIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cclxuICB9XHJcbnNhdmVTYWZldHlQbGFuKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlSWQgPT09IHVuZGVmaW5lZCApIHtcclxuXHJcbiAgICAgICAgICBjb25zdCBzYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0ge1xyXG4gICAgICAgICAgICB2aWN0aW1JZDogdGhpcy52aWN0aW1JZCxcclxuICAgICAgICAgICAgZnVsbE5hbWU6IG51bGwsXHJcbiAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogMCxcclxuICAgICAgICAgICAgZ29hbDp0aGlzLnNwRm9ybS5nZXQoJ3NlcnZpY2VHb2FsJyk/LnZhbHVlID8/IHRoaXMuZWRpdFNhZmV0eVBsYW4uZ29hbCxcclxuICAgICAgICAgICAgY29tbWVudDogdGhpcy5zcEZvcm0uZ2V0KCdjb21tZW50Jyk/LnZhbHVlID8/IHRoaXMuZWRpdFNhZmV0eVBsYW4uY29tbWVudCxcclxuICAgICAgICAgICAgbW9kaWZpZWRCeTp0aGlzLnN0YWZmSWQsXHJcbiAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5zcEZvcm0uZ2V0KCdnb2FsU3RhdHVzJyk/LnZhbHVlID8/IG51bGwsXHJcbiAgICAgICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLnNwRm9ybS5nZXQoJ2dvYWxTdGF0dXNEYXRlJyk/LnZhbHVlID8/IG51bGwsXHJcbiAgICAgICAgICAgIHZWaWN0aW1TZXJ2aWNlRGV0YWlsczogbnVsbCxcclxuICAgICAgICAgICAgdmljdGltTmFtZTogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkU2FmZXR5UGxhbihzYWZldHlQbGFuKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoaXRtczphbnkpPT57XHJcbiAgICAgICAgICAgIGNvbnN0IHZpY3RpbVNlcnZpY2VTdGF0dXM6IFZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5PSB7XHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlJZDowLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VJZDogaXRtcy52aWN0aW1TZXJ2aWNlSWQsXHJcbiAgICAgICAgICAgICAgdmljdGltU2VydmljZVN0YXR1c0lkOiB0aGlzLmVkaXRTYWZldHlQbGFuLnZpY3RpbVNlcnZpY2VTdGF0dXNJZCAsXHJcbiAgICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLmVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgICAgICAgICBjb21tZW50Oid0ZXN0IGFkZCBzYWZldHkgUGxhbidcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkVmljdGltU2VydmljZVN0YXR1cyh2aWN0aW1TZXJ2aWNlU3RhdHVzKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgcmVzcD0+e1xyXG4gICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdJbnNlcnQgc3RhdHVzIHN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzYWZ0eVBsYW5EZXRhaWwnLCAgaXRtcy52aWN0aW1TZXJ2aWNlSWQsICB0aGlzLnZpY3RpbUlkIF0pOyBcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLmVkaXRTYWZldHlQbGFuLm1vZGlmaWVkQnk9dGhpcy5sb2dpblN0YWZmLnN0YWZmSWQ7XHJcbiAgICAgIHRoaXMuZWRpdFNhZmV0eVBsYW4ubW9kaWZpZWRCeSA9dGhpcy5zdGFmZklkO1xyXG4gICAgICB0aGlzLmVkaXRTYWZldHlQbGFuLmdvYWwgPSB0aGlzLnNwRm9ybS5nZXQoJ3NlcnZpY2VHb2FsJyk/LnZhbHVlID8/IHRoaXMuZWRpdFNhZmV0eVBsYW4uZ29hbDtcclxuICAgICAgdGhpcy5lZGl0U2FmZXR5UGxhbi5jb21tZW50ID0gdGhpcy5zcEZvcm0uZ2V0KCdjb21tZW50Jyk/LnZhbHVlID8/IHRoaXMuZWRpdFNhZmV0eVBsYW4uY29tbWVudDtcclxuICAgICAgdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQgPSB0aGlzLnNwRm9ybS5nZXQoJ2dvYWxTdGF0dXMnKT8udmFsdWUgPz8gdGhpcy5lZGl0U2FmZXR5UGxhbi52aWN0aW1TZXJ2aWNlU3RhdHVzSWQ7XHJcbiAgICAgIHRoaXMuZWRpdFNhZmV0eVBsYW4uc3RhcnREYXRlID0gdGhpcy5zcEZvcm0uZ2V0KCdnb2FsU3RhdHVzRGF0ZScpPy52YWx1ZSA/PyB0aGlzLmVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LnVwZGF0ZVNhZmV0eVBsYW4odGhpcy5lZGl0U2FmZXR5UGxhbikuc3Vic2NyaWJlKFxyXG4gICAgICAgIHJlc3A9PntcclxuICAgICAgICAgICAgLy8gIHRoaXMuc25hY2tCYXIub3BlbigndXBkYXRlIFN1Y2Nlc3NmdWxseSEnLCAnJywge1xyXG4gICAgICAgICAgICAvLyAgZHVyYXRpb246IDMwMDAsXHJcbiAgICAgICAgICAgIC8vICAgICAgIH0pO1xyXG5cclxuXHJcblxyXG4gICAgICAgICAgICBjb25zdCB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBWaWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yeT0ge1xyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3J5SWQ6MCxcclxuICAgICAgICAgICAgICB2aWN0aW1TZXJ2aWNlSWQ6IHRoaXMuc3BGb3JtLmdldCgndmljdGltU2VydmljZUlkJyk/LnZhbHVlID8/IHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZUlkLFxyXG4gICAgICAgICAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNJZDogdGhpcy5zcEZvcm0uZ2V0KCdnb2FsU3RhdHVzJyk/LnZhbHVlID8/IHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZVN0YXR1c0lkLFxyXG4gICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5zcEZvcm0uZ2V0KCdnb2FsU3RhdHVzRGF0ZScpPy52YWx1ZSA/PyB0aGlzLmVkaXRTYWZldHlQbGFuLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgICBtb2RpZmllZEJ5OnRoaXMuc3RhZmZJZCxcclxuICAgICAgICAgICAgICBjb21tZW50Oid0ZXN0IHVwZGF0ZSBzYWZldHkgUGxhbidcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuYWRkVmljdGltU2VydmljZVN0YXR1cyh2aWN0aW1TZXJ2aWNlU3RhdHVzKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgIHRoaXMuZWRpdFNhZmV0eVBsYW4udmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBiYWNrKCl7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy52aWN0aW1JZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy52aWN0aW1JZCk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NhZnR5UGxhbicsIHRoaXMudmljdGltSWRdKTsgXHJcbiAgfVxyXG4gXHJcblxyXG59XHJcblxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJzYWZldHktcGxhbi1jYXJkIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj48L21hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgXHJcbiAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8bWF0LXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5TYWZldHkgUGxhbjwvaDQ+XHJcbiAgICAgICAgICA8L21hdC10b29sYmFyPlxyXG4gICAgICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNwRm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gVmljdGltIE5hbWUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyb3ctbGFiZWxcIj5WaWN0aW0gTmFtZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmljdGltTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgICAgICAgICAgPCEtLSBHb2FsIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Hb2FsPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJzZXJ2aWNlR29hbFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgICAgICA8IS0tIEdvYWwgU3RhdHVzIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Hb2FsIFN0YXR1czwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJnb2FsU3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2aWN0aW1TZXJ2aWNlU3RhdHUgb2YgdmljdGltU2VydmljZVN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmljdGltU2VydmljZVN0YXR1LnZpY3RpbVNlcnZpY2VTdGF0dXNJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB2aWN0aW1TZXJ2aWNlU3RhdHUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgICAgICAgICAgPCEtLSBHb2FsIFN0YXR1cyBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Hb2FsIFN0YXR1cyBEYXRlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ29hbFN0YXR1c0RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImdvYWxTdGF0dXNEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNob29zZSBhIGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb2FsU3RhdHVzRGF0ZS5vcGVuKClcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJnb2FsU3RhdHVzRGF0ZVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2dvYWxTdGF0dXNEYXRlPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNwRm9ybS5nZXQoJ2dvYWxTdGF0dXNEYXRlJykuaGFzRXJyb3IoJ2RhdGUnKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChzcEZvcm0uZ2V0KCdnb2FsU3RhdHVzRGF0ZScpLmRpcnR5IHx8IHNwRm9ybS5nZXQoJ2dvYWxTdGF0dXNEYXRlJykudG91Y2hlZClcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIEZ1dHVyZSBEYXRlIGlzIDxzdHJvbmc+bm90IGFsbG93ZWQ8L3N0cm9uZz4gZm9yIGdvYWwgc3RhdHVzIGRhdGVcclxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgICAgICA8IS0tIENvbW1lbnQgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgIGNsYXNzPVwiY29tbWVudC1maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkNvbW1lbnQ8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBjZGtUZXh0YXJlYUF1dG9zaXplXHJcbiAgICAgICAgICAgICAgICAgICAgI2F1dG9zaXplPVwiY2RrVGV4dGFyZWFBdXRvc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNaW5Sb3dzPVwiNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2RrQXV0b3NpemVNYXhSb3dzPVwiMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgIDwhLS0gUHJvdmlkZXIgU2VjdGlvbiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm92aWRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicm93LWxhYmVsXCI+TmVlZCBhbmQgUHJvdmlkZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICA8cD4oY2xpY2sgb24gYSBjaGVjayBib3ggdG8gc2VsZWN0IHByb3ZpZGVyIGluZm9ybWF0aW9uKTwvcD5cclxuICAgICAgXHJcbiAgICAgICAgICAgIDxtYXQtbGlzdD5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZXJ2aWNlVHlwZSBvZiB2aWN0aW1TZXJ2aWNlVHlwZXNcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJldmFsdWF0ZVNlbGVjdGlvbihzZXJ2aWNlVHlwZS52aWN0aW1TZXJ2aWNlVHlwZUlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJpc0luQXJyYXkoc2VydmljZVR5cGUudmljdGltU2VydmljZVR5cGVJZCwgc2VydmljZVR5cGUubmFtZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtbGFiZWwtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VydmljZVR5cGUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV2YWx1YXRlU2VsZWN0aW9uKHNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQpXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiBhdXRvOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDFyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VydmljZXByb3ZpZGVyIG9mIGVkaXRTYWZldHlQbGFuLnZWaWN0aW1TZXJ2aWNlRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlcnZpY2VUeXBlLnZpY3RpbVNlcnZpY2VUeXBlSWQgPT09IHNlcnZpY2Vwcm92aWRlci52aWN0aW1TZXJ2aWNlVHlwZUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0gPGI+e3sgc2VydmljZXByb3ZpZGVyLnZpY3RpbVByb2dyYW1Qcm92aWRlciB9fTwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVByb3ZpZGVyKHNlcnZpY2Vwcm92aWRlci52aWN0aW1TZXJ2aWNlRGV0YWlsSWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZSBQcm92aWRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1saXN0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9tYXQtbGlzdD5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVTYWZldHlQbGFuKClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3BGb3JtLnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICBTYXZlXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBcclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxyXG4gICAgICAgICAgICAgICAgQmFja1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgICAgIDwhLS0gU3RhdHVzIEhpc3RvcnkgLS0+XHJcbiAgICAgICAgICA8bWF0LXRhYmxlXHJcbiAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJ2aWN0aW1TZXJ2aWNlU3RhdHVzSGlzdG9yaWVzRGF0YVNvdXJjZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhhbXBsZS10YWJsZSBzdGF0dXMtaGlzdG9yeS10YWJsZVwiPlxyXG4gICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdGFydERhdGVcIj5cclxuICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgU3RhcnQgRGF0ZVxyXG4gICAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgcm93LnN0YXJ0RGF0ZSB8IGRhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1jZWxsPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidmljdGltU2VydmljZVN0YXR1c0lkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5cclxuICAgICAgICAgICAgICAgIFN0YXR1c1xyXG4gICAgICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgcm93LnZpY3RpbVNlcnZpY2VTdGF0dXNJZCB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb21tZW50XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLWNlbGxcIj5cclxuICAgICAgICAgICAgICAgIENvbW1lbnRcclxuICAgICAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cclxuICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJvdy5jb21tZW50IH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIFxyXG4gICAgICAgICAgICA8bWF0LWhlYWRlci1yb3dcclxuICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPVwiWydzdGFydERhdGUnLCAndmljdGltU2VydmljZVN0YXR1c0lkJywgJ2NvbW1lbnQnXVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLXJvdz5cclxuICAgICAgXHJcbiAgICAgICAgICAgIDxtYXQtcm93XHJcbiAgICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnc3RhcnREYXRlJywndmljdGltU2VydmljZVN0YXR1c0lkJywnY29tbWVudCddXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImV4YW1wbGUtcm93XCI+XHJcbiAgICAgICAgICAgIDwvbWF0LXJvdz5cclxuICAgICAgICAgIDwvbWF0LXRhYmxlPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPC9tYXQtY2FyZD5cclxuICAgICAgIl19
|
@@ -28,7 +28,7 @@ import { MatCardModule } from '@angular/material/card';
|
|
28
28
|
import * as i9$1 from '@angular/material/icon';
|
29
29
|
import { MatIconModule } from '@angular/material/icon';
|
30
30
|
import * as i1$2 from '@angular/forms';
|
31
|
-
import { UntypedFormControl, Validators, UntypedFormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
31
|
+
import { UntypedFormControl, Validators, UntypedFormGroup, FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';
|
32
32
|
import * as i10 from '@angular/material/radio';
|
33
33
|
import { MatRadioGroup, MatRadioModule } from '@angular/material/radio';
|
34
34
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
@@ -2938,7 +2938,7 @@ class VictimSafetyPlanDetailComponent {
|
|
2938
2938
|
this.router = router;
|
2939
2939
|
this.commonDialogService = commonDialogService;
|
2940
2940
|
this.formBuilder = formBuilder;
|
2941
|
-
this.editSafetyPlan = {};
|
2941
|
+
this.editSafetyPlan = { vVictimServiceDetails: [] };
|
2942
2942
|
this.providerListCollection = [];
|
2943
2943
|
this.serviceCheck = [];
|
2944
2944
|
this.victimServiceStatusHistoriesDataSource = new MatTableDataSource();
|
@@ -2946,16 +2946,16 @@ class VictimSafetyPlanDetailComponent {
|
|
2946
2946
|
}
|
2947
2947
|
initForm() {
|
2948
2948
|
this.spForm = this.formBuilder.group({
|
2949
|
-
serviceGoal: new
|
2949
|
+
serviceGoal: new FormControl('', Validators.compose([
|
2950
2950
|
Validators.required
|
2951
2951
|
])),
|
2952
|
-
goalStatus: new
|
2952
|
+
goalStatus: new FormControl('', Validators.compose([
|
2953
2953
|
Validators.required
|
2954
2954
|
])),
|
2955
|
-
goalStatusDate: new
|
2955
|
+
goalStatusDate: new FormControl('', Validators.compose([
|
2956
2956
|
Validators.required, dateValidator()
|
2957
2957
|
])),
|
2958
|
-
comment: new
|
2958
|
+
comment: new FormControl('', Validators.required)
|
2959
2959
|
});
|
2960
2960
|
this.spForm.markAsPristine();
|
2961
2961
|
this.spForm.markAsUntouched();
|
@@ -2991,12 +2991,20 @@ class VictimSafetyPlanDetailComponent {
|
|
2991
2991
|
console.log(victimSafetyPlans);
|
2992
2992
|
this.editSafetyPlan = victimSafetyPlans[0];
|
2993
2993
|
this.victimId = victimSafetyPlans[0].victimId;
|
2994
|
-
|
2995
|
-
|
2996
|
-
|
2997
|
-
|
2998
|
-
|
2999
|
-
|
2994
|
+
this.spForm = this.formBuilder.group({
|
2995
|
+
serviceGoal: new FormControl(this.editSafetyPlan.goal, Validators.compose([
|
2996
|
+
Validators.required
|
2997
|
+
])),
|
2998
|
+
goalStatus: new FormControl(this.editSafetyPlan.victimServiceStatusId, Validators.compose([
|
2999
|
+
Validators.required
|
3000
|
+
])),
|
3001
|
+
goalStatusDate: new FormControl(this.editSafetyPlan.startDate, Validators.compose([
|
3002
|
+
Validators.required, dateValidator()
|
3003
|
+
])),
|
3004
|
+
comment: new FormControl(this.editSafetyPlan.comment, Validators.required)
|
3005
|
+
});
|
3006
|
+
this.spForm.markAsPristine();
|
3007
|
+
this.spForm.markAsUntouched();
|
3000
3008
|
});
|
3001
3009
|
this._victimServicesComponent.getServiceStatusHistories(this.victimServiceId).subscribe(victimServiceStatusHistories => {
|
3002
3010
|
// this.victimServiceStatusHistories = victimServiceStatusHistories;
|
@@ -3081,6 +3089,8 @@ class VictimSafetyPlanDetailComponent {
|
|
3081
3089
|
// });
|
3082
3090
|
// }
|
3083
3091
|
evaluateSelection(victimServiceTypeId) {
|
3092
|
+
console.log('evaluateSelection');
|
3093
|
+
console.log(this.editSafetyPlan.vVictimServiceDetails);
|
3084
3094
|
if (this.editSafetyPlan.vVictimServiceDetails) {
|
3085
3095
|
return this.editSafetyPlan.vVictimServiceDetails.findIndex(r => r.victimServiceTypeId === victimServiceTypeId) >= 0;
|
3086
3096
|
}
|
@@ -3101,8 +3111,8 @@ class VictimSafetyPlanDetailComponent {
|
|
3101
3111
|
victimId: this.victimId,
|
3102
3112
|
fullName: null,
|
3103
3113
|
victimServiceId: 0,
|
3104
|
-
goal: this.
|
3105
|
-
comment: this.
|
3114
|
+
goal: this.spForm.get('serviceGoal')?.value,
|
3115
|
+
comment: this.spForm.get('comment')?.value,
|
3106
3116
|
modifiedBy: this.staffId,
|
3107
3117
|
victimServiceStatusId: null,
|
3108
3118
|
status: null,
|
@@ -3114,8 +3124,8 @@ class VictimSafetyPlanDetailComponent {
|
|
3114
3124
|
const victimServiceStatus = {
|
3115
3125
|
victimServiceStatusHistoryId: 0,
|
3116
3126
|
victimServiceId: itms.victimServiceId,
|
3117
|
-
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
3118
|
-
startDate: this.editSafetyPlan.startDate,
|
3127
|
+
victimServiceStatusId: this.spForm.get('goalStatus')?.value ?? this.editSafetyPlan.victimServiceStatusId,
|
3128
|
+
startDate: this.spForm.get('goalStatusDate')?.value ?? this.editSafetyPlan.startDate,
|
3119
3129
|
modifiedBy: this.staffId,
|
3120
3130
|
comment: 'test add safety plan'
|
3121
3131
|
};
|
@@ -3177,12 +3187,12 @@ class VictimSafetyPlanDetailComponent {
|
|
3177
3187
|
victimId: this.victimId,
|
3178
3188
|
fullName: null,
|
3179
3189
|
victimServiceId: 0,
|
3180
|
-
goal: this.editSafetyPlan.goal,
|
3181
|
-
comment: this.editSafetyPlan.comment,
|
3190
|
+
goal: this.spForm.get('serviceGoal')?.value ?? this.editSafetyPlan.goal,
|
3191
|
+
comment: this.spForm.get('comment')?.value ?? this.editSafetyPlan.comment,
|
3182
3192
|
modifiedBy: this.staffId,
|
3183
|
-
victimServiceStatusId: null,
|
3193
|
+
victimServiceStatusId: this.spForm.get('goalStatus')?.value ?? null,
|
3184
3194
|
status: null,
|
3185
|
-
startDate: null,
|
3195
|
+
startDate: this.spForm.get('goalStatusDate')?.value ?? null,
|
3186
3196
|
vVictimServiceDetails: null,
|
3187
3197
|
victimName: null
|
3188
3198
|
};
|
@@ -3206,15 +3216,19 @@ class VictimSafetyPlanDetailComponent {
|
|
3206
3216
|
else {
|
3207
3217
|
// this.editSafetyPlan.modifiedBy=this.loginStaff.staffId;
|
3208
3218
|
this.editSafetyPlan.modifiedBy = this.staffId;
|
3219
|
+
this.editSafetyPlan.goal = this.spForm.get('serviceGoal')?.value ?? this.editSafetyPlan.goal;
|
3220
|
+
this.editSafetyPlan.comment = this.spForm.get('comment')?.value ?? this.editSafetyPlan.comment;
|
3221
|
+
this.editSafetyPlan.victimServiceStatusId = this.spForm.get('goalStatus')?.value ?? this.editSafetyPlan.victimServiceStatusId;
|
3222
|
+
this.editSafetyPlan.startDate = this.spForm.get('goalStatusDate')?.value ?? this.editSafetyPlan.startDate;
|
3209
3223
|
this._victimServicesComponent.updateSafetyPlan(this.editSafetyPlan).subscribe(resp => {
|
3210
3224
|
// this.snackBar.open('update Successfully!', '', {
|
3211
3225
|
// duration: 3000,
|
3212
3226
|
// });
|
3213
3227
|
const victimServiceStatus = {
|
3214
3228
|
victimServiceStatusHistoryId: 0,
|
3215
|
-
victimServiceId: this.editSafetyPlan.victimServiceId
|
3216
|
-
victimServiceStatusId: this.editSafetyPlan.victimServiceStatusId,
|
3217
|
-
startDate: this.editSafetyPlan.startDate,
|
3229
|
+
victimServiceId: this.spForm.get('victimServiceId')?.value ?? this.editSafetyPlan.victimServiceId,
|
3230
|
+
victimServiceStatusId: this.spForm.get('goalStatus')?.value ?? this.editSafetyPlan.victimServiceStatusId,
|
3231
|
+
startDate: this.spForm.get('goalStatusDate')?.value ?? this.editSafetyPlan.startDate,
|
3218
3232
|
modifiedBy: this.staffId,
|
3219
3233
|
comment: 'test update safety Plan'
|
3220
3234
|
};
|