@csmart/ngc-smart-victim 1.14.44 → 1.14.45
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +25 -25
- package/esm2020/lib/caseNote/caseNote.component.mjs +194 -0
- package/esm2020/lib/common-dialog/common-dialog.component.mjs +23 -0
- package/esm2020/lib/common-dialog/common-dialog.module.mjs +34 -0
- package/esm2020/lib/common-dialog/common-dialog.service.mjs +33 -0
- package/esm2020/lib/contact/contact.component.mjs +140 -0
- package/esm2020/lib/email.services.mjs +42 -0
- package/esm2020/lib/intake.service.mjs +57 -0
- package/esm2020/lib/safetyPlan/serviceProvider.component.mjs +99 -0
- package/esm2020/lib/safetyPlan/victimSafetyPlan.component.mjs +116 -0
- package/esm2020/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +340 -0
- package/esm2020/lib/shared/app.shared.module.mjs +215 -0
- package/esm2020/lib/shared/validators/date.validator.mjs +59 -0
- package/esm2020/lib/smart-victim-delete-confirm.component.mjs +44 -0
- package/esm2020/lib/smart-victim-detail/smart-victim-detail.component.mjs +1104 -0
- package/esm2020/lib/smart-victim.component.mjs +314 -0
- package/esm2020/lib/smart-victim.model.mjs +133 -0
- package/esm2020/lib/smart-victim.module.mjs +128 -0
- package/esm2020/lib/smart-victim.service.mjs +352 -0
- package/{esm2022 → esm2020}/lib/victim-routing.module.mjs +5 -5
- package/esm2020/lib/victimSearch/VictimSearchFilter.mjs +3 -0
- package/esm2020/lib/victimSearch/victimSearchForm.component.mjs +38 -0
- package/{esm2022 → esm2020}/public-api.mjs +1 -1
- package/fesm2015/csmart-ngc-smart-victim.mjs +3273 -0
- package/fesm2015/csmart-ngc-smart-victim.mjs.map +1 -0
- package/fesm2020/csmart-ngc-smart-victim.mjs +3261 -0
- package/fesm2020/csmart-ngc-smart-victim.mjs.map +1 -0
- package/lib/caseNote/caseNote.component.d.ts +2 -2
- package/lib/common-dialog/common-dialog.component.d.ts +1 -1
- package/lib/contact/contact.component.d.ts +1 -1
- package/lib/safetyPlan/serviceProvider.component.d.ts +1 -1
- package/lib/safetyPlan/victimSafetyPlan.component.d.ts +2 -2
- package/lib/safetyPlan/victimSafetyPlanDetail.component.d.ts +2 -2
- package/lib/smart-victim-delete-confirm.component.d.ts +1 -1
- package/lib/smart-victim-detail/smart-victim-detail.component.d.ts +2 -2
- package/lib/smart-victim.component.d.ts +2 -2
- package/lib/victimSearch/victimSearchForm.component.d.ts +1 -1
- package/package.json +11 -5
- package/esm2022/lib/caseNote/caseNote.component.mjs +0 -219
- package/esm2022/lib/common-dialog/common-dialog.component.mjs +0 -26
- package/esm2022/lib/common-dialog/common-dialog.module.mjs +0 -34
- package/esm2022/lib/common-dialog/common-dialog.service.mjs +0 -34
- package/esm2022/lib/contact/contact.component.mjs +0 -158
- package/esm2022/lib/email.services.mjs +0 -43
- package/esm2022/lib/intake.service.mjs +0 -59
- package/esm2022/lib/safetyPlan/serviceProvider.component.mjs +0 -105
- package/esm2022/lib/safetyPlan/victimSafetyPlan.component.mjs +0 -146
- package/esm2022/lib/safetyPlan/victimSafetyPlanDetail.component.mjs +0 -372
- package/esm2022/lib/shared/app.shared.module.mjs +0 -215
- package/esm2022/lib/shared/validators/date.validator.mjs +0 -59
- package/esm2022/lib/smart-victim-delete-confirm.component.mjs +0 -46
- package/esm2022/lib/smart-victim-detail/smart-victim-detail.component.mjs +0 -1141
- package/esm2022/lib/smart-victim.component.mjs +0 -343
- package/esm2022/lib/smart-victim.model.mjs +0 -233
- package/esm2022/lib/smart-victim.module.mjs +0 -128
- package/esm2022/lib/smart-victim.service.mjs +0 -357
- package/esm2022/lib/victimSearch/VictimSearchFilter.mjs +0 -8
- package/esm2022/lib/victimSearch/victimSearchForm.component.mjs +0 -37
- package/fesm2022/csmart-ngc-smart-victim.mjs +0 -3556
- package/fesm2022/csmart-ngc-smart-victim.mjs.map +0 -1
- /package/{esm2022 → esm2020}/csmart-ngc-smart-victim.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/shared/validators/index.mjs +0 -0
@@ -0,0 +1,116 @@
|
|
1
|
+
import { Component } from '@angular/core';
|
2
|
+
import { NgcSmartVictimService } from '../smart-victim.service';
|
3
|
+
import { MatDialog } from '@angular/material/dialog';
|
4
|
+
import { CommonDialogService } from '.././common-dialog/common-dialog.service';
|
5
|
+
import { HttpClient } from '@angular/common/http';
|
6
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
7
|
+
import { SmartAuthService } from '@csmart/ngc-smart-core';
|
8
|
+
import { MatTableDataSource } from '@angular/material/table';
|
9
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
10
|
+
import * as i0 from "@angular/core";
|
11
|
+
import * as i1 from "../smart-victim.service";
|
12
|
+
import * as i2 from ".././common-dialog/common-dialog.service";
|
13
|
+
import * as i3 from "@angular/common/http";
|
14
|
+
import * as i4 from "@angular/material/dialog";
|
15
|
+
import * as i5 from "@angular/router";
|
16
|
+
import * as i6 from "@angular/material/snack-bar";
|
17
|
+
import * as i7 from "@csmart/ngc-smart-core";
|
18
|
+
import * as i8 from "@angular/material/button";
|
19
|
+
import * as i9 from "@angular/material/card";
|
20
|
+
import * as i10 from "@angular/material/toolbar";
|
21
|
+
import * as i11 from "@angular/material/table";
|
22
|
+
import * as i12 from "@angular/common";
|
23
|
+
export class VictimSafetyPlanComponent {
|
24
|
+
constructor(_victimServicesComponent, commonDialogService, http, dialog, route, router, snackBar, smartAuthService) {
|
25
|
+
this._victimServicesComponent = _victimServicesComponent;
|
26
|
+
this.commonDialogService = commonDialogService;
|
27
|
+
this.http = http;
|
28
|
+
this.dialog = dialog;
|
29
|
+
this.route = route;
|
30
|
+
this.router = router;
|
31
|
+
this.snackBar = snackBar;
|
32
|
+
this.smartAuthService = smartAuthService;
|
33
|
+
this.editSafetyPlan = {};
|
34
|
+
this.safetyPlanDataSource = new MatTableDataSource();
|
35
|
+
}
|
36
|
+
ngAfterViewInit() {
|
37
|
+
this.smartAuthService.setPermission('Victim', this.route.snapshot);
|
38
|
+
}
|
39
|
+
ngOnInit() {
|
40
|
+
var data = this.route.snapshot.data;
|
41
|
+
this.loginStaff = data.loginStaff;
|
42
|
+
this.staffId = this.loginStaff.staffId;
|
43
|
+
this.sub = this.route.params.subscribe(params => {
|
44
|
+
this.victimId = params['victimId'];
|
45
|
+
});
|
46
|
+
this.hiddenAddNewFlag = false;
|
47
|
+
this.victimName = this.victimName;
|
48
|
+
this._victimServicesComponent.getSafetyPlans(this.victimId).subscribe(victimSafetyPlans => {
|
49
|
+
this.victimSafetyPlans = victimSafetyPlans;
|
50
|
+
this.safetyPlanDataSource.data = this.victimSafetyPlans;
|
51
|
+
console.log('this.victimSafetyPlans');
|
52
|
+
console.log(this.victimSafetyPlans);
|
53
|
+
});
|
54
|
+
// this.myVictimServiceId =1;
|
55
|
+
// this._victimServicesComponent.getVictimServiceDetail(this.myVictimServiceId).subscribe(
|
56
|
+
// victimServiceDetail => {
|
57
|
+
// this.victimServiceDetail = victimServiceDetail;
|
58
|
+
// console.log('service detail');
|
59
|
+
// console.log(this.victimServiceDetail);
|
60
|
+
// }
|
61
|
+
// );
|
62
|
+
this._victimServicesComponent.getServiceStatusHistories(1).subscribe(victimServiceStatusHistories => {
|
63
|
+
// this.victimServiceStatusHistories = victimServiceStatusHistories;
|
64
|
+
});
|
65
|
+
}
|
66
|
+
//---------------graphQL--------------------------------------
|
67
|
+
// getVictimServiceTypeProgramProviders(): Observable<VictimServiceTypeProgramProviderModel[]> {
|
68
|
+
// const queryString = `
|
69
|
+
// {
|
70
|
+
// findVictimServiceTypeProgramProviders {
|
71
|
+
// data {
|
72
|
+
// victimServiceTypeProgramProviderId
|
73
|
+
// victimServiceType
|
74
|
+
// victimProgramProvider
|
75
|
+
// }
|
76
|
+
// }
|
77
|
+
// }`;
|
78
|
+
// return this.http.post<any>(environment.smartApiUrl, { query: queryString })
|
79
|
+
// .map(result => {
|
80
|
+
// return result.data.findVictimServiceTypeProgramProviders.data;
|
81
|
+
// });
|
82
|
+
// }
|
83
|
+
goToSafetyPlanDetail(victimServiceId) {
|
84
|
+
this.router.navigate(['saftyPlanDetail', victimServiceId, this.victimId]);
|
85
|
+
}
|
86
|
+
onAddNew() {
|
87
|
+
this.hiddenDetailFlag = false;
|
88
|
+
}
|
89
|
+
onDeleteSafetyPlan(victimServiceId) {
|
90
|
+
this.commonDialogService
|
91
|
+
.confirm('', 'Do you want to delete this safety plan?', 'Yes', 'No')
|
92
|
+
.subscribe(res => {
|
93
|
+
this.result = res;
|
94
|
+
if (this.result) {
|
95
|
+
this._victimServicesComponent.deleteSafetyPlan(victimServiceId, this.staffId)
|
96
|
+
.subscribe(result => {
|
97
|
+
this.snackBar.open('delete safety plan Successfully !', '', { duration: 3000, });
|
98
|
+
this._victimServicesComponent.getSafetyPlans(this.victimId).subscribe(victimSafetyPlans => {
|
99
|
+
this.victimSafetyPlans = victimSafetyPlans;
|
100
|
+
this.safetyPlanDataSource.data = this.victimSafetyPlans;
|
101
|
+
});
|
102
|
+
});
|
103
|
+
}
|
104
|
+
});
|
105
|
+
}
|
106
|
+
back() {
|
107
|
+
this.router.navigate(['victimHome']);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
/** @nocollapse */ VictimSafetyPlanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: VictimSafetyPlanComponent, deps: [{ token: i1.NgcSmartVictimService }, { token: i2.CommonDialogService }, { token: i3.HttpClient }, { token: i4.MatDialog }, { token: i5.ActivatedRoute }, { token: i5.Router }, { token: i6.MatSnackBar }, { token: i7.SmartAuthService }], target: i0.ɵɵFactoryTarget.Component });
|
111
|
+
/** @nocollapse */ VictimSafetyPlanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: VictimSafetyPlanComponent, selector: "ng-component", providers: [CommonDialogService], ngImport: i0, template: "\n <mat-card>\n <mat-card-header>\n </mat-card-header>\n <mat-card-content>\n <mat-toolbar color=\"primary\">\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\n </mat-toolbar>\n <br>\n <button mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(0)\" >Add Goal</button>\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n <br>\n <br>\n <mat-table #table [dataSource]=\"safetyPlanDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"startDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"goal\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Goal</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.goal }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"victimServiceStatus\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatus }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"comment\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"victimServiceId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <!-- <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-pencil\" ></span> \n <mat-icon>edit</mat-icon> \n </button> \n \n \n\n\n\n\n\n \n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"onDeleteSafetyPlan(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-trash\" ></span> Delete\n </button> \n </mat-cell> -->\n\n <mat-cell *matCellDef=\"let element\">\n \n <button class=\"edit-btn\" mat-icon-button color=\"primary\" matTooltip=\"Edit Safety Plan\" (click)=\"goToSafetyPlanDetail(element.victimServiceId)\">\n <i class=\"material-icons\">mode_edit</i>\n </button>\n\n \n \n <button\n class=\"delete-btn\"\n matTooltip=\"Delete Safety Plan\"\n mat-icon-button\n color=\"primary\"\n (click)=\"onDeleteSafetyPlan(element.victimServiceId)\">\n <i class=\"material-icons\">delete</i>\n </button>\n\n\n\n\n \n </mat-cell>\n\n \n \n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n \n \n</mat-card-content>\n</mat-card>", dependencies: [{ kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i9.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: i12.DatePipe, name: "date" }] });
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: VictimSafetyPlanComponent, decorators: [{
|
113
|
+
type: Component,
|
114
|
+
args: [{ providers: [CommonDialogService], template: "\n <mat-card>\n <mat-card-header>\n </mat-card-header>\n <mat-card-content>\n <mat-toolbar color=\"primary\">\n <h4 class=\"card-header\" style=\"display: inline-block;\">Safety Plan</h4>\n </mat-toolbar>\n <br>\n <button mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(0)\" >Add Goal</button>\n <button mat-raised-button color=\"primary\" (click)=\"back()\">Back</button>\n <br>\n <br>\n <mat-table #table [dataSource]=\"safetyPlanDataSource\" class=\"example-table\">\n <ng-container matColumnDef=\"startDate\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Start Date</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.startDate | date}} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"goal\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Goal</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.goal }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"victimServiceStatus\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Status</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.victimServiceStatus }} </mat-cell>\n </ng-container>\n <ng-container matColumnDef=\"comment\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\">Comment</mat-header-cell>\n <mat-cell *matCellDef=\"let row\" class=\"example-cell\"> {{row.comment }} </mat-cell>\n </ng-container>\n\n <ng-container matColumnDef=\"victimServiceId\">\n <mat-header-cell *matHeaderCellDef class=\"example-header-cell\"></mat-header-cell>\n <!-- <mat-cell *matCellDef=\"let row\" class=\"example-cell\">\n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"goToSafetyPlanDetail(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-pencil\" ></span> \n <mat-icon>edit</mat-icon> \n </button> \n \n \n\n\n\n\n\n \n <button type=\"button\" mat-raised-button color=\"primary\" (click)=\"onDeleteSafetyPlan(row.victimServiceId)\"> \n <span class=\"glyphicon glyphicon-trash\" ></span> Delete\n </button> \n </mat-cell> -->\n\n <mat-cell *matCellDef=\"let element\">\n \n <button class=\"edit-btn\" mat-icon-button color=\"primary\" matTooltip=\"Edit Safety Plan\" (click)=\"goToSafetyPlanDetail(element.victimServiceId)\">\n <i class=\"material-icons\">mode_edit</i>\n </button>\n\n \n \n <button\n class=\"delete-btn\"\n matTooltip=\"Delete Safety Plan\"\n mat-icon-button\n color=\"primary\"\n (click)=\"onDeleteSafetyPlan(element.victimServiceId)\">\n <i class=\"material-icons\">delete</i>\n </button>\n\n\n\n\n \n </mat-cell>\n\n \n \n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId']\" class=\"example-header-row\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns:['startDate', 'goal', 'victimServiceStatus', 'comment', 'victimServiceId'];\" class=\"example-row\"></mat-row>\n </mat-table>\n \n \n</mat-card-content>\n</mat-card>" }]
|
115
|
+
}], ctorParameters: function () { return [{ type: i1.NgcSmartVictimService }, { type: i2.CommonDialogService }, { type: i3.HttpClient }, { type: i4.MatDialog }, { type: i5.ActivatedRoute }, { type: i5.Router }, { type: i6.MatSnackBar }, { type: i7.SmartAuthService }]; } });
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmljdGltU2FmZXR5UGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2Mtc21hcnQtdmljdGltL3NyYy9saWIvc2FmZXR5UGxhbi92aWN0aW1TYWZldHlQbGFuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nYy1zbWFydC12aWN0aW0vc3JjL2xpYi9zYWZldHlQbGFuL3ZpY3RpbVNhZmV0eVBsYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUlsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPMUQsTUFBTSxPQUFPLHlCQUF5QjtJQTRCcEMsWUFFVSx3QkFBK0MsRUFDL0MsbUJBQXdDLEVBQ3hDLElBQWdCLEVBQ2pCLE1BQWlCLEVBQ2hCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZixRQUFxQixFQUNwQixnQkFBa0M7UUFQbEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUF1QjtRQUMvQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hD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LENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUksR0FBRyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFFYixJQUFJLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7cUJBQzFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFFbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRSxDQUFDLENBQUM7b0JBRWhGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FDbkUsaUJBQWlCLENBQUMsRUFBRTt3QkFDbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO3dCQUMzQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztvQkFDMUQsQ0FBQyxDQUNGLENBQUM7Z0JBRUQsQ0FBQyxDQUNGLENBQUM7YUFJTjtRQUVKLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFdkMsQ0FBQzs7eUlBdEpVLHlCQUF5Qjs2SEFBekIseUJBQXlCLHVDQUh6QixDQUFDLG1CQUFtQixDQUFDLDBCQ2pCbEMsaTFJQW9GVzsyRkRoRUUseUJBQXlCO2tCQUxyQyxTQUFTO2dDQUVHLENBQUMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbmplY3QsQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdjU21hcnRWaWN0aW1TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtdmljdGltLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBWaWN0aW1TYWZldHlQbGFuLFZpY3RpbVNlcnZpY2VEZXRhaWwsVmljdGltU2VydmljZVN0YXR1c0hpc3RvcnkgfSBmcm9tICcuLi9zbWFydC12aWN0aW0ubW9kZWwnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENvbW1vbkRpYWxvZ1NlcnZpY2V9IGZyb20gJy4uLy4vY29tbW9uLWRpYWxvZy9jb21tb24tZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbi8vaW1wb3J0IHsgVmljdGltU2FmZXR5UGxhbkRldGFpbENvbXBvbmVudCB9IGZyb20gJy4vdmljdGltU2FmZXR5UGxhbkRldGFpbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0ZWRPZmZlbmRlciwgTG9naW5TdGFmZiB9IGZyb20gJ0Bjc21hcnQvbmdjLXNtYXJ0LWNvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTbWFydEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGNzbWFydC9uZ2Mtc21hcnQtY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdmljdGltU2FmZXR5UGxhbi5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0NvbW1vbkRpYWxvZ1NlcnZpY2VdXG59KVxuXG5leHBvcnQgY2xhc3MgVmljdGltU2FmZXR5UGxhbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxBZnRlclZpZXdJbml0IHtcbiAgLy9zZWxlY3RlZE9mZmVuZGVyOiBTZWxlY3RlZE9mZmVuZGVyO1xuICBsb2dpblN0YWZmOiBMb2dpblN0YWZmO1xuICBvZmZlbmRlcklkOiBudW1iZXI7XG5cblxuICBoaWRkZW5EZXRhaWxGbGFnOmJvb2xlYW47XG4gIGhpZGRlbkFkZE5ld0ZsYWc6IGJvb2xlYW47XG4gIHNhZmV0eVBsYW5zOiBWaWN0aW1TYWZldHlQbGFuW107XG4gIHNhZmV0eVBsYW46IFZpY3RpbVNhZmV0eVBsYW47XG4gIGVkaXRTYWZldHlQbGFuOiBWaWN0aW1TYWZldHlQbGFuID0gPFZpY3RpbVNhZmV0eVBsYW4+e307XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjb250YWN0VHlwZXM6IGFueVtdO1xuICBjb250YWN0UHVycG9zZXM6IGFueVtdO1xuICB2aWN0aW1TZXJ2aWNlVHlwZXM6IGFueVtdO1xuICB2aWN0aW1TYWZldHlQbGFuczogVmljdGltU2FmZXR5UGxhbltdO1xuICB2aWN0aW1TZXJ2aWNlU3RhdHVzOiBhbnlbXTtcbiAgdmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllczogVmljdGltU2VydmljZVN0YXR1c0hpc3RvcnlbXTtcbiAgcXVlcnlTdHJpbmc6IHN0cmluZztcbiAgdmljdGltU2VydmljZURldGFpbDogVmljdGltU2VydmljZURldGFpbFtdO1xuICBteVZpY3RpbVNlcnZpY2VJZDogbnVtYmVyO1xuICByZXN1bHQ6IGFueTtcbiAgdmljdGltTmFtZTogc3RyaW5nO1xuICBzdGFmZklkOiBudW1iZXI7XG4gIHZpY3RpbUlkOiBudW1iZXI7XG4gIHByaXZhdGUgc3ViOiBhbnk7XG4gIHNhZmV0eVBsYW5EYXRhU291cmNlID0gbmV3ICBNYXRUYWJsZURhdGFTb3VyY2UoKTtcbiBcbiAgY29uc3RydWN0b3IoXG4gXG4gICAgcHJpdmF0ZSBfdmljdGltU2VydmljZXNDb21wb25lbnQ6IE5nY1NtYXJ0VmljdGltU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1vbkRpYWxvZ1NlcnZpY2U6IENvbW1vbkRpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBzbWFydEF1dGhTZXJ2aWNlOiBTbWFydEF1dGhTZXJ2aWNlLFxuICAgICBcbiAgKSB7XG4gICAgXG5cbiAgIH1cbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnNtYXJ0QXV0aFNlcnZpY2Uuc2V0UGVybWlzc2lvbignVmljdGltJywgdGhpcy5yb3V0ZS5zbmFwc2hvdCk7XG4gIH1cbiBcbiAgbmdPbkluaXQoKSB7XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcbiAgICB0aGlzLmxvZ2luU3RhZmYgPSBkYXRhLmxvZ2luU3RhZmY7XG4gICAgdGhpcy5zdGFmZklkID0gIHRoaXMubG9naW5TdGFmZi5zdGFmZklkO1xuXG4gICAgdGhpcy5zdWIgPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMudmljdGltSWQgPSBwYXJhbXNbJ3ZpY3RpbUlkJ107XG5cbiAgICB9KTtcblxuICAgIHRoaXMuaGlkZGVuQWRkTmV3RmxhZyA9IGZhbHNlO1xuICAgIHRoaXMudmljdGltTmFtZT0gdGhpcy52aWN0aW1OYW1lO1xuICBcbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRTYWZldHlQbGFucyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXG4gICAgICB2aWN0aW1TYWZldHlQbGFucyA9PiB7XG4gICAgICAgIHRoaXMudmljdGltU2FmZXR5UGxhbnMgPSB2aWN0aW1TYWZldHlQbGFuczsgXG4gICAgICAgIHRoaXMuc2FmZXR5UGxhbkRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudmljdGltU2FmZXR5UGxhbnM7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0aGlzLnZpY3RpbVNhZmV0eVBsYW5zJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltU2FmZXR5UGxhbnMpO1xuXG4gIFxuICAgICAgfVxuICAgICk7XG5cbiAgICAgXG4gICAgLy8gIHRoaXMubXlWaWN0aW1TZXJ2aWNlSWQgPTE7XG4gICAgLy8gdGhpcy5fdmljdGltU2VydmljZXNDb21wb25lbnQuZ2V0VmljdGltU2VydmljZURldGFpbCh0aGlzLm15VmljdGltU2VydmljZUlkKS5zdWJzY3JpYmUoXG4gICAgLy8gICB2aWN0aW1TZXJ2aWNlRGV0YWlsID0+IHtcbiAgICAvLyAgICAgdGhpcy52aWN0aW1TZXJ2aWNlRGV0YWlsID0gdmljdGltU2VydmljZURldGFpbDtcbiAgICAvLyAgICAgY29uc29sZS5sb2coJ3NlcnZpY2UgZGV0YWlsJyk7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMudmljdGltU2VydmljZURldGFpbCk7IFxuICAgIC8vICAgfVxuICAgIC8vICk7XG5cbiAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRTZXJ2aWNlU3RhdHVzSGlzdG9yaWVzKDEpLnN1YnNjcmliZShcbiAgICAgIHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXMgPT4ge1xuICAgICAgIC8vIHRoaXMudmljdGltU2VydmljZVN0YXR1c0hpc3RvcmllcyA9IHZpY3RpbVNlcnZpY2VTdGF0dXNIaXN0b3JpZXM7IFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgXG4vLy0tLS0tLS0tLS0tLS0tLWdyYXBoUUwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gICBnZXRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMoKTogT2JzZXJ2YWJsZTxWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlck1vZGVsW10+IHtcbi8vICAgICBjb25zdCBxdWVyeVN0cmluZyA9IGBcbi8vICAgICAgICAge1xuLy8gICAgICAgICAgIGZpbmRWaWN0aW1TZXJ2aWNlVHlwZVByb2dyYW1Qcm92aWRlcnMge1xuLy8gICAgICAgICAgICAgICAgIGRhdGEge1xuLy8gICAgICAgICAgICAgICAgICAgdmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJJZFxuLy8gICAgICAgICAgICAgICAgICAgdmljdGltU2VydmljZVR5cGVcbi8vICAgICAgICAgICAgICAgICAgIHZpY3RpbVByb2dyYW1Qcm92aWRlclxuLy8gICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICB9YDtcblxuIFxuLy8gICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGVudmlyb25tZW50LnNtYXJ0QXBpVXJsLCB7IHF1ZXJ5OiBxdWVyeVN0cmluZyB9KVxuLy8gICAgICAgICAubWFwKHJlc3VsdCA9PiB7XG4vLyAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YS5maW5kVmljdGltU2VydmljZVR5cGVQcm9ncmFtUHJvdmlkZXJzLmRhdGE7XG4vLyAgICAgfSk7XG4vLyB9XG5cbiAgZ29Ub1NhZmV0eVBsYW5EZXRhaWwodmljdGltU2VydmljZUlkOiBudW1iZXIpe1xuICBcbiAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2FmdHlQbGFuRGV0YWlsJywgdmljdGltU2VydmljZUlkLCAgdGhpcy52aWN0aW1JZCBdKTsgXG5cbiAgfVxuICBvbkFkZE5ldygpe1xuICAgIHRoaXMuaGlkZGVuRGV0YWlsRmxhZyA9IGZhbHNlO1xuXG4gIH1cbiAgb25EZWxldGVTYWZldHlQbGFuKHZpY3RpbVNlcnZpY2VJZDogbnVtYmVyKXtcblxuICAgIHRoaXMuY29tbW9uRGlhbG9nU2VydmljZVxuICAgIC5jb25maXJtKCcnLCAnRG8geW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgc2FmZXR5IHBsYW4/JywgJ1llcycsICdObycpXG4gICAgLnN1YnNjcmliZShyZXMgPT4ge3RoaXMucmVzdWx0ID0gIHJlcztcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0KSB7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpY3RpbVNlcnZpY2VzQ29tcG9uZW50LmRlbGV0ZVNhZmV0eVBsYW4odmljdGltU2VydmljZUlkLHRoaXMuc3RhZmZJZClcbiAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG5cbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdkZWxldGUgc2FmZXR5IHBsYW4gU3VjY2Vzc2Z1bGx5ICEnLCAnJywgeyBkdXJhdGlvbjogMzAwMCx9KTtcblxuICAgICAgICAgICAgICB0aGlzLl92aWN0aW1TZXJ2aWNlc0NvbXBvbmVudC5nZXRTYWZldHlQbGFucyh0aGlzLnZpY3RpbUlkKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgdmljdGltU2FmZXR5UGxhbnMgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy52aWN0aW1TYWZldHlQbGFucyA9IHZpY3RpbVNhZmV0eVBsYW5zOyBcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2FmZXR5UGxhbkRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudmljdGltU2FmZXR5UGxhbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgIFxuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBcblxuXG4gICAgICAgIH1cblxuICAgICB9KTtcbiAgfVxuXG4gIGJhY2soKXtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3ZpY3RpbUhvbWUnXSk7XG4gIFxuICB9XG5cblxuXG5cblxufVxuXG4iLCJcbiA8bWF0LWNhcmQ+XG4gICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG1hdC10b29sYmFyICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImNhcmQtaGVhZGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+U2FmZXR5IFBsYW48L2g0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10b29sYmFyPlxuICAgICAgICA8YnI+XG4gICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImdvVG9TYWZldHlQbGFuRGV0YWlsKDApXCIgPkFkZCBHb2FsPC9idXR0b24+XG4gICAgICAgICZuYnNwOyZuYnNwOzxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgIChjbGljayk9XCJiYWNrKClcIj5CYWNrPC9idXR0b24+XG4gICAgICAgIDxicj5cbiAgICAgICAgPGJyPlxuICAgICAgICA8bWF0LXRhYmxlICN0YWJsZSBbZGF0YVNvdXJjZV09XCJzYWZldHlQbGFuRGF0YVNvdXJjZVwiIGNsYXNzPVwiZXhhbXBsZS10YWJsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhcnREYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+U3RhcnQgRGF0ZTwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cuc3RhcnREYXRlIHwgZGF0ZX19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJnb2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkdvYWw8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5nb2FsIH19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInZpY3RpbVNlcnZpY2VTdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+U3RhdHVzPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJleGFtcGxlLWNlbGxcIj4ge3tyb3cudmljdGltU2VydmljZVN0YXR1cyB9fSA8L21hdC1jZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjb21tZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItY2VsbFwiPkNvbW1lbnQ8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImV4YW1wbGUtY2VsbFwiPiB7e3Jvdy5jb21tZW50IH19IDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2aWN0aW1TZXJ2aWNlSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJleGFtcGxlLWhlYWRlci1jZWxsXCI+PC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiZXhhbXBsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub1NhZmV0eVBsYW5EZXRhaWwocm93LnZpY3RpbVNlcnZpY2VJZClcIj4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2x5cGhpY29uIGdseXBoaWNvbi1wZW5jaWxcIiA+PC9zcGFuPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPiBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBcbiAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgXG5cblxuXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25EZWxldGVTYWZldHlQbGFuKHJvdy52aWN0aW1TZXJ2aWNlSWQpXCI+ICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoXCIgPjwvc3Bhbj4mbmJzcDtEZWxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiBcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2VsbD4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXQtYnRuXCIgIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAgbWF0VG9vbHRpcD1cIkVkaXQgU2FmZXR5IFBsYW5cIiAoY2xpY2spPVwiZ29Ub1NhZmV0eVBsYW5EZXRhaWwoZWxlbWVudC52aWN0aW1TZXJ2aWNlSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tb2RlX2VkaXQ8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSBTYWZldHkgUGxhblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVTYWZldHlQbGFuKGVsZW1lbnQudmljdGltU2VydmljZUlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5kZWxldGU8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2VsbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydzdGFydERhdGUnLCAnZ29hbCcsICd2aWN0aW1TZXJ2aWNlU3RhdHVzJywgJ2NvbW1lbnQnLCAndmljdGltU2VydmljZUlkJ11cIiBjbGFzcz1cImV4YW1wbGUtaGVhZGVyLXJvd1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgICAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6WydzdGFydERhdGUnLCAnZ29hbCcsICd2aWN0aW1TZXJ2aWNlU3RhdHVzJywgJ2NvbW1lbnQnLCAndmljdGltU2VydmljZUlkJ107XCIgY2xhc3M9XCJleGFtcGxlLXJvd1wiPjwvbWF0LXJvdz5cbiAgICAgICAgICAgICAgICA8L21hdC10YWJsZT5cbiAgICAgICAgICAgICAgIFxuICAgICAgIFxuPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD4iXX0=
|