tin-spa 2.6.13 → 2.6.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/esm2020/lib/classes/Classes.mjs +3 -1
  2. package/esm2020/lib/classes/TinCore.mjs +27 -4
  3. package/esm2020/lib/components/form/form.component.mjs +32 -24
  4. package/esm2020/lib/components/select/select.component.mjs +27 -15
  5. package/esm2020/lib/components/select-common/select-common.component.mjs +2 -2
  6. package/esm2020/lib/components/select-internal/select-internal.component.mjs +27 -15
  7. package/esm2020/lib/components/table/detailsDialog.component.mjs +23 -21
  8. package/esm2020/lib/components/table/table.component.mjs +24 -19
  9. package/esm2020/lib/components/table-action/table-action.component.mjs +2 -2
  10. package/esm2020/lib/components/table-header/table-header.component.mjs +2 -2
  11. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +23 -21
  12. package/esm2020/lib/components/table-internal/table-internal.component.mjs +24 -19
  13. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +20 -18
  14. package/esm2020/lib/components/table-lite/table-lite.component.mjs +24 -19
  15. package/esm2020/lib/components/table-row/table-row.component.mjs +3 -3
  16. package/esm2020/lib/pages/departments/departments.component.mjs +1 -3
  17. package/esm2020/lib/pages/employees/employees.component.mjs +1 -2
  18. package/esm2020/lib/pages/login/login.component.mjs +2 -1
  19. package/esm2020/lib/pages/positions/positions.component.mjs +2 -2
  20. package/esm2020/lib/services/button.service.mjs +27 -6
  21. package/esm2020/lib/services/datalib.service.mjs +63 -60
  22. package/fesm2015/tin-spa.mjs +251 -153
  23. package/fesm2015/tin-spa.mjs.map +1 -1
  24. package/fesm2020/tin-spa.mjs +245 -159
  25. package/fesm2020/tin-spa.mjs.map +1 -1
  26. package/lib/classes/Classes.d.ts +6 -0
  27. package/lib/classes/TinCore.d.ts +5 -3
  28. package/lib/components/form/form.component.d.ts +4 -1
  29. package/lib/components/select/select.component.d.ts +4 -1
  30. package/lib/components/select-internal/select-internal.component.d.ts +4 -1
  31. package/lib/components/table/detailsDialog.component.d.ts +3 -1
  32. package/lib/components/table/table.component.d.ts +4 -2
  33. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +3 -1
  34. package/lib/components/table-internal/table-internal.component.d.ts +4 -2
  35. package/lib/components/table-lite/detailsDialog-lite.component.d.ts +3 -1
  36. package/lib/components/table-lite/table-lite.component.d.ts +4 -2
  37. package/lib/services/button.service.d.ts +4 -1
  38. package/lib/services/datalib.service.d.ts +8 -6
  39. package/package.json +1 -1
@@ -9,7 +9,6 @@ export class EmployeesComponent {
9
9
  this.authService = authService;
10
10
  }
11
11
  ngOnInit() {
12
- this.dataService.loadEmployeesMeta();
13
12
  }
14
13
  }
15
14
  EmployeesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EmployeesComponent, deps: [{ token: i1.DataServiceLib }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Component });
@@ -18,4 +17,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
18
17
  type: Component,
19
18
  args: [{ selector: 'spa-employees', template: "<h4>Employees</h4>\r\n<hr>\r\n\r\n<div class=\"mt-3\" style=\" font-size: 14px;\">\r\n <spa-table [config]=\"dataService.employeeTableConfig\"></spa-table>\r\n</div>\r\n" }]
20
19
  }], ctorParameters: function () { return [{ type: i1.DataServiceLib }, { type: i2.AuthService }]; } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wbG95ZWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9lbXBsb3llZXMvZW1wbG95ZWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9lbXBsb3llZXMvZW1wbG95ZWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBV2xELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBbUIsV0FBMkIsRUFBUyxXQUF3QjtRQUE1RCxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFJLENBQUM7SUFFcEYsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzsrR0FOVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixxRENYL0IsNEtBTUE7MkZES2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Db25maWcsIFRhYmxlQ29uZmlnLCBBcGlSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGEtZW1wbG95ZWVzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZW1wbG95ZWVzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9lbXBsb3llZXMuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbXBsb3llZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmxvYWRFbXBsb3llZXNNZXRhKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8aDQ+RW1wbG95ZWVzPC9oND5cclxuPGhyPlxyXG5cclxuPGRpdiBjbGFzcz1cIm10LTNcIiBzdHlsZT1cIiBmb250LXNpemU6IDE0cHg7XCI+XHJcbiAgPHNwYS10YWJsZSBbY29uZmlnXT1cImRhdGFTZXJ2aWNlLmVtcGxveWVlVGFibGVDb25maWdcIj48L3NwYS10YWJsZT5cclxuPC9kaXY+XHJcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wbG95ZWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9lbXBsb3llZXMvZW1wbG95ZWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9lbXBsb3llZXMvZW1wbG95ZWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBV2xELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBbUIsV0FBMkIsRUFBUyxXQUF3QjtRQUE1RCxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFJLENBQUM7SUFFcEYsUUFBUTtJQUNSLENBQUM7OytHQUxVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHFEQ1gvQiw0S0FNQTsyRkRLYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUNvbmZpZywgVGFibGVDb25maWcsIEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NwYS1lbXBsb3llZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbXBsb3llZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VtcGxveWVlcy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcGxveWVlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG59XHJcbiIsIjxoND5FbXBsb3llZXM8L2g0PlxyXG48aHI+XHJcblxyXG48ZGl2IGNsYXNzPVwibXQtM1wiIHN0eWxlPVwiIGZvbnQtc2l6ZTogMTRweDtcIj5cclxuICA8c3BhLXRhYmxlIFtjb25maWddPVwiZGF0YVNlcnZpY2UuZW1wbG95ZWVUYWJsZUNvbmZpZ1wiPjwvc3BhLXRhYmxlPlxyXG48L2Rpdj5cclxuIl19
@@ -101,6 +101,7 @@ export class LoginComponent {
101
101
  this.authService.updateTenantName(apiResponse.data.tenantName);
102
102
  this.storageService.store(Constants.AUTH_TENANT_NAME, apiResponse.data.tenantName);
103
103
  this.logService.info("logged in");
104
+ this.dataService.ClearCache();
104
105
  if (apiResponse.data.changePassword == true && apiResponse.data.authType == 'local') {
105
106
  this.router.navigate(["home/user/change-password"], {
106
107
  queryParams: { redirectTo: this.redirectPath },
@@ -132,4 +133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
132
133
  type: Component,
133
134
  args: [{ selector: "spa-login", template: "\r\n <div *ngIf=\"style=='old'\" class=\"tin-bg-login login-page\">\r\n\r\n <div *ngIf=\"appConfig.logo!=''\" class=\"d-flex justify-content-center row align-items-center\" style=\"margin-top:3em;margin-bottom:1em\">\r\n\r\n <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px;margin-right:3em;margin-left:3em\" />\r\n <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px;margin-right:3em;margin-left:3em\" />\r\n <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px; margin-right:3em;margin-left:3em\" />\r\n\r\n </div>\r\n\r\n\r\n <div *ngIf=\"appConfig.logo ==''\" style=\"margin-top:2em\">\r\n <!-- Add margin top when there is no logo -->\r\n </div>\r\n\r\n\r\n <div class=\"d-flex justify-content-center row align-items-center\" style=\"margin-top:3em;\">\r\n\r\n <div class=\"d-none d-sm-block\">\r\n </div>\r\n\r\n <div style=\"margin-left:1em\">\r\n\r\n <mat-card class=\"mat-elevation-z3 login-card\" style=\"width:400px; \">\r\n\r\n <mat-card-header>\r\n <mat-card-title>{{appConfig.appName}}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"tin-input mt-2\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"user.userName\" ></spa-text>\r\n\r\n <mat-form-field >\r\n <mat-label>Password</mat-label>\r\n <input id=\"txtPassword\" matInput [type]=\"hide ? 'password' : 'text'\" (keyup.enter)=\"login()\" [(ngModel)]=\"user.password\" autocomplete=\"off\" >\r\n <button mat-icon-button matSuffix (click)=\"hide = !hide\" [attr.aria-label]=\"'Hide password'\" [attr.aria-pressed]=\"hide\">\r\n <mat-icon style=\"font-size: 18px;\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n\r\n\r\n <mat-card-actions>\r\n\r\n <div class=\"row \">\r\n\r\n <div class=\"col d-flex justify-content-center\">\r\n <button id=\"btnLogin\" mat-raised-button [disabled]=\"isProcessing\" style=\"width: 100px;\" (click)=\"login()\" color=\"primary\">Login</button>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-center\" *ngIf=\"appConfig.selfService\">\r\n <button id=\"btnSignup\" mat-stroked-button color=\"primary\" style=\"width: 100px;\" (click)=\"signup()\">Signup</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n <div *ngIf=\"appConfig.selfService\">\r\n <br />\r\n <a mat-button id=\"lnkRecover\" style=\"margin-left: 1em\" (click)=\"recoverAccount()\">Forgot your password ?</a>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div *ngIf=\"style=='default'\" class=\"login-page background tin-bg-login\">\r\n\r\n <div class=\"container\" >\r\n\r\n <div class=\"logo\">\r\n <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px\" />\r\n <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px\" />\r\n <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px\" />\r\n </div>\r\n\r\n <mat-card class=\"mat-elevation-z3 \" style=\"width:400px; \">\r\n\r\n <mat-card-header>\r\n <mat-card-title style=\"font-size: 40px;margin-bottom: 10px; margin-top: 20px; font-weight: 300\">{{appConfig.appName}}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content *ngIf=\"appConfig.localAuth || appConfig.ADAuth\">\r\n\r\n <div class=\"tin-input mt-2\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"user.userName\"></spa-text>\r\n\r\n <spa-text id=\"txtPassword\" display=\"Password\" format=\"password\" [(value)]=\"user.password\" (enterPress)=\"login()\"></spa-text>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n\r\n\r\n <mat-card-actions style=\"margin-bottom: 10px;\">\r\n\r\n <div class=\"button mt-0\" *ngIf=\"appConfig.localAuth || appConfig.ADAuth\">\r\n <button id=\"btnLogin\" mat-flat-button [disabled]=\"isProcessing\" style=\"width: 350px;\" (click)=\"login()\" color=\"primary\">Login</button>\r\n </div>\r\n\r\n <div class=\"button\" *ngIf=\"(appConfig.localAuth || appConfig.ADAuth) && appConfig.selfService\" >\r\n <button id=\"btnSignup\" mat-stroked-button color=\"primary\" style=\"width: 350px;\" (click)=\"signup()\">Sign up with Email</button>\r\n </div>\r\n\r\n <div class=\"button\" *ngIf=\"appConfig.googleAuth\">\r\n <asl-google-signin-button type='standard' width=\"350px\" size='medium' logo_alignment=\"center\" style=\"text-align: center;\"></asl-google-signin-button>\r\n </div>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n <a *ngIf=\"appConfig.selfService\" mat-button id=\"lnkRecover\" style=\"margin-top: 1em\" (click)=\"recoverAccount()\">Forgot your password ?</a>\r\n\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"style=='bs'\">\r\n\r\n <div class=\"container\">\r\n\r\n <div class=\"image\">\r\n <img class=\"mb-4\" src=\"c:\\Tinashe\\Code\\Angular\\Junk\\bs-examples\\assets\\brand\\bootstrap-logo.svg\" alt=\"\" width=\"72\" height=\"57\">\r\n </div>\r\n\r\n <div class=\"details\">\r\n <h1 class=\"h3 mb-3 fw-normal\" >Please sign in</h1>\r\n\r\n <div class=\"form-floating\">\r\n <input class=\"form-control\" id=\"floatingInput\" placeholder=\"name@example.com\" [(ngModel)]=\"user.userName\">\r\n <label for=\"floatingInput\">Username</label>\r\n </div>\r\n\r\n <div class=\"form-floating\">\r\n <input type=\"password\" class=\"form-control\" id=\"floatingPassword\" placeholder=\"Password\" [(ngModel)]=\"user.password\">\r\n <label for=\"floatingPassword\">Password</label>\r\n </div>\r\n\r\n <div class=\"form-check text-start my-3\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"remember-me\" id=\"flexCheckDefault\" >\r\n <label class=\"form-check-label\" for=\"flexCheckDefault\">\r\n Remember me\r\n </label>\r\n </div>\r\n\r\n <button class=\"btn btn-primary w-100 py-2\" (click)=\"login()\">Sign in</button>\r\n\r\n </div>\r\n\r\n <p class=\"mt-5 mb-3 text-body-secondary\">&copy; 2017\u20132023</p>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n", styles: [".login-page{position:absolute;inset:0;overflow:auto}.background{min-height:100%}.container{display:flex;flex-direction:column;align-items:center;height:100vh}.logo{margin-top:3em;margin-bottom:1em}.buttons{display:flex;flex-direction:row;justify-content:space-evenly}.button{display:flex;flex-direction:row;justify-content:center;margin-top:10px}\n"] }]
134
135
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.StorageService }, { type: i3.Router }, { type: i4.MessageService }, { type: i5.DataServiceLib }, { type: i6.AuthService }, { type: i7.LogService }, { type: i3.ActivatedRoute }, { type: i8.SocialAuthService }, { type: i9.NotificationsService }]; } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3BhZ2VzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUl6RCxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUFvQixXQUF3QixFQUFVLGNBQThCLEVBQVMsTUFBYyxFQUFVLGNBQThCLEVBQVMsV0FBMkIsRUFDOUssV0FBd0IsRUFBVSxVQUFzQixFQUFVLEtBQXFCLEVBQVUsYUFBZ0MsRUFBVSxvQkFBMEM7UUFEMUssZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzlLLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQTBDOUwsVUFBSyxHQUFXLFNBQVMsQ0FBQztRQUUxQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFJZixTQUFJLEdB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RixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFDO1lBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1NBQzlDO0lBRUgsQ0FBQzs7MkdBNUpVLGNBQWM7K0ZBQWQsY0FBYyxpRENsQjNCLDR3TkE2S0E7MkZEM0phLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwcENvbmZpZywgQXBpUmVzcG9uc2UsIENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL0NsYXNzZXNcIjtcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNvY2lhbEF1dGhTZXJ2aWNlLCBTb2NpYWxVc2VyIH0gZnJvbSAnQGFiYWNyaXR0L2FuZ3VsYXJ4LXNvY2lhbC1sb2dpbic7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9MaWJDbGFzc2VzXCI7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbnMuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic3BhLWxvZ2luXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9sb2dpbi5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9sb2dpbi5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSwgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIHB1YmxpYyBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsXHJcbiAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHNvY2lhbFNlcnZpY2U6IFNvY2lhbEF1dGhTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvbnNTZXJ2aWNlOiBOb3RpZmljYXRpb25zU2VydmljZSAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG5cclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBwQ29uZmlnT2JzZXJ2LnN1YnNjcmliZSh4ID0+IHRoaXMuYXBwQ29uZmlnID0geCk7XHJcblxyXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJyZWRpcmVjdFRvXCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlZGlyZWN0UGF0aCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJyZWRpcmVjdFRvXCJdXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5yZWRpcmVjdFBhdGggPSBcImhvbWVcIlxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5hdXRvTG9naW5PYnNlcnYuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICB0aGlzLmF1dG9Mb2dpbiA9IHhcclxuICAgICAgY29uc29sZS5sb2coXCJBVVRPIExPR0lOIDpcIiArIHRoaXMuYXV0b0xvZ2luKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnNvY2lhbFVzZXIgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuc29jaWFsU2VydmljZS5hdXRoU3RhdGUuc3Vic2NyaWJlKChzb2NpYWxVc2VyOiBTb2NpYWxVc2VyKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnNvY2lhbFVzZXIgPSBzb2NpYWxVc2VyO1xyXG5cclxuICAgICAgdGhpcy51c2VyLnVzZXJOYW1lID0gc29jaWFsVXNlci5pZDtcclxuICAgICAgdGhpcy51c2VyLnBhc3N3b3JkID0gc29jaWFsVXNlci5pZDsgLy9kdW1teSBkYXRhXHJcbiAgICAgIHRoaXMudXNlci50b2tlbiA9IHNvY2lhbFVzZXIuaWRUb2tlbjtcclxuICAgICAgdGhpcy51c2VyLmF1dGhUeXBlID0gc29jaWFsVXNlci5wcm92aWRlcjtcclxuXHJcbiAgICAgIHRoaXMubG9naW4oKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyB0aGlzLmF1dGhTZXJ2aWNlLmxvZ29mZigpO1xyXG5cclxuICB9XHJcblxyXG4gIGF1dG9Mb2dpbjogYm9vbGVhbjtcclxuICBzb2NpYWxVc2VyOiBTb2NpYWxVc2VyIHwgbnVsbDtcclxuXHJcbiAgc3R5bGU6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG5cclxuICBlbWFpbDogc3RyaW5nID0gXCJcIjtcclxuICBwYXNzd29yZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgcmVkaXJlY3RQYXRoXHJcblxyXG4gIHB1YmxpYyB1c2VyID0gbmV3IFVzZXIoKTtcclxuICBoaWRlID0gdHJ1ZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYXBwQ29uZmlnID0gbmV3IEFwcENvbmZpZygpO1xyXG5cclxuICBwdWJsaWMgc2lnbnVwKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wic2lnbnVwXCJdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWNvdmVyQWNjb3VudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInJlY292ZXItYWNjb3VudFwiXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnVzZXIudXNlck5hbWUgPT0gXCJcIiB8fCB0aGlzLnVzZXIucGFzc3dvcmQgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHNcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLmluZm8oXCJsb2dnaW5nIGluXCIpO1xyXG5cclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy51c2VyLnVzZXJOYW1lID0gdGhpcy51c2VyLnVzZXJOYW1lXHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5Mb2dpbih0aGlzLnVzZXIpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIC8vIGlmIChhcGlSZXNwb25zZS5kYXRhLmF1dGhUeXBlID09ICdsb2NhbCcgJiYgIXRoaXMuYXBwQ29uZmlnLmxvY2FsQXV0aCkge1xyXG4gICAgICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkNvbnRhY3QgQWRtaW46IEF1dGhlbnRpY2F0aW9uIFR5cGUgZXJyb3JcIik7XHJcbiAgICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoYXBpUmVzcG9uc2UuZGF0YS5hdXRoVHlwZSA9PSAnQUQnICYmICF0aGlzLmFwcENvbmZpZy5BREF1dGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJDb250YWN0IEFkbWluOiBBdXRoZW50aWNhdGlvbiBUeXBlIGVycm9yXCIpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlbG9nZ2VkaW4odHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlVG9rZW4oYXBpUmVzcG9uc2UuZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9UT0tFTiwgYXBpUmVzcG9uc2UuZGF0YS50b2tlbik7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlVG9rZW5FeHBpcmUoYXBpUmVzcG9uc2UuZGF0YS5leHBpcmF0aW9uKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX1RPS0VOX0VYUElSRSwgYXBpUmVzcG9uc2UuZGF0YS5leHBpcmF0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5VcGRhdGVDdXJyZW50VXNlcih0aGlzLnVzZXIudXNlck5hbWUpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfVVNFUiwgdGhpcy51c2VyLnVzZXJOYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS51cGRhdGVMb2dnZWRVc2VyRnVsbE5hbWUoYXBpUmVzcG9uc2UuZGF0YS5maXJzdE5hbWUpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfTkFNRSwgYXBpUmVzcG9uc2UuZGF0YS5maXJzdE5hbWUpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLlVwZGF0ZVJvbGUoYXBpUmVzcG9uc2UuZGF0YS5yb2xlKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX1JPTEVTLCBKU09OLnN0cmluZ2lmeShhcGlSZXNwb25zZS5kYXRhLnJvbGUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS51cGRhdGVUZW5hbnROYW1lKGFwaVJlc3BvbnNlLmRhdGEudGVuYW50TmFtZSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9URU5BTlRfTkFNRSwgYXBpUmVzcG9uc2UuZGF0YS50ZW5hbnROYW1lKTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubG9nU2VydmljZS5pbmZvKFwibG9nZ2VkIGluXCIpO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLmRhdGEuY2hhbmdlUGFzc3dvcmQgPT0gdHJ1ZSAmJiBhcGlSZXNwb25zZS5kYXRhLmF1dGhUeXBlID09ICdsb2NhbCcpIHtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJob21lL3VzZXIvY2hhbmdlLXBhc3N3b3JkXCJdLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHJlZGlyZWN0VG86IHRoaXMucmVkaXJlY3RQYXRoIH0sXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yZWRpcmVjdFBhdGhdKTtcclxuXHJcblxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy51c2VyLnBhc3N3b3JkID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh0aGlzLmh0dHBTZXJ2aWNlLkVycm9yKGVycm9yKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBub3RpZmljYXRpb25zKCl7XHJcbiAgICBpZiAodGhpcy5hcHBDb25maWcubXVsdGl0ZW5hbnQpe1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmxvYWROb3RpZmljYXRpb25zKClcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiXHJcbiAgPGRpdiAqbmdJZj1cInN0eWxlPT0nb2xkJ1wiIGNsYXNzPVwidGluLWJnLWxvZ2luIGxvZ2luLXBhZ2VcIj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ28hPScnXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciByb3cgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjNlbTttYXJnaW4tYm90dG9tOjFlbVwiPlxyXG5cclxuICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J25vcm1hbCdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDEwMHB4O21hcmdpbi1yaWdodDozZW07bWFyZ2luLWxlZnQ6M2VtXCIgLz5cclxuICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J21lZGl1bSdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDE1MHB4O21hcmdpbi1yaWdodDozZW07bWFyZ2luLWxlZnQ6M2VtXCIgLz5cclxuICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J2xhcmdlJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMjUwcHg7IG1hcmdpbi1yaWdodDozZW07bWFyZ2luLWxlZnQ6M2VtXCIgLz5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImFwcENvbmZpZy5sb2dvID09JydcIiBzdHlsZT1cIm1hcmdpbi10b3A6MmVtXCI+XHJcbiAgICAgICAgPCEtLSBBZGQgbWFyZ2luIHRvcCB3aGVuIHRoZXJlIGlzIG5vIGxvZ28gLS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cIm1hcmdpbi10b3A6M2VtO1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLXNtLWJsb2NrXCI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjFlbVwiPlxyXG5cclxuICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXozIGxvZ2luLWNhcmRcIiBzdHlsZT1cIndpZHRoOjQwMHB4OyBcIj5cclxuXHJcbiAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGU+e3thcHBDb25maWcuYXBwTmFtZX19PC9tYXQtY2FyZC10aXRsZT5cclxuICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbi1pbnB1dCBtdC0yXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dHVzZXJOYW1lXCIgZGlzcGxheT1cIlVzZXJuYW1lXCIgWyh2YWx1ZSldPVwidXNlci51c2VyTmFtZVwiID48L3NwYS10ZXh0PlxyXG5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5QYXNzd29yZDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidHh0UGFzc3dvcmRcIiBtYXRJbnB1dCBbdHlwZV09XCJoaWRlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiICAoa2V5dXAuZW50ZXIpPVwibG9naW4oKVwiIFsobmdNb2RlbCldPVwidXNlci5wYXNzd29yZFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiID5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiaGlkZSA9ICFoaWRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInSGlkZSBwYXNzd29yZCdcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwiaGlkZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XCI+e3toaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG5cclxuICAgICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bkxvZ2luXCIgIG1hdC1yYWlzZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiAoY2xpY2spPVwibG9naW4oKVwiIGNvbG9yPVwicHJpbWFyeVwiPkxvZ2luPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImFwcENvbmZpZy5zZWxmU2VydmljZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0blNpZ251cFwiIG1hdC1zdHJva2VkLWJ1dHRvbiAgY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgKGNsaWNrKT1cInNpZ251cCgpXCI+U2lnbnVwPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcblxyXG4gICAgICAgIDwvbWF0LWNhcmQ+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhcHBDb25maWcuc2VsZlNlcnZpY2VcIj5cclxuICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgPGEgbWF0LWJ1dHRvbiBpZD1cImxua1JlY292ZXJcIiAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMWVtXCIgKGNsaWNrKT1cInJlY292ZXJBY2NvdW50KClcIj5Gb3Jnb3QgeW91ciBwYXNzd29yZCA/PC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInN0eWxlPT0nZGVmYXVsdCdcIiBjbGFzcz1cImxvZ2luLXBhZ2UgYmFja2dyb3VuZCB0aW4tYmctbG9naW5cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImxvZ29cIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ29TaXplPT0nbm9ybWFsJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiAvPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdtZWRpdW0nXCIgIFtzcmNdPVwiYXBwQ29uZmlnLmxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweFwiIC8+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J2xhcmdlJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMjUwcHhcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejMgXCIgc3R5bGU9XCJ3aWR0aDo0MDBweDsgXCI+XHJcblxyXG4gICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICA8bWF0LWNhcmQtdGl0bGUgc3R5bGU9XCJmb250LXNpemU6IDQwcHg7bWFyZ2luLWJvdHRvbTogMTBweDsgbWFyZ2luLXRvcDogMjBweDsgZm9udC13ZWlnaHQ6IDMwMFwiPnt7YXBwQ29uZmlnLmFwcE5hbWV9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcblxyXG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50ICpuZ0lmPVwiYXBwQ29uZmlnLmxvY2FsQXV0aCB8fCBhcHBDb25maWcuQURBdXRoXCI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbi1pbnB1dCBtdC0yXCI+XHJcblxyXG4gICAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHR1c2VyTmFtZVwiIGRpc3BsYXk9XCJVc2VybmFtZVwiIFsodmFsdWUpXT1cInVzZXIudXNlck5hbWVcIj48L3NwYS10ZXh0PlxyXG5cclxuICAgICAgICAgICAgPHNwYS10ZXh0IGlkPVwidHh0UGFzc3dvcmRcIiBkaXNwbGF5PVwiUGFzc3dvcmRcIiBmb3JtYXQ9XCJwYXNzd29yZFwiIFsodmFsdWUpXT1cInVzZXIucGFzc3dvcmRcIiAoZW50ZXJQcmVzcyk9XCJsb2dpbigpXCI+PC9zcGEtdGV4dD5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuXHJcbiAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnMgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxMHB4O1wiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24gbXQtMFwiICpuZ0lmPVwiYXBwQ29uZmlnLmxvY2FsQXV0aCB8fCBhcHBDb25maWcuQURBdXRoXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5Mb2dpblwiIG1hdC1mbGF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgc3R5bGU9XCJ3aWR0aDogMzUwcHg7XCIgKGNsaWNrKT1cImxvZ2luKClcIiBjb2xvcj1cInByaW1hcnlcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvblwiICpuZ0lmPVwiKGFwcENvbmZpZy5sb2NhbEF1dGggfHwgYXBwQ29uZmlnLkFEQXV0aCkgJiYgYXBwQ29uZmlnLnNlbGZTZXJ2aWNlXCIgPlxyXG4gICAgICAgICAgICA8YnV0dG9uICBpZD1cImJ0blNpZ251cFwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cIndpZHRoOiAzNTBweDtcIiAoY2xpY2spPVwic2lnbnVwKClcIj5TaWduIHVwIHdpdGggRW1haWw8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cImFwcENvbmZpZy5nb29nbGVBdXRoXCI+XHJcbiAgICAgICAgICAgIDxhc2wtZ29vZ2xlLXNpZ25pbi1idXR0b24gdHlwZT0nc3RhbmRhcmQnIHdpZHRoPVwiMzUwcHhcIiBzaXplPSdtZWRpdW0nIGxvZ29fYWxpZ25tZW50PVwiY2VudGVyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PC9hc2wtZ29vZ2xlLXNpZ25pbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG5cclxuICAgICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgICAgIDxhICpuZ0lmPVwiYXBwQ29uZmlnLnNlbGZTZXJ2aWNlXCIgbWF0LWJ1dHRvbiBpZD1cImxua1JlY292ZXJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDFlbVwiIChjbGljayk9XCJyZWNvdmVyQWNjb3VudCgpXCI+Rm9yZ290IHlvdXIgcGFzc3dvcmQgPzwvYT5cclxuXHJcblxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzdHlsZT09J2JzJ1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJtYi00XCIgc3JjPVwiYzpcXFRpbmFzaGVcXENvZGVcXEFuZ3VsYXJcXEp1bmtcXGJzLWV4YW1wbGVzXFxhc3NldHNcXGJyYW5kXFxib290c3RyYXAtbG9nby5zdmdcIiBhbHQ9XCJcIiB3aWR0aD1cIjcyXCIgaGVpZ2h0PVwiNTdcIj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc1wiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cImgzIG1iLTMgZnctbm9ybWFsXCIgPlBsZWFzZSBzaWduIGluPC9oMT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmxvYXRpbmdcIj5cclxuICAgICAgICAgIDxpbnB1dCAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZsb2F0aW5nSW5wdXRcIiBwbGFjZWhvbGRlcj1cIm5hbWVAZXhhbXBsZS5jb21cIiBbKG5nTW9kZWwpXT1cInVzZXIudXNlck5hbWVcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmbG9hdGluZ0lucHV0XCI+VXNlcm5hbWU8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1mbG9hdGluZ1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmbG9hdGluZ1Bhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIFsobmdNb2RlbCldPVwidXNlci5wYXNzd29yZFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZsb2F0aW5nUGFzc3dvcmRcIj5QYXNzd29yZDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIHRleHQtc3RhcnQgbXktM1wiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwicmVtZW1iZXItbWVcIiBpZD1cImZsZXhDaGVja0RlZmF1bHRcIiA+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleENoZWNrRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICBSZW1lbWJlciBtZVxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBweS0yXCIgIChjbGljayk9XCJsb2dpbigpXCI+U2lnbiBpbjwvYnV0dG9uPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8cCBjbGFzcz1cIm10LTUgbWItMyB0ZXh0LWJvZHktc2Vjb25kYXJ5XCI+JmNvcHk7IDIwMTfigJMyMDIzPC9wPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiJdfQ==
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3BhZ2VzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUl6RCxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFoRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUFvQixXQUF3QixFQUFVLGNBQThCLEVBQVMsTUFBYyxFQUFVLGNBQThCLEVBQVMsV0FBMkIsRUFDOUssV0FBd0IsRUFBVSxVQUFzQixFQUFVLEtBQXFCLEVBQVUsYUFBZ0MsRUFBVSxvQkFBMEM7UUFEMUssZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzlLLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQTBDOUwsVUFBSyxHQUFXLFNBQVMsQ0FBQztRQUUxQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFJZixTQUFJLEdB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QUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFDO1lBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1NBQzlDO0lBRUgsQ0FBQzs7MkdBOUpVLGNBQWM7K0ZBQWQsY0FBYyxpRENsQjNCLDR3TkE2S0E7MkZEM0phLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwcENvbmZpZywgQXBpUmVzcG9uc2UsIENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL0NsYXNzZXNcIjtcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNvY2lhbEF1dGhTZXJ2aWNlLCBTb2NpYWxVc2VyIH0gZnJvbSAnQGFiYWNyaXR0L2FuZ3VsYXJ4LXNvY2lhbC1sb2dpbic7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9MaWJDbGFzc2VzXCI7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbnMuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic3BhLWxvZ2luXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9sb2dpbi5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9sb2dpbi5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSwgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsIHB1YmxpYyBkYXRhU2VydmljZTogRGF0YVNlcnZpY2VMaWIsXHJcbiAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHNvY2lhbFNlcnZpY2U6IFNvY2lhbEF1dGhTZXJ2aWNlLCBwcml2YXRlIG5vdGlmaWNhdGlvbnNTZXJ2aWNlOiBOb3RpZmljYXRpb25zU2VydmljZSAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG5cclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBwQ29uZmlnT2JzZXJ2LnN1YnNjcmliZSh4ID0+IHRoaXMuYXBwQ29uZmlnID0geCk7XHJcblxyXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJyZWRpcmVjdFRvXCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlZGlyZWN0UGF0aCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJyZWRpcmVjdFRvXCJdXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5yZWRpcmVjdFBhdGggPSBcImhvbWVcIlxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5hdXRoU2VydmljZS5hdXRvTG9naW5PYnNlcnYuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICB0aGlzLmF1dG9Mb2dpbiA9IHhcclxuICAgICAgY29uc29sZS5sb2coXCJBVVRPIExPR0lOIDpcIiArIHRoaXMuYXV0b0xvZ2luKVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnNvY2lhbFVzZXIgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuc29jaWFsU2VydmljZS5hdXRoU3RhdGUuc3Vic2NyaWJlKChzb2NpYWxVc2VyOiBTb2NpYWxVc2VyKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnNvY2lhbFVzZXIgPSBzb2NpYWxVc2VyO1xyXG5cclxuICAgICAgdGhpcy51c2VyLnVzZXJOYW1lID0gc29jaWFsVXNlci5pZDtcclxuICAgICAgdGhpcy51c2VyLnBhc3N3b3JkID0gc29jaWFsVXNlci5pZDsgLy9kdW1teSBkYXRhXHJcbiAgICAgIHRoaXMudXNlci50b2tlbiA9IHNvY2lhbFVzZXIuaWRUb2tlbjtcclxuICAgICAgdGhpcy51c2VyLmF1dGhUeXBlID0gc29jaWFsVXNlci5wcm92aWRlcjtcclxuXHJcbiAgICAgIHRoaXMubG9naW4oKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyB0aGlzLmF1dGhTZXJ2aWNlLmxvZ29mZigpO1xyXG5cclxuICB9XHJcblxyXG4gIGF1dG9Mb2dpbjogYm9vbGVhbjtcclxuICBzb2NpYWxVc2VyOiBTb2NpYWxVc2VyIHwgbnVsbDtcclxuXHJcbiAgc3R5bGU6IHN0cmluZyA9IFwiZGVmYXVsdFwiO1xyXG5cclxuICBlbWFpbDogc3RyaW5nID0gXCJcIjtcclxuICBwYXNzd29yZDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgcmVkaXJlY3RQYXRoXHJcblxyXG4gIHB1YmxpYyB1c2VyID0gbmV3IFVzZXIoKTtcclxuICBoaWRlID0gdHJ1ZTtcclxuICBpc1Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYXBwQ29uZmlnID0gbmV3IEFwcENvbmZpZygpO1xyXG5cclxuICBwdWJsaWMgc2lnbnVwKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wic2lnbnVwXCJdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWNvdmVyQWNjb3VudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInJlY292ZXItYWNjb3VudFwiXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLnVzZXIudXNlck5hbWUgPT0gXCJcIiB8fCB0aGlzLnVzZXIucGFzc3dvcmQgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHNcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5sb2dTZXJ2aWNlLmluZm8oXCJsb2dnaW5nIGluXCIpO1xyXG5cclxuICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy51c2VyLnVzZXJOYW1lID0gdGhpcy51c2VyLnVzZXJOYW1lXHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5Mb2dpbih0aGlzLnVzZXIpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgIC8vIGlmIChhcGlSZXNwb25zZS5kYXRhLmF1dGhUeXBlID09ICdsb2NhbCcgJiYgIXRoaXMuYXBwQ29uZmlnLmxvY2FsQXV0aCkge1xyXG4gICAgICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkNvbnRhY3QgQWRtaW46IEF1dGhlbnRpY2F0aW9uIFR5cGUgZXJyb3JcIik7XHJcbiAgICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoYXBpUmVzcG9uc2UuZGF0YS5hdXRoVHlwZSA9PSAnQUQnICYmICF0aGlzLmFwcENvbmZpZy5BREF1dGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJDb250YWN0IEFkbWluOiBBdXRoZW50aWNhdGlvbiBUeXBlIGVycm9yXCIpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuXHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlbG9nZ2VkaW4odHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlVG9rZW4oYXBpUmVzcG9uc2UuZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9UT0tFTiwgYXBpUmVzcG9uc2UuZGF0YS50b2tlbik7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlVG9rZW5FeHBpcmUoYXBpUmVzcG9uc2UuZGF0YS5leHBpcmF0aW9uKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX1RPS0VOX0VYUElSRSwgYXBpUmVzcG9uc2UuZGF0YS5leHBpcmF0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5VcGRhdGVDdXJyZW50VXNlcih0aGlzLnVzZXIudXNlck5hbWUpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfVVNFUiwgdGhpcy51c2VyLnVzZXJOYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS51cGRhdGVMb2dnZWRVc2VyRnVsbE5hbWUoYXBpUmVzcG9uc2UuZGF0YS5maXJzdE5hbWUpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfTkFNRSwgYXBpUmVzcG9uc2UuZGF0YS5maXJzdE5hbWUpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLlVwZGF0ZVJvbGUoYXBpUmVzcG9uc2UuZGF0YS5yb2xlKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX1JPTEVTLCBKU09OLnN0cmluZ2lmeShhcGlSZXNwb25zZS5kYXRhLnJvbGUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS51cGRhdGVUZW5hbnROYW1lKGFwaVJlc3BvbnNlLmRhdGEudGVuYW50TmFtZSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9URU5BTlRfTkFNRSwgYXBpUmVzcG9uc2UuZGF0YS50ZW5hbnROYW1lKTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubG9nU2VydmljZS5pbmZvKFwibG9nZ2VkIGluXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLkNsZWFyQ2FjaGUoKTtcclxuXHJcblxyXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5kYXRhLmNoYW5nZVBhc3N3b3JkID09IHRydWUgJiYgYXBpUmVzcG9uc2UuZGF0YS5hdXRoVHlwZSA9PSAnbG9jYWwnKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiaG9tZS91c2VyL2NoYW5nZS1wYXNzd29yZFwiXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogeyByZWRpcmVjdFRvOiB0aGlzLnJlZGlyZWN0UGF0aCB9LFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmVkaXJlY3RQYXRoXSk7XHJcblxyXG5cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMudXNlci5wYXNzd29yZCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QodGhpcy5odHRwU2VydmljZS5FcnJvcihlcnJvcikpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbm90aWZpY2F0aW9ucygpe1xyXG4gICAgaWYgKHRoaXMuYXBwQ29uZmlnLm11bHRpdGVuYW50KXtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5sb2FkTm90aWZpY2F0aW9ucygpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIlxyXG4gIDxkaXYgKm5nSWY9XCJzdHlsZT09J29sZCdcIiBjbGFzcz1cInRpbi1iZy1sb2dpbiBsb2dpbi1wYWdlXCI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImFwcENvbmZpZy5sb2dvIT0nJ1wiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwibWFyZ2luLXRvcDozZW07bWFyZ2luLWJvdHRvbToxZW1cIj5cclxuXHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdub3JtYWwnXCIgIFtzcmNdPVwiYXBwQ29uZmlnLmxvZ29cIiBzdHlsZT1cIndpZHRoOiAxMDBweDttYXJnaW4tcmlnaHQ6M2VtO21hcmdpbi1sZWZ0OjNlbVwiIC8+XHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdtZWRpdW0nXCIgIFtzcmNdPVwiYXBwQ29uZmlnLmxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweDttYXJnaW4tcmlnaHQ6M2VtO21hcmdpbi1sZWZ0OjNlbVwiIC8+XHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdsYXJnZSdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDI1MHB4OyBtYXJnaW4tcmlnaHQ6M2VtO21hcmdpbi1sZWZ0OjNlbVwiIC8+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJhcHBDb25maWcubG9nbyA9PScnXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjJlbVwiPlxyXG4gICAgICAgIDwhLS0gQWRkIG1hcmdpbiB0b3Agd2hlbiB0aGVyZSBpcyBubyBsb2dvIC0tPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciByb3cgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjNlbTtcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1zbS1ibG9ja1wiPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDoxZW1cIj5cclxuXHJcbiAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MyBsb2dpbi1jYXJkXCIgc3R5bGU9XCJ3aWR0aDo0MDBweDsgXCI+XHJcblxyXG4gICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPnt7YXBwQ29uZmlnLmFwcE5hbWV9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXQgbXQtMlwiPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHR1c2VyTmFtZVwiIGRpc3BsYXk9XCJVc2VybmFtZVwiIFsodmFsdWUpXT1cInVzZXIudXNlck5hbWVcIiA+PC9zcGEtdGV4dD5cclxuXHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFzc3dvcmQ8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInR4dFBhc3N3b3JkXCIgbWF0SW5wdXQgW3R5cGVdPVwiaGlkZSA/ICdwYXNzd29yZCcgOiAndGV4dCdcIiAgKGtleXVwLmVudGVyKT1cImxvZ2luKClcIiBbKG5nTW9kZWwpXT1cInVzZXIucGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiA+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImhpZGUgPSAhaGlkZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hpZGUgcGFzc3dvcmQnXCIgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImhpZGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPnt7aGlkZSA/ICd2aXNpYmlsaXR5X29mZicgOiAndmlzaWJpbGl0eSd9fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuXHJcbiAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5Mb2dpblwiICBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgKGNsaWNrKT1cImxvZ2luKClcIiBjb2xvcj1cInByaW1hcnlcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJhcHBDb25maWcuc2VsZlNlcnZpY2VcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5TaWdudXBcIiBtYXQtc3Ryb2tlZC1idXR0b24gIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIChjbGljayk9XCJzaWdudXAoKVwiPlNpZ251cDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG5cclxuICAgICAgICA8L21hdC1jYXJkPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwQ29uZmlnLnNlbGZTZXJ2aWNlXCI+XHJcbiAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgIDxhIG1hdC1idXR0b24gaWQ9XCJsbmtSZWNvdmVyXCIgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDFlbVwiIChjbGljayk9XCJyZWNvdmVyQWNjb3VudCgpXCI+Rm9yZ290IHlvdXIgcGFzc3dvcmQgPzwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzdHlsZT09J2RlZmF1bHQnXCIgY2xhc3M9XCJsb2dpbi1wYWdlIGJhY2tncm91bmQgdGluLWJnLWxvZ2luXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiID5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dvXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J25vcm1hbCdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgLz5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ29TaXplPT0nbWVkaXVtJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHhcIiAvPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdsYXJnZSdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDI1MHB4XCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXozIFwiIHN0eWxlPVwid2lkdGg6NDAwcHg7IFwiPlxyXG5cclxuICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgPG1hdC1jYXJkLXRpdGxlIHN0eWxlPVwiZm9udC1zaXplOiA0MHB4O21hcmdpbi1ib3R0b206IDEwcHg7IG1hcmdpbi10b3A6IDIwcHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj57e2FwcENvbmZpZy5hcHBOYW1lfX08L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgICAgICA8bWF0LWNhcmQtY29udGVudCAqbmdJZj1cImFwcENvbmZpZy5sb2NhbEF1dGggfHwgYXBwQ29uZmlnLkFEQXV0aFwiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXQgbXQtMlwiPlxyXG5cclxuICAgICAgICAgICAgPHNwYS10ZXh0IGlkPVwidHh0dXNlck5hbWVcIiBkaXNwbGF5PVwiVXNlcm5hbWVcIiBbKHZhbHVlKV09XCJ1c2VyLnVzZXJOYW1lXCI+PC9zcGEtdGV4dD5cclxuXHJcbiAgICAgICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dFBhc3N3b3JkXCIgZGlzcGxheT1cIlBhc3N3b3JkXCIgZm9ybWF0PVwicGFzc3dvcmRcIiBbKHZhbHVlKV09XCJ1c2VyLnBhc3N3b3JkXCIgKGVudGVyUHJlc3MpPVwibG9naW4oKVwiPjwvc3BhLXRleHQ+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuXHJcblxyXG4gICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweDtcIj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIG10LTBcIiAqbmdJZj1cImFwcENvbmZpZy5sb2NhbEF1dGggfHwgYXBwQ29uZmlnLkFEQXV0aFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuTG9naW5cIiBtYXQtZmxhdC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIHN0eWxlPVwid2lkdGg6IDM1MHB4O1wiIChjbGljayk9XCJsb2dpbigpXCIgY29sb3I9XCJwcmltYXJ5XCI+TG9naW48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cIihhcHBDb25maWcubG9jYWxBdXRoIHx8IGFwcENvbmZpZy5BREF1dGgpICYmIGFwcENvbmZpZy5zZWxmU2VydmljZVwiID5cclxuICAgICAgICAgICAgPGJ1dHRvbiAgaWQ9XCJidG5TaWdudXBcIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJ3aWR0aDogMzUwcHg7XCIgKGNsaWNrKT1cInNpZ251cCgpXCI+U2lnbiB1cCB3aXRoIEVtYWlsPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCJhcHBDb25maWcuZ29vZ2xlQXV0aFwiPlxyXG4gICAgICAgICAgICA8YXNsLWdvb2dsZS1zaWduaW4tYnV0dG9uIHR5cGU9J3N0YW5kYXJkJyB3aWR0aD1cIjM1MHB4XCIgc2l6ZT0nbWVkaXVtJyBsb2dvX2FsaWdubWVudD1cImNlbnRlclwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPjwvYXNsLWdvb2dsZS1zaWduaW4tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuXHJcbiAgICAgIDwvbWF0LWNhcmQ+XHJcblxyXG4gICAgICA8YSAqbmdJZj1cImFwcENvbmZpZy5zZWxmU2VydmljZVwiIG1hdC1idXR0b24gaWQ9XCJsbmtSZWNvdmVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxZW1cIiAoY2xpY2spPVwicmVjb3ZlckFjY291bnQoKVwiPkZvcmdvdCB5b3VyIHBhc3N3b3JkID88L2E+XHJcblxyXG5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2ICpuZ0lmPVwic3R5bGU9PSdicydcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICA8aW1nIGNsYXNzPVwibWItNFwiIHNyYz1cImM6XFxUaW5hc2hlXFxDb2RlXFxBbmd1bGFyXFxKdW5rXFxicy1leGFtcGxlc1xcYXNzZXRzXFxicmFuZFxcYm9vdHN0cmFwLWxvZ28uc3ZnXCIgYWx0PVwiXCIgd2lkdGg9XCI3MlwiIGhlaWdodD1cIjU3XCI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHNcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJoMyBtYi0zIGZ3LW5vcm1hbFwiID5QbGVhc2Ugc2lnbiBpbjwvaDE+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZsb2F0aW5nXCI+XHJcbiAgICAgICAgICA8aW5wdXQgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmbG9hdGluZ0lucHV0XCIgcGxhY2Vob2xkZXI9XCJuYW1lQGV4YW1wbGUuY29tXCIgWyhuZ01vZGVsKV09XCJ1c2VyLnVzZXJOYW1lXCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZmxvYXRpbmdJbnB1dFwiPlVzZXJuYW1lPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmxvYXRpbmdcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZmxvYXRpbmdQYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInVzZXIucGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmbG9hdGluZ1Bhc3N3b3JkXCI+UGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayB0ZXh0LXN0YXJ0IG15LTNcIj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInJlbWVtYmVyLW1lXCIgaWQ9XCJmbGV4Q2hlY2tEZWZhdWx0XCIgPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZsZXhDaGVja0RlZmF1bHRcIj5cclxuICAgICAgICAgICAgUmVtZW1iZXIgbWVcclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgcHktMlwiICAoY2xpY2spPVwibG9naW4oKVwiPlNpZ24gaW48L2J1dHRvbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHAgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1ib2R5LXNlY29uZGFyeVwiPiZjb3B5OyAyMDE34oCTMjAyMzwvcD5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4iXX0=
@@ -9,7 +9,7 @@ export class PositionsComponent {
9
9
  this.authService = authService;
10
10
  }
11
11
  ngOnInit() {
12
- this.dataService.loadPositionMeta();
12
+ // this.dataService.loadPositionMeta();
13
13
  }
14
14
  }
15
15
  PositionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PositionsComponent, deps: [{ token: i1.DataServiceLib }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Component });
@@ -18,4 +18,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
18
18
  type: Component,
19
19
  args: [{ selector: 'spa-positions', template: "<h4>Positions</h4>\r\n<hr>\r\n\r\n<div class=\"mt-3\" style=\" font-size: 14px;\">\r\n <spa-table [config]=\"dataService.positionsTableConfig\"></spa-table>\r\n</div>\r\n" }]
20
20
  }], ctorParameters: function () { return [{ type: i1.DataServiceLib }, { type: i2.AuthService }]; } });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9wb3NpdGlvbnMvcG9zaXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9wb3NpdGlvbnMvcG9zaXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBU2xELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBbUIsV0FBMkIsRUFBUyxXQUF3QjtRQUE1RCxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFJLENBQUM7SUFFcEYsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzsrR0FOVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixxRENUL0IsNktBTUE7MkZER2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLXBvc2l0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Bvc2l0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcG9zaXRpb25zLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9zaXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5sb2FkUG9zaXRpb25NZXRhKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8aDQ+UG9zaXRpb25zPC9oND5cclxuPGhyPlxyXG5cclxuPGRpdiBjbGFzcz1cIm10LTNcIiBzdHlsZT1cIiBmb250LXNpemU6IDE0cHg7XCI+XHJcbiAgPHNwYS10YWJsZSBbY29uZmlnXT1cImRhdGFTZXJ2aWNlLnBvc2l0aW9uc1RhYmxlQ29uZmlnXCI+PC9zcGEtdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9wb3NpdGlvbnMvcG9zaXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9wb3NpdGlvbnMvcG9zaXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBU2xELE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBbUIsV0FBMkIsRUFBUyxXQUF3QjtRQUE1RCxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFJLENBQUM7SUFFcEYsUUFBUTtRQUNOLHVDQUF1QztJQUN6QyxDQUFDOzsrR0FOVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixxRENUL0IsNktBTUE7MkZER2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3BhLXBvc2l0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Bvc2l0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcG9zaXRpb25zLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9zaXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYiwgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5kYXRhU2VydmljZS5sb2FkUG9zaXRpb25NZXRhKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8aDQ+UG9zaXRpb25zPC9oND5cclxuPGhyPlxyXG5cclxuPGRpdiBjbGFzcz1cIm10LTNcIiBzdHlsZT1cIiBmb250LXNpemU6IDE0cHg7XCI+XHJcbiAgPHNwYS10YWJsZSBbY29uZmlnXT1cImRhdGFTZXJ2aWNlLnBvc2l0aW9uc1RhYmxlQ29uZmlnXCI+PC9zcGEtdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,6 +1,11 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { Core } from '../classes/TinCore';
2
3
  import * as i0 from "@angular/core";
4
+ import * as i1 from "./auth.service";
3
5
  export class ButtonService {
6
+ constructor(authService) {
7
+ this.authService = authService;
8
+ }
4
9
  getButton(buttons, name) {
5
10
  return buttons?.find(x => x.name === name) || null;
6
11
  }
@@ -9,7 +14,7 @@ export class ButtonService {
9
14
  color: this.getButtonColor(button, row),
10
15
  icon: this.getIcon(button, config),
11
16
  disabled: this.testDisabled(button, row),
12
- visible: this.testVisible(button, row),
17
+ visible: this.testVisible(button, row, config),
13
18
  tip: button.tip || button.name
14
19
  };
15
20
  }
@@ -53,8 +58,24 @@ export class ButtonService {
53
58
  return true;
54
59
  return button.disabled ? button.disabled(row) : false;
55
60
  }
56
- testVisible(button, row) {
57
- return button.visible ? button.visible(row) : true;
61
+ testVisible(button, row, config) {
62
+ if (button.visible && !button.visible(row)) {
63
+ return false;
64
+ }
65
+ const currentRole = this.authService.currentRoleSource.value;
66
+ // Check if button has detailsConfig with form restrictions
67
+ if (button.detailsConfig?.formConfig) {
68
+ if (!Core.checkFormAccess(button.detailsConfig.formConfig, currentRole)) {
69
+ return false;
70
+ }
71
+ }
72
+ // For create/edit/view buttons, check table's formConfig
73
+ if (['create', 'edit', 'view', 'delete'].includes(button.name) && config?.formConfig) {
74
+ if (!Core.checkFormAccess(config.formConfig, currentRole)) {
75
+ return false;
76
+ }
77
+ }
78
+ return true;
58
79
  }
59
80
  getDefaultColor(buttonName) {
60
81
  switch (buttonName) {
@@ -90,12 +111,12 @@ export class ButtonService {
90
111
  return `${buttons.length * 40 + 20}px`;
91
112
  }
92
113
  }
93
- ButtonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
114
+ ButtonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
94
115
  ButtonService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, providedIn: 'root' });
95
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, decorators: [{
96
117
  type: Injectable,
97
118
  args: [{
98
119
  providedIn: 'root'
99
120
  }]
100
- }] });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvYnV0dG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGFBQWE7SUFDeEIsU0FBUyxDQUFDLE9BQWlCLEVBQUUsSUFBWTtRQUN2QyxPQUFPLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNyRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYyxFQUFFLEdBQVEsRUFBRSxNQUFtQjtRQU8vRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUN0QyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSTtTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjLEVBQUUsR0FBUTtRQUNyQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUFFLE9BQU8sV0FBVyxDQUFDO1FBRXZELElBQUksTUFBTSxFQUFFLEtBQUs7WUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEtB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WUFDL0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztZQUM1QixPQUFPLENBQUMsQ0FBQyxPQUFPLFlBQVksQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBaUI7UUFDL0IsT0FBTyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBaUIsRUFBRSxhQUFzQixFQUFFLFVBQXFCO1FBQ2xGLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxGLElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksVUFBVSxFQUFFO2dCQUNkLE9BQU8sZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNuRTtZQUNELE9BQU8sZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFpQjtRQUMvQixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7SUFDekMsQ0FBQzs7MEdBN0dVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbiwgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnV0dG9uU2VydmljZSB7XHJcbiAgZ2V0QnV0dG9uKGJ1dHRvbnM6IEJ1dHRvbltdLCBuYW1lOiBzdHJpbmcpOiBCdXR0b24gfCBudWxsIHtcclxuICAgIHJldHVybiBidXR0b25zPy5maW5kKHggPT4geC5uYW1lID09PSBuYW1lKSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uUHJvcGVydGllcyhidXR0b246IEJ1dHRvbiwgcm93OiBhbnksIGNvbmZpZzogVGFibGVDb25maWcpOiB7XHJcbiAgICBjb2xvcjogc3RyaW5nLFxyXG4gICAgaWNvbjogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW4sXHJcbiAgICB2aXNpYmxlOiBib29sZWFuLFxyXG4gICAgdGlwOiBzdHJpbmdcclxuICB9IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbG9yOiB0aGlzLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KSxcclxuICAgICAgaWNvbjogdGhpcy5nZXRJY29uKGJ1dHRvbiwgY29uZmlnKSxcclxuICAgICAgZGlzYWJsZWQ6IHRoaXMudGVzdERpc2FibGVkKGJ1dHRvbiwgcm93KSxcclxuICAgICAgdmlzaWJsZTogdGhpcy50ZXN0VmlzaWJsZShidXR0b24sIHJvdyksXHJcbiAgICAgIHRpcDogYnV0dG9uLnRpcCB8fCBidXR0b24ubmFtZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbkNvbG9yKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpKSByZXR1cm4gJ2xpZ2h0Z3JheSc7XHJcblxyXG4gICAgaWYgKGJ1dHRvbj8uY29sb3IpIHJldHVybiBidXR0b24uY29sb3I7XHJcbiAgICBpZiAoYnV0dG9uLmljb24/LmNvbG9yKSByZXR1cm4gYnV0dG9uLmljb24uY29sb3I7XHJcblxyXG4gICAgY29uc3QgY29sb3JNYXAgPSB7XHJcbiAgICAgICdkZWxldGUnOiAnI0Y0NDMzNicsXHJcbiAgICAgICdjcmVhdGUnOiAnZ3JlZW4nXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBjb2xvck1hcFtidXR0b24ubmFtZV0gfHwgJyM0MDUwQjUnO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBpc0J1dHRvblZpc2libGUoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55LCBpc0xvYWRDb21wbGV0ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFpc0xvYWRDb21wbGV0ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMudGVzdFZpc2libGUoYnV0dG9uLHJvdyk7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZUFjdGlvbihtb2RlOiBzdHJpbmcsIGJ1dHRvbnM6IEJ1dHRvbltdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG1vZGVNYXAgPSB7XHJcbiAgICAgICd2aWV3JzogJ1ZpZXcnLFxyXG4gICAgICAnZWRpdCc6IGJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PT0gJ2VkaXQnKT8uZGlzcGxheSB8fCAnRWRpdCcsXHJcbiAgICAgICdjcmVhdGUnOiBidXR0b25zLmZpbmQoYiA9PiBiLm5hbWUgPT09ICdjcmVhdGUnKT8uZGlzcGxheSB8fCAnQ3JlYXRlJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiBtb2RlTWFwW21vZGVdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgaXNUYWJWaXNpYmxlKHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRhYmxlQ29uZmlnLmhpZGVUYWJDb25kaXRpb24gPyAhdGFibGVDb25maWcuaGlkZVRhYkNvbmRpdGlvbih0YWJsZUNvbmZpZy5wYXJlbnREYXRhKSA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKGJ1dHRvbjogQnV0dG9uLCBjb25maWc6IFRhYmxlQ29uZmlnKTogc3RyaW5nIHtcclxuICAgIGlmIChidXR0b24uaWNvbikge1xyXG4gICAgICByZXR1cm4gYnV0dG9uLmljb24ubmFtZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRJY29uKGJ1dHRvbi5uYW1lLCBjb25maWcuZmxhdEJ1dHRvbnMpO1xyXG4gIH1cclxuXHJcbiAgdGVzdERpc2FibGVkKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKChidXR0b24ubmFtZSA9PSAnZWRpdCcgfHwgYnV0dG9uLm5hbWUgPT0gXCJkZWxldGVcIikgJiYgcm93LnBlbmRpbmdBcHByb3ZhbCkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gYnV0dG9uLmRpc2FibGVkID8gYnV0dG9uLmRpc2FibGVkKHJvdykgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRlc3RWaXNpYmxlKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGJ1dHRvbi52aXNpYmxlID8gYnV0dG9uLnZpc2libGUocm93KSA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRDb2xvcihidXR0b25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChidXR0b25OYW1lKSB7XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6IHJldHVybiAnI0Y0NDMzNic7XHJcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6IHJldHVybiAnZ3JlZW4nO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyM0MDUwQjUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0SWNvbihidXR0b25OYW1lOiBzdHJpbmcsIGZsYXRCdXR0b25zOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoYnV0dG9uTmFtZSkge1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICByZXR1cm4gZmxhdEJ1dHRvbnMgPyAnb3Blbl9pbl9uZXcnIDogJ3BhZ2V2aWV3JztcclxuICAgICAgY2FzZSAnZWRpdCc6IHJldHVybiAnZWRpdCc7XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6IHJldHVybiAnZGVsZXRlJztcclxuICAgICAgY2FzZSAnY3JlYXRlJzogcmV0dXJuICdhZGQnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ21vcmVfaG9yaXonO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q3JlYXRlQnV0dG9uKGJ1dHRvbnM6IEJ1dHRvbltdKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBidXR0b25zPy5maW5kKGJ1dHRvbiA9PiBidXR0b24/Lm5hbWUgPT09ICdjcmVhdGUnKTtcclxuICB9XHJcblxyXG4gIGdldERpc3BsYXllZEJ1dHRvbnMoYnV0dG9uczogQnV0dG9uW10sIGlzU21hbGxTY3JlZW46IGJvb2xlYW4sIG1pbkJ1dHRvbnM/OiBzdHJpbmdbXSk6IEJ1dHRvbltdIHtcclxuICAgIGNvbnN0IG5vbkNyZWF0ZUJ1dHRvbnMgPSBidXR0b25zPy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT09ICdjcmVhdGUnICYmICF4LmluSGVhZGVyKTtcclxuXHJcbiAgICBpZiAoaXNTbWFsbFNjcmVlbikge1xyXG4gICAgICBpZiAobWluQnV0dG9ucykge1xyXG4gICAgICAgIHJldHVybiBub25DcmVhdGVCdXR0b25zPy5maWx0ZXIoeCA9PiBtaW5CdXR0b25zLmluY2x1ZGVzKHgubmFtZSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBub25DcmVhdGVCdXR0b25zPy5zbGljZSgwLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbm9uQ3JlYXRlQnV0dG9ucztcclxuICB9XHJcblxyXG4gIGdldEFjdGlvbnNXaWR0aChidXR0b25zOiBCdXR0b25bXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7YnV0dG9ucy5sZW5ndGggKiA0MCArIDIwfXB4YDtcclxuICB9XHJcbn1cclxuIl19
121
+ }], ctorParameters: function () { return [{ type: i1.AuthService }]; } });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvYnV0dG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUsxQyxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFJLENBQUM7SUFFakQsU0FBUyxDQUFDLE9BQWlCLEVBQUUsSUFBWTtRQUN2QyxPQUFPLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNyRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYyxFQUFFLEdBQVEsRUFBRSxNQUFtQjtRQU8vRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7WUFDOUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUk7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLEdBQVE7UUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7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QUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxGLElBQUksYUFBYSxFQUFFO1lBQ2pCLElBQUksVUFBVSxFQUFFO2dCQUNkLE9BQU8sZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNuRTtZQUNELE9BQU8sZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN0QztRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFpQjtRQUMvQixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7SUFDekMsQ0FBQzs7MEdBcklVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbiwgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSB9IGZyb20gJy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHsgfVxyXG5cclxuICBnZXRCdXR0b24oYnV0dG9uczogQnV0dG9uW10sIG5hbWU6IHN0cmluZyk6IEJ1dHRvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIGJ1dHRvbnM/LmZpbmQoeCA9PiB4Lm5hbWUgPT09IG5hbWUpIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Qcm9wZXJ0aWVzKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHtcclxuICAgIGNvbG9yOiBzdHJpbmcsXHJcbiAgICBpY29uOiBzdHJpbmcsXHJcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcclxuICAgIHZpc2libGU6IGJvb2xlYW4sXHJcbiAgICB0aXA6IHN0cmluZ1xyXG4gIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29sb3I6IHRoaXMuZ2V0QnV0dG9uQ29sb3IoYnV0dG9uLCByb3cpLFxyXG4gICAgICBpY29uOiB0aGlzLmdldEljb24oYnV0dG9uLCBjb25maWcpLFxyXG4gICAgICBkaXNhYmxlZDogdGhpcy50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpLFxyXG4gICAgICB2aXNpYmxlOiB0aGlzLnRlc3RWaXNpYmxlKGJ1dHRvbiwgcm93LCBjb25maWcpLFxyXG4gICAgICB0aXA6IGJ1dHRvbi50aXAgfHwgYnV0dG9uLm5hbWVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMudGVzdERpc2FibGVkKGJ1dHRvbiwgcm93KSkgcmV0dXJuICdsaWdodGdyYXknO1xyXG5cclxuICAgIGlmIChidXR0b24/LmNvbG9yKSByZXR1cm4gYnV0dG9uLmNvbG9yO1xyXG4gICAgaWYgKGJ1dHRvbi5pY29uPy5jb2xvcikgcmV0dXJuIGJ1dHRvbi5pY29uLmNvbG9yO1xyXG5cclxuICAgIGNvbnN0IGNvbG9yTWFwID0ge1xyXG4gICAgICAnZGVsZXRlJzogJyNGNDQzMzYnLFxyXG4gICAgICAnY3JlYXRlJzogJ2dyZWVuJ1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gY29sb3JNYXBbYnV0dG9uLm5hbWVdIHx8ICcjNDA1MEI1JztcclxuICB9XHJcblxyXG5cclxuXHJcbiAgaXNCdXR0b25WaXNpYmxlKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgaXNMb2FkQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGlmICghaXNMb2FkQ29tcGxldGUpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLnRlc3RWaXNpYmxlKGJ1dHRvbixyb3cpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGl0bGVBY3Rpb24obW9kZTogc3RyaW5nLCBidXR0b25zOiBCdXR0b25bXSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtb2RlTWFwID0ge1xyXG4gICAgICAndmlldyc6ICdWaWV3JyxcclxuICAgICAgJ2VkaXQnOiBidXR0b25zLmZpbmQoYiA9PiBiLm5hbWUgPT09ICdlZGl0Jyk/LmRpc3BsYXkgfHwgJ0VkaXQnLFxyXG4gICAgICAnY3JlYXRlJzogYnV0dG9ucy5maW5kKGIgPT4gYi5uYW1lID09PSAnY3JlYXRlJyk/LmRpc3BsYXkgfHwgJ0NyZWF0ZSdcclxuICAgIH07XHJcbiAgICByZXR1cm4gbW9kZU1hcFttb2RlXSB8fCAnJztcclxuICB9XHJcblxyXG4gIGlzVGFiVmlzaWJsZSh0YWJsZUNvbmZpZzogVGFibGVDb25maWcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0YWJsZUNvbmZpZy5oaWRlVGFiQ29uZGl0aW9uID8gIXRhYmxlQ29uZmlnLmhpZGVUYWJDb25kaXRpb24odGFibGVDb25maWcucGFyZW50RGF0YSkgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbihidXR0b246IEJ1dHRvbiwgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoYnV0dG9uLmljb24pIHtcclxuICAgICAgcmV0dXJuIGJ1dHRvbi5pY29uLm5hbWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0SWNvbihidXR0b24ubmFtZSwgY29uZmlnLmZsYXRCdXR0b25zKTtcclxuICB9XHJcblxyXG4gIHRlc3REaXNhYmxlZChidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICgoYnV0dG9uLm5hbWUgPT0gJ2VkaXQnIHx8IGJ1dHRvbi5uYW1lID09IFwiZGVsZXRlXCIpICYmIHJvdy5wZW5kaW5nQXBwcm92YWwpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGJ1dHRvbi5kaXNhYmxlZCA/IGJ1dHRvbi5kaXNhYmxlZChyb3cpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXN0VmlzaWJsZShidXR0b246IEJ1dHRvbiwgcm93OiBhbnksIGNvbmZpZz86IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKGJ1dHRvbi52aXNpYmxlICYmICFidXR0b24udmlzaWJsZShyb3cpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50Um9sZSA9IHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWU7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgYnV0dG9uIGhhcyBkZXRhaWxzQ29uZmlnIHdpdGggZm9ybSByZXN0cmljdGlvbnNcclxuICAgIGlmIChidXR0b24uZGV0YWlsc0NvbmZpZz8uZm9ybUNvbmZpZykge1xyXG4gICAgICBpZiAoIUNvcmUuY2hlY2tGb3JtQWNjZXNzKGJ1dHRvbi5kZXRhaWxzQ29uZmlnLmZvcm1Db25maWcsIGN1cnJlbnRSb2xlKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBjcmVhdGUvZWRpdC92aWV3IGJ1dHRvbnMsIGNoZWNrIHRhYmxlJ3MgZm9ybUNvbmZpZ1xyXG4gICAgaWYgKFsnY3JlYXRlJywgJ2VkaXQnLCAndmlldycsICdkZWxldGUnXS5pbmNsdWRlcyhidXR0b24ubmFtZSkgJiYgY29uZmlnPy5mb3JtQ29uZmlnKSB7XHJcbiAgICAgIGlmICghQ29yZS5jaGVja0Zvcm1BY2Nlc3MoY29uZmlnLmZvcm1Db25maWcsIGN1cnJlbnRSb2xlKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q29sb3IoYnV0dG9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoYnV0dG9uTmFtZSkge1xyXG4gICAgICBjYXNlICdkZWxldGUnOiByZXR1cm4gJyNGNDQzMzYnO1xyXG4gICAgICBjYXNlICdjcmVhdGUnOiByZXR1cm4gJ2dyZWVuJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICcjNDA1MEI1JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEljb24oYnV0dG9uTmFtZTogc3RyaW5nLCBmbGF0QnV0dG9uczogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbk5hbWUpIHtcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgcmV0dXJuIGZsYXRCdXR0b25zID8gJ29wZW5faW5fbmV3JyA6ICdwYWdldmlldyc7XHJcbiAgICAgIGNhc2UgJ2VkaXQnOiByZXR1cm4gJ2VkaXQnO1xyXG4gICAgICBjYXNlICdkZWxldGUnOiByZXR1cm4gJ2RlbGV0ZSc7XHJcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6IHJldHVybiAnYWRkJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdtb3JlX2hvcml6JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENyZWF0ZUJ1dHRvbihidXR0b25zOiBCdXR0b25bXSk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gYnV0dG9ucz8uZmluZChidXR0b24gPT4gYnV0dG9uPy5uYW1lID09PSAnY3JlYXRlJyk7XHJcbiAgfVxyXG5cclxuICBnZXREaXNwbGF5ZWRCdXR0b25zKGJ1dHRvbnM6IEJ1dHRvbltdLCBpc1NtYWxsU2NyZWVuOiBib29sZWFuLCBtaW5CdXR0b25zPzogc3RyaW5nW10pOiBCdXR0b25bXSB7XHJcbiAgICBjb25zdCBub25DcmVhdGVCdXR0b25zID0gYnV0dG9ucz8uZmlsdGVyKHggPT4geC5uYW1lICE9PSAnY3JlYXRlJyAmJiAheC5pbkhlYWRlcik7XHJcblxyXG4gICAgaWYgKGlzU21hbGxTY3JlZW4pIHtcclxuICAgICAgaWYgKG1pbkJ1dHRvbnMpIHtcclxuICAgICAgICByZXR1cm4gbm9uQ3JlYXRlQnV0dG9ucz8uZmlsdGVyKHggPT4gbWluQnV0dG9ucy5pbmNsdWRlcyh4Lm5hbWUpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbm9uQ3JlYXRlQnV0dG9ucz8uc2xpY2UoMCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5vbkNyZWF0ZUJ1dHRvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRBY3Rpb25zV2lkdGgoYnV0dG9uczogQnV0dG9uW10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2J1dHRvbnMubGVuZ3RoICogNDAgKyAyMH1weGA7XHJcbiAgfVxyXG59XHJcbiJdfQ==